A single timeline. Every version Respira has shipped, with the stories behind the ones that mattered. Click into any release tagged story for the full write-up.
Runtime Abilities API collision guard, in the plugin's own source
fixRuntime Abilities API collision guard, in the plugin's own source. 7.4.6's per-class guard is injected into the bundled wordpress/abilities-api by a Composer post-install script, which a from-source composer install --no
fixOxygen Classic page JSON now matches an editor-saved page exactly. build_page wrote the canonical _ct_builder_json tree with a bare id root and no per-node depth / ct_depth; a natively saved Oxygen 4.9.x page uses ct_id
June 14, 2026
Patch. Oxygen 6 native page building. The agent now writes real, editable Oxygen 6 elements (sections, headings, text, buttons, images) instead of falling back to a single HTML
fixFIX: Oxygen 6 page generation collapsed to a single HTML code block instead of native, editable sections and modules. Respira's build path emitted Breakdance EssentialElements\* element classes, which a pure Oxygen 6 sit
fixFIX: update_element and extract/inject round-trips on Oxygen 6 could report success while persisting nothing — the edit landed in an attribute bucket the rebuild ignored. The Oxygen 6 build path now reads content from th
What the agent writes is what actually lands on the page
A deep pass through every supported builder, closing the gaps where a write reported success but the page stayed stale or blank. Styling now lands on Oxygen, Beaver Builder, Elementor v4 Atomic, Bricks, Divi 4 and Divi 5. Brizy and Visual Composer move from read to write, with their caveats stated. Recovery gets deeper: custom CSS and page settings are captured, and globals are versioned, so deleting a Bricks global class, a Divi preset, or an Elementor kit color leaves a recovery point. And when something cannot be persisted in a way the builder reads, Respira says exactly what did not land instead of reporting success. Every fix verified on a real site by loading the actual rendered page.
addBrizy moved from read to write. Respira can now write Brizy pages that Brizy's own editor opens and the front end renders. Writes are labeled with their caveats in the docs (front-end compile depends on Brizy's compiler
addVisual Composer moved from read to write. Respira now writes in VC's canonical storage format, so the editor loads the page and the front end renders. Labeled with its caveats (VC recompiles on the next editor save)
addGlobals are now versioned. Deleting a Bricks global class, a Divi preset, or an Elementor kit color now leaves a recovery point. "The agent deleted my global class" used to be unrecoverable; now you can roll it back. Res
addYour own custom CSS and page settings are now captured in snapshots, so the edits Respira makes to things like custom CSS are recoverable, not just the main content
addLoud-drop behaviour across builders. When a value cannot be persisted in a way the builder reads, Respira names exactly what did not land and tells the agent not to retry blindly. This is the systemic version of the per-
addAn internal check now runs across the test fleet to confirm that every builder function Respira calls actually exists in that builder. It would have caught several of the silent failures below the day they were written,
fixOxygen: generated CSS was being written without the selectors it needed, so styles never reached the page. Element styling now renders, and dynamic content resolves correctly. Code blocks that contained quotes could corr
May 28, 2026
write_was_noop detector is now builder-aware
fixwrite_was_noop detector is now builder-aware. Pre-fix the v7.0.61 byte-conservation check snapshotted post_content before and after the write. Four of the seven adapters (Elementor, Bricks, Beaver, Oxygen, Breakdance, Br
fixElementor update_element repeater controls can now shrink. Pre-fix, update_element merged the wrap-target attrs via array_replace_recursive. For repeater controls (icon_list, gallery, tabs, social_icons) that's index-bas
fixElementor _elementor_data decode survives stray invalid UTF-8 bytes. Pre-fix, payloads containing a single bad byte (lone surrogate, mid-codepoint splice from copy-paste) tripped json_decode → JSON_ERROR_UTF8 and fell ba
fixbuild_page on Elementor preserves declared children + canonicalises widget shorthand. Pre-fix, complexify_structure only walked $item['elements'] for children — payloads using the cross-builder children key (the document
fixread_theme_file extension parse is now locale-independent. Pre-fix, pathinfo($relative, PATHINFO_EXTENSION) returned ?y? for vds/css/custom.css and empty-string for vds/style.css on at least one VMG-Agency host with an e
fixMCP per-page builder auto-detect now reads active_builder.name. Pre-fix, the fallback resolver in extractBuilderContent / getPageOutline / getBuilderInlineSchemas read info?.name from /context/builder-info. The endpoint
May 28, 2026
Per-page builder auto-detect now reads active_builder.name
fixPer-page builder auto-detect now reads active_builder.name. The fallback resolver in extractBuilderContent, getPageOutline, and getBuilderInlineSchemas read info?.name when builder was omitted, but /context/builder-info
noteThe companion plugin v7.0.64 bundles five plugin-side fixes; the most important is making write_was_noop builder-aware so Elementor / Oxygen / Bricks / Beaver writes stop tripping the noop signal on every successful call
May 27, 2026
Per-client HTTP agents + destroy-on-watchdog-trip
fixPer-client HTTP agents + destroy-on-watchdog-trip. Pre-v6.19.3 the WordPressClient axios instances used Node's shared http.globalAgent / https.globalAgent. When a write tool hung past RESPIRA_MAX_TOOL_TIMEOUT_MS the watc
fixrestore_snapshot polls for completion when the request times out. Heavy Divi / Oxygen pages can take 1-3 min to restore; pre-v6.19.3 the synchronous POST exceeded axios's 30s timeout even though the server-side restore c
rmwordpress_search_abilities MCP tool. Hit /wp-json/respira/v1/abilities/search, a route the plugin never registered. Every call 404'd. wordpress_get_builder_info + wordpress_search_docs cover the discoverable surface; wor
schemawordpress_move_element + wordpress_reorder_elements aligned with the plugin contract. The MCP schemas shipped param names the plugin handlers never read; the plugin handlers had to be patched in 7.0.59 to accept the lega
May 21, 2026
Respira_Builder_Tree_Utility::matches() content identifier_type now deep-searches options / attrs / settings
fixRespira_Builder_Tree_Utility::matches() content identifier_type now deep-searches options / attrs / settings. Pre-7.0.51 the content matcher only checked $element['content'] (Elementor / Divi 4 top-level string) and $ele
fixupdate_element adds a normalize_element_updates($existing_element, $updates, $wrap_target) hook on Respira_Builder_Interface; Oxygen overrides it to route ct_image / ct_image_overlay flat patches into options.original. P
noteVerified end-to-end on Studio :8882 with Oxygen Classic 4.9.7. Test fixture: synthetic page with a ct_text_block whose options.ct_content is "Hello world<br>this is a paragraph ending in br" plus a ct_image with options.
noteThe normalize_element_updates hook lands on the interface as an optional method — adapters that don't override it pay no cost. Future adapter-specific patch normalisations (Beaver's nested font field family, Breakdance's
noteWider M.P. Härtetest findings: items #1, #2, #3, #5 are addressed by v7.0.47 → v7.0.50 (already shipped); the 4-minute timeout he flagged separately should also clear once v7.0.49's auto-heal removes the upstream 500 tri
May 21, 2026
divi_render_critical_attrs() no longer flags divi/column nodes missing attrs.type
fixdivi_render_critical_attrs() no longer flags divi/column nodes missing attrs.type. The render-critical-attrs map was introduced in v7.0.0 Bloom Phase B to catch LLM hand-writes that would render empty (heading without ti
noteVerified on Studio :8882 with synthetic 5-section Divi 5 tree containing 9 divi/column nodes with attrs => [] (the round-trip shape): validator returns 0 entries. Counter-test with deliberately bad leaf modules (heading
noteThis release narrows the validator surface but does NOT fix the broader inconsistency between build_page (skip validator) and inject_builder_content (apply validator). That's a deliberate scope decision: the column rule
noteThe Nettl reporter posted a very precise repro (5 sections, 4 rows, exact node counts) plus a working hypothesis pointing at content.innerContent. The actual root was different but the report's structured shape made the
May 21, 2026
Respira_API::update_post_meta_fields() validates _wp_page_template against the active theme's registered templates
fixRespira_API::update_post_meta_fields() validates _wp_page_template against the active theme's registered templates. Uses wp_get_theme()->get_page_templates($post, $post_type) (the same method WP core's REST controller us
fixRespira_Builder_Oxygen::inject_content() validates ct_template before the auto-set. Pre-7.0.48 the Oxygen adapter wrote _wp_page_template=ct_template whenever the existing value was empty or 'default', no matter whether
noteVerified end-to-end on Studio :8882 with Uncode theme active and Oxygen Classic 4.9.7 active. get_page_templates() returns an empty array on that stack. Test fixture: API call with _wp_page_template=ct_template correctly
noteThe v7.0.39 diagnostic envelope + v7.0.47 shutdown handler stay in place. Together with the v7.0.48 source-side guard the layered defence is: (a) bad value never reaches WP_REST_Posts_Controller (this release), (b) if so
noteThe Oxygen adapter still logs the skip explicitly because losing the page-template auto-set CAN matter on themes that override the page render. The customer-facing impact in that case is "page renders via theme template
May 9, 2026
README accuracy pass: 30 skills
change8 slash commands for the most common workflows
change30 auto activating skills, broken down as:
change1 visual reviewer sub agent that shows what changed after every edit
changeFull access to all 180+ Respira MCP tools through the bundled @respira/wordpress-mcp-server
Every page-builder adapter promoted to deeper-intelligence parity
The biggest release since v5. Every builder adapter promoted in lockstep. Five cross-cutting Phase A invariants every adapter now inherits — render-validation gate, universal write-trace, Variables CRUD shape, source-driven catalog auto-scan, per-property typed validators — plus Phase B slices per builder that close the family-bug arcs surfaced across v6.10.x. 1076 standalone test assertions across 27 alpha cycles, zero failures.
phaseA.1 Render-validation gate. Post-write check: HEAD-fetch the preview URL plus parser-walk the persisted blob using the parser the adapter declares. 9 parser slugs ship. Either failing surfaces partial_write: true with st
addOxygen Deep Intelligence: Full intelligence package for Oxygen Builder — 49 components cataloged with properties, types, defaults, and nesting rules. Component registry with dynamic detection and 24-hour caching. JSON Sc
addOxygen Settings Validator: Validates component properties and data types before injection — colors, URLs, emails, numeric values, booleans, and arrays all checked with detailed error messages
Showing the most recent 108 releases. Older entries are in the full CHANGELOG.md on GitHub. Every release follows semver.org.
cookies. the legal kind. one click and i'll get out of your way.
what you'd actually be saying yes to
tune your cookie preferences
essentials stay on regardless. the rest is opt-in. nothing fires until you tap save.
essentials
the cookies that make logging in work and remember which partner sent you. switching these off would just break the site, so the law does not let me make you opt out.
first-touch source on a /respira_acq cookie, plus a flag if an ai chatbot referred you. helps me figure out what is working without turning you into a tracking pixel statue.
messaging
customer.io for in-app notes, chatwoot when you click the support bubble. off by default. on means i can actually answer you in the app.