Filed unassigned by the dev seat implementing #5494 (branch claude/issue-5494-reference-rail-entry-derive, session session_01E7snar5mwF7qoXJazqKhys). Out of that card's scope — the range convention is uniform across the workspace and moving one package's floor unilaterally would fork it, so it is filed as its own call.
What was measured
@objectstack/spec@17.1.0 added exports absent from 17.0.0 (ReferenceRailEntry / ReferenceRailEntrySchema were measured directly for #5494: grep -rl ReferenceRailEntry node_modules/@objectstack/spec/dist/ is empty on 17.0.0, hits dist/ui/index.js on 17.1.0; the 17.1.0 pin bump #5328 also added five ComponentPropsMap rows). After #5494's PR, @object-ui/plugin-detail's published dist/renderers/record-reference-rail.d.ts contains export type { ReferenceRailEntry } from '@objectstack/spec/ui' — while its package.json still declares "@objectstack/spec": "^17.0.0" (every workspace package declares the same range; measured via grep '"@objectstack/spec"' packages/*/package.json).
Why it can bite
The declared range is a public claim: any consumer resolution that lands spec 17.0.0 (a sibling dependency pinning 17.0.0, an overrides entry, an offline mirror lagging a minor) satisfies ^17.0.0 and produces a dangling type re-export in plugin-detail's d.ts. Normal installs resolve latest 17.x and are fine — this is a floor-honesty defect, not a live breakage.
The call to make
Either floors track the minimum spec that actually carries the symbols a package's dist references (e.g. ^17.1.0 for plugin-detail after #5494), or the uniform-^17.0.0-plus-lockfile convention is declared deliberate somewhere a gate can point at. If floors should track: this is gate-shaped (compare each package's dist imports of @objectstack/spec/* against the declared minimum's export set), not a one-off edit.
Refs: #5494 (the instance that surfaced it) · #5328 (the 17.1.0 pin bump).
Generated by Claude Code
Filed unassigned by the dev seat implementing #5494 (branch
claude/issue-5494-reference-rail-entry-derive, sessionsession_01E7snar5mwF7qoXJazqKhys). Out of that card's scope — the range convention is uniform across the workspace and moving one package's floor unilaterally would fork it, so it is filed as its own call.What was measured
@objectstack/spec@17.1.0added exports absent from 17.0.0 (ReferenceRailEntry/ReferenceRailEntrySchemawere measured directly for #5494:grep -rl ReferenceRailEntry node_modules/@objectstack/spec/dist/is empty on 17.0.0, hitsdist/ui/index.json 17.1.0; the 17.1.0 pin bump #5328 also added fiveComponentPropsMaprows). After #5494's PR,@object-ui/plugin-detail's publisheddist/renderers/record-reference-rail.d.tscontainsexport type { ReferenceRailEntry } from '@objectstack/spec/ui'— while itspackage.jsonstill declares"@objectstack/spec": "^17.0.0"(every workspace package declares the same range; measured viagrep '"@objectstack/spec"' packages/*/package.json).Why it can bite
The declared range is a public claim: any consumer resolution that lands spec 17.0.0 (a sibling dependency pinning
17.0.0, anoverridesentry, an offline mirror lagging a minor) satisfies^17.0.0and produces a dangling type re-export in plugin-detail's d.ts. Normal installs resolve latest 17.x and are fine — this is a floor-honesty defect, not a live breakage.The call to make
Either floors track the minimum spec that actually carries the symbols a package's dist references (e.g.
^17.1.0for plugin-detail after #5494), or the uniform-^17.0.0-plus-lockfile convention is declared deliberate somewhere a gate can point at. If floors should track: this is gate-shaped (compare each package's dist imports of@objectstack/spec/*against the declared minimum's export set), not a one-off edit.Refs: #5494 (the instance that surfaced it) · #5328 (the 17.1.0 pin bump).
Generated by Claude Code