# task-2708+1 — task-2708 P2-A implementation independent verification (read-only)

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

---

## 0. Header / Authorization Anchor

- **task_id**: `task-2708+1`
- **task_type**: `read_only` (★ Maat 독립 검증 lineage 정합)
- **chair_authorization_id**: `CHAIR-AUTH-TASK-2708PLUS1-P2A-INDEPENDENT-VERIFICATION-READONLY-260529`
- **executor_team**: `dev2-team` (오딘 · Odin)
- **parent_task**: `task-2708` (★ P2-A callback-before-failfast pre-registration layer · IMPLEMENTATION_COMPLETE_BUT_COMPLETION_BLOCKED_BY_INFRASTRUCTURE)
- **parent_classification_chair_verbatim_fixed**: `IMPLEMENTATION_COMPLETE_BUT_COMPLETION_BLOCKED_BY_INFRASTRUCTURE` (★ FULL_ACCEPT 아님 / REJECT 아님 / HOLD_FOR_CHAIR 아님 / P2-A accepted marker 작성 금지)
- **scope**: ★ READ-ONLY ONLY (★ no commit / no file write 외 verification artifacts)
- **doctrine_anchor**: executor (dev1 헤르메스) ≠ verifier (dev2 오딘) 분리 강제 · "evidence 만 따른다" · ANU 자체 분류 결정 0
- **anu_collector_key**: `c119085addb0f8b7`
- **callback_envelope_prompt_byte_limit**: UTF-8 ≤ 3900 bytes hard (★ wc -c · NOT wc -m)

---

## 1. Background — task-2708 처리 정합 (★ 회장 verbatim 8 근거)

1. ★ 봇 self-attestation 상 P2-A 구현은 완료
2. ★ RS-1~5 PASS
3. ★ existing harness 413 PASS
4. ★ finish-task.sh Hunk A/B/C **+37 lines** · hard limit 이내
5. ★ forbidden action 0
6. ★ 그러나 scope-guard FAIL 로 finish-task.sh 가 종료되어 callback registration 단계 미도달
7. ★ 원인은 task-2708 구현 자체가 아니라 `allowed_resources.paths=null` schema mismatch + shared branch contamination 가능성
8. ★ 따라서 구현 결과와 completion routing 실패를 분리한다

**본 task-2708+1 = Hermes self-attestation 독립 검증** (★ 회장 verbatim 목표)

---

## 2. Verification Scope — 12 read-only items (★ 회장 verbatim 1:1)

1. **finish-task.sh Hunk A/B/C 실제 diff 확인**: `git log --oneline b8f9276^..HEAD -- scripts/finish-task.sh` + `git diff b8f9276^ HEAD -- scripts/finish-task.sh` (★ before/after snippet vs task md §4.1 verbatim)
2. **변경 라인 수 ≤ 75 확인**: `git diff --shortstat b8f9276^ HEAD -- scripts/finish-task.sh` → insertions + deletions 합산 ≤ 75 (★ task md §4.2 hard limit)
3. **`scripts/harness/v36/callback_preregistration.py` 존재 및 내용 확인**: 파일 존재 / sha256 박제 / line count / chair_authorization_id 박힘 / R8/R10/R11 정합
4. **RS-1~5 PASS 재현**: `pytest tests/harness/test_p2a_callback_preregistration.py -v` → 5/5 PASS (★ task md §11 fixture)
5. **existing harness 413 PASS 재현**: `pytest tests/harness/` 또는 동등 → 413 PASS 회귀 0
6. **`bash -n` finish-task.sh PASS**: `bash -n scripts/finish-task.sh` → exit 0 (★ syntax 정합)
7. **callback pre-registration fail-fast 이전 작동 fixture 확인**: RS-1 fixture (task-2707 tdd_check fail-fast replay) 에서 `callback-prereg-launch.json` 생성 확인 + ANU key 강제
8. **duplicate callback idempotent skip 확인**: RS-4 fixture (동일 task_id::callback_kind 2회 호출) 에서 1차만 launch · 2차+ silent skip + lock file 동작
9. **Layer 1 self-fail recursion 방지 확인**: RS-5 fixture (Layer 1 validator FAIL mock) 에서 `P2A_LAYER2_FALLBACK_DONE` 환경변수 설정 + Layer 2 fallback 1회 호출 + Layer 1 재진입 0
10. **forbidden_files 외 변경 없음 확인**: `git diff b8f9276^..HEAD --name-only` 결과에서 `dispatch.py / dispatch/__init__.py / dispatch/normal_fallback_callback_helper.py / scripts/session-watchdog.sh / .claude/settings.json / scripts/harness/v36/dispatch_marker_writer.py / qc_verify.py / utils/merge_queue_executor.py / utils/real_merge_hooks.py / anu_v3/` 모두 부재 확인
11. **GitHub write 0 / PR 0 / branch push 0 / merge 0 확인**: `gh pr list` + `git log origin/main..HEAD` (★ remote push 없음) + `.git/HEAD` 동일성
12. **scope-guard FAIL 원인 분리 확인**:
    - (a) `memory/capabilities/task-2708.json` `allowed_resources.paths` 값 = `null` 확인 (★ schema mismatch evidence)
    - (b) `memory/events/task-2708.scope-violation.json` 59 violations 중 봇 commits (b8f9276^..HEAD) 8 files 의 (★ paths-null false positive) + task-2703 contamination 47 files 분리 박제
    - (c) implementation diff 자체에 forbidden_files 0건 (★ item 10 정합)
    - (d) verdict: scope-guard FAIL 원인 = infrastructure defect (★ task-2708 구현 자체 결함 0)

