Deploy
Live — the targets, probed when you loaded this. Recorded — what the runs cost. Replayed — the last run, played back at wall-clock speed. Nothing here shows a run happening now, because nothing here can see one.
Replay — the last run, at wall-clock speed
release · 34802b6f3
A replay, not a live run. Each row is a workflow step in the locked
vocabulary — tool runs unattended,
human suspends the run until a person answers. There is no
agent step in a deploy, and that is a finding rather than an
omission: no agent ships production.
Six weeks
One cell per day. Filled where a run was recorded — the record starts the day
deploy-record.sh was wired, so empty is "not recorded", never "nothing shipped".
Wall clock per run
Oldest left. The tall green one is the door that gated, shipped to dev, probed two routes and opened a PR; the short bars are runs that refused early — which is the gate working, not the gate failing.
Live now
probed 2026-09-18 01:37:47 UTC ·| Target | Worker | Ships | ms | State |
|---|---|---|---|---|
| one.ie | one-prod | one.ie/web | — | UP — serving this page — not probed (a worker cannot fetch its own host) |
| api.one.ie | one-gateway | api/ | 84 | UP |
| channels.one.ie | channels | channels/ | 553 | UP |
| pay.one.ie | one-core-worker | pay/backend | 518 | UP |
| dev.one.ie | one-dev | one.ie/web (branch) | 1508 | UP |
Ask about a deploy
Chat can answer about this page's record. It cannot ship, and there is no
button here that pretends otherwise: there is no deploy:* receiver — no
resolver, no route, no caller. Shipping stays a local command and a human's call.
Deployment tasks
The gates deploy.sh runs, in its order, and what each asserts. The script
is the authority — this page carries no second copy of its commands.
- 0 Tree working tree clean — first, so a dirty tree fails in a second instead of after a full build
- 0.4 Credentials one credential resolved from an ordered ladder and probed with curl /user; all five services report the same account
- 1a Typecheck tsc --noEmit clean in all 5 services; builds packages/sdk first when dist/ is missing
- 1b Tests the full suite as two concurrent lanes — pool (CPU-bound, 8 forks) and typedb (one shared gateway, serial)
- 3 Build NODE_ENV=production astro build → dist/server/ + static assets; memoised by tree fingerprint
- 5 Smoke dist/server/ exists, all 5 wrangler.toml present, and no [env.production] block has grown back
- 6 Approval on main, a literal "yes" — other branches auto-approve
- 6.5 Migrations wrangler d1 migrations apply --remote. Never ship worker code ahead of its schema
- 7 Deploy gateway + sync + channels + pay in parallel, then astro. Every call bare — no --env, ever
- 8 Health 4 HTTP probes × 3 tries with backoff, cache-busted — the same pairs probed above
The workflow
Main receives merges, never edits. One direction, four doors.
| Door | Where | Command | Gate |
|---|---|---|---|
| edit | .claude/worktrees/<name> | git worktree add -b feat/<name> … | verify:fast — every edit |
| merge | the main tree, pinned to main | git merge --ff-only feat/<name> | none — main is a record, not a gate |
| promote | .release/ on branch release | release.sh promote <sha> | one FULL gate on the clean tree at that sha |
| ship | .release/ | release.sh ship | memo HIT — the suite is REUSED, never re-run |
dev.one.ie is one slot, and it reads and writes production's rows. Ship code there freely; treat its data as production. A fast pass is never reported as a full pass.
Agent deploy tools
Every door an agent or an operator can open, and which of the two is expected to.
| Command | Does | Run by |
|---|---|---|
| ./deploy dev | one.ie/web → one-dev. Fast lane, no approval, crons stripped. | agent |
| ./deploy | the full pipeline — 5 services, FULL_VERIFY=1, human approval. | human |
| ./deploy astro | workers | gateway | sync | agents | pay | scope it to one service, or the three that need no astro rebuild. | either |
| ./deploy --dry-run | print every command, ship nothing. | either |
| land.sh <branch> --pr --deploy | gate → dev → probe → PR, in that order, for one branch. | agent |
| land.sh <branch> | merge main in → gate → fast-forward main. No PR. | agent |
| release.sh promote <sha> | materialise .release/ at a sha and mint its full-suite receipt. | human |
| release.sh ship | the production door. Ships from .release/, so it structurally cannot ship a dirty tree. | human |
| deploy-record.sh --door … --phase … | append a run to the record this page renders. --self-test is its red proof. | script |
| signal-watch.sh --watch 30 | every door the factory’s signals cross, with server-timing phases and a ratchet budget. | either |