Skip to content

Release: ndf v10.27.6 - #2351

Merged
takemi-ohama merged 2 commits into
developfrom
release/v10.27.6
Nov 1, 2026
Merged

takemi-ohama merged 2 commits into
developfrom
release/v10.27.6

Conversation

@takemi-ohama

Copy link
Copy Markdown
Contributor

ndf v10.27.6 のリリース(prod)。対象の plugin: ndf

含む PR

チェックの結果

  • check-doc-staleness: pass(documented skill counts and versions are up to date)
  • validate-runtime-plugins: pass(runtime plugin validation passed)

🤖 Generated with Claude Code

@takemi-ohama
takemi-ohama merged commit f6dcbfc into develop Nov 1, 2026
22 checks passed
@takemi-ohama
takemi-ohama deleted the release/v10.27.6 branch November 1, 2026 07:32
@takemi-ohama

Copy link
Copy Markdown
Contributor Author

配布の記録

段階: 本番(承認ゲート 2 の承認の後、2026-11-01 16:42 に ndf--v10.27.6 を出した)
版: 10.27.5 → 10.27.6(タグ ndf--v10.27.6。直前はタグ ndf--v10.27.5)
スプリント: PR #2348

@takemi-ohama

takemi-ohama commented Nov 1, 2026 •

Copy link
Copy Markdown
Contributor Author

リリース後テスト

対象の版: ndf 10.27.6(2026-11-01 16:42 JST に本番へ出した。タグ ndf--v10.27.6、main 99bbac1)
対象の環境: 本番(正式版のチャネル main)
導入経路: 隔離した HOME で claude plugin marketplace add devbasex/ai-plugins → claude plugin install ndf@ai-plugins、codex plugin marketplace add → codex plugin add ndf@ai-plugins(release-verification-steps.py verify-install --ref main --expect 10.27.6 --plugins ndf --runtimes claude,codex)

確かめ方の凡例:

  • 実データ: 導入した 10.27.6 の scripts(~/.claude/plugins/cache/ai-plugins/ndf/10.27.6/scripts)を、このリポジトリと GitHub の実際の状態に対して打った
  • テスト: タグ ndf--v10.27.6 の作業場所(plugins/ndf/scripts は導入物と diff -rq で差が無い)でテストを流した。関係する 11 ファイルを pytest -n 4 で流し、575 passed(exit=0、17:01〜17:02)。受け入れ条件に当たるテストを名前で選んで流し、82 passed(exit=0、17:04)
課題 受け入れ条件 実行したこと 実行時刻 結果
— 導入の確認: 利用者と同じ手順で入れ直し、版と中身が ref と一致する release-verification-steps.py verify-install --ref main --expect 10.27.6 --plugins ndf --runtimes claude,codex --root . 2026-11-01 17:00 合格 / exit=0。status ok、claude・codex とも ndf 10.27.6、prev_tag ndf--v10.27.5、mismatch 0、user_env_unchanged true
#2230 1. merge・手で届ける・検証の環境だけの経路で、まとめの close が --record-pr unknown を持たず、流す時点でリリース記録の PR を受け取る 実データ: 課題 2230・2044・2121・2164 と --record-pr {queue_record} を持つプランに queue_fill.fill_queue_pr を当てた。テスト: test_record_find.py(test_fill_writes_the_found_record_into_every_step ほか)、test_supervise_new.py::test_samples_start_and_close_a_sprint_without_versions 2026-11-01 17:03 合格 / exit=0。{queue_record} が実際の記録の PR 2351 に置き換わった(閉じる PR #2348 → 候補 #2348・#2350・#2351)。merge・手で届ける経路のプランの組み立てはテストで確かめた(このリポジトリは雛形の経路のため、実データでは組めない)
#2230 2. 開発ループの承認ゲート 2 の後のまとめが、検査のスプリント PR でなく本番のリリース記録の PR を受け取る テスト: test_sprint_loop.py::test_gate_2_resume_builds_the_close_without_the_check_pr_as_the_record 2026-11-01 17:04 合格 / exit=0。テストで確かめた。承認ゲート 2 を通る実際の周回は流していない(下の手動確認の行)
#2230 3. 記録の PR を解決したとき、リリース後テストのステップも同じ番号を受け取る 実データ: 1 と同じプランの 2 つのステップ(close・verify)を確かめた 2026-11-01 17:03 合格 / 2 つのステップとも --record-pr 2351 になった
#2230 4. 記録の PR が見つからないと、まとめが止まり、課題を開いたまま、探した経路と見つからなかったことを返す 実データ: 閉じる PR を持たない課題 #2172 でプランを作り、fill_queue_pr を当てた。テスト: test_fill_leaves_the_plan_and_the_stage_is_unfilled_when_no_record_is_found、test_sprint_loop.py::test_lap_with_an_unfilled_close_is_closed_as_failed 2026-11-01 17:03 合格 / プランは書き換わらず、「課題 #2172 を閉じる PR が見つからない(課題の履歴の参照を読んだ)」を返した
#2230 5. どの経路のまとめのプランも --record-pr unknown を組まない 実データ: 導入した 10.27.6 で supervise.py new sprint(版なし)と new close(雛形・--record-pr 2351・--record-pr 0)を /tmp へ書き出し、unknown を grep した。テスト: test_supervise_new.py 2026-11-01 17:04 合格 / exit=0。どのプランにも unknown が無い。リポジトリの作業ツリーは変わらなかった
#2230 6. 雛形と昇格の経路のまとめのプランと、流したときの close の引数・出力が変わらない 実データ: 同じ状態ファイル(写し)・同じ版で、10.27.5 と 10.27.6 の new close を打ち、4-close.json を比べた。テスト: test_supervise.py(contract の fixtures) 2026-11-01 17:04 合格 / 版を明示した場合も省いた場合も、4-close.json は 10.27.5 と同じ(--record-pr {queue_pr:release-prod})。昇格の経路はテストで確かめた
#2230 7. --record-pr 0 と --record-pr <番号> を明示した new close の振る舞いが変わらない 実データ: new close --record-pr 2351 と --record-pr 0 を 10.27.5・10.27.6 で打った。テスト: test_samples_start_and_close_a_sprint_without_versions[no-delivery] 2026-11-01 17:04 合格 / 明示の 2351 はそのまま載った。0 は雛形の経路ではどちらの版も {queue_pr:release-prod} で同じ。届けない経路だけのスプリントはテストで確かめた
#2230 8. 開発ループを使わない起動の出力と終了コードは、1・4・5 で変わる部分のほかは変わらない テスト: 関係する 11 ファイル(test_supervise*.py・test_step_scripts.py・test_release_steps.py ほか) 2026-11-01 17:02 合格 / 575 passed、exit=0
#2044 1. merge・手で届ける・検証の環境だけの経路で、まとめの close が流す時点で記録の PR を受け取る #2230 の 1 と同じ 2026-11-01 17:03 合格 / #2230 の 1 と同じ根拠
#2044 2. 見つからなければ close が止まり、課題を開いたまま ok で返さない #2230 の 4 と同じ 2026-11-01 17:03 合格 / #2230 の 4 と同じ根拠
#2044 3. 雛形と昇格の経路の振る舞いと出力が変わらない #2230 の 6 と同じ 2026-11-01 17:04 合格 / #2230 の 6 と同じ根拠
#2121 1. 承認ゲート 2 の後のまとめが、本番の配布の記録の PR を受け取り、配布した課題を閉じる #2230 の 2 と同じ 2026-11-01 17:04 合格 / テストで確かめた。実際の周回は流していない
#2121 2. manual ステージを含む経路では、手作業を終えるまでまとめを始めない テスト: test_sprint_loop.py::test_sprint_pipeline_waits_for_hands_before_the_close、test_sprint_pipeline_chains_close_after_the_first_command_without_hands 2026-11-01 17:04 合格 / exit=0(テストで確かめた)
#2121 3. ループを使わない起動の出力と終了コードは変わらない #2230 の 8 と同じ 2026-11-01 17:02 合格 / 575 passed
#2164 1. 版を明示せずに作ったプランは具体的な版数を持たず、作業場所・ブランチ・承認資料のパスにも版が入らない 実データ: 導入した 10.27.6 で supervise.py new sprint --worktree /work/ai-plugins --issue 2172 --name rvcheck --out /tmp/rv-check/sprint を打ち、版数を grep した。テスト: test_new_sprint_and_close_without_versions_write_no_version 2026-11-01 17:03 合格 / exit=0。版数に見える文字列は導入先のパス(cache/ai-plugins/ndf/10.27.6/scripts)だけ。作業場所は .worktrees/release/v{release_version}、ブランチは release/v{release_version}、承認資料は approval-ndf-v<base>.md、版.明示 は null
#2164 2. 開発版の版は、流した時点の origin のベースブランチの版と最新のタグから決まる 実データ: lib/release_version.observe(repo,"ndf","develop","main") の結果を decide_dev に渡した。テスト: test_decide_dev_takes_the_next_free_version_above_the_base(4 例) 2026-11-01 17:03 合格 / develop 10.27.6・main 10.27.6・最新タグ 10.27.6 から 10.27.7-dev.1 に決まった。読めなかったもの(unreadable)は 0 件
#2164 3. 別のスプリントが先に版を出しても、同じプランのまま次に空いている版で配布が進む 実データ: 2 と同じ(10.27.5 の時点で作られたプランを今流すと 10.27.7-dev.1 になる)。テスト: test_dev_plan_takes_the_version_that_is_free_when_it_runs、test_rerun_redecides_when_another_sprint_took_the_version_first 2026-11-01 17:04 合格 / exit=0。並行するスプリントでの実際の配布は下の手動確認の行(保留)
#2164 4. 明示した版がすでに出ていれば、bump より前に止まり、理由と既に出ている版を返す 実データ: release_version.taken(obs,"10.27.6-dev.1")・taken(obs,"10.27.6")。テスト: test_explicit_dev_version_that_is_already_out_stops_before_the_plan_runs 2026-11-01 17:03 合格 / existing 10.27.6・next_free 10.27.7-dev.1、existing ndf--v10.27.6・next_free 10.27.7 を返した
#2164 5. bump は、ベースブランチの版以下への上げ方ではファイルを書き換えずに止まり、同じステップの打ち直しは ok で返す 実データ: origin/develop から切った使い捨ての作業場所で release-steps.py bump --plugin ndf --to <版> --base develop を打った。--to は 10.27.5-dev.1、10.27.6-dev.1、10.27.7-dev.1(2 回) 2026-11-01 17:04 合格 / 10.27.5-dev.1 と 10.27.6-dev.1 は exit=3(stopped)で、変わったファイルは 0。理由は「すでに出ている(10.27.6)。次に空いている版は 10.27.7-dev.1」。10.27.7-dev.1 の 1 回目は exit=0 で 6 ファイルを書き換え、2 回目は exit=0 で「すでに 10.27.7-dev.1。上げ直さない」。作業場所は戻した
#2164 6. 本番は開発版の系列で出し、そのタグがすでにあれば本番のブランチへ入れる前に止まり、既に出ている版と次に空いている版を返す 実データ: taken(obs,"10.27.6")(4 と同じ)。テスト: test_prod_plan_uses_the_base_of_the_dev_record、test_prod_plan_stops_when_the_release_is_already_tagged、test_prod_plan_without_the_dev_record_stops 2026-11-01 17:04 合格 / exit=0
#2164 7. 開発版の配布のステップを流し直すと、最初に決めた版を使う テスト: test_rerun_keeps_the_recorded_version、test_redecide_interrupted_after_the_record_refills_once。実データ: 5 の打ち直し 2026-11-01 17:04 合格 / exit=0
#2164 8. origin のブランチやタグを読めなければ、版を推定せずに止まり、読めなかったものを返す テスト: test_decide_dev_does_not_decide_when_something_is_unreadable、test_unreadable_origin_stops_without_a_record、test_bump_without_origin_stops_as_unreadable 2026-11-01 17:04 合格 / exit=0(テストで確かめた。実際に読めない状態は作っていない)
#2164 9. 開発版と本番の結果 JSON の metrics.version に、決めた版が載る 実データ: m26-3 の配布の結果(.ndf/tmp/sprint-m26-3/7-release-state/05-release.out・8-release-prod-state/09-release.out)を読んだ。テスト: test_fill_stage_reports_the_version_of_a_plan_it_did_not_run、test_only_matching_stage_runs_and_version_is_substituted 2026-11-01 17:05 合格 / dev は "version": "10.27.6-dev.1"、prod は "version": "10.27.6"(tag ndf--v10.27.6)。m26-3 は版を明示した経路のため、流す時点に決めた版が載ることはテストで確かめた
#2164 10. 明示した版がまだ出ていなければ、今と同じ版・同じステップで配布が進む 実データ: 5 の --to 10.27.7-dev.1 が exit=0。#2230 の 6 で、版を明示した new close のプランが 10.27.5 と同じになった。テスト: test_explicit_dev_version_that_is_free_runs_unchanged、test_explicit_record_is_not_redecided 2026-11-01 17:04 合格 / exit=0
#2230 手動確認(スプリントの PR #2348 からリリース後テストへ回した項目): merge か手で届ける経路のスプリントを 1 本流し、まとめの close が記録の PR を受けて課題を閉じること・記録を置かずに流すと止まること — — 保留(理由: このリポジトリの配布は雛形の経路で、10.27.6 の後に merge・手で届ける経路のスプリントはまだ流れていない。解決と止まり方は実データで確かめた(#2230 の 1・4)。いつ: 次に merge か手で届ける経路のスプリントのまとめを流すとき)
#2164 手動確認(スプリントの PR #2348 からリリース後テストへ回した項目): 次に並行するスプリントで、プランを作り直さずに開発版と本番が出たか(conductor の手当ての記録に版の書き換えが 0 件か) — — 保留(理由: 10.27.6 の後に並行するスプリントがまだ無い。いつ: 次に並行するスプリントの振り返りで、conductor の手当ての記録を数える)
#2164 未検証の項目(承認資料の「未検証・残る危険」): 並行するスプリントのスプリント PR が版の行で衝突しないか — — 保留(理由: 並行するスプリントがまだ無い。いつ: 上の手動確認と同じ時点)
#2164 未検証の項目: 並行するスプリントが同じ系列の開発版を出し、後の本番が止まって人へ戻る頻度 — — 保留(理由: まだ起きていない。いつ: 以後のスプリントで conductor の手当ての記録から数える)
#2164 未検証の項目: sprint-state.py loop sprint の --dev(ループからは流す時点の版を選べない) sprint-state.py loop sprint --help、lib/sprint_loop.py:285-287 を読んだ 2026-11-01 17:05 合格 / 退行はない(明示の版として 4・10 が当たる)。範囲外として #2354 を起票した(設計が起こすとしていたが、起票されていなかった)
#2164 未検証の項目: bump-others の止まり方(他のプラグインで誤って止まらないか) テスト: test_bump_others_takes_the_decided_level、test_bump_others_stops_when_the_decided_level_is_unreadable(5 例)、test_bump_raises_the_other_plugin_from_changed_plugins 2026-11-01 17:04 合格 / exit=0(テストで確かめた。他のプラグインのタグの付け方が違うリポジトリでの実例は無い)
#2164 未検証の項目: キューの耐久ステップの再生で判定を打ち直さないこと、決め直しの後に queue を打ち直して頭から流れること テスト: test_redecide_interrupted_after_the_record_refills_once、test_rerun_keeps_the_recorded_version 2026-11-01 17:04 合格 / exit=0(テストで確かめた。実際のキューの再開では起きていない)
#2164 未検証の項目: 決め直しで残した前の作業場所・ブランチ・PR を、後片付けが拾うか — — 保留(理由: 実際の決め直しがまだ起きていない。いつ: 最初に決め直しが起きたスプリントの後片付けで確かめる)
#2230 未検証の項目: GitHub の呼び出しの回数 実データ: gh を記録するラッパーを PATH の先頭に置き、課題 4 件・スプリントの PR 1 本で find_record を打った 2026-11-01 17:06 合格 / 9 回(api --paginate 5・pr view 3・repo view 1)、4.8 秒で PR 2351 を返した。設計の #2089 の見込み(課題 1 件で 13 回)より少ない
#2230 未検証の項目: 同じ課題が 2 つのスプリントで閉じられたときに止まる頻度 テスト: test_two_sprints_closing_the_same_issue_are_not_guessed 2026-11-01 17:04 保留(理由: 止まることはテストで確かめたが、頻度は今の運用でまだ起きていない。いつ: 以後のスプリントのまとめで止まった件数を数える)
#2230 未検証の項目: リリース PR がスプリントの PR を番号で指さない手書きの記録 テスト: test_a_record_covering_only_some_of_the_issues_is_not_taken、test_skips_the_later_sprint_reached_through_a_pr_that_only_refers_to_the_issue 2026-11-01 17:04 保留(理由: 実際の手書きの記録はまだ無い。いつ: 最初に手で届ける経路の記録が書かれたとき)

合否: 合格(受け入れ条件 24 件はすべて合格。うち #2230 の 2 と #2121 の 1・2 は、テストだけで確かめた)。追加の行 11 件のうち 4 件は合格、7 件は保留(手動確認 2 件と未検証の項目 5 件。並行するスプリントか別の経路のスプリントが流れるまで実施できない)
起票したもの: #2354(開発ループのスプリントは、版を流す時点に決められない。範囲外)

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