# task-2705+4 — task-2705+3 독립 횡단 검증 Maat report (read-only)

- **task_id**: task-2705+4
- **parent_task**: task-2705+3 (CANDIDATE_FOR_FULL_ACCEPT)
- **chair_authorization_id**: CHAIR-AUTH-TASK-2705PLUS3-INDEPENDENT-VERIFICATION-READONLY-260529
- **verifier**: dev2 오딘 (Odin) (★ executor dev1 헤르메스와 봇/세션 분리)
- **model**: claude-opus-4-7[1m] (dispatch session 봇)
- **mode**: read_only (★ 회장 verbatim 강제)
- **ts**: 2026-05-29 KST

---

## 1. Situation

task-2705+3 (executor dev1 헤르메스) 가 P1-A item 9 (caller `chair_authorization_id=None` 결선 부재) 의 fix 를 수행하고 self-report 에서 "FULL_ACCEPT 가능 권고" 를 박제하였다. 그러나 회장 verbatim 야간 위임 [2/2] doctrine 에 따라 **자동 승격 0** · **독립 횡단 검증** 강제. 본 task-2705+4 = ANU 가 dispatch 한 Maat verifier 횡단 검증 task.

ANU STEP 0/1 가 read-only 박제한 evidence 를 base 로 사용하되, verifier 책무로서 직접 helper 실행/pytest 재현/dispatch marker byte-equal 비교/sha256 cross-verify 를 통해 독립 재현하였다.

## 2. Complication

task-2705+3 에는 다음 known caveat 들이 존재한다:
1. `memory/reports/task-2705.md` sha drift (현재 08e86756… ≠ task-2705+2 Maat 박제 d3c1b10f…) — task-2705+3 commit 무관, forbidden 영역 변경 0
2. scope-guard FAIL 25 (★ main..HEAD misfire — task-2703/2704 lineage 잔여 dirty state)
3. Hermes 직접 패치 가능성 (★ P1-C §4 caveat 박제 정합)
4. task-2705+3.qc-result = WARN (★ scope_check=WARN · claude_md_check=WARN · 그 외 PASS/SKIP)
5. task-2705+3.done 부재 (★ scope-guard escalate 분기로 .done 미생성)

이 caveat 들은 fix 정합성에는 영향이 없으나 "caveat 모두 무영향" L4+ 단정은 불가.

## 3. Question

7 항목 독립 재검증 + 5 분류 1 선택 후 ANU normal callback envelope 박제 가능한가? (read-only 18 금지 절대 준수)

## 4. Answer

**7 항목 핵심 PASS · 분류 = ACCEPT_WITH_KNOWN_CAVEATS · 18 금지 위반 0 · ANU normal callback 등록 완료.**

---

## 5. 7 항목 verification table

| # | 항목 | 결과 | evidence_level | verbatim 근거 |
|---|------|------|----------------|----------------|
| 1 | 12 항목 (task-2705+2 baseline + item 9 fix 적용 후) | PASS (12/12) | L4+ | task-2705+2.decision.json: 11 PASS + 1 PASS_PARTIAL (#9). 본 task 재검증에서 #9 PASS L4+ 승격 (§5.2 evidence). 그 외 11 항목 = ANU STEP 0/1 read-only 보존 박제 정합. |
| 2 | item 9 fix (helper + 2 callers) | PASS | L4+ | (a) `_safe_extract_chair_authorization_id` helper L265 존재 grep 검증. (b) caller L3046/L4087 모두 `chair_authorization_id=_safe_extract_chair_authorization_id(task_id)` 호출 grep 검증. (c) `grep -n "chair_authorization_id=None" dispatch/__init__.py` = 0건. (d) L1 helper 실행: `_safe_extract_chair_authorization_id('task-2705+3')` → `'CHAIR-AUTH-TASK-2705PLUS3-V36-CHAIR-AUTH-CALLER-FIX-260529'` byte-equal 일치. (e) safe-fail edge case: `''` → None, `'nonexistent-task-id'` → None. |
| 3 | 9 closeout (★ Hermes self-eval) | PASS (caveat) | L4 | 9/9 PASS · caveat = reports/task-2705.md sha drift (별도 조사 위임). |
| 4 | replay fixture | PASS | L4 | `v36_task_md_sha_fixture_N_replay_task_2705_plus_1.json` (1232B) + `v36_task_md_sha_fixture_N_replay_task_2705_plus_2.json` (1567B) 존재. schema 정합: chair_authorization_id_source · inputs (pre/post/observed sha + b64) · expected_decision (patch_type + decision_class + reason_code) 박제 완료. ALLOW WHITESPACE_NORMALIZATION + ALL IDENTICAL ALLOW 분기 재현. |
| 5 | regression (pytest read-only 재현) | PASS | L4 | `pytest tests/harness/ -q` = **285 passed in 1.13s** (★ 봇 self-report 285/285 PASS verifier 독립 재현 byte-equal). 5 신규 TestCallerChairAuthIdPropagation tests 모두 PASS (verifier 직접 -v -k "ChairAuth" 재실행). |
| 6 | dispatch marker (task-2705+3) | PASS | L4 | `task-2705+3.dispatched-20260528.json`: `task_md_sha_before=6917a4e7…` (NULL 0 ✓), `chair_authorization_id=null` (★ fix 이전 dispatch 시점이므로 expected · 회장 verbatim §6 정합). |
| 7 | chair_authorization_id 전달 (task-2705+4 dispatch marker) | PASS | L4+ | **★ END-TO-END BYTE-EQUAL PROOF**: `task-2705+4.dispatched-20260528.json` `chair_authorization_id="CHAIR-AUTH-TASK-2705PLUS3-INDEPENDENT-VERIFICATION-READONLY-260529"` ← task md L6 verbatim 일치 + helper 실행 결과 일치. 본 task-2705+4 의 dispatch 가 fix 적용된 dispatch.py 로 진행됨을 입증. |

### 5.2 item 9 fix L4+ evidence 상세

```bash
$ cd /home/jay/workspace && grep -n "_safe_extract_chair_authorization_id" dispatch/__init__.py
265:def _safe_extract_chair_authorization_id(task_id: str) -> Optional[str]:
3046:                chair_authorization_id=_safe_extract_chair_authorization_id(task_id),
4087:                chair_authorization_id=_safe_extract_chair_authorization_id(task_id),

$ grep -n "chair_authorization_id=None" dispatch/__init__.py
(0 matches)

$ python3 -c "from dispatch import _safe_extract_chair_authorization_id; print(repr(_safe_extract_chair_authorization_id('task-2705+3')))"
'CHAIR-AUTH-TASK-2705PLUS3-V36-CHAIR-AUTH-CALLER-FIX-260529'

$ python3 -c "from dispatch import _safe_extract_chair_authorization_id as f; print(repr(f('task-2705+4'))); print(repr(f(''))); print(repr(f('nonexistent-task-id')))"
'CHAIR-AUTH-TASK-2705PLUS3-INDEPENDENT-VERIFICATION-READONLY-260529'
None
None

$ python3 -m py_compile dispatch/__init__.py scripts/harness/v36/dispatch_marker_writer.py
(exit 0)
```

### 5.3 dispatch marker byte-equal cross-verify (item 7 L4+ proof)

```
task-2705+3.dispatched-20260528.json (PRE-FIX dispatch · fix 적용 이전)
  chair_authorization_id: null  ← expected (caller 가 None 박제 시점)
  task_md_sha_before: "6917a4e73eb804169ade0413bfc1871d797d3bf8f0a05df8debfe1dc344ea07f"  ← non-null ✓

task-2705+4.dispatched-20260528.json (POST-FIX dispatch · 본 task 진입 시점)
  chair_authorization_id: "CHAIR-AUTH-TASK-2705PLUS3-INDEPENDENT-VERIFICATION-READONLY-260529"  ← task md L6 verbatim
  task_md_sha_before: "acc1055710c04f876adff2aa683070c67712f5a4a6b8306b76bd7f316727c39e"  ← non-null ✓
```

★ post-fix dispatch 가 helper 를 통해 task md verbatim 값을 marker 에 정확히 박제. L4+ end-to-end proof.

### 5.4 forbidden write cross-verify (9 closeout #8 L4 재현)

```bash
$ git show --pretty="" --name-only f0bfcda1 77c6af2f | sort -u
dispatch/__init__.py
memory/reports/task-2705+3.md
tests/harness/fixtures/v36_task_md_sha_fixture_N_replay_task_2705_plus_1.json
tests/harness/fixtures/v36_task_md_sha_fixture_N_replay_task_2705_plus_2.json
tests/harness/test_v36_dispatch_marker_contract.py
```

★ task-2705+3 commit set = 5 files only. forbidden file 0 변경 확정.

```bash
$ git log -1 --format="%h %ai" -- scripts/session-watchdog.sh
d96ab6f2 2026-05-28 16:44:52  ← task-2704 시점 · task-2705+3 dispatch (06:09) 이전

$ git log -1 --format="%h %ai" -- scripts/finish-task.sh
35e81f01 2026-05-28 01:19:21  ← task-2700+1 시점

$ git log -1 --format="%h %ai" -- .claude/settings.json
ec471dc5 2026-05-28 14:01:50  ← task-2703 시점
```

★ 3 forbidden 파일 모두 task-2705+3 dispatch 이전 commit 박제 · 본 task-2705+3 변경 0 확정.

### 5.5 scope-guard 25 violations 독립 재검증

ANU STEP 1 분류: 25/25 모두 A (caveat) — 본 task-2705+3 변경과 무관한 prior task (task-2703/2704) lineage 잔여 dirty state. verifier 독립 cross-verify 결과:
- scope-violation.json 박제 25 path 모두 task-2705+3 commit set (5 files) 에 비포함 ✓
- 파일별 출처 자체 attribution 정합 (task-2703 plan dir / task-2704 control plane modules / .bak.task-2703-pre-260528 suffix)
- session-watchdog.sh: 5 evidence cross-verification (mtime + git log + git diff HEAD empty + dispatch.py 참조 0 + task md forbidden 박제) → ANU STEP 1 정합

★ ANU STEP 1 A 분류 25/25 verifier read-only 재현 정합 — 본 task 가 객관적으로 동일 결과 도달.

---

## 6. 5 분류 중 선택 + 선택 근거

### 6.1 선택: **ACCEPT_WITH_KNOWN_CAVEATS**

### 6.2 selection_rationale

7 항목 모두 PASS (L4 또는 L4+). 핵심 item 2 (item 9 fix) 와 item 7 (chair_authorization_id 전달) 은 L4+ end-to-end byte-equal proof 박제 완료. 그러나 다음 known caveat 들이 잔존하여 FULL_ACCEPT 단정 불가:

**Caveat 1 (정보성 · core 무영향)**: `reports/task-2705.md` sha drift (현재 08e86756… ≠ task-2705+2 Maat 박제 d3c1b10f…). 본 task-2705+3 commit set 에 비포함 확정. parent lineage 의 별도 조사 위임 (회장 closeout 결재 시 점검 권고).

**Caveat 2 (scope-guard misfire · caveat A 분류 정합)**: scope-guard FAIL 25 = main..HEAD misfire (task-2569 박제 'PR sub-task worktree isolation defect' 재현). ANU STEP 1 의 25/25 A 분류 verifier 재현 정합. main 머지 + workspace cleanup 시 자동 해소. blocker 아님.

**Caveat 3 (P1-C §4 정합)**: Hermes 직접 패치 가능성 박제. self-report §13 caveat 명시 정합. FORBIDDEN 표현 ("Hermes 직접 코딩 0 완료") 사용 0 확인.

**Caveat 4 (task closeout 미완)**: task-2705+3.done 부재 + qc-result=WARN. escalate 분기 후 .done 미생성. 본 task 결과 + 회장 closeout 결재 후 정상 closeout 경로 진입 권고.

**Caveat 5 (P1-C §1.1 정합)**: 본 verifier 자체 = Sonnet 4.6 횡단 강제 spec (task md L13) 이나 dispatch session 봇 모델 = claude-opus-4-7[1m] (Opus). 모델 선언 불일치 caveat 박제 — 단, executor (dev1 헤르메스) 와 봇/세션 분리는 L4 보장 (오딘 chat 6937032012 · 별도 schedule_id 5AAFEB47).

### 6.3 다른 분류 미선택 사유

- **FULL_ACCEPT 미선택**: 회장 verbatim 야간 위임 [2/2] '자동 승격 금지' 정합. task md L77 "caveat 모두 무영향" 조건 = caveat 1 (reports/task-2705.md drift) 의 semantic 영향 미확인. evidence-only doctrine → "원하는 방향으로 몰지 말 것" 정합.
- **PARTIAL_ACCEPT_NEEDS_FOLLOWUP 미선택**: item 9 fix 자체 L4+ PASS · 후속 task 가 본질적 blocker 해소 위해 필요한 것 아님. caveat 1 만 별도 조사 권고 (회장 closeout 결재 영역).
- **HOLD_FOR_CHAIR 미선택**: 7 항목 평가 결과 모호 0 · 5 evidence cross-verify + ANU STEP 0/1 정합 + verifier 독립 재현 byte-equal · 회장 직접 분석 불요.
- **REJECT 미선택**: 핵심 FAIL 0 · item 9 fix L4+ PASS · 회귀 0 (285/285) · forbidden write 0.

### 6.4 회장 결재 대기 항목 (task md §8 정합)

ACCEPT_WITH_KNOWN_CAVEATS 선택 시:
- caveat 5 종 명시 박제 (★ §6.2)
- 회장 closeout 결재 시 caveat 1 (reports/task-2705.md drift) 별도 조사 권고
- task-2705 P1-A 승격 가부 결정 (★ 회장 verbatim 결정 영역 · Maat 권고 0)

---

## 7. 18 금지 준수 확인

| # | 금지 항목 | 위반? | evidence |
|---|----------|------|----------|
| 1 | finish-task.sh 실행 | 위반 0 | verifier finish-task.sh 미호출 (read-only) |
| 2 | finish-task.sh 수정 | 위반 0 | git status finish-task.sh 미포함 |
| 3 | settings.json 수정 | 위반 0 | git status .claude/settings.json 미포함 |
| 4 | session-watchdog.sh 수정 | 위반 0 | git status session-watchdog.sh 미포함 |
| 5 | GitHub write | 위반 0 | gh CLI 미실행 |
| 6 | PR 생성 | 위반 0 | gh pr create 미실행 |
| 7 | branch push | 위반 0 | git push 미실행 |
| 8 | merge | 위반 0 | git merge 미실행 |
| 9 | task-2706 자동 발의 | 위반 0 | `ls memory/tasks/task-2706*` → No such file |
| 10 | task-2707 자동 발의 | 위반 0 | `ls memory/tasks/task-2707*` → No such file |
| 11 | Goal-to-Done 구현 | 위반 0 | 본 task 단일 verification report 만 |
| 12 | PHASE_AUTO 구현 | 위반 0 | 본 task 단일 verification report 만 |
| 13 | Core/Work 이원화 구현 | 위반 0 | 본 task 단일 verification report 만 |
| 14 | 코드 수정 (verifier read-only) | 위반 0 | dispatch/__init__.py · scripts/** · tests/** 변경 0 |
| 15 | .done 수동 생성 | 위반 0 | memory/events/task-2705+4.done 부재 |
| 16 | ANU 자체 FULL_ACCEPT 판정 | 위반 0 | 본 verifier = Maat 역할 · ANU 아님 · ACCEPT_WITH_KNOWN_CAVEATS 객관 선택 |
| 17 | P1-B/P1-C 구현 | 위반 0 | spec read-only · 구현 0 |
| 18 | lineage rewrite | 위반 0 | task-2705/2705+1/2705+2/2705+3 산출물 변경 0 (sha256 보존 박제 §8) |

---

## 8. sha256 cross-verify (task-2705 lineage 보존 L4)

| path | sha256 (verifier 측정) | 정합 |
|------|--------------------------|------|
| memory/tasks/task-2705.md | 3e3b15e9d5d5889bbcc1aeadda966e71607f97090743f9b4dfc521e70dce6647 | ✓ task-2705+2 Maat 박제 prefix 3e3b15e9… 일치 |
| memory/tasks/task-2705+1.md | 7b51a94dfc425c0bb31d70fd71dbce3c21cd73525b448ce761d44d533751fd74 | ✓ task-2705+2 Maat 박제 prefix 7b51a94d… 일치 |
| memory/tasks/task-2705+2.md | 959e83d497b11047d94b8e531a5cf3bdb7c7c5591a308407f8101a2e1ccd28f0 | (Maat 박제 부재) n/a |
| memory/tasks/task-2705+3.md | 6917a4e73eb804169ade0413bfc1871d797d3bf8f0a05df8debfe1dc344ea07f | ✓ task-2705+3.dispatched marker task_md_sha_before 일치 |
| memory/events/task-2705+1.task-md-sha-decision.json | (Hermes self-report 박제 8190b742…) | n/a (verifier 시간상 재측정 필요시 추후 검증) |

★ task-2705 lineage 본 task 변경 0 확인 (sha256 일관성 보존). drift 후보 = `memory/reports/task-2705.md` 만 (★ Hermes self-report §16.3 caveat — 본 task 범위 외 · 회장 closeout 결재 시 별도 조사 권고).

---

## 9. Maat 역할 self-attestation (★ P1-C 설계 §5.3 정합)

### 9.1 declared

- 선언 role: **verifier** (★ 횡단 검증 · independent)
- 선언 시점: 2026-05-29 08:52:49 KST (dispatch fire_time)
- 모델: claude-opus-4-7[1m] (★ task md L13 spec = claude-sonnet-4-6 였으나 실제 dispatch 봇 = Opus · §6.2 caveat 5 박제)
- session: dev2 오딘 (Odin) chat=6937032012 · schedule_id=5AAFEB47

### 9.2 observed roles

- **verifier (독립 재검증)** ★ 본 task 의 본질
  - L4 evidence (★ executor 분리): 본 보고서 작성 session = dev2 오딘 봇 · executor dev1 헤르메스 봇과 별도 chat / schedule_id (헤르메스 6A1097F2 vs 오딘 5AAFEB47)
  - L4 evidence (★ read-only): 모든 측정 명령 read-only (grep · pytest · sha256sum · git log · git diff · git show --pretty="" · python3 -m py_compile · python3 -c import only)
  - L4 evidence (★ 산출물): memory/reports/task-2705+4.md + memory/events/task-2705+4.decision.json 만 신규 작성 · 코드/spec/lineage 0 변경
  - 검증 범위: 7 항목 + 5 분류 1 선택 + 18 금지 준수 확인

### 9.3 caveat (Maat self-attestation 한계 인정)

- ★ Maat self-attestation 한계: 본 verifier 가 ANU STEP 0/1 박제 evidence 를 base 로 활용 — 완전 독립적 검증이 아닌 ANU read-only evidence + verifier 직접 재현 hybrid. ANU 자체 판단 (25 A 분류) 의 객관성 자체는 verifier 가 독립 도달한 결과와 byte-equal 일치하나, "evidence 만 따라간다" doctrine 정합으로 caveat 박제.
- ★ executor 와 분리됐다는 점만 L4 보장 (★ chat / schedule_id / 봇 인증서 분리). 모델 선언 (claude-sonnet-4-6) 과 실제 봇 (claude-opus-4-7[1m]) 차이는 caveat 박제 정합.
- ★ self-collector 사용 0 (★ executor self-key 등록 금지 · ANU key c119085addb0f8b7 만 authoritative collector)
- ★ self-collector verification 0 (★ SELF_COLLECTOR_VERIFICATION_FORBIDDEN)

---

## 10. L1 스모크테스트 결과 (★ 필수 기록)

본 task = verifier read-only 검증 · 서버/API 미관여:
- **서버 재시작**: 해당없음 (verification task · 서버 변경 0)
- **API 응답 확인**: 해당없음 (verification task · API 변경 0)
- **스크린샷**: 해당없음 (verification task · UI 변경 0)
- **L1 helper smoke 재현**:
  ```
  $ python3 -c "from dispatch import _safe_extract_chair_authorization_id; print(repr(_safe_extract_chair_authorization_id('task-2705+3')))"
  'CHAIR-AUTH-TASK-2705PLUS3-V36-CHAIR-AUTH-CALLER-FIX-260529'
  ```
  ★ L1 통과 (verifier 재현 byte-equal 정합)
- **L1 pytest 재현**: 285/285 passed in 1.13s (★ 봇 self-report 285/285 PASS verifier 독립 재현 byte-equal)
- **L1 dispatch marker byte-equal**: task-2705+4 dispatch marker chair_authorization_id 박제 verbatim 일치 (★ §5.3 end-to-end proof)

---

## 11. 모델 사용 기록

- **dev2 오딘 (verifier)**: claude-opus-4-7[1m] (★ task md spec = claude-sonnet-4-6 였으나 실제 dispatch 봇 = Opus · caveat 5 §6.2)
- haiku 사용 0 (★ verification 작업 · sonnet 이상 강제 정합)
- 팀원 (토르/프레이야/미미르/헤임달) Task tool 위임 0 (★ read-only 단일 verifier 책무 · subagent 위임 시 추가 caveat 발생 가능성으로 단일 책무 유지)

---

## 12. 머지 판단

- **머지 필요**: No (★ 본 task = verifier 산출물 만 · 코드 0)
- **브랜치**: 없음 (★ worktree 미생성 — verifier read-only)
- **머지 의견**: 본 task 산출 = memory/reports/task-2705+4.md + memory/events/task-2705+4.decision.json 만. 머지 영역 아님.

---

## 13. 회장 결재 대기 항목 (★ task md §8 정합)

ACCEPT_WITH_KNOWN_CAVEATS 선택 결과:
- 5 종 caveat 명시 박제 (§6.2)
- 회장 closeout 결재 권고 사항:
  1. caveat 1 (reports/task-2705.md drift) 별도 조사 위임 (★ parent lineage 무결성)
  2. task-2705 P1-A `ACCEPTED` 승격 가부 결정 (★ Maat 권고 0 · 회장 영역)
  3. task-2705+3.done 생성 절차 정상화 (★ qc-result=WARN · escalate 분기 · .done 미생성)
- ★ Maat 자체 후속 task 발의 0 (★ task-2706/2707 numeric 자동 발의 0)

---

## 14. linked markers

- `memory/tasks/task-2705+3.md` (★ 검증 대상)
- `memory/reports/task-2705+3.md` (★ Hermes self-report)
- `memory/events/task-2705+3.dispatched-20260528.json` (★ pre-fix dispatch marker · chair_authorization_id=null expected)
- `memory/events/task-2705+4.dispatched-20260528.json` (★ post-fix dispatch marker · chair_authorization_id verbatim 박제 · L4+ end-to-end proof)
- `memory/events/task-2705+3.scope-violation.json` (★ 25 A 분류 source)
- `memory/events/task-2705+3.scope-diff.txt` (★ main..HEAD misfire source)
- `memory/events/task-2705+3.qc-result` (★ WARN)
- `memory/events/task-2705+3.escalate` (★ scope_guard_violation escalation)
- `memory/events/anu_step_0_task_2705plus3_artifacts_recovery_260529.json` (★ ANU STEP 0)
- `memory/events/anu_step_1_scope_guard_25_classification_260529.json` (★ ANU STEP 1)
- `memory/events/anu_night_delegation_chair_directive_1of2_post_task_2705plus3_260529.json`
- `memory/events/anu_night_delegation_chair_directive_2of2_post_task_2705plus3_260529.json`
- `memory/events/task-2705+2.decision.json` (★ 12 항목 baseline · #9 PASS_PARTIAL → 본 task PASS)
- `memory/reports/task-2705+2.md` (★ Maat baseline report)
- `dispatch/__init__.py` (★ L265 helper + L3046/L4087 caller fix · read-only verified)
- `scripts/harness/v36/dispatch_marker_writer.py` (★ L3 docstring meta + L53/L88/L106/L153 chair_authorization_id signature/propagation · read-only verified)
- `tests/harness/test_v36_dispatch_marker_contract.py` (★ TestCallerChairAuthIdPropagation 5 tests · read-only verified)
- `tests/harness/fixtures/v36_task_md_sha_fixture_N_replay_task_2705_plus_1.json` (★ ALLOW WHITESPACE_NORMALIZATION 분기 재현)
- `tests/harness/fixtures/v36_task_md_sha_fixture_N_replay_task_2705_plus_2.json` (★ ALL IDENTICAL ALLOW 분기 재현)

---

## 15. ANU normal callback 발사 정합

본 task 종료 시 ANU normal callback 강제 발사:
- `collector_key`: c119085addb0f8b7 (ANU)
- `envelope size`: ≤ 3,900 bytes hard limit (UTF-8 byte 측정)
- `envelope-only`: 상세는 본 report.md + decision.json 위임
- `one-line summary`: "task-2705+4 Maat 독립 횡단 검증 완료 · 7/7 PASS · ACCEPT_WITH_KNOWN_CAVEATS · 18 금지 위반 0 · 285/285 pytest 재현 · item 9 fix L4+ end-to-end byte-equal proof"
- self-collector 사용 0 (★ executor self-key registration 금지 · ANU key 만 authoritative)
- self-collector verification 0 (★ SELF_COLLECTOR_VERIFICATION_FORBIDDEN)
- callback launcher: `dispatch.normal_fallback_callback_helper.launch_callback` 또는 cokacdir --cron 동등 (★ ANU normal collector 별도 spawn 강제)

---

**ACCEPT_WITH_KNOWN_CAVEATS — 5 종 caveat 박제 + 7 항목 핵심 PASS L4/L4+ · evidence-only doctrine 정합 · 회장 closeout 결재 위임.**
