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):

let rowCount: number;
try {
  rowCount = await driver.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

Activity

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

Metadata

Metadata

Assignees

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions