Repository navigation
Description
何を見つけたか
スプリント m1914(ndf v10.22.0)のリリース後テストで、マージ前に確かめられた受け入れ条件の食い違いが 2 件、リリースの後に初めて見つかった。
- CI の無いリポジトリで、スプリントの検査のプランが cross-review の unverified(exit 2)と on_fail: abort で毎回止まる #1593 の受け入れ条件 6 は「退行しない」の条件で、「cross-review が収束しない(
finalがapproved以外)か駆動がstoppedを返したときは、reviewのon_fail: abortのとおり止まる」と書く。しかしfinalがmax_rounds・oscillationのときは、変更前(10.21.0)から止まらない(cross-review が収束しない(final が max_rounds・oscillation)のに駆動が ok を返し、スプリントの検査の review が止まらない #2143)。条件が前提にした「今の振る舞い」が、事実と違っていた - 昇格のプランが、導入の確認をしたコミットと違う先頭を本番チャネルへマージしうる #1529 の受け入れ条件 9(
promote --helpが承認ゲート 2 へ戻ることを書く)は、help を 1 度読めばマージ前に確かめられた。テストは引数名が出ることしか見ていなかった(merged-steps.py promote の --help が、照合が食い違ったときに承認ゲート 2 へ戻ることを書いていない(#1529 の条件 9) #2142)
承認資料の「未実施のリリース後テスト」には、4 課題の受け入れ条件 31 件がすべて並んでいた。マージ前に確かめられた条件と、リリースの後でしか確かめられない条件の区別が無かった。
どこで見つけたか
PR #2138(ndf v10.22.0 のリリース)のリリース後テストのコメント、issues/approval-ndf-v10.22.0.md の「未検証・残る危険」、スプリント m1914 の振り返り。
なぜこの変更の範囲外なのか
スプリント m1914 の 4 課題は、どれも工程(requirements-design・quality-gates)の手順を変える課題ではない。振り返りの「次に変えること」で、次の変更で試すこととして残す。根拠: MVV 版 3(判断の範囲は目の前の変更に限る)。
直さないと何が起きるか
前提の誤った「退行しない」条件は、リリース後テストで初めて崩れる。マージ前に確かめられた文言の欠けは、リリースまで残る。本番に出てから課題が増え、元の課題を閉じられない。
起票者の推定
- requirements-design で「退行しない」条件を書くときは、今の振る舞いを 1 度実行して前提を確かめる(推した出所: 今回の CI の無いリポジトリで、スプリントの検査のプランが cross-review の unverified(exit 2)と on_fail: abort で毎回止まる #1593 の条件 6)
- quality-gates の完了報告で、受け入れ条件ごとにマージ前に確かめたか、リリースの後でしか確かめられないかを分け、承認資料の「未実施のリリース後テスト」には後者だけを載せる(推した出所:
issues/approval-ndf-v10.22.0.mdの 31 行)
由来
PR #2139
未実施に並ぶ仕組み
受け入れ条件に印を付けるのは sprint-close.py の 1 か所だけで、リリース後テストの後である。release_lib/materials.read_unverified は印の無い条件をすべて「未実施のリリース後テスト」に載せるため、マージ前に確かめた条件も並ぶ。承認資料の該当行数は 10.24.0 が 19、10.25.0 が 7、10.26.0 が 20、10.26.1 が 21。
直す場所は、quality-gates の完了報告で条件ごとに「マージ前に確認済み」と「リリースの後でしか確かめられない」を分けて記録すること、その記録を read_unverified が読むこと、requirements-design で「退行しない」条件の前提を今の振る舞いで確かめること。条件ごとの検証の結果は親 #2227 の工程のレポートに載せる。
関連: #2143(例)・#2166(経路の違う記録を根拠にした)
受け入れ条件
各条件の末尾の括弧は、確かめる時期と手段を表す。
- 1. 完了判定(quality-gates)を通した課題について → 受け入れ条件の番号ごとに「マージ前に確認済み」か「リリースの後でしか確かめられない」かの区分と、確認済みならその手段(テスト名・実行したコマンド)が、スクリプトで読める形で記録される(マージ前: 記録を書くスクリプトと読むスクリプトのテスト)
- 2. 「マージ前に確認済み」と記録された条件を持つ課題で承認資料を作る(
release_lib/materials.read_unverified)→ その条件は「未実施のリリース後テスト」に載らず、「リリースの後でしか確かめられない」と記録された条件は載る(マージ前: 本文と記録を与えるテスト) - 3. 区分の記録が無い課題(今の課題)で承認資料を作る → 今と同じく、印(
[x])が無く、リリース後テストに合格の行が無い条件がすべて載る(退行しない。read_unverifiedがこの形で拾う今の振る舞いを前提にする)(マージ前: 既存のテスト) - 4. 「マージ前に確認済み」と記録された条件を、リリース後テストで流し直さずに
sprint-close.py --with-verificationを打つ → その条件があることで課題がkept_openにならない。今のjudge_acceptanceは、本文のすべての条件の番号(印の付いた条件を含む)にリリース後テストの合格の行を求める(マージ前: テスト) - 5. この版の後の最初のスプリントで承認資料を作る → 「未実施のリリース後テスト」の行数が、受け入れ条件の総数より少なく、載った行はどれもリリースの後でしか確かめられない条件である(リリース後:
issues/approval-ndf-v<版>.mdを見る) - 6. 同じスプリントの requirements-design で「退行しない」条件を書いた課題 → 条件の前提にした今の振る舞いを確かめた手段(実行したコマンドかテストと、その結果)が課題の本文か工程の記録に残る(リリース後: 実際の課題を見る)
進行
モード: — / 進め方: auto
- 要求と受け入れ条件
- 作業場所の用意 — 2026-10-31 13:01
- 設計
- 素材の収集と出典の確定
- ドキュメント再構成
- ドキュメントレビュー
- 計画 — 2026-10-31 13:00
- 実装 — 2026-10-31 13:52
- 構造改善 — 2026-10-31 18:37
- 実装レビュー — 2026-10-31 22:29
- 完了判定 — 2026-10-31 13:59
- Pull Request — 2026-10-31 14:14
- 確定仕様化 — 2026-11-01 00:29
- 後片付け — 2026-11-01 00:28
- 配布 — 2026-11-01 00:00
- 体裁レビュー
- リリース後テスト — 2026-11-01 00:28
- 振り返り — 2026-11-01 01:03
- 棚卸し — 2026-11-01 01:17
振り返り: #2320 (comment)
リリース後の観測(m26-3 / v10.27.6、2026-11-01)
条件 5・6 は満たしていない。
- 承認資料
issues/approval-ndf-v10.27.6.mdの「未実施のリリース後テスト」は 18 行で、スプリントのプランが作った時点の版数を配布と本番のプランへ書き込み、並行する別のスプリントがその版を先に出すとプランを作り直すまで止まる #2164・リリース記録の PR を、まとめのプランを組む時点でなく実行の時点で解決する #2230 のチェックボックス形の条件の総数と同じだった。その多くはリリース後テスト(Release: ndf v10.27.6 #2351 )で「テストで確かめた」とされ、マージ前に確かめられた条件だった acceptance-check.py show --issue 2164(リリース記録の PR を、まとめのプランを組む時点でなく実行の時点で解決する #2230 も同じ)は記録 0 件- 区分を記録する手順は
quality-gates/SKILL.mdの本文にしか無く、supervise.pyの実装のプラン(完了判定のステップ)とsupervise_lib/*.pyはacceptance-check.py recordを呼ばない - スプリントのプランが作った時点の版数を配布と本番のプランへ書き込み、並行する別のスプリントがその版を先に出すとプランを作り直すまで止まる #2164 の条件 10、リリース記録の PR を、まとめのプランを組む時点でなく実行の時点で解決する #2230 の条件 6〜8(退行しない条件)について、前提を今の振る舞いで確かめた手段が本文に残っていない
直す先はプランの雛形(supervise_lib の完了判定のステップとその依頼文、要求定義のプランに退行しない条件の前提を確かめた手段を本文へ残すステップ)である。
リリース後テストの取り直し(2026-11-01 17:39 JST)
記録: #2328 (comment)
- 条件 1〜4: 合格(初回の記録)。条件 5・6: 不合格。m26-3(10.27.5 で流した最初のスプリント)の 4 課題に
## 受け入れ条件の確認が無く、承認資料issues/approval-ndf-v10.27.6.mdはマージ前に確かめられる条件も未実施に載せた。スプリントのプランが作った時点の版数を配布と本番のプランへ書き込み、並行する別のスプリントがその版を先に出すとプランを作り直すまで止まる #2164 の条件 10(退行しない)と リリース記録の PR を、まとめのプランを組む時点でなく実行の時点で解決する #2230 の条件 6〜8 に前提の確認の行が無い。修正は 受け入れ条件の区分と退行しない条件の前提の確認が、雛形のプランで流すスプリントで書かれない #2357 - 開いたままの理由: 合格でない条件が残る(
sprint-close.py --record-pr 2328 --with-verificationの結果は kept_open)
Activity
Merge pull request #2305 from devbasex/feat/issue-2144-m26-2