Skill: NONE | Type: troubleshooting Summary: EPISODIO 1 — MNEMO_PRE_DIGEST: C — los tres bugs de la zona de exclusión
3 KiB
| episode_id | puente_flat | session_code | acto_dialogico | actor_flujo | criticidad_aegis | skill_dominante | fase_proyecto | tipo_semantico | summary_one_line | source_type | trust_boundary | created_at | relectura_tagged | forgejo_commit_sha |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 5f4459c2-c51f-4bc8-b345-95ee5cb98879 | TRAZA_c-los-tres-bugs-de-la-zona-de-exclusin_S20260726.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD | S20260726.ARCO_CICLO4_AUTOMEJORA | informar | multi_actor | low | NONE | operations | troubleshooting | EPISODIO 1 — MNEMO_PRE_DIGEST: C — los tres bugs de la zona de exclusión | claude_code | internal | 2026-07-27T04:32:09.736776+00:00 | false | pending |
Cerrado. Push a los tres, verificado por contención, no por el mensaje del push: ed313d5f..2f85b797 en forgejo, origin y sriyantra.
C — los tres bugs de la zona de exclusión
Elegí C primero y resultó ser la decisión correcta por una razón que no había previsto: el hallazgo más grave no estaba en tu lista. Apareció mientras probaba la fragilidad del segundo.
El bug que nadie había visto. _files_overlap hacía startswith(b + "/") sobre un valor que ya terminaba en /, comparando contra "docs//". Efecto: declarar un directorio en ACTIVO.md no reservaba absolutamente nada de lo que hay dentro.
Falso negativo puro, sin corrupción de datos ni concurrencia rara: el único mecanismo que impide que dos ventanas se pisen el trabajo tenía un agujero silencioso para toda declaración de directorio.
El markdown arrastrado (tu hallazgo 2) resultó ser el más benigno de los tres: el split(":", 1) corta dentro del negrita y deja '** \x.md'como nombre de archivo, pero el match acertaba **por casualidad** víabasename`. Lo que estaba roto era el match exacto y el de directorio.
El self-lock (tu hallazgo 1) tenía la solución escondida a la vista: el bloque de ACTIVO.md ya declara su Session code: —la identidad estable— y el parser solo miraba el tag libre del encabezado. Otra ventana lo había probado en vivo (dejó S20260726.TEST_EM8 en el archivo) pero no dejó fix ni decisión.
Lo que hace creíble el arreglo: el control positivo. Reverti cada fix en memoria y sus tests se pusieron rojos — 5 asserts para el del directorio, 5 para el markdown, 1 para el self-lock. Y el control que de verdad importaba: un bloque ajeno sigue bloqueando (ajeno → 1 conflicto, ajeno con directorio → 1, propio con tag distinto → 0). Un fix que silencie un guardián es peor que el bug, porque convierte el fallo en invisible.
26 PASS / 0 FAIL en la suite nueva. Sin regresión en las cuatro existentes: correo_protocol 25/25, E2E 5 passed + 1 xfailed, guard 36/36, override 30/30.
A — las dos notas
En FIX_S20260727_override_leyzero_dueno.md quedaron dos secciones nuevas. La primera es el hueco de BLINDADA-29 que descubrimos anoche: el primero que cierra publica el estado de todos, verificado en vivo, y mi cautela no evitó el escenario — solo decidió quién lo ejecutaba.