Release Notes — 6.0.2
Release Date: April 2026 Platform: Java 25 · Quarkus 3.34.5 · langchain4j 1.13.0
EDDI 6.0.2 is a security hardening and quality assurance release. It delivers comprehensive security fixes, a 2.5× increase in test coverage, a fully rewritten Admin UI, and a hardened CI/CD pipeline — bringing the platform to OpenSSF Silver compliance readiness.
🔐 Security Hardening
SSRF Prevention
SafeHttpClient — New centralized, SSRF-safe HTTP client with per-hop redirect validation. All LLM tools (WebScraper, PdfReader, WebSearch, Weather) migrated from inline
HttpClientto@Inject SafeHttpClientUrlValidationUtils — Extended to block IPv6 ULA, CGNAT, IPv4-mapped IPv6, multicast, and unspecified address ranges
Redirect hardening — Manual redirect loop (max 5 hops) with same-origin/cross-origin header policies. Overall wall-clock timeout across redirect chains
Vault & Encryption
Per-deployment random KEK salt — Each EDDI instance now generates a unique 16-byte salt for key derivation (was hardcoded). Backward-compatible: existing deployments auto-detect and use legacy salt
KEK rotation salt migration —
rotateKek()now properly migrates from legacy to new salt during key rotationAPI key auto-vaulting — Agent setup automatically stores API keys in the Secrets Vault, persisting only vault references (
${vault:...}) in MongoDB
Authentication & Authorization
AuthStartupGuard — Fail-loud production auth check: EDDI refuses to start if OIDC is disabled in production (escape hatch:
eddi.security.allow-unauthenticated=true)RBAC on 7 REST endpoints — Added
@RolesAllowedannotations to previously unprotected admin/user endpointsFine-grained permit rules — Static assets GET/HEAD only, health endpoint GET only, Slack webhook POST only (was blanket permit for all methods)
HTTP & Protocol
Security response headers —
X-Content-Type-Options,X-Frame-Options,Referrer-Policy,Permissions-Policy,Content-Security-PolicyQute strict rendering — Templates fail loudly on missing variables in production (since reverted — strict rendering is now off in every profile and a missing property renders as an empty string)
Jackson 3.x ban —
maven-enforcer-pluginrule prevents accidental introduction via transitive dependenciesLog injection prevention —
sanitizeForLog()applied to all user-controlled identifiers in log statements
Container & Docker
MongoDB 6.0 → 7.0.14 (pinned), with authentication enabled
MongoDB port binding —
127.0.0.1:27017(was all interfaces)Docker healthchecks added for both EDDI and MongoDB
Base image — Pinned to immutable digest for supply-chain integrity
CVE-2026-4424 remediated via digest pin
🧪 Testing & Quality (2,400 → 5,100+ tests · >80% coverage)
Test Suite Expansion
5,100+ total tests (up from ~2,400 in 6.0.1) — 4,500+ unit tests, 550+ integration tests
>80% combined test coverage (unit + integration tests merged) — instruction, method, and class coverage all exceed 80%
Coverage-guided fuzz testing — Jazzer v0.30.0 with harnesses for
PathNavigatorandMatchingUtilities(security-critical parsers)
Test Infrastructure Improvements
Testcontainers ITs for all datastore adapters — MongoDB (75 tests) and PostgreSQL (57 tests) covering every persistence adapter
WireMock-based API tests — Config-driven agent ITs for LLM, HTTP calls, PropertySetter, and complex rules
JaCoCo two-tier gates — Merged UT+IT coverage gate enforced in CI
📊 Observability & Monitoring (improved)
OpenTelemetry Distributed Tracing
Added per-task pipeline spans (
eddi.pipeline.task) withtask.id,task.type,conversation.id,agent.idattributesBackend-agnostic via OTLP protocol (Jaeger, Tempo, Datadog, Honeycomb)
Auto-instrumented: REST endpoints, Vert.x HTTP, MongoDB
Disabled by default — zero overhead in production without a collector
ConversationCoordinator Hardening
Max-size limit — Configurable
eddi.coordinator.max-active-conversations(default 10,000) with backpressure rejectionEager cleanup — Empty queues removed on drain, preventing memory leaks from abandoned conversations
CAS loop race fix —
submitInOrder/submitNextrace condition resolved with compare-and-swap loop
Metrics & Dashboard
Added 3 Micrometer gauges —
active_conversations,queue_depth,total_processedAdded pipeline task metrics —
eddi.pipeline.task.durationTimer +eddi.pipeline.task.errorsCounter (tagged bytask.id/type)Added pre-built Grafana dashboard — 14 panels across 5 rows (Coordinator, Tools, Vault, NATS, HTTP/JVM)
Added one-command monitoring stack —
docker-compose.monitoring.yml(Prometheus v3.4 + Grafana 11.6 + Jaeger 2.7)
⚡ Multi-Tenancy & Quota Enforcement (improved)
Atomic quota enforcement — Fixed TOCTOU race condition in
TenantQuotaService. Check+record merged into singlesynchronizedblock per tenantMonthly cost reset — Fixed bug where
monthlyCostUsdaccumulated indefinitely (now resets on UTC calendar month boundary)Quota ordering fix — Quota is now acquired AFTER all validation checks, preventing quota exhaustion from invalid requests
Metrics hygiene — Quota counters no longer inflate when quotas are disabled
🔄 CI/CD Pipeline (improved)
Security Scanning (6 new tools added)
Trivy image scan
OS-level CVEs in base image
Blocks Docker push
CodeQL SAST
Static analysis (security-extended)
SARIF → GitHub Security
Gitleaks
Leaked secrets in git history
Blocks build
CycloneDX SBOM
Software Bill of Materials (EU AI Act)
Artifact upload
ZAP API scan
Runtime misconfig, auth bypass
Report-only
Security headers check
Missing security headers
Warning
Build & Release Hardening
Sigstore cosign — Keyless OIDC container image signing on Docker Hub push
Red Hat preflight — Certification check on push events (not just PRs)
Failsafe timeout — 15-minute cap prevents CI hangs from Docker build failures
Unified CI pipeline — GitHub Actions (compile → test → Docker build → Trivy → smoke test → ZAP → push → sign)
🖥️ EDDI Manager (improved)
The EDDI Manager was completely rewritten in 6.0.1 (React 19 + Vite + Tailwind CSS). Version 6.0.2 focuses on stability, bug fixes, and UX polish.
6.0.2 Improvements
🔧 Studio editors fix — Normalized
eddi://prefix handling for pipeline extension types📐 Resizable panels — Side panels in Studio are now drag-resizable
📝 Snippet creation fix — Name validation (
[a-z0-9_]+) with auto-sanitization and real error messages🔄 Resilient version resolution — Resource detail pages handle undefined versions gracefully
🐛 9 bugs fixed from comprehensive codebase audit (auth headers, version staleness, URI schemes, UX)
🏗️
pkg→wf/workflowrename — All variables and IDs aligned with backend terminology🔒 Cascade save hardening — Prevented stale version context causing save failures
🧪 16 new tests — Cascade-save and resource-usage coverage
💬 Chat UI (improved)
6.0.2 Improvements
📎 Attachment upload — Added file upload support with multipart form submission
🔄 SSE stream fix — Fixed hang on
[DONE]event that left connections open🔐 Security hardening — Improved input sanitization, CSP compliance, HTTPS-only cookies
♿ Accessibility — Added ARIA labels, keyboard navigation, focus management
📖 README overhaul — Aligned with EDDI ecosystem documentation styling
🔧 Platform & Dependencies
Java
25
25
Quarkus
3.34.1
3.34.5
langchain4j
1.13.0
1.13.0
MongoDB (Docker)
6.0
7.0.14
WireMock
—
3.13.2
Jazzer (fuzz)
—
0.30.0
Testcontainers
—
1.21.4
Other Improvements
JDK 25 compatibility —
--enable-native-access=ALL-UNNAMEDfor JNAWhiteSource/Mend false positive — Removed 25 bloated HTML license files that triggered Bootstrap CVE flags; replaced with 13 clean SPDX plain-text licenses
Slack integration hardening — Improved per-agent credentials, fixed dead retry logic, enterprise-grade error handling, Jackson JSON migration, TTL caches, graceful shutdown
Group conversation safety — Added
maxTurnssafety cap preventing runaway multi-agent discussions
📚 Documentation (improved)
Architecture doc — Added sections: Multi-Agent Orchestration, MCP Integration, Persistent Memory, Agent Sync
Project Philosophy — Expanded from 7 → 9 Pillars (added Persistent Memory, Agent Portability)
Security Architecture — Added SSRF 3-layer model, vault encryption model, auth decision matrix
Monitoring Guide — Added metrics reference, tracing setup, 6 alerting rules, production checklist
Slack Integration Guide — Updated with per-agent config, troubleshooting, building custom channels
~6 MB stale docs purged — Removed legacy GitBook assets, research dumps, implemented plans
⬆️ Upgrade Notes
Breaking Changes
Production auth enforcement — EDDI now refuses to start without OIDC in production mode. Set
eddi.security.allow-unauthenticated=trueto opt outDocker Compose — MongoDB now requires authentication. Copy
.env.example→.envand set credentialsSecurity headers —
X-Frame-Options: DENYmay break iframing EDDI's UI. Configure CSP if embedding is needed
Migration
Vault salt — Fully automatic. Existing deployments continue using legacy salt; new deployments get random salt. No operator action required
API keys — Existing plaintext API keys in MongoDB continue to work. New keys created via Agent Father are auto-vaulted
Recommended Actions
Set
EDDI_VAULT_MASTER_KEYenvironment variable for production deploymentsConfigure OIDC/Keycloak for production auth
Review
.env.examplefor new Docker Compose variablesEnable OpenTelemetry tracing with
docker-compose.monitoring.ymlfor observability
Last updated
Was this helpful?