Skip to content

Commit 9684c3d

Browse files
authored
Merge pull request #17 from thinksyncs/feat/product-v1
feat(production): add deployable Direct-Agent profile
2 parents 24a0c0a + 4096acb commit 9684c3d

21 files changed

Lines changed: 2600 additions & 52 deletions

.github/workflows/main.yaml

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,13 +114,20 @@ jobs:
114114
GOTOOLCHAIN=go1.26.0+auto go test \
115115
./pkg/atls/... \
116116
./pkg/clients/... \
117-
./pkg/agtp/...
117+
./pkg/agtp/... \
118+
./pkg/production
118119
119120
- name: Run Direct-Agent security red-team tests
120121
run: |
121122
GOTOOLCHAIN=go1.26.0+auto go test -v -race -count=1 \
122123
./pkg/atls/identitypolicy \
123-
./pkg/clients
124+
./pkg/clients \
125+
./pkg/production
126+
127+
- name: Run protected-change consumer integration
128+
run: |
129+
GOTOOLCHAIN=go1.26.0+auto go test -v -race -count=1 \
130+
./examples/protected-change-consumer
124131
125132
- name: Run v1 and draft-06 v2 A2A negative integration
126133
run: |

.github/workflows/security-red-team.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,12 @@ on:
1414
- "pkg/agtp/**"
1515
- "pkg/atls/**"
1616
- "pkg/clients/**"
17+
- "pkg/production/**"
1718
- "examples/a2a-multiprocess/**"
19+
- "examples/protected-change-consumer/**"
1820
- "docs/draft06-a2a-profile.md"
21+
- "docs/API_COMPATIBILITY.md"
22+
- "docs/production-deployment-profile.md"
1923
- "docs/security-red-team-tests.md"
2024
- "docs/live-red-team-report.md"
2125
push:
@@ -30,8 +34,12 @@ on:
3034
- "pkg/agtp/**"
3135
- "pkg/atls/**"
3236
- "pkg/clients/**"
37+
- "pkg/production/**"
3338
- "examples/a2a-multiprocess/**"
39+
- "examples/protected-change-consumer/**"
3440
- "docs/draft06-a2a-profile.md"
41+
- "docs/API_COMPATIBILITY.md"
42+
- "docs/production-deployment-profile.md"
3543
- "docs/security-red-team-tests.md"
3644
- "docs/live-red-team-report.md"
3745

@@ -59,4 +67,6 @@ jobs:
5967
./pkg/atls/identitypolicy \
6068
./pkg/atls/sbaipv2 \
6169
./pkg/clients \
70+
./pkg/production \
71+
./examples/protected-change-consumer \
6272
./examples/a2a-multiprocess

CHANGELOG.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Changelog
2+
3+
## v1.0.0
4+
5+
- Add the supported Direct-Agent v1 production composition.
6+
- Add role-separated trust and revocation snapshots that fail closed on source
7+
errors.
8+
- Add signed attestation-result appraisal with exact binder, policy,
9+
measurement, freshness, and verifier-key checks.
10+
- Add a TLS-only Redis/Valkey SETNX replay adapter with bounded operations.
11+
- Add the protected-change HTTPS consumer and positive/negative E2E tests.
12+
- Define the supported API and compatibility policy.
13+
14+
The v1.0.0 release covers the verifier-side Direct-Agent v1 core and the
15+
documented protected-change deployment profile. It does not make the
16+
experimental draft-06 v2, gateway runtime, inherited Cocos runtime, or
17+
hardware evidence acquisition part of the supported product API.

Makefile

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
BUILD_DIR = build
22
SERVICES = manager agent cli attestation-service log-forwarder computation-runner egress-proxy ingress-proxy
3-
DIRECT_AGENT_CORE_PKGS = ./pkg/atls/... ./pkg/clients/... ./pkg/agtp/...
3+
DIRECT_AGENT_CORE_PKGS = ./pkg/atls/... ./pkg/clients/... ./pkg/agtp/... ./pkg/production
4+
PRODUCTION_CONSUMER_PKGS = ./examples/protected-change-consumer
45
CGO_ENABLED ?= 0
56
GOARCH ?= amd64
67
VERSION ?= $(shell git describe --abbrev=0 --tags --always)
@@ -70,7 +71,7 @@ build-igvm:
7071
product-security-gate:
7172
go mod verify
7273
GOTOOLCHAIN=go1.26.0+auto go test $(DIRECT_AGENT_CORE_PKGS)
73-
GOTOOLCHAIN=go1.26.0+auto go test -v -race -count=1 ./pkg/atls/identitypolicy ./pkg/clients
74+
GOTOOLCHAIN=go1.26.0+auto go test -v -race -count=1 ./pkg/atls/identitypolicy ./pkg/clients ./pkg/production $(PRODUCTION_CONSUMER_PKGS)
7475
$(MAKE) fuzz-smoke
7576
$(GOVULNCHECK) ./...
7677

PUBLICATION_TODO.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,30 @@ Do not describe this repository as implementing every binding profile from the
8888
draft. Product claims should say that it implements an experimental
8989
Direct-Agent binding profile based on the core acceptance rules.
9090

91+
## Supported v1 Product Surface
92+
93+
Release `v1.0.0` fixes the supported surface and compatibility rules in
94+
`docs/API_COMPATIBILITY.md`. The supported product API is the Direct-Agent v1
95+
subset of `pkg/clients` and `pkg/atls/identitypolicy`, composed through
96+
`pkg/production`. Draft-06-inspired v2, `pkg/agtp`, gateway runtime, inherited
97+
Cocos runtime services, and hardware evidence acquisition remain experimental
98+
or outside the supported API.
99+
100+
The concrete `protected-change-v1` deployment profile is recorded in
101+
`docs/production-deployment-profile.md`. It includes:
102+
103+
- separate Manager, Agent, and attestation-verifier Ed25519 key roles;
104+
- fresh trust and revocation snapshots with fail-closed source errors;
105+
- a signed attestation result bound to the accepted TLS session, exact action,
106+
verifier nonce, appraisal policy, and measurement;
107+
- a TLS 1.3 Redis/Valkey `SET NX PX` replay adapter with bounded operations;
108+
- a concrete non-Split-Knowledge HTTPS consumer; and
109+
- positive and negative unit, replay-race, and E2E integration tests.
110+
111+
The profile authenticates signed appraisal results. Hardware-specific evidence
112+
acquisition and appraisal remain deployment responsibilities and are not
113+
implied by the default GitHub-hosted test environment.
114+
91115
## Inherited Runtime Risk Classification
92116

93117
These items come from inherited Cocos runtime code paths. Profile text does not

README.md

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,13 @@ The primary failure class is context diversion: accepting cryptographically
1313
valid material for a different service, tenant, Agent, task, delegation, or
1414
authority boundary than the verifier intended.
1515

16+
Release `v1.0.0` defines a supported verifier product surface for the
17+
Direct-Agent v1 profile. It adds one complete deployment composition covering
18+
role-separated trust keys, revocation, signed attestation results, TLS-protected
19+
distributed replay, and a concrete protected-change consumer. See
20+
[`docs/API_COMPATIBILITY.md`](docs/API_COMPATIBILITY.md) and
21+
[`docs/production-deployment-profile.md`](docs/production-deployment-profile.md).
22+
1623
## Acceptance Contract
1724

1825
The verifier evaluates one ordered contract:
@@ -38,10 +45,17 @@ CWT/COSE, and gateway-route policy experiments.
3845
v2 profile for the multiprocess A2A demonstration.
3946
- `docs/live-red-team-report.md`: current live-style red-team evidence and
4047
evaluation boundaries.
48+
- `docs/API_COMPATIBILITY.md`: supported v1 API and compatibility policy.
49+
- `docs/production-deployment-profile.md`: fixed production choices for trust,
50+
revocation, attestation, distributed replay, and exact action binding.
4151
- `formal/`: ProVerif and TLA+ models, recorded results, and
4252
model-to-implementation traceability.
4353
- `pkg/clients`, `pkg/atls`, and `pkg/atls/identitypolicy`: Direct-Agent
4454
acceptance implementation.
55+
- `pkg/production`: supported fail-closed composition and Redis/Valkey replay
56+
adapter.
57+
- `examples/protected-change-consumer`: independent HTTPS application consumer
58+
and E2E negative tests; it is not Split-Knowledge.
4559
- `PUBLICATION_TODO.md`: publication blockers, inherited runtime risk
4660
classification, module identity choice, and CI/red-team checkpoint status.
4761

