4.6 KB · updated 2026-07-31 · md

v0.25.1.es.md

docs/i18n/release-notes/v0.25.1.es.md

Tesserae v0.25.1 — la compilación ya no se atasca, y los docs degradados son recuperables

<!-- translations:start -->

English · 한국어 · 中文 · 日本語 · Русский · Français · Deutsch

<!-- translations:end -->

Lanzado 2026-07-25 · PyPI · GitHub release · pip install --upgrade tesserae==0.25.1

Un lanzamiento de correcciones de errores. Sin cambios en la API — funciona directamente sobre v0.25.0, con un comportamiento por defecto invertido (ver Actualización).

Todas las correcciones aquí provinieron de una sola investigación. Una compilación en un proyecto real se quedó a 0% de CPU durante 5 horas 43 minutos, atrapada detrás de un hijo \codex exec\ que había estado inactivo durante 4 horas 6 minutos. Ya había creado 32 nodos \COMMUNITY_SUMMARY\ en memoria y nunca llegó a persistirlos, así que \graph.json\ terminó con cero. Tirar de ese hilo sacó a la luz tres defectos más.

Correcciones

  • El protector de cuña de extracción está armado por defecto. v0.25.0 envió un timeout de extracción por archivo, pero opcional — así que quedó desactivado y el fallo que evitaba seguía ocurriendo. El \killpg\ del grupo de procesos en \_run_cli\ estaba correctamente cableado todo el tiempo; simplemente nunca se disparó, porque \communicate(timeout=None)\ nunca lanza. El límite ahora es 1800 s por intento por defecto. Matar el grupo de procesos del hijo atascado dejó que la compilación padre reanudara en segundos — había estado estacionada en \communicate()\ durante cuatro horas.

Un error tipográfico no debe desactivar silenciosamente una válvula de seguridad, así que un valor inutilizable (\10m\, \600s\, negativo, \inf\) ahora advierte y mantiene el predeterminado en lugar de caer a "sin corte". \TESSERAE_EXTRACT_TIMEOUT=0\ es la escotilla de escape explícita.

  • \compile --retry-fallbacks\ recupera docs que se degradaron a deterministas. Cuando una extracción falla, el doc se sirve por la línea de base determinista — pero su entrada manifest era byte-idéntica a una extracción limpia, así que \--changed-only\ la saltó en cada compilación posterior y la degradación fue permanente hasta que el contenido del archivo cambió. Recuperar un puñado de docs significaba editar a mano \manifest.json\, con el riesgo de en cambio llenar determinísticamente todo el corpus y destruir horas de trabajo tipado. Tales entradas ahora se marcan y se reintentan bajo demanda, reflejando \distill --retry-fallbacks\.
  • \live_member_count\ en tarjetas \graph_map\. \size\ y \leaf_member_count\ ambos vienen del sidecar \hierarchy.json\, que se escribe a mitad de compilación. Cuando \graph.json\ se reescribe después los dos divergen, y una tarjeta puede anunciar cientos de miembros que se resuelven a nada — sin manera para un cliente de distinguirlo de una tarjeta sana sin releer \graph.json\ mismo. Las tarjetas derivadas del grafo (\kind=community|node\) ahora también reportan cuántos miembros el grafo actual lleva. \0\ significa que el ámbito está muerto: sáltalo en lugar de descender.

En un grafo real de 7,133 nodos esto inmediatamente expuso 2 tarjetas raíz muertas y 42 parcialmente resueltas que nadie había notado.

  • El seam de prueba \_CLIENT_FACTORY\ honra el timeout del llamador. \build_default_json_client\ lo soltó, entregando al falso inyectado un predeterminado de 30 s sin importar — así que una prueba fijando un timeout silenciosamente no probó nada. Solo seam; la composición de producción ya era correcta.

Actualización desde v0.25.0

Funciona directamente, con una cosa a tener en cuenta: la extracción ahora está acotada por defecto (1800 s por intento). Si deliberadamente quieres ejecuciones sin acote, establece \TESSERAE_EXTRACT_TIMEOUT=0\.

El acote es por intento, no por documento — en timeout el cliente rota al siguiente \CODEX_HOME\ / directorio de configuración de claude, así que el peor caso de un documento es \timeout × perfiles configurados\.

Si una compilación pasada dejó documentos atrapados en extracción determinista, recupéralos con:

tesserae compile --changed-only --retry-fallbacks

Solo los documentos cuya extracción tipada realmente falló se reintentan; los limpios se mantienen saltados.