Refactor(ADN): Migración de tools/adn a adn/tools en busca de la Armonía Integral del DIIAA

This commit is contained in:
Ricardo Monla
2026-03-10 22:25:01 -03:00
parent 174ef7d53c
commit 78006032eb
69 changed files with 432 additions and 671 deletions
+8 -8
View File
@@ -18,7 +18,7 @@ Esta hebra gobierna los protocolos de seguridad de red, gestión de secretos y a
## 2. Gestión de Secretos — `ns8-candados`
Herramienta unificada de seguridad: [`tools/adn/seguridad/ns8-candados.rb`](../tools/adn/seguridad/ns8-candados.rb)
Herramienta unificada de seguridad: [`adn/tools/seguridad/ns8-candados.rb`](../adn/tools/seguridad/ns8-candados.rb)
### 2.1 Prohibición de Texto Plano
La Inteligencia Artificial operante tiene **expresamente prohibido** solicitar contraseñas administrativas, tokens o claves privadas al operador, así como también plasmarlas en logs, comandos literales temporales o en la bitácora.
@@ -27,14 +27,14 @@ La Inteligencia Artificial operante tiene **expresamente prohibido** solicitar c
| Archivo | Ubicación | Git | Descripción |
| :--- | :--- | :---: | :--- |
| `ns8-candados.rb` | `tools/adn/seguridad/` | ✅ | Script Ruby unificado: cifrado, bóveda y autorización SSH. |
| `.boveda.json` | `tools/adn/seguridad/` | ❌ | Payloads AES-256-GCM cifrados. |
| `ns8-candados.rb` | `adn/tools/seguridad/` | ✅ | Script Ruby unificado: cifrado, bóveda y autorización SSH. |
| `.boveda.json` | `adn/tools/seguridad/` | ❌ | Payloads AES-256-GCM cifrados. |
| `.master.key` | Raíz del proyecto | ❌ | Clave maestra de la bóveda (nunca en Git). |
### 2.3 Comandos Disponibles
```bash
ruby tools/adn/seguridad/ns8-candados.rb <comando> [args]
ruby adn/tools/seguridad/ns8-candados.rb <comando> [args]
```
| Comando | Descripción |
@@ -51,7 +51,7 @@ ruby tools/adn/seguridad/ns8-candados.rb <comando> [args]
```bash
# Obtener password para uso en comando remoto
PASS=$(ruby tools/adn/seguridad/ns8-candados.rb get admindasu)
PASS=$(ruby adn/tools/seguridad/ns8-candados.rb get admindasu)
sshpass -p "$PASS" ssh -J root@10.0.10.205 admindasu@10.0.100.12 "cmd"
```
@@ -74,7 +74,7 @@ La llave SSH del operador está protegida con passphrase. El agente SSH no retie
El operador ejecuta el comando **interactivamente** para cargar su identidad SSH:
```bash
ruby tools/adn/seguridad/ns8-candados.rb abrir
ruby adn/tools/seguridad/ns8-candados.rb abrir
```
Las identidades permanecen activas mientras dure la sesión del agente SSH (sin timeout artificial).
@@ -93,7 +93,7 @@ Las identidades permanecen activas mientras dure la sesión del agente SSH (sin
**Uso programático** (ej: desde ns8-bkps):
```bash
# 1. Cargar llave SSH
ruby tools/adn/seguridad/ns8-candados.rb abrir
ruby adn/tools/seguridad/ns8-candados.rb abrir
# 2. Acceder a hipervisor
ssh root@10.0.10.201 "qm list"
@@ -106,7 +106,7 @@ ssh rmonla@10.0.10.4 "sudo shutdown -h now"
Los siguientes artefactos **nunca** deben ser rastreados por Git:
- `.master.key` (clave maestra de la bóveda)
- `tools/adn/seguridad/.boveda.json` (payloads cifrados)
- `adn/tools/seguridad/.boveda.json` (payloads cifrados)
- `.agent_token` (token legacy, obsoleto)
- `*.key` (claves privadas)
- `tmp/` (artefactos transitorios de la IA)
+2 -2
View File
@@ -50,9 +50,9 @@ Antes de iniciar escaneos, pruebas de red, o conexiones SSH a un nodo de un proy
- **Objetivo:** Identificar si el nodo objetivo está en una subred aislada, detrás de un NAT, o si requiere un salto de red (ProxyJump) a través de un hypervisor anfitrión, previniendo errores ciegos y garantizando trazabilidad geográfica.
### 14. Protocolo Autónomo de Ejecución (P.A.E.)
Para tareas operativas complejas (ej. backups), la IA **DEBE** utilizar las herramientas unificadas (`tools/adn/run`) que ya integran la lógica de seguridad y registro:
Para tareas operativas complejas (ej. backups), la IA **DEBE** utilizar las herramientas unificadas (`adn/tools/run`) que ya integran la lógica de seguridad y registro:
1. **Ejecución**: Usar `./tools/adn/run backup [nodo]`.
1. **Ejecución**: Usar `./adn/tools/run backup [nodo]`.
2. **Seguridad**: La herramienta utilizará internamente `ns8-candados run` para no exponer secretos.
3. **Bitácora**: El registro en `docs/bitacoras/YYYY-MM-DD.md` es automático mediante la herramienta.
4. **Validación**: La herramienta valida el contexto técnico (VMID, Host IP) consultando las fichas del ADN.
+3 -3
View File
@@ -21,14 +21,14 @@ El directorio `adn/` constituye el "núcleo genético" del servidor `srv-ns8`. N
## ⚙️ Configuración y Dependencias
- **Tecnologías Clave**:
- **Motor de ejecución**: Ruby (utilizado para scripts de automatización como `tools/adn/run`).
- **Motor de ejecución**: Ruby (utilizado para scripts de automatización como `adn/tools/run`).
- **Formatos**: Markdown para documentación y YAML para reglas de automatización.
- **Entorno**: Dockerizado para servicios de red (Nginx, Homepage, Bitácoras).
- **Configuración Relevante**:
- `triggers.yml`: Define qué acciones disparar ante eventos específicos (ej. cierre de tareas, creación de nuevas bitácoras).
- **Comandos Necesarios**:
- `./tools/adn/run triggers`: Procesa y sincroniza los cambios basados en las reglas del ADN.
- `ruby tools/adn/seguridad/ns8-candados.rb`: Gestiona la seguridad y secretos del servidor.
- `./adn/tools/run triggers`: Procesa y sincroniza los cambios basados en las reglas del ADN.
- `ruby adn/tools/seguridad/ns8-candados.rb`: Gestiona la seguridad y secretos del servidor.
## 🧠 Contexto para IA
- **Patrones y Convenciones**: Se debe mantener estrictamente la iconografía semántica (`04_iconografia.md`) y seguir las directivas de la Hebra 05. Ningún cambio debe romper la "Armonía Integral" definida en el índice.
+3 -3
View File
@@ -26,8 +26,8 @@ La persistencia de nuestras bitácoras vive dentro de un contenedor dedicado.
docker ps | grep postgres
```
## 3. Configuración de Credenciales CLI (`tools/adn/config/database.yml`)
Las herramientas ADN alojadas en `tools/adn/run` delegaron su configuración al archivo maestro que se sitúa en `tools/adn/config/database.yml`.
## 3. Configuración de Credenciales CLI (`adn/tools/config/database.yml`)
Las herramientas ADN alojadas en `adn/tools/run` delegaron su configuración al archivo maestro que se sitúa en `adn/tools/config/database.yml`.
> [!IMPORTANT]
> El entorno de `development` se define por defecto e interactúa en el puerto `5433` usando credenciales locales (`dtic_user` / `dtic_pass_2026`).
@@ -48,7 +48,7 @@ Inmediatamente, la CLI redirigirá los accesos al nodo principal configurado.
La mejor forma de testear que todo se ha inicializado y configurado correctamente es utilizando el Reporte de Salud de la BD proporcionado por la consola ADN:
```bash
./tools/adn/run db salud:bd
./adn/tools/run db salud:bd
```
Si recibes el siguiente dictamen, el sistema funciona correctamente:
`✅ Conexión a PostgreSQL establecida`
+8 -8
View File
@@ -1,7 +1,7 @@
# 🧬 ADN Tools (Núcleo Autónomo)
## Resumen Ejecutivo
`tools/adn` es el motor de ejecución y automatización del sistema **ADN (Artificial DNA)**. Implementa la lógica necesaria para garantizar la "Armonía Integral" de la infraestructura mediante validación proactiva, gestión de eventos y protocolos de ejecución autónomos. Actúa como el puente técnico entre las especificaciones declarativas (hebras `.md`) y la realidad operativa del servidor.
`adn/tools` es el motor de ejecución y automatización del sistema **ADN (Artificial DNA)**. Implementa la lógica necesaria para garantizar la "Armonía Integral" de la infraestructura mediante validación proactiva, gestión de eventos y protocolos de ejecución autónomos. Actúa como el puente técnico entre las especificaciones declarativas (hebras `.md`) y la realidad operativa del servidor.
---
@@ -9,7 +9,7 @@
### Arquitectura
El proyecto sigue un patrón **Modular y Dirigido por Eventos**:
- **Entry Point**: `tools/adn.rb` centraliza la interfaz de línea de comandos (CLI).
- **Entry Point**: `adn/tools.rb` centraliza la interfaz de línea de comandos (CLI).
- **Bus de Eventos**: `ADN::Eventos` (Singleton) gestiona la comunicación desacoplada entre componentes.
- **Motor de Triggers**: `ADN::Triggers` (Singleton) orquestra acciones automáticas basadas en la configuración de `adn/triggers.yml`.
- **Estrategia de Subcomandos**: Cada funcionalidad mayor reside en su propio archivo `subcomando_*.rb`, facilitando la extensibilidad.
@@ -26,20 +26,20 @@ El proyecto sigue un patrón **Modular y Dirigido por Eventos**:
### Stack Tecnológico
- **Lenguaje**: Ruby (Enfoque en scripting robusto y legible).
- **Configuración**: YAML (`adn/triggers.yml` y `tools/adn/config.yml`).
- **Configuración**: YAML (`adn/triggers.yml` y `adn/tools/config.yml`).
- **Logging**: JSON estructurado para integración con sistemas de monitoreo externos.
- **Hooks**: Integración con Git mediante `tools/adn/hooks/pre-commit`.
- **Hooks**: Integración con Git mediante `adn/tools/hooks/pre-commit`.
### Comandos Esenciales
```bash
# Validar cumplimiento de bitácoras
./tools/adn/run validador
./adn/tools/run validador
# Ejecutar backup seguro de un nodo
./tools/adn/run backup <nombre-nodo>
./adn/tools/run backup <nombre-nodo>
# Ver salud del sistema
./tools/adn/run salud --json
./adn/tools/run salud --json
```
---
@@ -63,7 +63,7 @@ El proyecto sigue un patrón **Modular y Dirigido por Eventos**:
### Tareas Prioritarias
1. **Implementar Triggers**: Desarrollar la lógica real para las 14 acciones definidas en `adn/triggers.yml`.
2. **Refinar `backup`**: Añadir soporte para protocolos XEN y Rclone dentro del subcomando unificado.
3. **Dashboard de Salud**: Desarrollar la vista visual de `./tools/adn/run salud --dashboard`.
3. **Dashboard de Salud**: Desarrollar la vista visual de `./adn/tools/run salud --dashboard`.
### Preguntas para el Desarrollador
- ¿Cómo se deben manejar las colisiones de eventos si dos triggers disparan acciones contradictorias?
@@ -23,7 +23,7 @@ class SubcomandoAyuda
#{Color::CYAN}🔧 Herramienta ADN - Interfaz de línea de comandos unificada#{Color::RESET}
#{Color::DIM}Versión: Fase 1 (Núcleo Autónomo)#{Color::RESET}
#{Color::GREEN}Uso:#{Color::RESET} ./tools/adn/run <subcomando> [opciones] [argumentos]
#{Color::GREEN}Uso:#{Color::RESET} ./adn/tools/run <subcomando> [opciones] [argumentos]
#{Color::YELLOW}Subcomandos disponibles:#{Color::RESET}
validador [--watch] [--fix] Validar cumplimiento del ADN en bitácoras
@@ -43,7 +43,7 @@ class SubcomandoAyuda
triggers [--test] [--force] Ejecutar triggers de sincronización
#{Color::DIM}Para ayuda detallada de un subcomando:#{Color::RESET}
./tools/adn/run ayuda <subcomando>
./adn/tools/run ayuda <subcomando>
#{Color::DIM}Documentación completa:#{Color::RESET} docs/plan/260307-1400_Plan_Mejoras_ADN.md
AYUDA_PRINCIPAL
@@ -52,7 +52,7 @@ class SubcomandoAyuda
def mostrar_ayuda_subcomando(subcomando)
case subcomando.downcase
when 'validador'
puts "Uso: ./tools/adn/run validador [--watch] [--fix]"
puts "Uso: ./adn/tools/run validador [--watch] [--fix]"
puts ""
puts "Valida el cumplimiento del ADN en las bitácoras:"
puts " • Formato de tiempo (HH:MM, sin \"hs\")"
@@ -66,10 +66,10 @@ class SubcomandoAyuda
puts " --fix Intentar corregir errores automáticamente"
puts ""
puts "Ejemplo:"
puts " ./tools/adn/run validador"
puts " ./tools/adn/run validador --fix"
puts " ./adn/tools/run validador"
puts " ./adn/tools/run validador --fix"
when 'contexto'
puts "Uso: ./tools/adn/run contexto <nombre-nodo> [--cmd]"
puts "Uso: ./adn/tools/run contexto <nombre-nodo> [--cmd]"
puts ""
puts "Obtiene información contextual de un nodo:"
puts " • IP y configuración de red"
@@ -77,20 +77,20 @@ class SubcomandoAyuda
puts " • Comandos SSH sugeridos"
puts ""
puts "Ejemplo:"
puts " ./tools/adn/run contexto srv-pmox1"
puts " ./tools/adn/run contexto srvv-fenix --cmd"
puts " ./adn/tools/run contexto srv-pmox1"
puts " ./adn/tools/run contexto srvv-fenix --cmd"
when 'salud'
puts "Uso: ./tools/adn/run salud [--dashboard] [--json]"
puts "Uso: ./adn/tools/run salud [--dashboard] [--json]"
puts ""
puts "Muestra métricas de salud del sistema ADN:"
puts " • Cantidad de hebras, bitácoras, nodos, proyectos"
puts " • Errores recientes en logs"
puts ""
puts "Ejemplo:"
puts " ./tools/adn/run salud"
puts " ./tools/adn/run salud --json"
puts " ./adn/tools/run salud"
puts " ./adn/tools/run salud --json"
when 'generar'
puts "Uso: ./tools/adn/run generar <tipo> [argumentos]"
puts "Uso: ./adn/tools/run generar <tipo> [argumentos]"
puts ""
puts "Tipos disponibles:"
puts " bitacora [fecha] - Crea nueva bitácora (fecha: YYYY-MM-DD, default: hoy)"
@@ -98,13 +98,13 @@ class SubcomandoAyuda
puts " proyecto <código> - Crea manifiesto de proyecto"
puts ""
puts "Ejemplos:"
puts " ./tools/adn/run generar bitacora"
puts " ./tools/adn/run generar bitacora 2026-03-08"
puts " ./tools/adn/run generar nodo srv-nuevo"
puts " ./tools/adn/run generar proyecto P2604"
puts " ./adn/tools/run generar bitacora"
puts " ./adn/tools/run generar bitacora 2026-03-08"
puts " ./adn/tools/run generar nodo srv-nuevo"
puts " ./adn/tools/run generar proyecto P2604"
else
puts "#{Color::RED}✗ Subcomando desconocido: #{subcomando}#{Color::RESET}"
puts "Usa './tools/adn/run ayuda' para ver la lista de subcomandos."
puts "Usa './adn/tools/run ayuda' para ver la lista de subcomandos."
end
end
end
@@ -23,7 +23,7 @@ module ADN
def ejecutar
parser = OptionParser.new do |opts|
opts.banner = "Uso: ./tools/adn/run backup <nodo|estados> [OPCIONES]"
opts.banner = "Uso: ./adn/tools/run backup <nodo|estados> [OPCIONES]"
opts.separator ""
opts.separator "Ejecuta un backup remoto o consulta el estado actual."
opts.separator ""
@@ -142,7 +142,7 @@ module ADN
ruta_nodo = File.join(ADN::NODOS_DIR, "#{nombre_nodo}.md")
unless File.exist?(ruta_nodo)
@logger.error("No existe el archivo de nodo: #{ruta_nodo}")
@logger.sugerencia("./tools/adn/run db nodo:crear --nombre #{nombre_nodo} --tipo servidor --ip 0.0.0.0 --desc \"Servidor a configurar\"")
@logger.sugerencia("./adn/tools/run db nodo:crear --nombre #{nombre_nodo} --tipo servidor --ip 0.0.0.0 --desc \"Servidor a configurar\"")
return nil
end
@@ -174,7 +174,7 @@ module ADN
@logger.error("No se encontró IP para el host #{host_name}")
@logger.sugerencia([
"Verificá que el archivo #{host_name}.md exista.",
"Si no existe, crealo con: ./tools/adn/run db nodo:crear --nombre #{host_name} --tipo servidor --ip DIRECCION_IP",
"Si no existe, crealo con: ./adn/tools/run db nodo:crear --nombre #{host_name} --tipo servidor --ip DIRECCION_IP",
"Asegurate de que incluya: **IP**: `DIRECCION_IP`"
])
return nil
@@ -347,7 +347,7 @@ module ADN
print "#{Color::DIM}🔄 Sincronizando bitácora digital... #{Color::RESET}"
# Ejecutamos la migración de forma silenciosa
cmd_migrar = "#{File.join(ADN::PROJECT_ROOT, 'tools/adn/run')} db migrar:md #{fecha_hoy} --sobrescribir > /dev/null 2>&1"
cmd_migrar = "#{File.join(ADN::PROJECT_ROOT, 'adn/tools/run')} db migrar:md #{fecha_hoy} --sobrescribir > /dev/null 2>&1"
system(cmd_migrar)
puts "#{Color::DIM}OK#{Color::RESET}"
end
@@ -356,11 +356,11 @@ module ADN
puts "\n#{Color::BOLD}📅 Historial de hoy (Sincronizado)#{Color::RESET}"
puts "" * 60
db_tool = "./tools/adn/run"
db_tool = "./adn/tools/run"
# Buscamos por "backup" o "BKP"
system("#{db_tool} db evento:listar --desde '#{fecha_hoy}' --buscar 'ackup'")
puts "\n#{Color::DIM}Para historial completo use: ./tools/adn/run db evento:listar --desde '#{fecha_hoy}'#{Color::RESET}"
puts "\n#{Color::DIM}Para historial completo use: ./adn/tools/run db evento:listar --desde '#{fecha_hoy}'#{Color::RESET}"
end
def comando_sanear
@@ -1,6 +1,6 @@
# frozen_string_literal: true
# tools/adn/cli/cierre.rb — Subcomando para cierre de jornada laboral (DB-First)
# adn/tools/cli/cierre.rb — Subcomando para cierre de jornada laboral (DB-First)
# ==============================================================================
require 'date'
@@ -19,7 +19,7 @@ module ADN
def ejecutar
if @args.empty? || !(@args.include?('jornada'))
puts "#{Color::YELLOW}Uso: ./tools/adn/run cierre de jornada [presencial|remoto]#{Color::RESET}"
puts "#{Color::YELLOW}Uso: ./adn/tools/run cierre de jornada [presencial|remoto]#{Color::RESET}"
return
end
@@ -1,6 +1,6 @@
# frozen_string_literal: true
# tools/adn/cli/conocimiento.rb — Subcomando para gestionar la Base de Conocimiento del ADN
# adn/tools/cli/conocimiento.rb — Subcomando para gestionar la Base de Conocimiento del ADN
# ==============================================================================
# Inyecta nuevos documentos y los referencia automáticamente en el 00_indice.md
# cumpliendo con el principio de Armonía Integral.
@@ -171,7 +171,7 @@ module ADN
puts " #{Color::CYAN}asimilar <archivo.md>#{Color::RESET} Ingiere un documento Markdown a la base cognitiva del ADN."
puts ""
puts "#{Color::BOLD}EJEMPLOS:#{Color::RESET}"
puts " ./tools/adn/run conocimiento asimilar docs/configuracion_bd.md"
puts " ./adn/tools/run conocimiento asimilar docs/configuracion_bd.md"
end
end
end
@@ -13,7 +13,7 @@ class SubcomandoContexto
def ejecutar
if @args.empty?
@logger.error("Se requiere nombre de nodo")
puts "Uso: ./tools/adn/run contexto <nombre-nodo> [--cmd]"
puts "Uso: ./adn/tools/run contexto <nombre-nodo> [--cmd]"
exit 1
end
@@ -21,7 +21,7 @@ class SubcomandoContexto
@args.shift
parser = OptionParser.new do |opts|
opts.banner = "Uso: ./tools/adn/run contexto <nombre-nodo> [OPCIONES]"
opts.banner = "Uso: ./adn/tools/run contexto <nombre-nodo> [OPCIONES]"
opts.separator ""
opts.separator "Obtiene contexto topológico de un nodo"
opts.separator ""
+8 -8
View File
@@ -1,6 +1,6 @@
# frozen_string_literal: true
# tools/adn/subcomando_db.rb — Subcomando para operaciones con base de datos dtic-BITACORAs
# adn/tools/subcomando_db.rb — Subcomando para operaciones con base de datos dtic-BITACORAs
# ==============================================================================
# Este subcomando integra las operaciones de base de datos PostgreSQL con la CLI ADN.
# Proporciona comandos para gestión de bitácoras, nodos, temas y entradas directamente
@@ -18,7 +18,7 @@
# • adn db estadisticas — Mostrar estadísticas del sistema
#
# Uso:
# ./tools/adn/run db [SUBCOMANDO] [OPCIONES]
# ./adn/tools/run db [SUBCOMANDO] [OPCIONES]
require 'optparse'
require 'date'
@@ -32,7 +32,7 @@ begin
rescue LoadError => e
# Fallback para desarrollo
puts "⚠ Advertencia: No se pudo cargar BitacoraDB o MDImporter: #{e.message}"
puts " Asegúrate de que los archivos en tools/adn/db/ existen"
puts " Asegúrate de que los archivos en adn/tools/db/ existen"
end
module ADN
@@ -138,7 +138,7 @@ module ADN
# Muestra la ayuda general del subcomando
def mostrar_ayuda
puts "#{Color::BOLD}Uso: ./tools/adn/run db [SUBCOMANDO] [OPCIONES]#{Color::RESET}"
puts "#{Color::BOLD}Uso: ./adn/tools/run db [SUBCOMANDO] [OPCIONES]#{Color::RESET}"
puts ""
puts "#{Color::BOLD}Subcomandos disponibles:#{Color::RESET}"
puts ""
@@ -154,10 +154,10 @@ module ADN
puts " #{Color::CYAN}archivar:md#{Color::RESET} Mueve los archivos .md migrados al archivo histórico"
puts ""
puts "#{Color::BOLD}Ejemplos:#{Color::RESET}"
puts " ./tools/adn/run db salud:bd"
puts " ./tools/adn/run db bitacora:crear --resumen \"Inicio de proyecto\""
puts " ./tools/adn/run db evento:crear --inicio 09:00 --descripcion \"Reunión\" --nodo srv-ns8"
puts " ./tools/adn/run db nodo:listar --tipo servidor"
puts " ./adn/tools/run db salud:bd"
puts " ./adn/tools/run db bitacora:crear --resumen \"Inicio de proyecto\""
puts " ./adn/tools/run db evento:crear --inicio 09:00 --descripcion \"Reunión\" --nodo srv-ns8"
puts " ./adn/tools/run db nodo:listar --tipo servidor"
puts ""
puts "#{Color::YELLOW}⚠ Nota:#{Color::RESET} Requiere PostgreSQL en ejecución (puerto 5433)"
puts " Iniciar contenedor: #{Color::DIM}cd dtic-BITACORAs && docker-compose up -d#{Color::RESET}"
@@ -38,7 +38,7 @@ class SubcomandoGenerar
private
def mostrar_ayuda_generar
puts "Uso: ./tools/adn/run generar <tipo> [argumentos]"
puts "Uso: ./adn/tools/run generar <tipo> [argumentos]"
puts ""
puts "Tipos disponibles:"
puts " bitacora [fecha] Generar nueva bitácora (fecha: YYYY-MM-DD, default: hoy)"
@@ -107,7 +107,7 @@ class SubcomandoGenerar
def generar_nodo
if @args.empty?
@logger.error("Se requiere nombre para el nodo")
puts "Uso: ./tools/adn/run generar nodo <nombre-nodo>"
puts "Uso: ./adn/tools/run generar nodo <nombre-nodo>"
exit 1
end
@@ -161,7 +161,7 @@ class SubcomandoGenerar
def generar_proyecto
if @args.empty?
@logger.error("Se requiere código para el proyecto")
puts "Uso: ./tools/adn/run generar proyecto <código> [nombre]"
puts "Uso: ./adn/tools/run generar proyecto <código> [nombre]"
exit 1
end
@@ -1,6 +1,6 @@
# frozen_string_literal: true
# tools/adn/cli/inicio.rb — Subcomando para inicio de jornada laboral (DB-First)
# adn/tools/cli/inicio.rb — Subcomando para inicio de jornada laboral (DB-First)
# ==============================================================================
require 'date'
@@ -19,7 +19,7 @@ module ADN
def ejecutar
if @args.empty? || !(@args.include?('jornada'))
puts "#{Color::YELLOW}Uso: ./tools/adn/run inicio de jornada [presencial|remoto]#{Color::RESET}"
puts "#{Color::YELLOW}Uso: ./adn/tools/run inicio de jornada [presencial|remoto]#{Color::RESET}"
return
end
@@ -1,6 +1,6 @@
# frozen_string_literal: true
# tools/adn/subcomando_plan.rb — Subcomando para seguimiento y gestión del plan ADN
# adn/tools/subcomando_plan.rb — Subcomando para seguimiento y gestión del plan ADN
# ==============================================================================
# Este subcomando proporciona herramientas para el seguimiento, actualización y
# reporte del plan integral de integración ADN con dtic-BITACORAs.
@@ -21,7 +21,7 @@
# • adn plan ayuda — Mostrar ayuda completa
#
# Uso:
# ./tools/adn/run plan [SUBCOMANDO] [OPCIONES]
# ./adn/tools/run plan [SUBCOMANDO] [OPCIONES]
require 'optparse'
require 'date'
@@ -34,7 +34,7 @@ begin
require_relative '../parsers/plan'
rescue LoadError => e
puts "⚠ Advertencia: No se pudo cargar PlanParser: #{e.message}"
puts " Asegúrate de que tools/adn/parsers/plan.rb existe"
puts " Asegúrate de que adn/tools/parsers/plan.rb existe"
end
module ADN
@@ -477,7 +477,7 @@ module ADN
# Muestra la ayuda general del subcomando
def mostrar_ayuda
puts "#{Color::BOLD}Uso: ./tools/adn/run plan [SUBCOMANDO] [OPCIONES]#{Color::RESET}"
puts "#{Color::BOLD}Uso: ./adn/tools/run plan [SUBCOMANDO] [OPCIONES]#{Color::RESET}"
puts ""
puts "#{Color::BOLD}Subcomandos disponibles:#{Color::RESET}"
puts ""
@@ -494,11 +494,11 @@ module ADN
puts " #{Color::DIM}--output ARCHIVO#{Color::RESET} Guardar salida en archivo"
puts ""
puts "#{Color::BOLD}Ejemplos:#{Color::RESET}"
puts " #{Color::DIM}./tools/adn/run plan progreso --detallado#{Color::RESET}"
puts " #{Color::DIM}./tools/adn/run plan actualizar 1.1 1.2 2.3 --notas \"Implementado\"#{Color::RESET}"
puts " #{Color::DIM}./tools/adn/run plan reporte --formato markdown --output reporte.md#{Color::RESET}"
puts " #{Color::DIM}./tools/adn/run plan validar --reparar#{Color::RESET}"
puts " #{Color::DIM}./tools/adn/run plan exportar --formato json --output progreso.json#{Color::RESET}"
puts " #{Color::DIM}./adn/tools/run plan progreso --detallado#{Color::RESET}"
puts " #{Color::DIM}./adn/tools/run plan actualizar 1.1 1.2 2.3 --notas \"Implementado\"#{Color::RESET}"
puts " #{Color::DIM}./adn/tools/run plan reporte --formato markdown --output reporte.md#{Color::RESET}"
puts " #{Color::DIM}./adn/tools/run plan validar --reparar#{Color::RESET}"
puts " #{Color::DIM}./adn/tools/run plan exportar --formato json --output progreso.json#{Color::RESET}"
puts ""
puts "#{Color::YELLOW}⚠ Archivo de plan por defecto:#{Color::RESET} #{File.basename(DEFAULT_PLAN_PATH)}"
puts " #{Color::DIM}#{DEFAULT_PLAN_PATH}#{Color::RESET}"
@@ -13,7 +13,7 @@ class SubcomandoSalud
def ejecutar
parser = OptionParser.new do |opts|
opts.banner = "Uso: ./tools/adn/run salud [OPCIONES]"
opts.banner = "Uso: ./adn/tools/run salud [OPCIONES]"
opts.separator ""
opts.separator "Muestra salud general del sistema ADN"
opts.separator ""
@@ -80,7 +80,7 @@ class SubcomandoSalud
end
puts "#{Color::DIM}#{'-' * 60}#{Color::RESET}"
puts "#{Color::DIM}Para más detalles: ./tools/adn/run salud --json#{Color::RESET}"
puts "#{Color::DIM}Para más detalles: ./adn/tools/run salud --json#{Color::RESET}"
@logger.exito("Reporte de salud generado")
end
@@ -1,11 +1,11 @@
# frozen_string_literal: true
# tools/adn/subcomando_triggers.rb — Subcomando para gestión del sistema de triggers ADN
# adn/tools/subcomando_triggers.rb — Subcomando para gestión del sistema de triggers ADN
# ================================================================================
# Este subcomando permite gestionar el sistema de triggers que implementa
# el Principio de Armonía Integral mediante la propagación automática de cambios.
#
# Integrado con: ADN::Triggers (tools/adn/triggers.rb)
# Integrado con: ADN::Triggers (adn/tools/triggers.rb)
# Configuración: adn/triggers.yml
#
# 📅 Última actualización: 2026-03-07 (Fase 2: Automatización Inteligente)
@@ -70,7 +70,7 @@ module ADN
# Crea el parser de opciones
def crear_parser
OptionParser.new do |opts|
opts.banner = "Uso: ./tools/adn/run triggers [OPCIONES]"
opts.banner = "Uso: ./adn/tools/run triggers [OPCIONES]"
opts.separator ""
opts.separator "Gestiona el sistema de triggers para sincronización automática del ADN"
opts.separator ""
@@ -112,15 +112,15 @@ module ADN
puts " automáticamente cambios entre diferentes componentes del sistema ADN."
puts ""
puts " Triggers definidos en: adn/triggers.yml"
puts " Bus de eventos: tools/adn/eventos.rb"
puts " Motor de triggers: tools/adn/triggers.rb"
puts " Bus de eventos: adn/tools/eventos.rb"
puts " Motor de triggers: adn/tools/triggers.rb"
puts ""
puts "Ejemplos:"
puts " ./tools/adn/run triggers --listar"
puts " ./tools/adn/run triggers --registrar"
puts " ./tools/adn/run triggers --test bitacoras_0"
puts " ./tools/adn/run triggers --forzar"
puts " ./tools/adn/run triggers --limpiar"
puts " ./adn/tools/run triggers --listar"
puts " ./adn/tools/run triggers --registrar"
puts " ./adn/tools/run triggers --test bitacoras_0"
puts " ./adn/tools/run triggers --forzar"
puts " ./adn/tools/run triggers --limpiar"
puts ""
puts "📚 Documentación: docs/plan/260307-1400_Plan_Mejoras_ADN.md"
end
@@ -211,7 +211,7 @@ module ADN
unless trigger_id
@logger.error("Se requiere ID de trigger para probar (ej: bitacoras_0)")
puts "#{Color::RED}✗ Se requiere ID de trigger para probar#{Color::RESET}"
puts " Ejemplo: ./tools/adn/run triggers --test bitacoras_0"
puts " Ejemplo: ./adn/tools/run triggers --test bitacoras_0"
puts " Usa --listar para ver IDs disponibles"
exit 1
end
@@ -13,7 +13,7 @@ class SubcomandoValidador
def ejecutar
parser = OptionParser.new do |opts|
opts.banner = "Uso: ./tools/adn/run validador [OPCIONES]"
opts.banner = "Uso: ./adn/tools/run validador [OPCIONES]"
opts.separator ""
opts.separator "Valida el cumplimiento del ADN en las bitácoras"
opts.separator ""
@@ -1,6 +1,6 @@
# frozen_string_literal: true
# tools/adn/core/colores.rb — ADN Tools Colors utility
# adn/tools/core/colores.rb — ADN Tools Colors utility
# ====================================================================
# Consolidación de módulos de Color (Menos es Más) para uso en CLI.
@@ -111,7 +111,7 @@ module ADN
if cambio
File.write(ruta, contenido)
# Sincronizar con DB
system("#{File.join(ADN::PROJECT_ROOT, 'tools/adn/run')} db migrar:md #{fecha} --sobrescribir > /dev/null 2>&1")
system("#{File.join(ADN::PROJECT_ROOT, 'adn/tools/run')} db migrar:md #{fecha} --sobrescribir > /dev/null 2>&1")
end
end
@@ -147,7 +147,7 @@ module ADN
@logger.exito(" 🚀 Traspasando #{nuevos_pendientes.length} pendientes de ayer a hoy...")
cont_hoy.sub!(regex_tabla) { "#{$1}\n#{filas_nuevas}" }
File.write(ruta_hoy, cont_hoy)
system("#{File.join(ADN::PROJECT_ROOT, 'tools/adn/run')} db migrar:md #{hoy} --sobrescribir > /dev/null 2>&1")
system("#{File.join(ADN::PROJECT_ROOT, 'adn/tools/run')} db migrar:md #{hoy} --sobrescribir > /dev/null 2>&1")
end
end
@@ -1,6 +1,6 @@
# frozen_string_literal: true
# tools/adn/eventos.rb — Bus de eventos interno para el sistema ADN
# adn/tools/eventos.rb — Bus de eventos interno para el sistema ADN
# ==================================================================
# Este módulo implementa un bus de eventos que permite la comunicación
# desacoplada entre los diferentes componentes del sistema ADN.
@@ -1,6 +1,6 @@
# frozen_string_literal: true
# tools/adn/logger.rb — Logger estructurado JSON para el sistema ADN
# adn/tools/logger.rb — Logger estructurado JSON para el sistema ADN
# ====================================================================
# Este módulo proporciona logging estructurado en JSON para todas las
# herramientas del sistema ADN. Los logs se almacenan en `logs/adn/`
@@ -197,10 +197,10 @@ module ADN
#
# @return [String] Nombre de la herramienta
def determinar_herramienta_llamante
# Obtener el backtrace y buscar llamadas desde tools/adn/
# Obtener el backtrace y buscar llamadas desde adn/tools/
caller_locations.each do |loc|
ruta = loc.absolute_path || loc.path
if ruta.include?('tools/adn')
if ruta.include?('adn/tools')
# Extraer nombre del archivo sin extensión
nombre = File.basename(ruta, '.*')
return "adn.#{nombre}" unless nombre.empty?
@@ -1,6 +1,6 @@
# frozen_string_literal: true
# tools/adn/triggers.rb — Sistema de triggers para sincronización automática del ADN
# adn/tools/triggers.rb — Sistema de triggers para sincronización automática del ADN
# =============================================================================
# Este módulo implementa el sistema de triggers definido en adn/triggers.yml.
# Los triggers implementan el Principio de Armonía Integral al propagar
@@ -9,7 +9,7 @@
# 📅 Última actualización: 2026-03-07 (Fase 2: Automatización Inteligente)
# 📚 Referencia: adn/triggers.yml (configuración)
# 📚 Plan: docs/plan/260307-1400_Plan_Mejoras_ADN.md
# 🔗 Integración: tools/adn/eventos.rb (bus de eventos)
# 🔗 Integración: adn/tools/eventos.rb (bus de eventos)
require 'yaml'
require 'singleton'
@@ -1,6 +1,6 @@
# frozen_string_literal: true
# tools/adn/validador.rb — Validador de cumplimiento del ADN
# adn/tools/validador.rb — Validador de cumplimiento del ADN
# =============================================================
# Este módulo valida que bitácoras, nodos, proyectos y hebras ADN
# cumplan con las reglas definidas en las hebras del ADN.
@@ -15,7 +15,7 @@
# • Consistencia entre hebras ADN
#
# Uso desde CLI:
# ruby tools/adn.rb validador [--watch] [--fix]
# ruby adn/tools.rb validador [--watch] [--fix]
#
# Uso programático:
# validador = ADN::Validador.new
@@ -1,11 +1,11 @@
# frozen_string_literal: true
# tools/adn/db/cli/exportar_todo.rb
# adn/tools/db/cli/exportar_todo.rb
# ==========================================
# Exporta TODAS las bitácoras de la DB a archivos .md
# Uso: ruby tools/adn/db/cli/exportar_todo.rb [--dir DIRECTORIO]
# Uso: ruby adn/tools/db/cli/exportar_todo.rb [--dir DIRECTORIO]
# — o vía enjambre —
# ./tools/adn/run db exportar:md --todo
# ./adn/tools/run db exportar:md --todo
require 'date'
require 'optparse'
@@ -1,14 +1,14 @@
# frozen_string_literal: true
# tools/adn/db/cli/verificar_migracion.rb
# adn/tools/db/cli/verificar_migracion.rb
# ================================================
# Verifica que todas las bitácoras MD existentes estén correctamente
# migradas en la base de datos. Reporta faltantes y discrepancias.
#
# Uso:
# ruby tools/adn/db/cli/verificar_migracion.rb
# ruby adn/tools/db/cli/verificar_migracion.rb
# — o vía enjambre —
# ./tools/adn/run db verificar
# ./adn/tools/run db verificar
require 'date'
require_relative '../core/bitacora_db'
@@ -90,14 +90,14 @@ module BitacorasDB
if @resultados[:no_migrada].any?
puts "\n#{COLORES[:red]}❌ No migradas (MD existe, DB no): #{@resultados[:no_migrada].size}#{COLORES[:reset]}"
@resultados[:no_migrada].each { |f| puts " #{f}" }
puts " #{COLORES[:dim]}Ejecuta: ./tools/adn/run db migrar:md FECHA#{COLORES[:reset]}"
puts " #{COLORES[:dim]}Ejecuta: ./adn/tools/run db migrar:md FECHA#{COLORES[:reset]}"
end
# Sin MD
if @resultados[:sin_md].any?
puts "\n#{COLORES[:cyan]} En DB sin archivo MD: #{@resultados[:sin_md].size}#{COLORES[:reset]}"
@resultados[:sin_md].each { |f| puts " #{f}" }
puts " #{COLORES[:dim]}Ejecuta: ./tools/adn/run db exportar:md FECHA#{COLORES[:reset]}"
puts " #{COLORES[:dim]}Ejecuta: ./adn/tools/run db exportar:md FECHA#{COLORES[:reset]}"
end
total = @resultados[:ok].size + @resultados[:sin_entradas].size
@@ -1,6 +1,6 @@
# frozen_string_literal: true
# tools/adn/db/core/bitacora_db.rb — Clase principal para conexión a PostgreSQL
# adn/tools/db/core/bitacora_db.rb — Clase principal para conexión a PostgreSQL
# ================================================================================
# Esta clase proporciona una interfaz Ruby para interactuar con la base de datos
# dtic-BITACORAs. Maneja conexiones, operaciones CRUD y validaciones para las
@@ -1,6 +1,6 @@
# frozen_string_literal: true
# tools/adn/db/core/buscador_bd.rb — Sistema de búsqueda y filtrado para dtic-BITACORAs
# adn/tools/db/core/buscador_bd.rb — Sistema de búsqueda y filtrado para dtic-BITACORAs
# ================================================================================
# Esta clase proporciona capacidades avanzadas de búsqueda y filtrado para la
# base de datos dtic-BITACORAs. Implementa:
@@ -1,6 +1,6 @@
# frozen_string_literal: true
# tools/adn/db/core/buscador_bd_simple.rb — Versión simplificada del sistema de búsqueda
# adn/tools/db/core/buscador_bd_simple.rb — Versión simplificada del sistema de búsqueda
# ================================================================================
# Versión simplificada y funcional del sistema de búsqueda para dtic-BITACORAs
# Esta versión evita problemas complejos de parámetros y se enfoca en funcionalidad básica
@@ -1,6 +1,6 @@
# frozen_string_literal: true
# tools/adn/db/importers/md_importer.rb — Importador de bitácoras .md a PostgreSQL
# adn/tools/db/importers/md_importer.rb — Importador de bitácoras .md a PostgreSQL
# ================================================================================
# Esta clase convierte bitácoras en formato Markdown al esquema de base de datos
# dtic-BITACORAs. Procesa la estructura jerárquica:
+228
View File
@@ -0,0 +1,228 @@
#!/usr/bin/env bash
# Git pre-commit hook para validación del ADN del proyecto srv-ns8
# Valida que bitácoras, nodos, proyectos y hebras ADN cumplan con las reglas
# definidas en las hebras del ADN (adn/).
# ─── Configuración ───────────────────────────────────────────────────────
PROYECTO_ROOT="$(git rev-parse --show-toplevel)"
ADN_TOOLS_DIR="${PROYECTO_ROOT}/adn/tools"
ADN_CLI="${PROYECTO_ROOT}/adn/tools/run"
CONFIG_FILE="${ADN_TOOLS_DIR}/config/config.yml"
HOOK_NAME="pre-commit ADN"
# ─── Colores para terminal ───────────────────────────────────────────────
COLOR_RESET="\033[0m"
COLOR_ROJO="\033[31m"
COLOR_VERDE="\033[32m"
COLOR_AMARILLO="\033[33m"
COLOR_CYAN="\033[36m"
COLOR_DIM="\033[2m"
# ─── Funciones de utilidad ───────────────────────────────────────────────
log_info() {
echo -e "${COLOR_CYAN} $1${COLOR_RESET}"
}
log_exito() {
echo -e "${COLOR_VERDE}✓ $1${COLOR_RESET}"
}
log_advertencia() {
echo -e "${COLOR_AMARILLO}⚠ $1${COLOR_RESET}"
}
log_error() {
echo -e "${COLOR_ROJO}✗ $1${COLOR_RESET}"
}
# Verificar si un comando existe
comando_existe() {
command -v "$1" >/dev/null 2>&1
}
# ─── Validaciones previas ────────────────────────────────────────────────
verificar_prerequisitos() {
# Verificar Ruby
if ! comando_existe "ruby"; then
log_error "Ruby no encontrado. Es requerido para la validación del ADN."
log_info "Instala Ruby: sudo apt install ruby (Debian/Ubuntu)"
return 1
fi
# Verificar CLI ADN
if [[ ! -f "${ADN_CLI}" ]]; then
log_error "Herramienta ADN no encontrada: ${ADN_CLI}"
log_info "Ejecuta desde la raíz del proyecto o instala las herramientas ADN."
return 1
fi
return 0
}
# ─── Obtener archivos modificados relevantes ─────────────────────────────
obtener_archivos_relevantes() {
# Obtener archivos staged con cambios (Added, Copied, Modified)
git diff --cached --name-only --diff-filter=ACM | while read -r archivo; do
# Filtrar solo archivos .md en directorios del ADN
if [[ "$archivo" =~ \.md$ ]]; then
case "$archivo" in
bitacoras/*|nodos/*|proyectos/*|adn/*)
echo "$archivo"
;;
esac
fi
done
}
# ─── Validación de archivos individuales ─────────────────────────────────
validar_archivo() {
local archivo="$1"
local nombre_archivo=$(basename "$archivo")
# Determinar tipo de validación basado en el directorio
local tipo=""
case "$archivo" in
bitacoras/*) tipo="bitacora" ;;
nodos/*) tipo="nodo" ;;
proyectos/*) tipo="proyecto" ;;
adn/*) tipo="hebra" ;;
*) return 0 ;; # No debería pasar
esac
log_info "Validando $tipo: $nombre_archivo"
# Por ahora usamos el validador general (en el futuro podría haber validación por tipo)
# El validador general ya filtra por tipo de archivo
return 0
}
# ─── Validación completa ─────────────────────────────────────────────────
ejecutar_validacion() {
local archivos_relevantes=$(obtener_archivos_relevantes)
local cantidad_archivos=$(echo "$archivos_relevantes" | wc -l | tr -d ' ')
if [[ "$cantidad_archivos" -eq 0 ]]; then
log_info "No hay archivos del ADN para validar."
return 0
fi
log_info "Validando $cantidad_archivos archivo(s) del ADN..."
# Ejecutar validador general
cd "${PROYECTO_ROOT}" || exit 1
# Ejecutar validador con opción --fix automática para correcciones menores
local output
if output=$(ruby "${ADN_CLI}" validador --fix 2>&1); then
# El validador exitó con éxito
if echo "$output" | grep -q "Con errores: 0"; then
if echo "$output" | grep -q "Con advertencias: 0"; then
log_exito "Validación del ADN completada sin errores ni advertencias."
else
log_advertencia "Validación del ADN completada con advertencias (revisa arriba)."
# Permitir commit a pesar de advertencias
fi
return 0
else
log_error "Validación del ADN encontró errores. Corrígelos antes de commit."
echo ""
echo "$output" | tail -20 # Mostrar últimas líneas del output
return 1
fi
else
# Error en la ejecución del validador
log_error "Error ejecutando el validador del ADN:"
echo "$output"
return 1
fi
}
# ─── Instalación automática (si se ejecuta con --install) ────────────────
instalar_hook() {
local hook_dest="${PROYECTO_ROOT}/.git/hooks/pre-commit"
local hook_source="${ADN_TOOLS_DIR}/hooks/pre-commit"
if [[ ! -d "${PROYECTO_ROOT}/.git" ]]; then
log_error "No se encuentra directorio .git. Ejecuta desde un repositorio Git."
return 1
fi
log_info "Instalando hook pre-commit para validación ADN..."
# Copiar hook
cp "${hook_source}" "${hook_dest}"
chmod +x "${hook_dest}"
# Verificar si ya existe un hook pre-commit previo
if [[ -f "${PROYECTO_ROOT}/.git/hooks/pre-commit" && ! -L "${PROYECTO_ROOT}/.git/hooks/pre-commit" ]] && \
! cmp -s "${hook_source}" "${hook_dest}"; then
log_advertencia "Ya existe un hook pre-commit. Se ha sobrescrito."
log_info "Si necesitas múltiples hooks, considera usar un gestor de hooks."
fi
log_exito "Hook pre-commit instalado en ${hook_dest}"
log_info "Se ejecutará automáticamente en cada 'git commit'."
}
# ─── Ayuda ───────────────────────────────────────────────────────────────
mostrar_ayuda() {
echo -e "${COLOR_CYAN}${HOOK_NAME} - Hook Git pre-commit${COLOR_RESET}"
echo ""
echo "Uso:"
echo " Ejecución automática: Se ejecuta en cada 'git commit'"
echo " Instalación: $0 --install"
echo " Validación manual: $0 --validate"
echo " Ayuda: $0 --help"
echo ""
echo "Descripción:"
echo " Valida que los archivos del ADN (bitácoras, nodos, proyectos, hebras)"
echo " cumplan con las reglas definidas en las hebras del ADN (adn/)."
echo ""
echo "Comportamiento:"
echo " - Errores: Bloquea el commit hasta que se corrijan"
echo " - Advertencias: Muestra alerta pero permite el commit"
echo " - Correcciones automáticas: Intenta corregir errores simples (--fix)"
echo ""
echo "Configuración: ${CONFIG_FILE}"
}
# ─── Main ────────────────────────────────────────────────────────────────
main() {
# Parsear argumentos
case "${1:-}" in
--install|-i)
instalar_hook
exit $?
;;
--validate|-v)
if ! verificar_prerequisitos; then
exit 1
fi
ejecutar_validacion
exit $?
;;
--help|-h)
mostrar_ayuda
exit 0
;;
"")
# Modo hook normal (sin argumentos)
if ! verificar_prerequisitos; then
exit 0 # No fallar el commit si falta Ruby, solo advertir
fi
ejecutar_validacion
exit $?
;;
*)
log_error "Argumento desconocido: $1"
mostrar_ayuda
exit 1
;;
esac
}
# Solo ejecutar main si el script es ejecutado directamente
if [[ "${BASH_SOURCE[0]}" = "$0" ]]; then
main "$@"
fi
@@ -1,6 +1,6 @@
# frozen_string_literal: true
# tools/adn/parsers/plan.rb — Parser para seguimiento de planes ADN
# adn/tools/parsers/plan.rb — Parser para seguimiento de planes ADN
# ============================================================================
# Este módulo proporciona funcionalidad para parsear, actualizar y generar
# reportes del plan de trabajo ADN BITACORAs.
+2 -2
View File
@@ -7,7 +7,7 @@
# automatización del ADN. Su objetivo es reducir progresivamente la dependencia
# de la IA mediante scripts Ruby autónomos.
# ============================================================================
# Uso: ./tools/adn/run <subcomando> [opciones] [argumentos]
# Uso: ./adn/tools/run <subcomando> [opciones] [argumentos]
#
# Subcomandos disponibles:
# validador [--watch] [--fix] Validar cumplimiento del ADN en bitácoras
@@ -29,7 +29,7 @@ require 'date'
require 'time'
module ADN
# El script ahora está en tools/adn/run, por lo que la raíz es 2 niveles arriba
# El script ahora está en adn/tools/run, por lo que la raíz es 2 niveles arriba
PROJECT_ROOT = File.expand_path('../..', __dir__)
NODOS_DIR = File.join(PROJECT_ROOT, 'nodos')
PROYECTOS_DIR = File.join(PROJECT_ROOT, 'docs', 'proyectos')
+3 -3
View File
@@ -190,13 +190,13 @@ configuracion:
# implementado en la Fase 2 del plan de mejoras del ADN.
#
# La implementación del motor de triggers se encuentra en:
# tools/adn/core/triggers.rb (Fase 2)
# adn/tools/core/triggers.rb (Fase 2)
#
# Los triggers se ejecutarán mediante:
# ./tools/adn/run triggers [--test] [--force]
# ./adn/tools/run triggers [--test] [--force]
#
# Para probar triggers individualmente durante el desarrollo:
# ./tools/adn/run triggers --test --trigger="nombre_del_trigger"
# ./adn/tools/run triggers --test --trigger="nombre_del_trigger"
#
# ⚠️ ADVERTENCIA: No modificar manualmente las secciones marcadas como
# "GENERADO AUTOMÁTICAMENTE" una vez que el sistema esté en producción.
+1 -1
View File
@@ -22,7 +22,7 @@
| I | F | Descripción | E |
| :--- | :--- | :--- | :--- |
| 08:31 | 08:45 | Análisis de seguridad y corrección del flujo de backup. Implementación de `ns8-candados run`. | [R] ✅ |
| 08:45 | 13:00 | Relanzando backup mediante comando seguro `sshpass -e`. Reestructuración del CLI de ADN (`tools/adn/run`, subdirectorios `core`, `comando`, etc) para optimización del Contexto ADN. | [R] ✅ |
| 08:45 | 13:00 | Relanzando backup mediante comando seguro `sshpass -e`. Reestructuración del CLI de ADN (`adn/tools/run`, subdirectorios `core`, `comando`, etc) para optimización del Contexto ADN. | [R] ✅ |
| 13:00 | 16:00 | Ejecución Fase 1 Plan Integración BD: Implementación de Búsquedas PostgreSQL, Pruebas Unitarias Minitest con transacciones efímeras y Documentación de BD Automática (Tareas 2.2, 2.4, 2.5). | [R] ✅ |
---
+3 -3
View File
@@ -27,7 +27,7 @@ La persistencia de nuestras bitácoras vive dentro de un contenedor dedicado.
```
## 3. Configuración de Credenciales CLI (`tools/config/database.yml`)
Las herramientas ADN alojadas en `tools/adn/run` delegaron su configuración al archivo maestro que se sitúa en `tools/config/database.yml`.
Las herramientas ADN alojadas en `adn/tools/run` delegaron su configuración al archivo maestro que se sitúa en `tools/config/database.yml`.
> [!IMPORTANT]
> El entorno de `development` se define por defecto e interactúa en el puerto `5433` usando credenciales locales (`dtic_user` / `dtic_pass_2026`).
@@ -48,7 +48,7 @@ Inmediatamente, la CLI redirigirá los accesos al nodo principal configurado.
La mejor forma de testear que todo se ha inicializado y configurado correctamente es utilizando el Reporte de Salud de la BD proporcionado por la consola ADN:
```bash
./tools/adn/run db salud:bd
./adn/tools/run db salud:bd
```
Si recibes el siguiente dictamen, el sistema funciona correctamente:
`✅ Conexión a PostgreSQL establecida`
@@ -57,5 +57,5 @@ Si recibes el siguiente dictamen, el sistema funciona correctamente:
Si estás desarrollando nuevas funcionalidades o has migrado el esquema, ejecuta el paquete `bitacora_db_test.rb` incluido para validar CRUD sin ensuciar la base de datos final. El sistema de tests encapsula todo el script dentro de comandos `BEGIN` / `ROLLBACK`.
```bash
ruby tools/adn/spec/bitacora_db_test.rb
ruby adn/tools/spec/bitacora_db_test.rb
```
+6 -6
View File
@@ -1,6 +1,6 @@
# 🧬 Investigación: Arquitectura y Sincronía del ADN
Este documento detalla la relación técnica y conceptual entre el directorio de definiciones (`/adn`) y el motor de ejecución (`/tools/adn`) del ecosistema `srv-ns8`.
Este documento detalla la relación técnica y conceptual entre el directorio de definiciones (`/adn`) y el motor de ejecución (`/adn/tools`) del ecosistema `srv-ns8`.
---
@@ -13,7 +13,7 @@ El directorio `/adn` funciona como el **repositorio de la verdad** o la "Constit
---
## 2. El Directorio `/tools/adn`: El Motor (Ejecutable)
## 2. El Directorio `/adn/tools`: El Motor (Ejecutable)
Es el brazo ejecutable que procesa las definiciones del `/adn`. Está escrito íntegramente en **Ruby**, siguiendo la directiva de la hebra `06_gobernanza.md`.
### Componentes Clave:
@@ -27,7 +27,7 @@ Es el brazo ejecutable que procesa las definiciones del `/adn`. Está escrito í
## 3. Interrelación Simbiótica
La relación entre ambos directorios es de **Especificación ↔ Ejecución**:
| Aspecto | `/adn` (La Inteligencia) | `/tools/adn` (La Fuerza) |
| Aspecto | `/adn` (La Inteligencia) | `/adn/tools` (La Fuerza) |
| :--- | :--- | :--- |
| **Rol** | Define el "qué" y el "cómo". | Ejecuta el "cómo" y valida el "qué". |
| **Cambios** | Si se agrega un nuevo ícono en `04_iconografia.md`. | Se debe actualizar el `validador.rb` para reconocerlo. |
@@ -38,14 +38,14 @@ La relación entre ambos directorios es de **Especificación ↔ Ejecución**:
## 4. Flujo de Trabajo Típico
1. **Evento**: Un usuario o IA edita una bitácora en `/bitacoras`.
2. **Detección**: `tools/adn` detecta el cambio (vía hooks o ejecución manual).
2. **Detección**: `adn/tools` detecta el cambio (vía hooks o ejecución manual).
3. **Validación**: `validador.rb` lee las reglas de `/adn/02_bitacora.md` y verifica el archivo.
4. **Propagación**: Si el `triggers.yml` indica que un cambio de estado en la bitácora debe actualizar la ficha de un nodo en `/nodos`, `tools/adn/triggers.rb` realiza la escritura automáticamente.
4. **Propagación**: Si el `triggers.yml` indica que un cambio de estado en la bitácora debe actualizar la ficha de un nodo en `/nodos`, `adn/tools/triggers.rb` realiza la escritura automáticamente.
---
## 5. Conclusión de la Investigación
La arquitectura es **declarativa-operativa**. El sistema no depende de la "buena voluntad" del operador para mantener la coherencia (Armonía Integral), sino que utiliza `tools/adn` como una capa de software que garantiza que la realidad del repositorio coincida con la teoría definida en el `/adn`.
La arquitectura es **declarativa-operativa**. El sistema no depende de la "buena voluntad" del operador para mantener la coherencia (Armonía Integral), sino que utiliza `adn/tools` como una capa de software que garantiza que la realidad del repositorio coincida con la teoría definida en el `/adn`.
---
*Investigación realizada por el Asistente Antigravity - 2026-03-07*
+38 -38
View File
@@ -10,7 +10,7 @@
El **ADN del proyecto** (conjunto de 7 hebras en `adn/`) constituye la fuente única de verdad que gobierna la operación, documentación y evolución del sistema `srv-ns8`. Este plan propone una **transformación hacia la autonomía completa** mediante:
1. **Arquitectura Ruby unificada**: Sistema integrado en `tools/adn/` con CLI única.
1. **Arquitectura Ruby unificada**: Sistema integrado en `adn/tools/` con CLI única.
2. **Reducción progresiva de dependencia de IA**: KPIs cuantificables para minimizar intervención de IA.
3. **Automatización end-to-end**: Observadores de archivos, hooks Git, triggers automáticos y cron.
4. **Propagación automática**: Implementación real del Principio de Armonía Integral.
@@ -22,7 +22,7 @@ El objetivo final: **Un sistema que pueda operar indefinidamente sin un solo pro
## 🎯 Objetivos Estratégicos
1. **Autonomía por Diseño**: Cada script Ruby debe ejecutarse sin interpretación previa de IA.
2. **Arquitectura Integrada**: Sistema unificado `tools/adn/` con CLI común y API coherente.
2. **Arquitectura Integrada**: Sistema unificado `adn/tools/` con CLI común y API coherente.
3. **Reducción Medible de Dependencia IA**: Disminuir acciones IA/día de 5-10 a <2 en 8 semanas.
4. **Propagación Automática (Armonía)**: Cambios en una hebra se propaguen automáticamente a dependientes.
5. **Validación Continua en Tiempo Real**: Observadores de archivos y hooks Git que validen cada cambio.
@@ -34,13 +34,13 @@ El objetivo final: **Un sistema que pueda operar indefinidamente sin un solo pro
| Hebra | Fortalezas | Oportunidades de Mejora (Visión Automatización) |
| :--- | :--- | :--- |
| **00_indice.md** | Visión clara de interconexiones. | Podría incluir mapa visual generado automáticamente por `tools/adn.rb mapa`. |
| **01_ontologia.md** | Topología completa y actualizada. | Actualización automática de estados de nodos via `tools/adn.rb ontologia --sync`. |
| **02_bitacora.md** | Triggers bien definidos. | Implementación automática via `tools/adn/triggers.rb` con reglas YAML. |
| **00_indice.md** | Visión clara de interconexiones. | Podría incluir mapa visual generado automáticamente por `adn/tools.rb mapa`. |
| **01_ontologia.md** | Topología completa y actualizada. | Actualización automática de estados de nodos via `adn/tools.rb ontologia --sync`. |
| **02_bitacora.md** | Triggers bien definidos. | Implementación automática via `adn/tools/triggers.rb` con reglas YAML. |
| **03_seguridad.md** | Bóveda robusta (`ns8-candados`). | Auditoría automática de uso de secretos y logs estructurados JSON. |
| **04_iconografia.md** | Taxonomía visual útil. | Extensión a dashboards automáticos generados por Sinatra. |
| **05_ia.md** | Fuente única de verdad clara. | **Reducción progresiva**: De referencia diaria a semanal, luego mensual. |
| **06_gobernanza.md** | Principios sólidos (Armonía, Evolución). | Proceso de evolución formal con CLI `tools/adn.rb evolucion`. |
| **06_gobernanza.md** | Principios sólidos (Armonía, Evolución). | Proceso de evolución formal con CLI `adn/tools.rb evolucion`. |
| **07_proyectos.md** | Modelo transversal efectivo. | Integración automática con bitácoras via sistema de eventos. |
---
@@ -49,11 +49,11 @@ El objetivo final: **Un sistema que pueda operar indefinidamente sin un solo pro
### 🥇 **Prioridad Alta: Núcleo Autónomo**
#### 1. **`tools/adn/` - Arquitectura Unificada**
#### 1. **`adn/tools/` - Arquitectura Unificada**
- **Problema**: Scripts Ruby dispersos sin interfaz común.
- **Solución**: Directorio estructurado con módulos integrados:
```
tools/adn/
adn/tools/
├── adn.rb # CLI principal
├── validador.rb # Validación en tiempo real
├── triggers.rb # Sistema de eventos YAML
@@ -66,24 +66,24 @@ El objetivo final: **Un sistema que pueda operar indefinidamente sin un solo pro
```
- **Reducción IA**: Elimina necesidad de interpretación de comandos dispersos.
#### 2. **`tools/adn.rb` - CLI Unificada**
#### 2. **`adn/tools.rb` - CLI Unificada**
- **Problema**: Múltiples comandos Ruby con interfaces inconsistentes.
- **Solución**: Interfaz única con subcomandos estandarizados:
```bash
ruby tools/adn.rb validador [--watch] [--fix] # Validación automática
ruby tools/adn.rb triggers [--test] [--force] # Ejecución triggers
ruby tools/adn.rb contexto <nodo> [--cmd] # Contexto automático
ruby tools/adn.rb evolucion <propuesta.md> # Gestión evolución
ruby tools/adn.rb salud [--dashboard] [--json] # Salud del ADN
ruby tools/adn.rb generar bitacora [fecha] # Generadores
ruby tools/adn.rb generar nodo <nombre> # Plantillas
ruby tools/adn.rb generar proyecto <codigo> # Manifiestos
ruby adn/tools.rb validador [--watch] [--fix] # Validación automática
ruby adn/tools.rb triggers [--test] [--force] # Ejecución triggers
ruby adn/tools.rb contexto <nodo> [--cmd] # Contexto automático
ruby adn/tools.rb evolucion <propuesta.md> # Gestión evolución
ruby adn/tools.rb salud [--dashboard] [--json] # Salud del ADN
ruby adn/tools.rb generar bitacora [fecha] # Generadores
ruby adn/tools.rb generar nodo <nombre> # Plantillas
ruby adn/tools.rb generar proyecto <codigo> # Manifiestos
```
- **Beneficio**: Interfaz coherente, fácil de documentar y usar sin IA.
#### 3. **Validación en Tiempo Real con Hooks Git**
- **Problema**: Validación manual o por IA de cumplimiento del ADN.
- **Solución**: `tools/adn/validador.rb` con:
- **Solución**: `adn/tools/validador.rb` con:
- Observador de sistema de archivos (`listen` gem) para `bitacoras/`.
- Hook Git pre-commit que rechace commits con errores de formato.
- Notificaciones desktop/libnotify cuando detecte inconsistencias.
@@ -93,7 +93,7 @@ El objetivo final: **Un sistema que pueda operar indefinidamente sin un solo pro
#### 4. **Sistema de Triggers Basado en YAML**
- **Problema**: Triggers de `02_bitacora.md` implementados manualmente.
- **Solución**: `tools/adn/triggers.rb` con reglas en `adn/triggers.yml`:
- **Solución**: `adn/tools/triggers.rb` con reglas en `adn/triggers.yml`:
```yaml
- evento: "estado_cambiado"
condicion: "estado_nuevo == '✅'"
@@ -106,7 +106,7 @@ El objetivo final: **Un sistema que pueda operar indefinidamente sin un solo pro
#### 5. **Motor de Contexto Automático**
- **Problema**: IA debe "auto-contextualizarse" manualmente antes de operar.
- **Solución**: `tools/adn/contexto.rb` que:
- **Solución**: `adn/tools/contexto.rb` que:
- Analiza estáticamente `nodos/`, `proyectos/`, `adn/01_ontologia.md`.
- Determina topología de red y requisitos de acceso.
- Genera comandos SSH con ProxyJump cuando sea necesario.
@@ -115,7 +115,7 @@ El objetivo final: **Un sistema que pueda operar indefinidamente sin un solo pro
#### 6. **Dashboard Autónomo Sinatra**
- **Problema**: Dashboard requiere actualización manual o por IA.
- **Solución**: `tools/adn/dashboard.rb` - Servidor web Ruby con:
- **Solución**: `adn/tools/dashboard.rb` - Servidor web Ruby con:
- Panel en tiempo real (WebSockets) de validaciones.
- Gráficos de métricas extraídas automáticamente de bitácoras.
- API JSON para integración con dashboard principal.
@@ -125,7 +125,7 @@ El objetivo final: **Un sistema que pueda operar indefinidamente sin un solo pro
#### 7. **Versionado Semántico del ADN**
- **Problema**: Backup del ADN limitado a Git, sin versionado específico.
- **Solución**: `tools/adn/backup.rb` con:
- **Solución**: `adn/tools/backup.rb` con:
- Versiones semánticas: `adn-1.2.3.tar.gz` (major.features.fixes).
- Diff entre versiones con resumen de cambios.
- Integración con `dtic-BKPs` para almacenamiento cifrado.
@@ -133,7 +133,7 @@ El objetivo final: **Un sistema que pueda operar indefinidamente sin un solo pro
#### 8. **Sistema de Recomendaciones Automáticas**
- **Problema**: Evolución del ADN reactiva en lugar de proactiva.
- **Solución**: `tools/adn/aprendizaje.rb` con:
- **Solución**: `adn/tools/aprendizaje.rb` con:
- Análisis de patrones en bitácoras para sugerir nuevas reglas.
- Detección de inconsistencias recurrentes.
- Sugerencias de evolución basadas en data histórica.
@@ -144,29 +144,29 @@ El objetivo final: **Un sistema que pueda operar indefinidamente sin un solo pro
## 📅 Plan de Implementación (8 semanas - 4 Fases)
### **Fase 1: Núcleo Autónomo (Semanas 1-2)**
1. **`tools/adn/`** - Estructura de directorios y `Gemfile` con dependencias.
2. **`tools/adn.rb`** - CLI unificada con subcomandos básicos.
3. **`tools/adn/validador.rb`** - Validador en tiempo real con hooks Git.
4. **`tools/adn/logger.rb`** - Logging estructurado JSON en `logs/adn/`.
1. **`adn/tools/`** - Estructura de directorios y `Gemfile` con dependencias.
2. **`adn/tools.rb`** - CLI unificada con subcomandos básicos.
3. **`adn/tools/validador.rb`** - Validador en tiempo real con hooks Git.
4. **`adn/tools/logger.rb`** - Logging estructurado JSON en `logs/adn/`.
5. **`adn/config.yml`** - Configuración centralizada.
6. **Entregable**: Sistema que valida automáticamente cada commit.
### **Fase 2: Automatización Inteligente (Semanas 3-4)**
1. **`tools/adn/triggers.rb`** - Sistema de eventos basado en YAML.
2. **`tools/adn/contexto.rb`** - Motor de inferencia topológica.
3. **`tools/adn/eventos.rb`** - Bus de eventos interno.
1. **`adn/tools/triggers.rb`** - Sistema de eventos basado en YAML.
2. **`adn/tools/contexto.rb`** - Motor de inferencia topológica.
3. **`adn/tools/eventos.rb`** - Bus de eventos interno.
4. **Integración con cron** - Tareas periódicas de validación y sync.
5. **Entregable**: Triggers automáticos operativos sin intervención IA.
### **Fase 3: Sistema Integrado (Semanas 5-6)**
1. **`tools/adn/dashboard.rb`** - Servidor web Sinatra (puerto 4567).
1. **`adn/tools/dashboard.rb`** - Servidor web Sinatra (puerto 4567).
2. **API JSON** para integración con dashboard principal.
3. **`tools/adn/backup.rb`** - Sistema de versionado semántico.
3. **`adn/tools/backup.rb`** - Sistema de versionado semántico.
4. **Especificaciones** - Pruebas unitarias en `spec/adn_*_spec.rb`.
5. **Entregable**: Dashboard autónomo en tiempo real.
### **Fase 4: Madurez y Evolución (Semanas 7-8)**
1. **`tools/adn/aprendizaje.rb`** - Sistema de recomendaciones.
1. **`adn/tools/aprendizaje.rb`** - Sistema de recomendaciones.
2. **Documentación completa** - `docs/adn/automatizacion.md`.
3. **Onboarding** - `docs/onboarding/primero-60-minutos.md`.
4. **Revisión y refinamiento** basado en feedback operativo.
@@ -179,8 +179,8 @@ El objetivo final: **Un sistema que pueda operar indefinidamente sin un solo pro
### KPIs de Autonomía Operativa
| KPI | Línea Base | Meta (8 semanas) | Cómo Medir |
| :--- | :--- | :--- | :--- |
| **Tiempo creación bitácora** | 10-15 min | < 2 min | `time ruby tools/adn.rb generar bitacora` |
| **Errores formato en bitácoras** | 2-3 por semana | 0 por semana | Reporte `tools/adn.rb validador --stats` |
| **Tiempo creación bitácora** | 10-15 min | < 2 min | `time ruby adn/tools.rb generar bitacora` |
| **Errores formato en bitácoras** | 2-3 por semana | 0 por semana | Reporte `adn/tools.rb validador --stats` |
| **Consistencia entre hebras** | Manual | Automatizada 95%+ | Validación cruzada automática |
| **Cobertura triggers automáticos** | 0% | 90% | % de triggers en `02_bitacora.md` implementados |
@@ -190,7 +190,7 @@ El objetivo final: **Un sistema que pueda operar indefinidamente sin un solo pro
| **Acciones IA en bitácoras/día** | 5-10 | < 2 | Conteo de "(IA)" en bitácoras diarias |
| **Uso `05_ia.md` como referencia** | Diario | Semanal | Frecuencia de consulta a la hebra |
| **Scripts ejecutados sin IA** | 40% | 85% | Comandos ejecutados directamente vs via IA |
| **Tiempo auto-contextualización** | 2-3 min | < 30 seg | `time ruby tools/adn.rb contexto <nodo>` |
| **Tiempo auto-contextualización** | 2-3 min | < 30 seg | `time ruby adn/tools.rb contexto <nodo>` |
| **Errores detectados por humano** | 70% | < 30% | Origen de detección de errores de ADN |
---
@@ -243,9 +243,9 @@ Respetar y fortalecer la directiva de `06_gobernanza.md#25-codificacion-priorita
1. **[ ] Presentar este plan actualizado** en la bitácora `2026-03-07.md`.
2. **[ ] Crear ticket en P2603**: "Automatización Ruby del ADN - Fase 1".
3. **[ ] Iniciar Fase 1**: Crear estructura básica de `tools/adn/`.
3. **[ ] Iniciar Fase 1**: Crear estructura básica de `adn/tools/`.
```bash
mkdir -p tools/adn logs/adn spec
mkdir -p adn/tools logs/adn spec
```
4. **[ ] Configurar hook Git pre-commit** con validación básica.
5. **[ ] Establecer reunión de revisión** en 7 días (14/03/2026).
@@ -53,7 +53,7 @@ Cada nueva herramienta debe eliminar una dependencia de la IA:
### 4. **API de Comandos Unificada**
Todas las herramientas deben compartir interfaz común:
```bash
ruby tools/adn.rb <subcomando> [opciones] # Ej: adn.rb validador, adn.rb contexto, adn.rb trigger
ruby adn/tools.rb <subcomando> [opciones] # Ej: adn.rb validador, adn.rb contexto, adn.rb trigger
```
---
@@ -62,7 +62,7 @@ ruby tools/adn.rb <subcomando> [opciones] # Ej: adn.rb validador, adn.rb contex
### 🥇 **Prioridad Alta: Re-diseño para Autonomía**
#### 1. **`tools/adn-validador.rb` → `tools/adn/validador.rb`**
#### 1. **`adn/tools-validador.rb` → `adn/tools/validador.rb`**
- **Mejora**: Convertir en daemon con observador de sistema de archivos.
- **Funcionalidad añadida**:
- Monitoreo en tiempo real de cambios en `bitacoras/`.
@@ -70,7 +70,7 @@ ruby tools/adn.rb <subcomando> [opciones] # Ej: adn.rb validador, adn.rb contex
- Integración con pre-commit hook que rechace commits con errores de ADN.
- **Reducción IA**: Elimina necesidad de que IA verifique manualmente el formato.
#### 2. **`tools/bitacora-triggers.rb` → `tools/adn/triggers.rb`**
#### 2. **`tools/bitacora-triggers.rb` → `adn/tools/triggers.rb`**
- **Mejora**: Sistema de eventos y suscriptores basado en reglas YAML.
- **Funcionalidad añadida**:
- Archivo `adn/triggers.yml` con reglas definidas por operador.
@@ -78,7 +78,7 @@ ruby tools/adn.rb <subcomando> [opciones] # Ej: adn.rb validador, adn.rb contex
- Log de triggers ejecutados en `logs/triggers.log`.
- **Reducción IA**: Implementa automáticamente los triggers que hoy ejecuta manualmente la IA.
#### 3. **`tools/adn-contexto.rb` → `tools/adn/contexto.rb`**
#### 3. **`adn/tools-contexto.rb` → `adn/tools/contexto.rb`**
- **Mejora**: Motor de inferencia topológica autónomo.
- **Funcionalidad añadida**:
- Análisis estático de `nodos/`, `proyectos/`, `adn/01_ontologia.md`.
@@ -88,19 +88,19 @@ ruby tools/adn.rb <subcomando> [opciones] # Ej: adn.rb validador, adn.rb contex
### 🥈 **Prioridad Media: Sistema Integrado**
#### 4. **`tools/adn.rb` - CLI Unificada**
#### 4. **`adn/tools.rb` - CLI Unificada**
- **Mejora**: Comando único con subcomandos para todas las operaciones ADN.
- **Estructura propuesta**:
```bash
ruby tools/adn.rb validador [--watch] [--fix]
ruby tools/adn.rb triggers [--test] [--force]
ruby tools/adn.rb contexto <nodo> [--cmd]
ruby tools/adn.rb evolucion <propuesta.md> [--aprobar]
ruby tools/adn.rb salud [--dashboard] [--json]
ruby adn/tools.rb validador [--watch] [--fix]
ruby adn/tools.rb triggers [--test] [--force]
ruby adn/tools.rb contexto <nodo> [--cmd]
ruby adn/tools.rb evolucion <propuesta.md> [--aprobar]
ruby adn/tools.rb salud [--dashboard] [--json]
```
- **Beneficio**: Interfaz consistente, fácil de recordar, documentar y usar.
#### 5. **Sistema de Eventos `tools/adn/eventos.rb`**
#### 5. **Sistema de Eventos `adn/tools/eventos.rb`**
- **Mejora**: Bus de eventos interno para comunicación entre módulos.
- **Eventos clave**:
- `:archivo_modificado` (ruta, tipo)
@@ -109,7 +109,7 @@ ruby tools/adn.rb <subcomando> [opciones] # Ej: adn.rb validador, adn.rb contex
- `:error_adn_detectado` (tipo, ubicación, severidad)
- **Beneficio**: Desacoplamiento, extensibilidad, y capacidad de plugins.
#### 6. **Dashboard Autónomo `tools/adn/dashboard.rb`**
#### 6. **Dashboard Autónomo `adn/tools/dashboard.rb`**
- **Mejora**: Servidor web Ruby (Sinatra) que muestre salud del ADN.
- **Funcionalidad**:
- Panel en tiempo real (WebSockets) de validaciones.
@@ -119,7 +119,7 @@ ruby tools/adn.rb <subcomando> [opciones] # Ej: adn.rb validador, adn.rb contex
### 🥉 **Prioridad Baja: Madurez y Resiliencia**
#### 7. **`tools/adn/backup.rb` con Versionado Semántico**
#### 7. **`adn/tools/backup.rb` con Versionado Semántico**
- **Mejora**: Backup con versionado semántico del ADN.
- **Funcionalidad**:
- Versiones: `adn-1.2.3.tar.gz` (major.features.fixes).
@@ -127,7 +127,7 @@ ruby tools/adn.rb <subcomando> [opciones] # Ej: adn.rb validador, adn.rb contex
- Integración con `dtic-BKPs` para almacenamiento cifrado.
- **Beneficio**: Capacidad de rollback y auditoría histórica.
#### 8. **`tools/adn/aprendizaje.rb` - Sistema de Recomendaciones**
#### 8. **`adn/tools/aprendizaje.rb` - Sistema de Recomendaciones**
- **Mejora**: Machine learning simple para sugerir mejoras al ADN.
- **Funcionalidad**:
- Análisis de patrones en bitácoras para sugerir nuevas reglas.
@@ -140,26 +140,26 @@ ruby tools/adn.rb <subcomando> [opciones] # Ej: adn.rb validador, adn.rb contex
## 📅 Hoja de Ruta Revisada (8 semanas)
### **Fase 1: Núcleo Autónomo (Semanas 1-2)**
1. `tools/adn/` - Estructura de directorios y gemas base.
2. `tools/adn.rb` - CLI unificada con subcomandos básicos.
3. `tools/adn/validador.rb` - Validador en tiempo real con hooks Git.
1. `adn/tools/` - Estructura de directorios y gemas base.
2. `adn/tools.rb` - CLI unificada con subcomandos básicos.
3. `adn/tools/validador.rb` - Validador en tiempo real con hooks Git.
4. **Entregable**: Sistema que valida automáticamente cada commit.
### **Fase 2: Automatización Inteligente (Semanas 3-4)**
1. `tools/adn/triggers.rb` - Sistema de eventos basado en YAML.
2. `tools/adn/contexto.rb` - Motor de inferencia topológica.
1. `adn/tools/triggers.rb` - Sistema de eventos basado en YAML.
2. `adn/tools/contexto.rb` - Motor de inferencia topológica.
3. Integración con cron (tareas periódicas de validación).
4. **Entregable**: Triggers automáticos operativos sin intervención IA.
### **Fase 3: Sistema Integrado (Semanas 5-6)**
1. `tools/adn/eventos.rb` - Bus de eventos interno.
2. `tools/adn/dashboard.rb` - Servidor web de monitoreo.
1. `adn/tools/eventos.rb` - Bus de eventos interno.
2. `adn/tools/dashboard.rb` - Servidor web de monitoreo.
3. API JSON para integración con dashboard principal.
4. **Entregable**: Dashboard autónomo en tiempo real.
### **Fase 4: Madurez y Evolución (Semanas 7-8)**
1. `tools/adn/backup.rb` - Sistema de versionado semántico.
2. `tools/adn/aprendizaje.rb` - Recomendaciones automáticas.
1. `adn/tools/backup.rb` - Sistema de versionado semántico.
2. `adn/tools/aprendizaje.rb` - Recomendaciones automáticas.
3. Documentación completa y onboarding.
4. **Entregable**: Sistema maduro con capacidad de auto-evolución.
@@ -171,7 +171,7 @@ ruby tools/adn.rb <subcomando> [opciones] # Ej: adn.rb validador, adn.rb contex
| :--- | :--- | :--- | :--- |
| **Acciones IA en bitácoras/día** | 5-10 | < 2 | Conteo de "(IA)" en bitácoras |
| **Porcentaje de triggers automáticos** | 0% | 90% | Triggers ejecutados automáticamente vs manualmente |
| **Tiempo de auto-contextualización** | 2-3 min | < 30 seg | `time ruby tools/adn.rb contexto <nodo>` |
| **Tiempo de auto-contextualización** | 2-3 min | < 30 seg | `time ruby adn/tools.rb contexto <nodo>` |
| **Errores detectados por humano** | 70% | < 30% | Origen de detección de errores de ADN |
| **Uso de `05_ia.md` como referencia** | Diario | Semanal | Frecuencia de consulta a la hebra |
| **Scripts ejecutados sin interpretación IA** | 40% | 85% | Comandos ejecutados directamente vs via IA |
@@ -200,7 +200,7 @@ ruby tools/adn.rb <subcomando> [opciones] # Ej: adn.rb validador, adn.rb contex
## 🧠 Consideraciones Arquitectónicas
### 1. **Gemfile y Dependencias**
Crear `tools/adn/Gemfile` con:
Crear `adn/tools/Gemfile` con:
- `listen` para observación de archivos.
- `sinatra` para dashboard web.
- `toml` o `yaml` para configuración.
@@ -228,7 +228,7 @@ dashboard:
```
### 3. **Logging Estructurado**
- Todos los scripts usan `tools/adn/logger.rb` común.
- Todos los scripts usan `adn/tools/logger.rb` común.
- Logs en `logs/adn/` con rotación diaria.
- Formato JSON para fácil parsing y análisis.
@@ -243,11 +243,11 @@ dashboard:
1. **[ ] Revisar estas sugerencias** en la próxima bitácora diaria.
2. **[ ] Actualizar `260307-1400_Plan_Mejoras_ADN.md`** con:
- Arquitectura de directorio `tools/adn/`.
- CLI unificada `tools/adn.rb`.
- Arquitectura de directorio `adn/tools/`.
- CLI unificada `adn/tools.rb`.
- KPIs específicos de reducción de IA.
3. **[ ] Crear ticket en P2603** para "Automatización Ruby del ADN".
4. **[ ] Iniciar Fase 1** con estructura básica de `tools/adn/`.
4. **[ ] Iniciar Fase 1** con estructura básica de `adn/tools/`.
---
@@ -29,7 +29,7 @@ Este plan establece la integración completa del sistema ADN (actualmente basado
---
## 🔄 Reutilización de Herramientas Existentes (`tools/adn/`)
## 🔄 Reutilización de Herramientas Existentes (`adn/tools/`)
### Componentes Directamente Reutilizables
- [ ] **CLI Framework** (`adn.rb`) - Extensible para comandos de BD
@@ -69,20 +69,20 @@ Asegurar que no se perdió nada en la transición.
```
# Flujo diario (DB-First)
./tools/adn/run inicio de jornada presencial|remoto
./tools/adn/run cierre de jornada presencial|remoto
./adn/tools/run inicio de jornada presencial|remoto
./adn/tools/run cierre de jornada presencial|remoto
# Importar MD existente → DB
./tools/adn/run db migrar:md FECHA [--sobrescribir]
./tools/adn/run db migrar:md --todo [--sobrescribir]
./adn/tools/run db migrar:md FECHA [--sobrescribir]
./adn/tools/run db migrar:md --todo [--sobrescribir]
# Exportar DB → MD (respaldo)
./tools/adn/run db exportar:md FECHA
./tools/adn/run db exportar:md --todo
./adn/tools/run db exportar:md FECHA
./adn/tools/run db exportar:md --todo
# Auditoría
./tools/adn/run db verificar
./tools/adn/run db estadisticas
./adn/tools/run db verificar
./adn/tools/run db estadisticas
```
---
-467
View File
@@ -1,467 +0,0 @@
#!/usr/bin/env bash
# Git pre-commit hook para validación del ADN del proyecto srv-ns8
# Valida que bitácoras, nodos, proyectos y hebras ADN cumplan con las reglas
# definidas en las hebras del ADN (adn/).
# ─── Configuración ───────────────────────────────────────────────────────
PROYECTO_ROOT="$(git rev-parse --show-toplevel)"
ADN_TOOLS_DIR="${PROYECTO_ROOT}/tools/adn"
ADN_CLI="${PROYECTO_ROOT}/tools/adn/run"
CONFIG_FILE="${ADN_TOOLS_DIR}/config.yml"
HOOK_NAME="pre-commit ADN"
# ─── Colores para terminal ───────────────────────────────────────────────
COLOR_RESET="\033[0m"
COLOR_ROJO="\033[31m"
COLOR_VERDE="\033[32m"
COLOR_AMARILLO="\033[33m"
COLOR_CYAN="\033[36m"
COLOR_DIM="\033[2m"
# ─── Funciones de utilidad ───────────────────────────────────────────────
log_info() {
echo -e "${COLOR_CYAN} $1${COLOR_RESET}"
}
log_exito() {
echo -e "${COLOR_VERDE}✓ $1${COLOR_RESET}"
}
log_advertencia() {
echo -e "${COLOR_AMARILLO}⚠ $1${COLOR_RESET}"
}
log_error() {
echo -e "${COLOR_ROJO}✗ $1${COLOR_RESET}"
}
# Verificar si un comando existe
comando_existe() {
command -v "$1" >/dev/null 2>&1
}
# ─── Validaciones previas ────────────────────────────────────────────────
verificar_prerequisitos() {
# Verificar Ruby
if ! comando_existe "ruby"; then
log_error "Ruby no encontrado. Es requerido para la validación del ADN."
log_info "Instala Ruby: sudo apt install ruby (Debian/Ubuntu)"
return 1
fi
# Verificar CLI ADN
if [[ ! -f "${ADN_CLI}" ]]; then
log_error "Herramienta ADN no encontrada: ${ADN_CLI}"
log_info "Ejecuta desde la raíz del proyecto o instala las herramientas ADN."
return 1
fi
return 0
}
# ─── Obtener archivos modificados relevantes ─────────────────────────────
obtener_archivos_relevantes() {
# Obtener archivos staged con cambios (Added, Copied, Modified)
git diff --cached --name-only --diff-filter=ACM | while read -r archivo; do
# Filtrar solo archivos .md en directorios del ADN
if [[ "$archivo" =~ \.md$ ]]; then
case "$archivo" in
bitacoras/*|nodos/*|proyectos/*|adn/*)
echo "$archivo"
;;
esac
fi
done
}
# ─── Validación de archivos individuales ─────────────────────────────────
validar_archivo() {
local archivo="$1"
local nombre_archivo=$(basename "$archivo")
# Determinar tipo de validación basado en el directorio
local tipo=""
case "$archivo" in
bitacoras/*) tipo="bitacora" ;;
nodos/*) tipo="nodo" ;;
proyectos/*) tipo="proyecto" ;;
adn/*) tipo="hebra" ;;
*) return 0 ;; # No debería pasar
esac
log_info "Validando $tipo: $nombre_archivo"
# Por ahora usamos el validador general (en el futuro podría haber validación por tipo)
# El validador general ya filtra por tipo de archivo
return 0
}
# ─── Validación completa ─────────────────────────────────────────────────
ejecutar_validacion() {
local archivos_relevantes=$(obtener_archivos_relevantes)
local cantidad_archivos=$(echo "$archivos_relevantes" | wc -l | tr -d ' ')
if [[ "$cantidad_archivos" -eq 0 ]]; then
log_info "No hay archivos del ADN para validar."
return 0
fi
log_info "Validando $cantidad_archivos archivo(s) del ADN..."
# Ejecutar validador general
cd "${PROYECTO_ROOT}" || exit 1
# Ejecutar validador con opción --fix automática para correcciones menores
local output
if output=$("${ADN_CLI}" validador --fix 2>&1); then
# El validador exitó con éxito
if echo "$output" | grep -qE "Con errores:.*0"; then
if echo "$output" | grep -qE "Con advertencias:.*0"; then
log_exito "Validación del ADN completada sin errores ni advertencias."
else
log_advertencia "Validación del ADN completada con advertencias (revisa arriba)."
# Permitir commit a pesar de advertencias
fi
return 0
else
log_error "Validación del ADN encontró errores. Corrígelos antes de commit."
echo ""
echo "$output" | tail -20 # Mostrar últimas líneas del output
return 1
fi
else
# Error en la ejecución del validador
log_error "Error ejecutando el validador del ADN:"
echo "$output"
return 1
fi
}
# ─── Instalación automática (si se ejecuta con --install) ────────────────
instalar_hook() {
local hook_dest="${PROYECTO_ROOT}/.git/hooks/pre-commit"
local hook_source="${ADN_TOOLS_DIR}/hooks/pre-commit"
if [[ ! -d "${PROYECTO_ROOT}/.git" ]]; then
log_error "No se encuentra directorio .git. Ejecuta desde un repositorio Git."
return 1
fi
log_info "Instalando hook pre-commit para validación ADN..."
# Copiar hook
cp "${hook_source}" "${hook_dest}"
chmod +x "${hook_dest}"
# Verificar si ya existe un hook pre-commit previo
if [[ -f "${PROYECTO_ROOT}/.git/hooks/pre-commit" && ! -L "${PROYECTO_ROOT}/.git/hooks/pre-commit" ]] && \
! cmp -s "${hook_source}" "${hook_dest}"; then
log_advertencia "Ya existe un hook pre-commit. Se ha sobrescrito."
log_info "Si necesitas múltiples hooks, considera usar un gestor de hooks."
fi
log_exito "Hook pre-commit instalado en ${hook_dest}"
log_info "Se ejecutará automáticamente en cada 'git commit'."
}
# ─── Ayuda ───────────────────────────────────────────────────────────────
mostrar_ayuda() {
echo -e "${COLOR_CYAN}${HOOK_NAME} - Hook Git pre-commit${COLOR_RESET}"
echo ""
echo "Uso:"
echo " Ejecución automática: Se ejecuta en cada 'git commit'"
echo " Instalación: $0 --install"
echo " Validación manual: $0 --validate"
echo " Ayuda: $0 --help"
echo ""
echo "Descripción:"
echo " Valida que los archivos del ADN (bitácoras, nodos, proyectos, hebras)"
echo " cumplan con las reglas definidas en las hebras del ADN (adn/)."
echo ""
echo "Comportamiento:"
echo " - Errores: Bloquea el commit hasta que se corrijan"
echo " - Advertencias: Muestra alerta pero permite el commit"
echo " - Correcciones automáticas: Intenta corregir errores simples (--fix)"
echo ""
echo "Configuración: ${CONFIG_FILE}"
}
# ─── Main ────────────────────────────────────────────────────────────────
main() {
# Parsear argumentos
case "${1:-}" in
--install|-i)
instalar_hook
exit $?
;;
--validate|-v)
if ! verificar_prerequisitos; then
exit 1
fi
ejecutar_validacion
exit $?
;;
--help|-h)
mostrar_ayuda
exit 0
;;
"")
# Modo hook normal (sin argumentos)
if ! verificar_prerequisitos; then
exit 0 # No fallar el commit si falta Ruby, solo advertir
fi
ejecutar_validacion
exit $?
;;
*)
log_error "Argumento desconocido: $1"
mostrar_ayuda
exit 1
;;
esac
}
# Solo ejecutar main si el script es ejecutado directamente
if [[ "${BASH_SOURCE[0]}" = "$0" ]]; then
main "$@"
fi
```
Ahora necesito hacer el archivo ejecutable. El usuario tendrá que hacer `chmod +x` o nosotros podemos hacerlo en el script de instalación. Pero como esto se guardará como un archivo, el sistema lo marcará como ejecutable si tiene el shebang y permisos.
El hook incluye funcionalidad de auto-instalación con `--install`, validación manual con `--validate`, y ayuda con `--help`. También maneja casos donde falta Ruby o las herramientas ADN.
El hook filtra solo archivos .md en directorios específicos (bitacoras/, nodos/, proyectos/, adn/) y ejecuta el validador general con `--fix` para correcciones automáticas.
Si hay errores, bloquea el commit. Si solo hay advertencias, muestra alerta pero permite commit (esto es útil para transición gradual).
Ahora guardaré este contenido en el archivo especificado.<end▁of▁thinking>```
#!/usr/bin/env bash
# Git pre-commit hook para validación del ADN del proyecto srv-ns8
# Valida que bitácoras, nodos, proyectos y hebras ADN cumplan con las reglas
# definidas en las hebras del ADN (adn/).
# ─── Configuración ───────────────────────────────────────────────────────
PROYECTO_ROOT="$(git rev-parse --show-toplevel)"
ADN_TOOLS_DIR="${PROYECTO_ROOT}/tools/adn"
ADN_CLI="${PROYECTO_ROOT}/tools/adn.rb"
CONFIG_FILE="${ADN_TOOLS_DIR}/config.yml"
HOOK_NAME="pre-commit ADN"
# ─── Colores para terminal ───────────────────────────────────────────────
COLOR_RESET="\033[0m"
COLOR_ROJO="\033[31m"
COLOR_VERDE="\033[32m"
COLOR_AMARILLO="\033[33m"
COLOR_CYAN="\033[36m"
COLOR_DIM="\033[2m"
# ─── Funciones de utilidad ───────────────────────────────────────────────
log_info() {
echo -e "${COLOR_CYAN} $1${COLOR_RESET}"
}
log_exito() {
echo -e "${COLOR_VERDE}✓ $1${COLOR_RESET}"
}
log_advertencia() {
echo -e "${COLOR_AMARILLO}⚠ $1${COLOR_RESET}"
}
log_error() {
echo -e "${COLOR_ROJO}✗ $1${COLOR_RESET}"
}
# Verificar si un comando existe
comando_existe() {
command -v "$1" >/dev/null 2>&1
}
# ─── Validaciones previas ────────────────────────────────────────────────
verificar_prerequisitos() {
# Verificar Ruby
if ! comando_existe "ruby"; then
log_error "Ruby no encontrado. Es requerido para la validación del ADN."
log_info "Instala Ruby: sudo apt install ruby (Debian/Ubuntu)"
return 1
fi
# Verificar CLI ADN
if [[ ! -f "${ADN_CLI}" ]]; then
log_error "Herramienta ADN no encontrada: ${ADN_CLI}"
log_info "Ejecuta desde la raíz del proyecto o instala las herramientas ADN."
return 1
fi
return 0
}
# ─── Obtener archivos modificados relevantes ─────────────────────────────
obtener_archivos_relevantes() {
# Obtener archivos staged con cambios (Added, Copied, Modified)
git diff --cached --name-only --diff-filter=ACM | while read -r archivo; do
# Filtrar solo archivos .md en directorios del ADN
if [[ "$archivo" =~ \.md$ ]]; then
case "$archivo" in
bitacoras/*|nodos/*|proyectos/*|adn/*)
echo "$archivo"
;;
esac
fi
done
}
# ─── Validación de archivos individuales ─────────────────────────────────
validar_archivo() {
local archivo="$1"
local nombre_archivo=$(basename "$archivo")
# Determinar tipo de validación basado en el directorio
local tipo=""
case "$archivo" in
bitacoras/*) tipo="bitacora" ;;
nodos/*) tipo="nodo" ;;
proyectos/*) tipo="proyecto" ;;
adn/*) tipo="hebra" ;;
*) return 0 ;; # No debería pasar
esac
log_info "Validando $tipo: $nombre_archivo"
# Por ahora usamos el validador general (en el futuro podría haber validación por tipo)
# El validador general ya filtra por tipo de archivo
return 0
}
# ─── Validación completa ─────────────────────────────────────────────────
ejecutar_validacion() {
local archivos_relevantes=$(obtener_archivos_relevantes)
local cantidad_archivos=$(echo "$archivos_relevantes" | wc -l | tr -d ' ')
if [[ "$cantidad_archivos" -eq 0 ]]; then
log_info "No hay archivos del ADN para validar."
return 0
fi
log_info "Validando $cantidad_archivos archivo(s) del ADN..."
# Ejecutar validador general
cd "${PROYECTO_ROOT}" || exit 1
# Ejecutar validador con opción --fix automática para correcciones menores
local output
if output=$(ruby "${ADN_CLI}" validador --fix 2>&1); then
# El validador exitó con éxito
if echo "$output" | grep -q "Con errores: 0"; then
if echo "$output" | grep -q "Con advertencias: 0"; then
log_exito "Validación del ADN completada sin errores ni advertencias."
else
log_advertencia "Validación del ADN completada con advertencias (revisa arriba)."
# Permitir commit a pesar de advertencias
fi
return 0
else
log_error "Validación del ADN encontró errores. Corrígelos antes de commit."
echo ""
echo "$output" | tail -20 # Mostrar últimas líneas del output
return 1
fi
else
# Error en la ejecución del validador
log_error "Error ejecutando el validador del ADN:"
echo "$output"
return 1
fi
}
# ─── Instalación automática (si se ejecuta con --install) ────────────────
instalar_hook() {
local hook_dest="${PROYECTO_ROOT}/.git/hooks/pre-commit"
local hook_source="${ADN_TOOLS_DIR}/hooks/pre-commit"
if [[ ! -d "${PROYECTO_ROOT}/.git" ]]; then
log_error "No se encuentra directorio .git. Ejecuta desde un repositorio Git."
return 1
fi
log_info "Instalando hook pre-commit para validación ADN..."
# Copiar hook
cp "${hook_source}" "${hook_dest}"
chmod +x "${hook_dest}"
# Verificar si ya existe un hook pre-commit previo
if [[ -f "${PROYECTO_ROOT}/.git/hooks/pre-commit" && ! -L "${PROYECTO_ROOT}/.git/hooks/pre-commit" ]] && \
! cmp -s "${hook_source}" "${hook_dest}"; then
log_advertencia "Ya existe un hook pre-commit. Se ha sobrescrito."
log_info "Si necesitas múltiples hooks, considera usar un gestor de hooks."
fi
log_exito "Hook pre-commit instalado en ${hook_dest}"
log_info "Se ejecutará automáticamente en cada 'git commit'."
}
# ─── Ayuda ───────────────────────────────────────────────────────────────
mostrar_ayuda() {
echo -e "${COLOR_CYAN}${HOOK_NAME} - Hook Git pre-commit${COLOR_RESET}"
echo ""
echo "Uso:"
echo " Ejecución automática: Se ejecuta en cada 'git commit'"
echo " Instalación: $0 --install"
echo " Validación manual: $0 --validate"
echo " Ayuda: $0 --help"
echo ""
echo "Descripción:"
echo " Valida que los archivos del ADN (bitácoras, nodos, proyectos, hebras)"
echo " cumplan con las reglas definidas en las hebras del ADN (adn/)."
echo ""
echo "Comportamiento:"
echo " - Errores: Bloquea el commit hasta que se corrijan"
echo " - Advertencias: Muestra alerta pero permite el commit"
echo " - Correcciones automáticas: Intenta corregir errores simples (--fix)"
echo ""
echo "Configuración: ${CONFIG_FILE}"
}
# ─── Main ────────────────────────────────────────────────────────────────
main() {
# Parsear argumentos
case "${1:-}" in
--install|-i)
instalar_hook
exit $?
;;
--validate|-v)
if ! verificar_prerequisitos; then
exit 1
fi
ejecutar_validacion
exit $?
;;
--help|-h)
mostrar_ayuda
exit 0
;;
"")
# Modo hook normal (sin argumentos)
if ! verificar_prerequisitos; then
exit 0 # No fallar el commit si falta Ruby, solo advertir
fi
ejecutar_validacion
exit $?
;;
*)
log_error "Argumento desconocido: $1"
mostrar_ayuda
exit 1
;;
esac
}
# Solo ejecutar main si el script es ejecutado directamente
if [[ "${BASH_SOURCE[0]}" = "$0" ]]; then
main "$@"
fi