# LRU · Bitácora de handoffs

**Documento vivo del anillo 1.B.2 · sin sufijo de sesión · accesible vía MCP filesystem**

**⛔ CONGELADA en s204 (D-s204-C)** — última entrada condensada: `s197→s198`. Este fichero deja de actualizarse al cierre: su contenido duplicaba la bitácora de sesiones desde otro ángulo y cada cierre pagaba el peaje dos veces. Hacia adelante, el registro por-sesión vive en `LRU_BITACORA_SESIONES_VIVO.md` (una línea mecánica por cierre copiada de `LRU_ESTADO.md` · D-s204-B); los handoffs siguen viviendo como ficheros individuales en `doc/` (anillo 3 al ser consumidos). Los handoffs s198→s199 … s203→s204 quedan sin condensar por declaración (D-s204-A · hueco nombrado, no oculto). Queda como archivo de consulta del histórico s59→s198.

Externalizado desde §5 del MAPA en s129 (palanca P-bis · etapa 3). El MAPA conserva tabla mini con handoff activo + 3 anteriores + puntero a este fichero. Cuando un handoff queda 3-4 sesiones por detrás del frente y deja de ser relevante operativamente, se condensa aquí en rondas posteriores. Frontera flexible · arbitrada por Manuel cuando lo justifique la presión documental.

Estado tras s162: 1 activo en MAPA (s162→s163) + 42 condensados aquí en §5.archivo-II (s100→s161) + 41 condensados en §5.archivo (pre-s100) + 38 archivados como ficheros en `archivo/handoffs/` desde s59 (pre-s55_s56).

---

### §5.archivo-II · Handoffs s100→s198 (entradas condensadas · migración s157 + s158 + s159 + s160 + s161 + s162 + s163 + s164 + s165 + s166 · backfill s166→s167 … s179→s180 en saneamiento s180 · s180→s181 + s181→s182 + s182→s183 + s183→s184 + s184→s185 al cierre s185 · s185→s186 + s186→s187 + s187→s188 en saneamiento s188 · s188→s189 + s189→s190 + s190→s191 + s191→s192 + s192→s193 en saneamiento s193 · s193→s194 + s194→s195 + s195→s196 + s196→s197 + s197→s198 al cierre de cada sesión)

Compresión II aplicada en s157 cubrió s100→s156. Handoffs s157→s158 … s165→s166 añadidos conservando estructura. **Backfill s166→s167 … s179→s180** volcado en el saneamiento documental de s180. Handoff activo al cierre de s198: **s198→s199** (en MAPA mini-tabla).

* `lru_handoff_s197_s198.md` — consumido por s198 · frente recomendado **U2.5** (Chart/EnlacesPanel) o T-S182 · s198 (sesión mixta articulatoria P7 + 1 rebanada) **reencuadró el frente**: U2.5 era premisa falsa (Chart no es lista, Enlaces matriz 2D, «filtrar-por-valor» otra familia) → objetivo real = **una sola lista común de NOMBRES** (colapso de nomenclatura), «después agrupar» · hallazgo: datos ya unificados (T-S190/T-S189) pero el **nombre** sigue partido (prefijo `sim/`·`hw/` en el `DataPlane`); T-S151-N2 cerró el eje datos (C3 s192), no el nombre · decisión **(X) aplanar el prefijo** (mundo→faceta `origin`) · **A1** (`3386faa` · `createOriginFacet` 5ª firme + `ChannelMeta.origin` de `displayId` + tests +5 · aditivo · build verde **2201** + **438/438** + `tsc` limpio · 0 núcleo) · **hoja de ruta unificada de 3 fases** cristalizada (`lru_alfiler_namespace_unico_s198.md`): **Fase A = T-S198-NAMESPACE-UNICO** (A1 hecho / A2 SensorBrowser+Analyzer1→`meta.origin` / A3 aplanar `name=sensorId` · cierra T-S151-N2 residuo-nombre + U3 de T-S194) · **Fase B = T-S194 reducida** a agrupación (B0 `createDisplayFacet`/B1 `groupBy`/B2 vocabulario lente/B3 migrar · cierra T-S194 + absorbe T-S196) · **Fase C = T-S182** diferida · etiquetado A1/A2/A3 (no «R») · D-s198 vía `ask_user_input_v0` · pendiente: A2 + A3 + Fase B + heredado (runtime C1+C3 s192 + backfill bitácoras desde s180 + regen del índice) · handoff activo **s198→s199** · frente s199 = **A2** (migrar `groupByPrefix` + `extractors.ts` a `meta.origin`)

* `lru_handoff_s196_s197.md` — consumido por s197 · frente recomendado **U2.4** (store de lente + toggle 🔗 sync entre legos) arbitrado · s197 ejecutó **U2.4 (T-S194 · «agrupación como faceta» · umbrella T-S183): store de lente compartida + sync cross-lego** (espejo del lote `signalModes` de s181): **U2.4.1** (`8df79d3` · `lensStore.ts` singleton vanilla = una lente compartida canónica `'flat'|'system'` + `subscribe`/`notify` + puente React `useSharedLens` · vocabulario canónico neutro, cada host mapea local↔canónico · `lensStore.test.ts` +8 · aditivo) + **U2.4.2** (`9dd77f4` · `FacetLensBar` gana sync props-driven `synced`/`onToggleSync`/`syncTitle` · presentacional, store-agnóstico) + **U2.4.3** (`05b7e77` · 1er consumidor · Mixer cablea sync · sincronizado lee la compartida y propaga) + **U2.4.4** (`ca2207a` · 2º consumidor · LruBar sync per-tarjeta · supersedido) + **U2.4.5** (`c10a488` · giro pedido por Manuel · LruBar → lente única panel-level con barra única en cabecera nueva sobre el grid `.lru_lens_toolbar` + 1 toggle · retira el `Record` per-tarjeta · **D-s197-U2.4.5 SUPERSEDE** el alcance per-tarjeta de D-s195) · D-s197 (sync=prop del lego · canónico neutro `'flat'|'system'`) · hallazgo: el sync **adopta** la compartida (no publica) · el espejo real del lote s181 es panel-level · **T-S194 avanza a «store de lente + sync cross-lego»** · **T-S196-CONVERGENCIA-LRUBAR-GRUPO** acercada (LruBar gana cabecera de panel) · 5 commits build verde **2200** + **433/433** (+8) · `tsc` limpio · 0 núcleo · pendiente: runtime cabecera LruBar + sync LruBar↔Mixer + heredado s192 (runtime C1+C3) · handoff activo **s197→s198** · frente s198 = **U2.5** (Chart/EnlacesPanel) o T-S182-ENLACE-SENAL-SENAL

* `lru_handoff_s195_s196.md` — consumido por s196 · frente recomendado **U2** (generalizar la faceta a los paneles vía `queryFacets`) arbitrado · s196 ejecutó **U2 (T-S194 · «agrupación como faceta» · umbrella T-S183) · faceta centralizada + barra compartida cross-lego** en tres rebanadas: **U2.1** (`4ce735e` faceta `system` funcional en `queryFacets` · 4ª firme · sim→`systemId` directo / hw→cruce `signalForPort`→señal sim→`systemId` · display `'hw'` excluido · sin ruta→«Sin funcion» · `facetSystem.test.ts` +11 · 2 tests de conteo 3→4 + `92449c3` `ComponenteLru` delega en `createSystemFacet`, retira import `getSignalRoute`) + **U2.2** (`b67ddd4` lego `FacetLensBar` = toolbar contenedor host-neutral con slot `children` · lente `<select>` theme-aware idiom `SignalModeSelect` · LruBar: botón `f`→`FacetLensBar` per-tarjeta Plana/Por sistema · default placa) + **U2.3** (`0442055` 1er reúso cross-lego · `MixerPanel` monta `FacetLensBar` a nivel de panel en `mp-toolbar` + agrupa por la faceta `system` con cabecera nombre·ATA + cubo «Sin funcion» · ids de lente locales al host `plana`/`placa` = host-neutral validado) · D-s196 (faceta funcional uniforme / barra=toolbar contenedor / U2.2 lente sola / U2.3 Mixer con agrupado real) · hallazgo: «los 4 paneles» NO uniforme (Mixer/Chart ya funcionales · EnlacesPanel matriz sin eje permutable) → compartible real = faceta `system` + lego `FacetLensBar` · **T-S194 avanza a «faceta centralizada + barra cross-lego»** · **T-S196-CONVERGENCIA-LRUBAR-GRUPO** nueva (horizonte baja) · 4 commits build verde **2198** + **425/425** (+11) · `tsc` limpio · 0 núcleo · pendiente: vistazo runtime al `<select>` de lente LruBar + agrupado Mixer + heredado s192 (runtime C1+C3) · handoff activo **s196→s197** · frente s197 = **U2.4** (store de lente + toggle 🔗 sync entre legos) o **U2.5** (Chart/EnlacesPanel) o T-S182-ENLACE-SENAL-SENAL

* `lru_handoff_s194_s195.md` — consumido por s195 · frente recomendado **U1** (faceta por system en un panel · PoC aditivo/reversible) arbitrado · s195 ejecutó **U1 (T-S194-DOS-REGISTROS-FACETA · «agrupación como faceta» · umbrella T-S183) materializado en LruBar**: **U1.0 audit** (hallazgo decisivo: el display `'hw'` del catálogo define sus *systems* como los propios dispositivos → `systemId` de catálogo de una señal hw = hwObjId → «por system» = «por placa» degenerado · el system funcional se alcanza cruzando el enlace `signalForPort`→señal sim→`systemId` · EnlacesPanel descartado por mismatch de eje, LruBar elegido) + **U1.1** (`e6bd1b5` · `ChannelMeta` gana `displayId`/`systemId`/`ata` poblado en `register`/`_registerCatalog` · `allSensors()` propaga `ata` desde `SystemDef` · `DataPlane.test.ts` nuevo +3 · aditivo, 0 comportamiento) + **U1.2** (`52d2b80` · lente per-tarjeta `placa↔función` en `ComponenteLru` · botón `f` · re-agrupa por system funcional vía `signalForPort`→`getMetaBySensorId().systemId` · cabecera con nombre+ATA del catálogo · cubo «Sin funcion» · modo placa intacto · filas reutilizadas · 0 CSS nuevo) · D-s195 (panel=LruBar · mecanismo=enriquecer `ChannelMeta` · UX=selector de lente · toggle=per-tarjeta · sin-ruta=cubo visible · etiqueta=nombre del catálogo) · 2 commits build verde **2194** + **414/414** · `tsc` limpio · 0 núcleo · **T-S194 avanza a «PoC materializado»** · pendiente: vistazo runtime al toggle `f` + heredado s192 (runtime C1+C3) · handoff activo **s195→s196** · frente s196 = **U2** (generalizar a los 4 paneles vía `queryFacets`) o T-S182-ENLACE-SENAL-SENAL

* `lru_handoff_s193_s194.md` — consumido por s194 · frente recomendado **abrir nuevo frente bajo umbrella T-S183** · s194 ejecutó **3 fixes UX build-verde + apertura T-S194 + U0 completa**: **FIX1** slider del LruBar al slot del DataPlane (componentes per-fila `LruSensorRow`/`LruImuAxis` con `useDataPlaneValue` · espejo del `MixerRow` s178 · `6b1d1d5`) + **FIX2** dropdown `SignalModeSelect` theme-aware (CSS-only · `2ca3fbc`) + **FIX3** sliders con seguimiento suave + fin del clavado al arrastrar (`draggingRef` · `b3ab9a3`) + **apertura T-S194-DOS-REGISTROS-FACETA** (alfiler `lru_alfiler_dos_registros_agrupacion_faceta_s194.md` · agrupación como faceta · Patrón 7 · bajo umbrella T-S183 · hermana de T-S182-ENLACE-SENAL-SENAL · `667ec63`) + **U0 auditoría profunda COMPLETA** (hallazgo central: identidad/valor/modo **ya unificados** en el DataPlane · sensorId único sim `N1_L` / hw `{hwObjId}/{port}` · 205 señales = 127 sim + 78 hw por `buildHwSensors` · `queryFacets.allSensors()` ya enumera `listChannels()` · lo único partido es la enumeración en los 4 paneles · 3 residuos R-U0-a/b/c cerrados + modelo de facetas para U1 · `24fa814`/`b6ba1ff`) · D-s194 (FIX1=Mecanismo B + alcance total · U1 diferida a Manuel) · 6 commits TODOS doc/UX · 0 núcleo · build heredado 2194 + 411/411 · `tsc` limpio · handoff activo **s194→s195** · frente s195 = U1 (faceta por system en un panel · PoC aditivo/reversible) o T-S182-ENLACE-SENAL-SENAL
* `lru_handoff_s192_s193.md` — consumido por s193 · frente recomendado **verificación runtime C1+C3 + definir nuevo frente bajo T-S183** · s193 eligió y ejecutó el **cierre del eje router per-hwObj (T-S189 · última cola de R5)**: **R5.6.1** toggle Sim/HwReal de QuickActions a `status.simInhibited` (corrige el toggle atascado · `b4188ae`) + **R5.6.2** borrados los dos chips cosméticos del `routerMode` muerto (Row Router de `TabStatus` + badge de `DeviceBadge` en `hw1Shared` · `9908003`) + **R5.6.3** retirado de `types.ts` el eje router entero (`RouterMode`/`ROUTER_MODES`/`DEFAULT_ROUTER_MODE`/`ROUTER_LABELS` + `HwObj.routerMode`) + escritores (`createDefaultHwObj` · reset de `ObjectRegistryContext`) + imports muertos (`Detalle01`/`glossary`) · punto de no retorno · `502c5ee` · **R5 (alcance B) completo del todo** · grep exhaustivo destapó superficie mayor (escritor ORC + Detalle01 + glossary) · `tsc` limpio = 0 colgados · `RouterModeChip` vivo e intacto (ya per-señal) → **T-S193-ROUTERMODECHIP-RENAME** nueva (cosmética) · **🟢 T-S189-DISPLAY-PER-SENAL CERRADA** · D-s193 (frente=T-S189 · chips=borrar · toggle=`simInhibited`) · 3 commits build verde 2194 + 411/411 · `tsc` limpio · 0 núcleo · cierre `c30ee5e` · pendiente: verificación runtime C1+C3 (heredada de s192, sin correr) · handoff activo **s193→s194** · frente s194 = nuevo frente bajo umbrella T-S183
* `lru_handoff_s191_s192.md` — consumido por s192 · frente recomendado **C3 (punto de no retorno) → C4** arbitrado · s192 ejecutó **COLAPSO PUERTO→SEÑAL COMPLETO (C0-C4)**: **C3** (`bb17bfb` · punto de no retorno · retira el dual-write `signalForPort→writeBySensorId` en `createSensorDataHandler` · el dato hw escribe solo el slot del puerto) + **C4** (C4.1 tripwire R3/R4 Modo B fuera de `rebindFromEnlace` + C4.2 `_createBinding` a la señal de casa vía `indexOfSensorId`, tentativa `hw/<deviceId>/<sensorId>` demostrada muerta · `ed96cf3` + C4.3 **D-s192-C4.3=conservar** `signalForPort`, grep 0 llamadores de producción · `d12206d`) · **RESUELVE T-S151-N2 + CIERRA T-S174 + SALDA T-S190** · un solo universo de señales · hallazgo: path del handoff s191 desviado (`src/simulation`→`src/datosLru01`) · 4 commits build verde 2194 + 411/411 · `tsc` limpio · 0 núcleo · horizonte s193 = verificación runtime C1+C3 + nuevo frente bajo T-S183
* `lru_handoff_s190_s191.md` — consumido por s191 · frente recomendado **colapso C1** arbitrado · s191 ejecutó **C1** (`3abba2c` · re-apuntado ON · `rebindFromEnlace` re-apunta la aguja Modo A al slot del puerto + normaliza contra el rango de entrada del cfg1 + desenlace simétrico a casa vía `_needleHomeRange` · **RESUELVE T-S174-VERTIDO-SIN-ESCALA** · hallazgo RAG: el hogar del escalado es cfg1) + **C2 concluido** (censo: el único dependiente era la aguja ya migrada en C1 · Chart/Mixer/inspectores leen su slot propio → **C3 seguro sin migración**) · cierre `d92e4f6` · build verde 2194 + 411/411 · `tsc` limpio · 0 núcleo · horizonte s192 = C3 (punto de no retorno) → C4
* `lru_handoff_s189_s190.md` — consumido por s190 · frente recomendado **R5.5** (borrar el servicio) arbitrado · s190 ejecutó **R5 COMPLETO (R5.5)**: borrado el RouterService — C1 retira el handler `router1Send1` + listener ORC + imports huérfanos (`aedda2e`) · C2 borra `RouterService.ts`/`RouterServiceReact.ts`/`routerServiceInit.ts` + `initRouterService` en `App.tsx` (`d2f4a79`) · **punto de no retorno de R5** · eje de modo per-hwObj demolido (vestigial conservado por D-s185 ALCANCE=B) · **+ FRENTE NUEVO colapso puerto→señal** (alfiler `lru_alfiler_estadificacion_colapso_senal_s190.md` · `9d21e31` · detonado por el bug de la aguja congelada bajo el slider · modelo objetivo un universo de señales · rebanadas C0-C4 con punto de no retorno en C3 · resuelve T-S151-N2 y T-S174 · **T-S190-COLAPSO-PORT-SENAL** nueva) · 3 commits build verde 2194 + 411/411 · `tsc` limpio · 0 núcleo · horizonte s191 = colapso C1
* `lru_handoff_s188_s189.md` — consumido por s189 · frente recomendado **R5.4** (autoridad) arbitrado · s189 ejecutó **R5.4 COMPLETO**: retirados todos los acoplamientos que colgaban del RouterService — R5.4.1 gate fuera de `updateHwObjSensors` (`7e155f6`) + R5.4.2 `cb.init(getMode)` fuera + idempotencia (`c703695`) + R5.4.3 gate per-hwObj entero fuera de `ControlBus.ts` (`2e8ca5b`) + R5.4.4 ORC desacoplado (`f0f1477`) + R5.4.5 auto-registro fuera de `registryMqttHandlers` (`40243b1`) · **el RouterService queda SIN llamador externo en `src/`** · hallazgos (Patrón 6): `routerMode` ya universalmente HwReal · `ComponenteLru` NO lee `routerMode` (refuta handoff s188 · cabo display = solo `TabStatus`+`DeviceBadge`) · `RouterModeChip` ya fuera del eje · corrección a R5.0 · **D-s189-DISPLAY=C** (chip per-hwObj diferido a per-señal · **T-S189-DISPLAY-PER-SENAL** nueva · baja) · 5 commits build verde 2196 + 411/411 · `tsc` limpio · 0 núcleo · horizonte s190 = **R5.5** (borrar el servicio)
* `lru_handoff_s187_s188.md` — consumido por s188 · frente recomendado **R5.3** (firmware / TabControl) arbitrado · s188 ejecutó **R5.3 COMPLETO**: **R5.3.1** `firmwareInhibitionShim` (reubica la inhibición `to/sim` del eje per-hwObj al modo per-señal · whole-board sii ≥1 señal HwSim · espejo del flag único `g_sim_inhibited` del firmware · accesor inverso `hwObjsForSignal` +3 tests · edge-triggered · reconstruye el `to/sim` que R5.2.4 dejó dormido · `ad6ab5e`) + **R5.3.2a** el ingest de `from/status` fija `simInhibited` desde el campo `sim` del firmware (verdad de firmware · sirve popup+TabControl · `03a250e`) + **R5.3.2b** TabControl a modo per-señal sobre `signalsForHwObj` (espejo HwObjPopup · grid 5 modos + `handleSim` toggle Real↔HwSim) + `RouterService._handleInhibition` neutralizado a no-op (`273bd8b`) · D-s188-FW=A / R5.3.1=A / R5.3.2-INH=C/-SIM=A/-RS=A · build verde 2196 + 411/411 · `tsc` limpio · 0 núcleo · cabo: display per-hwObj que lee `routerMode` → R5.4+ · handoff activo **s188→s189** · frente s189 = **R5.4** (autoridad)
* `lru_handoff_s186_s187.md` — consumido por s187 · frente recomendado **R5.2.4 + R5.2.5** arbitrado · s187 ejecutó **R5.2 COMPLETO**: **R5.2.4** HwObjPopup a modo per-señal sobre `signalsForHwObj` de ESE hwObj (rejilla "Modo de datos" + toggle HwSim/HwReal + display Real/Local/HwSim/Gen/Rnd · `isSimActive`=≥1 HwSim · chip INH retirado · RouterService fuera del popup y del `EnlacesPanelContent` · D-s187-R5.2.4-FW=A · inhibición `to/sim` DORMIDA hasta R5.3) + **R5.2.5** Sim1 auto-Rnd retirado (D-s187-R5.2.5-AUTORND=A) · **desde la UI ya no hay escritores de modo per-hwObj** · RouterService vive hasta R5.5 · commits `7560647`/`7ac086f` · build verde 2195 + 408/408 · `tsc` limpio · 0 núcleo · frente s188 = **R5.3** (firmware + TabControl)
* `lru_handoff_s185_s186.md` — consumido por s186 · frente recomendado **R5.1** (indicador online a per-señal) arbitrado · s186 ejecutó **R5.1** (`ControlOnline1` al agregado per-señal · online sii ≥1 aguja Real|HwSim · sim/virtual arranca offline · D-s186-R5.1-IND) + **R5.2.0** accesor `signalsForHwObj` en `signalRoute` (+3 tests) + **R5.2.1** LruToolbar (re-key del lote a `signalsForHwObj` · cierra alfa D-s181-R2b-1) + **R5.2.2** RouterModeChip + **R5.2.3** Detalle01 (selector/Rnd/countdown a per-señal · auto-Rnd retirado D-s186-R5.2.3-AUTORND) · watchdog D-s151-LRUBAR-5 retirado · 4 consumidores de UI fuera del eje · 5 commits `294b8b9`/`a389bcc`/`1cbb6f5`/`5cd83a3`/`1092ebf` · build verde 2195 + 408/408 · 0 núcleo · frente s187 = R5.2.4 + R5.2.5
* `lru_handoff_s184_s185.md` — consumido por s185 · frente recomendado **R5** (retirada del eje per-hwObj · RouterService) arbitrado · s185 (articulatoria pura · Patrón 7) arbitró el **alcance B** (retirar el RouterService entero · `HwObj.routerMode` vestigial · sin tocar el tipo núcleo · D-s185-ALCANCE=B) + **4 decisiones** (D-R5-UI reconvertir controles de grupo a lote per-señal · D-R5-IND online sii Real|HwSim, con Gen/Rnd/Local/sin-enlace→offline · D-R5-FW shim fino whole-board · D-R5-GATE retirar el gate per-hwObj inerte en R5.4) + **R5.0 auditoría ejecutada** (el sweep s184 §4 era incompleto: dimensión de gate del ControlBus per-hwObj inerte alimentado por `cb.init(getMode)` + `LruToolbar`/`TabControl`/`Sim1` no listados + `router1Send1` muerto · `HW_PERMISSIONS` vive en `ControlBus.ts`) · estadificación **R5.0–R5.5** con punto de no retorno en R5.5 (alfiler `lru_alfiler_estadificacion_r5_s185.md` · hilo conductor) · 0 código · 0 núcleo · build heredado 2196 + 405/405 · handoff activo **s185→s186** · horizonte s186 = **R5.1** (indicador online a per-señal)
* `lru_handoff_s183_s184.md` — consumido por s184 · frente recomendado **R3 (Rnd→fuente per-señal + cabecera fan-out)** arbitrado · s184 ejecutó **R3 = B** (`aaf569f` · D-s184-R3-1=B/R3-2 · `Rnd` deja de ser modo per-hwObj y vuelve a ser fuente per-señal 1:1 · `SimService.demoTick` consulta el modo per-señal y escribe `'rnd'`, deja de importar RouterService) + **mini-rebanada cabecera** (`f333d79` · `handleModoChange` del `ComponenteLru` a fan-out per-señal espejo del LruToolbar · modo agregado "Mixto") · **las dos UIs de modo del LruBar son ya per-señal** · firmware diferido a **T-S184-FW-INHIB-PER-CANAL** (nueva · `to/sim` whole-board; el control per-entrada ya existe en el gate 2 per-señal · D-s182-FW resuelta de facto) · build verde 2196 + 405/405 · 0 núcleo · horizonte s185 = **R5** (retirada del eje per-hwObj · RouterService)
* `lru_handoff_s182_s183.md` — consumido por s183 · frente recomendado **R1→R2** (mapa s182) arbitrado · s183 ejecutó **R1** (lego `SignalCountdownRing` extraído de MixerRow · `4ac905d` · D-s183-R1-1/R1-2) + **R2** (slider del LruBar a per-señal espejo MixerRow + retirada del **gate 1 per-hwObj** de `writeBySensorId`/`fromRecord`/handler MQTT · gate 2 per-señal único árbitro · `2cbe9e4` · D-s183-R2-FX · **🟢 T-S182-SLIDER-LRUBAR CERRADA**) + **giro conceptual mayor**: el frente se eleva a **modelo unificado de señales** (destilado `lru_destilado_modelo_unificado_senales_s183.md` `f3399a0` · registro abierto de fuentes/sumideros × continuo vivo/grabado/programado × bidireccionalidad sensor↔actuador · arbitrado per-señal por la mesa de parcheo · Realm como partitura · **Gen desaparece** · RouterService→R5 · umbrella **T-S183-MODELO-UNIFICADO-SENALES** absorbe la cola de T-S165) · hallazgo: quitar el gate 1 NO toca Rnd (D-s182-RND→split) · auditoría SimService · build verde 2196 + 405/405 · 4 commits · living docs s183 actualizados
* `lru_handoff_s181_s182.md` — consumido por s182 · frente recomendado **R3** arbitrado · s182 ejecutó **R3 cerrado** (R3.1 semilla hw→Real `1d77253` · R3.2+R3.3 retira eje origin `caabdc9` · R3.4 quita Auto UI + retira clearSignalMode `c17180` · D-R3-A=A1/B=B1/4-1/4-2=X) + **mapa del frente posterior** (`lru_mapa_unificacion_modos_universal_s182.md` · retirar el modo per-hwObj, conservar el hwObj como agrupación · D-s182-UNIF-1/2/3) + **R0 sweep** (inventario completo) · **T-S182-SLIDER-LRUBAR** regresión viva (R3.1 + gate 2 · cierra en R2) · **T-S182-ENLACE-SENAL-SENAL** nueva (horizonte) · D-s182-FW/GEN/RND/ORDEN abiertas · build verde 2193 + 405/405
* `lru_handoff_s180_s181.md` — consumido por s181 · frente recomendado **R1** (notify ControlBus) arbitrado · s181 ejecutó **R1** (pub/sub de modo per-señal en ControlBus `subscribeSignalMode`/`subscribeAllSignalModes`/`notifySignalMode` + hooks `useSignalMode`/`useSignalModes` en `ControlBusReact` · poll de 1s del Mixer jubilado · cierra T-S178-CONTROLBUS-PUBSUB · commit `f58e48b` · D-s181-R1-1=B) + **R2a** (dropdown per-slider en LruBar vía lego nuevo `SignalModeSelect` extraído del MixerRow · commit `096e65d` · D-s181-R2-1) + **R2b** (lote per-señal del LruToolbar vía `useSignalModes` · commit `f24922c` · D-s181-R2b-1=alfa) · Mixer y LruBar comparten el almacén signalModes entero · **R3 articulado y diferido** (`lru_alfiler_r3_quitar_auto_origin_s181.md` · quitar Auto/origin + semilla · D-R3-A/B abiertas · D-s181-R3-1) · build verde 2193 + 405/405
* `lru_handoff_s179_s180.md` — consumido por s180 · frente recomendado **R0** (rename sensorModes→signalModes) arbitrado · s180 ejecutó R0 (rename ancho del eje modo `Sensor*→Signal*` · 8 src/ + 1 comentario · auditoría Camino Y deslindó 3 ejes "sensor" · `tsc` red exhaustiva · build verde 2190 + 405/405 · commit `dd154ca` · D-s180-R0-1/2/3) + **saneamiento documental entero** (backfill bitácoras s167→s180 + MAPA + artefactos de cierre) · T-S180-PROSA-MODO nueva (baja)
* `lru_handoff_s178_s179.md` — consumido por s179 · sesión mixta auditoría + código + articulación · auditoría de rutas Fase 0 (3 legos no comparten modo) + D-s179-CHART-1 (Chart lee el slot para señales gobernadas) + **modelo objetivo de unificación de modos articulado** (un eje, la señal · D-s179-MODE-1..4) · T-S179-CHART-FUENTE + T-S179-CHAIN-SENALES nuevas · T-S178 promovida a prerrequisito · build verde 2190 + 405/405
* `lru_handoff_s177_s178.md` — consumido por s178 · paso 5 R-bidi.2c + R-D · countdown per-señal de retorno a Real + candado (hook `useSensorCountdown` + `MixerRow` extraída + anillo SVG) · D-s178-1..3/A/B/C/R-D · T-S178-CONTROLBUS-PUBSUB nueva · build verde 2190 + 405/405 · commit `125034b`
* `lru_handoff_s176_s177.md` — consumido por s177 · paso 5 R-bidi.1+2a+2b · el slider del Mixer pasa a seguidor/conductor vía DataPlane · cabo ILS s176 CERRADO (bug Animate instancia única) · T-S177-ANIMATE-INSTANCIA-UNICA nueva · build verde 2188 + 405/405
* `lru_handoff_s175_s176.md` — consumido por s176 · paso 5 R-A · control de modo per-señal editable (select Auto/Real/Local/HwSim/Gen) + procedencia auto/manual + precedencia manual · hilo conductor señal↔referencia cristalizado (T-S176-SEÑAL-EJE) · build verde 2188 + 405/405
* `lru_handoff_s174_s175.md` — consumido por s175 · R4 del paso 4 cerrado por Vía B (slot hw = punto de inspección) · **paso 4 COMPLETO** · sonda runtime refutó "nadie depende del slot hw" · T-S172-MODOB-SIN-SIGNALID cerrada · build verde 2188 + 405/405
* `lru_handoff_s173_s174.md` — consumido por s174 · R3 del paso 4 (lectura uniforme de la aguja · punto de no retorno) · D-s174-1=A + tripwire · reencuadre de T-S173 (IAS señal compartida) · T-S174-VERTIDO-SIN-ESCALA nueva · build verde 2188 + 405/405
* `lru_handoff_s172_s173.md` — consumido por s173 · R2 del paso 4 (modo a la señal + enforcement · **primer corte real**) · D-s173-1=A · T-S167-N1 CERRADA en runtime · T-S173-IAS-PUERTO-MUDO nueva · build verde 2188 + 405/405
* `lru_handoff_s171_s172.md` — consumido por s172 · R0+R1 del paso 4 (enlace lleva ruta puerto→señal vía `signalRoute` + vertido device→señal en sombra) · D-s172-1=A/-2=B/-3=A/-4=A · R1 antes de R4 satisfecha · build verde 2188 + 405/405
* `lru_handoff_s170_s171.md` — consumido por s171 · sesión articulatoria pura · alfiler de estadificación del paso 4 (R0-R4) · D-s171-1=B (el enlace posee la tabla puerto→señal) · orden duro R1 antes de R4 · 0 código
* `lru_handoff_s169_s170.md` — consumido por s170 · dos frentes cerrados (MCP): paso 2 pleno por cura B (motor deja de volcar canales hw · T-S164+T-S163 disueltas · commit `eacfeb5`) + paso 6 (tick SignalEngine al motor persistente · T-S157 cerrada · commit `135fcd6`) · build verde 2187
* `lru_handoff_s168_s169.md` — consumido por s169 · indicador read-only de modo per-señal en el Mixer + mapa de impacto + **§8.3 RESUELTA** (D-s169-SLOT-1: un slot por señal · "test points" candidato P11) · build verde · 0 núcleo
* `lru_handoff_s167_s168.md` — consumido por s168 · productor de modos automático en el ORC (enlazar→Real / desenlazar→clear · D-s168-1 simetría) · la cura del parpadeo ya no depende de consola · validado A92418 real · T-S168-N1 nueva · build verde 2187
* `lru_handoff_s166_s167.md` — consumido por s167 · paso 2 del hilo de unificación completo (sombra → default → gate selectivo) + rebanada vertical Lectura B validada sobre A92418 real · primera cura visible del parpadeo · 3 src/ + 1 destilado · build verde 2187 · T-S165 paso 2 cerrado + T-S167-N1 nueva

