Skip to content

feat(spec): retire the element:filter element at element grain (#9220, ADR-0049) - #9250

Merged
os-steve merged 4 commits into
mainfrom
claude/issue-9220-element-filter-adr0049
Aug 17, 2026
Merged

feat(spec): retire the element:filter element at element grain (#9220, ADR-0049)#9250
os-steve merged 4 commits into
mainfrom
claude/issue-9220-element-filter-adr0049

Conversation

@os-steve

Copy link
Copy Markdown
Collaborator

Fixes#9220

Verdict first (measurement-first card — recorded on the issue before any removal work)

DEAD at element grain. Full table in the measurement comment. Summary: at objectstack 2f65b1b42 and objectui 5ffcc14 (read-only sweep), no renderer or behavior reader of element:filter exists anywhere — objectui's only hits are a stale comment (renderers/basic/elements.tsx:18) and a PALETTE_EXCLUSIONS entry, i.e. Studio deliberately does NOT offer the element and records "no renderer" as the reason, answering the dispatch's palette question in the inverse direction. The 2026-06 page-liveness audit (docs/audits/2026-06-pageschema-property-liveness.md) had already recorded it rendering "Unknown component type". Cloud was not reachable from this session: the cloud half of the verdict relies on the card's recorded sweep (taken at objectui 372d9f9b4) and the triage 04:44Z re-verification, not on a fresh reading.

What this PR does (the #9198 / PR #9221 precedent, one grain wider)

Verification (all at final head bd4495c0d unless noted)

  • pnpm --filter @objectstack/spec test: 407 files / 10848 tests passed at a75d602d6; git diff a75d602d6..bd4495c0d -- packages/spec is empty, so the result stands for this head byte-identically.
  • pnpm --filter @objectstack/lint test: 2065 passed (was 2064 passed / 1 failed before the residue drop — that red run is the gate demanding the lint edit).
  • Reverse verification (from the committed state): restoring the OLD element:filter negative control turned conversions.test.ts red exactly as predicted — the new conversion strips the control to properties: {}, failing the fixture-equality assertion — proving the flip was load-bearing; restored and green (164/164).
  • turbo run build full workspace closure: 70/70. turbo run typecheck --filter='...@objectstack/spec' (spec + downstream consumers, prefix filter): 125/125 — the tombstones' never typing swept every authoring site clean.
  • check:generated: all 13 artifacts up to date. Light union all PASS: merge-driver, spec-parsed-alias, type-source-resolution, objectui-changeset, quick-reference-counts, role-word, adr-0087-registration, changeset-no-major, cross-package-test-inputs, empty-changeset, dev-prereqs, docs-audit affected-docs, nul-bytes, query-options-erasure, engine-double-contract, where-matcher, type-check-coverage, variant-docs, empty-state, skill-examples. check:type-check-debt --re-measure: 33 entries, no surplus.

Cross-repo follow-ups (for the PM to file; objectui deliberately not edited)

Out-of-scope finding filed unassigned: #9249 (element:form declares a full form contract; same no-renderer shape measured during this card's sweep — needs its own verdict measurement). #6590's element:filter half is mooted by this retirement; its element:form half stands.


Generated by Claude Code

… ADR-0049)
No renderer or reader for element:filter exists in any repo (objectui registers
none; Studio's palette lists it as a no-renderer exclusion; the 2026-06 audit
recorded it rendering 'Unknown component type'). All six authorable keys are
retiredKey() tombstones; the ComponentPropsMap row stays so the #5068 props
gate keeps refusing loudly; the PageComponentType enum entry is removed
(de-advertisement — the open string arm makes it parse-neutral). D2 conversion
element-filter-removed (protocol 18) strips the keys from old sources; the
#9198 conversion's negative-control fixture moves to an open-union custom type
(pre-registered flip). Pin tests, regenerated baselines/docs, minor changeset
per the post-17.0.0 launch-window convention.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Fs18A2DdXLVN2h8PaaFBcP
#9220)
The package's own component-field-specs-liveness gate (#6629) refuses entries
naming retired keys; the element-grain tombstones turned it red with the exact
prescription to drop the entry. Patch changeset for @objectstack/lint.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Fs18A2DdXLVN2h8PaaFBcP
…al clear)
Merge of origin/main (2abb66b) into the #9220 branch; regenerated
gen:schema + gen:docs + gen:openapi from the merged tree per
scripts/pm/os-regen-merge.sh step 4. Survival asserted: step-18 block,
six ElementFilterProps retired-keys entries, element-filter-removed
conversion, fixture control, and the reference pages under the merged
(#9239) generator.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Fs18A2DdXLVN2h8PaaFBcP
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 2 package(s): @objectstack/lint, @objectstack/spec, touching 16 documentable anchor(s).

1 hand-written doc(s) NAME something this change touched and may need an implementation-accuracy re-verification:

  • content/docs/ui/pages.mdx(via PageComponentType (symbol))

1 release-owned page(s) also name something this change touched. These are read-only:

  • content/docs/releases/v17.mdx(via ComponentPropsMap (symbol))

content/docs/releases/ is RELEASE-OWNED (AGENTS.md "Documentation Guardrails"): release
notes are written centrally at release time, and a code PR that edits them is the exact PR
that guardrail exists to stop. They are still audited — read-only. If one of them is actually
wrong, file an issue or open a dedicated docs-only PR; do not edit it here.

What this run could not see
  • 8 changed file(s) yielded no anchor (packages/spec/authorable-defaults/ui.json, packages/spec/authorable-surface/ui.json, packages/spec/src/migrations/entries/retired-keys/18.ui__ElementFilterProps__aria.ts, …) — pages documenting those are invisible to this run
  • 5 name(s) were too generic to anchor anything (single lowercase words)

Coarse fallback — 113 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 origin/mainpackageMentionDocs.

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 origin/main → pass the list as args.docs.

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation tests protocol:ui tooling labels Aug 17, 2026
@os-steve
os-steve marked this pull request as ready for review August 17, 2026 07:25
@os-steve
os-steve added this pull request to the merge queueAug 17, 2026
Merged via the queue into main with commit 62b1427Aug 17, 2026
27 checks passed
@os-steve
os-steve deleted the claude/issue-9220-element-filter-adr0049 branch August 17, 2026 07:44
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationprotocol:uisize/lteststooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ADR-0049 candidate: element:filter declares targetVariable (and possibly the whole element) with no renderer or reader in any repo

2 participants

@os-steve@claude