Weekly delivery report — docflow
ON TRACK
- Week
- 2 · 2026-10-16
- Scope
- Dossier workflow engine around docrecon; lab page
- Demo
- dalteno.com/lab/docflow/
- Repo
- github.com/dalteno/docrecon (same repo, second engine)
Done this week — against the agreed acceptance criteria
| Criterion | Status | Evidence |
|---|---|---|
| Documents in any order → route → extract → reconcile → approve → outbox → notify → close | ✅ | Cases D00, D01, D02 (three arrival orders, same outcome) |
| Every refusal names its rule and reason; nothing silently dropped | ✅ | CommandRejected / CommandIgnored events; test asserts rule + reason on every rejection |
| Reconciliation gate reuses docrecon unchanged | ✅ | D11 (BLOCKED → compliance, entry refused), D12/D36 (corrected version → PASS) |
| ERP integration idempotent, never direct to operational tables | ✅ | Keys dossier|type|version; D04/D05/D10/D37/D38; staging target in ADR-0004 |
| Time is an input, SLAs per role, one breach per version | ✅ | D21–D24, D40 |
| Two implementations, parity gate | ⏳ | JS green (45); .NET suite written (87) — result recorded after dotnet test and first CI run |
Not done / changed
- docflow lives in the same repository as docrecon (one solution, one CI) instead of a second repo — the gate reuses docrecon as a project reference, and one repo is easier for a reviewer.
- Air waybill / multi-leg transport: not modelled. The definition is data, so adding a document type is a row, not code — but we did not test it, so we do not claim it.
- OCR and e-mail intake: adapters, documented in ADR-0004, not demonstrated.
Found and fixed
- Rejecting an already approved document left its queued ERP record alive; a late ack would have integrated rejected data. Fixed: rejection cancels the pending record (D38 pins it).
- Two hand-written scenarios crossed an SLA boundary by accident; the generator made the author notice. Dates adjusted, boundary case D22 added.
Measured
- 16 rules · 7 document types · 6 roles · 41 cases (9 adversarial) · 45 JS tests · 5/5 mutation checks caught
- 73 µs per dossier replay (1,000 replays / 73 ms, Node 22) · 247 lines JS
Decisions needed from you
- SLA days per document (currently 2/2/1/3/5/3/3) — confirm or give your broker's figures; one row each in the definition.
- Should a BLOCKED reconciliation also block approval of the three trade documents themselves, or only the customs entry (current)? Either is a one-line rule change plus two cases.
Risks
- Medium: the browser demo invites comparison with a production workflow engine. The page states explicitly what it does not prove (concurrency, auth, throughput, Oracle). Keep that paragraph.
Next week (if this were a continuing engagement)
- Oracle staging adapter with the ERP team's merge procedure; folder + HTTP intake; e-mail adapter behind a feature flag; per-client definition files.
- Demo on Friday 16:00 CET.