# Mapping Table - MayanTraktor Live

Estado del modulo: `demo`.

Esta tabla deriva de los archivos reales importados en:

```text
mayantraktor-live/source-mappings/mayan.mappings/
```

No se declaran bindings boton->accion como funcionales hasta asociar cada mensaje MIDI con su control fisico exacto.

## Canon aplicado

Fuente canonica: `ART-025` / `::::mayan::mirror::::` / `::::mayan::traktor::mapeado::espejo::::`.

Reglas aplicadas en esta tabla:

- el hardware fisico no cambia de identidad;
- la lectura Mayan espejo es visual/logica;
- la imagen nativa no cambia y no debe presentarse como si hubiera cambiado el hardware;
- el display de hardware fisico debe permanecer oculto o neutral por defecto cuando exista riesgo de confundirlo con mirror;
- la lectura mirror solo debe mostrarse cuando el operador active `Mayan Mirror`;
- `source_mapping_id` preserva el mapping funcional;
- canal/layer distingue base y espejo;
- `function` no es lo mismo que `mapping`;
- si falta captura fisica, el estado queda `pendiente`, no inferido.

Campos minimos para cerrar un binding:

| Campo | Significado |
| --- | --- |
| `physical_control_id` | Identidad del control fisico tal como existe en la controladora. |
| `technical_midi_identity` | Mensaje real: tipo, canal, data/nota/CC, valor/rango. |
| `mirror_logical_id` | Lectura Mayan espejo si aplica; no reemplaza la identidad fisica. |
| `source_mapping_id` | Accion o control preservado desde el mapping fuente. |
| `function` | Intencion operativa humana, por ejemplo `context_play` o `process_stop`. |
| `output_action` | Salida final Windows/Traktor/audio/voz/RPA/Bastion. |
| `verification_status` | `confirmed`, `candidate_from_source`, `pending_physical_capture` o `blocked`. |

## Fuentes reales leidas

| Fuente | Tipo | Lectura operativa |
| --- | --- | --- |
| `DjayPro/Mayan.Sync.midiMapping` | Djay Pro MIDI mapping | XML valido minimo: dispositivo `Mayan.Sync`, sin entradas de controles. |
| `DjayPro/local-djay-mappings/mayanmovil Hercules DJControl Mix Edit.djayMidiMapping` | Djay Pro MIDI mapping real | Mapping Hercules DJControl Mix, 110 `keyPath` djay Pro. Incluye master/monitor level, line volumes, filters, jog, play/cue/sync, speed, hot cues y samplers. |
| `DjayPro/local-djay-mappings/Mayan Sync - Traktor Kontrol X1 - 1.djayMidiMapping` | Djay Pro MIDI mapping real | Mapping Traktor X1 para djay Pro, 55 `keyPath`. Incluye instant FX, mute y unmixer para decks 1-4. |
| `DjayPro/local-djay-mappings/Mayan Sync - midiuniversalis.djayMidiMapping` | Djay Pro MIDI mapping real | Mapping midiuniversalis para djay Pro, 48 `keyPath`. Incluye controles de unmixer/stems e instant FX. |
| `DjayPro/local-djay-mappings/Maschine MK2 In.djayMidiMapping` | Djay Pro MIDI mapping real | Mapping Maschine MK2 para djay Pro, 84 `keyPath`. |
| `DjayPro/manifest-djay.json` | Manifest | Declara `Mayan.Sync.midiMapping`, 109 bytes, SHA256 registrado. |
| `Maschine/manifest-maschine.json` | Manifest | Declara `MaschineMK2_MayanSync_2025-08-12_v2.ncm`, SHA256 registrado. |
| `Traktor/Configuration.ncc` | Native Instruments Controller Editor | Contiene plantillas NI para Traktor/Maschine/Komplete; no expone acciones Bastion directas. |
| `Maschine/MaschineMK2_MayanSync_2025-08-12_v2.ncm` | Native Instruments Controller Editor | Contiene mapas NI internos; nombre de archivo MayanSync, pendiente asociar a controles operativos. |
| `Maschine/maschine mkii Configurationmsi.ncc` | Native Instruments Controller Editor | Configuracion Maschine MKII/MSI; pendiente asociar a controles operativos. |
| `esquema crudo.xlsx` | Esquema operativo | Describe equipos, software y dispositivos visibles por Maschine, rtpMIDI y Djay Pro. |
| `verify-*.json` | Verificacion | Confirma symlinks/importacion historica para Djay Pro y Maschine. |

## Dispositivos y rutas logicas detectadas desde fuentes

| Ambito | Dispositivos / software | Estado |
| --- | --- | --- |
| `midiuniversalis` | Maschine MKII izquierda blanca, Komplete Kontrol M32, Hercules DJControl Mix | Fuente XLSX |
| `msi` / `TERRA-OPERATION` | Maschine MKII derecha negra, Traktor X1, Behringer UMC404HD | Fuente XLSX |
| rtpMIDI | Sesion `midiuniversalis` conectada hacia `terra-operations`; salidas con Microsoft Synth adicional | Fuente XLSX |
| Djay Pro | Dispositivos posibles: Behringer, Terra-Operations, Traktor, Maschine MKII | Fuente XLSX |
| Maschine 2 | Ve Maschine MKII in/out, Traktor, Terra-Operations, Behringer | Fuente XLSX |

## Configuracion observada en Bome / djay Pro / Maschine

Estas rutas vienen de captura visual del operador y quedan como configuracion de live, no como binding MIDI cerrado.

| Sistema | Ruta observada | Estado |
| --- | --- | --- |
| MSI / Bome | `DJCONTROL MIX -> To midiuniversalis ipad` | Correcta segun operador |
| MSI / Bome | `From midiuniversalis -> midiuniversalis Virtual Out` | Correcta segun operador |
| MSI / Bome | `From midiuniversalis -> To midiuniversalis` | Correcta segun operador |
| MSI / Bome | `Maschine MK2 MIDI In -> To midiuniversalis ipad` | Correcta segun operador |
| MSI / Bome | `Traktor Kontrol X1 Midi -> To midiuniversalis ipad` | Correcta segun operador |
| midiuniversalis main / Bome | `KOMPLETE KONTROL M32 MIDI -> To midiuniversalis main` | Correcta segun operador |
| midiuniversalis main / Bome | `Maschine MK2 In -> To midiuniversalis ipad` | Correcta segun operador |
| midiuniversalis main / Bome | `Maschine MK2 In -> To midiuniversalis main` | Correcta segun operador |
| iPad / Bome Virtual MIDI Ports | `midiuniversalis` conectado | Confirmado por captura |
| iPad / Bome Virtual MIDI Ports | `midiuniversalis main` conectado | Confirmado por captura |
| iPad / Bome MIDI Router | `BN midiuniversalis main Virtual In -> To midiuniversalis main` | Confirmado por captura |
| iPad / Bome MIDI Router | `BN midiuniversalis main: midiuniversalis Virtual In -> midiuniversalis main: midiuniversalis` | Confirmado por captura |
| iPad / Bome MIDI Router | `BN midiuniversalis Virtual In -> To midiuniversalis` | Confirmado por captura |
| iPad / Bome MIDI Router | `BN terra-operations: midiuniversalis Virtual In -> BN midiuniversalis Virtual Out` | Confirmado por captura |
| iPad / Bome MIDI Router | `From midiuniversalis -> BN midiuniversalis Virtual Out` | Confirmado por captura |
| iPad / Bome MIDI Router | `From midiuniversalis main -> BN midiuniversalis main Virtual Out` | Confirmado por captura |
| djay Pro / Maschine MIDI Input | `Maschine MK2 In` habilitado | Confirmado por captura |
| djay Pro / Maschine MIDI Output | `Maschine MK2 Out` habilitado | Confirmado por captura |

