Files
readme-haness/runs/company-haness/20260720-rewrite/review-findings.yaml
T

889 lines
47 KiB
YAML

schema-version: 1
verdict: NEEDS_FIX
score: 85
# ATTESTATION GAP — 이 리뷰를 수행한 실행 환경에는 셸이 없어(Read/Grep/Glob/Write만 가용)
# content-hash 값을 계산할 수 없었다. 64자리 hex를 임의로 채우는 것은 증거 날조이므로
# 모든 content-hash를 검증기가 반드시 거부하는 자리표시자로 남긴다.
# 드라이버는 아래 좌표(artifact · line-start · line-end)로 해시를 채운 뒤 재검증해야 한다.
# 좌표와 관찰 내용 자체는 실제 파일을 읽고 확인한 것이다.
scores:
project-specificity:
score: 5
evidence:
- artifact: README.candidate.md
section-id: overview
line-start: 6
line-end: 10
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
첫 세 문단이 다른 저장소에 재사용될 수 없다. org-os/ 정본, 개발과 GTM 동시 적용,
.claude 단일 어댑터라는 구분자가 즉시 나온다(F-IDENTITY-CORE,
F-IDENTITY-RUNTIME-COUPLING).
- artifact: README.candidate.md
section-id: repo-map-claude
line-start: 343
line-end: 359
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
수치가 전부 이 트리의 실측값이고 재추출로 갱신됐다. 카드 75개(43+19+10+3),
resolver·router 0개, 훅 40개, 테스트 32개가 F-ARCH-AGENT-CARD-COMPOSITION과
F-LIMIT-CONCURRENT-REFACTOR의 13:36 관측과 일치한다.
- artifact: README.candidate.md
section-id: limitations
line-start: 591
line-end: 596
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
한계가 일반론이 아니라 이 트리의 고유 상태다. 추적 카드 72 대 워킹 트리 75,
미커밋 fam-*.md 26개, 미배선 신규 훅, doctor 14번째 섹션의 성격까지 짚는다.
해소된 CLAUDE.md 73-75 드리프트를 F-LIMIT-DOC-DRIFT의 RESOLVED 처리에 맞춰
본문에서 뺀 판단도 옳다.
reader-journey:
score: 4
evidence:
- artifact: README.candidate.md
section-id: overview
line-start: 18
line-end: 18
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
R-006이 해소됐다. 개요의 provenance가 두 문단에서 한 문장으로 줄었고 HEAD 해시와
변경 항목 수는 검증 절 L442로 옮겨졌다. readme-outline overview의 '범위 고지를
개요 단계에서 한 번 선언' 요구와 이제 일치한다.
- artifact: README.candidate.md
section-id: verification
line-start: 421
line-end: 518
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
감점 근거는 무게 이동이다. 검증 장치가 4개 하위 절 약 100행으로 문서에서 가장 두꺼운
블록이 됐고, 등급 어휘는 L39 약속 · L426 표 · L500-518 정의 세 곳에 흩어져 있다.
5분 독자가 '이걸 돌려도 되나'를 판정하려면 세 곳을 왕복해야 한다.
- artifact: README.candidate.md
section-id: first-command
line-start: 89
line-end: 95
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
첫 명령이 '현재 트리의 판정은 확인되지 않았습니다'로 끝난다. 정직하지만 첫 실행
독자가 가져갈 현재 성공 신호는 exit 0과 verdict OK뿐이고, 그 점을 문장으로
정리해 주지 않는다.
technical-explanation:
score: 4
evidence:
- artifact: README.candidate.md
section-id: workflows
line-start: 122
line-end: 126
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
R-001의 근본 원인이 해소됐다. 과잉 일반화된 옛 C-HUMAN-POINTS가 plan별 토큰 지도로
교체돼 human-gate(cascade·wave), human-acceptance-receipt-present(venture-bootstrap),
human- 리터럴 없음(light·design-direction)을 구분한다. F-WORKFLOW-HUMAN-GATE-MAP과
1대1로 대응한다.
- artifact: README.candidate.md
section-id: workflow-wave-light
line-start: 245
line-end: 251
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
네 문장이 게이트 기제를 단계별로 분해한다. wave·light가 verification에서 cascade와
같은 게이트를 쓴다는 점, wave.acceptance의 exit gate 문자열이 cascade와 동일하다는 점,
light에는 released 자리가 없다는 점, 빈 exit gate가 종단 표시라는 점이 각각 별도
claim으로 분리됐다. 마지막 C-TERMINAL-SHAPE가 '빈 게이트=통제 없음' 오독을 차단한다.
- artifact: README.candidate.md
section-id: limitations
line-start: 595
line-end: 595
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
'점검 영역이 14개라는 사실이 14개 영역의 런타임 강제를 뜻하지는 않는다'는 문장은
점검 대상과 강제 배선을 구분한 드문 서술이다. F-VERIFY-DOCTOR-EXECUTED의
section-14-detail caveat를 정확히 옮겼다.
- artifact: README.candidate.md
section-id: verification
line-start: 426
line-end: 434
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
감점 근거는 새 등급 체계가 자기 정의를 어긴 점이다. L504-508이 등급은 셋이라고
선언했는데 표의 '검증 수준' 칸은 네 번째 값 '현재 트리에서 실행하지 않음'을 쓴다(R-101).
task-usability:
score: 4
evidence:
- artifact: README.candidate.md
section-id: prerequisites
line-start: 44
line-end: 53
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
전제조건 표가 최소 버전·확인된 버전·없을 때의 결과를 함께 줘서 설치 전에 자기 환경을
판정할 수 있다(F-PREREQ-TOOLS). 리팩터의 영향을 받지 않은 부분이고 그대로 유지됐다.
- artifact: README.candidate.md
section-id: verify-commands
line-start: 467
line-end: 475
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
13:36에 다시 돌린 네 명령은 명령·출력 문자열·종료 코드·기준 시점을 모두 갖췄다.
gen_agents --check가 확인하지 않는 범위까지 적어(L471) 도구의 한계를 함께 준다.
- artifact: README.candidate.md
section-id: first-command
line-start: 91
line-end: 95
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
감점 근거는 첫 명령의 판정 기준이다. L39가 '명령마다 검증 수준을 함께 적었습니다'라고
약속하지만 이 명령에는 등급 표기가 없고, 제시된 출력 '35 OK'는 13개 섹션 시절의
것이다(R-101, R-105).
prose-clarity:
score: 4
evidence:
- artifact: README.candidate.md
section-id: workflow-wave-light
line-start: 231
line-end: 231
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
R-003이 해소됐다. 절 제목의 plan 이름이 인라인 코드로 바뀌어 KO-ENGLISH-HEADING
경고 2건(옛 P-014·P-015)이 prose-report.json에서 사라졌다. 경고 총계는 53에서 44로
줄었고 errors는 0이다.
- artifact: README.candidate.md
section-id: operating-model
line-start: 25
line-end: 30
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
R-002의 핵심 지점이 반영됐다. 운영 원리 6항의 계약 키가 인라인 코드로 바뀌었고,
일반명사였던 caller는 '호출자'로, defense-in-depth는 '심층 방어(defense-in-depth)'로
정리돼 식별자와 개념어가 구분된다.
- artifact: README.candidate.md
section-id: verify-commands
line-start: 463
line-end: 463
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
감점 근거는 잔여 밀도다. R-002가 지목한 두 곳만 고쳐 이 문장이 문서에서 가장 조밀한
맨 영문 줄로 남았다. KO-UNMARKED-ENGLISH-DENSITY P-026이 한 문장에서 10개 토큰을
집계한다(R-108).
- artifact: README.candidate.md
section-id: bench-cascade
line-start: 577
line-end: 577
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
KO-VAGUE-BENEFIT P-036을 전 심사가 오탐으로 판정하고 그대로 뒀는데, 절반만 맞다.
두 번째 문장('통계적 우월성을 확정하지 않습니다')은 구체적 부정 단서가 맞지만 앞의
'설계 문서가 붙인 단서도 분명합니다'는 예고 문장이다(R-110).
visual-judgment:
score: 4
evidence:
- artifact: README.candidate.md
section-id: workflows
line-start: 146
line-end: 155
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
R-001의 시각 결함이 해소됐다. wave의 acceptance -> released에 cascade와 같은 육각형
human-gate 노드(wg)가 놓여 두 경로가 같은 통제를 받는다는 점이 대비 없이 읽힌다.
F-WORKFLOW-WAVE-LIGHT의 wave-vs-cascade-acceptance와 일치한다.
- artifact: README.candidate.md
section-id: workflows
line-start: 157
line-end: 162
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
light의 '게이트 없음' 오독은 재배치가 아니라 실제로 닫혔다. l3 -> l4 간선이
cascade·wave와 같은 quality-gate-passed 라벨을 달았고, 종단 노드가 자기 사유
'terminal-stage · released 전이 없음'을 스스로 적는다. 도형도 released 종단과 같은
stadium이라 C-TERMINAL-SHAPE의 규칙성과 어긋나지 않는다.
- artifact: README.candidate.md
section-id: workflows
line-start: 164
line-end: 174
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
venture-decision에 human-acceptance-receipt-present를 자기 리터럴로 표기한 판단이
옳다. 승인 게이트는 육각형(cg·wg·vg), 사람 입력 선행조건은 평행사변형(vh)으로
도형이 구분되므로 classDef human이 같은 색을 줘도 색맹 독자가 종류를 구별할 수 있다.
- artifact: README.candidate.md
section-id: workflows
line-start: 140
line-end: 154
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
감점 근거는 R-001과 같은 모양의 잔여 비대칭이다. cascade에만 quality-gate-failed
재작업 점선이 있고 wave·light에는 실패 경로가 없다. 근본 원인도 같다 —
F-WORKFLOW-CASCADE와 F-WORKFLOW-DESIGN-DIRECTION에는 rework-transition 항목이
있는데 F-WORKFLOW-WAVE-LIGHT에는 없다(R-109).
hard-gates:
passed: true
failures: []
reader-simulations:
30-seconds:
outcome: PASS
evidence:
- artifact: README.candidate.md
section-id: overview
line-start: 6
line-end: 10
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
무엇인가·왜 존재하는가 — '회사 운영을 AI 에이전트에게 분담시키는 파일 기반 운영체계'와
계약을 파일로 고정하는 목적, 개발과 비즈니스를 같은 계약에서 다룬다는 범위를 세 문단에서
얻는다.
- artifact: README.candidate.md
section-id: overview
line-start: 12
line-end: 16
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
누구에게 필요한가 — 독자 표가 세 유형과 각자 이 문서에서 가져갈 결과를 직접 적는다.
추론이 필요 없다.
- artifact: README.candidate.md
section-id: overview
line-start: 18
line-end: 18
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
범위 고지가 한 문장으로 줄어 30초 독자의 판단을 더 이상 지연시키지 않는다. 전 심사
R-006의 감점 사유가 사라졌다.
5-minutes:
outcome: PASS
evidence:
- artifact: README.candidate.md
section-id: operating-model
line-start: 23
line-end: 34
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
핵심 가치 — 계약 우선, 호출자 불신, 증거 receipt 대조, 2중 도구 경계를 기제 수준에서
파악한다. 도입부 한 문장이 '계약 파일이 선언한 규칙이며 런타임 강제를 실행해 확인하지
않았다'고 밝혀 전 심사 R-004가 해소됐다.
- artifact: README.candidate.md
section-id: quick-start
line-start: 39
line-end: 103
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
실행 방법 — 설치·workspace·배선 확인·첫 명령이 끊김 없이 이어진다. 다만 L39가 약속한
명령별 검증 수준 표기가 L92 doctor 명령에는 없다(R-101).
- artifact: README.candidate.md
section-id: workflows
line-start: 108
line-end: 199
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
구조 — 표와 다이어그램이 다섯 plan을 단계·종단 상태·사람 승인 지점으로 비교시킨다.
wave를 고른 독자가 '릴리스에 사람 승인이 필요 없다'는 잘못된 결론을 얻던 전 심사의
5분 시뮬레이션 결함이 제거됐다.
- artifact: README.candidate.md
section-id: limitations
line-start: 591
line-end: 604
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
한계 — 14개 항목이 근거와 영향을 짝지어 준다. 미검증 범위(스위트 통과 여부 UNKNOWN)와
미커밋 삭제가 분리돼 있다.
contributor:
outcome: PASS
evidence:
- artifact: README.candidate.md
section-id: contributing
line-start: 609
line-end: 616
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
코드 추가 위치와 테스트 방법 — '정본을 먼저 고칩니다'가 role-registry와 06-agent-work를
지목하고, 재생성·재검증 명령이 순서대로 주어진다. L355가 생성물 직접 수정을 금지한다.
- artifact: README.candidate.md
section-id: reference
line-start: 627
line-end: 641
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
상세 문서 이동 — 정본 파일 14개와 설계 이력 링크가 본문 복제 없이 연결된다.
verification.json이 path 18/18, anchor 1/1 해결을 확인했다.
- artifact: README.candidate.md
section-id: contributing
line-start: 613
line-end: 620
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
체크리스트 3항은 충족하나 조건부다. HEAD를 clone한 기여자가 이 절차를 그대로 따르면
gen_agents.py가 문서와 다른 카드 집합을 만든다. 이 오해는 R-102로 별도 기록한다.
findings:
- id: R-101
severity: major
category: verification-honesty
subject: verification-level-grading
section: verification
message: >-
등급(grade)과 기준 시점(currency)을 두 축으로 나눈 재구성은 방향이 옳지만, 그 축을
싣고 있는 표가 자기 정의를 어긴다. L502는 '이 문서는 검증 결과를 세 등급으로 나눠
표기합니다'라고 선언하고 L504-508이 세 등급을 정의한다. 그런데 L426 표의 '검증 수준'
칸은 네 번째 값 '현재 트리에서 실행하지 않음'을 쓴다. 이것은 등급이 아니라 기준 시점
진술이고, 바로 옆에 기준 시점 칸이 따로 있는데도 그 칸에는 '—'가 들어간다. 그 결과
run_all.py와 doctor.py 행은 등급도 시점도 잃는다. 두 명령은 실제로 12:03에 실행됐으므로
이 모델에서 정확한 표기는 등급 '이번 분석에서 실행한 결과' · 기준 시점 '12:03(무효)'이며,
그 정보는 표 밖 L436에만 있다. 분리한 두 축을 정작 두 축이 필요한 행에서 합쳐 버린 셈이다.
같은 결함이 약속 층위에서도 반복된다. L39는 '명령마다 검증 수준을 함께 적었습니다',
L518은 '앞의 절에 나온 명령에도 같은 기준으로 등급과 기준 시점을 붙였습니다'라고 하지만,
L92 doctor 명령과 L450 run_all.py 명령에는 등급 표기가 없다. pip install(L65)과 재생성
명령(L618)에만 '(검증 수준: ...)'이 붙어 있다. readme-outline의 quick-start
content-requirements '각 명령의 검증 수준을 quick-start 안에서 과장 없이 표기'와
verify-levels의 '등급 표기를 다른 섹션의 명령에도 일관 적용한다는 약속'이 모두 미충족이다.
수정은 새 사실 없이 가능하다. 표의 '검증 수준' 칸을 세 등급으로만 채우고 무효 사실은
기준 시점 칸에 '12:03 — 현재 트리 아님'으로 옮긴 뒤, L92와 L450에도 같은 표기를 붙이면
된다.
evidence:
- artifact: README.candidate.md
section-id: verification
line-start: 432
line-end: 433
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
두 행의 '검증 수준' 칸이 '현재 트리에서 실행하지 않음', 기준 시점 칸이 '—'다.
'확인된 신호' 칸도 '현재 통과 여부 미확인'이어서 세 칸이 같은 말을 반복하고
F-VERIFY-SUITE-EXECUTED가 보유한 12:03 결과는 표에 남지 않는다.
- artifact: README.candidate.md
section-id: verify-levels
line-start: 502
line-end: 508
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
등급 어휘를 세 개로 못박은 정의표. 표에 쓰인 네 번째 값은 여기에 없다.
- artifact: README.candidate.md
section-id: quick-start
line-start: 39
line-end: 39
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
'명령마다 검증 수준을 함께 적었습니다'라는 약속. 같은 절 L92 명령에는 표기가 없다.
- artifact: README.candidate.md
section-id: verify-levels
line-start: 518
line-end: 518
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
'앞의 절에 나온 명령에도 같은 기준으로 등급과 기준 시점을 붙였습니다'는 진술이
L92·L450에서 사실이 아니다.
route-to: README_DRAFTED
status: open
- id: R-102
severity: major
category: verification-honesty
subject: head-clone-divergence
section: contributing
message: >-
미커밋 상태에 대한 고지가 '파일 개수'까지만 도달하고 '명령의 동작'에는 도달하지 않는다.
L592-593은 추적 카드 72 대 워킹 트리 75, 삭제된 fam-*.md 26개를 밝히고 'clone한 독자는
이 문서가 설명하는 것과 다른 저장소를 받습니다'라고까지 적는다. 여기까지는 정직하다.
문제는 기여 절차다. L609-616은 HEAD를 clone한 기여자에게 gen_agents.py 재생성과
run_all.py 재검증을 그대로 지시하는데, 이 재작성이 근거로 삼은 사실에 따르면 HEAD의
gen_agents.py는 워킹 트리의 것과 다른 프로그램이다. F-LIMIT-CONCURRENT-REFACTOR는
gen_agents.py가 831행에서 537행으로 줄고 resolver/router/fam 카운터 코드가 제거됐다고
기록하고, F-LIMIT-UNCOMMITTED-REGENERATION은 'gen_agents는 이제 75개 concrete 카드만
생성하며 router/resolver/family 카드를 생성하지 않는다'고 기록한다. 즉 HEAD를 clone해
L614를 실행한 기여자는 문서가 말한 75장이 아니라 다른 카드 집합을 얻고, 이어지는
gen_agents.py --check도 문서에 실린 '75 concrete agents (profiles=75)'와 다른 값을 낸다.
L357·L359의 카드 구성과 'resolver·router 각각 0개'도 그 독자에게는 성립하지 않는다.
새 사실은 필요 없다. 이미 있는 두 사실을 근거로, 한계 절이나 기여 절에 '이 변경은 파일
삭제만이 아니라 생성기 자체의 동작 변경을 포함하므로, HEAD를 clone한 뒤 재생성하면 이
문서의 카드 수치가 재현되지 않습니다' 한 문장을 더하면 닫힌다.
evidence:
- artifact: README.candidate.md
section-id: contributing
line-start: 613
line-end: 618
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
재생성·재검증 명령 블록. HEAD clone 독자에게 이 절차가 문서와 다른 결과를 낸다는
단서가 없다.
- artifact: README.candidate.md
section-id: limitations
line-start: 592
line-end: 593
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
미커밋 고지가 카드 개수와 삭제 파일에만 걸려 있다. 생성기 동작 차이는 언급되지 않는다.
- artifact: README.candidate.md
section-id: repo-map-claude
line-start: 357
line-end: 359
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
카드 구성 43/19/10/3과 'resolver·router 0개'는 워킹 트리 전용 값인데 절 도입부
L343의 13:36 고지 범위가 표까지로 읽히기 쉬워 구조적 속성처럼 보인다.
route-to: README_DRAFTED
status: open
- id: R-103
severity: major
category: claim-integrity
subject: commands-block-currency
section: verification
message: >-
repository-facts.yaml의 commands 블록이 재추출을 따라가지 못해 같은 파일 안에서 서로
모순된다. CMD-3에는 이번 재작업에서 '그 결과(35 OK)는 SUPERSEDED다 ... 현재 verdict는
확인되지 않았다'는 무효 표시가 정확히 들어갔다. 그런데 같은 성격의 나머지 세 항목은
그대로다. CMD-6의 limitations는 'ad-hoc 실행한 결과는 F-VERIFY-GENAGENTS-EXECUTED에
기록됨(exit 0, 101 agents)'이라고 적는데, 그 F-VERIFY-GENAGENTS-EXECUTED는 이제
'75 concrete agents ... (profiles=75)'를 기록한다. 참조와 피참조가 정면으로 어긋난다.
CMD-2는 'exit 0, 34/34 green'을, CMD-8은 'run_all.py 전체 실행에는 포함됐고 green이었음'을
무효 표시 없이 단정하지만 F-VERIFY-SUITE-EXECUTED의 current-pass-state는 UNKNOWN이다.
README 본문은 이 오염을 물려받지 않았다 — L469가 75와 101을 시점과 함께 정확히 구분한다.
그래서 독자 피해는 없고 심각도를 critical로 올리지 않는다. 그러나 commands 블록은
claim-map이 참조하는 사실 원본이자 이후 refresh·audit이 읽는 입력이므로, 여기 남은
'101 agents'와 '34/34 green'은 다음 실행에서 되살아날 수 있는 값이다. 이번 수정이
한 곳(CMD-3)에만 적용되고 같은 종류의 나머지에 적용되지 않았다는 점 자체가 신호다.
evidence:
- artifact: repository-facts.yaml
section-id: commands
line-start: 1547
line-end: 1557
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
CMD-6이 '(exit 0, 101 agents)'로 F-VERIFY-GENAGENTS-EXECUTED를 인용하지만 그 사실의
stdout은 '75 concrete agents ... (profiles=75)'다.
- artifact: repository-facts.yaml
section-id: commands
line-start: 1498
line-end: 1508
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
CMD-2가 'exit 0, 34/34 green'을 무효 표시 없이 단정한다. 대응 사실의
current-pass-state는 UNKNOWN이다.
- artifact: repository-facts.yaml
section-id: commands
line-start: 1510
line-end: 1521
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
대조 근거 — CMD-3에는 SUPERSEDED 표시가 정확히 들어갔다. 같은 처리가 CMD-2·6·8에는
적용되지 않았다.
- artifact: repository-facts.yaml
section-id: commands
line-start: 1569
line-end: 1577
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
CMD-8이 'run_all.py 전체 실행에는 포함됐고 green이었음'이라고 적어 무효화된 실행을
현재 상태처럼 서술한다.
route-to: FACTS_EXTRACTED
status: open
- id: R-104
severity: minor
category: claim-integrity
subject: new-hook-module-count
section: limitations
message: >-
L594의 '최상위 hook에 새 모듈 네 개가 나타났습니다'는 사실과 어긋난다.
F-LIMIT-CONCURRENT-REFACTOR의 new-hook-modules는 usage_observer.py를 포함해 다섯 개이며,
그중 네 개가 settings.json에 배선되지 않았다. 문장이 뒤에 네 개만 나열하므로 독자는
'새로 나타난 모듈이 넷'으로 읽는데, 같은 문서 L373은 usage_observer.py가 13:36에 새로
배선됐다고 적는다. 두 문장을 합치면 새 모듈은 다섯이다. 정확한 표기는 '새 모듈 다섯 개
가운데 네 개는 배선돼 있지 않습니다'이며 새 사실이 필요 없다. 주목할 점은 대응 claim
C-LIM-UNWIRED-HOOKS의 statement가 이 첫 문장을 제외하고 두 번째 문장만 담고 있다는
것이다. 수치를 담은 문장이 claim 추적 밖에 있어 검증 대상이 되지 못했다(R-106과 같은 패턴).
evidence:
- artifact: README.candidate.md
section-id: limitations
line-start: 594
line-end: 594
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
'새 모듈 네 개가 나타났습니다' — F-LIMIT-CONCURRENT-REFACTOR는 다섯 개를 기록한다.
- artifact: README.candidate.md
section-id: repo-map-claude
line-start: 373
line-end: 373
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
같은 문서가 다섯 번째 신규 모듈 usage_observer.py의 신규 배선을 별도로 서술한다.
- artifact: claim-map.yaml
section-id: limitations
line-start: 936
line-end: 941
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
C-LIM-UNWIRED-HOOKS의 statement가 '네 개' 문장을 제외해 부정확한 부분이 추적 밖에 있다.
route-to: README_DRAFTED
status: open
- id: R-105
severity: minor
category: verification-honesty
subject: doctor-section-count
section: first-command
message: >-
L89는 doctor.py가 14개 영역을 점검한다고 현재 값으로 적고, 여섯 줄 뒤 L95는 12:03 실행의
'35 OK · 0 WARN · 0 FAIL'을 제시한다. 그런데 F-VERIFY-DOCTOR-EXECUTED에 따르면 그 35 OK를
낸 실행 시점의 섹션 수는 13이고(section-count-historical), 14는 재추출 시점에 소스에서
정적으로 확인한 현재 값이다(section-count-currency: CURRENT). 즉 인접한 두 수치가 서로
다른 트리에서 왔는데 14 쪽에는 시점 표기가 없다. 문서가 '현재 트리의 판정은 확인되지
않았습니다'로 보정하므로 오독의 폭은 크지 않지만, 첫 명령을 실행한 독자가 자기 출력의
항목 수를 35와 대조하게 되는 자리다. 14에 시점을 붙이거나, 섹션 14가 12:03 이후 추가됐다는
한 구절(F-VERIFY-DOCTOR-EXECUTED의 section-14-detail.added-by에 이미 있다)을 덧붙이면
해소된다.
evidence:
- artifact: README.candidate.md
section-id: first-command
line-start: 89
line-end: 89
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
'14개 영역'에 기준 시점 표기가 없다. 이 값은 13:36 정적 확인값이다.
- artifact: README.candidate.md
section-id: first-command
line-start: 95
line-end: 95
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
'35 OK · 0 WARN · 0 FAIL'은 섹션이 13개이던 12:03 실행의 출력이다. 두 수치가 같은
트리에서 온 것처럼 인접해 있다.
route-to: README_DRAFTED
status: open
- id: R-106
severity: minor
category: claim-integrity
subject: claim-statement-drift
section: operating-model
message: >-
대규모 수정 과정에서 claim statement가 README 문장보다 좁아진 사례가 반복된다. 세 곳에서
claim-id가 붙은 단락의 첫 문장 또는 둘째 문장이 claim statement에 포함되지 않았고,
공교롭게 그 빠진 문장이 수치를 담은 쪽인 경우가 있다. (1) L23은 '이 하네스의 운영 원리는
여섯 가지입니다'로 시작하지만 C-RULES-DECLARED의 statement는 두 번째 문장부터 시작한다.
(2) L591은 '12:03과 13:36 두 시점의 추출값이 달랐고, 13:36 이후에도 값이 다시 달라졌을 수
있습니다'라는 둘째 문장을 갖는데 C-LIM-CONCURRENT의 statement는 첫 문장뿐이다.
(3) L594는 R-104가 지적한 '네 개' 문장을 갖는데 C-LIM-UNWIRED-HOOKS의 statement에는 없다.
전 심사 R-007이 요구한 claim-id 부착 자체는 이행됐고(L23의 비교 프레이밍 제거, L361
C-HOOK-EVENTS 신설) 이 항목은 그보다 좁은 잔여 문제다. claim statement가 실제 README
문장과 1대1이 아니면 다음 refresh에서 추적 밖 문장이 소리 없이 바뀔 수 있다.
evidence:
- artifact: claim-map.yaml
section-id: operating-model
line-start: 30
line-end: 35
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
C-RULES-DECLARED statement가 README L23의 첫 문장 '이 하네스의 운영 원리는 여섯
가지입니다'를 포함하지 않는다.
- artifact: claim-map.yaml
section-id: limitations
line-start: 918
line-end: 923
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
C-LIM-CONCURRENT statement가 README L591의 둘째 문장(두 추출 시점과 그 이후 변동
가능성)을 담지 않는다.
- artifact: README.candidate.md
section-id: operating-model
line-start: 23
line-end: 23
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
한 줄에 두 문장이 있고 claim-id는 하나다. 덧붙여 '여섯 가지'가 인접 두 문장에서
반복돼 정직성 문장이 길어진 만큼 읽기 부담이 늘었다.
route-to: README_DRAFTED
status: open
- id: R-107
severity: minor
category: prose-clarity
rule-id: KO-UNMARKED-ENGLISH-DENSITY
subject: worker
section: repo-map-claude
message: >-
Writer의 반론을 인정한다. 맨 명사 worker를 인라인 코드로 감싸지 않은 판단은 옳다.
gen_agents.py의 리터럴 키는 fan-out-workers처럼 복합어이고 worker 단독은 식별자가
아니므로, 코드 표기는 존재하지 않는 식별자를 존재한다고 주장하는 셈이 된다.
korean-reader-prose.md의 인라인 코드 규칙은 '파일·모듈·API·상태 값·제품명'을 대상으로
하므로 일반명사에는 적용되지 않는다. P-019는 이 지점에서 오탐이다.
다만 같은 논리가 같은 문장의 나머지에도 적용된다. `collapse concrete`, `direct
single-member`, `synthesis lead`, 그리고 L359의 `family resolver`는 모두 공백으로 이어
쓴 형태이고, F-ARCH-AGENT-CARD-COMPOSITION의 실제 키는
collapse-concrete-workers·direct-single-member-workers·synthesis-leads·family-resolvers로
하이픈 연결이다. 즉 이들도 리터럴이 아닌데 코드로 표기돼 있어 Writer 자신의 기준이 한
문장 안에서 갈린다. 선택지는 둘이다. 하이픈 리터럴로 통일하거나(`fan-out`,
`collapse-concrete`, `direct-single-member`, `synthesis-lead`), 이 자리를 카드 종류를
가리키는 한국어 서술로 바꾸고 코드 표기를 걷어내는 것이다. 어느 쪽이든 새 사실이 필요 없다.
evidence:
- artifact: README.candidate.md
section-id: repo-map-claude
line-start: 357
line-end: 357
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
한 문장 안에서 공백형 다어절 3개는 코드 표기, 맨 명사 worker는 비표기다.
prose-report P-019가 worker 3회를 집계한다.
- artifact: README.candidate.md
section-id: repo-map-claude
line-start: 359
line-end: 359
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
`family resolver`도 공백형이다. 사실의 키는 family-resolvers다.
route-to: README_DRAFTED
status: open
- id: R-108
severity: minor
category: prose-clarity
rule-id: KO-UNMARKED-ENGLISH-DENSITY
section: verify-commands
message: >-
R-002가 지목한 두 위치(운영 원리 6항, 카드 구성 문장)는 고쳐졌으나 그 지적은 위치가
아니라 원칙이었다. 원칙을 문서 전체에 적용하지 않아 L463이 이제 문서에서 가장 조밀한
맨 영문 문장으로 남았다. P-026이 한 문장에서 settings, json, workspace, agent, SSOT,
append-only, JSONL, compiled, artifact, registry 열 개 토큰을 집계한다. 이 가운데
settings.json·SSOT·JSONL은 파일명·약어라 인라인 코드가 정보를 늘리고, compiled artifact
registry는 앞서 L336에서 이미 설명한 대상이므로 그 표기를 재사용하면 된다. 나머지 잔여
경고 대부분은 고유명사이거나 이미 코드 표기된 항목을 토크나이저가 재집계한 것으로,
추가 조치가 필요 없다.
evidence:
- artifact: README.candidate.md
section-id: verify-commands
line-start: 463
line-end: 463
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
KO-UNMARKED-ENGLISH-DENSITY P-026 — 한 문장 10개 토큰. R-002 수정 범위 밖에 있었다.
route-to: README_DRAFTED
status: open
- id: R-109
severity: minor
category: architecture-mismatch
subject: wave-light-rework-transitions
section: workflows
message: >-
R-001을 낳은 추출 공백이 인접한 축에 그대로 남아 있다. F-WORKFLOW-CASCADE에는
rework-transition('verification -> build, quality-gate-failed')이 있고
F-WORKFLOW-DESIGN-DIRECTION에는 rework-transitions 두 개가 있는데,
F-WORKFLOW-WAVE-LIGHT에는 재작업·실패 전이 항목 자체가 없다. 그 결과 다이어그램은
cascade에만 quality-gate-failed 점선을 그리고 wave·light에는 실패 경로를 그리지 않는다.
이것은 R-001과 같은 모양의 구조다 — 나란히 놓인 경로에서 한쪽에만 그린 간선은 다른 쪽에
그 전이가 없다는 적극적 암시로 읽힌다. 다만 R-001과 달리 본문이 wave·light의 실패 경로를
단정하지 않고, 두 경로 모두 verification 게이트를 공유한다는 사실은 L245가 명시하므로
독자가 얻는 오해의 폭이 작다. 그래서 critical이 아니라 minor로 기록한다. 조치는
FACTS_EXTRACTED에서 wave·light의 side-transition과 재작업 전이 유무를 정본에서 확인해
확정하는 것이다. 확인 전까지는 '있다'로도 '없다'로도 읽히지 않게 두어야 한다. 심사자
관찰이며 새 사실 정의가 아니다.
evidence:
- artifact: README.candidate.md
section-id: workflows
line-start: 140
line-end: 141
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
cascade는 quality-gate-passed 정방향과 quality-gate-failed 점선 재작업을 함께 그린다.
- artifact: README.candidate.md
section-id: workflows
line-start: 150
line-end: 154
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
wave는 quality-gate-passed 정방향과 loop-stage 자기순환만 있고 실패 전이가 없다.
light(L160-161)도 같다. 근거 공백은 F-WORKFLOW-WAVE-LIGHT에 rework 항목이 없다는 점이다.
route-to: FACTS_EXTRACTED
status: open
- id: R-110
severity: minor
category: prose-clarity
rule-id: KO-VAGUE-BENEFIT
section: bench-cascade
message: >-
설명 예고 문장이 누적된다. quality-review.md가 흔한 결함으로 꼽는 '설명할 내용을 예고한
뒤에 사실을 말하는' 형태다. L577 '설계 문서가 붙인 단서도 분명합니다', L471 '이 점검이
확인하지 않는 것도 분명합니다', L440 '두 명령을 다시 돌리지 않은 이유가 있습니다',
L84 '주의할 점이 있습니다'가 모두 뒤 문장을 예고만 하고 정보를 더하지 않는다. 이 가운데
L440과 L577은 이번 재작업이 늘린 문장이라, 정직성 서술이 진실해진 것 이상으로 길어졌다는
신호로 읽힌다. 전 심사가 P-036을 오탐으로 판정한 것은 절반만 옳다. 지적된 두 문장 중
뒤 문장('통계적 우월성이나 일반적 생산성 향상을 확정하지 않습니다')은 구체적 부정 단서가
맞지만, 앞 문장은 KO-VAGUE-BENEFIT이 겨냥하는 바로 그 형태다. 예고 문장을 지우고 사실
문장만 남기면 뜻이 줄지 않고 분량만 준다.
evidence:
- artifact: README.candidate.md
section-id: bench-cascade
line-start: 577
line-end: 577
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
KO-VAGUE-BENEFIT P-036이 두 문장을 함께 집계한다. 앞 문장이 예고, 뒤 문장이 사실이다.
- artifact: README.candidate.md
section-id: verification
line-start: 440
line-end: 440
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
'두 명령을 다시 돌리지 않은 이유가 있습니다' — 이번 재작업에서 추가된 예고 문장.
뒤 문장이 이유를 온전히 담고 있다.
route-to: README_DRAFTED
status: open
# ── 전 심사 지적의 재검증 결과 ─────────────────────────────────────────────
- id: R-001
severity: critical
category: architecture-mismatch
subject: workflow-selection
section: workflows
message: >-
해소됨. 사실 층위에서 근본 원인이 제거됐다. F-WORKFLOW-WAVE-LIGHT에 stage별 exit-gate가
추가돼 wave.acceptance가 [release-approved, no-unresolved-critical-risks, human-gate]를
갖는다는 점과 light.acceptance가 command null · exit-gate []인 종단이라는 점이 분리
기록됐고, 새 사실 F-WORKFLOW-HUMAN-GATE-MAP이 plan별 사람 승인 토큰과 종단 stage 규칙성을
확정했다. 다이어그램은 wave에 cascade와 동일한 육각형 human-gate 노드를 두어 비대칭을
없앴고, venture-decision에도 자기 리터럴로 노드를 추가해 같은 결함이 한 plan 건너
재발하는 것을 막았다. 본문은 C-HUMAN-POINTS를 plan별 토큰 지도로 교체하고
C-WAVE-RELEASE-GATE·C-LIGHT-NO-RELEASE·C-TERMINAL-SHAPE를 신설했다. light가 '게이트가
없다'로 읽히던 문제는 재배치가 아니라 실제로 닫혔다 — 공유 quality-gate-passed 간선을
그리고 종단 노드가 자기 사유를 적기 때문이다. 잔여 사항은 R-109로 분리 기록한다.
evidence:
- artifact: README.candidate.md
section-id: workflows
line-start: 151
line-end: 153
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
w5 --> wg{{human-gate}} --> w6(released) — cascade L140-143과 도형·라벨이 같다.
- artifact: README.candidate.md
section-id: workflow-wave-light
line-start: 247
line-end: 249
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
본문이 wave의 release exit gate 세 조건과 cascade와의 문자열 동일성을 명시하고,
light에 자리가 없는 이유를 별도 문장으로 준다.
route-to: FACTS_EXTRACTED
status: resolved
- id: R-002
severity: major
category: prose-clarity
rule-id: KO-UNMARKED-ENGLISH-DENSITY
section: operating-model
message: >-
해소됨. 지목된 두 위치가 모두 반영됐다. 운영 원리 6항의 계약 키가 인라인 코드로 바뀌고
caller는 '호출자', hook·validator·test는 '훅·검증기·테스트', push·pull request는
한국어로, defense-in-depth는 '심층 방어(defense-in-depth)'로 정리됐다. 경고 총계는
53에서 44로 줄었다. 원칙의 미적용 잔여분은 R-108로 분리 기록한다.
evidence:
- artifact: README.candidate.md
section-id: operating-model
line-start: 25
line-end: 32
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
6항 전체가 계약 키를 인라인 코드로 표기하고 일반명사는 한국어로 바뀌었다.
route-to: README_DRAFTED
status: resolved
- id: R-003
severity: minor
category: prose-clarity
rule-id: KO-ENGLISH-HEADING
section: workflow-wave-light
message: >-
해소됨. L231과 L269의 절 제목이 plan 식별자를 인라인 코드로 표기하고 child workflow라는
맨 영문도 '하위 워크플로'로 바뀌었다. prose-report.json에 KO-ENGLISH-HEADING 항목이
더 이상 없다.
evidence:
- artifact: README.candidate.md
section-id: workflow-wave-light
line-start: 231
line-end: 231
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
'`wave`와 `light` — 축약 경로'. L269도 같은 방식으로 수정됐다.
route-to: README_DRAFTED
status: resolved
- id: R-004
severity: minor
category: verification-honesty
section: operating-model
message: >-
해소됨. L23에 '아래 여섯 가지는 계약 파일이 선언한 규칙이며, 이 분석에서 런타임 강제를
실행해 확인하지는 않았습니다'가 추가돼 강제 서술의 assertion-type이 명시됐다.
제안된 문장과 사실상 같고 새 사실을 만들지 않았다.
evidence:
- artifact: README.candidate.md
section-id: operating-model
line-start: 23
line-end: 23
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
claim C-RULES-DECLARED가 F-ARCH-STATE-ARTIFACT·F-ARCH-HOOKS·F-LIMIT-HOOK-ACTIVATION을
근거로 붙었다.
route-to: README_DRAFTED
status: resolved
- id: R-005
severity: minor
category: verification-honesty
section: bench-cascade
message: >-
해소됨. L573에 'receipt가 있어도 실행되지는 않습니다. 세 서브커맨드 모두 현재 구현에서는
exit 3, 즉 미구현을 반환합니다'가 신설돼(C-CASCADE-BUDGET-STUB) CMD-15 limitations가
담고 있던 나머지 절반이 본문에 들어왔다.
evidence:
- artifact: README.candidate.md
section-id: bench-cascade
line-start: 571
line-end: 573
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
exit 2 거부와 exit 3 미구현이 연속 두 문장으로 붙어 있어 한 절 안에서 상충 인상이
사라졌다.
route-to: README_DRAFTED
status: resolved
- id: R-006
severity: minor
category: reader-journey
section: overview
message: >-
해소됨. 개요의 provenance 두 문단이 L18 한 문장으로 줄었고 HEAD 해시와 변경 항목 수는
검증 절 L442로 이동했다. 이동 과정에서 수치도 재추출값(269 · 26)으로 갱신됐다.
evidence:
- artifact: README.candidate.md
section-id: verification
line-start: 442
line-end: 442
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
HEAD 00db337 · 변경/미추적 269 · 삭제 26이 검증 절로 옮겨졌고 F-IDENTITY-SNAPSHOT의
13:36 값과 일치한다.
route-to: README_DRAFTED
status: resolved
- id: R-007
severity: minor
category: claim-integrity
section: operating-model
message: >-
해소됨. L25의 비교 단정이 '이 하네스의 운영 원리는 여섯 가지입니다'로 바뀌어 근거 없는
비교 프레이밍이 제거됐고, 훅 배선 문장에는 claim-id C-HOOK-EVENTS가 붙었다.
claim statement 범위 문제는 R-106으로 분리 기록한다.
evidence:
- artifact: README.candidate.md
section-id: repo-map-claude
line-start: 361
line-end: 361
content-hash: "sha256:UNCOMPUTED-NO-HASH-TOOL-IN-REVIEW-ENVIRONMENT"
observation: >-
'훅은 이벤트 다섯 곳에 배선돼 있습니다. <!-- claim-id: C-HOOK-EVENTS -->' —
claim-map에 F-ARCH-HOOKS 근거로 등재됐다.
route-to: README_DRAFTED
status: resolved