By Super Washington BangaRetrospective
Ledger-Core v1.0Ledger-Core Sprint 01 — first reconciliation pass
Retrospective on the first sprint of Ledger-Core: what shipped, what broke, and the three lessons that will shape Sprint 02.
What Worked
- Daily commits with a single Conventional Commit per logical unit
- Writing the integration test before the reconciliation engine
- Keeping the database schema frozen for the whole sprint
What Failed
- Import of the legacy CSV assumed one currency per account
- Skipped the property-based test pass in favour of hand-written fixtures
- Branch sat open for three days, growing merge debt
Key Lessons
- Constrain input shape first; relax only when data proves otherwise
- Property-based tests earn their cost on parser code
- Land small diffs daily even when the feature is incomplete
What shipped
The first reconciliation pass runs end-to-end against real ledgers:
bash
swb-cli generate journal --input reconciliation-notes.txt
It matched 98.4% of transactions on the first run — the remaining 1.6% are all multi-currency imports.
What broke
The CSV importer assumed one currency per account. Three accounts in the legacy data violated that, and the failure surfaced only at the boundary tests. The fix was a schema guard — the same lesson as this site's content pipeline.