[ADN] Fase 10: Saneamiento y Consolidación - Un solo punto de verdad

- S1: Eliminar 'triggers' duplicado en run (líneas 109/131)
- S2: Eliminar cli/commit.rb (truncado, sin uso)
- S3: Eliminar cli/inicio.rb y cli/cierre.rb (legacy, jornada.rb los reemplaza)
- S4: Mover 4 planes obsoletos de docs/plan/adn/ a docs/_hist/plan/adn/
- S5: Mover 14 backups de planes y 3 docs técnicos a docs/_hist/
- S6: Eliminar manifiesto vacío P2604_proyecto_p2604.md
- S7: Corregir referencia a plan obsoleto en run
- S8: Dejar de cargar core/validador.rb obsoleto en run
- S9: Limpiar progreso duplicado en P2604_mejoras_ADN.md
- Agregar Fase 10 al plan P2604 con 10 tareas
- Un solo punto de verdad: adn/README.md
- Un solo plan: docs/proy/p2604_mejoras_ADN/P2604_mejoras_ADN.md
- Registro en bitácora: evento 1073
This commit is contained in:
Ricardo Monla
2026-03-15 14:33:32 -03:00
parent b13a389568
commit cfd0e8452a
36 changed files with 1563 additions and 238 deletions
+105
View File
@@ -0,0 +1,105 @@
# Documentación Técnica: ADN CLI
> Referencia para desarrolladores | Proyecto: dtic-DIIAA
## Punto de Entrada
```bash
./adn/tools/run <subcomando> [opciones]
```
## Estructura de Comandos
```
adn/tools/
├── run # Punto de entrada
├── cli/ # Subcomandos (18 archivos)
│ ├── db.rb # CRUD de base de datos
│ ├── jornada.rb # Gestión de jornada
│ ├── nodos.rb # Gestión de nodos
│ └── ...
├── core/ # Módulos reutilizables
│ ├── constants.rb # Constantes globales
│ ├── logger.rb # Logging estructurado
│ ├── colores.rb # Colores ANSI
│ ├── error_handler.rb # Helper de errores
│ ├── help_formatter.rb # Ayuda estandarizada
│ └── validador.rb # Validaciones
└── spec/ # Tests
```
## Constantes Principales
```ruby
ADN::PROJECT_ROOT # Raíz del proyecto
ADN::NODOS_DIR # Directorio de nodos
ADN::BITACORAS_DIR # Directorio de bitácoras
ADN::LOGS_DIR # Directorio de logs
ADN::ESTADOS # Hash de estados (⏳✅❌⚠️⏸️📍)
ADN::MODOS # Hash de modos (P/R)
ADN::DB_CONFIG # Configuración de PostgreSQL
```
## Excepciones Personalizadas
```ruby
ADN::Error # Error base
ADN::ConfigError # Error de configuración
ADN::DBError # Error de base de datos
ADN::ValidationError # Error de validación
ADN::NetworkError # Error de red
```
## Helpers Disponibles
### ADN::ErrorHandler
```ruby
ADN::ErrorHandler.error("mensaje") # Sale con código 1
ADN::ErrorHandler.warning("mensaje") # Muestra warning
ADN::ErrorHandler.info("mensaje") # Muestra info
ADN::ErrorHandler.success("mensaje") # Muestra éxito
```
### ADN::HelpFormatter
```ruby
ADN::HelpFormatter.generar_help(
titulo: "Comando",
descripcion: "Hace algo",
uso: "Uso: comando [OPCIONES]",
opciones: [{names: ["h"], desc: "Ayuda"}],
ejemplos: [{cmd: "comando -h", desc: "Ejemplo"}]
)
```
## Tests
```bash
cd adn/tools
bundle exec rspec spec/ --format documentation
```
## Logging
Los logs se guardan en `logs/adn/YYYY-MM-DD.log` con formato JSON.
```ruby
logger.info("mensaje", { clave: "valor" })
logger.error("error", { detalle: "info" })
```
### Rotación
- Por tamaño: >10MB
- Mantiene: 7 archivos
## Variables de Entorno
| Variable | Descripción |
| :--- | :--- |
| `ADN_DEBUG` | Activa logs de debug (1 o true) |
| `TZ` | Zona horaria (default: America/Argentina/Buenos_Aires) |
## Próximos Pasos
- [ ] Usar HelpFormatter en todos los CLI
- [ ] Migrar a ADN::ErrorHandler
- [ ] Agregar más tests en spec/
+124
View File
@@ -0,0 +1,124 @@
# Documentación Técnica: Módulos Core ADN
> Referencia de módulos centrales | Proyecto: dtic-DIIAA
## core/constants.rb
Constantes globales del sistema.
```ruby
# Rutas
ADN::PROJECT_ROOT
ADN::NODOS_DIR
ADN::BITACORAS_DIR
ADN::LOGS_DIR
ADN::TOOLS_DIR
ADN::SEGURIDAD_DIR
# Estados (iconos)
ADN::ESTADOS = {
pendiente: '⏳',
completado: '✅',
fallido: '❌',
advertencia: '⚠️',
pausado: '⏸️',
en_proceso: '📍'
}
# Modos de trabajo
ADN::MODOS = {
presencial: 'P',
remoto: 'R'
}
# DB
ADN::DB_CONFIG = { host: 'localhost', puerto: 5433, ... }
```
## core/logger.rb
Logging estructurado JSON.
```ruby
logger = ADN::Logger.new(
directorio: 'logs/adn',
terminal: true,
colores: true,
nivel: 'INFO'
)
logger.info("mensaje", { dato: "valor" })
logger.error("error", { exception: e })
```
### Métodos
- `debug`, `info`, `exito`, `advertencia`, `error`
- `buffer` - obtener logs en memoria
- `limpiar_buffer`
- `cerrar`
## core/colores.rb
Códigos ANSI para terminal.
```ruby
Color::RESET
Color::BOLD
Color::GREEN
Color::CYAN
Color::YELLOW
Color::RED
Color::MAGENTA
Color::DIM
```
## core/error_handler.rb
Helper para mensajes estandarizados.
```ruby
ADN::ErrorHandler.error("msg")
ADN::ErrorHandler.warning("msg")
ADN::ErrorHandler.info("msg")
ADN::ErrorHandler.success("msg")
ADN::ErrorHandler.debug("msg")
```
## core/help_formatter.rb
Generador de ayuda estandarizado.
```ruby
ADN::HelpFormatter.generar_help(
titulo: "Comando",
descripcion: "Hace algo",
uso: "Uso: cmd [opciones]",
opciones: [...],
ejemplos: [...]
)
```
## core/validador.rb
Validador de cumplimiento ADN (para MD-First legacy).
⚠️ **DEPRECATED**: Usar validaciones en DB en su lugar.
## core/triggers.rb
Motor de triggers para propagación automática.
## core/eventos.rb
Bus de eventos (pub/sub).
## Dependencias
```
adn/tools/
├── core/
│ ├── constants.rb (requiere colores)
│ ├── logger.rb (requiere colores)
│ ├── error_handler.rb
│ └── help_formatter.rb (requiere colores)
```
+83
View File
@@ -0,0 +1,83 @@
# Guía de Testing ADN
> Cómo escribir tests para el sistema ADN
## Estructura de Tests
```
adn/tools/
└── spec/
├── spec_helper.rb
├── db/
│ └── evento_spec.rb
└── core/
├── colores_spec.rb
└── validador_spec.rb
```
## Ejecutar Tests
```bash
cd adn/tools
# Todos los tests
bundle exec rspec
# Un archivo específico
bundle exec rspec spec/db/evento_spec.rb
# Con output detallado
bundle exec rspec --format documentation
```
## Escribir un Test
```ruby
# spec/core/mi_modulo_spec.rb
require_relative '../spec_helper'
$LOAD_PATH.unshift File.expand_path('../../core', __dir__)
require 'mi_modulo'
describe 'ADN::MiModulo' do
describe '.metodo' do
it 'hace algo esperado' do
expect(resultado).to eq(valor_esperado)
end
it 'rechaza valor inválido' do
expect { metodo(inválido) }.to raise_error(ADN::ValidationError)
end
end
end
```
## Buenos Patrones
1. **Un describe por clase/módulo**
2. **Un it por comportamiento**
3. **Tests independientes** (sin orden ni dependencias)
4. **Nombres descriptivos**: `it 'valida formato HH:MM'`
## Helpers Disponibles
- `expect(...).to eq(valor)`
- `expect(...).to match(/regex/)`
- `expect(...).to be true/false`
- `expect { }.to raise_error(Error)`
## Cobertura
| Módulo | Tests |
| :--- | :--- |
| db/evento | 3 |
| core/colores | 6 |
| core/validador | 6 |
| **Total** | **15** |
## Próximos Tests
- [ ] spec/core/error_handler_spec.rb
- [ ] spec/core/help_formatter_spec.rb
- [ ] spec/cli/db_spec.rb
- [ ] spec/cli/jornada_spec.rb
+73
View File
@@ -0,0 +1,73 @@
# Integración MSP-ADN
> Documento de integración entre MSPs (NotebookLM) y el flujo de trabajo ADN
## Estado
| Componente | Estado |
|------------|--------|
| MCPs configurados | ✅ 3 activos |
| Ejecutable NotebookLM | ✅ Existe |
| Autenticación | ✅ Configurada |
| Herramienta CLI | ✅ Implementada |
## Herramientas CLI
### `msp auditar`
Verifica el estado de conexión con NotebookLM MCP.
```bash
./adn/tools/run msp auditar
```
**Salida:**
- MCPs configurados
- Ejecutable NotebookLM
- Estado de autenticación
- MSPs locales encontrados
### `msp listar`
Lista MSPs disponibles en el proyecto.
```bash
./adn/tools/run msp listar
```
### `msp registrar`
Registra un MSP descargado en el sistema.
```bash
./adn/tools/run msp registrar --archivo /ruta/al/msp.md --titulo "Título"
```
## Limitaciones
El MCP de NotebookLM **NO** incluye herramienta para generar MSPs. Los MSPs deben generarse desde la UI web:
1. Ir a https://notebooklm.google.com
2. Crear/abrir un cuaderno con fuentes
3. Click en "More" → "Generate MSP"
4. Descargar y guardar en `docs/mcps/`
5. Registrar con `./adn/tools/run msp registrar --archivo <ruta>`
## Flujo de Trabajo
```
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ NotebookLM UI │────▶│ Descargar MSP │────▶│ Registrar en ADN│
└─────────────────┘ └─────────────────┘ └─────────────────┘
./adn/tools/run msp registrar
┌─────────────────────────┐
│ docs/mcps/*.md │
│ Asimilar como conocimiento│
└─────────────────────────┘
```
## Referencias
- Configuración MCP: `~/.gemini/antigravity/mcp_config.json`
- Documentación general: `docs/mcps/MSPs-Antigravity.md`
- CLI herramientas: `adn/tools/cli/msp.rb`
+218
View File
@@ -0,0 +1,218 @@
# MSPs en Antigravity - Guía de Referencia
## ¿Qué son los MSPs?
Los **MSP (Markdown Style Papers)** son documentos generados por NotebookLM en formato de paper académico con:
- Título y autores
- Resumen estructurado
- Secciones temáticas
- Citas y referencias
- Formato académico profesional
## MCPs Actualmente Configurados en Antigravity
Archivo de configuración: `~/.gemini/antigravity/mcp_config.json`
### 1. NotebookLM MCP
```json
"notebooklm": {
"command": "bash",
"args": ["-c", "/home/rmonla/.local/share/notebooklm-mcp/bin/notebooklm-mcp"],
"env": {},
"disabled": false
}
```
| Campo | Valor |
|-------|-------|
| Tipo | MCP Server (stdio) |
| Ejecutable | `/home/rmonla/.local/share/notebooklm-mcp/bin/notebooklm-mcp` |
| Estado | Habilitado |
| Soporta MSP | **No** (solo desde UI web) |
### 2. Firebase MCP Server
```json
"firebase-mcp-server": {
"command": "npx",
"args": ["-y", "firebase-tools@latest", "mcp"],
"env": {},
"disabled": false
}
```
| Campo | Valor |
|-------|-------|
| Tipo | MCP Server (npx) |
| Paquete | `firebase-tools@latest` |
| Estado | Habilitado |
| Herramientas | Auto-detección basada en firebase.json |
**Herramientas disponibles** (según contexto del proyecto):
- Core: deploy, init, login, logout, projects:list
- Firestore: firestore:indexes, firestore:rules
- Hosting: hosting:deploy
- Functions: functions:deploy
- Storage: storage:rules
### 3. Google Stitch MCP
```json
"stitch": {
"serverUrl": "https://stitch.googleapis.com/mcp",
"headers": {
"X-Goog-Api-Key": "AQ.Ab8RN6KSXqPMkt6b6-l9-fOF_L6MFDobit1k2uCZark0orUM0g"
}
}
```
| Campo | Valor |
|-------|-------|
| Tipo | HTTP MCP Server |
| URL | `https://stitch.googleapis.com/mcp` |
| Estado | Habilitado |
| API Key | Configurada |
### Verificar MCPs configurados
```bash
# Ver configuración actual
cat ~/.gemini/antigravity/mcp_config.json | jq '.mcpServers | keys'
# Probar cada MCP
~/.local/share/notebooklm-mcp/bin/notebooklm-mcp --transport http --port 8765
npx -y firebase-tools@latest mcp --help
```
## Configuración de NotebookLM MCP
### Verificar conexión
```bash
# 1. Verificar ejecutable
ls -la ~/.local/share/notebooklm-mcp/bin/notebooklm-mcp
# 2. Probar inicio del servidor
~/.local/share/notebooklm-mcp/bin/notebooklm-mcp --transport http --port 8765
# 3. Verificar en Antigravity
# Abrir "Manage MCP servers" → buscar "notebooklm" → estado "conectado"
```
### Autenticación
```bash
# Ejecutar autenticación via navegador
notebooklm-mcp-auth
# O configurar manualmente con variables de entorno
export NOTEBOOKLM_COOKIES="..."
export NOTEBOOKLM_CSRF_TOKEN="..."
export NOTEBOOKLM_SESSION_ID="..."
```
### Ubicaciones importantes
| Recurso | Ruta |
|---------|------|
| Executable | `~/.local/share/notebooklm-mcp/bin/notebooklm-mcp` |
| Auth cache | `~/.notebooklm-mcp/auth.json` |
| Logs | `~/.config/Antigravity/logs/` |
| Config MCP | `~/.gemini/antigravity/mcp_config.json` |
## Herramientas MCP Disponibles (32 herramientas)
### Notebooks
- `notebook_create` - Crear nuevo cuaderno
- `notebook_list` - Listar cuadernos
- `notebook_get` - Obtener cuaderno
- `notebook_delete` - Eliminar cuaderno
- `notebook_rename` - Renombrar cuaderno
- `notebook_add_text` - Añadir texto
- `notebook_add_url` - Añadir URL
- `notebook_add_drive` - Añadir archivo de Drive
- `notebook_query` - Consultar cuaderno
### Fuentes
- `source_get_content` - Obtener contenido
- `source_delete` - Eliminar fuente
- `source_describe` - Describir fuente
- `source_list_drive` - Listar archivos de Drive
- `source_sync_drive` - Sincronizar Drive
### Studio (generación de contenido)
- `audio_overview_create` - Audio overview
- `video_overview_create` - Video overview
- `slide_deck_create` - Presentación
- `infographic_create` - Infografía
- `flashcards_create` - Tarjetas
- `quiz_create` - Cuestionario
- `mind_map_create` - Mapa mental
- `data_table_create` - Tabla de datos
- `report_create` - Reporte
### Investigación
- `research_start` - Iniciar investigación
- `research_status` - Estado de investigación
- `research_import` - Importar investigación
## IMPORTANTE: MSPs no están en el MCP
**Limitación**: El MCP de NotebookLM NO incluye herramienta para generar MSP.
### Cómo generar un MSP manualmente
1. **Ir a**: https://notebooklm.google.com
2. **Crear/abrir** un cuaderno con fuentes
3. **En el cuaderno**, hacer clic en **"More"** (tres puntos)
4. Seleccionar **"Generate MSP"** o **"Create paper"**
5. Esperar generación y descargar
### Alternativas para automatizar
- Usar la API de Google NotebookLM (si está disponible)
- Integrar con Vertex AI para generación de documentos
- Crear custom skill en Antigravity que use la web
## Verificar estado de conexión en código
```python
import subprocess
import json
def check_notebooklm_mcp():
# Verificar ejecutable existe
result = subprocess.run(
["ls", "-la", "/home/rmonla/.local/share/notebooklm-mcp/bin/notebooklm-mcp"],
capture_output=True
)
if result.returncode != 0:
return {"status": "error", "message": "Executable not found"}
# Verificar auth
with open("/home/rmonla/.notebooklm-mcp/auth.json") as f:
auth = json.load(f)
has_auth = bool(auth.get("cookies") and auth.get("csrf_token"))
return {
"status": "ok" if has_auth else "needs_auth",
"auth": auth
}
```
## Troubleshooting
| Problema | Solución |
|----------|----------|
| MCP no aparece conectado | Reiniciar Antigravity |
| Error de autenticación | Ejecutar `notebooklm-mcp-auth` |
| No hay herramientas disponibles | Verificar tokens en `~/.notebooklm-mcp/auth.json` |
| Timeout en requests | Aumentar `NOTEBOOKLM_QUERY_TIMEOUT` |
## Referencias
- Docs MCP: `docs/promp/Configuracion-MCP-Antigravity.md`
- Prompt NotebookLM: `docs/promp/Prompt NotebookLM MCP X Antigravity.md`
+1 -1
View File
@@ -1,4 +1,4 @@
OK pc-dasu0 debemos poder acceder por ssh en el puerto 7022,no creo que esté implementado y para esto usabamos la sonda w-zombi de las herramientas.
Trata siempre de trabajar con herramientas definidas en ADN, mejorándolas y optimizándolas para poder reutilizarlas en el futuro. En su defecto, genera nuevas herramientas siguiendo estas mismas premisas, evitando el uso de soluciones temporales. Este enfoque está detallado en adn/README.md junto con el indice de herramientas ADN.
Recuerda que el flujo es actualizar el plan, bitácora web y recien ejecutas las tareas.
Recuerda que el flujo es actualizar el plan, bitácora web y recien ejecutar las tareas.
@@ -0,0 +1,5 @@
Vamos a seguir agregando mejoras segun el plan docs/proy/p2604_mejoras_ADN/P2604_mejoras_ADN.md.
Trata siempre de trabajar con herramientas definidas en ADN, mejorándolas y optimizándolas para poder reutilizarlas en el futuro. En su defecto, genera nuevas herramientas siguiendo estas mismas premisas, evitando el uso de soluciones temporales. Este enfoque está detallado en adn/README.md junto con el indice de herramientas ADN.
Recuerda que el flujo es actualizar el plan, bitácora web y recien ejecutar las tareas.
@@ -0,0 +1,200 @@
# P2604 - Mejoras al ADN
> Menos es Más + Mejora Continua + Armonía Integral
## Enfoque
Mejoras atómicas, incrementales y reutilizables. Una herramienta por vez.
---
## Diagnóstico Integral
### Archivos Analizados
- `tools/run` (punto de entrada)
- `tools/cli/*.rb` (18 subcomandos)
- `tools/core/*.rb` (10 módulos)
- `tools/db/**/*.rb` (importers, exporters, core)
- `Gemfile`, `.bundle/config`
### Problemas Identificados
| # | Problema | Archivo(s) | Principio | Severidad |
| :--- | :--- | :--- | :--- | :--- |
| 1 | Sin tests para módulos core | `core/*.rb` | Menos es Más | Alta |
| 2 | Banner DEPRECATED incompleto | `cli/validador.rb` | Armonía | Media |
| 3 | core/validador.rb sin deprecation | `core/validador.rb` | Armonía | Media |
| 4 | Constantes de colores hardcodeadas | `core/colores.rb` | Menos es Más | Baja |
| 5 | Sin handler de errores global | `run` | Armonía | Alta |
| 6 | db/exporters sin tests | `db/exporters/*.rb` | Menos es Más | Media |
| 7 | Logger sin rotación | `core/logger.rb` | Mejora Cont. | Baja |
| 8 | Help inconsistente entre CLI | `cli/*.rb` | Armonía | Baja |
---
## Plan de Mejoras (8 Fases)
### Fase 1: Tests Core (Menos es Más)
**Objetivo**: Coverage progresivo, un módulo a la vez.
| ID | Módulo | Tests | Estado |
| :--- | :--- | :--- | :--- |
| T1 | `spec/db/evento_spec.rb` | 3 | ✅ |
| T2 | `spec/core/colores_spec.rb` | 6 | ✅ |
| T3 | `spec/core/validador_spec.rb` | 6 | ✅ |
| T4 | `spec/cli/help_spec.rb` | 0 | 📍 |
**Total tests: 15 passing**
### Fase 2: Deprecation Banners (Armonía)
| ID | Archivo | Acción | Estado |
| :--- | :--- | :--- | :--- |
| D1 | `cli/validador.rb` | Banner agregado | ✅ |
| D2 | `core/validador.rb` | Revisar - útil para validaciones | ⏸️ |
| D3 | `db/exporters/md_exporter.rb` | Banner agregado | ✅ |
### Fase 3: Manejo de Errores (Armonía)
**Objetivo**: Consistencia en manejo de excepciones.
| ID | Mejora | Estado |
| :--- | :--- | :--- |
| E1 | Agregar `rescue` global en `run` | ✅ |
| E2 | Estandarizar mensajes de error | ✅ |
| E3 | Logging de excepciones no manejadas | ✅ |
**Herramientas creadas:**
- `core/error_handler.rb` - helper reutilizable
- Excepciones personalizadas en `core/constants.rb`: `ADN::Error`, `ADN::DBError`, `ADN::ValidationError`
### Fase 4: Constantes y Config (Menos es Más)
| ID | Mejora | Estado |
| :--- | :--- | :--- |
| C1 | Documentar constantes en constants.rb | ✅ |
| C2 | Agregar constantes reutilizables (estados, modos) | ✅ |
| C3 | Validar constantes al inicio | ✅ |
**Mejoras:**
- `constants.rb` ahora incluye: estados (⏳✅❌⚠️⏸️📍), modos (P/R), DB config, excepciones
### Fase 5: Logger Mejorado (Mejora Continua)
| ID | Mejora | Estado |
| :--- | :--- | :--- |
| L1 | Agregar rotación de logs | ✅ |
| L2 | Niveles de log configurables | ✅ |
| L3 | Output JSON estructurado | ✅ |
**Mejoras:** Rotación por tamaño (>10MB), mantiene 7 archivos, nivel mínimo configurable
### Fase 6: Help Consistente (Armonía)
| ID | CLI | Mejora | Estado |
| :--- | :--- | :--- | :--- |
| H1 | Todos | HelpFormatter helper | ✅ |
**Herramienta creada:** `core/help_formatter.rb`
### Fase 7: Documentación Técnica
| ID | Documento | Contenido | Estado |
| :--- | :--- | :--- | :--- |
| DOC1 | `docs/tecnica/adn_cli.md` | Referencia CLI | ✅ |
| DOC2 | `docs/tecnica/adn_core.md` | Módulos core | ✅ |
| DOC3 | `docs/tecnica/adn_tests.md` | Guía de testing | ✅ |
### Fase 8: CI/CD (Futuro)
| ID | Mejora | Estado |
| :--- | :--- | :--- |
| CI1 | GitHub Actions para tests | ✅ |
| CI2 | Lint automatizado | ✅ |
**Archivos creados:**
- `.github/workflows/test.yml`
- `.github/workflows/lint.yml`
- `adn/tools/.rubocop.yml`
---
## Extensión P2604: Integración MSP (Marzo 2026)
> **Objetivo**: Integrar NotebookLM MSPs con el flujo de trabajo ADN
### Fase 9: Integración MSP (Armonía Integral)
| ID | Mejora | Herramienta | Estado |
| :--- | :--- | :--- | :--- |
| M1 | Auditoría de MSPs | CLI `msp:auditar` | ✅ |
| M2 | Registro de MSPs en BD | CLI `msp:registrar` | ✅ |
| M3 | Listado de MSPs disponibles | CLI `msp:listar` | ✅ |
| M4 | Documentación de integración | `docs/mcps/MSPs-ADN.md` | ✅ |
| M5 | Reutilizar NodosInfo en CLI | `nodos.rb`, `contexto.rb` | ✅ |
---
### Fase 10: Saneamiento y Consolidación (Armonía + Menos es Más)
> **Objetivo**: Un solo punto de verdad (`adn/README.md`) y un solo plan (`P2604`).
> Eliminar código muerto, archivos obsoletos y duplicaciones.
| ID | Mejora | Tipo | Estado |
| :--- | :--- | :--- | :--- |
| S1 | Eliminar `when 'triggers'` duplicado en `run` | Fix bug | ✅ |
| S2 | Eliminar `cli/commit.rb` (truncado, sin uso) | Limpieza | ✅ |
| S3 | Eliminar `cli/inicio.rb` y `cli/cierre.rb` (legacy, reemplazados por `jornada.rb`) | Limpieza | ✅ |
| S4 | Mover planes obsoletos de `docs/plan/` a `docs/_hist/` | Consolidación | ✅ |
| S5 | Mover docs técnicos duplicados (`docs/tecnica/`) a `docs/_hist/` | Consolidación | ✅ |
| S6 | Eliminar manifiesto vacío `docs/proyectos/P2604_proyecto_p2604.md` | Limpieza | ✅ |
| S7 | Corregir referencia a plan obsoleto en `run` | Fix | ✅ |
| S8 | Dejar de cargar `core/validador.rb` obsoleto en `run` | Limpieza | ✅ |
| S9 | Limpiar progreso duplicado en este plan | Doc | ✅ |
| S10 | Migrar `SubcomandoSalud` al namespace `ADN::` | Refactor | ⏳ |
---
## Progreso
```
Fase 1: ██████████ 100% (T1-T3: 15 tests)
Fase 2: ██████░░░░ 67% (D1, D3 done)
Fase 3: ██████████ 100% (E1-E3: error handler)
Fase 4: ██████████ 100% (C1-C3: constants.rb)
Fase 5: ██████████ 100% (L1-L3: logger.rb)
Fase 6: ██████████ 100% (H1: HelpFormatter)
Fase 7: ██████████ 100% (DOC1-DOC3: docs/tecnica/)
Fase 8: ██████████ 100% (CI1-CI2: GitHub Actions)
Fase 9: ██████████ 100% (M1-M5: MSP CLI)
Fase 10: █████████░ 90% (S1-S9 done, S10 pendiente)
```
---
## Métricas Totales
| Métrica | Valor |
| :--- | :--- |
| Tests pasando | 15 |
| Archivos creados | 12 |
| Archivos modificados | 8 |
| Archivos limpiados/movidos | 20+ |
| Fases completadas | 9/10 (90%) |
| Documentos técnicos | Consolidados en `adn/README.md` |
---
## Próxima Acción
**S10**: Migrar `SubcomandoSalud` al namespace `ADN::` y reescribir para consultar DB (DB-First)
---
## Referencias
- Punto de verdad: [`adn/README.md`](../../adn/README.md)
- ADN IA: [`05_ia.md`](../../adn/05_ia.md)
- Bitácoras: ID 1054-1056, 1073
- Planes históricos movidos a: `docs/_hist/plan/`