Skip to content

feat(objectql): ADR-0038 L3 — post-publish runtime probes on publishPackageDrafts#1715

Merged
os-zhuang merged 1 commit into
mainfrom
feat/bvl-phase2-runtime-probes
Jun 11, 2026
Merged

feat(objectql): ADR-0038 L3 — post-publish runtime probes on publishPackageDrafts#1715
os-zhuang merged 1 commit into
mainfrom
feat/bvl-phase2-runtime-probes

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Phase 2 (first half) of the ADR-0038 Build Verification Loop: after a package publish, the pipeline exercises what it published — one real read per artifact — so "Published!" can never again mean "and silently broken".

What

New packages/objectql/src/build-probes.ts (runBuildProbes), wired into publishPackageDrafts which now returns a probes: { issues, checked } report:

Probe Code Catches (live incident class)
per published seed: target object has rows seed_not_applied (error) seeds staged but rows never materialized (#3)
per published view: limit-1 read doesn't throw view_read_failed (error) views that error for every user (#6 runtime half)
per dashboard widget: its real dataset selection executes via the kernel's analytics.queryDataset (same path the renderer hits) widget_query_failed (error) broken dataset compilation
widget query returns empty on a populated object empty_query (error) the 4-layer staging "Total Spend: 0" chain (#4)
widgets exist but no analytics service mounted probes_unavailable (warning) silence reading as "probed and passed"

Findings are BuildIssue-shaped with layer:'runtime' — the same ADR-0038 contract the cloud L1 graph lint (cloud#200) emits, so agents/chat/eval harnesses consume one stream across verification planes.

Design constraints honored:

  • probes are reads only (limit-1 / single aggregate), run after seedApplied;
  • a probe crash degrades to a finding or a skip — never fails the publish it verifies;
  • analytics resolves from the kernel services registry; absent → one aggregate warning, not per-widget noise.

Tests

build-probes.test.ts: every probe both ways (fail + pass), the never-throws contract, and integration — publishPackageDrafts reports seed_not_applied when the seed loader fails and omits probes for empty packages. objectql suite 556/556 green; DTS build clean.

Next (separate PRs)

  • objectui: build-health card in chat consuming seedApplied + probes (Phase 2 second half)
  • cloud: thread probes.issues into the agent's L4 self-correction loop after auto-publish

🤖 Generated with Claude Code

…ackageDrafts

One real read per published artifact, run by the build pipeline (not the
user), generalizing the seedApplied pattern:
- seed_not_applied: a published seed's target object must have rows;
- view_read_failed: a published view's limit-1 read must not throw;
- empty_query / widget_query_failed: each dashboard widget's real dataset
  selection (the same queryDataset path the renderer hits) must execute
  and must not return empty on a populated object;
- probes_unavailable (warning): widgets existed but no analytics service —
  silence must not read as 'probed and passed'.

Findings are BuildIssue-shaped (layer 'runtime') — the same ADR-0038
verification contract the cloud L1 graph lint emits — and ride the
publishPackageDrafts response as `probes`. Probes are reads only and never
fail the publish they verify.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Jun 11, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
spec Ready Ready Preview, Comment Jun 11, 2026 7:45am

Request Review

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant