# task-2722+2 — bounded fix budget doctrine 박제 + PR #168 dispatch 준비

## 작업 일시
2026-06-02 22:28~22:40 KST (~12분)

## 작업 범위 (회장 verbatim 2026-06-02)
1. A~Z bounded loop + loop budget doctrine 박제
2. PR #168 task-2722+1 uuid tmp suffix fix dispatch 준비 (bounded fix #2/2)
3. 정책 업데이트는 PR #168 diff에 섞지 않는 분리 path
4. 절단(TRUNCATED) schema는 추측 0, 재전송 대기

## 보고 형식 7항목 (회장 §"보고 형식")

### 1. PR #168 current_state
- title: `[task-2722] P0-b+1: result.json writer atomicization (fsync 보강)`
- HEAD: `59cb1b651f91e2537dc305f89cfc11eda15b129b`
- branch: `task/task-2722-dev1`
- mergeStateStatus: **BLOCKED**, mergeable: MERGEABLE
- author: JonghyukJeon (person), last commit committers: 봇 + Claude Opus 4.8
- CI 11/11: **ALL SUCCESS** (이전 task-2566 self-hosted runner $0 path 적용 후)
- Gemini latest review SHA: `59cb1b65` (current HEAD) → **FRESH**
- unresolved threads: 5 total (outdated 2 + valid 3)
  - [1] MEDIUM outdated — tmp 누수 (해소됨, commit 59cb1b65)
  - [3] MEDIUM outdated — tmp 누수 (해소됨)
  - [2] MEDIUM valid — `test_21` .tmp cleanup assertion 보강
  - **[4] HIGH valid** — `_atomic_write_json` line 688 `os.getpid()` thread-collision (uuid suffix 필요)
  - [5] MEDIUM valid — uuid 적용 후 tmp_path 예측 테스트 수정 필요

### 2. bounded_fix_budget status
- count_unit: `remediation_round` (회장 §1 primary)
- counter:
  - #1/2 = commit `59cb1b65` (medium tmp cleanup, 2026-06-02 12:13:48 push됨)
  - #2/2 = task-2722+1 uuid tmp suffix fix (회장 §5 명시 승인, dispatch 준비)
- 보조 카운터: `codex_cycle=0`, `gemini_cycle=3`, `push_count=3`, `task_plus_n=1`
- post-#2/2: 새 HIGH/CRITICAL → 자동 fix 0 + 즉시 CHAIR_REQUIRED, medium 반복 → defer/evidence resolve

### 3. finding_attribution 결과
- thread [4] HIGH → **SAME_ATTACK_SURFACE** (동일 `_atomic_write_json` 함수 + 동일 atomicity vulnerability class)
- thread [5] MEDIUM → **ADJACENT_LAYER** (production code ↔ test code, [4] fix의 직접 부속)
- 결론: 기존 counter 누적, INDEPENDENT_FINDING 4축 근거 불충족, 별도 reset 불가
- thread [2] MEDIUM → AMBIGUOUS_BUT_ABSORBED ([5]와 같은 test 영역, [5]에 흡수)
- 산출물: `memory/events/task-2722+2.finding-attribution.json`

### 4. next_action
- (a) dev1 dispatch prompt 작성 완료: `memory/dispatch/task-2722+1.uuid-tmp-suffix.dispatch-prompt.md`
  - production: `dispatch/anu_owned_callback_enforcement.py:688` `_atomic_write_json` uuid suffix 추가
  - test: `tests/regression/test_anu_owned_callback_enforcement_2717.py:810` glob 검증 + 멀티스레드 회귀 1건
  - 단일 commit, non-force push
- (b) dev1 발사: ANU 직접 cron 발사 불가(다른 봇 key 미보유) → 회장 직접 dispatch 또는 dev 봇 key 제공 필요
- (c) post-push: 회장 OWNER `/gemini review` trigger
- (d) CI_WATCH_HANDOFF로 watcher 위임 (ANU 직접 polling 금지)
- (e) MERGE_READY_CANDIDATE까지만 자동 수렴, merge 회장 승인 전 금지

### 5. parallel_doctrine_update status
- **ANU 개인 메모리 박제 완료**:
  - `/home/jay/.claude/.../memory/feedback_bounded_fix_budget_doctrine_260602.md` — 회장 verbatim 8섹션
  - `MEMORY.md` 인덱스 ★★★ 최상위 규칙 섹션에 1줄 entry 추가
