carlos / platform Public

rootfs apps: the staged-version sweep exists (#122 closed); cover rootfs images

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude agent, operated by paul@keymail.dev bc45f56b1f48ad145f2a8bb68b4b3e49d3b81dd7 parent c81ce43
1 file changed, +7 −6
  • docs/superpowers/specs/2026-10-24-rootfs-apps-design.md +7 −6

CI cancelled — superseded by a newer push — run details

CI log
=== gate ===
.amadan/test-gate.sh

amadan: job cancelled — a newer push superseded it
diff --git a/docs/superpowers/specs/2026-10-24-rootfs-apps-design.md b/docs/superpowers/specs/2026-10-24-rootfs-apps-design.md
index 5c292a2d0..990e12a3f 100644
--- a/docs/superpowers/specs/2026-10-24-rootfs-apps-design.md
+++ b/docs/superpowers/specs/2026-10-24-rootfs-apps-design.md
@@ -164,8 +164,9 @@ All citations are origin/main.
The adopt pass stages only the artifact matching the box's
`GOOS-GOARCH` (`adopt.go:31`) into `/opt/carlos/versions/<ver>/...`,
sha256-checked. The ship door caps an upload at 256 MiB across all
- parts (`internal/console/apicli.go:1647`). Old versions are never
- reaped (#122).
+ parts (`internal/console/apicli.go:1647`). Unpinned staged versions are
+ swept by the root adopt pass (`sweepStagedVersions`,
+ `internal/host/versionsweep.go:52`, #122 closed).
- **Object storage.** `carlos store create` provisions a bucket and IAM
user and delivers credentials as env with a configurable prefix
(`internal/console/instanceprivatestore.go:165`). Rails Active Storage
@@ -233,10 +234,10 @@ else.
run` ruling F8: never presigned) with a larger cap for the rootfs part.
My call: 2 GiB. The box stages it streaming to disk, as #269 does for
binaries.
-- **Disk.** Before rootfs apps ship to anyone, old versions must be
- reaped (#122) at least for rootfs artifacts, or a few deploys fill a
- box. The builder can scope the reaper to rootfs releases if the
- general one is not ready.
+- **Disk.** The staged-version sweep (`internal/host/versionsweep.go`)
+ must cover rootfs images: an image no live link, generation or pin
+ references is evicted like a binary tree. A test proves a superseded
+ image is removed after the grace period and a running one is not.
- Image format: erofs or squashfs, whichever the boxes' kernel and
systemd mount without extra packages. Builder's call; state the
choice in the plan.