Repository navigation
Description
何を見つけたか
スプリント m2169(#2169)で、利用者が承認ゲート 1 で設計 PR #2175 を差し戻した(mermaid の描画エラー、#2176)。conductor は差し戻しを受けて修正コミット 1b0f85c を積み、再提示して承認を得たが、差し戻しの記録(~/.local/state/ndf/gate-rejections.jsonl)へ 1 行も書かなかった。振り返りで python3 scripts/gate-rejections.py count --sprint .ndf/tmp/sprint-m2169/sprint.json を打つと「関門 1 が 0 件・関門 2 が 0 件」と返った(2026-10-30 15:45 JST)。
差し戻しを記録するのは、答えを受けた conductor が手で打つ sprint-state.py gate <状態> "関門 N" --what <要約> --by user --outcome rejected だけである。プランにも hook にも、打ったかを確かめる仕組みが無い。
どこで見つけたか
- 手順:
plugins/ndf/skills/development-workflow/references/approval-request.mdの「答えを記録する」、references/pace.mdの「承認ゲートで止まった後の続け方」の「差し戻し」の行 - 振り返り: NDF Factory: Web サービスの置き場とライセンスの切り離し、全体設計(実行基盤・進捗の正本) #2169 の振り返り(
retrospectiveの「承認ゲートの差し戻し」の観点)。記録は振り返りの時点でgate-rejections.py recordにより 1 行足した
なぜこの変更の範囲外なのか
#2169 の受け入れ条件はサービスのディレクトリと境界の検査で、NDF の開発ワークフローの記録の仕組みを含まない。直すには supervise.py のプランか sprint-state.py の続け方を変えることになり、即時修正の 4 条件のうち「方針の変更を伴わない」を満たさない。根拠: MVV なし(プロジェクト MVV 版 3 の兆候は閾値未満で、この判断に効く項目は無い)
直さないと何が起きるか
振り返りの「承認ゲートの差し戻し」が実際より少なく出る。pace: normal の差し戻しは覆しにも出ないため、承認ゲートで人が何を止めたかの数が残らず、承認資料と工程のどこを強くすべきかの材料が欠ける。#1426 と同じ形(conductor がプランの外で手で打つコマンドの打ち忘れ)で、打たなくても工程は止まらないため気づかれない。
起票者の推定
- 打ち忘れの原因はプランの外の手打ちである(推した出所: スプリントの間に conductor が打つコマンドをキューと待ちだけにし、プランの外の手当てをなくす #1426 の表と、
pace.mdの表で差し戻しの行だけが続きのプランを持たないこと) - 直す先は差し戻しを受けた後の続け方(再提示のプラン・
supervise.py)か、承認ゲートの提示と答えを記録する 1 つの入口である(推した出所: 承認ゲート 2 の承認の後、conductor が承認の記録を手で書かずに本番の配布を流せるようにする #1920 が承認ゲート 2 の承認の記録を同じ形で扱っていること)
由来
issue #2169
受け入れ条件
- 範囲(
--sprint/--issue/--pr)に承認ゲートの答えの記録が 1 行も無いとき →gate-rejections.py countはstatusがok以外で、要約とmetricsで件数を0と書かず「未記録」と分かる形で返す - 範囲に答えの記録があり、差し戻しが 0 件のとき →
status: okで関門 1・関門 2 とも0を返す(記録された 0 件と未記録を区別する) - 承認ゲートで差し戻しを受けた後の続きを NDF の手順(プランか記録の入口)で進めると → conductor が
sprint-state.py gate ... --outcome rejectedを手で打たなくても、差し戻しが 1 行記録され、続くcountの関門の件数が 1 増える - 退行しない: 差し戻しが記録済みの範囲では、
countが今と同じ件数をstatus: okで返す。記録のファイルが読めないときは今と同じくstopped(終了コードEXIT_UNREADABLE)を返す
修正レイヤー
親 #2227(全工程の結果を統一した JSON レポートにし、失敗・未収束・未記録を ok で返さない)。承認ゲートの答えを工程のレポートとして記録する 1 つの入口にし、差し戻しを受けた後の続きのプランに記録を組み込む(supervise_lib/sprint_routes。#1920 と同じ層)。記録が無いときの gate-rejections.py count は「0 件」ではなく「未記録」を返す。~/.local/state/ndf/gate-rejections.jsonl は全体で 1 行で、その 1 行も m2169 の振り返りで後から足した分である。
進行
モード: — / 進め方: auto
- 要求と受け入れ条件
- 作業場所の用意 — 2026-10-31 03:59
- 設計
- 素材の収集と出典の確定
- ドキュメント再構成
- ドキュメントレビュー
- 計画 — 2026-10-31 03:58
- 実装 — 2026-10-31 04:44
- 構造改善 — 2026-10-31 07:37
- 実装レビュー — 2026-10-31 09:11
- 完了判定 — 2026-10-31 05:19
- Pull Request — 2026-10-31 05:29
- 確定仕様化 — 2026-10-31 10:59
- 後片付け — 2026-10-31 10:57
- 配布 — 2026-10-31 10:33
- 体裁レビュー
- リリース後テスト — 2026-10-31 10:56
- 振り返り — 2026-10-31 11:00
- 棚卸し — 2026-10-31 11:21
振り返り: #2282 (comment)
Activity
Merge pull request #2257 from devbasex/feat/issue-2183-m26-1
Merge: develop を取り込み、スプリント m26-1 との衝突と食い違いを解く
takemi-ohama commentedon Oct 31, 2026
同じ事象を PR #2250 の作業中に確認した。
takemi-ohama commentedon Oct 31, 2026
スプリント(26 自律実行の信頼性のスプリントを閉じる)を通りました