Skip to content

fix: valid-XML favicon + JMH percentile roll-up#471

Merged
alexmond merged 3 commits into
mainfrom
fix/favicon-xml-and-jmh-percentiles
Jul 13, 2026
Merged

fix: valid-XML favicon + JMH percentile roll-up#471
alexmond merged 3 commits into
mainfrom
fix/favicon-xml-and-jmh-percentiles

Conversation

@alexmond

Copy link
Copy Markdown
Owner

Three small fixes, all validated against the lab.

fix(ui) favicon renders in the browser tab

The favicon.svg header comment contained CSS-token names with double hyphens (--bg, --border, --radius). XML forbids -- inside a comment, so a strict SVG/XML parser (which browsers use to rasterize favicons) rejected the whole document — blank tab icon despite a 200 response. Reworded the comment; also gave the <svg> intrinsic width/height (matching the sibling builder app, a Chrome favicon requirement). Verified live: /favicon.svg now parses as valid XML.

fix(perf) JMH run-level percentiles

The JMH parser aggregated a run's p50/p90/p95/p99 as a sample-weighted average of each benchmark's percentiles — statistically invalid across heterogeneous benchmarks (the tail collapses onto the mean; a run "p99" could read lower than the slowest benchmark's median). Now takes the max across benchmarks per percentile, so the run line tracks the slowest operation's tail and stays monotone. Mean stays sample-weighted (correct). JMeter (HdrHistogram) and k6 (own summary) were already correct — JMH only.

Existing lab perf runs were backfilled from stored per-transaction percentiles.

🤖 Generated with Claude Code

alexmond and others added 3 commits July 11, 2026 13:02
…ks, not averaged

The JMH parser aggregated a run's p50/p90/p95/p99 as a sample-weighted
AVERAGE of each benchmark's percentiles. Averaging percentiles across
heterogeneous benchmarks is statistically invalid: the tail collapses
onto the mean, so a run "p99" could read lower than the slowest
benchmark's median (gotmpl4j run showed p50..p99 all ~0.26ms while
TableBenchmark.gotmpl4jRender[n=1000] alone is ~1.01ms).

Take the max across benchmarks per percentile instead, so the run line
tracks the slowest operation's tail and stays monotone. The mean stays
sample-weighted (linear -> the pooled mean is exact). JMeter (HdrHistogram
merged) and k6 (own summary) already compute correct pooled percentiles;
this was JMH-only.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QmnyrHG366UPQTbtsimzkj
…he tab icon

The SVG carried only a viewBox, no width/height. Chrome's favicon
rasterizer needs intrinsic dimensions: with viewBox alone the icon
renders fine when opened as a URL (the browser supplies a default
viewport) but shows blank as a *tab* icon. The sibling builder app's
favicon works in the same browser precisely because its <svg> declares
width="32" height="32" — mirror that.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QmnyrHG366UPQTbtsimzkj
The favicon's header comment contained CSS-token names with double
hyphens (--bg, --border, --radius). XML forbids "--" inside a comment,
so a strict SVG/XML parser rejects the whole document ("Unexpected
token '--'"). Browsers rasterize favicons through that strict parser,
so the tab icon came up blank even though the file served 200 and
rendered leniently elsewhere. Reword the comment to drop the "--".

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QmnyrHG366UPQTbtsimzkj
@alexmond alexmond merged commit e11fe21 into main Jul 13, 2026
4 checks passed
@alexmond alexmond deleted the fix/favicon-xml-and-jmh-percentiles branch July 13, 2026 16:34
@unitrack-lab

unitrack-lab Bot commented Jul 13, 2026

Copy link
Copy Markdown

UniTrack — ✅ gate passed

Metric Value
Tests 337 passed · 0 failed · 0 skipped (337 total)
Coverage 80.9% (+0.0pp vs base)
Quality gate PASSED

View run →

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant