@ingcrea/aumic-puf 3.0.0 → 3.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.
- package/MANIFEST.es.md +172 -0
- package/MANIFEST.md +64 -0
- package/README.es.md +256 -0
- package/dist/cli/index.js +25 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/core/types.d.ts +2 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +7 -1
- package/dist/core/types.js.map +1 -1
- package/package.json +5 -2
- package/puf-github-action.yml +30 -0
package/MANIFEST.es.md
ADDED
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
# 📜 MANIFIESTO ARQUITECTÓNICO: ESTÁNDAR AUM-IC 7
|
|
2
|
+
|
|
3
|
+
> 🌍 **Navegación:** 🇲🇽 [Leer en Español](./MANIFEST.es.md) | 🇺🇸 [Read in English](./MANIFEST.md) | 📖 [README (ES)](./README.es.md)
|
|
4
|
+
|
|
5
|
+
Este documento rige el **Paradigma de Universos Multidimensionales de Ingeniería Creativa (Estándar AUM-IC 7)**. No es solo una guía de carpetas; es una estructura física, matemática y de ingeniería de software diseñada para cumplir de manera nativa con las normativas internacionales de calidad **ISO/IEC 25010** e **ISO 27001**.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
> 🏆 **LA VISIÓN AUM-IC:** Todo proyecto creado desde su inicio o migrado íntegramente al Paradigma AUM-IC es un proyecto que aspira al cumplimiento nativo de los más altos estándares globales. Al adoptar esta arquitectura, el sistema hereda las aristas de calidad de software (**ISO/IEC 25010**), blinda su infraestructura bajo máxima seguridad y privacidad corporativa (**ISO 27001, ISO 27701, SOC 2**), garantiza su testabilidad (**ISO 29119**) y asegura la inclusión y posicionamiento absoluto mediante un código semánticamente perfecto (**ISO 40500 / WCAG / SEO**).
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
## 🌌 El Porqué Fundamental: Entropía vs. Perfección Matemática
|
|
14
|
+
|
|
15
|
+
**La programación creada por humanos es entropía pura.** Es energía caótica que se dispersa: código espagueti, dependencias circulares, sistemas que se degradan con el tiempo y lógicas que colapsan.
|
|
16
|
+
|
|
17
|
+
El Universo real, aunque a simple vista parece caótico, es **brutal y matemáticamente preciso**. Desde la física cuántica hasta la mecánica celeste, todo obedece a un diseño quirúrgico impecable.
|
|
18
|
+
|
|
19
|
+
**El Paradigma AUM-IC nace para llevar la programación a esta perfección matemática universal.** Somete el caos del código a las leyes de la física cósmica. Es un modelo mental absoluto, **100% agnóstico al lenguaje** (TypeScript, Python, Rust, Go, C#), que divide el desarrollo en Materia Observable, Fuerzas Invisibles y Leyes del Tiempo.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## PARTE I: LA MATERIA OBSERVABLE (Estructura Fractal)
|
|
24
|
+
|
|
25
|
+
El Principio Hermético dicta: *"Como es arriba, es abajo"*. El ensamblaje de componentes sigue un ordenamiento jerárquico estricto. **Esta regla aplica simétricamente para la Interfaz (UI), las APIs (Controladores) y las Bases de Datos (Modelos).**
|
|
26
|
+
|
|
27
|
+
Para detener la entropía, los directorios utilizan obligatoriamente prefijos numéricos:
|
|
28
|
+
|
|
29
|
+
### ⚛️ Nivel 1: Átomos (`1-atoms/`)
|
|
30
|
+
* **Concepto:** La unidad base indivisible (Botones en UI / Helpers y Utils puros en Backend).
|
|
31
|
+
* **Regla:** 100% ignorantes. No importan otros archivos, no hacen peticiones, no tienen estado.
|
|
32
|
+
|
|
33
|
+
### 🧬 Nivel 2: Moléculas (`2-molecules/`)
|
|
34
|
+
* **Concepto:** La unión de dos o más átomos (Campos de formulario en UI / Middlewares y Validadores en Backend).
|
|
35
|
+
* **Regla:** Tienen propósito específico pero carecen de lógica de negocio profunda.
|
|
36
|
+
|
|
37
|
+
### 🦠 Nivel 3: Células (`3-cells/`)
|
|
38
|
+
* **Concepto:** Contenedores funcionales interactivos (Formularios completos en UI / Entidades ORM o Servicios unitarios en Backend).
|
|
39
|
+
* **Regla:** Manejan eventos de usuario pero delegan el procesamiento masivo a capas superiores.
|
|
40
|
+
|
|
41
|
+
### 🦎 Nivel 4: Organismos (`4-organisms/`)
|
|
42
|
+
* **Concepto:** Bloques complejos y autónomos (Secciones dinámicas en UI / Casos de Uso y Orquestadores en Backend).
|
|
43
|
+
* **Regla:** Agrupan células. Pueden ser inyectados en diferentes planetas y funcionar de manera independiente.
|
|
44
|
+
|
|
45
|
+
### 🌍 Nivel 5: Planetas (`5-planets/`)
|
|
46
|
+
* **Concepto:** Macro-secciones semánticas (Headers/Footers en UI / Endpoints y Controladores API en Backend).
|
|
47
|
+
* **Regla:** Son el "hogar" de los organismos. Estructuran y enrutan la información.
|
|
48
|
+
|
|
49
|
+
### 🌌 Nivel 6: Sistemas Solares y Galaxias (`6-layouts/`)
|
|
50
|
+
* **Concepto:** El esqueleto gravitacional maestro (Plantillas maestras en UI / Configuración de Servidores y App Modules en Backend).
|
|
51
|
+
* **Regla:** Manejan los metadatos y abren el "espacio" para que los planetas existan.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## PARTE II: LAS FUERZAS INVISIBLES Y LA CINEMÁTICA (Datos y Flujos)
|
|
56
|
+
|
|
57
|
+
Un universo estático está muerto. Estas leyes dictan cómo interactúa la materia.
|
|
58
|
+
|
|
59
|
+
### 🌑 1. Materia Oscura (Manejo del Estado Global)
|
|
60
|
+
* **El Concepto:** Son los datos globales de la aplicación en memoria (Redux, Zustand, Daemons).
|
|
61
|
+
* **Uso Práctico:** En lugar de pasar un dato bajando por 10 archivos distintos (*Prop Drilling*), guardas ese dato en la "Materia Oscura". Cualquier archivo lo absorbe directamente. Es la **Fuente Única de Verdad**.
|
|
62
|
+
* **Estándar ISO:** Mantenibilidad y Modularidad.
|
|
63
|
+
|
|
64
|
+
### 🧲 2. Gravedad Cero (Acoplamiento)
|
|
65
|
+
* **El Concepto:** Nivel de Acoplamiento (Dependency Injection).
|
|
66
|
+
* **Uso Práctico:** Un Átomo debe tener "Gravedad Cero". No puede importar conexiones a Base de Datos. La gravedad pesada (lógica compleja) se reserva solo para los Organismos y Planetas.
|
|
67
|
+
* **Estándar ISO:** Reusabilidad y Portabilidad (Principios SOLID).
|
|
68
|
+
|
|
69
|
+
### ⚡ 3. Velocidad de la Luz y Agujeros de Gusano (Latencia y Caché)
|
|
70
|
+
* **El Concepto:** Peticiones de red, tiempos de espera y memoria a corto plazo.
|
|
71
|
+
* **Uso Práctico:** Superamos el límite de la velocidad de la luz mediante **UI Optimista** (mostrar resultados al instante mientras el dato viaja). Además, utilizamos **Agujeros de Gusano (Redis, Caché de Navegador, CDNs)** para doblar el espacio-tiempo, entregando información frecuente instantáneamente desde la memoria sin tener que hacer el viaje completo hasta la Base de Datos.
|
|
72
|
+
* **Estándar ISO:** Eficiencia de Rendimiento y Escalabilidad.
|
|
73
|
+
|
|
74
|
+
### 🕸️ 4. La Malla Cósmica (Microservicios e Interoperabilidad)
|
|
75
|
+
* **El Concepto:** Distintas aplicaciones o módulos se comunican a través de "hilos" de energía (APIs, Webhooks, gRPC).
|
|
76
|
+
* **Uso Práctico:** Dos galaxias distintas no comparten bases de datos. Si una galaxia explota, el resto sobrevive ignorando ese hilo cortado (Circuit Breaker).
|
|
77
|
+
* **Estándar ISO:** Tolerancia a Fallos e Interoperabilidad.
|
|
78
|
+
|
|
79
|
+
### ☄️ 5. Órbitas Cerradas (Ciclo de Vida)
|
|
80
|
+
* **El Concepto:** Los Listeners, WebSockets y procesos en segundo plano.
|
|
81
|
+
* **Uso Práctico:** Todo proceso cíclico debe ser destruido explícitamente al dejar de usarse (Limpieza / Unmount). Una órbita abierta es un planeta rebelde que consume RAM hasta destruir el dispositivo (Memory Leak).
|
|
82
|
+
* **Estándar ISO:** Utilización Eficiente de Recursos.
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## PARTE III: LEYES DEL TIEMPO Y EL MULTIVERSO (Control de Versiones)
|
|
87
|
+
|
|
88
|
+
### ⏱️ El Multiverso y las Líneas Temporales (Git)
|
|
89
|
+
* **El Concepto:** El control de versiones no es una herramienta, es la manipulación del espaciotiempo.
|
|
90
|
+
* **Uso Práctico:** Un `commit` congela el universo en el tiempo. Un `branch` crea un Universo Paralelo para experimentar. Jamás se altera el Universo Real (`main`) sin que el Paralelo sea matemáticamente perfecto. Si algo falla, se colapsa la línea temporal (`git revert`).
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## PARTE IV: CERTIFICACIÓN Y SUPERVIVENCIA (Estándares ISO y Cumplimiento)
|
|
95
|
+
|
|
96
|
+
Para que un proyecto sea considerado formalmente AUM-IC, debe cumplir con los 4 pilares de supervivencia cósmica. Estos garantizan que la plataforma cumpla de forma automatizada y nativa con los estándares más estrictos del mundo corporativo (**ISO 25010, ISO 27001, ISO 27701, ISO 40500, ISO 29119 y SOC 2**).
|
|
97
|
+
|
|
98
|
+
### 🛡️ 1. Horizonte de Sucesos, Firmas Espectrales y Campos Magnéticos (Seguridad Total)
|
|
99
|
+
* **Las Normas:** ISO/IEC 27001 (Seguridad) e ISO/IEC 27701 (Privacidad de la Información).
|
|
100
|
+
* **El Horizonte y La Singularidad:** Las contraseñas y secretos viven en el Backend (Horizonte). La "Privacy by Design" comprime y cifra identidades para que nadie pueda ver datos en claro (Singularidad).
|
|
101
|
+
* **Firmas Espectrales (Auth y JWT):** Cada petición debe portar una "Firma Espectral" validada criptográficamente (JWT, Sesiones con Cookies `HttpOnly`). Si un viajero presenta una firma alterada, el Middleware rechaza la conexión instantáneamente.
|
|
102
|
+
* **Campos Magnéticos (ORMs y Sanitización):** Así como el campo magnético de la Tierra desvía la radiación solar mortal, el uso estricto de **ORMs (Object-Relational Mapping)** y validadores (ej. Zod) actúa como un escudo magnético. Atrapa, filtra y desvía caracteres maliciosos e Inyecciones SQL o XSS antes de que toquen el núcleo de la base de datos. Está estrictamente prohibido apagar el campo magnético ejecutando "Raw SQL" con inputs de usuario.
|
|
103
|
+
|
|
104
|
+
### 💥 2. El Colisionador de Hadrones (Testing y Calidad)
|
|
105
|
+
* **La Norma:** ISO/IEC/IEEE 29119 (Pruebas de Software).
|
|
106
|
+
* **Uso Práctico:** Todo Átomo y Organismo debe sobrevivir a colisiones a alta velocidad en ambientes controlados (Unit Testing, E2E, TDD). Si el código se rompe bajo estrés simulado en el pipeline automatizado (CI/CD), el Universo rechaza el despliegue. El caos no entra a Producción.
|
|
107
|
+
|
|
108
|
+
### 📡 3. Radiación de Fondo Cósmica (Observabilidad y Auditoría)
|
|
109
|
+
* **La Norma:** SOC 2 Tipo II (Integridad de Procesamiento y Disponibilidad).
|
|
110
|
+
* **Uso Práctico:** El Big Bang dejó un rastro que nos cuenta la historia del universo. Del mismo modo, todo error, acción del usuario o caída del servidor deja un **Rastro Radiactivo inmutable** (Telemetría, Sentry, Datadog, Audit Logs). Es imposible silenciar fallos; todo debe ser rastreable forensemente. Esto incluye la observabilidad del cliente (**RUM - Real User Monitoring**), capturando globalmente excepciones del navegador, recursos rotos (404) y *Dead Clicks* (botones inactivos) enviando el rastro instantáneamente al centro de mando.
|
|
111
|
+
|
|
112
|
+
### 🌍 4. La Biósfera y el Espectro Invisible (Accesibilidad y SEO)
|
|
113
|
+
* **La Norma:** ISO/IEC 40500 (Pautas de Accesibilidad WCAG) y Directrices de Motores de Búsqueda (SEO).
|
|
114
|
+
* **Uso Práctico:** La **Biósfera** exige que el ecosistema visual soporte toda forma de vida humana (validación matemática de contraste de colores, navegación por teclado). Sin embargo, el **Espectro Invisible** (Infrarrojo/Ultravioleta) es como las máquinas ven tu aplicación. Motores de búsqueda (Googlebots) y Tecnologías de Asistencia (Screen Readers) consumen tu código a través de etiquetas Semánticas, *ARIA-labels* y metadatos. Si tu planeta no emite en el espectro invisible, no existe en la web.
|
|
115
|
+
|
|
116
|
+
## PARTE V: EL MOTOR DE EJECUCIÓN (Protocolo de Creación y Telemetría)
|
|
117
|
+
|
|
118
|
+
Para garantizar que el universo no colapse al expandirse (desarrollo de nuevas *features*) o mutar (refactorización), todo arquitecto AUM-IC debe regirse por el siguiente flujo de operaciones inquebrantable.
|
|
119
|
+
|
|
120
|
+
### Fase 1: El Protocolo de Mutación Segura
|
|
121
|
+
1. **Identificar Comportamientos:** Mapear la gravedad (dependencias) y las órbitas (ciclo de vida) del componente antes de alterar su código.
|
|
122
|
+
2. **Línea Base en el Colisionador:** Escribir los tests automatizados y comprobar que pasan en verde con el código *actual*. Esta es la red de seguridad matemática.
|
|
123
|
+
3. **Refactorización AUM-IC:** Aplicar la simetría fractal (mover de 1-atoms a 6-layouts, aplicar gravedad cero, aislar lógicas).
|
|
124
|
+
4. **Punto de Control Temporal (Checkpoint):** Congelar la línea de tiempo en el Multiverso (Commit en Git). Si la entropía ataca, se colapsa la línea temporal sin daños.
|
|
125
|
+
5. **Fichas de Anatomía:** Comentar el código (JSDoc invisible en producción) explicando el *porqué* atómico para futuras inteligencias artificiales o humanos.
|
|
126
|
+
|
|
127
|
+
### Fase 2: Observabilidad y Respuesta Inmediata (Telemetría de Supernova)
|
|
128
|
+
6. **Caja Negra de Logs Atómicos:** Se debe programar un sistema interno de trazabilidad. Toda interacción crítica, desde un fallo silencioso en un Átomo hasta un *Fatal Error* en una Galaxia, genera un Log estructurado. Se establecen *breakpoints* y *checkpoints* internos en la ejecución para permitir análisis forense forense y gestión de fallos.
|
|
129
|
+
7. **Alarma de Supernova (Intercepción y Alerta en Tiempo Real):** El sistema de logs no es pasivo; es proactivo. Al interceptar un fallo (Warn, Error, Fatal), el paradigma exige emitir un pulso a la Velocidad de la Luz al Centro de Mando de Desarrollo. A través de NTFY, Webhooks (Discord/Telegram), SMS o bots de WhatsApp, el equipo de ingeniería es notificado en el milisegundo exacto del fallo, garantizando soporte técnico preventivo antes de que el usuario final lo reporte.
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
## PARTE VI: LA LEY DE CORRESPONDENCIA (Escalabilidad y Plataformas Agnósticas)
|
|
134
|
+
|
|
135
|
+
El argumento de *"Este paradigma es demasiada sobreingeniería"* nace de la incomprensión de las leyes del universo. **Como es arriba, es abajo.** El estándar AUM-IC 7 obedece a la **Ley de Correspondencia del Kybalión**: un asteroide obedece la misma física que una galaxia, y una App Móvil obedece la misma arquitectura que un ERP de escritorio o una web en la nube. Las fuerzas solo se encienden en proporción a su Masa Crítica.
|
|
136
|
+
|
|
137
|
+
Para mantener la velocidad de desarrollo sin sacrificar las certificaciones ISO, el arquitecto debe clasificar su proyecto:
|
|
138
|
+
|
|
139
|
+
### 🪨 Nivel 1: El Asteroide (Sistemas de Propósito Único)
|
|
140
|
+
* **Ejemplos:** Landing Pages, Scripts CLI, Apps Móviles unidireccionales (Calculadora, Lector QR), Utilidades Desktop pequeñas.
|
|
141
|
+
* **Materia Observable:** Solo carpetas `1-atoms` a `4-organisms`.
|
|
142
|
+
* **Materia Oscura (Estado Global):** **APAGADA.** No necesitas Redux, Vuex ni Singletons pesados. El estado vive localmente (Energía Cinética).
|
|
143
|
+
* **Campo Magnético Perimetral:** **ENCENDIDO.** Todo input externo es un rayo cósmico mortal. En Web, usas filtros de desafío invisible anti-bots. En Móvil/Desktop, usas validadores biométricos (FaceID) o sanitización estricta (Zod/Regex) para evitar *Buffer Overflows* o ejecución de macros maliciosos.
|
|
144
|
+
* **La Biósfera (Accesibilidad):** **MÁXIMA.** En web es SEO semántico. En Móvil/Desktop, obligas el uso de APIs nativas (*VoiceOver, TalkBack*) para que la tecnología de asistencia pueda "leer" tu interfaz.
|
|
145
|
+
|
|
146
|
+
### 🌍 Nivel 2: El Planeta (Sistemas Transaccionales y Puntos de Venta)
|
|
147
|
+
* **Ejemplos:** E-Commerce, Puntos de Venta locales (Sistemas de Punto de Venta (POS) locales), Apps Móviles transaccionales.
|
|
148
|
+
* **Agujeros de Gusano (Caché y Offline-First):** **ENCENDIDO.** En la nube usas Redis. En POS Desktop o Móvil, enciendes bases de datos locales incrustadas (SQLite, Realm, CoreData). Si el internet se cae, el planeta sigue girando y facturando gracias al Agujero de Gusano.
|
|
149
|
+
* **Firmas Espectrales (Seguridad de Sesión):** **ENCENDIDO.** Implementas JWT para web, o el **Keychain / Windows Credential Manager** para proteger contraseñas localmente en Desktop/Móvil. Jamás se guarda texto plano en disco.
|
|
150
|
+
|
|
151
|
+
### 🌌 Nivel 3: La Galaxia (Ecosistemas Masivos y Distribuidos)
|
|
152
|
+
* **Ejemplos:** Sistemas ERP distribuidos en la nube, Core Bancario, Suites de Escritorio pesadas (Suites de escritorio de alto rendimiento).
|
|
153
|
+
* **Malla Cósmica (Microservicios / IPC):** **ENCENDIDA.** En la nube, las galaxias se comunican por APIs REST/gRPC. En Desktop, se comunican mediante hilos aislados (IPC - Inter-Process Communication). Si un hilo colapsa, el programa no se cierra. La arquitectura implementa **Circuit Breakers (Disyuntores)** para cortar comunicación con APIs externas caídas y **Bucles de Auto-Sanación (Exponential Reconnects)** para revivir conexiones a bases de datos sin intervención humana.
|
|
154
|
+
* **Materia Oscura y Telemetría:** **MÁXIMA POTENCIA.** El estado global dicta todo. El sistema de Logs (Radiación de Fondo) reporta cada *Fatal Error* de inmediato vía Sentry, Datadog o Webhooks (NTFY/Discord) al centro de mando.
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## GLOSARIO TÁCTICO: EL PORQUÉ DE LAS COSAS (Respuestas para la Élite)
|
|
159
|
+
|
|
160
|
+
Para que AUM-IC 7 no sea visto como un capricho estético, todo arquitecto debe saber defender la física de sus decisiones en *cualquier* lenguaje (C#, Python, JS, Swift):
|
|
161
|
+
|
|
162
|
+
* **¿Por qué y cuándo encender el Campo Magnético (ORMs o Query Builders)?**
|
|
163
|
+
* *Cuándo:* Siempre que el software (Web, POS o App) interactúe con una base de datos o sistema de archivos.
|
|
164
|
+
* *Por qué:* Escribir consultas "Raw SQL" (SQL crudo) combinadas con variables del usuario es apagar el campo magnético de tu planeta. Los rayos cósmicos (Inyecciones SQL) freirán tu núcleo, ya sea en un clúster en la nube o en la base local de SQLite de la caja registradora. El ORM actúa como una magnetósfera que purifica los comandos maliciosos antes de que toquen el disco. Además, la materia nunca se destruye: se exige el **Borrado Lógico (Soft Deletes)** y el control estricto de esquemas mediante Archivos de Migración.
|
|
165
|
+
|
|
166
|
+
* **¿Por qué y cuándo hacer un Commit (Punto de Control en el Multiverso)?**
|
|
167
|
+
* *Cuándo:* Jamás al final del día por costumbre. Se hace **cada vez que un átomo o ruta alcanza la estabilidad matemática (Test en verde)**.
|
|
168
|
+
* *Por qué:* El desarrollo es una lucha contra la entropía (el caos). Si en la siguiente hora tu código colapsa, el *commit* te permite colapsar esa línea temporal fallida y regresar instantáneamente al último punto donde el universo era estable.
|
|
169
|
+
|
|
170
|
+
* **¿Por qué destruir los Listeners (Órbitas Cerradas)?**
|
|
171
|
+
* *Cuándo:* Cuando una ventana modal, un componente o una sub-rutina se cierra o destruye.
|
|
172
|
+
* *Por qué:* Un Webhook, un proceso *Background Worker* en C#, o un WebSocket que no se destruye explícitamente se convierte en un "Planeta Errante". Seguirá orbitando invisible en la memoria RAM (Memory Leak) hasta destruir la capacidad del dispositivo, forzando al usuario a reiniciar su computadora o teléfono.
|
package/MANIFEST.md
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
|
|
2
|
+
# 🌌 AUM-IC 7 Standard (2026 Edition)
|
|
3
|
+
**Multidimensional Universe Architecture - Engineering Standard**
|
|
4
|
+
|
|
5
|
+
<p align="center">
|
|
6
|
+
<img src="https://img.shields.io/badge/version-7.0.0-crimson?style=flat-square" alt="Version 7.0.0">
|
|
7
|
+
<img src="https://img.shields.io/badge/nature-Clean%20Architecture%20Standard-38bdf8?style=flat-square" alt="Nature">
|
|
8
|
+
</p>
|
|
9
|
+
|
|
10
|
+
> 🌐 **Navigation:** 🇺🇸 [Read in English](./MANIFEST.md) | 🇲🇽 [Leer en Español](./MANIFEST.es.md) | 📖 [README (EN)](./README.md) | 📖 [README (ES)](./README.es.md) | 🌌 [AUM-IC 7 Standard](https://github.com/ingcrea/aum-ic)
|
|
11
|
+
|
|
12
|
+
## THE PARADIGM
|
|
13
|
+
AUM-IC is not just a folder structure. It is a universal framework of laws that governs software behavior, drawing parallels from quantum mechanics and astrophysics to deliver **Military-Grade Security, High Availability (SRE), and Fractal Scalability**.
|
|
14
|
+
|
|
15
|
+
### 1. ⚛️ Atomic Physics (The Structure)
|
|
16
|
+
Software must follow fractal symmetry.
|
|
17
|
+
- `1-atoms`: The irreducible elements (Buttons, Inputs).
|
|
18
|
+
- `2-molecules`: Simple compositions (Form Fields).
|
|
19
|
+
- `3-cells`: Reusable blocks (Cards, Navbars).
|
|
20
|
+
- `4-organisms`: Self-contained features (Login Form).
|
|
21
|
+
- `5-planets`: Full views or screens (Dashboard).
|
|
22
|
+
- `6-layouts`: The spatial grid that holds planets.
|
|
23
|
+
|
|
24
|
+
### 2. 🌌 The 7 Cosmic Forces (SRE & Security Core)
|
|
25
|
+
AUM-IC defines 7 laws that must govern the software's execution engine:
|
|
26
|
+
|
|
27
|
+
1. **Dark Matter (Global State):** The invisible gravitational pull. State (like Redux or Zustand) connects organisms without direct coupling.
|
|
28
|
+
2. **Event Horizon (Perimeter Security):** The impenetrable border. Enforces **CSP (Content Security Policy)**, strict Rate Limiting, and JWT signatures. If a request lacks proper spectral signatures, the Middleware rejects it instantly.
|
|
29
|
+
3. **Magnetic Field (ORM & Sanitization):** Protects the core from cosmic radiation (SQL Injection). Raw SQL is forbidden. Additionally, matter is never truly destroyed: **Soft Deletes** and declarative schema Migrations are mandatory.
|
|
30
|
+
4. **The Hadron Collider (CI/CD Testing):** Chaos does not enter Production. Before deploying, the pipeline mandates **CVE Vulnerability Audits** (Supply Chain Defense) and deterministic tests.
|
|
31
|
+
5. **Wormholes (Cache & Offline-First):** Bypasses the speed of light. Uses local SQLite/Realm databases for Desktop/Mobile or Redis for Web, ensuring the system survives network outages.
|
|
32
|
+
6. **The Cosmic Web (Resilience):** For massive systems. Implements **Circuit Breakers** to cut off failing external APIs and **Exponential Reconnect Loops** to revive database connections autonomously.
|
|
33
|
+
7. **Cosmic Microwave Background (RUM Observability):** Every action leaves a forensic trace. Enforces **Real User Monitoring (RUM)**, catching global browser exceptions, dead clicks, and 404s, sending real-time alerts to the command center (SOC 2 Compliance).
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## PART VI: THE LAW OF CORRESPONDENCE (Critical Mass Scalability)
|
|
38
|
+
"As above, so below." AUM-IC obeys the Hermetic Law of Correspondence: an asteroid obeys the same physics as a galaxy, but forces ignite proportionally to their **Critical Mass**.
|
|
39
|
+
|
|
40
|
+
### 🪨 Level 1: The Asteroid (Single-Purpose Systems)
|
|
41
|
+
* **Examples:** Landing Pages, CLI Scripts, Utility Mobile Apps.
|
|
42
|
+
* **Dark Matter (State):** **OFF.**
|
|
43
|
+
* **Perimeter Magnetic Field:** **MAXIMUM.** Inputs are deadly. Web requires invisible challenge filters (WAF/CAPTCHAs). Desktop/Mobile requires strict biometric validation or Zod sanitization.
|
|
44
|
+
* **The Biosphere (Accessibility/SEO):** **MAXIMUM.** Semantic HTML or native OS Accessibility APIs (VoiceOver/TalkBack).
|
|
45
|
+
|
|
46
|
+
### 🌍 Level 2: The Planet (Transactional Systems)
|
|
47
|
+
* **Examples:** E-Commerce, Local POS Systems, Transactional Apps.
|
|
48
|
+
* **Wormholes (Cache & Offline-First):** **ON.** Local DBs (SQLite) keep the system running during outages.
|
|
49
|
+
* **Spectral Signatures (Auth):** **ON.** Secrets saved in OS Keychains or secure HttpOnly cookies.
|
|
50
|
+
|
|
51
|
+
### 🌌 Level 3: The Galaxy (Massive Ecosystems)
|
|
52
|
+
* **Examples:** Cloud ERPs, Core Banking, Heavy Desktop Suites.
|
|
53
|
+
* **The Cosmic Web (Microservices/IPC):** **ON.**
|
|
54
|
+
* **Telemetry & Dark Matter:** **MAXIMUM.**
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## TACTICAL GLOSSARY (The "Why")
|
|
59
|
+
* **Why use an ORM always?** Writing Raw SQL is shutting down your magnetic field. Cosmic rays (SQL Injections) will fry your core, whether on an AWS cluster or a local cash register POS.
|
|
60
|
+
* **When to Commit?** Never "at the end of the day." Commit the millisecond an atom achieves mathematical stability (Green Test). It is a temporal save point in the multiverse.
|
|
61
|
+
* **Why destroy Listeners?** A background worker or WebSocket that isn't explicitly closed becomes a "Rogue Planet" causing Memory Leaks until it crashes the user's OS.
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
> 🏛️ Intellectual Property of **Ingeniería Creativa (IngCrea)**. Standard released under CC BY-SA 4.0 / MIT.
|
package/README.es.md
ADDED
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
# AUM-IC PUF — Protocolo Universal contra Fallos (PUF-23)
|
|
2
|
+
|
|
3
|
+
[](LICENSE)
|
|
4
|
+
[](https://github.com/ingcrea/aum-ic)
|
|
5
|
+
[](https://www.npmjs.com/package/@ingcrea/aumic-puf)
|
|
6
|
+
|
|
7
|
+
> 🌐 **Navegación:** 🇺🇸 [Read in English](./README.md) | 📜 [Manifiesto (ES)](./MANIFEST.es.md) | 📜 [Manifesto (EN)](./MANIFEST.md) | 🌌 [Estándar AUM-IC 7](https://github.com/ingcrea/aum-ic)
|
|
8
|
+
|
|
9
|
+
> Suite oficial de aseguramiento de calidad y orquestador determinista para facilitar el cumplimiento del estándar [AUM-IC 7:2026](https://github.com/ingcrea/aum-ic) por **Ingeniería Creativa (IngCrea)**.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Matriz de 23 Compuertas de Calidad (G0 - G22)
|
|
14
|
+
|
|
15
|
+
### 0. G0: Higiene Forense Anti-Entropía y Codificación Pura (aumic-sanitizer Audit)
|
|
16
|
+
- **Alcance:** Diagnóstico in-process de mojibake, entropía de caracteres, saltos CRLF y codificación UTF-8 pura.
|
|
17
|
+
|
|
18
|
+
### 1. G1: Mapeo de Comportamientos y Límites (Behavior & Boundary Mapping)
|
|
19
|
+
- **Alcance:** Analizar el flujo completo de ejecución, ciclo de vida de la UI y desacoplamiento de hilos pesados.
|
|
20
|
+
|
|
21
|
+
### 2. G2: Test de Reproducción — Fase Roja (Reproduction Test-First)
|
|
22
|
+
- **Alcance:** Escribir y verificar test automatizado previo a tocar código de lógica (*Red State*).
|
|
23
|
+
|
|
24
|
+
### 3. G3: Checkpoint Inmutable (State Snapshot)
|
|
25
|
+
- **Alcance:** Respaldos atómicos con hash SHA-256 en `checkpoints/` para permitir reversión instantánea.
|
|
26
|
+
|
|
27
|
+
### 4. G4: Reparación Focalizada y Cero CSS Inline (Pure Logic Refactor)
|
|
28
|
+
- **Alcance:** Erradicación de causa raíz, cero código muerto y prohibición de atributos `style="..."` inline.
|
|
29
|
+
|
|
30
|
+
### 5. G5: Validación de Test y No-Regresión — Fase Verde (Green State & Non-Regression)
|
|
31
|
+
- **Alcance:** 100% de aserciones aprobadas y verificación perimetral contra regresiones colaterales.
|
|
32
|
+
|
|
33
|
+
### 6. G6: Análisis Estático Estricto (Static Gate Multi-Ecosystem)
|
|
34
|
+
- **Alcance:** Compiladores y linters en modo estricto (Rust, TypeScript, Python, PHP, Java, C#, C++, Swift, etc.).
|
|
35
|
+
|
|
36
|
+
### 7. G7: Documentación Semántica y Registro ADR (Intent & Architecture Decision)
|
|
37
|
+
- **Alcance:** Registro obligatorio de decisiones de arquitectura en `BITACORA.md`.
|
|
38
|
+
|
|
39
|
+
### 8. G8: Aplanadora POSIX y Sanitización Anti-Mojibake
|
|
40
|
+
- **Alcance:** Blindaje de bytes LF puros y UTF-8 estricto sin BOM.
|
|
41
|
+
|
|
42
|
+
### 9. G9: Integridad Operativa, Permisos y Secretos Zero-Trust
|
|
43
|
+
- **Alcance:** Permisos POSIX (644/755) y cero credenciales en texto plano.
|
|
44
|
+
|
|
45
|
+
### 10. G10: Invalidación y Purga de Estado Efímero
|
|
46
|
+
- **Alcance:** Purga de cachés de compilación (.next, .turbo, target, __pycache__, .phpunit.cache).
|
|
47
|
+
|
|
48
|
+
### 11. G11: Ergonomía del SO, Foco de Ventanas y Aislamiento UI (Zero-Focus Stealing)
|
|
49
|
+
- **Alcance:** Compuerta obligatoria contra robo de foco en Windows (`CREATE_NO_WINDOW`) e I/O desacoplado de loops UI.
|
|
50
|
+
|
|
51
|
+
### 12. G12: Topología de Rutas Vivas & Dead Link Sweeper
|
|
52
|
+
- **Alcance:** Detección de enlaces y destinos locales rotos en código web.
|
|
53
|
+
|
|
54
|
+
### 13. G13: Grafo de Interactividad & Erradicación Zombie
|
|
55
|
+
- **Alcance:** Erradicación de botones decorativos o handlers de eventos inertes.
|
|
56
|
+
|
|
57
|
+
### 14. G14: Traza de Contratos HTTP & Endpoints Vivos
|
|
58
|
+
- **Alcance:** Detección estática de contratos HTTP rotos o paths huérfanos.
|
|
59
|
+
|
|
60
|
+
### 15. G15: Headless E2E Crawler & Runtime Exceptions
|
|
61
|
+
- **Alcance:** Suites E2E (Playwright / Cypress) para verificación de flujo funcional.
|
|
62
|
+
|
|
63
|
+
### 16. G16: Calidad Visual, Core Web Vitals y Auditoría Web (Lighthouse / CWV)
|
|
64
|
+
- **Alcance:** Puntuación de experiencia de usuario, layouts DOM estables y Core Web Vitals.
|
|
65
|
+
|
|
66
|
+
### 17. G17: Blindaje Legal, Integridad de Licencias y Compatibilidad (IP & License Guard)
|
|
67
|
+
- **Alcance:** Consistencia entre manifiestos (`package.json`, `Cargo.toml`) y archivos `LICENSE`, titularidad y copyright.
|
|
68
|
+
|
|
69
|
+
### 18. G18: Consistencia de Motores de Estilo y Erradicación de Antipatrones (Style Engine Consistency)
|
|
70
|
+
- **Alcance:** Prevención de colisión entre frameworks (ej. Tailwind + Bootstrap) y control de deuda de `!important`.
|
|
71
|
+
|
|
72
|
+
### 19. G19: Blindaje de Superficie de Ataque y Cero Inyecciones (Zero-Injection Guard)
|
|
73
|
+
- **Alcance:** Erradicación de archivos expuestos (`.env`, `dump.sql`) y prevención de concatenación SQL directa.
|
|
74
|
+
|
|
75
|
+
### 20. G20: Topología de Entornos, Aislamiento de Red y Cero Conexiones Fantasma (Topology Guard)
|
|
76
|
+
- **Alcance:** Erradicación de referencias hardcodeadas a `localhost` / `127.0.0.1` en entornos de producción.
|
|
77
|
+
|
|
78
|
+
### 21. G21: Cumplimiento Oficial WordPress & WooCommerce (WPCS & WC Guidelines)
|
|
79
|
+
- **Alcance:** Auditoría estricta de sanitización de superglobales, prepared queries en `$wpdb`, compatibilidad obligatoria con High-Performance Order Storage (HPOS) y métodos CRUD canónicos de `WC_Order`.
|
|
80
|
+
|
|
81
|
+
### 22. G22: Diagnóstico Universal de Sintaxis y Delimitadores (Universal Syntax Guard)
|
|
82
|
+
- **Alcance:** Localización exacta de omisiones de punto y coma (`;`), comas en JSON y llaves/corchetes/paréntesis desbalanceados en memoria sin requerir compiladores externos.
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## Uso del Orquestador (CLI)
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
# Instalación global desde npm
|
|
90
|
+
npm install -g @ingcrea/aumic-puf
|
|
91
|
+
|
|
92
|
+
# Auditar todas las compuertas de la matriz (G0 a G22)
|
|
93
|
+
puf auditar
|
|
94
|
+
|
|
95
|
+
# Auditar compuertas focalizadas (G0, G21, G22)
|
|
96
|
+
puf auditar -g G0,G21,G22
|
|
97
|
+
|
|
98
|
+
# Modo fail-fast (aborta al primer fallo detectado)
|
|
99
|
+
puf auditar --fast
|
|
100
|
+
|
|
101
|
+
# Consultar versión instalada
|
|
102
|
+
puf -v
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### 1. G1: Mapeo de Comportamientos y Limites (Behavior & Boundary Mapping)
|
|
106
|
+
- **Alcance:** Analizar el flujo completo de ejecucion y ciclo de vida de la UI.
|
|
107
|
+
- **Acciones:**
|
|
108
|
+
- Identificar entradas, tipos, contratos, mutaciones y salidas esperadas.
|
|
109
|
+
- Definir formalmente casos de borde: valores nulos (`None`, `null`, `Option::None`), cadenas vacias, desbordamientos numericos, condiciones de carrera/concurrencia y accesos no autenticados.
|
|
110
|
+
- **Aislamiento del Bucle de UI:** Prohibido disparar I/O pesado, comandos o procesos sincronos dentro de temporizadores o callbacks de interfaz grafica (`slint::Timer`, `setInterval`, `requestAnimationFrame`). Deben delegarse a tareas de fondo asincronas o cachearse atomicamente.
|
|
111
|
+
|
|
112
|
+
### 2. G2: Test de Reproduccion -- Fase Roja (Reproduction Test-First)
|
|
113
|
+
- **Alcance:** Probar y demostrar empiricamente el defecto antes de tocar una sola linea de logica.
|
|
114
|
+
- **Acciones:**
|
|
115
|
+
- Escribir un test automatizado (unitario, integracion o CLI determinista) que replique la falla reportada con fidelidad.
|
|
116
|
+
- Ejecutar el test y confirmar que falle contra el codigo actual (*Red State*).
|
|
117
|
+
|
|
118
|
+
### 3. G3: Checkpoint Inmutable (State Snapshot)
|
|
119
|
+
- **Alcance:** Blindaje de rollback y preservacion de estado pre-mutacion.
|
|
120
|
+
- **Acciones:**
|
|
121
|
+
- Generar un respaldo atomico timestamped en `checkpoints/` (`<archivo>.bak_YYYYMMDDHHMMSS`).
|
|
122
|
+
- Registrar hash SHA-256 para permitir reversion instantanea sin perdida de informacion.
|
|
123
|
+
|
|
124
|
+
### 4. G4: Reparacion Focalizada y Refactorizacion Limpia (Pure Logic Refactor)
|
|
125
|
+
- **Alcance:** Correccion quirurgica de la causa raiz.
|
|
126
|
+
- **Acciones:**
|
|
127
|
+
- Atacar la causa raiz sin parches superficiales. Cero codigo muerto, cero dependencias circulares.
|
|
128
|
+
- Cumplir principios de codigo limpio del stack correspondiente:
|
|
129
|
+
- **Rust:** Cero `unwrap()` no justificado; manejo exhaustivo con `Result` / `Option`.
|
|
130
|
+
- **Astro:** Componentes puros, separacion de logica frontmatter y JSX estatico/reactivo.
|
|
131
|
+
- **Python:** Tipado estricto (Type hints), PEP 8, manejo explicito de excepciones.
|
|
132
|
+
- **PHP:** POO fuertemente tipada, `declare(strict_types=1);`, inyeccion de dependencias.
|
|
133
|
+
- **Prohibicion Absoluta de CSS Inline:** Queda terminantemente prohibido inyectar `style="..."` en HTML/PHP/JSX/Astro. Si existen estilos inline preexistentes, refactorizarlos a archivos `.css`/`.scss`.
|
|
134
|
+
|
|
135
|
+
### 5. G5: Validacion de Test y No-Regresion -- Fase Verde (Green State & Non-Regression)
|
|
136
|
+
- **Alcance:** Verificacion de solucion completa y estabilidad perimetral.
|
|
137
|
+
- **Acciones:**
|
|
138
|
+
- Reejecutar el test de G2 y validar el 100% de aserciones aprobadas (*Green State*).
|
|
139
|
+
- Ejecutar la suite de pruebas perimetral/completa para certificar cero regresiones colaterales.
|
|
140
|
+
|
|
141
|
+
### 6. G6: Analisis Estatico, Tipado y Compilador Estricto (Static Gate)
|
|
142
|
+
- **Alcance:** Tolerancia cero a advertencias del compilador o linters.
|
|
143
|
+
- **Acciones:**
|
|
144
|
+
- Ejecutar compilador y analisis estatico en modo estricto segun el stack:
|
|
145
|
+
- **Rust:** `cargo clippy -- -D warnings` y `cargo check`.
|
|
146
|
+
- **Astro / TypeScript:** `npx astro check` y `npx eslint`.
|
|
147
|
+
- **Python:** `ruff check` y `mypy --strict`.
|
|
148
|
+
- **PHP:** `php -l` y `phpstan analyse --level=max`.
|
|
149
|
+
- Cero advertencias o errores tolerados.
|
|
150
|
+
|
|
151
|
+
### 7. G7: Documentacion Semantica y Registro ADR (Intent & Architecture Decision)
|
|
152
|
+
- **Alcance:** Memoria tecnica e intencion arquitectonica.
|
|
153
|
+
- **Acciones:**
|
|
154
|
+
- Explicar en comentarios de codigo el *por que* de la decision y no solo el *que hace*.
|
|
155
|
+
- Registrar en `BITACORA.md` de la raiz del proyecto bajo el formato estricto:
|
|
156
|
+
```
|
|
157
|
+
[Timestamp] | Contexto | Decision | Consecuencia
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### 8. G8: Aplanadora POSIX y Sanitizacion Anti-Mojibake (aumic-sanitizer)
|
|
161
|
+
- **Alcance:** Integridad de codificacion y terminacion de linea.
|
|
162
|
+
- **Acciones:**
|
|
163
|
+
- Barrer los archivos con `node C:\Users\NexoRemoto\Proyectos\aumic-sanitizer\dist\index.js audit .`
|
|
164
|
+
- Purgar caracteres Mojibake forzando UTF-8 puro sin BOM.
|
|
165
|
+
- Aplanar y forzar saltos de linea Unix LF (`\n`), erradicando Windows CRLF (`\r\n`).
|
|
166
|
+
|
|
167
|
+
### 9. G9: Integridad Operativa, Permisos y Secretos Zero-Trust (Ops Shield)
|
|
168
|
+
- **Alcance:** Blindaje de infraestructura y seguridad de credenciales.
|
|
169
|
+
- **Acciones:**
|
|
170
|
+
- Verificar permisos restrictivos en sistema de archivos (`chmod 644` archivos / `755` directorios, llaves SSH `600`).
|
|
171
|
+
- Cero credenciales, tokens o contrasenas en texto plano. Gestionar accesos via variables de entorno seguras o `SECRETOS.py`.
|
|
172
|
+
|
|
173
|
+
### 10. G10: Invalidacion y Purga de Estado Efimero (State Flush)
|
|
174
|
+
- **Alcance:** Consumo garantizado del codigo fresco en runtime.
|
|
175
|
+
- **Acciones:**
|
|
176
|
+
- Purgar deterministamente cache de objetos (Redis, Memcached, Opcache, `.next`, `dist`).
|
|
177
|
+
- Reiniciar workers (Gunicorn, Systemd, SSR Node, PM2) para garantizar que los clientes consuman el codigo validado.
|
|
178
|
+
|
|
179
|
+
### 11. G11: Blindaje de Ergonomia del SO, Foco de Ventanas y Aislamiento UI (OS & Desktop Ergonomics Gate)
|
|
180
|
+
- **Alcance:** Experiencia de usuario inmaculada, ausencia total de robo de foco.
|
|
181
|
+
- **Acciones:**
|
|
182
|
+
- **Inmunidad al Robo de Foco (Zero-Focus Stealing):** Toda invocacion de subprocesos en Windows (`Command::new`, `powershell`, `cmd`) DEBE incorporar `.creation_flags(0x08000000)` (`CREATE_NO_WINDOW`).
|
|
183
|
+
- **Zero-Ghost Processes:** Al cerrar la aplicacion, no deben quedar procesos huerfanos consumiendo CPU.
|
|
184
|
+
- **Cache de Consultas de Privilegios:** Usar cache atomico perezoso (`AtomicU8` / `OnceLock`), evitando invocaciones repetidas en bucles.
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
### 12. G12: Topologia de Rutas Vivas & Dead Link Sweeper (Living Routes Gate)
|
|
189
|
+
- **Alcance:** Integridad de navegacion sin pantallas 404 ni rutas huerfanas en Web (Astro, React, Next, Vue), Mobile (Flutter) y Desktop (Slint, C#/WPF, Tauri).
|
|
190
|
+
- **Acciones:**
|
|
191
|
+
- Escanear los archivos HTML/JSX/Astro/PHP afectados con el metodo `auditarRutasVivas()` del adaptador.
|
|
192
|
+
- Detectar atributos `href`, `src`, `to`, `action` que apunten a rutas locales que no existen en el filesystem.
|
|
193
|
+
- Cero enlaces rotos hacia destinos locales inexistentes. Toda ruta relativa debe resolverse a un archivo real.
|
|
194
|
+
- El orquestador informa la lista exacta: `archivo.astro -> "/ruta/inexistente" (no existe en filesystem)`.
|
|
195
|
+
- **Solo aplica a extensiones web:** `.astro`, `.jsx`, `.tsx`, `.html`, `.php`, `.vue`, `.svelte`.
|
|
196
|
+
|
|
197
|
+
### 13. G13: Grafo de Interactividad & Erradicacion Zombie (Living UI Actions Gate)
|
|
198
|
+
- **Alcance:** Cero botones decorativos, pseudoelementos inertes o acciones no conectadas.
|
|
199
|
+
- **Acciones:**
|
|
200
|
+
- Escanear los archivos web afectados con el metodo `auditarInteractividad()` del adaptador.
|
|
201
|
+
- Detectar patrones de handler inerte: `onClick=""`, `onClick={undefined}`, `on:click=""`, `@click=""`.
|
|
202
|
+
- Todo control interactivo debe resolver en un evento real (API call, modal, mutacion de estado o feedback visual).
|
|
203
|
+
- El orquestador reporta exactamente que archivo y linea contiene el handler zombie.
|
|
204
|
+
- **Solo aplica a extensiones web:** `.astro`, `.jsx`, `.tsx`, `.html`, `.php`, `.vue`, `.svelte`.
|
|
205
|
+
|
|
206
|
+
### 14. G14: Traza de Contratos HTTP & Endpoints Vivos (Living API Contract Gate)
|
|
207
|
+
- **Alcance:** Consistencia granular entre las llamadas del cliente y los controladores declarados en el backend.
|
|
208
|
+
- **Acciones:**
|
|
209
|
+
- Analizar los archivos afectados buscando llamadas `fetch(...)` o `axios.get/post/...` con rutas hardcodeadas locales (no `/api/`, no variables de entorno `${}`).
|
|
210
|
+
- Cero llamadas HTTP a paths huerfanos o inexistentes detectados estaticamente.
|
|
211
|
+
- Si se detectan inconsistencias, listar exactamente el archivo y el endpoint problematico.
|
|
212
|
+
|
|
213
|
+
### 15. G15: Headless E2E Crawler & Runtime Exceptions (Headless Handshake Gate)
|
|
214
|
+
- **Alcance:** Deteccion de errores silenciosos, excepciones de runtime y bloqueos de interfaz.
|
|
215
|
+
- **Acciones:**
|
|
216
|
+
- Verificar si existe suite E2E (Playwright `playwright.config.ts`, Cypress `cypress.config.ts`) en la raiz del proyecto.
|
|
217
|
+
- Si existe: marcar como **APROBADA** e instruir al Jefe Maestro a ejecutarla manualmente para certificacion completa.
|
|
218
|
+
- Si NO existe: marcar como **OMITIDA** (no bloquea certificacion) con recomendacion de configurar Playwright.
|
|
219
|
+
- **G15 OMITIDA no es un fallo:** `todasAprobadas` acepta tanto `aprobada` como `omitida`.
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## Reglas Inviolables de Ejecucion
|
|
224
|
+
|
|
225
|
+
1. **Cero Complacencia:** No dejar tareas a medias ni usar marcadores vacios (`// el resto del codigo aqui`).
|
|
226
|
+
2. **Determinismo Tecnico:** Todo entregable debe ser determinista, verificado en consola y listo para produccion.
|
|
227
|
+
3. **Reporte por Compuerta:** Reportar siempre el estado de cada compuerta (G1 a G15) con su respectiva evidencia.
|
|
228
|
+
4. **G15 es OMITIDA, no RECHAZADA:** Si no hay suite E2E, G15 se omite sin bloquear la certificacion.
|
|
229
|
+
5. **G12 y G13 aplican solo a archivos web:** Para proyectos Rust/Python/Shell sin frontend, estas compuertas se aprueban automaticamente por ausencia de extensiones web en los archivos afectados.
|
|
230
|
+
|
|
231
|
+
## Uso del Orquestador (CLI)
|
|
232
|
+
|
|
233
|
+
```bash
|
|
234
|
+
# Inicializar incidente (crea andamio G2 + checkpoints G3)
|
|
235
|
+
puf iniciar INC-042 "Descripcion del fallo" src/archivo.ts
|
|
236
|
+
|
|
237
|
+
# Auditar las 15 compuertas concurrentemente
|
|
238
|
+
puf auditar INC-042 src/archivo.ts
|
|
239
|
+
|
|
240
|
+
# Modo fail-fast (aborta al primer fallo)
|
|
241
|
+
puf auditar INC-042 src/archivo.ts --fast
|
|
242
|
+
|
|
243
|
+
# Revertir a estado pre-fallo (usando checkpoint G3)
|
|
244
|
+
puf revertir INC-042 archivo.ts
|
|
245
|
+
|
|
246
|
+
# Instalar guardian de Git (pre-commit hook)
|
|
247
|
+
puf instalar-hook
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
## Licencia
|
|
251
|
+
|
|
252
|
+
Distribuido bajo licencia **GNU Affero General Public License v3.0 (AGPL-3.0)**. Ver [LICENSE](LICENSE).
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
**[Ingeniería Creativa](https://ingcrea.com)** | [Estándar AUM-IC](https://github.com/ingcrea/aum-ic)
|
package/dist/cli/index.js
CHANGED
|
@@ -46,13 +46,14 @@ const orquestador_js_1 = require("../core/orquestador.js");
|
|
|
46
46
|
const guardian_git_js_1 = require("../hooks/guardian-git.js");
|
|
47
47
|
const generador_reporte_html_js_1 = require("../core/generador-reporte-html.js");
|
|
48
48
|
const interfaz_js_1 = require("./interfaz.js");
|
|
49
|
+
const types_js_1 = require("../core/types.js");
|
|
49
50
|
async function main() {
|
|
50
51
|
const argumentos = process.argv.slice(2);
|
|
51
52
|
const comando = argumentos[0]?.toLowerCase();
|
|
52
53
|
const directorioActual = process.env['PUF_TARGET_DIR'] || process.cwd();
|
|
53
54
|
const orquestador = new orquestador_js_1.OrquestadorPUF15(directorioActual);
|
|
54
55
|
if (comando === '-v' || comando === '--version' || comando === 'version') {
|
|
55
|
-
console.log('v3.
|
|
56
|
+
console.log('v3.1.0');
|
|
56
57
|
return;
|
|
57
58
|
}
|
|
58
59
|
switch (comando) {
|
|
@@ -85,6 +86,28 @@ async function main() {
|
|
|
85
86
|
const sinReporte = argumentos.includes('--no-html');
|
|
86
87
|
// Extracción de compuertas específicas con -g o --gate
|
|
87
88
|
const compuertasAFiltrar = [];
|
|
89
|
+
// Extraccion de perfil con --profile=<mvp|dev|security|enterprise>
|
|
90
|
+
let perfilSeleccionado = 'enterprise';
|
|
91
|
+
for (let i = 0; i < argumentos.length; i++) {
|
|
92
|
+
const arg = argumentos[i];
|
|
93
|
+
if (!arg)
|
|
94
|
+
continue;
|
|
95
|
+
const siguiente = argumentos[i + 1];
|
|
96
|
+
if (arg === '--profile' && siguiente) {
|
|
97
|
+
const val = siguiente.toLowerCase();
|
|
98
|
+
if (types_js_1.COMPUERTAS_POR_PERFIL[val])
|
|
99
|
+
perfilSeleccionado = val;
|
|
100
|
+
}
|
|
101
|
+
else if (arg.startsWith('--profile=')) {
|
|
102
|
+
const partes = arg.split('=');
|
|
103
|
+
const val = (partes[1] || '').toLowerCase();
|
|
104
|
+
if (types_js_1.COMPUERTAS_POR_PERFIL[val])
|
|
105
|
+
perfilSeleccionado = val;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (perfilSeleccionado !== 'enterprise') {
|
|
109
|
+
compuertasAFiltrar.push(...types_js_1.COMPUERTAS_POR_PERFIL[perfilSeleccionado]);
|
|
110
|
+
}
|
|
88
111
|
const flagsCompuerta = ['-g', '--gate', '--compuerta'];
|
|
89
112
|
for (let i = 0; i < argumentos.length; i++) {
|
|
90
113
|
const arg = argumentos[i];
|
|
@@ -220,7 +243,7 @@ async function main() {
|
|
|
220
243
|
interfaz_js_1.InterfazConsola.mostrarBanner();
|
|
221
244
|
console.log('Uso:\n' +
|
|
222
245
|
' puf iniciar <ID-INCIDENTE> [DESCRIPCION] [ARCHIVOS...] Genera andamio test (G2) y checkpoints (G3)\n' +
|
|
223
|
-
' puf auditar [ID-INCIDENTE] [ARCHIVOS...] [
|
|
246
|
+
' puf auditar [ID-INCIDENTE] [ARCHIVOS...] [--profile=mvp] Evalua la suite (--profile=mvp|dev|security|enterprise)\n' +
|
|
224
247
|
' puf revertir <ID-INCIDENTE> <ARCHIVO> Restaura atomicamente el archivo previo al fallo\n' +
|
|
225
248
|
' puf instalar-hook Instala el guardian de Git en .git/hooks/pre-commit\n' +
|
|
226
249
|
' puf guard Valida que los cambios en staged no violen G4 o G7\n' +
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;AACA;;;;;;GAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,2CAA6B;AAC7B,2DAA0D;AAC1D,8DAA2D;AAC3D,iFAAyE;AACzE,+CAAgD;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
package/dist/core/types.d.ts
CHANGED
|
@@ -72,4 +72,6 @@ export interface AdaptadorLenguaje {
|
|
|
72
72
|
violaciones: readonly string[];
|
|
73
73
|
}>;
|
|
74
74
|
}
|
|
75
|
+
export type PerfilAuditoria = 'enterprise' | 'mvp' | 'dev' | 'security';
|
|
76
|
+
export declare const COMPUERTAS_POR_PERFIL: Record<PerfilAuditoria, readonly IdentificadorCompuerta[]>;
|
|
75
77
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/core/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
|
package/dist/core/types.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Estándar AUM-IC 7:2026.
|
|
6
6
|
*/
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.TOTAL_COMPUERTAS_PUF = exports.COMPUERTAS_REGISTRADAS = void 0;
|
|
8
|
+
exports.COMPUERTAS_POR_PERFIL = exports.TOTAL_COMPUERTAS_PUF = exports.COMPUERTAS_REGISTRADAS = void 0;
|
|
9
9
|
exports.COMPUERTAS_REGISTRADAS = [
|
|
10
10
|
'G0',
|
|
11
11
|
'G1',
|
|
@@ -32,4 +32,10 @@ exports.COMPUERTAS_REGISTRADAS = [
|
|
|
32
32
|
'G22',
|
|
33
33
|
];
|
|
34
34
|
exports.TOTAL_COMPUERTAS_PUF = exports.COMPUERTAS_REGISTRADAS.length;
|
|
35
|
+
exports.COMPUERTAS_POR_PERFIL = {
|
|
36
|
+
enterprise: exports.COMPUERTAS_REGISTRADAS,
|
|
37
|
+
mvp: ['G0', 'G4', 'G6', 'G8', 'G22'],
|
|
38
|
+
dev: ['G0', 'G4', 'G6', 'G8', 'G22'],
|
|
39
|
+
security: ['G0', 'G8', 'G9', 'G17', 'G19', 'G20']
|
|
40
|
+
};
|
|
35
41
|
//# sourceMappingURL=types.js.map
|
package/dist/core/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AA2BU,QAAA,sBAAsB,GAAG;IACpC,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;CACG,CAAC;AAEE,QAAA,oBAAoB,GAAG,8BAAsB,CAAC,MAAM,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AA2BU,QAAA,sBAAsB,GAAG;IACpC,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;CACG,CAAC;AAEE,QAAA,oBAAoB,GAAG,8BAAsB,CAAC,MAAM,CAAC;AAiFrD,QAAA,qBAAqB,GAA+D;IAC/F,UAAU,EAAE,8BAAsB;IAClC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC;IACpC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC;IACpC,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;CAClD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ingcrea/aumic-puf",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.1.0",
|
|
4
4
|
"description": "Orquestador Determinista del Protocolo Universal contra Fallos (PUF) — Estándar AUM-IC 7:2026",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -12,7 +12,10 @@
|
|
|
12
12
|
"dist",
|
|
13
13
|
"LICENSE*",
|
|
14
14
|
"README*",
|
|
15
|
-
"PUF*.md"
|
|
15
|
+
"PUF*.md",
|
|
16
|
+
"MANIFEST*",
|
|
17
|
+
"puf-github-action.yml",
|
|
18
|
+
"MANIFEST.es.md"
|
|
16
19
|
],
|
|
17
20
|
"publishConfig": {
|
|
18
21
|
"access": "public"
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
name: AUM-IC PUF Quality Gate
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ master, main ]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [ master, main ]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
puf-audit:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
steps:
|
|
13
|
+
- name: Checkout Codebase
|
|
14
|
+
uses: actions/checkout@v4
|
|
15
|
+
|
|
16
|
+
- name: Setup Node.js
|
|
17
|
+
uses: actions/setup-node@v4
|
|
18
|
+
with:
|
|
19
|
+
node-version: 22
|
|
20
|
+
|
|
21
|
+
- name: Run AUM-IC PUF Audit
|
|
22
|
+
run: |
|
|
23
|
+
npx @ingcrea/aumic-puf auditar CI-AUDIT --profile=enterprise --fast
|
|
24
|
+
|
|
25
|
+
- name: Upload Forensic Report
|
|
26
|
+
if: always()
|
|
27
|
+
uses: actions/upload-artifact@v4
|
|
28
|
+
with:
|
|
29
|
+
name: puf-report
|
|
30
|
+
path: puf-report.html
|