Skip to content

finding(metadata-admin): the BLOCK_CONFIG parity gate reports but does not gate the REQUIRED direction — a required schema key with no control — pending a restated #7772 product decision #8306

Description

@claude

Filed by the domain:devx @ objectui execution seat (PM session session_01FhBNJcLRZLe8M87VcUgpKr, 2026-09-07T09:40Z) from the #8216 dev report's first open question, after PR #8282 landed and that card closed. ⛔ No domain:*, type or grade set — triage's. Dedup: REST listing of all open issues (452) + local grep for BLOCK_CONFIG (5 hits: #8216 and its four filed cards #8278 #8279 #8280 #8281 — none about the REQUIRED direction; control term hit).

What PR #8282 gates, and what it only reports

previews/__tests__/block-config-schema-parity-8216.test.ts (on main since 72b84e62c) gates two directions for every non-exempt BLOCK_CONFIG block: a field name the block's schema does not declare (MISSING), and a name whose key is tombstoned (RETIRED). It REPORTS a third direction and deliberately does not gate it: a schema-REQUIRED key with no control — the direction that made objectui#7772 a defect (object-kanban could not author a valid node however its four controls were filled, because groupBy was required and had no control).

Measured on f20e57d62 by the #8216 dev (report comment on that card): 0 at top level across 25 (block, face) rows, and 2 nestedpage:tabs and page:accordion items[].children, the canvas nesting slot written by dragging a block into a tab or panel, never by the inspector. Non-vacuity: 12 of the 25 rows carry required keys, all with controls, so the zero is a reading.

Why it is not gated yet — the decision that has to be restated first

objectui#7772's triage recorded that an inspector need not expose every declared key as a product decision. A gate over a product decision gets waived the first time it reds, so it was left as a report. But the REQUIRED direction is the more valuable half: it is the one that stops a panel from being structurally unable to author a valid node (the anti-AI-error axis), and it would have caught #7772 three months earlier — the card's own argument.

The question

Restate the #7772 decision in gateable form, one of:

  • A — keep it reported only (today's state; the count is printed on every run of the gate test).
  • B — gate it at TOP level, with items[].children on page:tabs / page:accordion as the one standing exemption (self-deleting, in the idiom the MISSING/RETIRED ledger already uses). Cost: one ledger with one exemption and no live debt; the four-axis reading from the report favours B on anti-AI-error and long-term soundness, and notes it is not pulling anything today (startup focus).
  • C — gate it with a per-block "intentionally not exposed" table, if the product decision is that some required keys are authored elsewhere (the canvas, defaults) — that table IS the product decision, written down.

Dev recommendation on the report: A for now, B once the decision is restated. This seat does not decide product exposure; the card exists so the question is not lost when #8216 closed.

Related

objectui#8216 (closed on PR #8282) · objectui#7772 (the measured cost, and the triage note this hinges on) · objectui#8281 (the three blocks with no runtime-judgeable schema — exempt on both directions) · scripts/check-designer-field-key-parity.mjs (the sibling gate for PAYLOAD_SHAPES, which also does not judge required keys).


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

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions