# P2 Contract Refinement — R6~R14 결정 + Layer 분리 + 2 Matrix + P2-A READY 조건 (260529)

★ **DESIGN REFINEMENT ONLY** — 회장 verbatim "P2 contract refinement spec 을 작성한다 · 이번 단계는 설계 refinement 만 한다" 정합. 코드 수정 0 · finish-task.sh 수정 0 · helper 수정 0 · callback cron 수동 등록 0 · .done 생성 0 · task-2708 자동 발의 0 · PR/branch push/merge 0 · GitHub write 0.

- **chair_authorization_anchor**: 회장 verbatim 2026-05-29 P2 contract refinement spec 작성 인가 (★ 6 영역 verbatim 필수 포함)
- **doctrine_anchor**: "evidence 만 따른다" + "ANU 자체 분류 결정 0" + "추정은 hypothesis 로 분리"
- **lineage_anchor**: P1-B closeout C2 caveat → STEP 1~4 evidence → P2 spec draft (R1~R5) → P2 exit path audit (NEEDS_REFINEMENT) → **본 refinement (R6~R14)**

---

## 1. R6~R14 rule decision table (★ 9 candidate · 회장 verbatim 형식)

각 rule:
- current wording (★ p2 audit verbatim)
- affected_exit_paths
- problem it solves
- risk if accepted
- risk if rejected
- dependency
- recommended decision: ACCEPT / REJECT / MODIFY (★ 추천 only · 회장 결정)
- rationale

### R6 — cancellation / BLOCKED / ESCALATED success exit 0 명시

| 항목 | 내용 |
|---|---|
| current wording | `.cancelled` / BLOCKED / ESCALATED success exit 0 경로에서 callback registration 의도를 (a) SKIP 명시 또는 (b) register 강제 둘 중 하나로 명시해야 한다 |
| affected_exit_paths | L67, L80, L470, L510, L526 (★ 5건) |
| problem it solves | intentional skip vs accidental skip 분리 0 · ANU 회수 여부 모호 |
| risk if accepted | spec 복잡도 증가 (★ 5 sub-case 각 결정 필요 · cancellation/BLOCKED/ESCALATED 의미 차이 박제) |
| risk if rejected | 5건의 success exit 가 의도 모호 상태 유지 · 향후 새 cancellation path 추가 시 cascade 모호 |
| dependency | R9 (exit × kind 매핑) 의존 — cancellation 의 kind = skip 또는 escalate |
| recommended decision | **MODIFY** (★ ANU 추천) |
| rationale | rule 자체는 ACCEPT 정합이나 wording 이 광범위 — `cancellation` / `BLOCKED` / `ESCALATED` 3 sub-case 분리하여 각 의도 명시 필요 (★ 회장 결정 영역) |

### R7 — python helper 내부 sys.exit() 제외

| 항목 | 내용 |
|---|---|
| current wording | python helper 내부 sys.exit() 는 main control flow 외부로 spec 적용 대상에서 명시적 제외해야 한다 |
| affected_exit_paths | L117, L132, L161, L192, L203, L208, L211, L222 (★ 8건) |
| problem it solves | nested helper subprocess exit 가 spec 적용 대상 모호 — 의도치 않은 적용 회피 |
| risk if accepted | 미래에 python helper 가 main control flow 영향 갖게 될 경우 spec 빠짐 (★ helper 자체 변경 시 spec 재검토 필요) |
| risk if rejected | 8건의 nested exit 가 main spec 에 잘못 포함 · spec drafting 시 GAP-2 cascade |
| dependency | R13 (in_scope / out_of_scope 분리) 의존 |
| recommended decision | **ACCEPT** (★ ANU 추천) |
| rationale | nested helper subprocess 는 main bash control flow 와 분리 명확 · spec scope 명확화 필수 · doctrine drift 위험 낮음 |

### R8 — Layer 1 validator ↔ Layer 2 registrar 분리

| 항목 | 내용 |
|---|---|
| current wording | callback registration 의 enforcement 위치는 (a) Layer 1 validator (bot self-register 검증) (b) Layer 2 registrar (finish-task 직접 register) 둘을 명확히 분리하고 각 layer 의 enforcement 시점을 spec 에 명시해야 한다 |
| affected_exit_paths | L282, L321, L531, L535, L571, L616, L717, L779, L804, L976, L1015, L1052, L1088, L1197, L1255, L1290, L1149 (★ 17건) |
| problem it solves | Layer 1 / Layer 2 의도 분리 0 · self-fail recursion 위험 · doctrine 모호 |
| risk if accepted | 두 layer 가 동시 존재하는 의도 (★ Layer 1 = bot self-register doctrine 강제 + Layer 2 = finish-task fallback) 가 회장 결정 필요 · spec drafting 시간 증가 |
| risk if rejected | 17 exit path 가 모두 callback gate 미도달 · GAP-3 + GAP-8 미해소 · doctrine drift 지속 |
| dependency | R10 (Layer 1 self-fail recursion) 의존 + R11 (결정성 1회 통과) 의존 |
| recommended decision | **ACCEPT** (★ ANU 추천 · 핵심 refinement) |
| rationale | task-2707 production evidence 의 직접 원인 (★ L377 fail-fast → L1106/L1532 둘 다 미도달) · 두 layer 의 역할 분리는 P2 spec 의 핵심 doctrine refinement 영역 |

### R9 — exit 분류 × callback kind 매핑

| 항목 | 내용 |
|---|---|
| current wording | qc_fail / scope_guard_fail / taskctl_fail / dirty_workspace_fail / escalation_path / generic fail_fast 각 분류마다 callback kind (normal / fail_fast / escalate / hold_for_chair / verifier_result / fallback) 매핑을 명시해야 한다 |
| affected_exit_paths | L359, L377, L451, L707, L483, L492, L505, L521, L1012, L1373, L1512 (★ 11건) |
| problem it solves | exit 종류별 callback kind 모호 · ANU 회수 trigger 분류 0 |
| risk if accepted | 9 exit × 7 kind = **63 cell** 결정 필요 (★ §3 매트릭스로 구체화) · 결정 부담 |
| risk if rejected | exit 분류와 callback kind 의 매핑 누락 cascade · GAP-4/5/6/7/9 미해소 |
| dependency | R8 (Layer 분리) + R12 (task_type matrix) 의존 |
| recommended decision | **MODIFY** (★ ANU 추천) |
| rationale | rule 자체 ACCEPT 정합 · 단 매핑 자체는 §3 matrix 로 구체화 후 회장 cell 별 결정 — wording 만 spec 화 |

### R10 — Layer 1 self-fail recursion 회피

| 항목 | 내용 |
|---|---|
| current wording | callback_path 자체 fail (Layer 1 validator self-fail) 시 recursion 회피 spec 명시 + Layer 2 fallback 트리거 여부 결정 |
| affected_exit_paths | L1149 (★ 1건) |
| problem it solves | Layer 1 validator (L1149) 가 자체 FAIL 시 Layer 2 fallback 도 동작 안 함 · 무한 recursion 위험 회피 |
| risk if accepted | spec 추가 결정 영역 1건 (★ Layer 2 fallback 자동 트리거 vs 명시적 SKIP) |
| risk if rejected | L1149 callback validator self-fail 시 marker emit 만 발행 · 실제 callback 등록 0 · recovery path 0 |
| dependency | R8 (Layer 분리) 의존 |
| recommended decision | **ACCEPT** (★ ANU 추천 · 안전성) |
| rationale | recursion 위험 회피는 안전성 doctrine 정합 · Layer 1 self-fail 시 Layer 2 fallback 트리거 방식 결정은 회장 영역 |

### R11 — "결정성 1회 통과" 정의

| 항목 | 내용 |
|---|---|
| current wording | callback registration 의 "결정성 1회 통과" 정의를 (a) 시도 횟수 (b) 시간 한계 (c) idempotency key 패턴 셋 모두로 spec 에 명시해야 한다 |
| affected_exit_paths | ALL 41 (★ 전체) |
| problem it solves | R3 (모든 exit path 결정성 1회 통과) + R4 (idempotent) 정의 모호 |
| risk if accepted | 정의 자체가 spec 결정 필요 (★ 시도 횟수 / 시간 / idempotency key 패턴 3축) |
| risk if rejected | R3/R4 운용 정의 부재 · 구현 시 implicit 결정 cascade |
| dependency | R8 (Layer 분리) + R12 (task_type matrix) 의존 |
| recommended decision | **ACCEPT** (★ ANU 추천 · R3/R4 보완 핵심) |
| rationale | "결정성 1회 통과" 정의 없으면 P2-A 구현 시 implicit 결정 cascade · doctrine drift 위험 큼 · 회장 결정 필수 영역 |

### R12 — task_type 7 × exit 9 = 63 cell matrix

| 항목 | 내용 |
|---|---|
| current wording | spec 의 task_type 7종 × 9 exit 분류 = 63 cell 매트릭스 작성 spec 필요 (★ P1-B 192-cell matrix 정합 패턴) |
| affected_exit_paths | ALL 41 (★ 전체) |
| problem it solves | task_type 별 callback kind 매핑 모호 |
| risk if accepted | 63 cell 회장 결정 필요 (★ §4 matrix 로 구체화) · 결정 부담 크나 P1-B 패턴 재활용 가능 |
| risk if rejected | task_type 별 callback kind 매핑 누락 · FORMALIZATION_COMMIT_ONLY 같은 신규 type 마다 implicit 결정 cascade |
| dependency | R9 (exit × kind) + R6 (cancellation) + R11 (결정성 정의) 의존 |
| recommended decision | **MODIFY** (★ ANU 추천) |
| rationale | rule 자체 ACCEPT 정합 · 매핑 자체는 §4 matrix 로 구체화 후 회장 cell 별 결정 — wording 만 spec 화 (★ P1-B 192-cell 정합 패턴 재활용) |

### R13 — in_scope / out_of_scope 분리

| 항목 | 내용 |
|---|---|
| current wording | spec 적용 범위 (in_scope) 와 명시적 적용 제외 (out_of_scope · python helper / nested subprocess / system task) 분리 spec 필요 |
| affected_exit_paths | L117, L132, L161, L192, L203, L208, L211, L222 (★ 8건 · python helper) |
| problem it solves | spec drafting boundary 모호 · GAP-2 + spec 적용 대상 명확화 |
| risk if accepted | out_of_scope 항목 회장 결정 필요 (★ python helper / nested subprocess / system task 3 category) |
| risk if rejected | 8건의 nested exit 가 main spec 에 잘못 포함 가능성 · spec drafting noise |
| dependency | R7 (python helper exit 제외) 의존 |
| recommended decision | **ACCEPT** (★ ANU 추천) |
| rationale | spec boundary 명확화는 doctrine drift 방지 핵심 · in/out scope 분리 명시 필수 |

### R14 — callback marker + escalation marker 동시 발행

| 항목 | 내용 |
|---|---|
| current wording | callback marker 와 escalation marker 가 동일 exit point 에서 발행될 때 양 marker 의 우선순위 + 동시 발행 가능 여부 spec 필요 |
| affected_exit_paths | L505, L521, L1012 (★ 3건) |
| problem it solves | callback marker / escalation marker 양 trail 분리 모호 · marker collision 위험 |
| risk if accepted | marker 동시 발행 spec 결정 필요 (★ 우선순위 / 동시 / 분리 3안) |
| risk if rejected | escalation 시 callback marker 미발행 cascade · GAP-7 미해소 |
| dependency | R9 (exit × kind) + R5 (marker on failure) 의존 |
| recommended decision | **ACCEPT** (★ ANU 추천) |
| rationale | escalation_marker 와 callback marker 의 trail 분리는 audit trail 명확성 doctrine 정합 · 우선순위 / 동시 발행 방식은 회장 결정 영역 |

### 1.1 추천 종합

| ID | 추천 | 의존성 |
|---|---|---|
| R6 | MODIFY | R9 |
| R7 | ACCEPT | R13 |
| R8 | **ACCEPT (★ 핵심)** | R10, R11 |
| R9 | MODIFY (★ §3 matrix) | R8, R12 |
| R10 | ACCEPT | R8 |
| R11 | **ACCEPT (★ 핵심)** | R8, R12 |
| R12 | MODIFY (★ §4 matrix) | R9, R6, R11 |
| R13 | ACCEPT | R7 |
| R14 | ACCEPT | R9, R5 |

★ ANU 자체 결정 0 · 회장 verbatim 3 enum 매핑만 (ACCEPT/REJECT/MODIFY).

---

## 2. Layer 1 ↔ Layer 2 분리 결정 (★ R8 + R10 정합)

### 2.1 Layer 1 validator 역할

- **위치**: `scripts/finish-task.sh L1106-1160` (★ NORMAL-CALLBACK-ENFORCE)
- **목적**: bot self-register 검증 + 4-source 정합 (★ `schedule_id` + `schedule_history` + ANU `owner_key` + `inbound`)
- **trigger**: envelope 파일 (`memory/events/anu_callback/{task_id}-normal-completion.json`) 존재 시
- **결과**: validator PASS → 진행 · validator FAIL → `emit_not_registered_marker` + L1149 exit 1
- **skip 조건**: `.cancelled` marker 존재 또는 envelope 부재
- **현재 doctrine 추정 (★ hypothesis)**: bot self-register 강제 doctrine — finish-task 가 직접 register 하지 않는 것이 의도일 수도 (★ 회장 결정 영역)

### 2.2 Layer 2 registrar 역할

- **위치**: `scripts/finish-task.sh L1532-1558` (★ callback runtime enforcement gate)
- **목적**: finish-task.sh 가 직접 ANU normal callback cron 등록 (★ helper launch)
- **trigger**: L1532 도달 (★ Layer 1 미exit + 28+ fail_fast exit 1 path 미경유)
- **결과**: helper launch → `{task_id}.callback-launch.json` 발행 (★ status=ANU_OWNED_READY)
- **safety-net 역할**: bot self-register 누락 시 finish-task 가 fallback register

### 2.3 self-fail recursion 위험 (★ R10 핵심)

- Layer 1 validator 자체 FAIL (L1149) → exit 1 → Layer 2 (L1532) 미도달
- Layer 2 fallback 트리거 0 → recovery path 0
- emit_not_registered_marker 만 발행 → marker 만 남고 실제 callback 등록 0

### 2.4 Layer 분리 3 결정 영역 (★ 회장 결정)

| 결정 영역 | 옵션 | 추천 (★ ANU 추천) |
|---|---|---|
| validator failure 시 callback 등록 여부 | (a) emit marker 만 · 등록 0 / (b) emit marker + Layer 2 fallback 호출 / (c) chair_required marker | (b) **fallback 호출** (★ R3 정합) |
| registrar failure 시 marker 처리 | (a) emit marker + safe-fail / (b) emit marker + exit 1 (cascade fail) / (c) emit marker + retry N회 | (a) **emit + safe-fail** (★ R5 정합 + 안전성) |
| Layer 1 / Layer 2 의 enforcement 시점 | (a) Layer 1 enforce first / Layer 2 fallback only / (b) Layer 2 enforce first / Layer 1 verify after / (c) Layer 1 + Layer 2 동시 enforce | (a) **Layer 1 first / Layer 2 fallback** (★ 현재 코드 의도 추정 정합) |

★ 모든 결정 = ANU 추천 only · 회장 verbatim 결정 영역 · evidence-only.

---

## 3. exit × callback_kind 9×7=63 cell matrix (★ R9 구체화)

### 3.1 exit 9 category × callback_kind 7 enum

| exit_category \ kind | normal | fail_fast | escalate | hold_for_chair | verifier_result | fallback | skip |
|---|---|---|---|---|---|---|---|
| success_exit | ✓ default | — | — | — | conditional | — | — |
| qc_fail | — | conditional | ✓ default | — | — | — | — |
| scope_guard_fail | — | — | ✓ default | conditional | — | — | — |
| taskctl_fail | — | — | conditional | ✓ default | — | — | — |
| dirty_workspace_fail | — | — | conditional | ✓ default | — | — | — |
| escalation_path | — | — | ✓ default | conditional | — | — | — |
| callback_path | — | — | conditional | ✓ default | — | conditional | — |
| fail_fast_generic | — | ✓ default | conditional | — | — | — | — |
| cancellation / BLOCKED / ESCALATED | conditional | — | conditional | — | — | — | ✓ default |

★ legend: ✓ default = 추천 default kind / conditional = task_type 별 조건부 / `—` = 매핑 미해당

### 3.2 결정 영역 요약 (★ 회장 결정)

| exit_category | 추천 default kind | rationale |
|---|---|---|
| success_exit | normal | 정상 완료 path · ANU normal callback |
| qc_fail | escalate | QC FAIL = doctrine conflict 가능성 · ANU 회수 trigger |
| scope_guard_fail | escalate | scope-guard FAIL = P1-B C2 caveat lineage · ANU 회수 |
| taskctl_fail | hold_for_chair | infra fail · 회장 보고 필수 |
| dirty_workspace_fail | hold_for_chair | workspace 상태 corruption · 회장 결정 |
| escalation_path | escalate | escalation marker 동반 · escalate kind |
| callback_path | hold_for_chair | validator self-fail · 회장 결정 (★ R10) |
| fail_fast_generic | fail_fast | generic gate fail · fail_fast kind |
| cancellation/BLOCKED/ESCALATED | **skip** | intentional skip default (★ R6 MODIFY 정합) |

★ 추천 default 만 박제 · 9 × 7 = 63 cell 의 conditional cell 매핑은 §4 task_type matrix 결정 후 cascade.

---

## 4. task_type × exit category 7×9=63 cell matrix (★ R12 구체화)

### 4.1 task_type 7 enum × exit 9 category — 각 cell 4 attribute

각 cell:
- `should_register_callback`: YES / NO / CONDITIONAL
- `callback_kind`: kind 1개 또는 multiple
- `escalation_needed`: YES / NO / CONDITIONAL
- `marker_required`: YES / NO

### 4.2 task_type 별 default policy (★ 9 exit 공통)

| task_type | default callback 의무 | 회장 결정 영역 cell 수 |
|---|---|---|
| `code` | YES (★ 일반 코드 task · PR/merge 가능) | 9 |
| `system_hook` | YES (★ finish-task.sh / dispatch.py 등 hook 수정) | 9 |
| `local_runtime` | YES (★ local-only commit · PR 없음) | 9 |
| `formalization_commit_only` | YES (★ task-2707 lineage) | 9 (★ tdd_check 면제 cell 포함) |
| `read_only` | YES (★ Maat / Odin verifier) | 9 (★ QC SKIP cell 포함) |
| `callback_only` | YES (★ self) | 9 (★ callback layer 자체) |
| `closeout_marker_only` | YES (★ P1-A / P1-B closeout) | 9 |

### 4.3 핵심 cell 예시 (★ 결정 영역 박제 · 회장 cell 별 결정)

| task_type × exit | should_register | callback_kind | escalation_needed | marker_required |
|---|---|---|---|---|
| `code` × success_exit | YES | normal | NO | YES (callback-launch.json) |
| `code` × qc_fail | YES | escalate | YES | YES (callback-not-registered.json + escalate marker) |
| `formalization_commit_only` × qc_fail | YES | **escalate + chair_required** | YES | YES (★ task-2707 evidence 정합) |
| `formalization_commit_only` × success_exit | YES | normal | NO | YES |
| `read_only` × qc_fail | YES | escalate | YES | YES (★ Maat 결과 회수 필수) |
| `read_only` × success_exit | YES | verifier_result | NO | YES |
| `callback_only` × callback_path | NO | skip (★ recursion 회피) | NO | YES (chair_required) |
| `system_hook` × scope_guard_fail | YES | hold_for_chair | YES | YES |
| `closeout_marker_only` × success_exit | YES | normal | NO | YES |

★ 위는 추천 cell 예시 9건 only · 63 cell 전체 = 회장 결정 영역.

### 4.4 전체 63 cell 결정 부담 완화 안 (★ ANU 추천 3 옵션)

| 옵션 | 설명 | 추천 |
|---|---|---|
| **A**: 9 task_type default policy + exception cell 명시 | 7 default + N exception cell 만 박제 (★ P1-B 192-cell 패턴 정합) | ★ ANU 추천 (★ 결정 부담 최소화) |
| **B**: 63 cell 전체 명시 | 모든 cell 명시 (★ ambiguity 0 강제) | (★ 결정 부담 큼) |
| **C**: minimal 9 핵심 cell 만 명시 + 나머지 default | core 9 cell + default cascade | (★ ambiguity 부분 잔존) |

★ 회장 결정 영역.

---

## 5. P2-A READY 조건 (★ 회장 결정)

P2-A_IMPLEMENTATION_READY 전환 조건 (★ ANU 추천 5 항목):

1. ★ R6~R14 9 candidate rule 중 **R8 + R10 + R11 ACCEPT 확정** (★ Layer 분리 + recursion 회피 + 결정성 정의 = 핵심 3축)
2. ★ §3 matrix 9 × 7 = 63 cell 중 **9 default kind 결정** (★ §3.2 추천 default 회장 verbatim 확정)
3. ★ §4 matrix 7 × 9 = 63 cell 중 **9 task_type default policy + N exception cell 결정** (★ §4.4 옵션 A 정합 추천)
4. ★ **ambiguity 0 조건**: 41 exit point × 7 task_type 모든 조합에서 callback 등록 의도가 명확히 결정 (★ implicit 결정 0)
5. ★ **self-fail recursion 방지 조건**: Layer 1 self-fail (L1149) 시 recovery path 결정 (★ R10 ACCEPT + Layer 2 fallback 트리거 방식 확정)
6. ★ **idempotency key 정의 조건**: `task_id::callback_kind::executor_attempt_n` 패턴 또는 등가 패턴 확정 (★ R11 ACCEPT 정합)

### 5.1 READY 미충족 시 cascade

- R8 미확정 → Layer 1 / Layer 2 분리 모호 → P2-A 구현 시 implicit Layer 결정 cascade
- R10 미확정 → recursion 위험 코드에 박힘
- R11 미확정 → 결정성 정의 implicit → idempotency 운용 모호
- §3/§4 matrix 미확정 → 41 exit × 7 task_type 매핑 implicit cascade

### 5.2 minimum viable READY (★ ANU 추천)

R8 + R10 + R11 ACCEPT + §3.2 9 default kind + §4 옵션 A 7 default policy → P2-A_IMPLEMENTATION_READY 전환 충분 조건 (★ 회장 결정).

---

## 6. task-2707 처리 (★ 회장 verbatim 4 항목)

### 6.1 회장 verbatim 처리 정합

| 항목 | 상태 | 박제 path |
|---|---|---|
| **implementation PASS 로 보존** | ★ 유지 | commit b5f652440f76f4b3... 보존 · acceptance 7/7 PASS evidence 박제 (★ memory/events/task-2707.formalization-commit-260529.json) |
| **routing fail caveat 로 보존** | ★ 유지 | task-2707 = P2 trigger evidence 1호 · IMPLEMENTATION_PASS_ROUTING_FAIL (★ 회장 verbatim 고정) |
| **P2-A 전 .done 생성 금지** | ★ 강제 | `.done` 미생성 유지 · ANU 자체 `.done` 생성 0 · 봇 자체 `.done` 생성 0 (★ 회장 verbatim) |
| **C1 formalization closeout = P2-A 후 재검증 or 별도 verifier** | ★ pending | 2 옵션: (a) P2-A 구현 후 task-2707 finish-task 재실행 · (b) ANU 독립 verifier 또는 dev2 오딘 read-only verifier task-2707+1 dispatch (★ p2 spec §9 정합) |

### 6.2 C1 closeout 옵션 2 추천 (★ ANU 추천 · 회장 결정)

