docs/spec: close Go verifier findings on Anchor Format §1 escaping rules, verifier-compatibility README, and Acta crosswalk (#448 items 3, 16, 19)
Maintainers usually reply within 1 day
Assessment
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Newbie friendliness
- 20/100
- Issue type
- Documentation
- Clarity
- Clearly specified
- Activity status
- Stale
- Tech stack
- python
- Domain
- documentation
Research direction
Start with the three named documents: spec/registry-anchor-v1.md §1 (lines 54-65), examples/verifier-compatibility/README.md, and the two 3.3.2 references in docs/crosswalks/acta-decision-receipts.md, checked against spec/trace-v0.2.md §3.3. Any code changes touch src/agentrust_trace/sign.py:anchor_bytes and conformance/src/trace_tests/inclusion.py:canonical_claim_bytes, which need unit tests. Linked PR #537 is already open, so coordinate with it before starting. Done means the five escaping rules are stated and the stale text is corrected.
Written by the indexing model from the issue text.
Description
What is wrong
Checked on main at commit 6fb2570254023ee78d9bdc9f6c2c696ad7a9862c:
Three verified findings from the independent Go verifier report (#448 items 3, 16, and 19) remain open across spec/registry-anchor-v1.md, examples/verifier-compatibility/README.md, and docs/crosswalks/acta-decision-receipts.md:
-
#448 Item 19 —
spec/registry-anchor-v1.md§1 definescanonical_claim_bytesvia a Pythonjson.dumpscall rather than stating the five language-independent serialization rules.
Inspec/registry-anchor-v1.md:54-65:- The four prose bullets state: sorted object keys by Unicode code point,
","and":"separators, non-ASCII characters escaped (ensure_ascii) as ASCII bytes, and no trailing newline, followed byjson.dumps(claim, sort_keys=True, separators=(",", ":"), ensure_ascii=True).encode("ascii"). - Five byte-affecting rules that Python's
json.dumps(..., ensure_ascii=True)performs are left unstated in the prose rules:- Mandatory two-character short escapes (
\",\\,\b,\f,\n,\r,\t) forU+0022,U+005C,U+0008,U+000C,U+000A,U+000D,U+0009, with/(U+002F) unescaped. - Lowercase four-hex-digit
\uXXXXescapes for all other control characters (U+0000toU+001F) and all BMP characters aboveU+007F(noting thatU+007FDELETE is emitted literally as byte0x7Fbyensure_ascii=TruewhileU+0080and above are escaped). - Characters above the Basic Multilingual Plane (
U+10000toU+10FFFF) encoded as lowercase UTF-16 surrogate pairs\ud8xx\udcxx. - Lone UTF-16 surrogates (
U+D800toU+DFFF) rejected as outside the profile. - Negative zero (
-0) serialized as0.
Without these rules stated in §1, a non-Python implementation (Go, Rust, TypeScript) following the four prose bullets can emit\u000ainstead of\n, uppercase\u00E9instead of\u00e9, or escape/as\/, producing a different leaf hash for the same claim.
- Mandatory two-character short escapes (
- The four prose bullets state: sorted object keys by Unicode code point,
-
#448 Item 3 —
examples/verifier-compatibility/README.mdstill states that no normative text has been accepted and thatdocs/verification.mdsays nothing about version skew.
examples/verifier-compatibility/README.md:3-11says:**No normative text for them has been accepted.** Do not read a passing vector here as a conformance requirement.
Nothing in docs/verification.md currently says what a verifier must do about version skew
However,spec/trace-v0.2.md§3.3 anddocs/verification.md("Step 4: Check the EAT profile", lines 26-34) now normatively require a nonemptyaccepted_profilesset and require the verification result to record bothprofileandaccepted_profiles(Obligations 2 and 3 of #116), while only Obligations 1 (emitter version declarations) and 4 (downgrade disclosure) remain deferred. -
#448 Item 16 —
docs/crosswalks/acta-decision-receipts.mdcites section3.3.2(the v0.1 section number) in two places where v0.2 section3.3.3is meant.
Indocs/crosswalks/acta-decision-receipts.md:- Line 25:
The verification pattern in 3.3.2 is deliberately domain-agnostic - Line 61:
Serves exactly the external-evidence-by-digest role 3.3.2 describes.
Inspec/trace-v0.2.md, action receipts is section3.3.3(3.3.2was the section number inspec/trace-v0.1.md, and the rest ofacta-decision-receipts.mdalready cites3.3.3).
- Line 25:
Spec section or file
spec/registry-anchor-v1.md§1examples/verifier-compatibility/README.mddocs/crosswalks/acta-decision-receipts.md- Related: #448 (items 3, 16, 19)
Expected behavior
- State the exact string-escaping, surrogate-pair, lone-surrogate exclusion, and
-0rules inspec/registry-anchor-v1.md§1 (and enforce lone-surrogate rejection insrc/agentrust_trace/sign.py:anchor_bytesandconformance/src/trace_tests/inclusion.py:canonical_claim_bytesif needed, with unit tests pinning all five rules). - Update
examples/verifier-compatibility/README.mdto reflect that Obligations 2 and 3 of #116 are now inspec/trace-v0.2.md§3.3 anddocs/verification.md, while Obligations 1 and 4 remain deferred. - Update the two stale
3.3.2references indocs/crosswalks/acta-decision-receipts.mdto3.3.3.
Impact
Non-Python implementations of registry-anchor-v1 §1 can compute different anchor leaf digests on control characters, non-ASCII strings, or non-BMP characters, and readers of examples/verifier-compatibility/README.md and docs/crosswalks/acta-decision-receipts.md meet outdated normative status and section numbers.
Contributor: Raghuvar Durga (@drk-ram)
- Dominant language
- Python
- Stars
- 37
- Forks
- 33
- Avg merge
- 1d 4h
- Merged PRs (30d)
- 120
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from agentrust-io/trace-spec
-
Difficulty 5/5 Over a week Newbie friendliness 25/100
agentrust-io/trace-spec#593 · 1 comment ·
Maintainers usually reply within 1 day
-
bug needs-review:HIGH
Difficulty 5/5 Over a week Newbie friendliness 20/100
agentrust-io/trace-spec#591 · 11 comments ·
Maintainers usually reply within 1 day
-
prototype(manifest_requirements): resolve accepted_methods without duplicating bindings and reject unconfigured binding endpoints with ProfileErrorPossibly taken @drk-ram claimed this 2 days ago. Open
Difficulty 3/5 1-2 days Newbie friendliness 78/100
agentrust-io/trace-spec#580 ·
Maintainers usually reply within 1 day
-
feat(delegation): add parent_record_hash, verify_delegation_link, and verify_delegation_chain to agentrust_tracePossibly taken @drk-ram claimed this 2 days ago. Open
Difficulty 4/5 3-5 days Newbie friendliness 58/100
agentrust-io/trace-spec#581 ·
Maintainers usually reply within 1 day
-
revocation,trust-record-verify: implement es256 and es384 bundle verification and add EC revocation vectors (#448 items 1, 10)Possibly taken @drk-ram claimed this 2 days ago. Open
Difficulty 4/5 3-5 days Newbie friendliness 52/100
agentrust-io/trace-spec#584 ·
Maintainers usually reply within 1 day
All issues in agentrust-io/trace-spec
Similar issues
-
infrastructure
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
khuisman/mcp-gee-sweet#1152 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
-
backroom bug
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
ditto-assistant/ditto-subnet#3069 ·
Maintainers usually reply within 1 day
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 67/100
open-webui/open-webui#32901 · 1 comment ·
Maintainers usually reply within 1 day
-
0.3.3 bug
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Maintainers usually reply within 1 day