DocumentsWhat comes next

The first two banks: a pilot runbook

8 min readSource first-two-banks.mdsha256 5bddb6b6d6f8a856…

Status: no pilot has run. No bank has agreed to one, and nothing on this site should be read as saying otherwise. This is the plan two banks would follow, the numbers it would measure, the ceremony they would hold and a memo they could adapt for their supervisor. The memo is a draft for each bank's counsel, not legal advice, and no supervisor has reviewed it.

What a pilot has to show#

A pilot is worth running only if it ends with numbers a sceptic can check. Each one below is measured from records the banks already hold or the rail signs, never from a figure Mirror invents.

OutcomeHow it is measuredWhere the number comes from
Time to a ratified corridorDays from the first discovery offer to the corridor.ratify eventTwo signed timestamps: the offer and the registry event
Planted anomalies caughtOf the mispricings and short shipments planted in the pilot-in-a-box corridor, how many come back divergent or undeterminedThe planted ground truth, which the banks hold and the operator never sees
Honest trades heldOf the planted honest trades, how many come back other than reconciled, and the reasons, as countsThe same corridor
Review workload, before and afterShipments routed to human review per thousand, under the bank's current rules and with Mirror's verdicts addedMeasured inside each bank. Mirror never sees a bank's alerts and never will
Examiner checkWhether an examiner, with the network unplugged, verifies a sample of signed verdicts, the log head and the cannot-list, and how long it takesThe examiner's own notes
Ceremony faultsKey mismatches caught before the first leg, shipments stranded by a rotationThe ceremony report and rotate-rehearse

What a pilot cannot show, and the report says so: that Mirror would catch a scheme the planted set does not contain, or that two colluding parties would be caught (they would not be — see the boundary register, Boundary 3).

The plan, in four stages#

Stage 1 — each bank alone (weeks 1–2). No counterparty, nothing leaves the bank.

  • Run the pilot in a box and read its ground-truth report.
  • Map an export: mirror-bander import-check --in history.csv reports column names and counts, never values.
  • Run shadow mode over the bank's own multi-leg shipments under two or three candidate tables: mirror-bander shadow --in legs.csv --tables candidates.json --roles invoice,payment.
  • Exit when both banks can band their own data and have a shadow report in hand.

Stage 2 — find and ratify a table (weeks 3–4).

  • Start from the corridor library template for the goods.
  • Exchange signed discovery offers (mirror-discovery) and select the finest shared table, or record no_shared_table and agree one from the shadow reports.
  • Sign the charter, hold the ceremony (script below), propose and ratify with effective_from and a valid_until at the end of the pilot.
  • Exit when /registry shows the corridor ratified and both banks' check values matched.

Stage 3 — run it (weeks 5–12).

  • Reconcile synthetic shipments first, then a live slice the two banks' policies allow.
  • Read every undetermined reason. Most early ones are configuration: a missing role, a different FX file, a leg banded under the wrong table.
  • Bring in one independent witness if the goods allow (a terminal's weighbridge, an assayer): without one, the independence gate holds every clear at undetermined, by design.

Stage 4 — report (weeks 13–14). The numbers in the table above, the undetermined reasons as counts, and what went wrong. Published only with both banks' consent, and anonymised.

Stop the pilot if: a key ceremony cannot be completed, the export cannot be mapped without moving raw data outside the bank, or either bank's counsel withdraws the legal basis. A pilot that stops is reported as stopped.

If your bank already runs document AI#

A bank that already extracts its trade documents with a document-AI tool has done the slowest part of stage 1. Its documents are already data. The pilot can start from that data, with no new extraction work and no new vendor. Landing such a pilot still needs a real bank, which no code supplies: no bank has agreed to one.

What changes in the plan:

  1. Stage 1 starts from the extraction export. Reshape one month of the tool's export into the vendor-neutral format and write the profile that maps its field names: mirror-bander docai-import --template is the starting point.
  2. Measure the gate before anything else. mirror-bander docai-import --in export.json --profile profile.json --out legs.csv --report holds.json reports how many documents pass the confidence gate, and why the others were held. Those counts are a pilot result in their own right: they measure how much of the book the extraction supports, without a figure leaving the bank.
  3. Shadow mode runs on the imported legs, exactly as on a hand-made export.
  4. Add two outcomes to the table above. First, the share of mapped documents that passed the gate, and the held reasons as counts. Second, how many divergent or undetermined readings traced back to an extraction error, which each bank finds when it reviews its own readings.
  5. If the bank also finances against documents, commit a sample of financed documents for duplicate financing at the same time. It uses the same alias rows, and an agreed consortium key between the two banks.

What the pilot report must say: the gate takes the extraction tool's confidence as stated, so a confidently wrong field passes, and the report counts what the officers found rather than assuming the extraction was right.

The ceremony, step by step#

Both banks on one call, each at its own machine. Nothing in this script sends a secret anywhere.

  1. One bank generates the root secret, under dual control and offline: mirror-bander new-secret --out root.txt. It travels to the other bank by the pair's own secure channel (see custody for an HSM import).
  2. Both print its check value: mirror-bander kcv --secret-file root.txt. Read them aloud. They must match character for character; if not, stop — someone loaded different bytes.
  3. If the pair chose forward secrecy, both run mirror-bander ratchet-start --root-file root.txt --rule rule.json --out epoch0.txt, compare epoch 0's check value the same way, then both destroy the root.
  4. The proposing bank builds the table event: mirror-bander table-import --in table.csv --product <label> --version 1 --closed --max-ratio <ceiling> --out corridor.json, adds valid_until if the corridor is time-bound, and signs it: mirror-bander sign-event --key member.jwk --event corridor.json --out propose.json. The operator admits a new corridor only closed (a price outside the table never clears) with a ceiling of at most 1.5x that the table's widest band fits under; table-import checks that before anything is signed and prints the narrowest clear the table can make. Pick the ceiling for the tolerance you will band at. Or, for goods with public reference prices, skip the table entirely: propose a ratio corridor that cites the public figures both banks already use, and band with band --reference-set. There is then no price table to agree.
  5. The other bank accepts with mirror-bander accept --registry registry.json --product <label> --version 1 --key member.jwk --out ratify.json. It shows exactly what is being accepted and refuses a corridor outside the shape the operator admits. Add effective_from if the pair wants a freeze, and both events go to the operator's /registry/event.
  6. Both read GET /registry and confirm the corridor is ratified with the dates they agreed.
  7. Both band one agreed test shipment with band --closed and reconcile it. The answer must be reconciled on its merits (or undetermined only for want of a witness), never "different corridor tables or corridor keys", and never match_ceiling (that means the tolerance banded at is wider than the ceiling you ratified).
  8. Each bank files the ceremony record: who attended, both check values, the registry snapshot, the test verdict.

A memo for the supervisor (draft for counsel)#

Everything from here to the end of this section is draft text for the two banks to adapt and send over their own names. It is not legal advice, it has been reviewed by no counsel and no supervisor, and square brackets mark what each bank fills in.

To: [supervisor] · From: [bank], [counterparty bank] · Re: a pilot of blind cross-bank price reconciliation for trade-based money laundering

What we are testing. Whether two banks can detect mispricing on the same trade without either bank, or the operator of the service, seeing the other bank's figures. Each bank turns its price into a band of an agreed table and sends only a salted hash of that band. The operator compares the hashes and signs one of three answers: reconciled, divergent or undetermined.

What is not shared. No customer name, no amount, no document and no price leaves either bank. The operator holds commitments it cannot reverse, counts and timestamps. Neither bank receives the other's figures. Mirror pools no data.

What the service cannot do. It produces no risk score, ranking or probability, and no filing decision. It holds no money and moves none. Each refusal is listed at /cannot, signed, with the code and the test that enforce it. Any decision to escalate or file remains with each bank, under its own procedures.

Legal basis. [Each bank's counsel to complete: the information-sharing basis relied on, e.g. a 314(b) registration or an AMLR Article 75 arrangement.] The corridor records the basis each bank asserts; Mirror does not determine whether it applies.

How you can check it. Every answer is signed and verifiable offline with the operator's published key. A supervisor seat (/supervisor/feed) shows the pilot corridor's signed activity without any bank data. We will give you the evidence pack and the ceremony record at the end of the pilot, and the pilot's results whether or not they favour the service.

Duration and exit. [Dates]. The corridor is ratified with an end date and stops judging at it. Either bank can withdraw at any time.

(End of the draft memo.)

What this runbook does not do#

It does not find the two banks, and it does not replace either bank's model-risk, legal or procurement review. The evidence those reviews ask for is on the due-diligence page, with the items that need someone outside this project — a pilot, an independent review, a certification — marked "Outside party", because they are.