Skip to content

Commit 655b41c

Browse files
nficanoclaude
andcommitted
docs: align conformance + guides with current message names, ExtensionRegistry, and paired() transport helper
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent f3199a8 commit 655b41c

15 files changed

Lines changed: 310 additions & 172 deletions

CONFORMANCE.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ The docs mirror is [`docs/conformance.md`](./docs/conformance.md).
99
| --- | --- | --- |
1010
| §4 Transport | Partial | WebSocket, stdio, and in-memory transports are implemented. HTTP/2 and QUIC are deferred. |
1111
| §5 Wire format | Full | `Envelope`, `RawEnvelope`, typed payloads, ids, priorities, trace metadata, and extension fields. |
12-
| §6 Sessions | Full | Session open/accepted/rejected/unauthenticated, bye, lease, ack, heartbeat, job listing, and subscriptions. |
12+
| §6 Sessions | Full | `session.open` / `accepted` / `rejected` / `unauthenticated` / `close`, lease, ack, heartbeat, job listing, and subscriptions. |
1313
| §6.1 Authentication | Partial | Bearer, signed JWT, and anonymous auth are implemented. mTLS and OAuth2 are deferred to vendor or future adapters. |
1414
| §6.3 Resume | Full | SQLite event log supports replay by session and sequence boundary; resumability examples exercise reconnect flows. |
15-
| §6.4 Heartbeat | Full | `session.heartbeat` / `session.pong` messages and runtime examples are implemented. |
15+
| §6.4 Heartbeat | Full | `session.ping` / `session.pong` messages and runtime examples are implemented. |
1616
| §6.5 Ack | Full | Runtime ack window and `session.ack` back-pressure are implemented. |
1717
| §6.6 List jobs / Subscribe | Full | `session.list_jobs`, `job.subscribe`, `job.unsubscribe`, and generic subscription fanout are implemented. |
1818
| §7 Jobs | Full | Submit, accept, start, complete, fail, cancel, state inventory, and idempotent retry paths. |
@@ -22,7 +22,7 @@ The docs mirror is [`docs/conformance.md`](./docs/conformance.md).
2222
| §8 Job events | Full | Reserved event kinds plus vendor event classification are implemented. |
2323
| §8.2.1 Progress | Full | Progress events are emitted by examples and represented in message types. |
2424
| §8.3 Sequence numbers | Full | Event log and runtime fanout preserve per-session event sequence ordering. |
25-
| §8.4 Result chunks | Full | `result.chunk` stream assembly and terminal result references are implemented. |
25+
| §8.4 Result chunks | Full | `job.result_chunk` stream assembly and terminal result references are implemented. |
2626
| §9 Leases | Full | Lease request, session lease, subset validation, expiration, budgets, model use, and revocation helpers. |
2727
| §9.6 Budgets | Full | `cost.budget` tracking emits remaining metrics and returns `BUDGET_EXHAUSTED` on depletion. |
2828
| §9.7 Model use | Full | `model.use` glob enforcement is implemented in `ToolContext`. |
@@ -31,7 +31,7 @@ The docs mirror is [`docs/conformance.md`](./docs/conformance.md).
3131
| §11 Observability | Partial | Trace ids and metric/log event payloads are implemented. Native OpenTelemetry middleware is deferred. |
3232
| §12 Error taxonomy | Full | Canonical codes serialize to wire strings and map to `ARCPError` variants. |
3333
| §14 Security | Partial | Auth, lease checks, credential redaction, and back-pressure caps are implemented. Host-framework DNS-rebind helpers are out of scope for this crate. |
34-
| §15 Vendor extensions | Full | `x-vendor.*` validation, classification, and round-trip handling are implemented. |
34+
| §15 IANA / extensions | Full | `arcpx.*` and reverse-DNS extension namespace validation, advertised-vs-unknown classification, and round-trip handling are implemented in `ExtensionRegistry`. |
3535
| §16 Artifacts | Full | Inline base64 artifact put, fetch, release, retention, and runtime dispatch are implemented. |
3636
| §22 Standard transports | Partial | WebSocket and stdio are implemented; HTTP/2 and QUIC are deferred. |
3737

README.md

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -337,21 +337,35 @@ match run_job(&transport, session_id.clone()).await {
337337

338338
## Feature support
339339

340-
ARCP features this SDK negotiates during the `hello`/`welcome` handshake:
340+
`Capabilities` (RFC §7) is the negotiated feature set, exchanged on
341+
`session.open` / `session.accepted`. The Rust SDK implements the following
342+
capability fields:
341343

342-
| Feature flag | Status |
344+
| `Capabilities` field | Status |
343345
|---|---|
344-
| `heartbeat` | Supported |
345-
| `ack` | Supported |
346-
| `list_jobs` | Supported |
347-
| `subscribe` | Supported |
348-
| `lease_expires_at` | Supported |
349-
| `cost.budget` | Supported |
350-
| `model.use` | Supported |
346+
| `streaming` | Supported |
347+
| `durable_jobs` | Supported |
348+
| `checkpoints` | Not implemented (deferred) |
349+
| `binary_streams` | Not implemented (deferred) |
350+
| `agent_handoff` | Supported |
351+
| `model_use` | Supported |
351352
| `provisioned_credentials` | Supported |
352-
| `progress` | Supported |
353-
| `result_chunk` | Supported |
354-
| `agent_versions` | Supported |
353+
| `artifacts` | Supported |
354+
| `subscriptions` | Supported |
355+
| `scheduled_jobs` | Not implemented (deferred) |
356+
| `interrupt` | Supported |
357+
| `anonymous` | Supported |
358+
| `heartbeat_recovery` | Supported (`"fail"` / `"block"`) |
359+
| `binary_encoding` | Advertised; payloads remain JSON |
360+
| `extensions` | Supported |
361+
| `artifact_retention` | Supported |
362+
| `agents` | Supported (v1.0 flat list and v1.1 rich form) |
363+
364+
The SDK also implements the ARCP v1.1 protocol-level surfaces that are not
365+
themselves capability flags: `session.ack` flow control (§6.5),
366+
`session.ping`/`pong` heartbeats (§6.4), `session.list_jobs` (§6.6),
367+
`job.subscribe`/`job.unsubscribe` (§7.6), `job.progress`,
368+
`job.result_chunk` (§8.4), and `agent@version` resolution (§7.5).
355369

356370
## Transport
357371

docs/diagrams/architecture-dark.dot

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,14 @@ digraph RustSdkArchitecture {
2323
label=<<FONT POINT-SIZE="11"><B>arcp::messages</B></FONT><BR/><FONT POINT-SIZE="9" COLOR="#94A3B8">tagged-enum MessageType</FONT>>
2424
];
2525

26+
Envelope [
27+
label=<<FONT POINT-SIZE="11"><B>arcp::envelope</B></FONT><BR/><FONT POINT-SIZE="9" COLOR="#94A3B8">Envelope · ids · trace · priority</FONT>>
28+
];
29+
30+
Auth [
31+
label=<<FONT POINT-SIZE="11"><B>arcp::auth</B></FONT><BR/><FONT POINT-SIZE="9" COLOR="#94A3B8">bearer · jwt · none</FONT>>
32+
];
33+
2634
subgraph cluster_transport {
2735
label=<<TABLE BORDER="0" CELLBORDER="0" CELLPADDING="0" CELLSPACING="0"><TR><TD COLSPAN="3" HEIGHT="8"></TD></TR><TR><TD WIDTH="8"></TD><TD><FONT POINT-SIZE="12"><B>arcp::transport</B></FONT></TD><TD WIDTH="8"></TD></TR></TABLE>>;
2836
style="rounded,filled";
@@ -47,8 +55,10 @@ digraph RustSdkArchitecture {
4755
Client -> Runtime [dir=both, label="invoke / events"];
4856
Client -> Messages;
4957
Runtime -> Messages;
50-
Messages -> Ws [lhead=cluster_transport];
58+
Messages -> Envelope [label="wrapped in"];
59+
Envelope -> Ws [lhead=cluster_transport];
5160

5261
edge [color="#475569", penwidth=1.0];
62+
Runtime -> Auth;
5363
Runtime -> Store;
5464
}

0 commit comments

Comments
 (0)