Repository navigation
sprint-close: 最終工程を通っていない課題を、リリース後テストの前に閉じないようにする #2119
Description
何を見つけたか
standard のスプリント s2086 で、本番 v10.20.0 の後に conductor が sprint-close.py --record-pr 2109 --prs 2092,2088,2090(--with-verification なし)を打ち、#2086・#2083・#2080・#469 をリリース後テストの前に閉じた。その後のリリース後テストで #2086 の受け入れ条件 10 が不合格になったが、#2086 は閉じたまま残った。
progress-tracking の「スプリントを閉じる」は、振り返りを通る変更では振り返りの記録の後に閉じると定め、release-verification は「不合格・保留の条件を持つ課題は閉じない」と定める。どちらも文書の決まりで、sprint-close.py は呼ばれた時点で止めない。
- 課題の工程表(本文の進行)には「リリース後テスト」「振り返り」が未通過と出ているのに、
--with-verificationを付けずに打てば閉じる - 先に閉じた原因は、引継ぎ文書(
.ndf/handoff/issue-2086.md)の「次にやること」に conductor が「課題を閉じる」を先頭に書いたこと
どこで見つけたか
#2086 の振り返り(2026-10-25)。記録は PR #2109 のリリース後テストのコメントと、#2086 の本文の末尾の行。
なぜこの変更の範囲外なのか
#2086 は文書系の Skill を変える課題で、スプリントを閉じるスクリプトは受け入れ条件に無い。sprint-close.py に工程の通過を見させるかは契約(引数と終了コード)に関わり、即時修正の条件 2 を満たさない。根拠: NDF の共通原則「判断の範囲は目の前の変更・操作に限る」(MVV 版 3)。
直さないと何が起きるか
会話をまたいで工程を続けるとき、引継ぎ文書の手順の並びを書き違えるだけで、確かめていない課題が閉じる。閉じた課題は棚卸しの対象から外れ、不合格の条件が残ったことが見えなくなる。
起票者の推定
- 直し方の候補は (a)
sprint-close.pyが、課題の工程表で振り返り(または最終工程)を通っていないときに止まる、(b) 工程表にリリース後テストを持つモードでは--with-verificationを既定にする、(c) 引継ぎ文書の「次にやること」を工程表から機械で書く(推した出所: 今回の経緯)
由来
issue #2086
修正レイヤー
親 #2228(課題を閉じる時点の正本)。sprint-close.py は工程の通過を見ない。雛形の supervise_lib/sprint.py の close_plan は release-verify → close → retro → refine の順で、振り返りの前に課題を閉じる。これは progress-tracking/SKILL.md の「振り返りを通る変更では、retrospective が記録を投稿した後に閉じる」と食い違う。closed_unverified は --with-verification を付けたときだけ働く。
受け入れ条件
各条件の末尾の括弧は、確かめる時期と手段を表す。
- 1. 最終工程(棚卸しの前に最後に通る工程。振り返りを通る変更なら振り返り)をまだ通っていない課題を含めて
sprint-close.py --record-pr <記録のPR> --issues <番号>を打つ →--with-verificationの有無にかかわらず、その課題は閉じず、結果 JSON の items にkept_openと、通っていない工程が分かる理由で載る(マージ前:ghと工程の通過の記録を差し替えたテスト) - 2. 最終工程を通り、リリース後テストの行がすべて合格の課題で、
--with-verificationを付けて打つ → 今と同じく受け入れ条件へ[x]を付けて閉じる(退行しない)(マージ前: 既存のテストと追加のテスト) - 3. 振り返りを通るモードで
supervise.py new closeが書くまとめのプランを読む → steps の並びが、リリース後テスト(配布の記録があるとき)→ 振り返り → 課題を閉じる → 棚卸しの順で、progress-trackingの「スプリントを閉じる」の表(retrospectiveは記録を投稿した後に閉じる)と一致する。今のsupervise_lib/sprint.pyのclose_planは close → retro → refine の順である(マージ前: プランを組んで steps の id を並べるテスト) - 4. 同じプランを流す → 課題を閉じるステップの時点で、振り返りの記録(Pull Request のコメント)が投稿済みで、棚卸しのステップがそれより後に始まる(マージ前: プランの
nextのつながりをたどるテスト) - 5. この版の後の最初のスプリントの仕上げで、引継ぎ文書や conductor の手順の並びに関わらず
sprint-close.pyを先に打っても、振り返りの前の課題が閉じない(リリース後: 実際のスプリントの仕上げの結果 JSON と課題のclosedAtを見る)
進行
モード: — / 進め方: auto
- 要求と受け入れ条件
- 作業場所の用意 — 2026-10-31 13:00
- 設計
- 素材の収集と出典の確定
- ドキュメント再構成
- ドキュメントレビュー
- 計画 — 2026-10-31 13:00
- 実装 — 2026-10-31 13:01
- 構造改善 — 2026-10-31 18:37
- 実装レビュー — 2026-10-31 22:28
- 完了判定 — 2026-10-31 16:12
- Pull Request — 2026-10-31 16:25
- 確定仕様化 — 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)
状況(2026-11-01、v10.27.6)
受け入れ条件 1〜4 は v10.27.5 のリリース後テスト(#2328 )で合格。条件 5 は v10.27.5 の後の最初のスプリント m26-3 で確かめた。まとめのプランはリリース後テスト → 振り返り → 課題を閉じる → 棚卸しの順で流れ、#2044・#2121 は振り返りの記録(#2352 、09:14:47Z)の後に閉じた(09:20:54Z)。振り返りの行を持たない #2354 へ sprint-close.py --record-pr 2351 --issues 2354 --dry-run を打つと kept_open(最終工程(振り返り)の記録が無い)を返す。関連テスト(test_sprint_close_final_stage.py ほか 7 ファイル)は 158 件合格。
Activity