Skip to content

lifecycle checkGovernance: a failed row-count probe silently drops the object from quota/growth alerting and from nextCounts, losing the next sweep's growth baseline too (split from #8896) #8906

Description

@os-project-manager

Split out of #8896 by the triage seat (2026-08-15 round): that card's other four seams land in packages/metadata-protocol (domain:metadata), while this one lands in packages/objectql — one domain per card, so the engine-core seam gets its own.

The seam (verified on origin/main @ 85f5e78, originally measured by the #8845 census @ 8664a2c)

packages/objectql/src/lifecycle/lifecycle-service.ts, in checkGovernance() (~line 803):

letrowCount: number;try{rowCount=awaitdriver.count(obj.name);}catch{continue;}nextCounts.set(obj.name,rowCount);

When the count probe fails for any reason:

  • the object is silently skipped for quota (quota-exceeded alert can never fire for it) and growth alerting this sweep;
  • it is also dropped from nextCounts, so the growth baseline for the next sweep is lost — the degradation outlives the failing sweep;
  • nothing is logged and the sweep report carries no "incomplete" fact, so a driver outage is indistinguishable from a quiet, healthy object.

check:durability-log-level's read-seam rule cannot see this shape (valueless-exit catch) — that blind spot is measured and deliberately not gated per the #8845 ruling, which is why the seam needs fixing on its own terms.

Suggested shape

Same vocabulary the repo already uses (and the maintainer's #8833 ruling pattern for this family): discriminate the error — treat only the benign case (e.g. isMissingTableError / unprovisioned) as "no rows", and for real failures either log at the durability level or carry an explicit incomplete/skipped fact in the sweep report so the baseline loss is visible. Severity is the lowest of the #8896 set (reduced alerting, no wrong answer handed to a caller).

Refs

Metadata

Metadata

Assignees

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions