# P1-B 설계 초안 정밀화 — 6 task_mode × {PASS, WARN, FAIL, ESCALATE} matrix

**작성자**: ANU (chair-facing session)
**작성 시각**: 2026-05-29 10:20 KST
**위임 근거**: 회장 verbatim 추가 위임 새 STEP 3 — "P1-B 설계 초안 정밀화 · task_mode 6종에 대해 PASS / WARN / FAIL / ESCALATE matrix 작성 · 구현 금지"
**상위 문서**: `memory/specs/v36_finish_task_profile_contract_design_draft_260529.md`
**범위**: 설계만 · 구현 0 · 자동 task 발의 0 · 회장 결재 시에만 후속 구현

---

## 0. 정밀화 목표 (★ 회장 verbatim)

P1-B 설계 초안의 §2 (PASS/WARN/FAIL 매트릭스) 를 **PASS / WARN / FAIL / ESCALATE 4 단계** 로 확장하여 6 task_mode 각각에 대해 8 게이트 차원의 명확한 결정 매트릭스를 작성한다.

- 기존 §2.1~§2.3 = 3 게이트 (git_evidence / L1 smoke / scope guard) × 3 등급 (PASS/WARN/FAIL)
- 본 정밀화 = 8 게이트 × 4 등급 (★ ESCALATE 추가)

**ESCALATE 정의**: PASS/WARN/FAIL 와 분리. 회장 직접 결재 필요 분기 (★ 자동 분류 불가 영역). HOLD_FOR_CHAIR doctrine 정합.

---

## 1. 6 task_mode 박제 (★ 설계 초안 §1 정합)

```
M1. code                      — production 코드 변경 (PR/머지)
M2. system_hook               — .claude/hooks/ · settings.json · runtime hook
M3. local_runtime             — workspace local runtime (dispatch wrapper · watchdog · taskctl · cron)
M4. read_only                 — 진단/audit/report (mutating 0 · 산출물 = md/json)
M5. callback_only             — ANU callback 발사 전용 (envelope only)
M6. closeout_marker_only      — 회장 결정 박제 / closeout 운영 마커 (.escalate.acked · decision-closeout)
```

---

## 2. 8 게이트 × 4 등급 매트릭스

### 2.1 게이트 1: `git_evidence`

| task_mode | PASS | WARN | FAIL | ESCALATE |
|-----------|------|------|------|----------|
| **M1 code** | working tree change + commit author audit + lock_sha..HEAD diff 정합 + actor verifiable | commit message actor prefix 미적용 · lock_sha 부재 시 main..HEAD 폴백 | git diff 0 OR actor verifiable 0 | git diff 가 forbidden_paths 매칭 시 (★ 회장 결재 필수) |
| **M2 system_hook** | .claude/hooks/ + settings.json 결선 trace + DENY smoke evidence | hook config diff 있으나 production load trace 부재 | hook file 존재하나 settings.json wiring 0 | hook 가 forbidden 영역 wire (★ 회장 결재) |
| **M3 local_runtime** | workspace local file change + 결선 evidence | runtime restart smoke 부재 | runtime path 변경 없이 보고만 | dispatch.py / session-watchdog.sh / taskctl 핵심 결선 변경 (★ 회장 결재) |
| **M4 read_only** | git diff 0 (mutating 0) | git diff 0 이나 memory/events/ 마커 변동 (★ 정상) | git diff 0 아님 (★ 우발 변경 의심) | git diff 가 lineage 산출물 (task-2705/2705+1/2705+2/...) 매칭 시 |
| **M5 callback_only** | ANU-key cron registration + envelope sha 박제 | cron 등록은 됐으나 envelope sha 누락 | cron 등록 0 OR self-key 등록 (★ SELF_COLLECTOR_FORBIDDEN) | self-key 등록 검출 (★ 회장 doctrine 위반 보고) |
| **M6 closeout_marker_only** | marker JSON schema valid + chair_authorization linkage | marker schema 부분 충족 | marker 없음 OR schema fail | marker 가 lineage rewrite 시도 (★ 회장 결재 필수) |

### 2.2 게이트 2: `L1 smoke`

