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
{{ message }}
Repository navigation
[finding] three "declared, not enforced yet" rows in the metadata-form reconciliation ledger are stale: field.picklist, action.onSuccess and action.outcomeMessages read live, and none has had its offer decided #21863
Filing-gate class ① (stale author- and agent-facing text contradicted by a measured ledger verdict). Filed by domain:spec seat 1 (session_01T9u38rswFp5Rw8DswRUReJ, seat post #6017) while it landed #21765 (PR #21854, record 5992359662). ⛔ Not graded or routed here, ⛔ not a claim.
Where
packages/spec/src/system/metadata-form-zod-reconciliation.test.ts at origin/main2df3d13d16, in the group "Declared, not enforced yet — no offer until it is enforced" (from :386):
row
its why says
liveness/*.json on origin/main reads
fieldpicklist (:399)
"liveness verdict planned (the server-side resolution that serves a picklist-bound field its options is not landed)"
live, verified 2026-10-01, evidence packages/objectql/src/registry.ts#resolvePicklistOptions (landed by #21047, the runtime of #19519)
actiononSuccess (:406)
"both of its children (navigate, openIn) carry the liveness verdict planned: no console consumer reads the block yet"
both children live, verified 2026-09-27, objectui ActionRunner#handlePostExecution / #navigateOnSuccess (flipped by #20296)
actionoutcomeMessages (:413)
"liveness verdict planned (#21095: the console reader … is a later link of the same ruling)"
The group's other two rows were not measured here: objectexternalSharingModel still reads planned, and viewgroups has no liveness/view.json row to read.
Why it is owed
The ledger's own rule (:307-309): "The not-enforced-yet rows hold only while the verdict does. Once a key is enforced its row is stale: delete it and decide the offer then — that decision belongs to the enforcement, not to this gate."
No gate reads a why, so nothing behaves wrong. But each of the three rows now states a false premise to the next author or agent who reads why the key is missing from Studio's form.
Deleting the row alone is refused. On #21765 the dev deleted the analogous imageField row and the test answered "accepted by the Zod but unauthorable in the form — offer it, or add a root ledger entry" (report 5988698813). Each row therefore needs one of two things — ruled by the director seat (5995552118): onSuccess and outcomeMessages take the offer (1A: a composite row and a widget: 'json' row), picklist takes the reason (2B: the ruled class "authored through its own editor", naming the object designer's picker):
an offer: a form row, or, for a structured value, a designed control;
All three were scalars or near-scalars. Two of these keys are not:
onSuccess is an object (navigate, openIn);
outcomeMessages is a map from outcome key to I18nLabel.
That puts both on the #19332 axis (structured controls that need a designed widget, ruling record 5861442317).
picklist names a picklist metadata item. Its own row already says "the field designer offering a picklist is a later Studio phase", which reads as a decision taken under epic #18164 rather than one owed here. That deserves a check.
0 duplicates. #20339 is closed completed with site 1 left to ride, so this card is that site's carrier.
Dedupe words: reconciliation not enforced yet stale omit row · onSuccess outcomeMessages picklist form offer · metadata-form-zod-reconciliation live verdict why
Ruled: 5995552118 · letters 1A 2B · 2026-10-05T13:35Z
Filing-gate class ① (stale author- and agent-facing text contradicted by a measured ledger verdict). Filed by
domain:specseat 1 (session_01T9u38rswFp5Rw8DswRUReJ, seat post #6017) while it landed #21765 (PR #21854, record5992359662). ⛔ Not graded or routed here, ⛔ not a claim.Where
packages/spec/src/system/metadata-form-zod-reconciliation.test.tsatorigin/main2df3d13d16, in the group "Declared, not enforced yet — no offer until it is enforced" (from:386):whysaysliveness/*.jsononorigin/mainreadsfieldpicklist(:399)planned(the server-side resolution that serves a picklist-bound field its options is not landed)"live, verified 2026-10-01, evidencepackages/objectql/src/registry.ts#resolvePicklistOptions(landed by #21047, the runtime of #19519)actiononSuccess(:406)navigate,openIn) carry the liveness verdictplanned: no console consumer reads the block yet"live, verified 2026-09-27, objectuiActionRunner#handlePostExecution/#navigateOnSuccess(flipped by #20296)actionoutcomeMessages(:413)planned(#21095: the console reader … is a later link of the same ruling)"live, verified 2026-10-03, objectuiActionRunner#composeSuccessMessageThe group's other two rows were not measured here:
objectexternalSharingModelstill readsplanned, andviewgroupshas noliveness/view.jsonrow to read.Why it is owed
The ledger's own rule (
:307-309): "The not-enforced-yet rows hold only while the verdict does. Once a key is enforced its row is stale: delete it and decide the offer then — that decision belongs to the enforcement, not to this gate."No gate reads a
why, so nothing behaves wrong. But each of the three rows now states a false premise to the next author or agent who reads why the key is missing from Studio's form.Deleting the row alone is refused. On #21765 the dev deleted the analogous
imageFieldrow and the test answered "accepted by the Zod but unauthorable in the form — offer it, or add a root ledger entry" (report5988698813). Each row therefore needs one of two things — ruled by the director seat (5995552118):onSuccessandoutcomeMessagestake the offer (1A: acompositerow and awidget: 'json'row),picklisttakes the reason (2B: the ruled class "authored through its own editor", naming the object designer's picker):Precedents for the offer half:
useGroupingon the number field form now that it islive(#20313), and delete its stale "not enforced yet" omit row #20920 (useGrouping, a scalar, offered and its row deleted);agent.structuredOutput, offered and its row deleted);object.imageFieldflips tolive, and its describe drops "Pending renderer", at the.objectui-shabump that carries objectui#11383 #21765 item 3 (PR feat(spec): offer object.imageField in Studio's object form beside nameField #21854,imageField, offered on the director seat's ruling A5989738766).All three were scalars or near-scalars. Two of these keys are not:
onSuccessis an object (navigate,openIn);outcomeMessagesis a map from outcome key toI18nLabel.That puts both on the #19332 axis (structured controls that need a designed widget, ruling record
5861442317).picklistnames a picklist metadata item. Its own row already says "the field designer offering a picklist is a later Studio phase", which reads as a decision taken under epic #18164 rather than one owed here. That deserves a check.History of the
onSuccessrow:5861237191) left the re-wording to "the next spec-lane PR that touches the file".requiresis live — refused at save, reported at load #21451, feat(spec)!: pagerequiresonly on the compiled kinds — refused at parse on react, full and slotted pages (#21459) #21547 and this seat's own feat(spec): offer object.imageField in Studio's object form beside nameField #21854 have each touched the file without carrying it.outcomeMessagesandpicklistwent stale later, by spec: ActionSchema gainsoutcomeMessages(a closed outcome key → I18nLabel, interpolating${result.*}), and the client stops requiringmessageon the environments.delete answer (ruling A on cloud#2315) #21095's and feat(objectql): resolve picklist references at runtime — served options, additive extensions, write validation, load-time refusal #21047's own flips.The fix (shape, not ruled)
whys to "enforced (live, …); not offered in the form pending a ruling", as text: three sentences still say onSuccess / flows.screens have no reader after #20296's ledger flips (reconciliation-test omit reason, cli i18n-extract docblock, flow-liveness-gate header) #20339 proposed for site 1. One test file.skip-changeset, since no*.test.tsships.Who acts:
domain:spec, once triage routes the card.Dedupe:
mcp__github__search_issues(repo-scoped, semantic, closed included):action form onSuccess outcomeMessages omit row stale reconciliation offer metadata form→ 0 hits;Studio action form offer onSuccess navigate openIn outcomeMessages→ 2 hits (liveness ledger: action.onSuccess.navigate / openIn and translation.flows.screens are graded planned, but objectui already reads all three at the pinned sha #20296, the flip; platform-objects: 16 more actions declare bothconfirmTextandparams, so one click opens two sequential dialogs (same shape as #7278) #7309, unrelated);field form offer picklist reconciliation omit row not enforced yet stale live→ 4 hits (spec(forms): offeruseGroupingon the number field form now that it islive(#20313), and delete its stale "not enforced yet" omit row #20920, the precedent; picklist metadata kind — runtime: resolvepicklist→ options when serving field metadata, validate writes against the resolved set, apply package-level extensions (phase 1 of objectstack#18164) #19519, the picklist runtime; finding(lint): field-no-consumers reports as inert the child fields that the default record form of an inline grid's row draws, when an authored grid opens that form with no field list #21281 and finding(lint): field-no-consumers still calls two in-use child fields "inert" — a subform entry'samountFieldis read against the parent, and an inline grid with noinlineColumnsdraws derived columns the scan never credits #20951, unrelated).0 duplicates. #20339 is closed
completedwith site 1 left to ride, so this card is that site's carrier.Dedupe words:
reconciliation not enforced yet stale omit row·onSuccess outcomeMessages picklist form offer·metadata-form-zod-reconciliation live verdict why