Regla: no mezclar identidad fisica con ruta mirror. `Maschine MK2 izquierda` conserva identidad fisica; `midiuniversalis` y canal operativo `14` describen la capa/ruta.

## Topologia de audio observada

| Elemento | Ruta fisica / logica | Uso live |
| --- | --- | --- |
| Windows / djay Pro | Behringer UMC404HD canales `1-2` | Salida principal |
| Fallback Windows | Hub HP G5 hacia canales `1-2` | Evitar perdida si falla USB |
| iPad | Doble RCA convertido a `6.5 mm` | Entrada live |
| Maschine izquierda + M32 | `6.5 mm` hacia Behringer canal `3` / `OUT 3` | Fuente importante live |
| USB Anker | USB Anker -> `3.5 mm` -> Behringer canal `4` | Entrada canal 4 |
| Mini | Synaptics line out -> RCA Monster -> `6.5 mm` | Audio Mini |
| MSI | Realtek roto post `24H2`; no usar como fuente audio | Evitar trabajo de drivers en live |
| Sonos 5 | Line-In cableado | Prioritario para evitar delay/latencia |

## Pendientes Sonos API para Mapping Universalis

| Control deseado | Accion Sonos | Estado |
| --- | --- | --- |
| Boton MIDI `line_in_on` | Activar Line-In, solo ON | Pendiente recuperar API Sonos |
| Knob MIDI `sonos_volume` | Volumen Sonos con rango seguro | Pendiente recuperar API Sonos |
| Boton/knob `sonos_bass_ultra` | Activar o graduar bass ultra | Pendiente confirmar API exacta |

Regla: si la API Sonos no responde, operar manualmente y no disparar toggles ambiguos desde pads.

## Captura fisica local ya observada

Puerto detectado:

```text
DJCONTROL MIX 2
```

Mensajes capturados, aun sin asociacion fisica cerrada:

| Mensaje | Estado |
| --- | --- |
| `note_on channel=2 note=5 velocity=127/0` | Pendiente asociar a control |
| `note_on channel=2 note=6 velocity=127/0` | Pendiente asociar a control |
| `note_on channel=2 note=7 velocity=127/0` | Pendiente asociar a control |

## Situacion actual de mappings djay Pro

| Archivo | Controles djay detectados | Uso actual |
| --- | ---: | --- |
| `mayanmovil Hercules DJControl Mix Edit.djayMidiMapping` | 110 | Fuente principal para Hercules DJControl Mix. |
| `Mayan Sync - Traktor Kontrol X1 - 1.djayMidiMapping` | 55 | Fuente para Traktor X1 operando djay Pro. |
| `Mayan Sync - midiuniversalis.djayMidiMapping` | 48 | Fuente general midiuniversalis. |
| `Maschine MK2 In.djayMidiMapping` | 84 | Fuente Maschine MK2 para djay Pro. |
| `Mayan.Sync.midiMapping` | 0 | Stub historico: declara dispositivo, no acciones. |

## Primer mapping Universalis registrado

Registro: `00_universalis` / `00 Universalis`.

| Campo | Valor |
| --- | --- |
| Consola | Mayan Traktor |
| Declaracion operador | Surten efectos juridicos; proceder al registro |
| Politica legal | Declaracion del operador registrada; pendiente revision `/lex`, no conclusion juridica automatica |
| Control fisico descrito | Boton verde que Traktor enciende en `Hotcue` |
| Estado visual | Verde / Hotcue |
| Candidatos fuente | `padModeHotCue` deck 1 `note ch=1 data=15`; `padModeHotCue` deck 2 `note ch=2 data=15` |
| Identidad MIDI exacta | Pendiente captura fisica del boton verde |
| Estado | `registered_pending_hardware_midi_capture` |

Regla: `00_universalis` queda como primer registro de consola Mayan Traktor, pero no ejecuta accion hasta confirmar hardware fisico, canal, data y fuente exacta.

## Maschine izquierda - valores originales midiuniversalis

Fuente real: `DjayPro/local-djay-mappings/Mayan Sync - midiuniversalis.djayMidiMapping`.

Estos valores quedan presentes para consulta y correlacion. No se infiere identidad fisica de `Shift A` hasta captura.

| Canal fuente | Canal humano | Conteo | Datos | Lectura fuente |
| --- | ---: | ---: | --- | --- |
| `13` | `14` | 20 | `64-75` | `turntable1` unmixer muted 1-4 + instant FX 1-8 |
| `13` | `14` | 20 incluido | `40-47` | `turntable3` unmixer muted 1-4 + instant FX 1-4 |
| `0` | `1` | 24 | `52-63` | `turntable2` unmixer muted 1-4 + instant FX 1-8 |
| `0` | `1` | 24 incluido | `28-39` | `turntable4` unmixer muted 1-4 + instant FX 1-8 |
| `1` | `2` | 4 | `24-27` | `turntable4` unmixer solo 1-4 |

### Maschine izquierda - Page A FX confirmados

Numeracion Native Instruments: `pad_1` es inferior izquierdo; avanza de izquierda a derecha y de abajo hacia arriba.

Fuente original preservada: `Mayan Sync - midiuniversalis.djayMidiMapping`.

Mapping persistente activo: `TU-Bas Maschine Left Page A.djayMidiMapping`, SHA256 `9441B4C508C1AA8F9CA9A5852443FA66175DE1ECC1D6673E0487A703232A0F52`, Note, source channel `13` / canal humano `14`.

| Pad fisico Native | Nota Controller Editor | Funcion | Accion fuente djay Pro | MIDI fuente |
| --- | --- | --- | --- | --- |
| `pad_13` | `C0` | `FX1` | `turntable1.instantFx1` | Note ch=13 data=24 |
| `pad_14` | `C#0` | `FX2` | `turntable1.instantFx2` | Note ch=13 data=25 |
| `pad_15` | `D0` | `FX3` | `turntable1.instantFx3` | Note ch=13 data=26 |
| `pad_16` | `D#0` | `FX4` | `turntable1.instantFx4` | Note ch=13 data=27 |
| `pad_9` | `G#-1` | `FX5` | `turntable1.instantFx5` | Note ch=13 data=20 |
| `pad_10` | `A-1` | `FX6` | `turntable1.instantFx6` | Note ch=13 data=21 |
| `pad_11` | `A#-1` | `FX7` | `turntable1.instantFx7` | Note ch=13 data=22 |
| `pad_12` | `B-1` | `FX8` | `turntable1.instantFx8` | Note ch=13 data=23 |

Neural Mix Solo, fila media inferior:

| Pad fisico Native | Nota | Stem | Accion Deck 1 | MIDI fuente |
| --- | --- | --- | --- | --- |
| `pad_5` | `E-1` | Drums | `unmixerFourTrackChannel1Solo` | Note ch=13 data=16 |
| `pad_6` | `F-1` | Bass | `unmixerFourTrackChannel2Solo` | Note ch=13 data=17 |
| `pad_7` | `F#-1` | Harmonics | `unmixerFourTrackChannel3Solo` | Note ch=13 data=18 |
| `pad_8` | `G-1` | Vocals | `unmixerFourTrackChannel4Solo` | Note ch=13 data=19 |

