Skip to content

feat(spec): retire page.components[].responsive (ADR-0049 D2) and repair the four redirect texts (#11027) - #11685

Merged
os-warren merged 3 commits into
mainfrom
claude/issue-11027-retire-page-responsive
Aug 24, 2026
Merged

feat(spec): retire page.components[].responsive (ADR-0049 D2) and repair the four redirect texts (#11027)#11685
os-warren merged 3 commits into
mainfrom
claude/issue-11027-retire-page-responsive

Conversation

@os-warren

@os-warrenos-warren commented Aug 24, 2026

Copy link
Copy Markdown
Collaborator

Fixes#11027

Maintainer ruling (2026-08-22, 「同意所有」 item 11, recorded in comment 5380752244): B — retire page.components[].responsive (ADR-0049 D2) and repair the four author-facing redirect texts in the same change. Playbook: spec-property-retirement.

What this does

page.components[].responsive was the LAST carrier of the ResponsiveConfig per-breakpoint LAYOUT block — and the destination four shipped texts prescribed, verbatim, as the live alternative after #4876 retired its widget sibling. The card's two-repo census (tsc-probe methodology, positive + negative controls) measured the claim false: objectui's two complete implementations of the contract (useResponsiveConfig, ResponsiveProtocol) have zero callers, nothing reads .responsive off a page component, objectui's own BaseSchema never declared the key, and zero authored instances exist. So:

Note on the skills/** hunk (split attempted and withdrawn)

skills/objectstack-ui/references/_index.md (one regenerated line — the file's headline changes when the retired family leaves responsive.zod.ts) was briefly split out to #11696 under the governed-surface one-hit rule, at the PM's instruction. The PM withdrew that instruction after check:skill-refs went red on the split head — the gate byte-compares the committed index against a fresh render of the tree's own sources, so a generator-owned hunk cannot be green on either side of a split, and main would sit red between the two landings. The line is back in this PR (restored at d9bb37b2, check:skill-refs verified in sync locally); #11696 is closed. For the maintainer at landing time: with this generated skills/** path in the diff, Prime Directive #14 as written still makes this PR human-merge-only unless the generated-artifact exception is extended to cover it (the exact #9866 shape that produced the .claude/workflows/docs-accuracy-audit.js exception).

Ratchet readings (route: whole-def deletion + one tombstoned key — the readings match the route)

Liveness-ledger disposition (recorded, not drilled)

The walk drills ONE level through explicit children; page.components[] sits two levels down (regions[].components[]) and no ledger file anywhere nests children, so no walked coordinate for this key can exist. Drilling page/regions one level would classify only region keys and leave components a NEW invisible blanket (the #4956 shape recursed, and worse than the recorded gap). Disposition: page/regionsstays RECORDED in undrilled-containers.baseline.json (the gap for the other ~12 component keys is real and stays visible); the retirement's machine-checked record is the authorable-surface [RETIRED] row + RETIRED_KEYS_BY_MAJOR[18] (the #5898 aging clock) + the D2 conversion; page.json carries a dated prose record in _note and the regions row so a future driller inherits the verdict.

Verification record

Gate / suiteResult
@objectstack/spec build (tsc sweep = tombstone channel)PASS
Full workspace build (70 packages)PASS
@objectstack/spec tests420 files, 11202 tests PASS
check:liveness · empty-state · authorable-surface · docs · api-surface · spec-changes · upgrade-guide · skill-refs · skill-docs · skill-examples · migration-registry · export-origins · strictness-ledger · variant-docsall PASS (skill-refs re-verified in sync at d9bb37b2)
check:meta-url-spelling · exported-any · dual-source-exports · browser-reachable-entries · objectui-pin-citations · react-blocks · template-manifests · test-typecheck · scripts-typecheckall PASS
pnpm check:i18n (root; no form inputs existed for the key, bundles unchanged)PASS (EXIT=0 captured explicitly)
dispatch-gates named families: adr-0087-registration · changeset-no-major · cross-package-test-inputs · dev-prereqs · doc-frontmatter · empty-changeset · plugin-teardown-shape · section-landing-index · docs-audit affected-docs · release-rehearsal self-test · test-source-alias · type-source-resolution · query-options-erasure · type-check-coverage · type-check-debt · engine-double-contract · where-matcherall PASS
Consumers: packages/lint (2271 tests) · CLI migrate-meta.e2e (14, replays the new conversion + idempotence) · qa/dogfood expression-conformance (3) · examples/app-showcase tsc + tests (362)all PASS
check:react-declaration-parityNOT RUN — requires a sibling objectui checkout/manifest; objectui is ⛔ out of this session's scope. CI's own job carries it.

The third leg (premise check, per the ruling)

#11029 (cloud census, repo:cloud) is still OPEN with no reading posted as of 2026-08-24. The ruling converts the cloud leg into a premise check: if the cloud greps surface a real consumer before landing, this PR stops and the card gets a report instead. Recorded status: pending, zero consumers surfaced so far. Whoever assembles the train: re-read #11029 before merge.

Landing train — PARKS AS DRAFT

Per the #10986 rule and the claim comment (5394270160): this PR ships together with objectui#4773's fix (the two dead consumer implementations + MobileComponentConfig) and the console pin bump, or not at all — and after #11029's cloud reading returns zero. Removing the spec exports before the objectui half lands would break ResponsiveProtocol's SpecResponsiveConfig import at the next pin bump, which is exactly why the train exists. Train assembly is the PM/maintainer's coordination item; this PR stays draft until the train is assembled.

Out of scope (deliberate)

  • objectui's two dead consumer implementations — ui#4773 (⛔ cross-repo, its seat's half). No text in this PR points authors at them any more.
  • docs/adr/** (constraint) and dated audit/analysis records (docs/audits/2026-07-…ledger.md row, docs/notes/airtable-dashboard-analysis.mdx, ADR-0021's dashboard sketch) — historical measurements, left as records; the generated counts companion regenerated.
  • content/docs/releases/** — untouched (repo rule); the changeset is the release-notes input.

🤖 Generated with Claude Code

https://claude.ai/code/session_013Uia4VoGZrEQpskAy1Dq8j

…air the four redirect texts (#11027)
The last carrier of the ResponsiveConfig layout block measured dead across
both repos (zero callers of useResponsiveConfig / ResponsiveProtocol), so the
key is a retiredKey() tombstone and the orphaned value schemas
(ResponsiveConfigSchema, the two breakpoint maps, BreakpointName) leave with
it. Every shipped text that prescribed the key as the live alternative — the
#4876 widget tombstone, the generated references, the upgrade-guide prose,
the protocol-17 migration rationale, the conversion summary, and the
dashboard liveness note — is corrected to point at responsiveStyles
(ADR-0065). ADR-0087: retired-key + retired-def entries under protocol 18 and
the page-component-responsive-removed conversion, wired into the step-18
chain.
Co-Authored-By: Claude <noreply@anthropic.com>
@github-actionsgithub-actionsBot added size/xl documentation Improvements or additions to documentation protocol:ui tests tooling labels Aug 24, 2026
@github-actions

github-actionsBot commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 1 package(s): @objectstack/spec, touching 26 documentable anchor(s).

26 hand-written doc(s) name something this change touched — list omitted above 15 rows. Re-derive on the tree named below: node scripts/docs-audit/affected-docs.mjs --json ffbb7a100bc02679f8f38029612135e6a0ef7ff1.

4 release-owned page(s) also affected — read-only, see AGENTS.md Documentation Guardrails.

What this run could not see
  • 12 changed file(s) yielded no anchor (packages/spec/api-surface/ui.json, packages/spec/authorable-surface/ui.json, packages/spec/export-origins/ui.json, …) — pages documenting those are invisible to this run
  • 10 name(s) were too generic to anchor anything (single lowercase words)
  • the SDK route bridge reached 45 of 222 client-bound route-ledger rows — the other 177 have no registrar path: tail to select them, so pages documenting THEIR client methods cannot appear above, on this or any run: node scripts/docs-audit/affected-docs.mjs --bridge-coverage

Coarse fallback — 126 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json ffbb7a100bc02679f8f38029612135e6a0ef7ff1packageMentionDocs.

Which tree this was computed on

This run read content/docs from 5c2b11c952316dd067f4cac974ab0ac219504160 — the merge of head d9bb37b2828dcbff2f6f62ebdbda514a42667add into base ffbb7a100bc02679f8f38029612135e6a0ef7ff1, which is what actions/checkout gives a pull_request run. Not the PR head.

A worktree cut from an older main holds a different content/docs, so re-deriving there can legitimately return a different list — that is a different tree, not a wrong row. To answer on the same tree:

# while this PR is open — GitHub drops the merge commit once it closes
git fetch origin 5c2b11c952316dd067f4cac974ab0ac219504160 && git checkout 5c2b11c952316dd067f4cac974ab0ac219504160
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin ffbb7a100bc02679f8f38029612135e6a0ef7ff1 d9bb37b2828dcbff2f6f62ebdbda514a42667add && git checkout -B drift-repro ffbb7a100bc02679f8f38029612135e6a0ef7ff1 && git merge --no-ff d9bb37b2828dcbff2f6f62ebdbda514a42667add
node scripts/docs-audit/affected-docs.mjs --json ffbb7a100bc02679f8f38029612135e6a0ef7ff1

⚠️ That checkout carried uncommitted changes, so the commit above does not fully identify what was read.

Advisory only, and a precision-first one (#9192): a page is listed because it names a
symbol, wire route or SDK method this diff touched — not because it mentions a changed
package. Each row says which anchor put it there, so a wrong row is reportable rather than
merely annoying. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs ffbb7a100bc02679f8f38029612135e6a0ef7ff1 → pass the list as
args.docs, on the commit named under Which tree this was computed on.

…ls/** is a governed surface
One governed-path hit forks the whole PR to human-merge-only (AGENTS.md Prime
Directive #14: a mixed diff is not a proportion question). The regenerated
skill-reference line moves to its own PR, which lands only after this
retirement — until then check:skill-refs reads the committed line as stale
against this branch's sources by design.
Part of #11027
Co-Authored-By: Claude <noreply@anthropic.com>
…the governed-surface split
check:skill-refs byte-compares the committed index against a fresh render of
this tree's own sources, so the generator-owned line must ride the source PR:
split out, it left this branch (and would have left main, between the two
landings) red on that gate. Regenerated with gen:skill-refs, verified in sync.
Part of #11027
Co-Authored-By: Claude <noreply@anthropic.com>
@os-warren
os-warren marked this pull request as ready for review August 24, 2026 14:48
@os-warren
os-warren added this pull request to the merge queueAug 24, 2026
@os-warren
os-warren marked this pull request as draft August 24, 2026 14:48
@os-warren
os-warren marked this pull request as ready for review August 24, 2026 14:49
Merged via the queue into main with commit 2a6122bAug 24, 2026
39 checks passed
@os-warren
os-warren deleted the claude/issue-11027-retire-page-responsive branch August 24, 2026 15:08
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationprotocol:uisize/xlteststooling

Projects

None yet

3 participants

@os-warren@os-zhuang@claude