specweave 0.1.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/INSTALL.md +848 -0
- package/LICENSE +21 -0
- package/README.md +675 -0
- package/SPECWEAVE.md +665 -0
- package/bin/install-agents.sh +57 -0
- package/bin/install-all.sh +49 -0
- package/bin/install-commands.sh +56 -0
- package/bin/install-skills.sh +57 -0
- package/bin/specweave.js +81 -0
- package/dist/adapters/adapter-base.d.ts +50 -0
- package/dist/adapters/adapter-base.d.ts.map +1 -0
- package/dist/adapters/adapter-base.js +146 -0
- package/dist/adapters/adapter-base.js.map +1 -0
- package/dist/adapters/adapter-interface.d.ts +108 -0
- package/dist/adapters/adapter-interface.d.ts.map +1 -0
- package/dist/adapters/adapter-interface.js +9 -0
- package/dist/adapters/adapter-interface.js.map +1 -0
- package/dist/adapters/claude/adapter.d.ts +54 -0
- package/dist/adapters/claude/adapter.d.ts.map +1 -0
- package/dist/adapters/claude/adapter.js +184 -0
- package/dist/adapters/claude/adapter.js.map +1 -0
- package/dist/adapters/copilot/adapter.d.ts +42 -0
- package/dist/adapters/copilot/adapter.d.ts.map +1 -0
- package/dist/adapters/copilot/adapter.js +239 -0
- package/dist/adapters/copilot/adapter.js.map +1 -0
- package/dist/adapters/cursor/adapter.d.ts +42 -0
- package/dist/adapters/cursor/adapter.d.ts.map +1 -0
- package/dist/adapters/cursor/adapter.js +297 -0
- package/dist/adapters/cursor/adapter.js.map +1 -0
- package/dist/adapters/generic/adapter.d.ts +40 -0
- package/dist/adapters/generic/adapter.d.ts.map +1 -0
- package/dist/adapters/generic/adapter.js +155 -0
- package/dist/adapters/generic/adapter.js.map +1 -0
- package/dist/cli/commands/init.d.ts +6 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +247 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/install.d.ts +7 -0
- package/dist/cli/commands/install.d.ts.map +1 -0
- package/dist/cli/commands/install.js +160 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/list.d.ts +6 -0
- package/dist/cli/commands/list.d.ts.map +1 -0
- package/dist/cli/commands/list.js +154 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/package.json +90 -0
- package/src/adapters/README.md +312 -0
- package/src/adapters/adapter-base.ts +146 -0
- package/src/adapters/adapter-interface.ts +120 -0
- package/src/adapters/claude/README.md +241 -0
- package/src/adapters/claude/adapter.ts +157 -0
- package/src/adapters/copilot/.github/copilot/instructions.md +376 -0
- package/src/adapters/copilot/README.md +200 -0
- package/src/adapters/copilot/adapter.ts +210 -0
- package/src/adapters/cursor/.cursor/context/docs-context.md +62 -0
- package/src/adapters/cursor/.cursor/context/increments-context.md +71 -0
- package/src/adapters/cursor/.cursor/context/strategy-context.md +73 -0
- package/src/adapters/cursor/.cursor/context/tests-context.md +89 -0
- package/src/adapters/cursor/.cursorrules +325 -0
- package/src/adapters/cursor/README.md +243 -0
- package/src/adapters/cursor/adapter.ts +268 -0
- package/src/adapters/generic/README.md +277 -0
- package/src/adapters/generic/SPECWEAVE-MANUAL.md +676 -0
- package/src/adapters/generic/adapter.ts +159 -0
- package/src/adapters/registry.yaml +126 -0
- package/src/agents/architect/AGENT.md +416 -0
- package/src/agents/devops/AGENT.md +1738 -0
- package/src/agents/docs-writer/AGENT.md +239 -0
- package/src/agents/performance/AGENT.md +228 -0
- package/src/agents/pm/AGENT.md +751 -0
- package/src/agents/qa-lead/AGENT.md +150 -0
- package/src/agents/security/AGENT.md +179 -0
- package/src/agents/sre/AGENT.md +582 -0
- package/src/agents/sre/modules/backend-diagnostics.md +481 -0
- package/src/agents/sre/modules/database-diagnostics.md +509 -0
- package/src/agents/sre/modules/infrastructure.md +561 -0
- package/src/agents/sre/modules/monitoring.md +439 -0
- package/src/agents/sre/modules/security-incidents.md +421 -0
- package/src/agents/sre/modules/ui-diagnostics.md +302 -0
- package/src/agents/sre/playbooks/01-high-cpu-usage.md +204 -0
- package/src/agents/sre/playbooks/02-database-deadlock.md +241 -0
- package/src/agents/sre/playbooks/03-memory-leak.md +252 -0
- package/src/agents/sre/playbooks/04-slow-api-response.md +269 -0
- package/src/agents/sre/playbooks/05-ddos-attack.md +293 -0
- package/src/agents/sre/playbooks/06-disk-full.md +314 -0
- package/src/agents/sre/playbooks/07-service-down.md +333 -0
- package/src/agents/sre/playbooks/08-data-corruption.md +337 -0
- package/src/agents/sre/playbooks/09-cascade-failure.md +430 -0
- package/src/agents/sre/playbooks/10-rate-limit-exceeded.md +464 -0
- package/src/agents/sre/scripts/health-check.sh +230 -0
- package/src/agents/sre/scripts/log-analyzer.py +213 -0
- package/src/agents/sre/scripts/metrics-collector.sh +294 -0
- package/src/agents/sre/scripts/trace-analyzer.js +257 -0
- package/src/agents/sre/templates/incident-report.md +249 -0
- package/src/agents/sre/templates/mitigation-plan.md +375 -0
- package/src/agents/sre/templates/post-mortem.md +418 -0
- package/src/agents/sre/templates/runbook-template.md +412 -0
- package/src/agents/tech-lead/AGENT.md +263 -0
- package/src/commands/add-tasks.md +176 -0
- package/src/commands/close-increment.md +347 -0
- package/src/commands/create-increment.md +223 -0
- package/src/commands/create-project.md +528 -0
- package/src/commands/generate-docs.md +623 -0
- package/src/commands/list-increments.md +180 -0
- package/src/commands/review-docs.md +331 -0
- package/src/commands/start-increment.md +139 -0
- package/src/commands/sync-github.md +115 -0
- package/src/commands/validate-increment.md +800 -0
- package/src/hooks/README.md +252 -0
- package/src/hooks/docs-changed.sh +59 -0
- package/src/hooks/human-input-required.sh +55 -0
- package/src/hooks/post-task-completion.sh +57 -0
- package/src/hooks/pre-implementation.sh +47 -0
- package/src/skills/ado-sync/README.md +449 -0
- package/src/skills/ado-sync/SKILL.md +245 -0
- package/src/skills/ado-sync/test-cases/test-1.yaml +9 -0
- package/src/skills/ado-sync/test-cases/test-2.yaml +8 -0
- package/src/skills/ado-sync/test-cases/test-3.yaml +9 -0
- package/src/skills/bmad-method-expert/SKILL.md +628 -0
- package/src/skills/bmad-method-expert/scripts/analyze-project.js +318 -0
- package/src/skills/bmad-method-expert/scripts/check-setup.js +208 -0
- package/src/skills/bmad-method-expert/scripts/generate-template.js +1149 -0
- package/src/skills/bmad-method-expert/scripts/validate-documents.js +340 -0
- package/src/skills/bmad-method-expert/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/bmad-method-expert/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/bmad-method-expert/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/brownfield-analyzer/SKILL.md +523 -0
- package/src/skills/brownfield-analyzer/test-cases/test-1-basic-analysis.yaml +48 -0
- package/src/skills/brownfield-analyzer/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/brownfield-analyzer/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/brownfield-onboarder/SKILL.md +625 -0
- package/src/skills/brownfield-onboarder/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/brownfield-onboarder/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/brownfield-onboarder/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/calendar-system/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/calendar-system/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/calendar-system/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/context-loader/SKILL.md +734 -0
- package/src/skills/context-loader/test-cases/test-1-basic-loading.yaml +39 -0
- package/src/skills/context-loader/test-cases/test-2-token-budget-exceeded.yaml +44 -0
- package/src/skills/context-loader/test-cases/test-3-section-anchors.yaml +45 -0
- package/src/skills/context-optimizer/SKILL.md +618 -0
- package/src/skills/context-optimizer/test-cases/test-1-bug-fix-narrow.yaml +97 -0
- package/src/skills/context-optimizer/test-cases/test-2-feature-focused.yaml +109 -0
- package/src/skills/context-optimizer/test-cases/test-3-architecture-broad.yaml +98 -0
- package/src/skills/cost-optimizer/SKILL.md +190 -0
- package/src/skills/cost-optimizer/test-cases/test-1-basic-comparison.yaml +75 -0
- package/src/skills/cost-optimizer/test-cases/test-2-budget-constraint.yaml +52 -0
- package/src/skills/cost-optimizer/test-cases/test-3-scale-requirement.yaml +63 -0
- package/src/skills/cost-optimizer/test-results/README.md +46 -0
- package/src/skills/design-system-architect/SKILL.md +107 -0
- package/src/skills/design-system-architect/test-cases/test-1-token-structure.yaml +23 -0
- package/src/skills/design-system-architect/test-cases/test-2-component-hierarchy.yaml +24 -0
- package/src/skills/design-system-architect/test-cases/test-3-accessibility-checklist.yaml +23 -0
- package/src/skills/diagrams-architect/SKILL.md +763 -0
- package/src/skills/diagrams-generator/SKILL.md +25 -0
- package/src/skills/diagrams-generator/test-cases/test-1.yaml +9 -0
- package/src/skills/diagrams-generator/test-cases/test-2.yaml +9 -0
- package/src/skills/diagrams-generator/test-cases/test-3.yaml +8 -0
- package/src/skills/docs-updater/README.md +48 -0
- package/src/skills/docs-updater/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/docs-updater/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/docs-updater/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/dotnet-backend/SKILL.md +250 -0
- package/src/skills/e2e-playwright/README.md +506 -0
- package/src/skills/e2e-playwright/SKILL.md +457 -0
- package/src/skills/e2e-playwright/execute.js +373 -0
- package/src/skills/e2e-playwright/lib/utils.js +514 -0
- package/src/skills/e2e-playwright/package.json +33 -0
- package/src/skills/e2e-playwright/test-cases/TC-001-basic-navigation.yaml +54 -0
- package/src/skills/e2e-playwright/test-cases/TC-002-form-interaction.yaml +64 -0
- package/src/skills/e2e-playwright/test-cases/TC-003-specweave-integration.yaml +74 -0
- package/src/skills/e2e-playwright/test-cases/TC-004-accessibility-check.yaml +98 -0
- package/src/skills/figma-designer/SKILL.md +149 -0
- package/src/skills/figma-implementer/SKILL.md +148 -0
- package/src/skills/figma-mcp-connector/SKILL.md +136 -0
- package/src/skills/figma-mcp-connector/test-cases/test-1-read-file-desktop.yaml +22 -0
- package/src/skills/figma-mcp-connector/test-cases/test-2-read-file-framelink.yaml +21 -0
- package/src/skills/figma-mcp-connector/test-cases/test-3-error-handling.yaml +18 -0
- package/src/skills/figma-to-code/SKILL.md +128 -0
- package/src/skills/figma-to-code/test-cases/test-1-token-generation.yaml +29 -0
- package/src/skills/figma-to-code/test-cases/test-2-component-generation.yaml +27 -0
- package/src/skills/figma-to-code/test-cases/test-3-typescript-generation.yaml +28 -0
- package/src/skills/frontend/SKILL.md +177 -0
- package/src/skills/github-sync/SKILL.md +252 -0
- package/src/skills/github-sync/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/github-sync/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/github-sync/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/hetzner-provisioner/README.md +308 -0
- package/src/skills/hetzner-provisioner/SKILL.md +251 -0
- package/src/skills/hetzner-provisioner/test-cases/test-1-basic-provision.yaml +71 -0
- package/src/skills/hetzner-provisioner/test-cases/test-2-postgres-provision.yaml +85 -0
- package/src/skills/hetzner-provisioner/test-cases/test-3-ssl-config.yaml +126 -0
- package/src/skills/hetzner-provisioner/test-results/README.md +259 -0
- package/src/skills/increment-planner/SKILL.md +889 -0
- package/src/skills/increment-planner/scripts/feature-utils.js +250 -0
- package/src/skills/increment-planner/test-cases/test-1-basic-feature.yaml +27 -0
- package/src/skills/increment-planner/test-cases/test-2-complex-feature.yaml +30 -0
- package/src/skills/increment-planner/test-cases/test-3-auto-numbering.yaml +24 -0
- package/src/skills/increment-quality-judge/SKILL.md +566 -0
- package/src/skills/increment-quality-judge/test-cases/test-1-good-spec.yaml +95 -0
- package/src/skills/increment-quality-judge/test-cases/test-2-poor-spec.yaml +108 -0
- package/src/skills/increment-quality-judge/test-cases/test-3-export-suggestions.yaml +87 -0
- package/src/skills/jira-sync/README.md +328 -0
- package/src/skills/jira-sync/SKILL.md +209 -0
- package/src/skills/jira-sync/test-cases/test-1.yaml +9 -0
- package/src/skills/jira-sync/test-cases/test-2.yaml +9 -0
- package/src/skills/jira-sync/test-cases/test-3.yaml +10 -0
- package/src/skills/nextjs/SKILL.md +176 -0
- package/src/skills/nodejs-backend/SKILL.md +181 -0
- package/src/skills/notification-system/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/notification-system/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/notification-system/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/python-backend/SKILL.md +226 -0
- package/src/skills/role-orchestrator/README.md +197 -0
- package/src/skills/role-orchestrator/SKILL.md +1184 -0
- package/src/skills/role-orchestrator/test-cases/test-1-simple-product.yaml +98 -0
- package/src/skills/role-orchestrator/test-cases/test-2-quality-gate-failure.yaml +73 -0
- package/src/skills/role-orchestrator/test-cases/test-3-security-workflow.yaml +121 -0
- package/src/skills/role-orchestrator/test-cases/test-4-parallel-execution.yaml +145 -0
- package/src/skills/role-orchestrator/test-cases/test-5-feedback-loops.yaml +149 -0
- package/src/skills/skill-creator/LICENSE.txt +202 -0
- package/src/skills/skill-creator/SKILL.md +209 -0
- package/src/skills/skill-creator/scripts/init_skill.py +303 -0
- package/src/skills/skill-creator/scripts/package_skill.py +110 -0
- package/src/skills/skill-creator/scripts/quick_validate.py +65 -0
- package/src/skills/skill-creator/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/skill-creator/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/skill-creator/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/skill-router/SKILL.md +497 -0
- package/src/skills/skill-router/test-cases/test-1-basic-routing.yaml +33 -0
- package/src/skills/skill-router/test-cases/test-2-ambiguous-request.yaml +42 -0
- package/src/skills/skill-router/test-cases/test-3-nested-orchestration.yaml +50 -0
- package/src/skills/spec-driven-brainstorming/README.md +264 -0
- package/src/skills/spec-driven-brainstorming/SKILL.md +439 -0
- package/src/skills/spec-driven-brainstorming/test-cases/TC-001-simple-idea-to-design.yaml +148 -0
- package/src/skills/spec-driven-brainstorming/test-cases/TC-002-complex-ultrathink-design.yaml +190 -0
- package/src/skills/spec-driven-brainstorming/test-cases/TC-003-unclear-requirements-socratic.yaml +233 -0
- package/src/skills/spec-driven-debugging/README.md +479 -0
- package/src/skills/spec-driven-debugging/SKILL.md +652 -0
- package/src/skills/spec-driven-debugging/test-cases/TC-001-simple-auth-bug.yaml +212 -0
- package/src/skills/spec-driven-debugging/test-cases/TC-002-race-condition-ultrathink.yaml +461 -0
- package/src/skills/spec-driven-debugging/test-cases/TC-003-brownfield-missing-spec.yaml +366 -0
- package/src/skills/spec-kit-expert/SKILL.md +1012 -0
- package/src/skills/spec-kit-expert/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/spec-kit-expert/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/spec-kit-expert/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/specweave-ado-mapper/SKILL.md +501 -0
- package/src/skills/specweave-detector/SKILL.md +420 -0
- package/src/skills/specweave-detector/test-cases/test-1-basic-detection.yaml +37 -0
- package/src/skills/specweave-detector/test-cases/test-2-missing-config.yaml +37 -0
- package/src/skills/specweave-detector/test-cases/test-3-non-specweave-project.yaml +34 -0
- package/src/skills/specweave-jira-mapper/SKILL.md +500 -0
- package/src/skills/stripe-integrator/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/stripe-integrator/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/stripe-integrator/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/task-builder/README.md +90 -0
- package/src/skills/task-builder/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/task-builder/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/task-builder/test-cases/test-3-placeholder.yaml +12 -0
- package/src/templates/.env.example +144 -0
- package/src/templates/.gitignore.template +81 -0
- package/src/templates/CLAUDE.md.template +383 -0
- package/src/templates/README.md.template +240 -0
- package/src/templates/config.yaml +333 -0
- package/src/templates/docs/README.md +124 -0
- package/src/templates/docs/adr-template.md +118 -0
- package/src/templates/docs/hld-template.md +220 -0
- package/src/templates/docs/lld-template.md +580 -0
- package/src/templates/docs/prd-template.md +132 -0
- package/src/templates/docs/rfc-template.md +229 -0
- package/src/templates/docs/runbook-template.md +298 -0
- package/src/templates/environments/minimal/.env.production +16 -0
- package/src/templates/environments/minimal/README.md +54 -0
- package/src/templates/environments/minimal/deploy-production.yml +52 -0
- package/src/templates/environments/progressive/.env.qa +28 -0
- package/src/templates/environments/progressive/README.md +129 -0
- package/src/templates/environments/progressive/deploy-production.yml +93 -0
- package/src/templates/environments/progressive/deploy-qa.yml +62 -0
- package/src/templates/environments/progressive/deploy-staging.yml +67 -0
- package/src/templates/environments/standard/.env.development +20 -0
- package/src/templates/environments/standard/.env.production +30 -0
- package/src/templates/environments/standard/.env.staging +23 -0
- package/src/templates/environments/standard/README.md +97 -0
- package/src/templates/environments/standard/deploy-production.yml +68 -0
- package/src/templates/environments/standard/deploy-staging.yml +61 -0
- package/src/templates/environments/standard/docker-compose.yml +43 -0
- package/src/templates/increment-metadata-template.yaml +138 -0
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
# Playbook: Data Corruption
|
|
2
|
+
|
|
3
|
+
## Symptoms
|
|
4
|
+
|
|
5
|
+
- Users report incorrect data
|
|
6
|
+
- Database integrity constraint violations
|
|
7
|
+
- Foreign key errors
|
|
8
|
+
- Application errors due to unexpected data
|
|
9
|
+
- Failed backups (checksum mismatch)
|
|
10
|
+
- Monitoring alert: "Data integrity check failed"
|
|
11
|
+
|
|
12
|
+
## Severity
|
|
13
|
+
|
|
14
|
+
- **SEV1** - Critical data corrupted (financial, health, legal)
|
|
15
|
+
- **SEV2** - Non-critical data corrupted (user profiles, cache)
|
|
16
|
+
- **SEV3** - Recoverable corruption (can restore from backup)
|
|
17
|
+
|
|
18
|
+
## Diagnosis
|
|
19
|
+
|
|
20
|
+
### Step 1: Confirm Corruption
|
|
21
|
+
|
|
22
|
+
**Database Integrity Check** (PostgreSQL):
|
|
23
|
+
```sql
|
|
24
|
+
-- Check for corruption
|
|
25
|
+
SELECT * FROM pg_catalog.pg_database WHERE datname = 'your_database';
|
|
26
|
+
|
|
27
|
+
-- Verify checksums (if enabled)
|
|
28
|
+
SELECT datname, datcollate, datctype
|
|
29
|
+
FROM pg_database
|
|
30
|
+
WHERE datname = 'your_database';
|
|
31
|
+
|
|
32
|
+
-- Check for bloat
|
|
33
|
+
SELECT schemaname, tablename, pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename))
|
|
34
|
+
FROM pg_tables
|
|
35
|
+
ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC;
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**Database Integrity Check** (MySQL):
|
|
39
|
+
```sql
|
|
40
|
+
-- Check table for corruption
|
|
41
|
+
CHECK TABLE users;
|
|
42
|
+
|
|
43
|
+
-- Repair table (if corrupted)
|
|
44
|
+
REPAIR TABLE users;
|
|
45
|
+
|
|
46
|
+
-- Optimize table (defragment)
|
|
47
|
+
OPTIMIZE TABLE users;
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
### Step 2: Identify Scope
|
|
53
|
+
|
|
54
|
+
**Questions to answer**:
|
|
55
|
+
- Which tables/data are affected?
|
|
56
|
+
- How many records corrupted?
|
|
57
|
+
- When did corruption start?
|
|
58
|
+
- What's the impact on users?
|
|
59
|
+
|
|
60
|
+
**Check Database Logs**:
|
|
61
|
+
```bash
|
|
62
|
+
# PostgreSQL
|
|
63
|
+
grep "ERROR\|FATAL\|PANIC" /var/log/postgresql/postgresql.log
|
|
64
|
+
|
|
65
|
+
# MySQL
|
|
66
|
+
grep "ERROR" /var/log/mysql/error.log
|
|
67
|
+
|
|
68
|
+
# Look for:
|
|
69
|
+
# - Constraint violations
|
|
70
|
+
# - Foreign key errors
|
|
71
|
+
# - Checksum errors
|
|
72
|
+
# - Disk I/O errors
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
### Step 3: Determine Root Cause
|
|
78
|
+
|
|
79
|
+
**Common causes**:
|
|
80
|
+
|
|
81
|
+
| Cause | Symptoms |
|
|
82
|
+
|-------|----------|
|
|
83
|
+
| Disk corruption | I/O errors in dmesg, checksum failures |
|
|
84
|
+
| Application bug | Logical corruption (wrong data, not random) |
|
|
85
|
+
| Failed migration | Schema mismatch, foreign key violations |
|
|
86
|
+
| Concurrent writes | Race condition, duplicate records |
|
|
87
|
+
| Hardware failure | Random corruption, unrelated records |
|
|
88
|
+
| Malicious attack | Deliberate data modification |
|
|
89
|
+
|
|
90
|
+
**Check for Disk Errors**:
|
|
91
|
+
```bash
|
|
92
|
+
# Check disk errors
|
|
93
|
+
dmesg | grep -i "I/O error\|disk error"
|
|
94
|
+
|
|
95
|
+
# Check SMART status
|
|
96
|
+
smartctl -a /dev/sda
|
|
97
|
+
|
|
98
|
+
# Look for: Reallocated_Sector_Ct, Current_Pending_Sector
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Mitigation
|
|
104
|
+
|
|
105
|
+
### Immediate (Now - 5 min)
|
|
106
|
+
|
|
107
|
+
**CRITICAL: Preserve Evidence**
|
|
108
|
+
```bash
|
|
109
|
+
# 1. STOP ALL WRITES (prevent further corruption)
|
|
110
|
+
# Put application in read-only mode OR
|
|
111
|
+
# Take application offline
|
|
112
|
+
|
|
113
|
+
# 2. Snapshot/backup current state (even if corrupted)
|
|
114
|
+
# PostgreSQL:
|
|
115
|
+
pg_dump your_database > /backup/corrupted-$(date +%Y%m%d-%H%M%S).sql
|
|
116
|
+
|
|
117
|
+
# MySQL:
|
|
118
|
+
mysqldump your_database > /backup/corrupted-$(date +%Y%m%d-%H%M%S).sql
|
|
119
|
+
|
|
120
|
+
# 3. Snapshot disk (cloud)
|
|
121
|
+
# AWS:
|
|
122
|
+
aws ec2 create-snapshot --volume-id vol-1234567890abcdef0 --description "Corruption snapshot"
|
|
123
|
+
|
|
124
|
+
# Impact: Preserves evidence for forensics
|
|
125
|
+
# Risk: None (read-only operations)
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
**CRITICAL: DO NOT**:
|
|
129
|
+
- Delete corrupted data (may need for forensics)
|
|
130
|
+
- Run REPAIR TABLE (may destroy evidence)
|
|
131
|
+
- Restart database (may clear logs)
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
### Short-term (5 min - 1 hour)
|
|
136
|
+
|
|
137
|
+
**Option A: Restore from Backup** (if recent clean backup)
|
|
138
|
+
```bash
|
|
139
|
+
# 1. Identify last known good backup
|
|
140
|
+
ls -lh /backup/ | grep pg_dump
|
|
141
|
+
|
|
142
|
+
# Example:
|
|
143
|
+
# backup-20251026-0200.sql ← Clean backup (before corruption)
|
|
144
|
+
# backup-20251026-0800.sql ← Corrupted
|
|
145
|
+
|
|
146
|
+
# 2. Restore from clean backup
|
|
147
|
+
# PostgreSQL:
|
|
148
|
+
psql your_database < /backup/backup-20251026-0200.sql
|
|
149
|
+
|
|
150
|
+
# MySQL:
|
|
151
|
+
mysql your_database < /backup/backup-20251026-0200.sql
|
|
152
|
+
|
|
153
|
+
# 3. Verify data integrity
|
|
154
|
+
# Run application tests
|
|
155
|
+
# Check user-reported issues
|
|
156
|
+
|
|
157
|
+
# Impact: Data restored to clean state
|
|
158
|
+
# Risk: Medium (lose data after backup time)
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
**Option B: Repair Corrupted Records** (if isolated corruption)
|
|
162
|
+
```sql
|
|
163
|
+
-- Identify corrupted records
|
|
164
|
+
SELECT * FROM users WHERE email IS NULL; -- Should not be null
|
|
165
|
+
|
|
166
|
+
-- Fix corrupted records
|
|
167
|
+
UPDATE users SET email = 'unknown@example.com' WHERE email IS NULL;
|
|
168
|
+
|
|
169
|
+
-- Verify fix
|
|
170
|
+
SELECT count(*) FROM users WHERE email IS NULL; -- Should be 0
|
|
171
|
+
|
|
172
|
+
-- Impact: Corruption fixed
|
|
173
|
+
-- Risk: Low (if corruption is known and fixable)
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
**Option C: Point-in-Time Recovery** (PostgreSQL)
|
|
177
|
+
```bash
|
|
178
|
+
# If WAL (Write-Ahead Logging) enabled:
|
|
179
|
+
|
|
180
|
+
# 1. Determine recovery point (before corruption)
|
|
181
|
+
# 2025-10-26 07:00:00 (corruption detected at 08:00)
|
|
182
|
+
|
|
183
|
+
# 2. Restore from base backup + WAL
|
|
184
|
+
pg_basebackup -D /var/lib/postgresql/data-recovery
|
|
185
|
+
|
|
186
|
+
# 3. Configure recovery.conf
|
|
187
|
+
# recovery_target_time = '2025-10-26 07:00:00'
|
|
188
|
+
|
|
189
|
+
# 4. Start PostgreSQL (will replay WAL until target time)
|
|
190
|
+
systemctl start postgresql
|
|
191
|
+
|
|
192
|
+
# Impact: Restore to exact point before corruption
|
|
193
|
+
# Risk: Low (if WAL available)
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
### Long-term (1 hour+)
|
|
199
|
+
|
|
200
|
+
**Root Cause Analysis**:
|
|
201
|
+
|
|
202
|
+
**If disk corruption**:
|
|
203
|
+
- [ ] Replace disk immediately
|
|
204
|
+
- [ ] Check RAID status
|
|
205
|
+
- [ ] Run filesystem check (fsck)
|
|
206
|
+
- [ ] Enable database checksums
|
|
207
|
+
|
|
208
|
+
**If application bug**:
|
|
209
|
+
- [ ] Fix bug in application code
|
|
210
|
+
- [ ] Add data validation
|
|
211
|
+
- [ ] Add integrity checks
|
|
212
|
+
- [ ] Add regression test
|
|
213
|
+
|
|
214
|
+
**If failed migration**:
|
|
215
|
+
- [ ] Review migration script
|
|
216
|
+
- [ ] Test migrations in staging first
|
|
217
|
+
- [ ] Add rollback plan
|
|
218
|
+
- [ ] Use transaction-based migrations
|
|
219
|
+
|
|
220
|
+
**If concurrent writes**:
|
|
221
|
+
- [ ] Add locking (row-level, table-level)
|
|
222
|
+
- [ ] Use optimistic locking (version column)
|
|
223
|
+
- [ ] Review transaction isolation level
|
|
224
|
+
- [ ] Add unique constraints
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## Prevention
|
|
229
|
+
|
|
230
|
+
**Backups**:
|
|
231
|
+
- [ ] Daily automated backups
|
|
232
|
+
- [ ] Test restore process monthly
|
|
233
|
+
- [ ] Multiple backup locations (local + S3)
|
|
234
|
+
- [ ] Point-in-time recovery enabled (WAL)
|
|
235
|
+
- [ ] Retention: 30 days
|
|
236
|
+
|
|
237
|
+
**Monitoring**:
|
|
238
|
+
- [ ] Data integrity checks (checksums)
|
|
239
|
+
- [ ] Foreign key violation alerts
|
|
240
|
+
- [ ] Disk error monitoring (SMART)
|
|
241
|
+
- [ ] Backup success/failure alerts
|
|
242
|
+
- [ ] Application-level data validation
|
|
243
|
+
|
|
244
|
+
**Data Validation**:
|
|
245
|
+
- [ ] Database constraints (NOT NULL, FOREIGN KEY, CHECK)
|
|
246
|
+
- [ ] Application-level validation
|
|
247
|
+
- [ ] Schema migrations in transactions
|
|
248
|
+
- [ ] Automated data quality tests
|
|
249
|
+
|
|
250
|
+
**Redundancy**:
|
|
251
|
+
- [ ] Database replication (primary + replica)
|
|
252
|
+
- [ ] RAID for disk redundancy
|
|
253
|
+
- [ ] Multi-AZ deployment (cloud)
|
|
254
|
+
|
|
255
|
+
---
|
|
256
|
+
|
|
257
|
+
## Escalation
|
|
258
|
+
|
|
259
|
+
**Escalate to DBA if**:
|
|
260
|
+
- Database-level corruption
|
|
261
|
+
- Need expert for recovery
|
|
262
|
+
|
|
263
|
+
**Escalate to developer if**:
|
|
264
|
+
- Application bug causing corruption
|
|
265
|
+
- Need code fix
|
|
266
|
+
|
|
267
|
+
**Escalate to security team if**:
|
|
268
|
+
- Suspected malicious attack
|
|
269
|
+
- Unauthorized data modification
|
|
270
|
+
|
|
271
|
+
**Escalate to management if**:
|
|
272
|
+
- Critical data lost
|
|
273
|
+
- Legal/compliance implications
|
|
274
|
+
- Data breach
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
## Legal/Compliance
|
|
279
|
+
|
|
280
|
+
**If critical data corrupted**:
|
|
281
|
+
- [ ] Notify legal team
|
|
282
|
+
- [ ] Notify compliance team
|
|
283
|
+
- [ ] Check notification requirements:
|
|
284
|
+
- GDPR: 72 hours for breach notification
|
|
285
|
+
- HIPAA: 60 days for breach notification
|
|
286
|
+
- PCI-DSS: Immediate notification
|
|
287
|
+
- [ ] Document incident timeline (for audit)
|
|
288
|
+
- [ ] Preserve evidence (forensics)
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
## Related Runbooks
|
|
293
|
+
|
|
294
|
+
- [07-service-down.md](07-service-down.md) - If database down
|
|
295
|
+
- [../modules/database-diagnostics.md](../modules/database-diagnostics.md) - Database troubleshooting
|
|
296
|
+
- [../modules/security-incidents.md](../modules/security-incidents.md) - If malicious attack
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
## Post-Incident
|
|
301
|
+
|
|
302
|
+
After resolving:
|
|
303
|
+
- [ ] Create post-mortem (MANDATORY for SEV1)
|
|
304
|
+
- [ ] Root cause analysis (what, why, how)
|
|
305
|
+
- [ ] Identify affected users/records
|
|
306
|
+
- [ ] User communication (if needed)
|
|
307
|
+
- [ ] Action items (prevent recurrence)
|
|
308
|
+
- [ ] Update backup/recovery procedures
|
|
309
|
+
- [ ] Update this runbook if needed
|
|
310
|
+
|
|
311
|
+
---
|
|
312
|
+
|
|
313
|
+
## Useful Commands Reference
|
|
314
|
+
|
|
315
|
+
```bash
|
|
316
|
+
# PostgreSQL integrity check
|
|
317
|
+
psql -c "SELECT * FROM pg_catalog.pg_database"
|
|
318
|
+
|
|
319
|
+
# MySQL table check
|
|
320
|
+
mysqlcheck -c your_database
|
|
321
|
+
|
|
322
|
+
# Backup
|
|
323
|
+
pg_dump your_database > backup.sql
|
|
324
|
+
mysqldump your_database > backup.sql
|
|
325
|
+
|
|
326
|
+
# Restore
|
|
327
|
+
psql your_database < backup.sql
|
|
328
|
+
mysql your_database < backup.sql
|
|
329
|
+
|
|
330
|
+
# Disk check
|
|
331
|
+
dmesg | grep -i "I/O error"
|
|
332
|
+
smartctl -a /dev/sda
|
|
333
|
+
fsck /dev/sda1
|
|
334
|
+
|
|
335
|
+
# Snapshot (AWS)
|
|
336
|
+
aws ec2 create-snapshot --volume-id vol-1234567890abcdef0
|
|
337
|
+
```
|