Skip to content

fix(usage-hub): disabled providers must not appear in quota — audit + regression test #1114

Closed

Description

@dezren39

Part of epic #1047. Design: hub-v2-v3-design-2026-10-26.md §5.

Drew's 2026-10-25 finding: the quota registry lists providers from stored credentials and never consults disabled_providers; OpenRouter + GitHub Copilot should be disabled and ABSENT from quota. OpenChamber's CLI listing was fixed (PR #474), but the hub feed / quota-extract / registry side was never verified end-to-end.

Work: audit the live /api/quota.json pools + quota-guidance output against the deployed opencode config's disabled_providers list; fix any leak at the extractor/registry source (not by filtering the render); add a regression test that fails if a disabled provider appears. Keeper rule: quota guidance must never fail sessions over to cloudflare-gateway, cloudflare-workers-ai, code-design, design-code, or open-design.
Acceptance: live feed verified clean against the current disabled set; test in the aggregator suite; registry note updated with the verification date.

Activity

  1. developing-today commented on Oct 27, 2026

    @developing-today
    Contributor
  2. dezren39 commented on Oct 29, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · picked up

  3. dezren39 commented on Oct 29, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · done (triage verdict: leak absent at HEAD — enforcement/test gap CONFIRMED, routed)

    • Agent: queue worker (repo-worker-code), Lane D shift
    • Session / ID: queue task 2395 (triage)
    • Found via: queue claim
    • Task: Triage of fix(usage-hub): disabled providers must not appear in quota — audit + regression test #1114 against current main — done.
    • Verdict: Mixed. The specific leak Drew found on 2026-10-25 does not reproduce at origin/main 39e8410b: /api/quota.json pools come from a fixed allowlist (pm-stack/aggregator/src/quota-extract.ts POOL_SPECS + SHELL_POOLS) that contains neither OpenRouter nor GitHub Copilot, and src/quota-guidance.ts derives failover choices only from those pools — the keeper set (cloudflare-gateway, cloudflare-workers-ai, code-design, design-code, open-design) are SaaS lines, never quota pools, so guidance cannot fail sessions over to them. But the cleanliness is by allowlist accident, not enforcement: nothing in the quota path consults the deployed config's disabled_providers (the only parsing is the AA model catalog, src/aa.ts:789-797, which does not feed quota), and there is no regression test — disabled appears in none of the quota test files. The live-feed audit and registry verification note from the acceptance are also not yet recorded.
    • Routing: Enqueued scoped follow-up queue task 3005 (kind small_fix): a disabled_providers filter at pool assembly (reusing the aa.ts parsing approach, filter at the source not the render), regression tests for disabled providers + the keeper set, and the live /api/quota.json audit + registry note.
    • Expectation: fix(usage-hub): disabled providers must not appear in quota — audit + regression test #1114 stays open until task 3005 lands the guard, the tests, and the dated live audit.
    • Links: follow-up queue task 3005 · evidence at HEAD 39e8410b1a23b99c9cb1f93c2ce869830a916c06
  4. added
    queue/queuedHas a queued task in the Supabase agent queue
    queue/claimedQueue worker lifecycle state
    and removed
    queue/claimedQueue worker lifecycle state
    work/assignedQueue worker lifecycle state
    on Oct 29, 2026
  5. 80 remaining items

  6. removed
    status/parkedDeliberately paused with a recorded resume condition
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    on Oct 29, 2026
  7. dezren39 commented on Oct 29, 2026

    @dezren39
    MemberAuthor

    Lane D (queue task 3005) resumed from checkpoint merge_ready. Fresh revalidation 2026-10-29T23:32Z: PR #2377 OPEN/CLEAN/MERGEABLE at 8714f9b, no failing or pending checks, base main. Blocker #2403 still open, main still 5a34fa7 — two enqueue attempts already this shift (#2430, #2214) were ejected within minutes. Attempting one fresh enqueue for #2377; if ejected, the task re-parks. No --admin bypass (per merge rules noted by prior lane).

  8. dezren39 commented on Oct 29, 2026

    @dezren39
    MemberAuthor

    Lane D (queue task 3005): merge-queue enqueue attempted — PR #2377 entered 23:32:09Z, reached position 1 AWAITING_CHECKS, then was ejected by 23:38:12Z (queue empty, PR OPEN, main 5a34fa7). Fresh confirmation of blocker #2403 (evidence posted there). Task re-parked. Resume: #2403 fixed / main advances → merge #2377 via MQ (no --admin) → complete fixed_merged + close this issue.

  9. added
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    status/parkedDeliberately paused with a recorded resume condition
    and removed
    queue/claimedQueue worker lifecycle state
    on Oct 29, 2026
  10. dezren39 commented on Oct 30, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · picked up → parked

  11. removed
    status/parkedDeliberately paused with a recorded resume condition
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    work/assignedQueue worker lifecycle state
    on Oct 30, 2026
  12. dezren39 commented on Oct 30, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · done

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions