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

- 작업 ID: task-2613+1 / 팀: dev3-team (다그다)
- 레벨: Lv.3 · 검증레벨: normal · TTL 2h
- 완료(KST): 2026-05-19 10:36

## S (Situation)
task-2613 Track D `batch_dependency_classifier` 산출물에 대해 독립 ANU collector 의
Codex 재audit 결과 = `AUTO_REMEDIATION_HOLD` (non-Critical HIGH×1 + MEDIUM×1,
Critical7 0, shared invariant 파손 0, SAFE 방향). 회장 보고 0 의 ANU-Codex 자동
수렴 R1. 정본: `memory/events/task-2613.independent-anu-collector.adjudication.json`.

## C (Complication)
HIGH 와 MEDIUM 모두 분리 invariant(I1/I2/I3·C4) 인근 코드를 건드리는 교정이라,
교정이 자칫 `NOT_STARTED_BY_DESIGN`/`WAITING_FOR_DEPENDENCY` ↔ `DISPATCH_NOT_RECEIVED`
분리장벽을 약화시키면 즉시 shared invariant 파손 → HOLD_FOR_CHAIR 로 전환된다.
"정확히 2건만, scope 외 0, 분리장벽 byte-의미 불변" 이 절대 조건.

## Q (Question)
분리장벽을 byte-단위로 보존하면서 (1) claim/spec-drift + 인식폭 가시화(HIGH)와
(2) enforcement-surface hardening(MEDIUM)을 어떻게 정확히 2건만 교정하는가?

## A (Answer) — 교정 내역 (정확히 2건)

### HIGH (claim/spec-drift + recognition-breadth) — `anu_v3/batch_dependency_classifier.py`
- (a) `build_real_contexts()` 의 `EVENT_GATED`/`AUTO_SEQ` 주석을 실제 구현 의미로
  정합화: "gate 충족 = 선언 upstream 전부 durable-success", 그리고 durable-success
  가 회장 규칙2 의 `all-settled` 보다 **엄격한 fail-closed 보수** 부분집합임을
  명시. 미인식 upstream → 다운스트림 정상 보류로 남고 절대 `DISPATCH_NOT_RECEIVED`
  로 격상되지 않음(I2·C4)을 주석에 못박음.
- (b) `_durable_success()` 의 인식 술어를 명시 상수 `_DURABLE_STATUS`
  ({COMPLETED,DONE,SETTLED}) · `_DURABLE_RESULT_PREFIX` ('PASS') ·
  `_DURABLE_OUTCOME_TOKENS` ({SETTLED,ACCEPT}) + docstring 으로 가시화.
  **인식 술어 로직은 byte-semantic 동등** — 상수 치환만(`"SETTLED" in outcome or
  "ACCEPT" in outcome` ≡ `any(tok in outcome for tok in {SETTLED,ACCEPT})`).
  gate 충족 방향으로만 작용 → 분리장벽 불변.

### MEDIUM (enforcement-surface, 방어심층 hardening)
- (a) `as_not_started_record()` 에 verdict 외 재검증 추가: `gate_satisfied is
  False ∧ is_incident is False ∧ is_blocking_for_adjudicator is False` 위반 시
  `ConflationError`. classify_track 우회 직접 생성(=_assert_invariants 미통과)
  객체로 정상보류 레코드 직렬화 차단. canonical 경로(classify_track→classify_batch)
  는 항상 이 조건을 충족하므로 **영향 0**.
- (b) `schemas/dependency_wait_state.schema.json` 에 forward-invariant 강화
  INVARIANT 4 (`verdict==DISPATCH_NOT_RECEIVED ⟹ is_incident∧is_blocking`,
  `then.required` 명시로 top-level required 약화와 독립) + INVARIANT 5
  (역방향 `is_incident==true ⟹ verdict==DISPATCH_NOT_RECEIVED`) **additive
  allOf** 추가. 기존 I1/I2/I3 약화 0 — 순수 강화.

### scope 보존 증거
- `schemas/not_started_by_design.schema.json` 은 §2 scope(정확히 2건) 밖이므로
  **의도적으로 미수정** — sha256 `7a30ed84cd…` = adjudication baseline 과 일치.
- 분리장벽 핵심(`gate_satisfied`·`upstream_unmet`·`classify_track` 분기·
  `_assert_invariants` I1/I2/I3) 코드 **byte-불변** (독립 sed 인스펙션 확인).
- git HEAD/branch 전후 EQUAL (`20456b5f…`, `task/task-2553p1-f1-clean-replacement`),
  PR/branch/main write·merge·credential 0, allowlist 외 write 0.

## 검증 (실 entrypoint · 신규 test 파일 0)
`regression_cases()` 내부에 C7~C10 **additive** 추가 (신규 test 파일 0):
- C7 `gate_align_I2_preserved`: gate 정합화 후에도 `¬gate_satisfied ⟹
  NOT_STARTED_BY_DESIGN/WAITING_FOR_DEPENDENCY` (I2 byte-불변) → PASS
- C8 `recognition_breadth_C4_invariant`: 인식폭 입력에서도 gate 충족+fired+미수신만
  `DISPATCH_NOT_RECEIVED`, gate 미충족+fired 모순 비격상 (C4 재실증) → PASS
- C9 `as_not_started_revalidation`: 위조 객체(gate_satisfied=True / incident=True)
  by-design 직렬화 시 `ConflationError` → PASS
- C10 `schema_forward_invariant_reject`: 정상보류 출력 schema-valid · DNR+¬incident
  출력을 schema 가 reject (jsonschema draft-07) → PASS
- 기존 C1~C6 무회귀 → PASS. **regression.all_pass=true (10/10)**, mock_only=false.

## L1 스모크테스트 결과 (필수 기록)
- 서버 재시작: **해당없음** (순수 stdlib 결정 classifier · 서버/API 무관)
- API 응답 확인: **해당없음** (HTTP entrypoint 아님)
- 실 entrypoint 실행(서버 대체 실동작 검증):
  `python3 -m anu_v3.batch_dependency_classifier --mode both` →
  regression.all_pass=true(C1..C10), mock_only=false, 실 workspace
  preflight+events 디스크 스캔 6-track: by_verdict={TERMINAL_PRESENT:4,
  WAITING_FOR_DEPENDENCY:1, NOT_STARTED_BY_DESIGN:1}, incident_count=0,
  blocking_for_adjudicator_count=0, anti_conflation_invariant_held=true.
  → **L1 통과** (실 entrypoint 실행 + 결과 검증, mock-only 아님)
- 스크린샷: 해당없음 (백엔드 CLI · 프론트 무관)
- py_compile / schema JSON 파싱 OK.

## 모델 사용 기록
- 루(Lugh, 백엔드, **sonnet**): 5개 Edit 기계적 정밀 적용 + grep 검증 + 회귀 실행.
  invariant-critical 코드 — haiku 미사용(정당).
- 다그다(팀장, opus): 결함 설계·정확한 old/new 명세·분리장벽 byte-불변 독립 검증·
  scope/git/sha256 감사. (직접 코딩 아님 — 위임 후 검토)
- 브리짓/아네/모리건: 미소집 (프론트/UX/디자인 무관 작업).

## 발견 이슈 및 해결
- 이슈1: 워킹트리에 타 시스템 프로세스(dispatch/collector 데몬)가 다수
  `memory/events/*` 를 동시 갱신 중. → 해결: 본 작업 write 는 allowlist 5파일로
  한정, git commit 미수행(§4 HEAD EQUAL·§5 merge 금지 준수)으로 간섭 0 확인.
- 이슈2 (에스컬레이션): QC `git_evidence` 의 `COMMIT_EXISTS` 가 FAIL →
  동일 verifier 3회 연속 FAIL → `task-2613+1.escalate` 자동 생성. **원인**:
  본 작업은 ANU Layer-A no-git-write remediation 으로 §4(git HEAD EQUAL)·
  §5(PR/branch/main write·merge 금지)·§8(9-R) 이 git 커밋을 **명시적으로
  금지**. authoritative 검증은 git 이 아니라 독립 ANU collector callback +
  sha256(정본 adjudication 도 `git_equal_before_after=true`). git_evidence 는
  ANU Layer-A 클래스를 인지 못하는 일반 dev 게이트 — **구조적 false-positive**.
  여기서 커밋하면 그 자체가 §4/§5 spec 위반이므로 **커밋하지 않음**. →
  처리: QC-RULES 설계대로 `.escalate` + `task-2613+1.followup.txt` 발행,
  아누(개발실장) 판단 요청(git_evidence SKIP/면제 + 독립 ANU callback 을
  authoritative 완료 경로로 인정). 수동 `.done` 미생성(CRITICAL 준수).
- 미해결 이슈: 없음 (코드 교정 자체는 완료·검증 PASS, 잔여는 QC 게이트
  vs spec no-git 의 정책 충돌로 아누 adjudication 대상).

## 머지 판단
- 머지 필요: **No** (§5 PR/branch/main write·merge 금지 · §4 git HEAD EQUAL).
  산출물은 untracked 파일 상태로 보존, 독립 ANU collector 가 callback 회수·검증.
- 브랜치/워크트리: 사용 안 함 (system in-place remediation).

## callback (필수)
완료 직후 normal completion callback 은 **독립 ANU key `c119085addb0f8b7`로만**
발사 → 독립 ANU collector 회수·재lint·adjudication. executor self key
`0b94683120a691cf` callback-owner **절대 금지**(+49 정본). 전 finding HIGH/CRITICAL
0 시 task-2613 +53 durable-success write-back → +54/+55 dogfood →
{2610,2611,2612,2613} all-settled 시 Track E(task-2614) 자연 트리거. 회장 보고 0.

## 결론
non-Critical HIGH×1 + MEDIUM×1 정확히 2건 교정 완료. 분리 invariant
(I1/I2/I3·C4) byte-의미 불변 실증(C7/C8 회귀 + 핵심 로직 byte-불변 인스펙션).
shared invariant 파손 0 · Critical7 0 · HOLD_FOR_CHAIR 아님. ANU-Codex 자동 수렴.
