chore: release v0.13.1 — clippy gate + 6 RFCs + cwd inheritance#109
Merged
Conversation
`do_split` now reads the focused pane's `live_cwd()` (which prefers OSC 7 reported cwd, then procfs, then launch-time cwd) and passes it to the new pane's spawn. Closes the v0.13.0 acceptance gap noted in #75. Adds `bootstrap::spawn_pane_in` that takes an optional cwd and delegates to `Pane::with_full_config`. The original `spawn_pane` keeps its old signature and forwards with `cwd = None`, so non-split spawn paths (initial workspace, restart) are untouched. New-tab cwd inheritance is intentionally not wired in this commit; that needs a focused-pane lookup before `panes` is moved into the saved tab, which is a different refactor. Tracked separately if requested. Tests: existing 397 unit + 25 socket_security tests still pass. Pty-bound verification of the new pane's actual cwd is deferred to the PTY-on-CI harness work (per RFC #105). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
v0.12.0 relaxed the clippy gate to `-D warnings -A clippy::all -A dead_code -A unused_imports -A unused_variables` because deferred-wiring modules legitimately surfaced lints whose consumer side hadn't landed. v0.13.0 (#108) wired everything; v0.13.1 restores the strict gate. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- src/pane.rs, src/terminal_state.rs: replace
`let mut x = T::default(); x.field = ...` with struct-update
syntax (`T { field: ..., ..Default::default() }`) — fixes
clippy::field_reassign_with_default.
- src/hooks.rs: replace `vec![...]` with `[...]` for an iter-only
test fixture — fixes clippy::useless_vec.
All hits are in `#[cfg(test)]` modules; behaviour unchanged.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The benches use `#[path = "../src/*.rs"] mod foo;` to embed real source modules without dragging in the rest of the binary (per the comment in `benches/protocol_codec.rs`). Each bench only exercises a narrow slice of its mounted module, so the rest legitimately surfaces as dead code and unused imports under the bench's view. Every flagged identifier is exercised by the lib/bin targets — confirmed by grep before allowing. - benches/render_hotpaths.rs: extend the existing `#![allow(dead_code)]` to also allow `unused_imports` (test modules' `use super::*` flagged unused under `--cfg test` without a test harness). - benches/protocol_codec.rs: add the same crate-level allow. - benches/rss_proxy.rs: scope `#[allow(dead_code)]` to the `PaneFootprint` struct — its fields exist to drive realistic allocations (the whole point of an RSS proxy bench), never read back. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The `--all-targets` clippy gate (restored in v0.13.1) flags `Pane::with_scrollback` as dead in the lib unit because my earlier do_split fix routed `spawn_pane` through `Pane::with_full_config` exclusively. The bench-only callsite isn't visible to lib compilation. `spawn_pane_in` now branches: `Some(cwd)` → `with_full_config`, `None` → `with_scrollback`. Both constructors stay alive in lib. No behavioural change. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Retroactive design doc for the IpcCommand enum that shipped in v0.13.0 (commit 0d0bd80). Captures why option (a) — single channel with Legacy/Ext variants — beat option (b) Arc<Mutex<ServerState>> and option (c) actor restructure. Locks the policy for future Ext additions: append a tag to EXT_CMD_TAGS, no inline handlers.
Splits the per-pane storage model: vt100 keeps the active viewport, ezpn owns the history-of-scrolled-off rows in a byte-bounded ScrollbackBuffer with sparse rows and real eviction. Unblocks #68 (byte-budget eviction) and #93 (cell-grid render diff). Sets concrete numbers: 100 panes × 10K rows ≤ 60 MB target (vs ~240 MB today), 10 MB single line bounded by byte_budget.
Publishes seven workload ceilings (idle 12 MB, +1 pane 18 MB, 100 panes 60 MB, per-client 256 KiB, per-pane scrollback 32 MiB default, snapshot save 1.5×) with /proc/self/status sampling, a new ezpn-bench-memory binary, and a memory-regression CI gate that fails any PR > 5% over baseline. Linux is canonical; macOS advisory at 1.25×.
Single schema bump (v3 → v4) covering all four near-term persistence needs: NamedBufferBlob (#91), ThemeStateBlob (#85), opaque plugin_state slot (forward-looking), cwd_history (#75). All additions are Option/HashMap with skip_serializing_if so v3 readers ignore unknown fields and v4 readers handle missing fields. Bincode 1.3 pin unchanged (v4 is a JSON-level schema event, not a bincode bump). Locks additive-only policy through v1.0.
Full intercept vs forward decision table across OSC 0/1/2/4/7/8/9/10/ 11/12/52/133. Includes per-OSC multi-client semantics and the intercept policy for state-tracking sequences. Closes #107. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Patch release. See CHANGELOG.md [0.13.1] for the full diff. Highlights: - Strict clippy gate restored. - Split-pane cwd inheritance closes the v0.13.0 #75 acceptance gap. - 6 RFC design docs (#102-#107) land under docs/rfcs/. - Issues closing: #75 #76 #77 (retroactive verification) plus #102-#107 via RFC docs. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Mirrors the ci.yml restore that landed earlier in this branch. Without this, release-tag builds would still run with the v0.12.0 relaxation even though the deferred-wiring modules are wired in v0.13.0. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The previous `[2, "always", "lower-case"]` rule rejected any subject containing a single uppercase character — a problem for technical subjects that legitimately include type names (Pane), abbreviations (RFC), or CLI flags (-D). The new `[2, "never", ["start-case", "pascal-case", "upper-case"]]` allows lower-case subjects (the historical norm) and embedded proper nouns where they aid readability, while still blocking all-uppercase subjects and Title-Case shouting. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Patch release. Three workstreams:
-D warningsafter v0.12.0 had relaxed it for deferred-wiring modules. v0.13.0 wired everything; this restore was promised for v0.12.1 (which we skipped → landed in v0.13.1 instead). Zero clippy warnings on--all-targets.do_splitnow reads the focused pane'slive_cwd()and passes it to the new pane's spawn via a newbootstrap::spawn_pane_inconstructor. OSC 7 reported_cwd → procfs → launch-time cwd resolution chain is fully wired.Extchannel unification — main-loop routing for dump / ls / events / send-keys #103) — retroactive design doc for v0.13.0Issues
Closes #102, closes #103, closes #104, closes #105, closes #106, closes #107.
(Issues #75 #76 #77 already closed via verification comments on v0.13.0 retroactive review.)
Test plan
cargo test --bins— 397 + 25 passcargo clippy --all-targets -- -D warnings— zero warningscargo fmt --check— cleanOpen questions (deferred to follow-up)
From RFC docs — not blocking the patch release:
vt100-ezpnon crates.io now or wait for first upstream stall? (RFC says wait.)tracing-subscriberfeature pruning before enforceable.ThemeStateBlobor just theme name? (RFC recommends name.)🤖 Generated with Claude Code