xonecode 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/README.md +167 -0
  2. package/dist/agent/authEnDisco.js +56 -0
  3. package/dist/agent/authEnDisco.js.map +1 -0
  4. package/dist/agent/configEnDisco.js +109 -0
  5. package/dist/agent/configEnDisco.js.map +1 -0
  6. package/dist/agent/crearProyecto.js +34 -0
  7. package/dist/agent/crearProyecto.js.map +1 -0
  8. package/dist/agent/entorno.js +124 -0
  9. package/dist/agent/entorno.js.map +1 -0
  10. package/dist/agent/guionizado.js +53 -0
  11. package/dist/agent/guionizado.js.map +1 -0
  12. package/dist/agent/instantanea.js +129 -0
  13. package/dist/agent/instantanea.js.map +1 -0
  14. package/dist/agent/interrupts.js +83 -0
  15. package/dist/agent/interrupts.js.map +1 -0
  16. package/dist/agent/mensajes.js +24 -0
  17. package/dist/agent/mensajes.js.map +1 -0
  18. package/dist/agent/modelos.js +42 -0
  19. package/dist/agent/modelos.js.map +1 -0
  20. package/dist/agent/normalizar.js +20 -0
  21. package/dist/agent/normalizar.js.map +1 -0
  22. package/dist/agent/perfiles.js +103 -0
  23. package/dist/agent/perfiles.js.map +1 -0
  24. package/dist/agent/proyecto.js +107 -0
  25. package/dist/agent/proyecto.js.map +1 -0
  26. package/dist/agent/puente.js +142 -0
  27. package/dist/agent/puente.js.map +1 -0
  28. package/dist/agent/resumenDeTool.js +48 -0
  29. package/dist/agent/resumenDeTool.js.map +1 -0
  30. package/dist/agent/skills.js +65 -0
  31. package/dist/agent/skills.js.map +1 -0
  32. package/dist/agent/textoDeTool.js +113 -0
  33. package/dist/agent/textoDeTool.js.map +1 -0
  34. package/dist/agent/turnoReal.js +173 -0
  35. package/dist/agent/turnoReal.js.map +1 -0
  36. package/dist/agent/verificador.js +65 -0
  37. package/dist/agent/verificador.js.map +1 -0
  38. package/dist/agent/xoneAgent.js +106 -0
  39. package/dist/agent/xoneAgent.js.map +1 -0
  40. package/dist/bin.js +9 -0
  41. package/dist/bin.js.map +1 -0
  42. package/dist/cli/aprobar.js +82 -0
  43. package/dist/cli/aprobar.js.map +1 -0
  44. package/dist/cli/config.js +133 -0
  45. package/dist/cli/config.js.map +1 -0
  46. package/dist/cli/consola.js +346 -0
  47. package/dist/cli/consola.js.map +1 -0
  48. package/dist/cli/describe.js +53 -0
  49. package/dist/cli/describe.js.map +1 -0
  50. package/dist/cli/doctor.js +45 -0
  51. package/dist/cli/doctor.js.map +1 -0
  52. package/dist/cli/main.js +520 -0
  53. package/dist/cli/main.js.map +1 -0
  54. package/dist/cli/markdown.js +90 -0
  55. package/dist/cli/markdown.js.map +1 -0
  56. package/dist/cli/run.js +164 -0
  57. package/dist/cli/run.js.map +1 -0
  58. package/dist/cli/spinner.js +89 -0
  59. package/dist/cli/spinner.js.map +1 -0
  60. package/dist/cli/stdio.js +193 -0
  61. package/dist/cli/stdio.js.map +1 -0
  62. package/dist/cli/tema.js +40 -0
  63. package/dist/cli/tema.js.map +1 -0
  64. package/dist/cli/verify.js +62 -0
  65. package/dist/cli/verify.js.map +1 -0
  66. package/dist/core/bitacora.js +30 -0
  67. package/dist/core/bitacora.js.map +1 -0
  68. package/dist/core/config.js +236 -0
  69. package/dist/core/config.js.map +1 -0
  70. package/dist/core/contextos.js +56 -0
  71. package/dist/core/contextos.js.map +1 -0
  72. package/dist/core/deps.js +51 -0
  73. package/dist/core/deps.js.map +1 -0
  74. package/dist/core/diff.js +79 -0
  75. package/dist/core/diff.js.map +1 -0
  76. package/dist/core/esqueleto.js +366 -0
  77. package/dist/core/esqueleto.js.map +1 -0
  78. package/dist/core/events.js +2 -0
  79. package/dist/core/events.js.map +1 -0
  80. package/dist/core/modelos.js +85 -0
  81. package/dist/core/modelos.js.map +1 -0
  82. package/dist/core/notify.js +106 -0
  83. package/dist/core/notify.js.map +1 -0
  84. package/dist/core/ports.js +114 -0
  85. package/dist/core/ports.js.map +1 -0
  86. package/dist/core/turno.js +127 -0
  87. package/dist/core/turno.js.map +1 -0
  88. package/dist/vendor/hitl.js +103 -0
  89. package/dist/vendor/hitl.js.map +1 -0
  90. package/dist/vendor/skillLoaders/catalog.js +74 -0
  91. package/dist/vendor/skillLoaders/catalog.js.map +1 -0
  92. package/dist/vendor/tokenTracking.js +58 -0
  93. package/dist/vendor/tokenTracking.js.map +1 -0
  94. package/package.json +41 -0
  95. package/skills/xone-debugging/SKILL.md +52 -0
  96. package/skills/xone-debugging/references/faq.md +561 -0
  97. package/skills/xone-debugging/references/troubleshooting-y-glosario.md +429 -0
  98. package/skills/xone-development/SKILL.md +105 -0
  99. package/skills/xone-development/references/anti-patrones.md +94 -0
  100. package/skills/xone-development/references/css/atributos-por-categoria.md +509 -0
  101. package/skills/xone-development/references/css/buenas-practicas-y-parser.md +419 -0
  102. package/skills/xone-development/references/css/dinamicos-cascada-y-componentes.md +550 -0
  103. package/skills/xone-development/references/css/patrones-material-y-temas.md +1140 -0
  104. package/skills/xone-development/references/css/propiedades-y-herencia.md +885 -0
  105. package/skills/xone-development/references/css/selectores-unidades-colores.md +840 -0
  106. package/skills/xone-development/references/datos/appdata-referencia-ampliada.md +457 -0
  107. package/skills/xone-development/references/datos/appdata.md +611 -0
  108. package/skills/xone-development/references/datos/http-sqlmanager-y-crypto.md +720 -0
  109. package/skills/xone-development/references/datos/http.md +366 -0
  110. package/skills/xone-development/references/datos/oauth2-y-replica.md +156 -0
  111. package/skills/xone-development/references/device/biometria-imagedrawing-y-otros.md +544 -0
  112. package/skills/xone-development/references/device/objetos-de-dispositivo.md +583 -0
  113. package/skills/xone-development/references/device/systemsettings-referencia-ampliada.md +396 -0
  114. package/skills/xone-development/references/device/systemsettings-y-permisos.md +342 -0
  115. package/skills/xone-development/references/fundamentos/conceptos-clave.md +695 -0
  116. package/skills/xone-development/references/fundamentos/configuracion-app-xml-ini-mappings.md +668 -0
  117. package/skills/xone-development/references/fundamentos/errores-comunes.md +312 -0
  118. package/skills/xone-development/references/fundamentos/navegacion-convenciones-y-primer-proyecto.md +576 -0
  119. package/skills/xone-development/references/fundamentos/plataforma-y-anatomia-de-proyecto.md +387 -0
  120. package/skills/xone-development/references/indice-completo.md +77 -0
  121. package/skills/xone-development/references/javascript/coleccion-error-y-usuario.md +260 -0
  122. package/skills/xone-development/references/javascript/debugging-y-best-practices.md +245 -0
  123. package/skills/xone-development/references/javascript/metodos-de-los-controles.md +556 -0
  124. package/skills/xone-development/references/javascript/metodos-nativos-de-la-vista.md +114 -0
  125. package/skills/xone-development/references/javascript/motor-js-y-contexto-de-ejecucion.md +319 -0
  126. package/skills/xone-development/references/javascript/objeto-ai-llm-en-dispositivo.md +358 -0
  127. package/skills/xone-development/references/javascript/objetos-creables-a-m.md +527 -0
  128. package/skills/xone-development/references/javascript/objetos-creables-n-z.md +385 -0
  129. package/skills/xone-development/references/javascript/patrones-criticos-seguridad-y-rendimiento.md +595 -0
  130. package/skills/xone-development/references/javascript/patrones-de-navegacion-datos-y-codigo.md +751 -0
  131. package/skills/xone-development/references/javascript/patrones-de-ui-voz-integracion-y-seguridad.md +701 -0
  132. package/skills/xone-development/references/javascript/plantillas-y-funciones-utilitarias.md +647 -0
  133. package/skills/xone-development/references/javascript/self-y-dataobject.md +449 -0
  134. package/skills/xone-development/references/javascript/singletons-globales.md +361 -0
  135. package/skills/xone-development/references/javascript/ui-catalogo-de-metodos.md +464 -0
  136. package/skills/xone-development/references/javascript/ui-gps-camara-y-multimedia.md +506 -0
  137. package/skills/xone-development/references/javascript/ui-navegacion-mensajes-y-vista.md +422 -0
  138. package/skills/xone-development/references/resumen-js-datos-dispositivo.md +80 -0
  139. package/skills/xone-development/references/resumen-xml-y-css.md +74 -0
  140. package/skills/xone-development/references/tipos-de-prop.md +28 -0
  141. package/skills/xone-development/references/xml-ui/asfilter-visibilidad-eventos-y-macros.md +576 -0
  142. package/skills/xone-development/references/xml-ui/atributos-coll-group-frame.md +235 -0
  143. package/skills/xone-development/references/xml-ui/atributos-method-macro-script-event-app.md +244 -0
  144. package/skills/xone-development/references/xml-ui/atributos-prop.md +439 -0
  145. package/skills/xone-development/references/xml-ui/contents-y-macros.md +392 -0
  146. package/skills/xone-development/references/xml-ui/errores-comunes-xml.md +245 -0
  147. package/skills/xone-development/references/xml-ui/estructura-y-nodo-coll.md +326 -0
  148. package/skills/xone-development/references/xml-ui/eventos-ciclo-de-vida-e-interaccion.md +704 -0
  149. package/skills/xone-development/references/xml-ui/eventos-sistema-login-y-personalizados.md +944 -0
  150. package/skills/xone-development/references/xml-ui/layouts-herencia-y-buenas-practicas.md +618 -0
  151. package/skills/xone-development/references/xml-ui/mapas.md +685 -0
  152. package/skills/xone-development/references/xml-ui/mappings-y-colecciones-separadas.md +148 -0
  153. package/skills/xone-development/references/xml-ui/nodos-group-y-frame.md +666 -0
  154. package/skills/xone-development/references/xml-ui/patrones-de-pantalla.md +643 -0
  155. package/skills/xone-development/references/xml-ui/prop-atributos-y-condiciones.md +298 -0
  156. package/skills/xone-development/references/xml-ui/prop-tipos-basicos.md +493 -0
  157. package/skills/xone-development/references/xml-ui/prop-tipos-combos-y-controles.md +664 -0
  158. package/skills/xone-development/references/xml-ui/prop-tipos-listas-y-mapas.md +412 -0
  159. package/skills/xone-plan-builder/SKILL.md +183 -0
  160. package/skills/xone-plan-builder/agents/openai.yaml +5 -0
  161. package/skills/xone-plan-builder/references/TASKS-FORMAT.md +132 -0
  162. package/skills/xone-project-generator/SKILL.md +111 -0
  163. package/skills/xone-project-generator/references/canonical-sizes.md +292 -0
  164. package/skills/xone-project-generator/references/colecciones-base.md +16 -0
  165. package/skills/xone-project-generator/references/convenciones-de-nombres.md +16 -0
  166. package/skills/xone-project-generator/references/ejemplos-por-sector-y-prohibiciones.md +140 -0
  167. package/skills/xone-project-generator/references/fase-3-estilos-css.md +597 -0
  168. package/skills/xone-project-generator/references/fase-6-colecciones.md +762 -0
  169. package/skills/xone-project-generator/references/fase-7-asfilter-e-integraciones.md +142 -0
  170. package/skills/xone-project-generator/references/fase-7-entidades-y-estructura-de-pantalla.md +494 -0
  171. package/skills/xone-project-generator/references/fase-7-plantilla-consola.md +477 -0
  172. package/skills/xone-project-generator/references/fase-7-plantillas-de-pantalla.md +302 -0
  173. package/skills/xone-project-generator/references/fase-7-viewmodes-graficos-y-listas.md +681 -0
  174. package/skills/xone-project-generator/references/fase-7-viewmodes-mapa-y-calendario.md +479 -0
  175. package/skills/xone-project-generator/references/fases-0-2-analisis-y-modelo-de-datos.md +350 -0
  176. package/skills/xone-project-generator/references/fases-10-12-readmes-y-validacion.md +194 -0
  177. package/skills/xone-project-generator/references/fases-4-5-estructura-y-configuracion.md +587 -0
  178. package/skills/xone-project-generator/references/fases-8-9-eventos-y-javascript.md +861 -0
  179. package/skills/xone-project-generator/references/flujo-de-generacion.md +67 -0
  180. package/skills/xone-project-generator/references/plantillas-estandar.md +98 -0
  181. package/skills/xone-project-generator/references/tamanos-canonicos.md +49 -0
  182. package/skills/xone-review/SKILL.md +189 -0
  183. package/skills/xone-spec-builder/SKILL.md +235 -0
  184. package/skills/xone-spec-builder/agents/openai.yaml +5 -0
  185. package/skills/xone-spec-builder/references/ADR-FORMAT.md +55 -0
  186. package/skills/xone-spec-builder/references/CONTEXT-FORMAT.md +42 -0
  187. package/skills/xone-spec-builder/references/PLAN-FORMAT.md +120 -0
