On a desk built out of a 15-minute above-or-below window, almost everything a reader instinctively reaches for is something we do not have. Each one below is answered with the measurement behind it and the date that measurement was taken, because a refusal without a number ages into folklore and somebody eventually “fixes” it.
“Show me the high and the low inside each window.”
no-intra-window-rangeThere is no high and there is no low, at any licence this desk can hold. The 15-minute crypto windows settle on a CF Benchmarks real-time index, which is an order-book-derived value published about once a second — it is a stream, not a bar, so an intra-window range would have to be constructed by us from data we are not permitted to store or show. Four doors, all closed, and they are closed for four different reasons. What this desk draws instead is a BODY-ONLY BAR: open is the number to beat, close is the realized settlement value, and the colour is the sign of the difference. Every pixel of that is a published venue number. `components/indices/IndexPriceChart.tsx:16-22` is the standing precedent for why the missing pieces are not simply filled with the pieces we have: "Feeding o=h=l=c to a candle renderer would draw a row of doji, and a doji is a CLAIM." So is a wick.
Measured 2026-09-09: CF Benchmarks forbids redistribution of the index. Coinbase and Gemini market-data terms forbid display. Pyth's free tier grants no display rights. Kalshi's own CF passthrough requires API-key signing, which scripts/doctrine-verify.ts bans in CI. Nothing at the settlement basis is available at a free licence.
Structural — nothing on a roadmap retires this.
“What is bitcoin trading at right now?”
no-live-underlying-priceThis desk adds no spot feed and never claims to be one. Every number on it is either a term of a contract or a settled venue outcome, both of which are published facts about a contract — not a quote. The nearest thing to "now" here is the open window's threshold, which is the PREVIOUS window's settlement value and is therefore already up to fifteen minutes old by construction; rendering it as a live price would be the same defect as a wick, one field further along. `lib/scanners/refusals.ts` already publishes this refusal as `crypto-spot` for the alert builder. That entry remains true and is NOT superseded by anything on this desk.
Structural — nothing on a roadmap retires this.
“It has been yes four windows in a row — is the next one likely yes?”
run-not-predictiveNo, and this desk measured that rather than asserting it. The resolution history is honest AS HISTORY — those windows really did settle that way — and it carries no predictive information about the next one. The conditional rate after a yes is 1.2 points LOWER than the rate after a no, which is the opposite direction from the one a continuation story needs, and the mean run is very slightly SHORTER than a fair coin's. Those figures ship on the surface beside the run itself, with their n, which is why the run is shown at all: hiding it would be hiding a real record, and showing it without the measurement would be publishing a suggestion. This desk prints no direction, ranks nothing, and recommends nothing.
Measured 2026-09-09: 1,000 consecutive settled KXBTC15M windows (251.75 hours): P(yes | previous yes) 0.4804 against P(yes | previous no) 0.4922; mean run 1.98 against a fair coin's exactly 2.00; run histogram {1:245, 2:140, 3:57, 4:36, 5:14, 6:10, 7:2, 8:2}, longest run 8.
Structural — nothing on a roadmap retires this.
“Show me a year of these windows.”
history-depth-wallIt does not exist to fetch. The venue's archive of settled 15-minute windows is walled at roughly 60 days, and past the wall the API does not error — it returns HTTP 200 with an empty page, which is the failure mode a loader silently renders as "quiet market". Depth beyond the wall can only accrue from the day WET starts persisting windows, one day at a time, and until then an empty store publishes THIS SENTENCE rather than a blank chart or a "no history" label.
Measured 2026-09-09: max_close_ts 60 days back returns a full page; at 90 and at 150 days the same request returns 200 with ZERO rows. One request at limit=1000 covers 251.75 hours (10.5 days); limit=100 covers 24.75 hours, so an hourly capture has about 24x slack.
Retires when the stored window history is itself deeper than the venue's ~60-day wall. This one retires by the calendar rather than by a build — one day per day, from first capture.
“Is the tape unbroken?”
tape-not-gap-freeNo, and the breaks are drawn as breaks. Windows go missing at the venue, and a renderer that joined the rows either side of a hole would draw price action across a span nobody observed — the same fabrication as a wick, in a different direction. A missing window therefore emits an explicit null and the line breaks. `lib/indices/intraday.ts:30-36` is the estate's standing rule for this: renderers break the line, they do not bridge it. The statistics obey the same rule — a pair of outcomes either side of a hole is not a consecutive observation and is excluded from every conditional rate.
Measured 2026-09-09: a real 135-minute hole — eight missing consecutive windows — exists in a single 10.5-day span of the measured KXBTC15M sample.
Structural — nothing on a roadmap retires this.
“Add silver.”
silver-absentThe venue does not list it. `GET /series/KXSILVER` returns 404 — there is no silver series to read, at any cadence. The only silver exposure in the catalog is an annual gold-to-silver ratio market, and `annual` is not one of the cadences this desk reads (`cadence.ts`): a once-a-year threshold is not a short-dated window and one resolution is not a tape.
Measured 2026-09-09: GET /series/KXSILVER -> 404; the sole silver-bearing market in the catalog is an annual ratio market.
Structural — nothing on a roadmap retires this.
“Then add gold — Kalshi has gold.”
gold-dormantTwo independent reasons, and the second one outlives a fix to the first. (1) The series is dormant: zero open events, and the newest settled event is from October 2022. (2) Gold settles on the LBMA London auction fix, which prints TWICE A DAY. Two prints a day is not a window tape — there is no fifteen-minute instant to be above or below — so even a fully revived gold series could not join this desk without changing what the desk is. This is a settlement-basis refusal wearing an inventory refusal's clothes.
Measured 2026-09-09: Kalshi gold: 0 open events, newest settled event October 2022, settlement source the LBMA twice-daily London auction fix.
Structural — nothing on a roadmap retires this.
“There are 15-minute S&P 500 and oil series in the catalog — list those.”
unnamed-settlement-sourceBoth are catalog records rather than markets, and both would fail the settlement test even if they were not. KXINX15M (S&P 500) and WTIH (WTI oil) have produced zero events, ever — the shape `cadence.ts` warns about, where a series returns a valid 200 and an empty array that a lazy loader ships as a permanently blank tile. And each declares its settlement source as the literal string "For example, Google Finance". An example is not a methodology. A window tape needs a named, published, auditable settling authority, which is the whole reason the crypto series qualify and these do not.
Measured 2026-09-09: KXINX15M and WTIH: 0 open events and 0 settled events ever; settlement source declared as the literal string "For example, Google Finance".
Structural — nothing on a roadmap retires this.