From 66fa471d004f327988bbd3840d393586458b658f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hern=C3=A2ni=20Marques?= Date: Sun, 19 Jul 2026 04:41:24 +0200 Subject: [PATCH] release 1.15.1: SUMMARY severity backgrounds on mon HTML; fix section paint MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Phase section() ╔═║╚ boxes are class section (no sum-header). Real SUMMARY rows keep solid OK/WARN/ERROR/INFO backgrounds on the web. --- VERSION | 2 +- VERSIONS.md | 1 + lib.sh | 6 +- site-gen/console_to_html.py | 124 +++++++++++++++++++++++------------- 4 files changed, 85 insertions(+), 48 deletions(-) diff --git a/VERSION b/VERSION index 141f2e8..ace4423 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.15.0 +1.15.1 diff --git a/VERSIONS.md b/VERSIONS.md index f1ac38d..45ca9b2 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.15.1** | 2026-07-19 | **Bugfix:** mon HTML — phase `section()` boxes no longer painted as SUMMARY (were blue/green `sum-header`); only real SUMMARY rows get solid severity backgrounds (OK/WARN/ERROR/INFO). | | **v1.15.0** | 2026-07-19 | **Feature:** CHF **fake-incoming amount ladder** in `devtesting` (`DEVTESTING_LADDER=1`, default **23** log-spaced rungs **CHF:0.01 → CHF:50000**); synthetic geniban debit funds each rung; baseline plumbing probe kept. | | **v1.14.0** | 2026-07-19 | **Feature:** SUMMARY box rows are **colour-distinct** (per-severity badge + tinted background + bold counts; verdict-coloured header); HTML mon pages style `sum-ok` / `sum-warn` / `sum-err` / … panels the same way. | | **v1.13.13** | 2026-07-19 | **Bugfix:** progress estimate for **devtesting** / fake-franken is 8 (happy-path numbered checks), not 10 — avoids mid-run 42/48 then end snap 46/46. | diff --git a/lib.sh b/lib.sh index 358e6a6..d9ca60c 100755 --- a/lib.sh +++ b/lib.sh @@ -921,9 +921,11 @@ _summary_totals_box() { local ROW_BLK=$'\e[1;97;48;5;53m' # bold white on dark magenta local ROW_TOT=$'\e[1;37;48;5;236m' # bold white on dark gray - printf -- '\n%s╔══════════════════════════════════════╗%s\n' "$hdr_bg" "$N" + # Include SUMMARY on all three frame lines so HTML classify maps them to sum-header + # (phase section() boxes use the same ╔═║╚ glyphs but must not get sum-* paint). + printf -- '\n%s╔════════ %s ════════════════════╗%s\n' "$hdr_bg" "$_sum_lbl" "$N" printf -- '%s║ %-34s ║%s\n' "$hdr_bg" "$_sum_lbl" "$N" - printf -- '%s╚══════════════════════════════════════╝%s\n' "$hdr_bg" "$N" + printf -- '%s╚════════ %s ════════════════════╝%s\n' "$hdr_bg" "$_sum_lbl" "$N" # $1=row_bg $2=badge_bg $3=tag $4=n $5=label_fg — full-width-ish row _sum_row() { diff --git a/site-gen/console_to_html.py b/site-gen/console_to_html.py index 6633f87..43ffcd2 100755 --- a/site-gen/console_to_html.py +++ b/site-gen/console_to_html.py @@ -277,19 +277,13 @@ def is_numbered_check_line(line: str) -> bool: def classify(line: str) -> str: u = line.upper() low = line.lower() - # section / summary headers before badge matching (they contain the word ERROR) - if re.search(r"[╔═║╚]|SUMMARY", u) and ( - "SUMMARY" in u or "═══" in line or "╔" in line or "╚" in line - ): - if "SUMMARY" in u or ("╔" in line and "═" in line) or ("╚" in line and "═" in line): - if "SUMMARY" in u or (not is_numbered_check_line(line) and ("╔" in line or "╚" in line or "║" in line)): - if "SUMMARY" in u or re.match(r"^\s*[╔╚║]", line): - if "SUMMARY" in u: - return "sum-header" - if re.match(r"^\s*[╔╚]", line) and "═" in line: - return "sum-header" - if re.match(r"^\s*║", line) and not is_numbered_check_line(line): - return "sum-header" + # SUMMARY box header only when the word SUMMARY is present (not phase section() boxes). + # Phase section() also uses ╔═║╚ with blue BG_SEC — those must stay class "section". + if "SUMMARY" in u: + return "sum-header" + # Double-line box frames from section() → section (no sum-* paint) + if re.match(r"^\s*[╔╚].*═", line) or re.match(r"^\s*║\s", line): + return "section" if "--- ERRORS" in u or "ERRORS ·" in u or "ERRORS (" in u: return "meta" if "numbered checks" in low: @@ -1883,59 +1877,99 @@ main {{ padding: 12px 14px 48px; max-width: 1200px; }} .line.warn {{ color: var(--warn); }} .line.info {{ color: var(--info); }} .line.blocker {{ color: var(--blocker); }} -.line.section {{ color: var(--sec); margin-top: 8px; font-weight: 600; }} +/* Phase section titles (╔═║╚ from section()) — light chrome, NOT sum-* paint */ +.line.section {{ + color: #9cf; + margin-top: 10px; + font-weight: 700; + background: transparent; + border-left: 3px solid #345; + padding: 2px 0 2px 8px; +}} .line.meta {{ color: var(--dim); }} .line.plain {{ color: var(--fg); }} -/* v1.14.0: SUMMARY box rows — distinct bg + bold per severity */ +/* SUMMARY box — full-width solid backgrounds matching terminal ROW_* tints */ +.line.sum-header, +.line.sum-ok, +.line.sum-err, +.line.sum-warn, +.line.sum-info, +.line.sum-block, +.line.sum-totals, +.line.sum-verdict-ok, +.line.sum-verdict-warn, +.line.sum-verdict-err {{ + display: block; + box-sizing: border-box; + width: 100%; + margin: 2px 0; + padding: 6px 10px; + border-radius: 3px; + font-weight: 800; + letter-spacing: 0.02em; +}} .line.sum-header {{ - color: #fff; font-weight: 800; letter-spacing: 0.04em; - background: linear-gradient(90deg, #1a3a1a 0%, #0a1a0a 100%); - border-left: 4px solid var(--ok); padding: 4px 8px; margin-top: 10px; + color: #e8ffe8; + background: #145214; /* solid green header (not blue) */ + border: 1px solid #2a8a2a; + border-left: 6px solid #3d3; + margin-top: 14px; + text-shadow: 0 1px 0 #0008; }} .line.sum-ok {{ - color: #b8f0b8; font-weight: 700; - background: #0d1f0d; border-left: 4px solid var(--ok); - padding: 3px 8px; margin: 2px 0; + color: #d4ffd4; + background: #0f3d0f; + border: 1px solid #1a6b1a; + border-left: 6px solid var(--ok); }} .line.sum-err {{ - color: #ffc9c9; font-weight: 700; - background: #2a0a0a; border-left: 4px solid var(--err); - padding: 3px 8px; margin: 2px 0; + color: #ffe0e0; + background: #4a1010; + border: 1px solid #822; + border-left: 6px solid var(--err); }} .line.sum-warn {{ - color: #1a1400; font-weight: 800; - background: #c9a227; border-left: 4px solid #8a7010; - padding: 3px 8px; margin: 2px 0; + color: #1a1400; + background: #e6c200; /* bright gold — clearly not blue */ + border: 1px solid #a68b00; + border-left: 6px solid #8a7010; }} .line.sum-info {{ - color: #c8e7ff; font-weight: 700; - background: #0a1520; border-left: 4px solid var(--info); - padding: 3px 8px; margin: 2px 0; + color: #e0f2ff; + background: #0c2a4a; /* navy INFO row only */ + border: 1px solid #1a4a7a; + border-left: 6px solid var(--info); }} .line.sum-block {{ - color: #f5d0ff; font-weight: 700; - background: #1a0a1a; border-left: 4px solid var(--blocker); - padding: 3px 8px; margin: 2px 0; + color: #ffe0ff; + background: #3a1040; + border: 1px solid #6a2a70; + border-left: 6px solid var(--blocker); }} .line.sum-totals {{ - color: #eee; font-weight: 700; - background: #1a1a1a; border-left: 4px solid #666; - padding: 4px 8px; margin: 4px 0 2px; + color: #f0f0f0; + background: #2a2a2a; + border: 1px solid #555; + border-left: 6px solid #888; + margin-top: 6px; }} .line.sum-verdict-ok {{ - color: #b8f0b8; font-weight: 800; - background: #0d1f0d; border: 1px solid #2a5a2a; - padding: 4px 8px; margin: 4px 0 8px; + color: #d4ffd4; + background: #0f3d0f; + border: 2px solid #2a8a2a; + margin-bottom: 10px; }} .line.sum-verdict-warn {{ - color: #1a1400; font-weight: 800; - background: #c9a227; border: 1px solid #8a7010; - padding: 4px 8px; margin: 4px 0 8px; + color: #1a1400; + background: #e6c200; + border: 2px solid #8a7010; + margin-bottom: 10px; }} .line.sum-verdict-err {{ - color: #ffc9c9; font-weight: 800; - background: #2a0a0a; border: 1px solid #622; - padding: 4px 8px; margin: 4px 0 8px; + color: #ffe0e0; + background: #4a1010; + border: 2px solid #a33; + margin-bottom: 10px; }} a.jump {{ color: inherit; text-decoration: underline dotted; }} footer {{