Home › Use Cases › Surface a lateral hire's candidate conflicts for the committee, never clearing any
Use caseUC0292
🧪 Use-case kit · runnable

Surface a lateral hire's candidate conflicts for the committee, never clearing any

A small, forkable project that does one job end to end. Run once for real, and every figure on these pages captured from that run.

The business caseThe problem this solves

A partner is joining from another firm. Before they arrive somebody has to put every matter they worked on there beside this firm's own client and matter register and ask, pair by pair, whether anything in the two records puts the firm somewhere it cannot be. Today a conflicts analyst does it by eye, and the register is the hard part rather than the disclosure: a party renamed since the matter closed, a company trading under another name, an individual under a married surname, a subsidiary of a parent the lateral acted for. The names do not match, and the words on the page look like they do in exactly the cases where they should not. The eye-and-two-registers pass a conflicts analyst makes over a lateral's disclosure — not the screening decision, which stays with the committee, but the reading and the cross-referencing in front of it.

Audience

The conflicts analyst who runs the sweep and the general counsel or conflicts committee who reads what it produces. The decision they are making is not 'is this matcher accurate' — it is 'what happens the first time it is wrong, and in which direction'. Every number on these pages came from one real run of this code, not from a vendor page.

The inputThe actual candidate pair sheets

The corpus is 64 candidate pair sheets, 0.11 MB (txt 64). It is generated because it has to be. The two inputs to a lateral conflict sweep are a firm's complete client and matter register and an incoming partner's disclosure of everyone they have acted for and against. Neither is publishable in any redacted form that still contains the thing the sweep turns on, which is the names. Generating it also buys the one number this job owes and cannot otherwise have: how many true links the blocking key never assembled, which is only knowable if you planted them.

The corpus

  • The 64 candidate pair sheetsgenerated from a fixed seed, so no real record, person or institution appears in it.
  • Where each came fromNowhere. Every one of the 64 pair sheets, the whole answer key and every statistic are generated in process; --check rebuilds them byte-identically under two PYTHONHASHSEEDs. A real lateral conflict sweep is the two most confidential lists a firm holds and there is no public corpus of it.

Swap this folder for your own material and the kit is pointed at your candidate pair sheets. That is the whole change — there is no database to migrate.

One candidate pair sheet, as the model receives itLCP-0001.txt · 1 of 64
LATERAL CONFLICT SWEEP - CANDIDATE PAIR

Pair id                   LCP-0001
Sweep cycle               2026-W36, sweep run 2026-09-01
Firm                      Harrowgate & Vance LLP
Lateral                   Nadia Fenwick-Roye, partner (corporate and commercial disputes), joining 2026-11-02
Blocking key              paired on: 240425, brambourne, brayford

DISCLOSED MATTER (from the lateral's own disclosure of prior-firm work)

Prior firm                Ashwell Croft LLP
Matter reference          AS-1000
Matter name               Brayford Materials Limited - supply contract termination
Parties                   Brayford Materials Limited; Brambourne Materials Limited
Acted for                 Brayford Materials Limited
Opposing parties          Brambourne Materials Limited
Tribunal reference        HCX-2025-240425 (Ashwell file AS-1000)
Subject / programme       -
Lateral's role            second chair at trial
Opened                    2021-03-21
Closed                    -
Matter status             open at the prior firm
Disclosure notes          -

FIRM RECORD (Harrowgate & Vance LLP client and matter register)

Matter reference          HV-2000
Matter name               Brambourne Materials Limited - supply contract termination
Client                    Brambourne Materials Limited
Known also as (client)    -
Adverse parties           Brayford Materials Limited
Known also as (adverse)   -
Corporate family          -
Acting for                Brambourne Materials Limited
Tribunal reference        HCX-2025-240425 (this firm's file HV-2000)
Subject / programme       -
Registrations             -
Matter status             open, filed 2025-08-11
Register notes            -

SWEEP RECORD

Swept by                  not yet swept
Disposition               not yet assigned

The outcomeWhat a good result looks like

One candidate pair in, three readings and one quoted line out, in about 35 seconds. On the labelled set 40 of the 42 pairs that belong in front of a person reached one, 0 of the 22 that belong in front of nobody were sent anyway, and the queue a person actually reads is 40 pairs of 64.

And when it cannot

And what it does when it cannot. TWO OF THE 64 CALLS CAME BACK CUT OFF AT THE 32,000-TOKEN CEILING and were never swept at all — both belong in front of a person under the key, both are recorded as failures, and both stay inside every denominator, which is why the headline is 40 of 42 and not 42 of 42. Beyond that: 16 pairs lost citation credit, and reading all 16 they quote a different line that establishes the SAME link. Nothing was paraphrased and nothing was invented — 0 of 40 returned quotes were unlocatable.

Where it fitsWhat did work

Every line below is a measured result from this kit's own runs, with the figure that supports it. The headline above is not softened by any of them.

  • You want the queue as short as it can be without missing anything — the paid call — 40 pairs surfaced of 64, 40 of 42 true links reached a person, 0 sent with no link
    the free rules floor hands a person the same 40 pairs and gets 5 of them wrong in each direction; flag-all hands them all 64
  • You only need the matter link — the same tribunal reference on both sides — the free rules floor alone — evals/baseline.py::read_matter
    64 of 64 for $0.00, better than the paid call's 62 (which lost 2 to truncated replies). It is a string equality on a reference number.
  • You want to know whether two differently-spelled names are one entity — the paid call — 62 of 64 against the floor's 56, and 11 of 11 on the three families a token match cannot touch
    that reading is the whole margin, and it is bought by reading the evidence lines the register carries rather than by matching letters

At a glanceHow the whole thing runs

62%disposition exact
35,051 msp50, end to end
$20.85per 1,000 candidate pair sheets · Gemini 3 Flash

Run once, for real, on 2026-09-02. Every figure on these pages was captured from that run — nothing is written from intent.

14 steps, grouped by the question that sends you to them rather than by build order. Each tile carries the one figure that step is about, and opens the page behind it.

Should you use this?What you bring, where it stops, and when not to use it

Before you commit an afternoon to this, these are the answers that decide it. Each one is rendered from the record it lives in — and links the page that holds it in full.

What do I have to bring?Replace the disclosure and register lists and let src/blocking.py build the pairs — that is the only path that keeps the blocking ceiling honest. ⚠︎ WHAT STOPS BEING TRUE THE MOMENT YOU DO. Corpus lens →
When is this the wrong choice?Avoid: Reading surfaced_pct on its own. It is the one number a free regex owns outright. That is the case against the best-fitting scenario (“You want the queue as short as it can be without missing anything”). 3 scenarios scored in all, each with its own. Eval lens →
Where does it stop working?A register with realistic name collisions. Every pair here is built around one distinctive word that appears in no other pair, so the candidate set is exactly what the generator planted. 5 recorded failure modes, each from a run rather than a guess. Corpus lens →
What was never verified?A second run of the same corpus. One run was bought and no second one; nothing here measures run-to-run variance, and 2 of 64 calls were lost to the provider's reasoning budget. 7 items this kit says it could not check. Eval lens →
Can I run this on a model I control?Yes — any OpenAI-compatible endpoint, including one on your own hardware. The shipped adapter takes its host from BASE_URL and its model from MODEL, so nothing in src/ changes. The published figures come from 1 model on the fast tier, one provider, one key. Prompt lens →
And if it fits — what do I stand up?4 artifacts with a stated home and a stated egress, and 3 decisions each with what you provision past its ceiling — plus what was not measured. That is the next page, not this one. step 14 — Run it in your environment →

Not asked of this kit — 2 questions: clone (a fresh clone of this kit runs with nothing fetched); judge (nothing here is graded by a model).

Last verified 2026-09-02 — r001-lateral-conflict. Every figure on these pages was captured from that run.

Run itHow this reaches your data

Every result on this page was produced by pure code over checked-in files, with no API key — which is why you can read the numbers before anyone spends anything.

Run this on your own data

  • The pipeline, its eval harness and the runs behind every numberdeployed inside your environment, on your own model endpoints, against your own documents.
  • The corpus above is the shape, not the limitit is a folder swap, and there is no database to migrate.

Talk to us →

Checked before this shipped — A clean checkout with no key configured renders the whole board on 127.0.0.1:9292 and scores every graded cell of all three free floors. The entire free path — corpus determinism check, the 11-check label gate, three floors and the citation audit — runs in 0.61 s wall with nothing installed.

A living map of modern AI — kept current every morning