# MayanTraktor Live

Estado: demo operativo pendiente de asociacion control fisico -> codigo MIDI.  
Hardware: Hercules DJControl Mix / consola MIDI.  
Base canonica: `static/official/primera netrega oficial v2/dist/official/mayantraktor-live/`.  
Marca de prueba: `HARDWARE_DETECTADO_MIDI_ACTIVO`.

## Transporte y validacion MIDI

Decision operativa vigente desde `2026-08-01`:

```text
seis controladores -> Bome -> mayantraktor (A) ==> mayantraktor (B) -> aplicaciones
                                                        |
                                                        +-> listener MIDI 2/UMP
```

- Bome permanece como transporte mientras se carga y prueba el mapping final.
- Los seis controladores tienen un solo destino de ruteo: `mayantraktor (A)`.
- `mayantraktor (B)` es la salida cruzada del loop y la entrada que consumen djay Pro, Traktor, Bastion y el listener.
- Toda captura y validacion nueva se hace por endpoints MIDI 2/UMP de Windows MIDI Services.
- No se crean relays WinMM/MIDI 1 para este carril.
- Un mensaje MIDI 1 encapsulado en UMP sigue siendo observado por el stack MIDI 2; no debe confundirse el formato del mensaje con el transporte usado para validarlo.
- Los relays WinMM experimentales quedan archivados e inactivos. La tarea programada anterior permanece deshabilitada; el ingreso a A se realiza mediante Bome.
- No abrir simultaneamente una fuente fisica y su agregado Bome dentro de la misma aplicacion: eso puede duplicar notas, CC o aftertouch.

Expediente del experimento: `archive/loopback-experiment-2026-08-01/README.md`.

Estado de verificacion: los endpoints Bome fueron observados en Windows MIDI Services. Cada controlador debe producir mensajes en un listener MIDI 2/UMP y una respuesta correcta en djay Pro antes de marcarse probado.

Vista operativa consolidada: `midi/mayan-mapper.html#mayantraktor-live`.  
Esta carpeta queda como soporte documental, contrato JSON y fuente de mappings reales.

Documento maestro: `ARQUITECTURA-GENERAL-MAYANTRAKTOR.md`.

## Proposito

MayanTraktor Live documenta el uso de una controladora Hercules DJControl Mix como superficie universal de operacion para Bastion Universalis. No se limita a Traktor: cada control fisico puede convertirse en una accion de Windows, Traktor, audio, voz, RPA o Bastion.

Este modulo es el primer registro operativo de Mapping Universalis para live:

- boton fisico -> intencion operativa;
- gesto fisico -> accion contextual;
- codigo MIDI real -> captura iniciada, pendiente asociacion exacta por control;
- mapping Traktor `.tsi` -> debe exportarse antes de modificar;
- endpoint Bastion -> debe validarse antes de activar acciones.

## Canon ART-025

Este modulo usa como documento fundacional `reglamento_mayan_traktor_mapeado_espejo.md`, Bastion ID `ART-025`, estado `canon operativo v::0.5 - locked`.

Regla madre aplicada:

- hardware Native intocable;
- espejo Mayan = lectura visual/logica, no cambio fisico;
- mapping funcional preservado desde `source_mapping_id`;
- canal/layer distingue base y espejo;
- `function`, `mapping`, `channel`, `native_physical_id`, `mayan_mirror_id` y `source_mapping_id` deben mantenerse separados;
- si falta dato MIDI real, queda pendiente de captura y no se adivina.

Lectura prohibida: decir que un pad, boton o control fisico cambia de identidad. Lectura correcta: el control fisico conserva su identidad y el espejo Mayan solo agrega una lectura visual/logica o de capa.

Orden de resolucion de conflictos:

1. hardware fisico;
2. identidad tecnica MIDI;
3. lectura mirror;
4. mapping preservado;
5. salida final.

Regla critica Maschine derecha: el `pad_13` fisico Native, ubicado arriba a la izquierda en la matriz 4x4, se conserva como `native_physical_id = pad_13`. En el mapping espejo Mayan se lee como `mayan_mirror_id = pad_16`. No se debe decir que el pad fisico cambio; solo cambia la lectura espejo.

## Inventario local encontrado

- HTML de Mayan Mapper: `midi/mayan-mapper.html`.
- Consola MayanTraktor / MIDI Station: `midi/station.html`.
- Menu de MIDI mappings: `midi-mappings.html`.
- JSON de controladoras: `assets/console/djcontroller.json`, `assets/console/traktor.json`, `assets/console/maschine.json`, `assets/console/m32.json`.
- Imagenes de controladoras: `assets/console/djcontroller.jpg`, `assets/console/traktor.jpg`, `assets/console/maschine.jpg`, `assets/console/m32.png`.
- Manifest oficial: `manifest.json`.
- Config de endpoints: `assets/endpoints-config.js`.
- Endpoints MIDI en manifest: `8502` para Mayan Mapper, `8011` para GRP MIDI2, `8767` para Voice Receiver, `8788` para Voice Stream.
- Documentacion operativa relacionada: `docs/operational-routes/mapping_universalis_controls_spec.md`, `docs/operational-routes/mapping_universalis_emergency_capture.md`, `docs/operational-routes/djcontrol_hercules_library.md`.
- Scripts existentes: `tools/mapping_universalis/launch_universal_capture.ps1`, `tools/mapping_universalis/build_universal_handoff.py`.
- Handler MIDI Python base: `midi_handler.py`.
- Modulo suelto de endpoints MIDI: `static/bastion-midi-endpoints-module.html`.

## Mappings reales importados

Copia oficial dentro de este modulo:

```text
mayantraktor-live/source-mappings/mayan.mappings/
```

Archivos base disponibles:

- `DjayPro/Mayan.Sync.midiMapping`
- `DjayPro/manifest-djay.json`
- `DjayPro/local-djay-mappings/mayanmovil Hercules DJControl Mix Edit.djayMidiMapping`
- `DjayPro/local-djay-mappings/Mayan Sync - Traktor Kontrol X1 - 1.djayMidiMapping`
- `DjayPro/local-djay-mappings/Mayan Sync - midiuniversalis.djayMidiMapping`
- `DjayPro/local-djay-mappings/Maschine MK2 In.djayMidiMapping`
- `Traktor/Configuration.ncc`
- `Maschine/MaschineMK2_MayanSync_2025-08-12_v2.ncm`
- `Maschine/maschine mkii Configurationmsi.ncc`
- `Maschine/manifest-maschine.json`
- `esquema crudo.xlsx`
- `Ruta MIDI más pura entre Terra-Operations (MSI) y Djay Pro.pdf`
- `verify-mini.json`
- `verify-TERRA-OPERATION-20250812_021807.json`
- `verify-TERRA-OPERATION-maschine.json`
- `verify-links.ps1`

Lectura actual: `DjayPro/Mayan.Sync.midiMapping` es un stub minimo de dispositivo. Los mappings djay Pro con controles reales estan copiados en `DjayPro/local-djay-mappings/`.

Regla operativa: no inventar mappings en otro chat si ya existe fuente en `source-mappings/`. Primero leer estos archivos, luego generar una tabla normalizada o un contrato JSON derivado.

Resumen derivado de fuentes reales:

- Hercules DJControl Mix: `110` controles djay Pro.
- Traktor Kontrol X1: `55` controles djay Pro.
- midiuniversalis: `48` controles djay Pro.
- Maschine MK2: `84` controles djay Pro.
- Ruta operativa confirmada por operador: M32 y Maschine MK2 izquierda salen por `midiuniversalis` en canal operativo `14` (`source channel 13` en archivos/lectura zero-based).

Canales reservados por ART-025: canal humano `16` y wire `15` no deben usarse para mappings musicales normales. Los canales existentes en mappings fuente se preservan como provenance; cualquier salida final Bastion debe validar reserva de canal antes de activarse.

## Configuracion MIDI observada para live

Captura por operador desde Bome Network / djay Pro / Maschine:

- MSI / midiuniversalis core: la configuracion correcta observada es la de la segunda imagen del operador.
- Bome Network MSI: `DJCONTROL MIX -> To midiuniversalis ipad`, `From midiuniversalis -> midiuniversalis Virtual Out`, `From midiuniversalis -> To midiuniversalis`, `Maschine MK2 MIDI In -> To midiuniversalis ipad`, `Traktor Kontrol X1 Midi -> To midiuniversalis ipad`.
- Bome Network midiuniversalis main: `From midiuniversalis ipad -> midiuniversalis ipad Virtual Out`, `From midiuniversalis main -> midiuniversalis main Virtual Out`, `KOMPLETE KONTROL M32 MIDI -> To midiuniversalis main`, `Maschine MK2 In -> To midiuniversalis ipad`, `Maschine MK2 In -> To midiuniversalis main`.
- Bome Network iPad: puertos virtuales `midiuniversalis` y `midiuniversalis main` aparecen conectados.
- Bome Network iPad / MIDI Router: `BN midiuniversalis main Virtual In -> To midiuniversalis main`, `BN midiuniversalis main: midiuniversalis Virtual In -> midiuniversalis main: midiuniversalis`, `BN midiuniversalis Virtual In -> To midiuniversalis`, `BN terra-operations: midiuniversalis Virtual In -> BN midiuniversalis Virtual Out`, `From midiuniversalis -> BN midiuniversalis Virtual Out`, `From midiuniversalis main -> BN midiuniversalis main Virtual Out`.
- Maschine izquierda: en djay Pro aparece con `Maschine MK2 In` habilitado como Input y `Maschine MK2 Out` habilitado como Output.
- M32 y Maschine izquierda salen por `midiuniversalis` en canal operativo `14`, preservando ART-025: el hardware no cambia identidad; la ruta/layer documenta la lectura operativa.

Estado: configuracion observada por operador, pendiente captura limpia control por control en Mayan Mapper.

## Topologia de audio del live

Lectura operativa actual:

- Windows / djay Pro salen por Behringer UMC404HD en canales `1-2`.
- Existe fallback fisico hacia canales `1-2` desde el hub HP G5 para evitar perdida de audio si falla USB.
- iPad entra por cable doble RCA convertido a `6.5 mm` para lives.
- Maschine izquierda y M32 entran a Behringer por `6.5 mm`, canal `3`, usando `OUT 3` de Behringer.
- Canal `4` de Behringer recibe un USB Anker convertido a `3.5 mm` y entra al canal `4`.
- Mini usa salida de su tarjeta Synaptics / line out, convertida a RCA Monster y termina en `6.5 mm`.
- La MSI no se usa como fuente de audio; Realtek quedo roto despues del upgrade `24H2` y no se tocaran drivers en vivo.
- Sonos 5 queda como salida live prioritaria en modo cableado/line-in para evitar delay y latencia. No depender de Bluetooth para el live.

Pendiente Bastion/Sonos:

- recuperar API Sonos para manipular el equipo desde MIDI pads;
- boton `line_in_on`: solo encender/activar Line-In, sin toggles destructivos;
- knob `sonos_volume`: controlar volumen Sonos con rango seguro;
- boton o knob `sonos_bass_ultra`: activar o graduar bass ultra, pendiente confirmar API exacta;
- fallback manual obligatorio si Sonos API no responde.

## Diagnostico urgente: Hercules doble CC

No asumir 14-bit todavia.

