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
Filed from objectstack#7100, whose PR (#4169) bumps @objectstack/* from ^17.0.0-rc.5 to ^17.0.0-rc.6 because the global_nav retirement it implements cannot compile at rc.5. The bump turned out to be far more than a lockfile move. This card holds what that PR does not close.
Scale of the release, measured
Diffing the resolved dist/ui/index.d.ts of rc.5 against rc.6: 40 exports removed, 29 added. Four deliberate moves, not scatter:
Every …Input alias retired, and the bare name moved onto the input side.ActionInput, AppInput, PageInput, DashboardInput, ThemeInput, ReportInput, ReportChartInput, DatasetInput, ReportSortInput, NavigationContributionInput, InlineActionInput, JoinedReportBlockInput, DatasetDimensionInput, DatasetMeasureInput. Where rc.5 had X = z.infer / XInput = z.input / XParsed = z.infer, rc.6 has X = z.input / XParsed = z.infer. Re-pointing by NAME silently swaps parsed for input; each binding has to be re-pointed by SIDE.
Plus, outside ui: SharingRuleSchema gained the seven ADR-0010 envelope keys, ActionSchema gained description, FlowNodeSchema became pipe-wrapped, element:record_picker lost displayField/searchFields/multiple to ADR-0087 D2 tombstones, and page:footer/page:section/page:sidebar moved from EmptyProps to the shared PageContainerProps.
Full workspace build green (turbo run build, 44/44). Full suite: 14,609 / 14,615 passing.
Compile fallout: types/theme.ts (ThemeInput→Theme), types/spec-report.ts (four aliases re-pointed by side), types/index.ts (five dead i18n re-exports dropped), core/ActionRunner.ts (ActionInput→Action), 8 render sites for the widened I18nLabel, types/zod/complex.zod.ts (.extend→spread, see #4165).
Runtime fallout: both flow-schema access paths, clientValidation.optOuts (inverted — the create door now accepts a stamped _packageId), clientValidation.viewDiagnostics (fixture + a new leaf-union pin), components record-picker parity fixture, console registry parity carve-out (SPEC_SHAPE_EMPTY_ON_THE_PIN deleted per its own instruction), the i18n residue ratchet, SPEC_ACTION_KEYS (+description), and two spec-parity lists.
What is left — this card
1. check:spec-symbols — 13 name collisions. Wired into ci.yml's Type Check job, currently the main red. rc.6 published 9 names this repo already declares locally, plus 4 pre-existing:
Each is objectstack#4115-class triage with three possible outcomes (derive by reference / rename to a declared dialect + tripwire / ALLOW with a reason), and the right answer differs per symbol — resolveI18nLabel in particular is a genuine name clash over two DIFFERENT vocabularies (objectui's translation-key ref vs the spec's inline locale map), which is a naming decision rather than a derivation.
2. Two stale exemptions in apps/console/src/__tests__/registry-inputs-spec-parity.test.ts. rc.6 now declares keys the exemption list still covers, and element:record_picker does not publish three keys the spec declares:
carries no stale exemption: page:header.recordChrome, page:header.showStar, page:header.showCopyId,
page:accordion.variant, page:tabs.tabStyle,
element:record_picker.labelField/valueField/label,
page:card.children, page:section.children,
page:footer.children, page:sidebar.children
record_picker publishes: sort, limit, emptyText
Mostly mechanical (delete the exemption, publish the input with a description), but each published input is an authoring-surface addition that wants its own read — the same class objectui#3808/#3830 handled one key at a time.
3. #4165 blocks ready — the GlobalFilterSchema refinement vs the { preset } form stored dashboards carry. Maintainer + spec owner.
objectstack#7100 and objectstack#6955 both need rc.6 underneath. As measured, the bump is a chore(deps) card the size of objectui#3560 / PR #3568 ("track the @objectstack family at 17.0.0-rc.5 and restore green", whose changeset ran to 105 lines of FROM→TO prose). Folding it into a retirement card was reasonable on the information available at dispatch — objectui's ^17.0.0-rc.5 ranges already admitted rc.6, so the move looked lockfile-only. It is not reasonable now: the bump should be its own card, and #7100's removals should ride on it. PR #4169 currently carries both, because splitting them today would only manufacture the red intermediate state the coupling exists to avoid.
Filed from objectstack#7100, whose PR (#4169) bumps
@objectstack/*from^17.0.0-rc.5to^17.0.0-rc.6because theglobal_navretirement it implements cannot compile at rc.5. The bump turned out to be far more than a lockfile move. This card holds what that PR does not close.Scale of the release, measured
Diffing the resolved
dist/ui/index.d.tsof rc.5 against rc.6: 40 exports removed, 29 added. Four deliberate moves, not scatter:…Inputalias retired, and the bare name moved onto the input side.ActionInput,AppInput,PageInput,DashboardInput,ThemeInput,ReportInput,ReportChartInput,DatasetInput,ReportSortInput,NavigationContributionInput,InlineActionInput,JoinedReportBlockInput,DatasetDimensionInput,DatasetMeasureInput. Where rc.5 hadX = z.infer/XInput = z.input/XParsed = z.infer, rc.6 hasX = z.input/XParsed = z.infer. Re-pointing by NAME silently swaps parsed for input; each binding has to be re-pointed by SIDE.I18nObject,LocaleConfig,PluralRule,DateFormat,NumberFormat+…Schematwins — andI18nLabelwidened fromstringtostring | Record< string, string >, withInlineLocaleMapandresolveI18nLabeladded. Consumer story:I18nLabelnow admits an inline per-locale map — audit every read the compiler cannot see, and give Studio a way to author one #4163.WidgetManifest,WidgetSource,WidgetProperty,WidgetEvent,WidgetLifecycle+ twins. Unlock: spec rc.6 vacatedWidgetManifest/WidgetSource— theRuntime…prefixes may be reclaimed #4164..extend(). Contract conflict: spec rc.6 refines a dateGlobalFilter.defaultValueto reject{ preset }— the exact shape objectui's normalizer produces and stored dashboards carry #4165.Plus, outside
ui:SharingRuleSchemagained the seven ADR-0010 envelope keys,ActionSchemagaineddescription,FlowNodeSchemabecame pipe-wrapped,element:record_pickerlostdisplayField/searchFields/multipleto ADR-0087 D2 tombstones, andpage:footer/page:section/page:sidebarmoved fromEmptyPropsto the sharedPageContainerProps.Already repaired in PR #4169 — do not redo
Full workspace build green (
turbo run build, 44/44). Full suite: 14,609 / 14,615 passing.Compile fallout:
types/theme.ts(ThemeInput→Theme),types/spec-report.ts(four aliases re-pointed by side),types/index.ts(five dead i18n re-exports dropped),core/ActionRunner.ts(ActionInput→Action), 8 render sites for the widenedI18nLabel,types/zod/complex.zod.ts(.extend→spread, see #4165).Runtime fallout: both flow-schema access paths,
clientValidation.optOuts(inverted — the create door now accepts a stamped_packageId),clientValidation.viewDiagnostics(fixture + a new leaf-union pin),componentsrecord-picker parity fixture,consoleregistry parity carve-out (SPEC_SHAPE_EMPTY_ON_THE_PINdeleted per its own instruction), the i18n residue ratchet,SPEC_ACTION_KEYS(+description), and two spec-parity lists.What is left — this card
1.
check:spec-symbols— 13 name collisions. Wired intoci.yml's Type Check job, currently the main red. rc.6 published 9 names this repo already declares locally, plus 4 pre-existing:Each is objectstack#4115-class triage with three possible outcomes (derive by reference / rename to a declared dialect + tripwire / ALLOW with a reason), and the right answer differs per symbol —
resolveI18nLabelin particular is a genuine name clash over two DIFFERENT vocabularies (objectui's translation-key ref vs the spec's inline locale map), which is a naming decision rather than a derivation.2. Two stale exemptions in
apps/console/src/__tests__/registry-inputs-spec-parity.test.ts. rc.6 now declares keys the exemption list still covers, andelement:record_pickerdoes not publish three keys the spec declares:Mostly mechanical (delete the exemption, publish the input with a description), but each published input is an authoring-surface addition that wants its own read — the same class objectui#3808/#3830 handled one key at a time.
3. #4165 blocks ready — the
GlobalFilterSchemarefinement vs the{ preset }form stored dashboards carry. Maintainer + spec owner.Ownership, one line each
@objectstackfamily at17.0.0-rc.6— the adaptation surface beyond what objectstack#7100 could carry #4167) — an objectui dev, as achore(deps)card. Items 1 and 2 are self-contained and need no ruling.GlobalFilter.defaultValueto reject{ preset }— the exact shape objectui's normalizer produces and stored dashboards carry #4165 — maintainer, with the upstream question attached; it is the only true blocker.I18nLabelnow admits an inline per-locale map — audit every read the compiler cannot see, and give Studio a way to author one #4163 — an objectui dev for part 1 (the audit), design input for part 2 (Studio authoring of inline locale maps).WidgetManifest/WidgetSource— theRuntime…prefixes may be reclaimed #4164 — observation-class; any dev, whenever theRuntime…prefixes are next touched.Sequencing note
objectstack#7100 and objectstack#6955 both need rc.6 underneath. As measured, the bump is a
chore(deps)card the size of objectui#3560 / PR #3568 ("track the@objectstackfamily at17.0.0-rc.5and restore green", whose changeset ran to 105 lines of FROM→TO prose). Folding it into a retirement card was reasonable on the information available at dispatch — objectui's^17.0.0-rc.5ranges already admitted rc.6, so the move looked lockfile-only. It is not reasonable now: the bump should be its own card, and #7100's removals should ride on it. PR #4169 currently carries both, because splitting them today would only manufacture the red intermediate state the coupling exists to avoid.