# task-2553+18 — PR #129 GEMINI_2THREAD_RESOLUTION + MERGE_READINESS 재진단 (Track A, 회장 병행 GO, 코드/파일 자동화)

> **Lv**: Lv.3 — PR #129 Gemini 2 thread 해소 + 재진단. **Executor**: dev3-team 다그다 (key 0b94683120a691cf) 1회 한정. **TTL**: 2h.
> **상태**: 회장 병행 결정 Track A. task-2553+16 = HOLD(유일 차단 = PR#129 unresolved Gemini thread 2 + mss BLOCKED; 나머지 predicate 6/8 PASS). 본 task = 2 thread 해소 → merge-readiness 재진단. **merge 금지**(재진단까지). md 박제만 금지.
> **병행**: Track B(task-2553+19, +17 coordinator HIGH 4 fix) SAFE_PARALLEL — expected_files ∅, B 비대기·독립.

---

## 1. 확정 전제 (ANU read-only 확인)

PR **#129** OPEN, head `2753e3cf7dad4d0d926d0197875fc3078a3cb19b`, branch `task/task-2553+15-dev7-testloader-hardening`, mergeable MERGEABLE, mss **BLOCKED**, reviewDecision "". +16 pre-merge-gate: predicate **6/8 PASS**(mergeable·reviewDecision allowlist·CI 11/11·effective diff 2 test only·production byte-0 owner_trigger_pat.py sha256 `7b7d996aae3c368561f63600f8e71017f7af85b86a63b5533153e956bdec7135`·head==sanctioned), **2 FAIL = mergeStateStatus_clean + unresolved_threads_eq_0**. merge 미호출·완전 가역.

**2 unresolved Gemini medium thread** (둘 다 `tests/regression/test_load_otp_sysmodules_2553plus14.py`, PR#129 effective diff 내):
- **T1 `PRRT_kwDORcJVSM6Cn1VT`** line 35: 모듈명 `"anu_v2_owner_trigger_pat_2553p1_highfix"` 하드코딩이 test_owner_trigger_2553_plus1_high_fix.py 와 중복 — maintainability. 제안: `otp.__name__` 동적 취득 또는 상수 공유.
- **T2 `PRRT_kwDORcJVSM6Cn1VU`** line 100: AST 체크가 과광범위(임의 sys.modules 대입·exec_module 호출 인식, spec.name 타깃·올바른 loader 미검증) — 리팩터 시 false-positive 위험. 제안: AST 가 spec.name 타깃·loader attribute 검증하도록 정밀화.

## 2. 목표 (회장 verbatim)

PR #129 Gemini unresolved thread **2건 해소** → merge-readiness **재진단**(재분류 보고). merge 아님.

## 3. 처리 (ANU-Codex loop, 코드/파일 자동화)

1. **각 thread 분류**(ANU-Codex): false-positive / style-only / real-improvement / scope-expansion-needed.
   - 예비 lean(Codex 재검증): T1·T2 둘 다 **real-improvement(test-only, behavior-preserving)** — 가드의 견고성을 높이는 정당 제안(false-positive 아님). T1=중복 상수 제거, T2=AST 정밀화(spec.name 타깃+loader 검증). 단 최종 = ANU-Codex 합의.
2. **분기**:
   - (A) real-improvement/style & PR#129 기존 2 test 파일 내 해결가능 → `tests/regression/test_load_otp_sysmodules_2553plus14.py` **최소 test-only 수정**(isolated worktree, PR#129 branch). effective diff = **계속 2 test 파일**(신규 파일 0·production 0). 보강 후 regression(F1 3+streaming 4+신규 가드, 기존 PASS 무회귀) 재실행. push(PR#129 branch only) → Gemini 재평가로 thread outdated/resolved + 잔존 시 `resolveReviewThread`(정확히 그 2 thread만, 근거 marker) → 재진단.
   - (B) false-positive/non-actionable → 코드 0, `resolveReviewThread`(T1/T2 정확히 그 2개만, 근거 marker) → 재진단.
   - (C) real bug & test 파일 밖/production 필요 → **HOLD_FOR_CHAIR**(코드 0).
3. **merge-readiness 재진단**(read-only): +16 profile predicate(test_only_hardening_pr_merge_v1) 재평가 → mergeable·mss·reviewDecision·CI·unresolved thread 0·effective diff 2 test only·production byte-0·head. 재분류 = MERGE_READY / STILL_BLOCKED / HOLD_FOR_CHAIR. **merge 미수행**(회장 별건 결정).

## 4. 허용

PR #129 그 2 thread 식별·분류 / test_load_otp_sysmodules_2553plus14.py 내 최소 test-only 수정(PR#129 effective diff 2파일 유지) / PR#129 branch push(해당 변경 한정) / resolveReviewThread(정확히 T1/T2 2개) / regression 재실행 / read-only 재진단 / result·report·evidence marker / Codex audit+ANU-Codex adjudication / normal+fallback callback.

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

merge / production code 변경(owner_trigger_pat.py 등) / PR #128·#102 변경 / **Track A closeout artifact**(task-2553+13.*·task-2553+1.closeout/result기존키/.done/.md) 변경 / F2·phase3·mqe 변경 / credential·OWNER PAT 변경 / unrelated callback·cron 조작 / PR#129 effective diff 2 test 파일 밖 변경(신규 파일·production·다른 test) / **anu_v3 coordinator(Track B 도메인) 접촉** / T1·T2 외 thread·PR comment·review 조작. live `/home/jay/workspace` @ `task/task-2553p1-f1-clean-replacement` `20456b5f` 전후 assertEqual.

## 6. HOLD_FOR_CHAIR

real bug 가 test 파일 밖/production 수정 필요 / effective diff 2 test 파일 밖 / scope expansion / Codex unresolved HIGH·CRITICAL / ANU-Codex 반복충돌 / credential·permission expansion / Critical7 / 재진단도 BLOCKED 이고 auto-resolve 불가. 적중 시 push/resolve 0 + `task-2553+18.hold-for-chair.json` + (consolidated summary 경유) 회장 보고.

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

batch consolidated summary 항목1(PR#129: MERGED/MERGE_READY/STILL_BLOCKED/HOLD_FOR_CHAIR) + 항목4(track별). final packet(result.json): 2 thread 분류·근거 / 적용 변경(있으면 diff·없으면 resolve)·effective diff 2 test 유지 증거 / production byte-0 / regression / resolve action(2 thread isResolved) / 재진단 predicate·재분류 / Codex+adjudication / Track A closeout·Track B artifact untouched / HOLD 여부. merge 가능 여부는 판단만(미수행).

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

batch plan → Codex lint → ANU refine(9-R) → re-lint → dispatch(dev3 1회 TTL2h, callback (a) normal+fallback, 4-tuple task_id=task-2553+18 분리·Track B artifact 인용 0) → 분류·해소·재진단 → audit → adjudication → result.json → batch 통합. 회장 보고 트리거(Critical7·credential·forbidden touch·scope expansion·Codex unresolved HIGH·CRITICAL·반복충돌·goal 불가)만, 그외 LOW/MED·micro-fix·fixture·regression·false-positive 해석 자동 수렴.

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

### 9-R.1 (HIGH) GitHub write 하드 ceiling
총 GitHub write **= push 1회 + resolveReviewThread ≤2회 = 최대 3**. 이 이상(추가 push·다른 thread·comment·review·label) → **HOLD_FOR_CHAIR**(write 중단). 분기 B(코드 0)면 resolveReviewThread ≤2 만(push 0). 정확히 T1 `PRRT_kwDORcJVSM6Cn1VT`·T2 `PRRT_kwDORcJVSM6Cn1VU` 외 thread resolve 0.

### 9-R.2 (MED) push/resolve 직전 preflight — per-write 기대상태 transition 모델
정적 {T1,T2} 동치 금지(resolve#1 후 unresolved≠{T1,T2} 정상). 각 개별 write **직전** 신선 fetch 후 hard-assert:
- PR#129 head == `2753e3cf7dad4d0d926d0197875fc3078a3cb19b` (또는 본 task 직전 생성 successor 정확값)
- **현재 unresolved review thread 전부**(Gemini·비-Gemini·인간 reviewer·bot 무관 — `reviewThreads` 중 isResolved=false 전수)가 `{T1=PRRT_kwDORcJVSM6Cn1VT, T2=PRRT_kwDORcJVSM6Cn1VU}` 의 **subset** (≠동치; {} / {T1} / {T2} / {T1,T2} 전부 유효, **{T1,T2} 밖 unresolved thread 종류 불문 1개라도 존재 → HOLD**, merge-blocking 비-Gemini thread incorrect-PASS 차단)
- 이 write 가 resolve 면: 대상 thread 가 현재 unresolved set 에 존재 + id·path·line 일치(이미 resolved/outdated → 해당 resolve **skip**, 중복 write 0, HOLD 아님)
- 이 write 가 push 면: 직전 effective diff = PR#129 2 test 파일 유지
하나라도 불일치(특히 unexpected new thread·head drift) → **그 write 0 + HOLD**. resolve#1→resolve#2 정상 transition 허용(subset 모델).

### 9-R.3 (MED) artifact = batch-internal, 단독보고 0
`task-2553+18.result.json`·`hold-for-chair.json`(조건부) = **batch-internal artifact**(consolidated summary 통합용, 단독/중간 회장 보고 0·cross-track 인용 0). 회장 보고 = batch consolidated summary 1건만(Track B 와 통합).

### 9-R.4 (LOW) 분류 bias 제거
§3.1 "예비 lean(T1·T2 real-improvement)" = **non-binding 가설**. 분기 선택은 **live classification evidence(thread 본문·코드 실제 대조·Codex 독립 판정) 확인 후에만** 결정. 가설을 분기 근거로 직접 사용 금지.

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

## 9. task-2553 계열

+15=Track B landing PR#129 OPEN / +16=PR#129 merge lifecycle→HOLD(2 Gemini thread) / **+18(Track A 본건)=PR#129 2 thread 해소+merge-readiness 재진단** / +17=coordinator+goal-loop / +19=Track B(+17 Codex HIGH 4 fix→CONVERGED, 병행).
