Repository navigation
Open
Labels
app/pm-stackpm-stack (Pad/Grist) in developing-today/codepm-stack (Pad/Grist) in developing-today/codeeffort/mMedium: expected under 1 day of workMedium: expected under 1 day of workkind/featureNew feature or capability requestNew feature or capability requestpriority/normalOrdinary priority (the default)Ordinary priority (the default)queue/queuedHas a queued task in the Supabase agent queueHas a queued task in the Supabase agent queuesource/queue-workerFiled or worked by the queue/worker pilotFiled or worked by the queue/worker pilotstatus/blockedQueue or user escalation stateQueue or user escalation statestatus/triagedTriaged and routed (see agent note)Triaged and routed (see agent note)task/fixhas a fix task queuedhas a fix task queued
Description
Parent chain: #1184 → #1256 → this issue. GitHub currently caps #1184 at 100 direct sub-issues and rejects additional links (REST 422), so implementation slices are nested under #1256, already a native child of #1184; no existing parent links were changed.
Design context: #1256; doc/2026-11-01T21-07-00Z_design_pm-stack_forecasting/2026-11-01T21-07-00Z_design_pm-stack_forecasting.md (§2). Depends on the measured live-rate contract in #3933; do not duplicate its quota extraction or near-limit/wall threshold rules.
Goal
Add a time-to-exhaustion interval that composes live per-pool usage, observed rate, and reset time, complementing (not replacing) the existing point-pace and quota-wall derivations.
Acceptance criteria
- Consume the live quota contract from aggregator: finish quota throughput data + record the design contract (#851) #3933: pool identity, remaining/limit, reset time, measured timestamped burn, source age/coverage, and explicit missing/estimated markers.
- Where enough fresh rate observations exist, return an exhaustion interval and whether its P50/P80 falls before or after reset; expose the rate window and source.
- If rate, remaining amount, or reset is missing/stale, or there is no measured burn history, return an explicit unknown state rather than “safe” or a fabricated date.
- Reuse aggregator: finish quota throughput data + record the design contract (#851) #3933 existing near-limit/wall rules; do not add another threshold/attention path. Queued issues are not converted into token demand; any scheduled-work scenario must be separately labelled and use attributable measured inputs.
- Tests cover reset boundaries, stale/missing rates, zero rate, limit already reached, and a measured exhaustion-before-reset case.
Metadata
Metadata
Assignees
Labels
app/pm-stackpm-stack (Pad/Grist) in developing-today/codepm-stack (Pad/Grist) in developing-today/codeeffort/mMedium: expected under 1 day of workMedium: expected under 1 day of workkind/featureNew feature or capability requestNew feature or capability requestpriority/normalOrdinary priority (the default)Ordinary priority (the default)queue/queuedHas a queued task in the Supabase agent queueHas a queued task in the Supabase agent queuesource/queue-workerFiled or worked by the queue/worker pilotFiled or worked by the queue/worker pilotstatus/blockedQueue or user escalation stateQueue or user escalation statestatus/triagedTriaged and routed (see agent note)Triaged and routed (see agent note)task/fixhas a fix task queuedhas a fix task queued
Activity
developing-today commentedon Nov 3, 2026
agent-note:v1
state: triaged (coverage pass)
Coverage pass 2026-11-03: reviewed in the fleet-wide per-issue pass (drift / overlap / already-handled / stale / blockers / ordering). Verdict: still live; queued in repo-health-code-pilot as triage at priority 40 (priority/normal). If this is already handled at current main, the triage closes it with evidence; if it needs splitting, the triage files the split.
Found via: coverage pass 2026-11-03
105 remaining items
developing-today commentedon Nov 7, 2026
Picked up by
repo-worker-code-f— working this now. (Fleet queue fallback mode: the queue backend is down, so this issue's comments carry the claim. The claim stays live whilerepo-worker-code-fposts progress markers; after 30 minutes of silence any other worker may pick this up.)developing-today commentedon Nov 7, 2026
Progress from
repo-worker-code-f: triaged: CONFIRMED unbuilt on be7346d; dependency #3933 not landed (collector still burn: []); routing fix gated on #3933developing-today commentedon Nov 7, 2026
🤖 Agent note · triage done — CONFIRMED unbuilt; dependency #3933 NOT landed, fix routed gated on it
be7346dadd6dbd305d7f64a19140df16c4f72b5a— no exhaustion-interval derivation exists yet — but the fix is gated: its named dependency, the measured live-rate contract in aggregator: finish quota throughput data + record the design contract (#851) #3933, has not landed.projectPaceinpm-stack/aggregator/src/derive.ts(projectedExhaustionAt/projectedPercentAtResetfrom a linear pct slope) and a point wall estimate insrc/digest.ts:358-366fromburnTokensPerMin. No interval type, no P50/P80, no explicit unknown-state result for pools — the acceptance criteria are unmet and unstarted. (src/forecast.tsis the epic-ETA module from aggregator: derive epic ETA bands and explainable stall risk #3982, a different surface.)pm-stack/aggregator/scripts/collect-fleet-feed.ts:950still emitsburn: []— measured burn history is not populated live — and the collector does not populateburnTokensPerMin(the field exists insrc/model.ts/src/feed.tsand in fixtures only). An interval built today would have no measured burn history to consume, which is exactly the fabricated-forecast failure the acceptance criteria forbid ("explicit unknown state rather than a fabricated date" is the fallback for missing inputs, not a substitute for the contract).task/fix+status/triaged+status/blocked+queue/queued, gated on aggregator: finish quota throughput data + record the design contract (#851) #3933 landing live burn segments + measured rate in the collector. On gate clear, the shape is: a pure interval derivation besideprojectPaceinderive.tsconsuming aggregator: finish quota throughput data + record the design contract (#851) #3933's contract fields, reusing its near-limit/wall rules (no new threshold path), with the acceptance tests (reset boundaries, stale/missing rates, zero rate, limit reached, exhaustion-before-reset) in the aggregator suite via CI.developing-today commentedon Nov 7, 2026
Released by
repo-worker-code-f(outcome: done). Triage CONFIRMED unbuilt (only point pace in derive.ts; no interval/P50/P80); dependency #3933 OPEN and its collector gap persists (burn: [] at collect-fleet-feed.ts:950). Fix routed on #3983 gated on #3933: task/fix + status/triaged + status/blocked + queue/queued.