From 022908157031068af9d6134e4c749ef987a40d98 Mon Sep 17 00:00:00 2001 From: mhoennig Date: Sun, 30 Aug 2026 11:19:42 +0200 Subject: [PATCH] Release v0.9.21: the watcher's reach into origin is visible Also fixes the log-capture test added with step 19: the test JVM logs at WARN, so the INFO line reporting the recovered fetch never reached the appender. The helper now lowers the level explicitly. Co-Authored-By: Claude Opus 5 --- build.gradle.kts | 2 +- src/main/resources/templates/releases.html | 14 ++++++++++++++ .../de/hoennig/gittally/watcher/WatcherTest.kt | 8 +++++++- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 97a1e39..1d2cbf6 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -12,7 +12,7 @@ group = "de.hoennig" // bump at least the patch version for every deployment — and only then, not per commit — // so the UI footer (BuildProperties), --version and the release notes identify what is // actually running; a deployment bundles whatever was committed since the last one -version = "0.9.20" +version = "0.9.21" java { toolchain { diff --git a/src/main/resources/templates/releases.html b/src/main/resources/templates/releases.html index dc27171..84e5a80 100644 --- a/src/main/resources/templates/releases.html +++ b/src/main/resources/templates/releases.html @@ -7,6 +7,20 @@
+

v0.9.21 — 2026-08-30

+
    +
  • An origin the watcher cannot reach is now visible in the web UI: a banner above the + table says that the list below is not updating, since when, and why. Until now the + page kept showing its last known state, calm and plausible, while GitTally had not + been able to fetch for an hour — the failure lived in the log alone. The banner is + deliberately separate from the live indicator: that one says whether your browser + reaches the server, this one whether the server reaches origin.
  • +
  • A lasting fetch failure is logged when its message changes instead of on every poll + cycle, and the recovery is logged once. One wrong token used to write several hundred + identical warnings an hour. An invalid atTimes slot is likewise reported + once per slot.
  • +
+

v0.9.20 — 2026-08-29

  • A build definition is now split in two: a trigger block says when the diff --git a/src/test/kotlin/de/hoennig/gittally/watcher/WatcherTest.kt b/src/test/kotlin/de/hoennig/gittally/watcher/WatcherTest.kt index 1251573..f30e474 100644 --- a/src/test/kotlin/de/hoennig/gittally/watcher/WatcherTest.kt +++ b/src/test/kotlin/de/hoennig/gittally/watcher/WatcherTest.kt @@ -1,5 +1,6 @@ package de.hoennig.gittally.watcher +import ch.qos.logback.classic.Level import ch.qos.logback.classic.Logger import ch.qos.logback.classic.spi.ILoggingEvent import ch.qos.logback.core.read.ListAppender @@ -773,11 +774,16 @@ class WatcherTest : FunSpec() { } } -/** Collects this spec's [Watcher] log messages; the returned lambda reads them at any point. */ +/** + * Collects this spec's [Watcher] log messages; the returned lambda reads them at any point. + * The level is lowered explicitly — the test JVM logs at WARN, which would drop the very + * INFO line that says the fetch recovered. + */ private fun captureWatcherLog(): () -> List { val logger = LoggerFactory.getLogger(Watcher::class.java) as Logger val appender = ListAppender() appender.start() + logger.level = Level.INFO logger.addAppender(appender) return { appender.list.map { it.formattedMessage } } }