Skip to content

Commit ccb3dea

Browse files
cloakmasterBen
andauthored
docs(stable-mode): PR B — substrate-scaling docs (INTEGRATIONS / COMPOSE-WITH-FOXBOOK / ADR 0009 / README section) (#68)
Substrate-scaling documentation so future integrators have a documented self-serve path. Per ADR 0008 the Foxbook protocol surface is frozen at v0.2; composition against that surface is welcome and tracked here. ## What's in - docs/INTEGRATIONS.md (NEW) — living catalog of known integrations. Entry 1: Concordia v0.4.0 + Sanctuary Castle v1.2 (eriknewton). Status: Proposed (schema discussion in flight). Cross-impl reference status (harness aggregator, CTEF byte-match, litepaper) recorded separately as substrate-layer references per ADR 0006 §4. - docs/COMPOSE-WITH-FOXBOOK.md (NEW) — engagement path for new integrators. What Foxbook offers, typed-reference shape, other composition shapes (wrapping, referencing, direct API), how to engage, what you don't get under stable mode. - docs/decisions/0009-typed-reference-schema-for-composition.md (NEW) — ADR placeholder. Status: under-public-discussion. Strawman schema reproduced for traceability; updated in-place once the public discussion thread reaches consensus (no 0010 for ratification). - README.md — added "Compose with Foxbook" section near the top pointing at INTEGRATIONS / COMPOSE-WITH-FOXBOOK / discussion link. ## Placeholder URLs `<DISCUSSION_URL>` placeholders in INTEGRATIONS.md, COMPOSE-WITH-FOXBOOK.md, ADR 0009, and README — filled in via a small follow-up PR once the public Discussion thread is posted (PR A, identity-bound under maintainer's hands per ADR 0008 § explicit-go on identity-bound posts). ## Verification - pnpm check:generated — 10 files match - pnpm -r typecheck — clean - No code touched (docs only) ## Refs - Plan: /Users/tester/.claude/plans/focus-deeply-and-use-nifty-swan.md - ADR 0006 — protocol-not-marketplace + co-option-defense indicators - ADR 0008 — stable-mode posture - A2A Discussion #1803 — eriknewton's 2026-05-04 three-layer stack proposal Co-authored-by: Ben <ben@inkog.io>
1 parent e86ef58 commit ccb3dea

4 files changed

Lines changed: 230 additions & 1 deletion

File tree

README.md

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,18 @@ if (result.status !== "verified") return;
1616

1717
Open source. Apache 2.0. Run your own log; anyone following the same spec can verify against any deployment.
1818

19-
[**Live demo**](#live-demo) · [**Why**](#why) · [**Status**](#status) · [**RFC**](docs/rfc-a2a-x-foxbook-extension.md)
19+
[**Live demo**](#live-demo) · [**Why**](#why) · [**Status**](#status) · [**Compose with Foxbook**](#compose-with-foxbook) · [**RFC**](docs/rfc-a2a-x-foxbook-extension.md)
20+
21+
---
22+
23+
## Compose with Foxbook
24+
25+
Building an evidence-layer, verdict-layer, or other identity-anchored system that wants to cite Foxbook-verified identity? Foxbook is in [stable / maintenance mode](docs/decisions/0008-stable-mode-maintenance-posture.md), but composition is welcome and tracked openly.
26+
27+
- [`docs/COMPOSE-WITH-FOXBOOK.md`](docs/COMPOSE-WITH-FOXBOOK.md) — short guide for new integrators (typed-reference shape, engagement path, what's NOT in scope).
28+
- [`docs/INTEGRATIONS.md`](docs/INTEGRATIONS.md) — living catalog of known integrations + their status.
29+
- Active spec discussion: **Composition: Foxbook ↔ Concordia ↔ Sanctuary typed-reference schema** at `<DISCUSSION_URL>`.
30+
- `hello@foxbook.dev` for substantive offline conversations.
2031

2132
---
2233

docs/COMPOSE-WITH-FOXBOOK.md

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
# Composing with Foxbook
2+
3+
Short guide for systems that want to compose against Foxbook's transparency-log primitive. Audience: implementors of evidence-layer, verdict-layer, or other identity-anchored systems who've decided "we want to cite Foxbook-verified identity inside our protocol."
4+
5+
For the catalog of known compositions, see [`INTEGRATIONS.md`](INTEGRATIONS.md).
6+
7+
## What Foxbook offers
8+
9+
- **Verified identity primitive**: `verifyAgentCard(card)` returns one of four discriminated outcomes — `verified`, `unverified`, `handle-mismatch`, `stale-proof` — backed by an RFC 9162-shaped Merkle transparency log. Four outcomes; no numeric trust score; no reputation field.
10+
- **Public transparency log**: `https://transparency.foxbook.dev/` — read endpoints (`/root`, `/inclusion/:i`, `/leaf/:i`) under Apache 2.0, no auth, no API key. Anyone can verify any claim independently.
11+
- **SDK**: `@foxbook/sdk-claim` on npm. Six-function reference impl for the claim flow + verification primitives.
12+
- **Stable shape**: SDK v0.2.0 surfaces `verified_signing_key_hex` + `leaf_index` on the `verified` branch of `verifyAgentCard`. tl-leaf v1.2 (`agent-key-registration`, `revocation`, `signing-key-registration`) is the canonical-bytes shape your typed reference would cite.
13+
14+
## Typical composition shape: typed reference
15+
16+
The most common pattern: your envelope / receipt / attestation carries a **typed reference** to a Foxbook leaf, and your verdict-layer anchors on that reference.
17+
18+
The active spec discussion for the typed-reference schema is here:
19+
20+
**`<DISCUSSION_URL>`**
21+
22+
(Once the schema is agreed, [`docs/decisions/0009-typed-reference-schema-for-composition.md`](decisions/0009-typed-reference-schema-for-composition.md) ratifies it on the Foxbook side.)
23+
24+
The strawman shape includes:
25+
26+
- `tl_url` — base URL of the transparency log
27+
- `leaf_index` — position of the leaf in the log
28+
- `tl_leaf_canonical_hash` — SHA-256 of the canonical-bytes leaf preimage (per [ADR 0005](decisions/0005-canonical-on-both-sides.md))
29+
- `verified_signing_key_hex` — the agent's active Ed25519 signing key at verify-time
30+
31+
Plus optional fields for stronger offline / temporal-anchor verification (`sth_at_verify_time`, `sth_signature`). See the discussion thread for the full schema + negative-path scenarios.
32+
33+
## Other composition shapes
34+
35+
- **Wrapping**: your system's identity primitive includes Foxbook verification as one of N supported identity sources. Foxbook returns its discriminated result; your wrapper maps it to your unified shape. No new typed reference needed.
36+
- **Referencing without embedding**: your receipt mentions Foxbook by URL but doesn't carry a structured typed reference. Lower integrity guarantees (your verifier can't detect log forks); simpler shape.
37+
- **Direct API integration**: your service calls Foxbook's `/api/v1/claim/by-handle/...` endpoint at decision-time. No typed reference needed because verification is fresh-by-construction.
38+
39+
If your shape doesn't fit any of the above, open a Discussion in `cloakmaster/foxbook` and propose it.
40+
41+
## How to engage
42+
43+
1. **Read the existing context**[README.md](../README.md), [RATIONALE.md](RATIONALE.md), [ADRs 0001–0008](decisions/), the active Discussion thread above.
44+
2. **Open a thread** — for typed-reference compositions, the existing thread at `<DISCUSSION_URL>`. For novel compositions, a new Discussion in `cloakmaster/foxbook`.
45+
3. **Substantive offline**`hello@foxbook.dev` for spec sessions, walk-throughs, or anything that benefits from a back-and-forth that's not public.
46+
4. **Once agreed publicly** — open a PR adding your composition to [INTEGRATIONS.md](INTEGRATIONS.md). The catalog grows organically.
47+
48+
## What you don't get
49+
50+
- **Active feature work** — Foxbook is in stable / maintenance mode per [ADR 0008](decisions/0008-stable-mode-maintenance-posture.md). Spec extension requests for Foxbook itself are noted but not actioned.
51+
- **Per-call SLAs** — operational SLA is best-effort. The runbook at [OPERATIONS.md](OPERATIONS.md) documents the tier choices and uptime monitoring.
52+
- **Closed-source verification** — everything is Apache 2.0 + open canonical bytes. If you want closed-source for compliance reasons, fork under a different name; the spec contract is what matters for interop.
53+
54+
## Cross-references
55+
56+
- [README.md](../README.md) — the 60-second pitch
57+
- [RATIONALE.md](RATIONALE.md) — why Foxbook is shaped the way it is
58+
- [VERIFY-IN-60-SECONDS.md](VERIFY-IN-60-SECONDS.md) — verify a live agent card from a fresh shell
59+
- [INTEGRATIONS.md](INTEGRATIONS.md) — catalog of active compositions
60+
- [decisions/](decisions/) — full ADRs
61+
- Harness aggregator entry: [`agentgraph.co/.well-known/interop-harness.json`](https://agentgraph.co/.well-known/interop-harness.json)

docs/INTEGRATIONS.md

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
# Active integrations
2+
3+
Living index of known compositions where another system embeds, references, or otherwise composes against Foxbook's transparency-log primitive. Foxbook is in [stable / maintenance mode](decisions/0008-stable-mode-maintenance-posture.md) per ADR 0008; new integrations are welcome and tracked here, but Foxbook's own protocol surface is frozen at v0.2.
4+
5+
If you're integrating, see [`COMPOSE-WITH-FOXBOOK.md`](COMPOSE-WITH-FOXBOOK.md) for the engagement path. This page is the catalog.
6+
7+
## Status legend
8+
9+
- **Proposed** — integration shape under discussion. Schema not yet ratified.
10+
- **Spec'd** — typed-reference schema agreed; implementations may be in progress.
11+
- **Live** — integration is shipping in production with at least one observed dispatch.
12+
- **Archived** — integration retired or superseded.
13+
14+
---
15+
16+
## Concordia ↔ Foxbook ↔ Sanctuary
17+
18+
| Field | Value |
19+
|---|---|
20+
| Integrator | [@eriknewton](https://github.com/eriknewton) |
21+
| Systems | **Concordia v0.4.0** (evidence-composition layer) + **Sanctuary Castle Architecture v1.2** (verdict-policy gateway) |
22+
| Integration shape | Typed-reference: a Concordia attestation envelope carries a typed reference to a Foxbook leaf as supporting evidence. Sanctuary verdict-policy anchors on the typed reference. |
23+
| Status | **Proposed** |
24+
| Schema discussion | <DISCUSSION_URL> |
25+
| Origin | [A2A Discussion #1803, eriknewton 2026-05-04T17:39Z](https://github.com/a2aproject/A2A/discussions/1803#discussioncomment-13655678) |
26+
27+
Three-layer stack:
28+
29+
1. **Identity** — Foxbook (handle verification, RFC 9162 transparency log)
30+
2. **Evidence** — Concordia v0.4.0 (#1734-shape attestation envelopes)
31+
3. **Verdict** — Sanctuary Castle Architecture v1.2 (gateway-side policy enforcement)
32+
33+
The typed-reference shape under discussion at <DISCUSSION_URL>. Once consensus lands, [`docs/decisions/0009-typed-reference-schema-for-composition.md`](decisions/0009-typed-reference-schema-for-composition.md) ratifies the shape on the Foxbook side.
34+
35+
---
36+
37+
## Cross-implementation references (substrate-layer)
38+
39+
These aren't application-layer integrations but are load-bearing for the cross-impl reference cycle per [ADR 0006](decisions/0006-protocol-not-marketplace.md) §4:
40+
41+
| Reference | Status | Link |
42+
|---|---|---|
43+
| Harness aggregator (`evidence_provider`, `claim_type_layer: identity`) | Live | [`agentgraph.co/.well-known/interop-harness.json`](https://agentgraph.co/.well-known/interop-harness.json) |
44+
| CTEF v0.3.1 byte-match (4/4 vectors) | Verified 2026-04-30 | [`ops/evidence/2026-04-30-ctef-v0.3.1-byte-match.md`](../ops/evidence/2026-04-30-ctef-v0.3.1-byte-match.md) (commit 9e392c5) |
45+
| AgentGraph litepaper §1.8 (substrate-and-primitive layering) | Publishes 2026-05-12 | TBD post-publish |
46+
47+
---
48+
49+
## Adding an entry
50+
51+
If you're integrating Foxbook into your system:
52+
53+
1. Open a thread at the schema-discussion venue (typically `<DISCUSSION_URL>` for Concordia/Sanctuary-shape integrations, or a new Discussion in `cloakmaster/foxbook` for novel shapes).
54+
2. Once your integration shape is agreed publicly, open a PR adding an entry to this file.
55+
3. Update Status as the integration progresses (Proposed → Spec'd → Live).
56+
57+
Maintainer review on PRs: weeks, not days, under stable mode. Use `hello@foxbook.dev` for time-sensitive substantive discussion.
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
# ADR 0009 — Typed-reference schema for composition (Foxbook ↔ Concordia ↔ Sanctuary)
2+
3+
**Number:** 0009
4+
**Date:** 2026-05-04
5+
**Status:** under-public-discussion
6+
**Supersedes:**
7+
**Superseded by:**
8+
**Related:** ADR 0004 (tl-leaf schema evolution), ADR 0005 (canonical bytes once), ADR 0006 (protocol-not-marketplace), ADR 0008 (stable-mode maintenance posture)
9+
10+
## Context
11+
12+
[A2A Discussion #1803](https://github.com/a2aproject/A2A/discussions/1803) crystallized a three-layer substrate stack with concrete cross-implementation reference candidates:
13+
14+
- **Identity** — Foxbook (transparency log)
15+
- **Evidence** — Concordia v0.4.0 (attestation envelopes)
16+
- **Verdict** — Sanctuary Castle Architecture v1.2 (gateway policy)
17+
18+
[@eriknewton's 2026-05-04 comment](https://github.com/a2aproject/A2A/discussions/1803#discussioncomment-13655678) proposed the natural integration: a Concordia envelope carries a **typed reference** to a Foxbook leaf, which Sanctuary's verdict-layer anchors on. This composition uses Foxbook's *existing* surface — no Foxbook protocol changes required — so it composes cleanly with [ADR 0008](0008-stable-mode-maintenance-posture.md)'s feature freeze.
19+
20+
Specifying the typed-reference shape is a **composition decision** that affects multiple implementations. Per [ADR 0006](0006-protocol-not-marketplace.md)'s protocol-not-marketplace stance, the spec belongs in the open: reviewable, archival, multi-party. The active spec venue is:
21+
22+
**`<DISCUSSION_URL>`**
23+
24+
This ADR is the Foxbook-side ratification record. It is **`under-public-discussion`** until consensus lands in the thread; once schema v1.0 is agreed, this ADR is updated **in-place** with the ratified shape and `Status: accepted`. A new ADR (0010) is not opened for the ratification — the thread is the discussion record, this ADR is the decision record.
25+
26+
## Decision
27+
28+
### Schema (placeholder pending public consensus)
29+
30+
The strawman from `<DISCUSSION_URL>` is reproduced here for traceability. The ratified schema lands in this section once the thread reaches consensus.
31+
32+
```json
33+
{
34+
"tl_url": "https://transparency.foxbook.dev",
35+
"leaf_index": 42,
36+
"tl_leaf_canonical_hash": "<64-char lowercase hex SHA-256>",
37+
"verified_signing_key_hex": "<64-char lowercase hex Ed25519 public key>",
38+
39+
"sth_at_verify_time": {
40+
"tree_size": 100,
41+
"root_hash": "<64-char lowercase hex>",
42+
"timestamp": "<ISO-8601>"
43+
},
44+
"sth_signature": "<compact-JWS EdDSA, three base64url segments>"
45+
}
46+
```
47+
48+
Required: `tl_url`, `leaf_index`, `tl_leaf_canonical_hash`, `verified_signing_key_hex`. Optional: `sth_at_verify_time`, `sth_signature`. Versioning + evolution rules per [ADR 0004](0004-tl-leaf-schema-evolution.md) precedent (additive within v1.x; breaking changes to v2.0).
49+
50+
### Why these fields
51+
52+
- **`tl_url`** — explicit log identifier. Forward-compat with multi-vendor federated logs.
53+
- **`leaf_index`** — log position. Combined with `tl_url`, uniquely identifies the leaf.
54+
- **`tl_leaf_canonical_hash`** — load-bearing for log-fork detection. The verdict layer recomputes the SHA-256 of the canonical-bytes leaf preimage and compares; any divergence is a log-integrity violation. Per [ADR 0005](0005-canonical-on-both-sides.md), canonicalization is via `canonical.ts` on the raw object — never on a storage round-trip.
55+
- **`verified_signing_key_hex`** — the active Ed25519 signing key surfaced by Foxbook SDK v0.2.0's `verifyAgentCard`. The verdict-layer uses this to verify the AgentCard's JWS signature directly without a second by-handle lookup.
56+
- **`sth_at_verify_time` / `sth_signature`** — temporal anchor + offline verification. Optional because verdict-layers that always re-fetch live can ignore them; mandatory-ish for verdict-layers wanting offline / point-in-time semantics.
57+
58+
### What this ADR does NOT decide
59+
60+
- **Verdict-layer policy**. How Sanctuary (or any verdict-layer impl) handles staleness, revocation between assert-time and consume-time, signing-key rotation between assert-time and consume-time — out of scope. The typed-reference is rich enough to support strict-freshness, point-in-time-anchor, and hybrid policies; the verdict-layer chooses based on its threat model.
61+
- **Concordia envelope shape**. How the typed reference embeds inside a Concordia attestation envelope (peer field vs nested vs CTEF-shape) is Concordia's call.
62+
- **AgentCard JWS verification**. The typed reference asserts "this signing key was active at verify-time per Foxbook"; whether the AgentCard was JWS-signed with that key is a Sanctuary-side check, not encoded in the typed reference.
63+
64+
These deliberate omissions keep the typed reference minimal + composable. Adding them would couple it to specific verdict-layer or evidence-layer choices.
65+
66+
## Enforcement
67+
68+
- Schema-bump PRs to update this ADR's content (post-consensus) reference the discussion thread in the PR body and link the specific comment(s) where consensus crystallized.
69+
- This ADR moves from `under-public-discussion``accepted` only when:
70+
- The discussion thread has explicit consensus from at least the Foxbook side and the Concordia/Sanctuary side (eriknewton).
71+
- The schema is reproduced verbatim in the "Decision" section above (replacing the strawman).
72+
- At least one reference implementation (Concordia v0.5.x or equivalent) has demonstrated the typed reference round-trips cleanly against a live Foxbook leaf.
73+
- Schema evolution post-acceptance follows ADR 0004 precedent: additive within v1.x lands as inline updates here; breaking changes require a v2.0 schema and a new ADR (likely 0010+) explaining the migration.
74+
75+
## Consequences
76+
77+
- **Foxbook protocol surface is unchanged**. ADR 0008's feature freeze is preserved. Foxbook's existing tl-leaf v1.2 + SDK v0.2.0 expose everything the typed reference needs.
78+
- **Cross-implementation reference cycle is materially strengthened**. Per [ADR 0006](0006-protocol-not-marketplace.md) §4, named cross-impl references are the load-bearing co-option-defense indicator. Concordia + Sanctuary citing Foxbook by name + canonical-bytes shape is exactly that.
79+
- **The catalog at [`docs/INTEGRATIONS.md`](../INTEGRATIONS.md) tracks active compositions**. The Concordia + Sanctuary entry is the first; future compositions follow the same pattern.
80+
- **`docs/COMPOSE-WITH-FOXBOOK.md`** is the path-of-engagement for future integrators. Points at this ADR + the active discussion thread.
81+
82+
## Alternatives considered
83+
84+
- **Spec offline between Foxbook and Concordia/Sanctuary maintainers**. Considered briefly (per cloakmaster's 2026-05-04T17:47Z reply on #1803) but rejected in favor of public spec — reviewable, archival, multi-party, and consistent with ADR 0006's protocol-not-marketplace stance.
85+
- **Embed full leaf bytes in the typed reference**. Rejected: increases receipt size + couples consumers to leaf-shape changes. The hash-pointer pattern (citing `tl_leaf_canonical_hash` and resolving via `tl_url + leaf_index`) is more durable.
86+
- **Skip `tl_leaf_canonical_hash`; trust the live log**. Rejected: removes the ability to detect log forks at receipt-consumption time. The verdict-layer can re-fetch the live leaf; comparing its hash against the typed reference's hash is the integrity check.
87+
- **Make `sth_at_verify_time` + `sth_signature` required**. Rejected (for v1.0): pushes complexity onto integrators that don't need offline / temporal-anchor semantics. May be promoted in v2.0 if practice shows the optional path is rarely chosen.
88+
89+
## When this rule can be violated
90+
91+
ADR 0009 itself can be amended in-place pre-acceptance (the strawman evolves with the thread). Post-acceptance, schema evolution follows ADR 0004 precedent (additive within v1.x; breaking changes to v2.0 + a new ADR).
92+
93+
The composition pattern itself (typed-reference, embedded inside a higher-layer envelope) can be superseded by a different composition pattern in a future ADR (0010+) if the cross-impl group decides a different shape is structurally better. ADR 0009 is silent on whether typed-reference is the only valid composition shape — see `docs/COMPOSE-WITH-FOXBOOK.md` for other shapes (wrapping, referencing-without-embedding, direct API integration).
94+
95+
## Verified
96+
97+
- The strawman schema in this ADR matches the strawman posted at `<DISCUSSION_URL>` first-comment as of `<DATE_POSTED>`.
98+
- Foxbook SDK v0.2.0 (`@foxbook/sdk-claim@0.2.0`) surfaces `verified_signing_key_hex` + `leaf_index` on the `verified` branch of `verifyAgentCard`. Verified by `npm view @foxbook/sdk-claim`.
99+
- tl-leaf v1.2's canonical-bytes shape (per [ADR 0004 addendum-3](0004-tl-leaf-schema-evolution.md)) is what `tl_leaf_canonical_hash` references. Cross-language byte-match validation in [`schemas/crypto-test-vectors.json`](../../schemas/crypto-test-vectors.json).
100+
- Concordia v0.4.0 and Sanctuary Castle Architecture v1.2 are the named cross-impl reference candidates per [@eriknewton's 2026-05-04 comment](https://github.com/a2aproject/A2A/discussions/1803#discussioncomment-13655678) on A2A Discussion #1803.

0 commit comments

Comments
 (0)