Skip to content

Commit 2a3f25a

Browse files
committed
Add v1.4/v1.5 protocol enhancements to roadmap
Signature expiration, schema version binding with hash chains, DNS TXT cross-verification, canonicalization identifiers, multi-key organizational endorsement, permission declarations, source repo verification, and priority stack.
1 parent dc4907f commit 2a3f25a

1 file changed

Lines changed: 147 additions & 20 deletions

File tree

ROADMAP.md

Lines changed: 147 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616
| **1.1.0** | 2026-01 | Revocation documents, standalone revocation endpoint | Shipped |
1717
| **1.2.0** | 2026-02 | Offline verification, trust bundles, resolver abstraction | Shipped |
1818
| **1.3.0** | 2026-02 | AgentSkills security — skill folder signing | **Shipped** |
19-
| **1.4.0** | Q2-Q3 2026 | Cross-agent tool trust for A2A networks | Planning |
20-
| **1.5.0** | Q4 2026 | Advanced revocation and key lifecycle | Planning |
19+
| **1.4.0** | Q2-Q3 2026 | Signature lifecycle, version binding, A2A trust | Planning |
20+
| **1.5.0** | Q4 2026 | Multi-key endorsement, permissions, advanced revocation | Planning |
2121

2222
---
2323

@@ -92,21 +92,79 @@ The existing `.well-known/schemapin.json` discovery, TOFU key pinning database,
9292

9393
---
9494

95-
## v1.4.0 — Cross-Agent Tool Trust for A2A (Q2-Q3 2026)
95+
## v1.4.0 — Signature Lifecycle, Version Binding & A2A Trust (Q2-Q3 2026)
9696

97-
When agents collaborate via A2A (Agent-to-Agent), tool schemas cross trust boundaries. SchemaPin v1.4.0 ensures that tool integrity verification extends seamlessly into A2A networks — every tool invoked through an A2A bridge is verified against its provider's signed schema.
97+
All v1.4 additions are optional fields — fully backward compatible with v1.3 clients.
98+
99+
### Signature Expiration / TTL
100+
101+
Right now, a signature is valid forever once created. There's a `signed_at` timestamp but no `expires_at`. A signature from 2 years ago on an abandoned tool is just as "valid" as one from yesterday — there's no forcing function for developers to re-sign after security reviews, and clients can't distinguish "actively maintained" from "signed once and forgotten."
102+
103+
| Item | Details |
104+
|------|---------|
105+
| `expires_at` field | Optional ISO 8601 timestamp in both schema signatures and `.schemapin.sig` |
106+
| Degraded vs. failed | Expired signatures are treated as degraded (lower confidence), not hard failures — avoids breaking tools when a dev misses a renewal |
107+
| Confidence scoring | Pairs with a confidence model: recently signed > old but valid > expired > unsigned |
108+
109+
**Format addition to `.schemapin.sig`:**
110+
111+
```json
112+
{
113+
"signed_at": "2026-02-14T12:00:00Z",
114+
"expires_at": "2026-08-14T12:00:00Z"
115+
}
116+
```
117+
118+
### Schema Version Binding
119+
120+
SchemaPin signs a schema at a point in time, but there's no concept of "this is version 3.2 of this tool's schema, superseding version 3.1." If a developer legitimately updates their tool, clients with the old schema pinned have no way to know whether the new schema is an authorized upgrade or a rug pull.
121+
122+
| Item | Details |
123+
|------|---------|
124+
| `schema_version` field | Optional version string in signature metadata |
125+
| `previous_hash` field | SHA-256 hash of the prior signed version, creating a hash chain |
126+
| Lineage verification | Clients verify that a schema update is part of an authorized chain rather than an out-of-band substitution |
127+
128+
No new crypto required — just metadata. The hash chain is lightweight and elegant.
129+
130+
### DNS TXT Cross-Verification
131+
132+
AgentPin already uses `_agentpin.{domain}` TXT records, but SchemaPin doesn't leverage DNS yet. Adding a `_schemapin.{domain}` TXT record containing the key fingerprint gives multi-channel verification without requiring a GitHub repo. DNS is controlled through a completely different credential chain than HTTPS hosting, so compromising one doesn't compromise the other.
133+
134+
| Item | Details |
135+
|------|---------|
136+
| `_schemapin.{domain}` TXT record | Contains key fingerprint (JWK thumbprint) |
137+
| Cross-check | Clients verify that the key from `.well-known` matches what DNS says |
138+
| Optional | Enhances confidence when present, does not block verification when absent |
139+
140+
**Example TXT record:**
141+
142+
```
143+
_schemapin.example.com. IN TXT "v=schemapin1; kid=acme-2026-01; fp=sha256:a1b2c3d4..."
144+
```
145+
146+
### Canonicalization Algorithm Identifier
147+
148+
The current spec hardcodes the canonicalization algorithm (sorted keys, no whitespace, UTF-8). If the algorithm ever needs to change (and JSON canonicalization is notoriously tricky across languages), there's no way to signal which algorithm was used.
149+
150+
| Item | Details |
151+
|------|---------|
152+
| `canonicalization` field | Algorithm identifier in signature metadata, e.g. `"schemapin-v1"` |
153+
| Forward compatibility | New algorithms can be introduced without breaking existing signatures |
154+
155+
Trivial to add now, saves a painful migration later.
98156

99157
### A2A Context for Schema Verification
100158

159+
When agents collaborate via A2A (Agent-to-Agent), tool schemas cross trust boundaries. SchemaPin v1.4.0 ensures that tool integrity verification extends seamlessly into A2A networks — every tool invoked through an A2A bridge is verified against its provider's signed schema.
160+
101161
| Item | Details |
102162
|------|---------|
103163
| `A2aVerificationContext` | New type wrapping `VerificationResult` with A2A caller identity, delegation depth, originating domain |
104164
| `verify_schema_for_a2a()` | Extends `verify_schema_offline()` with A2A context validation |
105165
| Domain scoping | Accept optional trusted domains list (from AgentPin `allowed_domains` constraints) |
106166
| Intersection check | Scope verification to intersection of caller's allowed domains and tool provider's domain |
107167

108-
**Touchpoints:** new `src/a2a.rs`, extend `src/verification.rs`
109-
110168
### Trust Bundle Distribution for A2A Networks
111169

112170
| Item | Details |
@@ -116,8 +174,6 @@ When agents collaborate via A2A (Agent-to-Agent), tool schemas cross trust bound
116174
| TOFU for bundles | TOFU pinning for bundle authority keys |
117175
| JSON-RPC method | `schemapin/trustBundle` for A2A bundle exchange |
118176

119-
**Touchpoints:** extend `src/types/bundle.rs`, new `src/bundle_exchange.rs`
120-
121177
### Cross-Agent Tool Schema Caching
122178

123179
| Item | Details |
@@ -126,20 +182,74 @@ When agents collaborate via A2A (Agent-to-Agent), tool schemas cross trust bound
126182
| Storage | In-memory with configurable TTL and max entries |
127183
| Shared cache | Optional shared cache across agents in same runtime |
128184

129-
**Touchpoints:** new `src/cache.rs`
130-
131185
### Cross-Language Support
132186

133-
All four language implementations (Rust, JavaScript, Python, Go) receive matching implementations of:
134-
135-
- `A2aVerificationContext` and `verify_schema_for_a2a()`
136-
- Trust bundle signing and `merge_trust_bundles()`
137-
- Schema caching with TTL
138-
- `schemapin/trustBundle` JSON-RPC helpers
187+
All four language implementations (Rust, JavaScript, Python, Go) receive matching implementations of all v1.4 features.
139188

140189
---
141190

142-
## v1.5.0 — Advanced Revocation & Key Lifecycle (Q4 2026)
191+
## v1.5.0 — Multi-Key Endorsement, Permissions & Advanced Revocation (Q4 2026)
192+
193+
### Multi-Key / Organizational Endorsement
194+
195+
The `.well-known/schemapin.json` should support an array of public keys with roles rather than a single `public_key_pem`. This is the enterprise compliance differentiator — organizations can enforce policies like "require both a developer and a reviewer signature."
196+
197+
**Discovery document format:**
198+
199+
```json
200+
{
201+
"schema_version": "1.5",
202+
"developer_name": "Acme Corp",
203+
"public_keys": [
204+
{
205+
"kid": "acme-dev-2026-01",
206+
"public_key_pem": "...",
207+
"role": "developer",
208+
"name": "Alice (Engineering)"
209+
},
210+
{
211+
"kid": "acme-security-2026-01",
212+
"public_key_pem": "...",
213+
"role": "reviewer",
214+
"name": "Security Team"
215+
}
216+
]
217+
}
218+
```
219+
220+
| Item | Details |
221+
|------|---------|
222+
| `public_keys` array | Replaces single `public_key_pem` (single-key remains valid as shorthand) |
223+
| Key roles | `developer`, `reviewer`, `auditor` — extensible |
224+
| `signatures` array in `.schemapin.sig` | Replaces single `signature` field for countersigning |
225+
| Policy enforcement | Clients can require signatures from specific roles |
226+
227+
Sequential countersigning approach — minimal protocol disruption, maximum enterprise value.
228+
229+
### Scope / Permission Declarations
230+
231+
SchemaPin verifies that a schema hasn't been *tampered with*, but says nothing about what the schema *claims to do*. A signed schema that says "I need filesystem access, network access, and the ability to execute arbitrary commands" is cryptographically valid but potentially terrifying.
232+
233+
| Item | Details |
234+
|------|---------|
235+
| `declared_permissions` field | Optional array in signature metadata enumerating claimed capabilities |
236+
| Attestation record | Auditable record of what the developer attested their tool requires at signing time |
237+
| Tamper detection | If the schema later changes to request more permissions without a new signature, verification fails |
238+
| Policy bridge | Doesn't enforce at SchemaPin layer (that's Symbiont's job), but feeds into policy enforcement |
239+
240+
This bridges SchemaPin into the Symbiont policy enforcement story naturally.
241+
242+
### Source Repository Verification
243+
244+
Cross-reference signed schemas against their source repository to boost verification confidence.
245+
246+
| Item | Details |
247+
|------|---------|
248+
| `source_repo` field | Optional repository URL in signature metadata |
249+
| Commit binding | Optional `source_commit` hash linking signature to a specific commit |
250+
| Confidence boost | Verification that the signed artifact matches what's in the public repo |
251+
252+
### Advanced Revocation & Key Lifecycle
143253

144254
| Item | Details |
145255
|------|---------|
@@ -154,21 +264,38 @@ All four language implementations (Rust, JavaScript, Python, Go) receive matchin
154264

155265
| Feature | Description |
156266
|---------|-------------|
267+
| Verification Telemetry | Optional `reporting_endpoint` in `.well-known/schemapin.json` for anonymized verification reports (tool_id, success/failure, error_code, timestamp). Opt-in on both sides. Feeds into transparency log. |
157268
| Hardware-Backed Signing | HSM and TPM support for schema signing keys |
158-
| Schema Evolution Tracking | Track schema changes over time with backward compatibility checks |
159269
| Federated Trust Registries | Shared registries for cross-organization schema trust |
160270
| Transparency Log | Append-only log of all schema signatures for auditability |
161271

162272
---
163273

274+
## Priority Stack
275+
276+
Sequenced for maximum impact with minimum effort. All items are backward compatible — every one is an optional field addition. Existing v1.3 clients ignore what they don't understand.
277+
278+
| Priority | Feature | Target | Effort | Impact |
279+
|----------|---------|--------|--------|--------|
280+
| 1 | Signature expiration | v1.4 | Small | Closes the "stale signature" gap every enterprise buyer will ask about |
281+
| 2 | Multi-key endorsement | v1.5 | Medium | The enterprise compliance differentiator |
282+
| 3 | DNS TXT cross-verification | v1.4 | Small | Strongest anti-compromise signal for lowest cost |
283+
| 4 | Schema version binding | v1.4 | Small | Hash chain prevents upgrade-path attacks |
284+
| 5 | Source repo verification | v1.5 | Medium | Strong confidence boost via cross-referencing |
285+
| 6 | Declared permissions | v1.5 | Small | Bridges into Symbiont policy story |
286+
| 7 | Canonicalization identifier | v1.4 | Trivial | Future-proofing while it's free |
287+
| 8 | Reporting endpoint | Beyond | Medium | Important but requires ecosystem scale |
288+
289+
---
290+
164291
## Contributing
165292

166293
We welcome input on roadmap priorities:
167294

168-
- **GitHub Discussions** — Open a discussion in the [SchemaPin repository](https://github.com/nicholascross/SchemaPin/discussions)
295+
- **GitHub Discussions** — Open a discussion in the [SchemaPin repository](https://github.com/ThirdKeyAI/SchemaPin/discussions)
169296
- **Contributing Guide** — See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup
170297
- **Security** — For security-sensitive feedback, see SECURITY.md
171298

172299
---
173300

174-
*Last updated: 2026-02-14*
301+
*Last updated: 2026-02-15*

0 commit comments

Comments
 (0)