Skip to content

feat(release): publish alpha releases; keep threshold labels clear of the legend - #308

Merged
vishr merged 7 commits into
mainfrom
fix/alpha-releases-chart-label
Oct 14, 2026
Merged

vishr merged 7 commits into
mainfrom
fix/alpha-releases-chart-label

Conversation

@vishr

@vishr vishr commented Oct 14, 2026 •

Copy link
Copy Markdown
Member

What changed

Alpha releases. Fanout's versioning convention is CalVer YYYY.M.N with an optional -alpha, -beta, or -rc maturity suffix, but the release tooling accepted only bare vYYYY.M.N. Product maturity now lives in one constant in scripts/release.sh, set to alpha, so the next release after v2026.10.0 is v2026.10.1-alpha.

  • The release number counts every tag in the month, with or without a suffix, compared numerically.
  • The release workflow accepts the suffixes, compares (year, month, N) numerically, and rejects a second tag with the same number.
  • Container tags carry the suffix (2026.10.1-alpha) and every release still moves latest.
  • The GitHub release stays a full release so /releases/latest, which the installer uses, keeps resolving.
  • README, docs/release.md, the install page, and installer comments describe the suffix.

Operators who pin an exact image tag and rely on Renovate or Dependabot should move to the -alpha tags; those tools treat a suffix as a separate variant. The first alpha release notes should say so.

Threshold labels. Time-series threshold labels sat at the top-left of the plot and overlapped the legend, as on the default System overview's p95 latency panel. They now use ECharts' native insideEndBottom placement: the right end of the line, just below it, repositioned by ECharts on every axis change, legend toggle, zoom, and resize. The README screenshots are recaptured at 2x with the fix.

Verification

  • just check
  • just test-race when auth, API, ingest, query, MCP, or agent paths changed (release tooling and UI only)
  • User-facing behavior and configuration docs are current
  • No credentials, private telemetry, host details, or enterprise-only source are included
  • API, migration, ingest, MCP/AG-UI, or release-contract changes are called out (release tags gain a maturity suffix)
  • scripts/release_test.sh, ShellCheck, and actionlint pass
  • Unit test asserts native threshold label placement
  • Checked visually in Chrome at 2x on the System overview dashboard

vishr added 7 commits October 14, 2026 09:29
Fanout's versioning convention is CalVer YYYY.M.N with an optional
-alpha, -beta, or -rc maturity suffix, but the release tooling accepted
only bare vYYYY.M.N tags. Product maturity now lives in one constant in
scripts/release.sh, set to alpha, so the next release after v2026.10.0
is v2026.10.1-alpha.

- The release number counts every tag in the month, with or without a
  suffix, compared numerically.
- The workflow accepts the suffixes, compares (year, month, N)
  numerically, and rejects a second tag with the same number.
- Container tags carry the suffix and every release still moves latest.
  The GitHub release stays a full release so /releases/latest, which the
  installer uses, keeps resolving.
Time-series threshold labels sat at the top-left of the plot and
overlapped the legend, as on the default System overview's p95 latency
panel. Labels now sit inside the plot's right edge after native axis
containment, avoid each other, truncate when long, and hide when no slot
fits; the dashed line stays at the exact value. The threshold markLine no
longer animates, so a refresh cannot slide its label through the axis.

The README screenshots are recaptured at 2x with the fix.
Threshold and end-label offsets were computed only on a full option
apply. Hiding a series through the legend, zooming, or resizing can move
the native axis extent, leaving labels that overlap each other or fall
outside the plot. Those paths now re-run the same native layout from the
pre-layout series, so labels hidden in a smaller plot can return.
A second series update after the threshold layout moved end labels that
the first update had already placed; on a compact log chart one landed
above the plot. Both layouts now run against the same native geometry and
the series are set once.
After a data zoom, end-label offsets were projected from each series'
final sample while ECharts draws the label at the last sample inside the
window, pushing labels below the plot. Offsets now come from the native
layout's last valid point, keeping the authored series index.
Relayout gave hidden series offsets against the rescaled axis and kept
them reserved in collision avoidance, so restoring a series could place
its label below the canvas. Hidden series' end labels are now suppressed
and excluded from placement; their authored labels are kept, so a
restored series is laid out against the current axis.
… them out

The custom threshold and end-label re-layout kept producing new
interaction regressions: legend toggles, zoom, and compact charts each
left pixel offsets that pushed labels into the legend or off the canvas.
Restore main's label layout and fix the original overlap with ECharts'
own placement: threshold labels sit at the line's right end, just below
it, and ECharts repositions them on every axis change. The README
screenshots are recaptured with this behavior.
@vishr
vishr merged commit 88f3819 into main Oct 14, 2026
14 checks passed
@vishr
vishr deleted the fix/alpha-releases-chart-label branch October 14, 2026 21:03
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