Context Pack v1 仕様

本書における Context Pack は、人間が作る設計成果物を、AIエージェントが実装/テストへ落とすための入力契約です。章末演習・実務適用では、この形式を維持します。

目的

  • AIに委任する範囲(実装/テスト/リファクタ)を明確化する
  • AIが勝手に解釈・改変しやすい点(境界/不変条件/権限/失敗条件)を固定する
  • 検証可能性(テスト/可換性チェック)を先に確保する

フォーマット(推奨: YAML)

Context Pack は YAML/JSON のいずれでもよいが、レビュー容易性のため YAML を推奨します。

機械可読スキーマ(JSON Schema)は次を参照してください。

検証コマンド

依存導入(初回のみ)は次のとおりです。

python3 -m pip install -r scripts/requirements-qa.txt

minimal lint(必須項目/型/ID重複/参照整合の簡易検証)を実行します。

python3 scripts/validate-context-pack.py docs/examples/minimal-example/context-pack-v1.yaml
python3 scripts/validate-context-pack.py docs/examples/common-example/context-pack-v1.yaml

schema validation(JSON Schema)を実行します。

python3 scripts/validate-context-pack-schema.py docs/examples/minimal-example/context-pack-v1.yaml
python3 scripts/validate-context-pack-schema.py docs/examples/common-example/context-pack-v1.yaml

minimal lint と schema validation は目的が異なるため、併用を推奨します。

  • minimal lint: 書きやすさ・レビュー容易性を優先し、必須キー/型、ID重複、参照整合など運用上の破綻を早期に検知する
  • schema validation: 公開している JSON Schema と成果物のドリフト(仕様準拠)を機械的に検知する(参照整合や重複などの横断チェックは対象外)

最小構成(v1)は以下です。

1. Problem statement

  • 目的(Goals)
  • 非目的(Non-goals)
  • スコープ(In/Out)

2. Domain glossary

  • 用語定義(日本語/英語、別名)
  • 主要な略語

3. Objects

ドメインの「型/状態/権限/エラー」を列挙します。

  • Entity / Value Object
  • State machine(必要な場合)
  • Error taxonomy(分類)

4. Morphisms

操作/API(コマンド/クエリ)を列挙し、最低限以下を含めます。

  • 入力/出力
  • Pre/Post(前提/事後条件)
  • 失敗条件(エラー)
  • 監査(必要な場合)

5. Diagrams(可換図式=不変条件)

システムが満たすべき不変条件を列挙します。

必須項目は次のとおりです。

  • 条件(自然言語)
  • 検証方法(受入テスト/プロパティ/チェック観点)

6. Constraints

  • 性能(SLO/タイムアウト/再試行)
  • セキュリティ(権限/監査/PII)
  • 運用(可観測性/障害対応)

7. Acceptance tests(最小セット)

DoD として必要な受入テストを列挙します(シナリオ/期待結果)。

8. Coding conventions

  • 言語/フレームワーク
  • ディレクトリ構成
  • 依存(追加禁止も含む)

9. Forbidden changes

AIが勝手に変更してはいけない事項を明示します。

例は次のとおりです。

  • 公開APIの互換性
  • 不変条件(Diagrams)
  • 権限境界(ACL/RBAC)

最小の有効例(Minimal valid example)

以下は「必須キー+最小要素」だけで成立する例です(章末演習の叩き台)。

“コピペして使う最小例” の SSOT はファイルとして管理します。

version: 1
name: minimal-example

problem_statement:
  goals: ["最小の例として成立させる"]
  non_goals: ["仕様追加をしない"]

domain_glossary:
  terms:
    - term: Order
      ja: 注文

objects:
  - id: Order
    kind: entity

morphisms:
  - id: PlaceOrder
    input: { orderId: "OrderId" }
    output: { orderId: "OrderId" }
    pre: ["Order.state == Draft"]
    post: ["Order.state == Placed"]
    failures: ["InvalidState"]

diagrams:
  - id: D1-order-state
    statement: "PlaceOrder  Draft のみに適用できる"
    verification: ["Draft 以外では InvalidState になる"]

constraints: {}

acceptance_tests:
  - id: AT1-happy-path
    scenario: Draft の Order に PlaceOrder を適用する
    expected: ["Order.state == Placed"]

coding_conventions:
  language: language-agnostic
  directory: []
  dependencies: {}

forbidden_changes:
  - "Diagrams を満たさない変更"

例(共通例題)

共通例題(注文処理)の Context Pack v1 は次を参照します。