Repository navigation
§ 4.1, § 5.6.1 — Commitments carry proposal_id and version (#24) - #73
Kishore-2572 wants to merge 3 commits into
Conversation
A commitment names the proposal and version it was priced against (§ 5.6.1). The seller rejects a new attempt on a stale version, or past valid_until or price_valid_until, and returns the current version. An authenticated replay with the same idempotency_key and terms returns the stored result without re-running those checks; the same key with different terms is a conflict. Keys are opaque and scoped to one buyer and seller pair. § 4.1 states that each revision while published increments version. The display, CTV and audio examples carry proposal_id and version. Refs #24
|
Postindustria (IAB Tech Lab member). @Kishore-2572, thanks for folding in @aleksUIX's replay wording. Four points:
Analyzed and generated with the help of Claude, fully reviewed by me. |
From the Postindustria review on #73: - a replay matches on the same body, every value the buyer sent except idempotency_key, and returns the stored result whether an acceptance or a rejection; a retry against a new version uses a new key; - version increments on each revision of the proposal, not only while published, so a counter under review also moves it; - "deterministic" now says what the checks depend on: the stored proposal and the time the seller receives the attempt; - the price check names the pricing[] entry the commitment is priced against. Refs #24
|
Thank you, @KonstantinMirin. All four are in the latest commit: the replay rule now matches on the body (every value except |
|
Thank you, @Kishore-2572. Postindustria (IAB Tech Lab member) checked Analyzed and generated with the help of Claude, fully reviewed by me. |
|
Thanks for checking, @KonstantinMirin. |
What this changes
A commitment now names the proposal and version it was priced against (
proposal_id,version, § 5.6.1). The seller rejects a new commitment attempt on a stale version, pastvalid_until, or past theprice_valid_untilof thepricing[]entry it is priced against, and returns the current version so the buyer can fetch it again. These checks depend only on the stored proposal and the time the seller receives the attempt. A replay of an attempt already processed (sameidempotency_key, same body) returns the stored result, acceptance or rejection, without re-running those checks, and the same key with a different body is an explicit conflict, as @aleksUIX suggested on #24.idempotency_keyvalues are opaque and scoped to one buyer and seller pair, in line withiab-agentic-primitivesFD-12. § 4.1 states that each revision of the proposal incrementsversion.Related issue
Refs #24. #23 (draft PR #70) relies on these version rules for "same proposal and version".
Type
Checklist
commitment;scripts/check_appendix.pypassesexamples/is updated and still parses — the display, CTV and audio commitments carryproposal_idandversion; § 6.3 points to the CTV exampleselectabledeclaresavailable[]andincluded[]; anythingsettabledeclares bounds (§ 3.1, § 3.2) — no newselectableorsettablefieldsKnock-on effects
proposal_idandversionis rejected.version, so a revision to one line item rejects a commitment on an unchanged one (Postindustria on [Change] § 4.1, § 5.6.1 — Commitments must carry proposal_id and version; stale versions are rejected #24). Not resolved here, for the working group:commitment.offer_digest, which depends on the binding record in [Change] § 4.1 — Define record_digest and assent[]; defer signer identity to the AAMP profile #63;idempotency_keyvalues (Postindustria suggests at least untilvalid_until);idempotency_keyfromcommitmentto the request (Postindustria on [Change] § 4.1, § 5.6.1 — Commitments must carry proposal_id and version; stale versions are rejected #24);statusgates the freeze ([Change] § 3, § 2.2, § 5.6.1 — Name whose status gates seller-set revisions #60), andproposal_idon every line item ([Change] § 2, § 4.1, § 5.1 — Name the line-item container (line_items[]) and carryproposal_idandseller_idon every line item representation #31).idempotency_key); a retry against a newversionuses a new key;versionincrements on every revision, including a counter whileunder_review, leaving which changes count as a revision to [Change] § 4.1 — Freeze a version's offered terms; changes create version n+1 and a revised entry #64; "deterministic" is defined; the price check names thepricing[]entry the commitment is priced against.pricing[]entry ([Change] § 5.6 — Give cost_method an extensible vocabulary, and say what several pricing[] entries mean #94 proposescommitment.pricing_id).version: 1, matchingexamples/proposal.yaml.By opening this pull request I agree my contribution may be published under this
repository's licence, as set out in CONTRIBUTING.md.