Skip to content

fix: use RFC 8785 ordering in conformance runner - #3

Draft
eriknewton wants to merge 1 commit into
a202-protocol:mainfrom
eriknewton:codex/a202-rfc8785-runner
Draft

fix: use RFC 8785 ordering in conformance runner#3
eriknewton wants to merge 1 commit into
a202-protocol:mainfrom
eriknewton:codex/a202-rfc8785-runner

Conversation

@eriknewton

Copy link
Copy Markdown

Closes #2143.

1. What kind of change is this

  • Normative. It alters what a conformant implementation has to do, may do, or must refuse. A proposal is required.
  • Editorial. It alters no normative statement: a typographical fix, a clarification whose meaning is unchanged, a corrected internal link, or an example that exercises no new behaviour.
  • Repository machinery. Workflows, templates, or other files outside the specification set.

2. Which proposal does it land under

Proposal: pending the maintainer's short numbered correction proposal described in a2aproject/A2A#2143 (comment).

This PR is intentionally a draft until that proposal exists and can be cited here. It does not move the proposal stage.

3. What changed

The conformance runner now loads reference/a202_reference/canonical.py as its single canonicalization implementation instead of maintaining a second json.dumps(sort_keys=True) path. This makes non-ASCII object-member ordering follow RFC 8785 UTF-16 code-unit order.

A focused fixture covers the key pair U+1F6A2 and U+E000 and also proves that content_hash, signatures, and kernel_annotations remain excluded from hashed bytes.

4. Conformance

  • The conformance suite passes: python3 conformance/run-conformance.py (148/148)
  • The reference tests pass: python3 -m unittest discover -s tests -t . from reference/ (35/35)
  • The MCP server tests pass: python3 -m unittest discover -s a202_mcp/tests -t . from reference/ (108 pass, 4 environment skips because the MCP SDK is not installed)

Does any fixture change its pass or fail classification?

  • No fixture changes classification.
  • A fixture changes classification, and the statement of why the specification now says something different is below. GOVERNANCE.md section 3.4 requires it.

5. Compatibility

ASCII-only canonical output is unchanged. Implementations that reproduced the runner's previous Python code-point ordering for non-ASCII member names will compute different hashes for those objects; migration is to use RFC 8785 UTF-16 code-unit ordering, already implemented by the reference canonicalizer.

6. Scope

  • This change introduces no commercial material, no competitive comparison, no pricing, no customer reference, and no implementation mechanism behind a published property. The boundary is in CONTRIBUTING.md and CHARTER.md sections 2 and 3.
  • Every link and path added by this change resolves inside this repository.

7. Review

  • This change is reviewed by someone other than its author, per GOVERNANCE.md section 3.2, or the reason that requirement cannot currently be met is stated on this pull request.

Independent adversarial Claude Sonnet review returned VERDICT: SOUND. The repository-required other-author review remains pending, so this PR stays draft.

Signed-off-by: eriknewton <38265121+eriknewton@users.noreply.github.com>
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.

1 participant