Releases: robzilla1738/harness-terminal
Releases · robzilla1738/harness-terminal
Harness 1.10.0 (124)
Signed and notarized Harness 1.10.0 (124).
Harness 1.9.0 (123)
Signed and notarized Harness 1.9.0 (123).
Harness 1.8.0 (122)
Signed and notarized Harness 1.8.0 (122).
Harness 1.7.1 (121)
Signed and notarized Harness 1.7.1 (121).
The post-release audit of 1.7.0: a second exhaustive multi-agent pass (56 hunt dimensions across
the release diff and the whole app, refute-by-default verification, every fix below pinned by a
regression test that fails on the pre-fix code where feasible).
Fixed
- RIS left the saved cursor alive, so
DECSC → RIS → DECRCrestored pre-reset state. A full
reset (ESC c) now clears the DECSC save like xterm; DECRC after RIS restores home + the
default pen instead of leaking the old position and colors into freshly-reset programs. - A torn read in the hook registry could crash the daemon.
bind-hook/unbind-hooksaves
encoded the live hook array outside the lock; concurrent mutations madeJSONEncodertrap
(reproduced: index-out-of-range within 15 runs). Saves now snapshot under the lock, matching
the option/environment stores. - Copying a selection after scrollback eviction silently produced blank text. The selection
anchor (unlike the cursor) was never clamped when history shrank under copy mode; stale anchors
now clamp on every motion and at extraction, soycopies real content instead of whitespace. - Block/char selections dropped a wide (CJK) glyph when only its trailing cell was covered.
Extraction now includes any character whose span intersects the selected columns — the text you
copy matches the cells the highlight covers. n/Nin copy-mode search jumped to stale rows after scrollback eviction. Matches are
re-derived from the live buffer on every search step instead of trusting line numbers cached at
search time.- A wedged binary froze onboarding forever. The install step's
version --jsonprobe had no
timeout; a corrupted/stuck binary blocked the main actor with Continue/Skip locked until
force-quit. The probe is now fully bounded (3s + SIGTERM/SIGKILL escalation) and surfaces as
"no version info" so the install continues on the fallback path. - Settings fields could show a value the terminals weren't using. Committing an out-of-range
fontSize / window padding / scrollback now reflects the clamped value back into the field (the
command-finished threshold already did); color swatches and placeholder hex now refresh when
auto light/dark flips the theme while Settings is open. bind -n(root-table) bindings ignored caps lock. An uppercase letter typed without Shift
now falls back to the lowercase binding, mirroring the prefix table — while Shift+letter stays
distinct so a typedCis never swallowed when onlybind -n cexists.- IME composition over a selection was indistinguishable from the selection. Preedit text
inherited the selection / find-highlight background; it now resets its cells to the canvas
background (translucency intact) so composition always reads as "being typed". select-pane/swap-pane -tsilently misrouted bad targets to the next pane. Unrecognized
or dangling-tvalues now fail loudly with the accepted forms (:.+,:.-,!), like every
other validated flag.- Status-line layout counted scalars, not columns.
status-left/status-rightpadding and
display-message/status-formatclipping inattach-windowoverflowed one column per wide
(CJK) glyph; all measurement and truncation is now display-width-aware. harness-cli remote addcould report success without persisting. Write failures in
remote-hosts.jsonare now surfaced (exit 1, naming the file); concurrent CLI invocations are
serialized with a cross-process file lock so the second writer no longer silently discards the
first's hosts.- SSH tunnel failures all read as timeouts. When
sshexits before the tunnel is ready the
error now reports its exit status ("check the host, credentials, and remote socket path")
instead of the generic not-ready-in-time message. - A dangling
--ssh-argwas silently dropped; it now errors with exit 64 like the other
validated flags, andbind-key/unbind-keyno longer eat a key spec literally namedprefix
when-Twasn't passed. - Killed panes leaked their terminal views. The pane registry now prunes hosts that left the
daemon snapshot on every structural sync, so split+kill cycles no longer accumulate dead
Metal-backed views for the life of the app. - Hooks installed on Linux pointed at the macOS binary path.
install-hooksnow emits the
XDG path (${XDG_DATA_HOME:-$HOME/.local/share}/harness/bin) on Linux, so agent notifications
actually reach the daemon there. - Closing a session never cleaned its scoped environment.
set-environment -t <session>
entries now clear on session/workspace close instead of accumulating inenvironment.json
forever. - A respawn racing the metadata scan could briefly publish the dead shell's cwd. The off-lock
cwd probe now records which child PID it measured and skips the commit when a respawn swapped
the child mid-probe.
Added
.harnessthemefiles now open in Harness. Double-click (or Open With) imports the theme —
validate → "Install / Install and Apply" — installing intoApplication Support/Harness/themes
and optionally applying its colors and appearance immediately. The format was already shipped;
the app-side wiring was the missing piece.- Regression tests pinning the daemon-reconnect backoff policy, the OSC 9;4 stale-progress
timeout, corruptlayout.jsonrecovery, reap-generation eviction order, and the onboarding
probe failure modes (~45 new tests).
Harness 1.7.0 (120)
Signed and notarized Harness 1.7.0 (120).
Harness 1.6.0 (119)
Signed and notarized Harness 1.6.0 (119).
Harness 1.5.1 (118)
Signed and notarized Harness 1.5.1 (118).
Harness 1.5.0 (117)
Signed and notarized Harness 1.5.0 (117).
Harness 1.4.1 (116)
Signed and notarized Harness 1.4.1 (116).
Harness 1.4.0 (115)
Signed and notarized Harness 1.4.0 (115).