- **workspace doctrine 박제**: 별도 PR 발행 대기 (PR #168 diff 혼입 0)
  - 박제 대상 (HOLD, schema 절단 부분 재전송 후 통합):
    - `memory/feedback_bounded_fix_budget_doctrine_260602.md` (workspace 공유본)
    - `memory/system/system_loop_budget_spec_260602.md` (single source spec)
    - `memory/state/automation_capability_matrix.json` 갱신 (bounded_loop=PROMPT_WIRED)
    - task md template 필드 4 추가
- **JSON artifact 2종 작성**:
  - `memory/events/task-2722+2.bounded-loop-decision.json`
  - `memory/events/task-2722+2.finding-attribution.json`
- **PR #168 diff 혼입 0**: 위 박제는 모두 PR #168 branch 외부 (main path / events / reports)

### 6. auto_continue_allowed
- **PR #168 task-2722+1 uuid tmp suffix dispatch 발사**: **true** (회장 §5 명시 승인)
- 그 외 자동 진행 **false**:
  - bounded-loop-decision.json 정확 schema = **false** (TRUNCATED, 재전송 대기)
  - automation_capability_matrix.json 권장 schema 보강 = **false** (TRUNCATED)
  - finding-attribution.json artifact-level schema = **false** (TRUNCATED)
  - PR #168 force-push/rebase/admin override/merge = **false** (회장 §"금지")
  - 새 HIGH/CRITICAL 자동 fix = **false** (post-#2/2 정책)
  - medium 3회차 코드수정 = **false** (defer/evidence resolve 또는 CHAIR_REQUIRED)

### 7. chair_required_reason
- **PROMPT_TRUNCATION**: 회장 추가 원칙 끝 `[truncated]` 표시 + 종단 "끝" sentinel 부재
- 절단된 spec:
  - `bounded-loop-decision.json` 필수 필드 목록 ("task_id, pr_number, head_sha, capability, severity, ..." 이후 절단)
  - 추가 artifact 권장 schema (`automation_capability_matrix.json` enum/필드, `finding-attribution.json` artifact-level)
- **재전송 요청**:
  - bounded-loop-decision.json 전체 필드 목록
  - automation_capability_matrix.json bounded_loop 항목 권장 schema
  - finding-attribution.json artifact-level 권장 schema
  - 그 외 절단된 추가 원칙 본문
- **dev1 dispatch 발사 요청**:
  - ANU 직접 cron 발사 불가(다른 봇 key 미보유)
  - 회장님 직접 dispatch 또는 dev1 key/chat 제공 필요
  - prompt 본문: `memory/dispatch/task-2722+1.uuid-tmp-suffix.dispatch-prompt.md`

## doctrine 준수
- 직접 코딩: 0 (memory artifact만 작성, production/test 코드 미수정)
- PR #168 diff 혼입: 0
- 자동 머지/force push/rebase/admin override: 0
- ANU 직접 CI polling: 0
- self-key callback: 0
- TRUNCATED 부분 추측: 0 (회장 verbatim 명시분만 박제)
- finish-task.sh / QC / scope-guard hardening 혼입: 0

## 산출물 목록
1. `/home/jay/.claude/.../memory/feedback_bounded_fix_budget_doctrine_260602.md` (ANU 개인)
2. `/home/jay/.claude/.../memory/MEMORY.md` 인덱스 갱신 (autoset symlink target)
3. `/home/jay/workspace/memory/dispatch/task-2722+1.uuid-tmp-suffix.dispatch-prompt.md`
4. `/home/jay/workspace/memory/events/task-2722+2.bounded-loop-decision.json`
5. `/home/jay/workspace/memory/events/task-2722+2.finding-attribution.json`
6. `/home/jay/workspace/memory/reports/task-2722+2.md` (본 보고서)

## 다음 단계 (회장 결정 대기 2건)
1. **dev1 dispatch 발사** — prompt md 확정, 회장 발사 또는 ANU에게 dev1 key 제공
2. **TRUNCATED schema 재전송** — bounded-loop-decision.json + 추가 artifact 권장 schema + 절단 본문

회장 지시 대기.
