Files
dtic-DIIAA/adn/README.md
T

260 lines
13 KiB
Markdown

# 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 (scripts y herramientas operativas) |
| **Zona Horaria** | `America/Argentina/Buenos_Aires` (UTC-3) |
---
## Principios Rectores del ADN
### Tríptico Rector
Los tres principios que rigen toda decisión operativa del proyecto son:
1. **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.
2. **Armonía Integral**: El ADN, las Bitácoras, los Nodos y los Proyectos forman un organismo interconectado. La coherencia es un requisito de supervivencia.
3. **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**: Antes de crear scripts temporales o ejecutar SQL directo,
> busca si ya existe un subcomando que haga lo que necesitas.
**Punto de entrada**: `./adn/tools/run <subcomando> [opciones]`
### Subcomandos Disponibles
| Subcomando | Descripción |
| :------------------------------------ | :----------------------------------------------- |
| `validador [--watch] [--fix]` | Validar cumplimiento del ADN en bitácoras |
| `contexto <nodo> [--cmd]` | Obtener contexto topológico y SSH de un nodo |
| `nodos agrupar [--servidor SRV]` | Agrupar VMs por servidor anfitrión |
| `nodos listar [--tipo TIPO]` | Listar fichas de nodos (.md) |
| `nodos buscar <término>` | Buscar nodos por nombre o contenido |
| `jornada iniciar [modo] [HH:MM]` | Registrar inicio de jornada laboral |
| `jornada cerrar [modo] [HH:MM]` | Registrar cierre de jornada laboral |
| `jornada estado` | Ver estado de la jornada actual |
| `salud [--dashboard] [--json]` | Ver salud general del sistema ADN |
| `generar bitacora [fecha]` | Generar nueva bitácora (YYYY-MM-DD, default: hoy) |
| `generar nodo <nombre>` | Generar ficha de nodo |
| `generar proyecto <código>` | Generar manifiesto de proyecto |
| `conocimiento asimilar <archivo>` | Asimilar documentación al ADN |
| `backup <nodo> [--mode MODO]` | Ejecutar backup seguro de un nodo |
| `triggers [--listar/--registrar]` | Gestión del motor de triggers |
| `plan [subcomando]` | Gestión de planes y progreso de proyectos |
| `ayuda [subcomando]` | Mostrar ayuda detallada |
### Subcomandos de Base de Datos (`db`)
| Subcomando | Descripción |
| :------------------------ | :--------------------------------------------- |
| `db salud:bd` | Verificar conexión y estado de PostgreSQL |
| `db bitacora:crear` | Crear nueva bitácora diaria en DB |
| `db bitacora:listar` | Listar bitácoras existentes |
| `db evento:crear` | Crear nueva entrada cronológica (I-F-D-E) |
| `db evento:listar` | Listar entradas con filtros (nodo, estado, fecha)|
| `db evento:actualizar` | Actualizar una entrada existente |
| `db evento:eliminar` | Eliminar una entrada existente por ID |
| `db nodo:crear` | Crear nuevo nodo (servidor/VM/PC/servicio) |
| `db nodo:listar` | Listar nodos del sistema |
| `db estadisticas` | Mostrar estadísticas del sistema |
| `db archivar:md` | Mover archivos .md migrados al archivo histórico|
### Ejemplos Frecuentes
```bash
# Inicio de jornada presencial a las 08:00
./adn/tools/run jornada iniciar presencial 08:00
# Cierre de jornada remota a las 23:00
./adn/tools/run jornada cerrar remoto 23:00
# Ver estado de la jornada actual
./adn/tools/run jornada estado
# Cerrar una entrada abierta
./adn/tools/run db evento:actualizar <ID> --fin 17:00
# Listar actividades de hoy
./adn/tools/run db evento:listar --desde $(date +%Y-%m-%d)
# Exportar bitácora a Markdown
ruby -I adn/tools/db -e 'require "core/bitacora_db"; require "exporters/md_exporter";
db = BitacorasDB::BitacoraDB.new(config_path: "adn/tools/config/database.yml");
db.connect; BitacorasDB::Exporters::MDExporter.new(db).exportar_bitacora("FECHA", "docs/bitacoras/FECHA.md")'
# Ver nodos agrupados por servidor
./adn/tools/run nodos agrupar
# Filtrar VMs de un servidor específico
./adn/tools/run nodos agrupar --servidor srv-pmox1
# Listar solo VMs de servicio
./adn/tools/run nodos listar --tipo srvv
# Buscar nodos relacionados con dasuten
./adn/tools/run nodos buscar dasuten
# Backup de un nodo
./adn/tools/run backup sql-dasuten
```
---
## Estructura de tools/
```
adn/tools/
├── run ← Entry point CLI (ejecutable Ruby)
├── cli/ ← Subcomandos CLI (1 archivo por subcomando)
│ ├── ayuda.rb ← Documentación interna de la herramienta
│ ├── backup.rb ← Backup seguro de nodos
│ ├── cierre.rb ← Cierre de jornada (DB-First)
│ ├── conocimiento.rb ← Asimilación de documentación
│ ├── contexto.rb ← Contexto topológico de nodos
│ ├── db.rb ← Dispatcher de subcomandos DB
│ ├── db/ ← Subcomandos específicos de DB (evento, bitacora, nodo, etc.)
│ ├── generar.rb ← Generación de bitácoras, nodos y proyectos
│ ├── inicio.rb ← Inicio de jornada (DB-First)
│ ├── nodos.rb ← Agrupación de nodos por servidor
│ ├── plan.rb ← Gestión de planes y progreso
│ ├── salud.rb ← Métricas de salud del ADN
│ ├── triggers.rb ← Gestión del motor de triggers
│ └── validador.rb ← Validación de cumplimiento ADN
├── core/ ← Módulos centrales (Singleton)
│ ├── colores.rb ← Constantes de color para terminal
│ ├── conciliador.rb ← Saneamiento preventivo de pendientes
│ ├── configurador.rb ← Carga de configuración YAML
│ ├── eventos.rb ← Bus de eventos (pub/sub desacoplado)
│ ├── logger.rb ← Logger estructurado (JSON)
│ ├── triggers.rb ← Motor de triggers (reacción automática)
│ └── validador.rb ← Validador de formato ADN
├── 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/ ← ns8-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) |
---
## Directivas Críticas para IA
1. **Usa las herramientas existentes**: `./adn/tools/run` tiene subcomandos para casi todo.
NO crees scripts temporales en `/tmp/` ni ejecutes SQL directo si existe un subcomando.
2. **Fuente de verdad: `05_ia.md`**: Lee y sigue TODAS las premisas antes de operar.
3. **DB-First**: La base de datos PostgreSQL es la fuente de verdad para bitácoras y
entradas. Los archivos `.md` se generan mediante exportación (`md_exporter.rb`).
4. **Secretos**: NUNCA exponer contraseñas en texto plano. Usar `ns8-candados`.
5. **Auto-Registro**: Toda acción autónoma de la IA DEBE registrarse como entrada
en la bitácora del día usando `db evento:crear`.
6. **Topología primero**: Antes de conectarte a un nodo, consulta `./adn/tools/run contexto <nodo>`
para entender su ubicación en la red (subred, proxy jump, etc.).
7. **Exportar al cerrar**: Tras modificar entradas en la DB del día, regenerar el `.md`
correspondiente con el exportador.
8. **Zona horaria**: Siempre `America/Argentina/Buenos_Aires`. Ya configurada en
`adn/tools/run` y en los contenedores Docker.