feat(gateway): add recoverable mobile approvals - #63197
Conversation
Port mr.Shu’s upstream exact-request binding onto the current gateway architecture. Assign Hermes-owned approval IDs with redacted lifecycle descriptors, finite expiry, terminal metadata, and short-lived tombstones. Preserve legacy FIFO/all callers while making targeted late, duplicate, stale, expired, invalid, and unknown outcomes deterministic. Propagate the core identity through the gateway notify seam and every current approval surface: Slack, Telegram, Feishu, Discord, Matrix, QQBot, WhatsApp Cloud, and Teams. Keep each platform’s current authorization checks and prevent raw secret-shaped prompt data from crossing those boundaries.
|
Thanks for the detailed approval-recovery work. The underlying premise remains valid on current The branch is currently a conflicting draft ( Automated hermes-sweeper review. |
Summary
approval.respondwith durableclient_request_idreceipts, stable lineage validation, replay/conflict semantics, and exact out-of-FIFO resolutionStack / review order
This integration branch intentionally combines the foundations under:
Approval recovery depends on all three seams, so this PR is the end-to-end integration review for the approval slice. It should remain draft until those foundations are reconciled.
Cuttle contract tracking: https://github.com/ericlewis/cuttle/issues/5
Parent contract: https://github.com/ericlewis/cuttle/issues/1
Safety and compatibility
conversation.control, exactapproval_id, durableclient_request_id, and stableexpected_stored_session_idallbehavior is unchangedValidation
139 passed— focused approval identity + mobile contract/sync/mutation suites732 passed— every test file changed by this branch relative to the revisioned-sync basegit diff --checkpassedEight existing async-mock warnings remain in QQ/Slack adapter tests; there were no failures.