Skip to content

docs(execution-action-binding): record that the vectors cannot test member ordering - #652

Open
qubeena07 wants to merge 1 commit into
agentrust-io:mainfrom
qubeena07:docs/execution-action-binding-member-ordering-630
Open

qubeena07 wants to merge 1 commit into
agentrust-io:mainfrom
qubeena07:docs/execution-action-binding-member-ordering-630

Conversation

@qubeena07

Copy link
Copy Markdown
Collaborator

Closes #630.

The six vectors in execution-action-binding-v1-vectors.json cannot tell an RFC 8785 conformant canonicalizer, which sorts object members by UTF 16 code unit, from one that sorts by raw Unicode code point instead. The two orders only disagree when an object has one member name in the supplementary plane, above U+FFFF, encoded in UTF 16 as a surrogate pair, alongside another member name in the E000 through FFFF range. None of the six vectors have that shape, so both a conformant and a non conformant canonicalizer reproduce every digest in the set and pass.

The issue named two acceptable fixes. Add a vector that actually discriminates the two orderings, or state plainly that ordering is not exercised because the preimage shape makes it structurally unreachable. Read the contract in execution-action-binding.md before picking one. The v1 preimage is fixed to exactly six ASCII named members, domain, version, agent_id, action_type, action_scope, action_timestamp, each holding a plain string or the integer 1, never a nested object, and the contract itself says a producer must not add, remove, rename, or reinterpret a member while still calling the result a v1 execution action binding. There is no way to introduce a member name pair that would diverge under the two sort rules without breaking that rule. So a real discriminating vector cannot be built for this profile, the second option is the correct fix, not a shortcut.

What this does

Adds a paragraph to the Conformance evidence section of execution-action-binding.md stating this plainly, with the reasoning above, and pointing at agentrust io slash trace spec issue 231 as the same structural gap already recorded in a different vector set.

Adds a matching short note as a top level field in execution-action-binding-v1-vectors.json itself, so someone reading only the JSON sees the same statement without needing the prose doc.

No code or tests touched. Nothing in this repo consumes this vectors file as a runtime fixture, it is a conformance artifact for external implementers, confirmed by grepping src and tests for any reference to it.

Testing

Ran the full suite, 1884 passed, 14 skipped, same 3 pre existing failures as on main, all unrelated local environment issues with subprocess module resolution, nothing to do with this change. Validated the edited JSON file parses cleanly.

@qubeena07
qubeena07 requested review from a team, carloshvp and zohebk8s as code owners September 15, 2026 15:49
@codecov-commenter

Copy link
Copy Markdown

⚠️ Please install the 'codecov app svg image' to ensure uploads and comments are reliably processed by Codecov.

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@imran-siddique imran-siddique left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The fixed-field explanation addresses the documentation option in #630. Before merging, please correct two statements:

  • Replace “sorting below the Basic Multilingual Plane” with “sorting before BMP characters in U+E000 through U+FFFF.” The ordering is defined in RFC 8785 §3.2.3.
  • Remove the claim that TRACE #231 has the same structural limit. That thread confirms a working discriminating vector; its preimage permits member names that this profile excludes.

Commit b737f08 also lacks the Signed-off-by trailer required by CONTRIBUTING.md. Please supply your own sign-off when updating the branch. Could you make these corrections by September 17?

…ember ordering

Closes agentrust-io#630. The six vectors in execution-action-binding-v1-vectors.json
cannot tell an RFC 8785 conformant canonicalizer, which sorts object
members by UTF 16 code unit, from one that sorts by raw Unicode code
point, since no vector has a member name pair that diverges under the
two rules.

The v1 preimage's member set is fixed to six ASCII named top level
members holding only strings or the integer 1, so a diverging pair
cannot be introduced without adding, renaming, or reinterpreting a
member, which the contract already forbids. A discriminating vector
is therefore not constructible for this profile.

Records that gap plainly in both the contract doc and the vectors
file itself.

Signed-off-by: Dipika Ranabhat <qubeena7@gmail.com>
@qubeena07
qubeena07 force-pushed the docs/execution-action-binding-member-ordering-630 branch from b737f08 to 01e41e0 Compare September 15, 2026 20:19
@qubeena07

Copy link
Copy Markdown
Collaborator Author

Pushed 01e41e0 with all three fixed.

Corrected the ordering description to sorting before BMP characters in U+E000 through U+FFFF, matching RFC 8785 section 3.2.3, instead of the vaguer Basic Multilingual Plane phrasing.

Removed the trace-spec#231 comparison entirely, since that thread actually has a working discriminating vector and its preimage allows member names this profile does not, so it is not the same structural limit.

Amended the commit with a sign off, git commit -s, per CONTRIBUTING.md.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

execution-action-binding v1 vectors cannot discriminate RFC 8785 ordering from a code-point sort

3 participants