=== Optimizador Pro NotoriusVision (OPNV-WP+SWNV / OPNV SOLΞ WP) ===
Contributors: David Muñoz Cabrisas, Soledad Sánchez Mohamed
Tags: optimize, images, webp, ai, seo, performance, privacy, widgets, cache, sre, health, artifact
Requires at least: 6.4
Tested up to: 6.8
Requires PHP: 8.3
Stable tag: 1.0.191
License: Proprietary
License URI: https://notoriusvision.com/legal/opnv-eula

Suite de optimización WordPress con contratos de salud/evidencia, IA, imágenes, SEO, cumplimiento legal, Art&Fact HTML y widgets NV.

== Descripción ==

OPNV-WP+SWNV (OPNV SOLΞ WP) unifica rendimiento, seguridad, contenidos con IA y cumplimiento en un solo plugin con panel ModuleShell, telemetría local y contratos operativos verificables (Health, Evidence, Grounding, Catalog, Consumer).

Principio doctrinal: OPNV no certifica capacidades; OPNV certifica outcomes observables.

= Autoría y titularidad =

* Cotitulares del programa: Soledad Sánchez Mohamed y David Muñoz Cabrisas
* Desarrollo: David Muñoz Cabrisas; Soledad Sánchez Mohamed
* Validación: Soledad Sánchez Mohamed
* «Notorius Vision» / «OPNV-Systems»: nombres comerciales sin personalidad jurídica (titular comercial: Soledad Sánchez Mohamed)

= Módulos principales =

* **Inicio** — Centro de control, healthcheck y orquestación IA
* **Proveedores IA** — Bóveda de API keys (OpenAI, Gemini, Claude, Ollama, etc.)
* **Biblioteca de prompts** — Plantillas para SEO, contenido, imágenes y sistema
* **Content Studio** — Generación asistida en el editor
* **Traducción** — Flujos multilenguaje
* **Imágenes** — WebP, AVIF, huérfanas y cola WPO
* **SEO semántico** — Inventario y optimización de metadatos
* **Art&Fact HTML** — Entrega híbrida HTML estático + CMS (carrito/cuenta en vivo)
* **Monitor / Caché** — Colas, métricas y purga de caché
* **Cumplimiento** — Cookies, privacidad y banner RGPD
* **Widgets NV** — Shortcodes, FAQ, accesibilidad, RGPD front
* **SRE / Health / Copilot** — Observabilidad, contratos de salud y asistencia grounded

= Licencia =

Software propietario de Soledad Sánchez Mohamed y David Muñoz Cabrisas.
Consulte `license.txt` y `eula.txt` en el paquete (documento legal v1.2 · Octubre 2026).
Versión en inglés: `license-en.txt`, `eula-en.txt`, `readme-en.txt`.

= Requisitos =

* WordPress 6.4+
* PHP 8.3+
* Extensiones recomendadas: GD o Imagick, cURL, JSON, mbstring

== Instalación ==

1. Suba el ZIP `OPNV-WP+SWNV_v1.0.191.zip` desde Plugins → Añadir nuevo → Subir plugin
2. Active OPNV-WP+SWNV
3. Acepte el EULA si se muestra el modal legal
4. Visite **OPNV+IA → Inicio** para el healthcheck inicial

== Preguntas frecuentes ==

= ¿Es código abierto? =
No. OPNV-WP+SWNV es software propietario. Algunos componentes embebidos de terceros (p. ej. Adapta RGPD) mantienen su licencia original.

= ¿Quién es el titular? =
Los cotitulares del programa son Soledad Sánchez Mohamed y David Muñoz Cabrisas.
Notorius Vision es solo marca comercial de distribución.

= ¿Necesito APIs de pago? =
En plan Free puede usar prompts manuales y sus propias claves. Los planes Pro/Agency amplían automatización y límites.

== Changelog ==

= 1.0.191 =
* Corregido: Governance mostraba 4 avisos «Provider missing documentation» porque la documentación de los proveedores de IA no se incluía en el plugin; ahora viaja en el ZIP y el contador «Providers» refleja los documentos que existen de verdad.

= 1.0.190 =
* Corregido: el aviso «Último error de arranque» se quedaba fijo en el panel aunque el plugin arrancara bien; ahora se borra solo cuando el arranque vuelve a funcionar y muestra la fecha del error.

= 1.0.189 =
* Actualizaciones seguras: antes de cada actualización de OPNV-WP (manual o automática) se guarda una copia de la versión instalada en wp-content/opnv-rollbacks/ (se conservan las 3 más recientes).
* Si tras una actualización el plugin entra en modo seguro, la propia pantalla del modo seguro permite volver a una versión anterior con un clic, sin salir del admin. El mismo panel está en OPNV Doctor y en el Centro de control.
* Interruptor de actualización automática para OPNV-WP y para OPNV Doctor. Tras volver a una versión anterior, la actualización automática se desactiva y la versión retirada no se reinstala sola.
* Corregido: el modo seguro se desactivaba solo en la petición siguiente cuando el núcleo fallaba al arrancar, y el panel de recuperación casi nunca era accesible.

= 1.0.188 =
* Asistente «NV Multi-AI»: el Chat responde directamente en el panel con el proveedor que elijas (si falla, prueba los demás activos en orden). Si ninguno responde, te deja el prompt para copiar y pegar como antes.
* Librería: «🚀 Ejecutar con IA» disponible en todos los planes; la plantilla se rellena con los datos de la página y muestra el resultado.
* Plan FREE con IA manual completa; el plan PRO añadirá la automatización de tareas.
* Corregidos fallos que impedían usar el Chat (se quedaba en blanco tras el primer mensaje) y la Librería (se quedaba en «Rellenando variables…»).

= 1.0.187 =
* Servicios IA rediseñado: contenido con márgenes, sin paneles dentro de paneles, y la barra «Guardar bóveda» fija abajo mientras recorres el catálogo.
* Asistente «NV Multi-AI»: nueva ayuda en Servicios IA (dónde aparece, cómo se abre, qué necesita y qué hace cada pestaña).
* Cada proveedor muestra su logotipo o un monograma en su color, y una etiqueta: «Funciona con el asistente» o «Solo catálogo».
* Proveedores nuevos: xAI (Grok), Together AI, Fireworks AI, Cerebras, Moonshot (Kimi) y NVIDIA NIM. Cohere y Alibaba Qwen ya funcionan con el asistente. En estos el modelo se escribe en la ficha.
* Claude: modelos actualizados a la familia 5.5.
* Asistente: «1. Abrir IA» del Chat abre la web del proveedor y «🚀 Ejecutar con IA» aparece en el plan PRO.

= 1.0.186 =
* Asistente «NV Multi-AI»: el panel cabe en su marco. La cabecera va en dos filas (título y botones de ventana arriba, pestañas abajo) y el botón de cerrar está siempre visible. Se cierra con ✕, con Esc o con el botón 🤖.
* Asistente: «Guardar ajustes» (posición y modo) y el modo acoplado funcionan; en modo acoplado el botón 🤖 queda junto al panel y el panel no tapa la barra de administración.
* Asistente: la librería de prompts se ve en una columna dentro del panel; «Aplicar SEO», «Aplicar al post», tendencias e historial usan la API REST correcta (antes daban error 403).
* Asistente: quitada la pestaña «Consola», que no hacía nada; el estado de salud está en «Impacto».

= 1.0.185 =
* Asistente «NV Multi-AI»: con el interruptor encendido funciona de verdad. Se registran solo sus rutas REST (proveedores, prompts, plantillas, favoritos, vectores, analítica y generación con respaldo) y vuelven Chat, Librería, Arena e Impacto. Solo para usuarios que pueden editar; el resto de la API interna sigue sin exponerse.
* IA: la generación llama a Gemini, Claude y a los proveedores compatibles con OpenAI (DeepSeek, OpenAI, Mistral, Groq, OpenRouter…) y, si uno falla, prueba el siguiente.
* SEO: título, descripción y palabra clave se leen y guardan en Rank Math, Yoast, SEOPress y All in One SEO (antes daban error).
* Base de datos: se crean las tablas de vectores, historial y grupos de prompts y la de contenido guardado. La tabla de proveedores incluye el orden en instalaciones nuevas.

= 1.0.184 =
* Asistente «NV Multi-AI»: interruptor propio en Servicios IA, apagado por defecto. Encendido, aparece solo en el editor de entradas y páginas, y en la web para quien puede editar. Chat, librería, Arena e impacto quedan ocultos mientras su API no esté disponible.
* Accesibilidad: los iconos del botón llevan `?ver` derivado de su contenido, para que una copia dañada en la caché del CDN o del navegador (un año) no se siga sirviendo.

= 1.0.183 =
* Accesibilidad: `[swnv_accessibility]` sin `anchor` se muestra donde se coloca (en línea), igual que `[swnv_accessibility_voice]`. El botón flotante solo aparece con «En todo el sitio» o con `anchor="floating"`.

