# Plan P2603.03: Referencia Dinámica a Planes desde Bitácora Web **Proyecto**: P2603 — Sistema de Bitácoras Web **Estado**: ✅ Completado **Fecha**: 2026-03-27 --- ## Objetivo Permitir que los eventos de la bitácora web referencien directamente archivos de plan `.md` del repositorio, renderizándolos dinámicamente en un modal sin necesidad de reiniciar Docker. ## Problema - Las descripciones de eventos mencionaban planes (`[P2601.09]`, `[P2604]`) como texto plano sin funcionalidad. - No existía forma de consultar el contenido de un plan directamente desde la interfaz web. - Cualquier referencia a un `.md` requería buscar el archivo manualmente en el repositorio. ## Solución Implementada ### Fase 1: Visor de documentos Markdown (#1309) | Componente | Archivo | Descripción | |---|---|---| | Backend API | `backend/src/routes/docs.js` | Endpoint `/api/docs/:proyecto/:archivo` que sirve `.md` desde disco | | Backend Server | `backend/src/server.js` | Registro de ruta `/api/docs` | | Docker | `docker-compose.yml` | Volumen `docs/proy/` montado read-only en container API | | Frontend | `frontend/src/App.tsx` | Modal visor con ReactMarkdown + handler de links | | CSS | `frontend/src/index.css` | Estilos `.doc-viewer-content` y `.plan-link-btn` | **Resultado**: Los archivos `.md` se pueden visualizar renderizados directamente en la web. El contenido se lee del disco en cada request, por lo que cualquier edición al `.md` se refleja inmediatamente. ### Fase 2: Campo `doc_path` centralizado (#1310) | Componente | Archivo | Descripción | |---|---|---| | BD Schema | `docker/init.sql` | Columna `doc_path TEXT` en `bitacoras.entradas` | | API CRUD | `backend/src/routes/entradas.js` | `doc_path` en INSERT y UPDATE dinámico | | CLI | `adn/tools/cli/db/evento.rb` | Flag `--doc RUTA` en `evento:crear` y `evento:actualizar` | | Frontend | `frontend/src/App.tsx` | Botón basado en `e.doc_path` (campo BD, no regex de descripción) | | Contexto IA | `docs/prompt/260325-0900_Contexto-IA.md` | Convención documentada | **Problema resuelto**: Los links en descripciones se rompían al renombrar archivos. Con `doc_path` como campo de BD, un solo `UPDATE` corrige todas las referencias. ## Arquitectura ``` docs/proy/ (host) ──[volumen :ro]──> /app/docs/proy/ (container API) │ routes/docs.js │ GET /api/docs/:proyecto/:archivo │ Frontend ─── e.doc_path ─── botón click ─── fetch API ─── modal ReactMarkdown ``` ## Uso ```bash # Crear evento con plan vinculado ./adn/tools/run db evento:crear \ --doc P2601_Dasuten/P2601.09_DASUTEN-sin-DC.md \ --descripcion "Texto del evento" \ --nodo srv-ns8 --inicio 08:00 # Actualizar doc_path de un evento existente ./adn/tools/run db evento:actualizar 1308 \ --doc P2601_Dasuten/P2601.09_DASUTEN-sin-DC.md ``` ## Progreso | Fase | Descripción | Estado | Evento | |---|---|---|---| | 1 | Visor de documentos Markdown (API + modal) | ✅ 100% | #1309 | | 2 | Campo `doc_path` centralizado (BD + CLI + frontend) | ✅ 100% | #1310 | --- *Plan completado el 2026-03-27*