Repository navigation
feat(spec)!: retire page:header showStar — the follow star the reference console no longer draws - #23781
Conversation
…nce console no longer draws `PageHeaderProps.showStar` switched a star the reference console does not draw: since objectui#12427 the record chip draws it only where the host wires a favorites toggle into the record context, and no reference host does — the record's favorites entry is the header's ⋯ menu. Retired through the spec-property-retirement route (ADR-0049 enforce-or-remove, ADR-0087 D2/D3), per the maintainer's ruling on the card (letter A). - retiredKey() tombstone on PageHeaderProps, naming the ⋯ menu as the favorites entry and saying metadata does not control it - D2 conversion page-header-show-star-removed (step 18, retired from the load path) and D3 entry page-header-show-star-retired - RETIRED_KEYS_BY_MAJOR[18]: ui/PageHeaderProps:showStar - pins: tombstone/conversion/ledger + tree-scoped absence; component.test.ts and the props-lint test move from acceptance to refusal - regenerated authorable-surface, authorable-defaults and the reference docs - BREAKING changeset with FROM → TO Clause-②: no (narrowing) Claude-Session: https://claude.ai/code/session_0127kfChiciCXiqVX5g7E5rJ Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0127kfChiciCXiqVX5g7E5rJ Co-authored-by: Claude <noreply@anthropic.com>
📓 Docs Drift CheckThis PR changes 1 package(s): 2 hand-written doc(s) NAME something this change touched and may need an implementation-accuracy re-verification:
⛔ 2 release-owned page(s) also name something this change touched. These are read-only:
What this run could not see
Coarse fallback — 142 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): Which tree this was computed onThis run read A worktree cut from an older # while this PR is open — GitHub drops the merge commit once it closes
git fetch origin 87e11eb5b5fd1a0e14a8898b49fddf9b23455886 && git checkout 87e11eb5b5fd1a0e14a8898b49fddf9b23455886
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin b711056e63c042026c4e43af606bab229f1d29e5 e22d40e59a72bd0819646c6306d34b8b21bca303 && git checkout -B drift-repro b711056e63c042026c4e43af606bab229f1d29e5 && git merge --no-ff e22d40e59a72bd0819646c6306d34b8b21bca303
node scripts/docs-audit/affected-docs.mjs --json b711056e63c042026c4e43af606bab229f1d29e5
|
席位核对 · ACCEPT · PR #23781 @
|
Contract reviewServed-tier: Read against the ruling's letter on card #23650 (record Gate verdicts on the head: every check-run that ran is ① Derived judgmentsEvery accept-set and public-surface change the diff implies, each judged against the ruling's letter and the retirement playbook:
Nothing in the diff is judged WRONG. ② Semver level
③ Boundary flagsEvery dev flag and every
Implemented-by: VERDICT: PASS Generated by Claude Code |
Claude-Session: https://claude.ai/code/session_0127kfChiciCXiqVX5g7E5rJ Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0127kfChiciCXiqVX5g7E5rJ Co-authored-by: Claude <noreply@anthropic.com>
Fixes #23650
Clause-②: no (narrowing)
Regen-provenance: merge of origin/main at 46ca793 plus check:generated regeneration; no source change since the reviewed head 75ddc30.
What
Retires
page:headershowStar(PageHeaderProps) through the spec-property-retirement route, per the maintainer's ruling on the card (record6203775759, letter A: 「A 退役 showStar (Recommended)」).Since objectstack-ai/objectui#12427 the record chip draws the follow star only where the host wires
onToggleFavoriteinto the record context, and no reference host does: the record's favorites entry is the header's ⋯ menu. SoshowStar: true(the default) drew nothing andshowStar: falsehid nothing.packages/spec/src/ui/component.zod.tsshowStarbecomes aretiredKey()tombstone. The prescription names the header's ⋯ menu as the favorites entry and says metadata does not control it.recordChrome's describe stops promising a star.packages/spec/src/conversions/registry.tspage-header-show-star-removed(toMajor 18,retiredFromLoadPath,retiredAfter: '17.7.0', order 66). It strips both values from everypage:header(region, nestedchildren, slotted page slot) and is scoped by component type.migrations/entries/retired-keys/18.ui__PageHeaderProps__showStar.tsRETIRED_KEYS_BY_MAJOR[18]entrymigrations/entries/semantic/18.page-header-show-star-retired.ts+STEP18_RATIONALEfragment (order 98)packages/spec/liveness/page.json[1] page:headerread-point list:showStaris now marked refused.recordChromeandshowCopyIdstay.authorable-surface/ui.json([RETIRED]),authorable-defaults/ui.json(showStar = trueremoved),content/docs/references/ui/component.mdx.changeset/23650-page-header-show-star-retired.md@objectstack/specminor, BREAKING, FROM → TO, ADR-0087registeredmarkerPins
packages/spec/src/ui/page-header-show-star-retirement.test.ts(repo project, listed invitest.repo-tests.json). It covers:true,falseand'no'at the key with the prescription;never(@ts-expect-error);component.test.ts's#6776block pinnedshowStardefaulttrue, acceptedfalse, and refused'no'. Those pins are deleted together with the key. The tombstone refusal pinrefuses \true` AND `false` at the key, with the prescriptionanda non-boolean is refused by the same tombstone, at the keyreplace them, and the block keeps pinningrecordChrome/showCopyId`.packages/lint/src/validate-component-props.test.ts: the#6776acceptance fixture dropsshowStar. A new case pinscomponent-props-invalid+error+ path + prescription fortrueandfalse.retired-key-removal-version.pin.test.tsJOIN row added.page-header-breadcrumb-retirement.test.ts's exactPageHeaderProps:*ledger list now includesshowStar.Measurements
git grep showStarat140238a47overexamples/,packages/*/src,skills/andcontent/(outside the spec's schema/tests, generated references and the historicalregistry.ts.templaterationale). objectui at the pinnedf96f771140f1has no producer in apps or examples either..objectui-sha(f96f771140f1), for the Console Pin Gate:PageHeaderPropsand noz.inferof it.app-shell'sConsolePageHeaderPropsis its own interface.schema?.showStar/schema?.properties?.showStarinpackages/components/src/renderers/layout/containers.tsx(around:1581-:1584), plusRecordTitleChip's own React prop.tscagainst objectui's installed@objectstack/spec(theOBJECTSTACK_SPEC_DISThook only reaches vite). So no compile break is expected from this removal. The gate itself was not run locally.packages/components/src/renderers/layout/containers.tsx:1580-:1584(the read),:2616(passesshowStarto the chip),:2681(the registration's{ name: 'showStar', type: 'boolean' }input);packages/components/src/custom/RecordTitleChip.tsx:45/:63/:134;packages/components/src/__tests__/page-header-star-host-toggle-12427.test.tsx:117-:120;apps/console/src/__tests__/registry-inputs-spec-parity.test.ts:5787lists['page:header', 'showStar']insettledUpstream. It assertsspecTopLevelKeys(type)contains the key, and that set subtracts tombstones. That test reads objectui's installed spec, so it goes red there on the first spec bump that carries this retirement, not here. The forward direction also reds while the registration still publishes the input.content/docs/layout/page-header.mdx:49andcontent/docs/guide/layout.md:373.sdui.manifest.json: still listsshowStaras a renderer input. It is not edited by hand.check-sdui-manifestchecks shape, tamper, staleness and pin correspondence, not spec parity, and it is green. No gate here compares manifest inputs againstComponentPropsMap. It updates on the pin bump after objectui drops the input.Verification (head
75ddc305)pnpm --filter @objectstack/spec typecheck && test && test:repo: 680 files / 20787 tests, then 63 files / 1070 tests, VERDICT command-exit 0.pnpm --filter @objectstack/lint typecheckexit 0.pnpm --filter @objectstack/lint test: 139 files / 6772 tests, exit 0.pnpm --filter @objectstack/spec check:generated: all 14 artifacts up to date.node scripts/pm/dispatch-gates.mjs --commands: 111 derived families, each run with its exit code captured before any pipe, all 0.--ranreports 111 run, 0 NOT-MEASURED (a derived zero).node scripts/ablation-replace.mjsswappedshowStar: retiredKey(forshowStar: z.boolean().default(true).describe(. The new pin file went red (6 tombstone cases), then was restored byte-identically to HEAD (blobd3db276b1322). A first attempt was a syntax-broken mutation that ran no tests; it was discarded as void.mainwas merged once (merge commit75ddc305) after the retirement commit. The one conflict was inretired-key-removal-version.pin.test.ts, where both sides added JOIN rows, and both were kept. Nothing needed regenerating afterwards.scripts/pm/os-regen-merge.shwas refused by this container's command classifier, so a plaingit merge origin/mainwas used, followed by build +check:generated.Acceptance notes
@objectstack/lintgets no changeset: only a test file changed there, and test files do not publish.registry.ts.templatestill namesshowStaramong the keys declared at 17. That text records a past step and is left as is.Generated by Claude Code