A sourced, append-only record of discretionary AI quota resets — and two forecasts built on it. Covers March–July 2026. Published by Kingy AI.

Chance of a discretionary quota reset · next 48 hours
51%Codexlast reset 6 days ago · 7 in the past fortnight
27%Claude Codefrom a stated baseline — not measured
95%Claude Code scheduled recyclecounted separately — do not add

Ledger covers March–July 2026 · last updated · the Codex figure is re-reckoned against your clock on load, so it is never the frozen build-time number. If a reset happened that this ledger has not recorded yet, the figure reads low, not high.

Uncalibrated. These are hand-set priors from the public event record, not fitted parameters, and none has been checked against an outcome. There is no accuracy score behind them yet. The Codex figure is derived from this ledger's own record of when resets actually happened and updates as time passes; the Claude Code figure comes from a stated baseline, because no supported channel exposes its usage state. How they are built · why they may be wrong.

Methodology

How the Quota Reset Index records events and how it forecasts them — including what it cannot do, and what it would take to fix that.

The ledger comes first

The ledger is the asset. It records discretionary quota resets with evidence links and a confidence grade, and it makes no predictions, so it cannot be wrong in the way a forecast can. The forecasts below sit on top of it and are strictly the less trustworthy half of this project.

An audit on 2026-07-26 found that 24 of 29 records carried at least one over-claimed enrichment field — a scope or trigger value that no source asserted of that specific event. The events themselves survived: every record's vendor, date and evidence held up under adversarial review, and six candidate events were rejected before entry. The defects were in the metadata around them.

That correction has landed. Every accepted change was written as a superseding record; nothing was edited in place and nothing was deleted. Two details worth stating, because they are the reason to believe the rest:

The root cause was a schema property rather than 24 careless judgments. A required boolean cannot say "we do not know", so nine records asserted account coverage no source had addressed. Fields can now be explicitly unestablished, and every enrichment field carries a provenance marker.

Model A — Codex: self-exciting intensity

Codex quota state is not observable from outside, so the reset history is the richest signal available. Resets arrive in bursts, which is the signature of a self-exciting process rather than a memoryless one — hence a Hawkes intensity with a short refractory dip.

λ(t) = [ μ + α·e^(−Δt/τ) ] · refractory(Δt) · exp( Σ wⱼ·sⱼ·2^(−ageⱼ/hlⱼ) )

P(reset within W) = 1 − exp( −∫₀^W λ dt )
ConstantValueMeaning
α (excitation)0.02Added intensity per recent reset.
τ (excitation decay)30hHow long a burst stays hot.
Refractory depth0.85Suppression immediately after a reset.
Refractory relaxation8hHow fast that suppression lifts.
μ intercept0.55EWMA stand-in: base × (intercept + per-reset × resets/14d).
μ per prior reset0.075So 6 resets/14d lands exactly on the unmodified base rate.

The behaviour most likely to look like a bug: a reset 2 hours ago lowers the instantaneous rate but raises the 48-hour probability. That is deliberate — excitation outlives the refractory dip, and same-day repeats happened twice in July 2026. A change that reverses it is a regression, and a test pins it.

Codex evidence weights

Termweighthalf-lifeNote
Status incident1.136hOpenAI status severity, 0–100.
@thsottiaux post1.4510hUNREACHABLE in v1 — scraping X is prohibited, so nothing can raise this above 0.
Launch proximity0.75No decay: proximity to a release is a state, not an event.
Anthropic mirroring0.640hHours since the other vendor acted; ignored beyond 120h.

Model B — Claude Code: renewal hazard with covariates

Claude Code exposes usage state, so it can in principle be instrumented — which is why it gets a different model rather than the same one twice. It reports two numbers because the vendor offers two knowable things: a near-deterministic scheduled recycle, and a genuinely uncertain discretionary reset. They are different questions and must never be added together.

λ(t) = λ₀ · D(utilisation) · K(day, hour) · exp( Σ wⱼ·sⱼ·2^(−ageⱼ/hlⱼ) )

D(u) = 1 + 1.7 / (1 + e^(−(u − 0.74) / 0.075))

scheduled: Φ((W − t_due) / σ),  σ = 0.6h,  period ≈ 72h
Termweighthalf-lifeNote
Status incident1.0536hAnthropic status severity, 0–100.
@ClaudeDevs post1.3512hUNREACHABLE in v1 — same prohibition.
Model availability0.9548hRestoration or launch in progress.
OpenAI mirroring0.744hHours since the other vendor acted; ignored beyond 120h.

Calendar term

Window (UTC)multiplier
Friday 11:00–18:001.95
Monday 5:00–11:001.35
Weekend0.75
Ordinary weekday hour1

This is the only clock-dependent term in either model, and it is why the Claude Code figures move between a Tuesday and a Saturday on otherwise identical inputs.

Base rates

RegimeCodex /dayClaude Code /day
quiet0.090.04
normal0.180.07
launch0.330.12

Integration is a midpoint rule at 0.25h steps over a 96h horizon. Midpoint rather than left-endpoint because both models are steep near t=0 and a left-endpoint sum would bias the short windows.

What the sentinel depends on, and how it fails

§8 requires this stated plainly, so:

There is no sentinel, and there will not be one in this form. It was specified to poll an undocumented endpoint using a local OAuth token. That was declined on 2026-07-26: no stability contract, risk transferred to end users, and a conflict with the editorial-independence position this project depends on.

Investigating alternatives produced a harder finding. Anthropic's own developer documentation states that, absent prior approval, third-party products may not offer claude.ai login or rate limits. That applies whichever surface supplies the number — an undocumented endpoint, scraped terminal output, or the fully documented status-line field. Picking a cleaner surface changes the engineering and not the permission.

And even a working sentinel would answer the wrong question. No channel — supported or otherwise — distinguishes a vendor-wide grant from an ordinary scheduled rollover. Telemetry can establish that your quota changed. It cannot establish that the vendor granted anything. That is precisely what this ledger records, which is why the ledger is not the fallback instrument here. It is the only one.

The data, and how to use it

Both files are regenerated from the flat record files by a deterministic build — same inputs, byte-identical output — and are never hand-edited. They are served CORS-open because the point is for other people to check our work.

endpointformatheaders
/ledger.jsonarray of record objects Access-Control-Allow-Origin: *
Cache-Control: public, max-age=3600, stale-while-revalidate=86400
/ledger.csvone row per record, RFC 4180 same

Four things a consumer needs to know:

Why the archive lives beside the records, not inside them

The record files are append-only: once committed, every field except superseded_by is sealed, and a pre-commit hook plus a CI check against full history enforce it. Writing an archive link into a committed record would be a mutation, and the hook rejects it.

So archives live in their own append-only index, keyed by URL, and are joined into the published files at build time. This is not a workaround for the guarantee — it is a better fit for the data. An archive is not a claim about the event; it is a durability measure for a citation, with its own lifetime. A single field holds one capture, whereas the index holds a series of attempts, successes and failures alike. That is what supports a dated claim rather than a current one.

How this becomes citable rather than interesting

The build order is fixed: ledger, then sentinel, then models, then this page. Calibration is blocked on roughly 40 labelled events per vendor. When that unblocks, the work is maximum-likelihood fitting against the ledger with a held-out window, and a Brier score published beside each forecast. Until then the banner at the top of this page stays exactly where it is.