mcpField
C
cure

cure

github.com/paulnsorensen開発19662 回インストール6 日前に更新
リポジトリ

cure について

cureは、AgeレビューやCIレポート、範囲を限定した修正依頼から選んだ指摘に対応する開発スキルです。変更を検証し、対応済みと保留の指摘を記録して、問題のない修正をレビューまたは公開工程へ引き継ぎます。

主な機能

  1. 01レビュー指摘の選択
  2. 02論理的な修正グループ単位の対応
  3. 03対象テストとプロジェクトゲートの確認
  4. 04動作修正のテイストテスト
  5. 05対応済み・保留指摘の記録
  6. 06レビューと公開への引き継ぎ

活用シーン

  1. 01Ageレポートの指摘修正
  2. 02選択したCI障害への対応
  3. 03範囲を限定した修正と再レビューへの引き継ぎ

インストール

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

$npx skills add https://github.com/paulnsorensen/easy-cheese --skill cure

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

wedge.toml
references/
auto-mode.md
commands.md
cure-discipline.md
domain-model-correction.md
post-pr-writeback.md
selection.md

詳細

/cure

/age の後、検証に失敗した後、または選択したレビュー指摘事項の修正を依頼された場合に、このスキルを使用します。

フェーズの開始

python3 skills/cure/scripts/cure.pyz wheypoint-resolve --ref <slug> を実行します。 authoritative はレコードを使用します。working_context は最初のバッチ処理対象の tilth_read です。 not-found の場合は事前情報なしで続行します。legacy の場合はソースとスラッグを表示してから続行します。 gated、ambiguous、error の場合は停止し、ペイロードを表示します。 アドバイザリーの stale-commit と grounded-path-missing の指摘事項を表示します。 その record.revision_id を <base> として保持します(§ ベースリビジョン)。

入力

/age のスラッグ、貼り付けられた指摘事項のリスト、CI 失敗の概要、または範囲を限定した修正指示を受け付けます。

フェーズの開始後、/cure <slug> は .cheese/age/<slug>.md を読み込みます。

/age または /affinage でロックされた選択を採用します。 標準形式は references/selection.md#handoff-from-age に記載されています。 それ以外の場合は、references/selection.md の推奨される複合選択を適用します。 このファイルでは選択ゲートの条件も定義しています。

指摘事項のフィールドが省略された古いレポートの場合は、references/selection.md の § 古いレポートの形式を読みます。

オプションのフラグ:

  • --safe — 選択ゲートと最終公開ゲートを復元します。
  • --open-pr — PR が存在しない場合に、/plate による公開を許可します。
  • --auto — /cook --auto の自動モードを使用します。 ユーザーによる選択をスキップします。 --stake <floor> が必要です。
  • --stake <floor> — --auto の重要度の下限を設定します。 blocker、high、medium+、または all を指定します。 --auto を指定していない場合、このフラグは無視します。
  • --hard — メタ認知ゲートのフラグを /plate に渡します。

選択ルールについては、references/selection.md を読みます。

移植性のルールについては、harness-portability.md を読みます。 スラッシュコマンドはホスト上の表示形式であり、制御モデルではありません。

