Blocked-by: nothing — measured incidentally while implementing objectui#5901, filed unassigned per scope discipline. Not fixed there: that card is a data-objectstack error-boundary fix, and this is a dependency-range claim in two packages' manifests.
What
pnpm check:spec-floors (scripts/check-spec-range-floors.mjs, objectui#5793) exits 1 on a clean, fully-built tree with 6 findings across 2 published packages:
❌ 6 finding(s) across 2 published package(s):
@object-ui/core [floor-too-low] packages/core/dist/utils/column-sortability.d.ts references
`FIELD_SORTABLE_UNPROVISIONED_ANCHOR` from @objectstack/spec/api, which @objectstack/spec@17.0.0 does not export
@object-ui/core [floor-too-low] … `FIELD_UNSORTABLE_VIRTUAL_TYPE`
@object-ui/core [floor-too-low] … `FieldSortability`
@object-ui/core [floor-too-low] … `ObjectSortability`
@object-ui/data-objectstack [floor-too-low] packages/data-objectstack/dist/index.js references
`FIELD_SORTABLE_UNPROVISIONED_ANCHOR` from @objectstack/spec/api, which @objectstack/spec@17.0.0 does not export
@object-ui/data-objectstack [floor-too-low] … `FIELD_UNSORTABLE_VIRTUAL_TYPE`
The lowest published spec that carries every symbol each package references:
@object-ui/core → "@objectstack/spec": "^17.2.0"
@object-ui/data-objectstack → "@objectstack/spec": "^17.2.0"
Both manifests currently declare "@objectstack/spec": "^17.0.0".
Why this is worth a card rather than a comment
It is on the blocking publish path. spec-range-floors.yml documents its own placement: it is deliberately not a pull_request job (⛔ Do not add pull_request here), so it reddens nobody's PR — but "the BLOCKING copy is on the publish path: pnpm changeset:publish runs this gate before a single tarball reaches npm, so a floor that lies cancels the release."
So the current state is the quiet kind: every PR is green, the scheduled alarm is the only thing saying anything, and the failure surfaces as a cancelled release at the next publish. Any PR carrying a changeset — including routine ones — queues up a release that this gate will stop.
The gate's own remediation is a one-line manifest change per package (raise the declared floor to ^17.2.0), and it explicitly forbids the tempting alternative: "Do not add a tolerant re-declaration on this side: the range is the claim, and the claim is what is wrong."
Measurement
On origin/main @ 194fae184, in a clean worktree, after the full build the gate itself prescribes (pnpm exec turbo run build --filter='!@object-ui/site' — 43/43 tasks successful):
pnpm check:spec-floors → exit 1, 6 findings
Independent of any local change: the four cited symbols appear 0 times in packages/data-objectstack/src/index.ts both at 194fae184 and in the working tree, and no package.json was modified. Running the gate before a full build instead returns [no-artifact] — a different, prerequisite-not-met failure, which is why this is easy to walk past locally.
Not in scope of objectui#5901
That card carries the marking through two error re-wraps in packages/data-objectstack/src/index.ts; its PR touches no manifest and adds no spec symbol. Its own new import type { ApiError } from '@objectstack/spec/api' is clean — ApiError produced 0 findings in this run, i.e. @objectstack/spec@17.0.0 does export it.
Blocked-by:nothing — measured incidentally while implementing objectui#5901, filed unassigned per scope discipline. Not fixed there: that card is adata-objectstackerror-boundary fix, and this is a dependency-range claim in two packages' manifests.What
pnpm check:spec-floors(scripts/check-spec-range-floors.mjs, objectui#5793) exits 1 on a clean, fully-built tree with 6 findings across 2 published packages:Both manifests currently declare
"@objectstack/spec": "^17.0.0".Why this is worth a card rather than a comment
It is on the blocking publish path.
spec-range-floors.ymldocuments its own placement: it is deliberately not apull_requestjob (⛔ Do not add pull_request here), so it reddens nobody's PR — but "the BLOCKING copy is on the publish path:pnpm changeset:publishruns this gate before a single tarball reaches npm, so a floor that lies cancels the release."So the current state is the quiet kind: every PR is green, the scheduled alarm is the only thing saying anything, and the failure surfaces as a cancelled release at the next publish. Any PR carrying a changeset — including routine ones — queues up a release that this gate will stop.
The gate's own remediation is a one-line manifest change per package (raise the declared floor to
^17.2.0), and it explicitly forbids the tempting alternative: "Do not add a tolerant re-declaration on this side: the range is the claim, and the claim is what is wrong."Measurement
On
origin/main@194fae184, in a clean worktree, after the full build the gate itself prescribes (pnpm exec turbo run build --filter='!@object-ui/site'— 43/43 tasks successful):Independent of any local change: the four cited symbols appear 0 times in
packages/data-objectstack/src/index.tsboth at194fae184and in the working tree, and nopackage.jsonwas modified. Running the gate before a full build instead returns[no-artifact]— a different, prerequisite-not-met failure, which is why this is easy to walk past locally.Not in scope of objectui#5901
That card carries the marking through two error re-wraps in
packages/data-objectstack/src/index.ts; its PR touches no manifest and adds no spec symbol. Its own newimport type { ApiError } from '@objectstack/spec/api'is clean —ApiErrorproduced 0 findings in this run, i.e.@objectstack/spec@17.0.0does export it.