| 옵션 | 설명 | 추천 priority |
|---|---|---|
| **OPTION α**: P2-A 구현 → task-2707 finish-task 재실행 | P2-A 가 task_type aware fail-fast 처리 → tdd_check 면제 → finish-task 정상 통과 → .done + callback registration | 회장 결정 영역 · P2-A timeline 의존 |
| **OPTION β**: task-2707+1 dev2 오딘 read-only verifier dispatch | C1 산출물 read-only 독립 검증 → 5 enum verdict (FULL_ACCEPT / ACCEPT_WITH_KNOWN_CAVEATS / PARTIAL_ACCEPT / HOLD_FOR_CHAIR / REJECT) → C1+1 closeout marker | ★ ANU 추천 (★ P2-A timeline 독립 + Maat doctrine 정합) |
| **OPTION γ**: HOLD_FOR_CHAIR until P2-A completion | C1 closeout pending · P2-A 완료 후 cascade closeout | 회장 결정 영역 · 보수적 |

★ ANU 추천 = OPTION β (★ p2 spec §9 + task-2706+1 Maat lineage 정합) · 회장 결정 영역.

---

## 7. ANU Doctrine Compliance

- ★ ANU 자체 P2-A 구현 0 (★ 회장 verbatim 'P2-A 구현 금지')
- ★ ANU 자체 코드 수정 0 / finish-task.sh 수정 0 / helper 수정 0
- ★ ANU 자체 callback cron 수동 등록 0
- ★ ANU 자체 `.done` 생성 0
- ★ ANU 자체 task-2708 발의 0
- ★ ANU 자체 PR / branch push / merge / GitHub write 0
- ★ ANU 자체 분류 결정 0 (★ R6~R14 9 추천 = 회장 verbatim 3 enum 매핑만 · 신규 enum 신설 0)
- ★ hypothesis 분리 박제 (★ Layer 1 envelope check 의도 = bot self-register doctrine 강제 추정 · 회장 결정 영역)
- ★ evidence-only (★ task-2707 production evidence + finish-task.sh source location verbatim 인용만)

---

## 8. Lineage Preservation

- task-2626 — callback runtime enforcement gate 도입 (★ L1550 origin)
- task-2661 — callback fire delay 30s remediation Phase 2b (★ L1369 fix)
- task-2683 lineage — Layer 1 NORMAL-CALLBACK-ENFORCE validator 도입 (★ L1106-1160 origin · hypothesis)
- task-2707 — IMPLEMENTATION_PASS_ROUTING_FAIL trigger evidence 1호 (★ 회장 verbatim 고정)
- P1-B closeout C2 caveat — finish-task.sh routing layer 차단 lineage
- P2 spec draft (R1~R5) — memory/specs/p2_finish_task_callback_before_failfast_contract_draft_260529.md
- P2 exit path audit (NEEDS_REFINEMENT) — memory/specs/p2_exit_path_coverage_audit_260529.md
- **본 refinement (R6~R14 + 2 matrix + READY 조건 + task-2707 처리)**
- lineage_rewrite_count: 0

---

## 9. Chair Decision Pending (★ 회장 결정 8 영역)

1. ★ R6~R14 9 candidate rule 각 ACCEPT / REJECT / MODIFY (★ §1 추천 정합 확인)
2. ★ Layer 1 ↔ Layer 2 분리 3 결정 영역 (★ §2.4 추천 정합 확인)
3. ★ §3 9 default kind 결정 (★ §3.2 추천 default verbatim 확정)
4. ★ §4 옵션 A/B/C 선택 (★ ANU 추천 = A)
5. ★ §4 9 task_type default policy + N exception cell 결정 (★ 옵션 A 정합)
6. ★ P2-A_READY minimum viable 조건 (★ §5.2 추천 정합 확인)
7. ★ task-2707 C1 closeout 옵션 α/β/γ 선택 (★ ANU 추천 = β)
8. ★ P2-A 구현 task ID 발급 시점 (★ 회장 별도 인가)

---

## 10. Sentinel

★ 본 refinement = R6~R14 결정 + Layer 분리 + 2 matrix + READY 조건 + task-2707 처리. P2-A 구현 0 · 코드 수정 0 · finish-task 수정 0 · helper 수정 0 · cron 수동 등록 0 · .done 생성 0 · dispatch 0. 끝
