How CoveCAPS keeps offline point-of-sale sales honest
· 5 min read · CoveScreen Engineering
A shop network drops and the register cannot reach the server. Sales must keep going — without quietly losing the audit trail. This is why CoveCAPS spools offline and chains every record.
Point-of-sale systems are easy to trust while the network is up: every payment reaches the server, and the day closes cleanly. The moment the network drops, a register either stops taking payments or starts buffering them locally. Stopping loses revenue; buffering without structure loses trust.
CoveCAPS (CoveScreen's offline-first PoS engine) takes the buffering path, but it treats the offline window as a ledger problem rather than a convenience. Every sale that happens against the spool is written to a local file store first — a structured journal that survives restarts — and only later reconciled with the main ledger.
The important part is the chain. Each batch of spooled sales is rolled up and sealed with the hash of the previous master row, so the master ledger becomes a hash chain: every new entry carries the fingerprint of everything before it. Editing a single amount in the middle silently breaks every row that comes after it.
When connectivity returns, the reconciliation run compares spooled sales against the master ledger, produces a report that states exactly how many checks were verified, and exports the full detail to CSV. Nothing is merged silently and nothing is dropped without being visible in the export.
The audit loop also keeps watch afterwards. If a ledger row is edited by hand — a 'quick fix' at the file level, for example — the next audit detects that the chain no longer verifies and raises a chain tamper alarm. The evidence has nowhere to hide.
CoveCAPS is a Lab project, which means you can open it and try the whole loop yourself: seed a session, simulate an outage while live sales accumulate, restore connectivity and watch the reconciliation verify every check. The terminal shows each step, and the CSV is downloadable at the end.