From 7105c3eccd265c47b2da5c6f9cff49bebbea85cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hern=C3=A2ni=20Marques?= Date: Sun, 19 Jul 2026 01:44:16 +0200 Subject: [PATCH] release 1.10.9: stats policy not false first-error (www.stats-01) --- VERSION | 2 +- VERSIONS.md | 1 + check_urls.sh | 5 +++-- site-gen/console_to_html.py | 5 ++++- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/VERSION b/VERSION index 3cc3669..b0dd753 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.10.8 +1.10.9 diff --git a/VERSIONS.md b/VERSIONS.md index 0b201d5..c62e36d 100644 --- a/VERSIONS.md +++ b/VERSIONS.md @@ -17,6 +17,7 @@ Git tags: `vMAJOR.FEATURE.FIX` (e.g. `v1.8.0`). File `VERSION` omits the `v` pre | Tag | Date (UTC) | Notes | |-----|------------|--------| +| **v1.10.9** | 2026-07-19 | **Bugfix:** stats policy INFO no longer says bare “ERROR” (false #first-error on www.stats-01); extract_errors only from `┌ ERROR` badges. | | **v1.10.8** | 2026-07-19 | **Docs/clarity:** only three public mon URL families (`/monitoring`, `/taler-monitoring-surface`, `/taler-monitoring-aptdeploy`) each bare+slash(+_err); suite name ≠ path; no `/taler-monitoring` page. | | **v1.10.7** | 2026-07-19 | **Bugfix:** stop always-rsync of **stale suite-overlay** over Forgejo tip (broke stage sticky / new site-gen). Overlay only when suite missing phases. | | **v1.10.6** | 2026-07-19 | **Fix:** stage mon HTML quality — suite update out of public log; filter git noise; stage-specific sticky (not GOA); `CHECK_BANK=0` / `MERCHANT_REQUIRED` for mytops stage scope. | diff --git a/check_urls.sh b/check_urls.sh index c9df684..aa2522e 100755 --- a/check_urls.sh +++ b/check_urls.sh @@ -259,7 +259,7 @@ set_group perf section "www · performance · public HTTPS latency (outside-in)" # Latency thresholds (ms), outside-in from this runner. -# ≥ PERF_WARN_MS → WARN. ≥ PERF_FAIL_MS → ERROR (suite fails). +# ≥ PERF_WARN_MS → WARN. ≥ PERF_FAIL_MS → suite fail (hard). PERF_WARN_MS="${PERF_WARN_MS:-8000}" PERF_FAIL_MS="${PERF_FAIL_MS:-20000}" PERF_TSV="$tmp/perf.tsv" @@ -580,7 +580,8 @@ PY if [ "${CHECK_LANDING:-1}" = "1" ] || [ "${LOCAL_STACK:-0}" = "1" ]; then set_group stats section "www · landing stats.json (freshness + display fields · outside-in)" - info "stats policy" "STALE≥${STATS_STALE_SECS}s WARN · FAIL≥${STATS_FAIL_SECS}s ERROR (0=disable fail) · need generated_at_unix" + # Avoid the bare word ERROR in INFO text (older HTML converters treated it as a check failure / first-error). + info "stats policy" "STALE≥${STATS_STALE_SECS}s→WARN · FAIL≥${STATS_FAIL_SECS}s→suite-fail (0=off) · need generated_at_unix" check_landing_stats_json "bank" "$BANK_PUBLIC" || true check_landing_stats_json "exchange" "$EXCHANGE_PUBLIC" || true check_landing_stats_json "merchant" "$MERCHANT_PUBLIC" || true diff --git a/site-gen/console_to_html.py b/site-gen/console_to_html.py index 6606871..ba936ca 100755 --- a/site-gen/console_to_html.py +++ b/site-gen/console_to_html.py @@ -369,13 +369,16 @@ def extract_errors(lines: list[str]) -> list[str]: errs.append(body) elif "ERROR" in ln.upper() and ln.strip() and not is_run_timeout_text(ln): errs.append(ln.strip()) - if re.search(r"\bERROR\b", ln, re.I) and "--- ERRORS" not in ln: + # Only real check badges (not INFO text mentioning thresholds like "… ERROR (0=disable)") + if re.search(r"┌\s*ERROR\b|\[\s*ERROR\b", ln, re.I) and "--- ERRORS" not in ln: if is_run_timeout_text(ln): if "run.timeout-01" in ln.lower() or "RUN_TIMEOUT exceeded" in ln: timeout_detail = re.sub(r"\s+", " ", strip_ansi(ln)).strip() continue if is_summary_error_line(ln): continue + if classify(ln) not in ("error", "blocker"): + continue body = re.sub(r"^.*\bERROR\b\s*\]?\s*", "", ln, flags=re.I).strip(" ·") if body and body not in errs and "failed — see" not in body.lower(): if re.search(