aios-core 2.1.5 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.aios-core/core/README.md +229 -229
- package/.aios-core/core/data/agent-config-requirements.yaml +368 -368
- package/.aios-core/core/data/aios-kb.md +923 -923
- package/.aios-core/core/data/workflow-patterns.yaml +267 -267
- package/.aios-core/core/docs/SHARD-TRANSLATION-GUIDE.md +335 -335
- package/.aios-core/core/docs/component-creation-guide.md +457 -457
- package/.aios-core/core/docs/session-update-pattern.md +307 -307
- package/.aios-core/core/docs/template-syntax.md +266 -266
- package/.aios-core/core/docs/troubleshooting-guide.md +624 -624
- package/.aios-core/core/elicitation/elicitation-engine.js +1 -1
- package/.aios-core/core/index.esm.js +42 -42
- package/.aios-core/core/index.js +1 -1
- package/.aios-core/core/migration/migration-config.yaml +83 -83
- package/.aios-core/core/migration/module-mapping.yaml +89 -89
- package/.aios-core/core/quality-gates/layer2-pr-automation.js +1 -1
- package/.aios-core/core/quality-gates/quality-gate-config.yaml +86 -86
- package/.aios-core/core/registry/README.md +179 -179
- package/.aios-core/core/utils/security-utils.js +1 -1
- package/.aios-core/core-config.yaml +391 -382
- package/.aios-core/data/agent-config-requirements.yaml +368 -368
- package/.aios-core/data/aios-kb.md +923 -923
- package/.aios-core/data/technical-preferences.md +3 -3
- package/.aios-core/data/workflow-patterns.yaml +267 -267
- package/.aios-core/development/README.md +142 -142
- package/.aios-core/development/agent-teams/team-all.yaml +15 -15
- package/.aios-core/development/agent-teams/team-fullstack.yaml +18 -18
- package/.aios-core/development/agent-teams/team-ide-minimal.yaml +10 -10
- package/.aios-core/development/agent-teams/team-no-ui.yaml +13 -13
- package/.aios-core/development/agent-teams/team-qa-focused.yaml +155 -155
- package/.aios-core/development/agents/aios-master.md +339 -339
- package/.aios-core/development/agents/analyst.md +195 -195
- package/.aios-core/development/agents/architect.md +359 -359
- package/.aios-core/development/agents/data-engineer.md +468 -468
- package/.aios-core/development/agents/dev.md +390 -390
- package/.aios-core/development/agents/devops.md +398 -398
- package/.aios-core/development/agents/pm.md +198 -198
- package/.aios-core/development/agents/po.md +256 -256
- package/.aios-core/development/agents/qa.md +312 -312
- package/.aios-core/development/agents/sm.md +220 -220
- package/.aios-core/development/agents/ux-design-expert.md +451 -451
- package/.aios-core/development/scripts/greeting-config-cli.js +85 -85
- package/.aios-core/development/tasks/add-mcp.md +319 -319
- package/.aios-core/development/tasks/advanced-elicitation.md +318 -318
- package/.aios-core/development/tasks/analyst-facilitate-brainstorming.md +341 -341
- package/.aios-core/development/tasks/analyze-brownfield.md +456 -0
- package/.aios-core/development/tasks/analyze-framework.md +696 -696
- package/.aios-core/development/tasks/analyze-performance.md +637 -637
- package/.aios-core/development/tasks/apply-qa-fixes.md +340 -340
- package/.aios-core/development/tasks/architect-analyze-impact.md +826 -826
- package/.aios-core/development/tasks/audit-codebase.md +429 -429
- package/.aios-core/development/tasks/audit-tailwind-config.md +270 -270
- package/.aios-core/development/tasks/audit-utilities.md +358 -358
- package/.aios-core/development/tasks/bootstrap-shadcn-library.md +286 -286
- package/.aios-core/development/tasks/brownfield-create-epic.md +485 -485
- package/.aios-core/development/tasks/brownfield-create-story.md +356 -356
- package/.aios-core/development/tasks/build-component.md +478 -478
- package/.aios-core/development/tasks/calculate-roi.md +455 -455
- package/.aios-core/development/tasks/ci-cd-configuration.md +764 -764
- package/.aios-core/development/tasks/cleanup-utilities.md +670 -670
- package/.aios-core/development/tasks/collaborative-edit.md +1108 -1108
- package/.aios-core/development/tasks/compose-molecule.md +284 -284
- package/.aios-core/development/tasks/consolidate-patterns.md +414 -414
- package/.aios-core/development/tasks/correct-course.md +279 -279
- package/.aios-core/development/tasks/create-agent.md +321 -321
- package/.aios-core/development/tasks/create-brownfield-story.md +726 -726
- package/.aios-core/development/tasks/create-deep-research-prompt.md +498 -498
- package/.aios-core/development/tasks/create-doc.md +316 -316
- package/.aios-core/development/tasks/create-next-story.md +774 -774
- package/.aios-core/development/tasks/create-suite.md +283 -283
- package/.aios-core/development/tasks/create-task.md +371 -371
- package/.aios-core/development/tasks/create-workflow.md +370 -370
- package/.aios-core/development/tasks/db-analyze-hotpaths.md +572 -572
- package/.aios-core/development/tasks/db-apply-migration.md +381 -381
- package/.aios-core/development/tasks/db-bootstrap.md +642 -642
- package/.aios-core/development/tasks/db-domain-modeling.md +693 -693
- package/.aios-core/development/tasks/db-dry-run.md +293 -293
- package/.aios-core/development/tasks/db-env-check.md +260 -260
- package/.aios-core/development/tasks/db-expansion-pack-integration.md +663 -663
- package/.aios-core/development/tasks/db-explain.md +631 -631
- package/.aios-core/development/tasks/db-impersonate.md +495 -495
- package/.aios-core/development/tasks/db-load-csv.md +593 -593
- package/.aios-core/development/tasks/db-policy-apply.md +653 -653
- package/.aios-core/development/tasks/db-rls-audit.md +411 -411
- package/.aios-core/development/tasks/db-rollback.md +739 -739
- package/.aios-core/development/tasks/db-run-sql.md +613 -613
- package/.aios-core/development/tasks/db-schema-audit.md +1011 -1011
- package/.aios-core/development/tasks/db-seed.md +390 -390
- package/.aios-core/development/tasks/db-smoke-test.md +351 -351
- package/.aios-core/development/tasks/db-snapshot.md +569 -569
- package/.aios-core/development/tasks/db-supabase-setup.md +712 -712
- package/.aios-core/development/tasks/db-verify-order.md +515 -515
- package/.aios-core/development/tasks/deprecate-component.md +956 -956
- package/.aios-core/development/tasks/dev-apply-qa-fixes.md +318 -318
- package/.aios-core/development/tasks/dev-backlog-debt.md +469 -469
- package/.aios-core/development/tasks/dev-develop-story.md +846 -846
- package/.aios-core/development/tasks/dev-improve-code-quality.md +872 -872
- package/.aios-core/development/tasks/dev-optimize-performance.md +1033 -1033
- package/.aios-core/development/tasks/dev-suggest-refactoring.md +870 -870
- package/.aios-core/development/tasks/dev-validate-next-story.md +348 -348
- package/.aios-core/development/tasks/document-project.md +552 -552
- package/.aios-core/development/tasks/environment-bootstrap.md +1311 -1311
- package/.aios-core/development/tasks/execute-checklist.md +301 -301
- package/.aios-core/development/tasks/export-design-tokens-dtcg.md +274 -274
- package/.aios-core/development/tasks/extend-pattern.md +269 -269
- package/.aios-core/development/tasks/extract-tokens.md +467 -467
- package/.aios-core/development/tasks/facilitate-brainstorming-session.md +518 -518
- package/.aios-core/development/tasks/generate-ai-frontend-prompt.md +260 -260
- package/.aios-core/development/tasks/generate-documentation.md +284 -284
- package/.aios-core/development/tasks/generate-migration-strategy.md +522 -522
- package/.aios-core/development/tasks/generate-shock-report.md +501 -501
- package/.aios-core/development/tasks/github-devops-github-pr-automation.md +427 -427
- package/.aios-core/development/tasks/github-devops-pre-push-quality-gate.md +733 -733
- package/.aios-core/development/tasks/github-devops-repository-cleanup.md +374 -374
- package/.aios-core/development/tasks/github-devops-version-management.md +483 -483
- package/.aios-core/development/tasks/improve-self.md +822 -822
- package/.aios-core/development/tasks/index-docs.md +387 -387
- package/.aios-core/development/tasks/init-project-status.md +506 -506
- package/.aios-core/development/tasks/integrate-expansion-pack.md +314 -314
- package/.aios-core/development/tasks/kb-mode-interaction.md +283 -283
- package/.aios-core/development/tasks/learn-patterns.md +900 -900
- package/.aios-core/development/tasks/mcp-workflow.md +437 -437
- package/.aios-core/development/tasks/modify-agent.md +381 -381
- package/.aios-core/development/tasks/modify-task.md +424 -424
- package/.aios-core/development/tasks/modify-workflow.md +465 -465
- package/.aios-core/development/tasks/po-backlog-add.md +370 -370
- package/.aios-core/development/tasks/po-manage-story-backlog.md +523 -523
- package/.aios-core/development/tasks/po-pull-story-from-clickup.md +540 -540
- package/.aios-core/development/tasks/po-pull-story.md +316 -316
- package/.aios-core/development/tasks/po-stories-index.md +351 -351
- package/.aios-core/development/tasks/po-sync-story-to-clickup.md +457 -457
- package/.aios-core/development/tasks/po-sync-story.md +303 -303
- package/.aios-core/development/tasks/pr-automation.md +701 -701
- package/.aios-core/development/tasks/propose-modification.md +842 -842
- package/.aios-core/development/tasks/qa-backlog-add-followup.md +425 -425
- package/.aios-core/development/tasks/qa-gate.md +373 -373
- package/.aios-core/development/tasks/qa-generate-tests.md +1174 -1174
- package/.aios-core/development/tasks/qa-nfr-assess.md +557 -557
- package/.aios-core/development/tasks/qa-review-proposal.md +1157 -1157
- package/.aios-core/development/tasks/qa-review-story.md +682 -682
- package/.aios-core/development/tasks/qa-risk-profile.md +566 -566
- package/.aios-core/development/tasks/qa-run-tests.md +277 -277
- package/.aios-core/development/tasks/qa-test-design.md +387 -387
- package/.aios-core/development/tasks/qa-trace-requirements.md +476 -476
- package/.aios-core/development/tasks/release-management.md +723 -723
- package/.aios-core/development/tasks/security-audit.md +554 -554
- package/.aios-core/development/tasks/security-scan.md +790 -790
- package/.aios-core/development/tasks/setup-database.md +741 -741
- package/.aios-core/development/tasks/setup-design-system.md +462 -462
- package/.aios-core/development/tasks/setup-github.md +874 -874
- package/.aios-core/development/tasks/setup-llm-routing.md +1 -1
- package/.aios-core/development/tasks/setup-mcp-docker.md +584 -584
- package/.aios-core/development/tasks/setup-project-docs.md +440 -0
- package/.aios-core/development/tasks/shard-doc.md +537 -537
- package/.aios-core/development/tasks/sm-create-next-story.md +480 -480
- package/.aios-core/development/tasks/sync-documentation.md +864 -864
- package/.aios-core/development/tasks/tailwind-upgrade.md +294 -294
- package/.aios-core/development/tasks/test-as-user.md +621 -621
- package/.aios-core/development/tasks/test-validation-task.md +171 -171
- package/.aios-core/development/tasks/undo-last.md +346 -346
- package/.aios-core/development/tasks/update-manifest.md +409 -409
- package/.aios-core/development/tasks/ux-create-wireframe.md +617 -617
- package/.aios-core/development/tasks/ux-ds-scan-artifact.md +672 -672
- package/.aios-core/development/tasks/ux-user-research.md +559 -559
- package/.aios-core/development/tasks/validate-next-story.md +422 -422
- package/.aios-core/development/workflows/README.md +83 -83
- package/.aios-core/development/workflows/brownfield-fullstack.yaml +297 -297
- package/.aios-core/development/workflows/brownfield-service.yaml +187 -187
- package/.aios-core/development/workflows/brownfield-ui.yaml +197 -197
- package/.aios-core/development/workflows/greenfield-fullstack.yaml +333 -333
- package/.aios-core/development/workflows/greenfield-service.yaml +206 -206
- package/.aios-core/development/workflows/greenfield-ui.yaml +235 -235
- package/.aios-core/docs/SHARD-TRANSLATION-GUIDE.md +335 -335
- package/.aios-core/docs/component-creation-guide.md +457 -457
- package/.aios-core/docs/session-update-pattern.md +307 -307
- package/.aios-core/docs/standards/AGENT-PERSONALIZATION-STANDARD-V1.md +572 -572
- package/.aios-core/docs/standards/AIOS-COLOR-PALETTE-QUICK-REFERENCE.md +185 -185
- package/.aios-core/docs/standards/AIOS-COLOR-PALETTE-V2.1.md +354 -354
- package/.aios-core/docs/standards/AIOS-FRAMEWORK-MASTER.md +1963 -1963
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1-COMPLETE.md +821 -821
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1-SUMMARY.md +1190 -1190
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1.md +439 -439
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.2-SUMMARY.md +1339 -1339
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO.md +5398 -5398
- package/.aios-core/docs/standards/EXECUTOR-DECISION-TREE.md +697 -697
- package/.aios-core/docs/standards/OPEN-SOURCE-VS-SERVICE-DIFFERENCES.md +511 -511
- package/.aios-core/docs/standards/QUALITY-GATES-SPECIFICATION.md +556 -556
- package/.aios-core/docs/standards/STANDARDS-INDEX.md +210 -210
- package/.aios-core/docs/standards/STORY-TEMPLATE-V2-SPECIFICATION.md +550 -550
- package/.aios-core/docs/standards/TASK-FORMAT-SPECIFICATION-V1.md +1414 -1414
- package/.aios-core/docs/standards/V3-ARCHITECTURAL-DECISIONS.md +523 -523
- package/.aios-core/docs/template-syntax.md +266 -266
- package/.aios-core/docs/troubleshooting-guide.md +624 -624
- package/.aios-core/index.esm.js +15 -15
- package/.aios-core/index.js +1 -1
- package/.aios-core/infrastructure/README.md +126 -126
- package/.aios-core/infrastructure/integrations/pm-adapters/README.md +59 -59
- package/.aios-core/infrastructure/scripts/approval-workflow.js +1 -1
- package/.aios-core/infrastructure/scripts/batch-creator.js +1 -1
- package/.aios-core/infrastructure/scripts/component-generator.js +3 -3
- package/.aios-core/infrastructure/scripts/component-metadata.js +1 -1
- package/.aios-core/infrastructure/scripts/component-search.js +1 -1
- package/.aios-core/infrastructure/scripts/coverage-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/dependency-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/dependency-impact-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/documentation-integrity/brownfield-analyzer.js +501 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/config-generator.js +368 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/deployment-config-loader.js +308 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/doc-generator.js +331 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/gitignore-generator.js +312 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/index.js +74 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/mode-detector.js +389 -0
- package/.aios-core/infrastructure/scripts/framework-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/improvement-engine.js +1 -1
- package/.aios-core/infrastructure/scripts/llm-routing/install-llm-routing.js +26 -13
- package/.aios-core/infrastructure/scripts/llm-routing/templates/claude-free-tracked.cmd +127 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/claude-free-tracked.sh +108 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/deepseek-proxy.cmd +71 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/deepseek-proxy.sh +65 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/deepseek-usage.cmd +51 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/deepseek-usage.sh +16 -0
- package/.aios-core/infrastructure/scripts/llm-routing/usage-tracker/index.js +549 -0
- package/.aios-core/infrastructure/scripts/modification-risk-assessment.js +1 -1
- package/.aios-core/infrastructure/scripts/performance-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/pm-adapter.js +134 -134
- package/.aios-core/infrastructure/scripts/repository-detector.js +3 -3
- package/.aios-core/infrastructure/scripts/template-engine.js +1 -1
- package/.aios-core/infrastructure/scripts/template-validator.js +1 -1
- package/.aios-core/infrastructure/scripts/test-generator.js +1 -1
- package/.aios-core/infrastructure/scripts/test-quality-assessment.js +1 -1
- package/.aios-core/infrastructure/scripts/transaction-manager.js +1 -1
- package/.aios-core/infrastructure/scripts/usage-analytics.js +1 -1
- package/.aios-core/infrastructure/scripts/visual-impact-generator.js +2 -2
- package/.aios-core/infrastructure/templates/core-config/core-config-brownfield.tmpl.yaml +176 -0
- package/.aios-core/infrastructure/templates/core-config/core-config-greenfield.tmpl.yaml +127 -0
- package/.aios-core/infrastructure/templates/github-workflows/README.md +109 -109
- package/.aios-core/infrastructure/templates/gitignore/gitignore-aios-base.tmpl +63 -0
- package/.aios-core/infrastructure/templates/gitignore/gitignore-brownfield-merge.tmpl +18 -0
- package/.aios-core/infrastructure/templates/gitignore/gitignore-node.tmpl +85 -0
- package/.aios-core/infrastructure/templates/gitignore/gitignore-python.tmpl +145 -0
- package/.aios-core/infrastructure/templates/project-docs/coding-standards-tmpl.md +346 -0
- package/.aios-core/infrastructure/templates/project-docs/source-tree-tmpl.md +177 -0
- package/.aios-core/infrastructure/templates/project-docs/tech-stack-tmpl.md +267 -0
- package/.aios-core/infrastructure/tests/regression-suite-v2.md +621 -621
- package/.aios-core/infrastructure/tools/README.md +222 -222
- package/.aios-core/infrastructure/tools/cli/github-cli.yaml +200 -200
- package/.aios-core/infrastructure/tools/cli/railway-cli.yaml +260 -260
- package/.aios-core/infrastructure/tools/cli/supabase-cli.yaml +224 -224
- package/.aios-core/infrastructure/tools/local/ffmpeg.yaml +261 -261
- package/.aios-core/infrastructure/tools/mcp/21st-dev-magic.yaml +127 -127
- package/.aios-core/infrastructure/tools/mcp/browser.yaml +103 -103
- package/.aios-core/infrastructure/tools/mcp/clickup.yaml +534 -534
- package/.aios-core/infrastructure/tools/mcp/context7.yaml +78 -78
- package/.aios-core/infrastructure/tools/mcp/desktop-commander.yaml +180 -180
- package/.aios-core/infrastructure/tools/mcp/exa.yaml +103 -103
- package/.aios-core/infrastructure/tools/mcp/google-workspace.yaml +930 -930
- package/.aios-core/infrastructure/tools/mcp/n8n.yaml +551 -551
- package/.aios-core/infrastructure/tools/mcp/supabase.yaml +808 -808
- package/.aios-core/install-manifest.yaml +347 -347
- package/.aios-core/product/README.md +56 -56
- package/.aios-core/product/checklists/accessibility-wcag-checklist.md +80 -0
- package/.aios-core/product/checklists/architect-checklist.md +443 -443
- package/.aios-core/product/checklists/change-checklist.md +182 -182
- package/.aios-core/product/checklists/component-quality-checklist.md +74 -0
- package/.aios-core/product/checklists/database-design-checklist.md +119 -119
- package/.aios-core/product/checklists/dba-predeploy-checklist.md +97 -97
- package/.aios-core/product/checklists/dba-rollback-checklist.md +99 -99
- package/.aios-core/product/checklists/migration-readiness-checklist.md +75 -0
- package/.aios-core/product/checklists/pattern-audit-checklist.md +88 -0
- package/.aios-core/product/checklists/pm-checklist.md +375 -375
- package/.aios-core/product/checklists/po-master-checklist.md +441 -441
- package/.aios-core/product/checklists/pre-push-checklist.md +108 -108
- package/.aios-core/product/checklists/release-checklist.md +122 -122
- package/.aios-core/product/checklists/story-dod-checklist.md +101 -101
- package/.aios-core/product/checklists/story-draft-checklist.md +215 -215
- package/.aios-core/product/data/atomic-design-principles.md +108 -0
- package/.aios-core/product/data/brainstorming-techniques.md +36 -36
- package/.aios-core/product/data/consolidation-algorithms.md +142 -0
- package/.aios-core/product/data/database-best-practices.md +182 -0
- package/.aios-core/product/data/design-token-best-practices.md +107 -0
- package/.aios-core/product/data/elicitation-methods.md +134 -134
- package/.aios-core/product/data/integration-patterns.md +207 -0
- package/.aios-core/product/data/migration-safety-guide.md +329 -0
- package/.aios-core/product/data/mode-selection-best-practices.md +471 -471
- package/.aios-core/product/data/postgres-tuning-guide.md +300 -0
- package/.aios-core/product/data/rls-security-patterns.md +333 -0
- package/.aios-core/product/data/roi-calculation-guide.md +142 -0
- package/.aios-core/product/data/supabase-patterns.md +330 -0
- package/.aios-core/product/data/test-levels-framework.md +148 -148
- package/.aios-core/product/data/test-priorities-matrix.md +174 -174
- package/.aios-core/product/data/wcag-compliance-guide.md +267 -0
- package/.aios-core/product/templates/1mcp-config.yaml +225 -225
- package/.aios-core/product/templates/activation-instructions-inline-greeting.yaml +63 -63
- package/.aios-core/product/templates/activation-instructions-template.md +258 -258
- package/.aios-core/product/templates/agent-template.yaml +120 -120
- package/.aios-core/product/templates/architecture-tmpl.yaml +650 -650
- package/.aios-core/product/templates/brainstorming-output-tmpl.yaml +155 -155
- package/.aios-core/product/templates/brownfield-architecture-tmpl.yaml +475 -475
- package/.aios-core/product/templates/brownfield-prd-tmpl.yaml +279 -279
- package/.aios-core/product/templates/changelog-template.md +134 -134
- package/.aios-core/product/templates/command-rationalization-matrix.md +152 -152
- package/.aios-core/product/templates/competitor-analysis-tmpl.yaml +292 -292
- package/.aios-core/product/templates/design-story-tmpl.yaml +587 -587
- package/.aios-core/product/templates/ds-artifact-analysis.md +70 -70
- package/.aios-core/product/templates/front-end-architecture-tmpl.yaml +205 -205
- package/.aios-core/product/templates/front-end-spec-tmpl.yaml +348 -348
- package/.aios-core/product/templates/fullstack-architecture-tmpl.yaml +804 -804
- package/.aios-core/product/templates/github-pr-template.md +67 -67
- package/.aios-core/product/templates/gordon-mcp.yaml +140 -140
- package/.aios-core/product/templates/ide-rules/antigravity-rules.md +115 -115
- package/.aios-core/product/templates/ide-rules/claude-rules.md +221 -221
- package/.aios-core/product/templates/ide-rules/cline-rules.md +84 -84
- package/.aios-core/product/templates/ide-rules/copilot-rules.md +92 -92
- package/.aios-core/product/templates/ide-rules/cursor-rules.md +115 -115
- package/.aios-core/product/templates/ide-rules/gemini-rules.md +85 -85
- package/.aios-core/product/templates/ide-rules/roo-rules.md +86 -86
- package/.aios-core/product/templates/ide-rules/trae-rules.md +104 -104
- package/.aios-core/product/templates/ide-rules/windsurf-rules.md +80 -80
- package/.aios-core/product/templates/index-strategy-tmpl.yaml +53 -53
- package/.aios-core/product/templates/market-research-tmpl.yaml +251 -251
- package/.aios-core/product/templates/mcp-workflow.js +271 -271
- package/.aios-core/product/templates/migration-plan-tmpl.yaml +1022 -1022
- package/.aios-core/product/templates/migration-strategy-tmpl.md +524 -524
- package/.aios-core/product/templates/personalized-agent-template.md +258 -258
- package/.aios-core/product/templates/personalized-checklist-template.md +340 -340
- package/.aios-core/product/templates/personalized-task-template-v2.md +905 -905
- package/.aios-core/product/templates/personalized-task-template.md +344 -344
- package/.aios-core/product/templates/personalized-template-file.yaml +322 -322
- package/.aios-core/product/templates/personalized-workflow-template.yaml +460 -460
- package/.aios-core/product/templates/prd-tmpl.yaml +201 -201
- package/.aios-core/product/templates/project-brief-tmpl.yaml +220 -220
- package/.aios-core/product/templates/qa-gate-tmpl.yaml +240 -240
- package/.aios-core/product/templates/rls-policies-tmpl.yaml +1203 -1203
- package/.aios-core/product/templates/schema-design-tmpl.yaml +428 -428
- package/.aios-core/product/templates/state-persistence-tmpl.yaml +219 -219
- package/.aios-core/product/templates/story-tmpl.yaml +331 -331
- package/.aios-core/product/templates/task-execution-report.md +495 -495
- package/.aios-core/product/templates/task-template.md +122 -122
- package/.aios-core/product/templates/token-exports-tailwind-tmpl.js +395 -395
- package/.aios-core/product/templates/tokens-schema-tmpl.yaml +305 -305
- package/.aios-core/product/templates/workflow-template.yaml +133 -133
- package/.aios-core/scripts/README.md +354 -354
- package/.aios-core/scripts/aios-doc-template.md +325 -325
- package/.aios-core/scripts/elicitation-engine.js +1 -1
- package/.aios-core/scripts/test-template-system.js +1 -1
- package/.aios-core/scripts/workflow-management.md +69 -69
- package/.aios-core/user-guide.md +1413 -1413
- package/.aios-core/working-in-the-brownfield.md +361 -361
- package/LICENSE +1 -1
- package/README.md +702 -703
- package/bin/aios-init-old.js +3 -3
- package/bin/aios-init-v4.js +1 -1
- package/bin/aios-init.backup-v1.1.4.js +1 -1
- package/bin/aios-init.js +3 -3
- package/bin/aios.js +279 -279
- package/bin/utils/install-errors.js +339 -339
- package/bin/utils/install-transaction.js +445 -445
- package/index.d.ts +18 -18
- package/index.esm.js +20 -20
- package/index.js +6 -6
- package/package.json +8 -10
- package/packages/installer/src/config/templates/env-template.js +27 -4
- package/packages/installer/src/detection/detect-project-type.js +81 -81
- package/packages/installer/src/wizard/wizard.js +185 -34
- package/packages/installer/tests/integration/environment-configuration.test.js +2 -1
- package/packages/installer/tests/integration/wizard-detection.test.js +8 -6
- package/packages/installer/tests/unit/env-template.test.js +11 -10
- package/src/config/ide-configs.js +1 -1
- package/src/wizard/feedback.js +2 -2
- package/src/wizard/index.js +1 -1
- package/src/wizard/validation/report-generator.js +1 -1
- package/src/wizard/validation/troubleshooting-system.js +13 -13
- package/.aios-core/development/tasks/validate-structure.md +0 -243
- package/.aios-core/infrastructure/scripts/_archived/final-todo-count.js +0 -122
- package/.aios-core/infrastructure/scripts/_archived/fix-yaml-formatting.js +0 -89
- package/.aios-core/infrastructure/scripts/_archived/migration-generator.js +0 -780
- package/.aios-core/infrastructure/scripts/_archived/migration-path-generator.js +0 -950
- package/.aios-core/infrastructure/scripts/_archived/phase2-entrada-saida-errors.js +0 -425
- package/.aios-core/infrastructure/scripts/_archived/phase2-spot-check.js +0 -132
- package/.aios-core/infrastructure/scripts/_archived/phase3-tools-scripts-validation.js +0 -381
- package/.aios-core/infrastructure/scripts/_archived/phase4-metadata-performance.js +0 -203
- package/.aios-core/infrastructure/scripts/_archived/test-yaml-parsing.js +0 -24
- package/.aios-core/infrastructure/scripts/_archived/verify-yaml-fix.js +0 -51
- package/.aios-core/infrastructure/scripts/source-tree-guardian/index.js +0 -375
- package/.aios-core/infrastructure/scripts/source-tree-guardian/manifest-generator.js +0 -410
- package/.aios-core/infrastructure/scripts/source-tree-guardian/rules/naming-rules.yaml +0 -285
- package/.aios-core/infrastructure/scripts/source-tree-guardian/rules/placement-rules.yaml +0 -262
- package/.aios-core/infrastructure/scripts/source-tree-guardian/validator.js +0 -468
- package/.aios-core/tasks/find-component.md.legacy +0 -391
- package/.aios-core/tasks/generate-commit-message.md.legacy +0 -426
- package/.aios-core/tasks/generate-migration.md.legacy +0 -382
- package/.aios-core/tasks/rollback-modification.md.legacy +0 -307
- package/.aios-core/tasks/update-tests.md.legacy +0 -283
|
@@ -1,739 +1,739 @@
|
|
|
1
|
-
# Task: Rollback Database
|
|
2
|
-
|
|
3
|
-
**Purpose**: Restore database to previous snapshot or run rollback script
|
|
4
|
-
|
|
5
|
-
**Elicit**: true
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Execution Modes
|
|
10
|
-
|
|
11
|
-
**Choose your execution mode:**
|
|
12
|
-
|
|
13
|
-
### 1. YOLO Mode - Fast, Autonomous (0-1 prompts)
|
|
14
|
-
- Autonomous decision making with logging
|
|
15
|
-
- Minimal user interaction
|
|
16
|
-
- **Best for:** Simple, deterministic tasks
|
|
17
|
-
|
|
18
|
-
### 2. Interactive Mode - Balanced, Educational (5-10 prompts) **[DEFAULT]**
|
|
19
|
-
- Explicit decision checkpoints
|
|
20
|
-
- Educational explanations
|
|
21
|
-
- **Best for:** Learning, complex decisions
|
|
22
|
-
|
|
23
|
-
### 3. Pre-Flight Planning - Comprehensive Upfront Planning
|
|
24
|
-
- Task analysis phase (identify all ambiguities)
|
|
25
|
-
- Zero ambiguity execution
|
|
26
|
-
- **Best for:** Ambiguous requirements, critical work
|
|
27
|
-
|
|
28
|
-
**Parameter:** `mode` (optional, default: `interactive`)
|
|
29
|
-
|
|
30
|
-
---
|
|
31
|
-
|
|
32
|
-
## Task Definition (AIOS Task Format V1.0)
|
|
33
|
-
|
|
34
|
-
```yaml
|
|
35
|
-
task: dbRollback()
|
|
36
|
-
responsável: Dara (Sage)
|
|
37
|
-
responsavel_type: Agente
|
|
38
|
-
atomic_layer: Organism
|
|
39
|
-
|
|
40
|
-
**Entrada:**
|
|
41
|
-
- campo: query
|
|
42
|
-
tipo: string
|
|
43
|
-
origem: User Input
|
|
44
|
-
obrigatório: true
|
|
45
|
-
validação: Valid SQL query
|
|
46
|
-
|
|
47
|
-
- campo: params
|
|
48
|
-
tipo: object
|
|
49
|
-
origem: User Input
|
|
50
|
-
obrigatório: false
|
|
51
|
-
validação: Query parameters
|
|
52
|
-
|
|
53
|
-
- campo: connection
|
|
54
|
-
tipo: object
|
|
55
|
-
origem: config
|
|
56
|
-
obrigatório: true
|
|
57
|
-
validação: Valid PostgreSQL connection via Supabase
|
|
58
|
-
|
|
59
|
-
**Saída:**
|
|
60
|
-
- campo: query_result
|
|
61
|
-
tipo: array
|
|
62
|
-
destino: Memory
|
|
63
|
-
persistido: false
|
|
64
|
-
|
|
65
|
-
- campo: records_affected
|
|
66
|
-
tipo: number
|
|
67
|
-
destino: Return value
|
|
68
|
-
persistido: false
|
|
69
|
-
|
|
70
|
-
- campo: execution_time
|
|
71
|
-
tipo: number
|
|
72
|
-
destino: Memory
|
|
73
|
-
persistido: false
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
---
|
|
77
|
-
|
|
78
|
-
## Pre-Conditions
|
|
79
|
-
|
|
80
|
-
**Purpose:** Validate prerequisites BEFORE task execution (blocking)
|
|
81
|
-
|
|
82
|
-
**Checklist:**
|
|
83
|
-
|
|
84
|
-
```yaml
|
|
85
|
-
pre-conditions:
|
|
86
|
-
- [ ] Database connection established; query syntax valid
|
|
87
|
-
tipo: pre-condition
|
|
88
|
-
blocker: true
|
|
89
|
-
validação: |
|
|
90
|
-
Check database connection established; query syntax valid
|
|
91
|
-
error_message: "Pre-condition failed: Database connection established; query syntax valid"
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
---
|
|
95
|
-
|
|
96
|
-
## Post-Conditions
|
|
97
|
-
|
|
98
|
-
**Purpose:** Validate execution success AFTER task completes
|
|
99
|
-
|
|
100
|
-
**Checklist:**
|
|
101
|
-
|
|
102
|
-
```yaml
|
|
103
|
-
post-conditions:
|
|
104
|
-
- [ ] Query executed; results returned; transaction committed
|
|
105
|
-
tipo: post-condition
|
|
106
|
-
blocker: true
|
|
107
|
-
validação: |
|
|
108
|
-
Verify query executed; results returned; transaction committed
|
|
109
|
-
error_message: "Post-condition failed: Query executed; results returned; transaction committed"
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
---
|
|
113
|
-
|
|
114
|
-
## Acceptance Criteria
|
|
115
|
-
|
|
116
|
-
**Purpose:** Definitive pass/fail criteria for task completion
|
|
117
|
-
|
|
118
|
-
**Checklist:**
|
|
119
|
-
|
|
120
|
-
```yaml
|
|
121
|
-
acceptance-criteria:
|
|
122
|
-
- [ ] Data persisted correctly; constraints respected; no orphaned data
|
|
123
|
-
tipo: acceptance-criterion
|
|
124
|
-
blocker: true
|
|
125
|
-
validação: |
|
|
126
|
-
Assert data persisted correctly; constraints respected; no orphaned data
|
|
127
|
-
error_message: "Acceptance criterion not met: Data persisted correctly; constraints respected; no orphaned data"
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
---
|
|
131
|
-
|
|
132
|
-
## Tools
|
|
133
|
-
|
|
134
|
-
**External/shared resources used by this task:**
|
|
135
|
-
|
|
136
|
-
- **Tool:** supabase
|
|
137
|
-
- **Purpose:** PostgreSQL database connection via Supabase client
|
|
138
|
-
- **Source:** @supabase/supabase-js
|
|
139
|
-
|
|
140
|
-
- **Tool:** query-validator
|
|
141
|
-
- **Purpose:** SQL query syntax validation
|
|
142
|
-
- **Source:** .aios-core/utils/db-query-validator.js
|
|
143
|
-
|
|
144
|
-
---
|
|
145
|
-
|
|
146
|
-
## Scripts
|
|
147
|
-
|
|
148
|
-
**Agent-specific code for this task:**
|
|
149
|
-
|
|
150
|
-
- **Script:** db-query.js
|
|
151
|
-
- **Purpose:** Execute PostgreSQL queries with error handling via Supabase
|
|
152
|
-
- **Language:** JavaScript
|
|
153
|
-
- **Location:** .aios-core/scripts/db-query.js
|
|
154
|
-
|
|
155
|
-
---
|
|
156
|
-
|
|
157
|
-
## Error Handling
|
|
158
|
-
|
|
159
|
-
**Strategy:** abort
|
|
160
|
-
|
|
161
|
-
**Common Errors:**
|
|
162
|
-
|
|
163
|
-
1. **Error:** Connection Failed
|
|
164
|
-
- **Cause:** Unable to connect to Neo4j database
|
|
165
|
-
- **Resolution:** Check connection string, credentials, network
|
|
166
|
-
- **Recovery:** Retry with exponential backoff (max 3 attempts)
|
|
167
|
-
|
|
168
|
-
2. **Error:** Query Syntax Error
|
|
169
|
-
- **Cause:** Invalid Cypher query syntax
|
|
170
|
-
- **Resolution:** Validate query syntax before execution
|
|
171
|
-
- **Recovery:** Return detailed syntax error, suggest fix
|
|
172
|
-
|
|
173
|
-
3. **Error:** Transaction Rollback
|
|
174
|
-
- **Cause:** Query violates constraints or timeout
|
|
175
|
-
- **Resolution:** Review query logic and constraints
|
|
176
|
-
- **Recovery:** Automatic rollback, preserve data integrity
|
|
177
|
-
|
|
178
|
-
---
|
|
179
|
-
|
|
180
|
-
## Performance
|
|
181
|
-
|
|
182
|
-
**Expected Metrics:**
|
|
183
|
-
|
|
184
|
-
```yaml
|
|
185
|
-
duration_expected: 5-15 min (estimated)
|
|
186
|
-
cost_estimated: $0.003-0.010
|
|
187
|
-
token_usage: ~3,000-10,000 tokens
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
**Optimization Notes:**
|
|
191
|
-
- Break into smaller workflows; implement checkpointing; use async processing where possible
|
|
192
|
-
|
|
193
|
-
---
|
|
194
|
-
|
|
195
|
-
## Metadata
|
|
196
|
-
|
|
197
|
-
```yaml
|
|
198
|
-
story: N/A
|
|
199
|
-
version: 1.0.0
|
|
200
|
-
dependencies:
|
|
201
|
-
- N/A
|
|
202
|
-
tags:
|
|
203
|
-
- database
|
|
204
|
-
- infrastructure
|
|
205
|
-
updated_at: 2025-11-17
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
---
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
## Inputs
|
|
212
|
-
|
|
213
|
-
- `target` (string): Path to snapshot file or rollback script
|
|
214
|
-
|
|
215
|
-
---
|
|
216
|
-
|
|
217
|
-
## Process
|
|
218
|
-
|
|
219
|
-
### 1. Confirm Rollback
|
|
220
|
-
|
|
221
|
-
**CRITICAL WARNING**: Display to user before proceeding
|
|
222
|
-
|
|
223
|
-
```
|
|
224
|
-
⚠️ DATABASE ROLLBACK WARNING ⚠️
|
|
225
|
-
|
|
226
|
-
You are about to restore the database to a previous state.
|
|
227
|
-
|
|
228
|
-
Target: {target}
|
|
229
|
-
|
|
230
|
-
This will:
|
|
231
|
-
✓ Drop and recreate all schema objects
|
|
232
|
-
✓ Preserve existing data (if schema-only snapshot)
|
|
233
|
-
✗ Lose any schema changes made after snapshot
|
|
234
|
-
✗ Potentially break application if schema incompatible
|
|
235
|
-
|
|
236
|
-
Are you ABSOLUTELY SURE you want to proceed?
|
|
237
|
-
```
|
|
238
|
-
|
|
239
|
-
Ask user to type: `ROLLBACK` to confirm
|
|
240
|
-
|
|
241
|
-
### 2. Pre-Rollback Safety Checks
|
|
242
|
-
|
|
243
|
-
```bash
|
|
244
|
-
# Create emergency snapshot before rollback
|
|
245
|
-
echo "Creating emergency snapshot before rollback..."
|
|
246
|
-
TS=$(date +%Y%m%d_%H%M%S)
|
|
247
|
-
EMERGENCY="supabase/snapshots/${TS}_emergency_before_rollback.sql"
|
|
248
|
-
|
|
249
|
-
pg_dump "$SUPABASE_DB_URL" \
|
|
250
|
-
--schema-only \
|
|
251
|
-
--clean \
|
|
252
|
-
--if-exists \
|
|
253
|
-
> "$EMERGENCY"
|
|
254
|
-
|
|
255
|
-
if [ $? -eq 0 ]; then
|
|
256
|
-
echo "✓ Emergency snapshot: $EMERGENCY"
|
|
257
|
-
else
|
|
258
|
-
echo "❌ Emergency snapshot failed - ABORTING ROLLBACK"
|
|
259
|
-
exit 1
|
|
260
|
-
fi
|
|
261
|
-
```
|
|
262
|
-
|
|
263
|
-
### 3. Validate Rollback Target
|
|
264
|
-
|
|
265
|
-
```bash
|
|
266
|
-
TARGET="{target}"
|
|
267
|
-
|
|
268
|
-
# Check file exists
|
|
269
|
-
if [ ! -f "$TARGET" ]; then
|
|
270
|
-
echo "❌ Rollback target not found: $TARGET"
|
|
271
|
-
exit 1
|
|
272
|
-
fi
|
|
273
|
-
|
|
274
|
-
# Check file is valid SQL
|
|
275
|
-
if ! grep -q "CREATE\|DROP\|ALTER" "$TARGET"; then
|
|
276
|
-
echo "❌ File doesn't appear to be valid SQL"
|
|
277
|
-
exit 1
|
|
278
|
-
fi
|
|
279
|
-
|
|
280
|
-
echo "✓ Rollback target validated: $TARGET"
|
|
281
|
-
echo " File size: $(ls -lh "$TARGET" | awk '{print $5}')"
|
|
282
|
-
echo " Modified: $(ls -lh "$TARGET" | awk '{print $6, $7, $8}')"
|
|
283
|
-
```
|
|
284
|
-
|
|
285
|
-
### 4. Acquire Exclusive Lock
|
|
286
|
-
|
|
287
|
-
Prevent concurrent operations:
|
|
288
|
-
|
|
289
|
-
```bash
|
|
290
|
-
echo "Acquiring exclusive lock..."
|
|
291
|
-
|
|
292
|
-
psql "$SUPABASE_DB_URL" -v ON_ERROR_STOP=1 -c \
|
|
293
|
-
"SELECT pg_try_advisory_lock(hashtext('dbsage:rollback')) AS got" \
|
|
294
|
-
| grep -q t || { echo "❌ Another operation is running"; exit 1; }
|
|
295
|
-
|
|
296
|
-
echo "✓ Lock acquired"
|
|
297
|
-
```
|
|
298
|
-
|
|
299
|
-
### 5. Execute Rollback
|
|
300
|
-
|
|
301
|
-
```bash
|
|
302
|
-
echo ""
|
|
303
|
-
echo "=== EXECUTING ROLLBACK ==="
|
|
304
|
-
echo "Started: $(date -Iseconds)"
|
|
305
|
-
echo ""
|
|
306
|
-
|
|
307
|
-
# Run rollback in single transaction
|
|
308
|
-
psql "$SUPABASE_DB_URL" -v ON_ERROR_STOP=1 -f "$TARGET"
|
|
309
|
-
|
|
310
|
-
RESULT=$?
|
|
311
|
-
|
|
312
|
-
echo ""
|
|
313
|
-
echo "Completed: $(date -Iseconds)"
|
|
314
|
-
echo ""
|
|
315
|
-
|
|
316
|
-
if [ $RESULT -eq 0 ]; then
|
|
317
|
-
echo "✅ ROLLBACK SUCCESSFUL"
|
|
318
|
-
else
|
|
319
|
-
echo "❌ ROLLBACK FAILED"
|
|
320
|
-
echo "Emergency snapshot available: $EMERGENCY"
|
|
321
|
-
echo "Attempting to restore from emergency snapshot..."
|
|
322
|
-
|
|
323
|
-
# Try to restore emergency snapshot
|
|
324
|
-
psql "$SUPABASE_DB_URL" -v ON_ERROR_STOP=1 -f "$EMERGENCY"
|
|
325
|
-
|
|
326
|
-
if [ $? -eq 0 ]; then
|
|
327
|
-
echo "✓ Restored from emergency snapshot"
|
|
328
|
-
else
|
|
329
|
-
echo "❌ Emergency restore also failed - DATABASE MAY BE INCONSISTENT"
|
|
330
|
-
echo "Manual intervention required"
|
|
331
|
-
fi
|
|
332
|
-
|
|
333
|
-
exit 1
|
|
334
|
-
fi
|
|
335
|
-
```
|
|
336
|
-
|
|
337
|
-
### 6. Post-Rollback Validation
|
|
338
|
-
|
|
339
|
-
```bash
|
|
340
|
-
echo ""
|
|
341
|
-
echo "=== POST-ROLLBACK VALIDATION ==="
|
|
342
|
-
echo ""
|
|
343
|
-
|
|
344
|
-
# Count schema objects
|
|
345
|
-
echo "Schema object counts:"
|
|
346
|
-
psql "$SUPABASE_DB_URL" -t -c \
|
|
347
|
-
"SELECT
|
|
348
|
-
(SELECT COUNT(*) FROM pg_tables WHERE schemaname='public') AS tables,
|
|
349
|
-
(SELECT COUNT(*) FROM pg_policies WHERE schemaname='public') AS policies,
|
|
350
|
-
(SELECT COUNT(*) FROM pg_proc WHERE pronamespace='public'::regnamespace) AS functions;"
|
|
351
|
-
|
|
352
|
-
# Check for basic sanity
|
|
353
|
-
echo ""
|
|
354
|
-
echo "Quick sanity checks:"
|
|
355
|
-
psql "$SUPABASE_DB_URL" -v ON_ERROR_STOP=1 <<'SQL'
|
|
356
|
-
-- Check tables exist
|
|
357
|
-
SELECT 'Tables exist' AS check, COUNT(*) > 0 AS pass
|
|
358
|
-
FROM pg_tables WHERE schemaname='public';
|
|
359
|
-
|
|
360
|
-
-- Check functions exist
|
|
361
|
-
SELECT 'Functions exist' AS check, COUNT(*) > 0 AS pass
|
|
362
|
-
FROM pg_proc WHERE pronamespace='public'::regnamespace;
|
|
363
|
-
|
|
364
|
-
-- Check for orphaned objects (optional)
|
|
365
|
-
-- SELECT 'No orphaned triggers' AS check, COUNT(*) = 0 AS pass
|
|
366
|
-
-- FROM pg_trigger WHERE tgrelid NOT IN (SELECT oid FROM pg_class);
|
|
367
|
-
SQL
|
|
368
|
-
```
|
|
369
|
-
|
|
370
|
-
### 7. Release Lock & Create Post-Rollback Snapshot
|
|
371
|
-
|
|
372
|
-
```bash
|
|
373
|
-
# Release lock
|
|
374
|
-
psql "$SUPABASE_DB_URL" -v ON_ERROR_STOP=1 -c \
|
|
375
|
-
"SELECT pg_advisory_unlock(hashtext('dbsage:rollback'));"
|
|
376
|
-
|
|
377
|
-
echo "✓ Lock released"
|
|
378
|
-
|
|
379
|
-
# Create post-rollback snapshot
|
|
380
|
-
POST_SNAPSHOT="supabase/snapshots/${TS}_post_rollback.sql"
|
|
381
|
-
pg_dump "$SUPABASE_DB_URL" --schema-only --clean --if-exists > "$POST_SNAPSHOT"
|
|
382
|
-
|
|
383
|
-
echo "✓ Post-rollback snapshot: $POST_SNAPSHOT"
|
|
384
|
-
```
|
|
385
|
-
|
|
386
|
-
### 8. Report Results
|
|
387
|
-
|
|
388
|
-
```
|
|
389
|
-
✅ DATABASE ROLLBACK COMPLETED
|
|
390
|
-
|
|
391
|
-
Rolled back to: {target}
|
|
392
|
-
Timestamp: {TS}
|
|
393
|
-
|
|
394
|
-
Snapshots created:
|
|
395
|
-
- Emergency (before): $EMERGENCY
|
|
396
|
-
- Post-rollback (after): $POST_SNAPSHOT
|
|
397
|
-
|
|
398
|
-
Next steps:
|
|
399
|
-
1. *smoke-test - Validate schema
|
|
400
|
-
2. *rls-audit - Check security
|
|
401
|
-
3. Test application functionality
|
|
402
|
-
4. Monitor for issues
|
|
403
|
-
|
|
404
|
-
If issues detected:
|
|
405
|
-
*rollback $EMERGENCY # Restore to pre-rollback state
|
|
406
|
-
```
|
|
407
|
-
|
|
408
|
-
---
|
|
409
|
-
|
|
410
|
-
## Rollback Strategies
|
|
411
|
-
|
|
412
|
-
### Strategy 1: Snapshot Restore (Recommended)
|
|
413
|
-
|
|
414
|
-
**Use when**: Reverting schema changes
|
|
415
|
-
|
|
416
|
-
```bash
|
|
417
|
-
*rollback supabase/snapshots/20251026_pre_migration.sql
|
|
418
|
-
```
|
|
419
|
-
|
|
420
|
-
**Pros**:
|
|
421
|
-
- ✅ Fast
|
|
422
|
-
- ✅ Complete schema state
|
|
423
|
-
- ✅ Tested with pg_dump
|
|
424
|
-
|
|
425
|
-
**Cons**:
|
|
426
|
-
- ❌ Data preserved (may be incompatible)
|
|
427
|
-
- ❌ Requires prior snapshot
|
|
428
|
-
|
|
429
|
-
### Strategy 2: Explicit Rollback Script
|
|
430
|
-
|
|
431
|
-
**Use when**: Surgical changes to specific objects
|
|
432
|
-
|
|
433
|
-
```sql
|
|
434
|
-
-- supabase/rollback/20251026_rollback_user_roles.sql
|
|
435
|
-
|
|
436
|
-
BEGIN;
|
|
437
|
-
|
|
438
|
-
-- Undo changes in reverse order
|
|
439
|
-
DROP TRIGGER IF EXISTS set_user_role_timestamp ON user_roles;
|
|
440
|
-
DROP FUNCTION IF EXISTS update_user_role_timestamp();
|
|
441
|
-
DROP TABLE IF EXISTS user_roles;
|
|
442
|
-
|
|
443
|
-
-- Restore previous state if needed
|
|
444
|
-
-- ...
|
|
445
|
-
|
|
446
|
-
COMMIT;
|
|
447
|
-
```
|
|
448
|
-
|
|
449
|
-
```bash
|
|
450
|
-
*rollback supabase/rollback/20251026_rollback_user_roles.sql
|
|
451
|
-
```
|
|
452
|
-
|
|
453
|
-
**Pros**:
|
|
454
|
-
- ✅ Precise control
|
|
455
|
-
- ✅ Documented undo process
|
|
456
|
-
- ✅ Can be tested
|
|
457
|
-
|
|
458
|
-
**Cons**:
|
|
459
|
-
- ❌ Must write manually
|
|
460
|
-
- ❌ Easy to forget steps
|
|
461
|
-
- ❌ Must maintain with migration
|
|
462
|
-
|
|
463
|
-
### Strategy 3: Forward Fix
|
|
464
|
-
|
|
465
|
-
**Use when**: Rollback is dangerous, fix forward instead
|
|
466
|
-
|
|
467
|
-
```sql
|
|
468
|
-
-- Instead of rolling back, apply corrective migration
|
|
469
|
-
-- migration: 20251026_fix_user_roles_bug.sql
|
|
470
|
-
```
|
|
471
|
-
|
|
472
|
-
**Pros**:
|
|
473
|
-
- ✅ No data loss risk
|
|
474
|
-
- ✅ Maintains history
|
|
475
|
-
- ✅ Safe in production
|
|
476
|
-
|
|
477
|
-
**Cons**:
|
|
478
|
-
- ❌ More work
|
|
479
|
-
- ❌ Leaves intermediate state in history
|
|
480
|
-
|
|
481
|
-
---
|
|
482
|
-
|
|
483
|
-
## Rollback Decision Matrix
|
|
484
|
-
|
|
485
|
-
| Situation | Strategy | Command |
|
|
486
|
-
|-----------|----------|---------|
|
|
487
|
-
| Migration failed mid-way | Restore snapshot | `*rollback snapshot_before.sql` |
|
|
488
|
-
| Schema breaks app | Restore snapshot | `*rollback snapshot_before.sql` |
|
|
489
|
-
| Wrong migration applied | Restore snapshot | `*rollback snapshot_before.sql` |
|
|
490
|
-
| Minor bug in function | Forward fix | Create fix migration |
|
|
491
|
-
| Data corruption risk | Forward fix | Don't rollback |
|
|
492
|
-
| Production with users | Forward fix | Avoid schema rollback |
|
|
493
|
-
|
|
494
|
-
---
|
|
495
|
-
|
|
496
|
-
## Safety Checklist
|
|
497
|
-
|
|
498
|
-
Before executing rollback:
|
|
499
|
-
|
|
500
|
-
- [ ] Emergency snapshot created automatically ✓
|
|
501
|
-
- [ ] Application stopped or in maintenance mode
|
|
502
|
-
- [ ] Users notified of downtime
|
|
503
|
-
- [ ] Team aware of rollback operation
|
|
504
|
-
- [ ] Rollback target validated
|
|
505
|
-
- [ ] Exclusive lock acquired
|
|
506
|
-
- [ ] Post-rollback test plan ready
|
|
507
|
-
|
|
508
|
-
---
|
|
509
|
-
|
|
510
|
-
## Rollback in Different Environments
|
|
511
|
-
|
|
512
|
-
### Development
|
|
513
|
-
```bash
|
|
514
|
-
# Fast and loose - just do it
|
|
515
|
-
*rollback snapshot.sql
|
|
516
|
-
```
|
|
517
|
-
|
|
518
|
-
### Staging
|
|
519
|
-
```bash
|
|
520
|
-
# Test the rollback process
|
|
521
|
-
*rollback snapshot.sql
|
|
522
|
-
*smoke-test
|
|
523
|
-
# Test app functionality
|
|
524
|
-
```
|
|
525
|
-
|
|
526
|
-
### Production
|
|
527
|
-
```bash
|
|
528
|
-
# CAREFUL - follow full checklist
|
|
529
|
-
# 1. Notify stakeholders
|
|
530
|
-
# 2. Enable maintenance mode
|
|
531
|
-
# 3. Create emergency snapshot (automatic)
|
|
532
|
-
# 4. Coordinate with team
|
|
533
|
-
*rollback snapshot.sql
|
|
534
|
-
# 5. Validation
|
|
535
|
-
*smoke-test
|
|
536
|
-
*rls-audit
|
|
537
|
-
# 6. Test critical flows
|
|
538
|
-
# 7. Disable maintenance mode
|
|
539
|
-
# 8. Monitor closely
|
|
540
|
-
```
|
|
541
|
-
|
|
542
|
-
---
|
|
543
|
-
|
|
544
|
-
## Common Rollback Scenarios
|
|
545
|
-
|
|
546
|
-
### Scenario 1: Migration Failed During Apply
|
|
547
|
-
|
|
548
|
-
**Situation**: `*apply-migration` failed halfway
|
|
549
|
-
|
|
550
|
-
**Action**: PostgreSQL already rolled back transaction ✓
|
|
551
|
-
|
|
552
|
-
**No rollback needed**: Database unchanged
|
|
553
|
-
|
|
554
|
-
**Next steps**:
|
|
555
|
-
1. Fix migration file
|
|
556
|
-
2. `*dry-run` to test
|
|
557
|
-
3. `*apply-migration` again
|
|
558
|
-
|
|
559
|
-
### Scenario 2: Migration Succeeded but Breaks App
|
|
560
|
-
|
|
561
|
-
**Situation**: Schema change incompatible with application
|
|
562
|
-
|
|
563
|
-
**Action**: Rollback to pre-migration snapshot
|
|
564
|
-
|
|
565
|
-
```bash
|
|
566
|
-
*rollback supabase/snapshots/20251026_143022_pre_migration.sql
|
|
567
|
-
*smoke-test
|
|
568
|
-
# Deploy previous app version or fix app
|
|
569
|
-
```
|
|
570
|
-
|
|
571
|
-
### Scenario 3: Wrong Migration Applied
|
|
572
|
-
|
|
573
|
-
**Situation**: Applied v1.3.0 migration instead of v1.2.5
|
|
574
|
-
|
|
575
|
-
**Action**: Rollback to last known good state
|
|
576
|
-
|
|
577
|
-
```bash
|
|
578
|
-
*rollback supabase/snapshots/20251026_120000_v1_2_4.sql
|
|
579
|
-
*smoke-test
|
|
580
|
-
# Apply correct migration
|
|
581
|
-
*apply-migration v1_2_5.sql
|
|
582
|
-
```
|
|
583
|
-
|
|
584
|
-
### Scenario 4: Data Corruption After Migration
|
|
585
|
-
|
|
586
|
-
**Situation**: Schema change caused data integrity issues
|
|
587
|
-
|
|
588
|
-
**Action**: DON'T rollback schema - fix data
|
|
589
|
-
|
|
590
|
-
```sql
|
|
591
|
-
-- Forward fix with data correction
|
|
592
|
-
BEGIN;
|
|
593
|
-
|
|
594
|
-
-- Fix data
|
|
595
|
-
UPDATE users SET status = 'active' WHERE status IS NULL;
|
|
596
|
-
|
|
597
|
-
-- Add constraint to prevent recurrence
|
|
598
|
-
ALTER TABLE users ADD CONSTRAINT status_not_null CHECK (status IS NOT NULL);
|
|
599
|
-
|
|
600
|
-
COMMIT;
|
|
601
|
-
```
|
|
602
|
-
|
|
603
|
-
---
|
|
604
|
-
|
|
605
|
-
## Troubleshooting
|
|
606
|
-
|
|
607
|
-
### "Rollback failed: relation already exists"
|
|
608
|
-
|
|
609
|
-
**Problem**: Objects from new schema still exist
|
|
610
|
-
**Fix**: Snapshot should have `DROP ... IF EXISTS` statements
|
|
611
|
-
|
|
612
|
-
Check snapshot file:
|
|
613
|
-
```bash
|
|
614
|
-
grep -c "DROP.*IF EXISTS" snapshot.sql
|
|
615
|
-
```
|
|
616
|
-
|
|
617
|
-
If missing, regenerate snapshot with `--clean --if-exists` flags.
|
|
618
|
-
|
|
619
|
-
### "Rollback succeeded but app still broken"
|
|
620
|
-
|
|
621
|
-
**Problem**: Application incompatible with rolled-back schema
|
|
622
|
-
**Solutions**:
|
|
623
|
-
1. Deploy previous app version
|
|
624
|
-
2. Fix app code to work with old schema
|
|
625
|
-
3. Roll forward with new migration instead
|
|
626
|
-
|
|
627
|
-
### "Emergency snapshot failed during rollback"
|
|
628
|
-
|
|
629
|
-
**Problem**: Cannot create safety snapshot
|
|
630
|
-
**Action**: ABORT ROLLBACK
|
|
631
|
-
|
|
632
|
-
```
|
|
633
|
-
❌ ROLLBACK ABORTED
|
|
634
|
-
Cannot proceed without emergency snapshot
|
|
635
|
-
Check database connectivity and disk space
|
|
636
|
-
```
|
|
637
|
-
|
|
638
|
-
### "Rollback created orphaned objects"
|
|
639
|
-
|
|
640
|
-
**Problem**: Some objects not cleaned up
|
|
641
|
-
**Fix**: Manually identify and remove
|
|
642
|
-
|
|
643
|
-
```sql
|
|
644
|
-
-- Find orphaned triggers
|
|
645
|
-
SELECT tgname FROM pg_trigger
|
|
646
|
-
WHERE tgrelid NOT IN (SELECT oid FROM pg_class);
|
|
647
|
-
|
|
648
|
-
-- Find orphaned indexes
|
|
649
|
-
SELECT indexname FROM pg_indexes
|
|
650
|
-
WHERE tablename NOT IN (SELECT tablename FROM pg_tables);
|
|
651
|
-
```
|
|
652
|
-
|
|
653
|
-
---
|
|
654
|
-
|
|
655
|
-
## Best Practices
|
|
656
|
-
|
|
657
|
-
### DO
|
|
658
|
-
|
|
659
|
-
- ✅ Always snapshot before rollback (automatic)
|
|
660
|
-
- ✅ Test rollback in staging first
|
|
661
|
-
- ✅ Coordinate with team
|
|
662
|
-
- ✅ Have post-rollback test plan
|
|
663
|
-
- ✅ Monitor application after rollback
|
|
664
|
-
- ✅ Document why rollback was needed
|
|
665
|
-
|
|
666
|
-
### DON'T
|
|
667
|
-
|
|
668
|
-
- ❌ Rollback in production without coordination
|
|
669
|
-
- ❌ Rollback without emergency snapshot
|
|
670
|
-
- ❌ Rollback when forward fix is safer
|
|
671
|
-
- ❌ Rollback if data corruption risk
|
|
672
|
-
- ❌ Rollback during peak usage times
|
|
673
|
-
- ❌ Rollback without understanding impact
|
|
674
|
-
|
|
675
|
-
---
|
|
676
|
-
|
|
677
|
-
## Zero-Downtime Alternatives
|
|
678
|
-
|
|
679
|
-
Instead of rollback, consider:
|
|
680
|
-
|
|
681
|
-
### Blue-Green Deployment
|
|
682
|
-
- Keep old schema running
|
|
683
|
-
- Deploy new app + schema separately
|
|
684
|
-
- Switch traffic when ready
|
|
685
|
-
- Rollback = switch back
|
|
686
|
-
|
|
687
|
-
### Feature Flags
|
|
688
|
-
- Deploy schema changes
|
|
689
|
-
- Keep old code paths active
|
|
690
|
-
- Toggle features via flags
|
|
691
|
-
- Rollback = flip flag
|
|
692
|
-
|
|
693
|
-
### Backward Compatible Migrations
|
|
694
|
-
- Add new columns as nullable
|
|
695
|
-
- Keep old columns temporarily
|
|
696
|
-
- Remove old columns in later migration
|
|
697
|
-
- Rollback = just remove new columns
|
|
698
|
-
|
|
699
|
-
---
|
|
700
|
-
|
|
701
|
-
## Rollback Metrics
|
|
702
|
-
|
|
703
|
-
Track these after rollback:
|
|
704
|
-
|
|
705
|
-
- **Rollback duration**: How long did it take?
|
|
706
|
-
- **Downtime**: How long was app unavailable?
|
|
707
|
-
- **Data loss**: Any data lost? (should be none)
|
|
708
|
-
- **Schema object count**: Before vs after
|
|
709
|
-
- **Application errors**: Any post-rollback issues?
|
|
710
|
-
- **Recovery time**: Time to full functionality
|
|
711
|
-
|
|
712
|
-
```bash
|
|
713
|
-
# Log rollback event
|
|
714
|
-
echo "$(date -Iseconds) | ROLLBACK | $TARGET | Duration: ${DURATION}s" \
|
|
715
|
-
>> supabase/rollback/rollback.log
|
|
716
|
-
```
|
|
717
|
-
|
|
718
|
-
---
|
|
719
|
-
|
|
720
|
-
## Related Commands
|
|
721
|
-
|
|
722
|
-
- `*snapshot {label}` - Create rollback point
|
|
723
|
-
- `*apply-migration {path}` - Creates automatic snapshots
|
|
724
|
-
- `*smoke-test` - Validate after rollback
|
|
725
|
-
- `*rls-audit` - Check security after rollback
|
|
726
|
-
|
|
727
|
-
---
|
|
728
|
-
|
|
729
|
-
## Emergency Contacts
|
|
730
|
-
|
|
731
|
-
If rollback fails critically:
|
|
732
|
-
|
|
733
|
-
1. **Check emergency snapshot**: `$EMERGENCY`
|
|
734
|
-
2. **Review Supabase dashboard**: Check for locks/issues
|
|
735
|
-
3. **Contact team**: Get help immediately
|
|
736
|
-
4. **Document state**: Save logs and error messages
|
|
737
|
-
5. **Consider Supabase restore**: Point-in-time recovery
|
|
738
|
-
|
|
739
|
-
**Never panic**: Emergency snapshot has your back.
|
|
1
|
+
# Task: Rollback Database
|
|
2
|
+
|
|
3
|
+
**Purpose**: Restore database to previous snapshot or run rollback script
|
|
4
|
+
|
|
5
|
+
**Elicit**: true
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Execution Modes
|
|
10
|
+
|
|
11
|
+
**Choose your execution mode:**
|
|
12
|
+
|
|
13
|
+
### 1. YOLO Mode - Fast, Autonomous (0-1 prompts)
|
|
14
|
+
- Autonomous decision making with logging
|
|
15
|
+
- Minimal user interaction
|
|
16
|
+
- **Best for:** Simple, deterministic tasks
|
|
17
|
+
|
|
18
|
+
### 2. Interactive Mode - Balanced, Educational (5-10 prompts) **[DEFAULT]**
|
|
19
|
+
- Explicit decision checkpoints
|
|
20
|
+
- Educational explanations
|
|
21
|
+
- **Best for:** Learning, complex decisions
|
|
22
|
+
|
|
23
|
+
### 3. Pre-Flight Planning - Comprehensive Upfront Planning
|
|
24
|
+
- Task analysis phase (identify all ambiguities)
|
|
25
|
+
- Zero ambiguity execution
|
|
26
|
+
- **Best for:** Ambiguous requirements, critical work
|
|
27
|
+
|
|
28
|
+
**Parameter:** `mode` (optional, default: `interactive`)
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Task Definition (AIOS Task Format V1.0)
|
|
33
|
+
|
|
34
|
+
```yaml
|
|
35
|
+
task: dbRollback()
|
|
36
|
+
responsável: Dara (Sage)
|
|
37
|
+
responsavel_type: Agente
|
|
38
|
+
atomic_layer: Organism
|
|
39
|
+
|
|
40
|
+
**Entrada:**
|
|
41
|
+
- campo: query
|
|
42
|
+
tipo: string
|
|
43
|
+
origem: User Input
|
|
44
|
+
obrigatório: true
|
|
45
|
+
validação: Valid SQL query
|
|
46
|
+
|
|
47
|
+
- campo: params
|
|
48
|
+
tipo: object
|
|
49
|
+
origem: User Input
|
|
50
|
+
obrigatório: false
|
|
51
|
+
validação: Query parameters
|
|
52
|
+
|
|
53
|
+
- campo: connection
|
|
54
|
+
tipo: object
|
|
55
|
+
origem: config
|
|
56
|
+
obrigatório: true
|
|
57
|
+
validação: Valid PostgreSQL connection via Supabase
|
|
58
|
+
|
|
59
|
+
**Saída:**
|
|
60
|
+
- campo: query_result
|
|
61
|
+
tipo: array
|
|
62
|
+
destino: Memory
|
|
63
|
+
persistido: false
|
|
64
|
+
|
|
65
|
+
- campo: records_affected
|
|
66
|
+
tipo: number
|
|
67
|
+
destino: Return value
|
|
68
|
+
persistido: false
|
|
69
|
+
|
|
70
|
+
- campo: execution_time
|
|
71
|
+
tipo: number
|
|
72
|
+
destino: Memory
|
|
73
|
+
persistido: false
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Pre-Conditions
|
|
79
|
+
|
|
80
|
+
**Purpose:** Validate prerequisites BEFORE task execution (blocking)
|
|
81
|
+
|
|
82
|
+
**Checklist:**
|
|
83
|
+
|
|
84
|
+
```yaml
|
|
85
|
+
pre-conditions:
|
|
86
|
+
- [ ] Database connection established; query syntax valid
|
|
87
|
+
tipo: pre-condition
|
|
88
|
+
blocker: true
|
|
89
|
+
validação: |
|
|
90
|
+
Check database connection established; query syntax valid
|
|
91
|
+
error_message: "Pre-condition failed: Database connection established; query syntax valid"
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Post-Conditions
|
|
97
|
+
|
|
98
|
+
**Purpose:** Validate execution success AFTER task completes
|
|
99
|
+
|
|
100
|
+
**Checklist:**
|
|
101
|
+
|
|
102
|
+
```yaml
|
|
103
|
+
post-conditions:
|
|
104
|
+
- [ ] Query executed; results returned; transaction committed
|
|
105
|
+
tipo: post-condition
|
|
106
|
+
blocker: true
|
|
107
|
+
validação: |
|
|
108
|
+
Verify query executed; results returned; transaction committed
|
|
109
|
+
error_message: "Post-condition failed: Query executed; results returned; transaction committed"
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Acceptance Criteria
|
|
115
|
+
|
|
116
|
+
**Purpose:** Definitive pass/fail criteria for task completion
|
|
117
|
+
|
|
118
|
+
**Checklist:**
|
|
119
|
+
|
|
120
|
+
```yaml
|
|
121
|
+
acceptance-criteria:
|
|
122
|
+
- [ ] Data persisted correctly; constraints respected; no orphaned data
|
|
123
|
+
tipo: acceptance-criterion
|
|
124
|
+
blocker: true
|
|
125
|
+
validação: |
|
|
126
|
+
Assert data persisted correctly; constraints respected; no orphaned data
|
|
127
|
+
error_message: "Acceptance criterion not met: Data persisted correctly; constraints respected; no orphaned data"
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## Tools
|
|
133
|
+
|
|
134
|
+
**External/shared resources used by this task:**
|
|
135
|
+
|
|
136
|
+
- **Tool:** supabase
|
|
137
|
+
- **Purpose:** PostgreSQL database connection via Supabase client
|
|
138
|
+
- **Source:** @supabase/supabase-js
|
|
139
|
+
|
|
140
|
+
- **Tool:** query-validator
|
|
141
|
+
- **Purpose:** SQL query syntax validation
|
|
142
|
+
- **Source:** .aios-core/utils/db-query-validator.js
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Scripts
|
|
147
|
+
|
|
148
|
+
**Agent-specific code for this task:**
|
|
149
|
+
|
|
150
|
+
- **Script:** db-query.js
|
|
151
|
+
- **Purpose:** Execute PostgreSQL queries with error handling via Supabase
|
|
152
|
+
- **Language:** JavaScript
|
|
153
|
+
- **Location:** .aios-core/scripts/db-query.js
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## Error Handling
|
|
158
|
+
|
|
159
|
+
**Strategy:** abort
|
|
160
|
+
|
|
161
|
+
**Common Errors:**
|
|
162
|
+
|
|
163
|
+
1. **Error:** Connection Failed
|
|
164
|
+
- **Cause:** Unable to connect to Neo4j database
|
|
165
|
+
- **Resolution:** Check connection string, credentials, network
|
|
166
|
+
- **Recovery:** Retry with exponential backoff (max 3 attempts)
|
|
167
|
+
|
|
168
|
+
2. **Error:** Query Syntax Error
|
|
169
|
+
- **Cause:** Invalid Cypher query syntax
|
|
170
|
+
- **Resolution:** Validate query syntax before execution
|
|
171
|
+
- **Recovery:** Return detailed syntax error, suggest fix
|
|
172
|
+
|
|
173
|
+
3. **Error:** Transaction Rollback
|
|
174
|
+
- **Cause:** Query violates constraints or timeout
|
|
175
|
+
- **Resolution:** Review query logic and constraints
|
|
176
|
+
- **Recovery:** Automatic rollback, preserve data integrity
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## Performance
|
|
181
|
+
|
|
182
|
+
**Expected Metrics:**
|
|
183
|
+
|
|
184
|
+
```yaml
|
|
185
|
+
duration_expected: 5-15 min (estimated)
|
|
186
|
+
cost_estimated: $0.003-0.010
|
|
187
|
+
token_usage: ~3,000-10,000 tokens
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
**Optimization Notes:**
|
|
191
|
+
- Break into smaller workflows; implement checkpointing; use async processing where possible
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## Metadata
|
|
196
|
+
|
|
197
|
+
```yaml
|
|
198
|
+
story: N/A
|
|
199
|
+
version: 1.0.0
|
|
200
|
+
dependencies:
|
|
201
|
+
- N/A
|
|
202
|
+
tags:
|
|
203
|
+
- database
|
|
204
|
+
- infrastructure
|
|
205
|
+
updated_at: 2025-11-17
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
## Inputs
|
|
212
|
+
|
|
213
|
+
- `target` (string): Path to snapshot file or rollback script
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## Process
|
|
218
|
+
|
|
219
|
+
### 1. Confirm Rollback
|
|
220
|
+
|
|
221
|
+
**CRITICAL WARNING**: Display to user before proceeding
|
|
222
|
+
|
|
223
|
+
```
|
|
224
|
+
⚠️ DATABASE ROLLBACK WARNING ⚠️
|
|
225
|
+
|
|
226
|
+
You are about to restore the database to a previous state.
|
|
227
|
+
|
|
228
|
+
Target: {target}
|
|
229
|
+
|
|
230
|
+
This will:
|
|
231
|
+
✓ Drop and recreate all schema objects
|
|
232
|
+
✓ Preserve existing data (if schema-only snapshot)
|
|
233
|
+
✗ Lose any schema changes made after snapshot
|
|
234
|
+
✗ Potentially break application if schema incompatible
|
|
235
|
+
|
|
236
|
+
Are you ABSOLUTELY SURE you want to proceed?
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
Ask user to type: `ROLLBACK` to confirm
|
|
240
|
+
|
|
241
|
+
### 2. Pre-Rollback Safety Checks
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
# Create emergency snapshot before rollback
|
|
245
|
+
echo "Creating emergency snapshot before rollback..."
|
|
246
|
+
TS=$(date +%Y%m%d_%H%M%S)
|
|
247
|
+
EMERGENCY="supabase/snapshots/${TS}_emergency_before_rollback.sql"
|
|
248
|
+
|
|
249
|
+
pg_dump "$SUPABASE_DB_URL" \
|
|
250
|
+
--schema-only \
|
|
251
|
+
--clean \
|
|
252
|
+
--if-exists \
|
|
253
|
+
> "$EMERGENCY"
|
|
254
|
+
|
|
255
|
+
if [ $? -eq 0 ]; then
|
|
256
|
+
echo "✓ Emergency snapshot: $EMERGENCY"
|
|
257
|
+
else
|
|
258
|
+
echo "❌ Emergency snapshot failed - ABORTING ROLLBACK"
|
|
259
|
+
exit 1
|
|
260
|
+
fi
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
### 3. Validate Rollback Target
|
|
264
|
+
|
|
265
|
+
```bash
|
|
266
|
+
TARGET="{target}"
|
|
267
|
+
|
|
268
|
+
# Check file exists
|
|
269
|
+
if [ ! -f "$TARGET" ]; then
|
|
270
|
+
echo "❌ Rollback target not found: $TARGET"
|
|
271
|
+
exit 1
|
|
272
|
+
fi
|
|
273
|
+
|
|
274
|
+
# Check file is valid SQL
|
|
275
|
+
if ! grep -q "CREATE\|DROP\|ALTER" "$TARGET"; then
|
|
276
|
+
echo "❌ File doesn't appear to be valid SQL"
|
|
277
|
+
exit 1
|
|
278
|
+
fi
|
|
279
|
+
|
|
280
|
+
echo "✓ Rollback target validated: $TARGET"
|
|
281
|
+
echo " File size: $(ls -lh "$TARGET" | awk '{print $5}')"
|
|
282
|
+
echo " Modified: $(ls -lh "$TARGET" | awk '{print $6, $7, $8}')"
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
### 4. Acquire Exclusive Lock
|
|
286
|
+
|
|
287
|
+
Prevent concurrent operations:
|
|
288
|
+
|
|
289
|
+
```bash
|
|
290
|
+
echo "Acquiring exclusive lock..."
|
|
291
|
+
|
|
292
|
+
psql "$SUPABASE_DB_URL" -v ON_ERROR_STOP=1 -c \
|
|
293
|
+
"SELECT pg_try_advisory_lock(hashtext('dbsage:rollback')) AS got" \
|
|
294
|
+
| grep -q t || { echo "❌ Another operation is running"; exit 1; }
|
|
295
|
+
|
|
296
|
+
echo "✓ Lock acquired"
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
### 5. Execute Rollback
|
|
300
|
+
|
|
301
|
+
```bash
|
|
302
|
+
echo ""
|
|
303
|
+
echo "=== EXECUTING ROLLBACK ==="
|
|
304
|
+
echo "Started: $(date -Iseconds)"
|
|
305
|
+
echo ""
|
|
306
|
+
|
|
307
|
+
# Run rollback in single transaction
|
|
308
|
+
psql "$SUPABASE_DB_URL" -v ON_ERROR_STOP=1 -f "$TARGET"
|
|
309
|
+
|
|
310
|
+
RESULT=$?
|
|
311
|
+
|
|
312
|
+
echo ""
|
|
313
|
+
echo "Completed: $(date -Iseconds)"
|
|
314
|
+
echo ""
|
|
315
|
+
|
|
316
|
+
if [ $RESULT -eq 0 ]; then
|
|
317
|
+
echo "✅ ROLLBACK SUCCESSFUL"
|
|
318
|
+
else
|
|
319
|
+
echo "❌ ROLLBACK FAILED"
|
|
320
|
+
echo "Emergency snapshot available: $EMERGENCY"
|
|
321
|
+
echo "Attempting to restore from emergency snapshot..."
|
|
322
|
+
|
|
323
|
+
# Try to restore emergency snapshot
|
|
324
|
+
psql "$SUPABASE_DB_URL" -v ON_ERROR_STOP=1 -f "$EMERGENCY"
|
|
325
|
+
|
|
326
|
+
if [ $? -eq 0 ]; then
|
|
327
|
+
echo "✓ Restored from emergency snapshot"
|
|
328
|
+
else
|
|
329
|
+
echo "❌ Emergency restore also failed - DATABASE MAY BE INCONSISTENT"
|
|
330
|
+
echo "Manual intervention required"
|
|
331
|
+
fi
|
|
332
|
+
|
|
333
|
+
exit 1
|
|
334
|
+
fi
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
### 6. Post-Rollback Validation
|
|
338
|
+
|
|
339
|
+
```bash
|
|
340
|
+
echo ""
|
|
341
|
+
echo "=== POST-ROLLBACK VALIDATION ==="
|
|
342
|
+
echo ""
|
|
343
|
+
|
|
344
|
+
# Count schema objects
|
|
345
|
+
echo "Schema object counts:"
|
|
346
|
+
psql "$SUPABASE_DB_URL" -t -c \
|
|
347
|
+
"SELECT
|
|
348
|
+
(SELECT COUNT(*) FROM pg_tables WHERE schemaname='public') AS tables,
|
|
349
|
+
(SELECT COUNT(*) FROM pg_policies WHERE schemaname='public') AS policies,
|
|
350
|
+
(SELECT COUNT(*) FROM pg_proc WHERE pronamespace='public'::regnamespace) AS functions;"
|
|
351
|
+
|
|
352
|
+
# Check for basic sanity
|
|
353
|
+
echo ""
|
|
354
|
+
echo "Quick sanity checks:"
|
|
355
|
+
psql "$SUPABASE_DB_URL" -v ON_ERROR_STOP=1 <<'SQL'
|
|
356
|
+
-- Check tables exist
|
|
357
|
+
SELECT 'Tables exist' AS check, COUNT(*) > 0 AS pass
|
|
358
|
+
FROM pg_tables WHERE schemaname='public';
|
|
359
|
+
|
|
360
|
+
-- Check functions exist
|
|
361
|
+
SELECT 'Functions exist' AS check, COUNT(*) > 0 AS pass
|
|
362
|
+
FROM pg_proc WHERE pronamespace='public'::regnamespace;
|
|
363
|
+
|
|
364
|
+
-- Check for orphaned objects (optional)
|
|
365
|
+
-- SELECT 'No orphaned triggers' AS check, COUNT(*) = 0 AS pass
|
|
366
|
+
-- FROM pg_trigger WHERE tgrelid NOT IN (SELECT oid FROM pg_class);
|
|
367
|
+
SQL
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
### 7. Release Lock & Create Post-Rollback Snapshot
|
|
371
|
+
|
|
372
|
+
```bash
|
|
373
|
+
# Release lock
|
|
374
|
+
psql "$SUPABASE_DB_URL" -v ON_ERROR_STOP=1 -c \
|
|
375
|
+
"SELECT pg_advisory_unlock(hashtext('dbsage:rollback'));"
|
|
376
|
+
|
|
377
|
+
echo "✓ Lock released"
|
|
378
|
+
|
|
379
|
+
# Create post-rollback snapshot
|
|
380
|
+
POST_SNAPSHOT="supabase/snapshots/${TS}_post_rollback.sql"
|
|
381
|
+
pg_dump "$SUPABASE_DB_URL" --schema-only --clean --if-exists > "$POST_SNAPSHOT"
|
|
382
|
+
|
|
383
|
+
echo "✓ Post-rollback snapshot: $POST_SNAPSHOT"
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
### 8. Report Results
|
|
387
|
+
|
|
388
|
+
```
|
|
389
|
+
✅ DATABASE ROLLBACK COMPLETED
|
|
390
|
+
|
|
391
|
+
Rolled back to: {target}
|
|
392
|
+
Timestamp: {TS}
|
|
393
|
+
|
|
394
|
+
Snapshots created:
|
|
395
|
+
- Emergency (before): $EMERGENCY
|
|
396
|
+
- Post-rollback (after): $POST_SNAPSHOT
|
|
397
|
+
|
|
398
|
+
Next steps:
|
|
399
|
+
1. *smoke-test - Validate schema
|
|
400
|
+
2. *rls-audit - Check security
|
|
401
|
+
3. Test application functionality
|
|
402
|
+
4. Monitor for issues
|
|
403
|
+
|
|
404
|
+
If issues detected:
|
|
405
|
+
*rollback $EMERGENCY # Restore to pre-rollback state
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
---
|
|
409
|
+
|
|
410
|
+
## Rollback Strategies
|
|
411
|
+
|
|
412
|
+
### Strategy 1: Snapshot Restore (Recommended)
|
|
413
|
+
|
|
414
|
+
**Use when**: Reverting schema changes
|
|
415
|
+
|
|
416
|
+
```bash
|
|
417
|
+
*rollback supabase/snapshots/20251026_pre_migration.sql
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
**Pros**:
|
|
421
|
+
- ✅ Fast
|
|
422
|
+
- ✅ Complete schema state
|
|
423
|
+
- ✅ Tested with pg_dump
|
|
424
|
+
|
|
425
|
+
**Cons**:
|
|
426
|
+
- ❌ Data preserved (may be incompatible)
|
|
427
|
+
- ❌ Requires prior snapshot
|
|
428
|
+
|
|
429
|
+
### Strategy 2: Explicit Rollback Script
|
|
430
|
+
|
|
431
|
+
**Use when**: Surgical changes to specific objects
|
|
432
|
+
|
|
433
|
+
```sql
|
|
434
|
+
-- supabase/rollback/20251026_rollback_user_roles.sql
|
|
435
|
+
|
|
436
|
+
BEGIN;
|
|
437
|
+
|
|
438
|
+
-- Undo changes in reverse order
|
|
439
|
+
DROP TRIGGER IF EXISTS set_user_role_timestamp ON user_roles;
|
|
440
|
+
DROP FUNCTION IF EXISTS update_user_role_timestamp();
|
|
441
|
+
DROP TABLE IF EXISTS user_roles;
|
|
442
|
+
|
|
443
|
+
-- Restore previous state if needed
|
|
444
|
+
-- ...
|
|
445
|
+
|
|
446
|
+
COMMIT;
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
```bash
|
|
450
|
+
*rollback supabase/rollback/20251026_rollback_user_roles.sql
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
**Pros**:
|
|
454
|
+
- ✅ Precise control
|
|
455
|
+
- ✅ Documented undo process
|
|
456
|
+
- ✅ Can be tested
|
|
457
|
+
|
|
458
|
+
**Cons**:
|
|
459
|
+
- ❌ Must write manually
|
|
460
|
+
- ❌ Easy to forget steps
|
|
461
|
+
- ❌ Must maintain with migration
|
|
462
|
+
|
|
463
|
+
### Strategy 3: Forward Fix
|
|
464
|
+
|
|
465
|
+
**Use when**: Rollback is dangerous, fix forward instead
|
|
466
|
+
|
|
467
|
+
```sql
|
|
468
|
+
-- Instead of rolling back, apply corrective migration
|
|
469
|
+
-- migration: 20251026_fix_user_roles_bug.sql
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
**Pros**:
|
|
473
|
+
- ✅ No data loss risk
|
|
474
|
+
- ✅ Maintains history
|
|
475
|
+
- ✅ Safe in production
|
|
476
|
+
|
|
477
|
+
**Cons**:
|
|
478
|
+
- ❌ More work
|
|
479
|
+
- ❌ Leaves intermediate state in history
|
|
480
|
+
|
|
481
|
+
---
|
|
482
|
+
|
|
483
|
+
## Rollback Decision Matrix
|
|
484
|
+
|
|
485
|
+
| Situation | Strategy | Command |
|
|
486
|
+
|-----------|----------|---------|
|
|
487
|
+
| Migration failed mid-way | Restore snapshot | `*rollback snapshot_before.sql` |
|
|
488
|
+
| Schema breaks app | Restore snapshot | `*rollback snapshot_before.sql` |
|
|
489
|
+
| Wrong migration applied | Restore snapshot | `*rollback snapshot_before.sql` |
|
|
490
|
+
| Minor bug in function | Forward fix | Create fix migration |
|
|
491
|
+
| Data corruption risk | Forward fix | Don't rollback |
|
|
492
|
+
| Production with users | Forward fix | Avoid schema rollback |
|
|
493
|
+
|
|
494
|
+
---
|
|
495
|
+
|
|
496
|
+
## Safety Checklist
|
|
497
|
+
|
|
498
|
+
Before executing rollback:
|
|
499
|
+
|
|
500
|
+
- [ ] Emergency snapshot created automatically ✓
|
|
501
|
+
- [ ] Application stopped or in maintenance mode
|
|
502
|
+
- [ ] Users notified of downtime
|
|
503
|
+
- [ ] Team aware of rollback operation
|
|
504
|
+
- [ ] Rollback target validated
|
|
505
|
+
- [ ] Exclusive lock acquired
|
|
506
|
+
- [ ] Post-rollback test plan ready
|
|
507
|
+
|
|
508
|
+
---
|
|
509
|
+
|
|
510
|
+
## Rollback in Different Environments
|
|
511
|
+
|
|
512
|
+
### Development
|
|
513
|
+
```bash
|
|
514
|
+
# Fast and loose - just do it
|
|
515
|
+
*rollback snapshot.sql
|
|
516
|
+
```
|
|
517
|
+
|
|
518
|
+
### Staging
|
|
519
|
+
```bash
|
|
520
|
+
# Test the rollback process
|
|
521
|
+
*rollback snapshot.sql
|
|
522
|
+
*smoke-test
|
|
523
|
+
# Test app functionality
|
|
524
|
+
```
|
|
525
|
+
|
|
526
|
+
### Production
|
|
527
|
+
```bash
|
|
528
|
+
# CAREFUL - follow full checklist
|
|
529
|
+
# 1. Notify stakeholders
|
|
530
|
+
# 2. Enable maintenance mode
|
|
531
|
+
# 3. Create emergency snapshot (automatic)
|
|
532
|
+
# 4. Coordinate with team
|
|
533
|
+
*rollback snapshot.sql
|
|
534
|
+
# 5. Validation
|
|
535
|
+
*smoke-test
|
|
536
|
+
*rls-audit
|
|
537
|
+
# 6. Test critical flows
|
|
538
|
+
# 7. Disable maintenance mode
|
|
539
|
+
# 8. Monitor closely
|
|
540
|
+
```
|
|
541
|
+
|
|
542
|
+
---
|
|
543
|
+
|
|
544
|
+
## Common Rollback Scenarios
|
|
545
|
+
|
|
546
|
+
### Scenario 1: Migration Failed During Apply
|
|
547
|
+
|
|
548
|
+
**Situation**: `*apply-migration` failed halfway
|
|
549
|
+
|
|
550
|
+
**Action**: PostgreSQL already rolled back transaction ✓
|
|
551
|
+
|
|
552
|
+
**No rollback needed**: Database unchanged
|
|
553
|
+
|
|
554
|
+
**Next steps**:
|
|
555
|
+
1. Fix migration file
|
|
556
|
+
2. `*dry-run` to test
|
|
557
|
+
3. `*apply-migration` again
|
|
558
|
+
|
|
559
|
+
### Scenario 2: Migration Succeeded but Breaks App
|
|
560
|
+
|
|
561
|
+
**Situation**: Schema change incompatible with application
|
|
562
|
+
|
|
563
|
+
**Action**: Rollback to pre-migration snapshot
|
|
564
|
+
|
|
565
|
+
```bash
|
|
566
|
+
*rollback supabase/snapshots/20251026_143022_pre_migration.sql
|
|
567
|
+
*smoke-test
|
|
568
|
+
# Deploy previous app version or fix app
|
|
569
|
+
```
|
|
570
|
+
|
|
571
|
+
### Scenario 3: Wrong Migration Applied
|
|
572
|
+
|
|
573
|
+
**Situation**: Applied v1.3.0 migration instead of v1.2.5
|
|
574
|
+
|
|
575
|
+
**Action**: Rollback to last known good state
|
|
576
|
+
|
|
577
|
+
```bash
|
|
578
|
+
*rollback supabase/snapshots/20251026_120000_v1_2_4.sql
|
|
579
|
+
*smoke-test
|
|
580
|
+
# Apply correct migration
|
|
581
|
+
*apply-migration v1_2_5.sql
|
|
582
|
+
```
|
|
583
|
+
|
|
584
|
+
### Scenario 4: Data Corruption After Migration
|
|
585
|
+
|
|
586
|
+
**Situation**: Schema change caused data integrity issues
|
|
587
|
+
|
|
588
|
+
**Action**: DON'T rollback schema - fix data
|
|
589
|
+
|
|
590
|
+
```sql
|
|
591
|
+
-- Forward fix with data correction
|
|
592
|
+
BEGIN;
|
|
593
|
+
|
|
594
|
+
-- Fix data
|
|
595
|
+
UPDATE users SET status = 'active' WHERE status IS NULL;
|
|
596
|
+
|
|
597
|
+
-- Add constraint to prevent recurrence
|
|
598
|
+
ALTER TABLE users ADD CONSTRAINT status_not_null CHECK (status IS NOT NULL);
|
|
599
|
+
|
|
600
|
+
COMMIT;
|
|
601
|
+
```
|
|
602
|
+
|
|
603
|
+
---
|
|
604
|
+
|
|
605
|
+
## Troubleshooting
|
|
606
|
+
|
|
607
|
+
### "Rollback failed: relation already exists"
|
|
608
|
+
|
|
609
|
+
**Problem**: Objects from new schema still exist
|
|
610
|
+
**Fix**: Snapshot should have `DROP ... IF EXISTS` statements
|
|
611
|
+
|
|
612
|
+
Check snapshot file:
|
|
613
|
+
```bash
|
|
614
|
+
grep -c "DROP.*IF EXISTS" snapshot.sql
|
|
615
|
+
```
|
|
616
|
+
|
|
617
|
+
If missing, regenerate snapshot with `--clean --if-exists` flags.
|
|
618
|
+
|
|
619
|
+
### "Rollback succeeded but app still broken"
|
|
620
|
+
|
|
621
|
+
**Problem**: Application incompatible with rolled-back schema
|
|
622
|
+
**Solutions**:
|
|
623
|
+
1. Deploy previous app version
|
|
624
|
+
2. Fix app code to work with old schema
|
|
625
|
+
3. Roll forward with new migration instead
|
|
626
|
+
|
|
627
|
+
### "Emergency snapshot failed during rollback"
|
|
628
|
+
|
|
629
|
+
**Problem**: Cannot create safety snapshot
|
|
630
|
+
**Action**: ABORT ROLLBACK
|
|
631
|
+
|
|
632
|
+
```
|
|
633
|
+
❌ ROLLBACK ABORTED
|
|
634
|
+
Cannot proceed without emergency snapshot
|
|
635
|
+
Check database connectivity and disk space
|
|
636
|
+
```
|
|
637
|
+
|
|
638
|
+
### "Rollback created orphaned objects"
|
|
639
|
+
|
|
640
|
+
**Problem**: Some objects not cleaned up
|
|
641
|
+
**Fix**: Manually identify and remove
|
|
642
|
+
|
|
643
|
+
```sql
|
|
644
|
+
-- Find orphaned triggers
|
|
645
|
+
SELECT tgname FROM pg_trigger
|
|
646
|
+
WHERE tgrelid NOT IN (SELECT oid FROM pg_class);
|
|
647
|
+
|
|
648
|
+
-- Find orphaned indexes
|
|
649
|
+
SELECT indexname FROM pg_indexes
|
|
650
|
+
WHERE tablename NOT IN (SELECT tablename FROM pg_tables);
|
|
651
|
+
```
|
|
652
|
+
|
|
653
|
+
---
|
|
654
|
+
|
|
655
|
+
## Best Practices
|
|
656
|
+
|
|
657
|
+
### DO
|
|
658
|
+
|
|
659
|
+
- ✅ Always snapshot before rollback (automatic)
|
|
660
|
+
- ✅ Test rollback in staging first
|
|
661
|
+
- ✅ Coordinate with team
|
|
662
|
+
- ✅ Have post-rollback test plan
|
|
663
|
+
- ✅ Monitor application after rollback
|
|
664
|
+
- ✅ Document why rollback was needed
|
|
665
|
+
|
|
666
|
+
### DON'T
|
|
667
|
+
|
|
668
|
+
- ❌ Rollback in production without coordination
|
|
669
|
+
- ❌ Rollback without emergency snapshot
|
|
670
|
+
- ❌ Rollback when forward fix is safer
|
|
671
|
+
- ❌ Rollback if data corruption risk
|
|
672
|
+
- ❌ Rollback during peak usage times
|
|
673
|
+
- ❌ Rollback without understanding impact
|
|
674
|
+
|
|
675
|
+
---
|
|
676
|
+
|
|
677
|
+
## Zero-Downtime Alternatives
|
|
678
|
+
|
|
679
|
+
Instead of rollback, consider:
|
|
680
|
+
|
|
681
|
+
### Blue-Green Deployment
|
|
682
|
+
- Keep old schema running
|
|
683
|
+
- Deploy new app + schema separately
|
|
684
|
+
- Switch traffic when ready
|
|
685
|
+
- Rollback = switch back
|
|
686
|
+
|
|
687
|
+
### Feature Flags
|
|
688
|
+
- Deploy schema changes
|
|
689
|
+
- Keep old code paths active
|
|
690
|
+
- Toggle features via flags
|
|
691
|
+
- Rollback = flip flag
|
|
692
|
+
|
|
693
|
+
### Backward Compatible Migrations
|
|
694
|
+
- Add new columns as nullable
|
|
695
|
+
- Keep old columns temporarily
|
|
696
|
+
- Remove old columns in later migration
|
|
697
|
+
- Rollback = just remove new columns
|
|
698
|
+
|
|
699
|
+
---
|
|
700
|
+
|
|
701
|
+
## Rollback Metrics
|
|
702
|
+
|
|
703
|
+
Track these after rollback:
|
|
704
|
+
|
|
705
|
+
- **Rollback duration**: How long did it take?
|
|
706
|
+
- **Downtime**: How long was app unavailable?
|
|
707
|
+
- **Data loss**: Any data lost? (should be none)
|
|
708
|
+
- **Schema object count**: Before vs after
|
|
709
|
+
- **Application errors**: Any post-rollback issues?
|
|
710
|
+
- **Recovery time**: Time to full functionality
|
|
711
|
+
|
|
712
|
+
```bash
|
|
713
|
+
# Log rollback event
|
|
714
|
+
echo "$(date -Iseconds) | ROLLBACK | $TARGET | Duration: ${DURATION}s" \
|
|
715
|
+
>> supabase/rollback/rollback.log
|
|
716
|
+
```
|
|
717
|
+
|
|
718
|
+
---
|
|
719
|
+
|
|
720
|
+
## Related Commands
|
|
721
|
+
|
|
722
|
+
- `*snapshot {label}` - Create rollback point
|
|
723
|
+
- `*apply-migration {path}` - Creates automatic snapshots
|
|
724
|
+
- `*smoke-test` - Validate after rollback
|
|
725
|
+
- `*rls-audit` - Check security after rollback
|
|
726
|
+
|
|
727
|
+
---
|
|
728
|
+
|
|
729
|
+
## Emergency Contacts
|
|
730
|
+
|
|
731
|
+
If rollback fails critically:
|
|
732
|
+
|
|
733
|
+
1. **Check emergency snapshot**: `$EMERGENCY`
|
|
734
|
+
2. **Review Supabase dashboard**: Check for locks/issues
|
|
735
|
+
3. **Contact team**: Get help immediately
|
|
736
|
+
4. **Document state**: Save logs and error messages
|
|
737
|
+
5. **Consider Supabase restore**: Point-in-time recovery
|
|
738
|
+
|
|
739
|
+
**Never panic**: Emergency snapshot has your back.
|