mcpField
C
close-feature

close-feature

github.com/robertderose開発043 回インストール6 週間前に更新
リポジトリ

close-feature について

実装後の機能をクローズするワークフロースキルです。ドキュメントの整合、変更の検証、レビュー証拠の記録を行い、明示的に選択された場合にのみプルリクエストやマージを実行します。

主な機能

  1. 01機能ドキュメントの整合
  2. 02対象を絞った検証の実行
  3. 03独立した2件のレビュー調整
  4. 04レビューとデリバリー証拠の記録
  5. 05選択操作に応じたPRとマージの制御

活用シーン

  1. 01実装済み機能のクローズ
  2. 02実装内容に合わせたドキュメント更新
  3. 03検証とレビュー証拠の確認
  4. 04機能のPRまたはマージ準備

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/robertderose/dstack --skill close-feature

インストール後、Claude Code で/close-featureを入力して読み込まれたか確認します。

詳細

目的

ライフサイクル実装コーディネーターが終了した後に、このスキルを使用します。/start-feature と同じ人間向けの機能セレクターを受け付けます。納品されたコードを、整合性が取れ、検証済みで、監査可能なプロダクト状態に変換します。<core-dir> は、インストール済みの ../dstack-core スキルディレクトリとして解決してください。

共通の信頼性に関する契約

このワークフローを実行する前に、../dstack-core/references/TRUST-AND-AUTHORITY.md を読み、その指示に従ってください。この契約は、このワークフローにおける規範です。このスキルと矛盾する場合は、より制限の厳しいルールに従い、その矛盾を報告してください。

起動時のバージョン情報

最初にワークフローを変更する前に、../dstack-core/references/SKILL-VERSION.md に従って close-feature のバージョンを確認してください。機能の読み取り専用の解決後、出力された正確な1行を記録し、選択したルートの Beads ノートに追記してから、調整や納品に関する変更を行ってください。結果が stale の場合は npx skills update を警告し、unavailable の場合は最新性を確認できなかったことを記録しますが、オフラインでの作業は妨げません。

納品に関する権限:

  • 実行の指示は、選択した機能に対するローカルでの調整、検証、ワークフローのコミット、Beads の更新を許可します。
  • 明示的な pr モードのみが、プルリクエストの作成を許可します。明示的な merge モードのみが、マージおよびマージ後の作業ツリー削除を許可します。ready モードとアクション未指定モードでは、いずれも許可されません。
  • merge モードでは、デフォルトで早送りのみのマージが許可されます。対象リポジトリの AGENTS.md にマージコミットが認められると明記されている場合に限り、マージコミットが許可されます。
  • このワークフローでは、強制プッシュ、リモートブランチの削除、フックのバイパス、マージが確認される前の作業ツリー削除は行いません。
  • クローズレビューのサブエージェントは読み取り専用です。
  • merge モードでは、選択した機能の分子に対する追記専用の .beads/interactions.jsonl 行の範囲限定の調整と、discovered-from または parent-child エッジのみを通じて、その分子に至る権威ある依存関係の系譜を持つ、別途特定された作業、および以下に記載するインタラクションのみのワークフローコミット2件が許可されます。無関係な行やパスの破棄、追加、書き換えは一切許可されません。

共通のネイティブ Beads 権限

納品に関する変更を行う前に、../dstack-core/references/INTERACTION-BOUNDARY.md を読んでください。ネイティブのリンクされた作業ツリーにおける Beads の権限は共有されており、bd -C は分離の境界にはなりません。連続して行う Beads の調整と納品に関する変更は、beads-workflow-lock.py の配下で実行してください。ベース作業ツリーでクローズアウト時の Beads 変更を行う前に、reconcile-beads-interactions.py preflight を実行してください。これが失敗した場合は、変更を加えずに他の作業ツリーの行を確認してください。リースが使用中の場合、他の作業ツリーのインタラクション行がある場合、またはスナップショットの競合が発生した場合は、納品を中止します。保護されたマージ後ファイナライザーが正常に完了するまで、納品またはルートをクローズしないでください。

