Groove Restricted

Resolve this before you come in.

This desk keeps a single admission problem. It is exact. Rounding commentary, spaces, and separators are refused.

Ramanujan noticed that this value misses an integer by less than one part in a trillion. Write that integer.

Back to docs
Running Groove

UAT and production are neighbours, not copies.

Same git history. Different projects, secrets, and hosts. The mistake that hurts is treating a deploy as a chance to clone one environment onto the other.

Audience Whoever is about to ship Updated October 2026

One trunk

main is the line. UAT and production are not long lived branches. Web clients promote by shipping the same commit to a second Firebase project. Mobile production is an EAS profile that pins the live API and groove.com.na.

The two worlds

UATProduction
Firebasegroove-5afa9groove-prd
APIgroove-apigroove-api-prd
Fan webhosted.app URLhttps://groove.com.na
Organisershosted.app URLhttps://organiser.groove.com.na
API URLCloud Run hosthttps://api.groove.com.na
MongoUAT URI secretgroove-api-mongodb-uri · database groove
Marisuat-api / uat-kmapi-gw.mtc.com.na / km.mtc.com.na
SMTP and Maris secretsshared UAT namesgroove-api-prd-* only

Shipping the API

Image only Use bash infra/gcp/deploy-api-production.sh with IMAGE=…. The script refuses UAT bindings. Leave ALLOW_ENV_MUTATION unset unless someone explicitly asked for that one variable.
  1. Build and push the container image you intend to ship.
  2. Run the production deploy script with IMAGE only.
  3. Do not export UAT YAML and apply it to groove-api-prd.

Before and after

  • Before the Cloud Run update, confirm MONGODB_URI is groove-api-mongodb-uri.
  • Confirm no *-uat or shared SMTP secret is mounted on prod.
  • After the deploy, read the bindings again. Then hit /ready.

When it goes wrong

Prefer traffic back to a known good revision:

gcloud run services update-traffic … --to-revisions=<known-good>=100

That puts the previous image in front of fans without rebuilding the environment from UAT. A config clone is how the 23 July 2026 incident remounted the wrong Mongo, SMTP, and Maris. We prefer not to collect sequels.

Longer books

  • docs/deployment/README.md
  • docs/deployment/branching-and-environments.md
  • docs/deployment/fan-web-production-runbook.md
  • docs/deployment/organisers-production-runbook.md
  • infra/gcp/deploy-api-production.sh

Lock this page again

Running Groove · October 2026