# task-2708+1 — task-2708 P2-A 구현 독립 검증 보고서 (read-only verifier)

- **task_id**: task-2708+1
- **executor**: dev2-team / 오딘 (Odin) — read-only verifier
- **parent_task**: task-2708 (P2-A callback-before-failfast pre-registration layer)
- **chair_authorization_id**: CHAIR-AUTH-TASK-2708PLUS1-P2A-INDEPENDENT-VERIFICATION-READONLY-260529
- **mode**: read_only · evidence-only · ANU 자체 분류 0
- **verified_at**: 2026-05-29 19:51 KST
- **doctrine**: executor(dev1 헤르메스) ≠ verifier(dev2 오딘) 분리 강제

---

## S (Situation)

task-2708(P2-A callback-before-failfast pre-registration layer)은 dev1 헤르메스가 구현하여 봇 self-attestation 상 완료(RS-1~5 PASS, harness 413 PASS, finish-task.sh +37줄, forbidden 0)되었으나, scope-guard FAIL로 finish-task.sh가 callback registration 단계 도달 전 종료되어 부모 분류가 `IMPLEMENTATION_COMPLETE_BUT_COMPLETION_BLOCKED_BY_INFRASTRUCTURE`로 고정되었다. 회장 verbatim 인가로 dev2 오딘이 Hermes self-attestation을 12개 read-only 항목으로 독립 검증한다.

## C (Complication)

self-attestation은 봇 본인의 주장이므로 executor≠verifier 분리 원칙상 독립 증거가 필요하다. 특히 (1) finish-task.sh 변경이 hard limit 내인지 (2) RS/harness 회귀가 실제 재현되는지 (3) scope-guard FAIL이 구현 결함인지 infra 결함인지를 evidence-only로 분리 판정해야 한다.

## Q (Question)

task-2708 P2-A 구현은 read-only 증거 기준으로 수용 가능한가? scope-guard FAIL의 책임은 구현인가 인프라인가?

## A (Answer)

**12개 검증 항목 전부 PASS. final_classification = `ACCEPT_WITH_KNOWN_CAVEATS`.**
구현 자체는 건전(12/12 PASS)하나 completion routing 차단은 구현 결함이 아니라 `allowed_resources.paths=null` schema mismatch + task-2703 shared-branch contamination이라는 **infrastructure defect**에 기인함을 증거로 분리 확정했다.

---

## confirmed_fact (확정 사실)

1. **finish-task.sh Hunk A/B/C 실재**: 3개 hunk diff 확인 — (A) §0.5 callback pre-registration layer(ANU key, fail-fast exit1 이전), (B) exit1 직전 Layer2 fallback 1회 호출(P2A_LAYER2_FALLBACK_DONE guard), (C) L1580 Layer2 registrar SKIP guard(prereg-lock 존재 시).
2. **변경 라인 +38 insertions / 0 deletions = 38 ≤ 75** (hard limit 내).
3. **callback_preregistration.py**: 존재 · 235 lines · sha256=`3691990486...2fef00` · chair_authorization_id 박힘(L3, L195) · R8(Layer 분리)/R10(self-fail recursion 회피)/R11(결정성 1회 통과) 행위 정합.
4. **RS-1~5 = 5/5 PASS** (0.15s), import smoke OK.
5. **existing harness = 413 passed** (2.86s), 회귀 0 — 자기보고와 정확 일치.
6. **bash -n finish-task.sh = exit 0** (syntax OK).
7. **RS-1 fail-fast 이전 작동**: callback-prereg-launch.json 생성 + ANU key + lock + status ANU_OWNED_READY + launch 1회.
8. **RS-4 idempotent skip**: 2차 호출 silent skip(call count 1 유지, mtime 불변, lock 존재).
9. **RS-5 recursion 방지**: fallback-lock 기반 재진입 0(2차 launch 미호출) + 보완적으로 finish-task.sh P2A_LAYER2_FALLBACK_DONE shell guard.
10. **forbidden production files 0건**: b8f9276^..HEAD 변경 9파일 중 dispatch.py·session-watchdog.sh·.claude/settings.json·dispatch_marker_writer.py·qc_verify.py·merge_queue_executor.py·real_merge_hooks.py·anu_v3/ 전부 부재.
11. **GitHub write 0**: task-2708/2708+1 PR 부재, 브랜치 origin 미push, b8f9276 원격 미포함.
12. **scope-guard FAIL 원인 = infra defect**: (a) task-2708.json `allowed_resources.paths = null`(schema mismatch) (b) 59 violations = 봇 lineage 8파일(전부 paths=null false positive "paths 미포함", forbidden 위반 0) + 비-봇 51(4 forbidden + 47 paths-미포함, 전부 task-2703 contamination) (c) implementation diff forbidden 0 (d) 구현 결함 0.

