CEOの要求(原文意訳):
Issue(タスク)が起票されてからクローズされるまでの一連の開発プロセスを確立したい。
| # | タイミング | 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 |
成果物: GitHub Issue(タイトル + CEO原文)
状態: RECEIVED
成果物: 言語化した要求 + 受入基準(CEO確認済み → M層に渡す & 設計書§1, §6の原案)
状態: CLASSIFYING → WAITING_FOR_RESPONSE(CEO確認待ち)→ ROUTING
成果物: 要件一覧 + 影響範囲(設計書の§2, §3に記載)
含める内容:
成果物: 設計書HTML(ダッシュボード /docs/ に配置)
| セクション | 内容 | 担当 |
|---|---|---|
| §1 要求 | CEOの原文 + 言語化した要求 | M層 |
| §2 要件 | 機能要件・非機能要件の一覧 | architect |
| §3 影響範囲 | 変更ファイル・影響を受ける既存機能 | researcher |
| §4 設計 | 技術設計(構造・インターフェース・処理フロー) | architect |
| §5 テスト設計 | テスト項目・期待結果・受入基準 | architect/researcher |
| §6 受入基準 | CEOの要求が満たされたと判断する条件 | M層 |
状態: EXECUTING
STATUS: M層が CONSULT を返し、設計書URLと共にCEOに提示
CEOの選択肢:
| 返信 | 効果 |
|---|---|
| 「OK」「進めて」 | M層が実装フェーズに移行 |
| 「§1の○○が違う」「テストに△△も追加して」 | M層が設計書を修正して再提示 |
| 「やめる」 | タスクCOMPLETED(実装しない) |
状態: WAITING_FOR_RESPONSE
成果物: コード変更(git commit)
状態: EXECUTING
テスト種別:
| 種別 | 内容 | 基準 |
|---|---|---|
| 単体テスト | 変更した関数・クラスのテスト | 設計書§5に記載の項目 |
| 結合テスト | 影響範囲の既存機能との結合 | 設計書§3の影響範囲 |
| 構文チェック | ruff + py_compile | エラー0件 |
不合格時: M層が coder に修正指示 → 再テスト(自律ループ内で完結)
成果物: 受入テストレポート(各受入基準のPASS/FAIL + 総合判定)
CEOの選択肢:
| 返信 | 効果 |
|---|---|
| 「OK」「問題ない」 | 次の監査フェーズへ |
| 「○○が違う」 | M層に差し戻し → 修正 → 再テスト → IF層再受入 |
STATUS: CONSULT(IF層経由でCEOに上がる)
状態: WAITING_FOR_RESPONSE
処理分岐:
| 種別 | 処理 | CEO承認 | フロー |
|---|---|---|---|
| 追記的更新 | CLAUDE.md・knowledge/に知見を自動追記 | 不要(自動) | AI Ops → 自動反映 → 完了 |
| 破壊的更新 | #private-agentに提案投稿 | 必要(72時間TTL) | AI Ops → Slack通知 → CEO承認 → 反映 72時間未承認 → 自動却下 |
| 整合性問題 | #private-agentに警告通知 | —(通知のみ) | AI Ops → Slack通知 |
状態: 監査は非同期。タスク完了後のバックグラウンド処理
クローズ条件(全てAND):
状態: COMPLETED
| フェーズ | 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 | — | ナレッジ集約 |
| 項目 | 内容 |
|---|---|
| 投稿方法 | スレッド内に1つのメッセージを chat_postMessage で投稿。以降は chat_update で同じメッセージを上書き更新 |
| 管理 | _status_messages: dict[str, str](thread_ts → ステータスメッセージのts)でスレッドごとに管理 |
| 完了時 | chat_delete でステータスメッセージを削除(最終結果のみ残る) |
| エラー時 | ステータス更新失敗はdebugログのみ。処理本体には影響しない |
| タイミング | 表示テキスト | 対応フェーズ |
|---|---|---|
| 分類開始 | 🔍 要求を分析中... | ② |
| IF層直接回答 | ⚙️ IF層が回答中... | direct |
| M層委任 | 📋 {M層名} に委任 → ⚙️ 処理中... | ③ |
| CEO返信待ち | 💬 {対象}への返信をお待ちしています(このスレッドに返信してください) | ②' ⑥ ⑩ |
| CEO返信受領 | ⚙️ 返信を受領 → 処理再開中... | ②' ⑥ ⑩ の返信後 |
| 再ルーティング | 🔄 {元M層名} → {サブM層名} に再ルーティング中... | §7 REROUTE |
| レート制限 | ⏳ レート制限中... {N}秒後にリトライします({X}/{MAX}回目) | 任意 |
| レート制限上限 | ⚠️ レート制限が続いています。しばらく待ってからメッセージを再送してください | 任意 |
| 処理完了 | (メッセージ削除) | ⑫ |
# スレッドごとのステータスメッセージ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)
| 項目 | 内容 |
|---|---|
| トリガー | M層が <<STATUS>>REROUTE<</STATUS>> を返す。本文にサブタスクの内容・目的・期待する成果物を記載 |
| Bot処理 | REROUTE受信 → 現在のM層プロセスを一時停止(コンテキスト保持)→ IF層にサブタスクを再分類させる |
| IF層の役割 | サブタスクの内容を理解し、適切なM層にルーティング。元タスクのコンテキスト(Issue番号、元M層)を引き継ぐ |
| サブM層完了 | サブM層が DONE → Bot が結果を元のM層に渡して再開 |
| ステータス表示 | 🔄 {元M層名} → {サブM層名} に再ルーティング中... |
| 元フロー | サブタスク | 具体例 |
|---|---|---|
| dev(開発) | → legal(法務) | 利用規約変更を伴う機能追加で、法務レビューが必要 |
| dev(開発) | → bo(経理) | 課金機能の実装で、経理の仕訳ルール確認が必要 |
| legal(法務) | → dev(開発) | 契約書レビューの結果、システム改修が必要と判明 |
| bo(経理) | → dev(開発) | 経費処理の自動化で、パイプライン修正が必要 |
| 制約 | 理由 |
|---|---|
| 再ルーティングは1段まで(サブM層からさらにREROUTEしない) | 無限ループ防止。2段以上の連鎖が必要な場合はCEOに CONSULT |
| サブタスクにタイムアウト(M層の最大ラウンド数と同じ) | サブM層が長時間停止した場合の安全弁 |
| 元M層のコンテキスト保持 | サブタスク完了後に元の作業を正確に再開するため、元M層の状態(進行フェーズ、成果物)を保存 |
| Issue は分割しない | 同一Issue内のサブタスクとして管理。ラベルで reroute:legal 等を付与して追跡 |
この機能追加には利用規約の改定が必要です。 法務レビューを依頼します。 対象: 利用規約 第5条(個人情報の取り扱い) 背景: ユーザーの行動データをAI学習に利用する機能を追加するため 期待する成果物: 改定案のドラフト + リスク評価 <<STATUS>>REROUTE<</STATUS>>
| 変更箇所 | 内容 | 優先度 |
|---|---|---|
bot/app.py |
REROUTE ステータスのパース → IF層に再分類 → サブM層起動 → 結果を元M層に返却 | 必須 |
| IF層 CLAUDE.md | 再ルーティング時の分類ロジック追加(元タスクコンテキストの引き継ぎ) | 必須 |
| 各M層 CLAUDE.md | REROUTE ステータスの使用条件・出力フォーマットを記載 | 必須 |
bot/router.py |
再ルーティング対応(元M層情報の保持、サブタスク完了時の復帰ロジック) | 必須 |
| flow.html | クロスフローのタブ追加 or 既存タブにREROUTE分岐を追加 | 推奨 |
| 層 | 生成条件 | 生存期間 | 保持するコンテキスト | 死亡条件 | 死亡時の影響 |
|---|---|---|---|---|---|
| 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停止 |
中影響 監視停止。孤立タスクが検知されなくなる ナレッジ集約・整合性チェックも停止 既存タスクの処理自体は影響なし |
| 遷移 | 渡すもの | 渡さないもの(消失) | 伝達手段 |
|---|---|---|---|
| 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 不可: 元セッションは終了済み) |
| フェーズ | 中断パターン | 失われるもの | 再開ポイント | 復元方法 |
|---|---|---|---|---|
| ① 要求投入 | 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からの再起動のみ |
| パターン | 復旧難易度 | 理由 |
|---|---|---|
| IF層 / W層 のクラッシュ | 低 | 1-shot。Botがコンテキストを保持しており再投入で復元。AI Opsの孤立検知で自動リトライ |
| M層クラッシュ(序盤: ②③) | 低 | まだ判断の蓄積が少ない。original_taskからの再起動でほぼ同等の結果 |
| M層クラッシュ(中盤: ④⑤⑥) | 中 | 設計書ファイルは残るが、判断過程は消失。新M層が設計書を読めばある程度復旧可能 |
| M層クラッシュ(終盤: ⑦⑧) | 高 | コード変更が中途半端な可能性。設計書 + diffから状況を推測するしかない |
| REROUTE中のBot再起動 | 高 | 2つのM層コンテキストが同時に消失。実質的にタスク最初から |
| WAITING_FOR_RESPONSE 長期放置 | 中 | データは残っているが、M層セッションの鮮度が劣化。Bot再起動を挟むとセッション消失 |
| 操作 | 冪等性 | 現状の挙動 | あるべき姿 |
|---|---|---|---|
| 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が消失するとメッセージが残骸化する |
M層の各ラウンドでBotがIssueにコメントを追加する場合、リトライで同じ報告が重複する。
対策: Issueコメントに冪等キー(task_id + round番号)を含め、追加前に重複チェック
coderがファイルを3つ変更する途中で死亡 → 2つだけ変更済み。M層リトライ時にcoderが差分を正しく認識できない可能性。
対策: coderは作業開始時に git stash or ブランチ作成 → 完了時にコミット。未完了ならM層が git checkout で巻き戻してから再DELEGATE
_status_messages はメモリのみ。Bot再起動後、Slack上に「⚙️ 処理中...」が残り続ける。
対策: _status_messages を tasks.json に含めて永続化。Bot起動時に全ステータスメッセージを削除 or 更新
CEOが返信を忘れた場合、タスクが永遠にWAITING状態で残る。タスクリストを圧迫し、関連リソース(Issue、ステータスメッセージ)も放置される。
対策: TTL設定(例: 72時間)。期限到来時にCEOにリマインド → さらに72時間後に自動STALE化
| 項目 | 現状 | あるべき姿 | 変更要否 |
|---|---|---|---|
| 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 |
IF層の責務を「分類のみ」から「要求理解 + 受入テスト」に拡張:
全M層(dev, bo, legal)に共通の開発プロセスルールを追加:
<<STATUS>>CONSULT<</STATUS>> でCEOに提示すること<<STATUS>>DONE<</STATUS>> を返すことagents/workers/architect/knowledge/ に設計書テンプレートHTMLを配置。architectが参照する。
| タスク種別 | このプロセスを適用 | 理由 |
|---|---|---|
| m-dev(コード変更を伴う開発) | 適用 | 設計→実装→テストの全フェーズが必要 |
| m-bo(経理・管理) | 部分適用 | ops実行は設計不要。経費登録等はAPPROVAL_NEEDEDで十分 |
| m-legal(法務) | 部分適用 | 契約レビューはCONSULTで十分。法的分析に設計書は不要 |
| direct(簡単な質問) | 適用しない | IF層直接回答。設計書は過剰 |
| ops(月次パイプライン) | 適用しない | 定型業務。Bot直接実行 |
| フェーズ | 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-progressassignee を 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 pushBot が Issue に完了コメント + クローズ |
Issue: ラベル waiting-for-ceo → classifying(②要求言語化に戻る)→ waiting-for-ceo(再確認)
担当者: IF層のまま(M層にはまだ渡していない)
戻り先: ②要求言語化(IF層が再度言語化してからCEOに再確認)
ループ: CEOが納得するまで繰り返す(上限なし)
戻り先: ④⑤設計書作成(M層がarchitectに修正指示 → 再レビュー)
Issue: ラベル waiting-for-ceo → design → waiting-for-ceo(再レビュー)
担当者: M層のまま
Issue: gh issue close #xxx + ラベル cancelled 付与
担当者: —(クローズ)
Issue: ラベル testing → implementing → testing
担当者: M層のまま
ループ: テストPASSするまで繰り返す(M層/W層の自律ループ内で完結)
戻り先: ⑦実装(M層が修正 → ⑧テスト → ⑨IF層再受入)
Issue: ラベル acceptance → implementing、assignee: IF層 → M層に移管
担当者: M層
戻り先: ⑦実装(M層が修正 → ⑧テスト → ⑨IF層再受入 → ⑩CEO再確認)
Issue: ラベル waiting-for-ceo → implementing、assignee: IF層 → M層に移管
担当者: M層
orphan_retry 書出しIssue: ラベルに retry 追加。2回失敗 → error ラベル
3回失敗時: Bot が #bot-info + スレッドに通知。CEOの手動メッセージ再送を依頼
| ラベル | 意味 | 付与タイミング |
|---|---|---|
classifying | IF層が要求理解中 | ② |
waiting-for-ceo | CEOの返信待ち | ②' ⑥ ⑩ ⑤(AI Ops) |
in-progress | M層/W層が作業中 | ③〜⑧ |
design | 設計書作成中 | ④⑤ |
implementing | 実装中 | ⑦ |
testing | テスト中 | ⑧ |
acceptance | IF層受入テスト中 | ⑨ |
cancelled | CEOによるキャンセル | NG-3 |
retry | 孤立検知によるリトライ中 | NG-7 |
error | エラー確定(手動対応必要) | NG-7(3回失敗) |
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: 非同期で監査開始
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、進めて」→ 実装フェーズへ
▼ IF層(受入テスト)
受入テスト結果: ✅ 1. フィルタUIが表示される → PASS ❌ 2. 各ステータスで絞り込みできる → FAIL(エラーステータスで絞込が効かない) ✅ 3. フィルタ解除で全件表示 → PASS 総合判定: FAIL(受入基準2が未達) → M層に差し戻し: エラーステータスのフィルタが機能していません
▼ M層(修正指示 → 再テスト → IF層に再提出)
▼ IF層(再受入テスト → 全PASS)
▼ CEO: 最終確認 → OK → クローズ