Contexto auditado
T3 Code separa requests finitos, subscriptions durables y commands; el supervisor sustituye sesiones y sus tests exigen metadata idempotente para commands en cola. Referencia: Connection Runtime.
Brecha actual
En Brio, abortar en Mobile solo elimina el promise local en brio.ts. El Relay no acepta frame cancel; conserva la entrada pendiente hasta terminal/disconnect/TTL. El connector ejecuta cada handler con el contexto global de la conexión, así que no cancela Hermes cuando un request individual se abandona. Si la red cae, no hay ACK, cursor, resume ni definición de retry seguro; reenviar una mutación puede duplicar efectos.
Propuesta
- Versionar el protocolo con
request, accepted/ack, cancel, terminal y resume.
- Separar
frame_id de un operation_id/idempotency key estable.
- Relay debe reenviar cancel y liberar pending; connector debe guardar un cancel func por operación y propagarlo a Hermes.
- Definir qué operaciones son retryable, idempotentes o “resultado desconocido”; nunca reintentar mutaciones a ciegas.
- Para streams, persistir/usar sequence cursor y reanudar desde el último ACK sin duplicar chunks/eventos.
- Permitir consultar el resultado terminal por operation ID durante una ventana acotada.
- Limpiar estado en terminal, expiración, unlink, revocación y disconnect; aplicar budgets por device/agent.
- Añadir errores estructurados: cancelled, expired, duplicate, result_unknown y resume_unavailable.
Criterios de aceptación
- Cancelar desde Mobile detiene el trabajo upstream y libera los tres niveles: Mobile, Relay y connector.
- Un disconnect tras ACK no duplica una mutación al reconectar.
- Un stream reanudado no pierde ni repite eventos y conserva orden.
- Dos frames con el mismo operation ID devuelven el mismo resultado o un conflicto definido.
- El estado retained tiene TTL y límites; no crece sin cota.
- Tests cubren carreras cancel/terminal, reconnect antes/después de ACK, replacement de connector, expiración, backpressure y multi-device.
Complementa #3 (transporte en tiempo real) y #4 (contrato versionado).
Contexto auditado
T3 Code separa requests finitos, subscriptions durables y commands; el supervisor sustituye sesiones y sus tests exigen metadata idempotente para commands en cola. Referencia: Connection Runtime.
Brecha actual
En Brio, abortar en Mobile solo elimina el promise local en brio.ts. El Relay no acepta frame
cancel; conserva la entrada pendiente hasta terminal/disconnect/TTL. El connector ejecuta cada handler con el contexto global de la conexión, así que no cancela Hermes cuando un request individual se abandona. Si la red cae, no hay ACK, cursor, resume ni definición de retry seguro; reenviar una mutación puede duplicar efectos.Propuesta
request,accepted/ack,cancel, terminal yresume.frame_idde unoperation_id/idempotency key estable.Criterios de aceptación
Complementa #3 (transporte en tiempo real) y #4 (contrato versionado).