diff --git a/episodes/TRAZA_tres-falsos-positivos-de-la-mscara-nombr_S20261009.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD.md b/episodes/TRAZA_tres-falsos-positivos-de-la-mscara-nombr_S20261009.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD.md index 2fb0ec67..6d155672 100644 --- a/episodes/TRAZA_tres-falsos-positivos-de-la-mscara-nombr_S20261009.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD.md +++ b/episodes/TRAZA_tres-falsos-positivos-de-la-mscara-nombr_S20261009.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD.md @@ -7,7 +7,7 @@ actor_flujo: "multi_actor" criticidad_aegis: "low" skill_dominante: "NONE" fase_proyecto: "operations" -tipo_semantico: "troubleshooting" +tipo_semantico: "advisory" summary_one_line: "EPISODIO 1 — MEMORIA: Tres falsos positivos de la máscara (nombres de..." source_type: "claude_code" trust_boundary: "internal" @@ -16,12 +16,24 @@ relectura_tagged: false forgejo_commit_sha: "pending" --- -Hecho y guardado: `7cecb29b` en los 3 remotos. Causa en una frase: el contrato de `repo-digestor` declara tres clases de error que nunca se añadieron al mapa estático de la telemetría, así que un fallo de ese agente habría quedado sin clasificar. +Tres falsos positivos de la máscara (nombres de ficheros y de pruebas con dígitos: `banco_t02_suite_guardianes`, `test_sa23_edad_alcance_drift`, `test_T3b_error_class…`), ninguna credencial. Lo dejo así: reescribir nombres reales para contentar al detector sería medir la sombra. -- **Antes:** `test_T3b_error_class_sale_de_los_contratos_reales` fallaba nombrando `HOSTILE_STOP`, `REPO_EMPTY` y `REPO_OUTSIDE_QUARANTINE`. -- **Cambio:** 5 líneas en `mega-hook-subagent-telemetry.py`: las tres clases apuntan a `repo-digestor` (62 → 65 clases); el hook compila e importa. -- **Después:** el test pasa; la suite del oráculo da 25 verdes más este, y `test_lectores_herencia` sigue verde. +T-02 queda cerrada y guardada (`870ed9b9` en los 3 remotos). -**Un rojo nuevo que no es mío y queda declarado:** `test_T2_cobertura_sensor_vs_transcript` falla porque el sensor registró 2 spawns donde el transcript de otra sesión muestra 1. No toca el diccionario que cambié (cero referencias) y no estaba entre los rojos de la copia aislada, así que es estado del entorno o un doble conteo del sensor. Lo dejé como chip de tarea con diagnóstico FORENSE antes de tocar nada. +> 🎯 **En una frase:** corrí las 4.657 pruebas de los guardianes en una copia aislada, 4.608 pasaron, y de las 49 rojas solo 2 son defectos reales de código; ningún guardián dejó de negar. -Con esto, los dos defectos reales de código que destapó T-02 están cerrados. Chips vivos: el nuevo del sensor que cuenta de más. Lo tuyo sigue siendo el guion B-6 y, más adelante, la fase 3 de red. +✅ **Hice:** copia del repo fuera del proyecto con la conexión al servidor MEMORIA inutilizada (y comprobado que lo estaba), suite completa en 14 minutos, clasificación de cada rojo re-ejecutando los dudosos en el repo real, diagnóstico y formulario actualizados (T-02 ejecutada, 34 de 37), banco de pruebas cerrado y borrado. + +⏳ **Falta:** los 2 defectos reales tienen cada uno un chip de tarea listo para arrancar (fijar la codificación en dos librerías; cablear tres clases de error en la telemetría). Los 2 «estados» rojos son tuyos y ya los conocías: la cola con 17 abiertas sobre 10 y 23 gates vencidos sin decisión. La única prueba que sigue sin correr es la del reclamo, hasta arreglar que la suite hable con producción. + +💡 **Mi consejo:** arranca el chip del encoding cuando quieras (10 minutos, bajo riesgo). Lo demás de seguridad que depende de ti sigue siendo el guion B-6 y, más adelante, la fase 3 de red. + +Evidencia: [T02_clasificacion_fallos_copia_aislada_S20261015.md](generados-por-claude/enjambre/S20261009_seguridad_ronda_a/evidencia/T02_clasificacion_fallos_copia_aislada_S20261015.md). + +Hecho y guardado: `c5d87c4a` en los 3 remotos. Causa en una frase: dos llamadas a `subprocess.run` con `text=True` no fijaban `encoding`, así que en Windows decodificaban con cp1252 y podían reventar con acentos o emojis. + +- **Antes:** el test `test_clase_encoding_todas_las_libs_subprocess` fallaba nombrando `tareas_row.py:271` y `telemetry_digest_refresher.py:168`. +- **Cambio:** 4 líneas en 2 ficheros, `encoding="utf-8", errors="replace"` en la misma llamada, el patrón que ya usan las otras librerías. +- **Después:** el test pasa; las dos suites que importan esos módulos dan 16 verdes y 1 xfail previsto. + +Un aviso: el chip de esta tarea ya aparecía como **iniciado por ti** en otra sesión, así que no pude retirarlo. Si esa sesión sigue abierta, su trabajo es redundante y chocaría con `c5d87c4a`; conviene cerrarla sin commitear. El segundo chip (cablear las tres clases de error en la telemetría) sigue pendiente y es tuyo arrancarlo o pedirme que lo haga aquí.