# task-2707+1 — task-2707 dispatch_marker_writer.py formalization independent verification (read-only)

★ READ-ONLY VERIFIER · OPTION β · 회장 verbatim 인가 · dev2 오딘 (Odin) · 5 enum verdict · `.done` 생성 금지 · `finish-task.sh` 실행 금지.

---

## 0. Header / Authorization Anchor

- **task_id**: `task-2707+1`
- **task_type**: `read_only` (★ Maat 독립 검증 lineage 정합)
- **chair_authorization_id**: `CHAIR-AUTH-TASK-2707PLUS1-OPTION-BETA-INDEPENDENT-VERIFICATION-READONLY-260529`
- **executor_team**: `dev2-team` (오딘 · Odin)
- **parent_task**: `task-2707` (★ FORMALIZATION_COMMIT_ONLY · commit `b5f652440f76f4b3...` · IMPLEMENTATION_PASS_ROUTING_FAIL)
- **scope**: ★ READ-ONLY ONLY (★ no commit / no file write 외 verification artifacts)
- **doctrine_anchor**: executor (dev1 헤르메스) ≠ verifier (dev2 오딘) 분리 강제 · "evidence 만 따른다" · ANU 자체 분류 결정 0
- **anu_collector_key**: `c119085addb0f8b7` (★ ANU normal callback collector_role=ANU)
- **callback_envelope_prompt_byte_limit**: UTF-8 ≤ 3900 bytes hard (★ wc -c · NOT wc -m)

---

## 1. Background — task-2707 처리 정합 (★ 회장 verbatim)

- task-2707 implementation = **PASS** (★ commit + acceptance 7/7 + forbidden 11/11 + regression 3/3 PASS · 회장 verbatim 분류 고정)
- task-2707 routing = **FAIL** (★ finish-task.sh L377 fail-fast → L1532 callback gate 미도달 · IMPLEMENTATION_PASS_ROUTING_FAIL)
- C1 caveat 처리 = **OPTION β** (★ 회장 verbatim 확정 · dev2 오딘 read-only verifier)
- P2-A 구현 = **미발사** (★ 회장 verbatim · task-2708 task md 초안만 작성)
- 본 task-2707+1 = **P2-A timeline 독립** (★ task-2707 formalization commit 유효성 독립 확인)

---

## 2. Verification Scope (★ 회장 verbatim 강제)

### 2.1 read-only verification 12 items

1. **commit verification**: `git show b5f652440f76f4b3dec7d594fa3a23cbe8345da5 --stat` → 변경 파일 = `scripts/harness/v36/dispatch_marker_writer.py` 단일 (★ 1 file changed · +5 / -2)
2. **body byte equal proof**: post-commit blob sha256 `c387efc265f61df63c107f4a4c13b171b704e750cf0c6fe95c504d9024935c9d` · post-comment-strip sha256 = pre-edit working tree sha256 `63a3360513a96a22202c85143f652f44998979652e0887a02654adc714437bf3` MATCH 확인
3. **head_blob_post verification**: `git rev-parse HEAD:scripts/harness/v36/dispatch_marker_writer.py` = `4a37229d44eb7a1a0b9155922c5ffbac24816abf`
4. **forbidden_files 4 sha256 MATCH_ALL_YES**: `git show HEAD~1:scripts/finish-task.sh | sha256sum` vs `git show HEAD:scripts/finish-task.sh | sha256sum` 4건 (★ finish-task.sh / dispatch/__init__.py / session-watchdog.sh / .claude/settings.json)
5. **forbidden_actions 11 위반 0 verification** (★ 회장 verbatim 11 금지)
6. **regression smoke 3/3 PASS verification**:
   - `python3 -c "from scripts.harness.v36.dispatch_marker_writer import write_dispatch_marker; print('import_ok')"`
   - `python3 -c "from scripts.harness.v36.dispatch_marker_writer import write_dispatch_marker; import inspect; assert 'chair_authorization_id' in inspect.signature(write_dispatch_marker).parameters; print('caller_kwarg_compat_ok')"`
   - `pytest tests/harness/test_v36_dispatch_marker_contract.py -v` → 32/32 PASS 재현