Estado: asignacion funcional confirmada por operador y correlacionada con fuente real; pendiente prueba live control por control.

Neural Mix Solo Exclusive, fila inferior:

| Pad fisico Native | Stem | Accion Deck 1 | MIDI persistente |
| --- | --- | --- | --- |
| `pad_1` | Drums | `unmixerFourTrackChannel1SoloExclusive` | `F#-1`, Note ch=13 data=6 |
| `pad_2` | Bass | Pendiente aprender en djay Pro | Pendiente captura |
| `pad_3` | Harmonics | Pendiente aprender en djay Pro | Pendiente captura |
| `pad_4` | Vocals | Pendiente aprender en djay Pro | Pendiente captura |

La entrada de `pad_1` fue aprendida directamente por el operador en djay Pro. Las cuatro asignaciones anteriores de data `12-15` fueron retiradas por ser incorrectas; no se extrapolan notas para pads 2-4.

### Maschine izquierda - Page C / Deck 3

Fuente activa: `TU-Bas Maschine Left Page A.djayMidiMapping`, hash actual con Page A + Page C: `502C9AC36C7C65BFFBE96344DF9E44547F1704CAC9A92A9878DA4A8B43A8FC2D`.

Page C usa canal fuente zero-based `13` / canal humano `14`.

| Pad | Nota | Acción Deck 3 |
| ---: | --- | --- |
| 1 | `C2` | Solo Exclusive Drums |
| 2 | `C#2` | Solo Exclusive Bass |
| 3 | `D2` | Solo Exclusive Vocals |
| 4 | `D#2` | Pendiente; djay conserva `turntable3` sin acción |
| 5 | `E2` | Mute Drums |
| 6 | `F2` | Mute Bass |
| 7 | `F#2` | Mute Harmonic |
| 8 | `G2` | Mute Vocals |
| 9 | `G#2` | Instant FX 5 |
| 10 | `A2` | Instant FX 6 |
| 11 | `A#2` | Instant FX 7 |
| 12 | `B2` | Instant FX 8 |
| 13 | `C3` | Instant FX 1 |
| 14 | `C#3` | Instant FX 2 |
| 15 | `D3` | Instant FX 3 |
| 16 | `D#3` | Instant FX 4 |

Estado: 15 de 16 controles confirmados mediante capturas y archivo vivo. No se asigna `pad_4` hasta recibir su acción real.

## Controller Editor - primera pagina Maschine

## Regla locked: notas unicas por pagina y por Maschine

Cada Maschine fisica tiene su propio espacio de notas. Dentro de una misma MK2, ninguna pagina puede reutilizar una nota ya utilizada por otra pagina, aunque cambien canal MIDI, Deck, endpoint o capa lógica.

| Maschine | Paginas auditadas | Resultado |
| --- | --- | --- |
| Izquierda | A `6, 13-27`; B `24-39`; C `36-51` | **Falla:** B repite `24-27` de A y `36-39` de C |
| Derecha | B `24-39`; D `48-63` | Pasa para las paginas capturadas; no existe solapamiento |

Page B izquierda queda `BLOCKED_REQUIRES_CONTROLLER_EDITOR_REASSIGNMENT`. No debe mapearse ni bloquearse hasta asignarle 16 notas que no aparezcan en Page A ni Page C y volver a capturarla.

Regla de validacion: comparar el numero de nota sin considerar canal, Deck, aplicación o endpoint. Cualquier intersección entre paginas de la misma Maschine bloquea la entrega.

La prohibición aplica a todos los controles físicos: pads, teclas, knobs, encoders, faders, touch strips, botones y transportes. Ningún par puede repetir la identidad `physical_device_id + message_type + channel + data`, sin importar página o layer. Para pads/teclas, la nota tampoco puede repetirse entre páginas aunque cambie el canal.

Estado exigido antes de certificar cualquier controlador: `ZERO_DUPLICATE_MIDI_IDENTITIES_ALL_CONTROLS`.

Plano manual completo para corregir las ocho paginas de ambas MK2:
`controller-editor-8-pages-remap.md`.

El mismo documento integra M32 y Traktor X1. M32 comparte `midiuniversalis` con la MK2 izquierda y queda reservado para canal humano `15`, pendiente captura real. X1 conserva endpoint, canal y mensajes nativos.

Plano específico M32: `komplete-kontrol-m32-4-pages-remap.md`. Se aplica desde Komplete Kontrol standalone / MIDI Assignment Editor: cuatro páginas de 32 teclas y cuatro páginas de ocho knobs.

Plano específico Hercules: `hercules-djcontrol-mix-mapping-plan.md`. DJUCED `.djm` traduce mensajes a acciones; no sustituye la captura MIDI cruda del hardware.

Propuesta de identidad y geografía integral:
`mayantraktor-console-identity-proposal.md`. Define X1 como nodo `00`, cuatro familias sincronizadas, profundidad BASE/ADVANCED, espejo horizontal y capas de clasificación.

La sincronización propuesta respeta el espejo real: familia 1 BASE = izquierda A / derecha D / M32 página 1; familia 2 = B/C/2; familia 3 = C/B/3; familia 4 = D/A/4. La automatización remota permanece pendiente de prueba de capacidad.

## Canon locked - Maschine MK2 derecha / Deck 2

Archivo único: `TU-Bas Maschine Right Pages B-D Mirror.djayMidiMapping`.

SHA256 locked: `CAB9FFE02532BD1C55EA57DAA3BCF2C18600940C0635BA04423E1A4A47FC5800`.

| Pad | Nota | Canal fuente | Acción Deck 2 |
| ---: | --- | ---: | --- |
| 1 | `C3` | 2 | Solo Exclusive Vocals |
| 2 | `C#3` | 2 | Solo Exclusive Harmonic |
| 3 | `D3` | 2 | Solo Exclusive Bass |
| 4 | `D#3` | 2 | Solo Exclusive Drums |
| 5 | `E3` | 0 | Mute Vocals |
| 6 | `F3` | 0 | Mute Harmonic |
| 7 | `F#3` | 0 | Mute Bass |
| 8 | `G3` | 0 | Mute Drums |
| 9 | `G#3` | 0 | Instant FX 8 |
| 10 | `A3` | 0 | Instant FX 7 |
| 11 | `A#3` | 0 | Instant FX 6 |
| 12 | `B3` | 0 | Instant FX 5 |
| 13 | `C4` | 0 | Instant FX 4 |
| 14 | `C#4` | 0 | Instant FX 3 |
| 15 | `D4` | 0 | Instant FX 2 |
| 16 | `D#4` | 0 | Instant FX 1 |

Estado: `locked`. Confirmado mediante capturas del operador y archivo vivo de djay Pro. No modificar sin desbloqueo explícito.

Evidencia: foto del operador en Native Instruments Controller Editor con dos `Maschine Controller MK2`.

Regla ART-025: estas paginas son identidad nativa/editor. No cambian la lectura Mayan Mirror; se registran separadas de `native_physical_id`, nota, source mapping y mirror.