@@ -87,7 +101,7 @@ acceptance path.
87101

88102
## Evaluation Evidence
89103

90-
The current v0.4 evidence covers:
104+
The release evidence covers:
91105

92106
- focused local checks and unit-level coverage;
93107
- positive and negative profile vectors;
@@ -99,6 +113,12 @@ The current v0.4 evidence covers:
99113
for compact JWT/JWS parsing, and deterministic acceptance invariants;
100114
- route-assertion policy tests and a local HTTP route-assertion harness for the
101115
documented gateway boundary.
116+
- a production composition with current trust/revocation snapshots, signed
117+
attestation-result policy, and TLS-only Redis/Valkey SETNX replay;
118+
- an independent protected-change HTTPS consumer that rejects a changed
119+
action, wrong TLS session, replay, revoked grant, attestation mismatch, and
120+
replay-store outage; and
121+
- a 20-client TLS replay-store race that requires exactly one SETNX winner.
102122

103123
For accepted TLS sessions, the AGTP observed-identity path derives
104124
`tls_exporter_sha256` from the accepted `tls.ConnectionState`. Fixed exporter
@@ -205,6 +225,14 @@ Product security gate:
205225
make product-security-gate
206226
```
207227

228+
Focused production profile and consumer integration:
229+
230+
```sh
231+
go test -race -count=1 \
232+
./pkg/production \
233+
./examples/protected-change-consumer
234+
```
235+
208236
## Security Reporting
209237

210238
Report suspected vulnerabilities through GitHub private vulnerability reporting
@@ -240,16 +268,17 @@ upstream notices. See `ATTRIBUTION.md`.
240268
- Gateway-routed runtime wiring is outside the current Direct-Agent
241269
implementation. Wallets can provide presentation or signing functions, but
242270
are not trust roots or sources of verifier-local expected policy.
243-
- The v0.4 evaluation is evidence for the tested fail-closed verifier behavior,
271+
- The release evaluation is evidence for the tested fail-closed verifier behavior,
244272
not a formal proof or validation of every deployment. Broader application
245273
0-RTT behavior, production gRPC pooling, runtime gateway wiring, longer
246274
fuzz/property campaigns, and hardware-backed confidential-VM attestation
247275
replay remain outside the recorded evaluation.
248276
- The ProVerif model uses symbolic cryptography and does not prove TLS, X.509,
249277
JWT parsing, certificate handling, or equivalence with compiled Go code. The
250-
TLA+ result is bounded evidence for a generic target state machine; the
251-
current Go tree does not implement its complete durable snapshot, revocation,
252-
lease, audit-outbox, or logical-time contract.
278+
TLA+ result is bounded evidence for a generic target state machine. The
279+
production profile implements trust/revocation snapshots, signed attestation
280+
results, and shared replay commits, but not the model's complete lease,
281+
audit-outbox, application outcome, or logical-time contract.
253282
- `pkg/atls` and `pkg/agtp` are legacy compatibility names and do not define the
254283
protocol trust model. Cocos is implementation provenance rather than the
255284
normative scope of the profile.

docs/API_COMPATIBILITY.md

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
# Supported API and compatibility policy
2+
3+
This policy applies beginning with release `v1.0.0`.
4+
5+
## Supported surface
6+
7+
The supported Go API is:
8+
9+
- `pkg/production`: production composition, signed attestation-result policy,
10+
accepted TLS binding derivation, and TLS-protected Redis/Valkey SETNX replay
11+
adapter;
12+
- `pkg/clients`: Direct-Agent v1 JWT verification through
13+
`JWTVerifyOptions`, `VerifyIdentityGrantJWT`, `VerifySessionBindingJWT`, and
14+
`VerifySessionIdentityJWT`; and
15+
- `pkg/atls/identitypolicy`: Direct-Agent v1 policy, binding, and replay
16+
interfaces used by the supported production composition.
17+
18+
The supported wire profile is Direct-Agent profile version `1` with
19+
`sbaip.identity-grant` and `sbaip.session-binding` token types. The fixed
20+
production exporter label is `Attestation`; application context and a
21+
verifier-issued nonce are combined by `production.BindingFromTLS`.
22+
23+
The following remain experimental or outside the supported product API:
24+
25+
- draft-06-inspired v2 entrypoints and types;
26+
- `pkg/agtp`, gateway-route, cache, and diversion-policy adapters;
27+
- the inherited Manager, Agent, CVM, HAL, proxy, and CLI runtime surfaces;
28+
- examples, test harnesses, formal models, and document structure; and
29+
- hardware-specific evidence acquisition and appraisal implementations.
30+
31+
An exported Go identifier outside the supported list is not implicitly stable.
32+
33+
## Compatibility rules
34+
35+
Tags follow semantic versioning.
36+
37+
- Patch releases preserve the supported source API and v1 wire shape. A patch
38+
may reject input that was previously accepted when the input is invalid,
39+
ambiguous, insecure, or outside the documented profile.
40+
- Minor releases may add optional APIs or fields. Existing supported calls and
41+
valid v1 messages continue to work without source changes.
42+
- Breaking supported API or wire changes require a new major version and a new
43+
versioned verification entrypoint. They are not introduced by silently
44+
changing v1 parsing or binding behavior.
45+
- Stable APIs deprecated during v1 remain available through the v1 major line
46+
unless retaining them creates a concrete security vulnerability. Any
47+
security exception is documented in the release notes and security advisory.
48+
- The supported build baseline for v1.0 is Go 1.26.x. A later toolchain floor
49+
is announced in release notes before it becomes the default-branch minimum.
50+
51+
Only the latest v1 minor release receives routine fixes. The immediately prior
52+
minor receives critical security fixes for 90 days after the newer minor is
53+
released. Release artifacts and their source commit remain available after the
54+
support window.
55+
56+
## Deployment compatibility
57+
58+
Production deployments must keep Manager, Agent, and attestation-verifier key
59+
roles separate. Key rotation is compatible when old and new key IDs overlap in
60+
the locally accepted trust snapshot for the intended migration window.
61+
Disabling a key ID or revoking a token ID intentionally causes requests that
62+
depend on it to fail.
63+
64+
Replay storage is compatible with Redis or Valkey servers that implement
65+
`SET key value NX PX ttl` over TLS. Store unavailability is an authentication
66+
failure; there is no in-memory fallback in the production profile.

docs/SSOT.md

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1271,10 +1271,16 @@ The implemented production profile covers:
12711271
- local QUIC/TLS early-data authentication gating coverage for pre-binding
12721272
rejection.
12731273

1274-
Deployment still chooses trusted keys, expected policy values, revocation data,
1275-
and distributed replay storage. Those sources can be Manager configuration,
1276-
Agent metadata, computation state, an authorization policy engine, or a
1277-
fail-closed registry integration. They must not be raw peer-controlled metadata.
1274+
`pkg/production` composes the Direct-Agent v1 checks with role-separated trust
1275+
and revocation snapshots, signed attestation-result appraisal, and a
1276+
TLS-protected Redis/Valkey SETNX adapter. The concrete supported choices and
1277+
consumer boundary are fixed in `docs/production-deployment-profile.md`.
1278+
1279+
Each deployment still supplies its own trusted keys, expected policy values,
1280+
revocation data, Redis/Valkey service, and attestation verifier output. Those
1281+
sources can be Manager configuration, Agent metadata, computation state, an
1282+
authorization policy engine, or a fail-closed registry integration. They must
1283+
not be raw peer-controlled metadata.
12781284

12791285
## 26. Evaluation boundary
12801286

0 commit comments

Comments
 (0)