proagents 1.0.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 (444) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +170 -0
  3. package/bin/proagents.js +90 -0
  4. package/lib/commands/feature.js +125 -0
  5. package/lib/commands/fix.js +60 -0
  6. package/lib/commands/help.js +76 -0
  7. package/lib/commands/init.js +64 -0
  8. package/lib/commands/status.js +91 -0
  9. package/lib/index.js +28 -0
  10. package/package.json +52 -0
  11. package/proagents/.learning/global/common-patterns.json +77 -0
  12. package/proagents/.learning/global/user-preferences.json +76 -0
  13. package/proagents/.learning/projects/example-project/corrections.json +99 -0
  14. package/proagents/.learning/projects/example-project/feedback.json +109 -0
  15. package/proagents/.learning/projects/example-project/metrics.json +101 -0
  16. package/proagents/.learning/projects/example-project/patterns.json +102 -0
  17. package/proagents/.learning/schemas/README.md +48 -0
  18. package/proagents/.learning/schemas/corrections-schema.json +100 -0
  19. package/proagents/.learning/schemas/feedback-schema.json +144 -0
  20. package/proagents/.learning/schemas/metrics-schema.json +96 -0
  21. package/proagents/.learning/schemas/patterns-schema.json +82 -0
  22. package/proagents/.learning/schemas/project-patterns-schema.json +125 -0
  23. package/proagents/.learning/schemas/user-preferences-schema.json +136 -0
  24. package/proagents/GETTING-STARTED-STORY.md +708 -0
  25. package/proagents/README.md +99 -0
  26. package/proagents/WORKFLOW.md +1234 -0
  27. package/proagents/active-features/.gitkeep +0 -0
  28. package/proagents/active-features/README.md +176 -0
  29. package/proagents/active-features/_index.json +74 -0
  30. package/proagents/active-features/feature-user-auth/dependencies.json +81 -0
  31. package/proagents/active-features/feature-user-auth/files-modified.json +126 -0
  32. package/proagents/active-features/feature-user-auth/status.json +122 -0
  33. package/proagents/active-features/schemas/dependencies-schema.json +119 -0
  34. package/proagents/active-features/schemas/feature-schema.json +132 -0
  35. package/proagents/active-features/schemas/files-schema.json +100 -0
  36. package/proagents/active-features/schemas/index-schema.json +95 -0
  37. package/proagents/adr/README.md +302 -0
  38. package/proagents/adr/examples/api-versioning.md +297 -0
  39. package/proagents/adr/examples/database-choice.md +264 -0
  40. package/proagents/adr/template.md +273 -0
  41. package/proagents/ai-models/README.md +141 -0
  42. package/proagents/ai-models/cost-management.md +362 -0
  43. package/proagents/ai-models/fallbacks.md +342 -0
  44. package/proagents/ai-models/model-config.md +318 -0
  45. package/proagents/ai-models/task-routing.md +503 -0
  46. package/proagents/ai-training/README.md +155 -0
  47. package/proagents/ai-training/continuous-learning.md +413 -0
  48. package/proagents/ai-training/domain-knowledge.md +378 -0
  49. package/proagents/ai-training/pattern-learning.md +455 -0
  50. package/proagents/ai-training/training-data.md +337 -0
  51. package/proagents/ai-training/user-preferences.md +346 -0
  52. package/proagents/api-versioning/README.md +257 -0
  53. package/proagents/api-versioning/changelog-template.md +225 -0
  54. package/proagents/api-versioning/deprecation-workflow.md +470 -0
  55. package/proagents/api-versioning/versioning-strategy.md +291 -0
  56. package/proagents/approval-workflows/README.md +146 -0
  57. package/proagents/approval-workflows/approval-config.md +332 -0
  58. package/proagents/approval-workflows/approval-stages.md +503 -0
  59. package/proagents/approval-workflows/emergency-bypass.md +351 -0
  60. package/proagents/approval-workflows/examples.md +859 -0
  61. package/proagents/approval-workflows/notifications.md +320 -0
  62. package/proagents/automation/README.md +38 -0
  63. package/proagents/automation/ai-behavior-rules.md +339 -0
  64. package/proagents/automation/ai-prompt-injection.md +331 -0
  65. package/proagents/automation/auto-decisions.md +535 -0
  66. package/proagents/automation/decision-defaults.yaml +317 -0
  67. package/proagents/cache/README.md +110 -0
  68. package/proagents/cache/analysis-metadata.json +76 -0
  69. package/proagents/cache/conventions.json +125 -0
  70. package/proagents/cache/dependencies.json +85 -0
  71. package/proagents/cache/features.json +115 -0
  72. package/proagents/cache/patterns.json +105 -0
  73. package/proagents/cache/schemas/conventions-schema.json +138 -0
  74. package/proagents/cache/schemas/dependencies-schema.json +95 -0
  75. package/proagents/cache/schemas/features-schema.json +104 -0
  76. package/proagents/cache/schemas/metadata-schema.json +83 -0
  77. package/proagents/cache/schemas/patterns-schema.json +136 -0
  78. package/proagents/cache/schemas/structure-schema.json +72 -0
  79. package/proagents/cache/structure.json +109 -0
  80. package/proagents/changelog/2024/01/2024-01-10-api-url-config.md +41 -0
  81. package/proagents/changelog/2024/01/2024-01-12-login-bug-fix.md +69 -0
  82. package/proagents/changelog/2024/01/2024-01-15-user-auth-feature.md +99 -0
  83. package/proagents/changelog/CHANGELOG.md +82 -0
  84. package/proagents/changelog/README.md +327 -0
  85. package/proagents/changelog/entry-template.md +283 -0
  86. package/proagents/checklists/README.md +261 -0
  87. package/proagents/checklists/code-quality.md +137 -0
  88. package/proagents/checklists/code-review.md +148 -0
  89. package/proagents/checklists/pr-checklist.md +78 -0
  90. package/proagents/checklists/pre-deployment.md +132 -0
  91. package/proagents/checklists/pre-implementation.md +80 -0
  92. package/proagents/checklists/testing.md +120 -0
  93. package/proagents/cicd/README.md +338 -0
  94. package/proagents/cicd/azure-devops.md +267 -0
  95. package/proagents/cicd/github-actions.md +375 -0
  96. package/proagents/cicd/gitlab-ci.md +278 -0
  97. package/proagents/cicd/jenkins.md +317 -0
  98. package/proagents/cli/README.md +392 -0
  99. package/proagents/cli/commands-reference.md +893 -0
  100. package/proagents/cli/ide-integration.md +584 -0
  101. package/proagents/cli/shortcuts.md +394 -0
  102. package/proagents/cli/slash-commands.md +507 -0
  103. package/proagents/collaboration/README.md +143 -0
  104. package/proagents/collaboration/roles.md +248 -0
  105. package/proagents/collaboration/sessions.md +390 -0
  106. package/proagents/collaboration/sync.md +358 -0
  107. package/proagents/compliance/README.md +206 -0
  108. package/proagents/compliance/access-control.md +310 -0
  109. package/proagents/compliance/audit-logging.md +444 -0
  110. package/proagents/compliance/compliance-frameworks.md +429 -0
  111. package/proagents/compliance/reports.md +491 -0
  112. package/proagents/compliance/retention-policies.md +454 -0
  113. package/proagents/config/README.md +181 -0
  114. package/proagents/config/integrations/README.md +68 -0
  115. package/proagents/config/integrations/github.yaml +211 -0
  116. package/proagents/config/integrations/jira.yaml +144 -0
  117. package/proagents/config/integrations/linear.yaml +157 -0
  118. package/proagents/config/integrations/notion.yaml +203 -0
  119. package/proagents/config/integrations/slack.yaml +230 -0
  120. package/proagents/config/rules/README.md +73 -0
  121. package/proagents/config/rules/custom-rules.template.yaml +188 -0
  122. package/proagents/config/rules/validation-rules.template.yaml +177 -0
  123. package/proagents/config/standards/README.md +58 -0
  124. package/proagents/config/standards/architecture-rules.template.md +124 -0
  125. package/proagents/config/standards/coding-standards.template.md +107 -0
  126. package/proagents/config/standards/naming-conventions.template.md +114 -0
  127. package/proagents/config/standards/testing-standards.template.md +213 -0
  128. package/proagents/config/templates/README.md +74 -0
  129. package/proagents/config/templates/api-route.template.ts +142 -0
  130. package/proagents/config/templates/component.template.tsx +55 -0
  131. package/proagents/config/templates/hook.template.ts +93 -0
  132. package/proagents/config/templates/test.template.ts +171 -0
  133. package/proagents/config-versioning/README.md +120 -0
  134. package/proagents/config-versioning/changelog.md +300 -0
  135. package/proagents/config-versioning/rollback.md +283 -0
  136. package/proagents/config-versioning/versioning.md +330 -0
  137. package/proagents/contract-testing/README.md +223 -0
  138. package/proagents/contract-testing/contract-testing.md +614 -0
  139. package/proagents/contract-testing/pact-integration.md +507 -0
  140. package/proagents/contract-testing/schema-validation.md +565 -0
  141. package/proagents/cost/README.md +48 -0
  142. package/proagents/cost/cost-template.md +283 -0
  143. package/proagents/cost/estimation-framework.md +287 -0
  144. package/proagents/database/README.md +72 -0
  145. package/proagents/database/examples/001-create-users.sql +129 -0
  146. package/proagents/database/examples/002-add-preferences.sql +94 -0
  147. package/proagents/database/examples/003-add-index.sql +105 -0
  148. package/proagents/database/examples/004-rename-column.sql +122 -0
  149. package/proagents/database/examples/005-add-foreign-key.sql +142 -0
  150. package/proagents/database/examples/006-data-migration.sql +196 -0
  151. package/proagents/database/examples/007-drop-column.sql +163 -0
  152. package/proagents/database/examples/README.md +89 -0
  153. package/proagents/database/migration-workflow.md +478 -0
  154. package/proagents/database/rollback-scripts.md +487 -0
  155. package/proagents/database/safety-checks.md +447 -0
  156. package/proagents/dependency-management/README.md +140 -0
  157. package/proagents/dependency-management/automation.md +363 -0
  158. package/proagents/dependency-management/compatibility.md +319 -0
  159. package/proagents/dependency-management/security-scanning.md +413 -0
  160. package/proagents/dependency-management/update-policies.md +374 -0
  161. package/proagents/disaster-recovery/README.md +247 -0
  162. package/proagents/disaster-recovery/automation.md +366 -0
  163. package/proagents/disaster-recovery/backup-recovery.md +571 -0
  164. package/proagents/disaster-recovery/incident-response.md +565 -0
  165. package/proagents/disaster-recovery/rollback-procedures.md +499 -0
  166. package/proagents/disaster-recovery/runbooks.md +603 -0
  167. package/proagents/disaster-recovery/scenarios.md +892 -0
  168. package/proagents/disaster-recovery/testing.md +438 -0
  169. package/proagents/environments/README.md +244 -0
  170. package/proagents/environments/configuration.md +437 -0
  171. package/proagents/environments/promotion.md +434 -0
  172. package/proagents/environments/setup.md +420 -0
  173. package/proagents/examples/README.md +55 -0
  174. package/proagents/examples/backend-nodejs/README.md +188 -0
  175. package/proagents/examples/backend-nodejs/complete-conversation.md +601 -0
  176. package/proagents/examples/backend-nodejs/proagents.config.yaml +415 -0
  177. package/proagents/examples/backend-nodejs/workflow-example.md +909 -0
  178. package/proagents/examples/fullstack-nextjs/README.md +155 -0
  179. package/proagents/examples/fullstack-nextjs/complete-conversation.md +604 -0
  180. package/proagents/examples/fullstack-nextjs/proagents.config.yaml +287 -0
  181. package/proagents/examples/fullstack-nextjs/workflow-example.md +553 -0
  182. package/proagents/examples/mobile-react-native/README.md +171 -0
  183. package/proagents/examples/mobile-react-native/complete-conversation.md +825 -0
  184. package/proagents/examples/mobile-react-native/proagents.config.yaml +330 -0
  185. package/proagents/examples/mobile-react-native/workflow-example.md +723 -0
  186. package/proagents/examples/web-frontend-react/README.md +125 -0
  187. package/proagents/examples/web-frontend-react/complete-conversation.md +556 -0
  188. package/proagents/examples/web-frontend-react/proagents.config.yaml +183 -0
  189. package/proagents/examples/web-frontend-react/workflow-example.md +603 -0
  190. package/proagents/existing-projects/README.md +65 -0
  191. package/proagents/existing-projects/challenges.md +861 -0
  192. package/proagents/existing-projects/coexistence-mode.md +483 -0
  193. package/proagents/existing-projects/compatibility-assessment.md +541 -0
  194. package/proagents/existing-projects/gradual-adoption.md +515 -0
  195. package/proagents/existing-projects/migration-strategies.md +788 -0
  196. package/proagents/existing-projects/pattern-reconciliation.md +489 -0
  197. package/proagents/existing-projects/team-onboarding.md +617 -0
  198. package/proagents/existing-projects/technical-debt-handling.md +644 -0
  199. package/proagents/feature-flags/README.md +263 -0
  200. package/proagents/feature-flags/ab-testing.md +413 -0
  201. package/proagents/feature-flags/configuration.md +420 -0
  202. package/proagents/feature-flags/kill-switches.md +444 -0
  203. package/proagents/feature-flags/rollout-strategies.md +392 -0
  204. package/proagents/getting-started/README.md +60 -0
  205. package/proagents/getting-started/ai-training-setup.md +380 -0
  206. package/proagents/getting-started/ide-setup.md +195 -0
  207. package/proagents/getting-started/mcp-setup.md +239 -0
  208. package/proagents/getting-started/pm-integration.md +336 -0
  209. package/proagents/getting-started/prompt-engineering.md +478 -0
  210. package/proagents/getting-started/team-onboarding.md +236 -0
  211. package/proagents/git/README.md +68 -0
  212. package/proagents/git/branch-strategy.md +164 -0
  213. package/proagents/git/commit-conventions.md +241 -0
  214. package/proagents/git/pr-workflow.md +286 -0
  215. package/proagents/git/rollback-procedures.md +416 -0
  216. package/proagents/i18n/README.md +133 -0
  217. package/proagents/i18n/extraction.md +433 -0
  218. package/proagents/i18n/tms-integration.md +332 -0
  219. package/proagents/i18n/translation-workflow.md +413 -0
  220. package/proagents/i18n/validation.md +355 -0
  221. package/proagents/ide-integration/README.md +124 -0
  222. package/proagents/ide-integration/cline-config.md +429 -0
  223. package/proagents/ide-integration/continue-config.md +380 -0
  224. package/proagents/ide-integration/cursor-rules.md +280 -0
  225. package/proagents/ide-integration/github-copilot.md +384 -0
  226. package/proagents/ide-integration/windsurf-rules.md +314 -0
  227. package/proagents/integrations/README.md +97 -0
  228. package/proagents/integrations/pm/README.md +344 -0
  229. package/proagents/learning/README.md +136 -0
  230. package/proagents/learning/adaptation.md +305 -0
  231. package/proagents/learning/data-collection.md +283 -0
  232. package/proagents/learning/implementation-guide.md +865 -0
  233. package/proagents/learning/reports.md +306 -0
  234. package/proagents/logging/README.md +276 -0
  235. package/proagents/logging/aggregation.md +475 -0
  236. package/proagents/logging/log-levels.md +376 -0
  237. package/proagents/logging/sensitive-data.md +423 -0
  238. package/proagents/logging/structured-logging.md +406 -0
  239. package/proagents/mcp/README.md +133 -0
  240. package/proagents/mcp/context-providers.md +442 -0
  241. package/proagents/mcp/server-config.md +306 -0
  242. package/proagents/mcp/tools-definition.md +513 -0
  243. package/proagents/metrics/README.md +174 -0
  244. package/proagents/metrics/code-quality-kpis.md +461 -0
  245. package/proagents/metrics/deployment-metrics.md +517 -0
  246. package/proagents/metrics/developer-productivity.md +368 -0
  247. package/proagents/metrics/learning-effectiveness.md +478 -0
  248. package/proagents/migrations/README.md +77 -0
  249. package/proagents/migrations/from-claude-projects.md +312 -0
  250. package/proagents/migrations/from-cursor-rules.md +345 -0
  251. package/proagents/migrations/from-custom-workflows.md +410 -0
  252. package/proagents/monitoring/README.md +308 -0
  253. package/proagents/monitoring/alerting.md +449 -0
  254. package/proagents/monitoring/dashboards.md +454 -0
  255. package/proagents/monitoring/health-checks.md +436 -0
  256. package/proagents/monitoring/metrics.md +434 -0
  257. package/proagents/multi-project/README.md +170 -0
  258. package/proagents/multi-project/coordinated-deploy.md +510 -0
  259. package/proagents/multi-project/cross-project-deps.md +395 -0
  260. package/proagents/multi-project/unified-changelog.md +477 -0
  261. package/proagents/multi-project/walkthroughs/monorepo-setup.md +787 -0
  262. package/proagents/multi-project/workspace-config.md +408 -0
  263. package/proagents/notifications/README.md +151 -0
  264. package/proagents/notifications/channels.md +457 -0
  265. package/proagents/notifications/preferences.md +415 -0
  266. package/proagents/notifications/routing.md +449 -0
  267. package/proagents/notifications/scheduling.md +425 -0
  268. package/proagents/notifications/templates.md +446 -0
  269. package/proagents/offline-mode/README.md +145 -0
  270. package/proagents/offline-mode/caching.md +344 -0
  271. package/proagents/offline-mode/offline-operations.md +312 -0
  272. package/proagents/offline-mode/queue-specifications.md +679 -0
  273. package/proagents/offline-mode/sync.md +475 -0
  274. package/proagents/parallel-features/README.md +85 -0
  275. package/proagents/parallel-features/conflict-detection.md +226 -0
  276. package/proagents/parallel-features/dependency-management.md +392 -0
  277. package/proagents/parallel-features/merge-coordination.md +506 -0
  278. package/proagents/parallel-features/tracking-system.md +416 -0
  279. package/proagents/patterns/README.md +305 -0
  280. package/proagents/patterns/api-errors.md +453 -0
  281. package/proagents/patterns/async-errors.md +521 -0
  282. package/proagents/patterns/error-types.md +437 -0
  283. package/proagents/patterns/ui-errors.md +595 -0
  284. package/proagents/performance/README.md +59 -0
  285. package/proagents/performance/bundle-analysis.md +375 -0
  286. package/proagents/performance/load-testing.md +563 -0
  287. package/proagents/performance/runtime-metrics.md +489 -0
  288. package/proagents/performance/web-vitals.md +425 -0
  289. package/proagents/plugins/README.md +139 -0
  290. package/proagents/plugins/creating-plugins.md +504 -0
  291. package/proagents/plugins/plugin-api.md +467 -0
  292. package/proagents/plugins/plugin-registry.md +276 -0
  293. package/proagents/pm-integration/README.md +151 -0
  294. package/proagents/pm-integration/asana.md +346 -0
  295. package/proagents/pm-integration/github-issues.md +308 -0
  296. package/proagents/pm-integration/gitlab-issues.md +482 -0
  297. package/proagents/pm-integration/jira.md +364 -0
  298. package/proagents/pm-integration/linear.md +409 -0
  299. package/proagents/pm-integration/notion.md +275 -0
  300. package/proagents/pm-integration/sync-config.md +533 -0
  301. package/proagents/pm-integration/trello.md +159 -0
  302. package/proagents/proagents.config.yaml +213 -0
  303. package/proagents/prompts/00-init-wizard.md +426 -0
  304. package/proagents/prompts/00-init.md +219 -0
  305. package/proagents/prompts/01-analysis.md +244 -0
  306. package/proagents/prompts/02-requirements.md +399 -0
  307. package/proagents/prompts/03-ui-design.md +493 -0
  308. package/proagents/prompts/04-planning.md +505 -0
  309. package/proagents/prompts/05-implementation.md +518 -0
  310. package/proagents/prompts/06-testing.md +620 -0
  311. package/proagents/prompts/06.5-code-review.md +512 -0
  312. package/proagents/prompts/07-documentation.md +673 -0
  313. package/proagents/prompts/08-deployment.md +539 -0
  314. package/proagents/prompts/09-rollback.md +554 -0
  315. package/proagents/prompts/README.md +51 -0
  316. package/proagents/prompts/accessibility/README.md +146 -0
  317. package/proagents/prompts/accessibility/aria.md +276 -0
  318. package/proagents/prompts/accessibility/audit.md +233 -0
  319. package/proagents/prompts/accessibility/keyboard.md +392 -0
  320. package/proagents/prompts/accessibility/wcag.md +189 -0
  321. package/proagents/prompts/debugging/README.md +51 -0
  322. package/proagents/prompts/debugging/error-analysis.md +385 -0
  323. package/proagents/prompts/debugging/performance-debug.md +381 -0
  324. package/proagents/prompts/debugging/systematic.md +270 -0
  325. package/proagents/prompts/performance/README.md +47 -0
  326. package/proagents/prompts/performance/analyze.md +265 -0
  327. package/proagents/prompts/performance/optimize.md +347 -0
  328. package/proagents/prompts/refactoring/README.md +51 -0
  329. package/proagents/prompts/refactoring/architecture.md +531 -0
  330. package/proagents/prompts/refactoring/code-smells.md +174 -0
  331. package/proagents/prompts/refactoring/patterns.md +516 -0
  332. package/proagents/prompts/security-audit/README.md +197 -0
  333. package/proagents/prompts/security-audit/code-review.md +260 -0
  334. package/proagents/prompts/security-audit/vulnerability-scan.md +288 -0
  335. package/proagents/reporting/README.md +158 -0
  336. package/proagents/reporting/dashboards.md +366 -0
  337. package/proagents/reporting/exports.md +524 -0
  338. package/proagents/reporting/quality-metrics.md +385 -0
  339. package/proagents/reporting/templates/README.md +56 -0
  340. package/proagents/reporting/templates/dashboard-config.json +187 -0
  341. package/proagents/reporting/templates/metrics-queries.md +427 -0
  342. package/proagents/reporting/templates/react-dashboard.tsx +544 -0
  343. package/proagents/reporting/templates/widgets.md +451 -0
  344. package/proagents/reporting/velocity-metrics.md +340 -0
  345. package/proagents/reverse-engineering/README.md +151 -0
  346. package/proagents/reverse-engineering/architecture-extraction.md +325 -0
  347. package/proagents/reverse-engineering/code-analysis.md +377 -0
  348. package/proagents/reverse-engineering/dependency-mapping.md +567 -0
  349. package/proagents/reverse-engineering/diagram-generation.md +586 -0
  350. package/proagents/reverse-engineering/documentation-generation.md +468 -0
  351. package/proagents/reverse-engineering/pattern-detection.md +569 -0
  352. package/proagents/reverse-engineering/quality-assessment.md +733 -0
  353. package/proagents/rules/README.md +179 -0
  354. package/proagents/rules/custom-rules-template.yaml +286 -0
  355. package/proagents/rules/custom-rules.md +754 -0
  356. package/proagents/rules/validation-rules-template.yaml +517 -0
  357. package/proagents/runbooks/README.md +219 -0
  358. package/proagents/runbooks/dependency-vulnerability.md +505 -0
  359. package/proagents/runbooks/incident-response.md +451 -0
  360. package/proagents/runbooks/performance-degradation.md +584 -0
  361. package/proagents/runbooks/production-debugging.md +489 -0
  362. package/proagents/scaffolding/README.md +64 -0
  363. package/proagents/scaffolding/nextjs/README.md +578 -0
  364. package/proagents/scaffolding/nextjs/templates/api-route.ts.template +185 -0
  365. package/proagents/scaffolding/nextjs/templates/page.tsx.template +109 -0
  366. package/proagents/scaffolding/nextjs/templates/server-action.ts.template +204 -0
  367. package/proagents/scaffolding/nodejs/README.md +558 -0
  368. package/proagents/scaffolding/nodejs/templates/controller.ts.template +167 -0
  369. package/proagents/scaffolding/nodejs/templates/repository.ts.template +155 -0
  370. package/proagents/scaffolding/nodejs/templates/service.ts.template +207 -0
  371. package/proagents/scaffolding/project-types.md +401 -0
  372. package/proagents/scaffolding/react/README.md +399 -0
  373. package/proagents/scaffolding/react/templates/component.tsx.template +88 -0
  374. package/proagents/scaffolding/react/templates/hook.ts.template +127 -0
  375. package/proagents/scaffolding/react/templates/service.ts.template +155 -0
  376. package/proagents/scaffolding/react/templates/test.tsx.template +149 -0
  377. package/proagents/scaffolding/react-native/README.md +476 -0
  378. package/proagents/scaffolding/react-native/templates/hook.ts.template +226 -0
  379. package/proagents/scaffolding/react-native/templates/screen.tsx.template +247 -0
  380. package/proagents/secrets/README.md +278 -0
  381. package/proagents/secrets/access-control.md +443 -0
  382. package/proagents/secrets/rotation.md +403 -0
  383. package/proagents/secrets/scanning.md +487 -0
  384. package/proagents/secrets/storage.md +394 -0
  385. package/proagents/security/README.md +71 -0
  386. package/proagents/security/owasp-checklist.md +390 -0
  387. package/proagents/security/sast-guide.md +473 -0
  388. package/proagents/security/security-report-template.md +343 -0
  389. package/proagents/security/vulnerability-scanning.md +329 -0
  390. package/proagents/slash-commands.json +161 -0
  391. package/proagents/standards/README.md +120 -0
  392. package/proagents/standards/architecture-patterns.md +728 -0
  393. package/proagents/standards/architecture-rules-template.md +489 -0
  394. package/proagents/standards/coding-standards-template.md +489 -0
  395. package/proagents/standards/examples/README.md +61 -0
  396. package/proagents/standards/examples/nodejs-api.md +560 -0
  397. package/proagents/standards/examples/react-nextjs.md +428 -0
  398. package/proagents/standards/naming-conventions-template.md +526 -0
  399. package/proagents/standards/override-system.md +717 -0
  400. package/proagents/standards/testing-standards-template.md +220 -0
  401. package/proagents/team/README.md +256 -0
  402. package/proagents/team/code-ownership.md +306 -0
  403. package/proagents/team/communication-templates.md +441 -0
  404. package/proagents/team/handoff-protocol.md +380 -0
  405. package/proagents/team/ide-setup/README.md +103 -0
  406. package/proagents/team/ide-setup/cursor.md +276 -0
  407. package/proagents/team/ide-setup/jetbrains.md +330 -0
  408. package/proagents/team/ide-setup/neovim.md +640 -0
  409. package/proagents/team/ide-setup/vscode.md +348 -0
  410. package/proagents/team/onboarding.md +278 -0
  411. package/proagents/templates/README.md +57 -0
  412. package/proagents/templates/code-review-report.md +255 -0
  413. package/proagents/templates/codebase-analysis-report.md +315 -0
  414. package/proagents/templates/deployment-checklist.md +277 -0
  415. package/proagents/templates/feature-requirements.md +142 -0
  416. package/proagents/templates/feature-status.md +231 -0
  417. package/proagents/templates/implementation-plan.md +373 -0
  418. package/proagents/templates/rollback-plan.md +331 -0
  419. package/proagents/templates/test-plan.md +336 -0
  420. package/proagents/templates/ui-specification.md +431 -0
  421. package/proagents/testing-standards/README.md +229 -0
  422. package/proagents/testing-standards/coverage-requirements.md +198 -0
  423. package/proagents/testing-standards/mocking-guidelines.md +478 -0
  424. package/proagents/testing-standards/test-naming.md +485 -0
  425. package/proagents/testing-standards/test-patterns.md +488 -0
  426. package/proagents/troubleshooting/README.md +730 -0
  427. package/proagents/troubleshooting/ai-issues.md +601 -0
  428. package/proagents/troubleshooting/workflow-issues.md +571 -0
  429. package/proagents/ui-integration/README.md +77 -0
  430. package/proagents/ui-integration/figma-guide.md +217 -0
  431. package/proagents/ui-integration/manual-export-guide.md +358 -0
  432. package/proagents/ui-integration/sketch-interpretation.md +471 -0
  433. package/proagents/webhooks/README.md +126 -0
  434. package/proagents/webhooks/endpoints.md +298 -0
  435. package/proagents/webhooks/events.md +316 -0
  436. package/proagents/webhooks/payloads.md +325 -0
  437. package/proagents/webhooks/reliability.md +363 -0
  438. package/proagents/webhooks/security.md +380 -0
  439. package/proagents/workflow-modes/README.md +136 -0
  440. package/proagents/workflow-modes/deferred-tracking.md +405 -0
  441. package/proagents/workflow-modes/entry-modes.md +397 -0
  442. package/proagents/workflow-modes/guardrails.md +405 -0
  443. package/proagents/workflow-modes/mode-detection.md +358 -0
  444. package/proagents/workflow-modes/mode-switching.md +372 -0
@@ -0,0 +1,129 @@
1
+ -- Migration: Create users table
2
+ -- Author: ProAgents
3
+ -- Date: 2024-01-15
4
+ -- Risk Level: Low
5
+ -- Requires Approval: No
6
+ -- Estimated Duration: < 1 second
7
+
8
+ -- Description:
9
+ -- Creates the core users table with essential fields for authentication
10
+ -- and profile information. This is typically one of the first migrations
11
+ -- in a new project.
12
+
13
+ -- ============================================
14
+ -- UP MIGRATION
15
+ -- ============================================
16
+
17
+ -- Create enum for user status
18
+ CREATE TYPE user_status AS ENUM ('active', 'inactive', 'suspended', 'pending');
19
+
20
+ -- Create enum for user role
21
+ CREATE TYPE user_role AS ENUM ('admin', 'developer', 'viewer', 'guest');
22
+
23
+ -- Create users table
24
+ CREATE TABLE users (
25
+ -- Primary key
26
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
27
+
28
+ -- Authentication fields
29
+ email VARCHAR(255) NOT NULL,
30
+ password_hash VARCHAR(255) NOT NULL,
31
+
32
+ -- Profile fields
33
+ first_name VARCHAR(100),
34
+ last_name VARCHAR(100),
35
+ display_name VARCHAR(100),
36
+ avatar_url TEXT,
37
+
38
+ -- Status and role
39
+ status user_status NOT NULL DEFAULT 'pending',
40
+ role user_role NOT NULL DEFAULT 'viewer',
41
+
42
+ -- Email verification
43
+ email_verified BOOLEAN NOT NULL DEFAULT FALSE,
44
+ email_verified_at TIMESTAMP WITH TIME ZONE,
45
+
46
+ -- Timestamps
47
+ created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
48
+ updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
49
+ last_login_at TIMESTAMP WITH TIME ZONE,
50
+
51
+ -- Soft delete
52
+ deleted_at TIMESTAMP WITH TIME ZONE
53
+ );
54
+
55
+ -- Create unique index on email (excluding soft-deleted users)
56
+ CREATE UNIQUE INDEX idx_users_email_unique
57
+ ON users (email)
58
+ WHERE deleted_at IS NULL;
59
+
60
+ -- Create index for common queries
61
+ CREATE INDEX idx_users_status ON users (status) WHERE deleted_at IS NULL;
62
+ CREATE INDEX idx_users_role ON users (role) WHERE deleted_at IS NULL;
63
+ CREATE INDEX idx_users_created_at ON users (created_at);
64
+
65
+ -- Create updated_at trigger function (reusable)
66
+ CREATE OR REPLACE FUNCTION update_updated_at_column()
67
+ RETURNS TRIGGER AS $$
68
+ BEGIN
69
+ NEW.updated_at = NOW();
70
+ RETURN NEW;
71
+ END;
72
+ $$ LANGUAGE plpgsql;
73
+
74
+ -- Apply trigger to users table
75
+ CREATE TRIGGER trigger_users_updated_at
76
+ BEFORE UPDATE ON users
77
+ FOR EACH ROW
78
+ EXECUTE FUNCTION update_updated_at_column();
79
+
80
+ -- Add table comment
81
+ COMMENT ON TABLE users IS 'Core user accounts for authentication and authorization';
82
+
83
+ -- ============================================
84
+ -- DOWN MIGRATION (Rollback)
85
+ -- ============================================
86
+
87
+ -- WARNING: This will delete all user data!
88
+ -- Ensure you have a backup before running rollback.
89
+
90
+ -- Drop trigger
91
+ DROP TRIGGER IF EXISTS trigger_users_updated_at ON users;
92
+
93
+ -- Drop function (only if not used by other tables)
94
+ -- DROP FUNCTION IF EXISTS update_updated_at_column();
95
+
96
+ -- Drop table
97
+ DROP TABLE IF EXISTS users;
98
+
99
+ -- Drop enums
100
+ DROP TYPE IF EXISTS user_role;
101
+ DROP TYPE IF EXISTS user_status;
102
+
103
+ -- ============================================
104
+ -- VERIFICATION
105
+ -- ============================================
106
+
107
+ -- Run these queries to verify the migration succeeded:
108
+
109
+ -- Check table exists
110
+ SELECT EXISTS (
111
+ SELECT FROM information_schema.tables
112
+ WHERE table_name = 'users'
113
+ );
114
+
115
+ -- Check columns
116
+ SELECT column_name, data_type, is_nullable
117
+ FROM information_schema.columns
118
+ WHERE table_name = 'users'
119
+ ORDER BY ordinal_position;
120
+
121
+ -- Check indexes
122
+ SELECT indexname, indexdef
123
+ FROM pg_indexes
124
+ WHERE tablename = 'users';
125
+
126
+ -- Check trigger
127
+ SELECT trigger_name
128
+ FROM information_schema.triggers
129
+ WHERE event_object_table = 'users';
@@ -0,0 +1,94 @@
1
+ -- Migration: Add user preferences column
2
+ -- Author: ProAgents
3
+ -- Date: 2024-01-16
4
+ -- Risk Level: Low
5
+ -- Requires Approval: No
6
+ -- Estimated Duration: < 1 second
7
+
8
+ -- Description:
9
+ -- Adds a JSONB column to store user preferences like theme, language,
10
+ -- notification settings, etc. Using JSONB allows flexible schema-less
11
+ -- storage with indexing capabilities.
12
+
13
+ -- ============================================
14
+ -- UP MIGRATION
15
+ -- ============================================
16
+
17
+ -- Add preferences column with default empty object
18
+ ALTER TABLE users
19
+ ADD COLUMN preferences JSONB NOT NULL DEFAULT '{}'::jsonb;
20
+
21
+ -- Add GIN index for JSONB queries
22
+ -- This enables fast queries like: WHERE preferences @> '{"theme": "dark"}'
23
+ CREATE INDEX idx_users_preferences
24
+ ON users USING GIN (preferences);
25
+
26
+ -- Add specific index for common preference queries
27
+ CREATE INDEX idx_users_preferences_theme
28
+ ON users ((preferences->>'theme'))
29
+ WHERE preferences->>'theme' IS NOT NULL;
30
+
31
+ -- Add column comment
32
+ COMMENT ON COLUMN users.preferences IS 'User preferences stored as JSONB. Keys: theme, language, notifications, timezone, etc.';
33
+
34
+ -- Optionally set default preferences for existing users
35
+ UPDATE users
36
+ SET preferences = jsonb_build_object(
37
+ 'theme', 'light',
38
+ 'language', 'en',
39
+ 'notifications', jsonb_build_object(
40
+ 'email', true,
41
+ 'push', true,
42
+ 'weekly_digest', false
43
+ ),
44
+ 'timezone', 'UTC'
45
+ )
46
+ WHERE preferences = '{}'::jsonb;
47
+
48
+ -- ============================================
49
+ -- DOWN MIGRATION (Rollback)
50
+ -- ============================================
51
+
52
+ -- Drop indexes first
53
+ DROP INDEX IF EXISTS idx_users_preferences_theme;
54
+ DROP INDEX IF EXISTS idx_users_preferences;
55
+
56
+ -- Remove column
57
+ ALTER TABLE users DROP COLUMN IF EXISTS preferences;
58
+
59
+ -- ============================================
60
+ -- VERIFICATION
61
+ -- ============================================
62
+
63
+ -- Check column exists
64
+ SELECT column_name, data_type, column_default
65
+ FROM information_schema.columns
66
+ WHERE table_name = 'users' AND column_name = 'preferences';
67
+
68
+ -- Check indexes exist
69
+ SELECT indexname
70
+ FROM pg_indexes
71
+ WHERE tablename = 'users' AND indexname LIKE '%preferences%';
72
+
73
+ -- Test JSONB query performance
74
+ EXPLAIN ANALYZE
75
+ SELECT id, email, preferences->>'theme' as theme
76
+ FROM users
77
+ WHERE preferences @> '{"theme": "dark"}';
78
+
79
+ -- ============================================
80
+ -- EXAMPLE USAGE
81
+ -- ============================================
82
+
83
+ -- Query users by preference
84
+ -- SELECT * FROM users WHERE preferences->>'theme' = 'dark';
85
+
86
+ -- Update a single preference
87
+ -- UPDATE users
88
+ -- SET preferences = jsonb_set(preferences, '{theme}', '"dark"')
89
+ -- WHERE id = '...';
90
+
91
+ -- Add new preference key
92
+ -- UPDATE users
93
+ -- SET preferences = preferences || '{"sidebar_collapsed": true}'::jsonb
94
+ -- WHERE id = '...';
@@ -0,0 +1,105 @@
1
+ -- Migration: Add performance index on users.email
2
+ -- Author: ProAgents
3
+ -- Date: 2024-01-17
4
+ -- Risk Level: Medium
5
+ -- Requires Approval: Team Lead
6
+ -- Estimated Duration: Depends on table size (1-5 minutes for large tables)
7
+
8
+ -- Description:
9
+ -- Adds a B-tree index on the email column to improve login query performance.
10
+ -- Uses CONCURRENTLY to avoid locking the table during index creation.
11
+ --
12
+ -- IMPORTANT: CONCURRENTLY cannot be used inside a transaction block.
13
+ -- Run this migration outside of a transaction.
14
+
15
+ -- ============================================
16
+ -- PRE-FLIGHT CHECKS
17
+ -- ============================================
18
+
19
+ -- Check table size before creating index
20
+ SELECT
21
+ pg_size_pretty(pg_total_relation_size('users')) as table_size,
22
+ (SELECT count(*) FROM users) as row_count;
23
+
24
+ -- Estimate index creation time (rough)
25
+ -- Rule of thumb: ~1 minute per 10 million rows
26
+
27
+ -- ============================================
28
+ -- UP MIGRATION
29
+ -- ============================================
30
+
31
+ -- Create index concurrently (non-blocking)
32
+ -- NOTE: Cannot run inside transaction
33
+ CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_users_email_lookup
34
+ ON users (LOWER(email))
35
+ WHERE deleted_at IS NULL;
36
+
37
+ -- Create composite index for common queries
38
+ CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_users_status_created
39
+ ON users (status, created_at DESC)
40
+ WHERE deleted_at IS NULL;
41
+
42
+ -- Create partial index for active users only
43
+ CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_users_active
44
+ ON users (last_login_at DESC)
45
+ WHERE status = 'active' AND deleted_at IS NULL;
46
+
47
+ -- ============================================
48
+ -- DOWN MIGRATION (Rollback)
49
+ -- ============================================
50
+
51
+ -- Drop indexes (also use CONCURRENTLY for safety)
52
+ DROP INDEX CONCURRENTLY IF EXISTS idx_users_active;
53
+ DROP INDEX CONCURRENTLY IF EXISTS idx_users_status_created;
54
+ DROP INDEX CONCURRENTLY IF EXISTS idx_users_email_lookup;
55
+
56
+ -- ============================================
57
+ -- VERIFICATION
58
+ -- ============================================
59
+
60
+ -- Check indexes were created
61
+ SELECT
62
+ indexname,
63
+ indexdef,
64
+ pg_size_pretty(pg_relation_size(indexname::regclass)) as index_size
65
+ FROM pg_indexes
66
+ WHERE tablename = 'users'
67
+ ORDER BY indexname;
68
+
69
+ -- Verify index is being used
70
+ EXPLAIN ANALYZE
71
+ SELECT id, email
72
+ FROM users
73
+ WHERE LOWER(email) = 'test@example.com'
74
+ AND deleted_at IS NULL;
75
+
76
+ -- Check for invalid indexes (failed CONCURRENTLY)
77
+ SELECT indexrelid::regclass as index_name, indisvalid
78
+ FROM pg_index
79
+ WHERE NOT indisvalid;
80
+
81
+ -- ============================================
82
+ -- TROUBLESHOOTING
83
+ -- ============================================
84
+
85
+ -- If CONCURRENTLY fails, the index may be in invalid state.
86
+ -- Check and drop invalid indexes:
87
+ --
88
+ -- SELECT indexrelid::regclass
89
+ -- FROM pg_index
90
+ -- WHERE NOT indisvalid;
91
+ --
92
+ -- DROP INDEX CONCURRENTLY idx_users_email_lookup;
93
+ -- Then retry the CREATE INDEX CONCURRENTLY.
94
+
95
+ -- ============================================
96
+ -- PERFORMANCE COMPARISON
97
+ -- ============================================
98
+
99
+ -- Before index (sequential scan):
100
+ -- Seq Scan on users (cost=0.00..1234.00 rows=1 width=36)
101
+ -- Filter: (lower((email)::text) = 'test@example.com'::text)
102
+
103
+ -- After index (index scan):
104
+ -- Index Scan using idx_users_email_lookup on users (cost=0.42..8.44 rows=1 width=36)
105
+ -- Index Cond: (lower((email)::text) = 'test@example.com'::text)
@@ -0,0 +1,122 @@
1
+ -- Migration: Rename column from 'name' to 'display_name'
2
+ -- Author: ProAgents
3
+ -- Date: 2024-01-18
4
+ -- Risk Level: Medium
5
+ -- Requires Approval: Team Lead
6
+ -- Estimated Duration: < 1 second (metadata only)
7
+
8
+ -- Description:
9
+ -- Renames the 'name' column to 'display_name' for clarity.
10
+ -- Column rename is a metadata-only operation in PostgreSQL,
11
+ -- but requires application code updates.
12
+ --
13
+ -- IMPORTANT: Coordinate this migration with application deployment.
14
+ -- Consider using the expand-contract pattern for zero-downtime.
15
+
16
+ -- ============================================
17
+ -- EXPAND-CONTRACT PATTERN (Zero Downtime)
18
+ -- ============================================
19
+
20
+ -- Phase 1: EXPAND - Add new column (this migration)
21
+ -- Phase 2: MIGRATE - Update application to write to both columns
22
+ -- Phase 3: BACKFILL - Copy data from old to new column
23
+ -- Phase 4: CONTRACT - Update application to read from new column only
24
+ -- Phase 5: CLEANUP - Drop old column (separate migration)
25
+
26
+ -- ============================================
27
+ -- UP MIGRATION (Simple approach - requires brief downtime)
28
+ -- ============================================
29
+
30
+ -- Option A: Direct rename (brief lock, simple)
31
+ ALTER TABLE users
32
+ RENAME COLUMN name TO display_name;
33
+
34
+ -- Update any views that reference this column
35
+ -- (Example if you have views)
36
+ -- CREATE OR REPLACE VIEW user_profiles AS
37
+ -- SELECT id, display_name, email FROM users;
38
+
39
+ -- ============================================
40
+ -- UP MIGRATION (Zero-downtime approach)
41
+ -- ============================================
42
+
43
+ -- -- Step 1: Add new column
44
+ -- ALTER TABLE users ADD COLUMN display_name VARCHAR(100);
45
+ --
46
+ -- -- Step 2: Create trigger to sync columns during transition
47
+ -- CREATE OR REPLACE FUNCTION sync_name_columns()
48
+ -- RETURNS TRIGGER AS $$
49
+ -- BEGIN
50
+ -- IF TG_OP = 'INSERT' OR TG_OP = 'UPDATE' THEN
51
+ -- IF NEW.display_name IS NULL AND NEW.name IS NOT NULL THEN
52
+ -- NEW.display_name = NEW.name;
53
+ -- ELSIF NEW.name IS NULL AND NEW.display_name IS NOT NULL THEN
54
+ -- NEW.name = NEW.display_name;
55
+ -- END IF;
56
+ -- END IF;
57
+ -- RETURN NEW;
58
+ -- END;
59
+ -- $$ LANGUAGE plpgsql;
60
+ --
61
+ -- CREATE TRIGGER trigger_sync_name_columns
62
+ -- BEFORE INSERT OR UPDATE ON users
63
+ -- FOR EACH ROW
64
+ -- EXECUTE FUNCTION sync_name_columns();
65
+ --
66
+ -- -- Step 3: Backfill existing data
67
+ -- UPDATE users SET display_name = name WHERE display_name IS NULL;
68
+ --
69
+ -- -- Step 4: After application updated, drop trigger and old column
70
+ -- DROP TRIGGER IF EXISTS trigger_sync_name_columns ON users;
71
+ -- DROP FUNCTION IF EXISTS sync_name_columns();
72
+ -- ALTER TABLE users DROP COLUMN name;
73
+
74
+ -- ============================================
75
+ -- DOWN MIGRATION (Rollback)
76
+ -- ============================================
77
+
78
+ -- Option A: Simple rollback
79
+ ALTER TABLE users
80
+ RENAME COLUMN display_name TO name;
81
+
82
+ -- Option B: Zero-downtime rollback (reverse the expand)
83
+ -- ALTER TABLE users DROP COLUMN display_name;
84
+
85
+ -- ============================================
86
+ -- VERIFICATION
87
+ -- ============================================
88
+
89
+ -- Check column was renamed
90
+ SELECT column_name
91
+ FROM information_schema.columns
92
+ WHERE table_name = 'users'
93
+ AND column_name IN ('name', 'display_name');
94
+
95
+ -- Verify no broken views
96
+ SELECT viewname
97
+ FROM pg_views
98
+ WHERE definition LIKE '%users.name%';
99
+
100
+ -- Check for broken functions/procedures
101
+ SELECT proname
102
+ FROM pg_proc
103
+ WHERE prosrc LIKE '%users.name%';
104
+
105
+ -- ============================================
106
+ -- APPLICATION CODE UPDATES REQUIRED
107
+ -- ============================================
108
+
109
+ -- Before migration:
110
+ -- const user = await db.user.findUnique({ where: { id } });
111
+ -- console.log(user.name);
112
+
113
+ -- After migration:
114
+ -- const user = await db.user.findUnique({ where: { id } });
115
+ -- console.log(user.display_name); // Updated field name
116
+
117
+ -- ORM model update (Prisma example):
118
+ -- model User {
119
+ -- id String @id @default(uuid())
120
+ -- display_name String? @map("display_name") // Updated from "name"
121
+ -- email String @unique
122
+ -- }
@@ -0,0 +1,142 @@
1
+ -- Migration: Add foreign key relationship (users -> teams)
2
+ -- Author: ProAgents
3
+ -- Date: 2024-01-19
4
+ -- Risk Level: Medium
5
+ -- Requires Approval: Team Lead
6
+ -- Estimated Duration: Depends on table size
7
+
8
+ -- Description:
9
+ -- Adds a team_id foreign key to the users table, establishing a
10
+ -- many-to-one relationship between users and teams.
11
+ --
12
+ -- IMPORTANT: Existing users will have NULL team_id unless backfilled.
13
+
14
+ -- ============================================
15
+ -- PRE-FLIGHT CHECKS
16
+ -- ============================================
17
+
18
+ -- Ensure teams table exists
19
+ SELECT EXISTS (
20
+ SELECT FROM information_schema.tables
21
+ WHERE table_name = 'teams'
22
+ );
23
+
24
+ -- Check for orphan data that would violate constraint
25
+ -- (Run this BEFORE adding constraint)
26
+ SELECT COUNT(*) as orphan_count
27
+ FROM users u
28
+ WHERE u.team_id IS NOT NULL
29
+ AND NOT EXISTS (SELECT 1 FROM teams t WHERE t.id = u.team_id);
30
+
31
+ -- ============================================
32
+ -- UP MIGRATION
33
+ -- ============================================
34
+
35
+ -- Step 1: Add the column (nullable first for safety)
36
+ ALTER TABLE users
37
+ ADD COLUMN team_id UUID;
38
+
39
+ -- Step 2: Add index on foreign key column (important for JOIN performance)
40
+ CREATE INDEX CONCURRENTLY idx_users_team_id
41
+ ON users (team_id)
42
+ WHERE team_id IS NOT NULL;
43
+
44
+ -- Step 3: Add foreign key constraint
45
+ -- Using NOT VALID first to avoid full table scan
46
+ ALTER TABLE users
47
+ ADD CONSTRAINT fk_users_team
48
+ FOREIGN KEY (team_id)
49
+ REFERENCES teams(id)
50
+ ON DELETE SET NULL -- When team deleted, set user's team_id to NULL
51
+ ON UPDATE CASCADE -- When team id changes, update users
52
+ NOT VALID; -- Don't validate existing rows yet
53
+
54
+ -- Step 4: Validate the constraint (can be done later, non-blocking)
55
+ ALTER TABLE users
56
+ VALIDATE CONSTRAINT fk_users_team;
57
+
58
+ -- Add column comment
59
+ COMMENT ON COLUMN users.team_id IS 'Reference to the team this user belongs to';
60
+
61
+ -- ============================================
62
+ -- ALTERNATIVE: Strict relationship (required team)
63
+ -- ============================================
64
+
65
+ -- If team_id should be required:
66
+ --
67
+ -- Step 1: Create default team
68
+ -- INSERT INTO teams (id, name) VALUES ('00000000-0000-0000-0000-000000000000', 'Default');
69
+ --
70
+ -- Step 2: Add column with default
71
+ -- ALTER TABLE users
72
+ -- ADD COLUMN team_id UUID NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000';
73
+ --
74
+ -- Step 3: Add foreign key with RESTRICT
75
+ -- ALTER TABLE users
76
+ -- ADD CONSTRAINT fk_users_team
77
+ -- FOREIGN KEY (team_id)
78
+ -- REFERENCES teams(id)
79
+ -- ON DELETE RESTRICT -- Prevent team deletion if users exist
80
+ -- ON UPDATE CASCADE;
81
+
82
+ -- ============================================
83
+ -- DOWN MIGRATION (Rollback)
84
+ -- ============================================
85
+
86
+ -- Drop constraint first
87
+ ALTER TABLE users
88
+ DROP CONSTRAINT IF EXISTS fk_users_team;
89
+
90
+ -- Drop index
91
+ DROP INDEX CONCURRENTLY IF EXISTS idx_users_team_id;
92
+
93
+ -- Drop column
94
+ ALTER TABLE users
95
+ DROP COLUMN IF EXISTS team_id;
96
+
97
+ -- ============================================
98
+ -- VERIFICATION
99
+ -- ============================================
100
+
101
+ -- Check constraint exists
102
+ SELECT constraint_name, constraint_type
103
+ FROM information_schema.table_constraints
104
+ WHERE table_name = 'users'
105
+ AND constraint_name = 'fk_users_team';
106
+
107
+ -- Check foreign key details
108
+ SELECT
109
+ kcu.column_name,
110
+ ccu.table_name AS foreign_table_name,
111
+ ccu.column_name AS foreign_column_name,
112
+ rc.delete_rule,
113
+ rc.update_rule
114
+ FROM information_schema.key_column_usage kcu
115
+ JOIN information_schema.constraint_column_usage ccu
116
+ ON kcu.constraint_name = ccu.constraint_name
117
+ JOIN information_schema.referential_constraints rc
118
+ ON kcu.constraint_name = rc.constraint_name
119
+ WHERE kcu.table_name = 'users'
120
+ AND kcu.constraint_name = 'fk_users_team';
121
+
122
+ -- Test constraint enforcement
123
+ -- This should fail:
124
+ -- INSERT INTO users (email, password_hash, team_id)
125
+ -- VALUES ('test@example.com', 'hash', '00000000-0000-0000-0000-000000000001');
126
+ -- Error: insert or update on table "users" violates foreign key constraint
127
+
128
+ -- ============================================
129
+ -- BACKFILL EXISTING USERS
130
+ -- ============================================
131
+
132
+ -- Option 1: Assign all existing users to a default team
133
+ -- UPDATE users
134
+ -- SET team_id = (SELECT id FROM teams WHERE name = 'Default' LIMIT 1)
135
+ -- WHERE team_id IS NULL;
136
+
137
+ -- Option 2: Assign users based on email domain
138
+ -- UPDATE users
139
+ -- SET team_id = t.id
140
+ -- FROM teams t
141
+ -- WHERE users.email LIKE '%@' || t.domain
142
+ -- AND users.team_id IS NULL;