carlos / platform Public

spec: step A is done — Eleven serves from Carloku's shared fleet

proving.bdr.oncarlos.com serves Eleven's app shell over HTTPS, on a
binary shipped through carlos, with no infrastructure created for it.

Recorded in the spec: the exact command path, which of phase 1's proofs
it closes, and two findings.

Proofs closed. 1 (release delivery): deploy shipped ffd3de0 and promoted
it to edge; the reconcile pass materialised the route and the edge stamps
x-carlos-version: ffd3de0. 2 (manifest shape): instances enable pinned
the app to bdr.oncarlos.com and the one-label rule held. 3 (the product
runs on CARLOS): the box logs lchat listening on
unix:/run/carlos/proving.bdr.oncarlos.com.sock, and the served page
carries Eleven's own CSP — connect-src naming home.elevenmessenger.com —
not a platform placeholder. Signing in and creating a space is the
remaining half and needs a person.

Hibernation worked with nothing configured for it: the record went
Setting up → serving → Asleep on its own.

Two findings carried into the spec:

- The admin link names the wrong host. lchat prints
  http://localhost:1747/admin#token=... on first boot because it only
  ever knew a socket, so an operator must hand-edit the host. Tedious
  across 31 hosts and a trap for anyone pasting it as printed.

- The architecture defaults disagree. carlos ship/deploy default
  --target linux-arm64; Eleven's committed binary is lchat-linux-amd64
  and build-linux.sh defaults ARCH=amd64. Nothing catches it until the
  box tries to exec.

Docs-only change; go build ./... and gofmt -l . both clean.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NPZAr4Cvqr8enLymeNo2Qp
Paul Campbell pushed by paul@keymail.dev 86918a106f343782ced5786ca33300192b351219 parent 3412772
1 file changed, +49 −0
  • docs/superpowers/specs/2026-08-29-eleven-carloku-migration-design.md +49 −0

CI passed — run details

diff --git a/docs/superpowers/specs/2026-08-29-eleven-carloku-migration-design.md b/docs/superpowers/specs/2026-08-29-eleven-carloku-migration-design.md
index 700c8fce5..0820a4f74 100644
--- a/docs/superpowers/specs/2026-08-29-eleven-carloku-migration-design.md
+++ b/docs/superpowers/specs/2026-08-29-eleven-carloku-migration-design.md
@@ -178,6 +178,55 @@ reach: sidecars (proof 4) and the disposition of `lchat router`'s hooks and
links (proof 5), both of which want a box Eleven controls. Everything from
"The infrastructure already exists in the right shape" onward is step B.
+### Step A is done — 2026-09-05
+
+Eleven runs on Carloku. `proving.bdr.oncarlos.com` serves Eleven's app shell
+over HTTPS from the shared fleet, on a binary shipped through `carlos`.
+
+The whole path, for the record:
+
+ ARCH=arm64 ./deploy/build-linux.sh # in Eleven's repo → lchat-linux-arm64
+ carlos apps create --account eleven --app proving
+ carlos deploy --account eleven --app proving --target linux-arm64 \
+ --version ffd3de0 lchat-linux-arm64
+ carlos instances enable --account eleven --app proving
+ carlos instances create --account eleven --app proving \
+ --host proving.bdr.oncarlos.com --channel edge
+
+**What that proves.**
+
+- **Proof 1, release delivery, end to end.** `deploy` shipped `ffd3de0` and
+ promoted it to `edge`; the box's reconcile pass materialised the route and
+ the adopt installed the binary. The edge stamps `x-carlos-version: ffd3de0`.
+- **Proof 2, the manifest shape.** `instances enable` pinned the app to
+ `bdr.oncarlos.com` and the one-label rule held: `proving` is one label under
+ the account's platform subdomain, and the console checked the host against
+ the manifest before minting the record.
+- **Proof 3, the product runs on CARLOS.** The box logs
+ `lchat listening on unix:/run/carlos/proving.bdr.oncarlos.com.sock
+ (db: /data/proving.bdr.oncarlos.com.db)`, and the served page carries
+ Eleven's own CSP — `connect-src` naming `home.elevenmessenger.com`, the
+ giphy and youtube-nocookie sources — not a platform placeholder. Signing in
+ and creating a space is the remaining half of this proof and needs a person.
+- **Hibernation works, unprompted.** The record read `Setting up`, then served,
+ then went to `Asleep` on its own. The instance woke for a request and slept
+ again with nothing configured for it.
+
+**Two findings worth carrying.**
+
+1. **The admin link names the wrong host.** On first boot lchat prints
+ `http://localhost:1747/admin#token=…` because it has no idea what hostname
+ fronts it — it only ever knew a socket. An operator has to hand-edit the
+ host before the link works. Harmless once, tedious across 31 hosts, and a
+ trap for anyone who pastes it as printed. Worth a fix in Eleven: derive the
+ link's origin from a public-host env var when one is set.
+
+2. **The architecture default is a real trip hazard.** `carlos ship` and
+ `carlos deploy` default `--target linux-arm64`; Eleven's committed binary is
+ `lchat-linux-amd64` and its `build-linux.sh` defaults `ARCH=amd64`. The two
+ defaults disagree, and nothing catches it until the box tries to exec the
+ binary. Eleven's build matrix should produce arm64 for Carloku.
+
### Step B — the proving box
**The infrastructure already exists in the right shape.** `infra/dev-mesh/` in