= 1.0.12 =
* Nuevo endpoint `GET /shortcodes` (lista `array_keys($shortcode_tags)`, los tags realmente registrados en el sitio ahora mismo) para que el agente pueda verificar, antes de recomendar o insertar cualquier shortcode que no sea uno de los documentados en `GET /info`, si ese plugin/función existe de verdad en este sitio en vez de asumirlo por conocimiento genérico de otros sitios. Motivado por un caso real: un agente recomendó el shortcode de un plugin buscador que nunca estuvo instalado. Documentado en `discover()` (sección de endpoints y advertencia `shortcodes_verificacion`).

= 1.0.11 =
* Fix: el offset de compensación de la admin bar para headers `fixed`/`sticky` (introducido en 1.0.2) nunca se aplicaba en la práctica — el script se imprime en `wp_head`, antes de que exista `<body>`, y capturaba `document.body` como `null` en ese momento; la primera llamada a `sync()` fallaba en silencio (`Cannot read properties of null`) y la clase `eia-at-top` nunca se agregaba. Ahora `sync()` lee `document.body` en cada invocación (con reintento en `DOMContentLoaded` si aún no existe) en vez de capturarlo una sola vez al declarar el script.

= 1.0.10 =
* Custom Code: activar, editar (código o estado activo) o borrar un snippet ahora dispara `Editor_IA_Cache::flush_site()` (misma clase que ya usa `PUT /file` para landings/componentes) cuando el cambio afecta contenido servido activamente. Antes, un snippet `scope: global` podía cambiar sin que un plugin de cache de página (WP Rocket, LiteSpeed, etc.) se enterara — visitantes reales seguían viendo la versión anterior hasta que expirara el TTL.
* `PUT /file` y `PUT/POST /custom-code`: la respuesta ahora incluye un campo informativo `recordatorio_testing` cuando el cambio ya quedó activo en el sitio, recordando verificar con capturas reales (skill `testing`) antes de reportar la tarea como lista.

= 1.0.9 =
* Custom Code: solucionado un error de incompatibilidad en los métodos REST (rest_create y rest_update) que usaban $request->get_json_params() en vez de $request->get_param(). En llamadas sintéticas del servidor MCP (abilities), get_json_params() podía retornar null o WP_Error, ocasionando un TypeError fatal en PHP 8.0+ al intentar evaluar claves de arreglo no existentes. Con get_param() la lectura de parámetros es 100% compatible tanto en llamadas HTTP externas como en invocaciones MCP internas.

= 1.0.8 =
* Ajustes > Accesos para agentes: el checkbox "Activar API de WooCommerce" ahora recuerda su estado entre visitas a la página (antes volvía siempre desmarcado aunque el usuario lo hubiera activado la vez anterior).

= 1.0.7 =
* Nuevo endpoint/tool genérico `PATCH /native/{id}/meta` (ability `editor-ia/set-native-meta`) para escribir custom fields de posts/páginas NATIVAS de WordPress. Delega en el propio wp/v2/{tipo}/{id} vía rest_do_request() en vez de reimplementar permisos o sanitizado — sirve para Yoast SEO, ACF (con "Show in REST API" activo) o cualquier otro plugin que registre sus campos con show_in_rest, sin hardcodear nombres de campos ajenos en el plugin. Reemplaza la instrucción anterior del skill `seo` de armar el PATCH a wp/v2 a mano.
* Detecta y reporta explícitamente (campos `no_guardadas`/`aviso` en la respuesta, o error 400 si son todas) las claves enviadas que WordPress ignora en silencio por no estar registradas para ESE post_type específico (caso real detectado en pruebas: Yoast SEO 27.9 solo registra sus campos para el tipo "post", no para "page" — sin este chequeo la respuesta era 200 con el valor en null, un falso éxito).
* CORS: agregado PATCH a `Access-Control-Allow-Methods` (faltaba desde que se armó la cabecera, sin impacto hasta ahora porque ningún endpoint usaba ese método).

= 1.0.6 =
* Preparación para una eventual publicación en WordPress.org: renombrado el slug/archivo principal del plugin de `editor-ia` a `editor-ia-facilwp` — carpeta (`editor-ia/` → `editor-ia-facilwp/`), archivo principal (`editor-ia.php` → `editor-ia-facilwp.php`), header `Text Domain` y las 74 llamadas de traducción (`__`, `_e`, `esc_html_e`, etc.) actualizadas para coincidir con el nuevo slug. Necesario porque WordPress.org exige que el Text Domain coincida con el slug final para que el sistema de traducciones cargue los `.mo` automáticamente. Sin cambios en el namespace REST (`editor-ia/v1`), capability, CPT, prefijo de shortcodes (`eia_`) ni constantes `EDITOR_IA_*` — son detalles internos que no afectan a WordPress.org y que hubieran arrastrado toda la documentación/skills sin necesidad. El plugin todavía no se envía a publicación en WordPress.org; este cambio es solo preparación.