* `lru_handoff_s165_s166.md` — consumido por s166 · 4 lecturas obligatorias (CLAUDE_ARRANQUE + handoff + alfiler unificación s165 + referencia capa datos s165) · pendientes: commit de los 3 cambios Sim4/Mixer de s165 (confirmado hecho al arrancar s166) + materializar **paso 1** del hilo · s166 ejecutó el paso 1 (árbitro per-sensor en ControlBus + `sourceConflictDetector.ts`, aditivo e inerte) + fix colateral contrato Mixer Sim2 (deuda s165) · build verde 2187 + 399/399
* `lru_handoff_s164_s165.md` — consumido por s165 · s165 fue sesión mixta: 3 cambios de código Sim4/Mixer (preset A-1 a 5 legos + botones Sensores/Displays en lego Mixer compartido, sin commitear en s165) + articulación del **frente de unificación del arbitraje** (alfiler + referencia + 4 decisiones + refinamientos §6b) · T-S165-UNIFICACION-ARBITRAJE sembrada como paraguas
* `lru_handoff_s163_s164.md` — consumido por s164 · 4 frentes maduros sin recomendación firme única (A formalización Camino Y · B cristalización P13 · C higiene DataPlane · D abierto) · Manuel arbitró **C** → sub-arbitraje **R1** (fix de granularidad) tras audit empírico previo obligatorio de 8+ ficheros · 1 línea efectiva en `SimService.ts` (`if (activeCount > 0)` en `demoTick`) + 6 líneas comentario · build verde 2186 + 399/399 tests · **T-S163-RUIDO-DERIVADOS-ISA cerrada operativamente** por T1+R1 · destilado breve `lru_destilado_t_s163_ruido_derivados_isa_r1_s164.md` · **T-S164-DUAL-WRITE-MASIVO nueva informativa** (hallazgo colateral del audit: dual-write masivo de ~250 sensores con `source: sim1` en `pushToRegistry`) · Camino Y 6ª aplicación limpia consecutiva · sub-patrón familia "audit empírico previo …" 3ª instancia · ZIP + PS1 con SHA256
* `lru_handoff_s162_s163.md` — consumido por s163 · recomendación firme Opción A (consumidor inaugural Cat.6 con Camino Y estricto) arbitrada por Manuel · sub-arbitraje articulado tras análisis comparado de 3 candidatos (Observador1 v2 · panel huérfanos · ampliación EnlacesPanel) · selección Observador1 v2 por simetría metodológica con s160 + audit empírico previo refinó 4 decisiones de diseño (D1=todos+badge · D2-refinada em-dash · D3=2 filas · D4=C `swObj.canal`) · 4 ficheros src/ tocados + 1 alfiler T-S163-RUIDO-DERIVADOS-ISA articulado (frente colateral destapado por uso operativo) · build verde 2186 módulos + 399/399 tests verdes · Camino Y 5ª aplicación limpia consecutiva · sub-patrón "audit empírico previo refina contrato del destilado" 2ª instancia formalizable
* `lru_handoff_s161_s162.md` — consumido por s162 · recomendación firme Opción A (materialización Cat.6 con los 6 pasos del plan §11 del destilado s161) arbitrada por Manuel · 5 arbitrajes D1-D5 + arbitraje D5=A inyección con alfiler como salvaguarda · 8 ficheros src/ tocados (contrato `Facet` extendido + 3 firmes migradas + `facetEnlace.ts` nuevo + tests + factoría) + 1 alfiler nuevo (T-S162-ENLACES-SUSTRATO) · build verde 2186 módulos + 399/399 tests unit verdes · Camino Y 4ª aplicación limpia · T-S160-CAT6-CAND cerrada operativamente · T-S162-ENLACES-SUSTRATO + T-S162-VITEST-ALIAS nuevas informativas · 0 ZIP (escritura directa MCP)
* `lru_handoff_s160_s161.md` — consumido por s161 · recomendación firme Opción A (sesión articulatoria pura Cat.6) arbitrada por Manuel · sub-arbitraje articulatorio puro (sin materialización ligera) · audit empírico de 7 ficheros del repo · destilado anillo 2 producido `lru_destilado_facetas_cat6_enlace_s161.md` 38.52 KB · 5 decisiones D-Q1..Q5 arbitradas + D-Q3.bis output uniforme · contrato `Facet` extendido con `kind` discriminante · T-S160-CAT6-CAND cerrada arquitecturalmente · T-S161-DOC-1 nueva informativa · 0 cambios src/ · Camino Y 3ª aplicación limpia
* `lru_handoff_s159_s160.md` — consumido por s160 · recomendación firme Opción A (materializar API consultora del destilado s158) arbitrada por Manuel · 7 ficheros nuevos en `src/realm/queryFacets/` + 4 modificados Observador1 + 3 docs nuevos · build verde 2185 módulos + 25/25 tests + validación funcional confirmada · cierre operativo T-S151-N2 por absorción arquitectural (5º modo) · T-S160-CAT6-CAND firme + T-S160-CAT3-A menor sembradas · cita gold *"el panel enlaces es la llave para unir ambos mundos"* registrada
* `lru_handoff_s158_s159.md` — consumido por s159 · recomendación firme Camino Y (consumidor antes que API) · materialización Observador1 v1 ejecutada · 14 ficheros desplegados · build verde + validación empírica funcional · T-S158-OBS-1 cerrada cuarto modo
* `lru_handoff_s157_s158.md` — consumido por s158 · 8 frentes articulados sin recomendación firme · arbitraje Manuel a Frente H · sesión arquitectural dedicada articulación API consultora multi-faceta
* `lru_handoff_s100_s101.md` — consumido por s101..s116 acumulativamente (período revisión arqueológica) · cierra T-S85-A3 por materialización del realm aviation s1000d
* `lru_handoff_s117_s118.md` — consumido por s118..s122 acumulativamente (5 aplazamientos integración P12) · 7ª cristalización del proyecto sembrada
* `lru_handoff_s122_s123.md` — consumido por s123 · integración P12 al núcleo ratificada
* `lru_handoff_s123_s124.md` — consumido por s124 · P12 integrado (§11sexies) · s124 ejecutó TransportPanel
* `lru_handoff_s124_s125.md` — consumido por s125 · s125 ejecutó T-S122-port-systems + alfiler hilo conductor
* `lru_handoff_s125_s126.md` — consumido por s126 · Bloque C-1 ampliado · cabecera Sim2 con 4 barras encadenadas · T-S122-port-systems cerrada en dos tiempos
* `lru_handoff_s126_s127.md` — consumido por s127 · paquete UX nav Sim2 + 3 bugs latentes en lego sliders/Mixer
* `lru_handoff_s127_s128.md` — consumido por s128 · 6 direcciones candidatas sin recomendación firme única
* `lru_handoff_s128_s129.md` — consumido por s129 · 8 palancas A+B+C+E+F+I+Q+O sobre MAPA (−38.7%) · Anillo 1.B inaugurado
* `lru_handoff_s129_s130.md` — consumido por s130 · 4 palancas M+N+P+P-bis · MAPA −61% · D6 política unificada · Anillo 1.B con 6 piezas
* `lru_handoff_s130_s131.md` — consumido por s131 · 19 sesiones sin código rotas · paridad sensors-bar + SignalsPanel lego + SignalLab cabecera fija · proyecto LRU Código creado
* `lru_handoff_s131_s132.md` — consumido por s132 · SignalLab lego 5/5 + Atlas Sim1 lego · 4 fixes scroll-snap
* `lru_handoff_s132_s133.md` — consumido por s133 · layout 5×8 paridad Sim2 + Overview transpuesto + favoritos minimenu modal
* `lru_handoff_s133_s134.md` — consumido por s134 · rename Atlas P13 + Sim3 Lab + cristalizaciones P13/P15/Glosario Atlas
* `lru_handoff_s134_s135.md` — consumido por s135 · cristalización arquitectural P16+P17 candidatos · D-s134-D URL universal · alfiler hilo director
* `lru_handoff_s135_s136.md` — consumido por s136 · D-s134-D ejecutada + basename canónico + reactividad URL→Atlas · P-candidato s135 "Partitura compartida" metáfora orquestal
* `lru_handoff_s136_s137.md` — consumido por s137 · cristalización NavBridge (D-s136-N) + alfiler semilla Sim4
* `lru_handoff_s137_s138.md` — consumido por s138 · alfiler canónico Sim4 + mapa plataforma HTML (3 estratos + 3 dimensiones) + P-N18 candidato
* `lru_handoff_s138_s139.md` — consumido por s139 · 3 HTMLs hermanos · D-s138-PARTIDA arbitrada
* `lru_handoff_s139_s140.md` — consumido por s140 · Sim4 Fase 1 cerrada · ciclo s136→s139 completado
* `lru_handoff_s140_s141.md` — consumido por s141 · useEngineBridge + SignalLab Sim4 A-2 + T-S130-LEGO-1 cerrada
* `lru_handoff_s141_s142.md` — consumido por s142 · Opción 3 HostBridge unificado materializada
* `lru_handoff_s142_s143.md` — consumido por s143 · Camino V VisorPanel + SimBrowser legos · sub-patrón "lego autocontenido"
* `lru_handoff_s143_s144.md` — consumido por s144 · DisplaysMenu + Sim4Header · 2ª/3ª aplicación T-S142-N1
* `lru_handoff_s144_s145.md` — consumido por s145 · EnlacesPanel Sim4 + LruBar + LruSeq · 7 aplicaciones firmes T-S142-N1
* `lru_handoff_s145_s146.md` — consumido por s146 · alfiler modelo estado registry · 0 código
* `lru_handoff_s146_s147.md` — consumido por s147 · atomización ScenariosPanel · doctrina "caras funcionales" + sub-patrón "doble vida modal+grid"
* `lru_handoff_s147_s148.md` — consumido por s148 · FallosPanel 8ª aplicación canónico + 4 instancias doble vida + Atlas Sim4 reorg
* `lru_handoff_s148_s149.md` — consumido por s149 · nav horizontal EnlacesPanel · cristalización hook useAtlasPassthrough
* `lru_handoff_s149_s150.md` — consumido por s150 · SignalTreePanel 9ª aplicación + TechModal canónico
* `lru_handoff_s150_s151.md` — consumido por s151 · PanelGrid drag + compact · descubrimiento naming sim1_*
* `lru_handoff_s151_s152.md` — consumido por s152 · LruToolbar + alfiler dos universos nomenclatura · T-S151-N2 cristalización candidata fundacional 8ª
* `lru_handoff_s152_s153.md` — consumido por s153 · DataPlane viewer 5 fases en cascada (gap s55 cerrado parcialmente) · sub-patrón "vista hermana adaptativa por protocolo"
* `lru_handoff_s153_s154.md` — consumido por s154 · validación T-S152-VALIDACION + 5 fixes · T-S153-N1 + T-S153-N4 articuladas · patrón 6.b cristalizado
* `lru_handoff_s154_s155.md` — consumido por s155 · T-S153-N4 cerrada 12/13 vía tokens responsive · TraceView diferido T-S154-N1
* `lru_handoff_s155_s156.md` — consumido por s156 · T-S154-N1 cerrada 13/13 + alfiler observatorio creado

---

### §5.archivo · Handoffs pre-s100 (entradas condensadas · Compresión I s128)

* `lru_handoff_s99_s100.md` — consumido por s100 · 6ª aplicación plantilla recortada P5(b)
* `lru_handoff_s98_s99.md` — consumido por s99 · 5ª aplicación P5(b)
* `lru_handoff_s97_s98.md` — consumido por s98 · 4ª aplicación P5(b)
* `lru_handoff_s96_s97.md` — consumido por s97 · 3ª aplicación P5(b)
* `lru_handoff_s95_s96.md` — consumido por s96 · 2ª aplicación P5(b)
* `lru_handoff_s94_s95.md` — consumido por s95 · primer handoff con plantilla recortada P5(b)
* `lru_handoff_s93_s94.md` — consumido por s94 · 2 opciones tras cleanup metodológico s93
* `lru_handoff_s92_s93.md` — consumido por s93 · 2 opciones tras T-S90-A1 + T-S92-T1 cerradas
* `lru_handoff_s91_s92.md` — consumido por s92 · 3 opciones tras T-S84-F1 integrada al núcleo
* `lru_handoff_s90_s91.md` — consumido por s91 · 3 opciones tras Tanda 1 T-S84-A8 cerrada
* `lru_handoff_s89_s90.md` — consumido por s90 · 3 opciones · recomendación firme Opción A
* `lru_handoff_s87_s88.md` — consumido parcialmente por s88 (cache) · absorbido por s89 ejecutando Opción C (T-S85-F1)
* `lru_handoff_s86_s87.md` — consumido por s87 · 4 opciones · recomendación firme Opción A
* `lru_handoff_s85_s86.md` — consumido por s86 · 5 opciones · recomendación firme Opción A
* `lru_handoff_s84_s85.md` — consumido por s85 · 4 opciones · recomendación firme Opción A (T-S84-A8 Tandas 1+2)
* `lru_handoff_s83_s84.md` — consumido por s84 · 4 opciones · recomendación firme Opción A (Bloque 4 T-S67-A1)
* `lru_handoff_s82_s83.md` — consumido por s83 · 4 opciones · recomendación firme Opción A
* `lru_handoff_s81_s82.md` — consumido por s82 · 4 opciones · recomendación firme Opción A
* `lru_handoff_s80_s81.md` — consumido por s81 · recomendación firme Bloque 3 del triaje s75
* `lru_handoff_s79_s80.md` — consumido por s80 · 4 opciones · recomendación firme Opción A (Bloque B triaje s75)
* `lru_handoff_s78_s79.md` — consumido por s79 · 4 opciones · recomendación firme Opción A (Bloque 2 triaje s75)
* `lru_handoff_s77_s78.md` — consumido por s78 · 4 opciones · recomendación firme Opción A (Bloque 1)
* `lru_handoff_s76_s77.md` — consumido por s77 · opciones tras cierre completo Opción E
* `lru_handoff_s75_s76.md` — consumido por s76 · 5 opciones · recomendación explícita Opción E.2 (integración fundacional completa)
* `lru_handoff_s74_s75.md` — consumido por s75 (regenerada) · s75 ejecutó parcialmente E (bloques E.1 + E.3)
* `lru_handoff_s73_s74.md` — consumido parcialmente por s74 · Manuel instruyó modo arquitecto · tercera cristalización fundacional
* `lru_handoff_s72_s73.md` — consumido por s73 · anotación cruzada: integración s71 al núcleo no se ejecutó como decía el handoff
* `lru_handoff_s71_s72.md` — consumido por s72 · integración parcial en workspace efímero no persistido
* `lru_handoff_s70_s71.md` — consumido por s71 · cristalización fundacional (destilado principal + secundario)
* `lru_handoff_s69_s70.md` — consumido por s70 · Opción A · T-S69-F1..F5 cerradas
* `lru_handoff_s68_s69.md` — consumido por s69 · debate fundacional continuado · Postulados 6-9
* `lru_handoff_s67_s68.md` — consumido por s68 · Opción A · 5 postulados integrados · T-S67-F1..F5 cerradas
* `lru_handoff_s65_s66.md` — consumido parcialmente · s66 fue recomposición documental por límites de contexto
* `lru_handoff_s64_s65.md` — consumido por s65 (Opción B: O6 + CruisePattern con reconfiguración)
* `lru_handoff_s63_s64.md` — consumido por s64
* `lru_handoff_s62_s63.md` — consumido por s63
* `lru_handoff_s61_s62.md` — consumido por s62
* `lru_handoff_s60_s61.md` — consumido por s61
* `lru_handoff_s59_s60.md` — consumido por s60
* `lru_handoff_s58_s59.md` — consumido por s59
* `lru_handoff_s57_s58.md` — consumido por s58

---

*LRU Platform · Bitácora de handoffs · 2026-06-05 · sincronizado al cierre de s193 · §5.archivo-II s100→s193 (backfill s166→s183 previo · s183→s184 + s184→s185 al cierre s185 · s185→s186 + s186→s187 + s187→s188 en saneamiento s188 · s188→s189 + s189→s190 + s190→s191 + s191→s192 + s192→s193 en saneamiento s193) + 41 §5.archivo pre-s100 + 38 archivados como ficheros pre-s55 · handoff activo s193→s194 · Compresión I s128 + Compresión II s157*
