carousell/rctp

Spec changelog

2026-11-10 — Draft 0.5: awaiting_approval

  • rctp-draft-0.5.md D-43: the offer state waiting for the seller's approval is awaiting_approval, not waiting_approval (7.3). v0.3-binding.md 5.1 follows. Agreed with the first marketplace implementer before any implementation shipped.

2026-11-10 — Draft 0.5 review fixes (#92)

  • rctp-draft-0.5.md D-42, from the #92 review: an OAuth call without UCP-Agent uses the profile the marketplace registered for its client, and a present one must match (4.1(1), 4.1(3)); an operator without its own profile accepts its duties in the client registration, and the agent host is not bound by 4.1(4) (4.1(5), 14); entries carry client_id for OAuth and API-key calls (4.1(6), 10.1); the bearer-token controls are named and DPoP noted (4.1(7), 5.3(2)); vectors V34 and V35.
  • v0.3-binding.md 2.2, 2.3 and 13.2 follow; AMBIGUITIES.md adds B-13 (#105).

2026-11-10 — Draft 0.5 and the v0.3 binding

  • Added rctp-draft-0.5.md, the editor's draft of 10 November 2026 and the implementation baseline, incorporating the Draft 0.5 proposal (#91, #95). Decisions D-33 to D-41: the story (delegated by consent, transparent profiles, guardrails enforced); authentication as UCP does it, with authenticated_by and agent_profile on every entry; tier policy owned by the marketplace, the 8.4 table as reference defaults; Listing Terms in plain language with proposed terms pre-filled and confirmed once; the counter term removed and offer.counter optional; the offer state waiting_approval (#81); INV-1, INV-5 and INV-7 restated; S1 restated, V12 retired, V30–V33 added; capability version 2026-11-draft5. Open questions OQ-1 to OQ-4 resolved in Appendix B.1. Lazy consensus runs to 17 November 2026.
  • Added v0.3-binding.md: signed and OAuth requests, unbound tokens for agents that do not sign, proposed terms and prefill on the hosted page, no counter on below_floor, dev.ucp.common.identity_linking at the UCP release version, and the MCP binding (tools, results, errors; #82). v0.2-binding.md and Draft 0.4 become history.
  • AMBIGUITIES.md gains B-10 to B-12 (#101–#103).

2026-10-27 — v0.2 binding and Draft 0.4 erratum

  • Added v0.2-binding.md, the wire choices for the Starter profile of Draft 0.4 (capability version 2026-11-draft4, release v0.2.0-draft.4, UCP release v2026-08-25): UCP profiles with thumbprint kids and UCP request signing, UCP-Agent and Idempotency-Key; Agent Grant discovery, issuance, per-call introspection and revocation; Listing Terms on the hosted page with terms_commitment; offers with Deal Terms, negotiation_id, supersedes, expires_at, reservation and checkout; the RCTP-Decision header and check order; approvals at hosted_embedded; deal events and money rules; UCP signed webhooks; discovery and versions; the reference gateway's endpoints. It replaces v0.1-binding.md, which stays as the record of v0.1. AP2 buyer authority (V25) is deferred to #59 rather than implemented with custom cryptography (INV-8).
  • rctp-draft-0.4.md erratum D-32: RCTP scopes are declared in config.scopes of the dev.ucp.common.identity_linking capability, as every UCP scope is, not in the RCTP capability configs (corrects D-29). Sections 5.2 and 7.1.
  • AMBIGUITIES.md gains the readings v0.2 implements, B-1 to B-9, each the more restrictive one: profile key kid is its JWK thumbprint (B-1); RFC 9421 created and expires are required (B-2); introspection adds grant_status (B-3); the listing approval challenge is computed after the terms are submitted (B-4); an approved ask needs a live grant, not a current access token (B-5); counterparty_requirements refuse every offer until Party Credentials exist (B-6); an event without its required observation is refused (B-7); no Starter event attests handover_inspection_passed (B-8); the seller pseudonym is pairwise per operator (B-9).

2026-10-27 — Draft 0.4 adopted for v0.2

  • rctp-draft-0.4.md adopted for v0.2 (D-31, #21). Open issues OI-1 to OI-13 resolved and moved to Appendix B: no agent pre-fills terms; offer.accept defaults to ask; term sets goods.small/1 and vehicles/1; grants last at most 90 days with refresh; no agent ever sees private terms, even at the seller's request; buyer defaults kept as a rule; header RCTP-Decision; UCP release v2026-08-25 pinned, with UCP Ask at commit f2626c2 until released; capability version 2026-11-draft4, with 2026-10-draft3 served beside it for at most 90 days; viewings out of scope. Decisions D-20 to D-30 confirmed.
  • The Draft 0.4 proposal is marked adopted and superseded by the draft. AMBIGUITIES.md now cites the adopted draft.

2026-10-27 — Draft 0.4 review fixes

  • rctp-draft-0.4.md: accepting an offer reserves the listing, and other accepts get the new reason listing_reserved (D-24); accepted Deal Terms are fixed until the checkout is redeemed or expires (D-25); every offer and counter has expires_at, capped at available_until (D-26); offers carry negotiation_id and supersedes, and a new state superseded (D-27); dev.rctp.offer is a standalone capability that produces a checkout (D-28). INV-6 restated to allow at most one live checkout per listing; vectors V26–V29 added.
  • Two capabilities, dev.rctp.listing and dev.rctp.deal, replace dev.rctp.offer and dev.rctp.terms (D-29). dev.rctp.deal covers offers through the deal record. Every seller scope sits under one of them (for example dev.rctp.deal:offer_accept); fixed forbid verbs have no scope. Resolves OI-7 and OI-13.
  • Verbs renamed so each prefix names its capability: order.commit_to_ship is now deal.commit_to_ship, and passport.disclose_full_report is now deal.disclose_passport (D-30).

2026-10-21 — Draft 0.4 editor's draft

  • Added rctp-draft-0.4.md, the full Draft 0.4 text in specification form: metadata, abstract, status, numbered sections, conformance, references, examples (Appendix A), open issues OI-1 to OI-12 (Appendix B), and the decision log D-1 to D-23, resolved ambiguities A-1 to A-14 and change history (Appendix C). Incorporates the Draft 0.4 proposal and its section 13. Not normative for this repository until v0.2.0-draft.4.
  • Companion note Trusted Agents for Second-Hand Trade updated to Draft 0.4: the minimum core on UCP and AP2, six fixed rules, Deal Terms, signed delivery and returns, the holder of funds, and eleven challenges.

2026-10-21 — Draft 0.4 proposal, section 13

  • Minimum core on UCP and AP2: what RCTP reuses, its five core pieces, six fixed rules, review decisions, changes to the proposal (Deal Terms, listing end date, UCP identity and webhooks, attested UCP order events) and open questions.

2026-10-20 — Draft 0.4 proposal

  • Added proposals/draft-0.4-listing-terms-and-agent-grants.md: Agent Grants and Listing Terms replace the Seller Mandate; term sets per category; new verbs offer.create and listing.set_terms; reason codes grant_* and terms_invalid; Starter refunds; resolutions for A-1 to A-14. Not normative until adopted.
  • Added the companion note companion/note-trusted-agents-draft-0.4.md.
  • AMBIGUITIES.md gains a column with each entry's resolution under the proposal.

2026-10-14 — repository import

  • Imported RCTP Specification Draft 0.3 (10 October 2026) verbatim as rctp-draft-0.3.md; the decision-flow figure is rendered as text.
  • Applied repository decisions: dev.rctp.* names, capability version 2026-10-draft3.
  • Added v0.1-binding.md, the wire choices for the Starter profile, and AMBIGUITIES.md (A-1 to A-13).
  • Imported the white paper and upstream proposals (Draft 0.2) as informative companions.

Source: spec/CHANGELOG.md