{
  "pass": false,
  "risks": [
    {
      "severity": "critical",
      "description": "설계 범위와 실제 의존 코드가 불일치합니다. `allowed_resources`와 `affected_files`에는 `scripts/notify-completion.py`, `scripts/session-watchdog.sh`, `scripts/whisper-compile.py`가 없지만, 현재 구현은 이 파일들이 모두 `*.done`을 직접 소비합니다. 이 상태로 `finish-task.sh`/`auto_merge.py`/`done-watcher.py`만 `.work-done`/`.merged`로 바꾸면 완료 알림, 세션 종료, 후속 컴파일이 조용히 깨져 현재보다 더 나쁜 상태 불일치가 발생합니다."
    },
    {
      "severity": "high",
      "description": "상태 전이의 소유권이 이중화되어 있습니다. 설계상 `auto_merge.py`가 머지 성공/실패 시 `state.json`과 `.merged`/`.merge-failed`를 갱신하고, 동시에 `done-watcher.py`도 `mergedAt` 폴링 후 동일한 마커와 상태를 갱신합니다. 현재 코드베이스에는 두 프로세스가 공유하는 state update/lock 계층이 없어서 중복 전이, 상충하는 terminal phase, retry 카운트와 timeout 기준의 충돌이 발생할 수 있습니다."
    },
    {
      "severity": "high",
      "description": "`task.yaml` 기반 분류 가정이 현재 저장소 구조와 맞지 않습니다. 실제 task는 별도 `task.yaml`이 아니라 Markdown + frontmatter/본문 내 YAML 블록 형태로 존재하고, `dispatch.py`도 현재는 `allowed_resources` fenced YAML만 파싱합니다. `kind`/`merge_required`의 단일 파싱 지점을 새로 정의하지 않으면 meta task가 legacy code task로 오인되어 불필요한 mergedAt 폴링이나 영구 대기 상태에 빠질 가능성이 큽니다."
    },
    {
      "severity": "medium",
      "description": "운영 시맨틱의 부수효과가 정의되지 않았습니다. 현재 `done-watcher.py`는 `.done` 감지 즉시 bot을 idle로 전환하고, 5분 묵은 `.done`에 대해 아누 후속 알림 폴백을 발사합니다. 새 설계는 `.work-done` 후 최대 30분까지 머지 대기를 허용하지만, bot idle 시점과 follow-up 트리거 기준을 함께 재정의하지 않아 봇이 불필요하게 busy로 남거나 반대로 머지 전 완료 후속 알림이 발사될 수 있습니다."
    }
  ],
  "suggestions": [
    "옵션 D 구현 범위를 실제 소비자 전체로 재정의하세요. 최소 `notify-completion.py`, `session-watchdog.sh`, `whisper-compile.py`, `dispatch.py`의 `.done` 의존을 함께 마이그레이션하거나, 회의록대로 `.done` 호환 shim을 명시적으로 포함해야 합니다.",
    "`auto_merge.py`와 `done-watcher.py` 중 하나만 상태 전이의 단일 소유자(reconciler)가 되도록 결정하세요. 다른 하나는 관찰/알림 전용으로 축소하고, `state.json` 갱신은 공통 lock helper를 통해서만 수행해야 합니다.",
    "`task.yaml` 대신 현재 포맷에 맞는 공식 메타데이터 소스를 정하세요. 가장 현실적인 선택은 task Markdown frontmatter에 `kind`와 `merge_required`를 넣고, 이를 읽는 공용 파서를 `dispatch.py`와 관련 스크립트가 함께 사용하도록 만드는 것입니다.",
    "설계 문서에 운영 규칙을 추가하세요. `bot idle` 전환 시점, `.anu-notified`/follow-up 발사 기준, legacy `.done` 처리 기간, `state.json`과 마커가 어긋났을 때의 복구 규칙을 명문화해야 합니다."
  ],
  "source": "codex_companion",
  "fallback_reason": null,
  "error": null,
  "target_dir": "/home/jay/workspace",
  "target_dir_source": "workspace_root_fallback",
  "task_id": "task-2374",
  "timestamp": "2026-05-02T10:58:08.995959+00:00"
}