開発プロセスフロー設計書

文書ID: DESIGN-PROCESS-001 作成日: 2026-03-16 ステータス: CEOレビュー待ち

1. 要求

CEOの要求(原文意訳):

Issue(タスク)が起票されてからクローズされるまでの一連の開発プロセスを確立したい。

2. CEOの関与ポイント(3箇所のみ)

CEOが介在するのは以下の4〜5点。それ以外は全てエージェント群が自律的に処理する。
CEOはIF層としか対話しない(全てIF層経由でCEOに上がる)。
IF層が入口(要求理解)と出口(受入テスト)の門番を担う。
#タイミングCEOの行動判断基準経路
要求投入 Slackでやりたいことを伝える —(起点) CEO → Slack → Bot → IF層
要求確認 IF層が言語化した要求・受入基準を確認 「IF層の解釈が自分の意図と合っているか」 IF層 → CEO → IF層
設計書レビュー 設計書の要件・テスト計画を承認 or 差し戻し 「技術的な実現方法に問題がないか」 M層 → IF層 → CEO
受入確認 IF層の受入テスト結果を最終確認 IF層が「要求を満たしている」と判定した上で、CEOが最終OK IF層 → CEO
AI Ops破壊的更新
(発生時のみ)
エージェント設定(CLAUDE.md・knowledge/等)の破壊的変更を承認 or 却下 「エージェントの行動原則を変えてよいか」 AI Ops → IF層 → CEO

IF層の二重責務(入口と出口)

なぜIF層が受入テストをやるのか?
IF層はCEOの要求を最初に理解・言語化する層。要求を正確に理解していなければM層に適切に仕事を振れない。
つまりIF層は「CEOが何を求めているか」を最もよく知っている層であり、
完成物がその要求を満たしているかの判定も、IF層が最適な立場にある。

3. プロセス全体フロー

CEO IF層 M層/W層 AI Ops │ │ │ │ │ ① 要求を出す │ │ │ │────────────────→│ │ │ │ │ │ │ │ │ ② 要求の理解・言語化 │ │ │ │ (CEOの意図を正確に │ │ │ │ 構造化・文書化) │ │ │ │ │ │ │ ②' 要求確認 │ │ │ │←───────────────│ 言語化した要求+ │ │ │ 「この理解で │ 受入基準を提示 │ │ │ 合ってる?」 │ │ │ │────────────────→│ CEO確認OK │ │ │ │ │ │ │ │ ③ M層に委任 │ │ │ │ (言語化した要求+ │ │ │ │ 受入基準を渡す) │ │ │ │────────────────────→│ │ │ │ │ │ │ │ │ ④ 要件定義 │ │ │ │ ⑤ 設計書作成 │ │ │ │ (要求+要件+設計 │ │ │ │ +テスト設計) │ │ │ │ │ │ ⑥ 設計書レビュー│ │ │ │←───────────────────────────────────│ │ │ 承認 or 差し戻し │ │ │ │────────────────────────────────────→│ │ │ │ │ │ │ (承認後、自動) │ │ │ │ │ │ ⑦ 実装 │ │ │ │ (設計書に基づき自動)│ │ │ │ │ │ │ │ ⑧ テスト │ │ │ │ (テスト設計書に基づき│ │ │ │ 自動実行) │ │ │ │ │ │ │ ⑨ 受入テスト │ │ │ │←───────────────────│ │ │ │ IF層が要求と照合し │ │ │ │ 受入基準を検証 │ │ │ │ │ │ │ ⑩ 受入確認 │ │ │ │←───────────────│ │ │ │ IF層の判定結果を │ │ │ │ CEOが最終確認 │ │ │ │────────────────→│ │ │ │ │ │ │ │ │ │ ⑪ 監査 │ │ │ │────────────────────→│ │ │ │ │ │ │ │ 追記的更新 → 自動反映│ │ │ │ │ │ │ │ 破壊的更新: │ │ │←────────────────────────────────────────│ │ │ IF層に承認依頼 │ │ │ CEO承認 ←──────│ │ │ │ (72h TTL) │ │ │ │ 承認/却下 ─────→│ │ │ │ │────────────────────────────────────────→│ │ │ │ │ │ │ │ ナレッジ反映 │ │ │ │←───────────────────│ │ │ │ │ │ │ ⑫ Issue クローズ │ │ │←───────────────│ │ │ │ │ │ │

4. 各フェーズ詳細

1 要求投入
CEO
Slackでやりたいことを伝える(自然言語。精度は問わない)
Bot
受信 → タスク登録 → GitHub Issue自動作成

成果物: GitHub Issue(タイトル + CEO原文)

状態: RECEIVED

2 要求の理解・言語化 IF層
IF層
CEOの発言を正確に理解し、以下を生成する:
  • 言語化した要求文: CEOの曖昧な表現を検証可能な要求に変換
  • 受入基準: この要求が満たされたと判断する条件
  • ルート判定: 適切なM層の選定
CEO確認が必須:
IF層が言語化した要求・受入基準は、M層に渡す前にCEOに確認する
IF層が勝手に解釈してそのまま進めてはならない。CEOが「その理解で合っている」と確認して初めてM層に委任する。
なぜIF層がここで要求を理解する必要があるのか:
要求を正確に理解していなければM層に適切に仕事を振れない。
また、後のフェーズ⑨で受入テストを行うのもIF層なので、この時点で受入基準を確定しておく。

例: 「フィルタつけて」→
IF層の言語化:「ダッシュボードのタスク一覧にステータス別フィルタを追加し、アクティブ/完了/エラーで絞り込めるようにする」
受入基準:「フィルタUI表示、各ステータスで正しく絞り込み、フィルタ解除で全件表示」
CEOに提示して確認 → OK → M層に委任

