Skip to content

fix: enforce uniqueness and hour alignment for agent runtime usage events - #27983

Draft
jaaydenh wants to merge 5 commits into
mainfrom
runtime-invariants
Draft

fix: enforce uniqueness and hour alignment for agent runtime usage events#27983
jaaydenh wants to merge 5 commits into
mainfrom
runtime-invariants

Conversation

@jaaydenh

@jaaydenh jaaydenh commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

The usage generator writes hb_agent_runtime_v1 rows with created_at at the UTC hourly bucket start and exactly one row per bucket, but nothing in the schema enforced either invariant. A duplicate bucket row under a different id would be double-counted by any consumer summing runtime_ms, and a misaligned created_at would skew which usage period a bucket is attributed to.

This replaces the non-unique partial index idx_usage_events_agent_runtime (from migration 000561) with a unique index of the same shape and adds an hour-alignment CHECK constraint. Both statements validate existing rows: every supported writer has always produced conforming data, so a pre-existing violator is anomalous and failing the migration loudly beats silently rewriting usage rows. generateBucket treats a unique violation on the bucket index as another replica having won the race, mirroring the existing ON CONFLICT (id) no-op for committed rows.

The coderd/notifications sync commit and its revert cancel out (the drift they addressed was fixed on main by #27979); the PR's net diff is only the usage-event changes.

Part 1 of a 3-PR stack splitting up #27796 (see there for review history). Stack: this PR → #27984#27985.

…ldens with generators

make fmt/go (gci) regroups the imports in smtp_internal_test.go, and
make gen/golden-files re-renders the AI budget notification goldens with
HTML-escaped apostrophes. Both were committed out of sync with the
repo's pinned tools, so every local pre-commit run failed its unstaged
check. No behavior change.
…ents

The usage generator writes hb_agent_runtime_v1 rows with created_at at
the UTC hourly bucket start and exactly one row per bucket, but nothing
in the schema enforced either invariant. A duplicate bucket row under a
different id would be double-counted by any consumer summing runtime_ms,
and a misaligned created_at would skew which usage period a bucket is
attributed to.

Replace the non-unique partial index idx_usage_events_agent_runtime with
a unique index of the same shape and add an hour-alignment CHECK
constraint. generateBucket treats a unique violation on the bucket index
as another replica having won the race, mirroring the existing
ON CONFLICT (id) no-op for committed rows.
…mplate goldens with generators"

This reverts commit ed531d9d365720b4e394f4b422ea9776886c56a3.

The gen/fmt drift it patched over came from main commit 07f79af
(fix: markdown rendering improvements) having landed out of sync with
its generators; main has since reverted that commit entirely in
8c2f7ad (#27979), so the sync is obsolete and conflicts with the
regenerated goldens on latest main.
@jaaydenh
jaaydenh requested a review from ibetitsmike August 10, 2026 12:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant