Skip to content

fix(observations): la síntesis usa el proveedor vigente, no uno clavado a mano - #244

Merged
wolverin0 merged 1 commit into
mainfrom
fix/observation-llm-dead-provider
Aug 30, 2026
Merged

fix(observations): la síntesis usa el proveedor vigente, no uno clavado a mano#244
wolverin0 merged 1 commit into
mainfrom
fix/observation-llm-dead-provider

Conversation

@wolverin0

Copy link
Copy Markdown
Owner

La causa raíz

DreamWorker._observation_llm forzaba el proveedor:

with use_call_scoped_env({"MEMORYMASTER_LLM_PROVIDER": "opencode", ...}):

opencode es el camino GLM/zai-coding-plan, dado de baja el 2026-08-20. El consolidador migró a Antigravity ese mismo día (providers.py:create_dream_consolidator), y este call site quedó atrás — mandando un modelo de Antigravity a un proveedor muerto.

Cómo se veía

Una sola causa explica las tres señales que estaban sueltas:

Señal Dónde
opencode: provider call failed code=call_failed ×2 cada corrida en dream.log
graph_observations: {failed: 2} mismo resumen de corrida
Backlog PPR-7 con 2 retryable + 1 blocked tras estar drenado (4.483 jobs, 0 pendientes) el 20-08

Evidencia sobre los jobs reales

Corridos el 2026-08-30 por el proveedor por defecto:

  • #11369 (8 claims) → componente OK, prompt 3.991 chars, llamada OK, parse OK, decision=emit
  • #11370 (5 claims) → componente OK, prompt 2.291 chars, llamada OK, parse OK, decision=emit

Por opencode, los mismos fallan siempre.

#8924 es otra cosa: su soporte cambió desde que se encoló, así que no puede completarse nunca. Terminal legítimo — pero etiquetado synthesis_failed en vez de support_changed porque except Exception: (sin capturar) aplasta la razón. Es el tercer caso del mismo patrón en este repo: el error_code guardado nombra el síntoma y destruye la causa, igual que el AntigravityError que tapó diez días de ProfileValidationError.

Sin tocar la base

Los dos vivos tienen 3 de 5 intentos y su next_attempt_at ya venció: la próxima corrida de dreaming los toma y pasan solos.

Lo que NO toqué, a propósito

GLMConsolidator no es código muerto. create_dream_consolidator lo deja elegible por variable de entorno para que volver al plan cueste una línea de config y no un commit — está documentado en su docstring. Lo muerto era clavar ese proveedor en un call site que nadie repasa. La opción se queda; el test fija el default, no borra la alternativa.

188/188 en tests de dreaming y observaciones, ruff limpio.

…do a mano

`_observation_llm` forzaba MEMORYMASTER_LLM_PROVIDER="opencode" — el camino GLM
que se dio de baja el 2026-08-20. El consolidador migro a Antigravity ese mismo
dia (`providers.py:create_dream_consolidator`) y este call site quedo atras,
mandando un modelo de Antigravity a un proveedor muerto: falla garantizada.

Se veia en produccion como `opencode: provider call failed code=call_failed` dos
veces por corrida de dreaming, con `graph_observations.failed=2` al lado, y
dejaba jobs de sintesis girando en backoff hasta agotar los 5 intentos. El
backlog PPR-7 paso de drenado (4.483 jobs, 0 pendientes al 2026-08-20) a tener
2 retryable y 1 blocked.

MEDIDO el 2026-08-30 sobre los jobs reales: #11369 (8 claims) y #11370 (5
claims) arman componente, llaman y parsean sin error por el proveedor por
defecto, y los dos devuelven decision=emit. Por `opencode` fallan siempre.
completarse nunca — terminal legitimo, mal etiquetado como synthesis_failed en
vez de support_changed porque el except lo aplasto.

No se toca la base: los dos vivos tienen 3 de 5 intentos y su next_attempt_at ya
vencio, asi que la proxima corrida los toma y pasan solos.

Lo que NO se toco, a proposito: `GLMConsolidator` NO es codigo muerto.
`create_dream_consolidator` lo deja elegible por variable de entorno para que
volver al plan cueste una linea de config y no un commit. Lo muerto era clavar
el proveedor en un call site que nadie repasa; la opcion se queda.

El test ancla el requisito ("la sintesis usa el proveedor vigente"), no la
implementacion: falla si alguien vuelve a envolver la llamada en un override,
sin importar cual elija.

188/188 en tests de dreaming y observaciones, ruff limpio.
@wolverin0
wolverin0 force-pushed the fix/observation-llm-dead-provider branch from 8090ce0 to 88b2cbc Compare August 30, 2026 17:54
@wolverin0
wolverin0 merged commit a533e93 into main Aug 30, 2026
15 checks passed
@wolverin0
wolverin0 deleted the fix/observation-llm-dead-provider branch August 30, 2026 18:43
wolverin0 added a commit that referenced this pull request Aug 30, 2026


15339 -> 15421 simbolos, 39065 -> 39209 relaciones. Regenerado con
--embeddings para no perder los 12.074 existentes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant