fix(observations): la síntesis usa el proveedor vigente, no uno clavado a mano - #244
Merged
Merged
Conversation
…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
force-pushed
the
fix/observation-llm-dead-provider
branch
from
August 30, 2026 17:54
8090ce0 to
88b2cbc
Compare
wolverin0
added a commit
that referenced
this pull request
Aug 30, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
La causa raíz
DreamWorker._observation_llmforzaba el proveedor:opencodees 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:
opencode: provider call failed code=call_failed×2dream.loggraph_observations: {failed: 2}Evidencia sobre los jobs reales
Corridos el 2026-08-30 por el proveedor por defecto:
decision=emitdecision=emitPor
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_faileden vez desupport_changedporqueexcept Exception:(sin capturar) aplasta la razón. Es el tercer caso del mismo patrón en este repo: elerror_codeguardado nombra el síntoma y destruye la causa, igual que elAntigravityErrorque tapó diez días deProfileValidationError.Sin tocar la base
Los dos vivos tienen 3 de 5 intentos y su
next_attempt_atya venció: la próxima corrida de dreaming los toma y pasan solos.Lo que NO toqué, a propósito
GLMConsolidatorno es código muerto.create_dream_consolidatorlo 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.