# task-2668 보고서 — V3_1_CODEX_MICRO_REFINEMENT_PHASE_2_PLANNING_PACKET (Track E)

- task_id: task-2668
- level: Lv.3 (★ packet/spec only · live runtime 변경 0 · 코드 수정 0 · commit/push/PR/merge 0)
- 담당: dev1 헤르메스 (★ 회장 verbatim 지정)
- chair_authorization_id: `CHAIR-AUTH-V3-1-CODEX-MICRO-REFINEMENT-PHASE-2-PACKET-20260525-JJONGS-PHASE-2-PLAN-001`
- base_commit: origin/main HEAD `2752182a` (PR #148 merged)
- worktree: `/home/jay/workspace/.worktrees/task-2668-dev1` (branch `task/task-2668-dev1`)
- 작성일시: 2026-05-25 22:34 KST

## Situation

ANU v3.1 Codex Micro Refinement Loop Core (task-2662 PR #149 head 4bb627fe) 가 X1 자동수렴 완료 (Thread 3+4 resolved · regression 16/16 PASS). 회장 verbatim 결정: Phase 2 진입 전 사전 설계 spec 박제. 본 task 는 dev1 헤르베스 단독 Track E 로, Phase 2 6 영역 정책의 planning packet (★ 코드 수정 0 · live runtime 0 · PR 0 · merge 0) 을 박제한다.

## Complication

Phase 1 Core 의 `RoundOutcome.codex_payload` 는 verdict + recommendations + critical_7 만 강제, finding 의 priority/path/line/subject/suggested_fix/auto_remediation_eligible 는 free-form 이다. Phase 2 에서 (1) re-lint loop convergence, (2) PASS_WITH_RECOMMENDATIONS 의 X1 auto-remediation, (3) Critical7 즉시 HOLD, (4) PR watcher 12 필드 연계, (5) GO_READY/HOLD packet 의 evidence 단일소스 화를 안정 운영하려면 6 필수 필드 schema 가 필요하다. 동시에 task md 의 금지 10 (utils/** · tests/** · schemas/** · dispatch.py · live settings.json · hooks live · Axis 1/2/3 · HARNESS_ENFORCED · BLOCK 정책 확대 · 실 GitHub mutation) 을 절대 0 으로 유지해야 한다.

## Question

본 task 의 산출물은 무엇이며 Phase 3 (실 적용) 진입 조건은 무엇인가?

## Answer

### 1. 산출물 — 7 spec + 1 결과 JSON + 1 done + 1 보고서

| # | 경로 | 비고 |
|---|---|---|
| 1 | `memory/specs/v3_1_codex_micro_refinement_phase_2_planning_packet_260525.md` | 통합 packet (★ 6 영역 요약 + 보고 9) |
| 2 | `memory/specs/v3_1_codex_micro_refinement_phase_2_input_schema_extension_260525.md` | Codex/Gemini finding v2 schema (6 필수 + 4 권장) |
| 3 | `memory/specs/v3_1_codex_micro_refinement_phase_2_relint_loop_round_policy_260525.md` | NO_HARD_CAP 유지 + LOOP_BOUNDARY exit 추가 |
| 4 | `memory/specs/v3_1_codex_micro_refinement_phase_2_pass_with_recommendations_policy_260525.md` | 3 분기 (A auto-remediation / B 즉시 HOLD / C GO_READY 통과) |
| 5 | `memory/specs/v3_1_codex_micro_refinement_phase_2_critical_7_immediate_hold_260525.md` | C7 7 enum + 9 gate 매핑 + hold_reason 우선순위 8 |
| 6 | `memory/specs/v3_1_codex_micro_refinement_phase_2_pr_watcher_integration_260525.md` | CI_WATCH_HANDOFF 12 필드 + 5 terminal_states |
| 7 | `memory/specs/v3_1_codex_micro_refinement_phase_2_go_ready_hold_packet_examples_260525.md` | GO_READY + HOLD_FOR_CHAIR 2 sample JSON + field list |
| 8 | `memory/events/task-2668.v3-1-phase-2-planning-packet-result-260525.json` | 보고 9 result marker |
| 9 | `memory/events/task-2668.done` | 완료 마커 |
| 10 | `memory/reports/task-2668.md` | 본 보고서 |

### 2. 보고 9 (task md verbatim 1:1 요약)

#### 2.1 input schema 확장 summary (보고 1)

6 필수 필드 박제: `finding_id` · `priority` (HIGH/medium/low verbatim case) · `path` · `subject` · `suggested_fix` · `auto_remediation_eligible`. 4 권장: `line` · `gate_classification` · `source` · `round_index`. eligibility 판정 4 원칙: HIGH=false / medium+gate=none+path∈expected_files=true / gate≠none=즉시 HOLD / low=true.

#### 2.2 re-lint loop summary (보고 2)

`round_limit_policy = NO_HARD_CAP_FOR_MICRO_REFINEMENT` Phase 2 유지 (★ task-2662 ANCHOR-3 1:1). `max_rounds` 양수 cap 도입 0. Convergence exit 3 종: GO_READY · HOLD_FOR_CHAIR · LOOP_BOUNDARY (★ Phase 2 신규 detection). Exit precedence 5 단계.

#### 2.3 PASS_WITH_RECOMMENDATIONS summary (보고 3)

3 분기: A auto-remediation re-lint (6 조건 동시 true) / B 즉시 HOLD (HIGH 또는 Critical7 gate 등장) / C GO_READY 통과 (expected_files 밖 medium 보존). X1 eligibility 출처 = 회장 verbatim PR #148 medium auto remediation (2026-05-22).

#### 2.4 Critical7 7 enum verbatim (보고 4)

> 1. path/permission expansion
> 2. credential expansion
> 3. BLOCK 정책 확대
> 4. scope expansion
> 5. real write/merge
> 6. forbidden path
> 7. runtime policy 변경

→ 7 enum 중 하나라도 등장 시 즉시 HOLD. hold_reason 결정 우선순위 8 단계 (forbidden → credential → real_write → block_policy → runtime → permission → scope → critical_7 catch-all).

#### 2.5 PR watcher 12 필드 매핑 (보고 5)

`pr_number` · `head_sha` · `branch` · `expected_files` · `forbidden_paths` · `watcher_owner` · `max_watch_minutes` · `poll_interval_seconds` · `gemini_nudge_policy` · `auto_remediation_policy` · `callback_on_terminal_state` · `terminal_states`. 5 terminal_states 1:1 (MERGE_READY · CHAIR_REQUIRED · GEMINI_EXTERNAL_TRIGGER_STALE · CI_FAILED_NON_REMEDIABLE · LOOP_BOUNDARY). ANU normal callback **단 1회** (envelope UTF-8 ≤3900 bytes · `anu_callback_registrar.py` · self-key 0).

#### 2.6 packet 예시 2종 인용 (보고 6)

**GO_READY (task-2700, PASS_WITH_RECOMMENDATIONS, rounds=3, MERGE_READY 후속)** — `chair_command="APPROVE FINAL_GO task-2700 verdict=PASS_WITH_RECOMMENDATIONS policy=v3_1_codex_micro_refinement_phase_2_planning_packet_no_auto_merge"` · `phase_2_extension.auto_remediation_applied.round=2 · finding=r2-gemini-medium-1 (priority=medium · gate=none · path=memory/reports/task-2700.md:88)` · `critical_7_cross_check.result=NEGATIVE`.

**HOLD_FOR_CHAIR (task-2701, HIGH + forbidden_path, hold_reason=FORBIDDEN_WRITE_TARGET, CHAIR_REQUIRED 후속)** — `triggered_gates=[forbidden_write_target, critical_7]` · `decision_items[0]=(gate=forbidden_write_target · finding_id=r1-codex-3 · priority=HIGH · path=dispatch.py · subject="fix would require dispatch.py edit" · suggested_fix="Move dispatch hook into utils/ instead of dispatch.py")` · `phase_2_extension.c7_enum_triggered=[forbidden_path]`.

field list — GO_READY 14+1(phase_2_extension), HOLD 11+1, decision_items 7 (gate · reason · offending_paths · finding_id · priority · subject · suggested_fix). v1 backward compatible.

#### 2.7 file overlap (보고 7)

task-2662~2667 와의 충돌 = **0**. 본 task 의 산출물은 모두 `memory/specs/v3_1_codex_micro_refinement_phase_2_*.md` + `memory/events/task-2668.*` + `memory/reports/task-2668.md`. forbidden_paths 16종 그대로 준수.

#### 2.8 forbidden_action_count (보고 8)

= **0**. 검증 13 항목 모두 0 (코드 수정 / PR / merge / dispatch / runtime / live settings / dispatch.py / hooks live / Axis / HARNESS_ENFORCED 전체 / BOT App token / 실 GitHub mutation / task-2662~2667·2669 수정).

#### 2.9 recommended next action (보고 9)

★ **Phase 3 (또는 Phase 2 코드 적용) 진입 전 별도 회장 verbatim signature 강제**.

권장 signature 라인:
- `APPROVE PHASE_2_IMPL v3_1_codex_micro_refinement task=task-2668 packet=v3_1_codex_micro_refinement_phase_2_planning_packet_260525 policy=plan_only_no_runtime_change`
- `APPROVE PHASE_3_LIVE v3_1_codex_micro_refinement task=task-XXXX packet=v3_1_codex_micro_refinement_phase_3_live_packet_YYMMDD policy=restricted_live_enforcement`

후속 작업 흐름:
1. 본 packet 회장 verbatim 박제 승인
2. Phase 2 patch task 발행 (★ 별도 chair_authorization_id) — finding v2 schema 적용 + LOOP_BOUNDARY exit + auto_remediation re-lint helper + Critical7 hold_reason 우선순위 8 단계 + CI_WATCH_HANDOFF adapter
3. Phase 3 진입 회장 verbatim 별도 강제

### 3. 안전 불변식 (★ 본 task 수행 중 0 위반)

- ANU key `c119085addb0f8b7` 단일 출처 유지 (★ ANU normal callback cron 도 동일 키 사용)
- BOT App token (ghs_) 사용 0
- forbidden_paths 16종 무수정
- task-2662~2667 / task-2669 의 tasks/events 무수정
- 코드 수정 (utils/** · tests/** · schemas/**) 0
- PR/merge/push 0
- live settings.json / hooks live / dispatch.py 무수정
- Axis 1/2/3 runtime / HARNESS_ENFORCED 전체 선언 0

### 4. 머지 판단

- **머지 필요**: No (★ packet only · 코드 변경 0)
- **브랜치**: `task/task-2668-dev1`
- **워크트리 경로**: `/home/jay/workspace/.worktrees/task-2668-dev1`
- **머지 의견**: 본 task 는 회장 verbatim 1:1 "live runtime 변경 0 · commit/push/PR/merge 0" 박제. memory/specs · memory/events · memory/reports 의 spec 박제는 본 worktree 에 격리 상태로 유지하며, Phase 2 코드 patch 가 별도 task 로 발행될 때 main 으로 통합 정책 결정 강제.

### 5. 발견 이슈 및 해결

본 task 수행 중 발견된 외부 이슈 없음. task md `## allowed_resources.read_only_reference` 중 `memory/feedback_gemini_medium_auto_remediation_260522.md` 는 현 worktree 시점 파일이 존재하지 않으나, **X1 eligibility 의 실 verbatim 근거**는 `memory/events/pr-148-gemini-medium-auto-remediated-260525.json` (현 main 박제) 로 확인 가능. sub-spec 3 §6 에 출처를 1:1 인용했음.

### 6. 모델 사용 기록

- 팀장 직접 작성 (subagent 위임 0). 본 task 는 spec 박제 · 코드 0 · 회장 verbatim 1:1 인용이 핵심이라 Opus 본체가 직접 박제했다. Sonnet/Haiku 위임은 spec verbatim 의 부정확 위험으로 거절.

## 7. 완료 마커 (회장 verbatim)

**성공: `V3_1_CODEX_MICRO_REFINEMENT_PHASE_2_PACKET_READY`**

---
끝 (Track E · task-2668 헤르메스 보고)
