# task-2553+20 — PR #129 REVIEW-STATE CLEANUP (T1 outdated-unresolved resolve + reviewDecision + merge-readiness 재진단) (Track A round-2, 회장 GO, 코드/파일 자동화)

> **Lv**: Lv.2 — 단일 outdated-unresolved thread resolve + read-only 재진단. **Executor**: dev3-team 다그다 (key 0b94683120a691cf) 1회 한정. **TTL**: 1.5h.
> **상태**: 회장 "PR #129 review-state cleanup 병행 진행" 지시. task-2553+18 = 코드 fix(T1/T2 real-improvement) PR #129 push 완료·T2 resolved·**T1 outdated-unresolved 잔존**(+18 9-R.2 'outdated→skip' 규칙이 미해결 T1 resolve 미수행 = 잔여 병목). 본 task = T1 resolve + 재진단. **merge 금지**. md 박제만 금지.
> **병행**: Track B(task-2553+19) = HOLD_FOR_CHAIR(9-R.2 spec-divergence 회장 결정 대기) — 본 Track A 독립·비대기(한쪽 HOLD 가 타쪽 비차단).

---

## 1. 확정 전제 (ANU read-only 확인 — 변경 불가)

PR **#129** OPEN, head **`03ec91d14a094a1792d240107a592ed6ddf0c29b`**(+18 push 후), branch `task/task-2553+15-dev7-testloader-hardening`, mss **BLOCKED**, reviewDecision "". reviewThreads total **2**:
- **T2 `PRRT_kwDORcJVSM6Cn1VU`**: **resolved=True**, outdated=False (line 115) — +18 해소 완료, 본 task 무대상.
- **T1 `PRRT_kwDORcJVSM6Cn1VT`**: **resolved=False, outdated=True** (path `tests/regression/test_load_otp_sysmodules_2553plus14.py`) — +18 코드 fix(otp.__name__ 동적취득)로 outdated 화됐으나 **미해결 잔존 = 유일 merge 차단**.
- +18: 코드 변경(T1 otp.__name__ + T2 AST 정밀화) PR#129 반영 완료, production owner_trigger_pat.py byte-0(sha256 `7b7d996aae3c368561f63600f8e71017f7af85b86a63b5533153e956bdec7135`), regression 11/11 PASS, effective diff = 2 test 파일.

## 2. 목표 (회장 verbatim)

PR #129 **review-state cleanup**: outdated-unresolved T1 1건 해소 + reviewDecision 공백 처리 → merge-readiness **재진단**(재분류). **merge 아님**.

## 3. 처리 (ANU-Codex loop, 최소 GitHub write)

