Every setting the engine uses, what it does and where its default comes from. Change a value, then Run with these settings: the comparison shows which findings the change added or removed, and each chart shows how the count moves across a range of values. The seal records the values used in each run.
Tuning means setting the pattern thresholds on records where the answer is known, so real patterns are caught and ordinary pricing is not. Start from the defaults, change one setting at a time and record the reason for each change. The synthetic market was built with planted cases, so it shows which settings still catch them; real receipts from ticket buyers will be the first real market to tune on.
The console runs Lexeme LLC’s CCI engine on resale ticket records. It measures every price against the ticket’s first-sale total and against the RESALE Act’s two lines (a resale price of no more than 110% of the first sale, and a marketplace fee of no more than 10% more), looks for the patterns that show a price was set by something other than the ticket, and sorts every finding into the action the District can take. All of it runs in this page, and nothing you load leaves your browser. It opens on a synthetic market of invented events, sellers and platforms, marked SYNTHETIC at the top right, so every part can be tried before real receipts arrive.
| Outcome | When | Who acts |
|---|---|---|
| Restitution | A bright-line rule broken on a sale a buyer paid for | Office of the Attorney General, with a civil infraction under D.C. Code 28-5508 |
| Notice | A bright-line rule broken on an offer, before anyone bought | DLCP, to the reseller or the platform |
| Referral to OAG | A pattern that meets its threshold: lockstep sellers, surveillance pricing, a reprice nothing explains, a wide spread on identical seats | Office of the Attorney General, for investigation, with the sealed packets |
| Records demand | A missing first-sale total or possession date that stops a test | DLCP, under the reseller’s three-year retention duty, D.C. Code 47-2890.04 |
| Logged | A large reprice where a public input did move, such as a sell-out | Kept in the ledger for the next run |
A finding read in Litigation mode, for a show before 1 January 2027 or with no date on record, names no enforcement action. Its outcome is Paid over the line (counterfactual) for a sale, Offered over the line (counterfactual) for an offer, Pattern evidence for a pattern, Record not on file for a missing first-sale total or possession date, and otherwise Logged. Each outcome is sealed inside its finding with the finding’s mode.
First-sale totalLawful markup and feeTiming, S(t)Unexplained, D(u)Over the line
A diamond is a sale, a dot is a listing, and a solid line is a legal line in force; a dashed line is a line shown as counterfactual. Red appears only where money crossed a line.
Each finding is an evidence packet: the finding, the records behind it, a hash of each record and the packet’s own hash. All the packet hashes are folded into one seal for the run, shown in the last tile and on the Seal tab. Change one character of one record and its packet no longer matches the seal, which is how a court can confirm that nothing changed after the run.
Each patron receipt becomes one sale row, and the ticket’s first sale (face value, fees and taxes, from a primary confirmation or the primary seller’s price schedule) becomes one ticket row. Listing screenshots become listing rows with their timestamps. The Data tab lists every file and field the engine reads, and reports any row it cannot use.
The console is built so the same engine serves other CCI work. Its core is domain-neutral: it takes a fair basis for each item, splits the premium over that basis into the part the timing and scarcity explain, S(t), and the remainder no posted input explains, D(u), and runs the pattern tests (repricing speed, the one-price test, paired quotes and lockstep sellers) and the seal on any market. A domain supplies three things: its records, its fair basis and its lines. For tickets these are the patron receipts, the first-sale total and the RESALE Act. The Lyft ride study was the first domain, with Lyft’s posted DC rate card as the fair basis. Another market with posted prices and a law or rate card to measure them against can be added the same way, and the Tuning panel then sets its thresholds on its own records.
The synthetic market’s numbers are invented and show what the engine catches, not what happens in DC. Pattern findings are statistical evidence with stated thresholds; whether conduct is unlawful is for the District’s lawyers and the court.
Every finding the engine made, sorted by the action it leads to. Select a row to open its evidence packet; Verify this packet re-checks it against the seal. Filter by grade, outcome, test or platform, or search for a seller, listing or sale.
| Outcome | Finding | Measure | Over the line |
|---|
One event at a time. Each diamond is a resale a buyer paid for; red diamonds crossed the price line, and the green bars show the typical price in each stretch before the show. Select a diamond to see its price anatomy. Show listings adds every offer as a faint dot.
Tests that look across the whole market. A flagged row carries its outcome mark and appears in the findings queue with its packet.
One dot per listing: the platform’s fee as a share of the first-sale total. Red dots sit over the 10% line.
The same listing quoted seconds apart by two test profiles that differ only in the attribute under test. A significant gap is the test for the ban on surveillance pricing, D.C. Code 28-5509.
Independent sellers in one section whose prices close on the same level above the line, repricing within minutes of each other. A referral for investigation; it does not by itself prove an agreement.
Jumps on the same listing larger than the jump size set in Tuning (50% within a day by default). Solid lines moved with nothing public moving; dashed lines followed a real input such as a sell-out.
How much of the premium buyers paid the time to the show and the sell-out explain, and how much they leave to the seller, the buyer and the platform.
The seal is one fingerprint for the whole run. Verify every packet re-hashes each record and packet and walks each one back to the seal; Copy the seal puts the record on your clipboard for filing.
Use Load records to choose the JSON Lines files for a market, all at once. Each file is named for what it holds. The engine runs in this page; nothing leaves the browser.
| File | Fields | Holds |
|---|---|---|
| tickets.jsonl | ticket_id, event_id, event_start, venue_in_dc, exempt, section, row, seat, face, primary_fees, taxes, basis_source | One row per ticket: its first sale, the fair basis |
| listings.jsonl | listing_id, ticket_id, seller_id, platform, ts, price, fee, all_in, itemized, shows_original, seat_shown, possession_ts | One row per listing snapshot; a reprice is a new row with the same listing_id |
| sales.jsonl | sale_id, listing_id, ts, price, fee, buyer_total | Completed resales, from patron receipts or platform records |
| quotes.jsonl | quote_id, listing_id, ts, profile_id, profile.segment, price, fee, all_in_shown, checkout_total, shipping | Paired audit quotes from test profiles |
| inventory.jsonl | event_id, ts, primary_available | Primary tickets still on sale over time (optional) |