| intent_id | DOC-LEGACY |
|---|---|
| owner | docs-core |
| status | active |
| last_reviewed_at | 2026-04-09 |
| next_review_due | 2026-05-09 |
Workflow Cookbook は、QA / Governance-first の運用ドキュメント、Birdseye 資産、参照実装、CI / Governance テンプレートを一体で提供する基盤リポジトリである。 本仕様書は、このリポジトリが外部へ公開するふるまい、入出力、運用上の互換条件を定義する。
- 対象
- ルートドキュメント群
docs/birdseye/の生成物tools/codemap/update.pytools/autosave//tools/merge//tools/perf/- 下流ソフトウェア向けの自己改善ループ契約
agent-protocolsのEvidence契約へ接続する追跡ブリッジ.github/workflows/とgovernance/
- 非対象
- 本番ホスティング実体
- 外部 SaaS の本番設定
- Cookbook 外部リポジトリ固有の追加要件
- メンテナ
- repo の文書、生成物、参照実装を保守する。
- 派生リポジトリ導入者
- reusable workflow、policy、運用文書を再利用する。
- AI エージェント
- Birdseye とハブ文書を最小読込の起点として利用する。
- QA / Ops / Security 担当
- 受入基準、KPI、セキュリティ導線、CI 段階導入を評価する。
- ルート文書の責務は次のとおり固定する。
README.md: 初動入口HUB.codex.md: タスク分割入口RUNBOOK.md: 実行手順入口EVALUATION.md: 受入基準入口CHECKLISTS.md: リリースと衛生チェック入口GUARDRAILS.md: 行動制約と鮮度管理入口
docs/requirements.md/docs/spec.md/docs/design.md/docs/CONTRACTS.mdは互いに矛盾してはならない。- 仕様変更時は
CHANGELOG.mdの[Unreleased]に差分を記録する。
RUNBOOK.mdは次の情報を保持する。- 実行手順
- 現在の運用判断
- 未解決事項
- 参照リンク
- incident / rollback / release などの実行時手順
RUNBOOK.mdは次の情報を原則として保持しない。- 完了済みタスクの長い一覧
- 検収結果の詳細表
- リリース履歴の詳細
docs/tasks/*.mdやdocs/acceptance/*.mdと同じ内容の複製
- RUNBOOK に完了済み項目を書く場合は、現在の運用判断に必要な短い参照に限定する。
- 完了済み詳細を記録する場合は
docs/completion-record.mdへ索引として記載し、 詳細は task / acceptance / release / changelog の正本へリンクする。
機械チェックは、少なくとも次の条件を検出対象にする。
| check | 条件 | 期待動作 |
|---|---|---|
| Completed table growth | RUNBOOK に完了済み項目の表が一定行数以上追加される | warning |
| Missing canonical link | RUNBOOK の完了済み記述に task / acceptance / completion record へのリンクがない | warning |
| Duplicate completion detail | RUNBOOK と completion record / acceptance に同じ詳細表が重複する | warning |
| Current-ops exception | 現在の運用判断に必要な短い完了参照である | pass |
この check は tools/ci/check_runbook_slimming.py を実装入口とする。
- 最低限次のトップレベルキーを保持する。
generated_atnodesedges
generated_at- 5 桁ゼロ埋めの世代番号であること。
- 例:
00025
nodes- キーはノード ID であること。
- 値は少なくとも次を持つこと。
rolecapsmtime
edges- 2 要素配列の配列であること。
- 各要素は
["from", "to"]の形式で依存関係を表すこと。
- 最低限次のトップレベルキーを保持する。
generated_atindex_snapshotrefresh_commandcuration_notesnodes
generated_atindex.jsonと同じ更新サイクルの 5 桁ゼロ埋め世代番号であること。
nodes[*]- 少なくとも次を持つこと。
idrolereasoncapsedgeslast_verified_at
- 少なくとも次を持つこと。
- カプセルは point read 用の最小要約として振る舞う。
- 最低限次のキーを持つこと。
idrolesummarydeps_indeps_outriskstestsgenerated_at
- 必要に応じて
public_apiを持てること。
- エントリポイントは
python tools/codemap/update.pyとする。 - 主要引数は次のとおり。
--targets- 明示ターゲットによる更新対象指定
--emitindex/caps/index+caps
--sincegit diff --name-only <ref>...HEADベースの対象抽出
--radius- 依存 hop 数制御
--radiusの仕様は次のとおり。- 既定値は
2 0は seed ノードのみ更新1以上は指定 hop 数まで近傍展開- 負数は CLI エラー
- 既定値は
- ルートターゲットに
docs/birdseye/、index.json、hot.json、caps/を含めた場合は、全カプセルを探索起点として扱うこと。 index.jsonを更新する場合、hot.jsonも同じ更新サイクルへ揃えること。
AutoSaveRequestは少なくとも次のフィールドを持つ。project_idsnapshot_deltalock_tokensnapshot_idtimestampprecision_modelatency_ms(任意)lock_wait_ms(任意)
AutoSaveResultは少なくとも次のフィールドを持つ。statusapplied_snapshot_idnext_retry_at
statusは少なくとも次を返せること。okskipped
- ロックトークンの検証を行うこと。
- snapshot ID の単調増加を検証すること。
- rollout gate と checklist 完了条件を評価できること。
- 主な例外は次のとおり。
LockTokenInvalidErrorSnapshotOrderViolation
- commit 時には
autosave.snapshot.commitを emit できること。 - payload は少なくとも次を含められること。
project_idsnapshot_idprecision_modelatency_ms(任意)lock_wait_ms(任意)
MergePipelineRequestは少なくとも次のフィールドを持つ。project_idrequest_idmerged_snapshotlast_applied_snapshot_idlock_tokenautosave_lag_ms(任意)latency_ms(任意)lock_wait_ms(任意)precision_mode_override(任意)
MergePipelineResultは少なくとも次のフィールドを持つ。statusprecision_moderesolved_snapshot_idlock_released
statusは次のいずれかであること。mergedconflictedrolled_back
precision_modeはbaselineまたはstrictとする。strictでは valid なlock_tokenを必須とする。baselineでは lock release を許可できること。
- Merge は
merge.pipeline.metricsを emit できること。 - payload は少なくとも次を含められること。
precision_modestatusmerge.success.ratemerge.conflict.ratemerge.autosave.lag_mslock_validatedresolved_snapshot_idlatency_ms(任意)lock_wait_ms(任意)
StructuredLoggerは通常の JSON Lines ログ出力に加え、任意のevidence_sink互換引数に加え、任意個のpluginsを受け取れること。- 各 plugin は
handle_inference(record)を実装し、logger 本体は plugin の中身を 知らずに推論レコードを引き渡せること。 - plugin は import 文字列
module:attributeと options の組み合わせから 生成できること。 StructuredLogger.from_plugin_specs(...)は plugin spec 配列から logger を 組み立てられること。StructuredLogger.from_plugin_config(...)は mapping または config file path から plugin spec を解決して logger を組み立てられること。- config root は top-level の
inference_plugins配列、または配列直下のどちらかを 受け付けること。 - file config は少なくとも
.jsonを受け付け、.yaml/.ymlは yaml loader が利用可能な環境で受け付けること。 - config file の shape は
schemas/inference-plugin-config.schema.jsonで共有し、 sample config と同期すること。 - Evidence 連携先の契約は
../agent-protocols/schemas/Evidence.schema.jsonを正本とすること。 - 追跡対象は LLM の推論 1 回ごとの行動証跡とし、
InferenceLogRecordからEvidenceへ 1:1 で変換すること。
StructuredLogger.inference()は既存どおり常に通常ログを 1 行出力すること。extra.agent_protocolが無い場合、Evidence の生成は行わず通常ログだけで完了すること。extra.agent_protocolがある場合、Evidence sink は schema 互換の JSON を生成すること。extra.agent_protocolがあるにもかかわらず必須フィールドが欠落する場合は、 変換専用の例外を返して不正な Evidence を出力しないこと。
- 最低限次のキーを受け付けること。
evidence_idtask_seed_idbase_commithead_commitactor
- 次のキーは任意入力として受け付けること。
start_timemodel_versionparametersparameters_hashtoolspolicy_verdictstale_statusmerge_resultdiffdiff_hashapprovals_snapshotenvironment
- 共通フィールドは次の固定値または導出値を使うこと。
schemaVersion:1.0.0kind:Evidencestate:Publishedversion:1
- 時刻は次のように解決すること。
createdAt/updatedAt/endTime:InferenceLogRecord.timestampstartTime:extra.agent_protocol.start_timeがあればそれ、無ければtimestamp
- ハッシュは
sha256:<hex>形式で正規化入力から算出すること。inputHash:promptoutputHash:responsediffHash:diff_hashがあればそれ、無ければdiffmodel.parametersHash:parameters_hashがあればそれ、無ければparameters
modelは次のように解決すること。name:InferenceLogRecord.modelversion:model_versionがあればそれ、無ければunknownparametersHash: 上記導出値
toolsはextra.agent_protocol.toolsがあればそれを使い、 無ければ["StructuredLogger"]を使うこと。environmentは次の既定値を持てること。os: 実行環境の OS 名runtime: 実行中 Python ランタイムcontainerImageDigest:uncontainerizedlockfileHash: repo root の既知 lockfile から導出したハッシュ。 lockfile が無い場合は sentinel 値のハッシュを使うこと。
staleStatusは指定が無ければ次を使うこと。classification:freshevaluatedAt:InferenceLogRecord.timestamp
mergeResultは指定が無ければ{"status": "not_applicable"}を使うこと。policyVerdictは指定が無ければmanual_review_requiredを使うこと。
- Evidence sink は 1 Evidence につき 1 JSON object を生成すること。
- file writer plugin は UTF-8 の JSON Lines として末尾追記できること。
- Evidence 出力は通常ログの内容を変更してはならないこと。
- 本機能は
workflow-cookbook自身へhermes-agentを組み込むものではない。 workflow-cookbookは、下流ソフトウェアが独自実装できる 自己改善ループの契約を外向きに提供する。- 本機能は任意であり、未導入の下流ソフトウェアに必須ではない。
- 本機能は原則としてリリース後運用で有効化する。
- 開発中や作成途中の変更に対して、本機能の利用を必須条件としない。
workflow-cookbookは次を正本として扱う。- reflection summary
- skill draft
- recall response
- user / workspace model snapshot
ReflectionSummaryは少なくとも次を持つこと。session_idtask_idまたはintent_idobjectivechangeslessonsopen_questionsnext_actionssources
sourcesは acceptance / evidence / docs reference のいずれかを保持できること。
SkillDraftRecordは少なくとも次を持つこと。draft_idsource_session_idtitleproblemproposed_stepsreview_statelinked_acceptance_idslinked_evidence_ids
review_stateは少なくとも次を扱えること。draftreviewapprovedrejected
approved以外の draft は公開 skill として扱わないこと。
RecallResponseは少なくとも次を持つこと。querysummaryhitsstale
hits[*]は少なくとも次を持つこと。source_typesource_idexcerptreason
- recall は raw transcript 全文ではなく、 summary と根拠断片に正規化して返すこと。
UserModelSnapshotは少なくとも次を持つこと。user_idpreferencesapproval_styleoutput_conventionsreviewed_at
WorkspaceModelSnapshotは少なくとも次を持つこと。workspace_idconstraintspreferred_docsreviewed_at
- 長期保持される snapshot は review 済みであること。
- nudge は少なくとも次を持つこと。
nudge_idreasontarget_kindtarget_refsuggested_actioncreated_at
- nudge は自動変更ではなく、次回セッションへの提案として扱うこと。
- nudge はリリース前の未完了作業へ割り込んで必須フロー化しないこと。
- 次の要素は下流ソフトウェアで差し替え可能であること。
- memory store
- search backend
- summarizer
- skill registry
- scheduler
- 上記差し替えにかかわらず、
ReflectionSummary、SkillDraftRecord、RecallResponseの最低フィールドは維持すること。
- 収集元は次のいずれか、または両方を受け付けること。
--metrics-url--log-path
- どちらも未指定の場合は
MetricsCollectionErrorを返すこと。 - 既定エラーメッセージは
No metrics input configured: provide --metrics-url or --log-pathを用いること。
--suite qaを提供すること。qasuite の既定出力先は.ga/qa-metrics.jsonとすること。
- 結果は標準出力へ JSON として出力すること。
output_pathがある場合はファイルにも書き出すこと。--pushgateway-url指定時は PushGateway へ PUT 送信できること。
.github/workflows/reusable/*.ymlはworkflow_callにより派生リポジトリから再利用できること。governance/policy.yamlは少なくとも次の責務を持つこと。- 論理 gate ID としての
required_jobsの基準 forbidden_pathsの基準
- 論理 gate ID としての
- 論理 gate ID と GitHub 上の実 check 名の対応は
docs/ci-config.mdで管理すること。 docs/ci_phased_rollout_requirements.mdと workflow 群は、Phase 0〜3 の段階導入方針を追跡できること。- Python CI は単体テスト・結合テストの実行と coverage 下限 80% の確認を 標準で行えること。
.github/dependabot.ymlは GitHub Actions 依存更新を週次で監視すること。.github/workflows/security.ymlは security posture 確認と reusable security CI を連結すること。- security posture 確認では少なくとも次を検証できること。
docs/security/SAC.mddocs/security/Security_Review_Checklist.md- vulnerability alerts
- Dependabot security updates
- secret scanning
- push protection
- security posture の検証 CLI は GitHub token がある場合に remote repository settings を確認できること。
docs/CONTRACTS.mdの契約は feature detection で扱うこと。- 少なくとも次を optional な外部入力として扱えること。
.ga/qa-metrics.jsongovernance/predictor.yaml
- これらが未提供でも Cookbook 側は正常動作しなければならない。
| artifact | 正本として扱う内容 |
|---|---|
docs/tasks/*.md |
作業の背景、目的、要求、完了条件、レビュー観点 |
docs/acceptance/*.md |
実行コマンド、テスト結果、検収判定、参照資料 |
docs/completion-record.md |
完了事項の要約索引と正本リンク |
CHANGELOG.md |
ユーザー向け変更履歴 |
docs/releases/*.md |
リリース証跡、承認、rollback/rehearsal 記録 |
status: doneの Task Seed は、原則として対応する acceptance record を参照する。- acceptance record が不要な小変更では、Task Seed または completion record に 例外理由を短く記載する。
- completion record は task / acceptance / release / changelog のいずれかへリンクし、 単独の正本として完了を主張しない。
- completion record の 1 項目は次の最小情報を持つ。
- 日付
- 完了テーマ
- 状態
- 正本リンク
- 判定 (
go/hold/follow-up required)
同期チェックは、少なくとも次を検出対象にする。
| check | 条件 | 期待動作 |
|---|---|---|
| Done task without acceptance | docs/tasks/*.md が status: done だが acceptance または例外理由がない |
fail or warning |
| Completion without source | completion record の項目に正本リンクがない | fail |
| Acceptance orphan | acceptance record が task / release / completion のどれからも参照されない | warning |
| Changelog drift | release/changelog にある完了事項が completion record から辿れない | warning |
この check は tools/ci/check_completion_trace.py を実装入口とする。
agent-tools-hub と workflow-cookbook の責務境界は次のとおり。
| 判断対象 | 正本 | 内容 |
|---|---|---|
| Agent_tools 全体の repo 選定 | agent-tools-hub |
どの repo / Skill を使うべきかの横断案内 |
| 複数 repo の初動整理 | agent-tools-hub |
repo map、入口、既存 Skill へのルーティング |
| Workflow Cookbook 内の作業分割 | workflow-cookbook/HUB.codex.md |
cookbook 内の docs / Birdseye / Task Seed への分解 |
| Birdseye / Task Seed / Acceptance / CI / Evidence の手順 | workflow-cookbook |
実行手順、契約、検収、証跡 |
| 他 repo との接続 | workflow-cookbook |
plugin config、Evidence、Acceptance、Task state などの連携契約 |
境界ルール:
workflow-cookbook/HUB.codex.mdは Agent_tools 全体の routing table を複製しない。workflow-cookbookから他 repo を説明する場合、連携契約と実行手順に限定する。- repo 選定や Skill 選定の説明が必要な場合は
agent-tools-hubを参照する。 workflow-cookbookの改善案は、Birdseye、Task Seed、Acceptance、CI、Evidence、 release/security operations、self-improvement loop の品質向上に限定する。
release 前の version 情報は、次の artifact 間で整合していること。
| artifact | 期待値 |
|---|---|
README.md badge |
最新 release または明示された current version |
pyproject.toml project.version |
package として配布する version |
CHANGELOG.md |
release version と日付 |
docs/releases/v*.md |
release note の filename と title |
| git tag | vX.Y.Z 形式の release tag |
| GitHub Release | tag / changelog / release docs と対応する published release |
整合ルール:
- 同一 release に属する version は
vprefix の有無を正規化して比較する。 CHANGELOG.mdにある release version は、対応するdocs/releases/vX.Y.Z.mdを持つこと。- release docs の title は filename の version と一致すること。
- package 配布を行う release では
pyproject.tomlの version と release version が 一致すること。 - package 配布を行わない docs-only release では、例外理由を release docs または acceptance record に記録すること。
将来の checker は tools/ci/check_release_evidence.py の責務を拡張するか、
小さな check_version_consistency.py として実装する。
既存の script 入口は後方互換として維持する。
| 既存入口 | 将来 entrypoint 例 | 責務 |
|---|---|---|
python tools/codemap/update.py |
workflow-cookbook birdseye update |
Birdseye / Codemap 更新 |
python tools/ci/check_ci_gate_matrix.py |
workflow-cookbook gate ci-matrix |
logical gate と workflow/docs の整合確認 |
python tools/ci/check_acceptance.py |
workflow-cookbook acceptance check |
acceptance record validation |
python tools/ci/generate_acceptance_index.py |
workflow-cookbook acceptance index |
acceptance index 生成 |
python tools/ci/check_release_evidence.py |
workflow-cookbook release evidence |
release 証跡確認 |
CLI 互換ルール:
- package entrypoint は既存 script と同じ exit code 意味論を維持する。
- 既存 script を削除せず、少なくとも 1 release cycle は wrapper として残す。
- 新旧入口の smoke test を追加し、同一 fixture に対して同等の結果を返すことを確認する。
- help text には対応する docs、主要入力、出力、strict mode の有無を含める。
docs gate checker は次の段階を持てる。
| stage | 意味 | CI 動作 |
|---|---|---|
| observe | 導入直後。結果を収集する | pass with notice |
| warn | 既存例外を許容しつつ差分へ注意を出す | pass with warning |
| enforce | 既定違反を merge blocker にする | fail |
昇格条件:
- checker ごとに owner、対象ファイル、既定 stage、次回見直し日を
docs/ci-config.mdまたはgovernance/policy.yamlから追跡できること。 warnからenforceへ上げる前に、既存違反の棚卸しと例外理由を記録する。- false positive が発生した場合は、checker の修正または明示 suppression を優先し、 gate 全体を無効化しない。
- rollback 条件は「誤検知で通常 docs 更新を阻害する」「既存 release 手順を壊す」 「downstream reusable workflow が互換性を失う」のいずれかとする。
workflow plugin capability catalog は、少なくとも次を保持する。
| field | 内容 |
|---|---|
capability |
capability 名。例: docs.resolve |
required_method |
plugin が提供すべき method 名 |
input_contract |
入力 DTO または mapping の最低フィールド |
output_contract |
出力 DTO または mapping の最低フィールド |
error_policy |
timeout / retry / fail-open / fail-closed |
trace_event |
runtime trace に残す event 名 |
schema_ref |
関連 schema または sample config |
catalog 整合ルール:
tools/workflow_plugins/interfaces.py、runtime.py、config schema、tools/workflow_plugins/README.md、examples/workflow_plugins*.jsonは capability 名と required method で一致すること。- inference plugin についても
schemas/inference-plugin-config.schema.json、 sample config、StructuredLoggerの plugin loader が矛盾しないこと。 - capability 追加時は、sample config と validation test を同時に更新する。
- capability rename は破壊的変更として扱い、migration note と互換 alias の有無を明記する。
large module は TECH_DEBT_REGISTER.md を正本として管理する。
対象基準:
- 500 行を超える Python module
- 20 関数を超える Python module
- CLI、I/O、集計、外部通信、出力が 1 ファイルに集中している module
分割ルール:
- まず
cli.pyと core logic を分け、既存 entrypoint は wrapper として維持する。 - 互換維持のため、既存 import path から public function を re-export できること。
- 分割前後で既存 unit test と CLI smoke test が同じ結果を返すこと。
- 分割計画には対象 module、分割先、優先度、期限、関連テスト、抑制 expiry を含める。
- suppression は永続化せず、期限切れ時に再評価する。
- ドキュメント、Birdseye 生成物、参照実装、CI テンプレートは相互に矛盾してはならない。
- 公開インターフェース変更時は、関連テストと関連文書を同時に更新すること。
- 変更履歴は
CHANGELOG.mdの[Unreleased]に追記すること。 - version、CLI entrypoint、plugin capability、large module split のいずれかを
変更する場合、互換性影響を
CHANGELOG.mdまたは該当 task / acceptance に記録すること。
- 文書整合
requirements/spec/design/CONTRACTSが矛盾しないこと。
- RUNBOOK slimming
- RUNBOOK に完了済み詳細が増える変更では、completion record への分離要否が確認されていること。
- completion record の各項目が正本リンクを持つこと。
- Task / Acceptance / Completion trace
status: doneの task から acceptance または例外理由へ辿れること。- completion record が単独の完了正本になっていないこと。
- Agent-tools-hub boundary
workflow-cookbook/HUB.codex.mdが Agent_tools 全体の repo routing を複製していないこと。- 横断 repo 選定が必要な文脈では
agent-tools-hubを参照していること。
- Version consistency
- README badge、
pyproject.toml、CHANGELOG.md、release docs、git tag が release 文脈で矛盾しないこと。
- README badge、
- Stable CLI entrypoints
- 新しい package entrypoint が既存 script 入口と同じ fixture で同等の結果を返すこと。
- Docs gate escalation
- checker ごとの stage、owner、昇格条件、rollback 条件が追跡できること。
- Plugin capability catalog
- runtime、schema、README、sample config の capability 定義が一致すること。
- Large module split
- large module の suppression が
TECH_DEBT_REGISTER.mdの分割計画へリンクしていること。
- large module の suppression が
- Birdseye 整合
README.md、docs/BIRDSEYE.md、docs/birdseye/README.md、GUARDRAILS.md、RUNBOOK.mdの更新手順が一致すること。index.json.generated_atとhot.json.generated_atが同じ更新サイクルであること。
- 代表テスト
tests/test_codemap_update.pytests/autosave/test_project_lock_service.pytests/merge/test_precision_mode_pipeline.pytests/test_collect_metrics_cli.pytests/perf/test_collect_metrics_autosave_merge.pytests/test_structured_logger.pytests/test_agent_protocol_evidence.py
- Python 系ゲート
pytest --cov=. --cov-report=term-missing --cov-fail-under=80
- 要件:
docs/requirements.md - 設計:
docs/design.md - 受入基準:
EVALUATION.md - 実行手順:
RUNBOOK.md - 境界一覧:
docs/interfaces.md - 外部契約:
docs/CONTRACTS.md