You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
finding(types): FilterBuilderConditionSchema omits id, which the component reads at four sites plus the React key — z.object strips it, so a correctly-authored condition becomes one that can never be edited or removed #8415
Split out of #7562 by the triage seat (session session_01SwJQDFKe8tVit3BXQ9EfR5) at the domain:spec seat's explicit request (5573677144): that card's items 1–3 collapse into one authority ruling and are parked in the decision inbox; this item is opposite in direction and must not wait behind it.
⛔ Not claimed, not dispatched, no code written.
⚠️ Provenance — this seat has NOT re-driven the measurement
Everything below is quoted from #7562's body and the domain:spec seat's analysis on it. ⛔ Attributed, not inherited silently. Re-derive before acting — #7562's line numbers were already measured stale once.
The reading
FilterBuilderConditionSchema does not declare id. The component reads it at four sites, plus the React key.
⇒ Because the mirror is a plain z.object, an author who correctly writes id has it silently stripped. The document then validates clean and renders — and the row it produces can never be edited or removed, because every affordance that would act on it is keyed on the id that is no longer there.
⭐ The state today is accepted-and-discarded, not refused — the undeclared-but-consumed shape #6150 closed for tree-view.title. That precedent is the reason this is a defect rather than a preference.
Class and grade
Class (c) — metadata the runtime silently drops, and the author gets no signal on either face. type: Bug: a shape that passes validation yields a non-functional row.
priority:p3, inherited from #7562 and not inflated: the damage is an editor affordance, not data loss, and ⛔ nobody has measured how many authored conditions carry an id today. 📌 Re-grade trigger, written down: if someone measures that authored filter conditions commonly carry id (so the strip is hitting real documents rather than a theoretical author), this is p2.
Why this needs no ruling — and #7562's items 1–3 do
⚠️ Worth stating, because the two look alike and were on one card:
Items 1–3 ask which of three disagreeing faces is authoritative (docs publish 14 members and optional; the mirror declares 7 and requires type). Until that is answered, the same edit is either a pull-back or an accept-set widening. ⇒ genuinely a ruling.
This item has no such fork. The component's four read sites are not a declaration in tension with another declaration — they are the enforcement that the mirror simply fails to declare. Declaring id restores declared = enforced.
⚠️Measure the corpus before landing, with a firing control: how many authored filter-builder conditions in apps/**, examples/**, content/** and packages/** carry an id today, and how many do not. ⛔ A zero with no control beside it is not a reading. That number is also what settles the re-grade trigger above.
Refs: #7562 (parent; items 1–3 in the decision inbox) · #7560 (the group id, zero read sites — the counter-case) · #6150 (the precedent: undeclared-but-consumed, closed) · #7561 · #6939.
Split out of #7562 by the triage seat (session
session_01SwJQDFKe8tVit3BXQ9EfR5) at thedomain:specseat's explicit request (5573677144): that card's items 1–3 collapse into one authority ruling and are parked in the decision inbox; this item is opposite in direction and must not wait behind it.⛔ Not claimed, not dispatched, no code written.
Everything below is quoted from #7562's body and the
domain:specseat's analysis on it. ⛔ Attributed, not inherited silently. Re-derive before acting — #7562's line numbers were already measured stale once.The reading
FilterBuilderConditionSchemadoes not declareid. The component reads it at four sites, plus the Reactkey.⇒ Because the mirror is a plain
z.object, an author who correctly writesidhas it silently stripped. The document then validates clean and renders — and the row it produces can never be edited or removed, because every affordance that would act on it is keyed on theidthat is no longer there.⭐ The state today is accepted-and-discarded, not refused — the undeclared-but-consumed shape #6150 closed for
tree-view.title. That precedent is the reason this is a defect rather than a preference.Class and grade
Class (c) — metadata the runtime silently drops, and the author gets no signal on either face.
type: Bug: a shape that passes validation yields a non-functional row.priority:p3, inherited from #7562 and not inflated: the damage is an editor affordance, not data loss, and ⛔ nobody has measured how many authored conditions carry anidtoday. 📌 Re-grade trigger, written down: if someone measures that authored filter conditions commonly carryid(so the strip is hitting real documents rather than a theoretical author), this is p2.Why this needs no ruling — and #7562's items 1–3 do
type). Until that is answered, the same edit is either a pull-back or an accept-set widening. ⇒ genuinely a ruling.idrestoresdeclared = enforced.idrenders today but cannot be edited or removed. Nothing that works stops working. That is the same judgement applied on finding(types):CollapsibleSchema.openis declared on both faces and read by no renderer — thecollapsiblerenderer passes onlydefaultOpen#8236, finding(types/components):PageNodeSchema.bodyis array-only while its only reader casts around that to accept a single node — and the root README's flagship example authors the refused form #8310 and finding(plugin-grid/types): a bareexportOptionsarray on a directly-authoredobject-gridnode passes the zod mirror unvalidated and silently degrades to the csv/json default #7762 this round.⛔ Boundaries
id. The group'sidhas zero read sites (fix(types): the filter-builder mirror names the keys and the vocabulary its renderer reads #7560) — measured, and the opposite of this one. The same answer demonstrably does not transfer, and thedomain:specseat flagged exactly this trap.typethe renderer and the docs both make optional, and its condition shape omits theidfour read sites match on #7562's items 1–3. They are parked pending a ruling; touching the same file is fine, touching those members is not.safeValidateSchemabecause the Zod mirror names a key its renderer never reads (8 components) #6939, different shape.Clause-②: yesat claim, hang the carrier on the draft PR (⛔ not before it exists), and write the changeset's breaking wording the way PR feat(types): declare ObjectKanbanSchema.groupBy and .limit, retire groupField on both faces (objectui#7322 item 1) #7774 did.filter-builderconditions inapps/**,examples/**,content/**andpackages/**carry anidtoday, and how many do not. ⛔ A zero with no control beside it is not a reading. That number is also what settles the re-grade trigger above.typethe renderer and the docs both make optional, and its condition shape omits theidfour read sites match on #7562 or from this card.Refs: #7562 (parent; items 1–3 in the decision inbox) · #7560 (the group
id, zero read sites — the counter-case) · #6150 (the precedent: undeclared-but-consumed, closed) · #7561 · #6939.