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.
00Pre-registration
Version 7, 16 Sept 2026. Names how the questions behind a cell were made. Every question this board asks is synthetic, and there are two kinds in one basket: the ones Luce wrote by hand, and the ones Luce's prompt grammar produced from a fixed set of phrasings, a category and a seed. Neither is an observed user query, and the written corpus does not reach the depth the precision gate asks for, so the generated share grows as a basket is filled toward it. It grows only in distinct questions: a cell the grammar cannot fill stays under-powered and fails the precision gate, and no cell is padded. Each published cell states how many of its questions Luce wrote and how many the grammar produced, with the seeds. A cell whose basket cannot be described says so with the reason, and one that states neither the composition nor a reason is not published. This board claims neither kind is better and has not measured that. Every later version is published with its own changelog before the first wave that runs under it, and a wave whose configuration changed after that version's date is not published.
| what is fixed in advance | this version |
|---|---|
| Engines in execution | ChatGPT API (openai_native), Gemini (gemini_native), Perplexity (perplexity_sonar) |
| Model version | Set per run by each engine's configuration. This version does not fix it. |
| Markets | us, it, de |
| Sectors | sport-footwear, audio-electronics |
| Prompts per cell | 93 independent prompts, 1 repetition each, sized so a brand mentioned in 40% of answers clears the precision gate |
| Precision gate | Half-width at most 0.25 × the rate it estimates, with the half-width taken at 1.96 standard errors, the same interval the board prints beside every rate |
| Denominators published per cell | attempted, landed, API fallbacks, errors |
| Wave completeness | Every declared cell lands at least 0.9 of the answers it planned, the wave loses at most 0.05 of its own planned answers, and every lost answer carries a recorded reason |
Decision rules fixed by this version.
- A cell is published only when its interval half-width is at most 0.25 of the rate it estimates.
- A sector-market pair that has never been published does not open while a published cell of the same sector sits below the precision gate.
- A market is declared with its own identifier; two markets are never measured under one locale.
- A market label is published only where the request that produced it was recorded. Where that request carries a geographic channel, no two markets may share it. Where it carries none, the cell says so: the model APIs take no geographic parameter, so the same prompt sends the same request in every market and the board claims no distinction it did not make.
- A capture that failed is recorded as a failure. Only a completed capture can establish an absence.
- A zero-width interval is published as unresolved, whatever the cell's gate says.
- A cell publishes the count of times it was asked, or it publishes the reason that count is unavailable. A rate with neither is not published.
- A wave that measures a Veliu client brand publishes the estimated client effect with its interval, whichever way it comes out.
- A wave with fewer than four distinct client brands publishes that count and withholds the client effect, because an interval built on so few clusters cannot be read either way.
- The scaling ladder reads stability before it widens the board's declared scope. A wave publishes what it measured whether or not it is stable.
- A wave counts as stable only when every declared cell landed at least 0.9 of the answers it planned, the wave lost at most 0.05 of its own planned answers, and every lost answer carries a recorded reason.
- A wave's completeness and loss cover only the declared cells of the engines this version names. A cell carried from the wave that measured it enters neither, and neither does the consumer-interface arm.
- A wave borrows its whole consumer arm from one earlier wave, so the answers a reader follows are the answers behind the cell. A cell that wave does not carry is marked absent with its reason, and every other cell in the wave still publishes.
- Each cell records which of four things happened to it: measured by this wave and published; measured by this wave and not publishable, with the reason; carried from the wave that measured it; or absent, with the reason. A cell is never recorded as absent when this wave observed it.
- A wave's spend counts as reconciled only against the provider's invoice. A period we hold no invoice for stays unreconciled until one arrives.
- Each engine cell of a wave records whether this wave measured and published it, or that it is absent with the reason. A wave that landed no engine cell publishes nothing; a wave that landed some publishes those and declares the rest.
- A comparison between two waves is computed over the cells both waves published, and every published comparison states the engines it stands on. A figure that moved because a cell was absent is not a movement.
- A brand is published on a category and market when, in at least one of the last 4 waves, a single engine named it there in at least 2 distinct prompt clusters of that wave. The alias dictionary decides which brands an engine can be found to have named; the measurement decides which are published. Each wave publishes the wave identifiers its window read, the brands it admitted, and the candidates it did not admit by name, so the verdict states its own inputs and a holder of the raw observation layer can check it against them.
- A cell asks about the brands declared as candidates for that category and market, so a brand is named as not admitted only where this board asked about it there.
- A brand the board does not publish was asked about in that cell and was named in fewer than 2 distinct prompt clusters by every engine across the window, under the alias names the dictionary held for it. Each wave publishes those brands by name beside the ones it admitted, with the cell and the window the statement covers. It describes this board's declared prompts for that cell and that window, and no question this board did not ask.
- A commercial relationship with Veliu neither adds a brand to the alias dictionary nor removes one, and neither admits a brand to a board nor removes it. The estimated client effect is read over the brands admitted in any wave of the window, so a brand that crosses the admission floor during the window is counted on both sides of it and the estimate is not read over a sample the treatment selected. This board does not publish which brands on it are Veliu clients, or how many, so the estimated effect is the only figure it states about them.
- Each published cell states how many of the questions behind it Luce wrote and how many Luce's prompt grammar produced, with the seeds that produced them, describing the basket that cell was measured against. A cell whose basket a publication path cannot describe states that and its reason, and one that states neither the composition nor a reason is not published.
- The prompt grammar produces only questions distinct from the ones already in a cell's basket and from one another. A cell it cannot fill to the declared depth stays under-powered and fails the precision gate; no cell is padded to depth.
- A commercial relationship with Veliu decides neither which questions Luce writes nor which seeds a cell runs, and neither adds a question to a cell nor removes one.
- A written question and a question the grammar produced are both synthetic. This board claims neither is better and has not measured that; the composition is published so a reader can weigh it.
- Two markets inside one country are published apart only when their measured rates separate on at least 3 distinct brands inside one wave, agreeing on which market is higher: the distance between the two rates exceeds the sum of their interval half-widths, and a zero-width interval separates nothing. That wave publishes the separating brands with both rates, both intervals and the count of brands it compared. Until a pair separates, the country is published as one market and the second stays declared and unmeasured.
What a denominator means here. A rate on this board is a fraction, and from the first wave measured under this version the counts underneath it are published with it: attempted is how many times the cell was asked, landed how many answers came back on the surface being measured, API fallbacks how many attempts landed on an API, which is a different surface, and errors how many failed outright. From that wave on, a cell either publishes these counts or publishes the reason it has none, and a rate with neither is withheld. The cells on the board today were measured before this version and carry no denominator; their sample size is the prompt count printed beside each one.
The conflict of interest, measured. Veliu sells brands an AI that fixes their catalog and closes the sale on their own site, so a brand measured on this board can be a Veliu client. Every wave that measures a Veliu client estimates whether being one is associated with a better rank range, comparing brands inside the same cell, with the interval clustered by brand, and publishes the estimate whichever way it comes out. A wave that measures a client brand and carries no estimate does not build. No brand measured in this wave was a Veliu client, so there is no effect to estimate. The list of Veliu client brands is declared with the wave and was last checked against the measured rosters on 8 Sept 2026.
The scope declared here is the scope this wave measures. It widens one sector-market pair at a time, and only toward a pair whose sector already has a published cell past the precision gate.
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; every layer re-checks it for itself.
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 the rarer a brand's mentions, the more probes its cell needs. 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. Hiding a wide interval would hide the one thing it says. 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 |