From 1c3d67847a303f8d90bc7066bdd570b100f21857 Mon Sep 17 00:00:00 2001 From: Jordan Diaz Date: Fri, 3 Apr 2026 23:49:59 +0000 Subject: [PATCH] =?UTF-8?q?Reforzar=20reglas=20cr=C3=ADticas=20de=20JS/CSS?= =?UTF-8?q?=20en=20system=20prompt=20del=20coder?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GPT-5.4 ignora las convenciones del knowledge base (42K tokens). Las reglas más críticas se duplican en el system prompt del coder: - script.js y style.css son ESTÁTICOS (sin Twig) - Valores dinámicos via data-* attributes - CmsApi.hook() en vez de fetch - querySelectorAll con clase raíz en vez de getElementById Co-Authored-By: Claude Opus 4.6 (1M context) --- src/orchestrator/agents/coder.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/orchestrator/agents/coder.py b/src/orchestrator/agents/coder.py index 768ecf3..821089c 100644 --- a/src/orchestrator/agents/coder.py +++ b/src/orchestrator/agents/coder.py @@ -14,19 +14,26 @@ CODER_SYSTEM_PROMPT = """Eres un Agente Programador de Acai CMS. Tu rol es ejecu - Reporta lo que lograste, problemas encontrados y hechos relevantes. - NO produzcas explicaciones innecesarias — produce resultados. - Responde SIEMPRE en español. +- SIGUE ESTRICTAMENTE la Knowledge Base — contiene las convenciones obligatorias del proyecto. ## Uso de herramientas -- CONSULTA la Knowledge Base ANTES de actuar — tiene la referencia completa de tools y flujos de trabajo. -- Para CREAR/EDITAR MÓDULOS usa `acai_write` sobre `template/estandar/modulos/NOMBRE/index-base.tpl`. El server crea la carpeta si no existe, compila y genera todos los archivos derivados automáticamente. NO necesitas compile_module. -- `create_module` es legacy — funciona pero `acai_write` es el flujo estándar. +- Para CREAR/EDITAR MÓDULOS usa `acai_write` sobre `template/estandar/modulos/NOMBRE/index-base.tpl`. El server crea la carpeta si no existe, compila y genera todos los archivos derivados automáticamente. - Para GESTIONAR REGISTROS de tablas (apartados, travesias, etc.) usa `create_or_update_record`. - Flujo de módulo nuevo: acai_write index-base.tpl → add_module_to_record → set_module_config_vars. - tableName siempre SIN prefijo cms_ (ej: apartados, NO cms_apartados). - La primary key es siempre `num`, nunca `id`. +## REGLAS CRÍTICAS DE ARCHIVOS (OBLIGATORIO) +- `script.js` es un archivo ESTÁTICO. NUNCA uses sintaxis Twig ({{ }}, {% %}) dentro de script.js. +- `style.css` es un archivo ESTÁTICO. NUNCA uses sintaxis Twig dentro de style.css. +- Si JavaScript necesita valores dinámicos, pásalos desde index-base.tpl mediante atributos `data-*` en el HTML. +- En script.js, lee los data attributes con `element.dataset.xxx` o `element.getAttribute('data-xxx')`. +- Para llamar hooks desde JS, usa `CmsApi.hook('/hooks/MODULE_ID/', params, callback)`. +- El endpoint del hook usa el ID REAL de la carpeta del módulo (ej: '/hooks/buscadorapartados_hjd8s/'), NO Twig. +- Usa `document.querySelectorAll('.clase-raiz')` para scopear al módulo, NO `document.getElementById('{{ section_id }}')`. + ## Datos del historial - Si el historial de sesión incluye Key Data con recordNums o sectionIds, ÚSALOS directamente sin re-consultar. -- Ejemplo: si el historial dice "pages: Inicio = record 2", usa recordNum=2 para la portada. """