Path: P1 | 那条路第 1 步「写元数据」 | /meta/types 把 string 臂擦成 {},消费方分不清「被擦掉的作者类型」和「什么都收」
分诊重测与定级:2026-09-20T15:25Z
Filed by the director seat, summon #25 (session_012GcsUbuqFGBibkEDMRC1eE), executing ruling batch #196 item 3 letter B on objectui#9830 (maintainer 「同意」). ⛔ Filed bare: domain:*, priority:* and type are triage's production. Landing: packages/metadata-protocol (toJsonSchemaSafe / the served projection) and, if the mark rides the envelope, packages/spec (ADR-0089 envelope). objectui#9830 carries Blocked-by: on this card.
The gap, measured by objectui (dev report 5729362918 / 5732080628, seat-verified)
Every predicate key the platform serves — hook.condition, sharing_rule.condition, field.visibleWhen / readonlyWhen / requiredWhen, flow edge.condition — is ExpressionInputSchema, a union whose string arm is a transform. In the output derivation /meta/types serves, z.toJSONSchema erases the transform's input type, so the member derives as anyOf: [ {}, { …ADR-0089 envelope } ]. On the wire {} is indistinguishable from 「admits everything, strings included」, so the metadata designer cannot tell an erased string predicate from a member that genuinely accepts anything; it vetoes the condition builder for all of them (objectui PR #9911, admitsString()), and an author only gets the builder by pinning widget: 'condition' in the form spec.
⛔ The global repair — derive everything with io: 'input' — was measured across the served surface and refused as a weakening of a published contract (24 of 26 types answer differently; required 1132 → 867), with a pin guarding it: packages/metadata-protocol/src/protocol.meta-types-degenerate-derivation.test.ts:19-28. ⛔ Not reopened here.
Ruling this card executes
The served derivation carries a machine-readable mark for a member whose authoring arm a transform erased — either on the ADR-0089 envelope object (a declared key naming the erased authoring type, e.g. that a string source is accepted) or as an annotation the projection emits beside the husk arm for ExpressionInputSchema members. The consumer reads the mark, ⛔ never the key name. Nothing else in the output derivation moves; the refused global widening stays refused and its pin stays green.
Acceptance
- For every served member built on
ExpressionInputSchema, the derived document carries the mark; a member that genuinely derives {} for another reason carries none (negative control).
- The degenerate-derivation pin stays green (no
io: 'input' widening).
- The mark is declared once (spec or protocol), documented in the reference page, and versioned so objectui can gate on its presence.
Clause-② declared from the diff (a new declared key on the envelope ⇒ yes; an annotation on the served projection only ⇒ the claiming seat measures).
Sequencing
objectui#9830 unblocks when the marked derivation is installable by objectui (the pinned release carries it), ⛔ not merely merged; then admitsString() reads the mark and the husk-boundary pin inverts for marked members only.
Dedupe words: ExpressionInputSchema transform erased string arm · meta/types husk anyOf empty envelope · erased authoring type mark · degenerate derivation refused io input · objectui#9830
Generated by Claude Code
Path: P1 | 那条路第 1 步「写元数据」 |
/meta/types把 string 臂擦成{},消费方分不清「被擦掉的作者类型」和「什么都收」分诊重测与定级:2026-09-20T15:25Z
Filed by the director seat, summon #25 (
session_012GcsUbuqFGBibkEDMRC1eE), executing ruling batch #196 item 3 letter B on objectui#9830 (maintainer 「同意」). ⛔ Filed bare:domain:*,priority:*andtypeare triage's production. Landing:packages/metadata-protocol(toJsonSchemaSafe/ the served projection) and, if the mark rides the envelope,packages/spec(ADR-0089 envelope). objectui#9830 carriesBlocked-by:on this card.The gap, measured by objectui (dev report 5729362918 / 5732080628, seat-verified)
Every predicate key the platform serves —
hook.condition,sharing_rule.condition,field.visibleWhen/readonlyWhen/requiredWhen, flowedge.condition— isExpressionInputSchema, a union whose string arm is a transform. In the output derivation/meta/typesserves,z.toJSONSchemaerases the transform's input type, so the member derives asanyOf: [ {}, { …ADR-0089 envelope } ]. On the wire{}is indistinguishable from 「admits everything, strings included」, so the metadata designer cannot tell an erased string predicate from a member that genuinely accepts anything; it vetoes the condition builder for all of them (objectui PR #9911,admitsString()), and an author only gets the builder by pinningwidget: 'condition'in the form spec.⛔ The global repair — derive everything with
io: 'input'— was measured across the served surface and refused as a weakening of a published contract (24 of 26 types answer differently;required1132 → 867), with a pin guarding it:packages/metadata-protocol/src/protocol.meta-types-degenerate-derivation.test.ts:19-28. ⛔ Not reopened here.Ruling this card executes
The served derivation carries a machine-readable mark for a member whose authoring arm a transform erased — either on the ADR-0089 envelope object (a declared key naming the erased authoring type, e.g. that a string source is accepted) or as an annotation the projection emits beside the husk arm for
ExpressionInputSchemamembers. The consumer reads the mark, ⛔ never the key name. Nothing else in the output derivation moves; the refused global widening stays refused and its pin stays green.Acceptance
ExpressionInputSchema, the derived document carries the mark; a member that genuinely derives{}for another reason carries none (negative control).io: 'input'widening).Clause-②declared from the diff (a new declared key on the envelope ⇒yes; an annotation on the served projection only ⇒ the claiming seat measures).Sequencing
objectui#9830 unblocks when the marked derivation is installable by objectui (the pinned release carries it), ⛔ not merely merged; then
admitsString()reads the mark and the husk-boundary pin inverts for marked members only.Dedupe words:
ExpressionInputSchema transform erased string arm·meta/types husk anyOf empty envelope·erased authoring type mark·degenerate derivation refused io input·objectui#9830Generated by Claude Code