diff --git a/VERSION b/VERSION index 81c871d..4dae298 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.10.0 +1.10.1 diff --git a/VERSIONS.md b/VERSIONS.md index 35fa01e..e7946f4 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.1** | 2026-07-19 | **Bugfix:** HTML converter must not treat teed `wrote … (errors=N)` lines as ERROR (false sticky red after clean host-agent runs). | | **v1.10.0** | 2026-07-19 | **Feature:** aptdeploy **container overview board** — inventory + per-pod matrix (state, merchant, httpd, ldd, OK/ERROR) in log and HTML sticky/top (`#container-overview`). | | **v1.9.4** | 2026-07-19 | **Fix:** restore **taler-monitoring-aptdeploy(+_err)** as first-class GOA mon page (catalog + monpages path allow + surface docs). Mail/mattermost stay folded into surface. | | **v1.9.3** | 2026-07-19 | **Bugfix (suite):** monpages merchant **code 21** always ERROR (bare no longer soft-WARN); apply hints use absolute `/home/hernani/koopa-caddy/…`; ship `host-agent/apply-monitoring-live.sh` (smoke array, bare check); fix ROOT-ON-KOOPA wrong `redir /path/ 302` examples. | diff --git a/site-gen/console_to_html.py b/site-gen/console_to_html.py index 9db83b0..a864b80 100755 --- a/site-gen/console_to_html.py +++ b/site-gen/console_to_html.py @@ -196,6 +196,9 @@ def classify(line: str) -> str: return "meta" if "numbered checks" in line.lower() or "totals:" in line.lower(): return "meta" + # host-agent tees converter "wrote … (errors=N …)" into the same log + if line.lstrip().lower().startswith("wrote ") and "errors=" in line.lower(): + return "meta" if "BLOCKER" in u or "┌ BLOCKER" in u: return "blocker" if "ERROR" in u or "┌ ERROR" in u: @@ -313,6 +316,12 @@ def is_summary_error_line(ln: str) -> bool: return True if "totals:" in low: return True + # console_to_html "wrote … (errors=N warnings=M level=…)" is teed into the + # host-agent log; "errors=" uppercases to "ERRORS=" and must not count as ERROR. + if low.lstrip().startswith("wrote ") and "errors=" in low: + return True + if "level=red" in low and "wrote " in low: + return True # header-ish RUN_TIMEOUT= without error badge if is_run_timeout_text(ln) and "ERROR" not in ln.upper() and "run.timeout" not in low: return True