diff --git a/CHANGELOG.md b/CHANGELOG.md index efda56a..423e34e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,20 @@ and listed with their assets on the ## [Unreleased] +## [0.33.0] - 2026-10-31 + +A stack has a page of its own, above its lanes: its daemon, who serves the +main ports, its lanes with where they run and what they take, the services +that run once per machine, and its ports drawn as a graph, with the ports +another stack on this machine uses too in red. Every lane, the main +working tree included as `main`, has the same view, and the lane is in the +URL. A daemon lists every port its stack holds (`/v1/ports`), the hub +every stack's (`/hub/ports`), and `devstack doctor` warns where two +stacks meet (ADR-0080, ADR-0081, ADR-0082). `singleton = true` replaces +`lanes = false`; `[compose.] shared` is deprecated. Fixed: a node +leaves no gone lane's containers running, and a hub that stopped answering +no longer blocks every start. + ### Changed - **`singleton = true` replaces `lanes = false`** (ADR-0080): a service that @@ -2431,7 +2445,8 @@ before are refused now, and a pool needs its nodes granted. a paused log view keeps its line limit; the folder dialog no longer stays "open" after the page gave up waiting. -[Unreleased]: https://github.com/nuetzliches/devstack/compare/v0.32.0...HEAD +[Unreleased]: https://github.com/nuetzliches/devstack/compare/v0.33.0...HEAD +[0.33.0]: https://github.com/nuetzliches/devstack/compare/v0.32.0...v0.33.0 [0.32.0]: https://github.com/nuetzliches/devstack/compare/v0.31.0...v0.32.0 [0.31.0]: https://github.com/nuetzliches/devstack/compare/v0.30.0...v0.31.0 [0.30.0]: https://github.com/nuetzliches/devstack/compare/v0.29.0...v0.30.0 diff --git a/Cargo.lock b/Cargo.lock index 2ddf9af..8e00c67 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -757,7 +757,7 @@ checksum = "9e9de72ce2ad1f90dc62fa25f0f430ef85eb4b0d8fa0be4f30373bc40a21d28e" [[package]] name = "devstack" -version = "0.32.0" +version = "0.33.0" dependencies = [ "anyhow", "bytes", @@ -791,7 +791,7 @@ dependencies = [ [[package]] name = "devstack-build" -version = "0.32.0" +version = "0.33.0" dependencies = [ "blake3", "devstack-config", @@ -806,7 +806,7 @@ dependencies = [ [[package]] name = "devstack-compose" -version = "0.32.0" +version = "0.33.0" dependencies = [ "devstack-config", "devstack-desktop", @@ -819,7 +819,7 @@ dependencies = [ [[package]] name = "devstack-config" -version = "0.32.0" +version = "0.33.0" dependencies = [ "globset", "regex", @@ -833,7 +833,7 @@ dependencies = [ [[package]] name = "devstack-daemon" -version = "0.32.0" +version = "0.33.0" dependencies = [ "axum", "blake3", @@ -867,7 +867,7 @@ dependencies = [ [[package]] name = "devstack-desktop" -version = "0.32.0" +version = "0.33.0" dependencies = [ "devstack-proc", "libc", @@ -888,7 +888,7 @@ dependencies = [ [[package]] name = "devstack-env" -version = "0.32.0" +version = "0.33.0" dependencies = [ "devstack-config", "tempfile", @@ -897,7 +897,7 @@ dependencies = [ [[package]] name = "devstack-hub" -version = "0.32.0" +version = "0.33.0" dependencies = [ "axum", "base64 0.22.1", @@ -930,7 +930,7 @@ dependencies = [ [[package]] name = "devstack-node" -version = "0.32.0" +version = "0.33.0" dependencies = [ "axum", "blake3", @@ -964,7 +964,7 @@ dependencies = [ [[package]] name = "devstack-proc" -version = "0.32.0" +version = "0.33.0" dependencies = [ "libc", "mach2", @@ -977,7 +977,7 @@ dependencies = [ [[package]] name = "devstack-skills" -version = "0.32.0" +version = "0.33.0" dependencies = [ "anyhow", "devstack-config", diff --git a/Cargo.toml b/Cargo.toml index 2438cc1..06d826a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,7 +5,7 @@ members = ["crates/*"] exclude = ["spikes"] [workspace.package] -version = "0.32.0" +version = "0.33.0" edition = "2024" rust-version = "1.98" license = "MIT OR Apache-2.0" diff --git a/devstack.toml b/devstack.toml index 79be0e3..2b5cb91 100644 --- a/devstack.toml +++ b/devstack.toml @@ -7,7 +7,7 @@ version = 1 [stack] name = "devstack" requires = "0.20.0" -reviewed = "0.32.0" +reviewed = "0.33.0" # A lane on another machine of the pool runs in this image (ADR-0028): the # dashboard needs Node.js only (CI builds it with Node 24). diff --git a/docs/adr/README.md b/docs/adr/README.md index 7e8df29..0b95923 100644 --- a/docs/adr/README.md +++ b/docs/adr/README.md @@ -164,4 +164,4 @@ stay. | [0079](0079-skills-local-to-a-working-tree.md) | Skills local to a working tree: a pool's project skills bound to their repository, devstack's own untracked | Accepted (card in the pull request) | | [0080](0080-the-main-tree-answers-as-a-lane-shared-is-deprecated.md) | The main working tree answers as the lane `main`; `singleton` replaces `lanes = false`; `shared` is deprecated | Accepted (card in the pull request) | | [0081](0081-a-stack-has-a-page-every-lane-the-same-view.md) | A stack has a page of its own; every lane, `main` included, has the same view | Accepted (card in the pull request) | -| [0082](0082-the-ports-of-a-machine.md) | The ports of a machine: every stack says what it holds, a stack can run shifted | Accepted (card in the pull request); built in steps: point 1 (`/v1/ports`, `/hub/ports`, `doctor`) in 0.33.0 | +| [0082](0082-the-ports-of-a-machine.md) | The ports of a machine: every stack says what it holds, a stack can run shifted | Accepted (card in the pull request); built in steps: points 1 (`/v1/ports`, `/hub/ports`, `doctor`) and 2 (the graph) in 0.33.0; the shift follows | diff --git a/docs/plan.md b/docs/plan.md index 53f455e..afb6e7f 100644 --- a/docs/plan.md +++ b/docs/plan.md @@ -1,7 +1,7 @@ # devstack: plan - **Status:** Active: phases 0 to 2 done (0.4.0), phase 3 done (lanes per worktree 0.7.0, each with its own infrastructure since 0.8.0, ADR-0030), phase 4 under way; the pool since 0.9.0: lanes on other machines, moved, shared, given the main ports; node policies, several pools, capacity over time, telemetry with consent (ADR-0025 to ADR-0037, 0.9.0 to 0.9.8; [pool.md](pool.md), §7.4, backlog §13); 0.10.0 (2026-10-18) carries the fixes of the review of 0.9.8: lanes confined on a node, nodes granted by an admin, the promotion gate and restore of ADR-0013/0016 as written, the hub's origin rules; 0.11.0 (2026-10-19): lanes that outlive the main tree's stop, keep their data on a node, run with a profile, and can be viewed when shared; a server updated by an admin (ADR-0038 to ADR-0041); 0.12.0 (2026-10-20): sharing a lane includes viewing it (ADR-0040 amended), a remote lane's containers controlled through its node, a dev server's rebuilds shown like builds (ADR-0042), a node's own lines in the pool's telemetry; 0.13.0 (2026-10-20): a dev server's fixed port is devstack's, forwarded to its instance (ADR-0043); 0.14.0 (2026-10-21): the pool places a lane where it starts warm (ADR-0026 point 3), where a lane starts without `--on` is the machine's choice (ADR-0025 amended), a lane's start on a node shows its phases; 0.15.0 (2026-10-21) carries the fixes of a review of the whole code base: a node runs the Compose model it checked, several agents share one engine, the supervisor keeps edits and stops, stack file paths stay in the repository; 0.16.0 (2026-10-21): desktop notifications from the hub and lanes of other members shown (ADR-0045), winget on Windows, a stack's folder opened in one's own programs (ADR-0046), the share switch removed (ADR-0031 amended); 0.17.0 (2026-10-21): a lane made from a branch in the dashboard (ADR-0047), containers on the main ports (ADR-0048), a lane's need measured where it ran, disk included (ADR-0049); 0.18.0 (2026-10-21): notices for what no request reports (ADR-0050), a lane whose worktree is removed shown while it goes (ADR-0024 point 7 amended); 0.19.0 (2026-10-22): a restart of the stack carries its lanes over (ADR-0052), the agent skills where the stack file says, a node's policy says what part of what is free it offers (ADR-0031 amended); 0.20.0 (2026-10-23): macOS in preview with Homebrew (ADR-0054), UDP ports of a lane on a node relayed (ADR-0056), announced ports moved with their lane (ADR-0057); 0.21.0 (2026-10-23): a tray icon on every desktop, a client of the hub (ADR-0060), profiles that leave out containers (ADR-0058), a service's `stop` command (ADR-0059); 0.22.0 (2026-10-24): the dashboard opens in its installed app (ADR-0061); 0.23.0 (2026-10-26): what `prepare` makes kept in a store per machine (ADR-0062), Compose told the lane (ADR-0064); 0.24.0 (2026-10-26): a lane on a node gets its worktree linked and a store on its node (ADR-0062, ADR-0063), the store warmed ahead for a ref (ADR-0065) and shown in the dashboard, its own telemetry through its requester; 0.25.0 (2026-10-27): a stop takes the containers too (ADR-0068), who changed the stack at runtime on record (ADR-0067), a measured CPU need capped (ADR-0066); 0.26.0 (2026-10-27): devstack's MCP server offered at setup, a lane's workers on a node, the memory check against Docker Desktop's VM; 0.27.0 (2026-10-28): a pool grows by provisioned machines (ADR-0051), MCP upstreams through the hub (ADR-0069), one timeline of events and the journal (ADR-0067), the dashboard writes no repository file (ADR-0071), a faster start (builds during the containers' start, a node's artifact store), where a lane starts compared (ADR-0036 addendum); 0.27.1 (2026-10-28): 0.27.0 published, its release had stopped at new advisories ([CHANGELOG](../CHANGELOG.md)) -- **Date:** 2026-10-14, status updated 2026-10-30 (0.32.0) +- **Date:** 2026-10-14, status updated 2026-10-31 (0.33.0) - **Inputs:** [problem-statement.md](problem-statement.md), [ADR index](adr/README.md) This document is the planning artefact. Decisions it relies on are recorded as @@ -938,6 +938,16 @@ generated skills are local to the working tree as well and no longer committed; the hub keeps them current (ADR-0079). The details are in the [changelog](../CHANGELOG.md). +**0.33.0 (2026-10-31): a page per stack, its ports, one view per lane.** +The dashboard gives each stack a page above its lanes (its daemon, the +main slot, its lanes, its singleton services) and draws the ports of the +stack as a graph, with overlaps with other stacks on the machine. The main +working tree answers as the lane `main`, in the API and in a view that is +the same for every lane (ADR-0080, ADR-0081). Daemons and the hub list +the ports of a machine, the first step towards a port shift for stacks +that declare the same ports (ADR-0082, #387). `shared` is deprecated. The +details are in the [changelog](../CHANGELOG.md). + ## 8. Open questions | # | Question | Where it is tracked | diff --git a/ui/package-lock.json b/ui/package-lock.json index 466c81d..c191633 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -1,12 +1,12 @@ { "name": "devstack-dashboard", - "version": "0.32.0", + "version": "0.33.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "devstack-dashboard", - "version": "0.32.0", + "version": "0.33.0", "license": "MIT OR Apache-2.0", "dependencies": { "pinia": "4.1.0", diff --git a/ui/package.json b/ui/package.json index 9531644..4c24744 100644 --- a/ui/package.json +++ b/ui/package.json @@ -1,7 +1,7 @@ { "name": "devstack-dashboard", "private": true, - "version": "0.32.0", + "version": "0.33.0", "license": "MIT OR Apache-2.0", "type": "module", "description": "Web dashboard for devstack, served by the hub",