{
  "schemaVersion": 1,
  "generatedAt": "2026-08-14",
  "title": "LL-Dominus — Mapa de Proyecto y Distribución",
  "subtitle": "Estado de cierre para producción",
  "repository": {
    "entrypoint": "public/index.php",
    "notes": "Inventario comprobado sobre el árbol real. Las rutas de producto son relativas al repositorio; las rutas absolutas se limitan a configuración local externa.",
    "globalProgress": 78.3,
    "globalProgressRounded": 78
  },
  "calculation": {
    "method": "Media ponderada de doce bloques. Cada porcentaje procede de criterios verificables: fuente presente, build reproducible, artefacto existente, prueba conocida, paquete generado y validación en plataforma. Una capacidad funcional sin paquete o sin validación no recibe 100%.",
    "formula": "Σ(peso × avance) / 100",
    "blocks": [
      {"id":"web","name":"Diseñador Web","weight":12,"progress":94,"contribution":11.28,"status":"yellow","criteria":"Entrada, clases, assets, guardado, ayuda y pruebas presentes; falta paquete limpio y validación VPS."},
      {"id":"engine","name":"Engine","weight":15,"progress":94,"contribution":14.10,"status":"yellow","criteria":"25 PRG core y lib Win32 presentes; falta matriz ABI/plataforma y validación de distribución limpia."},
      {"id":"renderers","name":"Renderers","weight":9,"progress":90,"contribution":8.10,"status":"yellow","criteria":"HTML/PDF/imagen/Xailer implementados; la salida Windows conserva incidencias visuales abiertas y no hay validación Linux."},
      {"id":"exporters","name":"Exportadores","weight":7,"progress":95,"contribution":6.65,"status":"green","criteria":"PDF, imagen, CSV y XLSX incluidos en el build Win32; falta validación cruzada Linux/Win64."},
      {"id":"xailer","name":"Xailer","weight":12,"progress":80,"contribution":9.60,"status":"yellow","criteria":"Adaptadores completos y build definido; salida canónica ausente, rutas absolutas y cierre visual pendiente."},
      {"id":"importer","name":"Importador L&L","weight":10,"progress":86,"contribution":8.60,"status":"yellow","criteria":"Importa informes/etiquetas y objetos avanzados; queda cerrar regresiones reales y aislar su despliegue opcional."},
      {"id":"vps","name":"Deploy VPS","weight":8,"progress":55,"contribution":4.40,"status":"red","criteria":"Contenido deducible, pero sin dist, manifiesto, instalación limpia ni configuración Apache/Nginx validada."},
      {"id":"windows","name":"Build Windows","weight":6,"progress":82,"contribution":4.92,"status":"yellow","criteria":"Engine Win32 generado; Win64 ausente y Xailer canónico no generado."},
      {"id":"linux","name":"Build Linux","weight":5,"progress":10,"contribution":0.50,"status":"red","criteria":"No hay script, artefacto ni ejecución Linux comprobada."},
      {"id":"tests","name":"Tests","weight":7,"progress":86,"contribution":6.02,"status":"yellow","criteria":"Suite amplia Web/PHP/Harbour/importador; sin CI ni matriz limpia completa del estado actual."},
      {"id":"docs","name":"Documentación","weight":4,"progress":78,"contribution":3.12,"status":"yellow","criteria":"Arquitectura, lenguaje, IA y auditorías presentes; distribución y operación aún dispersas."},
      {"id":"packaging","name":"Packaging","weight":5,"progress":20,"contribution":1.00,"status":"red","criteria":"No existe dist/ ni manifiestos/versionado reproducible de paquetes."}
    ]
  },
  "components": [
    {"id":"designer","name":"Designer Web","group":"Web Designer","description":"Diseñador visual, objetos compartidos, paneles, ayuda y vista previa HTML.","path":"public/","files":["index.php","js/Designer/","js/Objects/","css/dominusll.css","DesignerHelp/","vendor/pell/"],"languages":["PHP","JavaScript","CSS","HTML"],"scope":"runtime","status":"yellow","progress":94,"dependencies":["PHP >= 8.0","DOM","Pell (vendorizado)"],"artifact":"dist/web-designer/ (pendiente)","platforms":["Web"],"vps":true,"engine":false,"xailer":false,"build":false,"tests":["tests/designer/","tests/playwright/","public/php/tests/"],"pending":["Generar paquete mínimo","Validar instalación VPS limpia","Separar herramientas/tests del runtime"]},
    {"id":"api","name":"Server/API Web","group":"Server/API","description":"Carga, listado, guardado y API de ejecución/importación desde el diseñador.","path":"public/","files":["apiLLDominus.php","listTemplates.php","loadTemplate.php","saveTemplate.php","templateStorage.php","php/TApiLLDominus.php"],"languages":["PHP"],"scope":"runtime","status":"yellow","progress":90,"dependencies":["PHP >= 8.0","lbl/ y lst/ como almacenamiento","tools/ll12_import/ solo para importar LL12"],"artifact":"Incluido en paquete Web","platforms":["Linux VPS","Windows/Apache"],"vps":true,"engine":false,"xailer":false,"build":false,"tests":["public/php/tests/","public/motor/tests/"],"pending":["Documentar seguridad/permisos","Hacer opcional y acotado el importador"]},
    {"id":"php-runtime","name":"Motor PHP / HTML","group":"Renderers","description":"Referencia funcional Web: evaluación, composición, paginación y salida HTML.","path":"public/motor/","files":["clases/","index.php","runtime/","tests/"],"languages":["PHP"],"scope":"runtime","status":"green","progress":95,"dependencies":["PHP >= 8.0","DOM para RichText"],"artifact":"HTML de preview","platforms":["Web"],"vps":true,"engine":false,"xailer":false,"build":false,"tests":["public/motor/tests/"],"pending":["Excluir tests/herramientas del dist","Smoke test de servidor limpio"]},
    {"id":"engine","name":"Engine Harbour","group":"Engine","description":"Core portable: plantilla, datos, fórmulas, IR renderizable, composición y paginación.","path":"tools/harbour/engine/","files":["TLLEngine.prg","TDocument.prg","TEvaluadorFormulas.prg","TMotorEjecucion.prg","TMotorComposicion.prg","TMotorPaginacion.prg","TDocumentoRenderizable.prg","TTable.prg"],"languages":["Harbour"],"scope":"source","status":"yellow","progress":94,"dependencies":["Harbour","hbct para el paquete Xailer combinado"],"artifact":"tools/harbour/lib/liblldominus.a","platforms":["Windows x86 validado","Windows x64 pendiente","Linux x64 pendiente"],"vps":false,"engine":true,"xailer":true,"build":true,"tests":["tools/harbour/tests/ (35 PRG)"],"pending":["Build Win64","Build Linux","Contrato de link público"]},
    {"id":"renderer-pdf","name":"Renderer PDF","group":"Renderers","description":"Genera PDF desde el documento renderizable mediante hbhpdf/libHaru.","path":"tools/harbour/renderers/TRenderPDF.prg","files":["TRenderPDF.prg"],"languages":["Harbour"],"scope":"source","status":"green","progress":94,"dependencies":["hbhpdf","libHaru","libpng","zlib"],"artifact":"Dentro de liblldominus.a; dependencias de link externas","platforms":["Windows x86","Linux no probado"],"vps":false,"engine":true,"xailer":true,"build":true,"tests":["tools/harbour/tests/test_render_pdf.prg"],"pending":["Validar Linux/Win64"]},
    {"id":"renderer-image","name":"Renderer Image","group":"Renderers","description":"Salida raster PNG/JPG/BMP con backend C propio y stb vendorizado.","path":"tools/harbour/renderers/","files":["TRenderImage.prg","TRenderImageBackend.c","vendor/stb/"],"languages":["Harbour","C"],"scope":"source","status":"green","progress":94,"dependencies":["stb (MIT/Public Domain)"],"artifact":"Dentro de liblldominus.a","platforms":["Windows x86","portable por diseño; Linux no probado"],"vps":false,"engine":true,"xailer":true,"build":true,"tests":["tools/harbour/tests/test_render_image.prg"],"pending":["Validar Linux/Win64"]},
    {"id":"export-csv","name":"Exportador CSV","group":"Exporters","description":"Exportación tabular CSV en Harbour.","path":"tools/harbour/exporters/TExportCSV.prg","files":["TExportCSV.prg"],"languages":["Harbour"],"scope":"source","status":"green","progress":98,"dependencies":[],"artifact":"Dentro de liblldominus.a","platforms":["Windows x86","portable por diseño"],"vps":false,"engine":true,"xailer":true,"build":true,"tests":["tools/harbour/tests/test_export_csv.prg"],"pending":["Validar Linux/Win64"]},
    {"id":"export-xlsx","name":"Exportador XLSX","group":"Exporters","description":"Exportación XLSX mediante puente C y libxlsxwriter vendorizado.","path":"tools/harbour/exporters/","files":["TExportXLSX.prg","TExportXLSXBackend.c","vendor/libxlsxwriter-1.2.4/"],"languages":["Harbour","C"],"scope":"source","status":"green","progress":94,"dependencies":["libxlsxwriter 1.2.4 (BSD-2-Clause)","zlib/minizip"],"artifact":"Dentro de liblldominus.a","platforms":["Windows x86","Linux no probado"],"vps":false,"engine":true,"xailer":true,"build":true,"tests":["tools/harbour/tests/test_export_xlsx.prg"],"pending":["Validar Linux/Win64","Fijar orden de link"]},
    {"id":"xailer","name":"Adaptación Xailer","group":"Xailer","description":"API del diseñador, preview, render GDI/EMF, impresión, caché, diagnóstico y progreso.","path":"tools/harbour/xailer/","files":["TApiDisenadorLLDominus.prg","TFormLLPreview.prg","TLLPreview.prg","TRenderTPrinter.prg","TLLDominusPrintJob.prg","TLLPreviewCache.prg","TLLPreviewDiagnostics.prg","TFormLLDominusProgress.prg"],"languages":["Harbour/Xailer"],"scope":"source","status":"yellow","progress":80,"dependencies":["Xailer 9","Harbour ABI de Xailer","liblldominus.a","hbhpdf","libHaru","libpng","libhbzlib","libhbct"],"artifact":"libXaLLDominus.a (salida canónica ausente)","platforms":["Windows x86"],"vps":false,"engine":false,"xailer":true,"build":true,"tests":["tools/harbour/tests/test_xailer_renderer_contract.php","pruebas visuales Xailer"],"pending":["Generar salida canónica","Eliminar rutas absolutas por configuración","Cerrar regresiones visuales y de posicionamiento"]},
    {"id":"importer","name":"Importador List & Label 12","group":"Importers","description":"Convierte LST/LL12 a plantillas LBL/JSON de LL-Dominus; soporta informes, etiquetas, texto/RichText, tablas, patrones, LineWrap y fórmulas.","path":"tools/ll12_import/","files":["import_lst.php","test_import_lst.php","test_import_content.php","test_fill_patterns.php"],"languages":["PHP"],"scope":"tool","status":"yellow","progress":86,"dependencies":["PHP >= 8.0","mbstring recomendado para Windows-1252/UTF-8"],"artifact":"Plantilla .lbl y datos de muestra","platforms":["Windows","Linux/PHP por validar"],"vps":"optional","engine":false,"xailer":false,"build":false,"tests":["tools/ll12_import/test_*.php (7)","tests/playwright/ll12-*.spec.js"],"pending":["Cerrar casos reales de texto multilínea/alineación","Eliminar outputs de pruebas del paquete","Validar ejecución aislada en VPS si se ofrece"]},
    {"id":"php-client","name":"Cliente PHP","group":"Clients","description":"Fachada consumidora productiva más demo y datos de demostración.","path":"cliente/php/","files":["TLLDominusPHP.php","preview_demo.php","runtime_demo.json"],"languages":["PHP"],"scope":"mixed","status":"yellow","progress":82,"dependencies":["PHP >= 8.0","endpoint LL-Dominus"],"artifact":"dist/php-client/ (pendiente)","platforms":["PHP"],"vps":"optional","engine":false,"xailer":false,"build":false,"tests":[],"pending":["Separar clase productiva de demo","Añadir contrato y prueba de integración"]},
    {"id":"server-ref","name":"Referencia servidor PHP","group":"Server/API","description":"Adaptador/referencia de preview PHP; no es el entrypoint principal y conserva un ejecutar() no implementado.","path":"servidor/php/TPreviewPHP.php","files":["TPreviewPHP.php"],"languages":["PHP"],"scope":"reference","status":"gray","progress":60,"dependencies":["runtime PHP","lbl/"],"artifact":"Ninguno","platforms":["PHP"],"vps":false,"engine":false,"xailer":false,"build":false,"tests":[],"pending":["Decidir API pública o referencia","No mezclar con dist hasta cerrar contrato"]},
    {"id":"templates","name":"Plantillas activas","group":"Templates","description":"Plantillas LBL activas/productivas y de demostración.","path":"lbl/","files":["30 archivos; ~6.41 MiB"],"languages":["JSON/LBL"],"scope":"data","status":"yellow","progress":85,"dependencies":[],"artifact":"Datos desplegables seleccionados","platforms":["Web","Xailer"],"vps":true,"engine":false,"xailer":false,"build":false,"tests":[],"pending":["Crear manifiesto de plantillas productivas frente a demos"]},
    {"id":"tests","name":"Pruebas","group":"Tests","description":"Pruebas fuente de diseñador, IA, Playwright, PHP, Harbour e importador; nunca forman parte del runtime distribuido.","path":"tests/","files":["designer: 45","ia: 426","playwright: 11","Harbour PRG: 35 en tools/harbour/tests","importador PHP: 7"],"languages":["JavaScript","PHP","Harbour"],"scope":"test","status":"gray","progress":86,"dependencies":["Node.js dev","Playwright","PHP","Harbour"],"artifact":"Resultados locales ignorados","platforms":["Desarrollo"],"vps":false,"engine":false,"xailer":false,"build":false,"tests":["Es el propio componente de pruebas"],"pending":["CI","Matriz de cierre limpia","Registrar fecha/commit del último PASS total"]},
    {"id":"ia","name":"IA experimental","group":"IA","description":"Commands experimental congelado al 70%; 42 capacidades verdes, 14 amarillas y 2 rojas. No bloquea producción.","path":"public/IA/","files":["TDesignerIA.js","TLLDominusIA.php","docs/ia-experimental-70-checkpoint.md"],"languages":["PHP","JavaScript"],"scope":"experimental","status":"gray","progress":70,"dependencies":["PHP cURL cuando se habilita","servicio/modelo externo"],"artifact":"Módulo opcional","platforms":["Web"],"vps":"optional","engine":false,"xailer":false,"build":false,"tests":["tests/ia/"],"pending":["Congelado; reabrir solo con caso concreto"],"nonBlocking":true},
    {"id":"docs","name":"Documentación","group":"Documentation","description":"Manual de lenguaje, ayuda de diseñador, arquitectura, auditorías, IA y referencias L&L.","path":"docs/","files":["lenguaje/","arquitectura/","designer/","engine/","ia-reference/","list-label/"],"languages":["Markdown","HTML","PDF"],"scope":"documentation","status":"yellow","progress":78,"dependencies":[],"artifact":"Documentación de desarrollo","platforms":["Navegador"],"vps":"optional","engine":false,"xailer":false,"build":false,"tests":[],"pending":["Guía operativa única","Manifiestos dist","Eliminar duplicado MD/TXT de auditoría engine"]}
  ],
  "enginePrg": [
    ["TBarcode.prg","TBarcode","Código de barras","Sí","Engine/Xailer","Sí"], ["TBarcodeUtil.prg","TBarcodeUtil","Codificación barcode","Sí","Engine/Xailer","Sí"],
    ["TChart.prg","TChart","Gráficas","Sí","Engine","Sí"], ["TConectorDatos.prg","TConectorDatos","Contrato de datos","Sí","Engine","Sí"],
    ["TConectorDatosReg.prg","TConectorDatosReg","Datos por registros","Sí","Engine","Sí"], ["TContextoEjecucion.prg","TContextoEjecucion","Estado de ejecución/acumuladores","Sí","Engine","Sí"],
    ["TDocument.prg","TDocument","Documento/plantilla cargada","Sí","Engine","Sí"], ["TDocumentoRenderizable.prg","TDocumentoRenderizable","IR de salida","Sí","Engine","Sí"],
    ["TEllipse.prg","TEllipse","Objeto elipse","Sí","Engine","Sí"], ["TEvaluadorFormulas.prg","TEvaluadorFormulas","Parser/evaluación sin eval","Sí","Engine","Sí"],
    ["TFuncFormulas.prg","TFuncFormulas","Funciones compatibles","Sí","Engine","Sí"], ["TImage.prg","TImage","Objeto imagen","Sí","Engine","Sí"],
    ["TImageUtil.prg","TImageUtil","Carga/normalización imagen","Sí","Engine","Sí"], ["TLine.prg","TLine","Objeto línea","Sí","Engine","Sí"],
    ["TLLEngine.prg","TLLEngine","Fachada pública del motor","Sí","Engine/Xailer","Sí"], ["TMotorComposicion.prg","TMotorComposicion","Composición a IR","Sí","Engine","Sí"],
    ["TMotorEjecucion.prg","TMotorEjecucion","Orquestación runtime","Sí","Engine","Sí"], ["TMotorPaginacion.prg","TMotorPaginacion","Paginación, etiquetas y saltos","Sí","Engine","Sí"],
    ["TObjectBase.prg","TObjectBase","Base de objetos","Sí","Engine","Sí"], ["TPlantilla.prg","TPlantilla","Carga de plantilla","Sí","Engine","Sí"],
    ["TRectangle.prg","TRectangle","Rectángulo/patrones","Sí","Engine","Sí"], ["TTable.prg","TTable","Tablas, grupos y acumuladores","Sí","Engine","Sí"],
    ["TText.prg","TText","Texto y modos de ajuste","Sí","Engine","Sí"], ["TFormattedText.prg","TFormattedText","Compatibilidad de texto formateado","Sí","Engine","Sí"],
    ["TRichText.prg","TRichText","Texto enriquecido","Sí","Engine","Sí"]
  ],
  "cSources": [
    {"path":"tools/harbour/renderers/TRenderImageBackend.c","purpose":"Backend raster propio","library":"liblldominus.a","kind":"propio","platform":"portable por diseño; solo Win32 probado"},
    {"path":"tools/harbour/exporters/TExportXLSXBackend.c","purpose":"Puente Harbour/libxlsxwriter","library":"liblldominus.a","kind":"propio","platform":"portable por diseño; solo Win32 probado"},
    {"path":"tools/harbour/exporters/vendor/libxlsxwriter-1.2.4/src/*.c","purpose":"Escritura XLSX","library":"liblldominus.a","kind":"vendor","platform":"multiplataforma upstream; Linux local no probado"},
    {"path":"tools/harbour/renderers/vendor/stb/*.h","purpose":"Imagen y tipografía raster","library":"compilado vía backend","kind":"vendor header-only","platform":"multiplataforma upstream"}
  ],
  "builds": [
    {"script":"tools/harbour/build_liblldominus.bat","classification":"OFICIAL / PRODUCCIÓN","output":"tools/harbour/lib/liblldominus.a","platform":"Windows x86","status":"production","compiler":"Harbour hbmk2 + MinGW i686-w64-mingw32"},
    {"script":"tools/harbour/xailer/build_libXaLLDominus.bat","classification":"OFICIAL / PENDIENTE DE CIERRE","output":"C:\\local\\xailer9\\Proyectos\\LLDominus\\lib\\libXaLLDominus.a","platform":"Windows x86/Xailer","status":"pending","compiler":"ar del Harbour de Xailer; salida ausente"},
    {"script":"tools/harbour/build_prg.bat","classification":"DESARROLLO","output":"Ejecutable de un PRG","platform":"Windows x86","status":"available"},
    {"script":"tools/harbour/build_and_run_prg.bat","classification":"DESARROLLO","output":"Compila y ejecuta PRG","platform":"Windows x86","status":"available"},
    {"script":"tools/harbour/build_engine_test.bat","classification":"TEST","output":"Test engine","platform":"Windows x86","status":"available"},
    {"script":"tools/harbour/clean_prg.bat","classification":"TEST/DESARROLLO","output":"Limpieza de artefactos de prueba","platform":"Windows","status":"available"},
    {"script":"tools/harbour/tests/run_id10_id11.bat","classification":"TEST","output":"Prueba concreta","platform":"Windows","status":"available"},
    {"script":"tools/harbour/run_prg_with_timeout.ps1","classification":"TEST","output":"Ejecución acotada","platform":"Windows PowerShell","status":"available"}
  ],
  "platformBuilds": [
    {"platform":"Windows x86","status":"production","evidence":"liblldominus.a existe; target i686-w64-mingw32"},
    {"platform":"Windows x64","status":"not-implemented","evidence":"Sin script ni artefacto x64"},
    {"platform":"Linux x64","status":"not-implemented","evidence":"Sin BAT/SH, artefacto ni ejecución Linux"}
  ],
  "engineLibrary": {
    "name":"liblldominus.a","path":"tools/harbour/lib/liblldominus.a","exists":true,"sizeBytes":1505434,"architecture":"Windows x86 / i686 MinGW","contains":["25 objetos Engine","TRenderPDF","TRenderImage y backend C","TExportCSV","TExportXLSX y backend C","fuentes compiladas de libxlsxwriter"],"doesNotContain":["runtime Harbour","adaptadores Xailer","DLL de aplicación","plantillas","hbhpdf/libHaru/libpng/zlib/hbct empaquetadas como dependencias completas"],"externalLink":["Harbour runtime compatible","hbhpdf","libHaru","libpng","zlib/hbzlib","hbct cuando lo requiere la integración"],"usage":["Añadir tools/harbour/lib/liblldominus.a","Compilar con Harbour ABI compatible","Conservar includes Harbour/hbhpdf y vendors del build si se recompila","Enlazar dependencias en el orden exigido por hbmk2/toolchain; el paquete Xailer las combina explícitamente"]
  },
  "xailerLibrary": {"name":"libXaLLDominus.a","configuredOutput":"C:\\local\\xailer9\\Proyectos\\LLDominus\\lib\\libXaLLDominus.a","existsAtConfiguredOutput":false,"repositoryOutput":null,"externalObserved":"C:\\Users\\admin\\Desktop\\libXaLLDominus.a (artefacto local, no salida canónica ni parte del repositorio)","architecture":"Windows x86 / ABI Harbour de Xailer","build":"tools/harbour/xailer/build_libXaLLDominus.bat","dependencies":["liblldominus.a","10 objetos Xailer","libhbhpdf.a","liblibhpdf.a","libpng.a","libhbzlib.a","libhbct.a"],"requiredPrg":["TApiDisenadorLLDominus.prg","TFormLLDominusAskString.prg","TFormLLDominusLabelStart.prg","TFormLLDominusProgress.prg","TFormLLPreview.prg","TLLDominusPrintJob.prg","TLLPreviewCache.prg","TLLPreviewDiagnostics.prg","TLLPreview.prg","TRenderTPrinter.prg"],"headers":"No existe .ch público propio en tools/harbour/xailer; no inventar uno.","dll":"No se detectan DLL propias de LL-Dominus."},
  "dependencies": [
    {"name":"PHP","required":"obligatoria Web","platform":"VPS/Windows","link":"runtime","origin":"externa","license":"PHP License","location":"servidor","usedBy":"public/, cliente/, importador","notes":">= 8.0 según composer.json"},
    {"name":"DOM","required":"obligatoria para RichText Web","platform":"PHP","link":"extensión","origin":"externa","license":"PHP","location":"ext-dom","usedBy":"public/php/TRichTextSanitizer.php"},
    {"name":"mbstring","required":"recomendada/obligatoria para conversión LL12 completa","platform":"PHP","link":"extensión","origin":"externa","license":"PHP","location":"ext-mbstring","usedBy":"importador, RichText e IA"},
    {"name":"cURL","required":"opcional, solo IA","platform":"PHP","link":"extensión dinámica","origin":"externa","license":"curl","location":"ext-curl","usedBy":"public/IA/TLLDominusIA.php"},
    {"name":"Pell","required":"obligatoria RichEdit Designer","platform":"Web","link":"asset JS/CSS","origin":"vendor local","license":"MIT","location":"public/vendor/pell/","usedBy":"public/index.php"},
    {"name":"Harbour","required":"obligatoria para compilar/enlazar Engine","platform":"Windows; Linux futuro","link":"toolchain/runtime","origin":"externa","license":"GPL exception / componentes propios","location":"configuración local","usedBy":"tools/harbour/"},
    {"name":"MinGW GCC","required":"obligatoria build Windows actual","platform":"Windows x86","link":"toolchain","origin":"externa","license":"GPL toolchain","location":"configuración local","usedBy":"hbmk2 y backends C"},
    {"name":"hbhpdf + libHaru","required":"obligatoria si se usa PDF","platform":"Harbour","link":"estática externa","origin":"Harbour/externa","license":"zlib/libpng","location":"Harbour lib local","usedBy":"TRenderPDF y paquete Xailer"},
    {"name":"libpng + zlib/hbzlib","required":"PDF/XLSX","platform":"Harbour","link":"estática externa","origin":"externa","license":"libpng/zlib","location":"Harbour lib local","usedBy":"PDF, XLSX, paquete Xailer"},
    {"name":"hbct","required":"integración Xailer actual","platform":"Harbour","link":"estática externa","origin":"Harbour contrib","license":"Harbour","location":"Harbour lib local","usedBy":"build combinado Xailer"},
    {"name":"stb","required":"renderer imagen","platform":"C portable","link":"compilada en backend","origin":"vendor","license":"MIT o Public Domain","location":"tools/harbour/renderers/vendor/stb/","usedBy":"TRenderImageBackend.c"},
    {"name":"libxlsxwriter 1.2.4","required":"exportación XLSX","platform":"C portable","link":"fuentes integradas","origin":"vendor","license":"BSD-2-Clause","location":"tools/harbour/exporters/vendor/libxlsxwriter-1.2.4/","usedBy":"TExportXLSXBackend.c"},
    {"name":"Node.js + Playwright","required":"solo desarrollo/test","platform":"Desarrollo","link":"node_modules no distribuido","origin":"externa","license":"varias","location":"package.json/package-lock.json","usedBy":"tests/designer y tests/playwright"}
  ],
  "webDeploy": {
    "required":["public/index.php","public/apiLLDominus.php","public/listTemplates.php","public/loadTemplate.php","public/saveTemplate.php","public/templateStorage.php","public/css/","public/js/","public/php/","public/motor/clases/ y endpoints runtime necesarios","public/vendor/pell/","public/DesignerHelp/ si se ofrece ayuda","lbl/ con solo plantillas autorizadas","lst/ como almacén de entrada/runtime si se habilita"],
    "optional":["public/IA/ (módulo congelado, no bloqueante; requiere cURL/modelo)","tools/ll12_import/import_lst.php y sus dependencias si el VPS debe importar L&L","public/catalogos/","public/fonts/ y public/img/ cuando contengan assets usados","cliente/php/TLLDominusPHP.php para consumidores externos"],
    "exclude":["node_modules/","tests/","test-results/","tools/harbour/","tools/ll12_import/test_*.php y output/","lst-antiguos/","docs/","tmp/","samples/","pdf/","cliente/php/preview_demo.php","cliente/php/runtime_demo.json","public/motor/tests/","public/php/tests/","public/IA/run_tests.php y public/IA/tools/","*.o","*.a","logs, screenshots, traces y vídeos"],
    "requirements":["PHP >= 8.0","ext-dom para RichText","ext-mbstring para importación/conversión completa","ext-curl solo si se instala IA","Apache o Nginx+PHP-FPM con public/ como document root recomendado","Escritura del usuario PHP en lbl/ y en lst/ solo si se usa como entrada","Bloquear acceso HTTP directo a lbl/, lst/ y tools/ si quedan fuera de public/","Límites de subida/tamaño ajustados si se permite importar LST"],
    "futurePath":"dist/web-designer/","state":"NO generado / NO validado"
  },
  "packages": [
    {"id":"web","name":"A. WEB DESIGNER / VPS","future":"dist/web-designer/","include":["public runtime depurado","lbl productivo seleccionado","lst solo si se usa","importador LL12 opcional"],"exclude":["tests","IA si se decide excluir","Harbour","node_modules","históricos"],"dependencies":["PHP >=8.0","DOM","mbstring","cURL opcional"],"output":"Sitio desplegable","status":"red"},
    {"id":"engine","name":"B. ENGINE MULTIPLATAFORMA","future":"dist/engine/{win32,win64,linux64}/","include":["liblldominus.a por ABI","headers/contrato de uso","licencias vendor","README de link"],"exclude":["Xailer","tests","plantillas","demos"],"dependencies":["Harbour/runtime ABI","PDF libs","zlib según perfil"],"output":"Tres paquetes por plataforma","status":"red"},
    {"id":"xailer","name":"C. XAILER WINDOWS","future":"dist/xailer/","include":["libXaLLDominus.a validada","README/API","recursos necesarios"],"exclude":["objetos intermedios","rutas locales","tests","Desktop artifacts"],"dependencies":["Xailer 9/Harbour ABI compatible"],"output":"Kit integrable en proyecto Xailer","status":"red"},
    {"id":"php","name":"D. CLIENTE PHP","future":"dist/php-client/","include":["TLLDominusPHP.php","README/configuración","ejemplo separado opcional"],"exclude":["runtime_demo.json del núcleo","servidor de referencia"],"dependencies":["PHP >=8.0","endpoint LL-Dominus"],"output":"Cliente PHP autocontenido","status":"yellow"}
  ],
  "templates": [
    {"path":"lbl/","files":30,"sizeMiB":6.41,"role":"Plantillas activas/productivas y demos; desplegar mediante manifiesto, no todo a ciegas.","distribution":"selección VPS/Xailer"},
    {"path":"lst/","files":1,"sizeMiB":0.00,"role":"Almacenamiento/entrada LST expuesto por listTemplates/templateStorage.","distribution":"solo si se habilita flujo LST"},
    {"path":"lst-antiguos/","files":875,"sizeMiB":150.01,"role":"Corpus histórico de List & Label.","distribution":"NO"}
  ],
  "testInventory": [
    {"path":"tests/designer/","files":45,"kind":"Playwright/diseñador","last":"Suite fuente presente; no se ejecutó completa en esta auditoría","distribution":false},
    {"path":"tests/playwright/","files":11,"kind":"Cierres visuales/funcionales","last":"Pruebas fuente presentes","distribution":false},
    {"path":"tests/ia/","files":426,"kind":"IA, fixtures y checkpoints","last":"IA congelada 70%; 23 PASS, 1 FAIL y 1 ambigüedad en cierre documentado","distribution":false},
    {"path":"tools/harbour/tests/","files":35,"kind":"PRG Engine/renderers/exporters más contrato Xailer","last":"Cobertura activa; no corrida completa en esta auditoría","distribution":false},
    {"path":"tools/ll12_import/test_*.php","files":7,"kind":"Importador LL12","last":"Pruebas activas; cierre completo pendiente","distribution":false},
    {"path":"public/motor/tests/ y public/php/tests/","files":null,"kind":"Runtime PHP","last":"Suites fuente presentes","distribution":false}
  ],
  "documentation": [
    {"category":"PRODUCCIÓN","paths":["README.md","CHANGELOG.md","tools/harbour/README.md","tools/harbour/xailer/README_preview.md"]},
    {"category":"ARQUITECTURA","paths":["AGENTS.md","docs/arquitectura/","docs/designer/auditoria-refactor-clases.md","docs/engine/auditoria-engine-portabilidad.md"]},
    {"category":"LENGUAJE","paths":["docs/lenguaje/","public/DesignerHelp/"]},
    {"category":"IA","paths":["docs/ia-experimental-70-checkpoint.md","docs/ia-reference/"]},
    {"category":"AUDITORÍAS","paths":["docs/repository-cleanup-audit.md","docs/repository-cleanup-delete-manifest.md","docs/auditoria-importador-ll12-etiquetas-vs-informes.md","docs/cierre-importador-ll12-etiquetas.md","docs/correccion-quirurgica-etiqueta-valero.md"]},
    {"category":"HISTÓRICO/REFERENCIA","paths":["docs/list-label/","docs/engine/auditoria-engine-portabilidad.txt (duplicado del MD a revisar)"]}
  ],
  "matrix": [
    ["public/","yes","no","no","no","yes","no","yes","no"], ["lbl/ (selección)","yes","no","optional","no","yes","no","yes","no"],
    ["lst/","optional","no","no","no","yes","no","yes","no"], ["tools/ll12_import/import_lst.php","optional","no","no","no","yes","no","yes","no"],
    ["tools/harbour/engine/","no","yes","source","no","yes","no","yes","no"], ["tools/harbour/renderers/","no","yes","source","no","yes","no","yes","no"],
    ["tools/harbour/exporters/","no","yes","source","no","yes","no","yes","no"], ["tools/harbour/lib/liblldominus.a","no","yes","dependency","no","yes","no","no","yes"],
    ["tools/harbour/xailer/","no","no","yes","no","yes","no","yes","no"], ["libXaLLDominus.a canónica","no","no","pending","no","yes","no","no","yes"],
    ["cliente/php/TLLDominusPHP.php","optional","no","no","yes","yes","no","yes","no"], ["cliente/php/*demo*","no","no","no","optional","yes","yes","yes","no"],
    ["servidor/php/TPreviewPHP.php","no","no","no","no","yes","no","yes","no"], ["tests/ y tests internos","no","no","no","no","yes","yes","yes","no"],
    ["docs/","no","no","no","no","yes","no","yes","no"], ["lst-antiguos/","no","no","no","no","archive","no","yes","no"],
    ["node_modules/","no","no","no","no","local","no","no","generated"], ["dist/","future","future","future","future","future","no","no","yes"]
  ],
  "debt": [
    {"status":"green","title":"Separación base reconocible","detail":"public, engine, renderers, exporters, xailer, cliente, servidor, plantillas y tests tienen fronteras físicas identificables."},
    {"status":"yellow","title":"Builds con rutas absolutas","detail":"config.bat y el build Xailer dependen de C:\\local\\harbour y C:\\local\\xailer9; conviene configuración por entorno/perfil."},
    {"status":"red","title":"Ausencia de dist y manifiestos","detail":"No existe una unidad reproducible y verificable para VPS, Engine o Xailer; bloquea entrega limpia."},
    {"status":"red","title":"Salida Xailer canónica ausente","detail":"El BAT declara una salida externa, pero hoy no existe allí. Un artefacto de Desktop no sustituye el output oficial."},
    {"status":"yellow","title":"Fuentes y outputs próximos","detail":"tools/harbour/lib está dentro del árbol de herramientas; el futuro dist debe separar resultado firmado/versionado de fuentes."},
    {"status":"yellow","title":"Tests dentro de public","detail":"public/motor/tests, public/php/tests, IA/run_tests.php y herramientas no deben entrar en un paquete VPS mínimo."},
    {"status":"yellow","title":"Demos mezcladas en cliente","detail":"preview_demo.php y runtime_demo.json deben separarse del núcleo TLLDominusPHP.php."},
    {"status":"yellow","title":"Documento duplicado","detail":"docs/engine/auditoria-engine-portabilidad.md y .txt requieren decidir una fuente canónica."},
    {"status":"yellow","title":"Áreas dudosas conservadas","detail":"tmp/harbour_reference/TLL_original.prg, tools/harbour/stP1kAlM y tools/harbour/ClasesXailer/ siguen fuera de distribución hasta decisión explícita."},
    {"status":"yellow","title":"Árbol de trabajo no congelado","detail":"Hay cambios productivos y tests pendientes en Git; antes del packaging se necesita un commit/tag identificable y suite de cierre."}
  ],
  "roadmap": [
    {"priority":1,"task":"Cerrar y ejecutar una matriz de regresión reproducible sobre el estado actual","component":"Tests","blocking":true,"difficulty":"media","effort":"M","unlock":3.0},
    {"priority":2,"task":"Generar manifiesto y dist/web-designer mínimo sin tests, históricos ni herramientas","component":"Packaging/VPS","blocking":true,"difficulty":"media","effort":"M","unlock":4.0},
    {"priority":3,"task":"Validar dist/web-designer en VPS limpio con permisos, carga, guardado, preview e importación opcional","component":"Deploy VPS","blocking":true,"difficulty":"media","effort":"M","unlock":4.0},
    {"priority":4,"task":"Generar y verificar libXaLLDominus.a en la salida canónica con objetos Xailer actuales","component":"Xailer","blocking":true,"difficulty":"media","effort":"M","unlock":3.0},
    {"priority":5,"task":"Cerrar regresiones visuales Xailer pendientes con etiquetas reales","component":"Xailer/Renderers","blocking":true,"difficulty":"alta","effort":"L","unlock":3.0},
    {"priority":6,"task":"Crear paquete dist/xailer reproducible y sin rutas C:\\local","component":"Packaging/Xailer","blocking":true,"difficulty":"media","effort":"M","unlock":2.0},
    {"priority":7,"task":"Definir y producir build Engine Windows x64 con ABI documentada","component":"Windows builds","blocking":false,"difficulty":"media","effort":"M","unlock":2.0},
    {"priority":8,"task":"Crear build Linux x64, resolver dependencias y ejecutar tests Engine/exportadores","component":"Linux","blocking":false,"difficulty":"alta","effort":"L","unlock":4.5},
    {"priority":9,"task":"Cerrar importador LL12 con corpus seleccionado y sin outputs dentro del paquete","component":"Importador","blocking":false,"difficulty":"media","effort":"M","unlock":2.0},
    {"priority":10,"task":"Versionar manifiestos, licencias, checksums y guías de instalación de los cuatro paquetes","component":"Documentación/Packaging","blocking":true,"difficulty":"media","effort":"M","unlock":2.5}
  ],
  "externalConfiguration": [
    "C:\\local\\harbour — raíz Harbour configurada por tools/harbour/config.bat",
    "C:\\local\\xailer9 — Xailer/Harbour y proyecto esperados por build_libXaLLDominus.bat",
    "C:\\local\\xailer9\\Proyectos\\LLDominus\\Obj — objetos Xailer esperados; no presentes en esta máquina durante la auditoría",
    "C:\\local\\xailer9\\Proyectos\\LLDominus\\lib\\libXaLLDominus.a — salida canónica configurada; ausente",
    "C:\\Users\\admin\\Desktop\\libXaLLDominus.a — artefacto local observado, no canónico ni distribuible por sí solo"
  ],
  "validation": {
    "checked":["Rutas y ficheros principales","Lista de 25 PRG Engine contra build_liblldominus.bat","Fuentes C/vendor","Target MinGW i686-w64-mingw32","Existencia y tamaño de liblldominus.a","Ausencia de libXaLLDominus.a en salida configurada","Build scripts BAT/PS1 y ausencia de SH","Dependencias PHP por uso y composer.json","Conteos de carpetas principales","Checkpoint IA"],
    "notRun":["Suites completas","Build nuevo","Deploy VPS","Build Win64/Linux","Generación de dist"],
    "limits":"El estado de pruebas se informa como evidencia disponible, no como PASS fresco. No se modificó ni ejecutó código productivo para construir este mapa."
  }
}