| Maschine | Primera pagina observada | Grupo activo | Estado |
| --- | --- | --- | --- |
| Izquierda | `Pad Page A` | `A` | Foto confirmada; transcripcion parcial |
| Derecha | `Pad Page D` | `D` | Foto confirmada |

### Maschine izquierda - Pad Page A

Pad 13 aparece seleccionado como `C0`, canal humano `14`, tipo `Note`, modo `Gate`, velocity `0-127`, `Color On: White`, `Color Off: Magenta`.

| Fila fisica | Pad 13/9/5/1 | Pad 14/10/6/2 | Pad 15/11/7/3 | Pad 16/12/8/4 |
| --- | --- | --- | --- | --- |
| Superior | `pad_13 = C0` | `pad_14 = C#0` | `pad_15 = D0` | `pad_16 = D#0` |
| Media superior | `pad_9 = G#-1` | `pad_10 = A-1` | `pad_11 = A#-1` | `pad_12 = B-1` |
| Media inferior | `pad_5 = E-1` | `pad_6 = F-1` | `pad_7 = F#-1` | `pad_8 = G-1` |
| Inferior | `pad_1 = pendiente confirmar zoom; candidato C-1` | `pad_2 = C#-1` | `pad_3 = D-1` | `pad_4 = D#-1` |

### Maschine derecha - Pad Page D

Pad 1 aparece seleccionado como `C2`.

| Fila fisica | Pad 13/9/5/1 | Pad 14/10/6/2 | Pad 15/11/7/3 | Pad 16/12/8/4 |
| --- | --- | --- | --- | --- |
| Superior | `pad_13 = C3` | `pad_14 = C#3` | `pad_15 = D3` | `pad_16 = D#3` |
| Media superior | `pad_9 = G#2` | `pad_10 = A2` | `pad_11 = A#2` | `pad_12 = B2` |
| Media inferior | `pad_5 = E2` | `pad_6 = F2` | `pad_7 = F#2` | `pad_8 = G2` |
| Inferior | `pad_1 = C2` | `pad_2 = C#2` | `pad_3 = D2` | `pad_4 = D#2` |

## Controller Editor - plantilla Basic CC

Evidencia: foto del operador de Native Instruments Controller Editor en plantilla/pagina `Basic`.

Estado: foto confirmada, lado de Maschine pendiente de confirmacion por operador.

Control seleccionado:

| Campo | Valor |
| --- | --- |
| Control | `PLAY` inferior izquierdo |
| CC | `40` |
| Estado visual | Seleccion roja |
| Politica | No ejecutar hasta confirmar lado fisico, ruta y app destino |

### CC visibles por grupos

| Grupo | Controles visibles |
| --- | --- |
| Top / knobs | `CC8`, `CC0`, `CC1`, `CC9`; `CC10`, `CC2`, `CC3`, `CC11`; `CC12`, `CC4`, `CC5`, `CC13`; `CC14`, `CC6`, `CC7`, `CC15` |
| Grandes / FX / Hotcue | `CC16`, `CC17`, `CC20`, `CC22`, `CC21`, `CC23`, `CC26`, `CC27` |
| In/Out / Beat | `CC28`, `CC30`, `CC29`, `CC31`, `CC32`, `CC34`, `CC33`, `CC35` |
| Cue / Play / Sync | `CC36`, `CC38`, `CC37`, `CC39`, `CC40`, `CC42`, `CC41`, `CC43` |
| Centro | `SHIFT` y `HOTCUE` visibles sin CC mostrado en la captura |

Lectura operativa inicial:

| CC | Etiqueta visible | Estado |
| --- | --- | --- |
| `CC40` | `PLAY` izquierdo | Candidato nativo/editor; seleccionado en foto |
| `CC41` | `PLAY` derecho | Candidato nativo/editor |
| `CC42` | `SYNC` izquierdo | Candidato nativo/editor |
| `CC43` | `SYNC` derecho | Candidato nativo/editor |

Regla ART-025: estos CC son identidad tecnica nativa/editor. No son identidad mirror salvo que una capa Mayan Mirror los registre explicitamente.

### Intencion Shift A

`Shift A` queda registrado como candidato para:

```text
shift_A_administration_dispatch
```

Intencion: desplegar sistemas de administracion propios, mostrar nombres/apellidos solo cuando la fuente sea publica/transparente o autorizada por `/lex`, y correlacionar indices correspondientes como salud, red federal, conocimiento federal/general, indicadores Republica, zona de afectados y modelo zona.

Reglas:

- no exponer ramas no publicas sin base `/lex`;
- si se detecta rama no publica aplicable, se registra diagnostico y revision juridica;
- no hay castigo automatico desde mapping;
- puede abrirse propuesta de sancion normativa solo tras revision competente;
- registrar fecha de conocimiento el mismo dia cuando proceda.

## Carga solida por controlador

Convencion de canal:

- `source channel 13` en archivos djay Pro se documenta como canal operativo `14` cuando se habla en numeracion humana 1-16.
- No usar canal humano `16` ni wire `15` para mappings musicales normales; estan reservados por ART-025 para mensajeria Bastion.

| Controlador | Ruta / puerto operativo | Fuente mas solida | Controles fuente | Canal operativo | Estado |
| --- | --- | --- | ---: | --- | --- |
| Hercules DJControl Mix | USB / `DJCONTROL MIX 2` | `mayanmovil Hercules DJControl Mix Edit.djayMidiMapping` | 110 | 1, 2, 3, 5, 6, 7, 8 | Fuente real confirmada; pendiente asociacion fisica control por control |
| Traktor Kontrol X1 | TERRA-OPERATION / Traktor X1 | `Mayan Sync - Traktor Kontrol X1 - 1.djayMidiMapping` | 55 | 1 | Fuente real confirmada; pendiente asociacion fisica control por control |
| Maschine MK2 izquierda | `midiuniversalis` | `Mayan Sync - midiuniversalis.djayMidiMapping` | 48 | 14 | Ruta confirmada por operador; fuente real confirmada |
| Maschine MK2 derecha | TERRA-OPERATION / `Maschine MK2 In` | `Maschine MK2 In.djayMidiMapping` | 84 | 1, 2 | Fuente real confirmada; pendiente asociacion fisica control por control |
| Komplete Kontrol M32 | `midiuniversalis` | Geometria visual `m32.json`; mapping MIDI dedicado pendiente | 0 | 14 | Ruta confirmada por operador; pendiente captura MIDI real |

## Arquitectura por capas

Regla madre: cada controladora conserva su identidad fisica nativa. Las capas, paginas, espejos y colores son lectura logica/visual sobre ART-025, no cambio del hardware.

Orden de capas:

| Orden | Capa | Funcion |
| ---: | --- | --- |
| 1 | `physical_hardware_native` | Control fisico real: Hercules, Maschine, Traktor X1, M32 o teclado central. |
| 2 | `source_mapping_preserved` | Mapping fuente real cuando existe: `.djayMidiMapping`, `.ncc`, geometria oficial o captura. |
| 3 | `mayan_mirror_logical` | Lectura espejo Mayan, separada de la identidad fisica. |
| 4 | `color_zone_visual` | Zona visual por color asignable desde el software cuando exista mapa oficial. |
| 5 | `universalis_function` | Funcion humana: djay, Traktor, audio, voz, RPA, Bastion, administracion. |
| 6 | `safe_output_action` | Salida final certificada, verificada y con fallback. |

| Capa operativa | Controlador | Fuente | Estado | Regla espejo/color |
| --- | --- | --- | --- | --- |
| `layer_hercules_djcontrol_mix` | Hercules DJControl Mix | `mayanmovil Hercules DJControl Mix Edit.djayMidiMapping` | Fuente real confirmada; pendiente confirmar control fisico exacto | Color pendiente; mirror solo visual/logico |
| `layer_djay_maschine_left` | Maschine izquierda / `midiuniversalis` | `Mayan Sync - midiuniversalis.djayMidiMapping` | Fuente real confirmada; ruta canal operativo 14 | No cambiar identidad de pads; color pendiente |
| `layer_djay_maschine_right` | Maschine derecha / TERRA-OPERATION | `Maschine MK2 In.djayMidiMapping` | Fuente real confirmada; pendiente confirmar pads fisicos | Mirror visible solo con `Mayan Mirror` |
| `layer_traktor_x1` | Traktor Kontrol X1 | `Mayan Sync - Traktor Kontrol X1 - 1.djayMidiMapping` | Fuente real confirmada; pendiente control fisico | Color pendiente; mirror opcional |
| `layer_m32_midiuniversalis` | Komplete Kontrol M32 | `m32.json`; mapping MIDI dedicado pendiente | Geometria visual confirmada; captura MIDI pendiente | Canal operativo 14 declarado; color pendiente |
| `layer_teclado_central_universalis` | Teclado central Universalis mecanico | Mapping de teclado pendiente | Declarado por operador; captura pendiente | Espejo por paginas y zonas de color |

## Teclado central Universalis

El teclado central Universalis se registra como superficie mecanica multi-capa. No se asignan teclas ni MIDI hasta captura real.

| Pagina | Uso | Estado |
| --- | --- | --- |
| `base` | Operacion normal | Pendiente captura de teclas |
| `mayan_mirror` | Mostrar lectura espejo sin cambiar identidad fisica | Pendiente captura; activacion por `Mayan Mirror` |
| `administracion` | Atajos administrativos propios con revision `/lex` y auditoria | Pendiente captura y autorizacion |
| `color_zones` | Clasificar zonas visuales por color asignable por software | Pendiente mapa oficial de colores |

Campos minimos para cerrar una zona de color:

| Campo | Regla |
| --- | --- |
| `zone_id` | Identificador estable de la zona. |
| `color_name` / `hex_or_device_color` | Color asignado por software o dispositivo. |
| `device_id` y `page_id` | Controladora y pagina/capa donde aplica. |
| `native_physical_id` | Identidad fisica real, no modificable por el color. |
| `technical_midi_identity` | Mensaje real capturado. |
| `mirror_logical_id` | Lectura espejo si aplica. |
| `source_mapping_id` | Mapping fuente preservado si existe. |
| `allowed_output_scope` | Alcance permitido: djay, Traktor, audio, voz, RPA, Bastion, administracion. |
| `verification_status` | Pendiente, candidato, confirmado o bloqueado. |

Regla: el color ayuda a leer, segmentar y asegurar; no autoriza por si solo una accion ni reemplaza la identidad MIDI/fisica.

## Sub-displays por pad cuadrado

Contrato heredado: `sistemas/temperatura-universalis.json#pad_subdisplay_model`.

Este modelo aplica a pads cuadrados de Maschine y a cualquier pad cuadrado futuro del sistema. Es un modelo de datos para diseño/programacion; no modifica todavia el HTML/CSS visual.

| Elemento | Regla |
| --- | --- |
| Cantidad maxima | Hasta 4 sub-displays por pad. |
| Tamano | `1x1px` cada sub-display. |
| Posicion | Dentro del cuadrado que delimita la geometria del pad. |
| Esquinas | `top_left`, `top_right`, `bottom_left`, `bottom_right`. |
| Color | El color de la categoria Temperatura Universalis correspondiente. |
| Alcance | Maschine izquierda, Maschine derecha y cualquier pad cuadrado del sistema. |
| Seguridad | El color/sub-display no cambia identidad fisica, MIDI ni `source_mapping_id`. |

### Modelos de pad

| Modelo | Estado modificador | Uso | Estado |
| --- | --- | --- | --- |
| `no_shift` | `shift_off` | Lectura base del pad sin modificador. | Pendiente captura pad por pad |
| `with_shift` | `shift_on` | Lectura alternativa del pad con Shift activo. | Pendiente captura pad por pad |

### Capa de valores modificables para reporte

| Campo | Uso |
| --- | --- |
| `temperature_value` | Valor de Temperatura Universalis del pad o categoria. |
| `confidence` | Confianza de lectura/captura. |
| `risk_value` | Riesgo operacional. |
| `sync_value` | Estado de sincronizacion. |
| `latency_value` | Lectura de latencia si aplica. |
| `operator_note` | Nota humana del operador. |
| `verification_status` | Pendiente, candidato, confirmado o bloqueado. |

Regla: estos valores sirven para reporte, diagnostico y analisis; no ejecutan acciones por si solos.

### Layers de listening e iconologia

Durante `listening`, el sistema debe poder mostrar estos valores como layers de informacion navegables. La iconologia sirve para orientar al operador, no para ejecutar acciones.

| Layer | Iconologia | Fuente de valor | Navegacion permitida |
| --- | --- | --- | --- |
| `category_color` | Pixel/color de categoria `1x1px` en esquina del pad | Slots de categoria del pad | Filtrar por banda/color |
| `temperature_value` | Termometro | `temperature_value` | Ordenar o enfocar por intensidad |
| `verification_status` | Escudo/check | `verification_status` | Filtrar pendiente, candidato, confirmado o bloqueado |
| `risk_value` | Triangulo de alerta | `risk_value` | Abrir inspector de conflicto/ruido |
| `sync_value` | Flechas sync | `sync_value` | Abrir contexto SyncUniversalis/Mayan Sync |
| `shift_model` | Tecla Shift | `no_shift` / `with_shift` | Comparar modelos con y sin shift |

Acciones seguras de navegacion:

| Accion | Regla |
| --- | --- |
| `focus_pad` | Enfoca el pad escuchado. |
| `open_pad_inspector` | Abre capas de informacion del pad. |
| `toggle_info_layer` | Muestra/oculta layer informativo. |
| `filter_by_color_band` | Filtra por color/categoria. |
| `filter_by_verification_status` | Filtra por estado de verificacion. |
| `compare_no_shift_with_shift` | Compara lectura base vs lectura Shift. |

Regla: navegar, filtrar o inspeccionar no dispara MIDI, audio, video ni accion Bastion.

### Canal One tecnico primario

Contrato: `sistemas/temperatura-universalis.json#technical_primary_channel`.

`channel_one` es canal logico de reporte primario para tecnicos. No es puerto nuevo y no declara un canal MIDI fisico. Su funcion es que todo evento escuchado pueda decir claramente que tipo de cosa es.

| Clase | Color | Iconologia | Mensaje para tecnico | Regla |
| --- | --- | --- | --- | --- |
| `audio_signal` | Azul | Speaker/wave | Esto es audio | Reportar ruta audio; no cambiar salida sin fallback |
| `dll_module` | Violeta | Modulo/bloque | Esto es un DLL o modulo cargado | Reportar modulo; no bloquear sin diagnostico |
| `midi_note` | Verde | Nota musical | Esto es una nota MIDI | Puede asociarse a pad/boton tras captura |
| `midi_cc` | Cyan | Sliders | Esto es un control MIDI CC | Cuidar duplicados/14-bit antes de aprender |
| `midi_aftertouch_noise` | Rojo | Alerta | Esto es aftertouch o ruido MIDI | No aprender ni reenviar sin filtro |
| `usb_pnp_starting` | Amarillo | USB | Esto es USB PnP iniciandose o cambiando estado | Esperar enumeracion/estabilidad antes de mapear |
| `unknown_unclassified_signal` | Gris | Interrogacion | Senal no clasificada | Registrar y no ejecutar |

Regla: el listener debe emitir clasificacion primaria por `channel_one` cuando pueda reconocer el evento. Si no lo reconoce, usar `unknown_unclassified_signal`.

### Catalogo cargado de arranque

Contrato: `sistemas/temperatura-universalis.json#loaded_catalog_continuity_contract`.

Regla: Mayan MIDI no viene desnudo. Debe cargar un JSON de catalogo suficientemente detallado para entender contexto, escuchar, navegar y empezar operacion controlada sin reconstruir todo manualmente.

| Bloque requerido | Contenido minimo |
| --- | --- |
| `identity` | Schema, id, version, estado, ruta canonica. |
| `source_context` | Archivo fuente, mapping fuente, hash si existe, operador, sesion de captura, plataforma. |
| `devices_and_routes` | Controladora, identidad fisica, ruta, puertos logicos, transporte y estado. |
| `technical_primary_classification` | Clase `channel_one`, color, icono, mensaje tecnico, evento crudo y parseado. |
| `mapping_layers` | Hardware fisico, MIDI tecnico, mirror, source mapping, color, funcion y salida segura. |
| `pad_display_and_report_values` | Pad, sub-displays, modelo sin shift, modelo con shift, valores editables y verificacion. |
| `safety_and_execution` | Si puede ejecutar, certificacion, verificacion, correccion, fallback, bloqueos y estado `/lex`. |
| `continuity` | Ultimo estado bueno, pendientes, conflictos, deduplicacion, auditoria y siguientes pasos. |

Comportamiento de arranque:

| Regla | Valor |
| --- | --- |
| Cargar catalogo primero | Si |
| Permitir listening sin ejecucion | Si |
| Permitir navegacion desde catalogo | Si |
| Permitir ejecucion sin verificacion | No |
| Si falta catalogo | `safe_listener_only_mode_no_mapping_execution` |
| Si falta dato | `pending_unknown`, no adivinar |

### Division mirror/source/admin

Regla: para efectos de mirror mapping hay division entre `mapping_universalis` en ON para `mirage.universalis` y el `source` con/sin `Shift`.

| Capa | Estado / modificador | Uso | Ejecuta |
| --- | --- | --- | --- |
| `mapping_universalis_on` | ON | Activa lectura mirror/logica para `mirage.universalis`, catalogo y navegacion. | No |
| `source_without_shift` | `shift_off` | Lee codigo fuente nativo sin mirror: MIDI tecnico, `source_mapping_id`, plataforma afectada. | No |
| `source_with_shift` | `shift_on` | Entra al menu admin de mappings para aprender/clasificar codigos. | No |

Campos que debe aprender el menu admin:

| Campo | Significado |
| --- | --- |
| `raw_code` | Codigo o mensaje crudo recibido. |
| `technical_midi_identity` | Tipo, canal, nota/CC/data real. |
| `source_mapping_id` | Mapping fuente preservado. |
| `mirror_state` | `with_mirror`, `without_mirror` o `mirror_unknown_pending_capture`. |
| `shift_state` | `shift_on` / `shift_off`. |
| `admin_menu_context` | Menu admin donde se aprendio. |
| `platform_affected` | Windows, iPad, iPhone, Traktor, djay Pro, Bastion, audio, Voice Access, RPA o pendiente. |
| `allowed_output_scope` | Alcance permitido tras verificacion. |
| `execution_allowed` | Siempre `false` hasta verificacion/certificacion. |

Regla: `Shift` abre aprendizaje/admin; no modifica mappings existentes, no ejecuta acciones destructivas y no decide salida final sin exportacion, verificacion y fallback.

## Cuarentena de ruido

| ID | Dispositivo / ruta | Mensaje reportado | Accion |
| --- | --- | --- | --- |
| `maschine_left_midiuniversalis_ad_0047_0048` | Maschine MK2 izquierda / `midiuniversalis` | `AD 0047`, `AD 0048` | Apagar logicamente: no mapear, no aprender, no reenviar como accion Mapping Universalis |

Evidencia iPad/Bome: `MIDI OUT BN midiuniversalis Virtual Out: AD 00 47`.

Lectura tecnica: `AD` pertenece a la familia MIDI `A0-AF`, polyphonic aftertouch. En este caso se lee como canal wire `13` / canal humano `14`, nota/data `00`, presion `47` o `48`. No tratar como CC de knob/fader.

Riesgo confirmado: sigue saliendo y puede producir sonido tipo trompeta si alcanza un sintetizador o destino musical.

Regla: estos mensajes pueden quedar en log crudo para diagnostico, pero no deben disparar accion, no deben entrar a djay learn y no deben alimentar salida final hasta identificar el control fisico exacto.

Accion de emergencia: filtrar/drop `AD 00 47` y `AD 00 48` en la ruta `midiuniversalis` antes de `BN midiuniversalis Virtual Out`. Si no hay filtro por mensaje disponible, deshabilitar temporalmente la ruta o el destino que produce la trompeta.

## Geometria visual disponible

| Controlador | Imagen | JSON visual | Controles visuales detectados |
| --- | --- | --- | ---: |
| Hercules DJControl Mix | `assets/console/djcontroller.jpg` | `assets/console/djcontroller.json` | 40 |
| Traktor Kontrol X1 | `assets/console/traktor.jpg` | `assets/console/traktor.json` | 50 |
| Maschine MK2 | `assets/console/maschine.jpg` | `assets/console/maschine.json` | 83 |
| Komplete Kontrol M32 | `assets/console/m32.png` | `assets/console/m32.json` | 68 |

## Capas ART-025 para MayanTraktor Live

| Capa | Regla | Aplicacion aqui |
| --- | --- | --- |
| Hardware fisico | Intocable | Hercules, X1, Maschine y M32 conservan identidad fisica real. |
| Identidad tecnica MIDI | Captura real | Se registra tipo de mensaje, canal y data/nota/CC segun fuente o listener. |
| Lectura mirror | Visual/logica | Puede existir `mirror_logical_id`, pero no cambia el control fisico. |
| Mapping preservado | Source first | Se toma de `source_mapping_id` cuando ya existe en `.djayMidiMapping` o `.ncc`. |
| Salida final | Operativa | Windows, Traktor, audio, Voice Access, RPA o Bastion; pendiente hasta prueba segura. |

## Regla critica Maschine derecha: Pad 13 fisico / Pad 16 espejo

Convencion fisica Native para Maschine 4x4:

```text
13 14 15 16
09 10 11 12
05 06 07 08
01 02 03 04
```

Para Maschine derecha, el pad fisico `13` es el superior izquierdo. En el mapping fuente real aparece como:

| Lectura | Valor |
| --- | --- |
| Hardware fisico Native | `pad_13` |
| Posicion fisica | superior izquierdo |
| Mapping fuente djay Pro | `turntable4.instantFx4` en mirror Page D |
| MIDI fuente | `note ch=1 data=60` |
| Canal humano | `2` |
| Lectura Mayan espejo | `pad_16` |

Regla ART-025: no decir que el pad fisico cambio de identidad. La forma correcta es: `native_physical_id = pad_13`, `mayan_mirror_id = pad_16`, preservando `source_mapping_id` y `technical_midi_identity`.

### Page D - mirror FX persistente

Archivo canónico único: `TU-Bas Maschine Right Pages B-D Mirror.djayMidiMapping`.

SHA256 actual: `A0B0CB6A2A175AE75CB94309C7362BFA3332D60B6B2B9873B01DF029F31FC8FF`.

La lectura se refleja horizontalmente sobre Deck 4:

```text
FX4  FX3  FX2  FX1
FX8  FX7  FX6  FX5
```

| Pad fisico derecho | Note ch=1 | Mirror ID | Accion Deck 4 |
| --- | ---: | --- | --- |
| `pad_12` | 59 | `pad_9` | `instantFx5` |
| `pad_11` | 58 | `pad_10` | `instantFx6` |
| `pad_10` | 57 | `pad_11` | `instantFx7` |
| `pad_9` | 56 | `pad_12` | `instantFx8` |

Captura actual corregida por el operador para la fila inferior:

| Pad fisico derecho | Nota | Note ch=1 | Accion Deck 4 |
| --- | --- | ---: | --- |
| `pad_1` | `C3` | 60 | `unmixerFourTrackChannel4SoloExclusive` - Vocals |
| `pad_2` | `C#3` | 61 | `unmixerFourTrackChannel3SoloExclusive` - Harmonics |
| `pad_3` | `D3` | 62 | `unmixerFourTrackChannel2SoloExclusive` - Bass |
| `pad_4` | `D#3` | 63 | `unmixerFourTrackChannel1SoloExclusive` - Drums |

Las entradas anteriores de Solo Exclusive en data `48-51` fueron eliminadas. Los FX1-FX4 que ocupaban data `60-63` tambien fueron retirados para evitar doble accion. Estado: XML validado; pendiente prueba en djay Pro.

### Page B - Deck 4 mirror persistente

Archivo combinado: `TU-Bas Maschine Right Pages B-D Mirror.djayMidiMapping`.

SHA256 actual locked: `7AFF28F038B7C0BCC9B8A1E9D82211E08242597F9920653CB5AA32DBB94DDA47`.

Page B usa Note, channel zero-based `0` / canal humano `1`, data `24-39`. La lectura fisica derecha queda:

| Fila | Pads fisicos de izquierda a derecha | Acciones Deck 4 |
| --- | --- | --- |
| Inferior | `1, 2, 3, 4` | FourTrack Solo Exclusive: Vocals, Harmonics, Bass, Drums |
| Media inferior | `5, 6, 7, 8` | Neural Mix Mute: Vocals, Harmonics, Bass, Drums |
| Media superior | `9, 10, 11, 12` | FX8, FX7, FX6, FX5 |
| Superior | `13, 14, 15, 16` | FX4, FX3, FX2, FX1 |

Esto conserva la identidad fisica Native y refleja horizontalmente la lectura funcional de la Maschine izquierda. `G1` fue corregido a `Neural Mix Mute (4ch: Drums)`.

Auditoria: Page B usa canal zero-based `0`, data `24-39`; la capa Deck 2 usa otras identidades MIDI. No hay repeticion de canal+data y no se requiere cambiar Controller Editor.

Estado: `locked`, XML validado y archivado. No modificar sin desbloqueo explicito.

La familia de acciones de la fila inferior fue corregida desde `unmixerGeneric...SoloExclusive` hacia `unmixerFourTrackChannel1-4SoloExclusive`, conforme al aprendizaje real hecho en djay Pro sobre la MK2 izquierda.

## Politica visual Mayan Mirror

Para fines de mappings, especialmente en `Maschine MK2 derecha`, la pantalla o capa visual puede mostrar una lectura mirror de lo que deberia interpretarse operacionalmente, pero eso no cambia el hardware fisico.

Regla de display:

| Estado UI | Display permitido | Regla |
| --- | --- | --- |
| Default | Hardware fisico oculto o neutral | No mostrar una reinterpretacion que parezca identidad fisica. |
| `Mayan Mirror` presionado/activo | Lectura mirror visible | Mostrar `mayan_mirror_id`, capa y fuente preservada. |
| Captura tecnica | Identidad MIDI visible | Mostrar mensaje real sin inferir mirror como fisico. |
| Revision ART-025 | Ambos con separacion explicita | Mostrar `native_physical_id` y `mayan_mirror_id` en columnas separadas. |

Para Maschine derecha:

```text
pantalla/mirror puede leer pad_16
hardware fisico sigue siendo pad_13
```

No hacer display del hardware fisico reinterpretado salvo que el operador active `Mayan Mirror` o abra una vista tecnica que separe claramente nativo, MIDI y mirror.

## Normalizacion Hercules DJControl Mix desde mapping real

Fuente: `DjayPro/local-djay-mappings/mayanmovil Hercules DJControl Mix Edit.djayMidiMapping`.

Convencion leida del archivo: `midiMessageType 1 = note`, `midiMessageType 3 = cc`. Los canales y datos se conservan como aparecen en el plist de djay Pro.

### Diagnostico doble CC

No asumir 14-bit todavia. Para knobs/faders de Hercules, cualquier CC secundario queda bloqueado hasta aislar origen.

Caso urgente:

| Control | Windows esperado | iPad/djay observado | Estado |
| --- | --- | --- | --- |
| Filtro izquierdo | `CC2` | `CC2 + CC34` | Pendiente prueba A/B |
| Crossfader | `CC0` | `CC0 + CC32` | Patron `+32`, probable MSB/LSB 14-bit en iPad |
| Filtro/fader lateral derecho | `CC8` o `CC40` segun captura | `CC40 + CC8` | Patron `+32`, orden pendiente de captura cruda |
| Filtro/fader lateral izquierdo | `CC8` o `CC40` segun captura | `CC8 + CC40` | Patron `+32`, orden pendiente de captura cruda |

Lectura tecnica: `CC0/CC32` y `CC8/CC40` son pares separados por `+32`, forma tipica de control MIDI 14-bit. Como no ocurre en Windows, no se debe cambiar el mapping Windows base; se debe aislar la ruta iPad/Bome/djay Pro.

Decision:

| Resultado A/B | Accion |
| --- | --- |
| `CC34` solo aparece con capa activa | Bloquear Mapping Universalis para knobs/faders o filtrar salida secundaria |
| `CC34` aparece directo | Revisar modo/perfil Hercules y mapeo djay Pro iPad |
| Pares `CCn/CC(n+32)` aparecen solo en iPad | Usar CC primario y filtrar secundario LSB en ruta iPad/Bome |
| Origen no aislado | No mapear `CC34`, `CC32`, `CC40` ni ningun CC secundario |

