Lab 21 / the module where the data is different
The accounting module is the hardest test the design system will ever face: an append-only journal, running balances, two-sided entries, three-way matching, reconciliations that must tie to the cent, dual control, period locks, gapless statutory numbering, multi-currency on every line, and an AI agent posting within a delegation. Lab 18 walked it as part of the whole platform; this lab walks it alone, route by route and data-nature by data-nature, against the platform's own module document, to answer one question: is anything still missing?
The honest answer: no new components are needed. The eight primitives the audit added for this module carry every surface. The walk found two places where a rule needed one more sentence to survive an accountant's scrutiny, both now written in, and two adoption notes that cost nothing today.
01 / coverage
The whole module, from its own consolidated document, mapped surface by surface. Nine of the ten archetypes are exercised; only the Tool archetype goes unused, which is correct, because accounting has no free-form surface and should not.
02 / the stress list
Routes are the easy half. The module document names behaviours no other module has. Each one, against the system:
| Date | Entry | Narrative | Debit | Credit | Balance |
|---|---|---|---|---|---|
| 14 Jul 2026 | JE-2026-1198 | Booking confirmed, Meridian Capital Group | 148,220.00 | 402,881.10 | |
| 15 Jul 2026 | JE-2026-1201 | Payment received, BKG-RYH39M4S | 96,400.00 | 306,481.10 | |
| 15 Jul 2026 | JE-2026-1204 | Credit note CN-2026-22 applied | 4,150.00 | 302,331.10 | |
| 17 Jul 2026 | JE-2026-1211 | Service charge raised, SRV-2026-84 | 1,240.00 | 303,571.10 |
Filter this ledger by source, and the Balance column leaves with the filter. It returns when the filter clears. The figures that remain are true; a running balance over a filtered set would not be.
| Account | Side | Transaction | Functional | Debit | Credit |
|---|---|---|---|---|---|
| 1100 Accounts receivable | Debit | AED 36,900.00 | $10,047.65 | 10,047.65 | |
| 2110 Deferred revenue | Credit | AED 35,143.00 | $9,569.23 | 9,569.23 | |
| 2200 VAT payable | Credit | AED 1,757.00 | $478.42 | 478.42 | |
| 10,047.65 | 10,047.65 |
The empty cells in the Debit and Credit columns are blank, not dashed and not zero: the side does not exist for that line, which is a different fact from "no answer yet". The totals row proves balance; an entry that cannot show this row equal was refused before it reached a screen.
| Book balance, 31 Jul 2026 | 184,220.40 |
| Less outstanding payments | -12,845.00 |
| Plus unreconciled receipts | 3,120.00 |
| Bank balance, statement | 174,495.40 |
Label rows, mono figures right, indent for containment, signed minus, heavy rule above the total: the statement grammar carries the reconciliation artifact unchanged, and Sign off stays dead until the arithmetic holds, with the difference named beside it.
03 / findings
The account ledger shows a running balance, and the register grammar proudly allows sorting and filtering on every register. Those two facts collide: re-sort a ledger by amount, or filter it by source, and the balance column silently becomes fiction. No component was missing; a law was.
L17, added to the platform laws: a running balance exists only in date order over the whole set. Any sort or filter removes the column rather than letting it lie, and it returns when the view does. The ledger's date sort is fixed; everything else about the register grammar stays.
L14 ruled that a dash is not a zero: zero is measured, a dash means no answer exists. The journal's two-sided lines expose a third state the law never named: the credit cell of a debit line is not "no answer", it is a side that structurally does not exist. Writing a dash there would put four hundred false "no answers" on every journal page.
L14 now carries the third state: a structurally empty cell, like the unused side of a journal line, is blank. Zero is measured as nothing, a dash is no answer yet, blank is not applicable. Three glyphs, three facts, and they sort as three facts.
The shipped accounting overview colours its deltas and flips the colour where lower is better, a per-metric judgement someone must maintain. The system's movement chip is achromatic by law: glyph for direction, figure for magnitude, no hue, because up is not always good, which is a lesson this module teaches better than any other (DPO up can be discipline, revenue up can be a tax error).
No work now. Adoption is ruled "Not yet"; when it comes, the flip logic is deleted rather than migrated. Recorded in the adoption map.
The overview leans on sparklines over twelve like periods. Charts are parked on your word, and the intelligence layer's trend stroke sketch from Lab 20 is the same instrument by another door: a hairline history under a figure, endpoint emphasized, no axes.
No work now. When the chart library discussion happens, the overview's sparklines and the trend stroke should be settled as one decision, not two.
04 / the module's own next phase
The module document already queues R5. Walked against the archetypes, every planned item lands on an existing shape, which is the strongest forward evidence the validation can offer:
05 / verdict
Thirty-six surfaces, fourteen data natures, and the module's own forward plan, all walked against the system. No new component, archetype or concept is needed: the statement, the currency pair, the generalised gate, the group row, the permission mark, the masked number, the viewer and the fill rule, most of them added by the Lab 18 audit for exactly this module, carry everything the accounting document describes, including the parts that are not built yet.
What the walk earned: one law (L17, the running balance), one sharpened law (L14, blank against dash against zero), and two adoption notes that cost nothing until adoption is ruled. The law count moves to forty-eight, and both changes are already written into the specification and the handbook.
The walk validates design coverage, not the accounting itself: the tax profiles, allowance rates and thresholds still carry their consultant-confirmation flags in the module document, and adoption of the system by the shipped module remains ruled "Not yet". When adoption comes, this lab is the checklist of what changes: the deltas go achromatic, the ledgers gain L17's behaviour, and everything else is restyling, not rethinking.