Skip to content

Commit bb3c9f0

Browse files
committed
fix(docs): correct third-party dep versions and stale citations (doc-drift audit)
Third-party deps (google-adk, grpc, spring-ai, langchain4j) were stamped with Atmosphere 4.0.54 -> real upstream versions; Spring AI M6->2.0.0 GA prose; NVIDIA placeholder URL fixed in skillcard generator + SKILLCARDS.md; added missing browser-agent template row. New validate-doc-thirdparty-versions.sh gates the version-stamping class.
1 parent 057a0aa commit bb3c9f0

14 files changed

Lines changed: 228 additions & 11 deletions

.harness/drift-log.md

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1529,3 +1529,57 @@ hot-path) — it is the auditor's / a scheduled CI lane's job.
15291529
shipped-without-consumer drift) or it bot-blocks the probe. Needs the maintainer to
15301530
confirm the repo exists or correct the references — deliberately NOT allowlisted, so the
15311531
link checker keeps flagging it.
1532+
1533+
---
1534+
1535+
## 2026-06-16 — doc-drift-audit run: third-party version stamping + stale citations
1536+
1537+
Ran the `doc-drift-audit` workflow (16 groups, 98 agents) across both repos. It
1538+
confirmed 46 drifts (the verify pass and synthesis were partly truncated by an
1539+
upstream rate-limit, so the real count is higher). The dominant, clearly-real
1540+
main-repo cluster is fixed here, plus a structural gate for the worst class.
1541+
1542+
### Third-party dependency versions stamped with Atmosphere's release number
1543+
1544+
**Claim:** dependency-block examples named third-party artifacts at Atmosphere's
1545+
version: `com.google.adk:google-adk:4.0.54` (modules/adk/README.md:26),
1546+
`io.grpc:grpc-netty-shaded:4.0.54` (modules/wasync/README.md:110),
1547+
`org.springframework.ai:spring-ai-vector-store:4.0.54` (modules/rag/README.md:165),
1548+
`dev.langchain4j:langchain4j-core:4.0.54` (modules/rag/README.md:188), plus four on
1549+
the website (semantickernel-api / -aiservices-openai, jakarta.inject-api,
1550+
jackson-databind).
1551+
1552+
**Truth:** the real upstream versions are google-adk 1.2.0, grpc 1.81.0, Spring AI
1553+
2.0.0, langchain4j 1.15.0, Semantic Kernel 1.5.0 (verified against pom.xml
1554+
properties). A release-bump find/replace rewrote every `<version>4.0.x</version>`
1555+
in the docs — including the ones inside non-Atmosphere `<dependency>` blocks. A
1556+
reader copying the snippet gets a Maven artifact that does not exist. Same class as
1557+
the hand-fixed Z3 binding (commit aaf1fbf2fb); this time the audit found the whole
1558+
set at once.
1559+
1560+
**Gate added:** `scripts/validate-doc-thirdparty-versions.sh` (+ pom-derived 4.0.5x
1561+
band, allowlist, pre-push wiring) — parses `<dependency>` blocks in docs and fails
1562+
when a non-`org.atmosphere` groupId carries an Atmosphere version. Main-repo
1563+
hard-fail, sibling advisory (per #20). All four main-repo instances fixed; the four
1564+
sibling instances are advisory, left for the website's lifecycle.
1565+
1566+
### Stale framework-version + citation prose (also fixed)
1567+
1568+
- **Spring AI 2.0.0-M6 → 2.0.0 (GA).** The adapter upgraded to GA in f844e80691
1569+
(2026-06-12) but four narrative mentions lagged: README.md:150,
1570+
modules/ai/README.md:67 & :283, modules/spring-ai/README.md:85. Same drift class
1571+
as #12/#18 (prose trailing a pom property); fixed.
1572+
- **NVIDIA citation was a truncated placeholder.** `…/nvidia-verified-agent-skills-...`
1573+
(a literal ellipsis) 404s; the canonical post is `…-provide-capability-governance-for-ai-agents/`
1574+
(verified 200). Fixed in the generator (scripts/regen-skillcards.sh,
1575+
sign-skillcards.sh) AND the generated SKILLCARDS.md so a regen won't reintroduce it.
1576+
- **`browser-agent` template missing from the cli/README.md table.** It exists in the
1577+
`cmd_new` map, `cli/samples.json`, and the prose list, but the "Available Templates"
1578+
table under-enumerated it (12 of 13). Row added.
1579+
1580+
### Not auto-fixed (surfaced)
1581+
1582+
The remaining audit findings — many `capability_contradiction` hits that on
1583+
inspection are honest "NOT supported" doc sections (likely audit false positives),
1584+
and the sibling-repo items above — need per-item human verification before editing
1585+
and are left for a follow-up pass rather than mass-applied.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# Allowlist for scripts/validate-doc-thirdparty-versions.sh (substring match
2+
# against "<file>: <groupId>:<artifactId>:<version>"). Use ONLY for a genuine
3+
# third-party artifact whose real upstream version legitimately sits on a 4.0.x
4+
# line. None known today.

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ Capabilities are intentionally not identical. The authoritative matrix is pinned
147147
| Runtime adapter | Backing framework | Spring Boot | Capability highlights | Notes |
148148
|---|---|---|---|---|
149149
| `atmosphere-ai` (Built-in) | OpenAI-compatible HTTP client | 3.5 / 4.0 | tool calling, JSON mode, vision, audio, prompt caching, token usage, native retry, tool-call deltas | Default. Works with OpenAI-compatible endpoints such as OpenAI, Gemini compatibility endpoints, Ollama, and local proxies. |
150-
| `atmosphere-spring-ai` | Spring AI 2.0.0-M6 | 4.0 | tool calling, structured output, vision, audio, prompt caching, token usage | Best fit for Spring Boot applications already using Spring AI. |
150+
| `atmosphere-spring-ai` | Spring AI 2.0.0 | 4.0 | tool calling, structured output, vision, audio, prompt caching, token usage | Best fit for Spring Boot applications already using Spring AI. |
151151
| `atmosphere-langchain4j` | LangChain4j 1.15.0 | 4.0 | tool calling, structured output, vision, audio, prompt caching, token usage | Best fit for LangChain4j tool ecosystems and non-Spring services. |
152152
| `atmosphere-adk` | Google ADK 1.2.0 | 4.0 | agent orchestration, tool calling, multi-modal, prompt caching | Multi-agent runtime with `AGENT_ORCHESTRATION`. |
153153
| `atmosphere-koog` | JetBrains Koog 1.0.0 | 4.0 | agent orchestration, tool calling, multi-modal, prompt caching, cancellation | Multi-agent runtime. |

SKILLCARDS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ at `META-INF/atmosphere/SKILLCARD.yaml[.sig]`, so downstream consumers
1414
can verify integrity without re-fetching from this repository.
1515

1616
Inspired by NVIDIA's verified-agent-skills catalog
17-
(<https://developer.nvidia.com/blog/nvidia-verified-agent-skills-...>);
17+
(<https://developer.nvidia.com/blog/nvidia-verified-agent-skills-provide-capability-governance-for-ai-agents/>);
1818
the signature envelope is the same OpenSSF Model Signing format
1919
NVIDIA uses (`https://github.com/sigstore/model-transparency`).
2020

cli/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,7 @@ Every template sparse-clones the matching sample from `cli/samples.json` into th
192192
| `assistant` | `spring-boot-personal-assistant` | Long-lived memory-bearing assistant: AgentState + AgentWorkspace + AgentIdentity + ProtocolBridge |
193193
| `multi-agent` | `spring-boot-multi-agent-startup-team` | A `@Coordinator` (CEO) dispatching to 4 `@Agent` specialists over A2A |
194194
| `classroom` | `spring-boot-ai-classroom` | Shared streaming AI responses across web + Expo React Native clients |
195+
| `browser-agent` | `spring-boot-browser-agent` | Code-as-action agent — the model writes Playwright that drives a headless browser in an isolated sandbox container; screenshots stream to the Console live (requires Docker) |
195196

196197
⭐ marks the five **flagship enterprise templates** — the canonical agent
197198
shapes most teams reach for first. Each one is a real sample with a working

modules/adk/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ Browser ← WS/SSE/gRPC → Broadcaster ← AdkEventAdapter ← Flowable<Event>
2323
<dependency>
2424
<groupId>com.google.adk</groupId>
2525
<artifactId>google-adk</artifactId>
26-
<version>4.0.54</version>
26+
<version>1.2.0</version>
2727
</dependency>
2828
```
2929

modules/ai/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ Capability flags advertise a coarse contract: "this runtime cooperates with the
6464

6565
If a per-runtime cell needs a caveat, document it in the row footnote (Spring AI Alibaba already does for buffered streaming) rather than weakening the capability semantics across all rows.
6666

67-
**Spring AI Alibaba runtime — Spring Boot 3 only today.** Spring AI Alibaba `1.1.2.0` is compiled against Spring AI `1.1.2` and `spring-ai-alibaba-graph-core-1.1.2.0` hardcodes references to Spring AI 1.1.2-only types (e.g. `org.springframework.ai.deepseek.DeepSeekAssistantMessage`), so the runtime requires Spring AI 1.1.2 on the classpath. Spring AI 1.1.2 in turn requires Spring Boot 3 (it references the SB3-era FQN `org.springframework.boot.autoconfigure.web.client.RestClientAutoConfiguration`; Spring Boot 4 has the same class but at the renamed FQN `org.springframework.boot.restclient.autoconfigure.RestClientAutoConfiguration`). Net result: `atmosphere-spring-ai-alibaba` runs end-to-end on Spring Boot 3 today (verified via chrome-devtools through the bundled Console against Ollama, qwen2.5:0.5b round-trip succeeded); a Spring Boot 4 path will become possible once Alibaba publishes a Spring AI 2.x-aligned `spring-ai-alibaba-agent-framework`. Forcing Spring AI 2.0.0-M6 across the classpath today fails at `ReactAgent` construction with `NoClassDefFoundError`. AgentScope (`atmosphere-agentscope`) is unaffected — it builds its OpenAI-compatible client through `AiConfig` directly and is validated end-to-end on Spring Boot 4.
67+
**Spring AI Alibaba runtime — Spring Boot 3 only today.** Spring AI Alibaba `1.1.2.0` is compiled against Spring AI `1.1.2` and `spring-ai-alibaba-graph-core-1.1.2.0` hardcodes references to Spring AI 1.1.2-only types (e.g. `org.springframework.ai.deepseek.DeepSeekAssistantMessage`), so the runtime requires Spring AI 1.1.2 on the classpath. Spring AI 1.1.2 in turn requires Spring Boot 3 (it references the SB3-era FQN `org.springframework.boot.autoconfigure.web.client.RestClientAutoConfiguration`; Spring Boot 4 has the same class but at the renamed FQN `org.springframework.boot.restclient.autoconfigure.RestClientAutoConfiguration`). Net result: `atmosphere-spring-ai-alibaba` runs end-to-end on Spring Boot 3 today (verified via chrome-devtools through the bundled Console against Ollama, qwen2.5:0.5b round-trip succeeded); a Spring Boot 4 path will become possible once Alibaba publishes a Spring AI 2.x-aligned `spring-ai-alibaba-agent-framework`. Forcing Spring AI 2.0.0 across the classpath today fails at `ReactAgent` construction with `NoClassDefFoundError`. AgentScope (`atmosphere-agentscope`) is unaffected — it builds its OpenAI-compatible client through `AiConfig` directly and is validated end-to-end on Spring Boot 4.
6868

6969
### AiInterceptor
7070

@@ -280,7 +280,7 @@ enforcement when the upstream library exposes a mappable knob.
280280
| Built-in (`BuiltInAgentRuntime`) | ✓ native | ✓ native | `OpenAiCompatibleClient.doStreamWithToolLoop` reads `ChatCompletionRequest.toolLoopPolicy()` every iteration |
281281
| Koog (`KoogAgentRuntime`) | ✓ native + guard | ✓ native | `executeWithAgent` reads `ToolLoopPolicies.fromOrDefault(ctx)` and translates to `AIAgent.maxIterations × 2` (Koog counts LLM rounds + tool steps) |
282282
| LangChain4j (`LangChain4jAgentRuntime`) | ✓ via guard | hint via sidecar (caller-controlled) | When the caller routes through the `LangChain4jAiServices` sidecar, the cap lives on `AiServices.builder().maxSequentialToolsInvocations(int).build()` (set once at construction) |
283-
| Spring AI (`SpringAiAgentRuntime`) | ✓ via guard | hint only — falls through to Spring AI default | Spring AI 2.0.0-M6 exposes `OpenAiChatModel.Builder.toolExecutionEligibilityPredicate(...)` at ChatModel construction time (not per-request); per-request wiring would require Atmosphere to wrap user-supplied ChatModels |
283+
| Spring AI (`SpringAiAgentRuntime`) | ✓ via guard | hint only — falls through to Spring AI default | Spring AI 2.0.0 exposes `OpenAiChatModel.Builder.toolExecutionEligibilityPredicate(...)` at ChatModel construction time (not per-request); per-request wiring would require Atmosphere to wrap user-supplied ChatModels |
284284
| Spring AI Alibaba | ✓ via guard | hint only | Inherits Spring AI's lack of per-request knob. `ReactAgent` and Alibaba's `RunnableConfig` do not expose an iteration cap |
285285
| ADK (`AdkAgentRuntime`) | ✓ via guard | hint only — native wiring planned | ADK 1.0.0 ships `LlmAgent.Builder.maxSteps(int)` at agent construction. Native per-request wiring (rebuild leaf `LlmAgent` per request, or counting `BeforeModelCallback` reading session state) is tractable but not yet implemented |
286286
| Semantic Kernel (`SemanticKernelAgentRuntime`) | ✓ via guard | hint only | SK 1.4.0 `ToolCallBehavior.getMaximumAutoInvokeAttempts()` is a getter only; the constructor and `allowAllKernelFunctions(...)` factory chain do not accept a max-attempts integer. Subclassing requires reflection on package-private fields |

modules/rag/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ Add Spring AI to your dependencies:
162162
<dependency>
163163
<groupId>org.springframework.ai</groupId>
164164
<artifactId>spring-ai-vector-store</artifactId>
165-
<version>4.0.54</version>
165+
<version>2.0.0</version>
166166
</dependency>
167167
```
168168

@@ -185,7 +185,7 @@ Add LangChain4j to your dependencies:
185185
<dependency>
186186
<groupId>dev.langchain4j</groupId>
187187
<artifactId>langchain4j-core</artifactId>
188-
<version>4.0.54</version>
188+
<version>1.15.0</version>
189189
</dependency>
190190
```
191191

modules/spring-ai/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,4 +82,4 @@ across all runtimes.
8282

8383
- Java 21+
8484
- `atmosphere-ai` (transitive)
85-
- Spring AI 2.0.0-M6+
85+
- Spring AI 2.0.0+

modules/wasync/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ Connect to an Atmosphere gRPC server using bidirectional streaming. Requires `at
107107
<dependency>
108108
<groupId>io.grpc</groupId>
109109
<artifactId>grpc-netty-shaded</artifactId>
110-
<version>4.0.54</version>
110+
<version>1.81.0</version>
111111
</dependency>
112112
```
113113

0 commit comments

Comments
 (0)