# v2.14 §31 Gate Shadow S1/S2 — Dirty Policy Check (READ-ONLY) · 260620

- 작성: 아누 / 2026-06-20 KST
- 회장 조건부 수용 후 closeout 전 확인 지시: `memory/state/gate_shadow_log/`가 실제 dispatch 시 working tree dirty를 만드는지 / 정책상 허용 artifact인지.
- ★ read-only 확인. **코드/경로/결선 수정 0.**

## 1. Dirty 정책 확인 결과 — **NO_DIRTY (정책상 허용 artifact)**
- `.gitignore:48` = `memory/state/` 전체 ignored.
- `git check-ignore -v memory/state/gate_shadow_log/gate_shadow_20260620.jsonl`
  → `.gitignore:48:memory/state/` 매칭 = **IGNORED**.
- 결론: 실제 dispatch가 `gate_shadow_log/*.jsonl`을 append해도 **git working tree dirty 0**.
- 선례(동일 정책): `memory/state/correction_budget_ledger.json`, `memory/logs/cleanup-audit.jsonl` 등 동적 artifact 모두 IGNORED.
- 참고: `memory/state/automation_capability_matrix.json`만 force-track 예외이며, gate_shadow_log는 그런 예외 없이 ignored.
- 판정: `ACCEPTED_REPORT_ONLY_ARTIFACT_DIRTY` / `DIRTY_POLICY_REVIEW_REQUIRED` **둘 다 해당 없음** — dirty 자체가 발생하지 않으므로. 별도 hygiene 수정 불요.
- 현황: `gate_shadow_log/` 아직 미생성(실제 dispatch 미발생). smoke 테스트는 tmp_path에만 기록.

## 2. 변경 파일 3개 + sha256
- 신규 `dispatch/gate_shadow_runner.py` — `76d19791293ff73eb551cf80d53dd9cc8d07ae2db93643838c1a92d86f1c2431`
- 신규 `tests/regression/test_gate_shadow_runner_2765.py` — `a87f545ee651240272230d982509823c716908a4fe26fd4a67d5a06d7f98d637`
- 수정 `dispatch/__init__.py` — `c373ed1b…` → `e9f02b1890320648009660889de589d9d66cdbe8bb39f4760535d0abdcefda62` (추가 7줄: "위임 시작" 직후 fail-open shadow 호출, 기존 로직 0 변경)

## 3. 테스트 결과 — 138 passed
- 신규 회귀 `test_gate_shadow_runner_2765.py`: 기본(prepend) 모드 **6/6 PASS**.
- 기존 §31 게이트 회귀 `test_v213_phase1_gate_2757.py` 동반: **138 passed**(132+6, 영향 0).
- 검증: fail-open / no-block(항상 None·raise 0) / no-secret-log / verdict 기록 / log write 실패 fail-open / 시그니처 no task_desc·prompt.
- (참고) 첫 collection 실패는 repo 기존 함정(`tests/dispatch/`가 `dispatch` 패키지 shadow), 표준 회피 패턴(task-2640) 적용으로 해결 — 신규 모듈 결함 아님.

## 4. ACTIVE=false / P0-B FROZEN 유지 증거
- matrix sha `bfad1fbd…` **불변**(수정 0) · 게이트 4종 본체 mtime 무변경.
- fail-closed 0 · hook/finish-task/settings.json/systemd 오늘 수정 0건 · merge·push 0 · credential 접근 0.
- p0b_inbox backlog 3건 유지 · anu-pickup.path inactive · real fire 0 · canary 0.
- shadow_evaluate 실호출(smoke): verdict `INVALID_CONTRACT_PROVENANCE` 관측, 반환 None, **차단 0**.

## 5. 미승인 유지
- S3(hook/finish-task 결선) · S4(fail-closed 전환) · matrix delta(v213_phase1_gate_machine wired none→shadow) = **전부 별도 Chair 승인 대기**.
- 본 단계 = dispatch path 1곳 report-only shadow까지만. 자동 확장 0.

**상태: dirty 정책 NO_DIRTY 확인 완료. 코드 수정 0. ACTIVE=false · P0-B FROZEN 유지.**
