feat(nightly-todo): 順位 table 存在照合ゲートで後始末漏れの再実装を防ぐ (WP lane-model PR-3) - #411
Conversation
人間が台帳タスクを手で実装してマージした場合、台帳の後始末は人手のため
漏れる (実績 4 件中 2 件)。残った行を夜間ループが再実装しうる。着手フローは
完了時に順位 table の行を消すので、順位 table からの消失を「完了済み」の
機械的シグナルとして使う。
- lib-ledger に summary_gate module を新設
- parse_summary_ranks: 順位 table (順位 + タスク 列を持つ表) から順位集合を抽出
- select_listed_in_summary: 未掲載の候補を飛ばして次の候補を選び、飛ばした
順位を呼び手へ返す (run 全体は止めない)
- cli-nightly-task-select に --summary-file を追加 (複数指定可・省略不可)。
未掲載順位は stderr へ [NIGHTLY_WARN] を 1 件ずつ出す。stdout は workflow が
許可リストで絞るため、そちらだと exit 3 の run で警告が見えない
- nightly-todo.yml の Select step へ todo-summary.md / todo-summary2.md を配線
- 実 exe を実ファイルに当てた検証でパーサのバグを発見: todo-summary.md の
順位 table には途中に空行があり、初版はそこで表が終わったと判定して順位 193
以降を全部取りこぼしていた。空行では終端しない実装へ修正し、実データ由来の
回帰テストを追加。データ側の空行も除去した
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (6)
💤 Files with no reviewable changes (1)
Included review availability: Your plan includes up to 1 review per rolling hour; 0 remain after this review. 📝 WalkthroughWalkthrough順位表を解析する Changes要約順位ゲート
Estimated code review effort: 4 (Complex) | ~45 minutes Merge Risk: 🔵 Low · up to The PR adds summary-table validation to prevent completed tasks from being selected again; the remaining risk is limited to a future-dated documentation statement that should be corrected to avoid misleading maintainers. The PR is mergeable with owner follow-up. Sequence Diagram(s)sequenceDiagram
participant nightly_todo_yml as nightly-todo.yml
participant cli_nightly_task_select as cli-nightly-task-select
participant summary_gate
participant Ledger
nightly_todo_yml->>cli_nightly_task_select: 2つの --summary-file を指定
cli_nightly_task_select->>summary_gate: 要約ファイルを解析
summary_gate-->>cli_nightly_task_select: 順位の和集合を返却
cli_nightly_task_select->>summary_gate: 台帳候補を順位照合
summary_gate->>Ledger: 次の候補を取得
Ledger-->>summary_gate: 台帳候補を返却
summary_gate-->>cli_nightly_task_select: タスクと skipped_ranks を返却
cli_nightly_task_select-->>nightly_todo_yml: タスク選択または警告を出力
Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
🤖 PR Monitor 分析 (GitHub Actions バックストップ)
Applicable Findings (Critical / High / Major)(該当なし — レビュー指摘が 0 件のため軽量サマリーとする) Applicable Findings (Medium 以下)(該当なし) Filtered (not applicable)(該当なし) 差分概要
設計判断 (フェイルクローズ、複数 summary ファイルの和集合必須化、skip 時に run 全体を止めない方針など) は本 PR の diff 内コメントおよび ADR-072/ADR-033 と整合しており、逸脱は見当たらない。 次のアクション
|
目的
台帳に残っているが
docs/todo-summary*.mdの順位 table から消えた順位を、夜間ループに選ばせない。作業計画docs/work-plan-nightly-lane-model.mdの PR-3 にあたる。背景 — 後始末は人手なので漏れる
夜間ループの Guard が agent に台帳を書き換えさせない (ADR-072 決定 6) ため、台帳の後始末は人間の責務として残っている。人間が台帳タスクを手で実装してマージした場合、実績では 4 件中 2 件で後始末が漏れていた。残った行は夜間ループにとって「まだ未実装」に見えるため、完了済みのタスクを再実装しうる。
一方、着手フローは完了時に順位 table の行を削除する。順位 table からの消失は「完了 (または取り下げ) 済み」の機械的シグナルであり、台帳の行が残っていてもそちらを見れば気づける。
PR-1 で ADR-033 を改訂し「順位は追記型 ID で再採番しない」と定めたため、順位 table に無い = 消えたと一意に読める。この一意性が本ゲートの前提である。
変更内容
lib-ledgerにsummary_gatemodule を新設parse_summary_ranks: 順位 table (順位+タスク列を持つ表) から順位集合を抽出。順位単独で判定すると棚卸し履歴など別の表の数字を拾うため、2 列を要求するselect_listed_in_summary: 未掲載の候補を飛ばして次の候補を選び、飛ばした順位を呼び手へ返す。その順位だけを飛ばし run 全体は止めない — stale な 1 行で夜間ループが毎晩何もしなくなるのは、後始末漏れの実害に比べて過剰cli-nightly-task-selectに--summary-fileを追加複数指定可・省略不可。省略を許すと、渡し忘れた run が「照合できなかった」ではなく「全順位が載っている」と解釈して完了済みタスクを再実装する (
--exclude-ranksと同じ設計)。1 ファイルでも読めなければ exit 2 (fail-closed)。workflow の配線
Select step へ
master-ref/docs/todo-summary.mdとtodo-summary2.mdを渡す。順位 220 以降は 2 つ目にあるため両方必要。実測で見つけた自分のバグ
初版パーサは実データで壊れていた。
docs/todo-summary.mdの順位 table には途中に空行があり、そこで表が終わったと判定して順位 193 以降を全部「消えた」と誤判定していた。実 exe を実ファイルに当てて初めて露見している (fixture テストでは踏めない穴)。検証
cargo test --workspacegreen (lib-ledger 113 件、うち新規 13 件) / clippy clean /pnpm lint:docsclean / pre-push takt レビュー security・simplicity とも findings なし。実 exe を実ファイルに当てて 5 経路を実測:
[NIGHTLY_WARN]出力 → 次候補 240 を選択、exit 0--summary-file欠落計画からの逸脱 2 点
> selected.txtに捨てて許可リストのkey=行だけを転送するため、stdout だと全候補が飛ばされた run (exit 3) で警告が誰にも見えない未実施 — workflow の実走観測
workflow_dispatchはマージ後でないと検証にならない。本 workflow はゲート exe をmaster ref の写しからビルドする (ADR-072 決定 1 の信頼境界) ため、PR ブランチで dispatch すると「新しい引数を渡す workflow」と「その引数を知らない master の exe」の組み合わせになり未知の引数ですで落ちる。PR-4 も同じ workflow を触るため、PR-4 マージ後に dispatch 1 回で両方を観測する (作業計画の実走確認 2)。
後続
work-plan の PR-4 (ブランチのライフサイクル 2 種) → PR-5。
Summary by CodeRabbit
新機能
ドキュメント