Skip to content

Commit 41f13fc

Browse files
tastyeffectcoclaude
andcommitted
docs(release): v0.4.0 release pass — positioning, CHANGELOG, release notes
- README: reposition as "Self-hosted control plane for AI-built apps"; add an above-the-fold "What you get" list (web console, runtime presets, live preview URLs, agent tasks, app config/secrets, snapshots/fork/restore, activity/events, process logs, settings/lifecycle); extend Known limitations (Docker-only; no Compose/local DB/Git import yet). - CHANGELOG: cut [0.4.0] — 2026-06-25 (was Unreleased); add Settings (GET/PATCH lifecycle), base-image contract, and test-foundation entries; honest known limitations (v1 delete purge, keepalive_until not surfaced, warming page 200, Docker-only, no Compose/local DB/Git import); note it rolls up the v0.3.0 work. - docs/release-notes-v0.4.0.md: draft GitHub release notes. - installer: default base tag sandboxd-base:0.4.0-test -> :0.4.0 (drop confusing "test" language at launch; SANDBOXD_IMAGE override unchanged). No feature/runtime changes. Gate green: gofmt/vet/build/go test + OpenAPI contract + installer syntax + console tsc/test(11)/build. Validated by the from-zero VPS RC QA pass. PR #35 to be marked ready (not merged). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent d5ea91d commit 41f13fc

4 files changed

Lines changed: 121 additions & 8 deletions

File tree

CHANGELOG.md

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,19 @@ All notable changes to sandboxd are documented here. The format is based on
55
[Semantic Versioning](https://semver.org/) (pre-1.0: a minor bump adds features,
66
a patch is fixes only).
77

8-
## [Unreleased] — v0.4.0 (integration: `release/v0.4-apps-console`)
8+
## [0.4.0] — 2026-06-25
99

10-
One release-candidate integration of all accepted v0.3 + v0.4 work. Linearly
11-
stacked on `console``feat/v0.4-snapshots-observability``feat/runtime-manifest`.
12-
`main` stays at 0.2.0 until this is cut.
10+
**Self-hosted control plane for AI-built apps** — adds a web console, runtime
11+
presets, snapshots/fork/restore, observability, process logs, and a read-only
12+
(plus editable lifecycle) settings view on top of the v0.3 app/config/secrets
13+
foundation. Integration of all accepted v0.3 + v0.4 work, validated by a
14+
from-zero VPS release-candidate QA pass.
15+
16+
### Highlights
17+
Web console · runtime presets (React/Vite, Next.js, Node/Express, FastAPI,
18+
Worker) · live preview URLs · agent tasks · app config & secrets (write-only
19+
secrets) · snapshots / fork / restore · activity/events timeline · per-process
20+
logs · settings with editable idle/keepalive lifecycle controls.
1321

1422
### Added
1523
- **Snapshots, fork & restore.** Public `POST/GET/DELETE /v1/snapshots`,
@@ -43,11 +51,25 @@ stacked on `console` → `feat/v0.4-snapshots-observability` → `feat/runtime-m
4351
`app_healthy`; `build_ok` stays for back-compat (true only when `passed`).
4452
- **`web.restart_after_task` / worker `restart_after_task`.** Per-process
4553
reload-by-restart for runtimes without live reload.
54+
- **Settings / instance overview.** `GET /v1/settings` — a read-only, safe
55+
instance summary (version, networking/preview, auth mode, runtime/storage,
56+
lifecycle, egress mode, agent providers, presets, capabilities; never any
57+
secret). A console **Settings** page renders it.
58+
- **Editable lifecycle tunables.** `PATCH /v1/settings` edits ONLY the idle-reap
59+
enable/threshold and keepalive-max (strict allowlist; any other key → 400),
60+
persisted and **hot-applied** to the running reaper/keepalive; the console
61+
Settings page edits them. Everything else stays read-only / env-managed.
62+
- **Base image contract.** `docs/base-image.md` documents what a custom base
63+
image must provide (runtimed, `sandbox` uid/gid 1000, workspace path, no
64+
privileged/Docker socket) and how to select one via `SANDBOXD_IMAGE`.
4665
- **Shared-host installer & preview port.** `scripts/dev/install-v04-ubuntu.sh`
4766
with shared-host mode (loopback API, configurable `HTTP_PORT`), and preview
4867
URLs that include the public port when `HTTP_PORT` ≠ 80.
68+
- **Test foundation.** Public-surface + JSON-shape contract tests (sandboxd is
69+
the contract), a console unit-test runner (vitest) with API-mirroring fixtures,
70+
and `docs/release-checklist.md` for manual VPS sign-off.
4971
- **Docs.** `docs/sandbox-manifest.md`, OpenAPI updates (`/v1/presets`,
50-
process logs, `runtime_preset`, `processes`, task health fields).
72+
`/v1/settings`, process logs, `runtime_preset`, `processes`, task health fields).
5173

5274
### Fixed
5375
- **Explicit `build.command: ""` now skips the build check** (was overwritten by
@@ -66,6 +88,14 @@ stacked on `console` → `feat/v0.4-snapshots-observability` → `feat/runtime-m
6688
can't tell "warming" from "ready").
6789
- Per-task `agent.log` transcript can be empty on task timeout — persistence
6890
needs investigation.
91+
- **Docker backend only** — OCI/containerd/Kata are a future runtime provider.
92+
- **Out of scope for v0.4:** Git/GitHub import, managed databases/sidecars, and
93+
Docker-Compose-inside-the-sandbox.
94+
95+
---
96+
97+
> v0.4.0 rolls up the v0.3.0 work below (app config & secrets, web console +
98+
> `/v1` OpenAPI) — kept here for detail.
6999
70100
## [Unreleased] — v0.3.0 (integration: `console`)
71101

README.md

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22

33

44
<p align="center">
5-
<b>The open-source engine for AI app-builder products.</b><br/>
5+
<b>Self-hosted control plane for AI-built apps.</b><br/>
66
Give every user an isolated cloud dev environment, a built-in coding agent,
7-
and a live preview URL — self-hosted, on one machine, in one command.
7+
and a live preview URL — with a web console to drive it all. Self-hosted, on
8+
one machine, in one command.
89
</p>
910

1011
<p align="center">
@@ -18,6 +19,17 @@
1819

1920
<img width="1100" height="816" alt="sandboxd-demo" src="https://github.com/user-attachments/assets/f794ff9b-8ffe-47e8-bd30-22541f870f09" />
2021

22+
## What you get
23+
24+
- **Web console** — create and open apps, watch previews, run agent tasks, manage everything from a browser (or drive the same `/v1` API directly).
25+
- **Runtime presets** — one-step React/Vite, Next.js, Node/Express, FastAPI, or Worker apps (`GET /v1/presets`); each boots and reloads after agent edits.
26+
- **Live preview URLs** — each app is reachable at its own shareable link; sleeps when idle, wakes on request.
27+
- **Agent tasks** — submit a prompt, stream the agent's progress, get the build/health result.
28+
- **App config & secrets** — per-app key/values; sensitive values are write-only (set once, encrypted at rest, never returned).
29+
- **Snapshots / fork / restore** — capture a workspace, fork it into a new app, or restore in place.
30+
- **Activity / events** — a durable per-app timeline of what happened.
31+
- **Process logs** — per-process status (web + workers) and tail-able logs.
32+
- **Settings / lifecycle controls** — a read-only instance overview, with editable idle-reap / keepalive tuning, applied live.
2133

2234
## What is sandboxd? (start here)
2335

