The stack
10 · Continuous integration
exo-verify type-checks and tests every change before it deploys and checks live Staging and Production routes every 15 minutes; Vitest runs the code checks. Playwright browser journeys on Staging are planned.
- Dimension
- 10 · Continuous integration
- Platform
- Vitest + Playwright · via exo-verify
- Vitest
- Open-source test runner for typed unit and integration checks. Ecosystem standard · authority: Exo
- Playwright
- Open-source browser checks that exercise every Staging release before promotion. Core standard · authority: EXO
- Status
- exo-verify partly built on staging (2026-10-01): contract, CLI, build gates, 15-min live checks, pre-push hook; AI review waits on the AI gateway.
What it is
Continuous integration means code checks and AI evals. The goal: every change is type-checked, tested, and clicked through in a real browser on Staging before anyone approves it (the stack description on exo.now). Today the type checks, tests, and live route checks run; the browser click-through is planned. A release is healthy, reviewable, and approved, not merely green in a provider dashboard. This dimension is about verifying code, not identity; sign-in lives under Identity. The service design is on the exo-verify page.
Platform
- Vitest (open source) runs typed unit and integration checks. In this repository,
pnpm test:intruns Vitest withvitest.config.mts. - Playwright (open source) drives browser checks against Staging. In this repository,
pnpm test:e2eruns Playwright withplaywright.config.ts.
The rest of exo-verify is first-party: a verify contract, Railway sandbox workers, live checks, and an AI review pass whose model calls go through exo-router.
Boundary and replaceability
- The contract is the command list each repository declares (
typecheck,lint,test,smoke). Exo runs what is declared, and a missing command is a visible gap, not a silent pass. - The AI review layer uses an open-source engine or Exo's own prompts. Third-party review (Greptile Enterprise) stays a later option if Exo's review quality falls short.
- No GitHub Actions or GitHub-app bots: the owner is leaving GitHub.
- The AI eval format (what an eval declares, how it is scored, and where results are stored): TBD. ADR 0005 records AI review and agent-written targeted tests, not a separate eval contract.
Cost notes
From ADR 0005 (2026-09-27), at ~300 agent commits per month:
| Option | Pricing | Est. monthly |
|---|---|---|
| exo-verify (own) | ~$0.007 compute per 5-min 2 vCPU / 2 GB Railway run + $0.01–0.10 model tokens per run | ~$6–30 |
| Greptile Pro | $30/seat/month, 50 credits/seat, $1 per extra credit; non-GitHub/GitLab forges are Enterprise-only | ~$300–900 |
| CodeRabbit | $24–30/user; CLI free at 3 reviews/hour | Per seat |
| Graphite | $40/user | Per seat, GitHub-bound |
Cost per verified commit is roughly $0.02–0.10, recorded per App so it appears in that App's cost to serve. Vitest and Playwright are open source.
Status
- Today in this repo:
pnpm check(legacy-backend freeze,tsc, ESLint plus the UI-system gates, and Vitest integration tests),pnpm verify(adds the production build), and Playwright e2e viapnpm test:e2e. - Built on
staging(2026-10-01): the exo-verify contract, CLI, and results store; Railway build gates (Exo and Observatory enforce, Construct and Rampart report); 15-minute live smoke, drift, and domain checks; the pre-push hook; and the PR-Agent review pass through exo-router. Review is off until the Convex AI gateway is enabled. Measured: the Exo gate adds 42 s to each deploy. See exo-verify. - Open source parts: PR-Agent (MIT), Vitest (MIT), Playwright (Apache-2.0; browser journeys not wired yet).
- Open question: does Entire expose webhooks or a checks API for triggering runs?
Source: content/docs/stack/continuous-integration.mdx
09 · Payments
Stripe for web payments and RevenueCat for in-app purchases, normalized into one commercial record without making Exo a payment processor.
11 · Observability
exo-analyze keeps visits, sign-ups, conversion, and cost to serve in one Exo event layer; PostHog is a swappable dashboard adapter.