carlos / platform Public

rootfs apps Plan 1: carlos ship --rootfs and --check, the rootfs release kind, the console ship door (#366)

Lands the approved rootfs apps design (spec rev 5, index, plans 1-6, copy deck)
and Plan 1's code: the rootfs release kind with processes, hibernate and jit;
an app's kind and hibernation fixed at its first ship (create-only kind marker);
carlos ship --rootfs building a normalised squashfs image locally from an OCI
layout, a save archive or a directory; carlos ship --check running the image in
docker or podman the way a box would; the console ship door taking a streamed
image up to 2 GiB with per-account scratch admission. Census
census-ruling-rootfs-apps-1 approved by Paul (#280). Astra final review fixed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Squashed from rootfs-apps-1-ship into main.
claude agent, operated by paul@keymail.dev 15a85ddfb35b9f355e4763df7905221957421a2a parent c83ab21
89 files changed, +26140 −127
  • apimode_rootfs.go +84 −0
  • apimode_rootfs_test.go +151 −0
  • approved_moves_copy_test.go +70 −5
  • approved_rootfs_copy_test.go +270 −0
  • cli.go +91 −44
  • docs/superpowers/notes/census-proposal-rootfs-apps-1.md +50 −0
  • docs/superpowers/plans/2026-10-24-rootfs-apps-0-index.md +472 −0
  • docs/superpowers/plans/2026-10-24-rootfs-apps-1-ship.md +1459 −0
  • docs/superpowers/plans/2026-10-24-rootfs-apps-2-box-isolation.md +3110 −0
  • docs/superpowers/plans/2026-10-24-rootfs-apps-3-lifecycle.md +1147 −0
  • docs/superpowers/plans/2026-10-24-rootfs-apps-4-console-and-docs.md +1356 −0
  • docs/superpowers/plans/2026-10-24-rootfs-apps-5-egress-allow.md +1094 −0
  • docs/superpowers/plans/2026-10-24-rootfs-apps-6-interactive.md +1413 −0
  • docs/superpowers/plans/2026-10-24-rootfs-apps-copy.md +539 −0
  • docs/superpowers/plans/CODEX-FINDINGS-ROOTFS-PLANS-R1.md +59 −0
  • docs/superpowers/plans/CODEX-FINDINGS-ROOTFS-PLANS-R2.md +64 −0
  • docs/superpowers/plans/CODEX-REVIEW-BRIEF-ROOTFS-PLAN1-FINAL.md +31 −0
  • docs/superpowers/plans/CODEX-REVIEW-BRIEF-ROOTFS-PLANS-R2.md +17 −0
  • docs/superpowers/plans/CODEX-REVIEW-BRIEF-ROOTFS-PLANS.md +38 −0
  • docs/superpowers/plans/LUNA-COPY-BRIEF-ROOTFS-PLAN1-BUILD.md +27 −0
  • docs/superpowers/plans/LUNA-COPY-BRIEF-ROOTFS.md +33 −0
  • docs/superpowers/plans/LUNA-COPY-REVIEW-ROOTFS-PLAN1-BUILD.md +18 −0
  • docs/superpowers/plans/LUNA-COPY-REVIEW-ROOTFS.md +108 −0
  • docs/superpowers/specs/2026-10-24-rootfs-apps-design.md +728 −0
  • docs/superpowers/specs/CODEX-FINDINGS-ROOTFS-APPS-R1.md +17 −0
  • docs/superpowers/specs/CODEX-REVIEW-BRIEF-ROOTFS-APPS.md +21 −0
  • e2e_test.go +5 −0
  • go.mod +3 −0
  • go.sum +10 −0
  • internal/console/apicli.go +142 −42
  • internal/console/apiship_rootfs.go +365 −0
  • internal/console/apiship_rootfs_test.go +954 −0
  • internal/console/seedscratch.go +26 −13
  • internal/console/seedscratch_test.go +42 −8
  • internal/console/server.go +5 −0
  • internal/hostops/mutation_boundary_putfrom.go +29 −11
  • internal/hostops/mutation_boundary_putfrom_test.go +127 −0
  • internal/provision/plan9_b8_census_test.go +1 −1
  • internal/provision/rootfs_apps_1_census_test.go +64 −0
  • internal/provision/testdata/plan14-root-reads-chain.tsv +2 −0
  • internal/provision/testdata/plan14-root-reads-rootfs-apps-1-new.tsv +100 −0
  • internal/provision/testdata/plan14-root-reads-rootfs-apps-1.tsv +17 −0
  • internal/release/claim_app_writes.go +9 −0
  • internal/release/golden_test.go +34 −0
  • internal/release/release.go +26 −3
  • internal/release/rootfs.go +224 −0
  • internal/release/rootfs_ship.go +458 −0
  • internal/release/rootfs_ship_test.go +780 −0
  • internal/release/rootfs_test.go +391 −0
  • internal/rootfsimage/archive.go +160 −0
  • internal/rootfsimage/dir.go +123 −0
  • internal/rootfsimage/dir_other.go +17 −0
  • internal/rootfsimage/dir_test.go +259 −0
  • internal/rootfsimage/dir_unix.go +23 −0
  • internal/rootfsimage/errors.go +201 −0
  • internal/rootfsimage/flatten.go +295 −0
  • internal/rootfsimage/flatten_test.go +621 −0
  • internal/rootfsimage/framework.go +85 −0
  • internal/rootfsimage/framework_test.go +141 −0
  • internal/rootfsimage/mounts.go +79 −0
  • internal/rootfsimage/mounts_test.go +166 −0
  • internal/rootfsimage/normalise.go +58 −0
  • internal/rootfsimage/normalise_test.go +79 −0
  • internal/rootfsimage/oci.go +475 −0
  • internal/rootfsimage/oci_test.go +389 −0
  • internal/rootfsimage/processes.go +239 −0
  • internal/rootfsimage/processes_test.go +324 −0
  • internal/rootfsimage/progarch.go +112 −0
  • internal/rootfsimage/progarch_test.go +97 −0
  • internal/rootfsimage/squashfs.go +308 −0
  • internal/rootfsimage/squashfs_test.go +457 −0
  • internal/rootfsimage/squashfs_unix_test.go +72 −0
  • internal/rootfsimage/tar.go +87 −0
  • internal/rootfsimage/tar_test.go +144 −0
  • internal/rootfsimage/testimage_test.go +428 −0
  • internal/rootfsimage/tree.go +408 −0
  • internal/runs/runs_test.go +6 −0
  • main.go +5 −0
  • ship_check.go +526 −0
  • ship_check_probe.go +291 −0
  • ship_check_probe_test.go +403 −0
  • ship_check_test.go +903 −0
  • ship_rootfs.go +371 −0
  • ship_rootfs_test.go +351 −0
  • ship_rootfs_unix_test.go +257 −0
  • ship_runtime.go +187 −0
  • ship_runtime_test.go +440 −0
  • ship_stop.go +146 −0
  • ship_stop_test.go +126 −0

CI cancelled — superseded by a newer push — run details

apimode_rootfs.go

Loading diff…

apimode_rootfs_test.go

Loading diff…

approved_moves_copy_test.go

Loading diff…

approved_rootfs_copy_test.go

Loading diff…

cli.go

Loading diff…

docs/superpowers/notes/census-proposal-rootfs-apps-1.md

Loading diff…

docs/superpowers/plans/2026-10-24-rootfs-apps-0-index.md

Loading diff…

docs/superpowers/plans/2026-10-24-rootfs-apps-1-ship.md

Loading diff…

docs/superpowers/plans/2026-10-24-rootfs-apps-2-box-isolation.md

Loading diff…

docs/superpowers/plans/2026-10-24-rootfs-apps-3-lifecycle.md

Loading diff…

docs/superpowers/plans/2026-10-24-rootfs-apps-4-console-and-docs.md

Loading diff…

docs/superpowers/plans/2026-10-24-rootfs-apps-5-egress-allow.md

Loading diff…

docs/superpowers/plans/2026-10-24-rootfs-apps-6-interactive.md

Loading diff…

docs/superpowers/plans/2026-10-24-rootfs-apps-copy.md

Loading diff…

docs/superpowers/plans/CODEX-FINDINGS-ROOTFS-PLANS-R1.md

Loading diff…

docs/superpowers/plans/CODEX-FINDINGS-ROOTFS-PLANS-R2.md

Loading diff…

docs/superpowers/plans/CODEX-REVIEW-BRIEF-ROOTFS-PLAN1-FINAL.md

Loading diff…

docs/superpowers/plans/CODEX-REVIEW-BRIEF-ROOTFS-PLANS-R2.md

Loading diff…

docs/superpowers/plans/CODEX-REVIEW-BRIEF-ROOTFS-PLANS.md

Loading diff…

docs/superpowers/plans/LUNA-COPY-BRIEF-ROOTFS-PLAN1-BUILD.md

Loading diff…

docs/superpowers/plans/LUNA-COPY-BRIEF-ROOTFS.md

Loading diff…

docs/superpowers/plans/LUNA-COPY-REVIEW-ROOTFS-PLAN1-BUILD.md

Loading diff…

docs/superpowers/plans/LUNA-COPY-REVIEW-ROOTFS.md

Loading diff…

docs/superpowers/specs/2026-10-24-rootfs-apps-design.md

Loading diff…

docs/superpowers/specs/CODEX-FINDINGS-ROOTFS-APPS-R1.md

Loading diff…

docs/superpowers/specs/CODEX-REVIEW-BRIEF-ROOTFS-APPS.md

Loading diff…

e2e_test.go

Loading diff…

go.mod

Loading diff…

go.sum

Loading diff…

internal/console/apicli.go

Loading diff…

internal/console/apiship_rootfs.go

Loading diff…

internal/console/apiship_rootfs_test.go

Loading diff…

internal/console/seedscratch.go

Loading diff…

internal/console/seedscratch_test.go

Loading diff…

internal/console/server.go

Loading diff…

internal/hostops/mutation_boundary_putfrom.go

Loading diff…

internal/hostops/mutation_boundary_putfrom_test.go

Loading diff…

internal/provision/plan9_b8_census_test.go

Loading diff…

internal/provision/rootfs_apps_1_census_test.go

Loading diff…

internal/provision/testdata/plan14-root-reads-chain.tsv

Loading diff…

internal/provision/testdata/plan14-root-reads-rootfs-apps-1-new.tsv

Loading diff…

internal/provision/testdata/plan14-root-reads-rootfs-apps-1.tsv

Loading diff…

internal/release/claim_app_writes.go

Loading diff…

internal/release/golden_test.go

Loading diff…

internal/release/release.go

Loading diff…

internal/release/rootfs.go

Loading diff…

internal/release/rootfs_ship.go

Loading diff…

internal/release/rootfs_ship_test.go

Loading diff…

internal/release/rootfs_test.go

Loading diff…

internal/rootfsimage/archive.go

Loading diff…

internal/rootfsimage/dir.go

Loading diff…

internal/rootfsimage/dir_other.go

Loading diff…

internal/rootfsimage/dir_test.go

Loading diff…

internal/rootfsimage/dir_unix.go

Loading diff…

internal/rootfsimage/errors.go

Loading diff…

internal/rootfsimage/flatten.go

Loading diff…

internal/rootfsimage/flatten_test.go

Loading diff…

internal/rootfsimage/framework.go

Loading diff…

internal/rootfsimage/framework_test.go

Loading diff…

internal/rootfsimage/mounts.go

Loading diff…

internal/rootfsimage/mounts_test.go

Loading diff…

internal/rootfsimage/normalise.go

Loading diff…

internal/rootfsimage/normalise_test.go

Loading diff…

internal/rootfsimage/oci.go

Loading diff…

internal/rootfsimage/oci_test.go

Loading diff…

internal/rootfsimage/processes.go

Loading diff…

internal/rootfsimage/processes_test.go

Loading diff…

internal/rootfsimage/progarch.go

Loading diff…

internal/rootfsimage/progarch_test.go

Loading diff…

internal/rootfsimage/squashfs.go

Loading diff…

internal/rootfsimage/squashfs_test.go

Loading diff…

internal/rootfsimage/squashfs_unix_test.go

Loading diff…

internal/rootfsimage/tar.go

Loading diff…

internal/rootfsimage/tar_test.go

Loading diff…

internal/rootfsimage/testimage_test.go

Loading diff…

internal/rootfsimage/tree.go

Loading diff…

internal/runs/runs_test.go

Loading diff…

main.go

Loading diff…

ship_check.go

Loading diff…

ship_check_probe.go

Loading diff…

ship_check_probe_test.go

Loading diff…

ship_check_test.go

Loading diff…

ship_rootfs.go

Loading diff…

ship_rootfs_test.go

Loading diff…

ship_rootfs_unix_test.go

Loading diff…

ship_runtime.go

Loading diff…

ship_runtime_test.go

Loading diff…

ship_stop.go

Loading diff…

ship_stop_test.go

Loading diff…