You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[finding] @objectstack/spec pins 5309 exports by name-and-kind but only 27 by signature — 99.5% of the ratified surface passes green through a shape change #16045
Filed by the domain:cli execution PM seat (#6024) from a measurement handed back by the dev agent on #15630, using Claude Code. Not dispatched: the fix is a design decision about a much larger surface, not a mechanical repair.
The finding
@objectstack/spec carries the same defect class that #15630 repaired in @objectstack/cli's ./hook-body pin, at a very different scale:
api-surface/*.json pins 5309 exports across 17 entry points by name and kind.
api-surface-signatures.json pins 27 of them by signature hash — 0.5%.
A signature change, a renamed interface field, or a dropped union member moves neither the name nor the kind. So for the other 5282 exports, the surface behaves exactly like the one #15630 repaired: the pin is green through a breaking shape change to a ratified public type.
Why this is worth a decision rather than a patch
#15630 established the shape of a real fix and what it costs. Its repair compiles a real consumer fixture with a real tsc, from the consumer directory, against the packed.d.ts reached through the exports map — chosen over a signature snapshot deliberately, on the grounds that a compile asks whether a dependent can still build while a snapshot only asks whether the shipped bytes moved, and that a snapshot's known failure mode is that a red one gets accepted rather than investigated.
That reasoning does not obviously scale from 4 exports to 5309. Which of these is right for @objectstack/spec is a design call:
widen api-surface-signatures.json toward full coverage (cheap to run, weak instrument, accept-the-snapshot failure mode at scale);
a consumer-compile conformance fixture per entry point (strong instrument, 17 fixtures, real build cost);
something scoped — e.g. signature pins only for types ADR-0087 treats as ratified.
⛔ This seat is not grading which. Filing so the choice is made deliberately rather than by the gap persisting.
Two neighbouring surfaces, measured in the same pass
@objectstack/cli's own ./console subpath has no surface pin at all — neither names nor shapes — and it points straight at an internal barrel with 13 exports, so every export that module gains is published the moment it lands. The existing pin asserts only that ./console is a declared subpath. Filed separately as its own card.
Taken together: for the surfaces #15630's card named, its repair is one fix, not a family — but @objectstack/spec is a genuinely separate and much larger instance.
Provenance
Measured on the #15630 worktree at the head that became PR #16043; handed back rather than acted on, per that dispatch's instruction to return out-of-scope findings with their measurement.
⚠️ Not verified by this seat independently — this is the dev agent's measurement, relayed. The counts (5309 / 17 / 27) should be re-derived before anyone acts on them.
Filed by the
domain:cliexecution PM seat (#6024) from a measurement handed back by the dev agent on #15630, using Claude Code. Not dispatched: the fix is a design decision about a much larger surface, not a mechanical repair.The finding
@objectstack/speccarries the same defect class that #15630 repaired in@objectstack/cli's./hook-bodypin, at a very different scale:api-surface/*.jsonpins 5309 exports across 17 entry points by name and kind.api-surface-signatures.jsonpins 27 of them by signature hash — 0.5%.A signature change, a renamed interface field, or a dropped union member moves neither the name nor the kind. So for the other 5282 exports, the surface behaves exactly like the one #15630 repaired: the pin is green through a breaking shape change to a ratified public type.
Why this is worth a decision rather than a patch
#15630 established the shape of a real fix and what it costs. Its repair compiles a real consumer fixture with a real
tsc, from the consumer directory, against the packed.d.tsreached through theexportsmap — chosen over a signature snapshot deliberately, on the grounds that a compile asks whether a dependent can still build while a snapshot only asks whether the shipped bytes moved, and that a snapshot's known failure mode is that a red one gets accepted rather than investigated.That reasoning does not obviously scale from 4 exports to 5309. Which of these is right for
@objectstack/specis a design call:api-surface-signatures.jsontoward full coverage (cheap to run, weak instrument, accept-the-snapshot failure mode at scale);⛔ This seat is not grading which. Filing so the choice is made deliberately rather than by the gap persisting.
Two neighbouring surfaces, measured in the same pass
@objectstack/consoledoes NOT share the gap — this answers a question [finding]published-subpath-hook-body.pin.test.tspins exported NAMES, not SHAPES — a signature change to a ratified public type passes green #15630's card itself left as NOT MEASURED. It exports./package.jsonand nothing else, declares no types, and has no type surface behind any name. The spelling is identical; there is nothing there to widen.@objectstack/cli's own./consolesubpath has no surface pin at all — neither names nor shapes — and it points straight at an internal barrel with 13 exports, so every export that module gains is published the moment it lands. The existing pin asserts only that./consoleis a declared subpath. Filed separately as its own card.Taken together: for the surfaces #15630's card named, its repair is one fix, not a family — but
@objectstack/specis a genuinely separate and much larger instance.Provenance
Measured on the
#15630worktree at the head that became PR #16043; handed back rather than acted on, per that dispatch's instruction to return out-of-scope findings with their measurement.