Preserve author selector semantics across native block save shapes#623
Merged
Conversation
This was referenced Jul 18, 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.
Summary
core/buttoninteractive controls exactly onceFixes #622.
Root cause
Blocks Engine retained author CSS byte-for-byte while native Gutenberg conversion changed DOM save shapes. Source
spanelements promoted to Paragraph blocks gained generatedpwrappers that began matching source paragraph selectors. Source button anchors became an outer.wp-block-buttonplus inner.wp-block-button__link, allowing source class CSS and native style support to apply box geometry twice.The production artifact path also extracted author styles into manifest assets and skipped HtmlTransformer stylesheet materialization, so selector projection had to replace each normalized CSS asset in place rather than append a duplicate stylesheet.
Compatibility
This intentionally changes generated block classes and author stylesheet bytes when a supported source selector would otherwise target the wrong Gutenberg save-shape element. Accidental matches against generated Paragraph/button wrappers are corrected to preserve source DOM behavior.
Artifacts with multiple inline styles or repeated linked stylesheets may gain deterministic occurrence asset paths so source cascade order is retained. Stylesheet
mediametadata now flows through the materialization plan. Outputhashdescribes rewritten bytes whilesource_hashretains the original asset hash. Unsupported selector grammar remains byte-preserved rather than partially rewritten.Existing native block validity and zero-
core/htmlbehavior are retained. Consumers that depended on accidental generated-wrapper matches or previously collapsed stylesheet occurrences should review this output change.How to test
cd php-transformer && composer install --no-interaction.composer test.html-author-selector-provenanceand verify sourcepselectors target only blocks originating from source paragraphs.html-wrapper-button-selector-projectionand verify wrapper-driven source button selectors target.wp-block-button__linkonce.AI assistance
gpt-5.6-sol; Homeboy control-plane recovery was attempted