7. **production baseline 3 dispatch markers chair_authorization_id 박힘 패턴 유지**:
   - task-2705+4: `CHAIR-AUTH-TASK-2705PLUS3-INDEPENDENT-VERIFICATION-READONLY-260529` 정상 populate
   - task-2706: `CHAIR-AUTH-TASK-2706-V36-FINISH-TASK-PROFILE-LAYER-P1B-260529` 정상 populate
   - task-2706+1: `CHAIR-AUTH-TASK-2706PLUS1-MAAT-VERIFICATION-READONLY-260529` 정상 populate
8. **lineage chain 정합**: task-2704 (d96ab6f2) → task-2705+1 (signature bootstrap) → task-2705+3 (caller wiring f0bfcda1) → task-2707 (callee formalize b5f65244) attribution
9. **routing layer block evidence 박제 (★ caveat 보존)**: `memory/events/task-2707.escalate` (★ system-auto-escalate · tdd_check 4 회 FAIL) · `.done` 부재 · ANU cron-list 빈 schedules
10. **P2 trigger evidence 1호 정합**: task-2707 IMPLEMENTATION_PASS_ROUTING_FAIL = P2 contract refinement trigger · `memory/specs/p2_contract_refinement_r6_r14_260529.md` lineage 정합
11. **C1 lineage formalization 정합 (★ 회장 verbatim p1b closeout marker C1 → C1+1 cascade)**: dispatch_marker_writer.py dirty 영구 해소 · caller-callee asymmetric commit 정합화 완료
12. **anu_doctrine_compliance**: ANU mutating action · ANU self FULL_ACCEPT 판정 · ANU self classification · ANU manual `.done` creation 모두 0

### 2.2 OUT-OF-SCOPE (★ 회장 verbatim 강제)

- ★ task-2707 commit revert / 추가 수정 0
- ★ task-2707 `.done` 생성 0 (★ 회장 verbatim 'P2-A 전에는 .done 생성 금지')
- ★ task-2707 finish-task.sh 실행 0 (★ 회장 verbatim 'finish-task.sh 실행 금지')
- ★ task-2707 routing fail caveat 변경 0 (★ 회장 verbatim 'routing fail caveat 는 유지')
- ★ P2-A 구현 / finish-task.sh 수정 / helper 수정 / callback cron 수동 생성 / GitHub write / PR / branch push / merge 모두 0
- ★ task-2708 자동 발의 0

---

## 3. 21 Forbidden Actions (★ 회장 verbatim 강제)

1. 코드 수정 금지
2. finish-task.sh 수정 금지
3. finish-task.sh 실행 금지
4. helper 수정 금지
5. dispatch 금지 (★ ANU 자체 / 봇 자체 task-2708 dispatch 모두 금지)
6. callback cron 수동 생성 금지
7. `.done` 생성 금지
8. PR 생성 금지
9. branch push 금지
10. merge 금지
11. GitHub write 금지
12. task-2707 commit revert 금지
13. task-2707 commit 추가 수정 금지
14. dispatch_marker_writer.py 본문 변경 금지
15. forbidden_files 4건 (finish-task.sh / dispatch/__init__.py / session-watchdog.sh / .claude/settings.json) 변경 금지
16. lineage rewrite 금지
17. routing fail caveat 변경 금지
18. P2-A 구현 / 신규 file 생성 금지 (★ verification artifacts 제외)
19. ANU 자체 FULL_ACCEPT 판정 위임 / 자체 분류 신설 금지
20. self-collector callback 금지 (★ ANU key `c119085addb0f8b7` 강제)
21. task-2708 자동 발의 금지

---

## 4. 5 enum classification (★ 회장 verbatim)

verifier 가 본 task-2707+1 종료 시 다음 5 enum 중 하나로 final_classification 박제 (★ memory/events/task-2707+1.decision.json):

- `FULL_ACCEPT` (★ all 12 verification items PASS + caveat 0)
- `ACCEPT_WITH_KNOWN_CAVEATS` (★ 12 items PASS + known caveat 박제 · task-2707 routing fail = 기존 caveat 유지)
- `PARTIAL_ACCEPT_NEEDS_FOLLOWUP` (★ 핵심 items PASS + 후속 task 필수)
- `HOLD_FOR_CHAIR` (★ 12 items 중 판정 모호 영역 존재)
- `REJECT` (★ 핵심 FAIL 또는 forbidden 위반)

