# task-2620 보고서 — RUNTIME_CONTRACT_WIRING_AND_CRITICAL7_FALSE_POSITIVE_HARDENING

> **Lv**: Lv.3 · **Executor**: dev6-team 페룬 (key `1e41a2324a3ccdd0`) 1회 한정 · **TTL**: 3h
> **분류**: 회장 직접 결정 신규 task — BATCH_LEVEL_HOLD CLOSED_ALL_SETTLED forward-candidate 3건(A/D/B) 묶음
> **status**: `DONE_PENDING_INDEPENDENT_ANU_REAUDIT`
> **spec sha256**: `f90285ec3ff4cfc9ad285c07d77ab006c44ccfb933d1acc852f85a84c49347f7` (match)

## 0. 결론 (회장 verbatim §1)

BATCH_LEVEL_HOLD 시스템이 **파일/테스트로만 존재하는 상태가 아니라 실제 dispatch/collector/runtime path 에 결선**되었음을 검증·결선·증거(실 invoke trace) 캡처로 입증. **반복 false-positive(literal keyword 매칭) 봉합**. task-2614 forward-candidate H1/H2/H3 hardening.

## 1. 세 갈래 처리 요약

### A. §2.1 dispatch_callback_contract 실 결선 audit + 결선

- **audit 결과** (`memory/events/task-2620.runtime-wiring-audit.json`):
  - 9개 사이트 검사(dispatch.py / dispatch/* / scripts/run_batch_hold_adjudicator.py / tests)
  - **production 결선 사이트 2개** (WIRED after):
    - `dispatch.py` — shim 에서 `classify_dispatch_contract` · `assert_collector_key_is_independent_anu` · `INDEPENDENT_ANU_KEY` · `EXECUTOR_SELF_KEY_FORBIDDEN` · `ExecutorSelfKeyForbidden` · `evaluate as classify_dispatch_observation` 정본 재내보내기 (additive)
    - `dispatch/normal_fallback_callback_helper.py::build_anu_owned_callback_request` — argv build **전에** `assert_collector_key_is_independent_anu(owner_key)` 방어 호출 (additive)
  - **OUT_OF_SCOPE_DOCUMENTED 5개**: cron_dispatch_guard / callback_owner_enforcer / dispatch/__init__ / dispatch/core / dispatch/prompt — 회장 강화원칙 + allowlist 1~2 사이트 한정.
- **결선 증거** (`memory/events/task-2620.wiring-runtime-trace.json`):
  - Site #1 shim: `classify_dispatch_contract(...)` → `CONTRACT_OK` · `assert_collector_key_is_independent_anu('c119085...')` PASS · self-key 시 `ExecutorSelfKeyForbidden` raised
  - Site #2 helper:
    - **Case A** (owner=`c119085addb0f8b7` ANU): verdict=PASS, argv 정상(`--key c119085addb0f8b7 --once`) ⇒ **PASS-path byte-0**
    - **Case B** (owner=executor self-key): verdict=FAIL, argv=None, reason 첫 줄에 `dispatch_callback_contract.assert_collector_key_is_independent_anu fail-closed` 명시 ⇒ **strictly stronger fail-closed**
    - **Case C** (owner=arbitrary): 동일하게 fail-closed

### D. §2.2 task-2614 H1/H2/H3 hardening

`anu_v3/dispatch_callback_contract.py` minimal additive — API 시그니처 byte-0 (caller 영향 0).

- **H1 classify CONTRACT_OK edge**: 분기 직전 모든 signal 을 명시적 `bool(...)` 정규화. truthy 비-bool (int/str/list) → True / falsy 비-bool (0/""/None) → False. record 의 signal 필드에 절대 비-bool 잡음이 남지 않음.
- **H2 evaluate input-coercion**: `InvalidObservation(ValueError)` 새 예외 + 5단계 fail-closed (None / non-dict / empty dict / required key 누락 / None|wrong-typed boolean signal). silent-truthy(dict/list)로 인한 분류 왜곡 봉합.
- **H3 idempotency record-order**: `self._spawned.add(key)` 를 **`spawn_fn` 호출 전**에 수행 → atomic mark-then-act. `spawn_fn` 예외 시 idempotency 마킹 **rollback** (재시도 deadlock 0).

regression 추가 11건 + 기존 12건 = 23건 + wiring proof 2건 = 25건 PASS.

### B. §2.3 critical7_classifier negation/context-aware false-positive 봉합

`anu_v3/critical7_classifier.py` + `config/critical7_rules.yaml` minimal additive — 7 family/우선순위/약화가드 byte-0.

- **preprocessor**:
  - `_TIGHT_NEGATION_TOKENS` (±40자 윈도우, 회장 verbatim 토큰: `0`/`no`/`없음`/`금지`/`false` 등). `not` 처럼 광범위한 부정사는 의도적으로 제외 — 진성 "modified files **not** in task allowlist" false-negative 회피.
  - `_STRUCTURAL_REFUTATION_MARKERS` (sentence-scope: `refutation`/`refute`/`false positive`/`forbidden`/`prohibited`/`intended_is_critical7=false`).
  - `_enclosing_sentence` 로 문장 경계 인지 — 다음 문장의 진성 신호는 negation 영향 0.
- **fixture 박제**:
  - task-2615 C7R3 `credential write 0` REFUTATION → no longer Critical7
  - task-2611+2 SAFE precedence (`SQL injection 없음` 등) → no longer Critical7
  - doc/test 키워드 등장(설명/부정문/REFUTATION) → no longer Critical7
- **약화 0 검증**:
  - 진성 Critical7 8/8 (security/credential/permission/forbidden_path/scope_expansion/merge_write/owner_pat/invariant_break) → 전부 CHAIR_HOLD 유지
  - category/tag 매치(`shared_invariant_breach` 등)는 구조화된 명시 신호이므로 negation 회피 불가 — invariant_break 신호 byte-0
  - 7 family ruleset weakening guard PASS
  - rule 우선순위 byte-0 (`C7_OWNER_PAT_PRIORITY` < `C7_CREDENTIAL`)
- yaml 에는 `context_flag` metadata 만 추가(rule 목록/우선순위/family 무변).

regression 추가 7건 + 기존 10건 = 17건 + selftest 17건 PASS.

### C. §2.C — read-only telemetry 후보만

`memory/events/task-2620.callback-telemetry-candidate.read-only.json` 에 후보 5종(T01~T05) 식별까지만. **코드/cron 0 변경, dispatch 0**. 회장 검토 후 별도 task 위임 대상.

## 2. 8항목 보고 (회장 verbatim §8)

1. **실제 결선 audit 결과** — 9 site 평가, 2 production 결선, 5 OUT_OF_SCOPE_DOCUMENTED. 실 invoke trace 캡처(파일 존재 단독 PASS 아님).
2. **false-positive 개선 결과** — REFUTATION/negation 차단 + 진성 Critical7 8/8 무회귀(detection coverage 감소 0, escalation route 변경 0).
3. **task-2614 H1/H2/H3 처리 결과** — additive minimal · API 시그니처 byte-0 · caller 영향 0.
4. **regression 결과** — 본 task targeted 42/42 PASS(critical7 17 + dispatch_callback_contract 25). module entrypoint selftest: critical7 17/17 PASS, dispatch_callback_contract all_passed=true (cases a~f). broader regression: 2039 PASS / 13 PRE_EXISTING_FAIL (stash 후 동일 재현, 본 task scope 외) / 17 skipped.
5. **Codex audit 결과** — 본 task 가 도입한 변경에 기인하는 HIGH/CRITICAL Critical7 = 0. forward-candidate(pre-existing fails) 사전 존재 명시.
6. **runtime dogfood 결과** — Site #1 shim + Site #2 helper 둘 다 실 invoke (PASS-path byte-0, FAIL-path strictly stronger). selftest entrypoint 둘 다 PASS.
7. **PR/merge/credential/write 0 증거** — git HEAD `20456b5f83fc039f2fd6f50f4b94095c29b41bfb` EQUAL, branch `task/task-2553p1-f1-clean-replacement` EQUAL, commits 0, PR 0, merge 0, credential write 0, main write 0.
8. **남은 backlog** — Track C task-2619 미접촉(frozen), §2.C telemetry rollout(별도 task), broader regression 13 pre-existing fails, OUT_OF_SCOPE_DOCUMENTED 5 site 추가 결선 후보(회장 검토 후 위임 가능).

## 3. byte-0 / 약화 가드

| 항목 | 상태 |
|---|---|
| `dispatch_callback_contract` API 시그니처 | byte-0 |
| `critical7_classifier` 7 family set | byte-0 |
| `critical7_classifier` weakening guard | byte-0 |
| `critical7_classifier` rule 우선순위 | byte-0 |
| detection coverage | 손실 0 |
| escalation route | 변경 0 |
| CLOSED_ALL_SETTLED 산출물(2610~2615 + run_batch_hold_adjudicator + sample.* + fixture) | sha256 EQUAL |
| `memory/events/callback_4tuple_index.jsonl` prefix 46행 | byte-0 (append-only) |
| Track C task-2619 산출물 | 미접촉 |
| zombie cron | 미접촉 |
| 새 시스템 확장 | 0 |
| git HEAD / branch | EQUAL |
| 커밋 / PR / merge / credential / branch / main / writeback | 0 |

## 4. 산출물 sha256

```
4cd9ad4db25457180639a8ff23c4db0dd645c1341a90cab4c2ba6d17f21e5b74  anu_v3/dispatch_callback_contract.py
4766bc4c52018a8e8b2ec0fd6743f56c2ff9322dbf5447864e134993b6d9a336  anu_v3/critical7_classifier.py
07075e51bcd38a77e07f12e17cf770e3a6226d02905302fc7af4b28b6280f4e1  config/critical7_rules.yaml
9bf60dad7e5b13b0da8fa7f26753229e145e666d24d2a8a843c1ba2fc391263c  dispatch.py
1e2be5cd8a88989078e81256d2d7f6535bce7ced85064c115acb31060dbbaa43  dispatch/normal_fallback_callback_helper.py
272f9396c74b9d6c41124da5e8cd543948f386e1f6b81f1a342bd2ff4d5d0551  tests/regression/test_dispatch_callback_contract.py
fa0b61e09f5729050283ff5ca4191c841bc44711c70a2498fb5ae2e4d0a5e39f  tests/regression/test_critical7_classifier.py
6f80bc3751ee706fca9b588c6ea85b3143f6ec472859c26745f4dc2e96208a7c  memory/events/task-2620.runtime-wiring-audit.json
94b0abb9a60347cda9c87ba5faf290d2dc0bf13620402098324a0702ee4e2d79  memory/events/task-2620.wiring-runtime-trace.json
8591d184fcdd40f542e3b75434340f517892212d1ec3ec5b71893636385ac873  memory/events/task-2620.callback-telemetry-candidate.read-only.json
```

## 5. callback 지시 (회장 §7)

- 본 executor 는 완료 직후 normal completion callback **독립 ANU key `c119085addb0f8b7` 로만** 발사.
- executor self key `1e41a2324a3ccdd0` 절대 금지 (+49 정본).
- 본인 collector/adjudication/write-back/하류 dispatch/cron 등록 0.
- status = `DONE_PENDING_INDEPENDENT_ANU_REAUDIT`. Codex 재audit HIGH/CRITICAL 0 확정 시 독립 ANU 가 durable-success write-back(+53). premature write-back 0.
- 비-Critical HIGH 잔여 시 회장 보고 없이 자동 수렴(loop-boundary review 정합).
