Story
Rule
✓Automated rule
Example
Question
Ubiquitous Language
実装リポジトリがlivtリポジトリを見てテスト駆動で自動化する→
livtはlivtリポジトリをMCPサーバーとして公開し、消費側はlivtのソースを読まずに仕様を取得する
✓ automated
#R-01
実装リポジトリは別ディレクトリにあるlivtリポジトリの場所を指定できる
✓ automated
#R-02
各レスポンス(ツール・リソース)はlivtリポジトリのバージョン(gitリビジョン)を返し、仕様のズレを防ぐ
✓ automated
#R-03
実装リポジトリはストーリー単位で実例マッピングをリソースとして取得できる
✓ automated
#R-04
実装リポジトリはルール単位で仕様をリソースとして取得できる
✓ automated
#R-05
実装リポジトリは利用可能なストーリーの一覧を取得できる
✓ automated
#R-06
消費側は stdio で livt mcp をサブプロセスとして起動し、消費者ごとに1対1で接続する
✓ automated
#R-07
消費側は常駐する1つの livt mcp --http サーバーをURL参照で共有する
✓ automated
#R-08
実装リポジトリはストーリーマップをリソースとして取得できる
✓ automated
#R-09
実装リポジトリはストーリー本文をリソースとして取得できる
✓ automated
#R-10
実装リポジトリはユビキタス言語の用語をリソースとして取得できる
✓ automated
#R-11
公開対象の一覧はツールとリソーステンプレートで提供し、concrete resources と変更通知には広げない
✓ automated
#R-12
livtリポジトリの参照を成果物に残すときは、IDではなくlivt URIで引用する
✓ automated
#R-14
livtリポジトリの所在は、消費側workspaceにコミットされる宣言で供給する
#R-15
実装リポジトリはユビキタス言語の用語の一覧を取得できる
✓ automated
#R-16
Questions
環境変数 LIVT_ROOT でlivtリポジトリのルートディレクトリを指定する
#EX-01
CLI引数 --root が環境変数より優先される
#EX-02
いずれも未指定ならカレントディレクトリをルートとする
#EX-03
出力に spec_version としてlivtリポジトリのgit HEAD(rev-parse --short の短縮リビジョン)が含まれる
#EX-01
livtリポジトリがgit管理でない場合 spec_version は空になる
#EX-02
resources/templates/list に livt://mapping/{story_key} が現れる
#EX-01
resources/read livt://mapping/{story_key} でルール・実例・質問を取得する
#EX-02
各ルールは自分のリソースURI(livt://mapping/{story_key}/rule/{rule_id})を持つ
#EX-03
resources/read livt://mapping/{story_key}/rule/{rule_id} で単一ルールと実例を取得する
#EX-01
存在しないキーやルールIDのURIは not found を返す
#EX-02
クライアントが livt mcp をサブプロセスとして spawn し、標準入出力で接続する
#EX-01
livtリポジトリの場所は --root / LIVT_ROOT で指す(消費側に別チェックアウトが要る)
#EX-02
1消費者につき1プロセスで、サーバーは共有しない
#EX-03
livtリポジトリ側で livt mcp --http localhost:5488 を常駐起動する
#EX-01
複数リポジトリが http://localhost:5488/mcp を共有参照し、per-repo の LIVT_ROOT は不要
#EX-02
ステートレス・読み取り専用なので1プロセスで複数クライアントを捌く
#EX-03
list_story_maps で全ストーリーマップの名前とリソースURI(livt://story-map/{map_name})を取得する
#EX-01
resources/read livt://story-map/{map_name} でアクティビティ・ステップ・ストーリーカード・リリースを取得する
#EX-02
マップ名はビルド出力(story-map/{name}.html)と同じ表示名で、URI上はパーセントエンコードして表す
#EX-03
存在しないマップ名は not found を返す
#EX-04
resources/read livt://story/{story_key} でストーリーの名前・本文・frontmatterメタ(例 issue)を取得する
#EX-01
list_stories の各エントリとストーリーマップ内のストーリーカードは、ストーリーのリソースURI(livt://story/{story_key})を示す
#EX-02
実例マッピングがあるストーリーは、そのリソースURI(livt://mapping/{story_key})も示す
#EX-03
存在しないストーリーキーは not found を返す
#EX-04
resources/read livt://ubiquitous/{term_key} で用語の名前と定義本文を取得する
#EX-01
実例マッピング・ストーリーマップのレスポンスは ubiquitous の各用語キーに解決済みの名前とリソースURIを添える(既存の ubiquitous フィールドはそのまま維持する)
#EX-02
用語ファイルがないキーはURIなしでキーのみを示す
#EX-03
存在しない用語キーは not found を返す
#EX-04
resources/templates/list に全リソーステンプレート(mapping・rule・story-map・story・ubiquitous)が現れる
#EX-01
resources/list への concrete resources 掲載や subscribe は提供せず、毎リクエスト読みのステートレスを保つ
#EX-02
消費側はlivtリポジトリの更新を spec_version の変化で検知する
#EX-03
list_stories の各エントリは所属オポチュニティ(マップ名とストーリーマップのリソースURI)を示し、無所属なら空になる
#EX-01
list_stories に opportunity パラメータ(マップ名)を指定すると、そのマップに載るストーリーだけが返る
#EX-02
存在しないオポチュニティ名の指定は空の一覧を返す
#EX-03
livt://story/{story_key} リソースも所属オポチュニティを示す
#EX-04
MCPサーバは接続時にこの引用作法を指示する
#EX-01
テストコメント・Issue本文・コミットメッセージが対象
#EX-02
裸のR-13 EX-01は、どのマッピングの話か復元できない
#EX-03
デプロイ済みサイトのURLを一次の引用形にしない
#EX-04
束縛の契約は環境変数 LIVT_ROOT で、mise・direnv などコミットされるworkspace設定から供給する
#EX-01
MCPのspawnは mise exec -- livt mcp のようにランチャー経由にし、shell外の起動でも同じ宣言が効く
#EX-02
CIはlivtリポジトリをcheckoutし、そのパスをLIVT_ROOTに束縛する(宣言はworkflowにコミットされる)
#EX-03
値は {{config_root}}/../ のような相対参照で書け、隣接checkoutの配置規約ごと機械非依存にコミットできる
#EX-04