1. **분류 확인**(ANU-Codex): T1 = +18 가 이미 코드로 substance 반영(otp.__name__) → thread 는 **stale/outdated-but-unresolved**, 코드상 해소 완료된 finding. resolve 가 정당(코드가 Gemini 제안 구현, behavior-preserving, Codex-GO 상속). 추가 코드 변경 **불요**(이미 +18 반영).
2. **resolveReviewThread(T1 `PRRT_kwDORcJVSM6Cn1VT`) 정확히 1회**. resolveReviewThread 는 outdated thread 에도 유효(resolve 시 merge-block 해소). T2 는 이미 resolved → **skip**(write 0). 총 GitHub write = **resolveReviewThread 1회만**.
3. **reviewDecision 공백 처리**: 이 repo 에서 `reviewDecision==""` 는 required reviewer 부재 + mss CLEAN + CI 전건 SUCCESS + unresolved thread 0 동반 시 affirmative-safe(+16 9-R.2 / PR#128·#129 선례). 별도 review 승인 GitHub write **불요**(공백 자체 처리 아님 — predicate 동반조건으로 충족). reviewDecision 변경용 write 0.
4. **merge-readiness 재진단**(read-only): +16 profile predicate(test_only_hardening_pr_merge_v1) 재평가 — mergeable·mss·reviewDecision∈{APPROVED,""}·CI 전건·unresolved thread 0·effective diff 2 test only·production byte-0·head. 재분류 = MERGE_READY / STILL_BLOCKED / HOLD_FOR_CHAIR. **merge 미수행**(회장 별건).

## 4. 허용

PR#129 thread 전수 read / T1 분류 확인 / **resolveReviewThread(T1 정확히 1회)** / read-only 재진단 / result·report·evidence marker / Codex audit + ANU-Codex adjudication / normal+fallback callback.

## 5. 금지 (회장 + scope)

merge / **코드 변경 일체**(+18 이 이미 반영 — 본 task 코드 0, isolated worktree 불요) / production code / PR #128·#102 변경 / Track A closeout artifact(task-2553+13.*·task-2553+1.*) / **Track B artifact(task-2553+17/+19.*·anu_v3 coordinator)** 접촉·인용 / F2·phase3·mqe / credential·OWNER PAT / unrelated callback·cron / T1 외 thread·PR comment·review·label 조작 / T2 재조작(이미 resolved) / 2회 이상 GitHub write. live `/home/jay/workspace` @ `task/task-2553p1-f1-clean-replacement` `20456b5f` 전후 assertEqual.

## 6. 9-R (preflight·write budget — task-2553+18 9-R 상속 적용)

- **GitHub write 하드 ceiling = resolveReviewThread 1회(T1 only)**. push 0·comment 0·review 0·T2/타 thread 0. 초과 → HOLD.
- **resolve 직전 preflight**(신선 fetch): PR#129 head == `03ec91d14a094a1792d240107a592ed6ddf0c29b`(또는 본 task 가 인지한 successor 정확값; head drift→HOLD write 0) / **현재 unresolved review thread 전부**(Gemini·비-Gemini·인간·bot 무관, isResolved=false 전수)가 `{T1 PRRT_kwDORcJVSM6Cn1VT}` 의 subset(즉 unresolved = {} 또는 {T1} 만 유효; T1 밖 unresolved thread 1개라도 존재 → HOLD) / T1 이 현재 unresolved(id 일치; **outdated=True 라도 resolve 대상 유효** — '이미 resolved 면 skip·HOLD 아님') / T2 는 resolved 확인(재조작 0).
- 불일치(head drift·예상외 unresolved thread·T1 이미 resolved 등) → write 0 + `task-2553+20.hold-for-chair.json` + (consolidated summary 경유) 보고. T1 이미 resolved 면 resolve skip 후 곧장 재진단(정상).
- result.json·hold-for-chair = batch-internal(단독 보고 0, consolidated summary 통합).

## 7. HOLD_FOR_CHAIR

T1 식별 불가 / unresolved thread 가 {T1} 밖으로 증가 / head drift / 코드 변경 필요(이미 +18 반영이므로 불요여야 함 — 필요 시 scope 이상 신호 HOLD) / 재진단도 BLOCKED 이고 auto-resolve 불가(예: reviewDecision 비-affirmative·CI 변동) / Codex unresolved HIGH·CRITICAL / ANU-Codex 반복충돌 / credential·permission expansion / Critical7.

## 8. 완료 (consolidated summary 통합 — 단독 보고 0)

batch consolidated summary 항목1(PR#129: MERGE_READY/STILL_BLOCKED/HOLD_FOR_CHAIR) + 항목4. final packet(result.json): T1 분류·resolve action(isResolved=true 증적)·T2 resolved 확인·reviewDecision 처리 근거·재진단 predicate·재분류·production byte-0·effective diff 2 test 유지·Track B/Track A closeout untouched·HOLD 여부. merge 가능 여부 판단만(미수행).

## 9. ANU-Codex loop + callback (자동, 중간보고 0)

batch plan → Codex lint → ANU refine(필요 시 9-R) → re-lint → dispatch(dev3 1회 TTL1.5h, callback (a) normal+fallback, 4-tuple task_id=task-2553+20 분리·Track B artifact 인용 0) → 분류확인·resolve·재진단 → audit → adjudication → result.json → batch 통합. 회장 보고 트리거(Critical7·credential·forbidden touch·scope expansion·Codex unresolved HIGH·CRITICAL·반복충돌·goal 불가·재진단 STILL_BLOCKED auto-resolve 불가)만, 그외 자동 수렴.

## 11. 9-R — Codex lint 반영 (NEEDS_REFINEMENT → 자동 수렴, agent a9bc880ee97d8bea2: CRITICAL0/HIGH1/MED2/LOW1)

### 9-R.1 (HIGH) live workspace invariant 정의 — marker 방출은 위반 아님
§5 "live workspace mutation 금지" 의 authoritative 정의 = **git tracked HEAD/branch/ref SHA 불변 + 코드/production/PR/git-tracked 파일 0 변경**. `memory/events/task-2553+20.{result,hold-for-chair,activation-decision}.json` · `memory/reports/task-2553+20.*` 는 **git-untracked batch-internal ANU 보고 채널**(전 +N task 확립 패턴, task-2553+10 9-R.1/+13 9-R.1/+17 9-R.1 동일) — invariant 위반 **아님**. §6/§8/§9 marker 생성은 허용(untracked·HEAD/branch/ref 무영향). 그 외 어떤 git-tracked·코드·production·worktree write 0. live `/home/jay/workspace` HEAD/branch/ref(`task/task-2553p1-f1-clean-replacement` `20456b5f`) 전후 assertEqual 은 이 정의로 평가.

### 9-R.2 (MED) T1-already-resolved 단일 권위 분기 = skip+재진단 (HOLD 아님)
§6 정정: "T1 이미 resolved" 는 **불일치/HOLD 분기에서 제외**. 단일 권위 규칙 = **T1 이 이미 resolved 면 resolveReviewThread write 0 + 곧장 read-only 재진단 진행(정상, HOLD 아님)**. HOLD 분기 = head drift / unresolved thread 가 {T1} 밖으로 존재·증가 / T1 식별 불가 만.

### 9-R.3 (MED) resolve 효과 narrow 표현
§3 "resolve 시 merge-block 해소" → **"outdated-unresolved T1 을 resolve 하면 T1 이 blocker 후보에서 제거되며, 이후 §4 read-only 재진단으로 merge-readiness 재평가 필수"**(BLOCKED 가 독립 사유로 잔존 가능 — resolve 가 직접 merge-ready 보장 아님). resolve→재진단 2단계 명시.

### 9-R.4 (LOW) reviewDecision = read-only 해석 전용
§1/§2/§10 의 "reviewDecision 공백 처리"·"cleanup" 표현 = **read-only 해석 전용**(predicate 동반조건 평가만). review approve/dismiss/request-changes 등 어떤 GitHub review·decision mutation write **0**. 제목/scope 의 "cleanup" 은 T1 resolve 1회 + 재진단을 의미하며 reviewDecision 자체 변경 아님.

→ 9-R.1~9-R.4 로 HIGH1+MED2+LOW1 해소. CRITICAL0. Codex re-lint GO_READY 시 dispatch.

## 10. task-2553 계열

+16=PR#129 merge lifecycle→HOLD(2 thread) / +18=PR#129 2 thread 코드 fix push·T2 resolved·T1 outdated-unresolved 잔존 / **+20(Track A round-2 본건)=T1 resolve+reviewDecision+merge-readiness 재진단** / +17=coordinator / +19=Track B HOLD(9-R.2 spec-divergence 회장 A/B 대기, 독립).