フロー

  1. 読み込み。 引き継ぎに handoff_context.source_report が含まれている場合は、まずそれを読みます。 ファイルが存在し、指定された source_skill に属していることを確認します。 この確認に失敗した場合は、status: halt: unreadable source report で停止します。 引き継ぎにスラッグのみが含まれている場合は、.cheese/age/<slug>.md を読みます。 引き継ぎに CurdPlan も含まれている場合に限り、型付きパスを使用します。 そのプランに対して validate_curd_plan を呼び出します。 プランまたはそのダイジェストが無効な場合は、ディスパッチ前に停止します。 レガシーマニフェストからプランを再構築してはいけません。 それ以外の場合はすべて、レポートパスを使用します。

  2. 選択。 /age または /affinage でロックされた選択を採用します。 それ以外の場合は、推奨される複合案を適用します。 動詞とゲート条件については references/selection.md を読みます。 次のコマンドでユーザーの動詞を展開します。

    python3 skills/cure/scripts/cure.pyz findings parse-selection --report <path> --selection "<verb>"
    

    references/selection.md § Coder brief に従ってコーダーブリーフを作成します。

  3. 適用。 一度に論理グループを1つ修正します。 各 recommendation: をロックされた決定として実装します。反論は ### Deferred の下に記載する場合に限ります。 アンカーはそれぞれ、新たに範囲を限定して読み、確認します。 レポートパスではここで停止し、ステップ4に進みます。 型付きパスでは、検証済みのプランを使用して easy_cheese.shared.workflow.cure も呼び出します。 選択された各 curd に対して CureDiagnosisBinding を1つ追加します。 bind_diagnosis(plan, curd, diagnosis_result) で各バインディングを作成します。 確認済みの DiagnosisResult のみを使用します。 バインディングは、正確なプランと curd のダイジェストを参照するようにします。 DiagnosisDisposition.CONFIRMED を設定します。 一見妥当でも無関係な診断では Cure のロックを解除できません。 cure は resolve_artifact で各 ArtifactRef を解決します。 観察のみを行う CurdResultWriterView の出力だけを受け付けます。 normalize_agent_output を使用して、選択された curd ごとに1つの CurdResult を確定します。 実行エラーも確定します。

  4. 検証。 各修正を証明できる、最も範囲を絞ったテストを実行します。 続いて、関連するプロジェクトのゲートを実行します。 これらのゲートには、lint、型チェック、ビルドが含まれます。 引き継ぎに baseline: ブロックがある場合は、quality-gates.md を使用します。 同一のベースライン失敗は、クリーンな cure を妨げず、停止の理由にもなりません。 新規または変更された失敗のみを修正します。

  5. 動作変更をテイストテストする。 引き継ぎスラッグを書き込む前に、新しいコンテキストでテイストテストを実行します。 agent-resolution.md を通じて、読み取り専用の reviewer (taste-test) フェーズエージェントを解決します。 最低限のパワーとして default、作業量として medium を指定します。 cure の差分に Cook のレビューレンズを適用します。 ステップ2で作成したブリーフを、テイストテストのロックされた決定ブロックとして、そのまま再利用します。 新しいコンテキストの分離が利用できない場合は停止します。 インラインのセルフチェックは、tdd-loop.md にある小規模差分のコストゲートに該当する場合に限り使用します。 書式、コメント、インポート、ロジックを伴わない名前変更の場合は、このステップを省略します。 revise 判定が出た場合は、範囲を限定した修正を1回行います。 Locked-decision の halt が出た場合は、人間の判断を仰ぎます。 ネストされたコーダーは、正式なレビューをオーケストレーターに委ねます。

  6. ドメインモデルを修正する。 Cook の差分が扱う用語のみを修正します。 まず references/domain-model-correction.md を読みます。 Mold がロックした正規用語を元に戻してはいけません。

  7. レビューに引き継ぐ。 /age <slug> --scope <touched-path> を推奨します。 変更したパスごとに --scope を1回ずつ指定します。 Age をディスパッチするたびに、現在のスラッグを渡します。 実行に --hard フラグが付いている場合は、それを引き継ぎます。 Cure 内で Age のレビューを重複して行ってはいけません。 新しい Age レポートから、新たな /cure 実行を開始できます。

  8. レポートを書く。 変更、確認項目、保留項目、残存リスクを記録します。 .cheese/cure/<slug>.md の先頭に引き継ぎスラッグを記載します。

  9. 永続化する事実を書き戻す。 公開前に § Post-PR write-back を実行します。 書き込んだ各パスを /plate に渡し、成果物のインベントリに含めます。

  10. 公開に引き継ぐ。 クリーンな cure の後に /plate をディスパッチします。 ## Handoff に従います。

優先ツールとフォールバック

ソース作業は code-intelligence-routing.md 経由で行います。 優先ツールがない場合は、そのフォールバックを使用します。 フォールバックでは安全な修正ができない場合にのみ停止します。 精度の低下を報告します。

検証

利用できないゲートを実行できない理由を記録します。 選択した指摘事項が未解決のまま、準備完了と宣言しないでください。

指摘事項を「Applied」に移すのは、証明となるテストに合格した後に限ります。 鉄則については references/cure-discipline.md を参照してください。

クリーンな修正とは、少なくとも1つの修正が適用され、すべてのゲートに合格している状態です。 また、誤った前提による停止がない状態です。 同一の baseline: エラーは、グリーン状態の判定に影響しません。 quality-gates.md を参照してください。

ゲートの値はエージェントが判定します。 CLI はその値を準備状況の判定に変換します。

python3 skills/cure/scripts/cure.pyz gates classify \
  --press-status <label> \
  [--hard-floor-met] [--has-open-level-1-or-2] [--has-open-level-3] [--has-open-level-4-or-5] [--any-spinning]

引き継ぎスラッグ

レポートを .cheese/cure/<slug>.md に書き込みます。 最低限必要な引き継ぎスラッグを先頭に記載します。

status: <canonical status field>
next: age | done
artifact: <path of the report that this run consumed>
baseline: none | <recorded baseline block copied from the upstream handoff — see ../cook/references/quality-gates.md>
<one-line orientation: what cure applied or deferred>

引き継ぎ契約では status: の文法を定義します。 next: と追加のキー付き行のみがこのフェーズ固有です。 artifact: には、この実行で読み込んだソースレポートを指定します。 その値には handoff_context.source_report、または解決済みの .cheese/age/<slug>.md パスを使用します。

レポート本文は別のファイルに書き込みます。 その後、正規のライターを使って .cheese/cure/<slug>.md を一度だけ作成します。 この実行で使用したすべてのオプションフィールドを渡します。

python3 skills/cure/scripts/cure.pyz write-handoff-artifact \
  --slug <slug> --status <status> --phase cure --next age [--base <base>] \
  --artifact <consumed-report-path> --orientation "<one-line orientation>" \
  --baseline "<copied baseline block>" --durable-flags "<one line per flag>" \
  --grounded <path[#start-end]> \
  --body-file <body-path> \
  --payload-schema https://schemas.easy-cheese.dev/curd-result

終端状態には別のコマンドを使用します。 終端への遷移ではペイロードスキーマが拒否されるため、--payload-schema は省略します。

python3 skills/cure/scripts/cure.pyz write-handoff-artifact \
  --slug <slug> --status <status> --phase cure --next done [--base <base>] \
  --artifact <consumed-report-path> --orientation "<one-line orientation>" \
  --baseline "<copied baseline block>" --grounded <path[#start-end]> \
  --body-file <body-path>

この実行に該当する値がない場合は、--baseline と --durable-flags を省略します。 phase=cure によって保存先が決まります。 next は次のフェーズを宣言し、ライターがその遷移を検証します。

少なくとも1つの指摘事項が問題なく適用された場合は、status: ok を使用します。 --auto の重大度しきい値を満たす指摘事項がない場合も使用します。 選択した修正がすべて評価に失敗した場合は、status: halt: <reason> を使用します。 プロジェクトのゲートに合格できない場合も使用します。 レビューが続く場合は next: age を使用します。 これは自動実行と対話型実行のデフォルト値です。 next: done を使用できるのは、--auto を使わない対話型実行のみです。 ユーザーはレビューを明示的に辞退する必要もあります。 Cure は現在の試行回数を追跡しません。 /age --auto は、3回目の実行時に2回の cure パス上限を適用します。

出力

formatting.md を使用します。 スラッグの下に、正確に ### Applied、### Deferred、### Checks、### Re-review という見出しを追加します。 <slug> には、読み込んだソースレポートのファイル名(拡張子を除く)を設定します。 source_skill が /affinage の場合は、各結果行の末尾に [from-comment:<id>] を付けます。 指摘事項のID、根拠、残存リスク、次のコマンドを含めます。 次のコマンドには /age <slug> --scope <touched-path> または /plate を使用します。

引き継ぎ

パイプライン: culture → mold → cook (⇄ press) → age → [cure] → plate

レポートができたら、/plate を実行するか、確認を求めるかを判断します。 問題なく修復できた場合、デフォルトでは追加のゲートなしでオープン PR を更新します。 --safe を指定すると、引き継ぎゲートが復元されます。

/affinage が実行を開始した場合、Cure から /plate を実行してはいけません。 この状態では handoff_context.source_skill: /affinage が設定されています。 必要に応じて修正を適用し、自動 Age ループを実行してください。 その後、制御を /affinage に戻します。 GitHub への返信を投稿してから、/plate を実行します。

--safe を指定しない場合のデフォルト:

  • オープン PR がある場合は、/plate [--hard] を実行します。 最終書き込みゲート、コミット、トポロジーの更新、公開を行います。
  • オープン PR がない場合は、--open-pr を指定して /plate [--hard] を実行します。 /plate はユーザーに確認せずにトポロジーを決定します。詳しくは topology.md を参照してください。
  • --open-pr を指定しない場合は、リモートを変更しません。 no open PR — pass --open-pr or run /plate と報告します。
  • /plate を実行する前に、必ず § PR 後の書き戻しを実行します。
  • 修復が完了していない場合は /plate を実行しません。 阻害要因を報告して終了します。

--safe を指定した場合は、共通の引き継ぎゲートを使用します。 次の選択肢を提示します。

  • 変更箇所のコードをレビューする。 /age <slug> --scope <touched-path> を実行します。 修正が指摘箇所の範囲を超える場合は、この選択肢を推奨します。
  • Plate を実行する。 コミットして公開するには、/plate [--hard] を実行します。
  • チェックポイントを作成して停止する。 /wheypoint を実行します。
  • 停止する。 何も実行しません。

選択した修正とゲートがすべて通過した場合に限り、Plate を実行する。 を事前選択します。 選択されたコマンドをすぐに実行します。

PR 後の書き戻し

PR に公開する可能性のある処理を行う前に、references/post-pr-writeback.md を読みます。 これには、デフォルト、--open-pr、--safe、自動公開の各経路が含まれます。 このファイルでは、候補、書き込み担当、フォールバック動作、所有権、空の場合の処理を定義しています。

--hard モード

/cure --hard は --hard を /plate に渡します。 /plate は、永続化されるすべての書き込みを完了し、検証します。 その後、最終成果物の一覧を /hard-cheese に渡します。 ゲート結果が FAILED の場合は公開を停止します。 TTY 以外の環境でゲートが妨げられた場合は、公開を停止します。 結果が ERROR の場合は、hard-cheese のフェイルオープンポリシーに従い、公開を続行します。 レビュー、チェックポイント、停止を選択した場合は、このゲートを省略します。 skills/hard-cheese/SKILL.md と ../hard-cheese/references/composition.md を読みます。

自動モード

自動モードを使用する前に、references/auto-mode.md を読みます。 ここでは、選択、検証、取り消し、Age の上限、フラグの転送、公開、Cook ワーカーの例外を定義しています。 また、--auto --hard の穿刺条項も定義しています。

ルール

  • デフォルトでは、推奨された複合案またはロックされた選択を使用します。 --safe を指定すると、ゲートが復元されます。 誤った前提、範囲の拡大、構造上の問題、または相反する指摘がある場合は、一時停止します。
  • 修正は選択した指摘の範囲内にとどめます。 ベースラインと同一の失敗は修正しません。
  • 失敗したチェックとスキップしたチェックを報告します。 自動処理で取り消した指摘は ### Deferred の下に記載します。
  • 公開の判断ではすべて ## Handoff に従います。 修復が完了していない状態で公開してはいけません。
  • 誤った前提に基づく指摘は、適用する前に停止します。 Age の主張が誤っている、または古くなっている理由を報告します。
  • ../age/references/voice.md の共通の文体ルールに従います。 適用した変更を先に述べます。 残存リスクを certain | speculating | don't know のいずれかで示します。 差分が正しい場合、追加作業をでっち上げてはいけません。
  • status: ok と主張する前に、ゲートコマンドを特定します。 同じターン内で再実行します。 出力全体を読みます。 その後で主張します。 完了の主張に should、probably、I think を使ってはいけません。 ゲート出力が示す内容を述べます。

作業規律

修正を適用する前に、references/cure-discipline.md を読みます。 ここでは、鉄則、危険信号、合理化の一覧を定義しています。

エージェントの解決

修正作業は、agent-resolution.md を通じて解決します。

作業優先するタイプ権限/分離最小限のパワー作業量フォールバック
選択した指摘事項の適用コーダー書き込み、分離されたワークツリーデフォルト高互換性のあるコーダー、その後は汎用

Cure の正規の引き継ぎには、共有の agent_resolution ブロックが含まれます。

references/commands.md にある生成済みのコマンド一覧を参照してください。

コメント