# task-2709+1 — task-2709 infra defect 1 fix independent verification (read-only)

★ READ-ONLY VERIFIER · 회장 verbatim 인가 · dev2 오딘 (Odin) · 5 enum verdict · `.done` 생성 금지 · `finish-task.sh` 재실행 금지 · **defect 1 해결 여부만 평가** · completion routing 별도 caveat.

---

## 0. Header / Authorization Anchor

- **task_id**: `task-2709+1`
- **task_type**: `read_only` (★ Maat 독립 검증 lineage 정합)
- **chair_authorization_id**: `CHAIR-AUTH-TASK-2709PLUS1-DEFECT1-FIX-INDEPENDENT-VERIFICATION-READONLY-260529`
- **executor_team**: `dev2-team` (오딘 · Odin)
- **parent_task**: `task-2709` (★ infra defect 1 fix · IMPLEMENTATION_COMPLETE_DEFECT1_FIXED_BUT_COMPLETION_BLOCKED_BY_INFRA_DEFECT2 후보)
- **parent_classification_candidate_chair_verbatim**: `IMPLEMENTATION_COMPLETE_DEFECT1_FIXED_BUT_COMPLETION_BLOCKED_BY_INFRA_DEFECT2` (★ ANU 자체 확정 0 · 회장 verbatim 후보 분류)
- **scope**: ★ READ-ONLY ONLY (★ verifier artifacts only)
- **doctrine_anchor**: executor (dev1 헤르메스) ≠ verifier (dev2 오딘) 분리 강제 · "evidence 만 따른다" · ANU 자체 분류 결정 0 · **defect 1 해결 여부만 평가**
- **anu_collector_key**: `c119085addb0f8b7`
- **callback_envelope_prompt_byte_limit**: UTF-8 ≤ 3900 bytes hard (★ wc -c · NOT wc -m)

---

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

1. ★ task-2709 목표는 infra defect 1 해결
2. ★ RS-3 replay PASS
3. ★ capability snapshot paths key 정상
4. ★ self_file_scope_violations = 0
5. ★ task-2709 자체 files scope violation = 0
6. ★ blocker 는 infra defect 1 이 아니라 infra defect 2 (shared branch contamination)
7. ★ 따라서 task-2709 는 "defect 1 해결 여부"와 "completion routing 성공 여부"를 분리해서 봐야 한다

**본 task-2709+1 = defect 1 해결 여부 독립 검증 only** (★ 회장 verbatim 목표 강제)

---

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

1. **dispatch.py normalization 동작 확인**:
   - `dispatch/__init__.py` 봇 commits 50bdce87 diff 확인
   - `_parse_allowed_resources` + `_parse_allowed_resources_regex` cross-key normalization 로직 박제
   - task md 가 `expected_files` + `allowed_existing_file_edits` 만 사용 시 `paths` union normalization 실증

2. **task-scope-guard fallback 동작 확인**:
   - `scripts/task-scope-guard.sh` 봇 commits diff 확인
   - L63-65 reader cross-key fallback 로직 박제 (★ `paths` 비면 `expected_files` + `allowed_existing_file_edits` OR)

3. **paths key backward compatibility 확인**:
   - task-2706 capability snapshot (`paths` key list 박힘 baseline) replay
   - scope-guard PASS 확인 + 기존 동작 100% 유지 확인

4. **expected_files schema compatibility 확인**:
   - task-2707/2708 capability snapshot (★ `expected_files` + `allowed_existing_file_edits` only) replay
   - paths normalization 후 scope-guard PASS 확인

5. **mixed schema compatibility 확인**:
   - paths + expected_files 둘 다 사용 task md replay (★ task-2708+1 / task-2709+1 본 task 자체 YAML)
   - deterministic merge + 안정성 확인

6. **forbidden_paths priority 확인**:
   - forbidden_paths 매칭 파일 + paths fallback 정합
   - forbidden 강제 유지 (★ scope-guard L121 verbatim 정합)

7. **task-2708 replay PASS 재현**:
   - task-2709 봇 self-attestation: scope_guard_smoke_RS3_task2708_replay = PASS
   - 본 verifier 가 동일 replay 재실행 + PASS 재현 확인
   - 봇 commit b8f9276..HEAD 8 files 가 paths 매칭 → false positive 0 확인

8. **task-2709 자체 scope violation 0 확인**:
   - 봇 commits 3건 (★ 9cec904f / 7df68c04 / 50bdce87) diff 분석
   - 봇 자체 in-scope files (★ dispatch/__init__.py / scripts/task-scope-guard.sh / tests/test_allowed_resources_paths_normalization.py / memory/reports/task-2709.md / memory/events/task-2709.formalization-commit-260529.json / memory/events/task-2709.callback-envelope.json) 가 모두 paths 매칭
   - self_file_scope_violations = 0 확인

---

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

- ★ infra defect 2 (shared branch contamination) 해결 시도 0 (★ 독립 원인 유지 · 다음 우선순위 승격 후보)
- ★ completion routing 성공 여부 평가 0 (★ defect 1 해결 여부만 평가)
- ★ branch 재구성 / task-2703 main merge 0
- ★ finish-task.sh **재실행 0**
- ★ `.done` 생성 0
- ★ manual callback cron 생성 0
- ★ P2-B/C/D / P1-C 구현 0
- ★ GitHub write / PR / branch push / merge 0
- ★ dispatch.py / scope-guard 추가 수정 0 (★ 봇 commits 50bdce87 검증만)

---

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

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

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

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

★ PASS / ACCEPT_WITH_KNOWN_CAVEATS → infra defect 1 closeout 후보 + infra defect 2 다음 우선순위 승격 (★ 회장 verbatim).

---

## 5. Allowed / Forbidden Files

### 5.1 expected_files (★ verifier artifacts only)

1. `memory/events/task-2709+1.decision.json`
2. `memory/reports/task-2709+1.md` (★ 5 형식)
3. `memory/events/task-2709+1.dispatched-20260529.json` (★ dispatch.py 자동)
4. `memory/events/task-2709+1.callback-envelope.json` (★ ANU envelope · ≤3900 bytes)

### 5.2 allowed_existing_file_edits

- **NONE** (★ read-only only)

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

- `scripts/finish-task.sh`
- `dispatch/__init__.py` (★ task-2709 산물 보존 · 봇 commit 50bdce87)
- `scripts/task-scope-guard.sh` (★ task-2709 산물 보존)
- `tests/test_allowed_resources_paths_normalization.py` (★ task-2709 산물 보존)
- `dispatch.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` (★ P2-A 산물 보존)
- `qc_verify.py`
- `utils/merge_queue_executor.py` / `utils/real_merge_hooks.py`
- `anu_v3/`
- `memory/capabilities/**`
- 모든 production code (★ read-only verifier 범위)

### 5.4 Capability Scope YAML (★ paths key explicit · scope-guard 우회 회피)

```yaml
allowed_resources:
  paths:
    - memory/events/task-2709+1.decision.json
    - memory/reports/task-2709+1.md
    - memory/events/task-2709+1.callback-envelope.json
  expected_files:
    - memory/events/task-2709+1.decision.json
    - memory/reports/task-2709+1.md
    - memory/events/task-2709+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/task-scope-guard.sh
    - 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
    - tests/test_allowed_resources_paths_normalization.py
    - qc_verify.py
    - utils/merge_queue_executor.py
    - utils/real_merge_hooks.py
    - anu_v3/
    - memory/capabilities/**
```

★ `paths` key explicit 포함 = task-2709 의 fix 가 본인부터 작동 확인 (★ dogfooding) + scope-guard 우회 회피.

---

## 6. Step-by-Step Verification Plan

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

- `git log -5 --oneline` (★ 9cec904f / 7df68c04 / 50bdce87 / e3f0fb01 / 619db04 박제)
- `git diff 50bdce87^ 50bdce87 -- dispatch/__init__.py | head -100` (★ normalization 로직 박제)
- `git diff 50bdce87^ 50bdce87 -- scripts/task-scope-guard.sh | head -50` (★ fallback 로직 박제)
- `sha256sum dispatch/__init__.py scripts/task-scope-guard.sh tests/test_allowed_resources_paths_normalization.py` 박제

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

§2 의 8 items 각각 실행 + 결과 박제.

### Step 3 — 5 enum verdict 결정 (★ evidence-only · defect 1 해결 여부만)

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

★ completion routing 성공 여부 평가 0 (★ 회장 verbatim '별도 caveat').

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

- `memory/events/task-2709+1.decision.json`
- `memory/reports/task-2709+1.md`
- `memory/events/task-2709+1.callback-envelope.json`

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

- ★ executor self-key 사용 금지 (★ SELF_COLLECTOR_FORBIDDEN)
- ★ envelope path = `memory/events/anu_callback/task-2709+1-normal-completion.json`

---

## 7. Acceptance Criteria

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

---

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

- task-2708 replay PASS 재현 (★ 봇 self-attestation 검증)
- existing harness regression 0 (★ task-2706/2707/2708 capability snapshot 회귀 0)

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

---

## 9. Callback Envelope Schema

```json
{
  "task_id": "task-2709+1",
  "chair_authorization_id": "CHAIR-AUTH-TASK-2709PLUS1-DEFECT1-FIX-INDEPENDENT-VERIFICATION-READONLY-260529",
  "executor": "dev2-team / 오딘",
  "collector_role": "ANU",
  "collector_key": "c119085addb0f8b7",
  "result_path": "memory/events/task-2709+1.decision.json",
  "report_path": "memory/reports/task-2709+1.md",
  "parent_task": "task-2709",
  "parent_classification_candidate": "IMPLEMENTATION_COMPLETE_DEFECT1_FIXED_BUT_COMPLETION_BLOCKED_BY_INFRA_DEFECT2",
  "verification_items_passed": "<N>/8",
  "final_classification": "<5_enum_one_of>",
  "anu_callback_doctrine_compliance": "executor=dev1-hermes ≠ verifier=dev2-odin 분리 강제",
  "summary_one_line": "task-2709 defect 1 fix read-only 검증 N/8 PASS · verdict=<5_enum> · infra defect 2 별도 caveat"
}
```

★ envelope UTF-8 byte ≤ 3900 hard limit.

---

## 10. Safe-Fail Strategy

- 모든 step unexpected error → 즉시 멈춤 · `.escalate` marker
- forbidden_files sha 변화 감지 → 즉시 멈춤 · `.escalate`
- §3 out-of-scope 위반 감지 → 즉시 멈춤 · `.escalate`
- 5 enum 판정 모호 → `HOLD_FOR_CHAIR` 선택 (★ ANU 자체 forced FULL_ACCEPT 0)

---

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

- ★ task-2709 commit revert 0
- ★ task-2709 `.done` 생성 0
- ★ task-2709 finish-task.sh **재실행 0**
- ★ infra defect 2 해결 시도 0 (★ 독립 원인 유지 · 다음 우선순위 승격 후보)
- ★ completion routing 성공 여부 평가 0
- ★ P2-B/C/D / P1-C 구현 / task-2710 자동 발의 0
- ★ 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 자체 infra defect 1 accepted marker 작성 0 (★ verifier PASS/ACCEPT_WITH_KNOWN_CAVEATS 후만)
- ★ ANU 자체 `.done` 생성 0
- ★ self-collector callback 금지

---

## 13. Linked Markers

- `memory/tasks/task-2709.md` (★ parent task)
- `memory/events/task-2709.formalization-commit-260529.json` (★ 봇 self-attestation)
- `memory/events/task-2709.escalate` (★ scope_guard_violation marker)
- `memory/events/task-2709.escalation-detail-260529.json` (★ Hermes self-attestation IMPLEMENTATION_COMPLETE_DEFECT1_FIXED_BUT_COMPLETION_BLOCKED_BY_INFRA_DEFECT2)
- `memory/events/task-2709.scope-violation.json` (★ 58 violations evidence · task-2709 self 0)
- `memory/capabilities/task-2709.json` (★ paths key 정상 박힘 dogfooding 성공)
- `memory/events/task-2709.dispatched-spawn-verified-260529.json`
- `memory/events/task-2709.draft-created-260529.json`
- `memory/tasks/task-2709.md` (★ 봇 commits 9cec904f / 7df68c04 / 50bdce87)
- `memory/events/p2a_callback_before_failfast_pre_registration_layer_accepted_with_known_caveats_chair_closeout_260529.json` (★ P2-A closeout)
- `memory/events/task-2708+1.decision.json` (★ lineage pattern · 12/12 PASS)
- `memory/capabilities/task-2706.json` (★ paths key baseline)
- `memory/capabilities/task-2707.json` / `memory/capabilities/task-2708.json` (★ paths=null evidence)

---

## 14. Sentinel

★ 본 task-2709+1 = read-only verifier · dev2 오딘 단독 발사 · 8 items + 5 enum + 4 artifacts · **defect 1 해결 여부만 평가** · completion routing 별도 caveat · `.done` 생성 0 / finish-task 재실행 0 / infra defect 2 해결 시도 0. 끝