成果物: 言語化した要求 + 受入基準(CEO確認済み → M層に渡す & 設計書§1, §6の原案)

状態: CLASSIFYINGWAITING_FOR_RESPONSE(CEO確認待ち)→ ROUTING

3 要件定義
M層
要求を技術要件に分解。影響範囲を特定
W層
researcher: 影響を受けるファイル・関数の特定
architect: 技術方針策定、要件のMECE分解

成果物: 要件一覧 + 影響範囲(設計書の§2, §3に記載)

含める内容:

4 設計書作成
M層
設計書全体を統合。一貫性をチェック
W層
architect: 技術設計(インターフェース、データ構造、処理フロー)
researcher: テスト設計(テスト項目、期待結果)

成果物: 設計書HTML(ダッシュボード /docs/ に配置)

設計書の構成(テンプレート)

セクション内容担当
§1 要求CEOの原文 + 言語化した要求M層
§2 要件機能要件・非機能要件の一覧architect
§3 影響範囲変更ファイル・影響を受ける既存機能researcher
§4 設計技術設計(構造・インターフェース・処理フロー)architect
§5 テスト設計テスト項目・期待結果・受入基準architect/researcher
§6 受入基準CEOの要求が満たされたと判断する条件M層

状態: EXECUTING

STATUS: M層が CONSULT を返し、設計書URLと共にCEOに提示

5 設計書レビュー CEO判断
CEO
設計書を確認。以下を判断:
  • §1 の要求が自分の意図と合っているか
  • §5 のテスト設計で漏れがないか
  • §6 の受入基準に納得できるか
Bot
WAITING_FOR_RESPONSE 状態。CEOの返信を待機

CEOの選択肢:

返信効果
「OK」「進めて」M層が実装フェーズに移行
「§1の○○が違う」「テストに△△も追加して」M層が設計書を修正して再提示
「やめる」タスクCOMPLETED(実装しない)

状態: WAITING_FOR_RESPONSE

6 実装
M層
設計書§4に基づき実装を指示。結果を統合・レビュー
W層
coder: コード実装(設計書の§4に従う)
reviewer: コードレビュー(設計書の§2,§4との整合性)
設計書が承認済みのため、M層は自律的に実装を進められる。
CEOへの確認は不要(設計書が「契約」として機能する)。

成果物: コード変更(git commit)

状態: EXECUTING

7 テスト
M層
設計書§5のテスト設計に基づきテスト実行を指示
W層
tester: テスト作成・実行(設計書§5の項目を網羅)
coder: テスト不合格時の修正

テスト種別:

種別内容基準
単体テスト変更した関数・クラスのテスト設計書§5に記載の項目
結合テスト影響範囲の既存機能との結合設計書§3の影響範囲
構文チェックruff + py_compileエラー0件

不合格時: M層が coder に修正指示 → 再テスト(自律ループ内で完結)

8 受入テスト IF層
IF層
M層/W層の成果物を受け取り、フェーズ②で言語化した要求・受入基準と照合する:
  • 受入基準の各項目をチェック(PASS / FAIL)
  • 要求の意図が実現されているか総合判定
  • 判定結果をレポートとしてCEOに提示
IF層が受入テストを行う理由:
フェーズ②でCEOの要求を理解・言語化したのはIF層。
つまり「CEOが何を求めていたか」を最もよく知っている層であり、
完成物がその要求を満たしているかの判定に最適。
IF層 = 入口(要求理解)と出口(受入テスト)の門番。

成果物: 受入テストレポート(各受入基準のPASS/FAIL + 総合判定)

9 CEO最終確認 CEO判断
IF層
受入テストレポート(PASS/FAIL一覧 + 総合判定)をCEOに提示
CEO
IF層の受入テスト結果を確認し、最終OK:
  • IF層の判定が妥当か
  • 実際に動作を確認(必要に応じて)

CEOの選択肢:

返信効果
「OK」「問題ない」次の監査フェーズへ
「○○が違う」M層に差し戻し → 修正 → 再テスト → IF層再受入

STATUS: CONSULT(IF層経由でCEOに上がる)

状態: WAITING_FOR_RESPONSE

10 AI Ops 監査チェック
AI Ops
完了タスクのスレッドを自動スキャンし、以下をチェック:
  • エージェント設定見直し: CLAUDE.md・knowledge/・設定ファイルに反映すべきフィードバックがないか
  • ナレッジ反映: 今回の作業で得られた知見をCLAUDE.mdやknowledge/に追記すべきか
  • 整合性チェック: 変更されたファイルと既存のエージェント設定(CLAUDE.md・knowledge/)に矛盾がないか

処理分岐:

種別処理CEO承認フロー
追記的更新CLAUDE.md・knowledge/に知見を自動追記不要(自動)AI Ops → 自動反映 → 完了
破壊的更新 #private-agentに提案投稿 必要(72時間TTL) AI Ops → Slack通知 → CEO承認 → 反映
72時間未承認 → 自動却下
整合性問題#private-agentに警告通知—(通知のみ)AI Ops → Slack通知
破壊的更新のCEO承認フロー:
CLAUDE.md・knowledge/の既存ルール削除・変更など、エージェント群の行動原則に影響する変更は必ずCEO承認が必要
CEOはIF層としか対話しないため、AI Opsの承認依頼もIF層を経由してCEOに上がる:

AI Ops → IF層(承認依頼を整理・提示)→ CEO承認/却下 → IF層 → AI Ops反映
72時間以内に返答がなければ自動却下(安全側に倒す)。

状態: 監査は非同期。タスク完了後のバックグラウンド処理

11 Issue クローズ
Bot
GitHub Issueに最終結果をコメント → クローズ
M層
git commit / push(設計書のCOMMITタグに基づく)

クローズ条件(全てAND):

状態: COMPLETED

5. レーン別責務マトリクス

フェーズ CEO Bot IF層 M層 W層 AI Ops
① 要求投入 起点 受信・登録
② 要求理解・言語化 中継 主導
要求構造化・受入基準策定
③ M層に委任 言語化した要求+受入基準を渡す 受領
④ 要件定義 統合 architect
researcher
⑤ 設計書作成 統合・品質 architect
⑥ 設計書レビュー 判断 WAITING CONSULT
⑦ 実装 指示・統合 coder
reviewer
孤立監視
⑧ テスト 指示・判定 tester
coder(修正)
孤立監視
⑨ 受入テスト 主導
受入基準と照合
成果物提出
⑩ CEO最終確認 最終OK WAITING 判定結果レポート提示
⑪ 監査 破壊的更新時
承認
破壊的更新時
CEO承認を仲介
監査
破壊的更新→IF層経由でCEO承認
⑫ クローズ Issue閉鎖 commit/push ナレッジ集約

6. Slackステータスメッセージ

CEOが処理の進行状況をリアルタイムで把握できるよう、Botがスレッド内に単一のステータスメッセージを投稿・更新する。
従来の絵文字リアクションでは状況が不透明だったため、テキストベースのステータス表示に置き換える。

6.1 仕組み

項目内容
投稿方法スレッド内に1つのメッセージを chat_postMessage で投稿。以降は chat_update で同じメッセージを上書き更新
管理_status_messages: dict[str, str](thread_ts → ステータスメッセージのts)でスレッドごとに管理
完了時chat_delete でステータスメッセージを削除(最終結果のみ残る)
エラー時ステータス更新失敗はdebugログのみ。処理本体には影響しない

6.2 ステータス遷移

タイミング表示テキスト対応フェーズ
分類開始🔍 要求を分析中...
IF層直接回答⚙️ IF層が回答中...direct
M層委任📋 {M層名} に委任 → ⚙️ 処理中...
CEO返信待ち💬 {対象}への返信をお待ちしています(このスレッドに返信してください)②' ⑥ ⑩
CEO返信受領⚙️ 返信を受領 → 処理再開中...②' ⑥ ⑩ の返信後
再ルーティング🔄 {元M層名} → {サブM層名} に再ルーティング中...§7 REROUTE
レート制限⏳ レート制限中... {N}秒後にリトライします({X}/{MAX}回目)任意
レート制限上限⚠️ レート制限が続いています。しばらく待ってからメッセージを再送してください任意
処理完了(メッセージ削除)
レート制限の可視化:
従来は #bot-info チャンネルにのみ通知していたが、CEO(ユーザー)のスレッドにも直接表示するように変更。
待ち時間が発生していることを即座に把握でき、「処理が止まっている」という不安を解消する。

6.3 実装箇所(bot/app.py)

# スレッドごとのステータスメッセージts管理
_status_messages: dict[str, str] = {}  # thread_ts → msg_ts

async def _update_status(client, channel, thread_ts, text):
    """ステータスメッセージを投稿 or 更新"""
    msg_ts = _status_messages.get(thread_ts)
    if msg_ts:
        await client.chat_update(channel=channel, ts=msg_ts, text=text)
    else:
        resp = await client.chat_postMessage(channel=channel, thread_ts=thread_ts, text=text)
        _status_messages[thread_ts] = resp["ts"]

async def _clear_status(client, channel, thread_ts):
    """処理完了時にステータスメッセージを削除"""
    msg_ts = _status_messages.pop(thread_ts, None)
    if msg_ts:
        await client.chat_delete(channel=channel, ts=msg_ts)

7. クロスフロー(M層間の再ルーティング)

M層が処理中に別ドメインの作業が必要になった場合、IF層に戻して再ルーティングする。
IF層はルーティングの責務を持つ層であり、クロスフローもIF層経由で一貫して処理する。

7.1 フロー

M層(dev) IF層 M層(legal) │ │ │ │ ① 「法務レビュー必要」 │ │ │ REROUTE │ │ │──────────────────────→│ │ │ (dev一時停止) │ │ │ │ ② サブタスク内容を │ │ │ 理解・ルーティング │ │ │────────────────────→│ │ │ │ │ │ │ ③ 法務レビュー実施 │ │ │ │ │ ④ 結果受領 │ │ │←───────────────────│ │ │ │ │ ⑤ 結果を受け取り │ │ │ 開発続行 │ │ │←─────────────────────│ │ │ │ │

7.2 REROUTEプロトコル

項目内容
トリガー M層が <<STATUS>>REROUTE<</STATUS>> を返す。本文にサブタスクの内容・目的・期待する成果物を記載
Bot処理 REROUTE受信 → 現在のM層プロセスを一時停止(コンテキスト保持)→ IF層にサブタスクを再分類させる
IF層の役割 サブタスクの内容を理解し、適切なM層にルーティング。元タスクのコンテキスト(Issue番号、元M層)を引き継ぐ
サブM層完了 サブM層が DONE → Bot が結果を元のM層に渡して再開
ステータス表示 🔄 {元M層名} → {サブM層名} に再ルーティング中...

7.3 想定シナリオ

元フローサブタスク具体例
dev(開発) → legal(法務) 利用規約変更を伴う機能追加で、法務レビューが必要
dev(開発) → bo(経理) 課金機能の実装で、経理の仕訳ルール確認が必要
legal(法務) → dev(開発) 契約書レビューの結果、システム改修が必要と判明
bo(経理) → dev(開発) 経費処理の自動化で、パイプライン修正が必要

7.4 制約・安全策

