On build 5932626c4e6f, the paid antigravity row publishes three different readings in rotation, and fetchedAt moves backwards. The three free rows on the same provider, in the same process, in the same samples, behave correctly — which is what makes this reportable rather than ambient noise.
Accounts are labelled A–D below; A is the paid one (capturedPaidTierId = g1-pro-tier), B/C/D are free-tier.
Observed
82 samples, 3s apart, all four antigravity accounts read from the same usage.get response each time.
Account A cycles among three distinct readings:
37x source=oauth usedPercent=32.73 fetchedAt=2026-09-11T18:19:36
25x source=oauth usedPercent=33.49 fetchedAt=2026-09-11T19:02:47
7x source=oauth usedPercent=13.88 fetchedAt=2026-09-11T19:15:37
5x source=vault usedPercent=32.73 fetchedAt=2026-09-11T18:19:36
Accounts B, C, D over the same samples:
B 5 distinct (usedPercent, fetchedAt) tuples, ONE usedPercent: 50.86
C 5 distinct (usedPercent, fetchedAt) tuples, ONE usedPercent: 100.0
D 5 distinct (usedPercent, fetchedAt) tuples, ONE usedPercent: 100.0
Five tuples on a free row is fetchedAt advancing normally — 19:17:11, 19:18:12, 19:19:13, 19:20:14, one per ~61s fetch cycle, with the value unchanged. That is the healthy shape. Three tuples on row A is three different values alternating, none of them advancing.
Two consequences fall out.
fetchedAt moves backwards. Measured once inside a single instrument run: a 3361s step, 19:15:37 → 18:19:36. Rotating among frozen timestamps makes it non-monotonic by construction, not by accident.
The same reading publishes under two different source labels. (32.73, 18:19:36) appears 37 times as oauth and 5 times as vault — identical value, identical timestamp, different provenance. A consumer counting vault-backed lanes sees the count flap. That is how I found this: a routine sweep read 6 vault rows, then 5, twenty seconds apart, with nothing having changed.
Why it matters
A router reading headroom for account A gets 13.88% or 32.73% depending on which sample it catches — a 19-point swing with no underlying consumption change. The stalest of the three readings was an hour old while a 3-minute-old one existed in the same rotation, so a freshness gate does not select the good one; it accepts whichever happens to be published.
This compounds with a consumer-side defect found separately today: at least one downstream consumer does not deserialize fetchedAt at all and stamps its own poll time, so every one of these readings looks 0s old to it. A staleness gate cannot filter a field the consumer never reads, and here even a consumer that did read it would be handed a timestamp that goes backwards.
Hypothesis, stated as one
I have not established the mechanism, only the observable. The shape is consistent with more than one slot resolving to account A — a vault handle whose identity is that account, plus the plugin account of the same identity — deduplicating to a single published row whose winner is not stable across snapshots, each slot carrying its own last-good cached value. The alternating source label on an otherwise identical reading is what suggests it. Exactly four antigravity rows are published in every sample, so whatever the count of underlying slots, dedup is always collapsing them; it is the choice of winner that varies.
Worth saying plainly: this is specific to the account that takes the paid-tier refusal path. The free rows resolve through the cloud lane and are stable. I would look first at what the refusal leaves behind for dedup to choose from.
What I did not establish
- Whether the three readings correspond to three distinct slots, or to two slots plus a cache that changed mid-run.
- Whether this predates the current build. I only started sampling today, so I cannot date its onset.
- Whether it occurs on a host with a single antigravity account. Four accounts plus one vault handle may be load-bearing for reproducing it.
Instrument and raw log available if useful. Happy to run a specific probe if there is one that would discriminate between the hypotheses above — I would rather collect the evidence you want than argue from the evidence I happened to collect.
On build
5932626c4e6f, the paid antigravity row publishes three different readings in rotation, andfetchedAtmoves backwards. The three free rows on the same provider, in the same process, in the same samples, behave correctly — which is what makes this reportable rather than ambient noise.Accounts are labelled A–D below; A is the paid one (
capturedPaidTierId = g1-pro-tier), B/C/D are free-tier.Observed
82 samples, 3s apart, all four antigravity accounts read from the same
usage.getresponse each time.Account A cycles among three distinct readings:
Accounts B, C, D over the same samples:
Five tuples on a free row is
fetchedAtadvancing normally — 19:17:11, 19:18:12, 19:19:13, 19:20:14, one per ~61s fetch cycle, with the value unchanged. That is the healthy shape. Three tuples on row A is three different values alternating, none of them advancing.Two consequences fall out.
fetchedAtmoves backwards. Measured once inside a single instrument run: a 3361s step, 19:15:37 → 18:19:36. Rotating among frozen timestamps makes it non-monotonic by construction, not by accident.The same reading publishes under two different
sourcelabels.(32.73, 18:19:36)appears 37 times asoauthand 5 times asvault— identical value, identical timestamp, different provenance. A consumer counting vault-backed lanes sees the count flap. That is how I found this: a routine sweep read 6 vault rows, then 5, twenty seconds apart, with nothing having changed.Why it matters
A router reading headroom for account A gets 13.88% or 32.73% depending on which sample it catches — a 19-point swing with no underlying consumption change. The stalest of the three readings was an hour old while a 3-minute-old one existed in the same rotation, so a freshness gate does not select the good one; it accepts whichever happens to be published.
This compounds with a consumer-side defect found separately today: at least one downstream consumer does not deserialize
fetchedAtat all and stamps its own poll time, so every one of these readings looks 0s old to it. A staleness gate cannot filter a field the consumer never reads, and here even a consumer that did read it would be handed a timestamp that goes backwards.Hypothesis, stated as one
I have not established the mechanism, only the observable. The shape is consistent with more than one slot resolving to account A — a vault handle whose identity is that account, plus the plugin account of the same identity — deduplicating to a single published row whose winner is not stable across snapshots, each slot carrying its own last-good cached value. The alternating
sourcelabel on an otherwise identical reading is what suggests it. Exactly four antigravity rows are published in every sample, so whatever the count of underlying slots, dedup is always collapsing them; it is the choice of winner that varies.Worth saying plainly: this is specific to the account that takes the paid-tier refusal path. The free rows resolve through the cloud lane and are stable. I would look first at what the refusal leaves behind for dedup to choose from.
What I did not establish
Instrument and raw log available if useful. Happy to run a specific probe if there is one that would discriminate between the hypotheses above — I would rather collect the evidence you want than argue from the evidence I happened to collect.