diff --git a/.changeset/install-script-says-re-register.md b/.changeset/install-script-says-re-register.md deleted file mode 100644 index 2a5053a51..000000000 --- a/.changeset/install-script-says-re-register.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@internal/server": patch ---- - -Running a re-registration key's install command now says so. A recovery key from a node's Re-register card produced the same script, and the same wizard, as a new-machine enroll: the first thing it asked was "Name this node", a question the recovery path ignores (the existing row keeps its own name), so the flow read like registering something new instead of re-associating the machine. With a key bound to an existing node the script now prints, before anything is asked: "re-registering the existing node '': this machine takes over that entry (its name, shares and settings are kept)", and it supplies that name to the wizard itself so the question never appears. An explicit SUBSHELL_NODE_NAME still wins. The Re-register card's Terminal tab carries the same sentence. Keys that are absent, spent or expired still render the byte-identical usage script; only two kinds of LIVE key differ now, and either one already hands its holder the node. diff --git a/.changeset/node-owner-for-admins.md b/.changeset/node-owner-for-admins.md deleted file mode 100644 index 176cb1b1f..000000000 --- a/.changeset/node-owner-for-admins.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@internal/server": patch ---- - -An admin's node view now names the node's owner. The Nodes list shows an operator every machine on the plane, and until now none of it could say WHOSE machine a row is: `access` says the node is not yours, not whose it is. A node view rendered to an admin carries `ownerLabel` (name, falling back to email, then the raw id for a removed account) and the node page shows it as an "Owner" line; `local` names the `system` service user. Every other viewer's payload lacks the field entirely, same admin-only shape as the setup-key listing's owner label. diff --git a/.changeset/stale-detection-no-badge.md b/.changeset/stale-detection-no-badge.md deleted file mode 100644 index 3b36edebc..000000000 --- a/.changeset/stale-detection-no-badge.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@internal/server": patch ---- - -A stale cached detection is no longer flagged in the SPA. The Nodes row's "inventory stale" badge is gone, and the harness card's caveat paragraph went with it (operator rulings 2026-10-10): nothing about a machine is stale when that flag fires, only the cached answer may be old, and a warning on a perfectly healthy row asserted a defect nobody had established. The launch picker's greyed options keep their hedge ("not installed on this node (harness list may be outdated)") because there the staleness changes what a choice means; everywhere else the docs say it. The word "inventory", which was the server's name for that cache and not anyone else's, stays out of user-facing copy. diff --git a/apps/server/api/CHANGELOG.md b/apps/server/api/CHANGELOG.md index d04b9bede..eeb75441e 100644 --- a/apps/server/api/CHANGELOG.md +++ b/apps/server/api/CHANGELOG.md @@ -1,5 +1,15 @@ # @internal/server +## 1.10.4 + +### Patch Changes + +- [#356](https://github.com/subshell-ai/subshell/pull/356) [`c981340`](https://github.com/subshell-ai/subshell/commit/c981340ec21c27188bc05f88b0dc7809dfc65ced) Thanks [@theogravity](https://github.com/theogravity)! - Running a re-registration key's install command now says so. A recovery key from a node's Re-register card produced the same script, and the same wizard, as a new-machine enroll: the first thing it asked was "Name this node", a question the recovery path ignores (the existing row keeps its own name), so the flow read like registering something new instead of re-associating the machine. With a key bound to an existing node the script now prints, before anything is asked: "re-registering the existing node '': this machine takes over that entry (its name, shares and settings are kept)", and it supplies that name to the wizard itself so the question never appears. An explicit SUBSHELL_NODE_NAME still wins. The Re-register card's Terminal tab carries the same sentence. Keys that are absent, spent or expired still render the byte-identical usage script; only two kinds of LIVE key differ now, and either one already hands its holder the node. + +- [#356](https://github.com/subshell-ai/subshell/pull/356) [`c981340`](https://github.com/subshell-ai/subshell/commit/c981340ec21c27188bc05f88b0dc7809dfc65ced) Thanks [@theogravity](https://github.com/theogravity)! - An admin's node view now names the node's owner. The Nodes list shows an operator every machine on the plane, and until now none of it could say WHOSE machine a row is: `access` says the node is not yours, not whose it is. A node view rendered to an admin carries `ownerLabel` (name, falling back to email, then the raw id for a removed account) and the node page shows it as an "Owner" line; `local` names the `system` service user. Every other viewer's payload lacks the field entirely, same admin-only shape as the setup-key listing's owner label. + +- [#356](https://github.com/subshell-ai/subshell/pull/356) [`c981340`](https://github.com/subshell-ai/subshell/commit/c981340ec21c27188bc05f88b0dc7809dfc65ced) Thanks [@theogravity](https://github.com/theogravity)! - A stale cached detection is no longer flagged in the SPA. The Nodes row's "inventory stale" badge is gone, and the harness card's caveat paragraph went with it (operator rulings 2026-10-10): nothing about a machine is stale when that flag fires, only the cached answer may be old, and a warning on a perfectly healthy row asserted a defect nobody had established. The launch picker's greyed options keep their hedge ("not installed on this node (harness list may be outdated)") because there the staleness changes what a choice means; everywhere else the docs say it. The word "inventory", which was the server's name for that cache and not anyone else's, stays out of user-facing copy. + ## 1.10.3 ### Patch Changes diff --git a/apps/server/api/package.json b/apps/server/api/package.json index 7d6879687..46c1f152d 100644 --- a/apps/server/api/package.json +++ b/apps/server/api/package.json @@ -1,7 +1,7 @@ { "name": "@internal/server", "description": "", - "version": "1.10.3", + "version": "1.10.4", "license": "AGPL-3.0-only", "type": "module", "private": true, diff --git a/apps/server/desktop/CHANGELOG.md b/apps/server/desktop/CHANGELOG.md index d17a94fee..09c03f1b4 100644 --- a/apps/server/desktop/CHANGELOG.md +++ b/apps/server/desktop/CHANGELOG.md @@ -1,5 +1,12 @@ # @internal/desktop-server +## 1.4.6 + +### Patch Changes + +- Updated dependencies [[`c981340`](https://github.com/subshell-ai/subshell/commit/c981340ec21c27188bc05f88b0dc7809dfc65ced), [`c981340`](https://github.com/subshell-ai/subshell/commit/c981340ec21c27188bc05f88b0dc7809dfc65ced), [`c981340`](https://github.com/subshell-ai/subshell/commit/c981340ec21c27188bc05f88b0dc7809dfc65ced)]: + - @internal/server@1.10.4 + ## 1.4.5 ### Patch Changes diff --git a/apps/server/desktop/package.json b/apps/server/desktop/package.json index 6c865e644..748234295 100644 --- a/apps/server/desktop/package.json +++ b/apps/server/desktop/package.json @@ -1,7 +1,7 @@ { "name": "@internal/desktop-server", "description": "Subshell Server — a Tauri shell that installs, runs and manages a local subshell-server", - "version": "1.4.5", + "version": "1.4.6", "license": "AGPL-3.0-only", "type": "module", "private": true, diff --git a/bun.lock b/bun.lock index 766bccb2d..7e4528568 100644 --- a/bun.lock +++ b/bun.lock @@ -179,7 +179,7 @@ }, "apps/server/api": { "name": "@internal/server", - "version": "1.10.3", + "version": "1.10.4", "dependencies": { "@better-auth/api-key": "1.7.1", "@better-auth/passkey": "1.7.1", @@ -226,7 +226,7 @@ }, "apps/server/desktop": { "name": "@internal/desktop-server", - "version": "1.4.5", + "version": "1.4.6", "dependencies": { "@base-ui/react": "1.7.0", "@internal/assistant": "workspace:*",