制約理由
再ルーティングは1段まで(サブM層からさらにREROUTEしない) 無限ループ防止。2段以上の連鎖が必要な場合はCEOに CONSULT
サブタスクにタイムアウト(M層の最大ラウンド数と同じ) サブM層が長時間停止した場合の安全弁
元M層のコンテキスト保持 サブタスク完了後に元の作業を正確に再開するため、元M層の状態(進行フェーズ、成果物)を保存
Issue は分割しない 同一Issue内のサブタスクとして管理。ラベルで reroute:legal 等を付与して追跡

7.5 M層の REROUTE 出力例

この機能追加には利用規約の改定が必要です。
法務レビューを依頼します。

対象: 利用規約 第5条(個人情報の取り扱い)
背景: ユーザーの行動データをAI学習に利用する機能を追加するため
期待する成果物: 改定案のドラフト + リスク評価

<<STATUS>>REROUTE<</STATUS>>

7.6 現状との差分(実装が必要な箇所)

変更箇所内容優先度
bot/app.py REROUTE ステータスのパース → IF層に再分類 → サブM層起動 → 結果を元M層に返却 必須
IF層 CLAUDE.md 再ルーティング時の分類ロジック追加(元タスクコンテキストの引き継ぎ) 必須
各M層 CLAUDE.md REROUTE ステータスの使用条件・出力フォーマットを記載 必須
bot/router.py 再ルーティング対応(元M層情報の保持、サブタスク完了時の復帰ロジック) 必須
flow.html クロスフローのタブ追加 or 既存タブにREROUTE分岐を追加 推奨

8. 層ライフサイクル定義

各層がいつ生まれ、何を持ち、いつ死に、死んだらどうなるかを定義する。
これが曖昧だと、障害時の復旧やクロスフロー時のコンテキスト引き継ぎが設計できない。

8.1 層別ライフサイクル

生成条件 生存期間 保持するコンテキスト 死亡条件 死亡時の影響
Bot Mac mini起動時(常駐デーモン) 永続 全タスク状態(tasks.jsonに永続化)
ステータスメッセージts(メモリのみ)
セマフォ(並行実行数制御)
プロセスクラッシュ / マシン再起動 全タスク影響
tasks.json から復元可能だが、実行中のIF/M/Wサブプロセスは孤立する
ステータスメッセージtsは消失(Slack上にメッセージが残骸として残る)
IF層 CEOのSlackメッセージ受信時
or REROUTE受信時
1-shot(分類完了で終了) CEOの原文
スレッド履歴(Botが収集して渡す)
分類結果を返した時点 低影響
1-shotのため途中死亡 = 分類未完了。Botがリトライ可能
コンテキストはBotが保持しているため、再投入で復元
M層 IF層のルーティング結果を受けてBotが起動 継続(最大10ラウンド)
1ラウンド = M層出力→Bot処理→M層再開
Claude CLI --resume でセッション継続
セッション内(Claude CLIが保持):
- 全ラウンドの会話履歴
- W層の結果
- CEO返信内容

Bot側(tasks.jsonに永続化):
- original_task: M層に渡した元プロンプト
- route: M層種別
- issue_number: Issue番号
DONE / ERROR を返した時
or 10ラウンド到達
or プロセスクラッシュ
高影響
正常終了: コンテキスト消失(成果物はファイル/Issueに残る)
異常終了: セッション履歴が消失。original_taskからの再起動は可能だが、途中の判断・W層結果・CEO返信は全て失われる
W層 M層のDELEGATEを受けてBotが起動 1-shot(作業完了で終了)
並行実行可能(asyncio.gather)
M層が指定したプロンプトのみ
CLAUDE.md + knowledge/ は自身のディレクトリから読込
他のW層の結果は見えない
結果を返した時点
or プロセスクラッシュ
中影響
正常終了: 成果物はファイルに残る
異常終了: M層が結果を受け取れない。M層は次ラウンドでリトライ判断する
並行実行中の他W層には影響なし
AI Ops Bot起動と同時に常駐 永続(60秒間隔のループ) 孤立リトライカウント(メモリのみ)
前回スキャン結果
プロセスクラッシュ / Bot停止 中影響
監視停止。孤立タスクが検知されなくなる
ナレッジ集約・整合性チェックも停止
既存タスクの処理自体は影響なし

8.2 コンテキスト引き継ぎインターフェース

各遷移で何を渡し、何を渡さないかを明確にする。
「渡さないもの」は遷移時に消失する。復元が必要なら永続化の設計が要る。
遷移 渡すもの 渡さないもの(消失) 伝達手段
CEO → Bot Slackメッセージ原文、thread_ts、user_id Slack Events API
Bot → IF層 CEOの原文
スレッド履歴(過去のやりとり)
依頼者情報(user_name, role)
Botの内部状態(task_id, retry_count等)
他スレッドの情報
Claude CLI プロンプト引数
IF層 → Bot → M層 IF層の分類結果(route, impact等)
CEOの原文
スレッド履歴
依頼者情報
IF層の推論過程(なぜその分類にしたか)
IF層のセッション
Claude CLI プロンプト引数
+ --resume によるセッション継続
M層 → Bot → W層
(DELEGATE)
M層が記述したプロンプト(作業指示)のみ M層の判断過程
他のW層への指示内容
CEOの原文(M層が明示的にプロンプトに含めない限り)
スレッド履歴
Claude CLI プロンプト引数
(1-shot、セッション継続なし)
W層 → Bot → M層 W層の出力テキスト(成果物 + 報告) W層の試行錯誤(エラー→修正のループ)
W層が読んだファイルの内容
stdout → M層の次ラウンド入力
M層 → Bot
(CEO確認: CONSULT/APPROVAL)
M層の出力テキスト(質問・設計書URL等) —(M層は--resumeで継続するため消失なし) M層 stdout → Bot → Slack → CEO
CEO返信 → Bot → M層 CEO返信テキスト
(M層は --resume でセッション継続。過去の会話履歴を保持)
Slack → Bot → Claude CLI --resume
M層 → Bot → IF層
(REROUTE)
サブタスク内容(M層が記述)
元タスクのIssue番号
元M層の種別(route)
元M層のセッション全体
(サブタスク完了後にどう再開するかが課題)
M層 stdout → Bot → IF層 プロンプト
サブM層完了 → Bot → 元M層
(REROUTE復帰)
サブM層の成果物
original_task + サブタスク結果を結合して再投入
元M層の全会話履歴(設計判断、W層結果、CEO返信等)
original_task + サブ結果からの再構築になる
Bot が元M層を新規起動
--resume 不可: 元セッションは終了済み)
REROUTEの最大の課題:
元M層はREROUTE時点でプロセス終了する。サブタスク完了後、元M層を新規起動するしかないが、
その場合「設計フェーズまで完了していた」「CEO承認済み」等の判断コンテキストが全て消失する。

