# task-2613 — Track D: dependency_and_not_started_classifier (결과 보고)

- **Executor**: dev3-team 다그다 (key `0b94683120a691cf`) 1회 한정
- **상태**: COMPLETED · doc-only=false · HOLD_FOR_CHAIR=false
- **spec sha256**: `eb54b7b7ff40d4754d8883a59cf4ded82a2dc2217f5f31b3251b30c639613dec` (verified, 일치)
- **ts**: 2026-05-19 09:58 KST

## 1. 산출물 (§4 allowlist DISJOINT — 이 외 write 0)

- `anu_v3/batch_dependency_classifier.py` — 실 entrypoint(`main --mode classify|regression|both`)
- `schemas/dependency_wait_state.schema.json` — classifier 출력(= Track A adjudicator 입력)
- `schemas/not_started_by_design.schema.json` — 단일 by-design 정상 보류 기록
- `memory/events/task-2613.decision.json`
- `memory/events/task-2613.result.json`
- `memory/reports/task-2613.md` (본 문서)

## 2. 핵심: 정상 보류 vs 봇 미수신 사고 분리 (★ 혼동 절대 금지)

upstream gate 미충족으로 아직 dispatch되지 않은 상태를 다음으로 분류한다:

- **NOT_STARTED_BY_DESIGN** — design-phase gate(EVENT_GATED / AUTO_SEQUENCED·upstream 진행 0) 미충족. dispatch 보류가 SPEC 상 정상. 사고 아님.
- **WAITING_FOR_DEPENDENCY** — 선언된 dependency edge 부분 충족(일부 upstream durable-success, 전부 아님). **2608 유형** event-driven 정상 보류. 사고 아님.
- **DISPATCH_NOT_RECEIVED** — gate *충족*(또는 없음) ∧ dispatch fired ∧ 봇 미수신 = **봇 미수신 사고**. 위 둘과 **별개 상태**(INCIDENT, adjudicator HOLD 후보).
- **ELIGIBLE_NOT_YET_DISPATCHED** — gate 충족이나 아직 fired 전. 정상 전이 구간(fired 아님 → 사고 아님).
- **TERMINAL_PRESENT** — result 존재. not-started 대상 아님.

### ANTI-CONFLATION INVARIANT (코드 + 스키마 + 회귀 3중 강제)

- **I1** `verdict==DISPATCH_NOT_RECEIVED ⟹ gate_satisfied ∧ dispatch_fired ∧ ¬receipt ∧ incident ∧ blocking`
- **I2** `¬gate_satisfied ⟹ verdict ∈ {NOT_STARTED_BY_DESIGN, WAITING_FOR_DEPENDENCY}` — gate 미충족은 dispatch 자체가 SPEC 상 보류(fired 아님)이므로 봇 미수신 사고의 전제조건과 **상호배타**. gate 미충족 + dispatch_fired 모순 입력도 사고로 격상하지 않음(C4).
- **I3** 정상 보류 4종 ⟹ `is_incident=False ∧ is_blocking_for_adjudicator=False`

위반 시 `ConflationError` 로 산출 거부. `as_not_started_record()` 는 DISPATCH_NOT_RECEIVED 에 호출 불가(C5).

## 3. 실 entrypoint 실행 (mock-only 아님)

`python3 -m anu_v3.batch_dependency_classifier --mode both` 가 실 workspace
(`task-2610` preflight + `memory/events` 의 실제 result/dispatch-fired/activation 증거)
를 스캔하여 6-track(2610..2615) 분류:

- A `task-2610` → TERMINAL_PRESENT (실 result.json 존재)
- B `task-2611` → ELIGIBLE_NOT_YET_DISPATCHED (병렬·gate 충족·fired 전)
- C `task-2612` → ELIGIBLE_NOT_YET_DISPATCHED
- D `task-2613` → ELIGIBLE_NOT_YET_DISPATCHED (본 task — 실행 중, result 미기록 시점 스캔)
- E `task-2614` → NOT_STARTED_BY_DESIGN (AUTO_SEQUENCED, upstream all-settled 아님)
- F `task-2615` → NOT_STARTED_BY_DESIGN (EVENT_GATED, 회장 규칙2)

summary: `incident_count=0`, `blocking_for_adjudicator_count=0`,
`anti_conflation_invariant_held=true`. **gate 미충족 정상 보류가 단 하나도 봇 미수신 사고로 격상되지 않음** — 정확.

## 4. regression (결정적 6케이스, all PASS)

- C1 2608 유형(AUTO_SEQ 부분 dep) → WAITING_FOR_DEPENDENCY
- C2 EVENT_GATED design → NOT_STARTED_BY_DESIGN
- C3 gate 충족+fired+미수신 → DISPATCH_NOT_RECEIVED(incident·blocking)
- **C4 (anti-conflation)** gate 미충족+fired 모순 → NOT_STARTED_BY_DESIGN(절대 사고 아님)
- C5 DISPATCH_NOT_RECEIVED → by-design 레코드 생성 차단(ConflationError)
- C6 gate 충족+fired+수신 → 진행(사고 아님)

## 5. 불변식·금지 준수

- git HEAD/branch 전후 EQUAL (`20456b5f…`, `task/task-2553p1-f1-clean-replacement`) — commit/PR/merge/branch/main write 0
- 기존 task-2553·task-2604 multitrack 산출물·frozen anchor **byte-0** (read-only consume)
- allowlist 외 write **0** (임시 산출 즉시 제거)
- executor self key `0b94683120a691cf` 로 callback/collector/adjudication/dispatch **0** (+49 정본)
- 문서-only 아님: 실 entrypoint + regression + 실 데이터 분류
- fallback/dead-man/fixed-time 진행 트리거 0

## 6. callback (독립 ANU key 강제)

완료 직후 normal completion callback 을 **ANU key `c119085addb0f8b7`** 로만 발사 →
독립 ANU collector 가 회수·검증·Codex·adjudication 수행(authoritative=독립 ANU only).
executor self key 절대 미사용. classifier 출력은 Track A `batch_hold_adjudicator` 입력.

## 7. 9-R

ANU-Codex lint = **GO_READY (HIGH/CRITICAL 0)** — §8 본문 우선, re-lint 불요.
정상 보류 ↔ DISPATCH_NOT_RECEIVED 명확 분리 · expected_files DISJOINT ·
shared invariant 보존 · 문서-only 금지 충족.

## 세션 통계
- 총 도구 호출: 0회

