v2.20.3
Fixed
- Coerción boolean-like residual en
matchConditions(I2): nueva función pura exportadadetectResidualBooleanStrings(conditions)enroute-dispatcher.jspara detectar valores"true"/"false"string que no pasaron por la coerción del parser (p.ej. tablas de routing construidas programáticamente en vez de parseadas desde YAML), evitando que condicionesbugfix/refactor/hotfixcaigan silenciosamente al routestandard. Test de regresión end-to-end contra la tabla real deopenspec/config.yaml. - Desalineación entre el presupuesto de timeout del hook
SessionStarty elstaleMsdel lock (I3):staleMs/staleLockAgebajado de 10s a 5s en ambos runtimes (ospec-state.jsyinternal/store/store.go, con constantes nombradas), yhooks/hooks.jsonahora declaratimeout: 5explícito paraSessionStart(antes era el único hook sin timeout declarado). Nuevo test de coherencia hooks.json↔constantes de lock en JS y Go.
Changed
- Sincronizados
openspec/specs/routing/spec.md,openspec/specs/hooks/spec.mdyopenspec/specs/hooks-runtime/spec.mdcon el comportamiento anterior.
Cambio guiado por SDD (ruta lite) con TDD estricto. Verificación: PASS WITH WARNINGS (19/19 tareas, 1038/1038 tests JS + todos los paquetes Go verdes). Change archivado en openspec/changes/archive/2026-07-07-route-coercion-lock-budget/.