# task-2471+1 — drink-your-own-champagne verification (task-2471 hardening 자기 적용 정밀 진단)

- 작업 유형: **diagnose-then-minimal-fix** (진단 우선, 코드 수정은 최소)
- 작업 레벨: **Lv.4 critical**
- 위임팀: **dev2-team (오딘, opus)** — task-2471 본 hardening 작성 동일 lead
- 독립 검증: **마아트 G2/G3 강화**
- Track: **dev_workspace**
- 우선순위: **★★★ blocking** — task-2471 final DONE 보류 중
- 일시: 2026-05-07
- 선행: task-2471 PR #36 MERGED (origin/main 1f96ddcd) + state COMMITTED 잔류 + `.done`/`.done.escalated` 충돌
- 후행: 자동 ack 데몬 별도 task

## ⚠️ 본 task의 본질 — 회장 명시

> "이번 건은 manual recovery 대상이 아니라 **task-2471 hardening의 자기검증 실패 의심**이다.
> manual recovery로 덮지 말고, drink-your-own-champagne 정밀 검증으로 처리한다."

→ **진단 우선 + 최소 코드 수정 + 자기 자신에게 hardening 적용 검증**

## 0. 확정 사실 (회장 명시)

- PR #36 state=**MERGED**
- mergedAt=**2026-05-06T18:31:18Z**
- mergeCommit=**1f96ddcd**
- origin/main HEAD=**1f96ddcd**
- `git merge-base --is-ancestor 1f96ddcd origin/main` **PASS**
- 그러나 `taskctl status task-2471` = **COMMITTED** (DONE 미진입)
- `.done` 존재 (03:55, 394 bytes)
- `.done.escalated` 존재 (04:25, **0 bytes**)
- branch `task/task-2471-dev2`가 origin에 잔존

## 1. 핵심 의심

task-2471이 구현한 silent corruption guard / state machine / dispatch ID hardening이 **자기 자신의 post-merge/DONE 경로에서 작동 실패**.
이는 hardening의 본질적 신뢰성 문제이므로 manual recovery로 덮지 않는다.

## 2. 필수 진단 (회장 명시 10건)

1. `taskctl status task-2471`이 COMMITTED에 머문 원인
2. PR #36 merge 이후 taskctl이 MERGED/DONE으로 전이하지 못한 이유
3. `.done`이 어떤 경로에서 발행됐는지 (코드 위치 + 호출 stack)
4. `.done.escalated`가 어떤 경로에서 발행됐는지 (코드 위치 + 호출 stack)
5. `.done.escalated`가 0 bytes인 이유 (사유 박제 누락 결함)
6. `.done`과 `.done.escalated` 동시 존재를 silent corruption guard가 왜 차단하지 못했는지
7. origin branch auto-delete가 왜 미작동했는지
8. task-2471 신규 hardening 코드가 자기 자신에게 적용됐는지
9. RECOVERABLE_BLOCKED / COMMITTED / DONE 전이 로직이 실제 taskctl lifecycle과 일치하는지
10. chairman manual recovery audit 채널이 필요한 상황이었는지

## 3. 추가 진단 강조 (보강)

### 3.1 04:25 `.done.escalated` trigger 정확 추적
- 발행 시점 (03:55 → 04:25, **30분 후**)이 의심스러움
- 발행한 정확한 코드 경로 + 호출 stack 추적 필수
- 후보:
  - 봇 자체 발행 (taskctl post-merge verifier)
  - 외부 hook (CI workflow / pre-merge gate / done-watcher)
  - codex companion review
  - 자동화 데몬 (만약 있다면 task-2471 범위 위반)
- 어느 경로가 빈 marker를 발행했는가 → 해당 경로에 사유 박제 누락 결함 박제

### 3.2 dispatch.py `--task-id` 메타 검증 (drink-your-own-champagne 한 층 더)
- 본 task가 **`--task-id task-2471+1`** 옵션으로 dispatch됐는지 확인
- task-2471 hardening의 `+N` suffix parsing이 자체 dispatch에 정확히 적용됐는지 검증
- 옵션 미작동 시 즉시 보고 + cron fallback

## 4. 필수 산출

- 원인 보고서 (`memory/reports/task-2471+1.md`)
- `.done.escalated` 사유 박제 (정확한 trigger + 빈 marker 발행 결함 명시)
- state machine 정합성 검증 결과 (transition log diff)
- **필요한 경우 최소 코드 수정** (진단 우선, 무리한 hardening 추가 금지)
- task-2471 state 정상화 (COMMITTED → DONE)
- `.done` / `.done.escalated` 충돌 해소
- branch cleanup 결과 보고 (삭제 여부 + 사유)

## 5. allowed_resources

```yaml
allowed_resources:
  paths:
    # 진단 + 최소 수정 대상
    - "scripts/taskctl.py"
    - "scripts/taskctl/**"
    - "scripts/lifecycle_guards.py"
    - "scripts/pre_push_guard.py"
    - "utils/silent_corruption_guard.py"  # 자기 검증 결함 정정 가능
    - "utils/audit_chairman_recovery.py"
    - ".tasks/state/task-2471.json"  # COMMITTED → DONE 전이
    # 본 task 자체
    - "memory/tasks/task-2471+1*"
    - "memory/reports/task-2471+1*"
    - "memory/plans/tasks/task-2471+1/**"
    - "memory/events/task-2471+1*"
    # task-2471 marker 정상화
    - "memory/events/task-2471.done"  # silent corruption guard 검증 통과 후만 갱신
    - "memory/events/task-2471.done.escalated"  # 사유 박제 후 해소 (삭제 X, 사유 추가)
    # tests
    - "tests/regression/**"
    - "tests/lifecycle_guards/**"
    - "tests/state_machine/**"
  forbidden_paths:
    - "memory/events/task-2468*"  # 보존
    - "memory/events/task-2469*"  # 보존
    - "memory/events/task-2470*"  # 보존
    - "memory/events/task-2467*"
    - "memory/reports/task-2471.md"  # task-2471 본 보고서 read-only
    - "memory/specs/allowed_bot_accounts.json"
    - "memory/specs/allowed_approvers.json"
    - "memory/orchestration-audit/admin-override.jsonl"
    - "PR #29-#36"  # PR #36 본문 변경 금지 (이미 MERGED)
    - ".env.keys"
    - ".secrets/**"
    - ".gitignore"
  forbidden_actions:
    # 회장 명시 7건
    - "회장 승인 없는 manual recovery 금지"
    - "COMMITTED → DONE 수동 전이 금지 (정상 전이 경로 확인 후만)"
    - ".done.escalated 삭제 금지"
    - "빈 .done.escalated를 조용히 덮어쓰기 금지 (사유 박제 후 명시 해소)"
    - "branch 삭제부터 하지 말 것 (분석 후 보고서에서 결정)"
    - "보고서만 수정해서 DONE 처리 금지"
    - "admin override 금지"
    # 추가
    - "hardening 무리한 추가 금지 (진단이 우선, 최소 수정)"
    - "task-2471 hardening 코드를 manual recovery 회피용으로 변경 금지"
    - "gh pr merge 직접 호출 금지"
    - "git push --force 금지"
    - "git push origin main 직접 호출 금지"
  bot_authentication:
    - "BOT_GITHUB_TOKEN .env.keys 자동 로드"
    - "PR author = jeon-jonghyuk-taskctl-bot[bot]"
    - "approver = 시스템 승인자"
  merge_policy: "★ 본 task가 PR을 만들면 task-2471 hardening 코드가 자체 검증해야 함. drink-your-own-champagne layer 2"
  ttl_hours: 4  # 회장 명시 — 짧은 진단 우선
```

## 6. 완료 조건 (회장 명시 8건)