| Grupo | Accion fuente djay Pro | MIDI fuente |
| --- | --- | --- |
| Master | `mixer.masterLevel` | cc ch=0 data=3 |
| Monitor | `mixer.monitorLevel` | cc ch=0 data=4 |
| Crossfader | `mixer.crossfade` | cc ch=0 data=0 |
| Deck 1 volumen | `mixer.lineVolume1` | cc ch=1 data=0 |
| Deck 2 volumen | `mixer.lineVolume2` | cc ch=2 data=0 |
| Deck 1 filtro | `turntable1.filter` | cc ch=1 data=2 |
| Deck 2 filtro | `turntable2.filter` | cc ch=2 data=2 |
| Deck 1 play | `turntable1.playPause` | note ch=1 data=7 |
| Deck 2 play | `turntable2.playPause` | note ch=2 data=7 |
| Deck 1 cue | `turntable1.cuePositionOrJumpConsideringPlayState1` | note ch=1 data=6 |
| Deck 2 cue | `turntable2.cuePositionOrJumpConsideringPlayState1` | note ch=2 data=6 |
| Deck 1 sync | `turntable1.bpmSync` | note ch=1 data=5 |
| Deck 2 sync | `turntable2.bpmSync` | note ch=2 data=5 |
| Deck 1 tempo | `turntable1.speed` | cc ch=1 data=8 |
| Deck 2 tempo | `turntable2.speed` | cc ch=2 data=8 |
| Deck 1 jog bend | `turntable1.pitchBendMove` | cc ch=1 data=9 |
| Deck 2 jog bend | `turntable2.pitchBendMove` | cc ch=2 data=9 |
| Deck 1 scratch mode | `turntable1.scratchingMode` | note ch=1 data=8 |
| Deck 2 scratch mode | `turntable2.scratchingMode` | note ch=2 data=8 |
| Deck 1 scratch move | `turntable1.scratchingMove` | cc ch=1 data=10 |
| Deck 2 scratch move | `turntable2.scratchingMove` | cc ch=2 data=10 |
| Deck 1 pad modes | `padModeHotCue`, `padModeSampler`, `padModeInstantFX`, `padModeAutoLoop` | note ch=1 data=15/16/17/18 |
| Deck 2 pad modes | `padModeHotCue`, `padModeSampler`, `padModeInstantFX`, `padModeAutoLoop` | note ch=2 data=15/16/17/18 |
| Deck 1 performance pads | hot cues, clear cues, sampler, instant FX, auto loops | note ch=6 data=0-59 segun modo |
| Deck 2 performance pads | hot cues, clear cues, sampler, instant FX, auto loops | note ch=7 data=0-59 segun modo |

## Lectura operativa para Mapping Universalis

| Intencion Bastion deseada | Mapping fuente mas cercano | Estado |
| --- | --- | --- |
| Wheel / jog principal controla volumen general PC o salida principal | `mixer.masterLevel` y/o `scratchingMove` existen en Hercules real | Pendiente decidir si se usa master knob/fader o jog; no cambiar audio sin fallback |
| Boton central de wheel abre Voice Access en espanol | No aparece como accion Windows en djay Pro; posible candidato: `scratchingMode` si el boton fisico corresponde | Pendiente captura fisica control->MIDI |
| Tecla roja `SYNTH`/`SYNC` abre vista de procesos | `turntable1.bpmSync` note ch=1 data=5 y `turntable2.bpmSync` note ch=2 data=5 existen como fuente djay Pro de sync | Pendiente confirmar etiqueta fisica exacta y lado; no matar proceso directo |
| `PLAY` inferior derecho hace play contextual | `turntable2.playPause` note ch=2 data=7 existe | Pendiente confirmar que es el PLAY fisico inferior derecho |
| `CUE` entre Play y Stop envia `Ctrl + Shift + A` | `turntable2.cuePositionOrJumpConsideringPlayState1` note ch=2 data=6 existe | Pendiente confirmar boton fisico exacto |
| Tempo fader derecho hace scroll Windows | `turntable2.speed` cc ch=2 data=8 existe | Pendiente prueba de direccion/rango |
| Tres teclas negras extremo derecho hacen Copy/Cut/Paste | No aparece como accion Windows en djay Pro; deben registrarse por captura MIDI | Pendiente captura fisica control->MIDI |

## Normalizacion ART-025 de intenciones

| `function` | `physical_control_id` | `source_mapping_id` candidato | `mapping` fuente | `mirror_logical_id` | `output_action` | Estado |
| --- | --- | --- | --- | --- | --- | --- |
| `main_output_volume` | Wheel/jog principal o control master fisico por confirmar | `mixer.masterLevel` / `turntable*.scratchingMove` | cc ch=0 data=3 o cc ch=1/2 data=10 segun control confirmado | Pendiente | Volumen PC o Behringer OUT 1-2 | `pending_physical_capture` |
| `voice_access_focus_es` | Boton central de wheel por confirmar | Posible `turntable*.scratchingMode` si coincide fisicamente | note ch=1/2 data=8 | Pendiente | Abrir/enfocar Voice Access en espanol | `pending_physical_capture` |
| `process_view` | Tecla roja `SYNTH`/`SYNC` por confirmar | `turntable*.bpmSync` | note ch=1 data=5 / note ch=2 data=5 | Pendiente | Abrir vista de procesos, sin kill directo | `pending_physical_capture` |
| `context_play` | `PLAY` inferior derecho por confirmar | `turntable2.playPause` | note ch=2 data=7 | Pendiente | Play contextual del foco actual | `candidate_from_source` |
| `ctrl_shift_a` | Boton entre `PLAY` y `STOP` por confirmar | `turntable2.cuePositionOrJumpConsideringPlayState1` si coincide fisicamente | note ch=2 data=6 | Pendiente | Enviar `Ctrl + Shift + A` | `candidate_from_source` |
| `windows_scroll_vertical` | Tempo fader derecho por confirmar | `turntable2.speed` | cc ch=2 data=8 | Pendiente | Scroll Windows arriba/abajo | `candidate_from_source` |
| `edit_cut_copy_paste` | Tres teclas negras extremo derecho por confirmar | No encontrado en mapping djay Pro | Pendiente | Pendiente | `Ctrl+X`, `Ctrl+C`, `Ctrl+V` | `pending_physical_capture` |

## Intenciones operativas pendientes de binding

Estas intenciones vienen del objetivo del live, pero todavia no estan probadas como mapping importado:

| Control fisico deseado | Accion deseada | Estado |
| --- | --- | --- |
| Wheel / jog principal | Volumen general PC o salida principal, preferible Behringer OUT 1-2 si esta disponible | Pendiente codigo MIDI |
| Boton central de wheel | Abrir o activar Voice Access en espanol | Pendiente codigo MIDI |
| Tecla roja `SYNC` | Abrir vista de procesos, sin matar proceso directo | Pendiente codigo MIDI |
| `PLAY` inferior derecho | Play contextual sobre foco actual | Pendiente codigo MIDI |
| `CUE` entre Play y Stop | `Ctrl + Shift + A` | Pendiente codigo MIDI |
| Tempo fader derecho | Scroll vertical Windows | Pendiente codigo MIDI |
| Tres teclas negras extremo derecho | Copy, Cut, Paste | Pendiente codigo MIDI |

## Regla de activacion

Un mapping pasa de pendiente a operativo cuando tenga:

1. archivo fuente identificado;
2. mensaje MIDI exacto;
3. control fisico confirmado;
4. accion Bastion/Windows/Traktor documentada;
5. fallback seguro;
6. prueba sin accion destructiva.
