Commit graph

1 commit

Author SHA1 Message Date
Eliot M
d4a39d425a phase(L0): tenant container runs full Core + Platform stack
Per-tenant container now boots all five processes behind a single
exposed port (:8080), with the Core/Platform boundary enforced at
the filesystem level (two Linux users, mode 0700 on cial-core).

- @cial/edge: http-proxy edge (HTTP+WS) + node supervisor (PID 1
  under tini, spawns each service via gosu as the right user)
- Routes: /.cial/api/* -> back (prefix stripped), /.cial/* -> core
  front (basePath kept), /* -> platform front. Platform Back is
  internal-only for v1.
- Dockerfile: multi-stage (builder + runtime). Builds protocol/sdk/
  back/edge/front/platform-back/platform-front. Runtime installs
  tini+gosu, creates cial:1000 / agent:1001, locks down cial-core
  to 0700.
- Placeholder pages now render TENANT_ID at request time so the
  smoke can verify per-tenant env propagation end-to-end.
- scripts/smoke-tenant.mjs: docker-driven L0 acceptance — boots the
  image, polls healthz, probes the four route classes, and asserts
  the agent user cannot read /opt/cial-monorepo/cial-core.
- PLAN-LOCAL.md: phased local-mode roadmap (L0..L6).

Verify on a host with docker:
  docker build -f cial-core/docker/Dockerfile -t cial-tenant:dev .
  pnpm smoke:tenant

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-26 10:46:16 +00:00