carlos / platform Public

docs: rails-poc spec §7 annotated with execution observations

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Paul Campbell pushed by paul@keymail.dev 37b71e638967fad71be558505fc91a1f418e711e parent d841d20
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