@@ -0,0 +1,67 @@
1
+ # El flujo de generación de un proyecto
2
+
3
+ > Referencia de `xone-project-generator`. Sale del `SKILL.md` para que lo
4
+ > esencial quepa en una lectura por omisión (100 líneas).
5
+
6
+ ## Flujo de Generación de Proyectos
7
+
8
+
9
+ ### Fase 1: Análisis de Requisitos
10
+
11
+ 1. **Comprender la descripción** — Que tipo de aplicación, cual es su proposito
12
+ 2. **Identificar colecciones** — Modelo de datos: entidades, campos, relaciones
13
+ 3. **Identificar pantallas y navegación** — Flujo de usuario: entrada, menu, listados, detalle, formularios
14
+ 4. **Identificar integraciones** — GPS, camara, firma digital (DR), escaner QR/barras
15
+ 5. **Definir paleta de colores y estilo visual** — Colores primarios, secundarios, fondos, textos
16
+
17
+ ### Fase 2: Estructura del Proyecto
18
+
19
+ Consulta [references/fases-0-2-analisis-y-modelo-de-datos.md](references/fases-0-2-analisis-y-modelo-de-datos.md) para el flujo completo.
20
+
21
+ ```
22
+ NombreProyecto/
23
+ ├── bd/ # [OBLIGATORIO] Base de datos SQLite
24
+ ├── icons/ # [OBLIGATORIO] Recursos graficos (solo PNG)
25
+ ├── files/ # [OBLIGATORIO] Archivos dinamicos (fotos, firmas, docs)
26
+ ├── fonts/ # [RECOMENDADO] Fuentes tipograficas (.ttf, .otf)
27
+ ├── scripts/ # [OPCIONAL] Scripts JS organizados por modulo
28
+ ├── lang/ # [OPCIONAL] Multiidioma (subcarpetas por ISO: en/, es/)
29
+ ├── certificates/ # [OPCIONAL] Certificados SSL/TLS
30
+ └── splash.png # [OPCIONAL] Imagen de splash de carga inicial (raíz del proyecto)
31
+ # Acepta tambien splash.jpg/.gif/.webp/.apng/.mp4/.3gp
32
+ # El framework lo carga automaticamente — NO es una <coll>
33
+ ```
34
+
35
+ ### Fase 3: Archivos de Configuración
36
+
37
+ | Archivo | Descripción |
38
+ |---------|-------------|
39
+ | `app.xml` | Configuración de la app. Atributo `prefix="gen"` por defecto |
40
+ | `app.ini` | Metadatos: Name, Title, Caption, Icon, IconFolder=icons, FilesFolder=files |
41
+ | `mappings.xne` | SOLO colecciones Empresas y Usuarios, con los campos de la tabla de arriba. Encoding coherente con el resto del proyecto (regla en `xone-development`) |
42
+ | `default.css` | Estilos globales con clases base |
43
+ | `functions.js` | Funciones JavaScript globales |
44
+
45
+ ### Fase 4: Colecciones y Pantallas
46
+
47
+ **Colecciones:**
48
+ - Un archivo `.xne` por cada coleccion adicional. Encoding coherente con cómo se guarda (regla en `xone-development`)
49
+ - `progid`: opcional salvo Empresas y Usuarios (regla en `xone-development`)
50
+ - Usar macro `##PREF##` en queries SQL
51
+ - Tipos de prop: solo los de la tabla de tipos de `xone-development`; no inventar otros
52
+
53
+ **Pantallas:**
54
+ - `EntradaApp.xne` — Pantalla de entrada **post-login** (bienvenida con botón "Entrar"). Obligatoria salvo que la app arranque directamente en `MenuPrincipal`. No es el splash (ver la regla de `xone-development` sobre la diferencia)
55
+ - `MenuPrincipal.xne` — Menu principal
56
+ - Pantallas de listado, detalle, formularios según requisitos
57
+ - Inicializar con `<before-edit>` (regla en `xone-development`)
58
+ - Splash de carga: fichero en la raíz del proyecto, no una pantalla `.xne` (misma regla)
59
+
60
+ ### Fase 5: Post-Generación
61
+
62
+ Indicar al usuario que ejecute:
63
+ 1. Generar base de datos con `xone_db_generator`
64
+ 2. Insertar datos iniciales (Empresa + Usuario admin)
65
+ 3. Descargar iconos de Google Material Icons (PNG, JPG o SVG — todos validos)
66
+
67
+ ---
@@ -0,0 +1,98 @@
1
+ # Las tres plantillas estándar
2
+
3
+ > Referencia de `xone-project-generator`. Sale del `SKILL.md` para que lo
4
+ > esencial quepa en una lectura por omisión (100 líneas).
5
+
6
+ ## Plantilla Estándar de Pantalla
7
+
8
+
9
+ ```xml
10
+ <?xml version="1.0" encoding="iso-8859-15"?>
11
+ <coll name="NombrePantalla" title="Título" special="true" notab="true" show-toolbar="false">
12
+
13
+ <!-- Inicializar la pantalla en before-edit, NUNCA en load -->
14
+ <before-edit refresh="false" show-wait-dialog="false">
15
+ <action name="runscript">
16
+ <script language="javascript">
17
+ // Inicializar campos y datos
18
+ self.MAP_TITULO = "Mi pantalla";
19
+ </script>
20
+ </action>
21
+ </before-edit>
22
+
23
+ <group name="grpPrincipal" id="1">
24
+ <frame name="frmHeader" width="100%" height="140p" bgcolor="#1565C0">
25
+ <!-- Logo, título, botones de navegacion -->
26
+ </frame>
27
+ <frame name="frmBody" width="100%" height="-2" scroll="true" bgcolor="#FFFFFF">
28
+ <!-- Contenido: campos, listas, botones -->
29
+ </frame>
30
+ <frame name="frmFooter" width="100%" height="100p" bgcolor="#F5F5F5">
31
+ <!-- Botones de acción, barra inferior -->
32
+ </frame>
33
+ </group>
34
+
35
+ <onback show-wait-dialog="false">
36
+ <action name="runscript">
37
+ <script language="javascript">
38
+ ui.getView(self).exit();
39
+ </script>
40
+ </action>
41
+ </onback>
42
+ </coll>
43
+ ```
44
+
45
+ ## Plantilla Estándar de Coleccion de Datos
46
+
47
+
48
+ ```xml
49
+ <?xml version="1.0" encoding="iso-8859-15"?>
50
+ <coll name="MiColeccion"
51
+ progid="ASData.CASBasicDataObj"
52
+ sql="SELECT ID, NOMBRE FROM ##PREF##MiColeccion"
53
+ objname="MiColeccion"
54
+ updateobj="MiColeccion"
55
+ loadall="true">
56
+ <group name="General" id="1">
57
+ <!-- ID y ROWID los gestiona XOne: no hace falta declararlos (válido pero redundante). Solo ID se rescata en el SELECT. -->
58
+ <prop name="NOMBRE" type="T" visible="7" size="150" width="100%" />
59
+ </group>
60
+ </coll>
61
+ ```
62
+
63
+ ## Plantilla mappings.xne
64
+
65
+
66
+ ```xml
67
+ <?xml version="1.0" encoding="iso-8859-15"?>
68
+ <xml>
69
+ <app prefix="gen" version="1.0.0" debug="true" default-language="javascript">
70
+ <style url="default.css" />
71
+ </app>
72
+ <collprops type="general">
73
+ <coll name="Empresas"
74
+ progid="ASGestion.CASEmpresa"
75
+ sql="SELECT ID, CODIGO, NOMBRE FROM ##PREF##Empresas"
76
+ objname="Empresas" updateobj="Empresas" loadall="true">
77
+ <group name="General" id="1">
78
+ <prop name="CODIGO" type="N" visible="7" />
79
+ <prop name="NOMBRE" type="T" visible="7" size="150" width="100%" />
80
+ </group>
81
+ </coll>
82
+ <coll name="Usuarios"
83
+ progid="ASGestion.CASUser"
84
+ sql="SELECT ID, CODIGO, NOMBRE, IDEMPRESA, LOGIN, PWD FROM ##PREF##Usuarios"
85
+ objname="Usuarios" updateobj="Usuarios" loadall="true">
86
+ <group name="General" id="1">
87
+ <prop name="CODIGO" type="N" visible="7" />
88
+ <prop name="NOMBRE" type="T" visible="7" size="100" width="100%" />
89
+ <prop name="IDEMPRESA" type="N" visible="7" mapcol="Empresas" mapfld="ID" />
90
+ <prop name="LOGIN" type="T" visible="7" size="50" width="100%" />
91
+ <prop name="PWD" type="X" visible="0" size="100" />
92
+ </group>
93
+ </coll>
94
+ </collprops>
95
+ </xml>
96
+ ```
97
+
98
+ ---
@@ -0,0 +1,49 @@
1
+ # Tamaños canónicos (`width` / `height` / `fontsize`)
2
+
3
+ > Referencia de `xone-project-generator`. Sale del `SKILL.md` para que lo
4
+ > esencial quepa en una lectura por omisión (100 líneas).
5
+
6
+ ## Tamaños canónicos (`width` / `height` / `fontsize`)
7
+
8
+
9
+ Antes de fijar cualquier `width` o `height`, consulta **[references/canonical-sizes.md](references/canonical-sizes.md)** — contiene tablas por tipo de elemento (frames, botones, inputs, listas, avatares, iconos, tipografía, áreas especiales, wearable) y los anti-patrones más frecuentes. **Todos los valores están calibrados para `resolution-width="1080"` / `resolution-height="1920"` (default XOne).**
10
+
11
+ > **REGLA CRÍTICA:** En XOne **`p` ≠ `dp`**. 1p = 1px en el dispositivo de referencia. Material 56dp en 1080×1920 (xxhdpi, density 3×) = **~168p**, NO 56p. Aplicar valores Material directamente como `p` produce barras/botones ~3× más pequeños de lo necesario.
12
+
13
+ ### Heurísticas de decisión (memorizar)
14
+
15
+ 1. **Header / footer / toolbar / drawer fijos** → `height` en `Np` absoluto (típicos en 1080×1920: header `164p`, header completo con tabs `404p`, footer con botones `216p`–`288p`, bottom nav `168p`, drawer width `840p`–`960p`).
16
+ 2. **Frame body principal entre header y footer fijos** → `height="-2"` o `height="100%" scroll="true"`. NUNCA un `%` calculado a mano restando los fijos.
17
+ 3. **Contenido apilado verticalmente** → `height="-2"` (wrap content) y dejar que el contenido mande. Solo fijar `Np` si necesitas mínimo visual.
18
+ 4. **Imágenes, avatares, iconos** → `Np` fijos en **ambos** ejes para preservar aspecto. NUNCA `width="100%" height="100%"` en una imagen.
19
+ 5. **Botones** → `width` en `%`, `height` en `Np`, mínimo **144p** (touch target Material 48dp × 3 en xxhdpi). CTAs principales: `124p` (workflow pill).
20
+ 6. **Inputs** → `width="95%"`–`"100%"`, `height` en `Np` (típico `144p`).
21
+ 7. **Dos elementos en la misma fila** → anchos `%` que sumen ≤ 100%; el segundo no hereda el salto de línea por defecto (regla en `xone-development`).
22
+ 8. **Los `%` se refieren al padre directo**, no a la pantalla. Tres frames hermanos con `height="40%"` desbordan (suman 120%).
23
+ 9. **`<prop>` tiene 2 columnas internas (label + valor)**: si `labelwidth="50"` y `width="50%"`, el valor real queda con 25% de la fila. Bajar `labelwidth` a 20-30 o subir `width` a 95-100%.
24
+ 10. **`fontsize` usa escala XOne 1-12**, NO Material `sp`/`dp`. Texto estándar = `5`, título sección = `7`, topbar = `10`–`11`, nombre app = `12`.
25
+
26
+ ### Defaults seguros para 1080×1920 (cuando no estás seguro)
27
+
28
+ | Nodo | width | height |
29
+ |------|-------|--------|
30
+ | `<frame>` cabecera | `100%` | `164p` |
31
+ | `<frame>` cuerpo | `100%` | `-2` con `scroll="true"` |
32
+ | `<frame>` pie con botones | `100%` | `216p` |
33
+ | `<frame>` tarjeta | `95%` | `-2` |
34
+ | `<prop type="T">` / `N` / `D` / `combo` | `100%` | `144p` |
35
+ | `<prop type="B">` (botón) | `90%` | `124p` |
36
+ | `<prop type="L">` (label) | `100%` | `-2` (o `96p`) |
37
+ | `<prop type="NC">` (checkbox) | `100%` | `144p` |
38
+ | `<prop type="IMG">` / `PH` / `DR` | `100%` | `600p`–`720p` |
39
+ | `<prop type="Z">` (contenedor) | `100%` | `-2` o `100%` |
40
+ | Icono `img-width` / `img-height` | `72p` (toolbar) o `104p` (botón cuadrado) | igual |
41
+ | `tmargin` entre elementos del mismo bloque | — | `30p` |
42
+ | `tmargin` entre bloques distintos | — | `50p` |
43
+ | `fontsize` texto estándar | — | `5` |
44
+
45
+ > **Si `resolution-width` ≠ 1080**, escalar con `valor_nuevo = valor_tabla × (resolution-width / 1080)`. Detalle en §14 de [references/canonical-sizes.md](references/canonical-sizes.md).
46
+
47
+ > **Limitación honesta:** sin ver el render real es imposible afinar al píxel. Estos valores cubren el caso típico y evitan errores groseros (desborde, touch target insuficiente, distorsión de imagen), pero pueden requerir ajuste tras la primera compilación. Si el usuario aporta una captura o el dispositivo objetivo (móvil / tablet / wearable / kiosko), usar la sección §11 (wearable) o ajustar proporcionalmente.
48
+
49
+ ---
@@ -0,0 +1,189 @@
1
+ ---
2
+ name: xone-review
3
+ description: "Validar, verificar y revisar proyectos XOne con el linter xone-simulator. Usar al validar un proyecto, validar una coll suelta, hacer smoke de una app, ejecutar un evento concreto, renderizar una coll o una pantalla tras el login, corregir iterativamente los errores del validador, o auditar un proyecto o un cambio antes de entregarlo: códigos del validador, checklist de entrega y priorización de hallazgos por severidad. También para inspeccionar la base de datos del proyecto con xone-db-tools: esquema de una tabla y consultas SQL sobre gestion.db. Las reglas y anti-patrones de cada capa viven en xone-development."
4
+ ---
5
+
6
+ # XOne Review
7
+
8
+ Verificación y revisión de proyectos XOne. Combina la validación automatizada con el CLI `xone-simulator` (paquete npm `xone-linter`), la validación de la BD con `xone-db-tools` y una revisión manual anclada a las reglas de `xone-development`.
9
+
10
+ **El linter dice qué está mal, no cuál es la forma correcta.** Para eso lee `xone-development`. No reportes como hallazgo ni apliques como arreglo nada que no puedas anclar al validador o a esas reglas.
11
+
12
+ ## Precondiciones
13
+
14
+ ```bash
15
+ command -v xone-simulator
16
+ ```
17
+
18
+ Si no existe: `npm install -g xone-linter xone-db-tools`. Si está instalado pero el shell no lo encuentra, usa la ruta completa al binario global (comprueba `npm config get prefix`).
19
+
20
+ En Claude Code, `/xone-validate [ruta]` ejecuta el flujo de validación y corrección completo.
21
+
22
+ ## Flujo
23
+
24
+ 1. Comprueba que `xone-simulator` existe; si no, indícalo al usuario y detente.
25
+ 2. `validate` y lee los issues. Prioriza `errors` sobre `warnings`.
26
+ 3. Si existe `bd/gestion.db`, ejecuta `xone-db-tools validate-db ./proyecto/bd/gestion.db --project ./proyecto --json`.
27
+ 4. Corrige **un tipo de error a la vez** y revalida tras cada tanda, para no introducir regresiones.
28
+ 5. `smoke` sobre la app completa cuando `validate` pase.
29
+ 6. Si `smoke` falla, aísla con `run` (evento concreto) y `render` (UI). Para una pantalla que está **detrás del login**, saca antes la sesión con `login --session` y pásasela a `render --session`.
30
+ 7. Revisión manual contra las reglas de `xone-development` (ver «Qué revisar en cada capa»).
31
+ 8. Prioriza los hallazgos y reporta con severidad, `archivo:línea` y causa raíz.
32
+
33
+ No des por cerrado el trabajo hasta que `validate` pase sin `errors` y `smoke` devuelva exit 0, o hasta que los `failures` restantes estén justificados.
34
+
35
+ **`validate-coll` queda fuera de este flujo, a propósito.** El flujo asume un proyecto completo; `validate-coll` es la entrada para cuando solo tienes un `.xne` suelto. Su veredicto es parcial por construcción, así que no cierra nada: en cuanto haya proyecto, se pasa `validate`.
36
+
37
+ ## Comandos
38
+
39
+ Requieren `xone-linter >= 1.2.0` — `validate-coll`, `login` y `render --session` aparecieron en 1.1.0, y 1.2.0 es el suelo soportado. `describe-table` y `execute-sql` necesitan `xone-db-tools >= 0.2.0`.
40
+
41
+ ```bash
42
+ xone-simulator validate ./proyecto --json # verificación estática
43
+ xone-simulator validate-coll ./Clientes.xne --json # UNA coll suelta, sin app.xml
44
+ xone-simulator smoke ./proyecto --json # ciclo de vida completo
45
+ xone-simulator run ./proyecto --coll X --event before-edit --json
46
+ xone-simulator render ./proyecto --coll X # coll a HTML
47
+ xone-simulator login ./proyecto --user u --pass p --session ./sesion.json
48
+ xone-simulator render ./proyecto --coll X --session ./sesion.json # pantalla tras el login
49
+ xone-db-tools validate-db ./proyecto/bd/gestion.db --project ./proyecto --json
50
+ xone-db-tools describe-table ./proyecto/bd/gestion.db gen_clientes --json # esquema de una tabla
51
+ xone-db-tools execute-sql ./proyecto/bd/gestion.db "SELECT …" --json # datos (¡también escribe!)
52
+ xone-db-tools execute-sql ./proyecto/bd/gestion.db --file ./consulta.sql --json
53
+ ```
54
+
55
+ **`validate`** comprueba XML bien formado y encoding, atributos obligatorios, unicidad de nombres, tipos de propiedad, `progid`, ficheros y estilos incluidos, sintaxis JS y referencias cruzadas (`mapcol`, `inherits`, `contents`, `openEditView`), más los anti-patrones documentados. Con `--json` devuelve `success`, `summary` e `issues` con severidad, fichero y mensaje.
56
+
57
+ **`validate-coll`** valida **una coll suelta**, sin `app.xml` ni el resto del proyecto. Es para cuando solo tienes el `.xne` —una coll recién escrita, un fichero recibido aparte—, no un sustituto de `validate`.
58
+
59
+ > **`"success": true` aquí NO significa que la coll esté bien.** Significa que no se halló nada
60
+ > entre los chequeos que **sí** se ejecutaron.
61
+
62
+ La respuesta trae un array **`skipped`** con lo que no se ha comprobado y por qué. **Léelo y
63
+ repórtalo junto al veredicto.** Sin el proyecto quedan fuera, entre otros:
64
+
65
+ - La sintaxis JS de los `<script>` de la coll (`JS_ASYNC_AWAIT` y compañía).
66
+ - Las referencias a nodos de la propia coll (`REF_NODE_MISSING`).
67
+ - Los handlers en ficheros `.js` (`REF_FUNC_MISSING`).
68
+ - Las referencias entre colls: `mapcol`, `mapfld`, `linkedto`, `<contents src>`.
69
+ - Los `<include>` y el `entry-point`.
70
+ - La composición del layout: la coll se valida **sin el layout inyectado**, así que los props, frames y eventos que aportaría `<include-layout>` quedan invisibles para el validador.
71
+
72
+ De los anti-patrones se ejecutan cinco de seis; solo se cae `ANTIPATTERN_VBSCRIPT`, que necesita
73
+ `app.xml`.
74
+
75
+ **`smoke`** dispara `create`/`before-edit`/`after-edit` más render con flow de todas las colls (o de `--coll X`). Con `--interact` además tapea los props con `onclick`/`method=ExecuteNode(...)` (máx. `--max-taps`, default 20). Exit code 1 si hay `failures`. Una coll rota no aborta el resto y cada fallo incluye su fase y el stack truncado. El entorno es siempre seguro: `network:'mock'` e in-memory, sin tocar red ni SQLite reales. Si `totals.stubWarnings > 0` en una coll que pasó, algún método fue absorbido por autostub (`kind: 'stub-method'`): no bloquea, pero repórtalo.
76
+
77
+ **`run`** ejecuta un evento a nivel de coll (`before-edit`, `create`, `onback`) o inline de prop (`onclick`, `onchange`, con `--prop` y `--data`). Devuelve estado y `log` de side-effects: navegación, mensajes, refrescos, HTTP, cambios de datos y errores.
78
+
79
+ **`render`** renderiza una coll a HTML con ciclo de vida (`--no-flow` para renderizar en frío). `--group N` renderiza una página concreta de un swipe, por su `id`. `--active-color <hex>` sustituye el valor de `MAP_COLORACTIVO`.
80
+
81
+ **`login` + `render --session` van juntos**, y ninguno sirve por separado: `login` ejecuta el `login()` **de la propia app** y vuelca la sesión a un fichero, que luego consume `render --session` para pintar pantallas que están detrás del login.
82
+
83
+ - **Completar significa salir de la coll de login.** Si al terminar se sigue en ella, el comando lo dice (`El login no completó: se sigue en "X"`), **no escribe el fichero de sesión** y devuelve **exit 1**. Que el script haya corrido no basta: en una prueba real se vio `appData.login(...)` ejecutarse y disparar su `onLoginSuccessful` con su toast, y aun así el login se consideró no completado por no haber navegado.
84
+ - **En el fallo imprime el log de side-effects** (`executeNode`, `appData.login`, mensajes), que es por dónde se empieza a diagnosticar.
85
+ - **Los defaults casi nunca encajan.** Son `--coll Login`, `--user-prop MAP_EMAIL`, `--pass-prop MAP_PASS`, `--login-prop MAP_LOGIN_BTN`, `--boot EntradaApp` y `--timeout 30`. Un proyecto que llame a las cosas de otra manera necesita los cuatro overrides —por ejemplo `--coll LoginColl --user-prop MAP_USUARIO --pass-prop MAP_PASSWORD --login-prop MAP_LOGIN`—. Antes de dar por roto el login, comprueba que apuntas a la coll y los props que el proyecto realmente tiene.
86
+
87
+ `--db-path` debe apuntar a una **copia** de la base de datos: el simulador puede mutarla. `--db-prefix` fija el prefijo de tablas, y está disponible en `run` y en `render`.
88
+
89
+ ### Leer datos de la BD
90
+
91
+ Además de `validate-db`, `xone-db-tools` tiene dos comandos que **devuelven datos**, y son la forma de responder «¿qué hay realmente en la base?» sin abrir SQLite a mano.
92
+
93
+ **`describe-table <gestion.db> <tabla>`** devuelve el esquema: por cada columna, `position`, `name`, `type`, `nullable`, `default` y `primaryKey`. Con `--json` sale estructurado; sin `--json`, como tabla legible. Es lo que confirma si una columna existe y con qué tipo, antes de culpar al XML.
94
+
95
+ **`execute-sql <gestion.db> "<sql>"`**, o `--file <consulta.sql>` para una consulta larga, ejecuta SQL arbitrario. Un `SELECT` devuelve un array de objetos fila; una escritura devuelve `{changes, lastInsertRowid}`.
96
+
97
+ > **`execute-sql` NO es de solo lectura: ejecuta lo que le pases, incluidos `INSERT`, `UPDATE`, `DELETE` y DDL, y muta el fichero.** Comprobado. Trabaja siempre sobre una **copia** de `gestion.db`, igual que con `--db-path` del simulador, y no lo apuntes a la BD del repositorio. Para inspeccionar, limítate a `SELECT`.
98
+
99
+ Recuerda el contrato del generador: tablas en minúsculas con prefijo `gen_`, campos en mayúsculas — por eso las consultas son de la forma `SELECT NOMBRE FROM gen_clientes`.
100
+
101
+ ## Códigos del validador
102
+
103
+ ### Errores
104
+
105
+ | Código | Significado |
106
+ |--------|-------------|
107
+ | `XML_PARSE` | XML mal formado en un `.xne` |
108
+ | `INVALID_PROP_TYPE` | Tipo de prop no soportado |
109
+ | `PROP_MISSING_NAME` / `PROP_MISSING_TYPE` | Prop sin `name` o sin `type` |
110
+ | `COLL_MISSING_PROGID` | Coll con `objname` pero sin `progid` |
111
+ | `GROUP_MISSING_ID` | Grupo sin atributo `id` |
112
+ | `APP_NO_ENTRY` | `app.xml` sin punto de entrada (`entry-point`) |
113
+ | `DUPLICATE_COLL_NAME` | Nombre de colección duplicado |
114
+ | `DUPLICATE_NAME_IN_COLL` | Nombre repetido dentro de una coll |
115
+ | `REF_MAPCOL_MISSING` | `mapcol` apunta a una coll inexistente |
116
+ | `REF_CONTENTS_SRC_MISSING` | `contents src` apunta a una coll inexistente |
117
+ | `REF_INHERITS_MISSING` | `inherits` apunta a una coll inexistente |
118
+ | `ANTIPATTERN_MULTIPLE_BEFORE_EDIT` | Más de un `before-edit` en la misma coll |
119
+ | `ANTIPATTERN_SELF_AS_FUNCTION` | `self` usado como función |
120
+ | `ANTIPATTERN_MACRO_SYNTAX` | `macro` llamado como método de `coll` |
121
+ | `ANTIPATTERN_SELF_LOCK` | `lock`/`unlock` llamados sobre `self` |
122
+ | `ANTIPATTERN_VBSCRIPT` | Include con `language="vbscript"` (descontinuado) |
123
+ | `JS_SYNTAX` | Error de sintaxis JavaScript |
124
+ | `JS_TEMPLATE_LITERAL` | Template literals no soportados |
125
+ | `JS_ASYNC_AWAIT` | `async`/`await` no soportados |
126
+
127
+ ### Warnings
128
+
129
+ | Código | Significado |
130
+ |--------|-------------|
131
+ | `ANTIPATTERN_LOAD_EVENT` | Se usa `<load>`; preferir `<before-edit>` |
132
+ | `REF_MAPFLD_MISSING` | `mapfld` no es campo de la coll de `mapcol` |
133
+ | `REF_LINKEDFIELD_MISSING` | `linkedfield` no es campo de la coll de `mapcol` |
134
+ | `REF_JS_COLL_MISSING` | Script referencia una colección inexistente |
135
+ | `REF_NODE_MISSING` | Referencia a nodo o evento inexistente |
136
+ | `REF_FUNC_MISSING` | Referencia a función inexistente |
137
+
138
+ Los códigos son case-sensitive. Cada warning debe justificarse o corregirse.
139
+
140
+ ## Qué revisar en cada capa
141
+
142
+ Las reglas y los anti-patrones de cada capa viven en la skill `xone-development`, que es donde se escriben una sola vez. Antes de marcar un hallazgo, contrástalo allí:
143
+
144
+ - Reglas transversales, tipos de prop, visibilidad, ciclo de vida y sintaxis del motor: `xone-development/SKILL.md`.
145
+ - Anti-patrones por área (XML, JavaScript, CSS, datos, dispositivo): sección «Anti-patrones» de `xone-development/SKILL.md`.
146
+ - Detalle de un atributo, una API o un valor admitido: el índice de referencias de `xone-development/SKILL.md`.
147
+
148
+ **No reportes como hallazgo nada que no puedas anclar al validador o a esas reglas.**
149
+
150
+ ## Checklist de entrega
151
+
152
+ - [ ] `validate` sin errores; warnings justificados o corregidos.
153
+ - [ ] `smoke` con exit 0.
154
+ - [ ] Pantallas nuevas siguen la jerarquía de `xone-development`.
155
+ - [ ] Colls de datos con `sql`, `objname` y `updateobj`; `progid` según la regla de `xone-development`.
156
+ - [ ] `##PREF##` en toda SQL de colección.
157
+ - [ ] Todo `unlock` con su `lock` en `finally`; todo `startBrowse` con su `endBrowse`.
158
+ - [ ] Cursores y conexiones SQL cerrados, patrón de `xone-development`.
159
+ - [ ] Callbacks asíncronos preservando `self`.
160
+ - [ ] Validación de entrada antes de `save()`.
161
+ - [ ] SQL parametrizado.
162
+ - [ ] CSS con unidades (`p`/`%`) y colores (`#AARRGGBB`) correctos.
163
+ - [ ] `allowUnsafeCertificates: false`; sin credenciales hardcodeadas.
164
+ - [ ] Solo se han tocado los `.xne` fuente (regla en `xone-development`).
165
+
166
+ ## Severidad y reporte
167
+
168
+ | Severidad | Definición | Acción |
169
+ |---|---|---|
170
+ | Crítico | Bloquea entrega: error del validador, SQL injection, `before-edit` duplicado, referencias rotas | Corregir antes de entregar |
171
+ | Alto | Riesgo de bug en runtime: `self` en callback, lock sin `finally`, `-8100` por no validar | Corregir en el mismo cambio |
172
+ | Medio | Mala práctica o rendimiento: `load`, refresh global, espera bloqueante | Corregir o registrar deuda técnica |
173
+ | Bajo | Estilo y consistencia: nombres, comentarios, organización del CSS | Sugerencia, no bloqueante |
174
+
175
+ Reporta cada hallazgo con `archivo:línea`, severidad, código del validador si existe, y causa raíz con la corrección propuesta. Al final indica qué se corrigió, qué se verificó (`validate` + `smoke`) y qué no has podido verificar, incluidas las limitaciones del sandbox.
176
+
177
+ ## Diagnóstico rápido
178
+
179
+ - XML mal formado o encoding → revisa el prólogo y que el `encoding` declarado coincida con cómo está guardado el `.xne`.
180
+ - Pantalla vacía → XML, primer `newline` de cada fila, nombres duplicados, `visible`/`disablevisible`, `special` junto a `sql` y `compatibility-mode`.
181
+ - Inicialización que no ocurre → mueve la lógica de `load` a `before-edit` o `create`.
182
+ - Coll que falla en `smoke` pero no en `validate` → `run` con `--json` para ver el stack de runtime.
183
+ - Muchos `stubWarnings` → reporta qué APIs del sandbox no están cubiertas; no son errores bloqueantes.
184
+
185
+ ## Fuente de las reglas
186
+
187
+ Los códigos del validador vienen del paquete `xone-linter`; las reglas de cada capa, de la skill `xone-development`. Para confirmar la forma correcta de algo antes de marcarlo como hallazgo o de aplicar un arreglo, lee `xone-development/SKILL.md` y su índice de referencias.
188
+
189
+ Para diagnosticar un fallo a partir de su síntoma, usa `xone-debugging`.