メインコンテンツまでスキップ

パイプライン概要

SPECA は 6 ステージから成るパイプラインです。前半 3 ステージは仕様を型付きプロパティに変換 (Knowledge Structuring)、後半 3 ステージはそのプロパティを実装に対して監査します (Systematic Auditing)。

SPECA パイプライン

フェーズ番号 — 論文 vs 内部 ID

2 本の SPECA 論文ではステージを Phase 1〜6 と呼びます。一方、コードベースは開発時の順序を反映した内部 ID (01a / 01b / 01e / 02c / 03 / 04) を使います。指しているステージは同じです。

論文内部 IDプレーン名ページ
Phase 101aSpec Discovery (仕様収集)01a
Phase 201bSubgraph Extraction (サブグラフ抽出)01b
Phase 301eProperty Generation (プロパティ生成)01e
Phase 402cCode Pre-resolution (コード位置事前解決)02c
Phase 503Property Audit (Map / Prove / Stress-Test)03
Phase 604Severity Review (3 ゲート FP フィルタ)04

CLI とオーケストレータは常に内部 ID を使います (例: speca run --target 04)。

依存関係

01a (Spec Discovery)

01b (Subgraph Extraction)

01e (Property Generation) ← BUG_BOUNTY_SCOPE.json 必須

02c (Code Pre-resolution) ← TARGET_INFO.json 必須

03 (Audit Map: Map → Prove → Stress-Test)

04 (Review: Dead Code → Trust Boundary → Scope)

前半 3 フェーズ (01a / 01b / 01e) は仕様とスコープルブリックのみに依存するため、複数の実装間でキャッシュ・再利用できます。後半 3 フェーズ (02c / 03 / 04) は対象コードベースに依存し、実装ごとに走らせます。

入出力一覧

ID名前入力出力
01aSpec DiscoverySPEC_URLS 環境変数01a_STATE.json
01bSubgraph Extraction01a_STATE.jsonMermaid .mmd + 01b_PARTIAL_*.json
01eProperty Generationサブグラフ + STRIDE/CWE Top 2501e_PARTIAL_*.json
02cCode Resolutionプロパティ + ソース02c_PARTIAL_*.json
03Audit Mapプロパティ + コード03_PARTIAL_*.json
04ReviewPhase 03 findings04_PARTIAL_*.json (6 種類の verdict)

データフローの規約

  • Partial ファイル: outputs/<phase_id>_PARTIAL_W{worker}B{batch}_{timestamp}.json
  • キューファイル: outputs/<phase_id>_QUEUE_{worker}.json
  • ログ: outputs/logs/{phase_id}_*.jsonl

各フェーズは上流の partial ファイルを glob で消費し、resume により処理済み項目をスキップ、各バッチ完了直後に結果を即書き込みます。検証エラーで partial の保存をブロックすることはありません。

ハーネス共通機能

オーケストレータは全フェーズで共通の 4 つの機能を提供します。詳細は エージェント設計 — ハーネス にあります。

  • Circuit Breaker — フェーズ内のすべてのワーカーで共有。連続失敗・総リトライ・空結果連発のいずれかで停止。
  • Cost Tracker — フェーズごとの USD 予算上限。超過すると BudgetExceeded を投げてフェーズを即停止。
  • Resume Manager*_PARTIAL_*.json を走査し処理済み項目を判定、再実行はデフォルトでスキップ。
  • Log Watcher — stream-json ログをリアルタイムに追従し、TUI ダッシュボードへイベント転送。

各フェーズへのモデル割り当てとプロンプト/スキルの選び分けは プロンプトとスキル を参照してください。