v0.3.3
Tracks alpenglow ag-v0.3.2. Post-release polish on standstill
reporting, runner text-mode verdicts, and Time Series presentation,
plus a new transaction-pressure card.
Added
- Transaction-pressure card on the Time Series tab. Series is
Σ signature_count / bucket_secondsfrombank frozenlog
lines, rendered astx/s(bucket-size-independent so 10m and
1h zoom levels read on the same scale). Stats line surfaces
min / avg / peakper second alongside an overall
tx/block (avg)derived fromΣ signature_sum / Σ blocks. Metric::with_subtitleon the Time Series renderer for inline
secondary stats on existing cards (no new grid cell required).Kind::Ratevariant for per-second metrics. Distinct from
Kind::Countbecause summing a rate across buckets is
meaningless; the stats line therefore drops thetotaland
/bktfields forRatecards.
Changed
StandstillObservedalerts dedup by anchor slot: repeated
StandstillExtendingevents at the sameat_slotmerge into
one alert withcount(firings) andlast_at(most recent
extension). Index lives onOverallStats.standstill_alert_indices
(transient). Previously a 2.5h standstill produced one alert
per extension batch (hundreds of rows).- Standstill alert detail pane shows
anchor / firings / first at / last at / spaninstead of a single timestamp. - Sparkline x-axis caption marked
(autoscale)so readers know the
range is data-driven, not a fixed window. - Headline-health canonical-skip line shortened from
(N canonical of M vote-skips · K indeterm)to
(N of M · K indeterm)to fit single-line width. - Local-leader summary row drops the
(4-slot bursts, per NUM_CONSECUTIVE_LEADER_SLOTS)qualifier. runner.rstext-mode health lines take separateok_noteand
bad_notestrings. Previously both paths reused one note,
producing contradictory output like[✗] no liveness issues.
Standstill bad-path verdicts now readSTANDSTILL OBSERVED/
resume activityinstead ofno liveness issues.- Runner crashed-leader count is standstill-aware when
standstill_rangesexist: subtracts TCLs that fired inside a
standstill window from the headline figure. cargo xtask lint-prodmirrors the CI strict clippy gate
exactly:cargo clippy --workspace --all-targets --locked -- -D warnings. Previously it omitted--all-targets,
--locked, and-D warnings, allowing local "pass" while
CI failed.
Fixed
- Tx-pressure stats line previously claimed
total N peak K/bkt avg J/bktfor a per-second series.totalwas the sum of
rates (meaningless); the/bktsuffix lied about the unit
(values were per-second). Fixed by routing the card through
Kind::Rate. clippy::derivable_implsonSkipClassification: replaced
manualDefaultimpl with#[derive(Default)]+
#[default]onNotSkipped.clippy::manual_checked_ops(Rust 1.96+) on the
avg_tx_per_blockdivide-by-zero guard: replaced
if d > 0 { a / d } else { 0 }with
a.checked_div(d).unwrap_or(0).
Toolchain
- Added
rust-toolchain.tomlpinning the project to Rust
1.96.0..github/workflows/{ci,release}.ymlinstall the
same version viadtolnay/rust-toolchain@masterwith
explicittoolchain: 1.96.0. Previously local and CI both
said "stable" but tracked different versions, so new lint
categories (e.g.manual_checked_opsin 1.96) appeared at
push time. Bumping Rust now means editing one file plus the
two workflow inputs in lockstep.