refactor(ledger): 台帳パーサを lib-ledger crate へ抽出する - #393
Conversation
cli-nightly-task-select 内部の台帳 markdown パーサ (ledger.rs + ledger/screening.rs) を共有 lib crate lib-ledger へ移設する (ADR-024 共通 lib、ADR-026 workspace)。cli-* crate から別の cli-* crate を 直接呼ばないため、後続 PR で追加する cli-web-task-curation と共有する パースロジックは lib 側に置く。 挙動不変の純リファクタ。移設したテストは lib-ledger 側で 51 件全 pass。 移設で stale になる docs の相対リンク 3 箇所も追随させる。 作業計画書 docs/web-task-curation-facet-plan.md を同梱する (PR 3 の最終コミットで削除する一時文書、経緯は git log に残す)。
📝 WalkthroughWalkthrough台帳パーサを Changes台帳パーサ共有化
Estimated code review effort: 2 (Simple) | ~10 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches 💡 1📝 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 以下)該当なし (指摘0件) Filtered (not applicable)該当なし (指摘0件) 次のアクション
|
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/web-task-curation-facet-plan.md`:
- Around line 45-49: 計画書の PR 1 節を、lib-ledger への抽出完了後の状態に更新してください。実装参照を削除済みの
src/cli-nightly-task-select/src/ledger.rs ではなく現在の lib-ledger 配置と公開 API
に変更し、移設作業を完了済みとして作業項目と DoD から未実施扱いの記述を除去または完了化してください。main.rs の lib_ledger:: 参照や
LEDGER_DATA_FRAME_MARKER とワークフローの対応など、現行実装に合わせた記述は維持してください。
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: dc09e90f-c428-422f-844c-5ca28be1cc85
⛔ Files ignored due to path filters (1)
Cargo.lockis excluded by!**/*.lock
📒 Files selected for processing (9)
Cargo.tomldocs/todo20.mddocs/todo22.mddocs/web-task-curation-facet-plan.mdsrc/cli-nightly-task-select/Cargo.tomlsrc/cli-nightly-task-select/src/main.rssrc/lib-ledger/Cargo.tomlsrc/lib-ledger/src/lib.rssrc/lib-ledger/src/screening.rs
| - **`src/cli-nightly-task-select/src/ledger.rs`** — 台帳 markdown table を I/O なしで parse する純粋層。公開 API: `Task` 構造体、`select(markdown: &str, excluded_ranks: &BTreeSet<u32>) -> Result<Option<Task>, String>`。 | ||
| - `無人可` 列を持つ表だけを走査対象にする (`header_columns` が `"無人可"` 列の有無で判定)。**棚卸し履歴表・「無人可としなかった N 件の理由」表は `無人可` 列を持たないため自動的に除外される** — これは Criterion 3 のスコープ規則 (これらの表は順位列を持つが対象外) と一致する。 | ||
| - 列ずれ・順位重複・未知マーク・エスケープパイプ `\|`・prompt framing 脱出文字・不可視文字を**すべてエラー**で止める堅牢なパーサ。40 件超の unit test を同梱。 | ||
| - サブモジュール `src/cli-nightly-task-select/src/ledger/screening.rs` (`mod screening;`) を持つ。公開 API: `screen_for_public_output`, `screen_for_title`。`LEDGER_DATA_FRAME_MARKER` 定数は `.github/workflows/nightly-todo.yml` の `===BEGIN/END_LEDGER_DATA===` 区切りと**対**であり、片方だけ変えると framing が破れる (ADR-072 決定 13)。移設後も doc comment でこの対応を維持すること。 | ||
| - **`src/cli-nightly-task-select/src/main.rs`** — 現在の consumer。`mod ledger;` (35 行目)、`use ledger::{screen_for_public_output, screen_for_title, Task};` (40 行目)、`ledger::select(...)` (119 行目)。lib 抽出後はこれらを `lib_ledger::` 参照へ書き換える。 |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
PR 1 の完了状態を計画書へ反映してください。
この PR は lib-ledger への抽出を完了しています。しかし、この計画書は PR 1 を未実施の作業として記載し、src/cli-nightly-task-select/src/ledger.rs を移設元として案内しています。将来の実装者がこの文書を参照すると、完了済みの移設を再実施したり、削除済みパスを確認したりする可能性があります。
PR 1 節を完了済みとして更新してください。少なくとも実装参照先、作業項目、DoD を現在の状態に合わせてください。
Also applies to: 59-78
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/web-task-curation-facet-plan.md` around lines 45 - 49, 計画書の PR 1
節を、lib-ledger への抽出完了後の状態に更新してください。実装参照を削除済みの
src/cli-nightly-task-select/src/ledger.rs ではなく現在の lib-ledger 配置と公開 API
に変更し、移設作業を完了済みとして作業項目と DoD から未実施扱いの記述を除去または完了化してください。main.rs の lib_ledger:: 参照や
LEDGER_DATA_FRAME_MARKER とワークフローの対応など、現行実装に合わせた記述は維持してください。
🤖 PR Monitor 分析 (GitHub Actions バックストップ)
Applicable Findings (Critical / High / Major)該当なし Applicable Findings (Medium 以下)
Filtered (not applicable)該当なし 次のアクション
|
|
検討したものの、既存のweekly-reviewで十分にTodoの追加はできるのでクローズ |
概要
cli-nightly-task-select内部の台帳 (docs/claude-code-web-tasks.md) markdown パーサを共有 lib crate
lib-ledgerへ移設する純リファクタ (ADR-024 共通 lib、ADR-026 workspace)。cli-* crate から別の cli-* crate を直接呼ばない方針のため、後続 PR で追加する
決定論 exe
cli-web-task-curationと共有するパースロジックを lib 側へ置く。PR チェーン (ADR-069)
本 PR は 3 本チェーンの 1 本目。PR 1 (本 PR) → PR 2 → PR 3 の順に land する。
lib-ledger抽出 (純リファクタ)cli-web-task-curation— 台帳と todo-summary の順位集合差 (L∖S / S∖L) を算出review-todo-wholeCriterion 3 移設 + 作業計画書削除変更内容
src/lib-ledger/を追加 (Task/select/screen_for_public_output/screen_for_titleを公開 API として提供)src/cli-nightly-task-select/src/ledger.rs→src/lib-ledger/src/lib.rs(rename)src/cli-nightly-task-select/src/ledger/screening.rs→src/lib-ledger/src/screening.rs(rename)main.rsのmod ledger;を削除しlib_ledger::参照へ書き換えsrc/lib-ledgerを追加、cli-nightly-task-selectに path 依存を追加docs/todo20.md1 箇所、docs/todo22.md2 箇所)docs/web-task-curation-facet-plan.mdを同梱 (PR 3 の最終コミットで削除する一時文書)外部 crate 依存を足さない設計制約 (夜間ループの唯一のタスク決定経路であり、供給元が増えるほど
無人経路の攻撃面が広がる) は
lib-ledger/Cargo.tomlへ引き継いだ。screening.rsが UnicodeCfテーブルを自前で持つ根拠がこの制約のため、対応関係を維持している。
LEDGER_DATA_FRAME_MARKERと.github/workflows/nightly-todo.ymlの===BEGIN/END_LEDGER_DATA===区切りの対応 (ADR-072 決定 13) も doc comment のまま移設済み。DoD (実測)
cargo test --workspacegreen —lib-ledger51 テスト /cli-nightly-task-select8 テスト passcargo clippy --workspace --all-targets -- -D warningsgreenSummary by CodeRabbit
改善
ドキュメント