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.
Files changed (288) hide show
  1. package/INSTALL.md +848 -0
  2. package/LICENSE +21 -0
  3. package/README.md +675 -0
  4. package/SPECWEAVE.md +665 -0
  5. package/bin/install-agents.sh +57 -0
  6. package/bin/install-all.sh +49 -0
  7. package/bin/install-commands.sh +56 -0
  8. package/bin/install-skills.sh +57 -0
  9. package/bin/specweave.js +81 -0
  10. package/dist/adapters/adapter-base.d.ts +50 -0
  11. package/dist/adapters/adapter-base.d.ts.map +1 -0
  12. package/dist/adapters/adapter-base.js +146 -0
  13. package/dist/adapters/adapter-base.js.map +1 -0
  14. package/dist/adapters/adapter-interface.d.ts +108 -0
  15. package/dist/adapters/adapter-interface.d.ts.map +1 -0
  16. package/dist/adapters/adapter-interface.js +9 -0
  17. package/dist/adapters/adapter-interface.js.map +1 -0
  18. package/dist/adapters/claude/adapter.d.ts +54 -0
  19. package/dist/adapters/claude/adapter.d.ts.map +1 -0
  20. package/dist/adapters/claude/adapter.js +184 -0
  21. package/dist/adapters/claude/adapter.js.map +1 -0
  22. package/dist/adapters/copilot/adapter.d.ts +42 -0
  23. package/dist/adapters/copilot/adapter.d.ts.map +1 -0
  24. package/dist/adapters/copilot/adapter.js +239 -0
  25. package/dist/adapters/copilot/adapter.js.map +1 -0
  26. package/dist/adapters/cursor/adapter.d.ts +42 -0
  27. package/dist/adapters/cursor/adapter.d.ts.map +1 -0
  28. package/dist/adapters/cursor/adapter.js +297 -0
  29. package/dist/adapters/cursor/adapter.js.map +1 -0
  30. package/dist/adapters/generic/adapter.d.ts +40 -0
  31. package/dist/adapters/generic/adapter.d.ts.map +1 -0
  32. package/dist/adapters/generic/adapter.js +155 -0
  33. package/dist/adapters/generic/adapter.js.map +1 -0
  34. package/dist/cli/commands/init.d.ts +6 -0
  35. package/dist/cli/commands/init.d.ts.map +1 -0
  36. package/dist/cli/commands/init.js +247 -0
  37. package/dist/cli/commands/init.js.map +1 -0
  38. package/dist/cli/commands/install.d.ts +7 -0
  39. package/dist/cli/commands/install.d.ts.map +1 -0
  40. package/dist/cli/commands/install.js +160 -0
  41. package/dist/cli/commands/install.js.map +1 -0
  42. package/dist/cli/commands/list.d.ts +6 -0
  43. package/dist/cli/commands/list.d.ts.map +1 -0
  44. package/dist/cli/commands/list.js +154 -0
  45. package/dist/cli/commands/list.js.map +1 -0
  46. package/package.json +90 -0
  47. package/src/adapters/README.md +312 -0
  48. package/src/adapters/adapter-base.ts +146 -0
  49. package/src/adapters/adapter-interface.ts +120 -0
  50. package/src/adapters/claude/README.md +241 -0
  51. package/src/adapters/claude/adapter.ts +157 -0
  52. package/src/adapters/copilot/.github/copilot/instructions.md +376 -0
  53. package/src/adapters/copilot/README.md +200 -0
  54. package/src/adapters/copilot/adapter.ts +210 -0
  55. package/src/adapters/cursor/.cursor/context/docs-context.md +62 -0
  56. package/src/adapters/cursor/.cursor/context/increments-context.md +71 -0
  57. package/src/adapters/cursor/.cursor/context/strategy-context.md +73 -0
  58. package/src/adapters/cursor/.cursor/context/tests-context.md +89 -0
  59. package/src/adapters/cursor/.cursorrules +325 -0
  60. package/src/adapters/cursor/README.md +243 -0
  61. package/src/adapters/cursor/adapter.ts +268 -0
  62. package/src/adapters/generic/README.md +277 -0
  63. package/src/adapters/generic/SPECWEAVE-MANUAL.md +676 -0
  64. package/src/adapters/generic/adapter.ts +159 -0
  65. package/src/adapters/registry.yaml +126 -0
  66. package/src/agents/architect/AGENT.md +416 -0
  67. package/src/agents/devops/AGENT.md +1738 -0
  68. package/src/agents/docs-writer/AGENT.md +239 -0
  69. package/src/agents/performance/AGENT.md +228 -0
  70. package/src/agents/pm/AGENT.md +751 -0
  71. package/src/agents/qa-lead/AGENT.md +150 -0
  72. package/src/agents/security/AGENT.md +179 -0
  73. package/src/agents/sre/AGENT.md +582 -0
  74. package/src/agents/sre/modules/backend-diagnostics.md +481 -0
  75. package/src/agents/sre/modules/database-diagnostics.md +509 -0
  76. package/src/agents/sre/modules/infrastructure.md +561 -0
  77. package/src/agents/sre/modules/monitoring.md +439 -0
  78. package/src/agents/sre/modules/security-incidents.md +421 -0
  79. package/src/agents/sre/modules/ui-diagnostics.md +302 -0
  80. package/src/agents/sre/playbooks/01-high-cpu-usage.md +204 -0
  81. package/src/agents/sre/playbooks/02-database-deadlock.md +241 -0
  82. package/src/agents/sre/playbooks/03-memory-leak.md +252 -0
  83. package/src/agents/sre/playbooks/04-slow-api-response.md +269 -0
  84. package/src/agents/sre/playbooks/05-ddos-attack.md +293 -0
  85. package/src/agents/sre/playbooks/06-disk-full.md +314 -0
  86. package/src/agents/sre/playbooks/07-service-down.md +333 -0
  87. package/src/agents/sre/playbooks/08-data-corruption.md +337 -0
  88. package/src/agents/sre/playbooks/09-cascade-failure.md +430 -0
  89. package/src/agents/sre/playbooks/10-rate-limit-exceeded.md +464 -0
  90. package/src/agents/sre/scripts/health-check.sh +230 -0
  91. package/src/agents/sre/scripts/log-analyzer.py +213 -0
  92. package/src/agents/sre/scripts/metrics-collector.sh +294 -0
  93. package/src/agents/sre/scripts/trace-analyzer.js +257 -0
  94. package/src/agents/sre/templates/incident-report.md +249 -0
  95. package/src/agents/sre/templates/mitigation-plan.md +375 -0
  96. package/src/agents/sre/templates/post-mortem.md +418 -0
  97. package/src/agents/sre/templates/runbook-template.md +412 -0
  98. package/src/agents/tech-lead/AGENT.md +263 -0
  99. package/src/commands/add-tasks.md +176 -0
  100. package/src/commands/close-increment.md +347 -0
  101. package/src/commands/create-increment.md +223 -0
  102. package/src/commands/create-project.md +528 -0
  103. package/src/commands/generate-docs.md +623 -0
  104. package/src/commands/list-increments.md +180 -0
  105. package/src/commands/review-docs.md +331 -0
  106. package/src/commands/start-increment.md +139 -0
  107. package/src/commands/sync-github.md +115 -0
  108. package/src/commands/validate-increment.md +800 -0
  109. package/src/hooks/README.md +252 -0
  110. package/src/hooks/docs-changed.sh +59 -0
  111. package/src/hooks/human-input-required.sh +55 -0
  112. package/src/hooks/post-task-completion.sh +57 -0
  113. package/src/hooks/pre-implementation.sh +47 -0
  114. package/src/skills/ado-sync/README.md +449 -0
  115. package/src/skills/ado-sync/SKILL.md +245 -0
  116. package/src/skills/ado-sync/test-cases/test-1.yaml +9 -0
  117. package/src/skills/ado-sync/test-cases/test-2.yaml +8 -0
  118. package/src/skills/ado-sync/test-cases/test-3.yaml +9 -0
  119. package/src/skills/bmad-method-expert/SKILL.md +628 -0
  120. package/src/skills/bmad-method-expert/scripts/analyze-project.js +318 -0
  121. package/src/skills/bmad-method-expert/scripts/check-setup.js +208 -0
  122. package/src/skills/bmad-method-expert/scripts/generate-template.js +1149 -0
  123. package/src/skills/bmad-method-expert/scripts/validate-documents.js +340 -0
  124. package/src/skills/bmad-method-expert/test-cases/test-1-placeholder.yaml +12 -0
  125. package/src/skills/bmad-method-expert/test-cases/test-2-placeholder.yaml +12 -0
  126. package/src/skills/bmad-method-expert/test-cases/test-3-placeholder.yaml +12 -0
  127. package/src/skills/brownfield-analyzer/SKILL.md +523 -0
  128. package/src/skills/brownfield-analyzer/test-cases/test-1-basic-analysis.yaml +48 -0
  129. package/src/skills/brownfield-analyzer/test-cases/test-2-placeholder.yaml +12 -0
  130. package/src/skills/brownfield-analyzer/test-cases/test-3-placeholder.yaml +12 -0
  131. package/src/skills/brownfield-onboarder/SKILL.md +625 -0
  132. package/src/skills/brownfield-onboarder/test-cases/test-1-placeholder.yaml +12 -0
  133. package/src/skills/brownfield-onboarder/test-cases/test-2-placeholder.yaml +12 -0
  134. package/src/skills/brownfield-onboarder/test-cases/test-3-placeholder.yaml +12 -0
  135. package/src/skills/calendar-system/test-cases/test-1-placeholder.yaml +12 -0
  136. package/src/skills/calendar-system/test-cases/test-2-placeholder.yaml +12 -0
  137. package/src/skills/calendar-system/test-cases/test-3-placeholder.yaml +12 -0
  138. package/src/skills/context-loader/SKILL.md +734 -0
  139. package/src/skills/context-loader/test-cases/test-1-basic-loading.yaml +39 -0
  140. package/src/skills/context-loader/test-cases/test-2-token-budget-exceeded.yaml +44 -0
  141. package/src/skills/context-loader/test-cases/test-3-section-anchors.yaml +45 -0
  142. package/src/skills/context-optimizer/SKILL.md +618 -0
  143. package/src/skills/context-optimizer/test-cases/test-1-bug-fix-narrow.yaml +97 -0
  144. package/src/skills/context-optimizer/test-cases/test-2-feature-focused.yaml +109 -0
  145. package/src/skills/context-optimizer/test-cases/test-3-architecture-broad.yaml +98 -0
  146. package/src/skills/cost-optimizer/SKILL.md +190 -0
  147. package/src/skills/cost-optimizer/test-cases/test-1-basic-comparison.yaml +75 -0
  148. package/src/skills/cost-optimizer/test-cases/test-2-budget-constraint.yaml +52 -0
  149. package/src/skills/cost-optimizer/test-cases/test-3-scale-requirement.yaml +63 -0
  150. package/src/skills/cost-optimizer/test-results/README.md +46 -0
  151. package/src/skills/design-system-architect/SKILL.md +107 -0
  152. package/src/skills/design-system-architect/test-cases/test-1-token-structure.yaml +23 -0
  153. package/src/skills/design-system-architect/test-cases/test-2-component-hierarchy.yaml +24 -0
  154. package/src/skills/design-system-architect/test-cases/test-3-accessibility-checklist.yaml +23 -0
  155. package/src/skills/diagrams-architect/SKILL.md +763 -0
  156. package/src/skills/diagrams-generator/SKILL.md +25 -0
  157. package/src/skills/diagrams-generator/test-cases/test-1.yaml +9 -0
  158. package/src/skills/diagrams-generator/test-cases/test-2.yaml +9 -0
  159. package/src/skills/diagrams-generator/test-cases/test-3.yaml +8 -0
  160. package/src/skills/docs-updater/README.md +48 -0
  161. package/src/skills/docs-updater/test-cases/test-1-placeholder.yaml +12 -0
  162. package/src/skills/docs-updater/test-cases/test-2-placeholder.yaml +12 -0
  163. package/src/skills/docs-updater/test-cases/test-3-placeholder.yaml +12 -0
  164. package/src/skills/dotnet-backend/SKILL.md +250 -0
  165. package/src/skills/e2e-playwright/README.md +506 -0
  166. package/src/skills/e2e-playwright/SKILL.md +457 -0
  167. package/src/skills/e2e-playwright/execute.js +373 -0
  168. package/src/skills/e2e-playwright/lib/utils.js +514 -0
  169. package/src/skills/e2e-playwright/package.json +33 -0
  170. package/src/skills/e2e-playwright/test-cases/TC-001-basic-navigation.yaml +54 -0
  171. package/src/skills/e2e-playwright/test-cases/TC-002-form-interaction.yaml +64 -0
  172. package/src/skills/e2e-playwright/test-cases/TC-003-specweave-integration.yaml +74 -0
  173. package/src/skills/e2e-playwright/test-cases/TC-004-accessibility-check.yaml +98 -0
  174. package/src/skills/figma-designer/SKILL.md +149 -0
  175. package/src/skills/figma-implementer/SKILL.md +148 -0
  176. package/src/skills/figma-mcp-connector/SKILL.md +136 -0
  177. package/src/skills/figma-mcp-connector/test-cases/test-1-read-file-desktop.yaml +22 -0
  178. package/src/skills/figma-mcp-connector/test-cases/test-2-read-file-framelink.yaml +21 -0
  179. package/src/skills/figma-mcp-connector/test-cases/test-3-error-handling.yaml +18 -0
  180. package/src/skills/figma-to-code/SKILL.md +128 -0
  181. package/src/skills/figma-to-code/test-cases/test-1-token-generation.yaml +29 -0
  182. package/src/skills/figma-to-code/test-cases/test-2-component-generation.yaml +27 -0
  183. package/src/skills/figma-to-code/test-cases/test-3-typescript-generation.yaml +28 -0
  184. package/src/skills/frontend/SKILL.md +177 -0
  185. package/src/skills/github-sync/SKILL.md +252 -0
  186. package/src/skills/github-sync/test-cases/test-1-placeholder.yaml +12 -0
  187. package/src/skills/github-sync/test-cases/test-2-placeholder.yaml +12 -0
  188. package/src/skills/github-sync/test-cases/test-3-placeholder.yaml +12 -0
  189. package/src/skills/hetzner-provisioner/README.md +308 -0
  190. package/src/skills/hetzner-provisioner/SKILL.md +251 -0
  191. package/src/skills/hetzner-provisioner/test-cases/test-1-basic-provision.yaml +71 -0
  192. package/src/skills/hetzner-provisioner/test-cases/test-2-postgres-provision.yaml +85 -0
  193. package/src/skills/hetzner-provisioner/test-cases/test-3-ssl-config.yaml +126 -0
  194. package/src/skills/hetzner-provisioner/test-results/README.md +259 -0
  195. package/src/skills/increment-planner/SKILL.md +889 -0
  196. package/src/skills/increment-planner/scripts/feature-utils.js +250 -0
  197. package/src/skills/increment-planner/test-cases/test-1-basic-feature.yaml +27 -0
  198. package/src/skills/increment-planner/test-cases/test-2-complex-feature.yaml +30 -0
  199. package/src/skills/increment-planner/test-cases/test-3-auto-numbering.yaml +24 -0
  200. package/src/skills/increment-quality-judge/SKILL.md +566 -0
  201. package/src/skills/increment-quality-judge/test-cases/test-1-good-spec.yaml +95 -0
  202. package/src/skills/increment-quality-judge/test-cases/test-2-poor-spec.yaml +108 -0
  203. package/src/skills/increment-quality-judge/test-cases/test-3-export-suggestions.yaml +87 -0
  204. package/src/skills/jira-sync/README.md +328 -0
  205. package/src/skills/jira-sync/SKILL.md +209 -0
  206. package/src/skills/jira-sync/test-cases/test-1.yaml +9 -0
  207. package/src/skills/jira-sync/test-cases/test-2.yaml +9 -0
  208. package/src/skills/jira-sync/test-cases/test-3.yaml +10 -0
  209. package/src/skills/nextjs/SKILL.md +176 -0
  210. package/src/skills/nodejs-backend/SKILL.md +181 -0
  211. package/src/skills/notification-system/test-cases/test-1-placeholder.yaml +12 -0
  212. package/src/skills/notification-system/test-cases/test-2-placeholder.yaml +12 -0
  213. package/src/skills/notification-system/test-cases/test-3-placeholder.yaml +12 -0
  214. package/src/skills/python-backend/SKILL.md +226 -0
  215. package/src/skills/role-orchestrator/README.md +197 -0
  216. package/src/skills/role-orchestrator/SKILL.md +1184 -0
  217. package/src/skills/role-orchestrator/test-cases/test-1-simple-product.yaml +98 -0
  218. package/src/skills/role-orchestrator/test-cases/test-2-quality-gate-failure.yaml +73 -0
  219. package/src/skills/role-orchestrator/test-cases/test-3-security-workflow.yaml +121 -0
  220. package/src/skills/role-orchestrator/test-cases/test-4-parallel-execution.yaml +145 -0
  221. package/src/skills/role-orchestrator/test-cases/test-5-feedback-loops.yaml +149 -0
  222. package/src/skills/skill-creator/LICENSE.txt +202 -0
  223. package/src/skills/skill-creator/SKILL.md +209 -0
  224. package/src/skills/skill-creator/scripts/init_skill.py +303 -0
  225. package/src/skills/skill-creator/scripts/package_skill.py +110 -0
  226. package/src/skills/skill-creator/scripts/quick_validate.py +65 -0
  227. package/src/skills/skill-creator/test-cases/test-1-placeholder.yaml +12 -0
  228. package/src/skills/skill-creator/test-cases/test-2-placeholder.yaml +12 -0
  229. package/src/skills/skill-creator/test-cases/test-3-placeholder.yaml +12 -0
  230. package/src/skills/skill-router/SKILL.md +497 -0
  231. package/src/skills/skill-router/test-cases/test-1-basic-routing.yaml +33 -0
  232. package/src/skills/skill-router/test-cases/test-2-ambiguous-request.yaml +42 -0
  233. package/src/skills/skill-router/test-cases/test-3-nested-orchestration.yaml +50 -0
  234. package/src/skills/spec-driven-brainstorming/README.md +264 -0
  235. package/src/skills/spec-driven-brainstorming/SKILL.md +439 -0
  236. package/src/skills/spec-driven-brainstorming/test-cases/TC-001-simple-idea-to-design.yaml +148 -0
  237. package/src/skills/spec-driven-brainstorming/test-cases/TC-002-complex-ultrathink-design.yaml +190 -0
  238. package/src/skills/spec-driven-brainstorming/test-cases/TC-003-unclear-requirements-socratic.yaml +233 -0
  239. package/src/skills/spec-driven-debugging/README.md +479 -0
  240. package/src/skills/spec-driven-debugging/SKILL.md +652 -0
  241. package/src/skills/spec-driven-debugging/test-cases/TC-001-simple-auth-bug.yaml +212 -0
  242. package/src/skills/spec-driven-debugging/test-cases/TC-002-race-condition-ultrathink.yaml +461 -0
  243. package/src/skills/spec-driven-debugging/test-cases/TC-003-brownfield-missing-spec.yaml +366 -0
  244. package/src/skills/spec-kit-expert/SKILL.md +1012 -0
  245. package/src/skills/spec-kit-expert/test-cases/test-1-placeholder.yaml +12 -0
  246. package/src/skills/spec-kit-expert/test-cases/test-2-placeholder.yaml +12 -0
  247. package/src/skills/spec-kit-expert/test-cases/test-3-placeholder.yaml +12 -0
  248. package/src/skills/specweave-ado-mapper/SKILL.md +501 -0
  249. package/src/skills/specweave-detector/SKILL.md +420 -0
  250. package/src/skills/specweave-detector/test-cases/test-1-basic-detection.yaml +37 -0
  251. package/src/skills/specweave-detector/test-cases/test-2-missing-config.yaml +37 -0
  252. package/src/skills/specweave-detector/test-cases/test-3-non-specweave-project.yaml +34 -0
  253. package/src/skills/specweave-jira-mapper/SKILL.md +500 -0
  254. package/src/skills/stripe-integrator/test-cases/test-1-placeholder.yaml +12 -0
  255. package/src/skills/stripe-integrator/test-cases/test-2-placeholder.yaml +12 -0
  256. package/src/skills/stripe-integrator/test-cases/test-3-placeholder.yaml +12 -0
  257. package/src/skills/task-builder/README.md +90 -0
  258. package/src/skills/task-builder/test-cases/test-1-placeholder.yaml +12 -0
  259. package/src/skills/task-builder/test-cases/test-2-placeholder.yaml +12 -0
  260. package/src/skills/task-builder/test-cases/test-3-placeholder.yaml +12 -0
  261. package/src/templates/.env.example +144 -0
  262. package/src/templates/.gitignore.template +81 -0
  263. package/src/templates/CLAUDE.md.template +383 -0
  264. package/src/templates/README.md.template +240 -0
  265. package/src/templates/config.yaml +333 -0
  266. package/src/templates/docs/README.md +124 -0
  267. package/src/templates/docs/adr-template.md +118 -0
  268. package/src/templates/docs/hld-template.md +220 -0
  269. package/src/templates/docs/lld-template.md +580 -0
  270. package/src/templates/docs/prd-template.md +132 -0
  271. package/src/templates/docs/rfc-template.md +229 -0
  272. package/src/templates/docs/runbook-template.md +298 -0
  273. package/src/templates/environments/minimal/.env.production +16 -0
  274. package/src/templates/environments/minimal/README.md +54 -0
  275. package/src/templates/environments/minimal/deploy-production.yml +52 -0
  276. package/src/templates/environments/progressive/.env.qa +28 -0
  277. package/src/templates/environments/progressive/README.md +129 -0
  278. package/src/templates/environments/progressive/deploy-production.yml +93 -0
  279. package/src/templates/environments/progressive/deploy-qa.yml +62 -0
  280. package/src/templates/environments/progressive/deploy-staging.yml +67 -0
  281. package/src/templates/environments/standard/.env.development +20 -0
  282. package/src/templates/environments/standard/.env.production +30 -0
  283. package/src/templates/environments/standard/.env.staging +23 -0
  284. package/src/templates/environments/standard/README.md +97 -0
  285. package/src/templates/environments/standard/deploy-production.yml +68 -0
  286. package/src/templates/environments/standard/deploy-staging.yml +61 -0
  287. package/src/templates/environments/standard/docker-compose.yml +43 -0
  288. 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
+ ```