| task_mode | PASS | WARN | FAIL | ESCALATE |
|-----------|------|------|------|----------|
| **M1 code** | 서버 재시작 + API curl 또는 Playwright | smoke fixture 만 PASS · 실 서버 trace 부재 | smoke 0 OR API/Playwright 실패 | production critical path 실 서버 fail (★ 회장 즉시 보고) |
| **M2 system_hook** | hook 실제 trigger DENY/HOLD trace (★ task-2703 case) | hook 등록만 + trigger trace 부재 | hook 미작동 trace | hook 가 production runtime block 시 (★ 회장 즉시 보고) |
| **M3 local_runtime** | runtime restart + 기능 smoke (예: dispatch 재실행 + spawn 검증) | restart 없이 unit test 만 | restart smoke 실패 | runtime 가 self-dispatch loop trigger 시 (★ 회장 즉시 보고) |
| **M4 read_only** | N/A (★ mutating 0 · smoke 의미 0) | — | — | — |
| **M5 callback_only** | callback fire 후 ANU collector spawn 확인 | cron 등록 + spawn 부재 | callback 미수신 | callback 가 chain loop trigger 시 (★ 회장 즉시 보고) |
| **M6 closeout_marker_only** | N/A (★ 마커 작성만 · 실 서버 영향 0) | — | — | — |

### 2.3 게이트 3: `scope guard`

| task_mode | PASS | WARN | FAIL | ESCALATE |
|-----------|------|------|------|----------|
| **M1 code** | lock_sha..HEAD diff 가 expected_files 범위 내 + per-task scope-guard 정합 | scope 일부 외부 · 회장 명시 인가 영역 | scope 외 파일 변경 + 인가 0 | session-watchdog.sh / finish-task.sh / settings.json 등 forbidden_paths 매칭 시 (★ 회장 결재 필수) |
| **M2 system_hook** | .claude/ + harness/ + allowed_resources 명시 scope | settings.json 결선 외 추가 변경 (★ 조건부 허용 분기) | finish-task.sh 변경 OR expected_files 외 변경 | hook 가 회장 verbatim 금지 영역 wire 시 |
| **M3 local_runtime** | workspace local file scope + allowed_resources 명시 | runtime 결선 외 utility 변경 (★ 정합 확인 필요) | 본 task 범위 외 파일 변경 | dispatch.py / session-watchdog.sh / taskctl 핵심 변경 (★ 회장 결재 필수) |
| **M4 read_only** | git diff 0 = automatic PASS | — (★ git diff 0 시 다른 등급 부재) | git diff 0 아님 | 우발 변경이 lineage 산출물 매칭 시 |
| **M5 callback_only** | envelope file 1건만 OR cron 등록 trace | envelope + 추가 marker | scope 외 변경 | envelope 가 chain trigger 또는 self-fire loop 시 (★ 회장 보고) |
| **M6 closeout_marker_only** | memory/events/ + memory/reports/ scope | scope 일부 외부 | scope 외 OR task_id 외 마커 변경 | lineage rewrite 시도 (★ 회장 결재) |

### 2.4 게이트 4: `dirty workspace`

(★ §3 dirty 5 enum 매핑)

| task_mode | PASS | WARN | FAIL | ESCALATE |
|-----------|------|------|------|----------|
| **M1 code** | OWN_DIRTY 만 (★ 본 task 변경) | INHERITED_DIRTY 잔여 (★ stash 미정리) | EXTERNAL_DIRTY 매칭 시 본 task 의도 의심 | DAEMON_RECURRENCE 매칭 시 (★ 회장 즉시 보고) |
| **M2 system_hook** | OWN_DIRTY 만 | INHERITED_DIRTY | EXTERNAL_DIRTY 매칭 | DAEMON_RECURRENCE (★ task-2702 daemon flapping 정합) |
| **M3 local_runtime** | OWN_DIRTY 만 | INHERITED_DIRTY | EXTERNAL_DIRTY | DAEMON_RECURRENCE |
| **M4 read_only** | OWN_DIRTY 0 (★ 변경 0) | INHERITED_DIRTY 잔존 (★ 정상) | EXTERNAL_DIRTY (★ 우발 변경 의심) | DAEMON_RECURRENCE OR UNKNOWN_DIRTY |
| **M5 callback_only** | OWN_DIRTY = envelope file 만 | INHERITED_DIRTY | EXTERNAL_DIRTY | DAEMON_RECURRENCE |
| **M6 closeout_marker_only** | OWN_DIRTY = marker 만 | INHERITED_DIRTY | EXTERNAL_DIRTY | DAEMON_RECURRENCE OR lineage 침범 |

