- Docs: A03 BKP updates y nuevo manifiesto nodo dasu-sql4 - W-Zombi: Nuevas rutas explícitas (exec.rb, ps1.rb) y estado stateful (cmd.json) - Bóveda: candados/.boveda.json modificados al agregar nuevos servidores (sql2, sql3) - Cleanup: Remover token .session de candados - Core API: Fixes en Bitacora_db
ADN — Arquitectura de Datos y Normas (dtic-DIIAA)
DIRECTIVA PARA AGENTES IA: Este archivo es tu punto de entrada obligatorio. Léelo COMPLETO antes de ejecutar cualquier acción sobre el repositorio.
Identidad del Proyecto
| Clave | Valor |
|---|---|
| Nombre | dtic-DIIAA (Departamento de Investigación de IA y Automatización) |
| Repositorio | /home/rmonla/Documentos/GitHub/dtic-DIIAA |
| Idioma | Español (TODO: docs, commits, comentarios, interacciones) |
| Lenguaje | Ruby (lenguaje de desarrollo para componentes y herramientas) |
| Filosofía | DB-First (Base de Datos PostgreSQL → Web) |
| Zona Horaria | America/Argentina/Buenos_Aires (UTC-3) |
| Red remota | Tailscale (Cuenta: pcdasu0@frlr.utn.edu.ar) |
Desarrollo y Registro de Actividades
Lenguaje de Desarrollo: Ruby
- Ruby es el lenguaje estándar para todos los componentes, scripts y herramientas del proyecto.
- Justificación: Manejo robusto de excepciones, escalabilidad estructural y consistencia frente a la fragilidad de Bash para secuencias complejas.
- Alcance: Scripts de automatización (
tools/), procesadores de respaldos, utilidades de gestión y cualquier lógica operativa recurrente. - Excepción: Bash se permite únicamente para one-liners, wrappers de lanzamiento y tareas triviales de sistema donde Ruby introduzca complejidad innecesaria.
Filosofía DB-First (Base de Datos PostgreSQL → Web)
El sistema sigue una arquitectura DB-First donde PostgreSQL es la fuente de verdad única:
- Base de Datos como Fuente Primaria: Todas las bitácoras, eventos, nodos y proyectos se almacenan primero en PostgreSQL.
- Web como Interfaz: La capa web (API Node.js + Frontend Vite) consume datos directamente de la base de datos.
- Sin Duplicación MD: Los archivos
.mdson exportaciones secundarias, no fuentes primarias (evitar el anti-patrón MD-First). - Validador Obsoleto: La herramienta
validadorestá en desuso por estar orientada a validación de archivos.mden lugar de validación de coherencia en la base de datos.
Registro en Bitácora (DB-First)
Toda actividad de desarrollo DEBE registrarse directamente en la base de datos PostgreSQL:
- Auto-Registro Obligatorio: Cualquier trabajo en componentes, scripts o herramientas Ruby debe registrarse como entrada en la bitácora del día usando
db evento:crear. - Formato DB-First: Usar exclusivamente los subcomandos
dbde./adn/tools/runpara operaciones CRUD. - Trazabilidad en DB: Cada modificación queda documentada en PostgreSQL con:
- Contexto del cambio (qué componente y por qué)
- Estado (✅ completado, ⏳ en proceso, ❌ fallido)
- Métricas híbridas (tiempo invertido)
- Relaciones con nodos y proyectos
- Exportación Opcional: La exportación a Markdown es opcional y solo para archivo histórico, no para operación.
Flujo de Trabajo DB-First
- Iniciar jornada:
./adn/tools/run jornada iniciar [modo] [HH:MM](registra en DB) - Registrar actividad:
./adn/tools/run db evento:crear [opciones](estado y modo se calculan automáticamente) - Desarrollar componente Ruby: Seguir principios "Menos es Más" (atómico, reutilizable)
- Operaciones DB: Usar
./adn/tools/run dbpara todas las operaciones (listar, actualizar, eliminar) - Registrar finalización:
./adn/tools/run db evento:actualizar <ID> --fin HH:MM(estado se calcula automáticamente) - Verificar en Web: Acceder a
http://localhost:5174- La bitácora se actualiza automáticamente cada 30s o al recuperar el foco - Resguardar cambios: Commit y push con formato
[Categoría] Descripción
Subcomandos DB Disponibles
# Salud de la base de datos
./adn/tools/run db salud:bd
./adn/tools/run db evento:crear --nodo <nodo> --descripcion "..." [--plantilla <tipo>]
./adn/tools/run db evento:listar [--desde FECHA] [--hasta FECHA] [--nodo NODO] [--ambito AMBITO] [--detalle]
./adn/tools/run db evento:actualizar <ID> [--fin HH:MM] [--descripcion "..."] # Estado ✅ se calcula automáticamente con --fin
./adn/tools/run db evento:eliminar <ID>
# Gestión de ámbitos (agrupadores de nodos)
./adn/tools/run db ámbito:crear --nombre <nombre> [--descripcion "texto"] [--parent-id <id>]
./adn/tools/run db ámbito:listar
./adn/tools/run db ámbito:nodos <nombre>
# Gestión de nodos
./adn/tools/run db nodo:crear --nombre <nombre> --tipo <tipo> [--ambito <nombre_o_id>]
./adn/tools/run db nodo:listar [--tipo TIPO] [--ambito AMBITO]
# Estadísticas
./adn/tools/run db estadisticas [--ambito AMBITO]
Principios Rectores del ADN
Tríptico Rector
Los tres principios que rigen toda decisión operativa del proyecto son:
-
Menos es Más (Simplicidad Radical): Cada componente debe justificar su existencia y ser atómico y reutilizable. Preferir herramientas unificadas sobre scripts temporales, eliminar duplicaciones y consolidar funcionalidades dispersas. Los componentes deben diseñarse como piezas modulares que puedan ser reutilizadas por otros, evitando monolitos hardcodeados y promoviendo la composición sobre la duplicación.
-
Armonía Integral: El ADN, las Bitácoras, los Nodos y los Proyectos forman un organismo interconectado. La coherencia es un requisito de supervivencia.
-
Mejora Continua (Evolución Progresiva): El ADN no es estático; evoluciona a partir de descubrimientos y buenas prácticas emergentes de la operación diaria.
Principio Rector: Armonía Integral
Si un dato cambia en un sitio, DEBE propagarse a todos los demás.
El ADN, las Bitácoras, los Nodos y los Proyectos forman un organismo interconectado. Ante cualquier inconsistencia detectada, resolverla es prioritario antes de avanzar.
Estructura del Directorio adn/
adn/
├── README.md ← ESTE ARCHIVO (punto de entrada IA)
├── 00_indice.md ← Mapa general del ADN y tabla de bitácoras
├── 01_ontologia.md ← Definición de nodos, servicios y topología de red
├── 02_bitacora.md ← Formato del registro diario y reglas de triggers
├── 03_seguridad.md ← Protocolos de seguridad, bóveda y secretos
├── 04_iconografia.md ← Taxonomía visual: iconos semánticos para estados
├── 05_ia.md ← ⚠️ FUENTE ÚNICA DE VERDAD para premisas IA
├── 06_gobernanza.md ← Nomenclatura, codificación, armonía y evolución
├── 07_proyectos.md ← Gestión transversal de proyectos e hitos
├── triggers.yml ← Configuración del motor de triggers (propagación)
├── conocimiento/ ← Base de conocimiento asimilado
│ └── configuracion_bd.md
└── tools/ ← Motor de ejecución y automatización (ver abajo)
Las hebras 01 a 07 son documentos normativos vivos. La hebra 05_ia.md es la
referencia canónica y exclusiva de las directivas que un agente IA debe seguir.
Herramienta CLI: adn/tools/run
REGLA DB-FIRST: Antes de crear scripts temporales o ejecutar SQL directo, busca si ya existe un subcomando
dbque haga lo que necesitas.
Punto de entrada: ./adn/tools/run <subcomando> [opciones]
Subcomandos Disponibles (DB-First)
| Subcomando | Descripción | Filosofía |
|---|---|---|
db <subcomando> |
Operaciones DB-First (fuente de verdad) | PostgreSQL Primario |
jornada iniciar [modo] [HH:MM] |
Registrar inicio de jornada laboral en DB | DB-First |
jornada cerrar [modo] [HH:MM] |
Registrar cierre de jornada laboral en DB | DB-First |
jornada estado |
Ver estado de la jornada actual desde DB | DB-First |
contexto <nodo> [--cmd] |
Obtener contexto topológico y SSH de un nodo | Consulta DB |
nodos info <nodo> |
Mostrar metadata completa de un nodo (IP, SSH, auth) | Consulta Fichas |
nodos agrupar [--servidor SRV] |
Agrupar VMs por servidor anfitrión | Consulta Fichas |
nodos listar [--tipo TIPO] |
Listar nodos desde fichas | Consulta Fichas |
nodos buscar <término> |
Buscar nodos por nombre o contenido | Consulta Fichas |
salud [--dashboard] [--json] |
Ver salud general del sistema ADN | Incluye DB |
backup <nodo> [--mode MODO] |
Ejecutar backup seguro de un nodo | Registra en DB |
triggers [--listar/--registrar] |
Gestión del motor de triggers | Sincroniza DB |
plan [subcomando] |
Gestión de planes y progreso de proyectos | DB-First |
estados |
Listar tareas en proceso (⏳) desde DB | DB-First |
proceso <nombre> |
Ejecutar procesos técnicos automatizados | Registra en DB |
generar bitacora [fecha] |
Generar nueva bitácora en DB (YYYY-MM-DD) | DB-First |
generar nodo <nombre> |
Generar ficha de nodo en DB | DB-First |
generar proyecto <código> |
Generar manifiesto de proyecto en DB | DB-First |
conocimiento asimilar <archivo> |
Asimilar documentación al ADN | Almacena en DB |
msp <subcomando> |
Gestión de MSPs NotebookLM (auditar, registrar, listar) | Integración MCP |
ssh <nodo> <comando> |
Ejecución remota segura via SSH + Candados (lee fichas) | Via NodosInfo |
ssh --listar |
Listar nodos con SSH configurado | Consulta Fichas |
ayuda [subcomando] |
Mostrar ayuda detallada | - |
validador [--watch] [--fix] |
⚠️ OBSOLETO - Validación MD-First antigua | MD-First (evitar) |
Subcomandos de Base de Datos (db) - Fuente de Verdad
| Subcomando | Descripción | Filosofía |
|---|---|---|
db salud:bd |
Verificar conexión y estado de PostgreSQL | DB-First |
db bitacora:crear |
Crear nueva bitácora diaria en DB | DB-First |
db bitacora:listar |
Listar bitácoras existentes desde DB | DB-First |
db evento:crear |
Crear entrada (estado y modo se calculan auto.) | DB-First |
db evento:listar |
Listar entradas con filtros desde DB | DB-First |
db evento:actualizar |
Actualizar entrada (estado auto. si --fin) | DB-First |
db evento:eliminar |
Eliminar una entrada existente por ID de DB | DB-First |
db nodo:crear |
Crear nuevo nodo en DB | DB-First |
db nodo:listar |
Listar nodos desde DB | DB-First |
db estadisticas |
Mostrar estadísticas del sistema desde DB | DB-First |
db hito:crear |
Crear nuevo hito de proyecto en DB | DB-First |
db hito:listar |
Listar hitos desde DB | DB-First |
db migrar:md [fecha] |
Migrar bitácora .md legacy a DB (una vez) | Migración |
db archivar:md |
Mover archivos .md migrados al histórico | Limpieza |
Ejemplos Frecuentes (DB-First)
# 1. INICIO DE JORNADA (registra en DB)
./adn/tools/run jornada iniciar presencial 08:00
# 2. REGISTRAR ACTIVIDAD (estado y modo se calculan automáticamente)
./adn/tools/run db evento:crear --nodo srv-ns8 --descripcion "Mejora del hook pre-commit" --inicio 09:00
# 2a. Con hora de fin (estado será ✅ automáticamente)
./adn/tools/run db evento:crear --nodo srv-ns8 --descripcion "Tarea completada" --inicio 09:00 --fin 10:00
# 3. LISTAR ACTIVIDADES DEL DÍA (consulta DB)
./adn/tools/run db evento:listar --desde $(date +%Y-%m-%d)
# 4. ACTUALIZAR ENTRADA AL FINALIZAR (estado se calcula desde --fin)
./adn/tools/run db evento:actualizar <ID> --fin 12:30
# 5. CERRAR JORNADA (registra en DB)
./adn/tools/run jornada cerrar remoto 18:00
# 6. VER ESTADO ACTUAL (desde DB)
./adn/tools/run jornada estado
# 7. LISTAR NODOS DESDE BASE DE DATOS
./adn/tools/run db nodo:listar --tipo srvv
# 8. BUSCAR NODOS EN DB
./adn/tools/run nodos buscar dasuten
# 9. VER SALUD DEL SISTEMA (incluye DB)
./adn/tools/run salud --dashboard
# 10. BACKUP CON REGISTRO EN DB
./adn/tools/run backup sql-dasuten
# 11. VER ESTADÍSTICAS DEL SISTEMA
./adn/tools/run db estadisticas
# 12. AUDITAR MSPs (NotebookLM)
./adn/tools/run msp auditar
# 13. LISTAR MSPs DISPONIBLES
./adn/tools/run msp listar
# 14. ACCEDER A INTERFAZ WEB (DB → Web)
# http://localhost:5174 (Frontend Vite)
# http://localhost:3002 (API Node.js)
Directivas Críticas para IA (Actualizado DB-First)
- DB-First es obligatorio: PostgreSQL es la fuente de verdad única. NUNCA operar sobre archivos
.mdcomo fuente primaria. - Usar subcomandos
db: Para cualquier operación CRUD, usar./adn/tools/run db <subcomando>. - Auto-Registro en DB: Toda acción autónoma de la IA DEBE registrarse como entrada en la bitácora del día usando
db evento:crear. - Ruby como lenguaje de desarrollo: Todos los componentes nuevos deben escribirse en Ruby, siguiendo principios "Menos es Más" (atómicos, reutilizables).
- Reutilizar submódulos CLI: Antes de crear nueva lógica, verificar si existe submódulo en
cli/<comando>/(ej:nodos/info.rb,ssh/ejecutor.rb). Duplicar código está prohibido. Infraestructura genuina vive encore/(colores, constants, logger, error_handler). - Validador obsoleto: NO usar
validador(orientado a MD-First). En su lugar, validar coherencia mediante consultas a la base de datos. - Secretos en bóveda: NUNCA exponer contraseñas en texto plano. Usar
candados(eval $(ruby adn/tools/seguridad/candados.rb load <clave>)). - Topología primero: Antes de conectarte a un nodo, consultar
./adn/tools/run contexto <nodo>para entender su ubicación en la red. - Exportación opcional: Los archivos
.mdson solo para archivo histórico. La operación real ocurre en PostgreSQL → Web. - Verificar en Web: Tras modificar la DB, acceder a
http://localhost:5174para verificar que los cambios se reflejan correctamente. - Zona horaria: Siempre
America/Argentina/Buenos_Aires. Ya configurada en herramientas y contenedores Docker.
Estructura de tools/
adn/tools/
├── run ← Entry point CLI (ejecutable Ruby)
├── cli/ ← Subcomandos CLI (1 archivo + submódulos por comando)
│ ├── ayuda.rb ← Documentación interna de la herramienta
│ ├── backup.rb ← Backup seguro de nodos
│ │ └── backup/configurador.rb ← Carga de configuración YAML
│ ├── conocimiento.rb ← Asimilación de documentación
│ ├── contexto.rb ← Contexto topológico de nodos (usa nodos/info)
│ ├── db.rb ← Dispatcher de subcomandos DB
│ │ └── db/ ← Subcomandos DB (evento, bitacora, nodo, etc.)
│ ├── estados.rb ← Tareas en proceso (⏳) desde DB
│ ├── generar.rb ← Generación de bitácoras, nodos y proyectos
│ ├── jornada.rb ← Inicio/cierre de jornada (DB-First)
│ ├── msp.rb ← Gestión de MSPs NotebookLM
│ ├── nodos.rb ← Gestión de nodos (info, listar, agrupar, buscar)
│ │ └── nodos/info.rb ← Extracción de metadata de fichas .md
│ ├── plan.rb ← Gestión de planes y progreso
│ ├── proceso.rb ← Procesos técnicos automatizados
│ ├── salud.rb ← Métricas de salud del ADN
│ ├── ssh.rb ← Ejecución remota segura via SSH + Candados
│ │ └── ssh/ejecutor.rb ← Abstracción de ejecución remota
│ ├── tailscale.rb ← Gestión de Tailscale (nodos, status)
│ ├── triggers.rb ← Gestión del motor de triggers
│ │ ├── triggers/motor.rb ← Motor de triggers (reacción automática)
│ │ └── triggers/eventos.rb ← Bus de eventos (pub/sub desacoplado)
│ └── validador.rb ← ⚠️ OBSOLETO (MD-First)
├── core/ ← Infraestructura genuina (solo utilidades compartidas)
│ ├── colores.rb ← Constantes de color para terminal
│ ├── conciliador.rb ← Saneamiento preventivo de pendientes
│ ├── constants.rb ← Constantes globales (rutas, estados)
│ ├── error_handler.rb ← Helper para mensajes de error estandarizados
│ ├── help_formatter.rb ← Formateador de ayuda estandarizado
│ └── logger.rb ← Logger estructurado (JSON)
├── db/ ← Capa de acceso a datos (PostgreSQL)
│ ├── core/ ← bitacora_db.rb (CRUD principal), buscadores
│ ├── cli/ ← Scripts CLI para exportación masiva
│ ├── exporters/ ← md_exporter.rb (DB → Markdown)
│ └── importers/ ← Importadores (Markdown → DB)
├── config/ ← Configuración
│ ├── database.yml ← Conexión PostgreSQL (puerto 5433)
│ └── config.yml ← Configuración general
├── hooks/ ← Git hooks (pre-commit)
├── parsers/ ← Parsers especializados (plan.rb)
├── seguridad/ ← candados (gestión de secretos)
└── sondas/ ← Sondas remotas (w-zombi)
Base de Datos (PostgreSQL)
| Clave | Valor |
|---|---|
| Host | localhost |
| Puerto | 5433 (Docker → 5432 interno) |
| Database | dtic_bitacoras |
| Schema | bitacoras |
| Config | adn/tools/config/database.yml |
Tablas Principales (schema bitacoras)
| Tabla | Descripción |
|---|---|
nodos |
Servidores, VMs, PCs, servicios del sistema |
bitacoras |
Bitácoras diarias (fecha única por registro) |
entradas |
Entradas cronológicas en formato I-F-D-E |
temas |
Agrupadores de entradas por nodo |
gestion |
Items de control de gestión (pendientes, en proceso) |
proyectos |
Proyectos transversales |
fases |
Fases de los proyectos |
hitos |
Hitos individuales de cada fase |
Docker Compose
Ubicación: servicios/nginx/dtic-bitacoras/docker-compose.yml
Servicios: postgres (BD), api (Node.js, puerto 3002), frontend (Vite, puerto 5174).
Directorios del Repositorio
| Directorio | Propósito |
|---|---|
adn/ |
Núcleo genético: hebras, herramientas, conocimiento |
nodos/ |
Fichas técnicas de cada nodo (1 archivo .md por nodo) |
docs/bitacoras/ |
Bitácoras diarias exportadas en Markdown |
docs/proyectos/ |
Manifiestos de proyectos |
docs/plan/ |
Planes de mejora y arquitectura |
servicios/ |
Docker Compose y configs de servicios (nginx, etc.) |
logs/ |
Logs estructurados del sistema ADN |
automatizacion/ |
Scripts legacy (en proceso de migración a adn/tools) |
Notas de Migración (MD-First → DB-First)
Componentes Obsoletos (MD-First)
validador: Herramienta para validar archivos.md- en desusomd_exporter.rb: Exportador DB → MD - uso solo para archivo histórico- Hooks pre-commit MD: En proceso de migración a validación de coherencia DB
Componentes Actuales (DB-First)
./adn/tools/run db: Subcomandos CRUD para PostgreSQL- API Node.js (puerto 3002): Interfaz REST para operaciones DB
- Frontend Vite (puerto 5174): Interfaz web que consume API
- Docker Compose: Contenedores PostgreSQL + API + Frontend
Flujo de Migración Completo
- Fase 1: Operación híbrida (MD + DB) - COMPLETADO
- Fase 2: DB como fuente primaria, MD como histórico - ACTUAL
- Fase 3: Eliminación completa de dependencias MD-First - PLANIFICADO
Buenas Prácticas Actuales
- Siempre comenzar con
db evento:crearantes de cualquier trabajo - Usar
db evento:actualizaral finalizar para registrar métricas - Consultar
db evento:listarpara ver estado actual - Verificar en
http://localhost:5174para confirmar cambios - Usar
jornada iniciar/cerrarpara gestión de tiempo de trabajo