Refactor(ADN): Migración de tools/adn a adn/tools en busca de la Armonía Integral del DIIAA
This commit is contained in:
+8
-8
@@ -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
@@ -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
@@ -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.
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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 ""
|
||||
@@ -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:
|
||||
Executable
+228
@@ -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.
|
||||
@@ -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
@@ -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.
|
||||
|
||||
@@ -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] ✅ |
|
||||
|
||||
---
|
||||
|
||||
@@ -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
|
||||
```
|
||||
|
||||
@@ -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*
|
||||
|
||||
@@ -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
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user