= 1.0.182 =
* Admin: cada aviso de «guardado» aparece una sola vez (un único `.wp-header-end` por página).
* Widgets NV: solo se muestra el aviso de la sección guardada (accesibilidad, voz, APIs o depuración).
* Widgets NV: corregido el error «current is not defined» en el resaltado de la barra de secciones.

= 1.0.181 =
* Hemeroteca: el inventario muestra por tipo «Seleccionados para archivar» y «Archivados», y la fecha y el usuario de la última revisión.

= 1.0.180 =
* Kuxu: caja de credenciales (cms.kuxu-credentials 0.1.0), apagada por defecto. Si se activa, Kuxu VCS (GitHub) guarda en ella el token. Clave maestra fuera del webroot y accesos de un solo uso.
* Asistente: corregidos los errores JS del admin y las llamadas REST con nonce `wp_rest`.
* Accesibilidad: botón «Parar» para la lectura del resultado de la búsqueda por voz.
* Panel: el detalle de métricas funciona también con enlaces permanentes simples.

= 1.0.179 =
* Al subir el plugin, el logo de la pantalla de actualización aparece centrado y al doble de tamaño.
* Kuxu Connect: se muestra con su nombre; GitHub deja de tener tarjeta propia (es un conector dentro de Kuxu Connect). Panel de información y documentación de gobernanza.

= 1.0.178 =
* Depuración: la traza del cargador de clases solo se escribe con `OPNV_DEBUG_AUTOLOAD`; con `WP_DEBUG` ya no llena el debug.log.
* Base de datos: la comprobación de tablas se hace una vez por versión, no en cada petición.
* PHP 8.5: eliminados los avisos de `setAccessible()`, de parámetros nullables implícitos y de Mustache.
* Cargador de clases: mapa de clases completado (menos accesos a disco).

= 1.0.177 =
* Privacy Suite: arranque completo (migración, auditoría y Google Consent Mode) y JS del banner emparejado con su CSS.
* RGPD: la animación del banner de Adapta vuelve a aplicarse.
* Traducción de artefactos: glosario v2.

= 1.0.176 =
* Privacy Suite: se restituye el arranque del módulo en `plugins_loaded`, perdido al reconstruir la serie 1.0.x desde la rama beta v0.4.9.
* Privacy Suite: vuelve la ventana emergente de documentos legales (Aviso Legal, Privacidad, Cookies, Términos) con su CSS propio.
* Privacy Suite: vuelve el banner de cookies y el bloqueo de scripts de terceros (`CookieBanner::get_instance()` no se invocaba).
* Privacy Suite: vuelve el escáner de cookies. Sus tres acciones AJAX responden de nuevo, lo que elimina el «Error de red al escanear».
* CookieBanner: se recuperan `module_is_on()` e `is_frontend_editor()`, ausentes en la versión desplegada y causantes de un fatal en `wp_enqueue_scripts`.
* Escáner de cookies: el patrón de detección usaba `/` como delimitador y las claves con barras lo rompían (`preg_match(): Unknown modifier`). Ahora usa `~(...)~i`.

= 1.0.175 =
* Hemeroteca 0.1.6: simulación explicable. El panel de Candidatos muestra las reglas evaluadas (edad mínima, inactividad, visitas/180d, exclusiones, fase), el motivo legible de cada artículo y filtros por estado. Solo lectura: no escribe ni cambia post_status.
* Hemeroteca: `opnv_hemeroteca_simulate` devuelve `rules` (resumen de la política activa) además de los contadores e items ya existentes.

= 1.0.131 =
* Traducción 1.11.0: reset multilingüe completo (Simular / Resetear con confirmación RESET MULTILINGUAL)
* AJAX purge/rebuild idioma cableado (opnv_translation_purge_language / rebuild_language)
* Fix colisión /es/ → página (p. ej. /esaldiak/) cuando el origen es español

= 1.0.130 =
* Identidad de producto flota: OPNV-WP+SWNV_v1.0.130
* Licencia: HMAC sin SECRET_KEY embebida (sales WP / OPNV_LICENSE_HMAC_KEY)
* Paquete público: sin inventario de flota ni CHANGELOG-38 operativos
* ConstitutionCompiler: sin eval() (falso positivo AV en hosting)

