SpecRunnerDocs
ドキュメントRulesとCustom reviewers
GUIDE

RulesとCustom reviewers

既存stepへ規律を足す方法と、独立したreview lensを追加する方法を、選択・定義・運用の順に説明します。

このページの内容

RulesかReviewerかを選ぶ

まずRulesで足りるかを確認します。Rulesは追加セッションを使いません。独立した合否判定と修正ループが必要な場合だけCustom reviewerにします。どちらも信頼できるrepository内の定義として管理し、最終判断はPull Requestで人間が行います。

RULESsame session

既存stepの仕事を具体化する

stepのsystem promptへMarkdownを追加し、そのstepが守る局所的な規律を増やします。

  • 「実装時にこのAPIを使う」
  • 「code-reviewでこの観点を必ず見る」
  • 追加の判定・iteration budgetは不要
CUSTOM REVIEWERown session

独立したreview lensを持たせる

目的・観点・判定基準を持つreviewerを追加し、固有の合否判定とcode-fixerループを動かします。

  • セキュリティ境界を独立して承認する
  • 対象path・request typeを限定する
  • 追加セッションと収束コストを許容する
必要なこと選択理由
既存stepへ禁止事項や作法を加えるRules同じセッション内で完結
独立した承認・差し戻しが必要Reviewer専用のfindingsと収束ループを持つ
stepの順序や構成を変えるコード変更Pipeline shapeはregistryの責務

Rules — 既存stepへ規律を追加する

rules newはstep名を検証し、同じdirectoryの最大番号に1を足したMarkdownを生成します。実行時は数値prefixの昇順で読み込まれ、prefixなしのfileは末尾です。

terminal
npx specrunner rules new code-review no-unverified-auth-claim
# => specrunner/rules/code-review/01-no-unverified-auth-claim.md
01-no-unverified-auth-claim.md
## やめてほしいこと

認証・認可の保証を、実装とtestの根拠なしに承認しない。

## こうしてほしいこと

境界条件と拒否経路を確認し、根拠のfile:lineをfindingへ含める。

## 例外

文言だけの変更で認証境界に触れない場合。
01
対象stepを選ぶ

agent sessionを持つ11 stepのみ指定できます。verificationpr-createは対象外です。

02
1 fileを1つの規律に保つ

生成される3見出しは推奨であり必須ではありません。CLIは本文の構造を解釈しません。

03
順序を意図して番号を付ける

後ろのruleほどprompt末尾に近くなります。重要な規律を後段へ置く方針がscaffoldに示されています。

指定できるstep: request-reviewdesignspec-reviewspec-fixertest-case-genimplementerbuild-fixercode-reviewcode-fixerconformanceadr-gen

Custom reviewers — 独立した判定を追加する

定義fileはfilename順で読み込まれます。nameはfilenameのstemと一致させ、目的観点判定基準を空にしないでください。

terminal
npx specrunner reviewers new security-boundary
# => specrunner/reviewers/security-boundary.md
security-boundary.md
---
name: security-boundary
maxIterations: 2
model: claude-sonnet-4-6
paths:
  - src/auth/**
  - src/core/credentials/**
requestTypes:
  - new-feature
  - bug-fix
---

## 目的

認証情報と権限境界の退行を防ぐ。

## 観点

入力の信頼境界、credentialの保存先、拒否経路、testの根拠を確認する。

## 判定基準

境界違反または検証不能な保証があればneeds-fix。根拠をfile:lineで示す。
field / sectioncontract
name小文字英数字で開始し、以降は小文字英数字・-_。filenameと一致し、built-in step名と衝突しない
maxIterations1〜10の整数。reviewerが収束しない場合の上限
model任意。省略時はclaude-sonnet-4-6
paths / requestTypes任意。指定する場合は空でない文字列配列
目的 / 観点 / 判定基準3見出しすべて必須で、本文も必要

検証はjob開始前にまとめて行われます 専用のreviewers validateコマンドはありません。runまたはjob startが全定義を読み込み、違反をまとめて表示し、state作成前に停止します。

Activation条件を狭める

条件はLLMではなくCLIが決定的に評価します。pathsはchanged fileのいずれか、requestTypesはrequest.mdのtypeと照合します。

pathsrequestTypes結果
なしなしすべてのjobで実行
matchなし実行
なしmatch実行
matchmatch実行。両方ある場合はAND
no matchmatchskip
判定不能matchまたはなし実行。pathを検証できないときはfail-closed

pathsはrepository相対pathのfull matchです。***?を使用できます。

実行・修正・再開の挙動

01code-review

built-in reviewを実行

02fan-out

有効なreviewerを並列実行

03code-fixer

必要なfindingを修正し再評価

04regression-gate

修正済みfindingの再発を検査

定義の固定job開始時にsnapshotし、そのjobの再開でも同じ定義を使う
並列roundreview sessionは並列。roundのstateとgit効果はcoordinatorがまとめる
承認済みreviewer再開時はskip。ただしfixerが対象pathを触れたらpendingへ戻る
activationでskipそのjobの間はskipを維持する
regression-gate修正対象のfindingがなければagentを起動せずskipする

Custom reviewerはlocal runtimeで使用します 現在のmanaged runtimeではcustom reviewerのagent IDを解決できず、並列custom reviewerも未対応です。定義を追加するjobはlocal runtimeで実行してください。

小さく導入する

  1. 01
    1つのRulesから始める

    既存stepの不足なら、追加sessionを持たないRulesで効果を確認します。

  2. 02
    Reviewerは1定義に絞る

    pathsrequestTypesを狭くし、maxIterationsは2〜3から始めます。

  3. 03
    信頼できる小さなrequestで実行する

    local runtimeでnpx specrunner run <slug>を実行し、activationとfindingsを確認します。

  4. 04
    コストと収束を確認する

    npx specrunner job statsで追加session、iteration、時間を確認します。

  5. 05
    Pull Requestで人間が判定する

    自動reviewの承認をmerge判断に置き換えず、差分と判定根拠を確認します。

参照ソース 7