Inspiration
Friday under a deadline. A founder pastes a board update into chat. The model returns a clean sentence: partners signed, nobody raised concerns, safe to send. The second half was never in the source. The expensive failure is not a bad draft. It is the line that already left Slack.
We wanted clearance before send, not another model that writes nicer prose. Chat invents. Almost refuses.
What it does
Almost is an evidence-bound outbound desk. You paste source and the AI draft. A server-side gate checks each claim:
- BOUND — the quote is a real substring of the excerpt you supplied. It may leave.
- GAP — the quote is not evidenced. It stays named on purpose. It never enters the answer.
The product is the pack: a portable markdown receipt with span pins (offsets + hash), named gaps, and an issuer seal. Judges can re-check it on /verify. Tamper the pin and it fails closed.
How we built it
Built with Codex and GPT-5.6: evidence gate, pack + span pins, Clearance Workspace, showcase, embed. Human locks stayed human: named GAPs, refuse invent, pack as product.
- Fail-closed gate in Python (
evidence.py): quote must live in excerpt; lexical support; polarity / negation / contradiction lite. Not full transformer NLI, and we do not claim that. - Clearance Workspace (
/workspace): source + draft + clearance dock, no Chrome extension required. Embed widget at/embed/clearfor the same gate beside any chat UI. - Pack + verify: span pins at bind time; Ed25519 seal when cryptography is available (HMAC fallback);
/verifyre-runs the gate on the artifact. - Ship path: stdlib HTTP server on Cloud Run, static front end, optional OpenAI / Gemini draft only from BOUND claims (heuristic works with zero keys). Demo cookie on
?demo=1keeps the judge path alive without an account.
Signature moment: same Friday ask → one claim BOUND, one claim GAP → flip the invent with a real quote and watch GAP become BOUND.
Challenges we ran into
- Honesty vs theatre. Easy to show a green check. Hard to keep GAPs visible and refuse invent. We chose named gaps over fake certainty.
- Substring is not entailment. BOUND means word-bounded evidence in the excerpt you gave, plus local support checks. We document that limit instead of overclaiming “truth.”
- Demo safety. Cold starts, missing model keys, and OAuth console friction. Fallback order: live gate → offline substring bind → sealed sample pack → verify tamper. The prize is the gate, not the prose model.
- Product shape. We cut extension-first and desk sprawl. The B2C path is paste → clear → stamp → pack.
What we learned
Clearance is a workflow between intelligence and consequence. Founders do not need another inventing chat. They need a receipt for what may leave. Span pins make the bind checkable later. Refusing to invent is the feature.
Log in or sign up for Devpost to join the conversation.