Skip to content

refactor(ledger): 台帳パーサを lib-ledger crate へ抽出する - #393

Closed
aloekun wants to merge 1 commit into
masterfrom
claude/lib-ledger-extract
Closed

refactor(ledger): 台帳パーサを lib-ledger crate へ抽出する#393
aloekun wants to merge 1 commit into
masterfrom
claude/lib-ledger-extract

Conversation

@aloekun

@aloekun aloekun commented Aug 12, 2026

Copy link
Copy Markdown
Owner

概要

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 する。

  • PR 1 (本 PR): lib-ledger 抽出 (純リファクタ)
  • PR 2: 決定論 exe cli-web-task-curation — 台帳と todo-summary の順位集合差 (L∖S / S∖L) を算出
  • PR 3: weekly-review への facet 配線 + review-todo-whole Criterion 3 移設 + 作業計画書削除

変更内容

  • 新 crate src/lib-ledger/ を追加 (Task / select / screen_for_public_output / screen_for_title を公開 API として提供)
  • src/cli-nightly-task-select/src/ledger.rssrc/lib-ledger/src/lib.rs (rename)
  • src/cli-nightly-task-select/src/ledger/screening.rssrc/lib-ledger/src/screening.rs (rename)
  • main.rsmod ledger; を削除し lib_ledger:: 参照へ書き換え
  • workspace members に src/lib-ledger を追加、cli-nightly-task-select に path 依存を追加
  • 移設で stale になる docs 相対リンク 3 箇所を追随 (docs/todo20.md 1 箇所、docs/todo22.md 2 箇所)
  • 作業計画書 docs/web-task-curation-facet-plan.md を同梱 (PR 3 の最終コミットで削除する一時文書)

外部 crate 依存を足さない設計制約 (夜間ループの唯一のタスク決定経路であり、供給元が増えるほど
無人経路の攻撃面が広がる) は lib-ledger/Cargo.toml へ引き継いだ。screening.rs が Unicode Cf
テーブルを自前で持つ根拠がこの制約のため、対応関係を維持している。

LEDGER_DATA_FRAME_MARKER.github/workflows/nightly-todo.yml
===BEGIN/END_LEDGER_DATA=== 区切りの対応 (ADR-072 決定 13) も doc comment のまま移設済み。

DoD (実測)

  • cargo test --workspace green — lib-ledger 51 テスト / cli-nightly-task-select 8 テスト pass
  • cargo clippy --workspace --all-targets -- -D warnings green
  • push pipeline: quality_gate pass + takt AI レビュー 4 facet 全 APPROVE (simplicity / security / architecture / refute)
  • 挙動不変 (移設のみ、ロジック変更なし)

Summary by CodeRabbit

  • 改善

    • 台帳パーサーを共有ライブラリとして整理し、関連するCLI機能から共通利用できるようになりました。
    • 夜間タスク選択機能は、共有ライブラリを使用する構成に更新されました。
  • ドキュメント

    • 台帳パーサーの参照先を現行構成に更新しました。
    • Web向けタスク整理機能に関する今後の実装計画を追加しました。

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 に残す)。
@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

台帳パーサを lib-ledger 共有 crate として workspace に追加しました。cli-nightly-task-select は共有 crate を利用します。関連する文書の実装参照先と Web 対応タスクの実装計画を更新しました。

Changes

台帳パーサ共有化

Layer / File(s) Summary
共有 crate の定義
Cargo.toml, src/lib-ledger/Cargo.toml, src/lib-ledger/src/lib.rs, src/lib-ledger/src/screening.rs
workspace に lib-ledger を追加しました。crate 設定と共有層の説明を追加し、screening テストの参照先を更新しました。
CLI からの利用 wiring
src/cli-nightly-task-select/Cargo.toml, src/cli-nightly-task-select/src/main.rs
cli-nightly-task-select の依存と参照を更新し、lib_ledger の型、表示関数、選択関数を利用するよう変更しました。
参照文書と実装計画
docs/todo20.md, docs/todo22.md, docs/web-task-curation-facet-plan.md
台帳実装へのリンクを新しい配置へ更新しました。Web 対応タスク用 facet の3段階の実装計画を追加しました。

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed タイトルは、台帳パーサを共有する lib-ledger crate へ抽出するという変更の主要目的を明確かつ簡潔に示しています。
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/lib-ledger-extract

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown
Contributor

🤖 PR Monitor 分析 (GitHub Actions バックストップ)

  • トリガー: issue_comment (created) / 実行 run
  • CI: rust (ubuntu-latest) pass、rust (windows-latest) pending、request skipping。CodeRabbit レビューは実行中 (未着) — 待機せず現時点の情報のみで分析
  • レビュー状況: 人間レビュー・インラインコメントなし (reviews API: 0件、review comments API: 0件)。CodeRabbit は "Currently processing new changes..." の定型進行中コメントのみ投稿済み、指摘はまだ0件
  • Verdict: user_decision (CI未完了 (windows pending) かつ CodeRabbit レビュー未完了のため、この時点では暫定判定。指摘0件自体は approved 相当だが、レビューが揃っていないため確定はユーザー判断に委ねる)

Applicable Findings (Critical / High / Major)

該当なし (指摘0件)

Applicable Findings (Medium 以下)

該当なし (指摘0件)

Filtered (not applicable)

該当なし (指摘0件)

次のアクション

  • 現時点でレビュー指摘は0件。CodeRabbit のレビュー完了と windows-latest CI の結果を待ってから再度確認することを推奨 (本バックストップはポーリングしない)
  • 変更概要 (軽量サマリー): lib-ledger crate への台帳パーサ抽出リファクタ。10ファイル変更 (+215/-17)。新規 src/lib-ledger/{Cargo.toml,src/lib.rs,src/lib-ledger/src/screening.rs}src/cli-nightly-task-select/{Cargo.toml,src/main.rs} から旧 ledger.rs 相当ロジックを移設、Cargo.toml/Cargo.lock にワークスペースメンバー追加、docs/todo20.mddocs/todo22.md 内の相対パス参照更新、docs/web-task-curation-facet-plan.md 更新。コード実質移動が中心で新規ロジック追加は限定的と見られる
  • mergeStateStatus が BLOCKED (reviewDecision 未設定) のため、レビュー成立後にマージ可否を再確認すること

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

📥 Commits

Reviewing files that changed from the base of the PR and between 26a018a and a246ff7.

⛔ Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (9)
  • Cargo.toml
  • docs/todo20.md
  • docs/todo22.md
  • docs/web-task-curation-facet-plan.md
  • src/cli-nightly-task-select/Cargo.toml
  • src/cli-nightly-task-select/src/main.rs
  • src/lib-ledger/Cargo.toml
  • src/lib-ledger/src/lib.rs
  • src/lib-ledger/src/screening.rs

Comment on lines +45 to +49
- **`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::` 参照へ書き換える。

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 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 とワークフローの対応など、現行実装に合わせた記述は維持してください。

@github-actions

Copy link
Copy Markdown
Contributor

🤖 PR Monitor 分析 (GitHub Actions バックストップ)

  • トリガー: pull_request_review (submitted) / 実行 run
  • CI: rust (ubuntu-latest) pass、rust (windows-latest) pass、request skipping (対象外)、CodeRabbit pass (Review completed)。analyze (本ワークフロー自身) は実行中のため対象外
  • レビュー状況: CodeRabbit が COMMENTED レビューを新規投稿 (2026-08-12T16:10:01Z、reviewDecision には反映されず)。インライン指摘 1 件。人間レビューなし
  • Verdict: user_decision (適用対象の指摘が Minor severity のみのため)

Applicable Findings (Critical / High / Major)

該当なし

Applicable Findings (Medium 以下)

# File (Line) Reviewer Issue Recommended Action
1 docs/web-task-curation-facet-plan.md (45-49) CodeRabbit (Minor) 本 PR で新規追加した計画書 web-task-curation-facet-plan.md の「## 2. PR 1」節が、lib-ledger 抽出をまだ未実施の作業として記述している (移設元として削除済みの src/cli-nightly-task-select/src/ledger.rs を案内)。しかし本 PR 自体が同じ diff 内でその抽出を実施済み (src/cli-nightly-task-select/src/ledger.rssrc/lib-ledger/src/lib.rs へのファイル移動を確認)。同一 PR 内でドキュメントとコードの実施状態が矛盾している 「## 2. PR 1」節を完了済みとして更新 (実装参照を src/lib-ledger/src/lib.rs 等の現配置へ変更し、作業項目・DoD の未実施表現を除去)。ADR に反する設計判断ではなく、計画書の記述漏れの位置づけ

Filtered (not applicable)

該当なし

次のアクション

  • 上記 Minor 指摘 (計画書 PR 1 節の状態不整合) を、次のローカルセッションでの軽微な追随修正として対応するか、PR 3 (計画書削除) まで放置してよいかをユーザーが判断
  • mergeStateStatus が BLOCKED (reviewDecision 未設定) のため、正式な approve が付くかどうかを引き続き確認すること
  • CI・CodeRabbit は全て green/completed 済みであり、ブロッカーはこの Minor 指摘のみ

@aloekun

aloekun commented Aug 12, 2026

Copy link
Copy Markdown
Owner Author

検討したものの、既存のweekly-reviewで十分にTodoの追加はできるのでクローズ

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant