Manual de reconstrucción (para un agente de IA)
Una guía de arranque en frío, ordenada por ejecución, para reproducir el estado funcional completo de este proyecto —checkout del código, una Raspberry Pi flasheada y configurada, el pedal corriendo como appliance de arranque automático— en un PC nuevo y una Raspberry Pi nueva, sin acceso al historial de conversación que originalmente lo construyó.
Esto es un secuenciador, no un duplicado de la documentación real.
Cada fase dice qué hacer y qué archivo tiene el cómo/por qué real; lee
ese archivo antes de actuar, no adivines solo con este resumen. Si el
resultado de una fase no coincide con su checkpoint, detente y
diagnostica antes de seguir — ver TROUBLESHOOTING.md.
Antes de empezar
Confirma que realmente tienes:
- Una Raspberry Pi (este proyecto apunta a una Pi 2; otros modelos deberían funcionar pero no están validados — anótalo explícitamente si usas uno distinto).
- Una tarjeta microSD en blanco (8GB+), una forma de grabarla (esta guía asume Raspberry Pi Imager en el PC desde el que trabajas).
- Un controlador MIDI de pedalera USB. Si no es un M-VAVE PD41, todavía
no tienes un Adapter validado — ver “Si el controlador no es un
M-VAVE PD41” abajo antes de asumir que
src/adapter/mvave_adapter.pyaplica. - Una interfaz de audio USB compatible con la clase estándar (validada
contra una Behringer U-PHORIA UM2; cualquier interfaz compatible con
la clase debería funcionar, según
MASTER_SPECIFICATION.mdsección 2). - Un USB para la biblioteca (cualquier sistema de archivos que
mountsoporte en Linux; el despliegue de referencia de este proyecto usa NTFS, de ahí elntfs-3gde abajo — sustituye el driver correcto para el tuyo). - Una pantalla HDMI.
- Acceso de red a la Pi (Ethernet fuertemente preferido para la
configuración — este proyecto tuvo problemas reales y repetidos de
WiFi/mDNS durante su propio desarrollo; ver
TROUBLESHOOTING.md). - Acceso shell/SSH desde el PC de trabajo, y suficiente permiso para
correr
sudoen la Pi.
No avances más allá de una fase cuyo checkpoint falle. No te saltes una
fase porque “debería” estar bien — cada trampa nombrada en
TROUBLESHOOTING.md fue una falla real que este proyecto ya tuvo una
vez.
Fase 1 — Obtener el código fuente
git clone https://github.com/hesner/chocolatepi
cd chocolatepi
python3 -m unittest discover -s tests -v
Checkpoint: pasan los 27 tests, sin hardware de por medio. Si esto falla, detente — nada más allá de este punto se puede confiar hasta que el código base en sí quede verificado como sano en esta máquina.
Lee MASTER_SPECIFICATION.md secciones 1-4 ahora (las secciones 5-9
son sobre el proceso original de desarrollo asistido por IA, no hacen
falta para reconstruir). Ese es el registro de decisiones real — no
tomes la paráfrasis de esta guía como sustituto de eso.
Fase 2 — Flashear la Pi y obtener acceso SSH
Sigue la sección 0 de systemd/README.md exactamente (elección de
imagen del SO, opciones avanzadas de Imager para hostname/SSH/usuario/
WiFi). Elige un hostname y recuérdalo — esta guía usa pedal para sus
propios ejemplos, igual que el resto de la documentación de este repo,
pero cualquier valor funciona mientras sustituyas consistentemente.
Checkpoint: ssh <usuario>@<hostname>.local (o por IP, si .local
no resuelve — esperado a veces, ver TROUBLESHOOTING.md) obtiene una
shell.
Fase 3 — Instalar los prerequisitos de software
Sigue la sección 1 de systemd/README.md.
Checkpoint: mpv --version, ffmpeg -version, y (si usas NTFS)
mount.ntfs-3g --version funcionan todos.
Fase 4 — Configurar el USB de biblioteca
- Prepara el USB con la estructura que describe
LIBRARY.md(active_set.txt, al menos un<Nombre del Set>/Bank 1/con una pista de prueba — sigue el patrón de nombres deLIBRARY.mdexactamente, especialmente la regla del espacio único alrededor del guion). - Obtén su UUID:
sudo blkid /dev/sda1(o el dispositivo que corresponda —lsblkprimero si no estás seguro). - Sigue la sección 2 de
systemd/README.mdpara agregar la línea de/etc/fstabcon ese UUID.
Checkpoint: sudo mount -a && mount | grep /media/usb lo muestra
montado ro.
Fase 5 — Adaptar el código a este despliegue específico
Dos archivos necesitan los valores reales de esta Pi/USB, no los placeholders del despliegue de referencia del propio repo:
systemd/pedal-core.service: reemplaza<YOUR_USER>y<YOUR_USB_UUID>(versystemd/README.mdsección 3 para dónde y por qué exactamente).- Confirma que
src/main.py --usb-uuiden esa misma líneaExecStart=coincida con el UUID de la Fase 4.
Si el controlador no es un M-VAVE PD41: detente acá y no escribas
un Adapter nuevo adivinando. MAVAVE_ANALYSIS.md no es solo una
especificación para el PD41 — es un ejemplo trabajado de la
metodología (modos MIDI disponibles, rango/comportamiento de Program
Change, validación empírica contra hardware real, la corrección que
atrapó una suposición equivocada — 8 grupos, no 32) para caracterizar
un controlador desconocido antes de escribirle un Adapter. Repite esa
metodología contra el dispositivo real primero. Un Adapter nuevo debe
seguir emitiendo únicamente lo que src/mapper/mapper.py ya espera
(SelectTrack, Stop) — ver la regla de límite Adapter/Mapper/Core de
CONTRIBUTING.md antes de tocar nada fuera de src/adapter/.
Fase 6 — Instalar e iniciar el servicio
Sigue la sección 3 de systemd/README.md.
Checkpoint: sudo systemctl status pedal-core muestra active
(running); el video de standby es visible por HDMI; journalctl -u
pedal-core -f muestra Core started, standby playing. y Connected to
the controller. Listening for actions... sin un ciclo repetido de
caída/reinicio.
Fase 7 — Validación funcional completa
No des esto por terminado hasta que cada uno de estos se haya observado realmente, no asumido:
- Cada footswitch del controlador dispara la pista/acción correcta (confirma contra el contenido real de tu propia carpeta Bank, no solo que algo suene).
- STOP funciona instantáneo desde cualquier estado.
- Las pistas de video y de solo audio ambas se reproducen
correctamente (un
.mp3/.wavdebería dejar el standby en loop debajo; un video debería reemplazarlo). - Desconecta el USB de biblioteca, reinicia: se reproduce el
standby de respaldo local (“Please insert the USB…”), no emergency
mode. Si obtienes emergency mode, todavía no hiciste el paso
recurse=0de la Fase 8 — no te lo saltes asumiendo que es opcional, este checkpoint es exactamente para lo que existe. - Reconecta el USB, reinicia: el contenido real suena de nuevo.
- Corta la energía abruptamente (sin apagado limpio) al menos una vez en reposo, y otra a mitad de reproducción, luego enciende de nuevo: arranca limpio, sin errores de sistema de archivos. Haz esta prueba antes de la Fase 8 también (la SD todavía no está protegida en ese punto) para tener una línea base, y de nuevo después, para confirmar realmente que el overlay es lo que la está protegiendo.
Fase 8 — Blindarla (raíz de solo lectura, último paso a propósito)
Sigue la sección 4 de systemd/README.md — incluyendo el paso
recurse=0, no solo activar el overlay. Esto no es pulido opcional:
el valor por defecto (recurse=1) envuelve /media/usb en un overlay
sin nofail, lo que rompe el checkpoint 4 de la Fase 7 (arrancar sin
USB cae en emergency mode irrecuperable en vez del standby de
respaldo).
Checkpoint: vuelve a correr los checkpoints 4-6 de la Fase 7 ahora que el overlay está activo, para confirmar que el blindaje no rompió silenciosamente ninguno de ellos.
Fase 9 — Expansiones opcionales (pregunta antes de instalar
cualquiera)
El pedal de arriba ya es un aparato completo y funcional — nada más
allá de este punto es obligatorio. Existen dos expansiones instalables
de forma independiente para administrar el USB de biblioteca desde el
navegador de un teléfono en vez de por SSH; ve la tabla “Expansiones
opcionales” del README.md raíz para la descripción y estado actual
de cada una.
No instales ninguna sin preguntar primero. Dile al usuario que existen ambas, en términos simples (una funciona por cable USB al teléfono, sin hardware WiFi necesario; la otra funciona por WiFi pero necesita un adaptador WiFi funcionando en la Pi), y déjalo elegir: ambas, una, o ninguna. Son independientes entre sí y del pedal base — instalar o saltarte una no afecta a la otra ni a nada de las Fases 1-8 de arriba.
Si el usuario quiere instalar una (o ambas), sigue la sección
“Installing” del propio USAGE.md de esa expansión al pie de la
letra — cada una tiene sus propios prerequisitos, script de
instalación y script de reversión, y cada una requiere desactivar
temporalmente el overlay de la Fase 8 primero (el mismo procedimiento
que cualquier otro cambio después del blindaje — ver en
TROUBLESHOOTING.md “Code/config changes on the Pi disappear after a
reboot”).
Checkpoint, por cada expansión instalada: la sección “First use”
del propio USAGE.md de esa expansión, seguida de punta a punta — no
la consideres terminada solo porque su script de instalación salió con
código 0.
Listo
En este punto la reconstrucción coincide con el estado de referencia
validado de este proyecto. Ten LIBRARY.md a mano para la gestión del
contenido día a día (no es un documento de configuración de una sola
vez, gobierna cada edición futura al USB de biblioteca) y
TROUBLESHOOTING.md para cualquier cosa que no coincida con un
checkpoint de arriba.