# task-2758 PR #240 — MEDIUM 10 non-blocking disposition packet (260617)

상태: `TASK2758_PR240_NONBLOCKING_MEDIUM_DISPOSITION_PACKET_ACTIVE_FALSE` · ACTIVE=false · merge 별도 승인 전 금지

## 0. 회장 결정 (B 방향, 2026-06-17)
MEDIUM 10 같은 type-safety 축 반복 → 중단 조건 발동. MEDIUM 10 **non-blocking hygiene backlog 수용**, 추가 code change 중단. A(추가 fix)·C(_coerce 구조) 즉시 착수 불승인. 최종 판정은 **MERGE_READY_CANDIDATE_PENDING_PHASE3_DISPOSITION 까지만**. merge 별도 승인.

## 1. PR 상태 (read-only 정정)
- **PR #240: OPEN** = 현재 **merge 대상**. head **f7d312f7** · base main 8420a763 · mergeState BLOCKED
- PR #239: CLOSED(head e6660c5d, superseded). PR #235~238: CLOSED
- ★ dev2 result "PR 0" = dev executor branch-push-only 관점 / ANU가 별도 PR #240 생성·#239 close = GitHub 실재. **충돌 아님**(역할 분리). PR 생성은 code wiring/merge/ACTIVE 아님 → ACTIVE=false와 무관.

## 2. CI / Gemini (현재)
- CI **10/11** · `gemini-review-gate` **pass** · `phase3-merge-gate` **fail**
- Gemini inline 직접 전수(배지): **CRITICAL 0 / HIGH 0 / MEDIUM 10 / LOW 0** · 132 regression PASS
- ★ matching 재도입 0 · substring `in` 0 · 신규파일 0 · matrix-live 0 · raw key 0

## 3. phase3-merge-gate fail = evidence timeout / stale (근거)
- gate 결과 JSON: `state=block`, `reason="evidence timeout (5min exceeded), no valid evidence"`, `elapsed=306s/timeout=300s`, `evidence_count={primary:0, secondary:0, stale:0}`, **`high_severity_hits=[]`**
- 해석: PR open 직후 phase3 gate(5분 창) 실행 시점에 Gemini review 미도착 → evidence timeout. 이후 Gemini review 도착 → 별도 `gemini-review-gate` **pass**(HIGH 0 확인). 즉 **HIGH 결함이 아닌 타이밍 stale**.
- ★ phase3 fail **무시·admin override 하지 않음**. 최종 merge 전 (a)phase3 재실행으로 GREEN 확보 **또는** (b)회장 stale evidence-timeout disposition 별도 승인 필요.

## 4. MEDIUM 10 non-blocking disposition 표
공통: severity=**MEDIUM** · Critical7=**0** · credential/permission/systemd/callback/wake/production 영향=**0** · matching 축 재도입=**0** · 처리=**hygiene backlog**(코드 변경 중단).

| # | 위치 | 내용 | 실제 호출 경로 현실성 |
|---|---|---|---|
| 1 | v2_13_gate:385 | expected_files 등 string-as-list iterate | 낮음 — 내부 호출자가 list 타입 보장(contract schema) |
| 2 | control_db_guard:95 | `str(actor or "")` 가 0/False를 ""로 coalesce | 낮음 — actor는 문자열 actor-id |
| 3 | promotion_guard:43 | `or ""` falsy coalesce | 낮음 — to/frm/actor 문자열 |
| 4 | correction_budget:236 | budget_remaining=None 명시값 | 낮음 — ledger 정상 생성 시 int |
| 5 | v2_13_gate:373 | bool은 int subclass(float(True)=1.0) | 낮음 — budget_remaining 숫자 |
| 6 | control_db_guard:106 | sql_or_op non-string `.lower()` | 낮음 — sql 문자열 |
| 7 | correction_budget:116 | touched_axis non-string `.lower()` | 낮음 — axis 문자열 상수 |
| 8 | correction_budget:147 | ledger valid-JSON-non-dict | 낮음 — ledger는 dict 생성 |
| 9 | correction_budget:236 | budget_remaining None(중복축) | 낮음 |
| 10 | v2_13_gate:393 | touched_files/capability_delta string iterate | 낮음 — runtime_state list 보장 |

→ 전부 **이론적 입력 엣지**(외부 비정형 아님, 내부 구조화 호출자가 타입 보장). matching HIGH(실제 적대적 우회)와 급 다름. 좁게 닫히지 않고 None/bool/list/dict/malformed로 무한 분기 → 중단 조건 해당.

## 5. backlog 분리 (PR 미포함)
- **HYGIENE_BACKLOG** `P0B_V213_TYPE_SAFETY_MEDIUM_HYGIENE_BACKLOG` — MEDIUM 10 입력검증 산재. non-blocking.
- **DESIGN_BACKLOG** `P0B_V213_INPUT_CONTRACT_COERCE_DESIGN_BACKLOG` — _coerce 입력 계약 정형화. ★즉시 착수 금지(coerce too-permissive/strict 새 Medium 축 = 수렴 루프 위험). 설계 리뷰 별도.
- **CALLBACK_PICKUP_BACKLOG** `P0B_CALLBACK_AUTOREG_ENVELOPE_INTERPRETATION_BACKLOG` — callback 자동등록 봉투 해석 혼선. task-2758 PR scope에 섞지 않음.
- **DESIGN_REVIEW** matching_axis = `DESIGN_REVIEW_REQUIRED`(4회차 보류, task-2759 reserved).

## 6. 최종 판정
**MERGE_READY_CANDIDATE_PENDING_PHASE3_DISPOSITION**
- 충족: CRITICAL 0 · HIGH 0 · matching 0 · 132 PASS · gemini-review-gate pass · 7파일·matrix-live 0
- 미충족(merge 전 필요): phase3 GREEN(재실행) **또는** 회장 stale-timeout disposition 승인 + MEDIUM 10 non-blocking 회장 수용
- merge 자체 = 회장 별도 승인. admin override 0.

## 7. 안전
canonical 8420a763 · flag OFF · cron 0 · merge 0 · admin override 0 · code change 0 · **ACTIVE=false** · matching DESIGN_REVIEW_REQUIRED · C(event strategy) 미착수.
