# task-2638-b1-pilot — low-risk PR pilot B1 (dryrun_shadow INDEX.md row 추가 · merge 실행 금지)

- Level: Lv.2 (low-risk doc-only pilot · pilot merge 실행은 회장 최종 승인 후)
- 담당: dev6 페룬
- base: origin/main **fa72e25a** (PR #140 real merge wiring OFF-mode 머지 반영분)
- 단일소스 spec: `memory/specs/system_b1_pilot_dryrun_shadow_index_spec_260523.md`
  - sha256: `4c6191150f7388964d04a6e32336c8d400adb595bc34f6374e399caeb5c41866`
  - 정독 전 sha256sum 검증 필수, 불일치 시 중단·ANU 보고
- 승인 범위: **PR open + gate 확인까지만**. pilot merge 실행 = chair_authorization 최종 승인 후 (현재 단계 금지).

## 목표
`tests/fixtures/dryrun_shadow/INDEX.md` 갱신 (16 시나리오 카탈로그 명확화 · verdict→action 매핑 행 보완). test/fixture/doc only · production code 변경 0 · 변경 파일 ≤ 4 · rollback trivial.

## expected_files (B1 pilot · ≤4 file cap)
- `tests/fixtures/dryrun_shadow/INDEX.md` (필수 · 1 file)
- (선택) `tests/fixtures/dryrun_shadow/<scenario>/PROVENANCE.md` doc 보완 1~3 file (regression 영향 0 유지 — evidence.json/expected.json 변경 0)

## 금지 (회장 verbatim)
- production code 변경 0 (helper · regression · evidence.json · expected.json 전부 무수정)
- `ANU_REAL_MERGE_EXECUTOR_ACTIVE=1` 설정 금지
- real merge 실행 금지
- chair_authorization JSON 실 발급 금지 (초안 template 만)
- batch auto-merge 활성화 금지
- admin override 금지
- branch protection 우회 금지
- foreign dirty 정리 금지
- replacement_pr_runner / finish-task.sh 무수정
- production service task 와 혼합 금지

## forbidden_paths (정적 가드 15+종)
- utils/replacement_pr_runner.py · scripts/finish-task.sh
- utils/merge_ready_classifier.py · utils/merge_ready_dryrun_executor.py
- utils/callback_envelope_schema.py · utils/anu_callback_registrar.py
- utils/canonical_root_resolver.py · utils/anu_collector_action_trigger.py
- utils/real_merge_hooks.py · utils/activation_flag_validator.py
- utils/chair_authorization_validator.py · utils/gate_snapshot_validator.py
- utils/real_merge_artifact_schema.py
- dispatch/__init__.py · dispatch/finalize_hooks.py
- .tasks/ · tests/regression/ · tests/fixtures/ (단 dryrun_shadow/INDEX.md 만 예외 + 선택 PROVENANCE.md)

## 필수 regression (변경 0 유지 단언)
- 신규 regression 0 (본 pilot 은 fixture data 변경 0 · regression 미변경)
- 기존 dryrun shadow 156 + dryrun executor 58 + classifier 50 + callback consistency 40 + canonical-root 63 + real_merge wiring 41 + 기존 task-2635 helper 68 = **476/476 PASS 유지**
- full new fail 0

## 자동수렴
- Gemini medium/style/quality + expected_files 내부 → 자동수렴
- 동일 함수 HIGH 반복 시 LOOP_BOUNDARY → 회장 보고

## finalize 프로토콜 (★ BOT App token 부재 — 로컬 한정)
1. base = origin/main fa72e25a clean
2. INDEX.md 갱신 + (선택) PROVENANCE.md 보완 · regression 476 유지
3. **로컬 commit만** (push/PR/merge 금지). finish-task.sh project_path 없이 로컬 종결
4. ANU normal completion callback (task-2635+1/task-2636 registrar 패턴) · envelope 5축 + canonical_root 명시
5. callback envelope ≤3900 bytes
6. executor 시작/종료 ts·로컬 commit SHA 명기

이후 ANU: 봇 로컬 commit 위에 fresh main fa72e25a 위로 적층 → OWNER push → PR open → Gemini 자동수렴 → 회장 보고 → **회장 chair_authorization 발급 결정 대기** (pilot merge 실행은 현재 단계 금지).

## frozen anchor
- ANCHOR-1: "B1 pilot = INDEX.md row 추가 만 · ≤4 file · production code 변경 0"
- ANCHOR-2: "PR open + gate 확인까지만 본 단계 · pilot merge 실행은 chair_authorization 최종 승인 후"
- ANCHOR-3: "forbidden paths 15+종 무수정 · regression 변경 0 · 476/476 유지"
- ANCHOR-4: "ACTIVATION_FLAG_DEFAULT=False 유지 · ANU_REAL_MERGE_EXECUTOR_ACTIVE env 설정 0"
- ANCHOR-5: "rollback trivial (git revert 1 commit)"
