Lab
A discrepancy register
A working system that is shaped wrong is evidence of what the business needs.
↓
The system
- Thirteen feature areas of a security firm run through it, from rotas to invoices.
- Its shape is the problem: one table serving three concepts, a column named holiday_days_used that holds hours, two state fields on one row.
Three verdicts
- 90-discrepancies.md lists every behaviour the replacement changes, each under a verdict.
- FIX: the current behaviour is wrong.
- KEEP: it is right and non-obvious, and is carried forward on purpose.
- DECIDE: it needs a business answer. The question stays in the entry beside the answer once there is one.
The KEEP list
- A ban on a guard for a site or client is checked outside every override branch. An admin can lift every other restriction but not this one.
- Media is captured live, never chosen from a gallery.
- Overnight shifts are the norm and are encoded today as an end time earlier than the start.
- The eligibility rules came out of incidents: licence expiry, right-to-work documents, twelve hours' rest between shifts, a weekly hour cap for student visas. The current code applies the student cap the wrong way round.
The fixed consumer
The mobile app was rebuilt first and covers every feature area, and its contract, 40-api/openapi.yaml, is fixed. Where two models are equally correct, the one the app already consumes wins.
Rules nobody wrote down
The register lists only the differences someone found. Where the old code enforces a rule nobody wrote down or noticed, the first evidence of it is the new system breaking it, and the register gains the entry afterwards.
Up next
ulo→