@@ -374,6 +386,10 @@ Tracked, non-blocking — details in [`docs/sandbox-manifest.md`](docs/sandbox-m
374386
- The wake/warming interstitial returns HTTP `200` (callers can't distinguish
375387
"warming" from "ready" by status code alone).
376388
- Per-task `agent.log` can be empty on task timeout (transcript persistence WIP).
389+
- **Docker backend only** (OCI/containerd/Kata are a future provider; see
390+
[`docs/sandbox-manifest.md`](docs/sandbox-manifest.md)).
391+
- **Not yet:** Git/GitHub import, a managed-database/sidecar story, and
392+
Docker-Compose-inside-the-sandbox are deliberately out of scope for v0.4.
377393

378394
## License
379395

docs/release-notes-v0.4.0.md

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
# sandboxd v0.4.0 — Self-hosted control plane for AI-built apps
2+
3+
v0.4 turns sandboxd into a complete, operable platform for AI-built apps: a **web
4+
console**, one-step **runtime presets**, **live preview URLs**, **agent tasks**,
5+
**app config & secrets**, **snapshots / fork / restore**, an **activity/events**
6+
timeline, **per-process logs**, and a **settings** view with editable lifecycle
7+
controls — all self-hosted on one machine that just needs Docker.
8+
9+
## Highlights
10+
11+
- **Web console** — create and open apps, watch live previews, run agent tasks,
12+
and manage config/secrets, snapshots, activity, and settings from a browser
13+
(or use the same public `/v1` API directly).
14+
- **Runtime presets**`GET /v1/presets` + `runtime_preset` on create for
15+
**React/Vite, Next.js, Node/Express, FastAPI, Worker**. Each seeds a starter,
16+
writes a `sandbox.yaml`, boots, and reloads after agent edits (Vite HMR,
17+
`uvicorn --reload`, or a post-task process restart — including healing a
18+
Next.js `next build` that would otherwise poison the dev server).
19+
- **Live preview URLs** — every app gets its own shareable link; idle sandboxes
20+
sleep and wake on request.
21+
- **Agent tasks** — submit a prompt, stream progress, get an honest result
22+
(`build_status` passed/failed/skipped, `preview_ok`, `app_healthy`).
23+
- **App config & secrets** — per-app key/values; sensitive values are write-only,
24+
encrypted at rest, and never returned.
25+
- **Snapshots / fork / restore** — capture a workspace (generated/dependency dirs
26+
excluded), fork it into a new app, or restore in place — with workspace
27+
ownership normalized so forks boot cleanly.
28+
- **Activity / events** — a durable per-app timeline.
29+
- **Process logs** — per-process status (web + workers) and tail-able logs.
30+
- **Settings / lifecycle** — a read-only instance overview, plus editable
31+
idle-reap / keepalive tuning that hot-applies (a strict allowlist; nothing else
32+
is editable, and no secret is ever shown).
33+
34+
## Install
35+
36+
On a fresh Ubuntu host:
37+
38+
```bash
39+
git clone https://github.com/tastyeffectco/sandboxd && cd sandboxd
40+
git checkout v0.4.0
41+
scripts/dev/install-v04-ubuntu.sh
42+
```
43+
44+
It builds the base image + control plane + console and brings the stack up with
45+
Docker Compose (Traefik for preview/console URLs, the API on loopback). See
46+
[`docs/release-checklist.md`](release-checklist.md) for the full smoke test.
47+
48+
## Known limitations (non-blocking)
49+
50+
- `DELETE /v1/sandboxes/{id}` **purges** the workspace; the legacy internal
51+
`DELETE /sandbox/{id}` stops and keeps it.
52+
- `keepalive_until` is honored but not surfaced in `GET /v1/sandboxes/{id}`.
53+
- The wake/warming interstitial returns HTTP `200`.
54+
- Per-task `agent.log` can be empty on task timeout.
55+
- **Docker backend only** (OCI/containerd/Kata are a future provider).
56+
- **Not yet:** Git/GitHub import, managed databases/sidecars, and
57+
Docker-Compose-inside-the-sandbox.
58+
59+
## Validation
60+
61+
Validated by a from-zero VPS release-candidate QA pass against this branch
62+
(install → console → presets → previews → agent tasks → snapshots/fork →
63+
process logs → events → config/secrets redaction → settings/lifecycle →
64+
idle/wake/keepalive), plus the full automated gate (Go test + OpenAPI contract +
65+
console typecheck/test/build).
66+
67+
**Full changelog:** see [`CHANGELOG.md`](../CHANGELOG.md).

scripts/dev/install-v04-ubuntu.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ die() { printf ' \033[31m✗ %s\033[0m\n' "$*" >&2; exit 1; }
3737
# ── config (override via env) ────────────────────────────────────────
3838
DATA_DIR="${SANDBOXD_DATA_DIR:-/var/lib/sandboxd-v04-test}"
3939
LOG_DIR="${SANDBOXD_LOG_DIR:-$DATA_DIR/log}"
40-
BASE_IMAGE="${SANDBOXD_IMAGE:-sandboxd-base:0.4.0-test}"
40+
BASE_IMAGE="${SANDBOXD_IMAGE:-sandboxd-base:0.4.0}"
4141
CONSOLE_USER="${CONSOLE_USER:-demo}"
4242
CONSOLE_PASS="${CONSOLE_PASS:-}" # generated if empty
4343

0 commit comments

Comments
 (0)