STOP WASTING PAID TOKENS. START POOLING ACCOUNTS TODAY. [ GET YOUR VAULT ]
← BACK TO BLOG

My own dashboard was making up numbers

Martin Shein
Aug 28, 2026 · 6 min read
RSS
Copied!
My own dashboard was making up numbers

I opened SpiderGate's usage page and read a budget of $2,000, a plan called Pro at $49.00 a month, and a ceiling of 1,000 requests per minute.

None of it was real. There is no budget column. There is no Pro plan. Nothing in the database has ever held those numbers. They were placeholders written into a component months earlier, and they shipped, and clients read them.

That is the small problem. Here is the bigger one.

A 200 is not an answer

The same page showed a success rate. It came from the HTTP status code.

A gateway call that returns 200 with an empty body counted as a success. So did a call that returned two thousand useful characters. On a chart they were the same green.

That is not a rounding error. It is the difference between an alias that works and an alias that is dead, and the page could not tell you which one you had.

Two identical chalk envelopes side by side on a black board. The left one holds a single gold dot and is labelled DELIVERED; the right one is empty and is labelled HOLLOW.

Then I made the same mistake

When I wrote the plan to fix it, I put a number in it. I said one alias, agent/chat, returned nothing on 62.2% of its requests.

The engineer who wrote the query refuted it.

OpenAI sets the response content to null when tool calls fire. A correct tool-calling turn has zero output characters, by construction. My predicate counted 12,780 healthy turns as failures. The real figure for that alias is 13 requests. Not 62.2%. 0.06%.

Three candidate predicates were measured before one was chosen. They differed by 23 times. I had picked the loosest one, in a plan whose entire premise was that a metric was lying.

The alias that was actually failing was one nobody had looked at. Measured over seven days on 2026-08-24:

alias

requests

hollow

share

agent/vision

76

62

81.6%

spideriq/vision

56

27

48.2%

agent/creative

1,847

400

21.7%

agent/chat

20,353

13

0.06%

Tiny volume, near-total failure, invisible behind an aggregate that said 81% delivered.

Four states, and one of them is "I don't know"

Every chat turn now lands in exactly one of four states, and the four sum to the total:

A long chalk outline bar with one small gold block inside its right-hand end. ONE TOTAL is written under the bar; UNKNOWN is written under the gold block.

The fourth one is the one I care about. Requests older than 2026-08-13 predate the column that records whether anything came back. We could fold them into delivered. Every dashboard I have ever used would.

We do not. They read unknown, the page says so, and the delivered percentage tells you it was computed over the classifiable rows only.

An alias with no classifiable rows reads UNKNOWN with a dash. It does not read 0.0%. A confident zero and a missing measurement look identical on a chart and mean opposite things.

A rolling 30 days is not this month

The old page offered a lookback. Seven days, thirty days.

Nobody thinks in lookbacks. You think in months, because that is how you are invoiced.

A chalk circular arrow that closes on itself, labelled ROLLING WINDOW, beside a square block with a gold left edge, labelled CALENDAR MONTH.

This month is now a calendar range, and the totals differ from a rolling thirty days because they are different windows. You can set any custom range, put the previous period beside it, and the page prints back what it resolved in UTC so you can check that it measured what you meant.

While we were there we found the right rail was ignoring the picker entirely. It printed "34,567 of your requests were rate-limited in this window". The measured answer for that window was 32. A factor of 1,080, in a sentence a client reads.

A recommendation that is allowed to say no

The right rail tells you whether to buy more provider keys.

The easy version of that panel always says yes. Errors are up, so add capacity. It is also an upsell wearing a recommendation's clothes.

A solid gold key labelled ADD KEYS beside a chalk door struck through with a cross, labelled WILL NOT HELP.

Each provider now gets a verdict in words. One of them recommends keys and shows a target number. Four of them refuse, each with a reason:

The target number is null on every verdict except the one that recommends keys. There is nothing to render on a refusal, because a recommendation that cannot say no is not a recommendation.

Where a provider publishes no limit, the panel labels its own ceiling an estimate rather than presenting a guess as a published fact.

What it still does not know

Three panels report that something is not measured, in those words.

The free, subscription and pay-as-you-go split is not measured, because no endpoint returns a per-key-type request count for one brand. Per-hour latency is not measured, because the hourly series carries no latency field and an hourly line would be one number repeated. A key without a package assigned shows the tokens it has counted and says the window is unmeasurable, instead of drawing an empty gauge.

I left those in deliberately. An empty gauge and "we cannot measure this" look the same and mean opposite things, and one of them is a lie.

Your agent can read all of it

The page is not the only reader. gate_usage, gate_capacity and gate_flow return the same numbers over the same window, so an agent can ask the same questions you can and act on the answers.

That needed @spideriq/mcp-gate 1.10.0, @spideriq/mcp 1.89.0 and @spideriq/cli 1.71.0. On an older pin those two newer tools do not exist and nothing tells you so, which is its own small version of the same problem.

Open Gate → Usage, set the range to This month, and add up the four outcome numbers. They will equal your turn count exactly. That is the whole point: a page you can check.

← BACK TO BLOG