diff --git a/adn/03_seguridad.md b/adn/03_seguridad.md index 0cf15f3c..47cdfae4 100644 --- a/adn/03_seguridad.md +++ b/adn/03_seguridad.md @@ -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 [args] +ruby adn/tools/seguridad/ns8-candados.rb [args] ``` | Comando | Descripción | @@ -51,7 +51,7 @@ ruby tools/adn/seguridad/ns8-candados.rb [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) diff --git a/adn/05_ia.md b/adn/05_ia.md index d94a4d64..6d6d615d 100644 --- a/adn/05_ia.md +++ b/adn/05_ia.md @@ -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. diff --git a/adn/README.md b/adn/README.md index 5a060cc2..fb9b5add 100644 --- a/adn/README.md +++ b/adn/README.md @@ -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. diff --git a/adn/conocimiento/configuracion_bd.md b/adn/conocimiento/configuracion_bd.md index 860384bc..51d0acc7 100644 --- a/adn/conocimiento/configuracion_bd.md +++ b/adn/conocimiento/configuracion_bd.md @@ -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` diff --git a/tools/adn/.bundle/config b/adn/tools/.bundle/config similarity index 100% rename from tools/adn/.bundle/config rename to adn/tools/.bundle/config diff --git a/tools/adn/Gemfile b/adn/tools/Gemfile similarity index 100% rename from tools/adn/Gemfile rename to adn/tools/Gemfile diff --git a/tools/adn/Gemfile.lock b/adn/tools/Gemfile.lock similarity index 100% rename from tools/adn/Gemfile.lock rename to adn/tools/Gemfile.lock diff --git a/tools/adn/README.md b/adn/tools/README.md similarity index 87% rename from tools/adn/README.md rename to adn/tools/README.md index b9d3380b..6aa8ef87 100644 --- a/tools/adn/README.md +++ b/adn/tools/README.md @@ -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 +./adn/tools/run backup # 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? diff --git a/tools/adn/cli/ayuda.rb b/adn/tools/cli/ayuda.rb similarity index 80% rename from tools/adn/cli/ayuda.rb rename to adn/tools/cli/ayuda.rb index ef881fba..72079991 100644 --- a/tools/adn/cli/ayuda.rb +++ b/adn/tools/cli/ayuda.rb @@ -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 [opciones] [argumentos] + #{Color::GREEN}Uso:#{Color::RESET} ./adn/tools/run [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 + ./adn/tools/run ayuda #{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 [--cmd]" + puts "Uso: ./adn/tools/run contexto [--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 [argumentos]" + puts "Uso: ./adn/tools/run generar [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 - 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 diff --git a/tools/adn/cli/backup.rb b/adn/tools/cli/backup.rb similarity index 98% rename from tools/adn/cli/backup.rb rename to adn/tools/cli/backup.rb index 72da4ff5..1194005e 100644 --- a/tools/adn/cli/backup.rb +++ b/adn/tools/cli/backup.rb @@ -23,7 +23,7 @@ module ADN def ejecutar parser = OptionParser.new do |opts| - opts.banner = "Uso: ./tools/adn/run backup [OPCIONES]" + opts.banner = "Uso: ./adn/tools/run backup [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 diff --git a/tools/adn/cli/cierre.rb b/adn/tools/cli/cierre.rb similarity index 92% rename from tools/adn/cli/cierre.rb rename to adn/tools/cli/cierre.rb index e1f78f00..04d03466 100644 --- a/tools/adn/cli/cierre.rb +++ b/adn/tools/cli/cierre.rb @@ -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 diff --git a/tools/adn/cli/conocimiento.rb b/adn/tools/cli/conocimiento.rb similarity index 97% rename from tools/adn/cli/conocimiento.rb rename to adn/tools/cli/conocimiento.rb index 504fe1d3..ce4150c3 100644 --- a/tools/adn/cli/conocimiento.rb +++ b/adn/tools/cli/conocimiento.rb @@ -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 #{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 diff --git a/tools/adn/cli/contexto.rb b/adn/tools/cli/contexto.rb similarity index 97% rename from tools/adn/cli/contexto.rb rename to adn/tools/cli/contexto.rb index b23ed46a..6c5a056c 100644 --- a/tools/adn/cli/contexto.rb +++ b/adn/tools/cli/contexto.rb @@ -13,7 +13,7 @@ class SubcomandoContexto def ejecutar if @args.empty? @logger.error("Se requiere nombre de nodo") - puts "Uso: ./tools/adn/run contexto [--cmd]" + puts "Uso: ./adn/tools/run contexto [--cmd]" exit 1 end @@ -21,7 +21,7 @@ class SubcomandoContexto @args.shift parser = OptionParser.new do |opts| - opts.banner = "Uso: ./tools/adn/run contexto [OPCIONES]" + opts.banner = "Uso: ./adn/tools/run contexto [OPCIONES]" opts.separator "" opts.separator "Obtiene contexto topológico de un nodo" opts.separator "" diff --git a/tools/adn/cli/db.rb b/adn/tools/cli/db.rb similarity index 93% rename from tools/adn/cli/db.rb rename to adn/tools/cli/db.rb index 1244485c..98e428a9 100644 --- a/tools/adn/cli/db.rb +++ b/adn/tools/cli/db.rb @@ -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}" diff --git a/tools/adn/cli/db/bitacora.rb b/adn/tools/cli/db/bitacora.rb similarity index 100% rename from tools/adn/cli/db/bitacora.rb rename to adn/tools/cli/db/bitacora.rb diff --git a/tools/adn/cli/db/evento.rb b/adn/tools/cli/db/evento.rb similarity index 100% rename from tools/adn/cli/db/evento.rb rename to adn/tools/cli/db/evento.rb diff --git a/tools/adn/cli/db/hito.rb b/adn/tools/cli/db/hito.rb similarity index 100% rename from tools/adn/cli/db/hito.rb rename to adn/tools/cli/db/hito.rb diff --git a/tools/adn/cli/db/misc.rb b/adn/tools/cli/db/misc.rb similarity index 100% rename from tools/adn/cli/db/misc.rb rename to adn/tools/cli/db/misc.rb diff --git a/tools/adn/cli/db/nodo.rb b/adn/tools/cli/db/nodo.rb similarity index 100% rename from tools/adn/cli/db/nodo.rb rename to adn/tools/cli/db/nodo.rb diff --git a/tools/adn/cli/generar.rb b/adn/tools/cli/generar.rb similarity index 96% rename from tools/adn/cli/generar.rb rename to adn/tools/cli/generar.rb index 7ebb58f0..bb077285 100644 --- a/tools/adn/cli/generar.rb +++ b/adn/tools/cli/generar.rb @@ -38,7 +38,7 @@ class SubcomandoGenerar private def mostrar_ayuda_generar - puts "Uso: ./tools/adn/run generar [argumentos]" + puts "Uso: ./adn/tools/run generar [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 " + puts "Uso: ./adn/tools/run generar 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 [nombre]" + puts "Uso: ./adn/tools/run generar proyecto [nombre]" exit 1 end diff --git a/tools/adn/cli/inicio.rb b/adn/tools/cli/inicio.rb similarity index 93% rename from tools/adn/cli/inicio.rb rename to adn/tools/cli/inicio.rb index 655c7b93..7fa24d26 100644 --- a/tools/adn/cli/inicio.rb +++ b/adn/tools/cli/inicio.rb @@ -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 diff --git a/tools/adn/cli/plan.rb b/adn/tools/cli/plan.rb similarity index 97% rename from tools/adn/cli/plan.rb rename to adn/tools/cli/plan.rb index 3a3ccb78..d0f5e5e6 100644 --- a/tools/adn/cli/plan.rb +++ b/adn/tools/cli/plan.rb @@ -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}" diff --git a/tools/adn/cli/salud.rb b/adn/tools/cli/salud.rb similarity index 96% rename from tools/adn/cli/salud.rb rename to adn/tools/cli/salud.rb index 756c528e..7fb138b2 100644 --- a/tools/adn/cli/salud.rb +++ b/adn/tools/cli/salud.rb @@ -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 diff --git a/tools/adn/cli/triggers.rb b/adn/tools/cli/triggers.rb similarity index 94% rename from tools/adn/cli/triggers.rb rename to adn/tools/cli/triggers.rb index ab01a84d..46226b2a 100644 --- a/tools/adn/cli/triggers.rb +++ b/adn/tools/cli/triggers.rb @@ -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 diff --git a/tools/adn/cli/validador.rb b/adn/tools/cli/validador.rb similarity index 98% rename from tools/adn/cli/validador.rb rename to adn/tools/cli/validador.rb index 61aeeb1b..ec45c542 100644 --- a/tools/adn/cli/validador.rb +++ b/adn/tools/cli/validador.rb @@ -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 "" diff --git a/tools/adn/config/config.yml b/adn/tools/config/config.yml similarity index 100% rename from tools/adn/config/config.yml rename to adn/tools/config/config.yml diff --git a/tools/adn/config/database.yml b/adn/tools/config/database.yml similarity index 100% rename from tools/adn/config/database.yml rename to adn/tools/config/database.yml diff --git a/tools/adn/core/colores.rb b/adn/tools/core/colores.rb similarity index 85% rename from tools/adn/core/colores.rb rename to adn/tools/core/colores.rb index 242d7bcd..926f92d1 100644 --- a/tools/adn/core/colores.rb +++ b/adn/tools/core/colores.rb @@ -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. diff --git a/tools/adn/core/conciliador.rb b/adn/tools/core/conciliador.rb similarity index 98% rename from tools/adn/core/conciliador.rb rename to adn/tools/core/conciliador.rb index 8ab8aac5..e420abdf 100644 --- a/tools/adn/core/conciliador.rb +++ b/adn/tools/core/conciliador.rb @@ -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 diff --git a/tools/adn/core/configurador.rb b/adn/tools/core/configurador.rb similarity index 100% rename from tools/adn/core/configurador.rb rename to adn/tools/core/configurador.rb diff --git a/tools/adn/core/eventos.rb b/adn/tools/core/eventos.rb similarity index 99% rename from tools/adn/core/eventos.rb rename to adn/tools/core/eventos.rb index ddfb0078..6a3d8bca 100644 --- a/tools/adn/core/eventos.rb +++ b/adn/tools/core/eventos.rb @@ -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. diff --git a/tools/adn/core/logger.rb b/adn/tools/core/logger.rb similarity index 97% rename from tools/adn/core/logger.rb rename to adn/tools/core/logger.rb index f784979d..501009c7 100644 --- a/tools/adn/core/logger.rb +++ b/adn/tools/core/logger.rb @@ -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? diff --git a/tools/adn/core/triggers.rb b/adn/tools/core/triggers.rb similarity index 99% rename from tools/adn/core/triggers.rb rename to adn/tools/core/triggers.rb index 893296cb..858920c5 100644 --- a/tools/adn/core/triggers.rb +++ b/adn/tools/core/triggers.rb @@ -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' diff --git a/tools/adn/core/validador.rb b/adn/tools/core/validador.rb similarity index 99% rename from tools/adn/core/validador.rb rename to adn/tools/core/validador.rb index 483d3ed4..613906c6 100644 --- a/tools/adn/core/validador.rb +++ b/adn/tools/core/validador.rb @@ -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 diff --git a/tools/adn/db/cli/exportar_todo.rb b/adn/tools/db/cli/exportar_todo.rb similarity index 93% rename from tools/adn/db/cli/exportar_todo.rb rename to adn/tools/db/cli/exportar_todo.rb index ae41a3c3..44db964d 100644 --- a/tools/adn/db/cli/exportar_todo.rb +++ b/adn/tools/db/cli/exportar_todo.rb @@ -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' diff --git a/tools/adn/db/cli/verificar_migracion.rb b/adn/tools/db/cli/verificar_migracion.rb similarity index 94% rename from tools/adn/db/cli/verificar_migracion.rb rename to adn/tools/db/cli/verificar_migracion.rb index ef8f8587..14c8eebb 100644 --- a/tools/adn/db/cli/verificar_migracion.rb +++ b/adn/tools/db/cli/verificar_migracion.rb @@ -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 diff --git a/tools/adn/db/core/bitacora_db.rb b/adn/tools/db/core/bitacora_db.rb similarity index 99% rename from tools/adn/db/core/bitacora_db.rb rename to adn/tools/db/core/bitacora_db.rb index 795bc8a2..c38dec76 100644 --- a/tools/adn/db/core/bitacora_db.rb +++ b/adn/tools/db/core/bitacora_db.rb @@ -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 diff --git a/tools/adn/db/core/buscador_bd.rb b/adn/tools/db/core/buscador_bd.rb similarity index 99% rename from tools/adn/db/core/buscador_bd.rb rename to adn/tools/db/core/buscador_bd.rb index 56137c76..f1f65f2f 100644 --- a/tools/adn/db/core/buscador_bd.rb +++ b/adn/tools/db/core/buscador_bd.rb @@ -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: diff --git a/tools/adn/db/core/buscador_bd_simple.rb b/adn/tools/db/core/buscador_bd_simple.rb similarity index 99% rename from tools/adn/db/core/buscador_bd_simple.rb rename to adn/tools/db/core/buscador_bd_simple.rb index 2f767b0f..032d4e92 100644 --- a/tools/adn/db/core/buscador_bd_simple.rb +++ b/adn/tools/db/core/buscador_bd_simple.rb @@ -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 diff --git a/tools/adn/db/exporters/md_exporter.rb b/adn/tools/db/exporters/md_exporter.rb similarity index 100% rename from tools/adn/db/exporters/md_exporter.rb rename to adn/tools/db/exporters/md_exporter.rb diff --git a/tools/adn/db/importers/md_importer.rb b/adn/tools/db/importers/md_importer.rb similarity index 99% rename from tools/adn/db/importers/md_importer.rb rename to adn/tools/db/importers/md_importer.rb index 2e209ef6..fe239b9e 100644 --- a/tools/adn/db/importers/md_importer.rb +++ b/adn/tools/db/importers/md_importer.rb @@ -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: diff --git a/adn/tools/hooks/pre-commit b/adn/tools/hooks/pre-commit new file mode 100755 index 00000000..05344b3f --- /dev/null +++ b/adn/tools/hooks/pre-commit @@ -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 diff --git a/tools/adn/parsers/plan.rb b/adn/tools/parsers/plan.rb similarity index 99% rename from tools/adn/parsers/plan.rb rename to adn/tools/parsers/plan.rb index 17e8fb4d..91f5b81d 100644 --- a/tools/adn/parsers/plan.rb +++ b/adn/tools/parsers/plan.rb @@ -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. diff --git a/tools/adn/run b/adn/tools/run similarity index 98% rename from tools/adn/run rename to adn/tools/run index 189de587..6076c292 100755 --- a/tools/adn/run +++ b/adn/tools/run @@ -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 [opciones] [argumentos] +# Uso: ./adn/tools/run [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') diff --git a/tools/adn/seguridad/.boveda.json b/adn/tools/seguridad/.boveda.json similarity index 100% rename from tools/adn/seguridad/.boveda.json rename to adn/tools/seguridad/.boveda.json diff --git a/tools/adn/seguridad/README.md b/adn/tools/seguridad/README.md similarity index 100% rename from tools/adn/seguridad/README.md rename to adn/tools/seguridad/README.md diff --git a/tools/adn/seguridad/ns8-candados.rb b/adn/tools/seguridad/ns8-candados.rb similarity index 100% rename from tools/adn/seguridad/ns8-candados.rb rename to adn/tools/seguridad/ns8-candados.rb diff --git a/tools/adn/sondas/README.md b/adn/tools/sondas/README.md similarity index 100% rename from tools/adn/sondas/README.md rename to adn/tools/sondas/README.md diff --git a/tools/adn/sondas/payloads/.gitignore b/adn/tools/sondas/payloads/.gitignore similarity index 100% rename from tools/adn/sondas/payloads/.gitignore rename to adn/tools/sondas/payloads/.gitignore diff --git a/tools/adn/sondas/payloads/activo.ps1 b/adn/tools/sondas/payloads/activo.ps1 similarity index 100% rename from tools/adn/sondas/payloads/activo.ps1 rename to adn/tools/sondas/payloads/activo.ps1 diff --git a/tools/adn/sondas/payloads/deploy_sysdasuten.ps1 b/adn/tools/sondas/payloads/deploy_sysdasuten.ps1 similarity index 100% rename from tools/adn/sondas/payloads/deploy_sysdasuten.ps1 rename to adn/tools/sondas/payloads/deploy_sysdasuten.ps1 diff --git a/tools/adn/sondas/payloads/install_ssh.ps1 b/adn/tools/sondas/payloads/install_ssh.ps1 similarity index 100% rename from tools/adn/sondas/payloads/install_ssh.ps1 rename to adn/tools/sondas/payloads/install_ssh.ps1 diff --git a/tools/adn/sondas/payloads/install_ssh_fixtemp.ps1 b/adn/tools/sondas/payloads/install_ssh_fixtemp.ps1 similarity index 100% rename from tools/adn/sondas/payloads/install_ssh_fixtemp.ps1 rename to adn/tools/sondas/payloads/install_ssh_fixtemp.ps1 diff --git a/tools/adn/sondas/payloads/install_ssh_legacy.ps1 b/adn/tools/sondas/payloads/install_ssh_legacy.ps1 similarity index 100% rename from tools/adn/sondas/payloads/install_ssh_legacy.ps1 rename to adn/tools/sondas/payloads/install_ssh_legacy.ps1 diff --git a/tools/adn/sondas/payloads/setup.ps1 b/adn/tools/sondas/payloads/setup.ps1 similarity index 100% rename from tools/adn/sondas/payloads/setup.ps1 rename to adn/tools/sondas/payloads/setup.ps1 diff --git a/tools/adn/sondas/payloads/sonda.ps1 b/adn/tools/sondas/payloads/sonda.ps1 similarity index 100% rename from tools/adn/sondas/payloads/sonda.ps1 rename to adn/tools/sondas/payloads/sonda.ps1 diff --git a/tools/adn/sondas/payloads/sql_sysadmin_fix.ps1 b/adn/tools/sondas/payloads/sql_sysadmin_fix.ps1 similarity index 100% rename from tools/adn/sondas/payloads/sql_sysadmin_fix.ps1 rename to adn/tools/sondas/payloads/sql_sysadmin_fix.ps1 diff --git a/tools/adn/sondas/payloads/ssh_port7022.ps1 b/adn/tools/sondas/payloads/ssh_port7022.ps1 similarity index 100% rename from tools/adn/sondas/payloads/ssh_port7022.ps1 rename to adn/tools/sondas/payloads/ssh_port7022.ps1 diff --git a/tools/adn/sondas/payloads/zombi_agent.bat b/adn/tools/sondas/payloads/zombi_agent.bat similarity index 100% rename from tools/adn/sondas/payloads/zombi_agent.bat rename to adn/tools/sondas/payloads/zombi_agent.bat diff --git a/tools/adn/sondas/servidor.rb b/adn/tools/sondas/servidor.rb similarity index 100% rename from tools/adn/sondas/servidor.rb rename to adn/tools/sondas/servidor.rb diff --git a/adn/triggers.yml b/adn/triggers.yml index 1b5a1e43..c9e93bb2 100644 --- a/adn/triggers.yml +++ b/adn/triggers.yml @@ -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. diff --git a/docs/bitacoras/_hist/2026-03-07.md b/docs/bitacoras/_hist/2026-03-07.md index 2d672daf..9b24182b 100644 --- a/docs/bitacoras/_hist/2026-03-07.md +++ b/docs/bitacoras/_hist/2026-03-07.md @@ -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] ✅ | --- diff --git a/docs/configuracion_bd.md b/docs/configuracion_bd.md index ec805c5b..2995376c 100644 --- a/docs/configuracion_bd.md +++ b/docs/configuracion_bd.md @@ -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 ``` diff --git a/docs/plan/adn/260307-0806_ArquitecturaADN.md b/docs/plan/adn/260307-0806_ArquitecturaADN.md index d9c67d2b..a6640307 100644 --- a/docs/plan/adn/260307-0806_ArquitecturaADN.md +++ b/docs/plan/adn/260307-0806_ArquitecturaADN.md @@ -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* diff --git a/docs/plan/adn/260307-1400_Plan_Mejoras_ADN.md b/docs/plan/adn/260307-1400_Plan_Mejoras_ADN.md index 6b0f66d5..1063665e 100644 --- a/docs/plan/adn/260307-1400_Plan_Mejoras_ADN.md +++ b/docs/plan/adn/260307-1400_Plan_Mejoras_ADN.md @@ -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 [--cmd] # Contexto automático - ruby tools/adn.rb evolucion # 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 # Plantillas - ruby tools/adn.rb generar proyecto # 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 [--cmd] # Contexto automático + ruby adn/tools.rb evolucion # 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 # Plantillas + ruby adn/tools.rb generar proyecto # 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 ` | +| **Tiempo auto-contextualización** | 2-3 min | < 30 seg | `time ruby adn/tools.rb contexto ` | | **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). diff --git a/docs/plan/adn/260307-1430_Sugerencias_Mejoras_ADN_Automatizacion.md b/docs/plan/adn/260307-1430_Sugerencias_Mejoras_ADN_Automatizacion.md index 102c076a..b6d196f0 100644 --- a/docs/plan/adn/260307-1430_Sugerencias_Mejoras_ADN_Automatizacion.md +++ b/docs/plan/adn/260307-1430_Sugerencias_Mejoras_ADN_Automatizacion.md @@ -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 [opciones] # Ej: adn.rb validador, adn.rb contexto, adn.rb trigger +ruby adn/tools.rb [opciones] # Ej: adn.rb validador, adn.rb contexto, adn.rb trigger ``` --- @@ -62,7 +62,7 @@ ruby tools/adn.rb [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 [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 [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 [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 [--cmd] - ruby tools/adn.rb evolucion [--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 [--cmd] + ruby adn/tools.rb evolucion [--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 [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 [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 [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 [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 [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 ` | +| **Tiempo de auto-contextualización** | 2-3 min | < 30 seg | `time ruby adn/tools.rb contexto ` | | **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 [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/`. --- diff --git a/docs/plan/adn/260308-1200_Plan_Integral_ADN_BITACORAs.md b/docs/plan/adn/260308-1200_Plan_Integral_ADN_BITACORAs.md index fedbe797..992652d8 100644 --- a/docs/plan/adn/260308-1200_Plan_Integral_ADN_BITACORAs.md +++ b/docs/plan/adn/260308-1200_Plan_Integral_ADN_BITACORAs.md @@ -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 diff --git a/docs/proyectos/_hist/P2605_Migracion_Solo_Bitacoras_Web.md b/docs/proyectos/_hist/P2605_Migracion_Solo_Bitacoras_Web.md index 7ba37096..6a187d03 100644 --- a/docs/proyectos/_hist/P2605_Migracion_Solo_Bitacoras_Web.md +++ b/docs/proyectos/_hist/P2605_Migracion_Solo_Bitacoras_Web.md @@ -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 ``` --- diff --git a/tools/adn/hooks/pre-commit b/tools/adn/hooks/pre-commit deleted file mode 100755 index df03cd7c..00000000 --- a/tools/adn/hooks/pre-commit +++ /dev/null @@ -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