Repository navigation
Description
Problem
WordPress has added useful native blocks and Gutenberg is expanding existing layout controls. Block Runner needs a clear account of what is available, what our current paths already accept, and what has actually been proved in the editor. A missing switch case is not the same thing as an unsupported block: the intent assembler deliberately passes registered names, attributes and children through to Gutenberg.
This tracks the September 2026 catch-up. The immediate work is native Tabs page-content proof and generated-block compatibility. The research below carries the implementation boundaries so the next agent can start with verification rather than repeat ecosystem research.
Source map
Inspected revision: ff523334a09bf6a7a9f98eb625f211708f486909 (v0.9.8, verified as GitHub main on 2026-09-27). Repository findings came from this commit. The reviewed source uses @wordpress/block-library 11.0.0, @wordpress/blocks 16.0.0 and @wordpress/block-editor 17.1.0; runtime proof pins Core to WordPress/WordPress#7.1.
| Read first | Responsibility / evidence |
|---|---|
src/intent/index.ts, assembleNode/realize |
Arbitrary registered block names can already use open attrs and children; the CLI route runs shared finalisation. |
skills/block-runner/references/ASSEMBLE.md |
Page-content instructions currently cover Accordion, ordinary Gallery and native Query. No explicit Tabs, Playlist, Icon or Breadcrumbs instructions were found here. |
src/authoring/capabilities.ts |
Checks registered native nesting and save round-trips. Declared editable fields are separately limited to Heading, Paragraph, List Item, Image and Button attributes. Registry presence does not grant editable-field support. |
src/media/apply.ts, visit |
Recurses through children but resolves URL/ID pairs only for core/image and core/cover. Playlist attachment support cannot be assumed. |
src/authoring/generate.ts |
Current generated static template placement and asset imports. |
dev/test/intent-query.test.ts, proof-query-wordpress.test.ts |
Reusable pattern for distinguishing native assembly from actual server/editor/frontend behaviour. |
dev/benchmarks/specs/accordion/expected.json |
Accordion coverage already exists. Its sentence saying Core first gained Accordion in 7.1 is stale: the 6.9 Field Guide lists Accordion in 6.9. Correct the release attribution without changing expected trees or claiming new scores. |
Research and decisions
Verified on 2026-09-27. "Available" here describes upstream release status, not Block Runner runtime acceptance.
| Surface | Upstream fact | Decision for this catch-up |
|---|---|---|
| Tabs | Shipped in WordPress 7.1. core/tabs contains core/tab-list and core/tab-panels; panels contain content. The saved button-label array must match the panel labels. |
Execute #117. Qualify explicit intent and native editing first. Do not add arbitrary HTML recognition or promise registered-block label overrides. |
| Playlist | Also shipped in 7.1. 7.1 metadata permits core/playlist-track children and audio/waveform settings. |
Defer implementation until an audio-collection input is in scope. A later issue needs attachment/track metadata, playback and persistence proof; current image/cover media resolution does not cover it. |
| Icon | Shipped in WordPress 7.0; 7.1 opens custom icon collections. 7.1 metadata takes an icon string, not arbitrary SVG markup. |
Next coverage candidate after Tabs. Require an icon registered on the destination and prove rendering there. Existing static SVG delivery is not equivalent to registering an icon collection. Do not silently replace a supplied brand SVG with a vaguely similar stock icon. |
| Breadcrumbs | Shipped in 7.0; Core's filters operate on site/post hierarchy. | Defer to an explicit site-context task. A static HTML trail does not establish the intended dynamic hierarchy. Native rendering needs a seeded target-site control. |
| Gallery Grid | Gutenberg 24.0 adds the Grid variation and viewport-aware columns/cropping. Pinned variation source selects core/gallery with layout.type: "grid". It is not a separate core/gallery-grid block. |
Retain existing Gallery support. Qualify Grid only on an explicitly supported Gutenberg/Core target. Plugin 24.0 availability must not become a blanket WordPress 7.1 promise. Compare desktop/mobile layout, crop, links and image IDs. |
| Description List | The 7.2 roadmap proposes core/description-list, core/description-term, core/description-detail for dl, dt, dd. |
Wait for the accepted release contract. Later coverage should include specs, glossaries and metadata, preserving term/detail relationships across several fixtures. |
| Table of Contents | The same roadmap proposes stabilising the experimental block through server-side rendering. | Treat as a proposal. A later proof needs heading changes, anchors and editor/frontend agreement; a stored list of links cannot establish dynamic behaviour. |
| Responsive styles / background gradients | 7.1 ships responsive styles; new background-gradient support can combine an image and gradient. 7.2 proposes more controls and custom states. | Audit actual output capabilities before adding adapters. Preserve exact authored CSS where native controls cannot express the same result; no blanket claim that all responsive designs now map natively. |
| Static template placement | Gutenberg 23.8 introduces settings-based templates; 24.0 retains the old prop with a deprecation. WordPress 7.1 lacks the new lookup. | Execute #118. Do not remove the prop or move it into block.json merely to silence a warning. |
Upstream conversion work to keep distinct
Gutenberg #82013 remains an open draft, with no merge commit, at head 4271324bb9aae49a53706c18d563b98aec91c7f1. It proposes declarative transforms plus PHP conversion. WP-CLI #20 is a dependent draft, not an available released command. These are candidates for a later matched conversion comparison; they do not justify replacing our rules walker with rawHandler.
WordPress AI #1061, opened on 25 September, explicitly names Block Runner in a discussion about a shared conversion tool/skill. It is in discussion with no attached implementation. Participation is a separate communication decision; this issue does not authorise posting upstream.
The 7.2 schedule puts Beta 1 on 20–22 October and final release on 8–10 December. Those are review points, not guarantees that roadmap items ship. React 19 is noted on the roadmap as unlikely to land fully in 7.2; collaborative editing is excluded.
Implementation contract
- Complete the two linked, bounded handoffs. Each carries its own fixture/API contract, source links, owned paths and runtime checks.
- Correct the Accordion release-attribution sentence and any identical source claims found in the same benchmark fixture family. Keep expected structures and measurements intact.
- Record the resulting supported boundary in
docs/reference.md: native page content, registered-block composition, editable fields and live runtime proof are separate claims. - Keep Icon, Playlist, Breadcrumbs, Gallery Grid and 7.2 proposals as explicit deferred decisions in this issue. Promote an item only with a scoped follow-up that names its target runtime and the user outcome it proves.
- No model benchmark is required for this catch-up. A guide change is not a measured improvement in model conversion quality.
Proposed diff
Proposed work split, not implemented:
September 2026 native-block catch-up
- coverage inferred from upstream availability or a block-name search
+ explicit Tabs tree -> shared gate -> native save/reopen/frontend receipt
+ same generated plugin -> Core patch/plugin compatibility matrix
+ corrected Accordion release attribution
+ public support claims tied to the route and runtime actually tested
+ later block candidates retain the source contracts and promotion conditions aboveScope
- Owned paths for this tracker: narrowly scoped release-attribution wording in
dev/benchmarks/specs/accordion/expected.jsonand related FAQ descriptions if the same incorrect claim appears;docs/reference.mdfor final evidence-backed support wording. Child issues own their implementation paths. - Out of scope: speculative support for every listed block, automatic SVG registration, dynamic-content inference, an unconditional dependency upgrade, changing the intent schema, replacing the converter, public proof-schema expansion, paid benchmarks, releases, publishing sites and messages to upstream maintainers.
- Keep public repository content self-contained. Do not depend on machine-local notes, private projects or unpublished benchmark output.
Acceptance criteria
- The Tabs handoff and compatibility handoff each have retained evidence or a clearly recorded unresolved upstream/environment boundary.
- Documentation claims no more than their observed proof; registered native blocks are not automatically advertised as supported editable fields.
- The Accordion release attribution is corrected without changing expected block trees or existing scores.
- Each deferred candidate retains a clear target-runtime/promotion condition, so a future executor can start from the captured source contract.
- The catch-up does not silently enable experimental block behaviour or claim an unrun model benchmark, manual acceptance or release.
Verification
Research already completed: GitHub main was read through the API and matched the inspected release commit; open and closed repository issues were reviewed for overlap; repository assembly, skill, media, authoring and proof boundaries were inspected; exact WordPress 7.1 metadata and editor code plus Gutenberg 24.0 template/Gallery source were fetched. No new native-block runtime test was run while writing this tracker.
The child issues specify executable verification commands. For the tracker's wording-only edits, parse the changed JSON, compare the tree field against the inspected revision. This direct check is sufficient for the attribution-only fixture edit:
python3 - <<'PY'
import json, pathlib, subprocess
base = "ff523334a09bf6a7a9f98eb625f211708f486909"
for family in ("accordion", "faq-accordion", "faq-rich"):
path = f"dev/benchmarks/specs/{family}/expected.json"
before = json.loads(subprocess.check_output(["git", "show", f"{base}:{path}"]))
after = json.loads(pathlib.Path(path).read_text())
assert before["tree"] == after["tree"], path
print("JSON parsed; expected trees unchanged.")
PYRead back the final support wording against the child receipts before closing this issue. Do not turn successful source lookup or green static checks into frontend/editor evidence.
Dependencies and open decisions
#117 and #118 are the immediate work. Tabs can proceed independently of the compatibility runner. Description List and Table of Contents depend on the upstream 7.2 contract; Gallery Grid requires an explicit plugin/Core support choice; Icon needs destination registry evidence; Playlist and Breadcrumbs need a concrete consumer scope. Those decisions are intentionally not delegated as permission to expand this catch-up.
Activity