ベストプラクティス
仕様
宣言的に書く、物語的にではなく。 contract:、invariant:、test:、failure: のようなセクションを使う。番号付きステップや散文は使わない。エージェントは速く読み、精確な宣言に従う。
実装に影響する決定だけを閉じる。 plan に引き渡す前に解決すること:契約、データ形状、失敗モード、テスト基準。哲学的な議論や「あれば良い」機能は deferred または Working notes に残す。
コードはパスで参照し、貼り付けない。 仕様は何を作るかについての決定であり、どう作るかのウォークスルーではない。
計画
タスクは30〜60分。 エージェントが推論できるほど原子的に。大きすぎると可視性を失い、小さすぎるとオーバーヘッドが勢いを殺す。
受け入れ条件は実行可能。 各タスクの受け入れ条件はCI/人間が検証できるものでなければならない:テスト名、コマンド、またはスクリプト。曖昧にせず、理想論にしない。
[parallel] は本当に独立している場合のみマーク。 共有状態、エラー処理、または閉じていない契約があるタスクは並行ではない。過剰マークは壊れたマージにつながる。
Gitワークフロー
RED-GREEN-refactorサイクルごとに一回コミット。 思考を履歴に残す。後でデバッグするときに役立つ。
各サイクル後にドキュメントを同期。 コミット直前。待つと何を変えたか、なぜ変えたかを忘れる。
説明的なブランチ名を使う。 feature1 ではなく feat/oauth-github。複数のworktreeがある時にナビゲートしやすい。
大規模プロジェクト
マイルストーンが≥3つある場合はロードマップを使う。 最初から全部計画しようとしない。現在のものだけ plan して、学習しながらスタブを更新する。
現在のマイルストーンを明確にマーク。 M1に ← 今詳細に計画 で意図を示す。ship後、M2を計画する前にマーカーを移動する。
M1後にマイルストーンを修正することを想定。 最初のマイルストーンが残りのコストを教えてくれる。それが要点だ。
デバッグ
まず隔離し、次に仮説を立てる。 最小の再現まで絞り込む。症状が消えるまでコードを削る。その後「なぜ」を問う。
一度に一つの変数だけ変える。 並行仮説は魅力的だが、どの変更が修正したかわかりにくくなる。
テスト
実装ではなく契約をテストする。 契約が「成功時に200を返す」と言うなら、それをテストする。「X関数を呼ぶ」や「データベースYから読む」ではない。
内部のモックなし。 外部境界をモック:HTTP、DB、ファイルシステム。自分のコードをモックするのは実際のバージョンが遅いか非確定的な場合のみ。
いつ諦めるか
前提が本質的に変わったら、止めて再探索する。 解こうとしている問題がもはや問題でないなら、無理に進めない。発見ノートに試みと理由と学びをマークする。
マイルストーンのゴールが≥50%ずれたら、設計に戻る。 計画を延長しない。新しい方向を認め、再開する。
仕様レビューの統合評価 (Spec Review Synthesis)
レビュアーは助言を行い、Coordinator が裁决を下します。 仕様レビュアーは独立したサブエージェントとして専用の役割で動作します。主エージェント(Coordinator)は指摘事項を批判的に評価し、矛盾の解決、漏れの特定を行い、一度の変更で仕様書を修正します。
モデル階層マッピング (Model Tier Mapping)
タスクのリスクに応じてモデルの能力をマッチングさせます。 機械的な修正や Lint チェックには fast、単一コンポーネントの実装には balanced、核心プロトコルや安全レビュー、複雑な状態マシンには strongest を使用します。.praxis/model-tiers.yaml で設定します。
マルチモジュール調整 (Multi-Module Coordination)
Coordinator リポジトリを1つ明示的に指定します。 Coordinator が change-set ID、モジュール横断仕様、ワークスペース計画を所有します。各モジュール仕様で共有契約を重複記述せず、Coordinator 仕様を直接参照します。コミットは依存関係順に行い、Coordinator が最後にコミットします。
ドキュメント同期
リビングドキュメントは事実、ステージングドキュメントは下書きです。 ship の後、仕様はリビングドキュメントに移動します。コード内のテストやコメントは常に最新を維持します。
README は最初の仕様書です。 コードと一致しない場合、PR のレビューは不合格となります。同じルールがすべての公開契約に適用される。