Skip to content

Release: ndf v10.27.4 を main へ - #2320

Merged
takemi-ohama merged 105 commits into
mainfrom
develop
Nov 1, 2026
Merged

takemi-ohama merged 105 commits into
mainfrom
develop

Conversation

@takemi-ohama

Copy link
Copy Markdown
Contributor

ndf v10.27.4 を main へ出す(開発版の PR #2319)。

🤖 Generated with Claude Code

takemi-ohama and others added 30 commits October 31, 2026 11:37
codex・agy・kiro への配布を cross-review / cross-refactoring の相手役に要るものへ絞る要求。
用語集へ「相手役」「マニフェスト」を足す。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
相手役の起動の経路は配った Skill を使わないことをコードで確かめ、cross-review と
cross-refactoring をホストとして回すのに要る 8 本を配る案を推す。agy のエージェント定義と
hook、kiro の steering・プロンプト・エージェント定義の生成を外す。一覧の採否(8 本か 0 本か)
とホストの扱い、MVV の改訂の要否は承認ゲート 1 で決める。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- I3: check-cross-skill-refs.py はマニフェストを読まないため、破れたときの扱いから外し、
  cross-review→fix の組は決定 3 の新しい pytest(I1)だけが縛ると書く
- I6: codex 専用の skills/{cherry-pick-pr,deploy}/agents/openai.yaml の削除を例外として書く

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
配布: Claude Code と codex へすべてのプラグインを配り、agy・kiro は cross 系の相手役としてだけ呼ぶ(#2231)
確定仕様化: スプリント l20261031-3
本番のプランの verify は verify-install だけを流すため、stage を「配布」にする。
「リリース後テスト」の stage は、まとめのプランで受け入れ条件ごとに確かめて配布の記録の
Pull Request へ記録を書く release-verify だけが持つ。release-verify の依頼文に、スプリントの
Pull Request の「手動確認」でリリース後テストへ回した項目と未検証の項目を行として載せることを足した。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
lib/closing.py に閉じる予定の参照(最終工程の後に閉じる: #N)と defer_closing を足し、closing-issues.sh と
closing_issues / closing_refs / closing_numbers が 2 つの形を読む。pr-steps.py と supervise_lib/pr.py は、宛先が
既定ブランチ(決められないときを含む)なら本文を置き換えてから送る(lib/repo.py の merge_closes_issues)。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
review の on_exit {6: base-sync} を外し、未収束(終了コード 6)も on_fail: abort で止める。
雛形の review を疑似の駆動で流すテストと、契約の fixture を合わせた。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
--final-stage(配布 / リリース後テスト / 振り返り。省けば振り返り)を受け、閉じる条件 3 を課題ごとに判定する。
振り返りは課題の本文の「振り返り: <コメントの URL>」の行のうち、識別子が記録の PR の最後の配布の記録のコメントの
識別子以上のものを数える(lib/dist_record.py の dist_comment_id。記録の PR の読みは 1 回のまま)。本文を読めなければ
failed で止まる。リリース後テストは --with-verification の有無にかかわらず条件 2 を見る。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
merge →(release-verify)→ retro → close → refine の並びにし、close は --final-stage 振り返りを明示して渡す。
retro の指示に課題を閉じない旨を足す。契約の写し(plans/close/4-close.json)を新しい並びに合わせる。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
リファクタリングの想定最大時間を省いたときは下限まで上げ、着手前のテストの
初回の上限は既知の所要から決め、時間の枠に収まらないときは abort せずに
コードレビューへ進む、を受け入れ条件にした。用語集に 2 語を足した。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
pr-steps.py と supervise_lib/pr.py が同じ判定(merge_closes_issues → defer_closing)を持たないようにする。
番号で指した PR の宛先は既存の pr_for_report で読む(REST の退避も同じものを使う)。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
閉じる条件 3(最終工程の記録)・--final-stage の値と呼ぶ側の対応・まとめのプランの並び・閉じる予定の参照を
正本へ書く。pr・release-verification・retrospective・release・merged と development-workflow の references は
閉じる条件と順序を写さず正本を指す。用語集の「最終工程の記録」をその実行の振り返りに絞り、docs/glossary.md を作り直す。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
想定最大時間を省いた検査のリファクタリングは init が下限まで上げて続け、
ステップの締め切りは駆動が書いた見込みでエンジンが延ばす。明示した想定最大時間に
収まらないときと着手前のテストの打ち切りは、欠けの残る結果(終了コード 6)として
コードレビューへ進める。着手前のテストの初回の上限は手元の全体テストの実測 → 宣言の
所要の順で決める。用語集に 3 語を足し、2 語の意味を直した。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
削る基準 6 つ・suite ごとの秒の予算・速くする 3 つの手段・pytest の各プロセスを子の回収役にする後始末・
PR ごとの CI の取り消しを決める。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 着手前のテストの上限が 0.10·B を超えるとき、init がテストの前に延長のファイルを書く契約を足す(親の 1,980 秒で先に切られない)。延長は今の締め切りより前へ戻さない
- I8 を「飛ばしたことだけを理由に failed にしない」へ限り、後の工程の失敗は failed を記録する
- 用語集の時間の枠の不足・ステップの延長から、設計に無い機械の鍵を外す

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#2288 を実装する(スプリント m26-2)
- acceptance-check.py record / show が本文の「## 受け入れ条件の確認」の表を書く・読む
- read_unverified はマージ前に確かめた条件を「未実施のリリース後テスト」に載せない
- judge_acceptance はマージ前に確かめた条件に合格の行を求めない
- 記録の無い課題は今までどおり

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
配布先を Claude Code と codex に限る。agy・kiro は cross-review / cross-refactoring の
相手役として起動するだけにする(設計の決定 1)。

- plugins/ndf/dev.agy・各プラグインの dev.kiro・agy-skills.txt・kiro-skills.txt を消す
- build-runtime-plugins.sh・validate-runtime-plugins.sh・validate_manifests.py から agy・kiro の生成と検査を外す
- 一覧の予算・文書の古さの検査・スモーク(matrix・adapter・像・版の一覧)から kiro・agy を外す
- release.runtimes・pace.json の導入の確認・release-verification-steps.py の kiro の導入確認を外す
- .ndf/project.json の required_checks から runtime-smoke (kiro)・(agy) を外す(ruleset は承認ゲート 2)
- 配布先が claude・codex だけであることを確かめる test_distribution_runtimes.py を足す

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
takemi-ohama and others added 20 commits October 31, 2026 19:13
…pproval_facts

含む PR・取得済みの PR・CI の結果・リポジトリ名から items と承認資料の行を作る部分を
純粋関数 included_pr_facts へ抽出した。CI の取得はコマンド側に残し、取得の順と回数は変えない。

Item-Id: I-008
Impl-Runtime: claude
Impl-Model: claude-opus-5-5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…_item

試行の結果を状態から決める式を _dry_run_result、課題の項目の共通部分を _issue_base、
やり直しの cmd を添えた failed の項目を _failed へ抽出し、_judge_and_mark・_close_verified・
_close_item・close_one の写しを置き換えた。項目の鍵と順は変えない。

Item-Id: I-009
Impl-Runtime: claude
Impl-Model: claude-opus-5-5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…icts

Item-Id: I-010
Impl-Runtime: claude
Impl-Model: claude-opus-5-5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…#version_verdicts

リリース後テストのブロックを切り出し、対象の版の基底が一致する最後のブロックの本文を返す処理を
dist_record.verify_block_for_base へ移した。節の一覧の組み立ては dist_record._heading_sections として
parse_record と共有する。version_verdicts は返された本文を verification_verdicts へ渡すだけになり、
非公開の _verify_blocks とブロックの辞書の構造への参照が無くなった。parse_record の完全な版の一致と
配布後のフォールバックは変えていない。

Item-Id: I-010
Impl-Runtime: claude
Impl-Model: claude-opus-5-5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…py#defer_for_base

関数の中で repo を読み込んでいた defer_for_base を lib/repo.py へ移し、closing.defer_closing を呼ぶ形にした
(依存の向きは repo → closing)。closing.py は本文の文字列だけを扱う層に戻る。影響範囲は呼び手の
pr-steps.py と supervise_lib/pr.py の読み込みの書き換えだけで、判定と置き換えの振る舞いは変えていない。

Item-Id: I-011
Impl-Runtime: claude
Impl-Model: claude-opus-5-5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…cription

根のパス・診断一覧・版数の書式を持つ ManifestChecker を抽出し、check_description と
パス解決・Skill 数の集計・各検査ループをそのメソッドへ移した。sys.argv の読み取り・
標準出力と標準エラー・終了コードは main と __main__ に集め、モジュールを読み込んでも
検査が走らないようにした。検査の順序(マーケットプレイス → 版数の書式の読み込み → 各検査)、
版数の書式を読めないときの停止と文言、引数の形式は変えていない。変更前後で成功・複数エラー・
書式の読み込み失敗の 3 つの CLI 出力と終了コードが一致することを確かめた。

Item-Id: I-012
Impl-Runtime: claude
Impl-Model: claude-opus-5-5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…fication_verdicts

見出しから列の位置を引く部分を _column_indices、1 行を (key, 合否, 条件番号) に解く部分を
_parse_verdict_row として抽出し、verification_verdicts は解いた行を畳み込むだけにした。

Item-Id: I-013
Impl-Runtime: claude
Impl-Model: claude-opus-5-5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…bump

plan_bump に連なっていた置き場ごとの版の書き換えを 3 つの関数へ抽出した。
plugin.json 群は _bump_manifests、marketplace.json と README.md の一覧表は
_bump_marketplace_and_readme、ndf 固有の記載は _bump_ndf_docs が持つ。
plan_bump は 3 つを元と同じ順に呼ぶだけになり、書き換えの順序と内容は変わらない。

Item-Id: I-014
Impl-Runtime: claude
Impl-Model: claude-opus-5-5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ise_pace.py#new_fast_sprint

`new sprint` を起動する長い引数列を tests/sprint_args.py の new_sprint_args へ移した。
既定の名前・課題・版数を持ち、差分(name・issue・design・version と末尾のフラグ)だけを受ける。
test_supervise.py・test_supervise_pace.py・test_supervise_new.py の写し取りをこの補助の呼び出しへ置き換えた。
期待値は変えていない。

Item-Id: I-015
Impl-Runtime: claude
Impl-Model: claude-opus-5-5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
衝突 3 件を解いた。README 2 本はスプリントの側(agy・Kiro CLI への配布の終了)を残し、
最後に配った版を v10.27.4 へ直した。dev.agy/plugin.json は配布の終了で消した側を残した。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KYHP7yPdcB8dBzbZpQCnR4
c823010 は cross-refactoring の締め切りを過ぎたとして着手前の木(1cc21190)へ戻したが、
その木は develop(v10.27.4)を取り込む前のもので、develop の変更まで巻き戻していた。
改修 14 件は 2d4602d で CI の 23 件がすべて通っているため、2d4602d6 の木へ戻す。
最終ゲートが締め切りで取り消す動きは別に起票する。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KYHP7yPdcB8dBzbZpQCnR4
…する案内を足す (#2318)

- sprint-close: 見出しが読めて課題を指す行が無い表は、すべての条件をマージ前に確かめた課題だけを課題ごとの判定へ進める。他は今までどおり「条件と課題の対応が読めない」で開いたまま
- README: 前の installer が引き継いだ利用者の mcpServers・hook を消す前に退避して写す手順を足す

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
全条件がマージ前かの判定(_all_pre_merge)が本文を読んだ直後に _judge_and_mark が同じ
gh issue view --json state,body を読み直し、課題ごとに CLI の起動と API の要求が 1 回ずつ余計だった。
判定と NO_MAPPING で残す分岐を _judge_and_mark の 1 回の読みへ寄せる(PR #2318 round 3 の指摘)。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@takemi-ohama

Copy link
Copy Markdown
Contributor Author

振り返り(2026-11-01)

対象: スプリント m26-2。課題は #2228・#2082・#2119・#2288・#2143・#2231・#2144。PR はスプリントの PR #2318、配布の記録の PR #2328、本番の PR #2320

このスプリントでは次の 4 つを作り、v10.27.5 として本番へ出した。

なお PR #2320 の題は「v10.27.4 を main へ」のままだが、main へ入れた版は 10.27.5 である(plugins/ndf/.claude-plugin/plugin.json)。

何が起きたか

観点 事実
受け入れ条件 リリース後テストでは 46 件のうち合格 33 件・保留 13 件・不合格 0 件だった。保留のうち 9 件は「この版の後の最初のスプリント」でしか確かめられない。閉じる工程は #2143 だけを閉じ、残る 6 件を保留を理由に開いたまま残した。保留を後で確かめ直す工程が無いため、#2330 として起票した
手戻り(検査) 検査のプラン 6-check は 3 回落ちた(PR #2318 の検査の記録 18:45Z・18:46Z・20:00Z)。原因はどれも配布済みの NDF の不具合だった。1 つ目は全体テストの CI 待ちが、PR で外したチェックをメインディレクトリの宣言から読んで待ち続けたこと(#2317)。2 つ目はリファクタリングの init が着手前テストの打ち切りで止まり、持ち主の記録が残ったこと(#2321)。3 つ目は再開の --from が効かず、同じ待ちでまた止まったこと(#2325)。キューは 13 回起動した(queue-1〜queue-13 のログ)
手戻り(構造改善) リファクタリングの最終ゲートが締め切りで改修を取り消した。そのとき、途中で取り込んだ develop のマージの中身(94 ファイル)まで巻き戻して push した。conductor が 9fba39f で打ち消した(#2323)。リファクタリングは 1 度も ok で終わらず、採用 0・未確認 14・見送り 5 だった
手戻り(レビュー) cross-review は 4 ラウンド回した。修正は major 2 件と major 1 件の 2 回で、1 件を人の判断へ回して見送った(別のリポジトリの課題が閉じる条件 3 を満たせない。#2327)
範囲 設計の段階で、Mission と配布の方針の食い違いを #2296 として外へ出した。#2228 の設計の未確認から #2293 を、#2231 の実装の PR #2306 から #2317 を起票した
工程 まとめのプランは 10.27.3 で組まれていた。そのため、新しい順(振り返り → 閉じる → 棚卸し)ではなく、閉じる → 振り返りの順で流れた。新しい順は次のスプリントから効く
conductor の手当て 本番のプラン 8-release-prod.json を 2 回手で直した(.bak-kiro・.bak-10.27.4 が残っている)。版を 10.27.5 → 10.27.4 → 10.27.5 と書き換えたのは、並行のスプリント l20261031-5 が 10.27.4 を先に使ったためである(対象ごとの排他は #2316)。差し込み {queue_pr:check} は 2318 へ書き換えた

検査の記録の集計と閾値

check-trigger.py stats --root /work/ai-plugins(2026-11-01 10:05 頃 JST)の結果は次のとおり。

数 値 このスプリント(PR #2318)
トリガーの評価(立った回数) 0 回(0) 0 回
検査 33 回(すべて PR を指す) 4 回
落ちた検査 23 回(refactor 15・工程が「不明」8) 3 回(3 回とも「不明」)
指摘の件数(マージの行) 例: PR #2250 は指摘 39・直した 27・見送り 12。PR #2268 は 6・6・0 記録なし(findings が null)
検査の後に逃げた不具合 0 件(記録 0 行) 0 件。ただし配布済みの不具合を 4 件起票した(#2317・#2321・#2323・#2325)

閾値(.ndf/pace.json の triggers: score 10・common_weight 2・lines 3000・escapes 1・hours 24)は見直さない。 閾値が効くのはトリガーの評価だけで、その評価が 1 回も記録されていないため、動かす根拠が無い(Value 3)。前回の振り返りで起票した #2300 の 3 点(評価が溜まらない・「不明」・流出不具合の記録漏れ)は今回も続いている。加えて、件数が記録に載らない 4 つ目の穴(PR #2318 のマージの行)を見つけた。この 4 点を #2300 の本文へ追記した。判断は ask.py decide(2983937fc60e)に記録した。

context window の大きさ

測ったのは conductor の 2 セッションと、その中で起動した supervisor・worker だけである。supervise.py queue が別のプロセスとして起動した claude は含まない。

層 フェーズ モデル 件数 固定費の中央値 実作業の中央値 実作業 < 固定費 最大充填の最大 目印
conductor - claude-opus-5-5 2 43446 160299 0 206774 割る候補
supervisor 取り込み claude-opus-5-5 1 48517 128365 0 176882
supervisor 仕上げ claude-opus-5-5 1 48561 233931 0 282492 割る候補
worker 修正 claude-opus-5-5 2 38932 96027 0 183916
worker その他 claude-opus-5-5 5 38753 82478 0 207273 割る候補
層 件数 固定費の合計 実作業の合計 総消費
conductor 2 86893 320598 407491
supervisor 2 97078 362296 459374
worker 7 271772 688331 960103
合計 11 455743 1371225 1826968
フェーズ supervisor supervisor の実作業 worker の件数 supervisor と worker の固定費の合計 目印
取り込み 1 128365 2 126531
仕上げ 1 233931 3 164454

用語集の変化

スプリントの PR #2318 の前後(c28a16aa^1 → c28a16a)で比べた。

コンテキスト 足した語 廃止した語 意味を変えた語
ndf-workflow 無し 無し 最終工程の記録(振り返りの行は、指すコメントが記録の PR の最後の配布の記録より後のものだけを数える)

承認ゲートの差し戻し

未記録。gate-rejections.py count --sprint .ndf/tmp/sprint-m26-2/sprint.json は終了コード 3 を返した。範囲の中に承認ゲートの答えの行が無く、0 件とは読まない。

MVV を見直すか

project-mvv.py signals(版 3)の結果は次のとおり。

兆候 件数 閾値
覆し 5(従うを退けた 0・判定できないを通した 5) 3
判定できない 1(続けて 0 回) 5(続けて 3)
流出不具合 0 3

覆しが閾値に届いた。改訂するかは利用者の答えを待つ(この工程は無人で回しているため、まだ問えていない)。5 件はどれも承認ゲート 1 の「判定できない」を利用者が通したもので、このスプリントの分は 1 件(2026-10-31 21:43 JST)である。判定できなかった理由は 2 種類に分かれる。

推奨は 2 つ。1 つは、#2296 の Mission の改訂を references/project-mvv.md の「改訂」の手順で進めること。もう 1 つは、2 つ目の種類を覆しに数えるかを、改訂と同じ判断で決めることである。

次に変えること

変えること 落とし先 状態
「次のスプリントで確かめる」と保留にした条件を、次のスプリントのリリース後テストで拾い直し、合格したら閉じる release-verification・progress-tracking の手順 #2330 として起票
検査の記録が閾値を見直す材料を持つようにする(評価・「不明」・流出不具合・件数の欠け) check-trigger.py と pace.md #2300 へ追記(既存)
Mission を 2 つのランタイムへの配布に合わせて改訂する プロジェクトの取り決め(.ndf/mvv.md) #2296(既存)。利用者の承認待ち
検査を止めた 4 件の不具合を直す supervise.py・cross-refactoring #2317・#2321・#2323・#2325(起票済み)

途中で起票した課題

番号 何を見つけたか 見つけた場面
#2293 --with-verification を付け忘れると、リリース後テストに不合格の行を持つ課題も閉じる 設計中(#2228)
#2296 Mission が 4 ランタイムへの配布を前提にしていて、#2231 の方針と食い違う 承認ゲート 1(#2231)
#2317 全体テストの CI 待ちが、PR で外したチェックをメインディレクトリの宣言から読む 検査中(PR #2318)
#2321 リファクタリングの init が打ち切りで止まると、持ち主の記録が残る 検査中(PR #2318)
#2323 最終ゲートの巻き戻しが、取り込んだベースブランチの変更まで消す 検査中(PR #2318)
#2325 queue --resume の --from が、前の起動が残っていると効かない 検査中(PR #2318)
#2327 別のリポジトリの課題が、閉じる条件 3(振り返りの記録)を満たせない レビュー中(PR #2318、見送り)
#2330 保留の条件を後で確かめ直す工程が無い 振り返り

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant