Added — Class names and IDs typed in the HTML inspector appear as chips in the CSS selectors panel and become a real selector on the first style edit.
Added — Rename a chip inline; if the new name matches an existing selector, it links to it instead of creating a duplicate.
Improved — Class names used in Twig expressions auto-load their matching selector's CSS without freezing the expression's editor-time value.
Fixed — Renaming a CSS selector cleanly updates every block using it.
Fixed — {{ site.option('field_name') }} now returns values from ACF Options Pages, including translated values when a multilingual plugin (WPML, Polylang Pro) is active.
Added — AI chat reliably completes complex multi-step requests (e.g. landing page with a generated hero image) on any AI provider and any model, including weaker or auto-routed ones that previously left the editor empty or partially built.
Improved — External AI tools connected via MCP (Claude Desktop, ChatGPT, etc.) can now build dynamic content (loops, conditions, {{ post.title }} and other data bindings) instead of being limited to static HTML.
Fixed — Simple AI edits (rename a title, remove a block, etc.) now run as a single faster request instead of triggering a wasted follow-up call.
Fixed — Fatal error on activation under PHP 8.1 caused by a true literal return type (PHP 8.2+ syntax) in the AI environment check.
Added — AI image generation respects requested aspect ratios (16:9, 4:3, 9:16, etc.) when supported by the provider; falls back transparently when the provider rejects the field (e.g., Google Imagen).
Added — unblock/ai/image/model_preference filter to override the model used for AI image generation (string or ordered fallback list).
Added — Plugin version badge in the Settings modal header for easier identification.
Fixed — AI chat losing its editor session due to a crash in the MCP session REST endpoints (mcp/session).
Fixed — AI-generated images missing the alt attribute in inserted HTML; the value was saved to the media library but not returned to the model.
Added — Inline data:image/* URIs (PNG, JPEG, GIF, WebP, AVIF, SVG) on <img>, <video poster>, <source>, and <track>.
Added — Editors and Authors can now use Unblock without manage_options. Settings moved to a dedicated unblock/v1/settings REST endpoint, filterable via unblock/settings/can_read and unblock/settings/can_write.
Fixed — SVG content and expression operators (>, <) preserved on save.
Fixed — Twig expressions ({{ ... }}) in block content no longer corrupted on save.
Fixed — SVG attribute casing (viewBox, preserveAspectRatio, etc.) and MathML's definitionURL preserved on save.
Added — unblock/form/client_ip filter for overriding the client IP used in form rate limiting (proxy support).
Added — Security regression tests for PostQuery type filtering and Processor timestamp validation.
Improved — AI chat shows a notice with a link to Settings → Connectors when no AI provider is configured, instead of letting the user send a message and get an error.
Improved — AI image generation errors are now reported to the model so it can explain the failure to the user.
Improved — Form rate limiting uses REMOTE_ADDR only; proxy setups use the new unblock/form/client_ip filter.
Improved — MCP sessions now store user_id and enforce ownership on register/deregister.
Improved — MCP command IDs use cryptographically secure UUIDs (wp_generate_uuid4) instead of uniqid.
Improved — File write permissions use FS_CHMOD_FILE (default 0644) instead of hardcoded 0755.
Improved — License update check uses POST instead of GET to keep license keys out of URLs and server logs.