# task-2612 — Track C: auto_remediation_planner (완료 보고)

> **Executor**: dev4-team 비슈누 (key 7943afbe12c12f7d, 1회 한정)
> **spec sha256**: `3b9599cb24fe7e0a343440855cb5799063e2dfba590c06248075a93ddc17a58e` (일치 확인)
> **상태**: IMPLEMENTED_PLAN_ONLY · doc_only=false · plan_only=true · dispatch_performed=false
> **9-R**: GO_READY (HIGH/CRITICAL 0) · re-lint 불요
> **callback owner**: 독립 ANU key `c119085addb0f8b7` (executor self key `7943afbe12c12f7d` 절대 금지 — +49 정본)

## 1. 목표 (회장 verbatim)

Critical7이 아니면 ANU-Codex loop로 자동 remediation하여 all-settled까지 진행하는 구조의 **remediation plan 생성부**를 구현. 실제 dispatch/코드수정은 본 track 산출 아님 (plan only).

## 2. 산출물 (§4 allowlist — DISJOINT)

- `anu_v3/auto_remediation_planner.py` (685 lines, sha256 `150e7999…a5b364`)
- `schemas/auto_remediation_plan.schema.json` (144 lines, draft-07, sha256 `272a6f41…9bc6f430`)
- `memory/events/task-2612.{decision,result}.json`
- `memory/reports/task-2612.md`

allowlist 외 write 0. 기존 task-2553·task-2604 multitrack 산출물·frozen anchor byte-0 (read-only consume only).

## 3. 설계

`IssueClassification`(분류 입력) → `RemediationPlan`(새 task ID remediation spec 골격) 변환기. 세 유형:

- **GLOBAL_LEDGER_SHA_FALSE_POSITIVE (2604)** — 전역 ledger SHA full-file 하드핀이 sanctioned cross-track append 와 자가모순(false-positive). plan: track-scoped invariant 3요소(본 track self-append 0 · prefix byte 보존 · append-only 성장만)로 교정, 기능 로직 무변경, isolated /tmp ledger 양방향 self-proof.
- **STAGE_CLAIM_TEST_MISMATCH (2605)** — claimed real-entrypoint stage(예: stage9) 미실증(부분 stage 만 real · regression range 절단). plan: spy/monkeypatch 로 해당 stage 실호출 포착·단언, regression range 전 stage 확장, **mock-only 테스트는 반드시 FAIL** 하도록 가드(허위 PASS 차단).
- **COVERAGE_GAP (2609)** — mandated fixture 가 특정 standalone 조건을 한 번도 exercise 안 함(verdict logic 미망라). plan: 조건별 격리 fixture 추가, 실 entrypoint 위에서 fail-safe 방향(보수적 HOLD/non-merge) 결정적 수렴 실증, 기존 mandated regression 무회귀 additive.

생성 골격 필드: `task_id · title · executor_hint · goal(목표) · must(필수) · forbidden(금지) · expected_files(allowlist) · nine_r(9-R GO_READY 기준)`.

### disposition 분류 (회장 §3/§6 verbatim)

- Critical7 **또는** shared invariant 파손 → `HOLD_FOR_CHAIR`
- 그 외 non-Critical → `AUTO_REMEDIATION_HOLD` 자동 수렴 (회장 개별 확인 대기 없음)
- Critical7 권위 판정은 TrackB `critical7_classifier` 소관 — 본 planner 는 `is_critical7` 을 **입력으로만 소비** (DISJOINT · 중복 소유 0)

### plan-only 강제

`PLAN_ONLY=True` / `DISPATCH_PERFORMED=False` 불변식 + `assert_plan_only()` — AST Call 노드로 `subprocess.*` / `os.system` / `Popen` 등 **실호출만** 정적 탐지(문자열·주석 언급은 허용, 자기-오탐 0). 모든 공개 entrypoint 진입 시 호출.

## 4. 검증 (문서-only 아님)

- **pyright**: 0 errors / 0 warnings / 0 informations.
- **실 entrypoint self-check (mock 0)**: 실 `task-2604+1` / `task-2605+2` / `task-2609` adjudication 증거를 read-only consume → 실 plan 3종 생성·스키마 검증 `all_passed=true`. 각각 `task-2604-AR1` / `task-2605-AR1` / `task-2609-AR1` → AUTO_REMEDIATION_HOLD.
- **mock-only FAIL 실증**: 부재 증거 경로 → `FileNotFoundError` (mock-only/문서-only 완료 차단).
- **disposition routing 실증**: non-Critical HIGH → AUTO_REMEDIATION_HOLD(3건) · `is_critical7=true` → HOLD_FOR_CHAIR · `shared_invariant_broken=true` → HOLD_FOR_CHAIR.
- **schema 검증**: 생성 plan 3종 전부 jsonschema Draft7Validator 0 errors.

## 5. shared invariant

git HEAD `20456b5f83fc039f2fd6f50f4b94095c29b41bfb` 전후 EQUAL · branch `task/task-2553p1-f1-clean-replacement` 무변경 · 기존 task-2553·task-2604 multitrack 산출물 내 변경으로 인한 수정 0 · expected_files overlap 0 · PR/merge/branch/main write/credential 0 · executor self-* 0.

## 6. 다음 단계

완료 직후 normal completion callback 을 **독립 ANU key `c119085addb0f8b7`** 로만 발사 → 독립 ANU collector 회수·검증·Codex 재audit·adjudication. non-Critical HIGH 잔존 시 AUTO_REMEDIATION_HOLD 자동 수렴. HIGH/CRITICAL 0 또는 non-critical 자동분류·재lint PASS 후 +53 write-back → +54·+55 dogfood. authoritative = 독립 ANU only.
