You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Slots tab: new m filter for rows where the validator voted
both Notarize AND Skip on the same slot. Mixed-vote rows now
display as N+S / N+F+S (previously the Skip was silently
dropped from the vote-pattern column).
Memory ceilings on aggregator state: LogIssueGroup.timestamps
capped at 1,000,000 entries with overflow counter; ProduceWindow events rejected when end - start > 16 (4×
the Alpenglow NUM_CONSECUTIVE_LEADER_SLOTS = 4 invariant)
with malformed_produce_window counter. Defence against
memory-exhaustion on pathological / corrupted log lines.
Changed
Yank target moved from /tmp/abracadabra-yank-N.txt to $XDG_RUNTIME_DIR/abracadabra/abracadabra-yank-<pid>-<n>.txt
(fallback $HOME/.cache/abracadabra/yank/...). Per-process
pid in the filename prevents cross-session collisions in the
persistent fallback dir.
Windows / Overview / Slots / Leader-timeouts tabs share a
single precomputed LatencySnapshot; eliminates per-frame
O(n log n) recomputation on the render path.
Alerts list viewport follows the j/k cursor (ListState).
Fixed
Alerts list orders globally by (severity desc, at asc).
The TUI title's "CRIT first, by count" promise is now
load-bearing across inline + LogPattern alerts.
SlotRecord::delta_us returns None for inverted intervals
(was returning negative microseconds and polluting percentile
calculations downstream).
Severity::from_us no longer mis-classifies negative input
as Normal via integer-division truncation.
Window slot-duration percentiles count only strictly adjacent (n, n+1) pairs; gap-separated pairs no longer inflate p95.
percentile() clamps p to [0.0, 1.0] (NaN → 0.0).
fast_slow_pct() partitions exactly to 100.
Per-hour rate displays use actual log duration (was clamped
to a 1-hour minimum, deflating sub-hour rates up to ~60×).
Scroll keys on non-list tabs no longer clobber the Slots
cursor position.
Single-metric sparkline cards fill the full panel width.
StackedBars paints Color::Reset on every cell branch.
Stale /tmp references and tui/mod.rs module doc updated.
Security
Panic hook restores terminal state before propagating;
mid-render panic no longer leaves a wedged terminal.
Yank file write uses O_CREAT | O_EXCL | O_NOFOLLOW;
symlink attacks on the previous /tmp target neutralised.
TUI sanitises log-derived spans before rendering (strips
ESC, DEL, replaces other C0). Crafted log lines cannot
cursor-manipulate the terminal.
Parser sanitises Parsed::Issue bodies at construction:
strips ESC/DEL/LF/CR, replaces other C0 with ?, preserves
multi-byte UTF-8. CSI sequences cannot reach stdout via --text mode.
Hash captures length-bounded {32,48} on every parse path
(regex and strip_prefix). Slot-digit captures bounded {1,20}.
ProduceWindow { start, end } clamped at end - start ≤ 16;
malformed log lines with end = u64::MAX cannot trigger
exabyte-scale allocation.