# Semantic Identities Outlast Structural Selectors
## Claim
Extension code stays compatible across a host application's markup changes when it targets an element's semantic identity (class, ARIA role, attribute) rather than its incidental position in the structure (tag type, column order).
<!-- atomicity: 1 idea ✓ -->
## Scope & conditions
- Holds when the host project exposes (even implicitly) a semantic contract — stable classes, roles, or attributes — that extension code can bind to instead of raw structure.
- Breaks when no such contract exists, or when an extension genuinely needs element-specific behavior the semantic layer doesn't expose.
- Does not claim semantic selectors are immune to breakage — only that they survive a strictly larger set of host-side refactors than structural ones do.
## Evidence
WordPress 7.1 moved the post-list table's row-header role (`scope="row"` plus the accessible name) from the checkbox cell to the title cell, for a real accessibility reason: screen readers were naming rows by a control that could be entirely absent for non-editable posts. The side effect: any extension CSS/JS keyed to `th.check-column`, or to row-actions living inside a `td`, breaks on 7.1. Class-based selectors targeting the same elements were unaffected by the swap. Core's own compatibility guidance is to support both `td` and `th` variants while straddling the version boundary — a workaround for not having relied on a semantic contract in the first place.
## Links
- [[3. Resources/Permanent Notes/Machine Consumers Make Semantic Markup a Commercial Requirement]] — because extends; both claims rest on the same mechanism (an accessible name/role exposed via markup), one for screen readers, one for AI agents parsing the same tree
- [[3. Resources/Permanent Notes/Canonical Sources Reduce Interface Drift]] — because applies-in; a semantic contract is the thing that lets a single canonical structure serve multiple consuming surfaces without each surface re-deriving its own coupling
- [[3. Resources/MOCs/Open Source Governance MOC]] — because applies-in; this compatibility cost is a recurring tax any actively-developed open-source platform imposes on its extension ecosystem
- [[WordPress Platform Design MOC]] — why identity-addressed things survive refactors that position-addressed things do not
## Tests / falsifiers
- Audit a sample of popular WordPress plugins' admin-table CSS/JS pre- and post-7.1: if class-based selectors break at a rate comparable to element-qualified ones, the claim is false.
- Find a case where a semantic/class-based contract itself changed as often as raw structure does — that would mean the "outlasts" comparison doesn't actually hold in practice, only in theory.
## Maintenance
- Last tended: 2026-08-16
- Next review: 2026-11-16
## Source
- [[3. Resources/Readwise/Articles/Post List Tables Row Headers Changed]] — Joe Dolson, Make WordPress Core dev note, 2026-08-03, ticket #32892.