[ { "id": 9007, "node_id": "PR_kwDOInfra19", "url": "https://api.github.com/repos/kennethnym/infra-scripts/issues/19", "repository_url": "https://api.github.com/repos/kennethnym/infra-scripts", "labels_url": "https://api.github.com/repos/kennethnym/infra-scripts/issues/19/labels{/name}", "comments_url": "https://api.github.com/repos/kennethnym/infra-scripts/issues/19/comments", "events_url": "https://api.github.com/repos/kennethnym/infra-scripts/issues/19/events", "html_url": "https://github.com/kennethnym/infra-scripts/pull/19", "number": 19, "state": "closed", "state_reason": "not_planned", "title": "docs(deploy): document manual failover steps", "body": "## Context\n\nDocuments the manual failover sequence for the staging stack while the automated path is still unstable.\n\n### Draft runbook\n1. Put the primary deployment in maintenance mode.\n2. Promote the standby database.\n3. Repoint the app workers and warm the cache.\n4. Verify health checks before reopening traffic.\n\n| Step | Owner | State |\n| --- | --- | --- |\n| Promote standby | SRE | Drafted |\n| Repoint workers | App platform | Drafted |\n| DNS validation | Release lead | Pending |\n\n### Risks\n- secrets rotation is still manual\n- rollback steps need screenshots\n- [ ] add the final DNS validation command", "body_text": null, "body_html": null, "user": { "login": "kennethnym", "id": 4242, "avatar_url": "https://avatars.githubusercontent.com/u/4242?v=4", "html_url": "https://github.com/kennethnym", "name": "Kenneth Ng", "email": "kenneth@example.com" }, "labels": [ { "id": 15001, "node_id": "LA_kwDOInfra_docs", "url": "https://api.github.com/repos/kennethnym/infra-scripts/labels/docs", "name": "docs", "description": "Documentation updates.", "color": "0075CA", "default": true }, { "id": 15002, "node_id": "LA_kwDOInfra_infra", "url": "https://api.github.com/repos/kennethnym/infra-scripts/labels/infra", "name": "infra", "description": "Infrastructure or deployment work.", "color": "D4C5F9", "default": false } ], "assignee": null, "assignees": [], "milestone": null, "locked": true, "active_lock_reason": "resolved", "comments": 5, "pull_request": { "url": "https://api.github.com/repos/kennethnym/infra-scripts/pulls/19", "html_url": "https://github.com/kennethnym/infra-scripts/pull/19", "diff_url": "https://github.com/kennethnym/infra-scripts/pull/19.diff", "patch_url": "https://github.com/kennethnym/infra-scripts/pull/19.patch", "merged_at": null }, "closed_at": "2026-05-02T12:05:00Z", "created_at": "2026-04-24T06:40:00Z", "updated_at": "2026-05-02T12:05:00Z", "closed_by": { "login": "piperlane", "id": 8181, "avatar_url": "https://avatars.githubusercontent.com/u/8181?v=4", "html_url": "https://github.com/piperlane", "name": "Piper Lane", "email": "piper@example.com" }, "author_association": "OWNER", "draft": false, "timeline_url": "https://api.github.com/repos/kennethnym/infra-scripts/issues/19/timeline", "repository": { "id": 105, "node_id": "R_kgDOInfra", "name": "infra-scripts", "full_name": "kennethnym/infra-scripts", "owner": { "login": "kennethnym", "id": 4242, "avatar_url": "https://avatars.githubusercontent.com/u/4242?v=4", "html_url": "https://github.com/kennethnym", "name": "Kenneth Ng", "email": "kenneth@example.com" }, "private": true, "html_url": "https://github.com/kennethnym/infra-scripts", "description": "Deployment and environment automation.", "fork": false, "url": "https://api.github.com/repos/kennethnym/infra-scripts" }, "performed_via_github_app": null, "reactions": null, "pinned_comment": null, "type": null, "sub_issues_summary": null } ]