Repository navigation
Description
依頼(原文)
ただ、このフェーズはsprintの終わりに毎回実行、では重すぎる気もします。
ただ、棚卸については、バージョンアップに伴う既存issueの追従は毎sprint、優先順位の再評価、順位付け、マイルストーン再編、枝刈りは数回に一回など、グラデーションが必要かもしれません。
(書き手: 利用者、日付: 2026-11-01 JST。依頼の全文と、ほかの 3 つの原文は確定仕様 https://github.com/devbasex/ai-plugins/blob/develop/docs/specifications/ndf-backlog-refinement-depths.md の元になった要求の写し(コミット 8d72be3 の issues/issue-2315-requirements.md)にある)
この課題の残りは、上の「重すぎる」に対して、毎スプリントの棚卸しが実際に軽くなったかを確かめる 1 点である。棚卸しの 3 つの深さ(差分の棚卸し・見直し・大整理)は ndf v10.27.14 で配布し、受け入れ条件 17 を除く起票時の条件は、その配布と確定仕様の「テスト観点」が持つ。確かめたこと(2026-11-04、origin/develop 7476a08): pytest で test_upkeep_depth*・test_upkeep_owner*・test_upkeep_overhaul* が 30 件合格。
起票者の推定
| # | 条件 | 推した出所 | この要求での扱い |
|---|---|---|---|
| S15 | 毎スプリントの棚卸しの所要が、今(206〜224 秒・1.41〜1.61 ドル)より短くなることを実測で示す | 原文の「重すぎる」。Value 4(外の利用で測って決める) | 受け入れ条件 17。2026-11-02 の承認ゲート 1 で承認済み |
| S16 | 比べる値は、変更の後の差分の棚卸し 3 回の中央値とし、今の範囲の下端(206 秒・1.41 ドル)を下回ることを「短い」とする | 1 回ごとのばらつき(変更の後の 4 回で 270〜346 秒)が範囲の幅より大きいため | 受け入れ条件 17a・前提 1 |
| S17 | 深さの記録の差分の棚卸しの行へ、棚卸しのステップの秒・ドルを機械で写す | 確定仕様の「テスト観点」が測る記録をこの行と決めているが、行の値が空のため | 受け入れ条件 17b |
目的
- 毎スプリントの棚卸し(差分の棚卸し)の所要を、3 つの深さに分ける前より短くし、短くなったことを深さの記録で示す
今の状態(実測)
変更の後も、差分の棚卸しは分ける前より長い。 このリポジトリのメインディレクトリのプランの進行の記録(.ndf/loop/*/lap-*/close*/*-state/progress.jsonl)の、refine のステップの行を数えた。
| 開発ループの周回 | 時刻(UTC) | 秒 | ドル | 終了コード | 時期 |
|---|---|---|---|---|---|
| l20261031 周回 2 | 2026-10-31 08:24 | 224.4 | 1.6101 | 0 | 分ける前(基準) |
| l20261031 周回 3 | 2026-10-31 13:16 | 206.3 | 1.4075 | 0 | 分ける前(基準) |
| lfactory2 周回 3 | 2026-11-02 13:03 | 270.8 | 2.1563 | 0 | 変更の後 |
| lflow 周回 1 | 2026-11-04 06:22 | 316.4 | 1.7723 | 0 | 変更の後 |
| lroot2 周回 5 | 2026-11-04 06:23 | 314.4 | 1.8441 | 0 | 変更の後 |
| lfactory3 周回 1 | 2026-11-04 15:08 | 346.2 | 2.1881 | 0 | 変更の後 |
(終了コードが 0 でない行と、同じ周回のやり直しの行は除いた。集計のコマンドは grep '"step": "refine",' <progress.jsonl> | grep '"kind": "step"' の seconds・cost)
深さの記録には、比べる値がまだ残っていない。 まとめのプランの深さの記録のステップ(refine-record)は、ndf v10.27.24(コミット ea73a7d)からプランの進行の記録(--progress)を受け取り、棚卸しのステップの秒・ドルと開発ループ・周回を写す(plugins/ndf/scripts/supervise_lib/sprint_close_steps.py の 185 行目)。2026-11-06 07:15 JST 時点の .ndf/backlog/depths.jsonl の差分の棚卸しの行は 8 件で、cost・seconds・loop・lap はどれも null である。v10.27.24 のタグのコミットの時刻(2026-11-05 19:11 UTC)より後の行は 4 件(スプリント lfactory3-8・lflow2-9・lroot3-14・lroot3-17)で、v10.27.24 を導入する前に作ったプランが書いた行か、写す処理が働いていないかは未確認。2026-11-05 22:17 UTC のスプリント lfactory3-10 の差分の棚卸しの行は、seconds 208.3・cost 1.733・loop lfactory3・lap 10 を持ち、値が写った最初の 1 件である(基準の下端 206 秒・1.41 ドルをどちらも下回らない)。
見積の段階を付ける課題は、そのスプリントで起票した課題に絞られた。 ndf v10.27.24(コミット 4d31771 ほか)から、差分の棚卸しの候補の収集は unscored の経路を --since-ref のコミットの時刻より後に作られた課題に限り、rank も同じ --since-ref を受けて、それより前に作られた見積の無い課題を見直しへ回す(metrics.left_for_review)。スプリント lfactory3-10 の差分の棚卸し(2026-11-06)では unscored の経路は 0 件だった(upkeep.py candidates --since-ref ndf--v10.27.25 --depth diff の metrics.by_route.unscored)。
前提
- 前提 1: 「今より短い」は、今の範囲(206〜224 秒・1.41〜1.61 ドル)の下端を下回ることとする。1 回ごとのばらつきが大きいため、変更の後の差分の棚卸し 3 回の中央値で比べる
- 前提 2: 比べるのはこのリポジトリ(ai-plugins)のメインディレクトリの周回だけである。並行して動く別の開発ループの周回も数に入れる
- 前提 3: 差分の棚卸しを担う言語モデルは、基準の 2 回と同じ
claude-opus-5-5とする。モデルが変わった周回は比べる 3 回に入れない - 前提 4: 1 回の候補の上限(既定 10 件)は変えない。上限を下げて所要を縮めることは、この課題の達成として数えない
対象範囲
含む:
- 差分の棚卸しの所要を縮めること(何を削るか・どう縮めるかは設計で決める)
- 差分の棚卸しの行に、そのステップの秒・ドルと、開発ループ・周回を残すこと
- 差分の棚卸しの見積の段階の付与を、
SKILL.mdの定めどおりそのスプリントで起票した課題に揃えること
含まない:
- 見直しと大整理の所要と、その費用と秒の上限(棚卸しの見直しのステップに費用と秒の上限が効かない #2423 が持つ)
- 1 回の候補の上限の値の変更(前提 4)
- 過去の周回の深さの記録を書き直すこと(比べる 3 回は、変更の後に新しく書かれた行から取る)
ドメインイベント
| # | イベント | 引き金 | 失敗したとき | 順序の前提 |
|---|---|---|---|---|
| E1 | 差分の棚卸しの候補を集めた | まとめのプランの refine のステップ |
候補が読めなければ棚卸しのステップが失敗で終わる | スプリントのマージが終わった |
| E2 | 差分の棚卸しのステップが終わり、秒・ドルがプランの進行の記録に書かれた | refine のステップの終了 |
失敗で終わっても秒・ドルは書かれる(今の振る舞い) | E1 |
| E3 | 差分の棚卸しの行が深さの記録に書かれた | refine-record のステップ |
秒・ドルが読めなければ null のまま書く(行は欠かさない) |
E2 |
| E4 | 変更の後の 3 回の行がそろい、中央値を基準と比べた | リリース後テスト | 3 回そろわなければ判定を保留し、そろった回数を報告に書く | E3 が 3 回 |
E3 の失敗の経路(秒・ドルが読めないときに行を欠かすか null で書くか)は受け入れ条件 17b-3 に移した。
用語
| 用語 | 意味 |
|---|---|
| 差分の棚卸し | 毎スプリントの棚卸し。誤りの訂正と、そのスプリントで起票した課題への見積の段階の付与だけを行う(--depth diff) |
| 深さの記録 | .ndf/backlog/depths.jsonl。深さごとの起動の判定と実行を 1 行ずつ残す |
| プランの進行の記録 | まとめのプランのステップごとの終了コード・秒・ドルを 1 行ずつ残す記録(.ndf/loop/<ループ>/lap-<番号>/close*/*-state/progress.jsonl) |
受け入れ条件
- 17. このリポジトリで、毎スプリントの棚卸しの所要(秒・ドル)が今(開発ループ l20261031 の周回 2・3 の
refineのステップで 206〜224 秒・1.41〜1.61 ドル)より短くなったことを、変更の後の周回の記録で示す- 17a. 変更を配布した後の差分の棚卸しの行 3 件(深さの記録の
depthがdiff・eventがran)で、secondsの中央値が 206 未満、costの中央値が 1.41 未満である - 17b-1. まとめのプランで差分の棚卸しを通すと、深さの記録の差分の棚卸しの行の
seconds・costが、同じプランの進行の記録のrefineの行のseconds・costと一致する - 17b-2. 同じ行の
loop・lapが、そのプランを起動した開発ループの名前と周回の番号になる(開発ループの外で人が起動したプランではnull) - 17b-3. プランの進行の記録に
refineの行が無いとき(ステップが打ち切られたなど)も、差分の棚卸しの行は書かれ、seconds・costはnullになる - 17c. 差分の棚卸しの候補(
candidates --depth diff)にunscoredの経路で入る課題は、前の正式版のタグの時刻より後に作られた課題だけである。見直し(--depth review)の候補の集め方は変わらない - 17d. 差分の棚卸しの行の中央値の比べ方(3 件そろったか・中央値・基準との差)を、コマンド 1 本で深さの記録から出せる。3 件に満たなければ、そろった件数を返して判定を保留する
- 17a. 変更を配布した後の差分の棚卸しの行 3 件(深さの記録の
非機能の条件
| 大項目 | 条件 |
|---|---|
| 性能・拡張性 | 差分の棚卸しの所要は、変更の後 3 回の中央値で 206 秒未満・1.41 ドル未満(受け入れ条件 17a) |
| 運用・保守性 | 所要を比べる値が深さの記録に残り、プランの進行の記録を手で探さずに比べられる(受け入れ条件 17b・17d) |
影響
| 対象 | 影響 |
|---|---|
| 公開インタフェース | 変わらない。upkeep.py depth record の引数は既にある --cost・--seconds・--loop・--lap を使う。比べ方のコマンド(17d)は足す |
| データ | 深さの記録の差分の棚卸しの行に値が入る。行の形は変わらない。既存の行は書き直さない |
| 既存の振る舞い | 差分の棚卸しの候補から、前の正式版より前に作られた見積の無い課題が外れる。それらは見直しで拾う |
検証手段
| 項目 | 手段 |
|---|---|
| テスト | uv run --frozen --project . --all-extras pytest plugins/ndf/skills/backlog-refinement/tests plugins/ndf/scripts/tests/test_supervise_pace.py -q -n 4 |
| 静的解析・型検査 | プロジェクトの CI のジョブ(ruff・構造の検査)をそのまま使う |
| 手動確認 | 変更を配布した後の開発ループで差分の棚卸しが 3 回通ったら、17d のコマンドで中央値を出し、基準と比べる(受け入れ条件 17a。リリース後テストで確かめる) |
前提とする取り決め
| 項目 | 参照先 / 決めたこと |
|---|---|
| プロジェクト構造 | AGENTS.md。深さの記録は .ndf/backlog/ の手元の記録でコミットしない(確定仕様の「運用」) |
| コーディング規約 | AGENTS.md の「最小限のコード実装」。文言を照合するテストは書かない |
| テスト戦略 | 17b・17c・17d は単体テストで、17a はリリース後テストの実測で確かめる |
境界
| 区分 | 内容 |
|---|---|
| 常に行う | 既存テストの実行、変更の後の所要の実測 |
| 確認してから行う | 差分の棚卸しの手順(SKILL.md)から作業を外すこと。承認ゲート 1・2 で人が見る |
| 行わない | 候補の上限を下げること、見直しと大整理の上限(#2423)、過去の記録の書き直し |
未決
| 項目 | 誰が決めるか | 期限 |
|---|---|---|
| 17c の後も中央値が基準を下回らないとき、差分の棚卸しから何を外すか(手順の中のどの作業が時間を使っているかの内訳) | 設計(内訳の実測から決め、承認ゲート 1 で人が確かめる) | 設計 PR |
| 3 回の実測が配布から何日でそろうか(並行する開発ループの数による) | リリース後テストの担当 | 配布の後 |
関連: #2423(棚卸しの見直しのステップに費用と秒の上限が効かない)
進行
モード: — / 進め方: auto
- 要求と受け入れ条件 — 2026-11-05 01:34
- 作業場所の用意 — 2026-11-05 08:32
- 設計 — 2026-11-05 01:38
- 素材の収集と出典の確定
- ドキュメント再構成
- ドキュメントレビュー
- 計画 — 2026-11-05 08:32
- 実装 — 2026-11-05 09:26
- 構造改善 — 2026-11-05 10:36
- 実装レビュー — 2026-11-05 11:18
- 完了判定 — 2026-11-05 09:53
- Pull Request — 2026-11-05 10:08
- 確定仕様化
- 後片付け — 2026-11-04 06:16
- 配布 — 2026-11-05 12:11
- 体裁レビュー
- リリース後テスト — 2026-11-04 06:11
- 振り返り — 2026-11-04 06:11
- 棚卸し — 2026-11-04 06:16
振り返り: #2426 (comment)
人の判断待ち(開発ループ lflow2)
- 判定: unknown(承認ゲート 1)
- 理由: 設計の中身は MVV に沿っている。見積の段階を付ける課題を、そのスプリントで作られた課題に絞って所要を縮める(Value 3)。秒・ドルを実測で記録し、比べ方を 1 本のコマンドにする(Value 4・Value 5)。基準の値と件数は引数で受け、既定に埋め込まない(Value 6)。起点の時刻を候補の収集と同じものにそろえる(Value 7)。配布の後の 3 回の中央値は配布前に測れないため、判定の対象にしていない/要求のコピーの照合(requirements-check)が終了コード 2 で止まり、issues/issue-2315-requirements.md を読めていない。原因は未確認とされている。このため、要求と受け入れ条件のコピーが 開発ワークフローに「見直し」と「大整理」を足す: 棚卸しを毎スプリントの差分の棚卸し・数回に 1 回の見直し・十数回に 1 回の大整理(根本原因の発見と組み直し、後回しの再評価)に分ける #2315 の本文と一致するかを材料から確かめられない。確かめていないものを済んだと扱わない原則(Value 1)と、AI が決められないときは人へ戻す決まり(Value 2)に照らすと、自動で関門を通せない/承認資料の数字が食い違っている。PR 本文の変更統計(glossary.md +2 -2・glossary.json +14 -0・設計文書 +317)と、変更したファイルの一覧(+3 -1・+13 -1・+320)が合わない。本文が古いまま残っている可能性があり、承認資料の正しさ(Value 3・Value 8)を確かめられない/共通原則 C1〜C8 と固有の P1 に当たる操作は見当たらない。用語集と issues/ の文書は .ndf/ でも CLAUDE.md の運用の節でもない。深さの記録(.ndf/backlog/depths.jsonl)はスクリプトが行を足す記録で、この PR では利用者の設定を書き換えない
- 根拠の項目: Mission, Vision, Value 1, Value 2, Value 3, Value 4, Value 5, Value 6, Value 7, Value 8, C7, P1
- 設計 Pull Request: 差分の棚卸し: 見積の段階をそのスプリントの課題だけに付け、縮んだ所要をコマンド 1 本で確かめる(#2315) #2526
- 答え: approved
- 答え方:
python3 /work/ai-plugins/plugins/ndf/scripts/sprint-state.py loop answer lflow2 2315 --approved|--rejected|--revise --note <指摘ファイル>
Activity
[-]開発ワークフローに「見直し」のフェーズを足す: 棚卸しを毎周回の追従と数周回に 1 回の見直しに分け、見直しでニーズとシーズを調べて起票する[/-][+]開発ワークフローに「見直し」のフェーズを足す: 棚卸しを毎スプリントの追従・数回に 1 回の見直し・十数回に 1 回の後回しの再評価に分け、見直しでプロジェクトが宣言した材料からニーズとシーズを調べて起票する[/+][-]開発ワークフローに「見直し」のフェーズを足す: 棚卸しを毎スプリントの追従・数回に 1 回の見直し・十数回に 1 回の後回しの再評価に分け、見直しでプロジェクトが宣言した材料からニーズとシーズを調べて起票する[/-][+]開発ワークフローに「見直し」と「大整理」を足す: 棚卸しを毎スプリントの追従・数回に 1 回の見直し・十数回に 1 回の大整理(根本原因の発見と組み直し、後回しの再評価)に分ける[/+][-]開発ワークフローに「見直し」と「大整理」を足す: 棚卸しを毎スプリントの追従・数回に 1 回の見直し・十数回に 1 回の大整理(根本原因の発見と組み直し、後回しの再評価)に分ける[/-][+]開発ワークフローに「見直し」と「大整理」を足す: 棚卸しを毎スプリントの差分の棚卸し・数回に 1 回の見直し・十数回に 1 回の大整理(根本原因の発見と組み直し、後回しの再評価)に分ける[/+]Docs: #2315 の I2 を受け入れ条件 9・9a に揃え、持ち主の宣言の有効条件を AND にする
docs(#2315): 決定 6 の持ち主の判定を I2 の AND 条件に揃える
Docs: #2315 の設計の未確認の表で、型の割合を決定 13 と設定の表の 30% にそろえる
Docs: #2315 の承認ゲート 1 で利用者が決めた 3 点(置き場・利用の記録の既定・試すプロジェクト)を設計と要求の写しへ反映する
Merge pull request #2379 from devbasex/design/issue-2315
Merge pull request #2402 from devbasex/feat/issue-2315-lflow-1
Fix(#2315): report --depth を足し、報告と深さの記録に調べた材料を載せ、日本語の調査の項目の記録が上書きされない…
Fix(#2315): 調査の記録を読む関数を read_research_item へ改名し、post_queue の read_ite…
docs(#2315): 比べ方で同じ周回の行を重ねて数えない条件と、用語の反映を直す
docs(#2315): 同じ周回の重複は秒・ドル・言語モデルの絞り込みの後に除くと明記する
Merge: develop を取り込み、用語集の衝突を解く
Merge pull request #2526 from devbasex/design/issue-2315
Merge pull request #2546 from devbasex/feat/issue-2315-lflow2-8
fix: 差分の棚卸しの rank に --since-ref を足し、起点以前に作られた見積の無い課題を excluded にせず見直し…
refactor: rank の見積の入力を読む関数を upkeep_rank_inputs.py へ分け、upkeep_rank_cmd…