docs(plan): Q-9 answered (D-61): the reader crate, unit U0d after S4.5
check / check (push) Canceled after 0s
two-user / two-user (push) Canceled after 0s

The owner, 2026-10-29, the question tool: the reader (`extract.rs`)
moves into a small library crate of its own, `ledger-reader`, that
`ledger-store` and `ledger-import` both depend on, so the writer sheds
the typesetter and the crate map is layered again; half a day for the
implementing team once S4.5 is in. 8.2 gains the unit U0d in the
template (its Done-when is `cargo tree`), 8.0.1 its row, 8.0.3 the
crate name (D-53's closed `ledger-extract` subprocess stays closed),
10.1 D-61, 10.3 closes Q-9. STATUS.md, HANDOFF.md and architecture.md
say the same; the arrow stands as built until U0d lands.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HS8WZziDnyxunC23MUxrLp
This commit is contained in:
swaitsandClaude Fable 5.1 committed 2026-10-29 10:54:16 -06:00
1 parent 1111157ed1
commit 25b5258036
4 files changed
+37 -18

No files matched your search

+9 -9
View File
@@ -31,7 +31,7 @@ the specification in `bookspec/` (which never depends on the engine).
| `ledger-core` | the semantics engine: money, chart, journal, `Ledger` commands, reports, periods, assets, schedules, parties, A/R and A/P, payroll, projects, settings and conventions, the kernel and its Kani harnesses | nothing |
| `ledger-vault` | the TIN vault: XChaCha20-Poly1305 records under the book's key | nothing |
| `ledger-config` | the `wanderbooks.toml` codec (adoption in, `books.export_settings` out) and the receipt policy until P4 moves it into the core | `ledger-core` |
| `ledger-store` | the source of truth: the hash-chained JSONL journal, its format gate, the SQLite projection (schema 18; a file per schema), the blob store, backups, the access log, `Snapshot` for readers | `ledger-core`, `ledger-import` (the file reader, P6; Q-9) |
| `ledger-store` | the source of truth: the hash-chained JSONL journal, its format gate, the SQLite projection (schema 18; a file per schema), the blob store, backups, the access log, `Snapshot` for readers | `ledger-core`, `ledger-import` (the file reader, P6; `ledger-reader` after U0d, D-61) |
| `ledger-import` | formats: QuickBooks CSV in; IIF, XLSX, Typst PDFs (statements, the invoice, labels) out | `ledger-core` |
| `ledger-package` | the shared read-only view over `Store` or `Snapshot` (`PackageBooks`): the CPA package, the 1099 worksheet, the invoice document, Needs attention | `ledger-core`, `ledger-store`, `ledger-config`, `ledger-import`, `ledger-vault` |
| `ledger-mcp` | the books server: the MCP tools (122), resources, the handbook, scopes, the door and the access log, backups' scheduling | all of the above |
@@ -50,14 +50,14 @@ test `crates/ledger-core/tests/oracle_gnucash.rs` with `oracle/gnucash/`
(`PackageBooks` is the shared view; extraction is in-process in
`ledger-import`, P6).
Under review (Q-9, asked 2026-10-29 when P6 landed): P6 made
`ledger-store` depend on `ledger-import` so the writer can extract a
file's text at attach time and on the backfill command. That keeps the
direction inward (`ledger-import` depends on the core alone and must
never depend on the store) but pulls Typst, the fonts and hayro into the
store's dependency closure. The plan's recommendation is a small library
crate holding the reader that both depend on; until the owner decides,
the arrow stands as drawn above.
Decided (Q-9 → D-61, 2026-10-29): P6 made `ledger-store` depend on
`ledger-import` so the writer can extract a file's text at attach time
and on the backfill command. That keeps the direction inward
(`ledger-import` depends on the core alone and must never depend on the
store) but pulls Typst, the fonts and hayro into the store's dependency
closure. Unit U0d (plan 8.2, after S4.5) moves the reader into a small
library crate, `ledger-reader`, that both depend on; until it lands the
arrow stands as drawn above.
`ledger-core` itself (`crates/ledger-core/src/`): `money`, `account`,
`journal`, `ledger` (the command surface and replay), `kernel` (every