# task-2771 — Core/Work infra runtime/test 8개 sealed-bundle PR화 (guard-native)

## 목표 (lifecycle 고정 — 재구현 절대 금지)
이미 검증된 working tree 8개 파일(§31 shadow + content QC + 회귀)을 **sealed handoff bundle** 기반으로
**guard-native PR lifecycle**에 올린다. ★ 새 구현/설계개선/리팩터/테스트 추가 절대 금지 — **patch 적용만**.
bundle 이 source of truth. ANU 직접 push/수기 lock/TASKCTL_BYPASS 금지(과거 PR#245 선례).

## sealed handoff bundle (canonical, source of truth)
```text
/home/jay/workspace/memory/handoffs/core_work_infra_pr_task2771/
  base_head.txt     : 38ee05556c1ff208314275d7d546048198526462 (이 base 에서만 적용)
  expected_files.txt: 8개 파일
  manifest.json     : 8개 sha256/size/역할/status(new6+modified2)
  patch.diff        : 8개 변경 (matrix/산출물 파일 0 — 코드 내 경로 문자열만 존재)
```

## 절차 (guard-native, 수기 금지)
```text
1. start_task_guard 로 정식 task/worktree/lock 생성. 수기 branch/lock/commit/push 절대 금지.
2. base HEAD 확인: worktree base == 38ee0555(base_head.txt). 불일치 → patch 적용 전 STOP_REPORT.
3. patch 적용: git apply /home/jay/workspace/memory/handoffs/core_work_infra_pr_task2771/patch.diff
   ★ 재구현/리팩터 0, patch 적용만. (현재 canonical working tree 엔 이미 적용돼 있으니 worktree clean base 에서 적용)
4. 적용 후 8개 파일 sha256 == manifest.json 일치 확인. 불일치 → STOP_REPORT.
5. git status/diff 의 변경 == expected_files 8개 정확히 일치. 8개 밖 수정 → STOP_REPORT.
6. 관련 regression PASS 확인:
   pytest tests/regression/test_gate_shadow_runner_2765.py test_gate_shadow_finish_task_2766.py
          test_goal_contract_strict_template_2767.py test_content_qc_2769.py test_v213_phase1_gate_2757.py
7. PR 생성(아래 본문). ★PR 후 CI/Gemini polling 0 — PR 번호/URL/초기상태 1회 확인 후 report 종료.
```

## PR 본문 필수 내용
```text
- content 팀 lightweight QC(teams/content/qc/qc_verify.py): team=content 문서전용·self-contained·
  외부발송/게시/고객정보 0·task-2770 E2E VERIFIED. ★HEAD 없으면 다음 콘텐츠 dispatch 가 shared 코드QC 로
  떨어져 task-2768 처럼 재BLOCKED(최소 생명선).
- §31 shadow(gate_shadow_runner.py + dispatch S2 + finish-task S3A): report-only / fail-open / 실차단 0.
  task-2770 서 dispatch+finish_task 양 경로 관측. 단 shadow evidence n=3 소량 — activation 근거 아님.
- 이 PR = working-tree-only → main lifecycle 고정. Activation Readiness/§31 enforcement 격상보다 선행.
  ACTIVE=false · P0-B FROZEN · merge 미승인.
- author OWNER 기준 가능, 단 실제 구현/보조 = ANU(Claude) 명시(Co-Authored-By 또는 본문).
- dispatch/__init__.py = S2 shadow 결선만 / scripts/finish-task.sh = S3A shadow 결선만.
```

## 금지
```text
ANU 직접 push · 수기 lock/branch/commit/push · TASKCTL_BYPASS ·
matrix(automation_capability_matrix.json)/산출물(memory/work)/memory artifact staged ·
재구현/리팩터/설계개선/테스트 추가 · 자동 merge/squash(owner 승인 전) ·
PR CI/Gemini polling · 반복 gh pr checks · 리뷰 완료 대기.
```

## 중단 조건 (하나라도 → STOP_REPORT)
```text
base HEAD ≠ 38ee0555 · patch 적용 후 sha256 manifest 불일치 · 8개 밖 staged ·
matrix/산출물 staged · 재구현 필요 · 권한 오류 · merge 필요 · 자동 merge 시도 ·
content qc 가 shared/dev/design QC 에 영향 · regression 실패.
```

## 보고 (ANU callback envelope + report)
```text
PR 번호/URL · 파일 목록 · expected_files 8개 일치 여부 · matrix/산출물 제외 증거 ·
로컬 regression 결과 · CI/Gemini 직접 대기 0 증거 · merge 미승인 상태 · base 38ee0555 일치.
```

## allowed_resources

```yaml
allowed_resources:
  paths:
    - "dispatch/__init__.py"
    - "scripts/finish-task.sh"
    - "dispatch/gate_shadow_runner.py"
    - "teams/content/qc/qc_verify.py"
    - "tests/regression/test_gate_shadow_runner_2765.py"
    - "tests/regression/test_gate_shadow_finish_task_2766.py"
    - "tests/regression/test_goal_contract_strict_template_2767.py"
    - "tests/regression/test_content_qc_2769.py"
  forbidden_paths:
    - "memory/state/automation_capability_matrix.json"
    - "memory/work/**"
    - ".env*"
  commands:
    - "git"
    - "pytest"
    - "python3"
    - "gh"
  merge_policy: "manual"
  ttl_hours: 12
```