Skip to content

Make a first install less confusing: installer output, Docker 29 builds and docs - #134

Merged
SaladDay merged 6 commits into
mainfrom
codex/install-phase0
Sep 25, 2026
Merged

SaladDay merged 6 commits into
mainfrom
codex/install-phase0

Conversation

@SaladDay

@SaladDay SaladDay commented Sep 25, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Phase 0 of the new-user install work: small fixes that make a first install less confusing. None of them needs a product decision.

  • Installer output (deploy/install/install.py):
    • With a public URL, it prints the public Console URL and API base URL (<public_url>/v1), plus Core's loopback /v1, labelled local-only.
    • A loopback --public-url is labelled local-only. If that URL is on Web's port, the installer prints Core's own loopback /v1 instead, because Web answers 404 on /v1.
    • The next step points to Web: sign in with the Core key file, then create a Project and key on Projects and keys. Core-only installs get http://127.0.0.1:<core_port>/core/v1 (local only).
  • Local node defaults: the installer's local Docker node now starts at 2 CPU / 2048 MiB, matching Web. Microsandbox is unchanged and already matched.
  • Distribution build on Docker 29's containerd image store (scripts/build-core-distribution.sh, core-distribution-manifest.py built-image):
    • Images are built with --provenance=false and a build metadata file. The tool records the one digest the local store resolves to itself.
    • The database image is pinned by its linux/amd64 manifest digest (postgres:16-alpine@sha256:1a66d744…), so the export is a single platform on both stores.
    • Recorded identities stay exactly as strict: the real config digest and OCI manifest digest of each exported image. Any ambiguity or mismatch fails the build.
  • Docs:
    • README local-provider commands include the required --public-url.
    • E2B CPU and memory are documented as optional; Core adopts the template build's size.
    • Core's images are described as the digest-pinned debian:bookworm-slim base.
    • UI names match Web: Nodes, Save configuration, Projects and keys.
    • Corrected: the release tag format, the scope of --offline-root, the landing-page release text, E2B management wording, .env.example, and "account setup" wording in web-management.md.

Review

  • An independent blind review of the full diff found:
    • one P1: the containerd-store build still failed on the multi-platform PostgreSQL index. It failed closed, but only at the end of the build;
    • one P2: the loopback --public-url label;
    • several P3s.
  • All were fixed in 1db8de90 and 08064743. With a single P1 that had a local fix, the fixes were verified by targeted checks and the gate rather than a new review round:
    • a two-platform test image on the containerd and classic stores, reproducing the failure with the old default and passing with the pinned digest;
    • new installer and manifest-tool tests.

Verification

  • Full local server gate on 08064743 (the exact head): passed.
  • Playwright browser cases were skipped on the server (Chrome unavailable; the skip is approved).
  • Installer tests: 130 OK. Manifest tool tests: 13 OK. bash -n passes, git diff --check is clean, and the relative-link check over the changed docs passes.
  • A full distribution build was not run on this host: it can't reach Docker Hub for the other pinned base images. The changed build steps were verified in isolation on Docker 29.1.3, on both image stores.

View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith with what you need. Autofix is disabled.

…Docker size

The installer now prints the console address, the API base URL
<public-url>/v1 when a public URL is configured, and the loopback API
labelled local-only. It points administrators to sign in to Web with the
Core key file and create a Project and key on the Projects and keys page,
and names the Nodes page instead of Hosted Sandbox Manager. A local Docker
node now starts with Web's proposal of 2 CPUs and 2048 MiB.
BuildKit's --iidfile reports the image config digest, which is Docker's
image ID only in the classic store. The containerd store (Docker 29's
default) names images by manifest digest and cannot resolve the config
digest, and its default provenance attestations wrap each image in a
two-manifest index that the archive verifier rejects. Builds now disable
provenance attestations and record, from BuildKit's build metadata, the
digest the local store resolves. The manifest still records the real
config and OCI manifest digests from the exported archives.
Use the Web names Nodes, Save configuration and Projects and keys; add
--public-url to the local sandbox-provider commands; describe E2B CPU and
memory as optional (Core adopts the template build's size); correct the
standalone image base, the build-<sha> release tag, the offline install
instructions, the landing page's release note, the E2B ownership summary,
the legacy Vite /v1 proxy and runtime sampling comments, and record the
builder's image identity rule in the contributor guide.
Core's images use Debian slim, not distroless/static. Only Web's console
image is distroless. What matters is that Core's container never runs the
microsandbox helper; the standalone node does.
On Docker's containerd store a pulled multi-platform tag keeps its whole
index, so the exported database archive held every platform and the
identity check stopped after a full build. The default PostgreSQL input
is now postgres:16-alpine pinned by its linux/amd64 platform manifest
digest, which stays one image in both stores. The built-image tests also
cover metadata without a config digest and a digest that resolves to
another image.
A loopback --public-url is marked local only. When it is Web's port,
which answers 404 on /v1, the installer prints Core's loopback API
instead. The core-only next step names the local /core/v1 address.
README step 3 says both E2B and own machines finish with Save
configuration.
@SaladDay
SaladDay merged commit 455b078 into main Sep 25, 2026
2 of 3 checks passed
@SaladDay
SaladDay deleted the codex/install-phase0 branch October 7, 2026 06:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant