Skip to content

Commit 122b1d9

Browse files
mizu-junclaudehappy-otter
committed
chore(release): v1.13.0
Audit round 3: reliability, performance, and encapsulation improvements (PRs #26#30). No protocol or snapshot version change — compatible with 1.12.0. Generated with [Claude Code](https://claude.ai/code) via [Happy](https://happy.engineering) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Happy <yesreply@happy.engineering>
1 parent e417cdc commit 122b1d9

3 files changed

Lines changed: 49 additions & 12 deletions

File tree

CHANGELOG.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,43 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [1.13.0] - 2026-07-06
11+
12+
Audit round 3 (`docs/plans/audit-round3-2026h2.md`): reliability, performance,
13+
and encapsulation improvements found by a security / performance / correctness
14+
review of 1.12.0. No protocol or snapshot version change — fully compatible with
15+
1.12.0 peers.
16+
17+
### Performance
18+
- The PTY reader now applies only the changed rows to its `latest_grid` snapshot
19+
each output burst instead of cloning the whole grid. A single-row update drops
20+
from ~19 µs to ~0.5 µs in a criterion bench (`nexterm-vt/benches/grid_snapshot`),
21+
cutting memory-bandwidth pressure under heavy output.
22+
- `Screen::take_dirty_rows` pre-sizes its result to avoid repeated reallocation
23+
on full-screen repaints.
24+
25+
### Fixed
26+
- Recover from a poisoned `std::sync::Mutex` instead of cascading into a
27+
process-wide panic (plugin manager, web session / OAuth / TOTP-setup locks).
28+
- Resync a client with a full refresh when its broadcast receiver lags, instead
29+
of leaving the screen corrupt until an unrelated refresh (both the native IPC
30+
and WebSocket forwarders).
31+
- Serial panes no longer render blank: they maintain a live grid snapshot and are
32+
included in the attach and lag-resync refresh paths.
33+
- Guard the glyph-atlas LRU capacity math against `u32` overflow for a large
34+
configured `gpu.atlas_size`.
35+
36+
### Changed
37+
- `SessionManager` now uses per-session locking
38+
(`HashMap<String, Arc<Mutex<Session>>>`), so an operation on one session no
39+
longer blocks every other session behind a single global lock.
40+
- Encapsulated the raw bits of `Attrs` and `Modifiers` behind
41+
`new` / `bits` / `insert` / `remove` (ADR-0009). No wire change.
42+
43+
### Security
44+
- Session-token validation is now constant-time (defense-in-depth for the web
45+
terminal auth gate).
46+
1047
## [1.12.0] - 2026-07-05
1148

1249
Phases 1–4 of the competitive-gap roadmap (`docs/plans/gap-roadmap-2026h2.md`):

Cargo.lock

Lines changed: 11 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ exclude = [
2020
resolver = "2"
2121

2222
[workspace.package]
23-
version = "1.12.0"
23+
version = "1.13.0"
2424
edition = "2024"
2525
license = "MIT OR Apache-2.0"
2626
authors = []

0 commit comments

Comments
 (0)