Skip to content

cross-review / cross-refactoring: SKILL.md に埋め込んだ駆動の bash を scripts/ へ出す #560

Description

@takemi-ohama

何を見つけたか

cross-reviewcross-refactoringSKILL.md に、収束ループを駆動する bash が
そのまま埋め込まれている。Skill を起動するたびにこの bash が文脈へ載る。

Skill SKILL.md 埋め込まれた bash 割合
cross-review 418 行 126 行(201〜326 行) 30%
cross-refactoring 435 行 141 行(235〜375 行) 32%

合計 267 行である。手順を読む側が必要とするのは「どのコマンドを、どの順で、何を見て
分岐しながら呼ぶか」であって、シェルの制御構造そのものではない。

どこで見つけたか

  • plugins/ndf/skills/cross-review/SKILL.md の「実行ステップ概要(メインの bash 骨組み)」
  • plugins/ndf/skills/cross-refactoring/SKILL.md の「実行」

なぜこの変更の範囲外なのか

#156 の受け入れ条件は cross-review の指摘の統合・実行検証・反証・区分と、その効果の測定だけを
扱う。手順書の構成は対象に入っていない。

直さないと何が起きるか

  • 収束ループを起動するたびに 132 行または 135 行が文脈を占める。長丁場の工程ほど効く
  • 手順書の bash は実行して確かめられない。 このリポジトリの規約は「書く前に実行して
    確かめる」であり、スクリプトにすればテストで固定できる。実例として、PR Docs: 効果の測定の設計(#156 の 4 本目) #557 のレビューで
    見つかった「未起動の担当を監視へ渡すと毎ラウンド 30 秒止まる」は、SKILL.md の骨組みに
    あったため実測もテストもできず、scripts/critique-round.sh へ出して初めて固定できた

2 つは切り出しやすさが違う

Skill 事情
cross-refactoring 参加者が全員 CLI である。 駆動そのものを 1 本のスクリプトにできる
cross-review 修正(Step 5)・巻き直し(Step 6b)・最終スイープ(Step 7.5)で Agent ツールが要り、bash からは呼べない。ラウンド 1 回分(起動 → 監視 → 取り込み → 判定)を 1 本にまとめ、Agent を呼ぶ場所だけ手順へ残す形になる。さらに、待ちを区切る形が前提に入った。 監視は bg-wait.sh run で背景へ回し、bg-wait.sh wait を 124 が返るあいだ別の Bash の呼び出しとして呼び直す(SKILL.md:236-237)。ホストのツールが 1 回 600 秒で打ち切るため、待ちの繰り返しを 1 回の呼び出しへ書けない

あわせて確かめたいこと

他の配布 Skill にも同じ形がないか。 40 個近くある Skill の SKILL.md を測り、
一定の行数を超える bash を持つものを一覧にしてから範囲を決めるのがよい。

plugins/ndf/skills/*/SKILL.md の、言語名 bash / sh / shell を付けたコードブロックの中の行数を、
Skill ごとに合計した(合計 60 行以上のもの)。

Skill 埋め込まれた bash の合計 最も長い 1 つの囲み
cross-refactoring 135 行 135 行
cross-review 132 行 130 行
fix 94 行 43 行
pr-review 94 行 36 行
issue-plan-strategy 77 行 27 行
deploy 74 行 36 行
cherry-pick-pr 60 行 36 行

1 つの囲みに駆動がまとまっているのは cross-refactoringcross-review だけである。
残りの 5 つは 43 行以下の囲みを複数並べた形で、合計の行数だけでは切り出す対象かを決められない。

実行時に踏むと分かっている点

  • 駆動を外へ出しても、手順書は「何を見て分岐するか」を保つ必要がある。 終了コードの
    意味(1 = 繰り返しの終了 / 2 = 判定の結果 / 4 = 中断 など)は手順書の表に残す
  • cross-refactoring の駆動には同じ群が続けて結果を残さないときの上限が要る。実測では
    担当の CLI が容量不足や月次上限に当たると、merge-apply が取り込みの手前で終了コード 2 を
    返し、群の状態が pending のまま同じ群が返り続けた(cross-refactoring: 実装担当が停止し続ける項目で適用ラウンドが無限に再試行される #647 と同じ形)
  • cross-refactoring の骨組みに無い工程がある。 検証の段 2(テストの変更を AI に判定させる
    judge-test-changes の起動と、答えを取り込む merge-test-judgements)は
    docs/02-apply-and-review.md:54-99 にだけ書かれており、SKILL.md には無い
    grep -n "judge-test-changes\|merge-test-judgements" SKILL.md の出力なし)。駆動を
    スクリプトへ出すときは、この工程も入れる
  • cross-refactoring の骨組みは monitor.py の終了コード(STALLED / TIMEOUT / EARLY_ERROR)を
    見ずに次へ進む(cross-refactoring: 実装担当が停止し続ける項目で適用ラウンドが無限に再試行される #647)。駆動へ出すときに区別する
  • 分割の基準(501 行以上)は SKILL.md にも掛かる。cross-review は 418 行で、
    test_skill_layout.py:20 の上限(SKILL_MD_MAX_LINES = 420)まで 2 行しかない。
    手順を
    2 行以上足すとテストが落ちるため、駆動を外へ出さずに書き足せる余地はほぼ無い

由来

PR #559

続き

駆動を scripts/ へ出した後、2 つの収束ループの止まる理由(pause)の形と終了コードを揃え、共通層への残りの移行を終える作業は #870 で扱う(親: #845)。

#870 との境界:

関連

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area: ndf-skillNDF の Skill 本体priority: medium保守性・設計一貫性など、計画的に対応する

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions