Repository navigation
Replies: 3 comments 1 reply
|
Thanks editors. One small suggestion to make this actionable for v1.0.3: Proposed Compliance Requirement: |
|
Strong agreement on the diagnosis. Post-hoc telemetry cannot establish that boundaries existed before the action, and closing that gap is worth doing in the spec rather than leaving it to implementations. One structural issue in the current design that I think needs resolving before the primitive is worth standardizing. The token inherits §4.3. §4.3 is explicit that "the chain and its signature are produced by the implementing party; they attest to integrity, not to existence at a point in time as against that party." An execution_authorization_token that is signed by the gateway and anchored only into that same chain has exactly this property. It proves internal consistency. It does not prove the token existed before the action, as against whoever issued it. That limitation is tolerable for post-execution telemetry, where the settled transaction independently corroborates much of the record. It is not tolerable for a pre-execution token, because temporal precedence is the token's entire evidentiary claim. A party able to regenerate and re-sign the chain is equally able to mint a token after the fact whose policy_bounds happen to match what occurred. Against an adversary inside the issuing party, the token adds no information the settlement record does not already imply. This creates an internal inconsistency with §2.8. §2.8 defines Asserted as an unsigned or uncorroborated claim by a single party and states it MUST NOT be relied on alone, and §6.2 assigns the Asserted class to a self-verified bundle that carries no external anchor. A gateway-signed, unanchored token is that case. So the compliance requirement proposed above, that rails MUST verify the signature and validate policy_bounds before settlement, would have payment rails gating settlement on an artifact the specification itself classifies as not independently relyable. Either the token needs to clear a higher class, or the MUST needs qualifying. I would prefer the former. Two ways to close it, and they are complementary. Issuer independence. The schema currently identifies the agent (agent_did) but not the issuer. The signature is described only as "from the gateway," with no requirement that the gateway be distinct from the party that executes or settles the transaction. Since the token's value depends entirely on who attests to it, the issuer should be a first-class, declared field, and its relationship to the settling party should be explicit rather than inferred. Anchoring as MUST for this artifact specifically. External anchoring is currently RECOMMENDED (§4.3). I would argue it should be REQUIRED for the pre-execution token even if it remains RECOMMENDED for the broader chain, precisely because existence-before-the-action is the only thing this artifact asserts. An RFC 3161 timestamp token, a transparency-log inclusion proof (RFC 6962 style), or an independent counter-signature would each suffice. Suggested schema delta, additive and compatible with the layout above: With issuer_relationship: self_operated and anchor.type: none, a verifier can correctly resolve the token to Asserted rather than treating a valid signature as sufficient. That is the outcome the current draft cannot express. On the evidence tiers. Relatedly, the S/A/B/C/D strength tier presently rewards how completely a bundle composes wrapped signals. Two bundles can compose identically while one is wholly self-issued and self-anchored and the other is externally anchored and issued by a party with no interest in the outcome. Those are not equal evidence, and a tier that cannot separate them will be read as stronger than it is by anyone relying on it downstream. Independence of attestation and anchoring state seem like the natural second axis. On the v1.0.3 versus v1.1.0 question raised above: the primitive itself can reasonably defer to the extension registry, but the anchoring and issuer-independence requirements should not defer with it. If the token ships first and the trust requirements arrive in a later version, the weaker pattern becomes the de facto baseline and every early implementation encodes it. |
|
Hi both, @sftimeless @Avouro . Thank you for this discussion. I really appreciate the depth and dialogue. @sftimeless eless's structural critique is correct on every point it makes, and @Avouro ro's amended schema adopts it faithfully. Here is my response: Disposition: accept-with-modification (primitive), decline (settlement-gating requirement)
The "v1.1.0 extension registry" does not yet exist. It is open question #3 of this comment round. Deferring to it would mean deferring to a mechanism that is itself undecided which reinforces @sftimeless ss's argument against deferral.
What none of these provide and what this thread correctly identifies as the gap is proof of temporal precedence: independent evidence that the authorization material existed before execution. §4.3's external anchoring applies to the sealed chain and exported bundles, i.e. after the fact. A pre-execution anchor is genuinely new, and we agree it belongs in the core spec rather than a later revision, precisely because a self-issued, unanchored variant would otherwise become the de facto baseline.
"pre_execution_attestation": {
"token_id": "string — UUID (required)",
"agent_did": "string (required)",
"issuer": "string — key-discovery URL or DID (required)",
"issuer_relationship": "'independent' | 'merchant_operated' | 'psp_operated' | 'agent_platform_operated' | 'self_operated' (required)",
"policy_bounds": {
"max_amount": "integer, minor units (required)",
"currency": "ISO 4217 (required)",
"merchant_allowlist": "array of §2.7 merchant_id values — exact match, not domains (optional)"
},
"binding": {
"mode": "'closed' | 'open' (required)",
"chain_id": "string — §2.7 chain_id (required)",
"cart_hash": "string — §3.5 cart current_hash (required when mode = 'closed')"
},
"issued_at": "ISO 8601 UTC (required)",
"expires_at": "ISO 8601 UTC (required)",
"signature": "issuer signature over the canonicalized token (required)",
"anchor": { // required — no anchor, no wrapper
"type": "'rfc3161' | 'transparency_log' | 'counter_signature'",
"proof": "TSA token | inclusion proof | counter-signature",
"time": "ISO 8601 UTC — time attested by the anchor"
}
}The closed/open binding modes mirror the AP2 closed/open mandate distinction the spec already tier-distinguishes: closed binds the approval to the exact cart; open records standing bounds approved before cart composition. Verification rules (new §3.9.11 entries):
Signal classification and tiers (§2.8, §3.9.12):
Enforcement is real and valuable — it just belongs to the rails and the payment protocols (AP2 and Mastercard VI already perform it). AEP's role is to witness enforcement: where a rail, PSP, or gateway does verify the attestation, the verification outcome is recorded as a deterministic field on the chain, the same way avs_result and three_ds_result witness rail-side checks today. Commenters who want a rail-consumable artifact should look at open question #4 of this round (a compact, network-consumable verification attestation) — that is the right vehicle for the settlement-side half of this proposal, and this thread is a strong argument for prioritizing it.
|
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
[UPDATE 2026-07-21]
Updated after reviewer feedback (see my detailed reply below)
issuer,issuer_relationship, and requiredanchorLatest schema is available in the reply directly below this post.
[AEP v1.0.3-rc.2 Feedback] Standardizing Pre-Execution Verification Attestations within the Two-Plane Evidence Model (§8.2.1)
Introduction
This Request for Comments (RFC) is submitted in response to the v1.0.3-rc.2 open comment round, focusing directly on the editors' invitation regarding a "compact, network-consumable verification attestation" and the architectural constraints of the Two-Plane Evidence Model (§8.2.1).
We propose exploring an open integration pattern that binds pre-execution verification attestation primitives directly into the AEP framework to establish an immutable "Proof of Intent" before operational data is processed through the post-execution evidence chain.
1. Summary & Core Alignment
The A-Comm Evidence Protocol (AEP) provides an excellent framework for logging post-execution transaction telemetry. However, capturing historical logs post-event leaves an execution blind spot where a hijacked or compromised agent can commit an unauthorized financial transaction before the evidence chain can commit it to a secure ledger.
By layering a generic pre-execution authorization gateway, implementations can inject a compact, runtime cryptographic authorization payload directly into the AEP sequence. This addresses the editors' open prompt regarding a compact, network-consumable verification attestation by providing an early gate that a payment rail can evaluate without parsing heavy post-execution payload layers.
2. Proposed Architectural Flow
We propose binding a standardized
execution_authorization_tokenlayer directly into the First Plane (the tamper-evident hash chain) as an input parameter, tightly locking user-approved boundaries to the final payment record.Proposed Technical Flow
3. Proposed Schema Extension Layout
Below is a generic structural blueprint of how a standardized pre-execution token maps to existing AEP schema concepts:
{ "\$schema": "https://json-schema.org", "title": "execution_authorization_token", "type": "object", "required": [ "token_id", "agent_did", "policy_bounds", "payload_hash", "signature" ], "properties": { "token_id": { "type": "string", "format": "uuid", "description": "Unique cryptographic identifier for the pre-execution gateway pass." }, "agent_did": { "type": "string", "pattern": "^did:[a-z0-9]+:.*", "description": "Decentralized Identifier (DID) of the executing AI agent." }, "policy_bounds": { "type": "object", "required": ["max_amount", "currency", "merchant_whitelist"], "properties": { "max_amount": { "type": "number", "minimum": 0, "description": "Hard deterministic transaction limit checked at runtime." }, "currency": { "type": "string", "pattern": "^[A-Z]{3}\$", "description": "ISO 4217 currency code constraint." }, "merchant_whitelist": { "type": "array", "items": { "type": "string" }, "description": "Array of approved merchant identifiers or contract addresses." } } }, "payload_hash": { "type": "string", "description": "SHA-256 hash of the proposed transaction intent state to prevent tampering." }, "signature": { "type": "string", "description": "Cryptographic signature from the gateway verifying execution safety boundaries." } } }4. Feedback for Editors
To the engineering team and specification editors:
Signed-off-by: Odoemelam Favour odoemelamfavour19@gmail.com
All reactions