Skip to content

Releases: vitali87/croft

v0.2.32

Choose a tag to compare

@github-actions github-actions released this 16 Oct 00:23

0.2.32

fix: The CodeQL side bar's Add Database button is one clean filled block inside its card, without the grey notches at its corners and the label row sticking out between them.
fix: When a croft remote connection drops, croft hands the terminal back before reporting the reconnect, so the progress lines no longer scroll over the editor and moving the mouse no longer types ^[[<35;…M; the session comes back fully redrawn once the host answers.

0.2.31

feature: The merge editor's CURRENT and INCOMING panes show Accept Current, Accept Incoming and Accept Both buttons above each conflict; a click resolves it, and the button for the side taken is ticked.
fix: The accept buttons on a conflict's <<<<<<< line look like buttons, and a narrow editor shows them with short labels instead of dropping them.
fix: The Testing view opens at once: finding the project's test runner, which could walk the whole tree, now happens in the background instead of before the view switches.
fix: Pressing r in the Testing view of a folder with no test runner says so instead of doing nothing.
fix: The version on the welcome screen no longer overlaps the logo or the tagline at any window size; where there is no room beside the logo it shows under it.
fix: Zooming the terminal's font re-draws the welcome logo and the other inline images at the new cell size, so a sixel image no longer grows over its neighbours.
fix: An update that fails says why in the update popup, such as "no internet connection", and offers Retry, instead of coming back as a fresh offer.
feature: Help: Update croft and its chord install the version the popup offers, and with none on offer check for a newer release now and say what they found: up to date, a newer version, or that the network could not be reached.

0.2.30

fix: Rust files now show inlay hints: croft asked rust-analyzer for hints up to a line past the end of the file, which it rejects, and the first-paint semantic colour request for a short file did the same.
fix: A repository whose .vscode/settings.json turns on editor.formatOnSave and names an editor.defaultFormatter croft does not run (Biome, Prettier) no longer has its files reformatted by the language server on save: croft saves them as typed and says once which formatter the project uses. editor.defaultFormatter, globally or in a "[language]" block, now maps into croft settings.

0.2.29

fix: Comments and trailing commas no longer show as errors in JSON files that allow them. tsconfig.json, jsconfig.json, .vscode/*.json, .devcontainer/*.json, *.code-workspace, .eslintrc, .babelrc, babel.config.json, *.jsonc, .croft/*.json and croft's own keybindings.json, snippets.json and settings files now open as JSON with comments, as in VS Code. Comments are allowed, and a trailing comma is a warning rather than an error. .jsonc, .eslintrc and .babelrc files now get the JSON language server too.
fix: Rust: opening a file no longer hides its cargo check errors and warnings. rust-analyzer's answer to croft's diagnostics pull and the cargo check results it pushes are now kept side by side, so PROBLEMS, the underline and the status-bar count keep both while the file is open.
fix: Rename Symbol, quick fixes and Format Document no longer skip a file whose Source Control diff or Explorer compare is open. The edits used to go to the diff, which changed nothing, and the file was neither edited nor written. With the editor split, they now edit the file's tab in whichever group holds it, instead of rewriting the file on disk under that tab's unsaved changes. Opening that file (Quick Open, the Explorer, a problem row) now opens the file beside its diff instead of landing on the diff.
feature: The editor's right-click menu now ends with Cut and Copy (with a selection), Paste and Command Palette, as VS Code's does, so text can be copied where the keys are awkward, such as a Linux terminal or the croft web page. In a rendered Markdown preview it offers only Copy, of the rendered text you selected.
fix: A save that fails partway, such as on a full disk, now leaves the file on disk exactly as it was, and croft no longer offers to reload its own half-written copy over the unsaved buffer.
fix: Format Document, Format Selection and format on save no longer apply a formatter's late reply to text typed after the request; the edits are dropped with a status saying so, and a format-on-save writes the file as it is instead of overwriting what you typed.
fix: Changing a setting from inside croft (Toggle Auto Save, picking a theme, the Settings hub, an MCP consent) now edits config.json in place: its comments, key order and trailing commas stay. It used to be rewritten as plain sorted JSON with every comment deleted.
fix: Notes: Delete Note deletes only the focused note or the note on the caret's line, and names the line and the note's first words; it no longer reaches down the file to delete a note out of view.
fix: Splitting the editor into more groups than the window can fit, or narrowing a split window, no longer crashes croft.
fix: A secondary side bar that does not fit beside the editor is hidden instead of crashing croft in a narrow window.
fix: Shrinking the terminal to a single row no longer crashes croft.
fix: Sheet: Sort by Column no longer crashes croft on a column that mixes numbers with values like 65a or 15%; numbers now sort before text.
fix: Opening an SVG nested thousands of levels deep shows it as XML text instead of crashing croft.
fix: TSV files are read and saved without CSV quoting: a cell that starts with " no longer swallows the rows after it, and saving a one-cell edit no longer rewrites 5" as "5""", strips the quotes from "Pro" ruler or adds a stray " line.
fix: Sheet: Delete Row no longer crashes croft when it removes the only row reaching the last column; the caret moves onto the last column left.
fix: Saving a spreadsheet grid now includes the cell still being typed into, rather than leaving it out while saying "Saved" and marking the tab clean. An xlsx cell committed by clicking another cell is now written too, instead of "Saved (0 cells)". An editable grid or hex view with nothing to save says so instead of calling itself a read-only preview.
fix: In a shared session, a --solo participant can save once the session owner quits (or crashes): the owner now heartbeats and says goodbye on the relay, the participant's files fall back to saving locally with a status saying so, and when an owner joins again those files rejoin it with the edits made meanwhile instead of forking.
fix: croft locale-template <lang> --write updates locales/<lang>.json in place, keeping every translation already in it and adding the new strings, and refuses a file it cannot read rather than replacing it. The printed template carries your own translations too, and the docs no longer tell you to redirect it onto the file, which emptied a translation in progress.
fix: croft setup-ghostty no longer deletes every Ghostty setting after an opening croft marker that has no closing marker; it drops only the stray marker line and keeps the rest of the config.
fix: Typing in a large source file no longer takes seconds per keystroke; the OUTLINE of a file over 64 KB is parsed in the background, once per pause in typing, instead of from scratch on every key.
fix: A rename, quick fix or Explorer move whose language server answers after you have typed into a file it edits no longer writes the new name over your fresh text; the edit is refused and the status bar says which file changed.
fix: Opening the diff of a heavily changed file (a lockfile after npm install, regenerated code) no longer freezes croft for minutes; the line diff stops searching after half a second, shows a coarser but exact diff, and the diff header says so.
fix: Committing from Source Control no longer freezes croft while the repository's pre-commit and commit-msg hooks run; the commit runs in the background, the message stays in the box until it lands, and a hook can no longer grab croft's terminal.
fix: On Linux, a copy whose clipboard helper (wl-copy, xclip, xsel) never exits, such as xclip on a stalled X forward, no longer freezes croft for good: croft gives up on the helper after two seconds and falls back to OSC 52, as paste already did.
fix: Adding a CodeQL database from GitHub, a URL or an archive no longer freezes croft for the whole download; it runs in the background, the GitHub download streams to disk instead of being held in memory, and the database appears in the side bar when it is ready.
fix: Opening a tiny .ods whose repeated cells expand to millions, or an .xlsx with values at opposite corners, no longer exhausts memory and crashes croft; a sheet over 10 million cells is refused with its size.
fix: croft notes.md for a file that does not exist yet opens an empty notes.md tab, rooted at its folder, and the first save creates the file, as code notes.md and vim notes.md do. It exited with "resolving workspace path: No such file or directory" before. A missing folder is still an error.
fix: Markdown files no longer get "Line length exceeds 80 characters" warnings. rumdl's line-length rule (MD013) is now off unless the project's own .rumdl.toml or .markdownlint.* sets a line length.
fix: A build carrying changes past its release heads the welcome card IN THIS BUILD and lists those changes, rather than the release's.
fix: Opening a small image whose header declares a huge canvas no longer crashes croft on image-capable terminals; images over 128 megapixels show their details without a preview.
fix: Toggle Block Comment (Shift+Alt+A) comments XML files (.xml, .xsd, .xsl, .xslt, .plist, .svg) with <!-- --> instead of doing nothing.
fix: Typing a Rust lifetime or loop label (fn foo<'a>, &'a str, T + 'static, break 'outer) no longer auto-inserts a closing quote that ends up dangling after it; a cha...

Read more

v0.2.28

Choose a tag to compare

@github-actions github-actions released this 08 Oct 11:23
9c7f088

fix: croft --help no longer shows maintainer notes (a remark about clap, an issue number) under --build-info (#853).

v0.1.942

Choose a tag to compare

@vitali87 vitali87 released this 19 Sep 16:37
b34b47f

Install

cargo install croft-software --locked

Or skip the compile — this release publishes prebuilt binaries:

cargo binstall croft-software

macOS (Apple silicon and Intel) and Linux musl (x86_64 and aarch64). The binary and every command remain croft.

Since v0.1.736, the headline additions:

  • Coding agents get first-class seats. Worktree lanes run several agents in parallel, each lane opening its pane with its agent already seated and its root row wearing the branch it is on. A per-agent ledger records every file changed while you looked away, the Explorer dots those files until you review them, and the review queue groups them by worktree. A lane diffs against the branch it was cut from, or against the snapshot you last reviewed.
  • Provenance: who typed each line. croft tracks the seat behind every line, survives a restart, follows undo and redo, and groups a Source Control diff by seat. A lens shows the map in place.
  • Files that used to be unopenable are now editable. Hex overwrite editing with nibble/ASCII typing and in-place byte save; CSV/TSV grid editing with a real cell cursor; xlsx editing through umya-spreadsheet, with formulas held for consent. Read-only viewers arrived for SQLite, .ipynb notebooks, docx/odt, archives, and audio/video.
  • Rendered logs became a workspace surface. ANSI colour rendered in place, tailspin highlighting, Cmd+F search, select and copy, Ctrl+click on a printed path:line, background indexing for large files, and a terminal pane's scrollback openable as a rendered log.
  • Bring your VS Code setup across. croft import-vscode carries a profile over, croft theme-import takes a colour theme from a file or straight from the marketplace, and extensions are mapped to croft's own equivalents. A Croft Light theme ships with full light chrome.
  • Deeper LSP and debugging. Folding ranges, expand/shrink selection, linked editing, format selection, on-type formatting, prepare-rename, colour swatches, document links, and whole-project diagnostics pulled from servers that answer them. Debug gained launch.json configurations with variable substitution and preLaunchTask, compounds, and a Debug This Test that breaks where the test last failed.
  • A three-way merge editor, whole-project PROBLEMS with a Fix with Navigator stream, layered settings withworkspace layers and live reload, keyboard macros with vim registers, bindable mouse gestures, and line-level git staging.
  • Remote and fleet. Open a workspace on the box a pane jconfig to a remote on connect, run one command across anamed host group, and see when a host is running a replaced binary.
  • Also: .http/.rest requests run from the editor, croft inline, croft view opens a file in the croft hosting the pane, terminals record as asciicasts and rewind the last minutes of output, PR review threads show as comment boxes, and an update popup offers a newer release staged until Relaunch.

What's Changed

  • feat(hex): overwrite-mode editing - nibble/ASCII typing, undo/redo, in-place byte save (v0.1.737) by @vitali87 in #191
  • feat(sheet): CSV/TSV grid editing - cell cursor, in-grid editor, structure ops, delimiter-true save (v0.1.738) by @vitali87 in #193
  • feat(sheet): xlsx cell editing through umya-spreadsheet, formulas held for consent (v0.1.739) by @vitali87 in #194
  • feat(markdown): render local images inline in the preview (v0.1.740) by @vitali87 in #196
  • feat(archive): browsable zip/jar/tar member list, members open with their real viewers (v0.1.741) by @vitali87 in #198
  • feat(notebook): rendered .ipynb view over the raw JSON (v0.1.742) by @vitali87 in #199
  • feat(docx): rendered read-only docx/odt preview (v0.1.743) by @vitali87 in #200
  • feat(sqlite): read-only database browser through the sheet grid (v0.1.744) by @vitali87 in #201
  • feat(media): audio/video info card from pure-Rust header parsers (v0.1.745) by @vitali87 in #202
  • feat(highlight): XML syntax highlighting like JSON (v0.1.746) by @vitali87 in #203
  • fix(pair,scm): make flaky timing tests deterministic, report dropped pair notes (v0.1.747) by @vitali87 in #204
  • feat(quick-pick): make picker result rows mouse clickable (v0.1.748) by @vitali87 in #206
  • feat(theme): Croft Light, a full light theme for the whole session (v0.1.749) by @vitali87 in #208
  • feat(editor): reopen closed editor tab via Cmd+K Shift+W (v0.1.750) by @vitali87 in #216
  • fix(theme): make the light theme legible on every surface (v0.1.751) by @vitali87 in #218
  • feat(nav): go forward and go to last edit location (v0.1.752) by @vitali87 in #219
  • feat(editor): detect indentation from file content on open (v0.1.753) by @vitali87 in #220
  • feat(problems): free-text filter in the PROBLEMS panel (v0.1.754) by @vitali87 in #221
  • feat(files): auto save on focus change (v0.1.755) by @vitali87 in #222
  • feat(preview): select and copy text in the rendered Markdown view (v0.1.756) by @vitali87 in #223
  • feat(git): stage and unstage selected lines (v0.1.757) by @vitali87 in #224
  • test: harden the two load-sensitive test harnesses by @vitali87 in #230
  • fix(theme): take the activity-bar icon ink from the theme by @vitali87 in #231
  • feat(remote): confirm before compiling croft on the remote box by @vitali87 in #233
  • fix(session-host): give each client its own outbound queue (#228, #229) by @vitali87 in #232
  • fix(session-host): a locked-out sole participant can reclaim control (#234, #235) by @vitali87 in #240
  • feat(session-host): surface a host left running a replaced binary (#238) by @vitali87 in #241
  • feat(remote): loud no-op installs + build provenance (#236, #237) by @vitali87 in #239
  • feat(app): local drift hint + one-key background reinstall by @vitali87 in #243
  • fix(build): never let an ancestor repo supply provenance by @vitali87 in #244
  • fix(update): harden the F9 self-reinstall flow by @vitali87 in #246
  • feat(session-host): re-exec the serve wrapper across binary updates by @vitali87 in #247
  • fix(self-install): resolve cargo by absolute path so GUI launches can rebuild by @vitali87 in #267
  • feat(statusline): segment the bar with hairline dividers and hover fills by @vitali87 in #268
  • Debug configurations: launch.json, variable substitution, preLaunchTask, attach (#250) by @vitali87 in #265
  • Layered settings: workspace layers, extends, platform scopes, live reload (#251) by @vitali87 in #266
  • User-defined problem matchers, tasks.json problemMatcher, and watch tasks by @vitali87 in #269
  • feat(lsp): color swatches + Change Color Presentation (#254 item 7) by @vitali87 in #277
  • feat(lsp): expand/shrink selection with tree-sitter fallback (#254 item 2) by @vitali87 in #272
  • feat(merge): three-way merge editor (#253) by @vitali87 in #270
  • feat(lsp): folding ranges with indentation/#region/comment fallback (#254 item 1) by @vitali87 in #271
  • feat(lsp): linked editing ranges — live paired-tag rename (#254 item 3) by @vitali87 in #273
  • feat(lsp): Format Selection (#254 item 5) by @vitali87 in #274
  • fix(editor): make Close All close every split group by @vitali87 in #283
  • ci: gate PRs on a version bump and fresh release notes by @vitali87 in #285
  • ci: add SonarQube Cloud analysis (free plan) by @vitali87 in #287
  • fix(spawn): keep child stderr off the tty during a live session by @vitali87 in #279
  • feat(terminal): open editor deep-link hyperlinks in Croft itself by @vitali87 in #280
  • feat(lsp): on-type formatting behind editor.format_on_type (#254 item 4) by @vitali87 in #275
  • feat(lsp): prepare-rename validation and prompt pre-fill (#254 item 6) by @vitali87 in #276
  • feat(lsp): document links via Ctrl+click (#254 item 8) by @vitali87 in #278
  • docs: claim work with the claimed label before starting on it by @vitali87 in #290
  • fix(workspace): relativise folders reached through a symlink by @vitali87 in #289
  • fix(lsp): send and receive positions as UTF-16 code units (v0.1.766) by @vitali87 in https://...
Read more

v0.1.736

Choose a tag to compare

@vitali87 vitali87 released this 17 Aug 23:29
f2615cc

Install

cargo install croft-software --locked

The binary and every command remain croft.

In this version: SVG files open as a rendered preview — shapes, text (system fonts), and embedded images rasterised through resvg into the inline-image pipeline — and "File: Reopen as Text" gives any preview tab its raw source per tab: an SVG's XML stays editable, the choice sticks across external-change reloads, and a broken SVG falls straight through to its source instead of erroring.

Since v0.1.701, the headline additions:

  • Hex viewer for binary files, with magic-byte routing so binaries are detected by content, not extension.
  • Multi-root workspaces (Phase 0): add folders to the workspace, a multi-root file tree, per-root git and per-root tooling, .code-workspace files, an SCM "Repositories" section, and persisted workspace folders.
  • Editor polish: indent guides, bracket-pair colorization, render-whitespace, auto-closing pairs, tab-label disambiguation, and a refined Replace All.
  • Language & debug tooling: peek definition, inline values and watch expressions in the debugger, LSP workspaceFolders support, and problem matchers.
  • Merge-conflict editor and tree sticky scroll.
  • A long tail of fixes: terminal-store hardening, re-rooted terminal sessions, wrap/caret and hit-rect corrections, and test-flake burndown.

What's Changed

  • docs: prefer the crates.io install command now the package is published by @vitali87 in #97
  • fix(terminal): seed the cd through the shell-startup window on Make Root by @vitali87 in #98
  • fix(welcome): size the release-note card before the logo so it never clips by @vitali87 in #101
  • fix(status): workspace-relative transient paths, middle-elide over-long messages by @vitali87 in #102
  • fix(app): zero section hit rects at frame start so stale Explorer rects cannot swallow COMMITS clicks by @vitali87 in #104
  • fix(status): complete the workspace-relative sweep for prompt labels and path statuses by @vitali87 in #106
  • feat(merge): guided merge-conflict resolution by @vitali87 in #108
  • test(terminal): harden the two PTY-timing flakes (#109, #110) by @vitali87 in #111
  • feat(dap): debugger WATCH section by @vitali87 in #113
  • feat(lsp): Peek Definition (Alt+F12) by @vitali87 in #116
  • feat(explorer): sticky scroll for the file tree by @vitali87 in #118
  • feat(problems): build problem matchers at the finished-command boundary by @vitali87 in #120
  • feat(editor): auto-closing pairs by @vitali87 in #122
  • feat(search): workspace Replace All polish by @vitali87 in #124
  • fix(explorer): sticky band vs drag-and-drop and drag-selection by @vitali87 in #127
  • fix(editor): show the caret on blank lines and at end-of-line in soft-wrap mode (v0.1.715) by @vitali87 in #128
  • feat(editor): indentation guides with active-guide highlight (v0.1.716) by @vitali87 in #130
  • feat(editor): bracket pair colorization (v0.1.717) by @vitali87 in #132
  • feat(editor): render whitespace with a selection/all/none cycle (v0.1.718) by @vitali87 in #134
  • feat(dap): inline variable values while stopped (v0.1.719) by @vitali87 in #136
  • fix(terminal): save and restore the per-workspace pane layout across re-roots by @vitali87 in #138
  • fix(git): discover the repo toplevel; resolve porcelain paths against it by @vitali87 in #140
  • feat(lsp): advertise workspaceFolders and answer workspace/workspaceFolders by @vitali87 in #142
  • feat(workspace): model the root-folder set as WorkspaceRoots by @vitali87 in #144
  • feat(explorer): generalize the tree to N workspace-root sections by @vitali87 in #146
  • feat(workspace): Add/Remove Folder to Workspace with full fan-out by @vitali87 in #148
  • feat(git): per-root git workers; SCM surfaces follow the active repo by @vitali87 in #150
  • feat(tooling): test runner, tasks, and run/debug follow the file's folder by @vitali87 in #152
  • feat(workspace): persist the folder set across sessions by @vitali87 in #156
  • fix(terminal): refuse a corrupt session store; write atomically by @vitali87 in #158
  • fix(terminal): fail safe when the foreground sample fails on a live pane by @vitali87 in #159
  • test(history): retry the C→D duration measurement's coalesce collapse by @vitali87 in #160
  • feat(scm): repositories overview section for multi-folder workspaces by @vitali87 in #162
  • feat(workspace): VS Code-compatible .code-workspace open and save by @vitali87 in #164
  • test(terminal): align the hyperlink test's PTY wait with the suite's 8s by @vitali87 in #166
  • feat(editor): disambiguate colliding tab titles with directory context by @vitali87 in #168
  • test(terminal): outlive scheduler stalls in the two load-flaky tests by @vitali87 in #171
  • feat(hex): binary files open in a windowed hex viewer instead of erroring (v0.1.734) by @vitali87 in #187
  • feat(magic): route files by content when the extension is absent or lies (v0.1.735) by @vitali87 in #188
  • feat(svg): rendered SVG preview via resvg, with a per-tab Reopen as Text/Preview round trip (v0.1.736) by @vitali87 in #189

Full Changelog: v0.1.701...v0.1.736

v0.1.701

Choose a tag to compare

@vitali87 vitali87 released this 10 Aug 22:58
9e4d3d1

croft is now on crates.io: this release is published as croft-software, so installing no longer compiles from the git URL.

Install

cargo install croft-software --locked

The binary and every command remain croft.

In this version: croft install-launcher no longer fails on every run — the plist cleanup deletes (keys osacompile never emits) are best-effort now, so the bundle gets signed and registered with Launch Services and Croft.app appears in Spotlight. Since v0.1.697: the package was renamed to croft-software for the registry, the session-host handshake is versioned so an attach is never stranded against a stale server (with observer-only attaches repainted and wedged peers evicted), and the collab relay's steal-prevention is asserted directly with hardened liveness probes.

What's Changed

  • fix(session-host): version the handshake and never strand an attach by @vitali87 in #88
  • fix(collab): assert relay steal-prevention directly, harden liveness probes by @vitali87 in #89
  • feat: rename the package to croft-software for the registry by @vitali87 in #90
  • docs(readme): reload the shell between rustup and cargo install by @vitali87 in #93
  • fix(launcher): best-effort plist cleanup deletes so install-launcher succeeds by @vitali87 in #95

Full Changelog: v0.1.697...v0.1.701

v0.1.697

Choose a tag to compare

@vitali87 vitali87 released this 07 Aug 22:49
1f879d3

The first tagged release of croft: a three-pane, VS Code-style IDE that runs entirely in the terminal — tree-sitter + LSP editing, an integrated multi-pane terminal with quick-select and command decorations, git tooling, image/PDF/spreadsheet previews, a debugger, a test runner, and identical behavior locally and over SSH.

Install

cargo install --git https://github.com/vitali87/croft.git --locked

In this version: a file that changes on disk but cannot be re-read no longer fails silently — the tab keeps its last good view and the status line says so. Recent versions added language-server pre-warm at startup (rust-analyzer begins indexing the moment croft opens), a Go Back keyboard chord (Ctrl+-), quick-select matches that wrap the pane edge, a scrolling OUTPUT channel picker, and a completion popup clamped to its pane.

What's Changed

  • fix: resolve the adversarial-review findings on the 0.1.653 batch by @vitali87 in #2
  • fix: bind session and collab sockets 0600 without touching the process umask by @vitali87 in #3
  • fix: resolve the adversarial-review findings on the Finder/explorer span by @vitali87 in #4
  • fix: resolve the adversarial-review findings on the pair/navigator span by @vitali87 in #5
  • fix: resolve the adversarial-review findings on the local-model navigator span by @vitali87 in #6
  • fix(pair): navigator lifecycle hardening (note anchors, host lock liveness, draft loss, child reaping) by @vitali87 in #7
  • fix(pair): pair-host hardening (diagnostics routing, UI deadlock cycle, send-failure atomicity, busy-gate ordering) by @vitali87 in #8
  • fix(collab): harden the Phase D engine against traversal, dead links, wedged peers, stale panes, and bootstrap lockout by @vitali87 in #9
  • fix: adversarial-review fixes for the themes/dtach/search-seed span by @vitali87 in #10
  • fix: adversarial-review fixes for the testing/LSP span (M5/M6, call hierarchy, logpoints, occurrences) by @vitali87 in #11
  • fix: span 20272ce..c3aebda review — inlay caret sides, Testing border clicks, queued graph refetch, alt-selection neighbour tie-breaks by @vitali87 in #12
  • fix: themes/testing span review — disabled-runner guard, palette-true uncaptured source, preview theme rebuild, non-iTerm2 canvas bg by @vitali87 in #13
  • fix: terminal span review — clamp panic, clock-anchored timestamps and annotations, copy-mode drift sync, sticky-header sanitization by @vitali87 in #14
  • fix: copy-mode span review — WRAPLINE-aware copy, capture jump in narrow panes, pane-bound copy mode, tiny-frame panics, host-scoped history by @vitali87 in #15
  • fix(terminal): six inline-image and scrollback-key defects from the imgcat span review by @vitali87 in #16
  • fix(terminal): four quick-select and trigger-scanner defects from the b1dbc63 span review by @vitali87 in #17
  • fix(terminal): four shell-integration defects from the 4a7b33d span review by @vitali87 in #18
  • fix: hyperlink-span review — OSC 8 scheme allowlist, Ctrl+F passthrough, pane-bound clock-anchored terminal find, encoding-reopen history by @vitali87 in #19
  • fix: keybind-span review — snippet stop clamping, honest failed reverts, iTerm2 forwarder sweep, border wheel fallback, filtered Problems counts by @vitali87 in #20
  • fix: timeline-span review — pane drops, snapshot history, inline blame hardening by @vitali87 in #21
  • fix(testing): testing-clicks span review — six confirmed defects by @vitali87 in #22
  • fix(scm,tasks,lsp): adversarial span review of the task runner, hunk staging, and workspace symbols by @vitali87 in #23
  • fix(editor): adversarial span review of auto save, merge resolution, and find and replace by @vitali87 in #25
  • fix(explorer,terminal,lsp): adversarial span review of gitignore greying, pane drag, and LSP reload resync by @vitali87 in #26
  • fix(remote,outline): keep the background install off the attached session's terminal and stop the outline drain discarding the live reply by @vitali87 in #28
  • fix(editor,terminal): free Alt for multi-cursor by moving Go to Definition to Ctrl+click, and stop the switcher rail painting past its own width by @vitali87 in #35
  • fix(terminal,editor): stop the pane pill erasing its maximize button, make the overflowing rail scrollable, and delete every caret's line by @vitali87 in #36
  • fix(editor,lsp,app): format-on-save writes the file you asked for, folds and sticky scroll stop hiding the caret by @vitali87 in #38
  • fix(testing,fs_watch): a failing test is no longer reported as passing, and background tabs see external writes by @vitali87 in #39
  • fix(editor,app): saving keeps a file's encoding, Reopen with Encoding stops eating unsaved work, split-pane git bars refresh by @vitali87 in #40
  • fix(remote,ci): ship only build inputs to a remote, resolve rustup targets against the pinned toolchain, and add CI covering linux musl and android builds by @vitali87 in #48
  • fix(editor): refuse a save the encoding cannot represent instead of silently writing HTML character references by @vitali87 in #54
  • fix(ports,app): give every relay request its own id, judge a port stopped only against the whole box, keep stop-forwarding from blacklisting the port, and stop the minimap painting over its menu by @vitali87 in #43
  • fix(editor): keep the image/PDF canvas at the default background on Kitty hosts by @vitali87 in #59
  • fix(collab): make the CROFT_COLLAB_* env read inert under cfg(test) by @vitali87 in #61
  • fix(session): make the CROFT_SESSION_* env read inert under cfg(test) by @vitali87 in #63
  • fix(app): make the quick-select scroll test immune to the child shell's prompt timing by @vitali87 in #66
  • fix(tests): give the arrival-stamped OSC 133 duration asserts a load-proof margin by @vitali87 in #70
  • fix(tests): stage the cwd-impersonation test on the forged claim, not any OSC 7 by @vitali87 in #71
  • fix(search): make the cancellation test structural instead of wall-clock by @vitali87 in #73
  • fix(editor): open a reloaded PDF directly at the reader's page by @vitali87 in #74
  • fix(quick-select): stitch soft-wrapped rows so a match crossing the pane edge is seen whole by @vitali87 in #75
  • docs: add --locked to every documented cargo install command by @vitali87 in #76
  • fix(tests): assert the minimum of five source-control click timings by @vitali87 in #77
  • fix(tests): stop racing wall-clock deadlines against suite load by @vitali87 in #78
  • fix(fmt): bring main to its own pinned rustfmt and gate it in CI by @vitali87 in #79
  • fix(tests): announce the zsh skip instead of hard-failing or going silent by @vitali87 in #80
  • fix(output): scroll the channel dropdown so overflow channels stay reachable by @vitali87 in #81
  • fix(completion): floor the popup at its pane's own edges by @vitali87 in #82
  • feat(nav): give Go Back a keyboard chord, palette entry, and menu item by @vitali87 in #83
  • feat(lsp): pre-warm the workspace's evident language servers at startup by @vitali87 in #84
  • fix(tests): let the collab no-echo check settle trailing caret frames by @vitali87 in #85
  • fix: end the $HOME test races and report failed external reloads by @vitali87 in #87

Full Changelog: https://github.com/vitali87/croft/commits/v0.1.697