← 목록
기타 2026-07-30 5KB 읽기 4분

작업6 — crowny-deacon 도구제작 래칫 상한 카운터 장부화

개요

집사회.한선의 미션당 도구제작 티켓 발행 상한(7건, _도구제작미션상한)이 서버 재기동을 넘어 지속되는지 검증하고, claim 핫패스에서의 중복 장부조회를 줄였다. 배경 의혹은 2026-07-29 문서(2026-07-29-집사회-티켓소화-2라운드-결함발견.md 44행): "T58 claim 시 쌍둥이 T97 발행 — 래칫 상한 카운터가 인메모리(부팅 시 0 리셋)로 의심".

확인된 사실

/Users/ef/crowny-deacon/한선씨/집사회.한선의 상한 판정 (_도구제작미션건수/구 _중복도구제작있나)은 조사 시점 기준 이미 장부 기반이었다 — 매 호출마다 미션티켓목록(미션ID)티켓목록()_PSV파일유니크최신(_티켓파일)을 거쳐 data/티켓.psv를 디스크에서 재파싱한다. 전역/캐시 변수에 카운트를 들고 있는 인메모리 카운터는 소스에 존재하지 않았다(server.js에도 대응 JS 레이어 없음, grep 0건). 2026-07-29 의혹 시점 이후 다른 세션 편집으로 이미 해소됐거나, 애초에 실제 원인이 다른 경로(예: 동시 claim 레이스)였을 가능성이 있다 — 이번 작업으로 재발 여부와 무관하게 설계를 장부기반으로 명시·강화했다.

수정 내용

_중복도구제작있나_도구제작미션건수_도구제작상태(미션ID, 새지시문) 하나로 병합했다 — 이전엔 두 함수가 각각 미션티켓목록()(=장부 전체 재파싱)을 호출해 claim 핫패스(대응 타/옴마다 도는 경로)에서 티켓.psv 재파싱이 2회 발생했다. 이제 1회 조회로 중복가드(동일 지시문 존재 여부)와 상한가드(도구제작 유형 카운트)를 동시에 계산해 반환([이미있음, 카운트]) — 파싱 비용 절반.

_도구제작미션상한 = 7 상수 자체는 불변, 판정 로직만 병합. 주석에 장부기반 설계 의도와 인메모리 캐시를 두지 않는다는 점을 명시했다(향후 편집자가 실수로 캐시를 넣지 않도록).

검증 (격리 사본, 라이브 data/·toau 무접촉)

사본 위치: /tmp 스크래치 디렉토리(작업6/), data/ 격리(라이브 경로와 분리), _미스로그경로도 격리 경로로 sed 치환.

  1. 컴파일: 서버.한선(정본 엔트리, 루트에서 가져오기 "한선씨/집사회.한선")
+ 3개 드라이버(시드7.한선/재기동8번째.한선/미달발행.한선) 모두 CROWNY_STRICT=1 hanseonc_high 0 경고 컴파일 성공.
  1. 핵심 시나리오(재기동 후 상한 차단):
- 프로세스A: 미션 M1 생성 + 도구제작 티켓 7건 시드(티켓생성 직접 호출). 프로세스 종료. - 프로세스B(별도 OS 프로세스=재기동 시뮬레이션): `_도구제작래칫시도(M1, .., "원지시8") 호출 → **BLOCKED_OK**(발행 거부, 반환 ""`). 발행 시도 후에도 data/티켓.psv 도구제작 건수는 7건 그대로(증가 없음) — 인메모리 카운터였다면 새 프로세스는 카운트 0에서 시작해 발행됐을 것.
  1. 회귀(상한 미달 시 정상 발행): 신규 미션(도구제작 0건)에서
_도구제작래칫시도 호출 → ISSUE_OK|T8(정상 발행) 확인.

전 과정 2>/dev/null(stderr 분리, 체계() 출력 오염 방지 가드레일 준수).

관련 파일

  • /Users/ef/crowny-deacon/한선씨/집사회.한선 (수정 — _도구제작상태 병합,
_도구제작래칫시도 갱신)
  • /Users/ef/crowny-deacon/한선씨/미션장부.한선 (읽기만, 미변경 — 미션티켓목록/
티켓목록이 이미 디스크 재파싱 기반임을 확인하는 근거)
  • 참고: /Users/ef/CrownyDoc/projects/2026-07-29-집사회-티켓소화-2라운드-결함발견.md

잔여 이슈

  • 2026-07-29 문서의 "T58→T97 쌍둥이" 재현 스크립트는 확보하지 못했다 — 만약
실제로 인메모리 경로가 있었다면 이번 조사 이전에 이미 다른 세션이 고쳤을 가능성이 있음(파일 mtime이 조사 당일 13:31, 그날 다른 v1.6/v1.7 편집들과 섞여 있어 이번 작업 이전 diff를 확보하지 못함 — 원인 파일 특정은 미완). 이번 작업은 "현재 설계가 재기동에도 견고함"을 실측으로 확인하고 성능을 다듬은 것으로, 원인 사후규명(post-mortem)은 잔여.
  • 동시 다중 claim(진짜 동시성 레이스)에 의한 상한 초과 가능성은 별도
이슈(락 없는 append-only 장부의 근본 한계, T27/T28 계열)로 이번 작업 범위 밖.