Skip to content

feat: EDDI 6.2.0 release - #605

Merged
ginccc merged 41 commits into
mainfrom
feat/v6.2.0-prep
Jul 27, 2026
Merged

feat: EDDI 6.2.0 release#605
ginccc merged 41 commits into
mainfrom
feat/v6.2.0-prep

Conversation

@ginccc

@ginccc ginccc commented Jul 23, 2026

Copy link
Copy Markdown
Member

⚠️ Behaviour changes operators should know about

Change Effect
Default member timeout 60s → 180s New task forces only. Existing ones keep their stored value — change it per task force under Settings → Protocol & Resilience. Fixes members being cut off mid-answer and recorded as SKIPPED.
readAttachment no longer gated by enableBuiltInTools or the whitelist The tool is registered whenever a conversation has stored files. That switch gates outbound, billable capabilities; reading a blob already stored under the conversation is neither, and it defaults to false on every wizard-created agent.
Attachment text extraction cap 10k → 50k chars ~12k tokens, matched to ToolResponseLimits.defaultMaxChars, the next limit in the chain. Raises per-call token cost for readAttachment; tune per tool via perToolLimits if that matters.
Invalid numeric LLM parameters no longer fail the conversation A mistyped temperature/maxTokens/timeout now logs a warning and falls back to the model default instead of throwing NumberFormatException out of every turn.
Blank-LLM-output log WARN → DEBUG Fires on documented-expected outcomes (thinking-only turn, exhausted token budget). Now carries the conversation id.
PostgreSQL driver 42.7.12 → 42.7.13 Adds the fix for CVE-2026-54291 (auth downgrade) alongside the existing CVE-2026-42198 pin.

What's in it

Release — version 6.1.2 → 6.2.0, Agent+Father-6.2.0.zip, ubi9/openjdk-25-runtime digest bump, Quarkus 3.37.3 → 3.37.4, plus patch bumps for jandex, surefire/failsafe, jacoco and the postgresql CVE pin above.

SPA entry points (the headline) — /welcome and /workforce served by RestWelcomeResource / RestWorkforceResource, with CSP inline-script handling and /index.html permit rules. 61 rebuilt Manager and Chat UI asset files ride along.

Attachments — usable for a whole conversation, not one turn. A file was inlined only on the turn it arrived and was invisible afterwards; the model would insist no file had ever been shared. Three independent causes:

  1. Attachments did not survive the conversation store. Memory is rebuilt from the store every turn and ResultSnapshot#getResult() is an untyped Object, so Jackson returns plain maps. Both stores repair only context* entries on load, so every instanceof Attachment filter matched nothing from turn two onward. Entries are now coerced through one shared reader.
  2. ReadAttachmentTool sat behind enableBuiltInTools (see table).
  3. The same map problem on the current step: a HITL resume re-enters the same step of a reloaded conversation, so AttachmentForwarder silently forwarded nothing and ContentTypeMatcher stopped matching content-type rules on resumed turns.

Plus a reminder note naming earlier files on turns that carry none, so the model knows they exist.

LLM model builders — 36 unguarded parseInt/parseDouble/parseLong sites across nine builders now read through a shared ModelParameterValues helper (see table).

Logging — SSE log-stream heartbeat, JSON event serialisation, CDI-safe injectable clock, and printf detection in BoundedLogStore widened so indexed and padded specifiers (%1$s, %03d) format instead of reaching the viewer raw.

Memory / GDPRConversationDescriptors cleaned up on permanent conversation deletion.

