docs: rails-poc spec §7 annotated with execution observations
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 file changed,
+26
−0
docs/superpowers/specs/2026-08-11-rails-behind-carlos-edge-poc-design.md+26 −0
diff --git a/docs/superpowers/specs/2026-08-11-rails-behind-carlos-edge-poc-design.md b/docs/superpowers/specs/2026-08-11-rails-behind-carlos-edge-poc-design.md| index d52aa0091..d635214cc 100644 |
| --- a/docs/superpowers/specs/2026-08-11-rails-behind-carlos-edge-poc-design.md |
| +++ b/docs/superpowers/specs/2026-08-11-rails-behind-carlos-edge-poc-design.md |
| @@ -155,24 +155,50 @@ the migration evaluation: |
| binary; ExecStart is pinned to `/opt/carlos/live/%i` |
| (`internal/caps/render.go`). Running Rails as a first-class app needs a |
| bundle/image release kind or an equivalent. |
| + - observed: confirmed — the gap is real, and the PoC boxes hand-roll |
| + docker + systemd unit files in its place, not a CARLOS release at all. |
| 2. **No attached-database primitive** — the platform design spec already |
| sketches `attached` engines (Postgres provisioned and bound by the |
| platform, `docs/superpowers/specs/2026-08-01-carlos-platform-design.md` |
| §storage); the objstore primitive |
| (`2026-08-10-object-storage-primitive-design.md`) is the implementation |
| template. |
| + - observed: no such primitive existed to reach for — dependency access |
| + was wired by hand (security-group ingress rules on the shared staging |
| + DB/cache SGs, plus connection env delivered separately); it worked, |
| + but nothing about it would survive a second app onboarding itself. |
| 3. **No config/env delivery to addr-upstream routes** — the PoC hand-rolls |
| SSM Parameter Store; a platform answer would ride the existing |
| `appconfig` rails. |
| + - observed: confirmed, and it cost a real mistake — the hand-rolled |
| + prune rule over-pruned a live key (`PROMETHEUS_EXPORTER_PORT`) from |
| + both apps' env on the first pass; caught by review, not by any |
| + safeguard the ad hoc delivery had. |
| 4. **No log shipping for external processes** — journald-only on the PoC |
| boxes; CARLOS logs stage 2 (unit tenants) is the relevant seam. |
| + - observed: confirmed — journald-only, no shipping. Adequate for the |
| + PoC's own diagnosis needs; not evidence either way for real ops load. |
| 5. **No health/restart/metrics for off-box upstreams** — `-unit` stamping |
| only works for processes on the edge box itself. |
| + - observed: confirmed — the deploy script itself carries the whole |
| + health gate (on-box HTTP probe with per-app path/header, then a |
| + report-only edge check); CARLOS supplies none of it for this route |
| + shape. |
| 6. **Architecture** — the fleet is Graviton; the Rails images are amd64. |
| A first-class Rails-on-CARLOS deployment means arm64 image builds |
| (Buildkite multi-arch). Deferred deliberately: the PoC boxes are |
| disposable, so they run x86 to match the images rather than the other |
| way round. |
| + - observed: the x86 boxes ran the unmodified Buildkite amd64 images |
| + with no rebuild and no compatibility issue — the deferral cost |
| + nothing for the PoC itself; the arm64 gap for a real deployment |
| + stands as stated. |
| + |
| +**2026-08-11:** staging is live on both apps (see `tito/README.md`'s Rails |
| +PoC section in platform-infrastructure for current status). The edge |
| +host-authorization gap (classic 403, pro 404) is still open and is what |
| +blocks this route shape from serving a real page today — the PoC proved |
| +the plumbing, not a finished path to production traffic. |
| ## Out of scope |