= 1.0.5 =
* Custom Code: si un snippet `type:php` falla la validación de sintaxis y el código contiene patrones exclusivos de JS (`document.`, `.setAttribute(`, `addEventListener(`, `querySelector(`, etc.), el error ahora incluye una pista de que el tipo correcto probablemente sea `type:js` — el modo PHP `global` corre en `init`, antes de que exista el HTML de la página, así que no puede modificar DOM ya renderizado.
* Ajustes > Accesos para agentes: simplificado el label del checkbox de WooCommerce, quitando el detalle de permisos entre paréntesis que quedaba redundante.

= 1.0.4 =
* GET /info ahora reporta `environment.yoast_seo` (activo, versión, y si sus campos meta están registrados como editables vía REST) — informativo, mismo patrón que Astra/WooCommerce/Elementor. No agrega ninguna tool nueva: la edición de título/meta description de contenido nativo de WordPress con Yoast activo ya es posible con la API REST estándar (PATCH /wp/v2/posts|pages con meta._yoast_wpseo_title / meta._yoast_wpseo_metadesc), documentado en el skill `seo`.

= 1.0.3 =
* GET /info ahora reporta `otros_servidores_mcp`: detección genérica (sin lista de plugins hardcodeada) de servidores MCP de terceros activos en el sitio — servidores dedicados con ruta REST propia (cualquier plugin que registre la suya vía wordpress/mcp-adapter, ej. Astra) y el gateway compartido de WordPress para plugins que solo registran WP Abilities sin servidor propio (ej. WooCommerce, Yoast SEO), listando las abilities detectadas de cada uno.

= 1.0.2 =
* Fix: el offset de compensación de la admin bar para headers fijados/sticky ahora solo se aplica mientras la página está sin scrollear (antes era permanente vía CSS `!important`, y hacía que el header terminara flotando a mitad de página en vez de quedar pegado al viewport al hacer scroll). Afecta solo a usuarios logueados con la admin bar visible.

= 1.0.1 =
* Ajustes > Accesos para agentes: reescrito el label del checkbox de WooCommerce (de pregunta a frase de acción directa), más claro sobre qué habilita.

= 1.0.0 =
* Primer lanzamiento público. El desarrollo interno previo (alpha, no distribuido) queda archivado como referencia del equipo en backups/v3.1.0-pre-1.0.0-reset/CHANGELOG.txt.
* Servidor MCP nativo (Abilities API de WordPress) para que un agente de IA administre el sitio vía tools estructuradas, con fallback completo por API REST clásica para entornos que no pueden hacer POST JSON-RPC.
* Motor de páginas/landings: modo full (HTML/CSS/JS propio, cero interferencia del theme) y modo integrado (usa get_header()/get_footer() del theme activo).
* Sistema de componentes reutilizables (header.html, footer.html, style.css) entre landings, y Componente Global para inyectar header/footer en páginas nativas de WordPress (blog, archivo, single, page) sin afectar las landings del plugin.
* Compatibilidad de theme para el Componente Global: remoción directa de hooks nativos (Astra) en vez de ocultar con CSS, con fallback CSS para temas sin adaptador propio.
* Editor de textos desde el admin de WordPress (meta box), sin tocar código — preserva HTML/formato inline.
* Sistema de revisiones automáticas por archivo (hasta 5 por archivo) con rollback vía API.
* SEO por proyecto (título, meta descripción) con desactivación automática de la salida de Yoast SEO / Rank Math en esas páginas para evitar duplicados.
* Biblioteca de medios de WordPress integrada: subida y listado con todos los tamaños generados, srcset/sizes automático y optimización de imágenes (lazy loading, fetchpriority en la candidata a LCP) sin que el agente tenga que escribirlo a mano.
* Compatibilidad con plugins de cache de página (WP Rocket, WP Super Cache, W3 Total Cache, LiteSpeed Cache, etc.): invalidación automática al editar vía API o admin.
* Custom Code: snippets de PHP, CSS y JS con modos de ejecución shortcode o global, con validación de sintaxis y bloqueo de funciones peligrosas para el caso PHP.
* Integración WooCommerce: shortcode [eia_cart] (carrito nativo con drawer lateral, sin dependencia de theme) y acceso a la API REST de WooCommerce para agentes.
* Sistema de condiciones granular para asignación de componentes.
* Menús dinámicos de WordPress vía shortcode y endpoint dedicado.
* Instrucciones del agente servidas en vivo desde un servicio central (nunca se descargan a disco), organizadas en núcleo + skills especializados por área, con verificación de instalación por dominio.
* Detección informativa de Elementor y Astra (sin tools ni flujos asociados).
