- From: Barathan Venkateswaran <barathan.venkateswaran@gmail.com>
- Date: Tue, 21 Jul 2026 10:57:37 -0700
- To: ietf-http-wg@w3.org
- Cc: ajamwal@salesforce.com
- Message-ID: <CANfWo5xLeW1NQu=CvvCUP8Oig8raujWwj0wv0cXSdWGTKHxY=A@mail.gmail.com>
Hi all, We've published -01 of an Independent Submission that may be of interest to this group: https://datatracker.ietf.org/doc/draft-venkateswaran-jamwal-twophp/ What it is ---------- A backward-compatible, opt-in extension to HTTP that adds a two-phase handshake at each service boundary, so that both client and server durably register a mutation intent before any processing begins. The registered intent is written to a queryable local ledger, allowing a client that does not receive an expected response to inspect whether the prior intent was registered before issuing a retry. What it is not -------------- This is not Two-Phase Commit. There is no cross-service locking, no distributed transaction coordinator, no thread blocking. The "DTT" in the title expands to Distributed Transaction *Tracking*. Framing ------- We do not claim novelty. Intent tracking, idempotent retries, and correlation-based inspection are patterns implemented today across microservices deployments, typically ad hoc and per-team. The goal of this draft is a consistent, standardized wire contract -- HTTP header fields plus a ledger schema -- so that a common implementation, packaged as a library or framework middleware, can serve heterogeneous deployments without per-vendor reinvention. The draft is compatible with existing idempotency conventions such as `Idempotency-Key`; where both are present, the correlation identifier defined here can carry the same value. Motivator --------- The specific gap that prompted this work is retry-storm behavior in agent-driven HTTP integrations -- MCP tool calls and agent-to-agent workflows -- where the default retry behavior of an unacknowledged request, in the absence of a queryable intent record, can push an already-overwhelmed server into cascading failure. This is a synchronous-HTTP problem; async patterns (202 Accepted + Location polling, Prefer: respond-async, webhooks, brokers) already have durable acknowledgement built into the wire contract and are out of scope here. Changes from -00 ---------------- - Dropped the async server-to-client callback mechanism (SSRF surface, delivery reliability, no operational win over what the sync path already provides). - Sync-only in this revision; async explicitly out of scope by design. - DTT-2PHP-Client-Correlation-ID is mandatory in every mode, including Auto-Confirm; server-generated proxy identifiers are not permitted. - Ledger architecture moved from normative wire spec to implementation guidance. - Replay policy collapsed to REJECT-only. - Editorial: workgroup element removed (independent submission), RFC 9110 Section 16.3.1 replaces RFC 3864 for the field-name registry. Where we would appreciate feedback ---------------------------------- - Whether the framing (standardization of an existing pattern) lands correctly, or whether the draft should reposition. - Overlap with draft-ietf-httpapi-idempotency-key -- we believe the two are composable, and would appreciate confirmation or objection. - Known gaps we already have a working local -02 addressing: ABNF for every registered field, Phase 2 endpoint derivation contract, a well-known-URI-based client-facing ledger query endpoint, a Phase 1 replay rule, and a preemptive BCP 178 note on the DTT- prefix. We intend to file -02 after a short review window on -01. Early feedback on the -01 scope is welcome while -02 bakes. Thanks in advance for any comments. Best Regards, Barathan Venkateswaran, Aditya Jamwal
Received on Wednesday, 22 July 2026 13:48:39 UTC