## caveat (알려진 단서)

1. **completion routing block 지속** = scope-guard FAIL infra caveat. `allowed_resources.paths=null` + task-2703 contamination 미해소 시 task-2708 completion 차단 유지. 부모 분류 `IMPLEMENTATION_COMPLETE_BUT_COMPLETION_BLOCKED_BY_INFRASTRUCTURE` 유지. (본 task 범위 외 — 별도 infra defect 후보로 보존)
2. **self-attestation +37 vs 실측 +38** (1줄 차이, 75 한도 내, immaterial).
3. **R8/R10/R11**: 행위적 정합 O, 소스 내 R-tag 문자열 직접 박제 X (behavioral, not textual).

## blocker (차단 요소)

- 없음 (검증 자체의 차단 요소 0). task-2708 completion의 차단은 caveat 1 (infra defect)로 분류되며 본 verifier의 차단 요소가 아님.

## verdict (판정)

**`ACCEPT_WITH_KNOWN_CAVEATS`** — 12/12 PASS이나 caveat ≠ 0(특히 completion routing block infra caveat 유지)이므로 FULL_ACCEPT 아님. lineage(task-2707+1, 동일 12/12 PASS 상황)와 동일 판정. evidence-only 선택, ANU 자체 분류 0.

## recommendation (권고)

1. **allowed_resources generator의 paths=null 산출 버그** 수정 task 별도 발의 (본 verifier 범위 외, fix 시도 0).
2. **task-2703 shared-branch contamination** 정리 (47 files).
3. 위 2개 infra defect 해소 후 task-2708 completion routing 정상화 기대.
4. task-2708 구현 산출물(finish-task.sh Hunk A/B/C, callback_preregistration.py, RS-1~5, fixtures)은 sha256 동일 보존 권고.

---

## L1 스모크테스트 결과 (read-only verifier 특성)

본 task는 **read-only 독립 검증**으로 production 코드 수정 0건이다. 따라서 서버 재시작/배포형 L1은 해당없음이며, 대신 검증 항목의 실제 실행(코드 import + pytest 실동작)으로 L1을 충족한다.

- **서버 재시작**: 해당없음 (read-only, 코드 수정 0 · 배포 대상 아님)
- **API 응답 확인**: 해당없음 (백엔드 API 변경 0). 대신 실동작 검증 = `python3 -c "import scripts.harness.v36.callback_preregistration"` → IMPORT_OK(main 존재) + `pytest tests/harness/test_p2a_callback_preregistration.py -v` → 5 passed + `pytest tests/harness/ -q` → 413 passed (실제 실행 통과)
- **스크린샷**: 해당없음 (프론트엔드 작업 아님)

L1 충족: import smoke + RS-1~5 pytest + harness 413 pytest를 **실제 실행하여 통과**(SKIP 0). bash -n finish-task.sh도 실제 실행 exit 0.

---

## 생성/수정 파일 목록

생성(verifier artifacts only · read-only 정합):
- `memory/events/task-2708+1.decision.json` (12 items + 5 enum verdict)
- `memory/reports/task-2708+1.md` (본 보고서)
- `memory/events/task-2708+1.callback-envelope.json` (ANU normal callback envelope · UTF-8 ≤3900 bytes)
- `memory/events/anu_callback/task-2708+1-normal-completion.json` (ANU normal callback trigger envelope)

수정(기존 파일): **없음** (allowed_existing_file_edits = NONE · forbidden_files 13 sha256 불변)

## 모델 사용 기록

- 검증/판정(분석성 read-only 작업)은 팀장(오딘, Opus)이 직접 수행. 12개 항목 전부 git/pytest/file 증거 기반 evidence-only 판정으로, 하위 위임보다 팀장 직접 판정이 doctrine(executor≠verifier 분리) 정합. 코딩 위임 대상 없음(production 코드 수정 0).

## 비고

- §3 out-of-scope 11 항목 위반 0 (dispatch.py 수정 0, finish-task.sh 재실행 0, .done 생성 0, paths=null fix 시도 0, GitHub write 0 등).
- ANU normal callback cron 등록은 ANU 독립 key(c119085addb0f8b7)로 수행 — executor self-key 미사용(SELF_COLLECTOR_FORBIDDEN 정합).
