Skip to content

docs: describe the JVM integrations as they behave after the client fixes - #14

Draft
sunilp wants to merge 1 commit into
mainfrom
jvm-pages
Draft

sunilp wants to merge 1 commit into
mainfrom
jvm-pages

Conversation

@sunilp

@sunilp sunilp commented Oct 10, 2026

Copy link
Copy Markdown
Member

Rewrites the JVM integration pages to match the fixed clients. Do not merge until the releases below are on Maven Central. The pages describe the released state.

Merge prerequisites

Already on Central and used as is: jamjet-agent 0.4.0, jamjet-agent-spring-boot-starter 0.4.0, jamjet-runtime-spring-boot-starter / -core / -instrument 0.4.0.

What changed

  • integrations/spring-boot: rewritten. Drops the crash recovery, replay and graceful degradation claims. Covers what is recorded (spring_ai.* external events on a one-node wait workflow), fail-closed by default with fail-open and allow-streaming opt-ins, the approval flow (authenticated reviewer, ROLE_JAMJET_APPROVER, content_digest echo, initiator cannot approve, recorded and void decision events), runtime-held approvals decided with the reviewer's own token via jamjet approve ... --action-digest, and the full property table. Removes webhook-url (unused) and tenant-id (ignored). Says the Micrometer and OTel bridges are not called by the advisors in 0.2.0.
  • integrations/langchain4j: rewritten. langchain4j-jamjet:0.2.0 on its own (no starter peer dependency), JamjetConfig, recorded AI services, chat memory with a required namespace, its limits (namespace is not access control, first-access scan, one writer per id), fail-closed behaviour.
  • open-source/java-runtime: adds a jamjet-sdk REST client section (0.5.1, bare routes, approvals with action_digest), drops the "jamjet-sdk is frozen" callout, documents jamjet-agent-spring-boot-starter's jamjet.agent.* properties and separates it from jamjet-spring-boot-starter. Removes em dashes.
  • open-source/jvm-native-runtime: the starter artifact is jamjet-runtime-spring-boot-starter (the page named jamjet-spring-boot-starter:0.3.1, which 404s), versions to 0.4.0, and the checkpoint text no longer implies checkpoints survive a restart without persisting them.
  • integrations/index, cloud/integrations: card text. The Cloud page no longer implies the JVM integrations are Cloud adapters.

Verification

  • Every Java snippet compiled with JDK 21 against the version it names: jamjet-sdk 0.5.1 and jamjet-spring 0.2.0 built from the PR branches into a throwaway local repo, the 0.4.0 artifacts from Central. Spring snippets compiled with Spring Boot 3.4.1 and Spring AI 1.0.0 (spring-ai-starter-model-openai).
  • Run against a local jamjet-server 0.5.0 in dev mode: the LangChain4j wrap, chat memory (read back by a fresh store), outcome events, namespace check and fail-closed path; the jamjet-sdk start, status, events, external event and listWorkflows() refusal; the @ReplayExecution test example against a recorded execution (and it fails when the asserted event is changed).
  • Not run: the approval snippets (no pending approval to decide), and the Spring app end to end (needs a model key). jamjet-spring#1's RuntimeContractIT covers those paths.
  • npm run build passes.

Translations

Only content/docs/en/ is edited. The other locales have no copies of these pages yet. The Lingo.dev Translate workflow generates them on merge to main (it needs the LINGODOTDEV_API_KEY secret).

🤖 Generated with Claude Code

The Spring Boot and LangChain4j pages described crash recovery, replay of
in-flight calls and graceful degradation. None of that happened: the 0.1.0
clients called /api/v1 routes the runtime never served, so nothing was
recorded. jamjet-spring 0.2.0 and jamjet-sdk 0.5.1 call the real routes,
fail closed by default and bind approvals to the reviewed request.

The pages now say what is recorded and where, what fails closed, how a
reviewer approves (authenticated, ROLE_JAMJET_APPROVER, content digest,
initiator cannot approve), and that the runtime does not re-run Spring AI
or LangChain4j calls. The Java SDK page gains the jamjet-sdk REST client
and stops calling that artifact frozen. The JVM-native page names the real
starter artifact (jamjet-runtime-spring-boot-starter 0.4.0) and stops
implying checkpoints survive a restart on their own.
@sunilp
sunilp requested a balanced review from Copilot October 10, 2026 17:41
@coderabbitai

