release 1.15.1: SUMMARY severity backgrounds on mon HTML; fix section paint

Phase section() ╔═║╚ boxes are class section (no sum-header). Real
SUMMARY rows keep solid OK/WARN/ERROR/INFO backgrounds on the web.
This commit is contained in:
Hernâni Marques 2026-07-19 04:41:24 +02:00
parent 25cb8216b3
commit 66fa471d00
No known key found for this signature in database
GPG key ID: CB5738652768F7E9
4 changed files with 85 additions and 48 deletions

View file

@ -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 {{