From eda39e7a2819a837e20e0a8a9a3dadab32c64d57 Mon Sep 17 00:00:00 2001 From: Marcello Muscara Date: Mon, 9 Nov 2026 18:52:22 +0100 Subject: [PATCH] Release 0.5.8: suggestion warm-up, stop ends the model call again, Node 26 Bump the version to 0.5.8 and cut its CHANGELOG section from Unreleased. --- CHANGELOG.md | 10 ++++++++-- backend/build.gradle.kts | 2 +- .../codeministry/leadgen/config/ConfigProperties.java | 2 +- backend/src/main/resources/application.yaml | 6 +++--- .../codeministry/leadgen/web/StatusControllerTest.java | 4 ++-- frontend/package.json | 2 +- frontend/src/app/app.spec.ts | 4 ++-- 7 files changed, 18 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5937985..a7ea8a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,8 +9,13 @@ may change in any release. See the status note in the README. ## [Unreleased] +## [0.5.8] — 2026-11-09 + The chat's suggestion warm-up stops spending the chat's day on a chat nobody opens, recovers from a failed or -unreachable model within minutes, and the pipeline no longer imports the chat. No migration, and no value to set. +unreachable model within minutes, and the pipeline no longer imports the chat. A stopped chat turn ends its model call +again on the openai-java Spring AI brings, so nothing is held back any more. The frontend builds on Node 26 with +Angular 22.2, and on a phone the toasts stack one high. No migration, and no value to set: the two new +`leadgen.chat.suggestion-*` durations have defaults. ### Changed @@ -1851,7 +1856,8 @@ Found while building the demo, all of them in paths only a container exercises: left six. - The shortlist card printed the description's Markdown syntax in its teaser. -[Unreleased]: https://github.com/codeministry/leadgen/compare/v0.5.7...HEAD +[Unreleased]: https://github.com/codeministry/leadgen/compare/v0.5.8...HEAD +[0.5.8]: https://github.com/codeministry/leadgen/releases/tag/v0.5.8 [0.5.7]: https://github.com/codeministry/leadgen/releases/tag/v0.5.7 [0.5.6]: https://github.com/codeministry/leadgen/releases/tag/v0.5.6 [0.5.5]: https://github.com/codeministry/leadgen/releases/tag/v0.5.5 diff --git a/backend/build.gradle.kts b/backend/build.gradle.kts index 4d00c45..59a1cba 100644 --- a/backend/build.gradle.kts +++ b/backend/build.gradle.kts @@ -14,7 +14,7 @@ plugins { } group = "de.codeministry" -version = "0.5.7" +version = "0.5.8" /* * Java 25 through the toolchain rather than the ambient JDK: Gradle runs on diff --git a/backend/src/main/java/de/codeministry/leadgen/config/ConfigProperties.java b/backend/src/main/java/de/codeministry/leadgen/config/ConfigProperties.java index a277d82..045898a 100644 --- a/backend/src/main/java/de/codeministry/leadgen/config/ConfigProperties.java +++ b/backend/src/main/java/de/codeministry/leadgen/config/ConfigProperties.java @@ -57,7 +57,7 @@ public record ConfigProperties( // One home per default, read by the bound constructor and the hand-built one alike, so // the two cannot drift. `@DefaultValue` takes a compile-time constant, hence strings. - private static final String DEFAULT_VERSION = "0.5.7"; + private static final String DEFAULT_VERSION = "0.5.8"; private static final String DEFAULT_CONFIG_POLL_INTERVAL = "PT2S"; private static final String DEFAULT_SCORE_BATCH_POLL_INTERVAL = "PT5M"; private static final String DEFAULT_INGEST_CRON = "-"; diff --git a/backend/src/main/resources/application.yaml b/backend/src/main/resources/application.yaml index 3480181..d372aec 100644 --- a/backend/src/main/resources/application.yaml +++ b/backend/src/main/resources/application.yaml @@ -25,7 +25,7 @@ spring: name: leadgen # What a client reads in the `initialize` result: the running build, from the one place # the build names itself (leadgen.version below). - version: ${LEADGEN_VERSION:0.5.7} + version: ${LEADGEN_VERSION:0.5.8} # STREAMABLE and not SSE: Spring AI 2.0 deprecates SSE, and Streamable HTTP is what # current MCP clients negotiate. protocol: STREAMABLE @@ -43,10 +43,10 @@ spring: # not have to exist — without it the defaults apply. leadgen: # What the header shows, and the only place the running build names itself. Without this - # line the default on ConfigProperties applies and every image reports 0.5.7 — + # line the default on ConfigProperties applies and every image reports 0.5.8 — # the Gradle version is not injected into the jar, and the Dockerfile copies libs/*.jar # by glob, so nothing else carries it either. The deploy sets it from the image tag. - version: ${LEADGEN_VERSION:0.5.7} + version: ${LEADGEN_VERSION:0.5.8} config-dir: ${LEADGEN_CONFIG_DIR:config} security: # Asserts that something outside this process decides who reaches the port, which is diff --git a/backend/src/test/java/de/codeministry/leadgen/web/StatusControllerTest.java b/backend/src/test/java/de/codeministry/leadgen/web/StatusControllerTest.java index ba667c8..53a5373 100644 --- a/backend/src/test/java/de/codeministry/leadgen/web/StatusControllerTest.java +++ b/backend/src/test/java/de/codeministry/leadgen/web/StatusControllerTest.java @@ -19,7 +19,7 @@ // into the `spring-boot-webmvc-test` module. The old import compiles against // Boot 3 and simply does not exist here. @WebMvcTest(StatusController.class) -@TestPropertySource(properties = {"spring.application.name=lead-generation", "leadgen.version=0.5.7"}) +@TestPropertySource(properties = {"spring.application.name=lead-generation", "leadgen.version=0.5.8"}) class StatusControllerTest { @Autowired @@ -30,6 +30,6 @@ void returnsApplicationNameAndVersion() { Assertions.assertThat(mvc.get().uri("/api/v1/status")) .hasStatusOk() .bodyJson() - .isEqualTo("{\"application\":\"lead-generation\",\"version\":\"0.5.7\"}"); + .isEqualTo("{\"application\":\"lead-generation\",\"version\":\"0.5.8\"}"); } } diff --git a/frontend/package.json b/frontend/package.json index 1967ae5..f6d75ac 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "frontend", - "version": "0.5.7", + "version": "0.5.8", "scripts": { "start": "ng serve", "build": "ng build", diff --git a/frontend/src/app/app.spec.ts b/frontend/src/app/app.spec.ts index 91bfe27..bbdcd24 100644 --- a/frontend/src/app/app.spec.ts +++ b/frontend/src/app/app.spec.ts @@ -21,7 +21,7 @@ describe('App', () => { const fixture = TestBed.createComponent(App); fixture.detectChanges(); - httpMock.expectOne('/api/v1/status').flush({application: 'lead-generation', version: '0.5.7'}); + httpMock.expectOne('/api/v1/status').flush({application: 'lead-generation', version: '0.5.8'}); // Run ingest and the model choice left the header for the workflow screen (operator, // 2026-09-27), so the shell does not create the scoring-model store: the model list is // not asked for here. The ingest store is created at the root (fix 2F-5), so its @@ -34,7 +34,7 @@ describe('App', () => { await fixture.whenStable(); fixture.detectChanges(); - expect(fixture.nativeElement.textContent).toContain('lead-generation 0.5.7'); + expect(fixture.nativeElement.textContent).toContain('lead-generation 0.5.8'); httpMock.verify(); });