Repository navigation
Description
Epic for the remaining Usage & billing hub work (goal_4bd599c9ab26). Filed 2026-10-26 at Drew's direction ("make issues for all these and update all relevant locations; ensure all is documented") after the SaaS/cloud services status review in the SaaS side chat.
State this epic starts from (verified 2026-10-26)
- Hub v1+v1.1 SHIPPED: PR Usage & Billing Hub v1 + v1.1 (aggregator /quota) #967, live at the laptop aggregator
/quota("Usage & billing"),/api/quota.jsoncarries pools/saas/payg/charges/attention/domains/subscriptions. - Snapshot-store writers LIVE (PRs Usage snapshot writers (hub §4): collector derivation, outbox, store ingest #973/Fix: pool snapshot records take their date from the Last checked bullet #975/Docs: README snapshot-writers note (hub §4 follow-up to #973/#975) #977): stewardship/keeper append to the outbox, fleet-feed collector forwards, store dedupes. Not part of this epic.
- Q7 Meta PAYG scan folded into stewardship-cycle permanently. Done, not part of this epic.
- The hub is NOT fully live: it renders dated manual reads from the stewardship quota-view, not live vendor meters. Most pools have no working machine meter (Codex usage endpoint 403, ClinePass/Go/Meta console-only, Open Design uninstrumented). That gap is what the child issues close.
Cadence ruling (Drew, 2026-10-26)
The design's Q8 default — a WEEKLY console-reads block — is superseded: weekly is too slow. New cadence (implemented by the console-reads child issue):
- stewardship (hourly) checks staleness every cycle and flags any card past its cadence;
- full console-read refresh DAILY;
- immediate re-read on a wall hit, at >=85% of a window, or whenever the measurement gate needs a <=60-minute-old read for placement.
Design / sources
- Design: hatch-personal
workspace/goals/usage-billing-hub-token-quotas-per-service-saas-limits/files/hub-design-2026-10-25.md(§2 sources, §5 phasing: v2 live collectors, v3 reconciliation) - Research record:
~/workspace/ai-subscriptions/master-tracker.md+evidence-and-interpretation-baseline-2026-10-20.md - Presentation source: stewardship
hidden_files/visibility/quota-view.mdParts (a)/(b)
Tracked elsewhere — link, do not duplicate
- Plaid Citi linking: account-connection campaign Bump build/buck/preludes/buck2-prelude from
3a02ea3tod956689#15 (goal_6f48d745f802) + plaid-nudge crons; Drew's own browser only. - OCI signup: OCI servers thread + CPCOE-29381 follow-up (due 2026-10-27); PAYG decided 2026-10-22.
- GitHub Actions/Codespaces efficiency: goals goal_49a7f35a16de / goal_86b7469e123e / goal_fbdde57a43cd (the GitHub billing collector child feeds these).
- Laptop repeat of the account campaign: account campaign goal end-state.
Acceptance for the epic
Every child issue closed or explicitly re-scoped by Drew; /quota shows live or daily-refreshed values (with measured-at + source) for every held service; the dashboard links the research record (baseline, tracker, free-services list) instead of leaving it only in workspace files.
Children (native sub-issues — curated 2026-11-01 via #1217, task 4928)
This epic's child set is now native sub-issues (previously body-text links only). Attached, all OPEN at curation:
- feat(usage-hub): v2 Turso usage collector — verify org usage route, daily read #1049 — v2 Turso usage collector (daily console read)
- chore(usage-hub): close master-tracker open checks (ChatGPT tier, Go exact %, Claude reset, Wispr, Bitwarden, Muse plan) #1055 — close master-tracker open checks
- feat(usage-hub): v3 invoice reconciliation — Cloudflare Nov 2 first, monthly billed-vs-estimated #1056 — v3 invoice reconciliation (billed-vs-estimated)
- feat(usage-hub): v3 charges auto-matching — Plaid + Gmail alerts to services #1057 — v3 charges auto-matching (Plaid + Gmail alerts)
- feat(usage-hub): v2 collectors — Modal credits (monthly read) + Bitwarden SM counts #1111 — v2 collectors: Modal credits + Bitwarden SM counts
- design(usage-hub): managed quota-credential pattern for console-only pools #1115 — design: managed quota-credential pattern for console-only pools
- feat(usage-hub): self-monitoring — feed staleness + fixture-fallback alarm #1116 — self-monitoring: feed staleness + fixture-fallback alarm
- chore(usage-hub): OpenCode Go lapse handling — Personal Nov 2, Lab Nov 6 #1118 — OpenCode Go lapse handling
- epic(quota-plane): Stage 2 — 15-minute quota gathering in the PM stack, token adapters, automated pool decisions #1149 — sub-epic: quota-plane Stage 2 (see ruling below)
- feat(usage-hub): #1116 remainder items 4+5 — stewardship stale-feed finding + collector-stop acceptance verification #2990 — feat(usage-hub): self-monitoring — feed staleness + fixture-fallback alarm #1116 remainder items 4+5
Already closed at curation (program history, not attached — the fix scope covers open issues): #1114, #1117, #1119.
#1149 ruling: #1149 is attached as a sub-epic of this epic, per its own body ("Stage-2 epic under #1047", Drew's direction 2026-10-26). Scope boundary: this epic (#1047) owns the usage-hub program as a whole — v2 live collectors, daily console reads, v3 reconciliation, hub presentation; #1149 owns the quota-plane Stage-2 slice inside it (15-minute quota gathering, token adapters, automated pool decisions). Quota-plane implementation issues belong under #1149, not directly under this epic.
Excluded, deliberately: #1054 (blocked(usage-hub): Open Design quota instrumentation) carries user/owned — a hard-stop label — so fleet curation does not touch it; it stays unattached until Drew rules otherwise. #1217 is the curation fix itself and closes when this curation completes.
Acceptance for the epic (measurable restatement)
This epic closes when every native sub-issue above is closed (or explicitly re-scoped by Drew), AND: the v2 collectors are live (#1049, #1111), the daily console reads run at the cadence ruled above (#1055), and v3 reconciliation is operating (#1056, #1057) — i.e. /quota shows live or daily-refreshed values, with measured-at + source, for every held service.
Activity
developing-today commentedon Oct 27, 2026
CODE-192
dezren39 commentedon Oct 27, 2026
Child issues filed 2026-10-26 (Drew's directive in the SaaS side chat):
Docs updated in the same pass: hub design doc header (status + cadence + collector-host correction), goal GOAL.md (status/next/roadmap + this index), quota-view refresh protocol, master-tracker header.
dezren39 commentedon Oct 27, 2026
Second filing pass 2026-10-26 22:24 CDT (Drew: "continue building this out, designing it, and finding individual tasks that have not been documented yet"). Design: hub-v2-v3-design-2026-10-26.md in the goal files. New children:
Also this pass: stewardship-cycle cron body updated with the DAILY CONSOLE READS block (see feat(usage-hub): console-reads cadence — daily + event-driven replaces weekly (Q8 superseded) #1053 comment) — feat(usage-hub): console-reads cadence — daily + event-driven replaces weekly (Q8 superseded) #1053's remaining acceptance is its first daily refresh.
dezren39 commentedon Oct 27, 2026
Stage-2 child epic filed as #1149 (quota plane). Its children 2026-10-26 (priority order; horizons on org Project #4):
Design: files/quota-plane-design-2026-10-26.md in the usage-billing-hub goal workspace.
dezren39 commentedon Oct 27, 2026
PRIORITIZATION PASS (2026-10-27, per Drew: "make sure our tasks are updated to use the more efficient pattern and that all issues are prioritized"). Every issue under this epic and the quota-plane epic #1149 now carries a Horizon on Project #4. The working queue, in order:
Today
Week (dated pressure first)
Month
10 remaining items
dezren39 commentedon Nov 1, 2026
🤖 Agent note · done
Labels added (kept existing
meta/follow-up+epic):kind/feature,status/needs-triage,source/human,priority/normal,now,effort/l,meta/enriched,app/pm-stack,mode/online— the #1184 set.Children attached as native sub-issues (10, verified via the sub_issues API): #1049, #1055, #1056, #1057, #1111, #1115, #1116, #1118, #1149, #2990.
#1149 ruling — ATTACHED as sub-epic. Its own body declares it the "Stage-2 epic under #1047" (Drew's direction 2026-10-26), so the boundary is: #1047 owns the usage-hub program (v2 live collectors, daily console reads, v3 reconciliation, hub presentation); #1149 owns the quota-plane Stage-2 slice within it (15-minute gathering, token adapters, automated pool decisions). Quota-plane implementation issues attach under #1149, not directly here. Neither epic is closed or merged into the other.
Exclusions (deliberate, with reasons):
user/owned, a hard-stop label; fleet curation does not touch Drew-owned items. It remains program-related but unattached until Drew rules otherwise.No child issue's content or labels were changed — the only change to each child is the sub-issue link itself.
dezren39 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
dezren39 commentedon Nov 3, 2026
agent-note:v1
state: triaged
Verdict: still live — keep open. This is a program tracker with no code work of its own; it closes when its children close. Triaged at current main 2026-11-03 (queue task 7621).
Child state (fresh,
sub_issuesAPI + per-issueghreads): 10 native sub-issues attached, 8 open / 2 closed since the 2026-11-01 curation.mainvia PR #4914Coverage check: every open attached child has a live queue task (claimed, parked or blocked today) — no orphan child needs a new task from this triage. #1054 stays unattached by design (
user/owned, hard stop); #1059 is an independent research triage.Ordering / date pressure (the one thing worth acting on):
Body accuracy: the curated 2026-11-01 body section says the attached set was "all OPEN at curation" — that remains a true historical statement, so no body edit made. The epic's measurable acceptance still matches the live child set.
No blocker for this epic itself. Open children carry the blockers; nothing about this issue needs escalation.
Found via: queue claim (coverage triage)