refactor(usage): address round-2 review on PR #871

- remove accidentally-committed .claude/scheduled_tasks.lock (Claude Code
  runtime artifact swept in by `git add -A`) and gitignore it; the rest
  of .claude/ stays tracked.
- store: cache UsageEventStore.shared() as a process-wide instance so the
  hot search path doesn't allocate a fresh wrapper per metered query (the
  wrapper is stateless beyond its storage handle).
- hooks: pass enabled=True directly (the outer guard already confirmed
  the flag) instead of re-reading settings.usage_metering_enabled.
- migration: document the no-TTL retention design (control-plane rollup
  owns the lifecycle; the data plane only appends).
- tests: assert the best-effort error path logs at WARNING (observability
  contract).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Chris Coutinho
2026-06-07 15:28:24 +02:00
co-authored by Claude Opus 4.8
parent 702f66e6b1
commit 2bbf4ed967
7 changed files with 38 additions and 14 deletions
@@ -34,6 +34,9 @@ depends_on = None
def upgrade() -> None:
is_pg = op.get_bind().dialect.name == "postgresql"
# Retention: this table has no TTL by design — the control-plane rollup
# owns the lifecycle (it pulls rows read-only into usage_daily, then
# prunes once a day is reconciled). The data plane only appends.
op.create_table(
"usage_events",
# Pod-generated idempotency key. UUID on Postgres; TEXT on SQLite,