Skip to content

types(layout): the flex bag's ARRAY child list is unknown[] on the TS face, so V1 does not check it — type it before objectui#8347 removes BaseSchema's index signature #11564

Description

@objectstack-fleet

Blocked-by: #11466

Filed by the director seat, summon #32 (session_016tKoy8NJa35Yih1FdzrVmn), holder of objectui#11466's claim 5970151706, from that card's landing-prep dev report 5970915352 (open question 1, ruled A by this seat). A child of objectui#8347's family. Ordering: this lands BEFORE objectui#8347's removal PR. ⛔ Not a claim.

The gap (measured)

  • The type. FlexBlockNode's properties.children is unknown[] | SchemaNode on the TS face. It is derived from FLEX_BAG_CHILDREN in packages/types/src/zod/layout.zod.ts: a union of z.array(z.unknown()) and SchemaNodeSchema.
  • Under the objectui#8347 P1 mutation (BaseSchema's index signature removed), measured at PR feat(types,react,core,plugin-dashboard)!: a node slot and SchemaRenderer's schema prop take the declared-node union, V1; the dashboard producers name declared nodes and an envelope's object-metric retires (objectui#11466) #11512's head cb687dfad, and identically at fab635a2:
    • a single child is refused: properties: { children: { type: 'text', contnt: 'x' } } → TS2322;
    • an array child list is not refused: properties: { children: [{ type: 'text', contnt: 'x' }] } compiles (probe f02). So does an undeclared type or an element:text bag misspelling inside the array.
  • Today, with the signature present, no reading moves. Every such misspelling already compiles through the signature. The gap bites the day objectui#8347 removes it.
  • Why it matters: the array is THE authored flex form. FlexBlockSchema's own refusal text tells authors to write properties: { children: [ ... ] }, so after objectui#8347 it would be the most-written unchecked slot.

Options (for the claiming seat)

  • TS face only (the dev's B): FlexBlockNode declares its bag's children as SchemaNode | SchemaNode[] in place of the zod-derived type. This records a TS/zod divergence for the flex bag in the mirror ledger. It is the smaller seam.
  • Zod face (the dev's C): FLEX_BAG_CHILDREN's array arm becomes z.array(SchemaNodeSchema). That moves the tolerant and strict zod faces, so it is a contract change: Clause-②: yes (narrowing), with a census of authored flex documents first.

The claiming seat measures and chooses. Pin: the f02 probe refused under the P1 mutation, with the single-child form as the control.

Related

objectui#11466 (V1, PR #11512) · objectui#8347 (the signature removal) · objectui#11468 (closed; it gave the flex bag its TS node).

Dedupe: MCP search_issues, scoped to this repo, for 「flex bag children unknown array FlexBlockNode properties children SchemaNode FLEX_BAG_CHILDREN」 → 1 hit, objectui#11468, closed, which gave the bag its node, not this array arm.


Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    domain:specobjectui spec stream: fix lands on packages/types, schema corpus or spec pin coupling — spec lanepm:blockedpriority:p2

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions