Skip to content

Track the @objectstack family at 17.0.0-rc.6 — the adaptation surface beyond what objectstack#7100 could carry #4167

Description

@yinlianghui

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:

  1. 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.
  2. The standalone i18n vocabulary retiredI18nObject, LocaleConfig, PluralRule, DateFormat, NumberFormat + …Schema twins — and I18nLabel widened from string to string | Record< string, string >, with InlineLocaleMap and resolveI18nLabel added. Consumer story: I18nLabel now admits an inline per-locale map — audit every read the compiler cannot see, and give Studio a way to author one #4163.
  3. The widget-manifest vocabulary retiredWidgetManifest, WidgetSource, WidgetProperty, WidgetEvent, WidgetLifecycle + twins. Unlock: spec rc.6 vacated WidgetManifest / WidgetSource — the Runtime… prefixes may be reclaimed #4164.
  4. Refinements added to schemas this repo derives from, which zod 4 refuses to .extend(). Contract conflict: spec rc.6 refines a date GlobalFilter.defaultValue to reject { preset } — the exact shape objectui's normalizer produces and stored dashboards carry #4165.

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.

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 (ThemeInputTheme), types/spec-report.ts (four aliases re-pointed by side), types/index.ts (five dead i18n re-exports dropped), core/ActionRunner.ts (ActionInputAction), 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:

@object-ui/app-shell  MetadataState, resolveI18nLabel
@object-ui/core       DATE_RANGE_PRESETS
@object-ui/fields     AddressValue
@object-ui/layout     BreakpointColumnMap, BreakpointOrderMap
@object-ui/react      MetadataState, NavigationMode, resolveI18nLabel
@object-ui/types      DateRangePreset, KanbanConfig, CalendarConfig, GanttConfig

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.

Ownership, one line each

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 @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.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions