# ANU 운영층 사고 8건 incident report (post task-2703 · 회장 verbatim 2026-05-28)

- 분류: **read-only incident report** (★ 추가 구현 dispatch 금지 · 회장 verbatim)
- 작성: 2026-05-28 14:12 KST · ANU chair-facing session
- task-2703 본 구현 결과 (`V36_HARNESS_MVP_RUNTIME_GATE_ACTIVE_AND_VERIFIED`): **인정 유지** (회장 verbatim)
- 본 report는 8건 운영층 결함을 fact/hypothesis/fix/task-2703 validity 영향 4축으로 정리
- ★ "required executable fix" 항목은 **read-only 제안** — 본 report 채택 자체는 신규 dispatch 발의 아님

---

## #1 — spawn detection false negative

- **confirmed fact**:
  - ANU 사용 명령: `ps aux | grep claude | grep -v "resume 53e89540" | grep -v grep | grep -v cokacdir`
  - dev1 봇 PID 4105498 cmd args에 `/home/jay/.cokacdir/system_prompt_18b3a030fdc880ae_1082` 포함 → `grep -v cokacdir` 매칭으로 제외
  - 결과: ANU "spawn 0" 단정 보고 · 회장 fact 정정 신호("1팀은 작업하고 있는데??") 받음
- **root cause hypothesis**:
  - `grep -v cokacdir` 가 "cokacdir 디렉토리" vs "cokacdir 프로세스 args" 구분 0
  - ANU 본체가 임시 측정 명령을 즉석 작성 · 검증 fixture 0
- **required executable fix**:
  - spawn 판정을 ad-hoc grep 아닌 코드화: `scripts/spawn_detector.py` 모듈 + signal sources = system_prompt path / task-timers status / worktree existence / schedule_history (다중 신호 OR weighted)
  - v3.6 harness 차단 대상 #3 (추측을 fact 단정) 패턴의 spawn-detection-specific subclass
- **task-2703 validity 영향**: **없음** (봇 자체 정상 spawn · ANU 측정만 오류)

## #2 — schedule_history 단일 지표 과의존

- **confirmed fact**:
  - ANU가 `/home/jay/.cokacdir/schedule_history/<id>.log` 부재 → "spawn 실패" 단정
  - 실제로 dev1 봇은 spawn됐고 13:22:33 산출물 + 13:26 process 생성 정상
  - schedule_history에는 13:00 이후 새 로그 0 (cron fire는 됐는데 history write 미발생)
- **root cause hypothesis**:
  - schedule_history 가 봇 spawn 충분조건 아님 (cron fire 후 봇 process 가 명시적 write 안 할 수 있음 — 어떤 조건에서 write/skip 하는지 코드화된 schema 부재)
  - ANU가 doctrine상 "4신호 교차"를 명시했으나 실제 가중치는 schedule_history에 sync hard
- **required executable fix**:
  - spawn 판정 알고리즘 명세 + 단위 테스트: 4신호 = (a) task-timers status (b) process search by system_prompt path (c) worktree existence (d) schedule_history. **OR 다수결 weighted** · 단일 신호 부재로 단정 금지
  - schedule_history write 조건 자체를 cokacdir 봇 측에 spec 화 (언제 write/skip 하는지)
- **task-2703 validity 영향**: **없음** (보조 측정 오류)

## #3 — watchdog false stalled alert 반복 (회장 chat 노출)

- **confirmed fact**:
  - 13:42 / 13:44 / 13:46 / 13:48 / 13:50 / 13:52 매 2분 6회 회장 chat 발사 (사진 evidence)
  - `markers=none`, `hb_age=-1s`, `ev_age=-1s` → events_dir에 task-2703.* 파일 0인 동안 발사
  - 13:52 봇 closeout marker 생성 → 13:54 watchdog "alive (recent activity)" 자동 전환 → 13:56 "알람 없음 (false alert 0건 확인)"
- **root cause hypothesis**:
  - `PROGRESS_MARKERS` 배열에 closeout marker / 봇 working 신호 미등재
  - `alert-only`(escalate=no) 도 telegram sendMessage 발사 → [[feedback_followup_cron_policy_260509]] 위반
  - task-2702 incident에서 동일 발견 후 회장 OPT1 결정 #3·#4로 "수정은 보류 항목으로만 기록" → 같은 버그가 task-2703 에서 재발 (의도된 보류 + 재현)
- **required executable fix**:
  - `PROGRESS_MARKERS` 확장: closeout marker / dispatch marker / heartbeat / process-alive 다중 신호 alive 판정
  - `add_stalled` → escalate=yes 또는 Critical 7 분류 시에만 chat sendMessage · alert-only는 로그만
  - 둘 다 코드 enforce (회장 8 항목 finalization #7 doctrine: 문서 박제만으론 부족)
- **task-2703 validity 영향**: **없음** (봇 결과 정상 · noise만 회장 chat)

## #4 — dispatch marker 누락 (ANU 운영 doctrine 미적용)

- **confirmed fact**:
  - task-2702 패턴: ANU가 `memory/events/task-2702-dispatched-dev2-260528.json` dispatch marker 생성
  - task-2703: ANU가 dispatch marker **미생성** · events_dir 첫 file은 봇이 생성한 13:52 closeout marker
  - 이게 watchdog `ev_age=-1s` 직접 보조 원인
- **root cause hypothesis**:
  - dispatch marker 생성이 ANU 본체 manual doctrine만 있고 코드 강제 0
  - ANU가 task-2703 dispatch 시점에 task-2702 패턴 인지했으나 실행 누락 (인지-실행 갭)
- **required executable fix**:
  - `dispatch.py` 가 dispatch 직후 자동으로 `memory/events/<task_id>-dispatched-<team>-<date>.json` 생성 (chair_authorization_id + executor + cron id + spawn verification target 4신호 schema)
  - 코드 강제 — ANU manual 의존 0
- **task-2703 validity 영향**: **없음** (보조 원인)

## #5 — task md sha256 mismatch (dispatch.py 가 task md 수정)

- **confirmed fact**:
  - ANU dispatch 시 전달 sha256: `2c7927cb41e45c8a264d04fd0590a816080acbadabdfa5e282064465c52a86d6`
  - 봇이 실제 읽은 sha256 (현재 working tree 동일): `428f2d05d6b1c0fd1f888a25def96202e80394d6766fe9d3d10b98a64d6d9607`
  - 봇 sha 검증: mismatch 발견 → 내용 verbatim 일치 확인 → 진행 (★ 차단 대상 #3 회피)
- **root cause hypothesis**:
  - `dispatch.py` 가 task md 에 metadata patch / linter 적용 (예: bot/role/model/task_file 등 메타데이터)
  - ANU가 dispatch 전 sha 측정 후 dispatch.py 의 write 가능성 미고려
- **required executable fix**:
  - dispatch.py 가 task md write 시 후 sha 재계산 + 봇 prompt 에 **dispatch-final sha** 전달
  - 또는 dispatch.py 가 task md 수정 금지 + 메타데이터는 별도 sidecar 파일에 기록
- **task-2703 validity 영향**: **없음** (봇 verbatim 일치 확인 후 진행 · 결과 정상)

## #6 — finish-task profile 관련 의심 (★ 실제로는 정상 종결 + 부수 사건 발생)

- **confirmed fact**:
  - `.done` 마커 14:09 생성 + `.done.notified` 14:09 + `.anu-notified` 14:09 + task-timers status `completed` 14:09:13 — **finish-task.sh 정상 실행**
  - 부수 발생: `.external-dirty-blocker.json` 14:06 · `.g4-soft-warning.json` 14:09 · `.callback-cause.json` 14:06 · `.escalate` 14:04 (봇 self-apply · watchdog 우회)
- **root cause hypothesis**:
  - 회장님 incident 명명 "profile mismatch" 의 정확한 의도가 모호 (read-only로는 mismatch 직접 evidence 미관측)
  - 추정 1: 봇이 worktree 미생성 (read-only 진단 1단계 패턴) 상태에서 finish-task가 worktree profile 가정 → external-dirty-blocker fallback 동작
  - 추정 2: `.external-dirty-blocker.json` = main repo dirty (task-2701/2702에서 회장 박제한 EXTERNAL_DIRTY_BLOCKER 패턴 재발 가능성)
  - 추정 3: `.g4-soft-warning.json` = G4 게이트가 hard fail 아닌 soft warning 분기 — profile 분기 의심
- **required executable fix**:
  - finish-task.sh profile auto-detect (worktree exist check → main repo profile fallback · soft warning vs hard fail 분기 정합)
  - 회장 incident 의도 정확화 — 본 fact 가 회장이 식별한 "profile mismatch" 인지 별개 사건인지 회장 확인 필요 (★ 본 report 작성 시점 추정 한계)
- **task-2703 validity 영향**: **부분** — finish-task 자체는 정상이나 종결 path에 EXTERNAL_DIRTY_BLOCKER + G4 soft warning 동반. 회장 결정 받은 OPT1 ACCEPT 기준 invalidate 아님

## #7 — ANU closeout marker 인지 지연

- **confirmed fact**:
  - 봇 closeout marker mtime: **13:52:19**
  - 보고서 작성 mtime: **14:07:21** (★ 봇이 closeout marker 후 15분 추가 작업)
  - .done 생성: **14:09**
  - ANU 인지: ~14:00+ (회장님 사진 receive 시점) ← 회장님 신호 없었으면 14:52 fallback safety-net 까지 약 1시간 idle 가능성
- **root cause hypothesis**:
  - ANU 본체 progress polling 금지 (spec §3.6 차단 대상 #2) + normal callback 의존 + closeout marker 능동 detect 메커니즘 0
  - normal callback 도착 지연 (봇 finish-task 14:09 이후 callback 발사 예상) → 그 사이 ANU idle
  - fallback safety-net 14:52 fire 까지 idle gap 발생 가능
- **required executable fix**:
  - SessionStart hook 또는 PostToolUse hook 또는 별도 daemon이 `memory/events/<task_id>.*active.json` / `.done` / `.harness-mvp-active.json` 패턴을 detect 시 ANU 세션에 next_action signal 전달
  - polling 금지 doctrine 유지하면서 event-driven detect (file watch / inotify) 채택
- **task-2703 validity 영향**: **없음** (봇 결과 자체 정상 · ANU 인지 지연만)

## #8 — Hermes "직접 코딩 0" 표현 ↔ git log actor 불일치 가능성

- **confirmed fact**:
  - 봇 보고서: "Hermes(Opus): 설계·조정·통합 / 코딩 직접 수행 금지 · Vulcan(Sonnet): 구현 executor"
  - git log task-2703 commit author: 4 commits 모두 `jeon-jonghyuk-taskctl-bot[bot]` (★ 통합 봇 신원)
    - `ec471dc5` 14:01:50 — 주 구현 commit
    - `2e7bc748` 14:06:39 — stash index
    - `714852e9` 14:06:39 — stash "On main"
    - `0128231a` 14:08:09 — SCQA bold markers (g3 verifier compat)
  - commit message에 actor (Hermes vs Vulcan vs Maat) 명시 0
- **root cause hypothesis**:
  - cokacdir 봇 통합 GitHub identity 가 commit author 로 사용 → 내부 actor 분기(Hermes 본체 vs sub-agent Vulcan) git log alone verifiable 0
  - Hermes 가 micro-commit doctrine `"[task-2703] {{팀원명}}: {{작업 요약}}"` 도 적용 안 함 (commit subject 에 팀원명 부재)
  - 봇 보고서의 "Hermes 직접 코딩 0" 는 **self-attestation only** — 독립 verifiable evidence 부재
- **required executable fix**:
  - commit message 에 actor 강제 prefix: `"[task-2703] [vulcan] ..."` · pre-commit hook 으로 강제
  - audit log 에 actual sub-agent 실행 actor 기록 (Task tool subagent_type · 직접 Edit 시 actor=hermes)
  - 또는 git author trailer `Sub-Agent: vulcan` 강제
- **task-2703 validity 영향**: **부분 — verifiable 0** (★ Hermes 가 실제로 직접 코딩했다면 회장 verbatim 조건 #1 위반이나 read-only 로는 단정 불가). 결과 자체(DoD 9/9 + 150 pytest + Maat 독립 검증)는 별개로 인정 유지

---

## ★ 종합 (task-2703 본 결과 vs 운영층 결함 분리)

- **task-2703 본 구현 결과**: `V36_HARNESS_MVP_RUNTIME_GATE_ACTIVE_AND_VERIFIED` **인정 유지** (회장 verbatim)
  - DoD 9/9 PASS · 150 pytest PASS · 6 룰 matched_rule 모두 fixture 커버 · JSONL evidence ≥18 · forbidden write 0 · Maat 독립 검증
  - 회장 verbatim 조건 #3 (구현/검증 분리) self-attestation 만 evidence (#8 영향)
- **invalidate 사유 없음**: 8 incident 중 어느 것도 task-2703 본 결과 무효화 사유 0
- **운영층 결함 그룹화**:
  - **A. ANU 본체 측정/단정 오류** (#1 / #2 / #4 / #7) — ANU 본체 자체가 task-2703 v3.6 harness 차단 대상 #3·#4·#6 패턴 재발
  - **B. 시스템 spec/코드 갭** (#3 / #5) — watchdog 정책 위반 · dispatch.py task md write 정합성 부재
  - **C. 봇 termination/audit 정합성** (#6 / #8) — finish-task profile · commit actor verifiable 부재

## ★ 본 report 의 단일 효력 (회장 verbatim)

- read-only · **추가 구현 dispatch 0**
- 8 fix 항목은 backlog 보류 (회장 8 항목 finalization 의 후속 보류 정책 준수)
- 메타 재개 트리거 (Critical 7 / 사업 차단 / 명시적 병목) 외 본 fix 의 task 발의 금지
- 사업 복귀 모드 유지

★ 회장 verbatim 2026-05-28 read-only incident report. task-2703 본 결과 인정 + 운영층 결함 8 분리 박제 + 즉시 fix 0.

끝
