Skip to the content.

Finding: cache-read vs rate-limit burn on subscription (OAuth) seats

The question

--managed-cache AUTO stays passive on subscription (OAuth) seats because “on a Pro/Max subscription the marginal token price is flat” (cmd/fak/guard_managed_cache.go:21-23). That reasoning is denominated in dollars. Subscription seats do not die on dollars — they die on rate limits (the whole reason fak resume scan exists; the live-vs-post-mortem cap taxonomy is cmd/fak/resume_scan.go:237resume.ClassifyLimitText). #2183 asks the axis the dollar argument never looked at: if the provider’s rate-limit accounting discounts cache reads the way its billing does (the 0.1x provider cache-read multiplier is real and pinned at internal/cachevaluereport/track2.go:46 providerCacheReadMultiplier = 0.1), then keeping an OAuth session cache-hot would extend its runway before a limit crash — real managed-cache value on a flat-rate seat, denominated in rate-limit headroom instead of dollars.

What was checked

The issue asserts “fak already has both sides of the join in the gateway.” That is true at the live observation seam and false at the durable-ledger seam — and the correlation the acceptance criteria want is a post-hoc join over real sessions, which needs the durable seam.

Result

Untested hypothesis (must not be read as measured)

A plausible prior — explicitly not a finding — is that the subscription unified window meters usage, not dollars, so a cache read may count toward the 5h/7d window at (or near) the same weight as uncached input even though it is billed at 0.1x. If that holds, cache reads would not discount limit burn on the token axis, and the passivity would be correct on the rate-limit axis too. The opposite prior — that the provider applies the same 0.1x weighting to unified usage as to billing — is equally unproven. Both are hypotheses the missing witness would decide. Nothing here should be cited as evidence for either.

Generation classification

Per docs/generation.md, the issue was unclassified. On the evidence above it classifies as gen/future (research / long-horizon option): it studies whether a standing assumption holds on an axis with no current-product witness, and its promotion depends on a witness that does not exist yet. It is not gen/now (no current-product readout to move today), and not gen/next (no near-term gate or dogfood — the enabling schema change has to land first).

Smallest next step

Because the account view is not accumulated per session at all (above), the witness lands in three ordered steps, not one:

  1. Wire it. Install a session-scope accountobs.Tracker onto gateway.Config.UpstreamResponseObserver in the guard/serve command (the seam and parser already exist and are tested) so a running OAuth session accumulates its unified-window utilization curve and 429 count.
  2. Persist it. Append the folded snapshot (per-window utilization at exit, 429 count, resets) to the durable session ledger, keyed so it joins the cache-savings row for the same session.
  3. Measure it. Run a matched cache-hot vs cache-cold A/B on two equivalent Pro/Max seats and compare the unified-window utilization slope.

Until step 3, --managed-cache AUTO passivity on OAuth is evidence-tracked as unmeasured, not silently assumed — which is the state #2183 asked for.