Historias de usuario
125 historias trazando a requisitos · 80 completadas. Fuente: stories/*.md (ADR 0007). El estado se deriva de los criterios de aceptación; el Issue de GitHub es un espejo generado.
INT-05 — Arquitectura de sistema: malla de nodos, telemetría y distribución de datos (13)
| Historia |
Título |
Progreso |
Issue |
INT-05.1 |
Topología de nodos y roles (HQ / Edge / Mirror) |
✅ 8/8 |
#13 |
INT-05.10 |
Failover HQ→Mirror (detección, promoción, re-apuntado y failback) |
🟡 0/5 |
#25 |
INT-05.11 |
Servicios compartidos de malla (proveedor/consumidor y licencias por servicio) |
✅ 5/5 |
#285 |
INT-05.2 |
Stack del nodo (Docker: Mongo, MQTT, Vault, API, front, sync + DNS/VPN/GIS) |
✅ 5/5 |
#14 |
INT-05.3 |
Bus MQTT: telemetría de drones |
🟡 5/6 |
#15 |
INT-05.4 |
Bus MQTT: eventos de dominio (refresco de clientes en vivo) |
🟡 5/6 |
#16 |
INT-05.5 |
Sincronización de datos entre nodos (upstream básico) |
✅ 4/4 |
#17 |
INT-05.5b |
Sincronización entre nodos: resiliencia (cola offline, conflictos, mirror) |
✅ 4/4 |
#18 |
INT-05.6 |
Relay de telemetría al HQ (visión de flota desde el mando) |
✅ 6/6 |
#19 |
INT-05.7 |
Usuarios, roles y permisos (RBAC) |
✅ 5/5 |
#20 |
INT-05.8 |
Secretos del nodo con Vault (generados por despliegue) |
✅ 5/5 |
#21 |
INT-05.8b |
Arranque sellado del nodo (Vault sealing con clave física) |
✅ 3/3 |
#22 |
INT-05.9 |
Filtrado de telemetría por latencia (acumulativo hacia la raíz) |
🟡 4/5 |
#23 |
INT-06 — Geofencing y contención del volumen de operación (3)
| Historia |
Título |
Progreso |
Issue |
INT-06.1 |
Geofence: imposición desde la GCS — aviso predictivo y retención dentro del volumen |
🟡 4/5 |
#91 |
INT-06.2 |
Geofence: fence de salvaguarda en el autopiloto (contención sin C2) |
🟡 0/6 |
#92 |
INT-06.3 |
Geofence: asistencia al pilotaje manual por niveles (muro con deslizamiento y toma de control) |
🟡 0/9 |
#230 |
INT-07 — Fail-safes de energía y enlace (retorno por batería y pérdida de C2) (2)
| Historia |
Título |
Progreso |
Issue |
INT-07.1 |
Fail-safe de energía: retorno por batería con perfil configurable |
🟡 0/5 |
#93 |
INT-07.2 |
Fail-safe de enlace: pérdida de C2 con acción por tipo de vuelo |
🟡 0/4 |
#94 |
SW-02 — Revisión de gestión de flotas (6)
| Historia |
Título |
Progreso |
Issue |
SW-02.1 |
Flota con el método: drones y modelos de dron |
🟡 2/4 |
#45 |
SW-02.2 |
Flota: asignaciones, grupos operacionales y entidades nuevas |
🟡 1/3 |
#46 |
SW-02.3 |
Flota: entidad vertiports — la base de operaciones de cada dron |
🟡 6/7 |
#95 |
SW-02.4 |
Flota: asignación de drones a un vertipuerto (entidad-join, exclusiva por dron) |
✅ 6/6 |
#108 |
SW-02.5 |
Flota: asignar drones a un piloto desde su formulario (multi-picker, sin exclusividad) |
✅ 4/4 |
#115 |
SW-02.6 |
Flota: tipología del modelo de dron — multirrotor |
VTOL |
✅ 5/5 |
SW-03 — Definición y codificación de misiones (20)
| Historia |
Título |
Progreso |
Issue |
SW-03.1 |
Misiones: entidad theatres (teatros de operaciones) con backend y workspace |
✅ 4/4 |
#62 |
SW-03.10 |
Misiones: panel jerárquico teatro → misiones y guardia de cambios sin guardar |
✅ 6/6 |
#105 |
SW-03.11 |
Misiones: sub-misiones y multi-dron — el plan se parte en subdivisiones asignadas |
✅ 8/8 |
#121 |
SW-03.12 |
Misiones: Recursos antes del Objetivo — asignación en las subzonas y cámara del dron asignado |
✅ 6/6 |
#123 |
SW-03.13 |
Misiones: flujo v3 — el Objetivo concentra vertipuerto y configuración por sub-misión |
✅ 9/9 |
#126 |
SW-03.14 |
Misiones: hito Programación — trigger por sub-misión (a demanda / single / recurrente) |
✅ 5/5 |
#127 |
SW-03.15 |
Misiones: Flight plan por sub-misión — puntos y perfil de terreno expandible (HIVE2) |
✅ 6/6 |
#128 |
SW-03.16 |
Misiones: destino de ejecución explícito — simulador o dron real |
✅ 5/5 |
#145 |
SW-03.17 |
Misiones: las tablas de entidades de misión son solo lectura (las gobierna el flujo) |
🟡 4/5 |
#152 |
SW-03.18 |
Misiones: borrado en cascada (soft) de un plan, bloqueado si hay ejecuciones activas |
✅ 8/8 |
#153 |
SW-03.19 |
Misiones: HOME y vertipuerto al lanzar — forzado en simulador, validación en real |
🟡 0/10 |
#281 |
SW-03.2 |
Misiones: modelo plan/ejecución con los cuatro tipos |
🟡 3/4 |
#65 |
SW-03.20 |
Reset de una ejecución simulada atascada y apagado sin dejar huérfanas |
🟡 7/8 |
#227 |
SW-03.3 |
Misiones: tipo fotogramétrica — port del generador de HIVE2 |
✅ 4/4 |
#66 |
SW-03.4 |
Misiones: tipo target — aproximación con standoff (pipeline de ejecución E2E) |
✅ 4/4 |
#67 |
SW-03.5 |
Misiones: tipo SAR — patrones de búsqueda y parámetros de objetivo |
✅ 4/4 |
#68 |
SW-03.6 |
Misiones: SAR — comportamiento al detectar (loiter, timeout y decisión del operador) |
🟡 0/4 |
#69 |
SW-03.7 |
Modo de vuelo manual (gamepad) desde la GCS, registrado como ejecución |
🟡 0/5 |
#70 |
SW-03.8 |
Misiones: flujo común de definición por hitos (wizard blando sobre el mapa) |
✅ 7/7 |
#71 |
SW-03.9 |
Misiones: ejecución en vivo — lanzamiento, seguimiento y control desde la GCS |
✅ 6/6 |
#96 |
SW-06 — Pilotado manual asistido con gamepad (7)
| Historia |
Título |
Progreso |
Issue |
SW-06.1 |
Gamepad: lectura en la GCS y configuración del mapeo |
✅ 5/5 |
#186 |
SW-06.2 |
Gamepad: modo de pilotado asistido gobernado por el despachador |
✅ 6/6 |
#187 |
SW-06.3 |
Gamepad: el operador elige la ley de control (asistido / directo) |
🟡 6/7 |
#225 |
SW-06.4 |
Gamepad: el pitch volaba invertido (CH2 de ArduCopter) |
🟡 2/3 |
#226 |
SW-06.5 |
Gamepad: medición de latencia real del mando (eco de ida y vuelta) |
✅ 5/5 |
#242 |
SW-06.6 |
Gamepad: repetidor RC en el puente — robustez ante jitter de red |
✅ 6/6 |
#243 |
SW-06.7 |
Gamepad: aviso háptico de proximidad a la geofence (nivel 1 de asistencia) |
🟡 0/5 |
#282 |
| Historia |
Título |
Progreso |
Issue |
SW-16.1a |
Setup del proyecto front (Vite + React 19 + Tailwind 4) |
✅ 3/3 |
#8 |
SW-16.1b |
Estructura de carpetas y convenciones del front |
✅ 2/2 |
#9 |
SW-16.1c |
Routing y layout raíz (React Router 7 + ProtectedRoute) |
✅ 2/2 |
#10 |
SW-16.1d |
Cliente API y proxy dev (/api → backend) |
✅ 2/2 |
#11 |
SW-16.2a |
Página de login (estilo HIVE, sin secuencia unshield) |
✅ 5/5 |
#34 |
SW-16.2b |
Home de módulos: mapa del mundo de fondo + fichas |
✅ 5/5 |
#35 |
SW-16.2c |
API del nodo: rebanada de autenticación (JWT desde Vault) |
✅ 5/5 |
#36 |
SW-16.3a |
Settings: tres tamaños de letra y densidad de paneles |
✅ 5/5 |
#47 |
SW-16.3b |
Contrato de entidades (collections.js) y primitivas UI |
✅ 4/4 |
#48 |
SW-16.3c |
Workspace CRUD genérico: grid + form derivados del contrato |
🟡 3/4 |
#49 |
SW-16.3d |
Backend genérico de entidades: router CRUD factory + eventos de dominio |
✅ 4/4 |
#50 |
SW-16.3e |
Configurador de vistas en runtime (ficha Configuration) |
🟡 3/4 |
#51 |
SW-16.3f |
Seeder de datos fake (pilotos con fotos IA, drones, asignaciones) |
✅ 3/3 |
#52 |
SW-16.3g |
CRUD genérico: seleccionar varios elementos de otra colección (relation-multi) |
✅ 6/6 |
#109 |
SW-16.4a |
Plataforma: lienzo de mapa (GlobeView) con capas enchufables |
🟡 5/6 |
#72 |
SW-16.4b |
Plataforma: rectángulo con handles + perfil de terreno bajo polilínea |
🟡 3/4 |
#73 |
SW-16.4c |
Plataforma: sección GIS en Configuration — estilos de capas, rampas e iconos |
🟡 4/5 |
#103 |
SW-16.5a |
Pestaña /network: estructura de pestañas y visor MQTT en vivo |
🟡 0/7 |
#210 |
SW-16.5b |
Salud e identidad del nodo: endpoint en la API y pestaña Servicios |
🟡 2/5 |
#211 |
SW-17 — Consola de despliegue de GUARDIAN (patrón hive-deploy) (4)
| Historia |
Título |
Progreso |
Issue |
SW-17.1 |
UI de topología de nodos (editor de árbol) |
✅ 7/7 |
#24 |
SW-17.2 |
nodeRegistry y API de topología (el modelo del nodo) |
✅ 5/5 |
#26 |
SW-17.3 |
Motor de despliegue (generación de config + deploy local/SSH como servicio del nodo) |
🟡 0/6 |
#27 |
SW-17.4 |
Mecánica de licencias (emisión firmada, transferencia, retorno) |
🟡 0/7 |
#28 |
SW-18 — Programación de misiones (scheduling recurrente) (5)
| Historia |
Título |
Progreso |
Issue |
SW-18.1 |
Planificación: entidad calendario recurrente por sub-misión y su editor |
✅ 4/4 |
#129 |
SW-18.2 |
Planificación: lanzador runtime en el edge — de calendario a ejecuciones |
✅ 5/5 |
#130 |
SW-18.3 |
Planificación: intervalo mínimo y reserva RTH por voltaje (defaults del modelo de dron) |
✅ 5/5 |
#131 |
SW-18.4 |
Planificación: calendario visual del hito Programación — vuelo, recarga y conflictos |
✅ 6/6 |
#134 |
SW-18.5 |
Planificación: despachador de ejecuciones en el edge — del planned al vuelo sin UI |
✅ 5/5 |
#146 |
SW-21 — Herramienta de teatros de operaciones con geofence (definición y compilación) (3)
| Historia |
Título |
Progreso |
Issue |
SW-21.1 |
Teatros: editor por pasos — encuadre y fuente de datos |
✅ 9/9 |
#78 |
SW-21.2 |
Teatros: editor — contorno, envolvente de vuelo y reglas locales (vectores) |
✅ 6/6 |
#79 |
SW-21.3 |
Teatros: compilación del raster de geofence en el edge + previsualización |
🟡 8/9 |
#80 |
SW-22 — Panel de operaciones: estado y control de las misiones en vivo (11)
| Historia |
Título |
Progreso |
Issue |
SW-22.1 |
Operaciones: tablero agregado de ejecuciones + monitor del dispatch log |
✅ 6/6 |
#147 |
SW-22.10 |
C2: interpolación de la telemetría en el render (movimiento continuo) |
✅ 5/5 |
#244 |
SW-22.11 |
C2: widget de energía del dron (voltaje contra los límites de su modelo) |
✅ 7/7 |
#257 |
SW-22.2 |
Operaciones: vista C2 de la ejecución seleccionada — mapa, instrumentos y mandos |
✅ 6/6 |
#148 |
SW-22.3 |
Operaciones: tablero en el HQ — subárbol replicado, solo lectura y testigo C2 |
✅ 5/5 |
#149 |
SW-22.4 |
Operaciones: globo de situación — teatros agregados y vuelos en vivo |
🟡 0/6 |
#156 |
SW-22.5 |
Operaciones: doble nivel de lectura — por estado y por misión |
🟡 0/5 |
#157 |
SW-22.6 |
Operaciones: capa histórica de actividad (mapa de calor) |
🟡 0/5 |
#158 |
SW-22.7 |
C2: perfil de altitud en vivo — terreno, plan de vuelo y dron |
✅ 6/6 |
#179 |
SW-22.8 |
C2: cámara FPV sintética — vista inclinada desde el dron |
✅ 6/6 |
#180 |
SW-22.9 |
C2: modos de vuelo semánticos gobernados por el despachador |
✅ 5/5 |
#181 |
SW-23 — Navegación temporal de la programación (proyección y ensayo) (2)
| Historia |
Título |
Progreso |
Issue |
SW-23.1 |
Tiempo: navegador temporal del calendario de programación |
🟡 0/5 |
#173 |
SW-23.2 |
Tiempo: proyección de despacho — motor discreto y control play/stop |
🟡 0/5 |
#174 |
SW-24 — Entornos de ejecución: simulación avanzada con ArduPilot SITL (7)
| Historia |
Título |
Progreso |
Issue |
SW-24.1 |
Simulación avanzada: canal sim_advanced + servicio ArduPilot SITL |
✅ 5/5 |
#188 |
SW-24.2 |
Simulación avanzada: puente MAVLink↔MQTT con el contrato del sim-lite |
✅ 5/5 |
#189 |
SW-24.3 |
Política de mensajería del nodo: aceptación, cadencia y sello de tiempo en los productores |
✅ 8/8 |
#212 |
SW-24.4 |
Edición de la política de mensajería desde el C2, con aviso de reinicio pendiente |
🟡 0/5 |
#213 |
SW-24.5 |
Ciclo de vida del dron: encendido bajo demanda y apagado tras el vuelo |
✅ 8/8 |
#218 |
SW-24.6 |
Panel de aeronaves en la red: qué drones están vivos y por qué canal |
🟡 1/7 |
#219 |
SW-24.7 |
Simulación: el voltaje emitido deriva del modelo del dron, no de constantes fijas |
✅ 4/4 |
#258 |
SW-25 — Entorno virtual 3D: escenario de terreno real para pilotaje y conciencia situacional en C2 (6)
| Historia |
Título |
Progreso |
Issue |
SW-25.1 |
VR: motor de terreno 3D a pantalla completa desde la C2 |
✅ 6/6 |
#195 |
SW-25.2 |
VR: dron en vivo en el escenario 3D con telemetría real |
✅ 6/6 |
#196 |
SW-25.3 |
VR: overlay de instrumentos, FPV y perfil sobre el escenario 3D |
✅ 6/6 |
#197 |
SW-25.4 |
VR: pilotaje gamepad y mandos de ejecución dentro del entorno 3D |
✅ 6/6 |
#198 |
SW-25.5 |
Config: pestaña VR — todos los parámetros del escenario 3D, persistidos |
✅ 6/6 |
#199 |
SW-25.6 |
VR: ambiente, minimapa y verificación E2E del entorno completo |
🟡 6/7 |
#200 |
SW-26 — Radar de proximidad a la geofence para pilotaje manual (10)
| Historia |
Título |
Progreso |
Issue |
SW-26.1 |
Radar: motor de márgenes de geofence en el edge (rejilla orientada al rumbo) |
✅ 8/8 |
#231 |
SW-26.10 |
Radar: selector de nivel de asistencia y feedback del recorte en el puesto de pilotaje |
🟡 0/6 |
#283 |
SW-26.2 |
Radar: widget de proximidad en la C2, relevando al perfil al tomar el control |
🟡 7/9 |
#232 |
SW-26.3 |
Radar: display de alertas de proximidad con causa, margen y registro |
🟡 6/8 |
#233 |
SW-26.4 |
Config: pestaña del radar de proximidad — geometría, escala, umbrales y rampa |
🟡 5/6 |
#234 |
SW-26.5 |
Radar: overlay del instrumento dentro del entorno virtual 3D |
🟡 2/5 |
#235 |
SW-26.6 |
Radar: layout del puesto de pilotaje asistido (instrumentos al panel) |
✅ 7/7 |
#248 |
SW-26.7 |
Radar: barra de altura única (suelo · corredor · techo) |
✅ 7/7 |
#249 |
SW-26.8 |
Radar: transición animada auto ↔ asistido con retorno diferido al waypoint |
✅ 6/6 |
#250 |
SW-26.9 |
Radar: la barra de altura arranca en el suelo real, con la franja vedada hasta el mínimo |
🟡 6/7 |
#261 |
SW-27 — Interfaz multiidioma: toda la UI y todo mensaje al usuario via tabla de traducciones (7)
| Historia |
Título |
Progreso |
Issue |
SW-27.1 |
Infraestructura i18n: tabla de traducciones, selector de idioma y lint anti-literales |
✅ 7/7 |
#267 |
SW-27.2 |
Migración i18n del área C2 y pilotaje (instrumentos, radar, gamepad, VR) |
✅ 6/6 |
#268 |
SW-27.3 |
Migración i18n del área de misiones (editores, flujo, calendario, teatros) |
✅ 5/5 |
#269 |
SW-27.4 |
Migración i18n del mapa y la vista de operaciones |
✅ 5/5 |
#270 |
SW-27.5 |
Migración i18n de componentes comunes, navegación, workspaces y autenticación |
✅ 6/6 |
#271 |
SW-27.6 |
Migración i18n de flota y red de nodos |
✅ 4/4 |
#272 |
SW-27.7 |
Backend sin prosa: mensajes al usuario como código + parámetros |
✅ 5/5 |
#273 |