Files
wanderbooks/plan/roadmap.md
T

53 lines
2.0 KiB
Markdown

# Roadmap
## Phase 1 — Semantics core (now)
The engine: money, accounts, journal, ledger commands, trial balance, P&L,
balance sheet, golden files, property tests, and the docs an agent needs to
work here (AGENTS.md, requirements, architecture, oracle, parity, glossary).
Done when the parity floor is 6+ and every `done` item is tested +
golden-covered.
## Phase 2 — Close the accounting loop
- Period close (fiscal periods, closing entries, locked periods)
- Cash flow statement, indirect method
- `proptest` with shrinking; properties for close and cash flow
- Parity floor moves; goldens grow
## Phase 3 — Oracle harness
- `ledger-import`: GnuCash XML read-only import
- `ledger-oracle`: fixture books through our engine and GnuCash headless,
automatic `snapshot()` diffing via `cargo xtask oracle`
- Parity catalog becomes machine-readable; CI enforces the non-regression
floor
- Done when: a fixture book produces byte-identical snapshots from both
engines with zero manual steps
## Phase 4 — App shell (egui)
- `books-app`: one Rust codebase, native desktop + WASM (the storytold
stack: egui/eframe, no Electron, no React)
- Command-driven UI: every UI action goes through the `Ledger` command
surface; the UI holds no accounting logic
- storytold's screenshot-in-the-loop returns: agents verify UI changes
visually, against reference screenshots of GnuCash/QuickBooks kept
maintainer-local (never committed)
- Workflow parity catalog starts (QuickBooks/Xero reference): invoices,
bills, bank rec, chart management
## Phase 5 — Workflow parity
- A/R and A/P workflows, bank reconciliation, budgets, scheduled transactions
- Multi-currency with FX translation
- The goal: a self-hosted bookkeeping app with a tested claim to
semantic parity with GnuCash and workflow parity with QuickBooks —
no SaaS subscription required
## Explicitly not on the roadmap
Bank feeds, payment processing, payroll, tax filing. Those are integrations
and regulated domains, not cloning targets. The engine gets clean seams for
them; someone else's API provides them.