feat(spec): ADR-0085 semantic roles — stageField, highlightFields rename, detail block removal, collapse enum, shared fieldGroups derivation#2521
Merged
Conversation
…ame, detail block removal, collapse enum, shared fieldGroups derivation Executes ADR-0085 (#2520) in the spec layer: - ObjectSchema gains stageField: string | false (lifecycle role; false suppresses stage heuristics) — legitimizes the key renderers already read. - compactLayout → highlightFields (ordered most-important fields; drives default columns, cards, previews, detail highlight strip). Old key stays a parse-time alias, preserved on output (ADR-0079 pattern). 35 platform objects + app-todo migrated. - fieldGroups[].collapse enum replaces defaultExpanded and the UI-dialect collapsible/collapsed pair (both aliased at parse for one minor); visibleOn removed (zero consumers, ADR-0049 enforce-or-remove). - detail passthrough UI-hints block removed (zero authors; the typed hideReferenceRail was a proven no-op; renderViaSchema retires with the legacy monolith render path in objectui). - New @objectstack/spec/data deriveFieldGroupLayout — single source of the grouping semantics (declared order, empty groups dropped, ungrouped trailing bucket minus system fields, collapse passthrough incl. aliases). - New @objectstack/lint validateSemanticRoles (wired into os lint): warns on dangling Field.group / empty declared groups / unknown stageField & highlightFields names (ADR-0078 completeness gate). - Liveness ledger updated (detail dropped; highlightFields + stageField registered live; compactLayout marked deprecated alias). spec 6666 tests, lint 112, cli 440, platform-objects 63 all green; api-surface unchanged; check:liveness green; app-todo typecheck green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Contributor
📓 Docs Drift CheckThis PR changes 5 package(s): 95 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:
|
…-0085) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…sition Browser dogfood of the rename found a live gap: metadata authored with the canonical highlightFields key parsed to output WITHOUT compactLayout, so current renderers that still read the old key (ObjectGrid default columns, card compact views, vendored console) silently lost their curated field list. The alias now mirrors both directions (canonical wins when both are present); the back-fill is removed together with the deprecated key. Verified end-to-end in a running app (app-todo, HMR console against the worktree server): default list columns, mobile card fields, detail highlight strip, stageField stepper, and field-group form sections all render from the renamed keys. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
ADR-0085 §3 removed fieldGroups[].visibleOn from ObjectSchema (declared, zero consumers — enforce-or-remove per ADR-0049). The ADR-0060 ratchet correctly flagged the ledger row as a stale cover; drop it until the key returns with a real enforcement path. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This was referenced Jul 2, 2026
os-zhuang
added a commit
that referenced
this pull request
Jul 3, 2026
…) (#2539) The ADR-0085 deprecation window is closed: consumers switched in objectui#2168, shipped via the console pin (#2526), one release soaked. - ObjectSchema drops the compactLayout declaration: create() rejects it (unknown key), lenient parse strips it — no silent aliasing either way. - normalizeSemanticRoleAliases loses both directions (alias + the #2521 back-fill mirror); served metadata carries highlightFields only. - 27 straggler system-object authors (plugins/services, missed by the #2521 sweep — the type gate caught the first one) renamed. - liveness ledger drops the compactLayout row; the dogfood mirror assertion (#2528) flips to expect ABSENCE, exactly as it was designed to force in the retirement PR. - Downstream smoke pin → hotcrm v1.2.2 (hotcrm#424, same rename). spec 6666 + dogfood 181 green; api-surface unchanged; check:liveness ✓. Closes #2536 Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This was referenced Jul 3, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Executes ADR-0085 (#2520) in the spec layer. Companion objectui changes tracked separately (objectui#2149 revision + consumer switch).
What
@objectstack/specstageField: string | falsetyped at top level — the lifecycle-role key renderers already read (false= declared non-linear, suppress stage heuristics).compactLayout→highlightFields— ordered most-important fields (default list columns, cards, child previews, detail highlight strip). Old key remains a parse-time alias, preserved on output (ADR-0079displayNameFieldpattern).fieldGroups[].collapse: 'none' | 'expanded' | 'collapsed'replacesdefaultExpandedand the UI-dialectcollapsible/collapsedpair (both alias-mapped at parse for one minor).visibleOnremoved — zero consumers anywhere (ADR-0049 enforce-or-remove).detailpassthrough block removed — zero authors across framework+objectui; the typedhideReferenceRailwas a proven no-op for spec authors;renderViaSchemaretires with the legacy monolith render path (separate objectui PR).deriveFieldGroupLayout(def)in@objectstack/spec/data— single source of the fieldGroups rendering semantics; retires the two near-identical copies in objectui (consumer-switch PR follows).@objectstack/lint+os lintvalidateSemanticRoles: warns on danglingField.group, declared-but-empty groups, unknownstageField/highlightFieldsnames — Zod-valid-but-silently-inert pointers (ADR-0078 completeness gate).@objectstack/platform-objects/ examplescompactLayout:→highlightFields:(behaviour unchanged via alias).Verification
check:api-surfaceunchanged ✓ (no export removals — key-level schema changes only)check:livenessgreen (all governed properties classified)Versioning note
detail/visibleOnremoval is breaking on paper, dead in practice (zero-author evidence in the ADR). Shipped as minor under the documented dead-surface exception (PR #2272 precedent) — release owner may bump to major at version time.🤖 Generated with Claude Code