Weekly delivery report — docrecon
ON TRACK
- Week
- 1 of 1 · 2026-10-15
- Scope
- Open-source reconciliation engine, two implementations, parity-tested
- Demo
- dalteno.com/#proof
- Repo
- github.com/dalteno/docrecon
Done this week — against the agreed acceptance criteria
| Criterion | Status | Evidence |
|---|---|---|
| Visitor can enter values we never anticipated and get an explained verdict | ✅ | Live demo; every finding carries rule, field, expected, actual, reason |
| Rules identical in .NET 8 and JS | ✅ | 52 golden reports; .NET parity test compares every field |
| ≥ 40 shared cases incl. adversarial, expectations hand-written | ✅ | 52 cases, 15 adversarial, cases/generate.mjs |
| CI green on both engines | ⏳ | .github/workflows/ci.yml written — JS, .NET, generator drift check, golden coverage check; first run on the initial push |
| Documented decisions | ✅ | ADR-0001 pure engine · ADR-0002 integer arithmetic · ADR-0003 cases as spec |
Not done / changed
- Multi-currency invoices with per-line FX conversion — out of scope, never planned (R08 flags mixed currencies instead); listed so nobody assumes otherwise.
- Air waybill support — not in scope for v1.0; the model is sea-freight only. Would be a v1.1 item if a partner needs it.
Found and fixed
- Mutation check showed the ±0.01 amount tolerance was masking a rounding-mode change at the integration level. Added
C17b_half_cent_zero_tolerance. (See case study, "what went wrong".) - The gross-weight boundary case was initially written against the smaller value; the rule measures tolerance against the larger value (documented). Case
C34corrected before the suite was frozen.
Measured
- JS: 62 tests passing · 38 µs per bundle (1,000 bundles / 38 ms, Node 22)
- .NET: 136 tests defined (52 expectation, 52 parity, 32 unit) — result recorded after the first CI run
- Mutation checks: 3 run, 3 caught
Decisions needed from you
- None blocking. Optional: should weight tolerance default stay at 2 % or follow your broker's practice? One-line change in
ReconcileOptions.
Risks
- Low: party-name normalisation strips one trailing legal suffix; names with a suffix in the middle ("Acme GmbH & Co. KG") compare literally. Documented in R17; a longer suffix list is a config change, not a code change.
Next week (if this were a continuing engagement)
- v1.1: configurable rule set per client (enable/disable, per-rule severity), air waybill model, CSV import for line items.
- Demo on Friday 16:00 CET in your repo or ours.