対策案:
① M層がREROUTE前に「現在の進捗サマリー」を出力 → Botが保存 → 復帰時にプロンプトに含める
② 成果物(設計書等)はファイルに残っているため、復帰プロンプトで参照を指示する
③ Issue のコメント履歴を復帰時のコンテキストとして活用する

9. 中断・再開マトリクス

各フェーズで処理が中断した場合、何が失われ、どこから再開し、何を復元する必要があるかを定義する。
フェーズ 中断パターン 失われるもの 再開ポイント 復元方法
① 要求投入 Bot死亡(Slack受信前) CEOのメッセージを受け取れていない ①(最初から) CEOがメッセージ再送。Bot再起動後にSlackが再配信する保証はない
Bot死亡(Issue作成前) タスク登録されていない ①(最初から) CEOがメッセージ再送
② 要求理解・言語化 IF層クラッシュ 分類結果 ②(IF層再起動) BotがCEO原文を保持 → IF層を再起動(自動復旧可
Bot死亡 IF層プロセスが孤立 ②(IF層再起動) Bot再起動 → tasks.jsonからRECEIVED/CLASSIFYING状態を検知 → AI Opsが孤立検知 → リトライ
②' CEO確認待ち CEO無応答(長期放置) なし(WAITING_FOR_RESPONSE維持) —(待機継続) 現状TTLなし。無期限待機する。タスクリストに残り続ける
Bot再起動 ステータスメッセージts ②'(待機継続) tasks.jsonからWAITING_FOR_RESPONSE復元。CEO返信で再開可能。ただしSlack上のステータスメッセージは残骸化
③ M層起動 M層起動失敗 なし(まだ作業開始前) ③(M層再起動) BotがIF層の分類結果を保持 → M層を再起動(自動復旧可
④⑤ 設計 W層(architect)クラッシュ 設計途中の作業 ④(M層が再DELEGATE) M層がW層の失敗を検知 → 次ラウンドで再DELEGATE(自動復旧可
M層クラッシュ(設計完了前) M層の全会話履歴
(IF層の分類結果、要件分析の判断)
③(M層を新規起動) original_task から再起動。設計の判断過程は消失。architectが途中まで作成した設計書ファイルは残る場合あり
M層クラッシュ(設計完了後、CEO提示前) M層の会話履歴(設計書はファイルに残る) ③(M層を新規起動) 設計書ファイルは存在する。新M層に「設計書ファイルを確認してCEOに提示せよ」と指示すれば復旧可能だが、自動化されていない
⑥ 設計書レビュー CEO無応答 なし —(待機継続) TTLなし
Bot再起動(WAITING中) M層セッション(--resume不可) ③(M層を新規起動) CEO返信受信 → original_task + CEO返信でM層を新規起動。設計フェーズの判断は消失するが、設計書ファイル + CEO返信があれば実装に進める
⑦ 実装 W層(coder)クラッシュ 実装途中のコード変更(未コミット分) ⑦(M層が再DELEGATE) M層が次ラウンドで再DELEGATE。ファイルシステム上の変更は残っている場合あり(不整合リスク
M層クラッシュ(実装中) 全会話履歴(設計書承認、W層結果) ③(M層を新規起動) original_taskからの再起動。設計書は残存。コード変更が中途半端な可能性あり(手動確認が必要
⑧ テスト M層クラッシュ(テスト中) テスト結果、テスト修正ループの履歴 ③(M層を新規起動) コードは実装済みの状態で残っている。新M層に「実装済み、テストを実行せよ」と指示できれば復旧可能
⑨ IF層受入テスト IF層クラッシュ 受入テスト途中の検証結果 ⑨(IF層再起動) 成果物は存在する。IF層を再起動して受入基準と照合させる(自動復旧可
REROUTE中 サブM層クラッシュ サブタスクの作業結果 REROUTE(サブM層再起動) サブタスクのリトライ。元M層のコンテキストは別途保存されている前提
Bot再起動(REROUTE中) 元M層のコンテキスト + サブM層の進捗 ③(全体を最初から) 最も復旧が困難。元M層・サブM層両方のコンテキストが消失。original_taskからの再起動のみ

9.1 再開の難易度サマリー

パターン復旧難易度理由
IF層 / W層 のクラッシュ 1-shot。Botがコンテキストを保持しており再投入で復元。AI Opsの孤立検知で自動リトライ
M層クラッシュ(序盤: ②③) まだ判断の蓄積が少ない。original_taskからの再起動でほぼ同等の結果
M層クラッシュ(中盤: ④⑤⑥) 設計書ファイルは残るが、判断過程は消失。新M層が設計書を読めばある程度復旧可能
M層クラッシュ(終盤: ⑦⑧) コード変更が中途半端な可能性。設計書 + diffから状況を推測するしかない
REROUTE中のBot再起動 2つのM層コンテキストが同時に消失。実質的にタスク最初から
WAITING_FOR_RESPONSE 長期放置 データは残っているが、M層セッションの鮮度が劣化。Bot再起動を挟むとセッション消失

10. 冪等性・安全性

同じ操作を複数回実行した場合の挙動を定義する。
リトライ・復旧時に副作用が重複しないことを保証する設計が必要。

10.1 操作別の冪等性

操作 冪等性 現状の挙動 あるべき姿
IF層の分類 冪等 同じ入力に対して同じ分類結果を返す(LLMの非決定性はあるが実害なし) 現状で問題なし
Issue作成 非冪等 gh issue create は毎回新しいIssueを作成する。重複チェックなし thread_ts → issue_number のマッピングで既存Issueがあればスキップ。
現状 set_issue_number で管理しているが、Bot再起動前後で不整合の可能性あり
Issueコメント追加 非冪等 同じ内容でも毎回追加される。リトライで重複コメント発生 コメント追加前に直近コメントをチェックし、同内容なら追加しない(または冪等キーを付与)
Issueクローズ 冪等 既にクローズ済みなら再実行は無視される(GitHub側の仕様) 現状で問題なし
Issueラベル付与 冪等 同じラベルを複数回付与しても1つのまま(GitHub側の仕様) 現状で問題なし
設計書ファイル作成 冪等 同名ファイルは上書き 現状で問題なし
コード実装(coder) 条件付き ファイル編集は上書きなので冪等だが、途中で死んだ場合に中途半端な状態が残る coderは実装完了後にコミット → 中途半端な場合は git checkout で戻せる設計にすべき
git commit 非冪等 同じ内容でも別コミットが作成される リトライ時に「既にコミット済みか」を git diff で確認してからコミット
Slackメッセージ投稿 非冪等 同じ内容でも別メッセージとして投稿される 完了報告のリトライで重複メッセージが出る可能性あり。致命的ではない
ステータスメッセージ更新 冪等 chat_update は上書き 現状で問題なし。ただしBot再起動でtsが消失するとメッセージが残骸化する

10.2 リトライ時に問題になるパターン

P1: M層クラッシュ後のリトライでIssueコメント重複

M層の各ラウンドでBotがIssueにコメントを追加する場合、リトライで同じ報告が重複する。

対策: Issueコメントに冪等キー(task_id + round番号)を含め、追加前に重複チェック

P2: coder中途死亡でファイル不整合

coderがファイルを3つ変更する途中で死亡 → 2つだけ変更済み。M層リトライ時にcoderが差分を正しく認識できない可能性。

対策: coderは作業開始時に git stash or ブランチ作成 → 完了時にコミット。未完了ならM層が git checkout で巻き戻してから再DELEGATE

P3: Bot再起動でステータスメッセージ残骸

_status_messages はメモリのみ。Bot再起動後、Slack上に「⚙️ 処理中...」が残り続ける。

対策: _status_messages を tasks.json に含めて永続化。Bot起動時に全ステータスメッセージを削除 or 更新

P4: WAITING_FOR_RESPONSEの無期限待機

CEOが返信を忘れた場合、タスクが永遠にWAITING状態で残る。タスクリストを圧迫し、関連リソース(Issue、ステータスメッセージ)も放置される。

対策: TTL設定(例: 72時間)。期限到来時にCEOにリマインド → さらに72時間後に自動STALE化

11. 現状との差分

項目現状あるべき姿変更要否
IF層: 要求の理解・言語化 IF層は分類(route判定)のみ。要求文はそのままM層に渡す IF層がCEOの要求を正確に言語化し、受入基準も策定してからM層に渡す 変更必要
IF層 CLAUDE.md + classify prompt
IF層: 受入テスト IF層は入口のみ。出口(受入)の責務なし M層/W層の成果物を受け取り、自ら策定した受入基準と照合して判定 変更必要
IF層 CLAUDE.md + Bot実装(受入フロー)
設計書作成 architectが設計書を作ることはあるが必須ではない 実装前に必ず設計書を作成しCEOに提示 変更必要
M層 CLAUDE.md + 委譲プロトコル
設計書レビュー APPROVAL_NEEDED/CONSULTは使える 設計書完成時に必ずCONSULTでCEOに上げる ルール追加
M層 CLAUDE.md
テスト設計書 テストは実装後にtesterが作成 設計書にテスト設計を含め、設計段階でCEOが確認 変更必要
設計書テンプレート
CEO受入 M層がDONEで完了報告。CEOが全部判断 IF層が受入テストを実施し、CEOは最終確認のみ ルール追加
M層→IF層の受入フロー
AI Ops監査 ナレッジ集約・エージェント設定整合性チェックは既に稼働 そのまま活用(変更不要) 変更不要
Issueクローズ DONE時に自動コメント追加(クローズは手動の場合あり) CEO最終確認OK後に自動クローズ ルール追加
app.py

12. 実装方針

このプロセス変更の本質はIF層とM層のCLAUDE.mdにルールを追加すること。
Bot本体のコード変更は最小限で済む。

12.1 IF層 CLAUDE.md への追記(最大の変更点)

IF層の責務を「分類のみ」から「要求理解 + 受入テスト」に拡張:

  1. CEOの発言を分類するだけでなく、要求を正確に言語化すること
  2. 言語化した要求に対する受入基準を策定すること
  3. 言語化した要求 + 受入基準をM層に渡すこと
  4. M層/W層のテスト完了後、成果物を受け取り受入基準と照合すること
  5. 受入テスト結果をレポートとしてCEOに提示すること

12.2 M層 CLAUDE.md への追記

全M層(dev, bo, legal)に共通の開発プロセスルールを追加:

  1. 実装着手前に設計書を必ず作成すること
  2. 設計書には要求(IF層から受領)・要件・影響範囲・テスト設計・受入基準を含めること
  3. 設計書完成時に <<STATUS>>CONSULT<</STATUS>> でCEOに提示すること
  4. CEO承認後に実装フェーズに移行すること
  5. テスト全PASS後、成果物をIF層に返却し受入テストを受けること
  6. IF層受入テスト + CEO最終確認後に <<STATUS>>DONE<</STATUS>> を返すこと

12.3 設計書テンプレート

agents/workers/architect/knowledge/ に設計書テンプレートHTMLを配置。architectが参照する。

12.4 Bot側の変更(最小限)

13. 適用範囲

タスク種別このプロセスを適用理由
m-dev(コード変更を伴う開発) 適用 設計→実装→テストの全フェーズが必要
m-bo(経理・管理) 部分適用 ops実行は設計不要。経費登録等はAPPROVAL_NEEDEDで十分
m-legal(法務) 部分適用 契約レビューはCONSULTで十分。法的分析に設計書は不要
direct(簡単な質問) 適用しない IF層直接回答。設計書は過剰
ops(月次パイプライン) 適用しない 定型業務。Bot直接実行
m-devで「軽微な修正」の場合: M層が影響度を判断し、設計書スキップを提案(CONSULT)。CEOが承認すれば直接実装に進む。プロセスの形骸化を防ぐため、M層に裁量を持たせる。

14. Issueステータス遷移・担当者・コマンド

フェーズ Issueステータス Issue担当者
(assignee)
誰がステータスを変えるか opsコマンド / Bot操作
① 要求投入 Open IF層 Bot: Issue自動作成 → Open (自動: CEOのSlack発言をトリガーにBot が gh issue create
② 要求理解・言語化 Open / Classifying IF層 Bot: ラベル classifying 付与
②' 要求確認 Waiting: CEO確認 IF層 Bot: ラベル waiting-for-ceo 付与 Bot が WAITING_FOR_RESPONSE → CEO返信待ち
③ M層に委任 In Progress M層(IF層→M層に移管) Bot: CEO確認OK → ラベル in-progress
assignee を M層に変更
route_to_manager()
④⑤ 要件定義・設計書 In Progress / Design M層 M層: ラベル design 追加 M層が <<DELEGATE>> で researcher/architect を起動
⑥ 設計書レビュー Waiting: 設計書レビュー M層(CEOレビュー中) M層: <<STATUS>>CONSULT<</STATUS>>
Bot が waiting-for-ceo 付与
Bot が WAITING_FOR_RESPONSE → CEO返信待ち
⑦ 実装 In Progress / Implementing M層 M層: CEO承認受領 → ラベル implementing M層が <<DELEGATE>> で coder/reviewer を起動
⑧ テスト In Progress / Testing M層 M層: ラベル testing M層が <<DELEGATE>> で tester を起動
python -m pytest / ruff check
⑨ IF層受入テスト In Progress / Acceptance IF層(M層→IF層に移管) M層: <<STATUS>>DONE<</STATUS>>
Bot が assignee を IF層に戻す
IF層が受入基準と照合
⑩ CEO最終確認 Waiting: CEO最終確認 IF層 IF層: 受入レポートをCEOに提示
Bot が waiting-for-ceo 付与
Bot が WAITING_FOR_RESPONSE → CEO返信待ち
⑪ AI Ops監査 Auditing(非同期) —(非同期) AI Ops: 60秒監視ループで完了タスクを自動検知 破壊的更新時: AI Ops → IF層 → CEO承認
⑫ Issueクローズ Closed Bot: CEO最終確認OK → gh issue close M層が git commit / git push
Bot が Issue に完了コメント + クローズ

NG処理フロー(差し戻し・中断・エラー)

NG-1: CEO要求確認で「違う」(②')

CEO
「○○じゃなくて△△がしたい」
Bot
CEO返信をIF層に渡す
IF層
CEOのフィードバックを反映して要求を再言語化 → 再度CEOに確認

Issue: ラベル waiting-for-ceoclassifying(②要求言語化に戻る)→ waiting-for-ceo(再確認)

担当者: IF層のまま(M層にはまだ渡していない)

戻り先: ②要求言語化(IF層が再度言語化してからCEOに再確認)

ループ: CEOが納得するまで繰り返す(上限なし)

NG-2: CEO設計書レビューで差し戻し(⑥)

CEO
「§2の要件にSSO対応も入れて」「テスト項目に○○を追加」
Bot
CEO返信をM層に渡す(WAITING_FOR_RESPONSE解除)
M層
CEOのフィードバックに基づき、W層(architect)に設計書修正を指示 → 修正完了後に再度CONSULT

戻り先: ④⑤設計書作成(M層がarchitectに修正指示 → 再レビュー)

Issue: ラベル waiting-for-ceodesignwaiting-for-ceo(再レビュー)

担当者: M層のまま

NG-3: CEOが「やめる」(⑥)

CEO
「やっぱりやめる」「不要になった」
Bot
M層にキャンセルを通知 → Issue クローズ
M層
作業中のW層プロセスがあれば停止

Issue: gh issue close #xxx + ラベル cancelled 付与

担当者: —(クローズ)

NG-4: テスト不合格(⑧)

M層
テスト結果を確認し、coder に修正指示 → 再テスト(自律ループ内で完結、CEOに上がらない
W層
coder: 修正 → tester: 再テスト

Issue: ラベル testingimplementingtesting

担当者: M層のまま

ループ: テストPASSするまで繰り返す(M層/W層の自律ループ内で完結)

NG-5: IF層受入テスト FAIL(⑨)

IF層
不合格の受入基準を特定し、M層に差し戻し
M層
不合格項目を修正 → 再テスト → IF層に再提出

戻り先: ⑦実装(M層が修正 → ⑧テスト → ⑨IF層再受入)

Issue: ラベル acceptanceimplementing、assignee: IF層 → M層に移管

担当者: M層

NG-6: CEO最終確認 NG(⑩)

CEO
「○○が動いていない」「表示が違う」
IF層
CEOのフィードバックを整理し、M層に差し戻し
M層
修正 → 再テスト → IF層再受入 → CEO再確認

戻り先: ⑦実装(M層が修正 → ⑧テスト → ⑨IF層再受入 → ⑩CEO再確認)

Issue: ラベル waiting-for-ceoimplementing、assignee: IF層 → M層に移管

担当者: M層

NG-7: W層プロセス孤立・エラー(⑦⑧中)

AI Ops
120秒更新なし → 孤立検知 → orphan_retry 書出し
Bot
コマンドファイル読取 → タスクをSTALE化 → 再実行(最大2回)

Issue: ラベルに retry 追加。2回失敗 → error ラベル

3回失敗時: Bot が #bot-info + スレッドに通知。CEOの手動メッセージ再送を依頼

Issueラベル一覧

ラベル意味付与タイミング
classifyingIF層が要求理解中
waiting-for-ceoCEOの返信待ち②' ⑥ ⑩ ⑤(AI Ops)
in-progressM層/W層が作業中③〜⑧
design設計書作成中④⑤
implementing実装中
testingテスト中
acceptanceIF層受入テスト中
cancelledCEOによるキャンセルNG-3
retry孤立検知によるリトライ中NG-7
errorエラー確定(手動対応必要)NG-7(3回失敗)

15. ユースケース: M層のやりとり具体例

15.1 開発タスクの場合

CEO: 「ダッシュボードにフィルタ追加して」

▼ IF層(要求理解)

要求: ダッシュボードのタスク一覧にステータス別フィルタ機能を追加する
受入基準:
  1. フィルタUIがダッシュボードに表示される
  2. アクティブ/完了/エラーの各ステータスで絞り込みできる
  3. フィルタ解除で全件表示に戻る
ルート: m-dev (impact: moderate)

↑ この解釈で合っていますか?
Issue: #xxx に assignee=IF層, label=classifying を設定済み

▼ CEO: 「OK、合ってる」

→ Bot: label=in-progress, assignee=M層(dev) に変更

▼ M層(開発MGR)→ W層に委譲

<<DELEGATE>>
[
  {"worker": "researcher", "prompt": "dashboard/index.html のタスク一覧の現状構造を調査..."},
  {"worker": "architect", "prompt": "フィルタ機能の設計書を作成。要求: ... 受入基準: ..."}
]
<</DELEGATE>>
<<STATUS>>CONTINUE<</STATUS>>

▼ W層の結果を受けて M層が統合

→ Bot: Issue label=design 追加

設計書を作成しました: /docs/DESIGN_dashboard_filter.html

設計書の要点:
- §1 要求: フィルタ機能追加(IF層から受領した要求文)
- §2 要件: CSS/JSでクライアントサイドフィルタ、3ステータス対応
- §3 影響: dashboard/index.html(変更)、server.py(変更なし)
- §5 テスト: 各ステータスでの絞込、解除、0件時の表示
- §6 受入基準: IF層策定の3項目

CEOの確認をお願いします。

<<STATUS>>CONSULT<</STATUS>>

→ Bot: Issue label=waiting-for-ceo, WAITING_FOR_RESPONSE

▼ CEO: 「OK、進めて」

→ Bot: Issue label=implementing, waiting-for-ceo除去

▼ M層(設計書承認後 → 実装指示)

<<DELEGATE>>
[
  {"worker": "coder", "prompt": "設計書 DESIGN_dashboard_filter.html §4に基づき実装..."},
  {"worker": "reviewer", "prompt": "coderの実装を設計書§2,§4と照合しレビュー..."}
]
<</DELEGATE>>
<<STATUS>>CONTINUE<</STATUS>>

▼ M層(テスト指示)

<<DELEGATE>>
[{"worker": "tester", "prompt": "設計書§5のテスト項目を全て実行..."}]
<</DELEGATE>>
<<STATUS>>CONTINUE<</STATUS>>

▼ IF層(受入テスト)

受入テスト結果:
  ✅ 1. フィルタUIがダッシュボードに表示される → PASS
  ✅ 2. 各ステータスで絞り込みできる → PASS
  ✅ 3. フィルタ解除で全件表示に戻る → PASS

総合判定: PASS(全受入基準を満たしています)

▼ CEO: 「OK」

→ Bot: gh issue close #xxx + 完了コメント
→ M層: git push
→ AI Ops: 非同期で監査開始

15.2 M層がCEOに差し戻す場合

CEO: 「認証の仕組みを変えて」

▼ M層(設計書提示)

設計書を作成しました: /docs/DESIGN_auth_refactor.html
impact_level: critical(認証変更は全機能に影響)

<<STATUS>>CONSULT<</STATUS>>

▼ CEO: 「§2の要件にSSO対応も入れて」

▼ M層(設計書修正→再提示)

設計書を更新しました(SSO対応を追加):
- §2 に SSO要件を追加
- §5 にSSOテスト項目を追加

<<STATUS>>CONSULT<</STATUS>>

▼ CEO: 「OK、進めて」→ 実装フェーズへ

15.3 IF層受入テストで不合格の場合

▼ IF層(受入テスト)

受入テスト結果:
  ✅ 1. フィルタUIが表示される → PASS
  ❌ 2. 各ステータスで絞り込みできる → FAIL(エラーステータスで絞込が効かない)
  ✅ 3. フィルタ解除で全件表示 → PASS

総合判定: FAIL(受入基準2が未達)
→ M層に差し戻し: エラーステータスのフィルタが機能していません

▼ M層(修正指示 → 再テスト → IF層に再提出)

▼ IF層(再受入テスト → 全PASS)

▼ CEO: 最終確認 → OK → クローズ