Four agents, one signed ledger,
and a gate that refuses to ship a wrong label.
Nothing here is a language model deciding whether you may sell food. The model is allowed to widen recall on what you typed, and nothing else.
Intake
Six structured questions โ no chat box. Your free-text product ("my tangy no-knead boule") is matched against a deterministic catalog first. Only if the catalog misses does a Gemini Flash (offline in this instance) pass get a turn, and all it may do is name a term that is already in the catalog. The model can widen recall. It cannot invent a product, move it between categories, or turn a refusal into a sale.
Verdict
The rule engine resolves your product, venue and state against a hash-pinned snapshot of the rule text. Every verdict pins at least one snapshot hash โ that is an enforced invariant, not a convention. Unknown category? It refuses rather than guesses.
Label + QA gate
The label is composed, never generated: mandated sentences are copied byte-for-byte from the pinned source. Then a QA gate re-reads the finished artifact and checks each mandated sentence is present verbatim. If it is not, the label does not ship โ even if you already paid, in which case you are refunded.
Law-Watch
Snapshots are re-fetched and diffed. Gemini classifies each delta as material, immaterial or cosmetic with a scope; unclassifiable deltas default to material, the conservative direction. A material label-text change fans out to every affected label-holder and re-issues their labels automatically, chained to the previous version.
Everything above lands on a signed ledger
Each decision is appended to a hash-chained, per-agent Ed25519-signed log. You can download it and verify every signature and the whole chain yourself โ including catching a tampered row and the exact sequence number it happened at.
Open the ledger