Veliu Research Lab · methodology luce-live-v0
How the board is built
The rules below are enforced in code at the database, the API envelope and the render layer. A page that breaks one does not build.
Dated methodology changelog. Grammar changes, statistical thresholds and the methodology identities used for citations.
01What the board measures
Luce publishes the probe-design mention rate: how often a brand appears in an engine's answers when probed with the Luce grammar. The exact estimand is stamped on every response and printed next to every table. The board reads engine output: which brands the answers put forward, and how often.
How a brand is detected. A mention is resolved against a closed roster: each brand carries a canonical name and an explicit alias list, and an answer counts as mentioning that brand only when it matches one of them. The roster is deliberately narrow, so a common word that is also a brand name is not counted on the strength of the word alone. This buys precision at the cost of recall: a rate published here is a floor, and a brand whose name is an ordinary word may be undercounted. The roster and its aliases ship with the wave.
02The provenance ladder
Every stored row carries a provenance tier. Worst tier wins on any aggregate, and observed rows never pool with synthetic rows.
| tier | word | meaning | publication | |
|---|---|---|---|---|
| L0 | ● | observed | captured in situ from a real engine surface | publishable |
| L1 | ◕ | elicited | a real engine answer collected by direct elicitation | publishable |
| L2 | ◑ | derived | computed from real rows by transformation | diagnostics only |
| L3 | ○ | synthetic | grammar-generated probes; every prompt in this wave uses synthetic grammar | publishable with the mandatory synthetic label |
| L4 | · | template | synthetic scaffolding | never published |
03The fidelity firewall
A published cell holds exactly one engine surface at exactly one provenance tier. Two surfaces never fuse into one number, ChatGPT web app and ChatGPT API included. Research-only surfaces (RAG reconstruction, raw crawl) never reach a public page. The same predicate gates the database schema, the API handlers, and every render function on this site; each layer re-checks it rather than trusting the layer upstream.
04Counting before collapsing
Estimators pool the raw 0/1 trials from every repetition of every prompt. Collapsing repetitions into a per-prompt majority vote before counting is biased; the stats package carries the proof. The prompt is the independent unit, so confidence intervals come from a cluster bootstrap over prompts. A normal approximation on the pooled trials would report a tighter interval than the data supports.
05Rank ranges and leagues
A rank is published as a range from the joint bootstrap, together with the league it chains into. A single fixed position would hide the rank uncertainty the resampling actually reports. Brands whose intervals chain together share a league. A brand measured too imprecisely to rank is listed as unranked and says so.
06Movement
An arrow fires only when a change-point clears the false-discovery gate and beats its minimum detectable effect at the cell's realized precision. Every other state renders as itself: stable, drift watch (provisional), insufficient waves, or no movement claim at all when the latest wave is too imprecise.
07Sample sizing
Cells are sized by relative precision: the interval half-width must come in under a quarter of the observed rate, so rarely-mentioned brands need more probes rather than fewer. An under-powered cell still publishes, flagged, with its uncertainty exposed.
08The probe log
Every row in the probe log leads with its server-stamped provenance chip and is dropped without one. Synthetic prompts render as muted slot templates so a generated probe can never read like a fluent user session. The pinned band above the log states the wave's synthetic share and cannot be removed. The log for this wave is below.
- L1 elicited2026-07-15 19:49:02 UTCchatgpt-apiopenai_nativeen-UScategory running-shoesASICS · Brooks · HOKA · New Balanceorder not scored
- L1 elicited2026-07-15 19:49:02 UTCchatgpt-apiopenai_nativeen-UScategory wireless-earbudsSoundcore · Jabra · Sonyorder not scored
- L1 elicited2026-07-15 19:49:02 UTCgeminigemini_nativeen-UScategory running-shoesAdidas · ASICS · Brooks · HOKA · New Balance · Nike · On Running · Sauconyorder not scored
- L1 elicited2026-07-15 19:49:02 UTCgeminigemini_nativeen-UScategory wireless-earbudsSoundcore · AirPods · Bose · Jabra · Sonyorder not scored
- L1 elicited2026-07-15 19:49:02 UTCperplexityperplexity_sonaren-UScategory running-shoesAdidas · ASICS · Brooks · HOKA · New Balance · Nike · Sauconyorder not scored
- L1 elicited2026-07-15 19:49:02 UTCperplexityperplexity_sonaren-UScategory wireless-earbudsAirPodsorder not scored
- L1 elicited2026-07-15 19:49:02 UTCchatgpt-apiopenai_nativeen-UScategory running-shoesASICS · Brooks · HOKA · New Balance · Nikeorder not scored
- L1 elicited2026-07-15 19:49:02 UTCchatgpt-apiopenai_nativeen-UScategory wireless-earbudsAirPods · Bose · Sonyorder not scored
09Governance
Published by Veliu Research Lab. Veliu sells services to brands measured here. That disclosure appears on every page. Ranked cells carry no purchase prompt and no superiority badge. The board is brand-agnostic: no brand is baked in as a benchmark or reference.
10Reproducibility bundles
Every published cell ships a JSON bundle at /bundle/{waveId}/{cellId}.json, linked from that cell's claim page. It carries the same numbers the page shows, each with its 95% interval, its sample and its provenance tier, together with the prompt ids and the captured answers the cell was computed from, the estimator behind the intervals, the precision gate the cell was held to, and the governance disclosure.
A wave's numbers are final when the wave closes. Until then an adaptive run can publish the same wave more than once, so its sample can still grow. A corrected read closes under a new wave id, and every figure is pinned to the wave id it names.
Every closed wave keeps its address: /claim/{waveId}/{cellId} and /bundle/{waveId}/{cellId}.json resolve for every wave this board has closed. One exception: a snapshot build published without the database behind it carries the current wave and the one before it, and drops older claims. This board publishes its serving mode at /api/health, where pg is the database-backed board and wave is the snapshot build.
/claim/{cellId} is an alias that follows the newest wave which measures the cell, falling back to the last wave that published it. It redirects temporarily because it is built to keep moving.
A bundle carries the results and what is needed to audit them: which prompts, which captured answers, which estimator, which gate, and every figure with its interval and its sample. It does not carry the per-prompt observation vectors, the bootstrap seed or the replicate count, so the resampling cannot be re-run from the file alone. That is an audit trail with the identifiers to follow, and the raw observation layer is a separate publication.
In a bundle, measuring is true exactly when the cell is below the precision gate. The gate result is also carried in gate.passed.
Bundles declare schemaVersion: luce-claim-bundle-2. The field-by-field schema is published at /bundle-schema.
11This pilot wave
Everything on this build is a live pilot wave (luce-live-w30) at tier L1 elicited, over real brands, probed with the Luce synthetic grammar at tier L3. It is a small wave: intervals are wide, and the coverage table below states exactly how many cells clear the precision gate. The board renders the cells that fall short with their wide intervals shown rather than hiding them. A larger wave swaps in behind the same store interface without changing a single template.
This wave records no engine cost. A wave that records one publishes the figure here.
estimand: probe and precision coverage counts over Luce grammar luce-live-v0; diagnostic only; not demand-weighted
| engine surface | API calls | captured answers | prompt clusters | cells passing precision gate | categories |
|---|---|---|---|---|---|
| chatgpt-api openai_native | 60 | not applicable | 60 | 0 / 2 | Running shoes, Wireless earbuds |
| gemini gemini_native | 60 | not applicable | 60 | 0 / 2 | Running shoes, Wireless earbuds |
| perplexity perplexity_sonar | 60 | not applicable | 60 | 0 / 2 | Running shoes, Wireless earbuds |
| chatgpt-web consumer_ui | not applicable | 78 | 78 | below the gate | Running shoes, Wireless earbuds, Coffee machines, Robot vacuums, Air fryers |