# task-2610+1 — Track A auto-remediation R1 (non-Critical HIGH 자동 수렴)

#### allowed_resources
```yaml
allowed_resources:
  paths:
    - "anu_v3/batch_hold_adjudicator.py"
    - "schemas/batch_hold_adjudication.schema.json"
    - "memory/events/task-2610+1.decision.json"
    - "memory/events/task-2610+1.result.json"
    - "memory/reports/task-2610+1.md"
  forbidden_paths:
    - "memory/events/task-2610.decision.json"
    - "memory/events/task-2610.result.json"
    - "anu_v3/critical7_classifier.py"
    - "anu_v3/codex_high_classifier.py"
    - "anu_v3/auto_remediation_planner.py"
    - "anu_v3/batch_dependency_classifier.py"
    - "tests/**"
    - "dispatch.py"
    - "CLAUDE.md"
  commands:
    - "git log"
    - "git diff"
    - "python3 anu_v3/batch_hold_adjudicator.py --selfcheck"
  merge_policy: "tiered"
  ttl_hours: 2
```

> **Lv**: Lv.3. **Executor**: dev1-team 헤르메스 (key c38fb9955616e24d) 1회 한정. **TTL**: 2h. **상태**: task-2610 독립 ANU collector adjudication = AUTO_REMEDIATION_HOLD (non-Critical HIGH×2 + MED×1, Critical7 0). ANU-Codex loop 자동 수렴 R1. 문서-only 금지. **callback: 반드시 독립 ANU key c119085addb0f8b7(executor self key c38fb9955616e24d 절대 callback-owner 금지·+49 정본).**
> **adjudication 정본**: `memory/events/task-2610.independent-anu-collector.adjudication.json`. **plan**: `memory/events/task-2610-AR1.plan.json`. **task-2610 remediation round 1 (+1).**

## 1. 목표

독립 Codex 재audit 가 확인한 task-2610 batch_hold_adjudicator 의 non-Critical HIGH×2 + MEDIUM×1 결함을 교정한다. 회장 §6 invariant 강화(fail-closed/fail-safe 방향). 회장 보고 0 (non-Critical 자동 수렴).

## 2. 구현 (정확히 이 3건만)

**HIGH#1 (logic) — `anu_v3/batch_hold_adjudicator.py` 배치 verdict gate (~:372)**: batch-wide `critical7` 또는 `shared_breach` 가 True 면 per-track `chair_required` 와 **무관하게** `verdict=HOLD_FOR_CHAIR · batch_classification=CHAIR_HOLD` 로 강제(회장 §6 "Critical7 또는 shared invariant 파손 = 전체 CHAIR_HOLD" 방어심층). gate 조건을 `if chair_required or critical7 or shared_breach:` 로 강화하되 기존 분기 reason/append 의미 보존.

**HIGH#2 (claim-mismatch) — `_independent_anu()` (~:158-181)**: owner-identity 필드(collector_key/executor_key/collector_role) 가 **전부 부재**일 때 trailing `return bool(t.authoritative_is_independent_anu)` 를 **fail-CLOSED(`return False`)** 로 교정 — docstring("bare claim without provable owner identity → self-chain, fail-closed") 과 일치. bare `authoritative_is_independent_anu=True` claim 단독으로 independence 부여 절대 금지(self-chain quarantine 강화).

**MEDIUM (schema) — `schemas/batch_hold_adjudication.schema.json`**: `if {critical7_present:true} or {shared_invariant_breach:true} then verdict=="HOLD_FOR_CHAIR" and batch_classification=="CHAIR_HOLD"` conditional(`allOf`/`if-then`) 추가 — invariant 위반 출력을 schema 가 reject 하도록(forward 방향 강제).

## 3. 검증 (필수 · in-allowlist)

`python3 anu_v3/batch_hold_adjudicator.py --selfcheck` 의 8케이스 무회귀 + **3개 신규 회귀 케이스 in-module 추가**: (a) critical7=true·per-track chair 없음 → HOLD_FOR_CHAIR, (b) identity 전무·authoritative_is_independent_anu=true claim → 독립 아님(HOLD_CANDIDATE/no AUTHORITATIVE_PASS), (c) critical7 출력 schema validate → invariant 위반 출력 reject. mock-only 금지(실 entrypoint). CLI `--input/--output` round-trip schema-valid 유지.

## 4. expected_files allowlist (이 외 write 0)

`anu_v3/batch_hold_adjudicator.py` · `schemas/batch_hold_adjudication.schema.json` · `memory/events/task-2610+1.decision.json` · `memory/events/task-2610+1.result.json` · `memory/reports/task-2610+1.md`. **타 track(B/C/D/E/F)·task-2610.{decision,result}.json·task-2553·task-2604 multitrack·frozen anchor byte-0(read-only)**. git HEAD·branch 전후 EQUAL. **신규 test 파일 생성 금지 — 회귀는 batch_hold_adjudicator.py 의 --selfcheck 내부에 추가(allowlist 2파일 내).**

## 5. 금지

기존 산출물 변조 · scope 확대(3건 외 수정) · 문서-only/mock-only 완료 · executor self callback/collector/adjudication/dispatch · independent ANU authoritative 약화 · fallback/dead-man/fixed-time 진행트리거 · PR/branch/main write·merge·credential · claim 만 고치고 test 미보강.

## 6. HOLD_FOR_CHAIR

shared invariant 파손 또는 Critical7 = 전체 CHAIR_HOLD. 본 R1 자체 결함은 non-Critical → 그래도 잔존 시 AUTO_REMEDIATION_HOLD 재수렴(회장 보고 0).

## 7. callback (a) — 독립 ANU key 강제

완료 직후 normal completion callback **ANU key c119085addb0f8b7로만 발사** → 독립 ANU collector 회수·검증·Codex 재lint·adjudication. HIGH/CRITICAL 0 (또는 non-critical 자동분류) · 재lint PASS 후 task-2610 +53 durable-success write-back → +54·+55 dogfood → {task-2610,2611,2612,2613} all-settled 시 Track E(task-2614) 자연 트리거. executor self key c38fb9955616e24d callback-owner 절대 금지(+49 정본). ANU fallback=ANU key·안전망 한정·진행 트리거 아님.

## 8. 9-R (확정 — 본 절 본문 우선)

**ANU-Codex lint = GO_READY (HIGH/CRITICAL 0)** — 3건 교정 정확(scope 외 0) · fail-closed/fail-safe 방향 · --selfcheck 8+3 케이스 PASS·mock-only FAIL · expected_files DISJOINT(2파일+meta) · shared invariant 보존 · 문서-only 금지 · 신규 test 파일 0. ANU key 로 dev1 헤르메스 1회 위임.

## goal_assertions (auto-generated)
- `python3 anu_v3/batch_hold_adjudicator.py --selfcheck`
