From 3d557743eeda9830c6af93f15e53842c9d5b7828 Mon Sep 17 00:00:00 2001 From: Luxit Date: Fri, 21 Aug 2026 14:52:19 +0200 Subject: [PATCH] Sync the self-hosting stack --- CHANGELOG.md | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..ecb6ce9 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,103 @@ +# Changelog + +What each published build changes for you, newest first. + +The three images are versioned independently and their numbers are not meant to match — usually only +one of them changed. An entry says which artefact and which version, so `web 0.102.0` and +`api 0.81.0` sitting under the same date is the ordinary case, not a mismatch. + +Every version published to a channel appears here. Nothing is written from memory afterwards: a build +cannot be published without its entry. + +## api 0.81.0 — 2026-08-21 + +**Approving a plan now actually authorises it.** When Jarvis asks for consent on a whole plan and you +approve it, the steps that touch the machines the plan names are no longer confirmed one at a time. +Previously the approval bound nothing at all — the assistant was asked to honour it and the executor +never checked — so an approved plan still stopped at every step, and a read-only conversation could +be granted a plan it had no way to carry out. + +The clearance is deliberately narrow. It applies only in the conversation the plan was raised in, +only to the machines the plan names, only up to a risk ceiling, and only for four hours. Anything +outside it still asks. It can never be wider than the approver's own access to those machines. + +**Two ways somebody could get more than they should, closed.** + +- Approving used to lend the approver's own permissions to the plan for the rest of the turn. Work + now runs as whoever asked for it, which is what the audit trail already claimed. +- Deciding a plan asked nothing about whether the decider may touch the machines it names — the + per-command confirmation had checked this for months and this path had not. It does now, for every + machine in the plan. Refusing is never restricted: anyone who can see a plan is wrong may stop it. + +**Wording that was not true.** A command that was waiting for a human when the server restarted used +to be reported as possibly having taken effect, and told you to go and check the machine. It never +ran — the confirmation happens before anything is sent — so it now says so. + +If you have approval requests older than this release, they are recorded as expired. They were made +under the old behaviour, where approving authorised nothing; treating them as live permissions would +grant something nobody was asked for. + +## web 0.102.0 — 2026-08-21 + +**The approval panel says what approving does.** It used to promise "Jarvis runs the steps below" and +"Nothing runs until you decide". Neither was true: a pending plan blocks nothing, and approving did +not run anything. It now describes the clearance you are actually granting — which machines, what +ceiling, how long — and the rejection notice no longer claims that nothing ran. + +The per-command confirmation is unchanged. That one does hold the command until you answer. + +## api 0.80.0 · web 0.101.0 — 2026-08-21 + +**The footer says which channel this instance follows**, beside the version numbers, when you set +`JARVIS_CHANNEL` in `.env`. Leave it empty if you pin exact versions — you then follow no channel, +and the footer shows nothing rather than a label that stopped being true. + +## api 0.78.2 · web 0.100.2 — 2026-08-21 + +**Distribution channels.** Images now carry `stable` and `dev` tags as well as their version. +`stable` moves only after a build has run on the publisher's own instance; `dev` moves on every +build. `latest` is a second name for `stable`, so nothing that already used it has to change, and +the compose files default to `stable`. + +A channel is a pointer and a version is a fact. Promotion copies the manifest of an image that has +already been published and run — it never rebuilds — so the bytes you receive are the bytes that were +tested, not a fresh build of the same source. + +**Fixed: some builds reported their version as `dev`.** The version is stamped into the image and +shown in the footer; a build published without it said `dev` while being tagged, pinned and run +correctly. Affected api 0.78.0 and 0.78.1 and web 0.100.0 and 0.100.1. + +## web 0.100.0 — 2026-08-21 + +**Recorded terminal sessions can be replayed** at the pace they happened, not only read as a finished +transcript. Idle time is compressed so a session that was mostly waiting is watchable, and how much +was skipped is stated. Sessions recorded before this release can still be read; they carry no timing, +so they cannot be replayed, and the panel says so rather than hiding the control. + +## agent 0.26.0 — 2026-08-21 + +**The command is now `jarvis`.** `jarvis-agent` keeps working and will continue to: both names are +present on every machine, and an agent that updates itself gives itself the missing one. Uninstalling +is a verb — `jarvis uninstall` — beside `status`, `start` and `stop`. The old +`jarvis-agent-uninstall` command is unchanged. + +`jarvis uninstall` refuses to run from inside a Jarvis terminal on the machine it is removing. +Stopping the service would kill the command mid-way, leaving the agent stopped and nothing +uninstalled, with no connection left to fix it through. Run it from an ordinary SSH session. + +## agent 0.25.0 — 2026-08-21 + +Internal: the agent asks the machine which name its service is registered under rather than assuming +one. No visible change; it is what makes a later rename survivable. + +## agent 0.24.0 — 2026-08-21 + +**Remote terminal on macOS.** Interactive shells now work on managed Macs, as they already did on +Linux and Windows. The session opens a login shell so the PATH matches what an administrator expects. + +**Fixed: sessions were recorded as "closed" instead of "exited".** Typing `exit` ended the session +correctly but filed it as though it had been taken away, with no exit code. Sessions from before this +release keep the reason they were given. + +**Fixed: a file descriptor and a thread leaked on every clean exit.** Only visible on machines that +stay up for a long time with many sessions.