---

## 3. OUT-OF-SCOPE (★ 회장 verbatim 11 강제)

- ★ dispatch.py 수정 0
- ★ allowed_resources generator 수정 0
- ★ branch 재구성 0
- ★ task-2703 main merge 0
- ★ finish-task.sh **재실행 0** (★ 회장 verbatim '재실행 금지')
- ★ `.done` 생성 0
- ★ manual callback cron 생성 0
- ★ P2-B/C/D 구현 0
- ★ P1-C 구현 0
- ★ GitHub write / PR / branch push / merge 0
- ★ allowed_resources.paths=null bug fix 시도 0 (★ 별도 infra defect 후보로 보존)

---

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

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

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

★ ANU 자체 분류 결정 0 — verifier evidence-only 선택.

---

## 5. Allowed / Forbidden Files

### 5.1 expected_files (★ verifier artifacts only)

1. `memory/events/task-2708+1.decision.json` (★ verifier final verdict + 12 items 박제)
2. `memory/reports/task-2708+1.md` (★ 5 형식: confirmed_fact / caveat / blocker / verdict / recommendation)
3. `memory/events/task-2708+1.dispatched-20260529.json` (★ dispatch.py 자동 생성 · executor 작성 0)
4. `memory/events/task-2708+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`
- `scripts/harness/v36/callback_preregistration.py` (★ task-2708 산물 보존)
- `dispatch.py` / `dispatch/__init__.py` / `dispatch/normal_fallback_callback_helper.py`
- `scripts/session-watchdog.sh`
- `.claude/settings.json` / `/home/jay/.claude/settings.json`
- `scripts/harness/v36/dispatch_marker_writer.py`
- `qc_verify.py`
- `utils/merge_queue_executor.py` / `utils/real_merge_hooks.py`
- `anu_v3/`
- 모든 production code (★ read-only verifier 범위)

### 5.4 Capability Scope YAML (★ dispatch.py L4769 parser + scope-guard 강제 대상 · paths key explicit)

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

★ `paths` key explicit 포함 = 회장 verbatim 'allowed_resources.paths=null + branch contamination 별도 infra defect 후보로 보존' 정합 + 본 task-2708+1 read-only verifier scope-guard 우회 회피 정합.

---

## 6. Step-by-Step Verification Plan

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

- `git log -5 --oneline` → b8f9276 / 7a86782 / 3c7b371 / a5307b7 / 619db04 박제
- `git log --pretty=format:"%H %ad %s" b8f9276^..HEAD --date=iso -- scripts/finish-task.sh` 박제
- `sha256sum scripts/harness/v36/callback_preregistration.py` 박제
- `wc -l scripts/harness/v36/callback_preregistration.py` 박제

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

§2 의 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-2708+1.decision.json` (★ 12 items + 5 enum verdict)
- `memory/reports/task-2708+1.md` (★ 5 형식 보고)
- `memory/events/task-2708+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-2708+1-normal-completion.json` (★ Layer 1 validator trigger)
- ★ callback prompt UTF-8 byte 측정

---

## 7. Acceptance Criteria

1. ★ 12 verification items 박제 (★ §2 verbatim)
2. ★ forbidden_files 13 sha256 동일 (★ §5.3)
3. ★ allowed_existing_file_edits = NONE
4. ★ verifier artifacts 4 files only (★ §5.1)
5. ★ 5 enum verdict 1건 박제 (★ §4)
6. ★ ANU normal callback cron 등록 (★ ANU key 강제)
7. ★ §3 out-of-scope 11 위반 0

---

## 8. Regression Smoke (★ read-only · §2 item 4-6 verbatim)

- import smoke (★ `scripts/harness/v36/callback_preregistration` 모듈 import OK)
- RS-1~5 fixture 재현 (★ pytest 5/5 PASS)
- existing harness 413 PASS 재현
- `bash -n scripts/finish-task.sh` PASS

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

---

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

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

★ envelope UTF-8 byte ≤ 3900 hard limit · 상세는 `result_path` / `report_path` 위임.

---

## 10. Safe-Fail Strategy

- 모든 step unexpected error → 즉시 멈춤 · `.escalate` marker 작성 · 회장 보고 대기
- forbidden_files sha 변화 감지 → 즉시 멈춤 · `.escalate` 작성 (★ catastrophic)
- §3 out-of-scope 11 항목 중 1건이라도 위반 감지 → 즉시 멈춤 · `.escalate`
- 5 enum 판정 모호 → `HOLD_FOR_CHAIR` 선택 (★ ANU 자체 forced FULL_ACCEPT 0)

---

## 11. Out-of-Scope (★ 명시 강제 · §3 verbatim 정합)

- ★ task-2708 commit revert 0
- ★ task-2708 `.done` 생성 0
- ★ task-2708 finish-task.sh **재실행 0** (★ 회장 verbatim '재실행 금지')
- ★ task-2708 routing fail caveat 변경 0
- ★ P2-B/C/D 구현 / P1-C 구현 / task-2709 자동 발의 0
- ★ allowed_resources.paths=null bug fix 시도 0 (★ 별도 infra defect 보존)
- ★ branch 재구성 / task-2703 main merge 0

---

## 12. ANU Doctrine Compliance

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

---

## 13. Linked Markers

- `memory/tasks/task-2708.md` / `memory/tasks/task-2708_v2.md` (★ parent task md · v2)
- `memory/events/task-2708.escalate` (★ scope_guard_violation marker)
- `memory/events/task-2708.escalation-detail-260529.json` (★ Hermes self-attestation IMPLEMENTATION_COMPLETE_BUT_COMPLETION_BLOCKED_BY_INFRASTRUCTURE)
- `memory/events/task-2708.scope-violation.json` (★ 59 violations)
- `memory/events/task-2708.scope-diff.txt`
- `memory/capabilities/task-2708.json` (★ paths:null infra defect evidence)
- `memory/events/task-2708.dispatched-spawn-verified-260529.json`
- `memory/events/task-2708.dispatched-20260529.json`
- `memory/events/task-2708.draft-v2-created-260529.json`
- `memory/events/task-2708.anu-await-callback-wait-mode-260529.json`
- `memory/specs/p2_contract_refinement_r6_r14_260529.md`
- `memory/events/task-2707+1.decision.json` (★ lineage pattern 정합 · verifier 12/12 PASS)
- `memory/events/c1_dispatch_marker_writer_formalization_accepted_with_known_caveats_chair_closeout_260529.json`

---

## 14. Sentinel

★ 본 task-2708+1 = read-only verifier · dev2 오딘 단독 발사 · 12 items + 5 enum + 4 artifacts · `.done` 생성 0 / finish-task 재실행 0 / commit revert 0 · 회장 verbatim 11 금지 정합. 끝