← 목록
기타 2026-06-13 3KB 읽기 2분

달란트 시즌1 체인 결선 자동화 — 원장.wal mtime 게이트 데몬

개요

체인결선(통합 op-log → 머클 봉인 영속 체인)을 무인 영속화. 결정적 출력이라 무변화 시 재생성이 낭비이므로, 원장.wal mtime 변화 시에만 체인결선을 재실행하는 mtime-게이트 데몬 결선자동화.한선 + 부팅영속 LaunchAgent. 모델분업: 한선씨 코딩=소넷, 적대검증·근본수정=오푸스.

결선자동화.한선 동작

  • 60초 주기로 원장.wal mtime 폴링 (stat -f '%m')
  • mtime 변화(또는 첫 실행) 감지 시에만 체인결선.toau 동기 실행
  • 성공("앵커 무결성 9/9" + "모든 잔액 검증 통과") 시 마지막mtime 갱신 → 다음 주기 스킵
  • 실패 시 마지막mtime 미갱신 → 다음 주기 자동 재시도 (자가치유)
  • 로그 4000자 초과 시 회전

적대검증 (오푸스 — 독립 재현)

  • mtime 게이트 로직 실재: 소스 line83 만약 (현재mt != 이전mt), line88 성공 시에만 마지막mtime쓰기
  • 첫 실행: 기동 직후 [T] 결선 성공, 통합체인.chain 갱신
  • mtime 트리거: touch 원장.wal → 다음 주기 [T] 1건 추가 (변화 감지 동작)
  • 무변화 스킵: 한 주기 경과 후 [T] 불변(1 유지), 로그 무증가 — 게이트 정상
  • WAL 내용 무결: sha256 4d4be283… 작업 전후 동일 (touch는 mtime만, 내용 불변)
  • 데몬 단일 생존

근본 수정 (적대검증 중 발견)

  • 버그: wal_mtime()의 부분(m, 0, 12) — 한선씨 부분의 3번째 인자는 끝 인덱스(exclusive)이지 길이가 아님. mtime "1781338212\n"(11자)에서 12는 길이 초과라 개행 미제거 → mtime 문자열에 \n 혼입(로그 메시지 2줄 분리).
  • 수정: 부분(m, 0, 글자수(m) - 1) → 후행 개행만 정확 제거. 재검증: 로그 한 줄 정결, 상태파일 10바이트 순수 숫자.
  • 이 함정은 가드레일 템플릿(문자열/수치 함정)에 이미 수록됨.

관련 파일

  • /Users/ef/crowny-data/services/결선자동화.한선 (신설)
  • ~/Library/LaunchAgents/com.crowny.chain-relink.plist (KeepAlive, 사용자가 launchctl load -w 로 활성)
  • 의존: 체인결선.toau, 원장.wal(읽기전용)

잔여 / 다음 스텝

  • LaunchAgent는 생성만 — 부팅 자동기동은 사용자가 launchctl load -w ~/Library/LaunchAgents/com.crowny.chain-relink.plist로 활성.
  • 라이브 :9729 코인서버를 통합체인.chain에 결선하는 작업은 여전히 게이트웨이/체인 세션 영역(미접촉).