サポートされるアクション

  • pr:クローズアウトが正常に完了した後、プルリクエストを作成します。
  • merge:クローズアウトが正常に完了した後、マージして機能を確定します。
  • ready:プルリクエストもマージも行わずに、機能を準備完了の状態にします。
  • アクション未指定:クローズアウトを完了した後、pr、merge、ready のいずれかを選ぶようユーザーに確認します。

実行

1. 有効化して調査する

bd prime を実行し、指定された機能セレクターを読み取り専用で解決します。ルート ID を取得した直後、いかなる申告、メモ、その他の変更を行う前に、--controller-topology-version 3 を指定して <core-dir>/scripts/migrate-review-topology.py guard --root-id <feature-root> を実行します。より新しいマーカーがある場合、または古いレビュー種別が移行されていない場合は、安全側に倒して処理を失敗させます。トポロジーを変更できるのは canonical-primary- worktree の移行ツールだけであり、以前の承認が引き継がれることはありません。セレクターが省略された場合は、アクティブな feat/<slug> ブランチからのみ推定します。現在のブランチが機能ブランチでない場合は、無関係な対応可能作業をクローズせず、セレクターの指定を求めて停止します。

branch=$(git branch --show-current)
feature_selector=${branch#feat/}  # only when branch matches feat/*
uv run <core-dir>/scripts/resolve-feature.py "<feature-selector>" --json
bd show <resolved-root-id> --json

Beads の操作には返されたルート ID を使用し、worktree、レポート、デリバリーコマンドにはその canonical <slug> 参照を使用します。ルートメタデータから docs_reconcile_id、validation_id、review_implementation_integrity_id、review_delivery_integrity_id、delivery_id を解決します。メタデータが欠落している場合の修復に限り、molecule または子の一覧全体を照会します。feat/<slug> を有効化して確認します。ドキュメントが正確かどうかを判断する前に、コミット、実装、テスト、変更ファイルを調査します。

ライフサイクル ID がすべて解決され、アクティブな worktree が feat/<slug> であり、実装コーディネーターがクローズ済みで、クローズ処理を妨げるオープンな migration:reconciliation タスクがない場合に限り、続行します。起動バージョンの記録、またはその他のクローズ処理に関する Beads の変更を行う前に、canonical base worktree を解決して、共有インタラクションの事前チェックを実行します。失敗した場合は、変更を加えずに追記された行を調査し、デリバリーとルートをオープンのままにして停止します。

uv run <core-dir>/scripts/reconcile-beads-interactions.py preflight \
  --worktree <base-worktree> --root-id <root-id>

2. ドキュメントを整合させる

ドキュメント整合ステップを申告します。提供された動作を次の項目と照合します。

  • 機能の design.md;
  • Documentation Impact に正確なページ名が記載されたすべてのページ;
  • 実装によって変更された、読者向けのすべてのページ;
  • 関連するアーキテクチャおよびリファレンスページ;
  • docs/src/planned-features.md;
  • docs/src/features/index.md;
  • docs/src/SUMMARY.md。

次を作成または更新します。

docs/src/features/<slug>/index.md

docs/src/features/_template/index.md を使用します。記録は単独で完結している必要があります。design.md へのリンクは可能ですが、design.md や従来の tasks.md を埋め込んではいけません。SUMMARY.md の feature-design マーカーの間にデザインを登録したうえで、SUMMARY.md と features/index.md の両方にある implemented-feature マーカーの間に実装済みの記録を追加します。

整合性確認の Bead に、提供された動作、意図的な変更、修正した不整合、先送りした作業、ドキュメントのパス、コミット、証拠を記録します。

3. 検証する

検証ステップを申告します。必須の各チェックを passed、failed、unavailable、waived、not-applicable のいずれかに分類します。デザインの検証戦略、すべての子の validation_command、変更パスの所有関係、生成物とドキュメントの整合性、後続の修正によって無効になったチェックから、対象機能のチェックセットを作成します。ドキュメントが変更された場合は、そのチェックセットに加えて uv run --no-project python scripts/check-docs.py を実行します。リポジトリ全体のテストスイートを自動的に実行してはいけません。デザイン、リポジトリのデリバリーポリシー、またはユーザーからの明示的な要求がある場合に限り実行します。正確なコマンド、結果、スキップしたチェック、制限事項、テスト対象のコミット、影響を受けたパスを記録します。変更されていない重点タスクの証拠やテレメトリは再利用できますが、その結果が有効なのは記録されたソースの範囲内に限られます。クローズレビュー後の修正によって無効になるのは影響を受けた結果だけですが、承認前にそれらを再実行する必要があります。必須の証拠がすべて揃い、最新の状態になるまで検証をクローズしてはいけません。unavailable は、ユーザーが該当するチェックを明示的に免除しない限り、ブロッキング要因です。検証の免除には、コマンド、理由、影響を受けるコミット、承認するユーザーの決定、残存リスクを記録します。検証の免除によってレビューの指摘事項が免除されることはありません。

4. 直接割り当てるクローズ担当を2つ導き出し、両方のレビューを実行する

Beads はワークフローのマニフェストです。機能ルート、ドキュメントと検証の課題、実装コーディネーター、 クローズ対象のレビュー課題、実装済みの記録、ロードマップ/ナビゲーション、現在の指摘、および重点チェックの 証拠を、Beads と閲覧者向けファイルから直接読み取ってください。パケット、コレクター、共有コンテキスト、 または二つ目の永続的な割り当てマニフェストを作成しないでください。

権威ある機能作業ツリーから、変更されていない単一の Git ソース境界を固定します。対象は review_boundary_id、reviewed_commit、 reviewed_diff_base、reviewed_diff_digest、および変更パスです。起動前に、担当する review_issue_id、ソース境界、 宣言されたパス/ドメイン/要件 ID、および initial_active を含め、両方のクローズ状態を永続化してください。 検証証拠が欠落または古い場合は、レビューをブロックします。

PI-REVIEWER-ROSTER.md を通じて、implementation-integrity を dstack-implementation-reviewer に、 delivery-integrity を dstack-delivery-integrity-reviewer に解決します。名前が欠落または利用不可の場合、 任意のプロジェクトローカル同期後も、失敗を明示します。役割を暗黙に置き換えてはいけません。

担当する Beads 課題、設計/ドキュメント、重点検証、および固定した Git 境界から、互いに独立した二つの一時的な割り当てを 導き出します。実装割り当てでは、コードとテストのパスを宣言し、コードの動作の正しさ、品質とシンプルさ、セキュリティ、 保守性を対象とします。デリバリー割り当てでは、ドキュメント、検証、Beads、実装済みの記録、ロードマップ/ナビゲーション、 デリバリーに関する主張、および乖離のパスを宣言し、デリバリーの整合性のみを対象とします。コードのレビューは行わず、 従来のデリバリー証拠と乖離の証拠を突き合わせます。

新規のレビュー担当者を正確に二名、並行して起動します。それぞれに自身の割り当てと、固定された読み取り専用のワークツリーのみを 渡します。それぞれが割り当てられた証拠を直接読み取り、範囲を広げずに証拠の欠落を報告します。

担当する各クローズレビュー Bead では、../dstack-core/references/REVIEW-STATE.md の実行可能なレビュー状態と、 ../dstack-core/references/REVIEW-FINDINGS.md の現在オープン中の指摘台帳を使用します。必須のレビュー担当者セット ["implementation-integrity", "delivery-integrity"] を作成し、起動前に initial_active を永続化します。 各初回レポートは、暫定的に承認するか、指摘/判断を記録するか、または未完了となります。最終承認を示唆してはいけません。 割り当て件数、経過時間/コンテキストのテレメトリ(取得可能な場合)、および終了状態は、受け入れの証拠ではなく運用上の証拠として 永続化します。

初回承認は、両方の役割が承認し、指摘、判断、無効化が残っていない場合に限り、実行可能な集約処理を通じてクローズします。 修正、回答済みの判断、または重複範囲の調整の後は、影響を受けるチェックのみを再実行し、兄弟レビューの承認を無効化する前に、 ソース境界全体の完全な照合を一度行います。その後、同じレビュアーを再開し、利用可能な唯一の検証パスを実行します。 同じレビュー境界で三回目のパスを実行してはいけません。重大または保護対象の検証指摘、あるいは検証後の重複範囲は redesign_required とします。その境界に対して再度起動してはいけません。タイムアウト/利用不可の場合は部分的な証拠を保持し、 同じパスでの明示的なインフラ置換を最大一回まで許可します。自動再試行は行いません。置換先には同じソース境界、未解決の指摘、 解決内容、およびレビュー後の差分を渡します。それも失敗した場合は停止します。 redesign_required の停止では、次のレビューの前に、設計/ドキュメント/検証の境界をコミットする必要があります。イベント redesign と新しい review_boundary_id、更新後のレビュー対象ソース境界フィールドおよび宣言をすべて指定して、review-state.py transition を使用します。これにより、唯一の再設計置換を消費し、新しい境界を initial_active にリセットします。過去の承認を再利用したり、履歴上の証拠から承認を推測したりしないでください。免除は、セキュリティ、正確性、検証、アクセシビリティ、データ損失保護以外の、明示的に重要でない指摘に限り適用でき、ユーザーが受け入れた対象範囲と根拠を正確に指定する必要があります。保護対象の指摘は、重大度を問わず免除できません。集約された can_close が true の場合にのみ、両方のクローズレビューを完了します。その後、検証とドキュメントの照合は、証拠が最新の状態を維持している場合に限り完了します。

5. コミットの照合

git status --short を実行し、既存の変更や対象範囲外の変更を特定して、コミット対象から除外します。最終的なコード、テスト、ドキュメント、監査記録の変更をコミットします。コミットメッセージにフィーチャーのルート ID を含めます。コミット SHA とレビュー結果を Beads に記録します。次に実行可能な項目がデリバリーステップになったら、クローズアウトの準備完了です。

6. クローズアウトの操作境界を確定する

デリバリー操作を依頼または実行する前に、ドキュメントの照合、検証、クローズアウトレビュー中に発生したすべての Beads 操作を確定します。リポジトリスコープの beads-workflow-lock.py リースの下で、選択した系列の行のみをフィーチャーブランチにコピーし、操作のみの監査コミットを作成して、ベースのコピーを復元します。

uv run <core-dir>/scripts/reconcile-beads-interactions.py prepare \
  --base-worktree <base-worktree> --feature-worktree <feature-worktree> --root-id <root-id>
git -C <feature-worktree> add .beads/interactions.jsonl
cat > /tmp/dstack-close-interactions-message <<'EOF'
chore(beads): record <slug> close-out state

Beads: <root-id>
EOF
git -C <feature-worktree> commit -F /tmp/dstack-close-interactions-message
uv run <core-dir>/scripts/reconcile-beads-interactions.py finalize \
  --base-worktree <base-worktree> --feature-worktree <feature-worktree> --root-id <root-id>

ベースの操作エクスポートがクリーンで、クローズアウト時の Beads の変更によって行が追加されていない場合に限り、この境界を省略できます。prepare またはインスペクターが無関係な行を報告した場合は、復元やデリバリー/ルートのクローズを行わずに停止します。ユーザーが pr、merge、または ready を選択する前に、ベースがクリーンでなければなりません。その後のデリバリー操作では、リースを再取得して再確認する必要があります。

7. デリバリー操作を選択する

操作が指定されていない場合は、次の質問を1つだけ尋ねます。

create PR
merge
leave ready with no delivery action
ready

delivery:ready を追加し、照合コミットを記録して、デリバリー/ルートを未完了のままにします。

pr

gh pr create でプルリクエストを作成し、その URL を記録して、delivery:pr-open を追加します。マージが確認されるまで、ルートは未完了のままにします。

merge

対象リポジトリの AGENTS.md にあるマージポリシーを読みます。git worktree list --porcelain から <base-branch> がチェックアウトされている作業ツリーを特定します。現在のディレクトリがベースの作業ツリーだと決めつけないでください。ブランチを確認します。ステージングせず、削除せず、無関係な変更を含めずに、作業ツリーがクリーンであることを必須とします。ただし、選択した機能モレキュールのネイティブ Beads が、ベースの作業ツリーで追跡対象のインタラクション証跡を追記している場合に限り、範囲を限定した例外を認めます。

最初のデリバリー変更を行う前に、正規のベース作業ツリーがクリーンであることを必須とします。この事前確認は、デリバリーまたは機能ルートを閉じる前に実行してください。

uv run <core-dir>/scripts/reconcile-beads-interactions.py preflight \
  --worktree <base-worktree> --root-id <root-id>

失敗した場合は、変更を加えずに調査し、デリバリーとルートを未完了のままにしてください。

uv run <core-dir>/scripts/reconcile-beads-interactions.py inspect \
  --worktree <base-worktree> --root-id <root-id>

ベースがダーティなのが、.beads/interactions.jsonl に追記された行だけであり、その issue_id が選択したルート ID、そのドット区切りの子孫 ID、またはローカル Beads の discovered-from 依存関係か parent-child 依存関係のパスを通じてそのモレキュールにつながると個別に特定された作業である場合、ベース側のコピーを復元する前に、その行を機能ブランチ上に保持してください。related エッジと blocks エッジだけでは、この来歴の条件を満たしません。

uv run <core-dir>/scripts/reconcile-beads-interactions.py prepare \
  --base-worktree <base-worktree> --feature-worktree <feature-worktree> --root-id <root-id>
git -C <feature-worktree> add .beads/interactions.jsonl
cat > /tmp/dstack-close-interactions-message <<'EOF'
chore(beads): record <slug> close-out state

Beads: <root-id>
EOF
git -C <feature-worktree> commit -F /tmp/dstack-close-interactions-message
uv run <core-dir>/scripts/reconcile-beads-interactions.py finalize \
  --base-worktree <base-worktree> --feature-worktree <feature-worktree> --root-id <root-id>

prepare の後に、マージ前の Beads への変更を追加で行わないでください。変更した場合は、prepare を再実行し、インタラクションのみのコミットを amend し、finalize を再実行してください。このヘルパーは、ステージ済みの変更、追記以外の編集、不正な形式や重複した行、無関係な issue ID、その他のダーティなパス、またはすべての行が機能ブランチ上にバイト単位で一致する状態でコミットされる前の復元を拒否します。状態が拒否された場合は、何も復元せずに停止してください。それ以外のベースのダーティな状態はすべて、処理を妨げるものとして扱います。

その後、両方の作業ツリーがクリーンであることを確認してからマージします。

test -z "$(git -C <feature-worktree> status --porcelain)"
test -z "$(git -C <base-worktree> status --porcelain)"
git -C <base-worktree> branch --show-current  # must equal <base-branch>
git -C <base-worktree> merge --ff-only feat/<slug>
git -C <base-worktree> merge-base --is-ancestor feat/<slug> <base-branch>

ベースの作業ツリーが見つからない場合、別の理由でダーティな場合、または別のブランチにある場合は、マージする前に停止してください。--ff-only が失敗した場合は、機能ブランチの更新またはリベースが必要であることを報告してください。マージコミットに切り替えてはいけません。AGENTS.md に明記されたリポジトリポリシーがある場合に限り、この既定の動作をマージコミットのフローに置き換えられます。ユーザーが merge を選択しただけでは、マージコミットは許可されません。

マージの成功を確認した後、実際のデリバリー対象を記録します。ただし、デリバリーまたはルートを閉じたり、どちらかの作業ツリーを削除したりしないでください。

merge_sha=$(git -C <base-worktree> rev-parse <base-branch>)
マージ後の必須最終処理

この最終処理が完了するまで、マージ後のクローズアウトは完了していません。マージ済みのベースワークツリーで、次の作業を行います。

  1. docs/src/features/<slug>/index.md を更新し、Status: delivered および Merge commit: <merge_sha>(fast-forward または merge commit と注記)を記載して、実際のプルリクエスト、または not created を記録します。
  2. レコードの Documentation Updated セクションに記載されたすべてのパス、この機能によって変更されたすべての読者向けページ、docs/src/planned-features.md、docs/src/features/index.md、および docs/src/SUMMARY.md の内容を整合させます。マージまたは提供が保留中であるという古い記述を削除します。機械的に検出可能な不整合の発見を、提供整合性レビュー担当者に任せてはいけません。
  3. レコードと、整合させたすべての読者向けパスに対して、セマンティック提供検証ツールを実行します。
uv run <core-dir>/scripts/verify-delivery-state.py \
  --base-worktree <base-worktree> --base-branch <base-branch> \
  --record docs/src/features/<slug>/index.md --merge-sha <merge_sha> \
  --path <reader-facing-path> --path <another-reader-facing-path>

検証ツールは、記録されたマージ SHA がベースブランチの祖先であること、レコードに提供済みと記載され、その SHA が含まれていること、さらに指定されたパスに古い保留中/未マージの提供記述が含まれていないことを確認する必要があります。その後、uv run --no-project python scripts/check-docs.py と、最終処理によって影響を受けるすべてのフォーマッター、リンター、ビルド、テスト、および機能固有のチェックを再実行します。これらの編集にマージ前の検証結果を再利用してはいけません。

最終処理の対象パスのみをステージし、マージ済みのベースブランチでコミットして、両方の SHA を Beads に記録します。

git -C <base-worktree> add docs/src/features/<slug>/index.md <reader-facing-paths> \
  docs/src/planned-features.md docs/src/features/index.md docs/src/SUMMARY.md
cat > /tmp/dstack-post-merge-finalizer-message <<'EOF'
docs(<scope>): reconcile <slug> delivery state

Beads: <root-id>
EOF
git -C <base-worktree> commit -F /tmp/dstack-post-merge-finalizer-message
finalizer_sha=$(git -C <base-worktree> rev-parse HEAD)
# The guarded delivery finalizer records both SHAs in the Beads close reason.

検証ツール、ドキュメントチェック、最終処理のコミット、またはガード付き Beads クローズに失敗した場合は、blocked by post-merge reconciliation と報告し、両方のワークツリーを保持します。提供/ルートをクローズしたり、完了を宣言したりしてはいけません。

最終処理が完了した後に限り、ガード付き提供最終処理ツールを使って、提供と機能ルートをクローズします。このツールは、リポジトリスコープのリースのもとで、マージ/最終処理の証拠とベース境界がクリーンであることを再確認します。直接 bd close コマンドを使って提供/ルートをクローズしてはいけません。ガードは Beads のクローズ理由に Post-merge delivery SHA: <merge-sha>; finalizer commit: <finalizer-sha> を記録します。

uv run <core-dir>/scripts/finalize-feature-delivery.py \
  --base-worktree <base-worktree> --base-branch <base-branch> \
  --record docs/src/features/<slug>/index.md --merge-sha <merge-sha> \
  --finalizer-sha <finalizer-sha> \
  --path <reader-facing-path> --path <another-reader-facing-path> \
  --delivery-id <delivery-id> --root-id <root-id>

これらの最終的な Beads の変更により、マージ済みのベースワークツリーに、選択した機能の新しい操作履歴行が追加される場合があります。その証拠のみを確認してコミットしてください。

uv run <core-dir>/scripts/reconcile-beads-interactions.py verify-post-merge \
  --base-worktree <base-worktree> --root-id <root-id>
git -C <base-worktree> add .beads/interactions.jsonl
cat > /tmp/dstack-delivery-interactions-message <<'EOF'
chore(beads): record <slug> delivery

Beads: <root-id>
EOF
git -C <base-worktree> commit -F /tmp/dstack-delivery-interactions-message

ワークツリーがクリーンなままの場合、このマージ後のコミットは省略します。操作履歴のコミット後、およびクリーンアップ前に検証ツールを再実行します。拒否または追加の変更済みパスがある場合は、クリーンアップを中止し、明示的な整合対応のために保持します。ナビゲーションと実装済みレコードを確認してから、機能ワークツリーを削除します。dstack.activeFeature がまだこの機能を指している場合は、提供完了を確認した後に、そのリポジトリローカル設定をクリアします。別途承認されていない限り、リモートブランチをプッシュまたは削除してはいけません。

次のいずれかの準備状態を 1 つ返します:ready for delivery、ready after reconciliation fixes、blocked by implementation/docs mismatch、または blocked by incomplete validation。あわせて、正規の機能参照と人が読める名称、ルート ID、ドキュメント、証拠、レビュー、コミット、アクション、および Beads の変更を示します。

コメント