Filed unassigned by the domain:spec@objectui PM seat, session session_01Jmxdo7bmeqCQHLSfmLVX9w, out of the non-blocking findings of the ceiling-tier contract review of PR objectui#9070 (ruling 5627360729, head 19f8ab48d3803690935db75f717a832ae0c8029a, VERDICT: PASS). ⛔ Not claimed. ⛔ No domain:* or priority:* applied — routing and grading are triage's.
⭐ Why these are a card and not a patch round. PR objectui#9070 is PASS with no blocking findings. Every item below lives in a docblock inside the delivered file, so fixing any of them moves the head and voids that PASS, costing a fresh ceiling-tier review for prose. The reviewer's own words: "nothing in the tree needs to move." ⇒ filing is the correct trade, exactly as it was for objectui#8811's parent. ⛔ These are not defects in the pin; the pin's mechanism, firing legs and census were all re-derived and hold.
All sites in packages/types/src/__tests__/arm-named-export-8784.test.ts unless stated.
The six
① :209 — "nothing public exposes it" is FALSE on zod 4.4.3
The comment explains why defOf reads _zod.def. Measured on the installed zod: typeof z.object({}).def === 'object', and o.def === o._zod.def is true — schema.def is public and is the same object. The helper works either way; the stated reason is wrong.
② :466-470 — the reason for using z.union in the lazy control is wrong on mechanism
The comment says a bare z.lazy member "computes no propValues, which zod 4 refuses as a discriminated option". Measured: z.discriminatedUnion('type', [z.lazy(() => …'lz'), …'other']) constructs, propValues.type is ["lz","other"], and it parses lz/other green and a bogus value red. It also misattributes the control: the fanout test's :106-111 measure the refusal of a plain z.union member, ⛔ not of a lazy.
⭐ The real obstacle is TypeScript, not the runtime: ZodLazy._zod.propValues is typed PropValues | undefined, which is why crud.zod.ts:211-220 carries a cast and says so. ⇒ the control itself is sound; the sentence should read "tsc refuses it without a cast; the runtime does not".
③ :45 — "a delta commit carrying the eight barrel lines was prepared" is unsupported
5597569641 names the remedy ("one additive commit on 90fcf4f2 with the eight barrel lines"). 5598263402 Item 2 then records that the SHA offered for it (b7af6b52) returned 422 in both repos — "Option (a) had nothing to lean on." ⇒ named, not prepared.
⚠️ Provenance worth keeping: this phrase entered from the round-1 FAIL's own item 6 and was inherited verbatim into the patched docblock. The conclusion it supports ("a decision is owed") is unaffected.
④ :93 — dangling cross-reference
Cites a control named the parent union under the arm's name is still unnamed. 0 it() carries that title; the control is at :441, still reports the arm when the PARENT union carries the arm name.
⑤ :52-56 (and :169-171) — "the absence outlives its own explanation" overstates the mechanism
A non-empty changeset is deleted from .changeset/ and copied into the package CHANGELOG — control 40/40 in release commit 59f61cfb8 — so objectui#8499's reason will survive in packages/types/CHANGELOG.md.
⇒ the operative argument is still correct and is what the ledger provides: nothing in the tree re-reads that reason, and nothing reddens when it stops being true. Reword to that. Comment 5626709880 already states it accurately ("disappears into a CHANGELOG entry nobody greps").
⑥ :285-290 namesOn — a hardening gap, ⛔ not a false claim
An ablation accepting identity OR the arm's declaring name passes 17/17 with the barrel intact and 17/17 under Leg B. ⇒ the permanent in-file control at :441 does not fire against a name-based regression; only the one-off on-disk Leg B catches it.
The in-file control guards the value-bound-to-union shape by identity, which is what it claims. What is narrower than advertised is the PR body's "four further controls live in the file permanently rather than as one-off runs" — for identity vs name in general, that is not yet true.
The suggested fix is one it: an in-memory Leg B on the real union — namesOn({ ...BARREL, BreadcrumbSchema: BARREL.NavigationSchema }, breadcrumbArm) expected [] — which the ablation above would redden. ⛔ Re-derive the spelling from the file rather than copying this line.
⛔ Constraints for whoever takes this
- ⛔ Do not weaken the pin. Every item is a comment or an added control. The mechanism was re-derived and is sound.
- ⛔ Do not re-open objectui#8499's deferral or objectui#9067's open design question.
- ⭐ For ① and ②, measure against the installed zod and state the version — these are claims about third-party runtime behaviour, which is the class that goes stale silently.
- ⚠️ Item ⑥ adds a test; ① – ⑤ are comment-only. Consider whether that should be one PR or two.
⚠️ Not measured
- Whether other docblocks in this file carry claims nobody has re-derived — the review checked the ones it had reason to doubt, ⛔ not all of them.
- Whether ①'s
_zod.def preference has an unstated reason that survives the correction (the reviewer judged the helper correct either way, ⛔ not that _zod is the wrong choice).
Refs objectui#9070 (the PR and the ruling) · objectui#8784 (the card) · objectui#8499 (the deferral the rows cite) · objectui#9067 (the open decision).
Generated by Claude Code
Filed unassigned by the
domain:spec@objectuiPM seat, sessionsession_01Jmxdo7bmeqCQHLSfmLVX9w, out of the non-blocking findings of the ceiling-tier contract review of PR objectui#9070 (ruling5627360729, head19f8ab48d3803690935db75f717a832ae0c8029a, VERDICT: PASS). ⛔ Not claimed. ⛔ Nodomain:*orpriority:*applied — routing and grading are triage's.⭐ Why these are a card and not a patch round. PR objectui#9070 is PASS with no blocking findings. Every item below lives in a docblock inside the delivered file, so fixing any of them moves the head and voids that PASS, costing a fresh ceiling-tier review for prose. The reviewer's own words: "nothing in the tree needs to move." ⇒ filing is the correct trade, exactly as it was for objectui#8811's parent. ⛔ These are not defects in the pin; the pin's mechanism, firing legs and census were all re-derived and hold.
All sites in
packages/types/src/__tests__/arm-named-export-8784.test.tsunless stated.The six
①
:209— "nothing public exposes it" is FALSE on zod 4.4.3The comment explains why
defOfreads_zod.def. Measured on the installed zod:typeof z.object({}).def === 'object', ando.def === o._zod.defis true —schema.defis public and is the same object. The helper works either way; the stated reason is wrong.②
:466-470— the reason for usingz.unionin the lazy control is wrong on mechanismThe comment says a bare
z.lazymember "computes nopropValues, which zod 4 refuses as a discriminated option". Measured:z.discriminatedUnion('type', [z.lazy(() => …'lz'), …'other'])constructs,propValues.typeis["lz","other"], and it parseslz/othergreen and a bogus value red. It also misattributes the control: the fanout test's:106-111measure the refusal of a plainz.unionmember, ⛔ not of a lazy.⭐ The real obstacle is TypeScript, not the runtime:
ZodLazy._zod.propValuesis typedPropValues | undefined, which is whycrud.zod.ts:211-220carries a cast and says so. ⇒ the control itself is sound; the sentence should read "tscrefuses it without a cast; the runtime does not".③
:45— "a delta commit carrying the eight barrel lines was prepared" is unsupported5597569641names the remedy ("one additive commit on90fcf4f2with the eight barrel lines").5598263402Item 2 then records that the SHA offered for it (b7af6b52) returned 422 in both repos — "Option (a) had nothing to lean on." ⇒ named, not prepared.④
:93— dangling cross-referenceCites a control named
the parent union under the arm's name is still unnamed. 0it()carries that title; the control is at:441,still reports the arm when the PARENT union carries the arm name.⑤
:52-56(and:169-171) — "the absence outlives its own explanation" overstates the mechanismA non-empty changeset is deleted from
.changeset/and copied into the package CHANGELOG — control 40/40 in release commit59f61cfb8— so objectui#8499's reason will survive inpackages/types/CHANGELOG.md.⇒ the operative argument is still correct and is what the ledger provides: nothing in the tree re-reads that reason, and nothing reddens when it stops being true. Reword to that. Comment
5626709880already states it accurately ("disappears into a CHANGELOG entry nobody greps").⑥
:285-290namesOn— a hardening gap, ⛔ not a false claimAn ablation accepting identity OR the arm's declaring name passes 17/17 with the barrel intact and 17/17 under Leg B. ⇒ the permanent in-file control at
:441does not fire against a name-based regression; only the one-off on-disk Leg B catches it.The in-file control guards the value-bound-to-union shape by identity, which is what it claims. What is narrower than advertised is the PR body's "four further controls live in the file permanently rather than as one-off runs" — for identity vs name in general, that is not yet true.
The suggested fix is one
it: an in-memory Leg B on the real union —namesOn({ ...BARREL, BreadcrumbSchema: BARREL.NavigationSchema }, breadcrumbArm)expected[]— which the ablation above would redden. ⛔ Re-derive the spelling from the file rather than copying this line.⛔ Constraints for whoever takes this
_zod.defpreference has an unstated reason that survives the correction (the reviewer judged the helper correct either way, ⛔ not that_zodis the wrong choice).Refs objectui#9070 (the PR and the ruling) · objectui#8784 (the card) · objectui#8499 (the deferral the rows cite) · objectui#9067 (the open decision).
Generated by Claude Code