5.2 KB · updated 2026-07-31 · md

v0.28.4.es.md

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

Tesserae v0.28.4 — tus otras cuentas nunca se estaban usando

<!-- translations:start -->

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

<!-- translations:end -->

Released 2026-07-31 · PyPI · GitHub release · pip install --upgrade tesserae==0.28.4

Tesserae rota entre tus cuentas de CLI con sesión iniciada para que una cuenta limitada ceda el paso a la siguiente, en vez de perder el resto de la ejecución en extracción determinista. Ese bucle estaba apagado — y precisamente en la forma más habitual de ejecutar Tesserae.

Una variable de entorno desactivaba todo el mecanismo

Definir CLAUDE_CONFIG_DIR o CODEX_HOME reemplazaba la lista de cuentas descubiertas por ese único directorio. Cada proceso lanzado desde una sesión de Claude Code hereda CLAUDE_CONFIG_DIR, así que una compilación solo podía usar la cuenta de la sesión que la inició, y cuando esa cuenta se agotaba la rotación no tenía adónde ir.

Medido en el propio grafo de este proyecto, en un solo día:

  • una compilación agotó el límite de 5 horas de una cuenta y dejó 1.531 documentos en extracción determinista mientras otras dos cuentas con sesión iniciada estaban ociosas con la cuota entera;
  • una ejecución posterior perdió 1.590 más por el OAuth caducado de una cuenta, con una cuenta sana justo al lado.

El grafo había encogido en silencio de ~13.000 nodos a 5.155 antes de que nadie lo notara.

Ahora la variable de entorno nombra la cuenta que se intenta primero, no la única que puede intentarse.

Tú eliges qué cuentas se gastan

llm_claude_config_dirs y el nuevo llm_codex_homes (una lista, en orden de rotación) son la autoridad cuando están definidos: no se prueba nada fuera de ellos, y ganan a la variable de entorno ambiental, que se hereda en lugar de elegirse.

{
  "llm_codex_homes": ["/Users/you/.codex-work", "/Users/you/.codex-personal"]
}

Cada proveedor conserva su clave porque un directorio de configuración de Claude CLI y un home de Codex son cosas distintas en disco. El descubrimiento de Codex ahora exige además auth.json, lo que en una máquina real excluyó 24 archivos sueltos ~/.codex-*.log, cada uno de los cuales costaba un codex exec condenado por documento.

Una cuenta agotada ya no cuesta un subproceso por documento

La cuota es un hecho de la cuenta, no del documento. Una vez que todas las cuentas configuradas informaban de su límite, la ejecución seguía lanzando un hijo del CLI por cuenta y por documento restante para que le dijeran lo mismo. Ese veredicto ahora se recuerda durante el resto de la ejecución.

Es deliberadamente difícil de disparar: cada cuenta probada debe ser un callejón sin salida demostrado, y al menos una debe haber dicho «you've hit your … limit» explícitamente. Un solo tiempo de espera entre ellas y la ejecución sigue intentándolo: transitorio no es agotado. El veredicto es por cliente, así que un demonio de larga vida no se queda bloqueado tras el reinicio del límite.

Una compilación que pierde su capa conceptual ahora lo dice

Compiled project wiki: processed=2492 skipped=0 fallbacks=1531 nodes=… edges=…
WARNING: 1531 of 2492 document(s) (61.4%) fell back to deterministic extraction —
their concept layer is missing from this graph.

fallbacks=N viaja en la línea de resumen legible por máquina para que CI pueda condicionarse a ella; la línea para humanos sube de note: a advertencia por encima del 50 %. Ambas nombran la recuperación, que no exige recompilar el corpus:

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

Esto es #92. El silencio es lo que hizo invisibles durante un día todos los fallos anteriores. El código de salida no cambia: eso es un cambio de contrato para cualquier cosa que ejecute compile en un script, y merece su propia decisión.

Además

El extractor de Claude ya no pasa --max-turns 1. Esa bandera cuenta llamadas a herramientas y no respuestas, así que en una máquina con servidores MCP configurados la primera llamada del modelo gastaba el único turno y el CLI salía antes de emitir JSON. Lo que la intención de «una sola pasada» realmente requiere es --strict-mcp-config.

@jokerized/tesserae ahora se publica desde GitHub Actions mediante publicación de confianza OIDC de npm, así que las versiones llevan atestaciones de procedencia y ya no existe ningún token npm de larga duración.

Actualizar desde v0.28.3

Sustitución directa. Sin cambios de API ni de esquema; llm_codex_homes es aditivo y el singular llm_codex_home sigue funcionando.

Si usas varias cuentas, recompila. Las versiones anteriores pueden haber dejado documentos degradados que una ejecución nueva recupera, y la caché hace que solo cuesten los archivos afectados:

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