### 2.5 게이트 5: `qc verification`

| task_mode | PASS | WARN | FAIL | ESCALATE |
|-----------|------|------|------|----------|
| **M1 code** | qc_verify.py 핵심 게이트 (pyright / spec / test) PASS | qc_verify.py 일부 WARN (예: claude_md_check 100 lines 초과) | qc_verify.py FAIL | Critical 7 매칭 시 |
| **M2 system_hook** | hook 정합 + qc spec_compliance PASS | hook trigger 부분 WARN | hook FAIL | hook 가 settings.json security spec 위반 시 |
| **M3 local_runtime** | runtime spec_compliance PASS | utility WARN | runtime FAIL | runtime 가 회장 doctrine 위반 (★ 예: 봇 self-collector 등록) |
| **M4 read_only** | qc 적용 0 (★ N/A) | — | — | — |
| **M5 callback_only** | envelope schema PASS + ≤3,900 bytes | envelope size warning (3,500~3,900) | envelope FAIL OR size 초과 | self-key callback 검출 (★ doctrine 위반) |
| **M6 closeout_marker_only** | marker schema valid + chair_authorization linkage | schema 부분 WARN | schema FAIL | lineage rewrite 시도 |

### 2.6 게이트 6: `lineage preservation`

| task_mode | PASS | WARN | FAIL | ESCALATE |
|-----------|------|------|------|----------|
| **M1 code** | parent task lineage 산출물 sha 변경 0 | 산출물 sha drift 관찰 (★ 자동 변경 아님) | 산출물 sha 변경 + 회장 인가 0 | lineage 산출물 강제 rewrite (★ 회장 결재 필수) |
| **M2 system_hook** | parent task lineage 보존 | drift 관찰 | sha 변경 + 인가 0 | rewrite 시도 |
| **M3 local_runtime** | parent task lineage 보존 | drift 관찰 | sha 변경 + 인가 0 | rewrite 시도 |
| **M4 read_only** | parent task lineage 보존 (★ 100% 강제) | drift 관찰 가능 (★ 외부 원인) | 산출물 sha 변경 (★ read-only 위반) | 우발 rewrite |
| **M5 callback_only** | parent lineage 무관 | — | envelope 가 lineage 변경 trigger | — |
| **M6 closeout_marker_only** | parent lineage + decision-closeout linkage | drift 관찰 | sha 변경 + 인가 0 | rewrite 시도 |

### 2.7 게이트 7: `actor attribution` (★ P1-C 정합 — IMPLEMENT_LATER 시 활성)

| task_mode | PASS | WARN | FAIL | ESCALATE |
|-----------|------|------|------|----------|
| **M1 code** | L3+ commit trailer OR L4 runtime event + L5 trace | L1+L2 만 + caveat 박제 | L1 단독 + negative absolute claim (★ ATTR-001) | role overlap 미박제 (★ ATTR-002) |
| **M2 system_hook** | L4 hook event + L5 trace | L1+L2 만 + caveat | L1 단독 + claim | overlap 미박제 |
| **M3 local_runtime** | L4 runtime event + L5 trace | L1+L2 만 + caveat | L1 단독 + claim | overlap 미박제 |
| **M4 read_only** | L4 read-only 명령 trace + L5 transcript | L1+L2 + caveat | L1 단독 | INDEPENDENT_VERIFICATION_MISSING (★ ATTR-004) |
| **M5 callback_only** | L4 cron registration + envelope sha L2 | L1+L2 만 | L1 단독 | SELF_COLLECTOR_VERIFICATION |
| **M6 closeout_marker_only** | L4 marker write + chair linkage | L1+L2 만 | L1 단독 | lineage rewrite + L1 단독 |

### 2.8 게이트 8: `callback enforcement`

| task_mode | PASS | WARN | FAIL | ESCALATE |
|-----------|------|------|------|----------|
| **M1 code** | ANU-key cron + envelope ≤3,900 bytes + collector spawn 검증 | cron 등록만 + spawn 부재 | cron 0 OR self-key 등록 | SELF_COLLECTOR_FORBIDDEN 위반 |
| **M2 system_hook** | ANU-key cron + envelope OK | cron 부재 (★ system hook 분류 시 callback 의무 미적용 가능) | self-key 등록 | SELF_COLLECTOR 위반 |
| **M3 local_runtime** | ANU-key cron + envelope OK | cron 부재 가능성 (★ runtime 분류 시 변동) | self-key | SELF_COLLECTOR 위반 |
| **M4 read_only** | ANU-key cron + envelope OK | cron 부재 가능 (★ read-only 분류) | self-key | SELF_COLLECTOR 위반 |
| **M5 callback_only** | ANU-key cron + envelope ≤3,900 bytes (★ 본 mode 핵심) | envelope 3,500~3,900 bytes warning | envelope FAIL OR cron 0 | self-key OR chain loop |
| **M6 closeout_marker_only** | marker linkage + ANU 보고 박제 | callback 형식 부분 | callback 0 | doctrine 위반 |

---

## 3. 4 등급 운영 정책

### 3.1 PASS

- 모든 게이트 PASS → finish-task workflow 정상 진행 → .done 생성 + task-timer end + ANU callback 등록
- 후속 단계 진입 권한 부여

### 3.2 WARN

- 1~2 게이트 WARN 만 → finish-task workflow 진행 + WARN 박제 + ANU 보고 시 caveat 명시
- task PASS 처리 가능 · 단 후속 task 발의 시 caveat 정합 검증

### 3.3 FAIL

- 1 이상 게이트 FAIL → finish-task workflow 차단 (★ .done 차단) → .done.failed JSON payload 발행 OR escalation_marker emit
- 후속 task 재시도 (+N) 가능 · 자동 발의 0

### 3.4 ESCALATE

- 1 이상 게이트 ESCALATE → 회장 직접 결재 분기 (★ HOLD_FOR_CHAIR)
- .done 차단 + .escalate marker 박제 + ANU 회장 즉시 보고
- 회장 결재 후에만 후속 진행

---

## 4. 정합성 검증 — task-2703 / task-2704 / task-2705+3 case study

### 4.1 task-2703 (V3.6 Runtime Harness MVP · system_hook 분류)

| 게이트 | 결과 | 평가 |
|--------|------|------|
| git_evidence | PASS | .claude/hooks/ + settings.json 결선 trace 박제 |
| L1 smoke | PASS L4 | hook DENY/HOLD trace 박제 |
| scope guard | PASS | .claude/ + harness/ scope 내 |
| dirty workspace | PASS | OWN_DIRTY 정합 |
| qc verification | PASS | spec_compliance PASS |
| lineage preservation | PASS | parent lineage 0 (★ 초기 task) |
| actor attribution | WARN (★ L1 self-attestation 한계) | Hermes 직접 코딩 attribution 모호 |
| callback enforcement | PASS | ANU-key 정합 |

→ 종합: **ACCEPT_WITH_CONTROL_PLANE_GAPS** (★ 회장 verbatim 정합)

### 4.2 task-2704 (Control Plane P0 MVP · code 분류)

| 게이트 | 결과 | 평가 |
|--------|------|------|
| git_evidence | PASS | dispatch.py + dispatch_marker_writer 결선 |
| L1 smoke | PASS L4 | 285/285 PASS |
| scope guard | PASS | code scope 정합 |
| dirty workspace | WARN | INHERITED_DIRTY (★ task-2703 잔여) |
| qc verification | PASS | qc_verify PASS |
| lineage preservation | PASS | task-2703 lineage 보존 |
| actor attribution | WARN | "직접 코딩 0" verbatim 표현 강제 |
| callback enforcement | PASS | ANU-key 정합 |

→ 종합: **ACCEPT_WITH_KNOWN_CAVEATS**

### 4.3 task-2705+3 (item 9 fix · code 분류)

| 게이트 | 결과 | 평가 |
|--------|------|------|
| git_evidence | PASS L4+ | helper + 2 callers L1 byte-equal |
| L1 smoke | PASS L4+ | task-2705+4 dispatch marker production runtime |
| scope guard | **ESCALATE** | ★ 25 violations (★ session-watchdog.sh forbidden + main..HEAD misfire) |
| dirty workspace | **FAIL** | EXTERNAL_DIRTY 1041+ files |
| qc verification | WARN | scope_check + claude_md_check WARN |
| lineage preservation | PASS | task-2705 lineage 보존 |
| actor attribution | WARN | Hermes 직접 패치 caveat |
| callback enforcement | PASS | ANU-key 정합 |

→ 종합: **ESCALATE_TO_CHAIR_FOR_SCOPE_GUARD_MISFIRE** (★ 본 정밀화 적용 시)

★ 단, 본 case 의 ESCALATE 는 **main..HEAD misfire** root cause (★ task-2569) 가 명확하므로 회장 verbatim 'ACCEPT_WITH_KNOWN_CAVEATS' 분류와 정합화 가능.

---

## 5. 자동 분류 알고리즘 정밀화

### 5.1 task_mode 분류 우선순위 (★ 설계 초안 §1.1 정합)

```
1. code         (★ production 코드 패턴)
2. system_hook  (★ .claude/hooks/ · settings.json)
3. local_runtime (★ workspace local · dispatch.py · session-watchdog.sh · taskctl · cron)
4. closeout_marker_only (★ .escalate.acked · decision-closeout 패턴)
5. callback_only (★ envelope only)
6. read_only    (★ "read_only" 명시)
7. UNKNOWN      (★ 모든 signal 미매칭)
```

### 5.2 결정 알고리즘

각 task 종료 시 finish-task workflow 진입 직전:
1. task_mode 자동 분류 (★ §5.1)
2. 8 게이트 평가 (★ §2)
3. 4 등급 결정 (★ §3) — 최악 등급 우선 (ESCALATE > FAIL > WARN > PASS)
4. 최악 등급 = ESCALATE 시 → 회장 직접 결재 (HOLD_FOR_CHAIR)
5. 최악 등급 = FAIL 시 → .done 차단 + escalation_marker
6. 최악 등급 = WARN 시 → .done 진행 + WARN 박제
7. 최악 등급 = PASS 시 → .done 정상

---

## 6. ANU 자기 한계 (★ 정직)

- 본 matrix = ANU read-only 추정 · 실 운영 시 fixture validation 필요
- 8 게이트 × 6 task_mode × 4 등급 = **192 cell** 매트릭스 · 실 운영 1-2 task 적용 후 회장 verbatim 정합 검증 권고
- ESCALATE 등급 신규 도입 → 기존 BLOCKED/ESCALATED 분기와의 정합화 필요
- task-2703/2704/2705+3 case study (★ §4) 는 사후 분석 · 실 contract 적용 시 회귀 시나리오 검증 필요
- task_mode UNKNOWN 시 회장 명시 분기 강제 (★ safe-fail doctrine 정합)

---

## 7. 본 정밀화 의 단일 효력

- 본 문서 = **설계 정밀화만** · 구현 0 · 자동 task 발의 0
- task-2706/2707 자동 발의 0 (★ 회장 verbatim 정합)
- ANU 본체 직접 구현 0
- 회장 별도 결재 시에만 후속 task 발의 가능

---

## 8. linked references

- `memory/specs/v36_finish_task_profile_contract_design_draft_260529.md` (P1-B 원본 설계)
- `memory/specs/v36_actor_attribution_contract_design_draft_260529.md` (P1-C 정합)
- `memory/events/p1a_task_md_sha_contract_accepted_with_known_caveats_260529.json`
- `memory/events/anu_new_step_1_task_2705_report_drift_root_cause_investigation_260529.json`
- `memory/events/anu_new_step_2_scope_guard_false_positive_root_cause_260529.json` (★ scope guard misfire root_cause)
- `memory/events/anu_step_3_p1b_implementation_assessment_260529.json` (★ P1-B IMPLEMENT_LATER 권고)

---

**8 게이트 × 6 task_mode × 4 등급 정밀화 완료 · 구현 0 · 자동 task 발의 0 · 회장 결재 대기.**

★ 본 정밀화 = ANU read-only 추정 매트릭스 · 실 운영 검증 필요. 회장 verbatim 정합 검증 후 task-2706 또는 sub-id 발의 가능.

끝
