← ClaudeAtlas

deploy-ceremonylisted

Deploy the Rihla Firebase backend (Cloud Functions + Firestore rules + indexes) to prod and keep the deploy state honest. Shows the merged-but-undeployed delta first (pending_deploy.sh), runs the commit-bound deploy + prod-state verify, advances the `backend-deployed` source-of-truth tag, then records the deploy in docs/DEPLOY-LEDGER.md and clears stale "⚠️ NOT deployed" flags. Use when asked to "deploy the backend", "run the deploy ceremony", "ship the functions", or after merging a Functions/rules PR.
NasserAlbusaidi/ship-gate · ★ 0 · Code & Development · score 72
Install: claude install-skill NasserAlbusaidi/ship-gate
# Deploy ceremony (backend) The project's recurring failure mode is **ghost-debt**: Functions/rules merged to `main` but never deployed, tracked only in scattered `⚠️ NOT deployed` memory notes. This ceremony makes deploy state a single queryable fact (the `backend-deployed` git tag) and a discoverable log (`docs/DEPLOY-LEDGER.md`), and refuses to let a deploy finish without recording itself. Scope: this is the **backend** deploy (Cloud Functions + `firestore.rules` + `firestore.indexes.json` + hosting). It is **not** the client release ceremony (`tool/release.sh`) and it does **not** satisfy the release-readiness gate — see the warning in step 5. ## Live-users note (supersedes the old "no-clients deploy freely" note) Real users are LIVE — the no-clients era is over. Client-compat gating applies: a rules/Functions tightening that can deny a shipped client's writes ships client-first or same-release (the `⚠️ old clients PERMISSION_DENIED` notes #290/#318/#294 govern again), and backend deploys ride RELEASES, not individual merges — run this ceremony at release time, not after every merge. See CLAUDE.md → Workflow for the governing rule; if [[no-clients-deploy-freely]] still exists in memory, it is stale. ## Step 1 — show what's pending ```bash bash tool/pending_deploy.sh rihla-safar ``` - Exit 0 (nothing pending) → stop; prod already matches `main`. - Exit 1 → it prints the merged-but-undeployed backend commits + file delta. Read them. State out loud what is about to