Skip to main content

max / makenotwork

Correct stale release-path docs to the content-addressed layout README, the release_root doc comment, and the daemon config example all still described releases/<version>/. Release dirs have been named for the bundle digest since the artifact-identity redesign (deploy.rs, bundle.rs), so all three contradicted the disk. Also drops the legacy MM naming from the two lines being touched.
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>
Author: Max Johnson <me@maxj.phd> · 2026-08-01 17:39 UTC
Signed with PGP, not checked
Commit: 87fb3e9b5b65033643c412262ec5f1d2b55fe5b0
Parent: c16feb2
3 files changed, +12 insertions, -6 deletions
M sando/README.md +5 -3
@@ -88,9 +88,11 @@
88 88
89 89 When you push, the bare repo's `post-receive` hook (installed automatically
90 90 by `sandod` on startup) calls `POST /rebuild`. The daemon checks out the
91 - sha, runs `cargo build --release` against `server/`, stages the binary in
92 - `releases/<version>/server`, then runs the MM tier's gates. On green, MM's
93 - `tier_state` advances. Promote with:
91 + sha, runs `cargo build --release` against `server/`, stages the release bundle
92 + under `staging/<build_id>/`, then runs the host tier's gates. On green the
93 + bundle is published content-addressed at `releases/<digest16>/` (the sha256 of
94 + its `MANIFEST` rather than the version; see `daemon/src/bundle.rs`), `current`
95 + is swapped to it, and the host tier's `tier_state` advances. Promote with:
94 96
95 97 ```bash
96 98 curl -X POST http://127.0.0.1:7766/promote/a \
@@ -74,7 +74,9 @@
74 74 # Non-binary content shipped as part of each release. Multiple entries can
75 75 # target the same `dst` (additive merge — used to build `docs/` from three
76 76 # worktree sources). Sources are relative to the worktree root; dsts are
77 - # relative to <release_root>/releases/<v>/.
77 + # relative to the bundle root (`<release_root>/releases/<digest16>/` once the
78 + # bundle is published; release dirs are named for their content digest, not the
79 + # version).
78 80 #
79 81 # error-pages is now only load-bearing for 502.html: the 404 and 500 pages are
80 82 # embedded in the server binary and served at /__errors/, which Caddy proxies to
@@ -14,9 +14,11 @@
14 14 /// Hetzner) cannot build there — "never build on prod" becomes an invariant
15 15 /// rather than a code-path accident. Required: there is no safe default.
16 16 pub build_host: String,
17 - /// MM-local checkout scratch dir (per-sha worktrees live here).
17 + /// Host-local checkout scratch dir (per-sha worktrees live here).
18 18 pub workdir: PathBuf,
19 - /// MM-local releases dir (`releases/<version>/` and `current` live here).
19 + /// Host-local releases dir. Bundles are staged at `staging/<build_id>/`,
20 + /// then published content-addressed at `releases/<digest16>/` with
21 + /// `current` symlinked to the live one (see `crate::bundle`).
20 22 pub release_root: PathBuf,
21 23 /// Scratch postgres DB url used by `migration_dry_run`. Sando drops and
22 24 /// recreates the schema on every run, so do not point this at anything