12 KiB
Transcript Forensics · Sprint backlog
Producto: Transcript Forensics (audio counterpart to Blocao). Stack: misma plataforma que Blocao (router + Cell + hub + GitOps + Mosquitto). Lo distinto es el contenedor de procesamiento (Whisper + pyannote) y el panel forense del audio.
Las stories WDM-T-XX.Y corresponden 1:1 con la épica numerada. Muchas son trivialmente reutilizables desde el backlog Blocao — esas se identifican abajo y se delegan a shared-stories.md.
Cómo se relaciona con Blocao
La gran mayoría de la infraestructura es la misma: monorepo, CI, image builder, balena fleet, MQTT contract, GitOps reconciler, hub, auth, network sovereignty, design tokens, console framework. Las épicas 0, 1, 2, 5, 6, 7 son prácticamente idénticas — solo cambia qué corre dentro del Cell y qué panel muestra la consola.
Las épicas que sí son específicas del transcript product:
- Épica 3 — Audio onboarding (en lugar de camera onboarding).
- Épica 4 — Transcript operator plane (en lugar de video operator plane).
Esto significa que ~70% del trabajo de Transcript Forensics ya está hecho cuando Blocao MVP esté en producción.
ÉPICAS y mapping a Blocao
| Sprint | Épica | Mapping a Blocao |
|---|---|---|
| 0 | Foundation | Idéntico a Blocao Épica 0. Stories SHARED-00.X. |
| 1 | First boot | Idéntico a Blocao Épica 1. Stories SHARED-01.X. |
| 2 | Engineering plane | Idéntico a Blocao Épica 2. Stories SHARED-02.X. |
| 3 | Audio onboarding | NUEVO. Stories WDM-T-03.X. |
| 4 | Transcript operator plane | NUEVO. Stories WDM-T-04.X. |
| 5 | Health & ops | Idéntico a Blocao Épica 5 + algunos checks específicos de STT. Stories SHARED-05.X + WDM-T-05.X. |
| 6 | Hub & fleet | Idéntico a Blocao Épica 6. Stories SHARED-06.X. |
| 7 | Hardening | Idéntico a Blocao Épica 7 + manifest schema con campos audio-specific. Stories SHARED-07.X + WDM-T-07.X. |
ÉPICA 3 — AUDIO ONBOARDING
Equivalente a la épica de camera onboarding pero para audio sources.
[WDM-T-03.1] Audio source discovery — M
Como installer, veo las fuentes de audio disponibles: USB mic conectado, line-in, SIP gateway, file watcher, archivos subidos manualmente.
Backend en Cell: enumera devices ALSA/PulseAudio, comprueba SIP gateway si configurado, escanea carpetas watched. Tests de aceptación: enchufar un USB mic se detecta en <5s; añadir un fichero a watched folder se detecta en <30s. Estimación: M (3d). Depende de: SHARED-02.1 (hai.uc base).
[WDM-T-03.2] Audio source authentication — S
Como installer, para SIP gateways o cuentas de servicio, introduzco credenciales y se verifican.
Backend: SIP register-test, IMAP/POP3 test si fuente es email-attached audio. Estimación: S (1d). Depende de: WDM-T-03.1.
[WDM-T-03.3] Test stream + transcripción de prueba — M
Como installer, graban 30s de audio y veo la transcripción aparecer.
Backend: el Cell recibe orden de capturar 30s, los pasa a Whisper, devuelve resultado al router. Tests de aceptación: la transcripción aparece en <60s; speaker labels (SP-A, SP-B) aparecen si hay 2+ speakers. Estimación: M (3d). Depende de: WDM-T-03.2, WDM-T-04.1 (whisper container).
[WDM-T-03.4] Configure form — name, language, retention, speakers expected — S
Como installer, introduzco datos: nombre del source, idioma esperado, retention (hereda regional), speakers esperados (lista o "auto").
UI: form similar al de cameras. Estimación: S (1d). Depende de: WDM-T-03.3.
[WDM-T-03.5] Save — generate Whisper config + GitOps commit — L
Como installer, al guardar, se genera la config de Whisper para el source, se comitea, se reinicia el container, primer ciclo de prueba end-to-end.
Backend:
- Generar la sección
sources:<id>del whisper.yml. - Commit local al repo.
- Push si configurado.
- Trigger reconcile.
- Esperar primer transcript end-to-end.
Tests de aceptación: tras "FINISH", primer evento aud/<source_id>/transcript llega al MQTT en <60s.
Estimación: L (5d).
Depende de: WDM-T-03.4, SHARED-02.8 (gitops).
[WDM-T-03.6] Speaker library — initial enrollment — M
Como installer, enrollo voiceprints conocidos: subo audio o grabo en directo, etiqueto con nombre.
Backend: pyannote produce el embedding, se guarda en Qdrant collection speakers/<customer_id>.
Tests de aceptación: 5 speakers enrolados; en sesiones nuevas, esos speakers son identificados automáticamente con score >0.7.
Estimación: M (3d).
Depende de: WDM-T-03.5.
ÉPICA 4 — TRANSCRIPT OPERATOR PLANE
El panel forense del audio. Equivalente al panel forense de video pero adaptado.
[WDM-T-04.1] Whisper + pyannote container — L
Como team, necesito un contenedor Balena que corra Whisper + pyannote en el Cell, expuesto como API.
Stack:
- Whisper.cpp con quantized model (large-v3-q5).
- Pyannote para diarization.
- Wrapper FastAPI que orquesta: audio in → diarization → transcripción por segmento → match contra speaker library.
Tests de aceptación: 60min de audio se procesan en <15min en RK3588 con NPU; 95% accuracy en idioma claro (Spanish/English). Estimación: L (1 sem). Depende de: SHARED-00.4 (balena fleet provisioning).
[WDM-T-04.2] Transcript chat UI con autocomplete — M
Como investigator, escribo consultas naturales sobre transcripts: "qué se dijo del contrato Acme y quién insistió más".
Reuso del componente chat del Blocao operator plane. Vocabulario adaptado: speakers conocidos, topics, time ranges. Tests de aceptación: query en español devuelve hits relevantes; ghost text sugiere desde corpus de transcripts existente. Estimación: M (3d). Depende de: WDM-T-04.1, BL-04.5 (chat UI base — shared).
[WDM-T-04.3] Transcript timeline con speaker bands — L
Como investigator, veo un waveform con bands coloreadas por speaker (uno por color), markers en hits, playhead.
UI: similar al timeline de video pero con waveform en vez de frames; swimlanes son speakers en lugar de cameras.
Backend: API devuelve segments {start, end, speaker_id, confidence, text}.
Tests de aceptación: 1h de transcript con 4 speakers se renderiza en <500ms; click en marker reproduce desde ese punto.
Estimación: L (5d).
Depende de: WDM-T-04.1.
[WDM-T-04.4] Audio player con live caption — M
Como investigator, reproduzco el audio y veo la transcripción avanzar sincronizada con el playhead.
UI: player shell shared con video; visualización es waveform en lugar de frame. Backend: streaming HTTP con range requests; transcript events sincronizados. Tests de aceptación: scrubbing fluido; caption salta correctamente al cambiar speaker. Estimación: M (3d). Depende de: WDM-T-04.3.
[WDM-T-04.5] Topic detection panel — L
Como investigator, veo los topics detectados en una sesión, ordenados por tiempo de discusión, click → hits relacionados.
Backend: NER (Named Entity Recognition) + clustering de spans; topics aparecen como entities (personas, organizaciones, fechas, lugares, montos económicos). Tests de aceptación: en transcript de 1h con 5 topics distintos, se detectan al menos 4 con precisión. Estimación: L (5d). Depende de: WDM-T-04.1.
[WDM-T-04.6] Speaker breakdown — quién habla cuánto — M
Como investigator, veo estadísticas por speaker: tiempo total, número de turnos, palabras, ratio de interrupción.
UI: panel lateral en transcript view. Backend: estadísticas calculadas del array de segments. Estimación: M (2d). Depende de: WDM-T-04.3.
[WDM-T-04.7] Insistence ranking por topic — L
Como investigator, veo quién insiste más en cada topic detectado: número de intervenciones, repetición de keywords, evolución temporal.
Backend: heurística sobre los segments + topic mapping. Score por (speaker, topic). Tests de aceptación: en transcript con discusión clara de 2 partes sobre un topic, la heurística identifica correctamente quién insistió más. Estimación: L (5d). Depende de: WDM-T-04.5, WDM-T-04.6.
[WDM-T-04.8] Pin to case (transcript) — M
Como investigator, pino un segmento o un transcript completo a un caso.
Backend: extiende el modelo de cases existente con tipo transcript_segment.
Estimación: M (2d).
Depende de: BL-04.8 (case model — shared).
[WDM-T-04.9] Transcript export — bundle ZIP — M
Como investigator, exporto un caso con transcripts, audio, manifests.
Backend: extiende el exporter con tipos audio. Estimación: M (3d). Depende de: BL-04.10 (export base — shared).
ÉPICA 5 — HEALTH & OPS (transcript-specific additions)
[WDM-T-05.1] Selftest checks específicos de STT — S
Como ops, el selftest verifica que Whisper container está sano, que el audio device es accesible, que el speaker library responde.
Backend: tests adicionales en healthd. Estimación: S (1d). Depende de: BL-05.1 (selftest base).
[WDM-T-05.2] Transcripción throughput metrics — S
Como ops, veo cuántos minutos de audio se procesan por hora, latencia desde grabación a transcript disponible.
Backend: métricas publicadas a TimescaleDB. Estimación: S (1d). Depende de: WDM-T-04.1.
ÉPICA 7 — HARDENING (transcript-specific)
[WDM-T-07.1] Manifest schema audio-specific — S
Como investigator, el manifest de cada transcript incluye: sha256_audio, sha256_transcript, ts_start, ts_end, model_sha, source_id, speaker_ids_present.
Backend: extiende el manifest schema base con campos audio. Estimación: S (1d). Depende de: BL-07.1 (manifest base).
[WDM-T-07.2] Audio evidence verifier — S
Como investigator, blocao verify acepta también audio + transcript + manifest.
Backend: la CLI extiende su matching. Estimación: S (1d). Depende de: BL-07.2.
Cross-references a stories shared
Para evitar duplicar trabajo, las stories de épicas 0, 1, 2, 5, 6, 7 que son comunes con Blocao están en shared-stories.md:
SHARED-00.1↔BL-00.1(monorepo)SHARED-00.2↔BL-00.2(CI/CD)SHARED-00.3↔BL-00.3(image builder)SHARED-00.4↔BL-00.4(balena fleet — extiende con whisper container)SHARED-00.5↔BL-00.5(MQTT schemas — extiende con namespaceaud/)- ... (sprints 1, 2, 5, 6, 7)
El equipo de transcript no escribe su propia versión de estas stories; trabaja sobre las shared y solo añade adaptaciones documentadas.
Riesgos específicos del transcript product
- Whisper en RK3588 puede ser limitante si el audio tiene mucho ruido o múltiples lenguajes mezclados. Mitigación: ofrecer opción de fallback a Cell con Jetson para customers con audio difícil.
- Speaker library cross-session matching depende de calidad de voiceprint enrollment. Mitigación: enrollment guidado en wizard, calidad mínima validada antes de aceptar.
- Privacy del audio es aún más sensible que video — un whisper de transcripción puede capturar conversaciones íntimas. Mitigación: documentación clara de qué se graba y cuándo, signage equivalente a cámaras.
- Latencia transcripción → disponible para query: en sitios con poca compute, puede ser >2x real-time. Mitigación: priorización por flag "investigation pending".
Notas para sprint planning
El equipo transcript puede empezar en el Sprint 4 de Blocao, una vez que SHARED-00.X y SHARED-02.X estén estables. Antes, no hay sustrato sobre el que construir.
Demo viable de transcript: ~Sprint 4 desde el inicio del transcript track. Asumiendo que Blocao MVP cierra en su Sprint 4, el transcript MVP es Sprint 8 desde el inicio del proyecto global.
Documento sujeto a revisión cuando el equipo transcript entre en planning.