feat(episode): TRAZA_b-la-identidad-de-instancia-ya-no-es-un_S20260803.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD
Skill: NONE | Type: reflection Summary: EPISODIO 1 — MNEMO_PRE_DIGEST: B — La identidad de instancia ya no es un permiso
This commit is contained in:
parent
c0ded5e878
commit
9d563efc59
1 changed files with 45 additions and 0 deletions
|
|
@ -0,0 +1,45 @@
|
||||||
|
---
|
||||||
|
episode_id: "c2d3b47d-17af-4bea-8069-1ab8ed0221b4"
|
||||||
|
puente_flat: "TRAZA_b-la-identidad-de-instancia-ya-no-es-un_S20260803.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD"
|
||||||
|
session_code: "S20260803.PIPELINE_FIXES"
|
||||||
|
acto_dialogico: "informar"
|
||||||
|
actor_flujo: "multi_actor"
|
||||||
|
criticidad_aegis: "low"
|
||||||
|
skill_dominante: "NONE"
|
||||||
|
fase_proyecto: "operations"
|
||||||
|
tipo_semantico: "reflection"
|
||||||
|
summary_one_line: "EPISODIO 1 — MNEMO_PRE_DIGEST: B — La identidad de instancia ya no es un permiso al portado"
|
||||||
|
source_type: "claude_code"
|
||||||
|
trust_boundary: "internal"
|
||||||
|
created_at: "2026-08-03T22:29:50.387197+00:00"
|
||||||
|
relectura_tagged: false
|
||||||
|
forgejo_commit_sha: "pending"
|
||||||
|
---
|
||||||
|
|
||||||
|
Ambos cerrados y respaldados. **B primero porque sangraba; A después porque no se movía de sitio.**
|
||||||
|
|
||||||
|
## B — La identidad de instancia ya no es un permiso al portador
|
||||||
|
|
||||||
|
Encontré la causa raíz, y explica los tres síntomas de los últimos dos días con un solo mecanismo:
|
||||||
|
|
||||||
|
| Prioridad de `get_instance_tag()` | Problema medido |
|
||||||
|
|---|---|
|
||||||
|
| P2 `instance_<ppid>.tag` | **Inútil**: el PPID cambia en cada invocación (12572 → 31332 → 18420). No hay ni un archivo así en disco |
|
||||||
|
| **P2.5 `latest_active.tag`** | **Un archivo global sin dueño.** La última instancia que fija su tag define la identidad de todas. Y hace `touch()` al leerlo: su ventana de 6 h se auto-renueva y nunca caduca |
|
||||||
|
|
||||||
|
Como P2 nunca sobrevive, **toda instancia caía en P2.5 y adoptaba el tag ajeno**. Eso explica el commit `ce8792d5` firmado con mi tag, que yo apareciera como `PIPELINE_FIXES`, y que el guard D5 me bloqueara sobre mi propio archivo.
|
||||||
|
|
||||||
|
**El arreglo no fabrica identidad: usa la que ya existía.** El harness expone `CLAUDE_CODE_SESSION_ID` —estable toda la sesión, único por ventana, el mismo UUID de mi scratchpad— y `session_state.py` lo mencionaba **cero veces**.
|
||||||
|
|
||||||
|
Suite completa: **3.154 verdes, 0 fallos** (los 2 rojos de antes también cerraron).
|
||||||
|
|
||||||
|
**Y algo que debo decirte:** escribí dos tests que se contradecían y no lo vi hasta ejecutarlos. Uno exigía que una hermana no heredara mi tag; el otro que sin registro se cayera al global. Lo resolví a favor de la seguridad, con la razón del incidente: *la ventana que nunca fijó su tag es justo la que terminó firmando commits ajenos*. Queda escrito en el test para que nadie lo reabra.
|
||||||
|
|
||||||
|
## A — Auditoría de premisas de la Fase 3
|
||||||
|
|
||||||
|
| Veredicto | Acciones |
|
||||||
|
|---|---|
|
||||||
|
| 🔴 **Refutada, ya implementada** | **SA-3-2** — `session-start.py:154` ya mide con tiktoken (2.753 tokens); el `300` es solo fallback |
|
||||||
|
| 🔴 **Conteo caducado** | **SA-3-9** (dice 3 gates, hay 2) · **SA-3-10** (su oráculo «6→4» no aplica) |
|
||||||
|
| 🟡 **No verificable** | **SA-3-11** — `BUG-SA-004` no tiene dónde leerse; **esa ausencia es el hallazgo** |
|
||||||
|
| 🟢 **Confirmadas** | SA-3-1 · SA-3-3 · SA-3-4 (peor: 29,8 d) · SA-3-5 (4.746 filas, fresco) · SA-3-6 |
|
||||||
Loading…
Reference in a new issue