docs(attestation): publish A2A required-fields contract (lr-a850d0) - #24
Merged
clagentic-merger[bot] merged 3 commits intoJul 23, 2026
Merged
Conversation
…d list (lr-a850d0) RequiredIdentityContractFields gives the A2A caller-attestation required-fields contract (docs/A2A-ATTESTATION-CONTRACT.md) a single Go-level source of truth for the four OPTIONAL attribution field names, mirroring structured_sidecar.go's existing constants rather than duplicating them. Adds end-to-end regression coverage tying a conforming per-spawn record, an A2A-domain DomainResolver.Resolve, and a missing-required-field refusal together (AC#4/AC#5 of lr-a850d0).
SETUP.md's A2A section now points at the standalone contract doc instead of duplicating its table; SIDECAR-READ-CONTRACT.md, DESIGN.md, and config.example.yaml gain matching cross-references (AC#6).
|
BOBBIE security audit of PR #24 (lr-a850d0, A2A caller-attestation required-fields contract). Scope: base d1378d5..head 3820d05 (7 files: config.example.yaml comment update, docs/A2A-ATTESTATION-CONTRACT.md new, docs/DESIGN.md, docs/SETUP.md, docs/SIDECAR-READ-CONTRACT.md, internal/attestation/contract.go new, internal/attestation/contract_test.go new). Findings: none. Checks performed:
review.status: clean |
|
PEACHES - clean (0 findings) Reviewed against amos.code-craft (1-13) + amos.path-choice (2-5). All five critical verifications pass:
No blockers. |
Contributor
|
Merged via clagentic-loadout v0.1.0
|
clagentic-merger
Bot
deleted the
docs/lr-a850d0-a2a-required-fields-contract
branch
July 23, 2026 17:18
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Publishes the A2A caller-attestation required-fields contract as a standalone, normative doc (docs/A2A-ATTESTATION-CONTRACT.md) and gives it a mechanically-checkable Go-level source of truth (internal/attestation/contract.go's RequiredIdentityContractFields), plus end-to-end regression tests tying DomainResolver and the structured sidecar parser together for both the conforming-record and missing-required-field cases.
Why
lr-a850d0's AC 1-6 call for: (1) one deterministic documented sidecar source for an A2A caller, (2) fail-closed MISS with no parent-session fallback, (3) structured record fields (identity + parent session id) available to the mint path, (4) a published required-fields contract a crew-manifest producer can implement with zero gatekeeper-source knowledge, (5) a missing required field refusing with a structured, field-naming error, and (6) same-PR doc updates.
The substrate for AC 1/2/3/5 already landed on main via PR #23 (lr-f1bfe8's structured identity_field + lr-2ca216's domain-aware fail-closed DomainResolver) -- both dependency blockers this task listed are closed (task comment #2/#3). What was still missing was the AC#4/#6 deliverable: a standalone, normative required-fields contract doc (the task explicitly lists it separately from the SETUP/design chapter and the config example, which already existed), a mechanically-checkable field-name reference a producer or its own tests can import instead of re-typing the four attribution field names, and a regression test proving the missing-field refusal specifically through the DomainA2A path (existing coverage exercised the sidecar provider directly, not chained through DomainResolver).
This task is the CONSUMER-side attestation contract only -- no token minting/issuance is implemented here (downstream lr-890fae), and no A2A mint command is wired into cmd/gatekeeper. Branch-neutral per the substrate-ratification decision (lr-7f9969, Option B): this contract is identical regardless of whether gatekeeper or OpenBao ultimately issues the token.
Changes
Test status
go build ./..., go vet ./..., and go test ./... -count=1 all pass (7 packages, all ok). No existing test was modified.
Task: lr-a850d0