Skip to content

Releases: schubydoo/claustrum

v1.9.0

Choose a tag to compare

@claustrum-ci claustrum-ci released this 15 Aug 01:49
ef6506e

Compare with 1.8.0

Features

  • The daemon can now append every JSON-RPC frame in both directions to a JSONL capture file for diagnostics, opt-in via -wire-log (with -wire-log-max-string bounding how much of each string value is kept, 0 for whole payloads) or the matching wire-log / wire-log-max-string keys in claustrum.conf, off by default, with credentials redacted by key only (best-effort — a secret inside a payload string is not caught); it is a pure side channel, so frames on the wire are byte-identical whether or not it is on. (#268)

v1.8.0

Choose a tag to compare

@claustrum-ci claustrum-ci released this 09 Aug 22:59
b594e54

Compare with 1.7.3

Features

  • -install no longer bounds the -cli-url download at 5 minutes by default, so a slow-but-honest download the reference completes now succeeds rather than failing with cliError "download failed: context deadline exceeded (Client.Timeout or context cancellation while reading body)"; opt-in via -cli-download-timeout or the cli-download-timeout key in claustrum.conf. (#246)
  • -install no longer bounds the <cli> --version runnability probe at 15 seconds by default, so a slow-but-working CLI installs instead of failing with cliError "installed cli at <path> is not runnable" and having its staged binary deleted; opt-in via -cli-probe-timeout or the cli-probe-timeout key in claustrum.conf. (#245)
  • -install no longer caps the decompressed CLI or the download body at 512 MiB by default, so a large CLI installs instead of failing with a cliError the reference daemon never produces; opt-in via -max-cli-bytes or the max-cli-bytes key in claustrum.conf. (#238)
  • files.extract_tar no longer caps extraction at 512 MiB by default, so a large tree extracts instead of failing with an error the reference daemon never produces; the cap is now opt-in via -max-extract-bytes or the max-extract-bytes key in claustrum.conf. (#236)
  • files.read no longer refuses a non-regular path by default, so reading a character device such as /dev/null returns {"content":"","exists":true} as the reference daemon does instead of a claustrum-only -32602 "files.read: not a regular file"; the guard is now opt-in via -files-read-regular-only or the files-read-regular-only key in claustrum.conf, which restores the bound on a writerless FIFO and on unbounded device reads. (#250)
  • The daemon no longer bounds every git invocation at 60 seconds by default, so a slow-but-honest git on a large or cold repository completes instead of being SIGKILLed into a claustrum-only -32603 "signal: killed" (or a git worktree remove timed out after …) where the reference showed no such deadline at the durations probed; now opt-in via -git-timeout or the git-timeout key in claustrum.conf. (#248)
  • -install no longer bounds the linux ldd --version libc probe at 5 seconds by default, so a slow ldd's answer stands instead of being killed into a fallback classification — the reference daemon showed no such deadline against a stalled ldd at the durations probed; the deadline is now opt-in via -libc-probe-timeout or the libc-probe-timeout key in claustrum.conf. (#251)

Fixes

  • The exit stream frame now arrives at most 5 seconds after a spawned process exits, instead of waiting forever when the command left a background grandchild holding its stdout. (#186)
  • A reply's id is now the request's id decoded and re-encoded rather than the raw bytes echoed back, so a non-integer id such as 1.0, 1e2 or {"b":1,"a":2} is canonicalized exactly as the reference returns it. (#188)
  • -install now creates the CLI directory chain owner-only (0700) like the reference, instead of 0755 which left the installed CLI world-traversable. (#191)
  • A non-200 CLI download now reports download failed with status <code> like the reference, instead of a differently-worded message that also leaked the download URL into the __INSTALL_RESULT__ line. (#197)
  • A zero-byte -token-file is now a fatal startup error instead of producing a daemon that listens but can never be authenticated to, and the daemon now logs a failed token-file unlink, a child stream read error, and a discarded stdin queue rather than passing over them in silence. (#200)
  • Report the reference daemon's error text for files.list on a non-directory, files.extract_tar failing to open the archive, and process.spawn with an unusable cwd. (#175)
  • Expand a leading ~ to the home directory on every path parameter, so files.*, git.* and process.spawn no longer fail or create a literal ~ directory. (#176)
  • A ~-prefixed path is now cleaned lexically like the reference — ~/link/../x means ~/x even when link is a symlink, ~//f and ~/a/./b and a trailing ~/wt/ collapse, and bare ~ alone stays verbatim — which is wire-visible on eight frames, most sharply on files.stat/files.validate where a trailing separator on a regular file previously answered not a directory and now succeeds. (#205)
  • files.extract_tar now carries the reference's create <entry>: prefix when an archive entry's target lands on an existing directory, so the error field reads create ../sub: open <dest>: is a directory instead of the bare Go error. (#226)
  • files.extract_tar now refuses a Windows volume or UNC share root as destDir — previously only the literal / was refused, so C:\ passed the guard and reached the os.RemoveAll that clears the destination before extracting. (#225)
  • files.read now applies the reference's 256 KiB (262144-byte) default cap when maxBytes is absent, zero, or negative, instead of reading the file without any limit; an explicit positive maxBytes is still honored verbatim. (#189)
  • Wait for the login-shell PATH extraction before the first process.spawn builds its child environment, so the first command finds binaries in ~/.local/bin and nvm. (#168)
  • git.list_branches reads git's stdout only and reports a failed for-each-ref as -32603 exit status <n>, so a broken ref no longer lists git's warning: line as a branch and a corrupt refs database no longer returns that failure as branch names. (#213)
  • git.status and git.list_branches now recognize a bare repository and a .git directory as repositories, and git.worktree_create ignores a sourceBranch that is not a local branch instead of failing the request. (#178)
  • git.status now trims the whole porcelain output before splitting it, so the first change loses its leading space and every later one keeps it, matching the reference. (#185)
  • Keep the leading space on git.status porcelain lines so a client can tell a staged change from an unstaged change. (#167)
  • git.status now reads only git's stdout, so warnings git writes to stderr (an unreadable core.excludesFile, for example) no longer appear as entries in changes and no longer make a clean repo report as dirty. (#193)
  • The daemon now recovers from a panic in any request handler instead of crashing, replying -32603 "recovered panic: <v>" and staying up for other connections, so a handler bug can no longer orphan managed child processes or leave a stale socket behind. (#243)
  • -install no longer executes ldd when the musl loader marker already answers the question, and it consumes the local -cli-zst blob once decompression succeeds rather than only on a fully successful install — both matching the reference. (#216)
  • -install now removes leftover .fetch-* download temporaries, which previously counted against -cli-keep and could delete every real CLI version, and it prunes only after an install that succeeded. (#180)
  • -install stages the CLI at .fetch-<random> and sweeps stray *.zst blobs so leftovers no longer take a -cli-keep slot; an occupied cliPath is cleared instead of failing with a rename error; a failed cli-dir creation carries the mkdir cli dir: prefix; -cli-version must name a single entry inside -cli-dir, so a version reaching outside via .. or a symlink can no longer delete a directory there, and one the orphan sweep claims (.fetch-* or *.zst) is refused; the new CLI is renamed into place before the old one is cleared, so two installs in one cli-dir cannot leave it empty; if another install reclaims its staging file, it retries once instead of failing. (#196)
  • process.killAndWait clamps timeoutMs at 30000 ms instead of 600000 ms, so a caller asking for a longer grace against a signal-ignoring child now gets its exit frame at 30 s, matching the reference. (#214)
  • The login-shell PATH is now applied only to spawned children, not the daemon's own environment, so the daemon no longer resolves its own git through the user's PATH; a non-executable $SHELL falls back to a usable shell instead of failing extraction, and a missing PATH sentinel is logged with the shell's output. (#199)
  • Login-shell PATH extraction now gives up after 4 seconds instead of 10, matching the reference, so a slow login shell no longer del...
Read more

v1.7.3

Choose a tag to compare

@claustrum-ci claustrum-ci released this 25 Jul 22:22
7d42fcb

Compare with 1.7.2

Fixes

  • -version now reports a build time on go install pkg@version builds — such builds embed no vcs.time, receive no -ldflags, and debug.BuildInfo has no timestamp field, so -version printed built unknown; the release pipeline now bakes the version and a UTC timestamp into the source it tags (buildstamp.go, written by knope prepare-release) and reports it when the resolved module version matches that release exactly, while a pseudo-version install (@main, @<sha>) still prints unknown and -ldflags/vcs.time continue to take precedence. (#163)

v1.7.2

Choose a tag to compare

@claustrum-ci claustrum-ci released this 25 Jul 21:04
b7ca739

Compare with 1.7.1

Fixes

  • -version now reports the module version for go install pkg@version builds — such builds carry no vcs.* build settings (they compile from the module cache, which has no VCS context), so the fallback found nothing and reported the claustrum-dev sentinel even for a binary installed at a real tag; it now falls back to debug.BuildInfo.Main.Version, keeping the precedence -ldflags > vcs.revision > module version > sentinel, so downstream version checks that parse -version can confirm a go install build's version. (#161)

v1.7.1

Choose a tag to compare

@claustrum-ci claustrum-ci released this 12 Jul 06:11
f219507

1.7.1 (2026-07-12)

Bug Fixes

  • test: give readTokenFD sole fd ownership to stop coverage flake (#136) (c8e4775)

v1.7.0

Choose a tag to compare

@claustrum-ci claustrum-ci released this 11 Jul 21:47
f62f515

1.7.0 (2026-07-11)

Features

  • add opt-in Windows named-pipe transport (-listen-pipe) (#134) (606fb2b)

v1.6.0

Choose a tag to compare

@claustrum-ci claustrum-ci released this 11 Jul 06:07
588ea59

1.6.0 (2026-07-11)

Features

  • persist auth token to daemon.token for client reconnect (ref 5db5e4a) (#131) (3007358)

v1.5.0

Choose a tag to compare

@claustrum-ci claustrum-ci released this 03 Jul 06:34
5a061dc

1.5.0 (2026-07-03)

Features

  • opt-in claustrum.conf config file for divergences (CT-3) (#128) (f9b4743)

v1.4.0

Choose a tag to compare

@claustrum-ci claustrum-ci released this 03 Jul 01:50
0731a04

1.4.0 (2026-07-03)

Features

  • track reference 7c2f88d — killAndWait, stdin offset, git.info repoSlug/defaultBranch (#120) (3cd5521)

v1.3.1

Choose a tag to compare

@claustrum-ci claustrum-ci released this 12 Jun 20:54
f432e69

1.3.1 (2026-06-12)

Bug Fixes

  • namespace the daemonize re-exec sentinel to dodge CLAUDE_SSH_DAEMON_CHILD collision (#111) (0e60c9c)