★ ANU 자체 분류 결정 0 — 본 5 enum 은 회장 verbatim · verifier 가 evidence-only 선택.

---

## 5. Allowed / Forbidden Files

### 5.1 expected_files (★ verifier artifacts only)

1. `memory/events/task-2707+1.decision.json` (★ verifier final verdict + 12 items 박제)
2. `memory/reports/task-2707+1.md` (★ Maat report 5 형식: confirmed_fact / caveat / blocker / verdict / recommendation)
3. `memory/events/task-2707+1.dispatched-20260529.json` (★ dispatch.py 자동 생성 · executor 작성 0)
4. `memory/events/task-2707+1.callback-envelope.json` (★ ANU normal callback envelope · UTF-8 ≤3900 bytes hard)

### 5.2 allowed_existing_file_edits

- **NONE** (★ read-only only · 기존 파일 edit 0)

### 5.3 forbidden_files (★ 강제 sha256 동일 증명)

- `scripts/finish-task.sh`
- `dispatch/__init__.py`
- `scripts/session-watchdog.sh`
- `.claude/settings.json`
- `scripts/harness/v36/dispatch_marker_writer.py` (★ task-2707 산물 보존)
- 모든 production code (★ read-only verifier 범위)

### 5.4 Capability Scope YAML (★ dispatch.py L4769 parser 강제 대상)

```yaml
allowed_resources:
  expected_files:
    - memory/events/task-2707+1.decision.json
    - memory/reports/task-2707+1.md
    - memory/events/task-2707+1.callback-envelope.json
  allowed_existing_file_edits: []
  forbidden_paths:
    - scripts/finish-task.sh
    - dispatch.py
    - dispatch/__init__.py
    - scripts/session-watchdog.sh
    - .claude/settings.json
    - /home/jay/.claude/settings.json
    - scripts/harness/v36/dispatch_marker_writer.py
    - utils/merge_queue_executor.py
    - utils/real_merge_hooks.py
    - anu_v3/
```

---

## 6. Step-by-Step Verification Plan

### Step 1 — pre-state 박제 (★ read-only)

- `git log -1 --pretty=format:"%H %s" -- scripts/harness/v36/dispatch_marker_writer.py` → `b5f652440f76f4b3...` 박제
- `git show b5f652440f76f4b3 --stat` → 1 file changed · +5 / -2 박제
- `sha256sum scripts/harness/v36/dispatch_marker_writer.py` → `c387efc265f61df6...` 박제
- 4 forbidden_files sha256 박제

### Step 2 — 12 verification items 실행 (★ read-only)

§2.1 의 12 items 각각 실행 + 결과 박제.

### Step 3 — 5 enum verdict 결정 (★ evidence-only)

12 items 결과 cross-reference + verifier verbatim 판정 + selection rationale 박제.

### Step 4 — verifier artifacts 작성 (★ 4 files only)

- `memory/events/task-2707+1.decision.json` (★ 12 items + 5 enum verdict)
- `memory/reports/task-2707+1.md` (★ 5 형식 보고)
- `memory/events/task-2707+1.callback-envelope.json` (★ envelope ≤3900 bytes)

### Step 5 — ANU normal callback cron 등록 (★ ANU key c119085addb0f8b7)

- ★ executor self-key 사용 금지 (★ SELF_COLLECTOR_FORBIDDEN)
- ★ envelope path = `memory/events/anu_callback/task-2707+1-normal-completion.json` (★ Layer 1 validator trigger)
- ★ callback prompt UTF-8 byte 측정 (`printf '%s' "$P" | wc -c`)

---

## 7. Acceptance Criteria

1. ★ 12 verification items 박제 (★ §2.1 verbatim)
2. ★ forbidden_files 5 sha256 동일 (★ §5.3 verbatim)
3. ★ allowed_existing_file_edits = NONE (★ 기존 파일 edit 0)
4. ★ verifier artifacts 4 files only (★ §5.1)
5. ★ 5 enum verdict 1건 박제 (★ §4)
6. ★ ANU normal callback cron 등록 (★ ANU key 강제)
7. ★ forbidden_actions 21 위반 0 (★ §3)

---

## 8. Regression Smoke (★ read-only)

§2.1 item 6 verbatim 인용 — import_ok + caller_kwarg_compat_ok + pytest 32/32 PASS.

★ smoke FAIL 시 verifier verdict 영향 (★ FULL_ACCEPT 후보 제거 → ACCEPT_WITH_KNOWN_CAVEATS 또는 PARTIAL).

---

## 9. Callback Envelope Schema (★ ANU collector contract)

```json
{
  "task_id": "task-2707+1",
  "chair_authorization_id": "CHAIR-AUTH-TASK-2707PLUS1-OPTION-BETA-INDEPENDENT-VERIFICATION-READONLY-260529",
  "executor": "dev2-team / 오딘",
  "collector_role": "ANU",
  "collector_key": "c119085addb0f8b7",
  "result_path": "memory/events/task-2707+1.decision.json",
  "report_path": "memory/reports/task-2707+1.md",
  "parent_task": "task-2707",
  "verification_items_passed": "<N>/12",
  "final_classification": "<5_enum_one_of>",
  "anu_callback_doctrine_compliance": "executor=dev2-odin ≠ verifier=dev1-hermes 분리 강제",
  "summary_one_line": "task-2707 formalization commit b5f65244 read-only 검증 N/12 PASS · verdict=<5_enum>"
}
```

★ envelope UTF-8 byte ≤ 3900 hard limit · 상세는 `result_path` / `report_path` 위임 · prompt 에 긴 보고 금지.

---

## 10. Safe-Fail Strategy

- 모든 step unexpected error → 즉시 멈춤 · `.escalate` marker 작성 · 회장 보고 대기
- forbidden_files sha 변화 감지 → 즉시 멈춤 · `.escalate` 작성 (★ catastrophic 위반)
- 5 enum 판정 모호 → `HOLD_FOR_CHAIR` 선택 (★ ANU 자체 forced FULL_ACCEPT 0)

---

## 11. Out-of-Scope (★ 명시 강제)

- ★ task-2707 commit revert 0
- ★ task-2707 `.done` 생성 0
- ★ task-2707 finish-task.sh 실행 0
- ★ task-2707 routing fail caveat 변경 0
- ★ P2-A 구현 / finish-task.sh 수정 / helper 수정 / callback cron 수동 생성 / GitHub write / PR / branch push / merge 모두 0
- ★ task-2708 자동 발의 0

---

## 12. ANU Doctrine Compliance

- ★ executor (dev1 헤르메스) ≠ verifier (dev2 오딘) 분리 강제
- ★ "evidence 만 따른다" doctrine
- ★ ANU 자체 분류 결정 0 (★ 5 enum 회장 verbatim)
- ★ ANU 자체 FULL_ACCEPT 판정 0 (★ verifier 결과 이후만)
- ★ ANU 자체 `.done` 생성 0
- ★ self-collector callback 금지

---

## 13. Linked Markers

- `memory/tasks/task-2707.md` (★ parent task)
- `memory/events/task-2707.formalization-commit-260529.json` (★ acceptance 7/7 PASS)
- `memory/events/task-2707.dispatched-spawn-verified-260529.json` (★ SPAWN_VERIFIED)
- `memory/events/task-2707.implementation-pass-routing-fail-260529.json` (★ 회장 verbatim 분류 고정)
- `memory/events/task-2707.escalate` (★ routing fail caveat evidence)
- `memory/events/anu_c1_step_1_dispatch_marker_writer_root_cause_260529.json` (★ C1 STEP 1 root cause)
- `memory/events/p1b_finish_task_profile_contract_accepted_with_known_caveats_260529.json` (★ C1 origin caveat)
- `memory/specs/p2_contract_refinement_r6_r14_260529.md` (★ P2 refinement)
- `scripts/harness/v36/dispatch_marker_writer.py` (★ task-2707 산물 · read-only verification 대상)

---

## 14. Sentinel

★ 본 task = OPTION β read-only verifier (회장 verbatim). dev2 오딘 단독 발사. 12 items + 5 enum + 4 artifacts. `.done` 생성 0 / finish-task 실행 0 / commit revert 0. 끝