Found while retiring element:form at element grain (#9249, ADR-0049). Out of that card's scope — the translation face is a different schema with its own consumers (CLI i18n-extract, the resolver, their pins) — so recorded here unassigned for triage.
Measured (2026-08-21, objectstack c684d00cfc + the #9249 working tree)
Decision needed
- Retire
submitLabel from the component-translation face (drop the key, the submit alias, and its PAGE_COMPONENT_COPY_KEYS slot; ADR-0087 conversion for stored translation bundles if the face is conversion-covered) — consistent with the face's "measured, not mirrored" rule, at the cost of dropping the bespoke-component route for that one word; or - Keep it as the bespoke-component route (the documented
ai_briefing pattern) and correct the table to say so instead of naming element:form; or - Re-anchor the face on the live form surface — add
submitText (object-form, object-master-detail-form) to the copy face and retire submitLabel via alias — which widens the face and is its own accept-set change.
#9249 itself only corrects the two describes/table rows that advertised element:form as the carrier; it does not move the key.
Backlink: #9249.
Found while retiring
element:format element grain (#9249, ADR-0049). Out of that card's scope — the translation face is a different schema with its own consumers (CLIi18n-extract, the resolver, their pins) — so recorded here unassigned for triage.Measured (2026-08-21, objectstack
c684d00cfc+ the #9249 working tree)packages/spec/src/system/translation.zod.tsdeclaressubmitLabelon the per-component copy face, and its own "measured, not mirrored" table names exactly one declarer:element:form. That element is now retired whole (ADR-0049 candidate:element:formdeclares a full form contract with no renderer registration found in objectstack/objectui #9249) — everyElementFormPropskey is aretiredKey()tombstone — so no spec-declared component carriessubmitLabelany more.PAGE_COMPONENT_COPY_KEYSinpackages/spec/src/system/i18n-resolver.ts(shared with the CLI extractor by design), thesubmitalias in the component-translation alias table, and the resolver pin ini18n-resolver.test.ts(that fixture was retriaged in ADR-0049 candidate:element:formdeclares a full form contract with no renderer registration found in objectstack/objectui #9249 to carry the pin on a bespoke component type, which the face's own docblock documents as legal: "custom component types are legal, so these keys are also the route for a bespoke component that speaks the same vocabulary").object-form'ssubmitText(I18nLabelSchema), which is not in the copy-key face at all.Decision needed
submitLabelfrom the component-translation face (drop the key, thesubmitalias, and itsPAGE_COMPONENT_COPY_KEYSslot; ADR-0087 conversion for stored translation bundles if the face is conversion-covered) — consistent with the face's "measured, not mirrored" rule, at the cost of dropping the bespoke-component route for that one word; orai_briefingpattern) and correct the table to say so instead of namingelement:form; orsubmitText(object-form,object-master-detail-form) to the copy face and retiresubmitLabelvia alias — which widens the face and is its own accept-set change.#9249 itself only corrects the two describes/table rows that advertised
element:formas the carrier; it does not move the key.Backlink: #9249.