coderabbitai Bot commented Oct 10, 2026

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Several behavior descriptions remain inaccurate, and the documented releases are still blocked by open upstream pull requests.

3 open findings
What changed in this PR

Rewrites JVM integration documentation to match the corrected clients and distinguish self-hosted runtime integrations from Cloud adapters.

Changes:

  • Updates Spring Boot and LangChain4j behavior, configuration, approvals, and testing.
  • Documents Java REST client and JVM-native runtime artifacts.
  • Corrects integration card descriptions.
File Description
open-source/​jvm-native-runtime.mdx Corrects artifacts, versions, and checkpoint behavior.
open-source/​java-runtime.mdx Adds REST client and Spring starter guidance.
integrations/​spring-boot.mdx Rewrites Spring AI recording and approval documentation.
integrations/​langchain4j.mdx Rewrites AI service and chat-memory documentation.
integrations/​index.mdx Updates JVM integration cards.
cloud/​integrations.mdx Clarifies which integrations are self-hosted.

🧠 Review effort: Balanced


💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

| After your service threw | Your service's exception, with a `JamjetRecordingException` attached as suppressed. |

LangChain4j stores conversation history through the `ChatMemoryStore` interface. The default implementation is in-memory — if the process restarts, all conversation history is lost.
With `.onRuntimeError(RuntimeErrorMode.FAIL_OPEN)` each of these logs a warning and the call goes on.
```

And the corresponding response event:
An allowed stream records the whole streamed text as `spring_ai.response` and an outcome of `completed`, `failed` or `cancelled`. A stream's record can only be written after its output was delivered, so a fail-closed record failure on a stream arrives as an error at the end of the stream, after the chunks.
"completion_tokens": 1203,
"total_tokens": 2050
}
## Human approval
sunilp added a commit that referenced this pull request Oct 11, 2026
The rows that cited open PRs and the approval-deadlines branch were
written before that work merged. jamjet #140 to #146, jamjet-policy #12
and #14, agentboundary #5, engram #11 and jamjet-guardrails #44 are now
on main but not published, so those rows stay unreleased and their
links point at main and the merged PR numbers.

Reading main also showed two released rows were wrong. In crates 0.5.0
the Agent Card's iteration and tool-call limits are compared with
counters nothing increments and the circuit breaker never trips, so the
ceilings and breaker rows now cite #146 as unreleased and the 0.5.0 row
covers only the workflow token and cost budget, as Partial.

New rows cover what main now enforces: Agent Card tool lists and
allowed_delegations at the shared guard (#145), autonomy limits (#146),
Ed25519 audit signing (#145), Cedar at ext-authz (jamjet-policy #14)
and Engram revocation (engram #11). The status counts are recounted
from the rows.
sunilp added a commit that referenced this pull request Oct 11, 2026
* Add a control map for OWASP ASI, FINOS AIGF and NIST CAISI

Maps each JamJet open-source control to the OWASP Top 10 for Agentic
Applications 2026, the FINOS AIGF agentic catalogue (with mi-24 item by
item) and the NCCoE agent identity and authorization themes. Every row
names the component, the version or PR, and a status. Gaps are listed
as Not covered.

* Recheck the control map against what merged on main

The rows that cited open PRs and the approval-deadlines branch were
written before that work merged. jamjet #140 to #146, jamjet-policy #12
and #14, agentboundary #5, engram #11 and jamjet-guardrails #44 are now
on main but not published, so those rows stay unreleased and their
links point at main and the merged PR numbers.

Reading main also showed two released rows were wrong. In crates 0.5.0
the Agent Card's iteration and tool-call limits are compared with
counters nothing increments and the circuit breaker never trips, so the
ceilings and breaker rows now cite #146 as unreleased and the 0.5.0 row
covers only the workflow token and cost budget, as Partial.

New rows cover what main now enforces: Agent Card tool lists and
allowed_delegations at the shared guard (#145), autonomy limits (#146),
Ed25519 audit signing (#145), Cedar at ext-authz (jamjet-policy #14)
and Engram revocation (engram #11). The status counts are recounted
from the rows.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants