From f9029791314c45f7952c657e4843ca8a87786482 Mon Sep 17 00:00:00 2001 From: Brian O'Kelley Date: Sat, 9 May 2026 04:16:08 -0400 Subject: [PATCH] =?UTF-8?q?docs(specs):=20Java=20SDK=20RFC=20=E2=80=94=20p?= =?UTF-8?q?in=20a2aproject/a2a-java=20as=20A2A=20anchor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replaces the vague "track upstream maturity" in Open Question 3 with an explicit switch trigger (first a2a-java ≥ 1.0.0 stable tag) and links the upstream releases page so the trigger is visible. Addresses MichielDean's review comment on #4145 that landed after the RFC was merged. Co-Authored-By: Claude Opus 4.7 (1M context) --- .changeset/java-sdk-rfc-a2a-followup.md | 4 ++++ specs/java-sdk-rfc.md | 22 +++++++++++++++++----- 2 files changed, 21 insertions(+), 5 deletions(-) create mode 100644 .changeset/java-sdk-rfc-a2a-followup.md diff --git a/.changeset/java-sdk-rfc-a2a-followup.md b/.changeset/java-sdk-rfc-a2a-followup.md new file mode 100644 index 0000000000..5ece50720e --- /dev/null +++ b/.changeset/java-sdk-rfc-a2a-followup.md @@ -0,0 +1,4 @@ +--- +--- + +Java SDK RFC: pin `a2aproject/a2a-java` as the A2A library anchor and replace the vague "track upstream maturity" with an explicit switch trigger (first ≥ 1.0.0 stable tag). Addresses MichielDean's review comment on #4145 that landed after the RFC was admin-merged. diff --git a/specs/java-sdk-rfc.md b/specs/java-sdk-rfc.md index eb994beb49..e25c2b9fee 100644 --- a/specs/java-sdk-rfc.md +++ b/specs/java-sdk-rfc.md @@ -162,9 +162,15 @@ resources jar; cache validators per schema URI. Same wiring shape as the TS (Spring AI's, the official `io.modelcontextprotocol`); pick one before v0.1 ships, name it, don't drift between releases. - **A2A:** the TS SDK wraps `@a2a-js/sdk ^0.3.4` — there's a stable JS - upstream. Java A2A tooling is younger; if no maintained Java client - exists at v0.1 cut, ship a minimal SSE consumer + JSON-RPC framer in - `adcp-server` and migrate to an upstream wrapper when one stabilizes. + upstream. Java A2A tooling is younger; the anchor is + [`a2aproject/a2a-java`](https://github.com/a2aproject/a2a-java) (the + reference Java implementation under the A2A project). It is pre-1.0 at + the time of writing. **Pre-1.0:** ship a minimal SSE consumer + JSON-RPC + framer in `adcp-server`, depending on `a2a-java` only for type shapes + where stable. **At first `a2a-java` stable tag (≥ 1.0.0 on the + [releases page](https://github.com/a2aproject/a2a-java/releases)):** + switch the transport to the upstream client and deprecate the in-tree + fallback in the next minor. This matches how `@adcp/sdk` wraps both `@modelcontextprotocol/sdk` and `@a2a-js/sdk`. @@ -498,8 +504,14 @@ Four audiences: 2. **MCP Java SDK choice.** Spring AI's vs. official `io.modelcontextprotocol`. Decide by v0.1 cut; drifting between releases is worse than picking the less-mature one and migrating. -3. **A2A Java fallback shape.** Wrap upstream when stable, or ship - minimal in-tree client now? Track upstream maturity at v0.1 cut. +3. **A2A Java fallback shape.** Anchor is + [`a2aproject/a2a-java`](https://github.com/a2aproject/a2a-java). + Trigger to switch off the in-tree fallback: first `a2a-java` stable + release (≥ 1.0.0 on the + [releases page](https://github.com/a2aproject/a2a-java/releases)). + Open: do we hard-depend on `a2a-java` for type shapes pre-1.0 (locking + us to their package layout churn), or keep types in-tree until the + stable cut and migrate in one shot? Default: in-tree until stable. 4. **Shared lifecycle YAMLs.** Path 2 above (lead the cross-SDK lifecycle source) requires TS / Python maintainer buy-in. If they say no, fall back to path 1 and ship transition validators as a