何を見つけたか
cross-review と cross-refactoring の SKILL.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-refactoring と cross-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 との境界:
関連
何を見つけたか
cross-reviewとcross-refactoringのSKILL.mdに、収束ループを駆動する bash がそのまま埋め込まれている。Skill を起動するたびにこの bash が文脈へ載る。
SKILL.mdcross-reviewcross-refactoring合計 267 行である。手順を読む側が必要とするのは「どのコマンドを、どの順で、何を見て
分岐しながら呼ぶか」であって、シェルの制御構造そのものではない。
どこで見つけたか
plugins/ndf/skills/cross-review/SKILL.mdの「実行ステップ概要(メインの bash 骨組み)」plugins/ndf/skills/cross-refactoring/SKILL.mdの「実行」なぜこの変更の範囲外なのか
#156 の受け入れ条件は
cross-reviewの指摘の統合・実行検証・反証・区分と、その効果の測定だけを扱う。手順書の構成は対象に入っていない。
直さないと何が起きるか
確かめる」であり、スクリプトにすればテストで固定できる。実例として、PR Docs: 効果の測定の設計(#156 の 4 本目) #557 のレビューで
見つかった「未起動の担当を監視へ渡すと毎ラウンド 30 秒止まる」は、
SKILL.mdの骨組みにあったため実測もテストもできず、
scripts/critique-round.shへ出して初めて固定できた2 つは切り出しやすさが違う
cross-refactoringcross-reviewAgentツールが要り、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 行以上のもの)。
cross-refactoringcross-reviewfixpr-reviewissue-plan-strategydeploycherry-pick-pr1 つの囲みに駆動がまとまっているのは
cross-refactoringとcross-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)。駆動へ出すときに区別する
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 との境界:
cross-refactoringの駆動は、cross-review / cross-refactoring: drive の止まる理由(pause)の形を揃え、共通層への残りの移行を終える(#560 の続き) #870 の pause の JSON と終了コードの表(0 / 20 / 21 / 22 / 23 / 30 / 4)を最初から使う。 独自の終了コードを決めると cross-review / cross-refactoring: drive の止まる理由(pause)の形を揃え、共通層への残りの移行を終える(#560 の続き) #870 でもう一度変えることになる。表の正本はこの課題の PR で置き、cross-review / cross-refactoring: drive の止まる理由(pause)の形を揃え、共通層への残りの移行を終える(#560 の続き) #870 はcross-review側を揃えることと共通層への残りの移行を持つcross-refactoringの待ち(SKILL.md:322/331/343/365のmonitor.pyの前景の呼び出し)は、cross-review / cross-refactoring をサブエージェントへ委ねると、ラウンドの待ちで応答を終えて止まる #656 の残りと同じ PR でbg-wait.shの形にする。 この駆動が 長い待ちを区切る道具を共通層へ移し、サブエージェントで止まる待ちと上限の無い待ちを根本原因の場所で直す #731 で共通層へ移すbg-wait.shの最初の読み手になる$SCRIPTSの解決と SKILL.md からの骨組みの削除の完了は cross-review / cross-refactoring: drive の止まる理由(pause)の形を揃え、共通層への残りの移行を終える(#560 の続き) #870 の受け入れ条件に残る関連