docs(EYT-142): das fehlende Deploy-/Rollback-Runbook - #86
Merged
Conversation
…h nie ausgefuehrt markiert EYT-142 fuehrt "Runbook fuer Deploy, Testdaten, Diagnose und Rollback" ausdruecklich in-scope. Es existierte nicht: `docs/runbooks/` trug vier Dateien, keine davon zu Deploy oder Rollback; der einzige Treffer auf "rollback" stand in `branch-protection.md` und meint etwas anderes. Damit war das Akzeptanzkriterium "Health/Readiness, TLS/RLS, Request-Isolation, Secrets, Worker-Startup und Rollback sind belegt" in genau einem Punkt unerfuellt — und dieser Punkt braucht kein Staging, sondern nur Aufschreiben. Fuenf der sechs Belege sind am finalen Head `b2d8dbf` gemessen (Run 32418558407): 13 db-gates-Zeilen `mode=required … skipped=0`, dazu `smoke-api.sh` (`ready=200`), `smoke-worker.sh` und `smoke-api-role-gate.sh`. Der sechste — Rollback — ist jetzt beschrieben, aber ausdruecklich NICHT als vollzogen behauptet. Das Runbook beginnt mit dem Gate, das zuerst fallen muss, und sperrt alles darunter, solange `BLOCKER_ENVIRONMENT_SEPARATION` gilt — auch einen Healthcheck. Die Pruefung ist auf eine Frage reduziert: ist der `project_ref` des Ziels von `inypnrvpawvhgiyagxbd` verschieden? Inhaltlich abgeleitet, nicht erfunden: beide `wrangler.jsonc`, `ENV_VAR_META`, `pg-connection.ts`, die drei Smoke-Skripte, `deploy-authority.test.ts`, der EYT-142-Plan und die Phase-A-Messungen. Jeder genannte Pfad ist gegengeprueft. Drei Stellen sind als **nicht gemessen** markiert statt geglaettet: - `scripts/ops/bootstrap-demo-tenant.mjs` ist nie gegen eine Staging-Grenze gelaufen, - die Pooler-Vorhersage ist aus `session_user` plus Policies ABGELEITET und nicht gegen eine echte Poolerverbindung verifiziert (pgTAP laeuft als `postgres`), - es gibt keine ausgefuehrte Restore-Evidenz; "Rollback belegt" waere heute eine Tatsachenbehauptung ohne Tatsache. Die asymmetrische Haelfte steht ausdruecklich drin, weil sie sonst erst im Ernstfall auffaellt: Anwendung und Schema rollen NICHT gemeinsam zurueck. Migrationen sind append-only; ein Rollback auf eine Version, die eine entfernte Struktur braucht, ist kein Rollback, sondern ein Ausfall. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Reviewer's GuideThis PR adds a detailed, repository-grounded runbook for staging deploys, test data, diagnostics, and rollback, explicitly documenting gates, configuration, smoke checks, and rollback constraints, including what is and is not yet empirically verified. Flow diagram for staging deploy and rollback runbookflowchart TD
A[Check Gate A_to_B: A1_A9_green, non_production_project_ref, owner_approval] -->|Gate satisfied| B[Apply_supabase_migrations_to_staging]
A -->|Gate not satisfied| X[Abort_deploy]
B --> C[Verify_migration_count_matches_repository]
C -->|Mismatch| X
C -->|Matches| D[Set_secrets_and_worker_config]
D --> E[wrangler_deploy_easytree_api_and_easytree_web]
E --> F[Run_smoke_api_smoke_worker_smoke_api_role_gate]
F -->|Any_smoke_fails| X
F -->|All_smokes_green| G[Record_deploy_metadata_commit_SHA_worker_versions_migration_state_project_ref_smoke_results]
G --> H[If_issue_after_deploy_consider_app_rollback_via_Cloudflare_or_Railway]
H --> I[Schema_is_append_only_use_forward_migration_to_fix_additive_error]
I --> J[Ensure_app_rollback_does_not_depend_on_removed_schema_structures]
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Reines Dokument, kein Code, keine Migration.
Der Befund
EYT-142 führt „Runbook für Deploy, Testdaten, Diagnose und Rollback" ausdrücklich in-scope. Es existierte nicht:
docs/runbooks/trug vier Dateien (a11y-checklist,branch-protection,database-workflow,planning-publish), keine davon zu Deploy oder Rollback. Der einzigegrep-Treffer auf „rollback" stand inbranch-protection.mdund meint das Zurücknehmen eines Rulesets.Damit war das Akzeptanzkriterium „Health/Readiness, TLS/RLS, Request-Isolation, Secrets, Worker-Startup und Rollback sind belegt" in genau einem Punkt unerfüllt — und dieser Punkt braucht kein Staging, nur Aufschreiben.
Die fünf, die belegt sind
Gemessen am finalen Head
b2d8dbf, Run32418558407:13 Zeilen, je
mode=required … skipped=0. Dazusmoke-api.sh(ready=200,/health, SIGTERM),smoke-worker.sh(öffnet keinen Port) undsmoke-api-role-gate.sh(API startet nicht ohne RLS-gebundene Rolle).Was das Runbook tut
Es beginnt mit dem Gate, das zuerst fallen muss, und sperrt alles darunter, solange
BLOCKER_ENVIRONMENT_SEPARATIONgilt — auch einen Healthcheck, auch „nur einmal zum Schauen". Die Prüfung ist auf eine Frage reduziert:Danach: was deployt wird (beide Worker, Configs aus dem Repo), Secrets-Trennung über die sieben kanonischen Variablen, Deployreihenfolge (Schema zuerst, Cloudflare nie als zweite Migration-Authority), Testdaten, eine Diagnosetabelle vom Billigsten zum Teuersten, Rollback und das Deploy-Protokoll.
Alles abgeleitet, nicht erfunden — jeder genannte Pfad ist gegengeprüft: beide
wrangler.jsonc,ENV_VAR_META,pg-connection.ts, die drei Smoke-Skripte,deploy-authority.test.ts,planning-write.repository.ts,WRITE_CHANNEL_REJECTED,app.is_runtime_channel, 18 Migrationen.Drei Stellen sind als NICHT gemessen markiert
Statt sie glattzuschreiben:
scripts/ops/bootstrap-demo-tenant.mjsist nie gegen eine Staging-Grenze gelaufen.session_userplus Policies abgeleitet und nicht gegen eine echte Poolerverbindung verifiziert — pgTAP läuft alspostgres.Die asymmetrische Hälfte
Steht ausdrücklich drin, weil sie sonst erst im Ernstfall auffällt:
🤖 Generated with Claude Code
Summary by Sourcery
Document the guarded procedure for staging deployment, validation, diagnosis, and rollback before the first real staging deployment.
Documentation: