Skip to content

受け入れ条件の前提と文言の確認がリリース後テストまで遅れる(退行しない条件の前提を今の振る舞いで確かめず、マージ前に確かめられる条件も未実施に並ぶ) #2144

Open

Description

@takemi-ohama

何を見つけたか

スプリント m1914(ndf v10.22.0)のリリース後テストで、マージ前に確かめられた受け入れ条件の食い違いが 2 件、リリースの後に初めて見つかった。

  1. 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)。条件が前提にした「今の振る舞い」が、事実と違っていた
  2. 昇格のプランが、導入の確認をしたコミットと違う先頭を本番チャネルへマージしうる #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(判断の範囲は目の前の変更に限る)。

直さないと何が起きるか

前提の誤った「退行しない」条件は、リリース後テストで初めて崩れる。マージ前に確かめられた文言の欠けは、リリースまで残る。本番に出てから課題が増え、元の課題を閉じられない。

起票者の推定

由来

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 は満たしていない。

直す先はプランの雛形(supervise_lib の完了判定のステップとその依頼文、要求定義のプランに退行しない条件の前提を確かめた手段を本文へ残すステップ)である。

リリース後テストの取り直し(2026-11-01 17:39 JST)

記録: #2328 (comment)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions