Filed by the domain:ui execution seat (session session_01EuPCi56cnGyykygi3z9w4m) as the ruled follow-up to #4918 / PR #5879. Unassigned, not queued.
What #4918 fixed, and what it deliberately did not
#4918 removed stale prose from two plugin-detail spec-parity blocks that narrated strip mode as a present-tense fact about the installed @objectstack/spec. That claim was false — both schemas are strict on the installed pin — and it was invisible to every gate because no assertion depended on the sentence.
That card was scoped prose-only, with an explicit bar on adding assertions, and the PM ruled it lands that way (see #4918). What it leaves open is this:
The gap
| file |
block |
measures its own schema's strictness? |
packages/plugin-detail/src/__tests__/recordDetailsInputs.spec-parity.test.ts |
section-level (~:140) |
yes — specRefusesUnknownSectionKeys |
| the same file |
top-level (~:277) |
no |
packages/plugin-detail/src/__tests__/recordRelatedListInputs.spec-parity.test.ts |
top-level (~:98) |
no |
packages/plugin-detail/src/__tests__/recordHighlightsInputs.spec-parity.test.ts |
top-level (~:85) |
yes — specRefusesUnknownTopLevelKeys (the model, PR #4671) |
Why the sibling's probe cannot simply be cited
Strictness is per schema. recordDetailsInputs says so itself, at its own section-level probe. So specRefusesUnknownTopLevelKeys in recordHighlightsInputs is evidence about RecordHighlightsProps and nothing else — it is the shape to copy, not a reading of RecordDetailsProps or RecordRelatedListProps. #5879's new prose is written to say exactly that, so it stays true whichever way this card goes.
Measured while implementing #4918 (both on the installed pin, each with a declared-key control that parses green):
RecordRelatedListProps: control.success = true; probe.success = false; codes = ["unrecognized_keys"]; keys = ["__objectui_4918_probe__"]
RecordDetailsProps: control.success = true; probe.success = false; codes = ["unrecognized_keys"]; keys = ["__objectui_4918_probe__"]
So the probes would pass today. The point of adding them is not to discover a defect — it is that the next pin change should turn a test red rather than turn a comment false, which is the failure this whole family keeps re-paying for.
Suggested disposition
Add a per-file specRefusesUnknownTopLevelKeys constant plus a two-arm assertion to each of the two top-level blocks, mirroring recordHighlightsInputs (~8–10 lines per file). This is an assertion change and wants reviewing as one — which is why it is its own card rather than a rider on a prose fix.
⛔ Does not absorb #5881 (the reference file's own module header still narrates strip mode as fact). That one is more stale prose; this one adds assertions. Different work, different review.
Related: #4918 (the prose half, PR #5879), #5881, #4671 (the model), #4910, #4611.
Generated by Claude Code
Generated by Claude Code
Filed by the
domain:uiexecution seat (sessionsession_01EuPCi56cnGyykygi3z9w4m) as the ruled follow-up to #4918 / PR #5879. Unassigned, not queued.What #4918 fixed, and what it deliberately did not
#4918 removed stale prose from two
plugin-detailspec-parity blocks that narrated strip mode as a present-tense fact about the installed@objectstack/spec. That claim was false — both schemas are strict on the installed pin — and it was invisible to every gate because no assertion depended on the sentence.That card was scoped prose-only, with an explicit bar on adding assertions, and the PM ruled it lands that way (see #4918). What it leaves open is this:
The gap
packages/plugin-detail/src/__tests__/recordDetailsInputs.spec-parity.test.tsspecRefusesUnknownSectionKeyspackages/plugin-detail/src/__tests__/recordRelatedListInputs.spec-parity.test.tspackages/plugin-detail/src/__tests__/recordHighlightsInputs.spec-parity.test.tsspecRefusesUnknownTopLevelKeys(the model, PR #4671)Why the sibling's probe cannot simply be cited
Strictness is per schema.
recordDetailsInputssays so itself, at its own section-level probe. SospecRefusesUnknownTopLevelKeysinrecordHighlightsInputsis evidence aboutRecordHighlightsPropsand nothing else — it is the shape to copy, not a reading ofRecordDetailsPropsorRecordRelatedListProps. #5879's new prose is written to say exactly that, so it stays true whichever way this card goes.Measured while implementing #4918 (both on the installed pin, each with a declared-key control that parses green):
So the probes would pass today. The point of adding them is not to discover a defect — it is that the next pin change should turn a test red rather than turn a comment false, which is the failure this whole family keeps re-paying for.
Suggested disposition
Add a per-file
specRefusesUnknownTopLevelKeysconstant plus a two-arm assertion to each of the two top-level blocks, mirroringrecordHighlightsInputs(~8–10 lines per file). This is an assertion change and wants reviewing as one — which is why it is its own card rather than a rider on a prose fix.⛔ Does not absorb #5881 (the reference file's own module header still narrates strip mode as fact). That one is more stale prose; this one adds assertions. Different work, different review.
Related: #4918 (the prose half, PR #5879), #5881, #4671 (the model), #4910, #4611.
Generated by Claude Code
Generated by Claude Code