# 出力契約 スタイルガイド このガイドは `output-contracts/` のファイルを作成・編集する際のルールを定義する。 ## テンプレート `templates/reports/` にテンプレートファイルを用意している。新規作成時は参照して使う。 | テンプレート | 用途 | |------------|------| | `plan.md` | タスク計画(標準 / 拡張) | | `architecture-design.md` | アーキテクチャ設計 | | `review.md` | 汎用レビュー結果 | | `security-review.md` | セキュリティレビュー(重大度付き) | | `validation.md` | 最終検証結果 | | `summary.md` | タスク完了サマリー | --- ## 出力契約とは エージェントが出力するレポートの構造定義。ピースYAMLの `report.format` フィールドで使用する。 | 項目 | 内容 | |------|------| | 目的 | エージェント出力の構造を統一し、後続ムーブメントで機械的に参照可能にする | | 配置 | Phase 2 メッセージの `## Instructions` 内(`{{outputContract}}`) | | 対象 | 1つのレポートファイル | | 判断基準 | 「この出力は後続ムーブメントが `{report:filename}` で参照するか?」→ YES | ### 実際の配置先 出力契約は `src/shared/prompts/{lang}/perform_phase2_message.md` の `{{outputContract}}` に展開される。 ``` ## 実行コンテキスト(作業ディレクトリ) ## 実行ルール(ソース変更禁止、レポートのみ) ## Piece Context ## Instructions "レポートとして回答してください。ツールは使えません。" {{outputContract}} ← ★ 出力契約がここに展開される ``` Phase 2 はツール使用不可。エージェントは Phase 1 のセッションを引き継いだ上で、テキスト出力のみでレポートを作成する。 ### インストラクションとの違い | | インストラクション | 出力契約 | |--|-------------------|-------------------| | 目的 | 何をすべきかの手順 | 出力の構造定義 | | 配置 | Phase 1 `{{instructions}}` | Phase 2 `{{outputContract}}` | | 読者 | エージェント(実行時) | 後続ムーブメントのエージェント(参照時) | | 形式 | 自由文 + 箇条書き | ```markdown コードブロック | --- ## 書き方ルール ### 全体構造 出力契約は以下の構造を持つ。 ``` 1. ```markdown コードブロック(フォーマット本体) 2. 認知負荷軽減ルール(該当する場合) ``` ### 出力契約本体 必ず ` ```markdown ` コードブロックで囲む。 ```markdown \`\`\`markdown # レポートタイトル ## 結果: APPROVE / REJECT ## サマリー {1-2文で結果を要約} ## 詳細 ... \`\`\` ``` ### プレースホルダー - `{波括弧}` でプレースホルダーを記述 - エージェントが実行時に埋める内容の説明を簡潔に ```markdown # 良い例 {1-2文で結果を要約} {タスクの1行要約} {影響するモジュールや機能} # 悪い例 {ここにサマリーを記述してください。サマリーは1-2文で簡潔に書いてください。} ← 冗長 ``` ### 結果ステータス レビュー系レポートは結果ステータスを持つ。使用するステータスを `/` で列挙する。 | パターン | 用途 | |---------|------| | `APPROVE / REJECT` | 二値判定(AI Review、Security Review 等) | | `APPROVE / IMPROVE / REJECT` | 三値判定(Architecture Review 等) | | `完了` | 固定値(Summary 等) | ### テーブル 構造化データはテーブルで記述する。 ```markdown # 検証テーブル(チェックリスト形式) | 観点 | 結果 | 備考 | |------|------|------| | 仮定の妥当性 | ✅ | - | # 問題テーブル(番号付き) | # | カテゴリ | 場所 | 問題 | |---|---------|------|------| | 1 | 幻覚API | `src/file.ts:23` | 存在しないメソッド | # ファイルテーブル | 種別 | ファイル | 概要 | |------|---------|------| | 作成 | `src/file.ts` | 概要説明 | ``` テーブルの頻出カラム: | カラム | 使い方 | |--------|--------| | `#` | 連番 | | `スコープ` | 「スコープ内」/「スコープ外」 | | `場所` | `` `src/file.ts:42` `` 形式 | | `結果` | ✅ / ❌ | | `重大度` | High / Medium / Low | | `種別` | 作成 / 変更 / 削除 | ### 認知負荷軽減ルール レビュー系レポートには認知負荷軽減ルールを付加する。出力契約本体の ` ``` ` の後に記述する。 ```markdown **認知負荷軽減ルール:** - APPROVE → サマリーのみ(5行以内) - REJECT → 問題点を表形式で(30行以内) ``` 目的: 問題がない場合に冗長な出力を抑制する。後続ムーブメントの入力コストを下げる。 --- ## DO / DON'T | DO | DON'T | |----|-------| | ```markdown コードブロックで囲む | プレーンテキストで出力契約を書く | | プレースホルダーは `{簡潔な説明}` | 冗長な説明をプレースホルダーに入れる | | テーブルで構造化データを表現 | 箇条書きの入れ子で複雑な構造を表現 | | 認知負荷軽減ルールで出力量を制御 | APPROVE でも REJECT と同量の出力を求める | | ステータスの選択肢を明示(APPROVE / REJECT) | ステータスの定義を曖昧にする | | 場所は `` `file:line` `` 形式 | 自然言語で場所を説明する | --- ## 出力契約に書いてはいけないもの 1. **実行手順**: 「まず〜を確認し」等の手順はインストラクションの責務 2. **判断基準の詳細**: 「何をもって REJECT とするか」はペルソナまたはインストラクションの責務 3. **ピース固有のルーティング**: 「REJECT の場合は fix ムーブメントへ」等 --- ## カテゴリ別パターン ### 計画系(plan, architecture-design) - 結果ステータスなし - セクション構造: 元の要求 → 分析結果 → 実装ガイドライン - テーブル: ファイル構成 ```markdown # タスク計画 ## 元の要求 ## 分析結果 ### 目的 / スコープ / 実装アプローチ ## 確認事項 ``` ### レビュー系(ai-review, architecture-review, qa-review, security-review, frontend-review, cqrs-es-review) - 結果ステータス: APPROVE / REJECT(または APPROVE / IMPROVE / REJECT) - セクション構造: 結果 → サマリー → 検証テーブル → 問題テーブル - 認知負荷軽減ルール付き ```markdown # {種別}レビュー ## 結果: APPROVE / REJECT ## サマリー ## 確認した観点(テーブル) ## 問題点(REJECTの場合)(テーブル) ``` ### レビュー統合系(review-summary) - 複数レビューの結果を1つにまとめる - セクション構造: 総合判定 → 個別結果テーブル → 要注意の問題 → 改善提案 ### コーダー出力系(coder-scope, coder-decisions) - 結果ステータスなし - 実装前(scope)と実装後(decisions)のペア - コンパクト: 10-20行 ### 検証系(validation) - 結果ステータス: APPROVE / REJECT - セクション構造: 結果 → 検証サマリーテーブル → 成果物 → 未完了項目 - ビルド・テストの確認方法を含む ### サマリー系(summary) - 結果ステータス: 固定値「完了」 - セクション構造: タスク → 結果 → 変更内容テーブル → 確認コマンド - ピースの最終出力として使用 --- ## 共通ルール ### 文体 - プレースホルダー以外はそのまま出力される見出し・ラベル - 常体(「〜する」) - 簡潔に ### ファイル命名 - `{role}.md` または `{role}-{modifier}.md` - 例: `plan.md`, `ai-review.md`, `coder-scope.md` - ハイフン区切り - 英語小文字のみ - 番号プレフィックスを付けない(`01-plan.md` ではなく `plan.md`) 番号プレフィックスはピース構造に依存するため、共有ファイルでは使用しない。番号はピースYAMLの `report.name` フィールドで付ける。 ### ファイルサイズ | 種別 | 目安 | 上限 | |------|------|------| | コーダー出力 | 10-20行 | 25行 | | レビュー | 15-25行 | 30行 | | 検証・サマリー | 15-25行 | 30行 | | 計画・設計 | 15-25行 | 30行 | 認知負荷軽減ルールを含む場合は +3-5行。 --- ## チェックリスト - [ ] 出力契約本体が ```markdown コードブロックで囲まれているか - [ ] プレースホルダーが `{簡潔な説明}` 形式か - [ ] レビュー系は結果ステータス(APPROVE / REJECT 等)が明示されているか - [ ] テーブルの場所カラムが `` `file:line` `` 形式か - [ ] 認知負荷軽減ルールが付加されているか(レビュー系) - [ ] 番号プレフィックスを付けていないか(ファイル名) - [ ] 実行手順が混入していないか(インストラクションの責務) - [ ] 30行以内に収まっているか(認知負荷軽減ルール除く)