Skip to main content
The gate between “production exists” and “production takes its first real tenant” (plan phase 20). Each item has a check or a command, the result that counts as a pass, and an owner. An item is signed off by writing the name of the person who ran it, the UTC date and a link to the evidence (a command log, a pull request, a drill record) in the last column. The sign-off column is filled in a pull request against this file, one pull request per sign-off session, so the history shows who signed what and when. Status on 2026-11-13: creation started. The owner decided on production only, with the local converge as the test environment in place of staging (item 1.4). Inputs I2, I3, I4, I5, I6, I13, I14 and I15 are in place for production and PostgreSQL 18.7 is pinned (items 1.2 and 1.3). OpenTofu created 38 of the 66 resources; the five VMs wait for Azure capacity (opentofu.md section 3.8). The first converge also needs a signed release (item 1.5) and input I8 for the observability role. Nothing from section 2 onwards has run against production. Owners are roles, not people: Addresses below follow the conventions of ../runbooks/overview.md: <input I4> is the production domain, node names are production-edge-<n> and production-core-<n> from infra/ansible/inventories/production/hosts.json.

1. Before the environment is created

2. Creating production

3. Drills repeated on production

Run before any real tenant exists, with only the probe tenant sending traffic. The scripts in tests/drills/ target the local converge only (tests/drills/lib.sh reads the local inventory and SOPS file), so on production each drill follows its runbook by hand, with the load generated by the probe plus examples/otel-go-nethttp and a test site as in verification.md steps 9 and 10. Record each drill in a new docs/reference/drills/<date>.md in the format of ../reference/drills/2026-11-13.md. The pass bounds are the plan’s phase 16 bounds.

4. A restored backup

5. Alerts routed

6. SLO measurement running

7. Isolation gate green on the deployed versions

The gate is make isolation (plan phase 18, ../security/threat-model.md). It builds and runs the code of the working copy, so it proves the deployed versions only when the working copy is the commit the deployed images were built from.

8. Repository public

The RFP requires a public open-source repository and a public issue tracker (RFP 3.1, 3.4), and npm provenance needs one too. Making the repository public cannot be undone in practice (forks and caches keep what was public), so it is never done by a session or a deployer on their own.

9. Ready for tenants

When 9.1 to 9.3 are signed off, onboarding of the pilot projects can start (../adoption/overview.md).