Releases: soldforaloss/paramux
Release list
v0.1.19
Prerelease for testing. Windows x64 + ARM64 portable builds — verify the ZIP hash against SHA256SUMS-windows-<arch>.txt before extracting; see README "Verifying a build".
The completeness release: the last composed labels localize, the German smoke joins the permanent verification fleet, and the locale policy is written down.
i18n — composition complete
- Layout-slot submenu labels (Slot word, saved/empty suffixes, the rename prefix, the renamed banner) compose from table pieces.
- The activity timeline localizes: relative time composes prefix+value+suffix so German can lead with "vor" where English trails with "ago"; the now/WORKING/WAITING/DONE/ERROR display words come from the table (wire tags never localize). The non-empty table tests learned about deliberately empty composition pieces, with a both-sides guard.
scripts/smoke-de.ps1: the runtime German smoke is a permanent script (XDG_CONFIG_HOME override — the real config is never touched) and joins the pre-train sweep, now a quintet.- Locale policy decided and documented: a locale is one struct literal plus one
setLocalearm, compiled in. Parsed-file locales rejected while every call site reads statics.
Full verification: every commit gated by zig build test -Dtest-filter=win32; full suite green at the release SHA; the regression quintet (restore E2E, 10-check serve E2E, layout round-trip, de-DE runtime smoke, probe-gated soak) green at HEAD; both arch ZIPs hash-verified via smoke-zip.
v0.1.18
Prerelease for testing. Windows x64 + ARM64 portable builds — verify the ZIP hash against SHA256SUMS-windows-<arch>.txt before extracting; see README "Verifying a build".
The resilience release: the train hardens against the internet, and the chrome's German goes wall to wall.
CI + train hardening
- Both Windows workflows fetch dependencies with bounded retries (
zig build --fetch, three attempts, 30s backoff) before any build touches the network — adeps.files.ghostty.orgoutage failed a release gate once; transient CDN faults are now absorbed.
i18n — wall to wall
- Slice 12: all 26 remaining inline banners (plain and conditional
setBannersites — layout errors, broadcast toggles, topmost pin, install tip, profile errors, worktree flow, clipboard) move to the strings table. - Slice 13: the settings window — buttons, all five checkboxes, both search cue banners, focus-follows, background blur — with proper German quotes on the Explorer checkbox.
- Composed labels: "Workspace N" (sidebar headers, the window-title segment) and the untitled-pane "shell" fallback compose from table pieces; wire titles untouched.
- Runtime-proven: a de-DE smoke boots the GUI under
XDG_CONFIG_HOMEwithui-language = de, renders, and answers IPC — the whole German table exercised live, not just at comptime.
UI
- Pane rows inherit the workspace accent: the focused stripe takes the workspace color over the theme accent, and other rows in an accented workspace carry a half-width tick (blended when parked) — grouping reads down the whole tree. High contrast keeps the fixed palette out.
- Hover on an accented row keeps the tick visible.
Decisions
- No
attention --csv: the palette export owns CSV; scripted consumers shape the JSON fromparamux attention.
Full verification: every commit gated by zig build test -Dtest-filter=win32; full suite green at the release SHA; the regression quartet green at HEAD; de-DE runtime smoke; both arch ZIPs hash-verified via smoke-zip.
v0.1.17
Prerelease for testing. Windows x64 + ARM64 portable builds — verify the ZIP hash against SHA256SUMS-windows-<arch>.txt before extracting; see README "Verifying a build".
The fluency release: the chrome finishes learning German, and the fleet watches itself in place.
i18n — the menu table is complete
- Slices 10 and 11 close out every static menu and dialog string: workspace-close, the empty-state rows, Quick Terminal, Toggle Inspector, the help menu, the toggle pairs (broadcast include/exclude, pin/unpin, mute/unmute), the accent Default entry, dialog titles (Health, Watch, the help boxes), and the update banner's Install / Open Release buttons. Under
ui-language = dethe whole menu system speaks German; ratio numbers and runtime-composed labels stay verbatim by design. The ledger indocs/paramux/i18n-notes.mdrecords the sweep-grep lesson: match every menu handle, not just the main one.
Fleet CLI
attention --watch --interval=Nre-prints the timeline in place (ANSI clear + home), mirroringstatus --watch.- Hovering a workspace header now peeks its note — the same hover card pane rows use, showing the workspace note when one is set.
Train + docs
scripts/smoke-zip.ps1: the release ZIP smoke is a permanent parameterized script (hash, VERSIONINFO,version --json, capability probes — 7 checks), first used on this release.- Sidebar rows as UIA elements recorded as a deliberate deferral in the accessibility checklist (the inbox and fleet-summary property carry the same information); capability-parity gains localized-chrome and sidebar-UIA rows; windows.md points at the fleet CLI map.
Full verification: every commit gated by zig build test -Dtest-filter=win32; full suite green at the release SHA; the regression quartet (restore E2E, 10-check serve E2E, layout round-trip, probe-gated soak) green at HEAD; both arch ZIPs hash-verified via smoke-zip.
v0.1.16
Prerelease for testing. Windows x64 + ARM64 portable builds — verify the ZIP hash against SHA256SUMS-windows-<arch>.txt before extracting; see README "Verifying a build".
The reachability release: things that existed but hid — restart from the keyboard, the timeline without a server, three more menu blocks in de-DE.
Fleet CLI
paramux attentionprints every pane's timeline JSON — the CLI twin ofGET /attention, same token-gated IPC method, no serve process needed. Covered by the serve E2E (now 10 checks).restart_paneis a real action: Command Palette ("Restart Pane") and IPC (perform-action restart_pane), sharing the context menu's body — fresh shell in the pane's directory, old pane closes (dead panes skip the confirm). Fleet users restarting crashed agents no longer need the mouse.serve --quietsuppresses the per-request log line (the soak uses it).
i18n
- Slices 9 in total: this release adds slice 8 (navigation/workspace menu block) and slice 9 (splits + window/workspace ops) plus the watch-window fallback title — under
ui-language = de, the pane context menu is now almost entirely German.setLocaleswap and unknown-tag fallback are test-locked; the ledger indocs/paramux/i18n-notes.mdtracks the 11 literals that remain.
Docs + receipts
- Attention timelines documented as bounded (8 transitions per pane) with the accumulate-by-polling guidance; serve-api cross-links the CLI twin.
- HACKING's verification-scripts table lists the serve and layout-roundtrip E2Es; the README control-surface bullet links the fleet CLI map; CI's 250 ms cold-start gate and
doctor --json's gallery line verified in place. - New
scripts/e2e-layout-roundtrip.ps1: gallery → slot → file → slot → file, byte-identical, against any binary (-Com).
Full verification: every commit gated by zig build test -Dtest-filter=win32; full suite green at the release SHA; pre-train quartet at HEAD (4-phase restore E2E, 10-check serve E2E, layout round-trip, probe-gated soak); both arch ZIPs hash-verified.
v0.1.15
Prerelease for testing. Windows x64 + ARM64 portable builds — verify the ZIP hash against SHA256SUMS-windows-<arch>.txt before extracting; see README "Verifying a build".
The courtesy release: the fleet CLI gets softer edges (slot-less imports, solo panes respected by fan-out sends, a one-page reference) and the harness keeps promoting its own findings into gates.
Fleet CLI
import-layout <file-or-gallery-name>with no slot number lands in the first empty slot; when all five are occupied it errors with a pointer atopen --listinstead of clobbering anything.send --all-panesnow honors the broadcast opt-out ("solo") flag, matching GUI broadcast typing. The additiveopt_outfield rides the v2 wire; target a solo pane explicitly with--surface-id. Fixture-tested including a beyond-i64id.doctorvalidates the four embedded gallery templates in the running binary (a release with a rotten gallery now fails loudly) — andupdate --check's release-notes URL on the newer path plusstatus --watch --noteswere verified as already shipped.- docs/paramux/fleet-cli.md: every automation verb on one page, linked from getting-started.
Attention
- The
read_attentionsnapshot,GET /attention, and the JSON/CSV exports carry each pane's workspace note — triage tooling can group a wave by what each workspace is for (additive field).
Hardening
- IPC clients retry a busy pipe under a 3-second deadline instead of a single wait round — fleet scripts running
serve+status+notifyconcurrently no longer flake (batch-14 soak evidence). serveprints one operability line per request (elapsed ms + path).- The soak gate fails if the
/attentionprobe misses a single sample, and its workspaces column counts real distinct workspaces. - The serve E2E grew to nine checks (
/panes/<id>/textboth sides of auth); pane ids are regex-extracted becauseConvertFrom-Jsoncorrupts ids above 2^53. - Long-poll on
/attentionis a documented non-goal: serve is a single-threaded loop, andIf-None-Matchpolling costs one bodyless 304.
UI + i18n
- i18n slice 7: the first pane context-menu block (Copy/Paste/Select All/Find/Find in All Panes/Scrollback/Watch/Restart/Worktree) speaks de-DE under
ui-language = de.
Receipts + docs
- Perf receipts at packaged 0.1.14 (ReleaseFast x64): CLI cold start 12.4 ms best / 14.5 ms avg vs Windows Terminal 49.6 ms; GUI idle 118.3 MB — inside the PRD budgets.
- CONTRIBUTING records the
ipc.jsonU64rule for u64 wire ids (and its PowerShell twin); session-schema documents the layouts.json shape and names array.
Full verification: every commit gated by zig build test -Dtest-filter=win32; full suite green at the release SHA; 4-phase restore E2E + 9-check serve E2E + soak self-tests re-run at HEAD; both arch ZIPs hash-verified.
v0.1.14
Prerelease for testing. Windows x64 + ARM64 portable builds — verify the ZIP hash against SHA256SUMS-windows-<arch>.txt before extracting; see README "Verifying a build".
The trustworthiness release: the new soak probe caught a shipped CLI crash the same hour it landed, and the serve E2E proved (then fixed) a revalidation contract that could never trigger.
Reliability
statuspanicked on half of all pane ids — any surface id abovei64max parses as.number_stringin std.json, and the readers accessed.integer(runsilently dropped those panes). All CLI JSON id reads now go through a tolerantu64reader (ipc.jsonU64) with amaxInt(u64)regression test. Found live by the soak's new/attentionprobe./attention's ETag could never 304: it hashed the whole body including the per-callexported_at_msstamp. The hash now starts at the panes key, so unchanged timelines revalidate (proved by the new E2E).- A second
paramux serveon a busy port fails fast instead of double-binding and silently stealing traffic (WindowsSO_REUSEADDRsemantics). Quick restarts are unaffected.
Layouts
- The template gallery ships inside the binary:
paramux import-layout 2 grid-2x2works from a bare install — a bare name that isn't a readable file resolves against the four bundled templates (kept byte-identical todocs/paramux/layouts/by a drift test), and a miss lists the names. - Slots answer to their names everywhere:
paramux open --name=api-fleet,export-layout --name=..., andimport-layout --name=...all address slots by saved name, case-insensitively. open --list(and the new name resolver) tolerate a UTF-8 BOM onlayouts.json— the one reader the earlier BOM sweep missed.
Fleet CLI + serve
scripts/e2e-serve.ps1: a six-check scripted E2E for the HTTP contract (/status200+body,/attention200/401/ETag/304).status --notesshows the workspace accent from the v2 wire (# workspace 2 accent: 5 note: api fleet), with a fixture test.doctor --firenow round-tripsread_attentionafter the signal cycle, proving the timeline snapshot sees the fired signals.notify --surface-id=<id>(explicit pane targeting) verified as already shipped; malformed values hard-error instead of misrouting.
UI
- Palette "recent" chips follow MRU commands into ranked (typed) views, and the right-edge slot resolves chip-vs-keybind overlap explicitly (the keybind hint wins).
- i18n slice 6: all eleven hint-strip texts (first-run tips, broadcast, zoomed, wave, git segment, defaults) come from the strings table with de-DE entries under
ui-language = de.
Soak + docs
- The soak harness probes
GET /attentionover HTTP every minute (att_httpCSV column) and reports the real distinct-workspace count instead of a hardcoded 1. docs/paramux/layouts/README.mdcovers the gallery and name addressing; CONTRIBUTING records the PowerShell 5.1 double-quote-in-native-args hazard.
Full verification: every commit gated by zig build test -Dtest-filter=win32; full suite green at the release SHA; serve E2E, gallery/name smokes, and three soak self-tests run against the built binaries; both arch ZIPs hash-verified.
v0.1.13
Paramux v0.1.13 — the precision release: pixel-true screen-reader geometry, layouts that travel as files, and one action to acknowledge the whole fleet.
Screen readers, fourth pass
- True wide-glyph geometry — bounding rectangles and point hit-testing now use each character's real terminal columns (from the snapshot pin map): a CJK glyph measures its two cells and its second cell hit-tests to the glyph. The one remaining case (a wide glyph at line END reads one cell short) is documented in the checklist.
- The README and capability-parity docs finally say all this — accessibility is a listed feature with a comparison row against web-view muxes and Windows Terminal.
Layouts that travel
export-layout <slot> [file](or--all=<dir>) andimport-layout <slot> <file> [--name=...]— slots round-trip as standalone.layout.jsontemplates with session-restore-grade validation on import.- Rename Slot N... in the context menu — built on a new generic prompt overlay (the reusable text-input the overlay system lacked; more prompts can now be one purpose-enum entry away).
- All three CLI layout readers tolerate UTF-8 BOMs (hand-edited and PowerShell-written files carry them; the restore E2E's own writeback was quietly re-BOMing layouts.json — fixed, on-disk file repaired).
Fleet conducting
- Clear All Attention — one palette/IPC action acknowledges every pane (with a count banner); the hint strip teaches it automatically when 2+ panes alert; interaction with attention-jump verified end-to-end.
GET /attentiononserve— every pane's timeline over HTTP behind the bearer token, powered by a dedicated token-gated IPC method (read_attention, UI-thread marshaled). E2E: 200 with the token, 401 without.- The palette marks its MRU head with a quiet "recent" chip; workspace accent colors ride the v2 payload;
status --json; Enter in the settings search hands focus onward. - i18n slice 4 (settings section labels, full de-DE);
record --width/--height; doctor reports session-autosave freshness; perf receipts regenerated (13.2 ms CLI cold start vs Windows Terminal's 47.6 ms; 133.5 MB idle — inside the PRD targets as a debug build).
Install
Pick your architecture's ZIP + SHA256SUMS, verify, extract, run — or paramux update. Unsigned test build; see the README.
v0.1.12
Paramux v0.1.12 — the polish release: the fleet's plumbing answers faster, its states read at a glance, and the recent past ranks first.
Faster plumbing
- ETags everywhere on
serve—/statusjoins the pane-text route with content-hash ETags and304 Not Modified; pollers stop re-downloading identical payloads. - Attention webhooks retry once after a 2s backoff (cold functions and waking dashboards get their second chance; nothing reorders).
update --version=Xpin-installs any published release — the tested sideways/downgrade path, same checksum verification.doctor --jsonfor CI and dashboards;record --quietfor scripts.
States you can see
- Sidebar markers for invisible states — muted panes show a speaker-off glyph, broadcast-opt-out panes a circled slash.
status --notesprints workspace scratch notes (the automation payload gained an additivenotefield per workspace).- The palette's MRU finally ranks — the five most recently executed actions lead the empty-query list (the MRU was recorded but never consumed until now).
- Quick-terminal frames clamp into the work area after resolution changes; attention exports gain window/workspace attribution and a CSV sibling with tested quoting.
- Localized control type follows
ui-language; i18n slice 3 converts the chord-free context-menu titles.
Receipts
- The restore E2E grew phase D:
paramux openprovably preserves layout slot names (and two harness lessons are in HACKING — absolute tool paths, BOM-less JSON writes for PS 5.1). - CI smokes the release-notes generator; the perf-budget line names the measured binary version; three scope decisions are documented in the repo (no HTTP
/attentionyet, slot renames are hand-editable JSON for now, the BOM gotcha).
Install
Pick your architecture's ZIP + SHA256SUMS, verify, extract, run — or paramux update. Unsigned test build; see the README.
v0.1.11
Paramux v0.1.11 — the responsiveness release: screen readers react the moment agents do, layouts get names, and a dozen sharp edges come off the CLI.
Screen readers, third pass
- TextChanged fires on attention transitions — the active pane's done/waiting/error raises the event immediately (the 3s heartbeat stays for plain output), so Narrator re-reads at the moment that matters.
- Page unit = the viewport — "read current page" covers the visible screen instead of all scrollback.
docs/paramux/accessibility-testing.md— the per-release Narrator hardware checklist, with the known approximations listed so they aren't re-filed.
Layouts and fleets
- Layout slots have names — saving names the slot after the workspace; menus read "Slot 2 — api server",
open --listshows them, andparamux openno longer drops names on its slot-5 rewrite. open --slot=Napplies any saved slot; workspace-levelenvhas a gallery example (agents-with-env.layout.json).- Attention export carries window id + workspace ordinal per pane for multi-window fleets.
CLI sharp edges
notify --focusedtargets the focused pane from outside any pane — and without a pane id, notify now says the console escape won't reach paramux instead of silently no-opping.recorddefaults to a timestampedparamux-<unix>.cast(no more silent overwrites);status --watch --interval=N;version --jsonfor tooling.serve /panes/<id>/textanswers304 Not Modifiedvia content-hash ETags — pollers stop re-downloading scrollback.doctorcounts leftover crash dumps; a banner on launch says when dumps from a previous run exist; Reset Quick Terminal Frame rescues off-screen frames.- Settings search got a cue banner; i18n slice 2 moves the banner texts into the string table with full de-DE coverage (and a test that a locale can't ship half-translated).
Receipts
- Soak CSV rows now carry the binary version; the restore E2E refuses to run against a busy instance; HACKING lists the three scripted verifications beyond the unit suites.
Install
Pick your architecture's ZIP + SHA256SUMS, verify, extract, run — or paramux update. Unsigned test build; see the README.
v0.1.10
Paramux v0.1.10 — the follow-through release: the screen-reader story gets real navigation, restore gets receipts (and two latent memory bugs die), and the fleet grows conductor conveniences.
Screen readers, second pass
- Real Word unit — word navigation is ink-runs-plus-trailing-blanks (skips blank lines in one step); Format/Paragraph still track lines.
GetVisibleRangesreports the true viewport (pin-accurate byte mapping), bounding rectangles are line-granular screen rects, andRangeFromPointhit-tests the real cell grid — Narrator's highlight now lands where the text is.- TextChanged heartbeat — with a screen-reader attached, content changes raise UIA TextChanged (3s cadence) so live-follow re-reads without polling blind.
doctornow reports UI Automation health and whether a screen-reader client is listening.
Restore you can trust
- Two latent restore bugs fixed — session-state strings were parsed as slices into a freed buffer, and spawn argv could reference a freed command string. ReleaseFast masked both; the new
scripts/e2e-restore-commands.ps1(three phases: opt-in gate, capture, relaunch) caught them and now passes end to end. Restored fleets actually relaunch their commands. - Save Session Now — new
save_sessionaction (palette +perform-action) writes the session immediately instead of waiting for the ~60s autosave. - Workspace-level
envin layout templates applies to every pane (pane entries win);open --listshows the five layout slots and the project-layout status.
Conductor conveniences
- Quick terminal remembers its frame across hides and restarts.
- Cross-workspace pane drags show the drop preview over the target header.
- Export Attention Log — every pane's attention timeline (states, timestamps, messages — never pane text) to
attention-log.jsonon demand. record --idle-limitcaps quiet stretches on playback; settings search flags misses in place and matches many more keywords; de-DE proof locale behind the newui-languageoption (chrome slice only, chords never translate).- Opt-in local crash minidumps (
crash-minidumps) — written to the state dir, never uploaded, off by default. - New receipts tooling:
scripts/start-soak.ps1(detached 72h gate launcher with PASS/FAIL marker) andscripts/generate-release-notes.ps1;docs/paramux/serve-api.mddocuments the HTTP bridge.
Install
Pick your architecture's ZIP + SHA256SUMS, verify, extract, run — or paramux update. Unsigned test build; see the README.