# task-2611+1 — Track B BOUNDED REMEDIATION 결과 보고 (critical7_classifier 결함 교정)

- **분류**: 회장 직접 승인 bounded remediation (AUTO_REMEDIATION 아님)
- **Executor**: dev2-team 오딘 (key `fedf78d1d09509f5`) — task-2611 원 executor, 1회 한정
- **spec sha256**: `60ee767633a1816eb9d09f7591bf24d6f6d34780865195c1ea80d2eed350b58c` (일치 확인)
- **HOLD 정본**: `memory/events/task-2611.independent-anu-collector.adjudication.json` (Codex CRITICAL×2 / HIGH×1 / MEDIUM×1 / LOW×1)
- **상태**: REMEDIATION_DELIVERED — 독립 ANU 검증 대기 (self-authoritative 아님)

## 1. 적용한 허용 수정 5개 (회장 §2 verbatim 매핑)

**FIX1 (Codex CRITICAL · `anu_v3/critical7_classifier.py` `_haystack()`)**
복수형 `paths`/`files` 만 흡수하던 것을 단수형 `path`/`file` 키까지 흡수하도록 확장. 구조적 evidence(`file='.git/config'`, `path=...`)가 일반 prose 없이 전달돼도 haystack 에 경로 토큰이 포함 → `C7_FORBIDDEN_PATH`/`C7_SCOPE_EXPANSION` 매치. canonical entrypoint(`codex_high_classifier.classify_finding` → `critical7.classify`) false-negative route 차단.

**FIX2 (Codex CRITICAL · `config/critical7_rules.yaml` C7_OWNER_PAT)**
bare `(?i)\bpat\b` + `(?i)\bfine[ _-]?grained\s+pat\b` + `(?i)\bpersonal[ _-]?access[ _-]?tokens?\b` word-boundary regex 추가. **C7_CREDENTIAL 은 미변경** — bare PAT 를 C7_CREDENTIAL(우선순위 상위)에 넣으면 기존 selftest `f-pat`("used OWNER PAT")의 family 가 owner_pat→credential 로 변질되어 **Critical7 우선순위/family 계약**이 깨지므로, C7_OWNER_PAT 에만 추가해 우선순위·family 안정성을 보존. 기존 term 삭제 0 → 회장 §5 "강화만 허용" 준수.

**FIX3 (Codex HIGH · `detect_invariant_break()`)**
free-text haystack 외 `_categories()`(category/categories/tag/tags/rule/type)도 검사. `[-_]+ → space` 정규화로 `tag=['frozen-anchor-modified']` ↔ signal `frozen anchor modified` 매칭. prose 없는 structured shared-invariant 파손이 CHAIR_HOLD 우회하던 회장 §6 보장 침해 교정.

**FIX4 (Codex LOW folding · selftest/regression 보강)**
`critical7` _SELFTEST_CASES +5: `f-path-struct`(단수 file=.git/config→forbidden_path), `f-scope-struct`(paths[]→scope_expansion), `f-pat-bare`(fine-grained PAT→owner_pat), `f-pat-words`(personal access token→credential), `f-inv-cat`(category/tag-only→invariant_break). `codex_high` _SELFTEST_BATCH +2: `b-path-struct`·`b-pat-bare`(canonical entrypoint end-to-end CHAIR_HOLD 증명).

**FIX5 (Codex MEDIUM folding · inline schema contract)**
`schemas/` 는 Track A(task-2610) 소유로 DISJOINT — 신규 schema 파일 생성 시 allowlist 위반. 따라서 allowlist 내 inline 으로 `codex_high._selftest` 가 출력 `schema == anu.codex_high_classification.v1` 및 `batch_hold_adjudicator_input` 필수 키(consumer/verdict/chair_hold/auto_remediation_candidates)를 machine-validate 하도록 folding. 다운스트림 drift 를 allowlist 제약 내에서 자동 검증.

## 2. 실 entrypoint regression (문서/mock-only 아님)

- `python3 anu_v3/critical7_classifier.py --selftest` → cases=17 passed=17 failures=[] verdict=PASS mock_only_would_fail=true exit=0
- `python3 anu_v3/codex_high_classifier.py --selftest` → batch_findings=11 batch_verdict=CHAIR_HOLD critical7_rules_hit=[C7_CREDENTIAL,C7_FORBIDDEN_PATH,C7_MERGE_WRITE,C7_OWNER_PAT,C7_SCOPE_EXPANSION,C7_SECURITY] failures=[] verdict=PASS exit=0
- 신규 false-negative 경로 전부 CHAIR_HOLD 라우팅 확인 / 기존 `f-pat`→owner_pat 회귀 0

## 3. 제약·불변 준수

- allowlist 수정 3파일: `anu_v3/critical7_classifier.py` · `config/critical7_rules.yaml` · `anu_v3/codex_high_classifier.py` (`config/codex_high_classification_rules.yaml` 미수정 — sha256 `0e89df47…` adjudication 기록값과 동일하여 byte-0 입증)
- remediation 메타: `memory/events/task-2611+1.{decision,result}.json` · `memory/reports/task-2611+1.md`
- 7 family 구조·Critical7 우선순위·약화가드 불변 · 기존 term 삭제 0
- git HEAD `20456b5f83fc039f2fd6f50f4b94095c29b41bfb` 전후 EQUAL · 커밋 0 (ANU Layer-A no-git)
- task-2613+1 scope 미혼합 · task-2553/2604 multitrack·2610/2612/2613/2614/2615 산출물 byte-0
- GitHub write/merge/PR/credential/real-work 확장 0 · 신규 Critical7 0 · shared invariant breach 0
- doc-only/mock-only 아님

## 4. authoritative 경계 (회장 §7)

본 보고·result 는 **executor self-chain — NON-AUTHORITATIVE**. authoritative PASS / durable-success 판정은 독립 ANU collector(key `c119085addb0f8b7`, chat 6937032012)의 회수·검증·Codex 재audit·adjudication 결과**만**. **Codex 재audit HIGH/CRITICAL 0 AND independent ANU PASS** 일 때만 +53 durable-success write-back → 그 이후 +54/+55/Track E. executor self key `fedf78d1d09509f5` 의 callback/collector/adjudication/dispatch = **0** (+49 코드 정본). 신규 Critical7 또는 shared invariant 파손 시 즉시 HOLD_FOR_CHAIR, non-Critical 잔여만 AUTO_REMEDIATION_HOLD.