Groups — verification display no longer renders a JSON null as the literal word "null" (and no longer silently drops that task's verification), empty task results handled.

DeploymentDeploymentInfo equals/hashCode fix that was causing a 10-second re-deployment loop.

Chore.claude/ and waic-2026/ untracked and gitignored; both arrived via an over-broad git add in 702e2f7, the same commit whose vendored lc4jmcp sources were already removed in 4716d01 after they broke Trivy and Dependency Review.

Docs — README updates (HITL, attachments, group follow-up, error recovery, tool caching, JSON mode, tenant quotas) and changelog entries.

Testing

12,000+ tests, >90% instruction / >80% branch coverage, enforced by the build. New regression coverage at each layer of the attachment path — including a full convertConversationMemory → Jackson → convertConversationMemorySnapshot round trip, which is exactly what the original mock-based tests missed.

ginccc added 2 commits July 22, 2026 21:34
- Add welcome.html + IRestWelcomeResource for the landing page chooser
- Add workforce.html + IRestWorkforceResource for the workforce module
- Update index.html to smart-redirect (localStorage pref or /welcome)
- Permit /, /welcome/*, /workforce/* in auth policy so HTML shells
  load before keycloak-js handles auth client-side
- Add welcome.html + RestWelcomeResource for landing page chooser
- Add workforce.html + RestWorkforceResource for workforce module
- Update index.html to smart-redirect (localStorage pref or /welcome)
- Permit /, /welcome/*, /workforce/* in auth policy
- Bump version 6.1.2 → 6.2.0 across all manifests
Copilot AI review requested due to automatic review settings July 23, 2026 08:52
@ginccc
ginccc requested a review from rolandpickl as a code owner July 23, 2026 08:52
@github-actions

github-actions Bot commented Jul 23, 2026

Copy link
Copy Markdown

⚠️ Deprecation Warning: The deny-licenses option is deprecated for possible removal in the next major release. For more information, see issue 997.

Dependency Review

The following issues were found:
  • ✅ 0 vulnerable package(s)
  • ✅ 0 package(s) with incompatible licenses
  • ✅ 0 package(s) with invalid SPDX license definitions
  • ⚠️ 10 package(s) with unknown licenses.
See the Details below.

License Issues

pom.xml

PackageVersionLicenseIssue Type
io.nats:jnats2.26.0NullUnknown License
io.quarkus.platform:quarkus-bom3.37.4NullUnknown License
io.quarkus.platform:quarkus-maven-plugin3.37.4NullUnknown License
io.smallrye:jandex-maven-plugin3.6.0NullUnknown License
io.swagger.parser.v3:swagger-parser2.1.45NullUnknown License
org.apache.maven.plugins:maven-failsafe-plugin3.5.6NullUnknown License
org.apache.maven.plugins:maven-surefire-plugin3.5.6NullUnknown License
org.apache.pdfbox:pdfbox3.0.8NullUnknown License
org.jacoco:jacoco-maven-plugin0.8.15NullUnknown License
org.postgresql:postgresql42.7.13NullUnknown License
Denied Licenses: GPL-3.0, AGPL-3.0

OpenSSF Scorecard

Scorecard details
PackageVersionScoreDetails
maven/io.nats:jnats 2.26.0 🟢 5.9
Details
CheckScoreReason
Code-Review🟢 7Found 11/14 approved changesets -- score normalized to 7
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Maintained🟢 1030 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Binary-Artifacts🟢 9binaries present in source code
License🟢 10license file detected
Fuzzing⚠️ 0project is not fuzzed
Branch-Protection⚠️ -1internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
Signed-Releases⚠️ -1no releases found
Security-Policy⚠️ 0security policy file not detected
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
SAST🟢 8SAST tool is not run on all commits -- score normalized to 8
Packaging🟢 10packaging workflow detected
maven/io.quarkus.platform:quarkus-bom 3.37.4 🟢 6.1
Details
CheckScoreReason
Code-Review⚠️ 2Found 1/4 approved changesets -- score normalized to 2
Maintained🟢 1030 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Token-Permissions🟢 9detected GitHub workflow tokens with excessive permissions
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Binary-Artifacts🟢 10no binaries found in the repo
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Branch-Protection🟢 5branch protection is not maximal on development and all release branches
Security-Policy⚠️ 0security policy file not detected
Pinned-Dependencies🟢 5dependency not pinned by hash detected -- score normalized to 5
Packaging🟢 10packaging workflow detected
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
maven/io.quarkus.platform:quarkus-maven-plugin 3.37.4 🟢 6.1
Details
CheckScoreReason
Code-Review⚠️ 2Found 1/4 approved changesets -- score normalized to 2
Maintained🟢 1030 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Token-Permissions🟢 9detected GitHub workflow tokens with excessive permissions
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Binary-Artifacts🟢 10no binaries found in the repo
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Branch-Protection🟢 5branch protection is not maximal on development and all release branches
Security-Policy⚠️ 0security policy file not detected
Pinned-Dependencies🟢 5dependency not pinned by hash detected -- score normalized to 5
Packaging🟢 10packaging workflow detected
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
maven/io.smallrye:jandex-maven-plugin 3.6.0 🟢 5.2
Details
CheckScoreReason
Code-Review⚠️ 0Found 1/11 approved changesets -- score normalized to 0
Security-Policy🟢 9security policy file detected
Maintained🟢 1029 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10
Packaging⚠️ -1packaging workflow not detected
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Binary-Artifacts🟢 10no binaries found in the repo
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Branch-Protection🟢 8branch protection is not maximal on development and all release branches
Signed-Releases⚠️ -1no releases found
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
maven/io.swagger.core.v3:swagger-annotations 2.2.52 🟢 6.9
Details
CheckScoreReason
Code-Review🟢 9Found 15/16 approved changesets -- score normalized to 9
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Maintained🟢 1030 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 10
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Binary-Artifacts🟢 9binaries present in source code
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
Fuzzing🟢 10project is fuzzed
License🟢 10license file detected
Branch-Protection⚠️ -1internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
Signed-Releases⚠️ -1no releases found
Security-Policy⚠️ 0security policy file not detected
Packaging🟢 10packaging workflow detected
SAST🟢 10SAST tool is run on all commits
maven/io.swagger.parser.v3:swagger-parser 2.1.45 🟢 6.1
Details
CheckScoreReason
Maintained🟢 1029 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Code-Review🟢 7Found 7/10 approved changesets -- score normalized to 7
Binary-Artifacts🟢 10no binaries found in the repo
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Branch-Protection⚠️ -1internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
Signed-Releases⚠️ -1no releases found
Packaging🟢 10packaging workflow detected
Security-Policy⚠️ 0security policy file not detected
SAST🟢 10SAST tool is run on all commits
maven/org.apache.maven.plugins:maven-failsafe-plugin 3.5.6 🟢 5.7
Details
CheckScoreReason
Packaging⚠️ -1packaging workflow not detected
Maintained🟢 1022 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10
Security-Policy🟢 10security policy file detected
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Code-Review🟢 6Found 14/23 approved changesets -- score normalized to 6
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Binary-Artifacts🟢 10no binaries found in the repo
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Branch-Protection⚠️ -1internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
maven/org.apache.maven.plugins:maven-surefire-plugin 3.5.6 🟢 5.7
Details
CheckScoreReason
Packaging⚠️ -1packaging workflow not detected
Maintained🟢 1022 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10
Security-Policy🟢 10security policy file detected
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Code-Review🟢 6Found 14/23 approved changesets -- score normalized to 6
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Binary-Artifacts🟢 10no binaries found in the repo
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Branch-Protection⚠️ -1internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
maven/org.apache.pdfbox:pdfbox 3.0.8 UnknownUnknown
maven/org.jacoco:jacoco-maven-plugin 0.8.15 🟢 5.6
Details
CheckScoreReason
Code-Review🟢 9Found 20/21 approved changesets -- score normalized to 9
Packaging⚠️ -1packaging workflow not detected
Maintained🟢 1030 commit(s) and 14 issue activity found in the last 90 days -- score normalized to 10
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Binary-Artifacts🟢 10no binaries found in the repo
Pinned-Dependencies🟢 10all dependencies are pinned
Security-Policy⚠️ 0security policy file not detected
Fuzzing⚠️ 0project is not fuzzed
License🟢 9license file detected
Signed-Releases⚠️ 0Project has not signed or included provenance with any releases.
Branch-Protection🟢 8branch protection is not maximal on development and all release branches
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
maven/org.postgresql:postgresql 42.7.13 🟢 7.5
Details
CheckScoreReason
Code-Review🟢 5Found 16/29 approved changesets -- score normalized to 5
Maintained🟢 1030 commit(s) and 17 issue activity found in the last 90 days -- score normalized to 10
Dependency-Update-Tool🟢 10update tool detected
Packaging⚠️ -1packaging workflow not detected
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Security-Policy🟢 10security policy file detected
Token-Permissions🟢 9detected GitHub workflow tokens with excessive permissions
Pinned-Dependencies🟢 9dependency not pinned by hash detected -- score normalized to 9
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Vulnerabilities🟢 100 existing vulnerabilities detected
Signed-Releases⚠️ 11 out of the last 5 releases have a total of 1 signed artifacts.
Binary-Artifacts🟢 10no binaries found in the repo
License🟢 10license file detected
SAST🟢 10SAST tool is run on all commits
Fuzzing⚠️ 0project is not fuzzed
Branch-Protection🟢 3branch protection is not maximal on development and all release branches
CI-Tests🟢 1028 out of 28 merged PRs checked by a CI test -- score normalized to 10
Contributors🟢 10project has 35 contributing companies or organizations

Scanned Files

  • pom.xml

@coderabbitai

coderabbitai Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The change adds welcome and workforce SPA entrypoints, preference-based landing redirects, static HTML bootstraps, and endpoint tests. It also updates dependencies, runtime and deployment metadata, release inputs, agent artifacts, frontend assets, and documentation for version 6.2.0.

Changes

SPA entrypoints

Layer / File(s) Summary
Welcome and workforce REST resources
src/main/java/ai/labs/eddi/ui/*
Adds HTML-serving REST interfaces and implementations for /welcome and /workforce, including wildcard subpaths and cache directives.
SPA bootstrap and route selection
src/main/resources/META-INF/resources/*, src/main/resources/application.properties
Adds HTML entrypoints, preference-based root routing, refreshed chat assets, and static-route permissions.
SPA resource endpoint tests
src/test/java/ai/labs/eddi/ui/*
Tests response status, entities, and equivalent default and wildcard SPA responses.

6.2.0 release metadata

Layer / File(s) Summary
Project and dependency version updates
pom.xml
Updates the project version, selected dependencies, PostgreSQL override, and Maven build plugins.
Runtime and deployment metadata
src/main/resources/application.properties, src/main/docker/Dockerfile, src/main/java/..., helm/eddi/Chart.yaml, k8s/*, .github/workflows/*, src/main/resources/initial-agents/*
Updates runtime, OpenAPI, container, Helm, Kubernetes, certification workflow, and agent artifact version references.
Release documentation and examples
docs/*
Updates documentation version markers and Red Hat deployment examples to 6.2.0.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Browser
  participant index_html
  participant landing_redirect_js
  participant RestWelcomeResource
  participant welcome_html
  Browser->>index_html: load root redirect page
  index_html->>landing_redirect_js: load redirect script
  landing_redirect_js->>Browser: read landing preference
  Browser->>RestWelcomeResource: GET /welcome/{path}
  RestWelcomeResource->>welcome_html: read static HTML
  welcome_html-->>Browser: HTML with auth config and frontend assets
Loading

Possibly related PRs

  • labsai/EDDI#418: Both changes modify Quarkus SPA static-asset authorization paths.
  • labsai/EDDI#423: Both changes modify Quarkus static-assets permission configuration.
  • labsai/EDDI#508: Both changes modify the landing page and SPA authentication path configuration.

Suggested reviewers: rolandpickl, copilot

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title matches the release-oriented version bump, though it doesn’t mention the new SPA entry points.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/v6.2.0-prep

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.

Comment thread src/main/java/ai/labs/eddi/ui/IRestWelcomeResource.java Fixed
Comment thread src/main/java/ai/labs/eddi/ui/IRestWorkforceResource.java Fixed

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.

Pull request overview

This PR updates the Quarkus backend to serve two new SPA entry points (/welcome/** and /workforce/**) alongside the existing SPA routes, and bumps the project release version to 6.2.0 across build, deployment, and documentation artifacts.

Changes:

  • Added new HTML shells (welcome.html, workforce.html) and matching JAX-RS catch-all resources to serve them for all subpaths.
  • Updated root index.html to redirect based on a stored landing preference (or fall back to /welcome).
  • Bumped versions and tags to 6.2.0 across Maven, Docker, Helm, k8s, OpenAPI metadata, and docs.

Reviewed changes

Copilot reviewed 29 out of 30 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
src/main/resources/META-INF/resources/workforce.html New Workforce SPA shell HTML.
src/main/resources/META-INF/resources/welcome.html New Welcome/landing SPA shell HTML.
src/main/resources/META-INF/resources/index.html Root redirect logic updated to preference-aware redirect.
src/main/resources/META-INF/resources/chat.html Updated chat UI asset filenames (currently inconsistent with repo contents).
src/main/resources/initial-agents/available_agents.txt Updated initial agent ZIP reference to 6.2.0.
src/main/resources/initial-agents/Agent+Father-6.2.0.zip Added updated initial Agent Father bundle (binary).
src/main/resources/application.properties Version bump + auth permit list extended for new SPA routes (and root).
src/main/java/ai/labs/eddi/ui/RestWorkforceResource.java New JAX-RS resource to serve workforce.html for /workforce/**.
src/main/java/ai/labs/eddi/ui/RestWelcomeResource.java New JAX-RS resource to serve welcome.html for /welcome/**.
src/main/java/ai/labs/eddi/ui/IRestWorkforceResource.java New REST interface defining /workforce routes.
src/main/java/ai/labs/eddi/ui/IRestWelcomeResource.java New REST interface defining /welcome routes.
src/main/java/ai/labs/eddi/configs/OpenApiConfig.java OpenAPI annotation version updated to 6.2.0.
src/main/docker/Dockerfile Container label/version arg updated to 6.2.0.
pom.xml Project version bump + dependency/plugin version updates.
k8s/quickstart.yaml k8s quickstart manifest version label bump to 6.2.0.
k8s/base/eddi-deployment.yaml Base deployment version label bump to 6.2.0.
helm/eddi/Chart.yaml Helm appVersion bump to 6.2.0.
docs/security.md Doc header version updated to 6.2.0.
docs/redhat-openshift.md Examples/version references updated to 6.2.0.
docs/putting-it-all-together.md Doc header version updated to 6.2.0.
docs/properties.md Doc header version updated to 6.2.0.
docs/langchain.md Doc header version updated to 6.2.0.
docs/getting-started.md Doc header version updated to 6.2.0.
docs/developer-quickstart.md Doc header version updated to 6.2.0.
docs/conversation-memory.md Doc header version updated to 6.2.0.
docs/architecture.md Doc header version updated to 6.2.0.
docs/agent-manager-gui.md Doc header version updated to 6.2.0.
docs/agent-father-langchain-tools-guide.md EDDI version reference updated to 6.2.0.
docs/agent-father-deep-dive.md Doc header version updated to 6.2.0.
.github/workflows/redhat-certify.yml Workflow dispatch defaults/examples updated to 6.2.0.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/main/resources/META-INF/resources/chat.html
Comment thread src/main/resources/application.properties

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Nitpick comments (1)
pom.xml (1)

59-65: 🔒 Security & Privacy | 🔵 Trivial

Verify the resolved PostgreSQL driver in the packaged runtime.

The 42.7.13 override is appropriate: pgJDBC documents CVE-2026-42198 as fixed in 42.7.11, CVE-2026-54291 as fixed in 42.7.12, and 42.7.13 is released. Confirm the final dependency tree and runtime image contain 42.7.13 rather than an older mediated version. (jdbc.postgresql.org)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pom.xml` around lines 59 - 65, Verify the PostgreSQL dependency override in
the Maven resolution and packaged runtime image, ensuring the final dependency
tree and included JDBC driver both use org.postgresql:postgresql version 42.7.13
rather than an older mediated version.

Source: MCP tools

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@k8s/base/eddi-deployment.yaml`:
- Line 8: Both Kubernetes deployments expose version 6.2.0 while using the
mutable image tag labsai/eddi:6. Pin the image to labsai/eddi:6.2.0 or an
equivalent digest and keep metadata synchronized in
k8s/base/eddi-deployment.yaml lines 8-8 and 26-26 and k8s/quickstart.yaml lines
172-172 and 190-190.

In `@src/main/resources/META-INF/resources/index.html`:
- Around line 7-17: Move the redirect logic from the inline script in index.html
into a same-origin external JavaScript file and load it with a regular script
reference permitted by the existing script-src 'self' CSP. Preserve the
localStorage lookup and routing behavior for the manage, workforce, and welcome
destinations, and remove the inline implementation.

---

Nitpick comments:
In `@pom.xml`:
- Around line 59-65: Verify the PostgreSQL dependency override in the Maven
resolution and packaged runtime image, ensuring the final dependency tree and
included JDBC driver both use org.postgresql:postgresql version 42.7.13 rather
than an older mediated version.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 1095a3af-a0aa-4a51-bac6-08dd7bc9108d

📥 Commits

Reviewing files that changed from the base of the PR and between 7d92b57 and c0835c9.

⛔ Files ignored due to path filters (1)
  • src/main/resources/initial-agents/Agent+Father-6.2.0.zip is excluded by !**/*.zip
📒 Files selected for processing (29)
  • .github/workflows/redhat-certify.yml
  • docs/agent-father-deep-dive.md
  • docs/agent-father-langchain-tools-guide.md
  • docs/agent-manager-gui.md
  • docs/architecture.md
  • docs/conversation-memory.md
  • docs/developer-quickstart.md
  • docs/getting-started.md
  • docs/langchain.md
  • docs/properties.md
  • docs/putting-it-all-together.md
  • docs/redhat-openshift.md
  • docs/security.md
  • helm/eddi/Chart.yaml
  • k8s/base/eddi-deployment.yaml
  • k8s/quickstart.yaml
  • pom.xml
  • src/main/docker/Dockerfile
  • src/main/java/ai/labs/eddi/configs/OpenApiConfig.java
  • src/main/java/ai/labs/eddi/ui/IRestWelcomeResource.java
  • src/main/java/ai/labs/eddi/ui/IRestWorkforceResource.java
  • src/main/java/ai/labs/eddi/ui/RestWelcomeResource.java
  • src/main/java/ai/labs/eddi/ui/RestWorkforceResource.java
  • src/main/resources/META-INF/resources/chat.html
  • src/main/resources/META-INF/resources/index.html
  • src/main/resources/META-INF/resources/welcome.html
  • src/main/resources/META-INF/resources/workforce.html
  • src/main/resources/application.properties
  • src/main/resources/initial-agents/available_agents.txt

Comment thread k8s/base/eddi-deployment.yaml
Comment thread src/main/resources/META-INF/resources/index.html Outdated
- Move index.html redirect logic to external landing-redirect.js
  (script-src 'self' blocks inline scripts, so localStorage pref
  was silently ignored and meta-refresh always fired)
- Remove unused @PathParam from welcome/workforce interfaces
  and implementations (path needed for routing only, not consumed)
Copilot AI review requested due to automatic review settings July 23, 2026 09:52

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.

Pull request overview

Copilot reviewed 30 out of 31 changed files in this pull request and generated 3 comments.

Comments suppressed due to low confidence (1)

src/main/resources/META-INF/resources/chat.html:40

  • chat.html now references hashed JS/CSS bundles (chat-ui.p4wYUapg.js, chat-ui.D213XXZR.css) that are not present under src/main/resources/META-INF/resources/scripts/. This will break the /chat UI at runtime with 404s unless the corresponding assets are added.
  <script type="module" crossorigin src="/scripts/js/chat-ui.p4wYUapg.js"></script>
  <link rel="stylesheet" crossorigin href="/scripts/css/chat-ui.D213XXZR.css">

Comment thread src/main/resources/application.properties Outdated
Comment thread src/main/java/ai/labs/eddi/ui/RestWelcomeResource.java
Comment thread src/main/java/ai/labs/eddi/ui/RestWorkforceResource.java
- Add /index.html to auth permit list (proxies/bookmarks)
- Add RestWelcomeResourceTest (3 tests)
- Add RestWorkforceResourceTest (3 tests)
Copilot AI review requested due to automatic review settings July 23, 2026 10:52

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/test/java/ai/labs/eddi/ui/RestWelcomeResourceTest.java`:
- Around line 29-35: Strengthen RestWelcomeResourceTest.java sites 29-35, 41-47,
and 53-60, and RestWorkforceResourceTest.java sites 29-35, 41-47, and 53-60:
remove broad exception catches and status-only assertions; use a test double
overriding viewHtml() to verify viewDefault() delegates, assert each response
contains a non-null readable HTML entity/stream, and compare returned shell
content rather than only HTTP status.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: cad84b9b-5e01-4bcb-890c-ed558b959c52

📥 Commits

Reviewing files that changed from the base of the PR and between 9f212a5 and bf8860e.

📒 Files selected for processing (3)
  • src/main/resources/application.properties
  • src/test/java/ai/labs/eddi/ui/RestWelcomeResourceTest.java
  • src/test/java/ai/labs/eddi/ui/RestWorkforceResourceTest.java
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/main/resources/application.properties

Comment thread src/test/java/ai/labs/eddi/ui/RestWelcomeResourceTest.java Outdated

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.

Pull request overview

Copilot reviewed 32 out of 33 changed files in this pull request and generated 4 comments.

Comments suppressed due to low confidence (2)

src/test/java/ai/labs/eddi/ui/RestWorkforceResourceTest.java:56

  • This test currently swallows exceptions and only compares HTTP statuses. Adding entity assertions makes the test actually detect missing workforce.html (null entity) rather than always passing.
    src/test/java/ai/labs/eddi/ui/RestWelcomeResourceTest.java:56
  • This test currently swallows exceptions and only compares HTTP statuses. Adding entity assertions makes the test actually detect missing welcome.html (null entity) rather than always passing.

Comment thread src/main/java/ai/labs/eddi/ui/RestWorkforceResource.java
Comment thread src/main/java/ai/labs/eddi/ui/RestWelcomeResource.java
Comment thread src/test/java/ai/labs/eddi/ui/RestWorkforceResourceTest.java
Comment thread src/test/java/ai/labs/eddi/ui/RestWelcomeResourceTest.java
- Add null-guard in RestWelcomeResource/RestWorkforceResource:
  return 500 if HTML shell missing from classpath
- Rewrite tests: remove exception swallowing, assert entity is
  non-null InputStream, verify delegation between viewDefault/viewHtml
Copilot AI review requested due to automatic review settings July 23, 2026 11:03

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.

Pull request overview

Copilot reviewed 32 out of 33 changed files in this pull request and generated no new comments.

Comments suppressed due to low confidence (1)

src/main/resources/META-INF/resources/chat.html:40

  • The updated chat UI asset filenames referenced here don’t exist in the repository (only the previous chat-ui.* files are present under src/main/resources/META-INF/resources/scripts/). This will break /chat at runtime with 404s for the JS/CSS bundles.
  <script type="module" crossorigin src="/scripts/js/chat-ui.p4wYUapg.js"></script>
  <link rel="stylesheet" crossorigin href="/scripts/css/chat-ui.D213XXZR.css">

RuntimeUtilities.getResourceAsStream uses a Quarkus classloader
that is unavailable in plain JUnit context. Tests now verify:
- viewHtml returns 500 when HTML is not resolvable (null-guard)
- viewDefault delegates to viewHtml (consistent status + entity)
- No exception swallowing
Copilot AI review requested due to automatic review settings July 23, 2026 11:12

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.

Pull request overview

Copilot reviewed 32 out of 33 changed files in this pull request and generated 4 comments.

Comments suppressed due to low confidence (4)

src/main/resources/META-INF/resources/chat.html:40

  • chat.html now references hashed chat-ui assets that are not present in META-INF/resources (the repo currently contains chat-ui.DkbQxm6F.js and chat-ui.CN68VwV9.css). This will break the /chat UI at runtime with 404s.
  <script type="module" crossorigin src="/scripts/js/chat-ui.p4wYUapg.js"></script>
  <link rel="stylesheet" crossorigin href="/scripts/css/chat-ui.D213XXZR.css">

src/test/java/ai/labs/eddi/ui/RestWelcomeResourceTest.java:57

  • Comparing Response entities for equality is not reliable here: when the HTML is resolvable, each call will typically produce a distinct InputStream instance. This test will fail once viewHtml returns 200. Prefer asserting delegation via status code only (or asserting both entities are non-null).
    src/test/java/ai/labs/eddi/ui/RestWorkforceResourceTest.java:57
  • Comparing Response entities for equality is not reliable here: when the HTML is resolvable, each call will typically produce a distinct InputStream instance. This test will fail once viewHtml returns 200. Prefer asserting delegation via status code only (or asserting both entities are non-null).
    src/main/resources/application.properties:248
  • Both the permit-list and the authenticated catch-all include the exact path "/". Depending on Quarkus' permission tie-breaking, this can make the root (/) unexpectedly require auth (breaking the new landing redirect) or unexpectedly be permitted. To avoid ambiguity, keep "/" only in the static-assets permission and let authenticated cover everything else via "/*".
quarkus.http.auth.permission.static-assets.paths=\
  /,/index.html,/manage,/manage/*,/chat,/chat/*,/welcome,/welcome/*,/workforce,/workforce/*,\
  /scripts/*,/fonts/*,/css/*,/js/*,/img/*,/assets/*,\
  /eddi-icon.svg,/eddi-icon.ico,/logo_eddi.png,/favicon.ico,/robots.txt,/mockServiceWorker.js

Comment thread src/main/java/ai/labs/eddi/ui/RestWelcomeResource.java
Comment thread src/main/java/ai/labs/eddi/ui/RestWorkforceResource.java
Comment thread src/test/java/ai/labs/eddi/ui/RestWelcomeResourceTest.java
Comment thread src/test/java/ai/labs/eddi/ui/RestWorkforceResourceTest.java
ClassLoader.getResourceAsStream expects paths without a leading '/'.
The leading slash caused null returns in standard JVM (plain JUnit).
With slashless paths, src/main/resources/META-INF/resources/*.html
are now resolvable from the test classpath, so tests assert 200 +
non-null InputStream entity instead of baking in a 500 failure mode.
Copilot AI review requested due to automatic review settings July 23, 2026 13:11

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.

Pull request overview

Copilot reviewed 120 out of 150 changed files in this pull request and generated 3 comments.

Comments suppressed due to low confidence (1)

pom.xml:9

  • The PR description focuses on new SPA entry points + version bump, but this PR also includes substantial backend behavior changes (attachments recall behavior, LLM builder parameter parsing/defaults, SSE log streaming heartbeat, GDPR deletion semantics, etc.). Please either expand the PR description to cover these additional changes (and their motivation/risk), or split them into separate PRs to keep review scope clear.
    <groupId>ai.labs</groupId>
    <artifactId>eddi</artifactId>
    <version>6.2.0</version>
    <properties>

The reflection lookup this test used could never succeed: AnthropicChatModel
has no 'maxTokens' field. The builder's maxTokens is stored as
defaultRequestParameters.maxOutputTokens, so getDeclaredField("maxTokens")
always threw NoSuchFieldException and the assertion inside the try was never
reached. The original catch swallowed it, so the test has verified nothing for
as long as it has existed; turning that catch into a fail() surfaced the truth
and turned CI red.

Now read via model.defaultRequestParameters().maxOutputTokens() — public API,
no reflection, nothing to drift on the next upgrade. Confirmed against the
pinned langchain4j 1.18.0 sources, where the builder maps maxTokens to
maxOutputTokens and otherwise falls back to 1024 output tokens: exactly the
footgun DEFAULT_MAX_TOKENS exists to avoid for extended-thinking models, and
what this test is meant to protect.

Also drops the static imports the previous sweep added to builders that do not
use all three helpers.
Copilot AI review requested due to automatic review settings July 27, 2026 10:10

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.

Pull request overview

Copilot reviewed 120 out of 150 changed files in this pull request and generated 3 comments.

Comments suppressed due to low confidence (3)

src/main/java/ai/labs/eddi/engine/internal/GroupConversationService.java:2171

  • If feedback exists but is null, String.valueOf(...) becomes "null" and passes the isBlank() check, so "null" is appended to the transcript. Guard against null values explicitly.
                    String feedback = map.containsKey("feedback") ? String.valueOf(map.get("feedback")) : "";

waic-2026/draft-reply-email.txt:5

  • This PR is described as adding new SPA entry points and a version bump, but it also adds WAIC 2026 outreach/materials under waic-2026/. That looks unrelated and will make release PRs harder to review/audit; consider moving these files to a separate PR or repository.
    .claude/workflows/feature-pipeline.js:12
  • This PR is described as a backend/UI entry-point change and version bump, but it also introduces a new Claude workflow (.claude/workflows/feature-pipeline.js). If this is intended, it should be called out explicitly; otherwise it should likely be moved to a separate PR to keep the release change set focused.
export const meta = {
  name: 'feature-pipeline',
  description: 'Explore -> plan/decompose -> parallel worktree implementers -> merge -> high-effort review',
  whenToUse: 'Use for a substantial coding task that can be split into independent workstreams. Runs three explorers, a planner that decomposes the task, one implementer per workstream in its own git worktree, a merge step that combines the branches, and a final high-effort review. Does NOT open a PR — review the result and push/PR yourself.',
  phases: [
    { title: 'Explore' },
    { title: 'Plan' },
    { title: 'Implement' },
    { title: 'Merge' },
    { title: 'Review' },
  ],
}

var sb = new StringBuilder("## Task Verification Results\n\n");
for (Object item : items) {
if (item instanceof Map<?, ?> map) {
String subject = map.containsKey("subject") ? String.valueOf(map.get("subject")) : "Unknown Task";
Comment on lines +701 to +704
} else {
LOGGER.warnf("LLM response was null or blank for task '%s' (type=%s) — skipping output",
task.getId(), task.getType());
}

Agent behavior is defined in versioned JSON configurations, enabling rapid deployment and updates without recompilation. EDDI supports 12 LLM providers, implements open standards (MCP, A2A, OpenAPI, OAuth 2.0), and offers built-in compliance for GDPR, HIPAA, EU AI Act, and international privacy regulations.

Key capabilities include multi-agent group conversations with six debate styles, smart model cascading for cost optimization, enterprise security with envelope-encrypted secrets vault, and cloud-native deployment on Docker, Kubernetes, and OpenShift. With 9,000+ tests and over 90% code coverage, EDDI is the enterprise-grade bridge between AI innovation and production governance.
containsKey is true for an explicitly null JSON value, and String.valueOf then
produces the four-character string "null". Both verification paths read the
LLM's deserialized output that way, so "subject": null did not fall back:

- formatVerificationForDisplay showed users a task named "null" instead of
  "Unknown Task", and "null" as its feedback instead of blank.
- tryParseVerificationJson was worse than cosmetic: the "null" string is not
  null, so it passed the subject != null guard and went on to a task-name match
  that can never succeed — silently dropping the verification for that task
  rather than skipping the malformed entry.

Both now test the value via a small stringOrNull helper. The adjacent 'passed'
read is left alone: it already handles a null value without crashing or
stringifying, and changing whether that counts as a failed task is a semantic
decision rather than this cleanup.

Also corrects the test-count claims. AGENTS.md said 11,000+ and the WAIC
solution description said 9,000+; the suite currently runs 12,081 tests, so
both are now 12,000+.
Copilot AI review requested due to automatic review settings July 27, 2026 11:00

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.

Pull request overview

Copilot reviewed 120 out of 150 changed files in this pull request and generated 2 comments.

Comment on lines +352 to +359
// Check if pattern contains printf format specifiers (%s, %d, etc.)
if (msg.contains("%s") || msg.contains("%d") || msg.contains("%f") || msg.contains("%n") || msg.contains("%x")) {
try {
return String.format(msg, params);
} catch (Exception _) {
// ignore and try MessageFormat
}
}
Comment thread docs/changelog.md
Comment on lines +8 to +12
## 🔒 fix(ci): remove accidentally-committed langchain4j-mcp decompiled sources (2026-07-27)

**Repo:** EDDI (`feat/v6.2.0-prep`)

Both the **Dependency Review** and **Trivy Filesystem Scan** CI checks were failing on this branch with 3 HIGH-severity Jackson CVEs (GHSA-r7wm-3cxj-wff9, CVE-2026-54512, CVE-2026-54513).
BoundedLogStore enumerated printf specifiers as "%s"/"%d"/"%f"/"%n"/"%x", which
matches no indexed, padded or grouped form: %1$s, %2$d, %03d, %,d, %5.2f. Those
patterns then fell through to MessageFormat, which does NOT throw on them —
with no {0} placeholders it returns the pattern unchanged, so the fallback
String.format below was never reached and the raw "%1$s" is what reached the
log viewer.

Any '%' now attempts printf and lets String.format decide, since it throws on a
malformed pattern and we fall through. A MessageFormat pattern containing a
literal percent is unaffected: "progress 50% for {0}" is rejected by
String.format ("% f") and falls through as before. Both paths are covered by
tests that fail against the old condition.

LlmTask: the blank-response log drops from WARN to DEBUG. It fires on an
outcome the surrounding comment documents as expected — a thinking-only turn or
an exhausted token budget — so at WARN it recurred in healthy operation while
naming only the task id and type, which is not enough to act on. It now carries
the conversation id, so turning debug on to chase "the agent didn't answer"
actually identifies which conversation.

AgentOrchestrator: the readAttachment gate counts only blob-backed files on the
current turn, matching what it already did for earlier turns. The tool can only
serve what the store holds, and an inline or URL-only attachment is inlined by
AttachmentForwarder on that same turn — offering a tool whose listAttachments
would report nothing only contradicts the document in the same message.

Also updates the stale test-count figure in the 6.2 article draft.
Copilot AI review requested due to automatic review settings July 27, 2026 11:34

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.

Pull request overview

Copilot reviewed 121 out of 151 changed files in this pull request and generated no new comments.

Comments suppressed due to low confidence (1)

src/main/java/ai/labs/eddi/engine/runtime/BoundedLogStore.java:372

  • MessageFormat.format() does not throw when the message is actually a printf-style pattern without any {0} placeholders (it just returns the original pattern). In that case this code returns early and never reaches the String.format fallback, so raw patterns like %1$s can still leak to the log viewer when the first String.format attempt was skipped/failed.

Both arrived by accident in 702e2f7 ("fix: serialize SSE log events as
JSON"), a commit whose stated change is a few dozen lines but which carried
147 files and ~14.7k lines from whatever was untracked in the working tree.
The other passenger in that commit, the vendored lc4jmcp sources, was already
removed in 4716d01 once it broke the Trivy and Dependency Review scans;
these two broke nothing, so they stayed.

- .claude/ is Claude Code tooling for one machine, referenced by nothing in
  the build. It sits alongside the existing .gemini/ ignore rule.
- waic-2026/ is showcase material — logos, screenshots, a pptx and draft copy.
  Not part of the product and not referenced anywhere.

Removed with --cached, so both directories stay on disk; only the tracking
goes. Ignoring the directories stops the next over-broad `git add` from
re-adding them.
Copilot AI review requested due to automatic review settings July 27, 2026 11:45

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.

Pull request overview

Copilot reviewed 117 out of 137 changed files in this pull request and generated 2 comments.

// first-time visitors go to the welcome chooser.
(function () {
var pref = null;
try { pref = localStorage.getItem('eddi-landing-preference'); } catch(e) {}
Comment on lines +695 to +700
// Only add to conversation output if there is actual text.
// Null/blank responses (e.g. from token budget exhaustion or
// thinking-only turns) should not produce empty message bubbles.
if (producesRenderableOutput(responseContent)) {
var outputItem = new TextOutputItem(responseContent, 0);
currentStep.addConversationOutputList(MEMORY_OUTPUT_IDENTIFIER, List.of(outputItem));
Reading localStorage throws in private mode, with site data blocked, or in a
sandboxed iframe. There is nothing to recover in any of those cases — the
visitor just has no stored preference and falls through to the welcome chooser
— but a bare empty catch does not say so.
Copilot AI review requested due to automatic review settings July 27, 2026 12:01
@ginccc ginccc changed the title feat: EDDI 6.2.0 — /welcome + /workforce SPA entry points feat: EDDI 6.2.0 release Jul 27, 2026

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.

Pull request overview

Copilot reviewed 117 out of 137 changed files in this pull request and generated 2 comments.

Two gaps in the previous commit, both found in review.

The conversion matched Integer.parseInt / Double.parseDouble / Long.parseLong,
so Float.parseFloat was invisible to it. Two temperature sites still threw on
a mistyped value: JlamaLanguageModelBuilder and VertexGeminiLanguageModelBuilder
— the latter also contradicting the earlier claim that Vertex had no numeric
parses. Both now read through applyDouble and narrow to float at the call site;
a dedicated float helper would buy nothing, since every value a float accepts a
double accepts too. A grep for any remaining throwing parse over the parameters
map across the builder package now comes back empty.

Blank values are absent rather than invalid. isNullOrEmpty only tests
isEmpty(), so a parameter left as " " reached the parser and was reported as
"not a valid integer" — a warning about a value nobody set. rawValue now trims
and treats the result as absent when empty, which also lets each parser drop
its own trim. Padded-but-valid values such as "  8192  " still parse.

Boolean.parseBoolean sites are deliberately untouched: they never throw.
Copilot AI review requested due to automatic review settings July 27, 2026 12:17

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.

Pull request overview

Copilot reviewed 118 out of 138 changed files in this pull request and generated no new comments.

@ginccc
ginccc merged commit f140f14 into main Jul 27, 2026
23 of 24 checks passed
@ginccc
ginccc deleted the feat/v6.2.0-prep branch July 27, 2026 13:14
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.

3 participants