Two sites of one class, both pre-existing and both outside what objectui#9034 asked for. The reviewer's instruction was to file rather than ride.
① stripImportedDefaults carries description and nothing else
On the reachable published surface, 54 nodes carry registry meta other than description — title ×27, default ×18, externalVocabulary ×6, format ×3, xRef ×2, xExpression ×2. 11 of those are ZodDefault nodes and all 11 lose that meta, before and after objectui#9086:
title ×9 — Mongo/Mysql/Postgres host and port, Postgres schema, Sqlite/SqliteWasm filename
externalVocabulary ×2 — AuthConfigSchema.session.expiresIn, DisasterRecoveryPlanSchema.failover.dns.ttl
Visible through the emitter: z.toJSONSchema(PostgresConfigSchema).properties.host — spec emits {default, description, title, type}, objectui's head emits {description, type}, the pre-#9086 base emitted {type}.
⚠️ The docblock defends against the wrong key. packages/types/src/zod/imported-defaults.ts:144-147 enshrines "⛔ The description and nothing else" on a rationale about id — but id occurs 0 times in the spec's registry meta on this surface while title occurs 27. ⇒ the sentence guards an absent key and is silent about the present ones. It should either name the real trade-off or narrow to "never id".
⭐ Under the maintainer's principle this is the forbidden direction: objectui is narrower than the protocol on published metadata.
② strict-authoring-face.ts:180-183 — the same helper shape, the same loss
It carries the identical new Ctor({...def, ...patch}) rebuild. Measured: deriveStrictAuthoringSchema(z.object({k: z.string().describe('LEAF')}).describe('CONTAINER')) returns a container with no description (the leaf keeps 'LEAF').
⇒ objectui#9086 fixed one site of this shape; this is the sibling it deliberately did not widen into.
⛔ Constraints
- ⛔ Do not re-open objectui#9086 or revert any of it — that PR is correct and its pin fires (full revert 5 red; each half 3 / 2 red).
- ⛔ Whatever carries meta must not mutate the spec's own objects: objectui#9086's
.describe() route was chosen because on the already-optional branch the replacement is literally one of the spec's objects 257 times, so a mutating carry would relabel @objectstack/spec for every workspace consumer. Any .meta() carry has the same hazard.
- ⚠️
registry.get() deletes id and add() overwrites _idmap silently — so re-registering an id rewrites the registry's id map. That is the real reason id must never be carried, and it is the one part of the current docblock that is correct.
- ⛔ Do not let the identity property regress: a subtree with no
ZodDefault must still come back reference-equal (941 / 941 plain clean exports today).
⚠️ Not measured
- Whether any consumer reads
title off these mirrors today (the loss is on the published surface; pull was ⛔ not measured).
- Nodes reachable only through
z.lazy getters — outside the reviewer's 33,556-node snapshot.
- Spec versions other than 17.4.0.
Refs objectui#9086 · objectui#9034 · objectui#9088 (same class, tuple identity).
Filed unassigned by the domain:spec@objectui PM seat, session session_01Jmxdo7bmeqCQHLSfmLVX9w, from the non-blocking findings of the ceiling-tier contract review of PR objectui#9086 (ruling 5628764306, head 5131199465b75e1b2ebef107c07cbaa761d225a5, VERDICT: PASS). ⛔ Not claimed. ⛔ No domain:* or priority:* — routing and grading are triage's. ⛔ Nothing here blocked that PR; the reviewer said so explicitly and the fix it shipped is correct.
Generated by Claude Code
Two sites of one class, both pre-existing and both outside what objectui#9034 asked for. The reviewer's instruction was to file rather than ride.
①
stripImportedDefaultscarriesdescriptionand nothing elseOn the reachable published surface, 54 nodes carry registry meta other than
description—title×27,default×18,externalVocabulary×6,format×3,xRef×2,xExpression×2. 11 of those areZodDefaultnodes and all 11 lose that meta, before and after objectui#9086:title×9 — Mongo/Mysql/Postgreshostandport, Postgresschema, Sqlite/SqliteWasmfilenameexternalVocabulary×2 —AuthConfigSchema.session.expiresIn,DisasterRecoveryPlanSchema.failover.dns.ttlVisible through the emitter:
z.toJSONSchema(PostgresConfigSchema).properties.host— spec emits{default, description, title, type}, objectui's head emits{description, type}, the pre-#9086 base emitted{type}.packages/types/src/zod/imported-defaults.ts:144-147enshrines "⛔ The description and nothing else" on a rationale aboutid— butidoccurs 0 times in the spec's registry meta on this surface whiletitleoccurs 27. ⇒ the sentence guards an absent key and is silent about the present ones. It should either name the real trade-off or narrow to "neverid".⭐ Under the maintainer's principle this is the forbidden direction: objectui is narrower than the protocol on published metadata.
②
strict-authoring-face.ts:180-183— the same helper shape, the same lossIt carries the identical
new Ctor({...def, ...patch})rebuild. Measured:deriveStrictAuthoringSchema(z.object({k: z.string().describe('LEAF')}).describe('CONTAINER'))returns a container with no description (the leaf keeps'LEAF').⇒ objectui#9086 fixed one site of this shape; this is the sibling it deliberately did not widen into.
⛔ Constraints
.describe()route was chosen because on the already-optional branch the replacement is literally one of the spec's objects 257 times, so a mutating carry would relabel@objectstack/specfor every workspace consumer. Any.meta()carry has the same hazard.registry.get()deletesidandadd()overwrites_idmapsilently — so re-registering anidrewrites the registry's id map. That is the real reasonidmust never be carried, and it is the one part of the current docblock that is correct.ZodDefaultmust still come back reference-equal (941 / 941 plain clean exports today).titleoff these mirrors today (the loss is on the published surface; pull was ⛔ not measured).z.lazygetters — outside the reviewer's 33,556-node snapshot.Refs objectui#9086 · objectui#9034 · objectui#9088 (same class, tuple identity).
Filed unassigned by the
domain:spec@objectuiPM seat, sessionsession_01Jmxdo7bmeqCQHLSfmLVX9w, from the non-blocking findings of the ceiling-tier contract review of PR objectui#9086 (ruling5628764306, head5131199465b75e1b2ebef107c07cbaa761d225a5, VERDICT: PASS). ⛔ Not claimed. ⛔ Nodomain:*orpriority:*— routing and grading are triage's. ⛔ Nothing here blocked that PR; the reviewer said so explicitly and the fix it shipped is correct.Generated by Claude Code