Problema observado: Hercules DJControl Mix / djay Pro iPad puede aprender doble CC en knobs/faders. Ejemplos operativos: filtro izquierdo esperado como `CC2`, pero iPad/djay Pro aprende `CC2 + CC34`; crossfader aprende `CC0 + CC32`; filtros/faders laterales aprenden pares como `CC8 + CC40` o `CC40 + CC8`, generando conflicto.

Hipotesis fuerte para iPad: esos pares tienen separacion `+32`, patron tipico de controles MIDI 14-bit donde el CC principal/MSB `0-31` se acompana por CC secundario/LSB `32-63`. Como en Windows no ocurre, la causa probable esta en la ruta iPad/Bome/djay Pro o en como djay Pro iPad aprende/interpreta esos controles, no en el mapping Windows base.

Hipotesis principal: una capa intermedia, router, Bome, Mayan, Mapping Universalis o djay Pro iPad podria estar duplicando/traduciendo controles o exponiendo ambos bytes de un control 14-bit.

Prueba obligatoria:

1. `A directo`: Hercules directo sin Bome, Mayan, router MIDI ni Mapping Universalis.
2. `B capa activa`: misma prueba con la ruta actual activa.

Capturar siempre:

- dispositivo fisico;
- plataforma: Windows 11 / iPad / iPhone;
- app: djay Pro;
- ruta MIDI: directo / Bluetooth / network / Bome / Mayan;
- control fisico;
- mensaje crudo;
- CC primario;
- CC secundario;
- canal;
- timestamp;
- accion aprendida por djay;
- conflicto si/no.

Decision:

- si `CC34` aparece solo con capa activa, bloquear Mapping Universalis para knobs/faders o filtrar salida secundaria;
- si `CC34` aparece directo, revisar modo/perfil Hercules y mapeo djay Pro iPad;
- si aparecen pares `CC0/CC32`, `CC8/CC40` u otros `CCn/CC(n+32)` solo en iPad, usar solo el CC primario y filtrar el secundario LSB en la ruta iPad/Bome;
- no mapear `CC34`, `CC32`, `CC40` ni ningun CC secundario hasta aislar origen.

## Cuarentena: Maschine izquierda AD 0047/0048

Reporte operativo: `AD 0047` y `AD 0048` probablemente vienen de un knob de Maschine MK2 izquierda por `midiuniversalis` y meten ruido.

Evidencia adicional en iPad / Bome Network: el log muestra `MIDI OUT BN midiuniversalis Virtual Out: AD 00 47`, seguido por trafico `From midiuniversalis` hacia `BN midiuniversalis Virtual Out`. Esto confirma que `AD 00 47` esta llegando a la capa iPad/Bome y debe quedarse en cuarentena.

Actualizacion urgente: `AD 00 47` y `AD 00 48` siguen saliendo y producen sonido tipo trompeta. Lectura tecnica: `AD` es status MIDI de familia `A0-AF`, es decir polyphonic aftertouch en canal wire `13` / canal humano `14`, no un CC normal. Esto queda como bloqueo de live hasta filtrar la familia `AD` por la ruta `midiuniversalis`.

Accion inmediata:

- apagar logicamente esos mensajes;
- permitir log crudo para diagnostico;
- no aprenderlos en djay Pro;
- no reenviarlos como accion de Mapping Universalis;
- no asignarles funcion hasta identificar el knob fisico exacto.
- bloquear `AD 00 47` y `AD 00 48` antes de cualquier salida que pueda llegar a un sintetizador, djay Pro, Maschine o Microsoft GS Wavetable Synth;
- si no hay filtro por mensaje, deshabilitar temporalmente la ruta `From midiuniversalis -> BN midiuniversalis Virtual Out` o el destino que este generando la trompeta, y operar con fallback.

Estado en contrato JSON: `maschine_left_midiuniversalis_ad_0047_0048` en cuarentena.

## Prueba fisica inicial

La controladora si fue detectada por Windows/Python como:

```text
DJCONTROL MIX 2
```

Eventos MIDI reales capturados:

```text
note_on channel=2 note=5 velocity=127
note_on channel=2 note=5 velocity=0
note_on channel=2 note=6 velocity=127
note_on channel=2 note=6 velocity=0
note_on channel=2 note=7 velocity=127
note_on channel=2 note=7 velocity=0
```

Estado correcto: hardware fisico detectado y emitiendo MIDI. Pendiente: asociar cada nota/CC con su control fisico exacto.

## Ruta canonica

La ruta canonica del live queda en:

```text
static/official/primera netrega oficial v2/dist/official/mayantraktor-live/
```

Se usa esta ruta porque el paquete oficial activo indicado vive en `static/official/primera netrega oficial v2/dist/official`. El modulo queda interno al paquete y no requiere servidor ni puerto propio.

## Registro de traspaso al oficial

Este modulo empezo como preparacion operativa de MayanTraktor Live y luego se fijo dentro del paquete oficial activo. El estado canonico actual es:

- portal unico: `:8800`;
- paquete servido: `static/official/primera netrega oficial v2/dist/official`;
- vista operativa consolidada: `midi/mayan-mapper.html#mayantraktor-live`;
- soporte documental/fuentes: `mayantraktor-live/`;
- Mayan Mapper interno: `midi/mayan-mapper.html`;
- mappings fuente: `mayantraktor-live/source-mappings/mayan.mappings/`.

Durante la normalizacion se usaron copias temporales locales de los `.djayMidiMapping` solo para lectura y parseo. Esas copias temporales fueron retiradas; la fuente valida queda exclusivamente dentro de `source-mappings/mayan.mappings/`.

No se creo app paralela, servidor nuevo, puerto nuevo, dependencia CDN de JavaScript ni backend nuevo para este traspaso. La API `/api/status` queda pendiente hasta levantar el gateway `unicornd` real; mientras tanto `:8800` funciona como servidor estatico provisional del paquete oficial.

## Integracion con Bastion

El modulo ya esta registrado en `manifest.json` como `mayantraktor-live` con estado `demo`. La siguiente etapa no es crear otra app ni otro puerto: es normalizar los mappings reales importados y conectarlos al flujo existente.

1. Mantener `mayantraktor-live/index.html` como modulo interno.
2. Agregar link desde `midi-mappings.html` si se requiere acceso directo.
3. Agregar link desde `midi/station.html` o `midi/mayan-mapper.html` como perfil operativo.
4. Si se usa endpoint, tomarlo solo de `assets/endpoints-config.js` y mantenerlo detras del gateway existente.
5. Convertir `source-mappings/` + `mayantraktor-mapping.json` en contrato consumible por Mayan Mapper.
6. No crear servidores, puertos ni HTML raiz paralelos.

## Seguridad

- No matar procesos directamente desde botones fisicos sin confirmacion.
- No cambiar salida de audio del sistema sin fallback.
- No depender de Bluetooth para el live; usar USB.
- No borrar mappings Traktor existentes sin exportarlos antes.
- No asumir que un control fisico ejecuta una accion hasta asociarlo con su codigo MIDI real.

## Archivos

- `ARQUITECTURA-GENERAL-MAYANTRAKTOR.md`: arquitectura maestra, autoridad documental, topología, roles, capas, seguridad y estado.
- `live-checklist.md`: checklist antes del live.
- `mapping-table.md`: tabla inicial de mapping.
- `defects-log-template.md`: plantilla de bitacora de fallas.
- `mayantraktor-mapping.json`: contrato provisional de Mapping Universalis.
- `device-aliases.json`: alias estables de controladores para no depender del nombre visible cambiante de djay/Windows/Bome.
- `captures-2026-07-10-bome-midi2.md`: captura cruda Bome + Windows MIDI 2 con endpoints y canales confirmados.
- `open-live-tools.ps1`: abre herramientas de verificacion, sin acciones destructivas.
- `source-mappings/mayan.mappings/`: copia oficial de mappings reales importados.