= 1.0.129 =
* Identidad de producto flota: OPNV-WP+SWNV_v1.0.129
* SOS: UI Soporte OPNV más elegante (hero + pasos en tarjeta)
* SOS: pack diagnóstico Doctor + errores plugin en ticket (sos-diag)
* StarGate: SafeLogger/SWNV error+critical → Node-02 (configuration_error, rate-limit)
* Widgets 1.3.19: bridge soft errors a flota
* Widgets 1.3.18: logs en hora Zulu (UTC) + enlace a OPNV Doctor / SOLΞ Health
* Widgets 1.3.17: panel Depuración/Logs en Widgets (interruptor debug para admins)
* Widgets 1.3.16: YouTube Gallery — layout Grid, Lista y Slider
* Widgets 1.3.15: YouTube galería — diagnostica API Key bloqueada por HTTP referrer (no es cuota)
* Widgets 1.3.14: voz otra vez dentro de Accesibilidad; el entorno visual del botón de voz sí cambia (runtime)

= 1.0.121 =
* Identidad de producto flota: OPNV-WP+SWNV_v1.0.121
* Widgets 1.3.13: preview del editor (campos planos en opnv-widget-editor); panel «Voz y lectura» (#swnv-sec-voice); contraste de botones/export

= 1.0.120 =
* Identidad de producto flota: OPNV-WP+SWNV_v1.0.120
* Widgets 1.3.9: UI de una sola página (anclas sticky, sin pestañas); sin RGPD en Widgets; voz+micro A11Y-VM

= 1.0.119 =
* Identidad de producto flota: OPNV-WP+SWNV_v1.0.119
* Widgets 1.3.0: restaura voz+micrófono en Accesibilidad (A11Y-VM-001); RGPD sigue fuera del catálogo SW

= 1.0.118 =
* Identidad de producto flota: OPNV-WP+SWNV_v1.0.118
* Widgets 1.2.2: catálogo FAB cms.accessibility 1.1.0 (fab-looks.json) en page=opnv-widgets

= 1.0.117 =
* Identidad de producto flota: OPNV-WP+SWNV_v1.0.117
* Safe Boot: auto-heal latch si Bootstrap carga; 3 strikes antes de Safe Mode (race OPcache)
* Soluciona «sin permisos» en Salud/Runtime cuando un blip re-enganchaba Safe Mode

= 1.0.116 =
* Identidad de producto flota: OPNV-WP+SWNV_v1.0.116
* BatchAjax + remediation shield-only

* Safe Boot: auto-heal latch si Bootstrap carga; 3 strikes antes de Safe Mode (race OPcache)
* Soluciona «sin permisos» en Salud/Runtime cuando un blip re-enganchaba Safe Mode

* Imágenes (visual 2.4.4): BatchAjaxController — opnv_list_conversion_families / lotes
* Remediation: shield-only (no boot latch); backoff 429/5xx Hub

= 1.0.115 =
* Identidad de producto flota: OPNV-WP+SWNV_v1.0.115
* Domain_Images restaurado (LazyLoad/Batch/Orphan/…) + Converter CONVERSION_MAP
* Safe Mode spam + QueueEngine table

= 1.0.114 =
* Identidad de producto flota: OPNV-WP+SWNV_v1.0.114
* Imágenes (visual 2.4.2): restaura OrphanDetector completo (normalize_upload_root y familia)
* Incluye correcciones de 1.0.113 (map_perceptual_quality, Safe Mode spam, QueueEngine table)

= 1.0.113 =
* Identidad de producto flota: OPNV-WP+SWNV_v1.0.113
* Imágenes (visual 2.4.1): Converter::map_perceptual_quality() / get_unified_quality()
* SettingsRegistry: AI_OPTION_GROUP + opciones tono/longitud
* Safe Mode: un log/hora + limpia hooks con schedules ausentes
* QueueEngine: crea/verifica opnv_task_queue + schedule every_minute

= 1.0.112 =
* Identidad de producto flota: OPNV-WP+SWNV_v1.0.112
* Art&Fact: Settings::hybridInfoHtml() + edge_runtime 1.7.4 (panel Información)
* ModuleShell: notices anclados fuera del hero (wp-header-end)
* AdminMenu flota: Anuncios / Suite Social / Salud / WAF
* Empaque limpio: sin k8s/apps/deploy/scripts/dev; EULA/licencia/readme v1.2

= 1.0.0-rc.1 (depósito registral) =
* Etiqueta administrativa de depósito RPI alineada al linaje funcional
* EULA/licencia/readme: cotitulares personas físicas; marca comercial aclarada

= 0.4.8 =
* Serie hotfix operativa histórica (ver documentación interna de flota)
