One name. Two people. A very different story.
A production arrives. Two people share a name. Pages are missing. A date needs a trigger. Before drafting begins, the record needs to tell those stories apart.
From the first page to the filing that leaves your desk. Follow the sources, try the gates, and check the record for yourself.
A fluent draft still needs its sources checked. A client portal still needs a boundary. A receipt still needs to say what it proves. Those checks belong in the workflow.
Choose the model for the work. Keep the evidence for the decisions.
Tell us what your firm needs to see. We’ll walk through a fictional matter together, from the incoming record to the checks on what leaves.
The model will change.Keep the record.
Four stages, 17 scenes. Each stage opens with its own.
01 · Enters
A production arrives. Two people share a name. Pages are missing. A date needs a trigger. Before drafting begins, the record needs to tell those stories apart.
A production arrives. Two people share a name. Pages are missing. A date needs a trigger. Before drafting begins, the record needs to tell those stories apart.
The graph refuses to weld two legal persons who share a name, and collapses one person's credential variants.
Two documents say “Robert Chen”. The map keeps two people: the Plant Manager who signed MSF-24-117 and the QA Technician who wrote IR-24-031. A shared name differing by a generation suffix is vetoed before any similarity score can accept it. Beside them, “Dr. Elena Reyes, Ph.D.” and the CV’s “Elena Reyes” differ by honorific and credentials alone. One person, two surface forms, one node.
Missing Bates numbers are reported on import — and phrased as a question when the load file cannot prove withholding.
Thirty-seven numbers are absent between the set’s own first and last page.
The received set spans ACME-0038961–ACME-0040112 (1,152 numbers) but contains only 1,115; missing: ACME-0039104-ACME-0039140.
Their privileged material is flagged on ingest; a model's 'not privileged' is treated as a signal, not an answer.
CONFIDENTIAL — SUBJECT TO PROTECTIVE ORDER
Priya’s memo is a problem — do not circulate; we will position this as a prep issue.
This e-mail and any attachments are confidential and may be privileged.
Auto-classified “none” but: privilege risk signals present. Confirm it is genuinely producible. The soft signals are too weak to reclassify on. They route the document to a person instead.
A model’s “no” is a signal, not an answer. What leaves this step is a flag for attorney review, never a privilege determination. Nothing in this path can stop the ingest.
Deadlines run from a cited rule plus an attorney-confirmed trigger; unowned forums get a named refusal; unknowable dates stay unknowable.
Confirmed service: personal · return of service on record
02 · Gates
Now there is a draft. Try to send a fabricated authority. Try to share a private memo. Each boundary has its own check, and an override leaves a record.
Now there is a draft. Try to send a fabricated authority. Try to share a private memo. Each boundary has its own check, and an override leaves a record.
A fabricated authority blocks the send. The override is logged before it is honoured.
6 authorities · 5 verified · 1 unverified
1 authority could not be verified. The send is held.
The gate throws; it does not warn. An override is honoured only after its audit row is durably written, and a failed write aborts the send.
Work product stays withheld. Only after its classification is cleared can the share setting and the other portal checks permit a read.
read #0 · 2 documents cleared
A withheld row renders nothing: no lock icon or filename. The filename is itself work product.
Drag an illustrative p10–p90 range as the evidence changes. This synthetic scenario is not an outcome-calibrated valuation; a point estimate is refused.
Illustrative recovery scenario
Synthetic distribution. No live model or outcome calibration ran. The slider explores a narrowing scenario; new evidence can also widen or shift a real estimate.
Point estimate · refused: an interval is the honest answer
The range is the honest figure. It leads because the dollar amount can move as the matter is looked at again on fresh evidence.
The Certificate of AI Use is rendered from the audit trail and refuses to certify what the record contradicts.
aiAssisted is read from the whole version history, never the tip. A human-authored final version does not un-write what came before it.
Choose a certificate form first.
It does not ask the attorney what to say. It renders what the record supports, and throws otherwise: a 409, not a document.
03 · Leaves
The recipient was never in your workspace. Hand them a filing they can check, show what a receipt proves, and make the limits visible alongside the evidence.
Run the verifier on a sampleThe recipient was never in your workspace. Hand them a filing they can check, show what a receipt proves, and make the limits visible alongside the evidence.
Run a sample filing and its sources through the MIT verifier, then tamper with the evidence. Automatic egress attestation is flag-gated: PROVENANCE_EGRESS_ATTESTATION.
Put the evidence through the check. Then change a byte and run it again. The manifest and the filing receive separate verdicts.
Start with the sample below, then try the changes that should break it. Every check runs in this browser. Nothing is uploaded. Once the evidence is loaded, the checks work offline.
Sample bundle · Miami-Dade Circuit Civil · Case No. 2025-003417-CA-01
A short excerpt from a Motion to Compel in a fictional Florida matter, its provenance manifest, and the two Supreme Court of Florida opinions it quotes, as text so the quote check can run here. One quotation in the excerpt is deliberately wrong by a single word, and the manifest says so. One cited authority was in the producer's file but never opened, and the manifest says that too.
The verifier is MIT-licensed. A recipient may run it offline, with no account and no network, against these same files; the README explains how.
This sample's digest was never committed to a timestamp ledger, so the optional timestamp check below will report that no commitment exists. That is the honest answer, and a fresh proof would be pending, not confirmed.
A one-off commitment proves existence at a time, not uniqueness, completeness, or what was omitted.
A SHA-256 returns a verdict to anyone, with no account — and discloses nothing else.
GET /public/attest/:digest
no account · rate-limited · 64 hex characters
never seen
200 · application/json
The same answer as a hash it has never seen. A ledger tip is a stronger claim carried by a different surface, and a distinguishing reply here would let anyone confirm a guessed chain-tip hash. The endpoint refuses to act as an oracle: it discloses a verdict, and no matter, party, title or id.
A one-off commitment proves an artifact existed at a time. It says nothing about completeness. Only the tip of a sequence-numbered chain makes an omission detectable, and that is a different claim on a different surface.
Removals are disclosed inside the firm's hash chain. An earlier external receipt can expose a shorter history; a ledger short of rows never renders the same green.
audit_log · chain · 37,429 rows · anchored every ~30 min
DB recompute
rehashes every row from its preimage
37,426 rows rehash: nothing dangles
Structural walk
an independent pass over (seq, prev_hash, row_hash)
linked over 37,426 rows: nothing dangles
Bitcoin anchor
the receipt that says the chain reached seq N at time T
TRUNCATED · ledger ends at #37,426 · the high-water receipt committed to #37,429
highWaterAnchor
On the record
37,429 rows · tip #37,429 · Bitcoin-confirmed · independent walk linked over 37,429 rows
1 row · tip #1 · a Bitcoin-confirmed receipt of 2026-07-27 commits to #2 · permanently short of it
A disclosure covers only the rows it names and only receipts published before it. Anything removed afterwards breaks a receipt it cannot explain, and the ledger reads Broken again.
Predictions are committed before outcomes. Publication is flag-gated by PUBLIC_CALIBRATION and refuses samples below ten resolved matters.
prediction_outcomes · chain · anchored
open_seq #41 · anchor #44
Committed before the outcome, attested by a Bitcoin block. An outsider can date it without asking us.
n = 3 · MIN_N = 10 · insufficient
GET /public/calibration → 404 · PUBLIC_CALIBRATION unset · figures are published from 10
Predictions are committed before outcomes, and the clock on that cannot be started retroactively. The page publishes nothing until it can. When it does, the misses are included.
04 · Keeps
The matter closes. The records still matter. Inspect the export, follow the money, and see how your own AI can read the file while actions stay with the attorney.
The matter closes. The records still matter. Inspect the export, follow the money, and see how your own AI can read the file while actions stay with the attorney.
Every MCP read carries provenance, status and freshness; the roll-up is the weakest link; the one write verb cannot act.
POST /mcp · JSON-RPC 2.0 · key brk_…7f2c
→ {"jsonrpc":"2.0","id":4,"method":"tools/call","params":{ "name":"propose_action", "arguments":{"case_id":"mz-0001","action":"create_deadline", "args":{"title":"Answer due","due_date":"2026-08-14", "override": true, "confirmation_token": "ct_7f2c91…"}, "reason":"Attorney pre-approved."}}}← {"jsonrpc":"2.0","id":4,"result":{ "status": "pending_confirmation", "executed": false, "capped_at_rung": "suggest", "confirmation_token": null, "ignored_override_requests": ["override", "confirmation_token"], "what_will_happen": "Calendar the deadline \"Answer due\" for 2026-08-14. (Note: an override request was ignored -- an external agent cannot bypass the verification gate.)" }}
A planted flag and a planted token are stripped, and the attempt is written onto the attorney’s card. A person at the firm must approve the action; this API cannot approve or execute it.
Backend available; no export screen yet. The archive carries document bytes, canonical CSVs, the audit chain and a manifest. Its timestamp proof can be checked after it matures.
GET /firm-export/archive?case_id=… · bron-export/1.0
bron-export-matter-zero-2026-08-14.zip
Three members sit outside the commitment: manifest.json, manifest.json.ots and anchor.json. The manifest says so in its own note.
$ jq -r '.files[] | "\(.sha256) \(.path)"' manifest.json | sha256sum -cREADME.txt: OKdata/matters.csv: OKdata/deadlines.csv: OKdata/documents.csv: OKdocuments/matter-zero/0001-complaint.pdf: OKaudit/matter-zero.json: OK… 99 more: OK# a day later: the calendar has handed back the Bitcoin attestation$ ots verify manifest.json.otsSuccess! Bitcoin block 912417 attests existence as of 2026-08-15 UTC
Two commands, off-the-shelf tools, no BRON in the room. The manifest lists every member except three: itself, its proof and anchor.json. A file cannot sit inside its own hash. anchor.json states the proof’s status honestly: pending at export, then a block time about a day later. It never claims a block it does not yet have.
Three-way reconciliation reports (matched, discrepancy) as one fact; 'no bank statement' is never 'reconciled'.
IOLTA ····4471 · period 2026-08 · as of 2026-08-31
A posted entry cannot be edited. The ledgers carry a no-UPDATE, no-DELETE trigger; “edit” posts an offsetting entry, in the open, and the bank leg answers for it.
Bank statement
Book ledger
Σ client sub-balances
Halvorsen $92,000.00 · Reyes $61,750.00 · Okafor $30,500.00
Every leg agrees to the cent. The fact recorded is the pair, not the zero.
The arithmetic runs in the database or it does not run. A read that fails refuses before any verdict; an empty table never reconciles.
Contingency funds do not disburse without the client's signed closing statement — Rule 4-1.5(f)(5), as a 409.
Contingency matter · $1,500,000 settlement · Florida
Banded fee
Worked to the cent, then asked for. The answer depends on one signature that is not the firm’s.
200 · Released
{
"closing_statement": { "signed_by": "client", "signed_at": "2026-08-21T14:06:00Z" },
"released_by": "attorney",
"amount": 483333.33,
"reconciliation": "three-way", "matched": true
}Signed
Client
Released
Attorney
Three-way
Reconciled
signed → released → three-way reconciled
The refusal is a real 409 from the disbursement route, not a warning on a form. Release is an attorney action after the client’s signature, and the account is three-way reconciled after it. The platform queues nothing on its own.
A live-deposition lens where silence is a recorded decision and a cite is never invented.
Second Chair · Even G2 edition · shipping
Okafor deposition, Vol. II · on the record · attorney-side
Q. Were you copied on the March 3 email?
A. I don’t recall being copied.
Q. Did anyone send you the pricing memo before June?
A. Not that I remember.
Q. So the first time you saw the memo was June?
A. Yes. June, at the earliest.
Q. And what did you do after the call?
A. I told him what I told the other lawyer — it wasn’t my decision.
Q. I’m handing you what has been marked Exhibit 22. Do you recognise it?
A. Yes. That’s my expense report.
10:17:33NOT RAISED: DECIDED SILENCE
Ex. 22 recognised by the witness. Nothing earns the glass; the decision is written down.
The system saw Exhibit 22 land and said nothing, on purpose. That silence is a row in the review queue with its reason attached: a decision the attorney can audit after the deposition, not an absence nobody can account for.
Keep scrolling. Watch the record unfold.