전부 충족해야 합격:
1. ✅ task-2471 state가 **DONE**으로 정상 전이 (정상 transition 경로 확인 후)
2. ✅ PR #36 mergeCommit `1f96ddcd`가 origin/main에 있음 (보존 검증)
3. ✅ `.done` 존재
4. ✅ `.done.escalated` **부재** 또는 **명시적 사유와 함께 해소 기록 존재**
5. ✅ `.g3-fail` 부재
6. ✅ silent corruption guard가 `.done` + `.done.escalated` 충돌을 **탐지/차단/보고**함
7. ✅ **빈 escalation marker 재발 방지 테스트 PASS** (보강 #1)
8. ✅ branch cleanup 결과 보고 (삭제 여부 + 사유)

## 7. 추가 합격 (보강)

9. ✅ `.done` + `.done.escalated` 동시 존재 시 silent corruption guard가 reject 테스트 PASS (보강 #1-b)
10. ✅ `--task-id task-2471+1` 옵션이 dispatch에 정상 적용된 증거 (drink-your-own-champagne 메타 검증)
11. ✅ `.done.escalated` 발행 trigger 코드 경로 + 호출 stack 박제

## 8. ESCALATED 조건

- task-2471 hardening 코드 변경이 manual recovery 회피용으로 사용 → 즉시 reject + ESCALATED
- COMMITTED → DONE 수동 전이 (정상 transition 경로 미확인 상태) → ESCALATED
- 빈 `.done.escalated` 덮어쓰기 → ESCALATED
- branch 삭제 우선 (분석 보고 전) → ESCALATED
- task-2471 본 보고서 (memory/reports/task-2471.md) 변경 → ESCALATED
- PR #36 본문 변경 → ESCALATED

## 9. goal_assertions

```bash
# 진단 결과
ls memory/events/task-2471.done.escalated  # 사유 박제 후 해소 또는 부재
cat memory/events/task-2471.done.escalated  # 0 bytes 아닌 사유 명시 또는 부재

# state 정상화
python3 scripts/taskctl.py status task-2471 | grep -E "state|pr|branch"
# 기대: state=DONE, pr=#36, branch=main (정상 전이)

# silent corruption guard 자기 검증
python3 -m pytest tests/regression/test_done_escalated_conflict.py -v  # PASS (신설)
python3 -m pytest tests/regression/test_empty_escalation_marker.py -v  # PASS (신설)

# 메인 보존
git merge-base --is-ancestor 1f96ddcd origin/main && echo "PR #36 보존: PASS"
gh pr view 36 --repo Jeon-Jonghyuk/dev_workspace --json state,mergedAt -q '.state'  # MERGED

# branch cleanup 보고
git ls-remote origin task/task-2471-dev2  # 삭제됐거나 보고서에 사유 명시

# drink-your-own-champagne 메타 검증
grep -r "task-2471+1" .tasks/state/  # 정확 ID 보존 확인
```

## 10. 보고서 필수 항목 (`memory/reports/task-2471+1.md`)

1. 진단 10건 답변 (각 항목별 정확한 코드 경로 + 호출 stack)
2. `.done.escalated` 발행 trigger 분석 + 빈 marker 결함 박제
3. state machine transition 정합성 검증 (lifecycle ↔ taskctl 코드 diff)
4. silent corruption guard 자기 검증 실패 원인 분석
5. 최소 코드 수정 diff (있다면)
6. 신설 regression test 2건 (보강 #1)
7. task-2471 state COMMITTED → DONE 정상 전이 log
8. `.done.escalated` 해소 방식 (사유 박제 후 명시 해소 또는 정상 부재)
9. branch cleanup 결과 (삭제 여부 + 사유)
10. drink-your-own-champagne 메타 검증 결과 (`--task-id task-2471+1` 적용 + state ID 정확 보존)
11. chairman manual recovery audit 채널이 필요한 상황이었는지 결론

## 11. 시스템 청사진

본 task = task-2471 hardening의 자기 검증 (drink-your-own-champagne layer 2). 합격 시 hardening 신뢰성 확정.

## 13. ★★★ 회장 추가 절대 금지 (2026-05-07 추가 명령)

> **문서-only 작업 금지.**
> task-2471+1은 보고서/스펙/체크리스트 작성만으로 완료 처리할 수 없다.
> 반드시 실행 가능한 검증 또는 코드/테스트 변경이 포함되어야 한다.

### 필수 산출 기준 (모두 충족)
1. **최소 2개 regression test 추가**
   - `tests/regression/test_empty_escalation_marker.py` — 빈 `.done.escalated` marker 발행 차단
   - `tests/regression/test_done_escalated_conflict.py` — `.done` + `.done.escalated` 동시 존재 탐지/reject
2. **실제 테스트 실행 로그** (pytest -v 출력 캡처, 보고서 첨부)
3. **task-2471 state/DONE/evidence 정합성 검증 결과** (실측 명령 로그)
4. **필요한 경우 production code 최소 수정** (diff + grep 확인 로그)
5. **branch cleanup 또는 cleanup 불가 사유의 실행 증거** (gh/git 명령 출력)

### 추가 절대 금지 (회장 명시 5건)
- ❌ md 보고서만 작성 후 완료 선언 금지
- ❌ 원인 분석 문서만 작성 후 DONE 금지
- ❌ "후속 task에서 처리"로 넘기고 종료 금지
- ❌ 실행 로그 없는 PASS 선언 금지
- ❌ 테스트 없는 hardening 완료 선언 금지

## 12. 위임 완결성 4대 규칙

1. 수신 확인: dispatch 출력 + `--task-id task-2471+1` 정확 적용 확인
2. 빌드+배포: 코드 수정 시만 PR + main 반영 검증, 진단 only면 보고서로 완결
3. 실 E2E: state DONE 정상 전이 + silent corruption guard 자기 검증 통과
4. 구조 선행 파악: task-2471 보고서 + state json + .done/.done.escalated 모두 read

## goal_assertions (auto-generated)
- `python3 scripts/taskctl.py status task-2471`
- `ls memory/events/task-2471.done.escalated`
- `python3 -m pytest tests/regression/`