aios-core 2.1.6 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.aios-core/core/README.md +229 -229
- package/.aios-core/core/data/agent-config-requirements.yaml +368 -368
- package/.aios-core/core/data/aios-kb.md +923 -923
- package/.aios-core/core/data/workflow-patterns.yaml +267 -267
- package/.aios-core/core/docs/SHARD-TRANSLATION-GUIDE.md +335 -335
- package/.aios-core/core/docs/component-creation-guide.md +457 -457
- package/.aios-core/core/docs/session-update-pattern.md +307 -307
- package/.aios-core/core/docs/template-syntax.md +266 -266
- package/.aios-core/core/docs/troubleshooting-guide.md +624 -624
- package/.aios-core/core/elicitation/elicitation-engine.js +1 -1
- package/.aios-core/core/index.esm.js +42 -42
- package/.aios-core/core/index.js +1 -1
- package/.aios-core/core/migration/migration-config.yaml +83 -83
- package/.aios-core/core/migration/module-mapping.yaml +89 -89
- package/.aios-core/core/quality-gates/layer2-pr-automation.js +1 -1
- package/.aios-core/core/quality-gates/quality-gate-config.yaml +86 -86
- package/.aios-core/core/registry/README.md +179 -179
- package/.aios-core/core/utils/security-utils.js +1 -1
- package/.aios-core/core-config.yaml +391 -382
- package/.aios-core/data/agent-config-requirements.yaml +368 -368
- package/.aios-core/data/aios-kb.md +923 -923
- package/.aios-core/data/technical-preferences.md +3 -3
- package/.aios-core/data/workflow-patterns.yaml +267 -267
- package/.aios-core/development/README.md +142 -142
- package/.aios-core/development/agent-teams/team-all.yaml +15 -15
- package/.aios-core/development/agent-teams/team-fullstack.yaml +18 -18
- package/.aios-core/development/agent-teams/team-ide-minimal.yaml +10 -10
- package/.aios-core/development/agent-teams/team-no-ui.yaml +13 -13
- package/.aios-core/development/agent-teams/team-qa-focused.yaml +155 -155
- package/.aios-core/development/agents/aios-master.md +339 -339
- package/.aios-core/development/agents/analyst.md +195 -195
- package/.aios-core/development/agents/architect.md +359 -359
- package/.aios-core/development/agents/data-engineer.md +468 -468
- package/.aios-core/development/agents/dev.md +390 -390
- package/.aios-core/development/agents/devops.md +398 -398
- package/.aios-core/development/agents/pm.md +198 -198
- package/.aios-core/development/agents/po.md +256 -256
- package/.aios-core/development/agents/qa.md +312 -312
- package/.aios-core/development/agents/sm.md +220 -220
- package/.aios-core/development/agents/ux-design-expert.md +451 -451
- package/.aios-core/development/scripts/greeting-config-cli.js +85 -85
- package/.aios-core/development/tasks/add-mcp.md +319 -319
- package/.aios-core/development/tasks/advanced-elicitation.md +318 -318
- package/.aios-core/development/tasks/analyst-facilitate-brainstorming.md +341 -341
- package/.aios-core/development/tasks/analyze-framework.md +696 -696
- package/.aios-core/development/tasks/analyze-performance.md +637 -637
- package/.aios-core/development/tasks/apply-qa-fixes.md +340 -340
- package/.aios-core/development/tasks/architect-analyze-impact.md +826 -826
- package/.aios-core/development/tasks/audit-codebase.md +429 -429
- package/.aios-core/development/tasks/audit-tailwind-config.md +270 -270
- package/.aios-core/development/tasks/audit-utilities.md +358 -358
- package/.aios-core/development/tasks/bootstrap-shadcn-library.md +286 -286
- package/.aios-core/development/tasks/brownfield-create-epic.md +485 -485
- package/.aios-core/development/tasks/brownfield-create-story.md +356 -356
- package/.aios-core/development/tasks/build-component.md +478 -478
- package/.aios-core/development/tasks/calculate-roi.md +455 -455
- package/.aios-core/development/tasks/ci-cd-configuration.md +764 -764
- package/.aios-core/development/tasks/cleanup-utilities.md +670 -670
- package/.aios-core/development/tasks/collaborative-edit.md +1108 -1108
- package/.aios-core/development/tasks/compose-molecule.md +284 -284
- package/.aios-core/development/tasks/consolidate-patterns.md +414 -414
- package/.aios-core/development/tasks/correct-course.md +279 -279
- package/.aios-core/development/tasks/create-agent.md +321 -321
- package/.aios-core/development/tasks/create-brownfield-story.md +726 -726
- package/.aios-core/development/tasks/create-deep-research-prompt.md +498 -498
- package/.aios-core/development/tasks/create-doc.md +316 -316
- package/.aios-core/development/tasks/create-next-story.md +774 -774
- package/.aios-core/development/tasks/create-suite.md +283 -283
- package/.aios-core/development/tasks/create-task.md +371 -371
- package/.aios-core/development/tasks/create-workflow.md +370 -370
- package/.aios-core/development/tasks/db-analyze-hotpaths.md +572 -572
- package/.aios-core/development/tasks/db-apply-migration.md +381 -381
- package/.aios-core/development/tasks/db-bootstrap.md +642 -642
- package/.aios-core/development/tasks/db-domain-modeling.md +693 -693
- package/.aios-core/development/tasks/db-dry-run.md +293 -293
- package/.aios-core/development/tasks/db-env-check.md +260 -260
- package/.aios-core/development/tasks/db-expansion-pack-integration.md +663 -663
- package/.aios-core/development/tasks/db-explain.md +631 -631
- package/.aios-core/development/tasks/db-impersonate.md +495 -495
- package/.aios-core/development/tasks/db-load-csv.md +593 -593
- package/.aios-core/development/tasks/db-policy-apply.md +653 -653
- package/.aios-core/development/tasks/db-rls-audit.md +411 -411
- package/.aios-core/development/tasks/db-rollback.md +739 -739
- package/.aios-core/development/tasks/db-run-sql.md +613 -613
- package/.aios-core/development/tasks/db-schema-audit.md +1011 -1011
- package/.aios-core/development/tasks/db-seed.md +390 -390
- package/.aios-core/development/tasks/db-smoke-test.md +351 -351
- package/.aios-core/development/tasks/db-snapshot.md +569 -569
- package/.aios-core/development/tasks/db-supabase-setup.md +712 -712
- package/.aios-core/development/tasks/db-verify-order.md +515 -515
- package/.aios-core/development/tasks/deprecate-component.md +956 -956
- package/.aios-core/development/tasks/dev-apply-qa-fixes.md +318 -318
- package/.aios-core/development/tasks/dev-backlog-debt.md +469 -469
- package/.aios-core/development/tasks/dev-develop-story.md +846 -846
- package/.aios-core/development/tasks/dev-improve-code-quality.md +872 -872
- package/.aios-core/development/tasks/dev-optimize-performance.md +1033 -1033
- package/.aios-core/development/tasks/dev-suggest-refactoring.md +870 -870
- package/.aios-core/development/tasks/dev-validate-next-story.md +348 -348
- package/.aios-core/development/tasks/document-project.md +552 -552
- package/.aios-core/development/tasks/environment-bootstrap.md +1311 -1311
- package/.aios-core/development/tasks/execute-checklist.md +301 -301
- package/.aios-core/development/tasks/export-design-tokens-dtcg.md +274 -274
- package/.aios-core/development/tasks/extend-pattern.md +269 -269
- package/.aios-core/development/tasks/extract-tokens.md +467 -467
- package/.aios-core/development/tasks/facilitate-brainstorming-session.md +518 -518
- package/.aios-core/development/tasks/generate-ai-frontend-prompt.md +260 -260
- package/.aios-core/development/tasks/generate-documentation.md +284 -284
- package/.aios-core/development/tasks/generate-migration-strategy.md +522 -522
- package/.aios-core/development/tasks/generate-shock-report.md +501 -501
- package/.aios-core/development/tasks/github-devops-github-pr-automation.md +427 -427
- package/.aios-core/development/tasks/github-devops-pre-push-quality-gate.md +733 -733
- package/.aios-core/development/tasks/github-devops-repository-cleanup.md +374 -374
- package/.aios-core/development/tasks/github-devops-version-management.md +483 -483
- package/.aios-core/development/tasks/improve-self.md +822 -822
- package/.aios-core/development/tasks/index-docs.md +387 -387
- package/.aios-core/development/tasks/init-project-status.md +506 -506
- package/.aios-core/development/tasks/integrate-expansion-pack.md +314 -314
- package/.aios-core/development/tasks/kb-mode-interaction.md +283 -283
- package/.aios-core/development/tasks/learn-patterns.md +900 -900
- package/.aios-core/development/tasks/mcp-workflow.md +437 -437
- package/.aios-core/development/tasks/modify-agent.md +381 -381
- package/.aios-core/development/tasks/modify-task.md +424 -424
- package/.aios-core/development/tasks/modify-workflow.md +465 -465
- package/.aios-core/development/tasks/po-backlog-add.md +370 -370
- package/.aios-core/development/tasks/po-manage-story-backlog.md +523 -523
- package/.aios-core/development/tasks/po-pull-story-from-clickup.md +540 -540
- package/.aios-core/development/tasks/po-pull-story.md +316 -316
- package/.aios-core/development/tasks/po-stories-index.md +351 -351
- package/.aios-core/development/tasks/po-sync-story-to-clickup.md +457 -457
- package/.aios-core/development/tasks/po-sync-story.md +303 -303
- package/.aios-core/development/tasks/pr-automation.md +701 -701
- package/.aios-core/development/tasks/propose-modification.md +842 -842
- package/.aios-core/development/tasks/qa-backlog-add-followup.md +425 -425
- package/.aios-core/development/tasks/qa-gate.md +373 -373
- package/.aios-core/development/tasks/qa-generate-tests.md +1174 -1174
- package/.aios-core/development/tasks/qa-nfr-assess.md +557 -557
- package/.aios-core/development/tasks/qa-review-proposal.md +1157 -1157
- package/.aios-core/development/tasks/qa-review-story.md +682 -682
- package/.aios-core/development/tasks/qa-risk-profile.md +566 -566
- package/.aios-core/development/tasks/qa-run-tests.md +277 -277
- package/.aios-core/development/tasks/qa-test-design.md +387 -387
- package/.aios-core/development/tasks/qa-trace-requirements.md +476 -476
- package/.aios-core/development/tasks/release-management.md +723 -723
- package/.aios-core/development/tasks/security-audit.md +554 -554
- package/.aios-core/development/tasks/security-scan.md +790 -790
- package/.aios-core/development/tasks/setup-database.md +741 -741
- package/.aios-core/development/tasks/setup-design-system.md +462 -462
- package/.aios-core/development/tasks/setup-github.md +874 -874
- package/.aios-core/development/tasks/setup-llm-routing.md +1 -1
- package/.aios-core/development/tasks/setup-mcp-docker.md +584 -584
- package/.aios-core/development/tasks/setup-project-docs.md +1 -1
- package/.aios-core/development/tasks/shard-doc.md +537 -537
- package/.aios-core/development/tasks/sm-create-next-story.md +480 -480
- package/.aios-core/development/tasks/sync-documentation.md +864 -864
- package/.aios-core/development/tasks/tailwind-upgrade.md +294 -294
- package/.aios-core/development/tasks/test-as-user.md +621 -621
- package/.aios-core/development/tasks/test-validation-task.md +171 -171
- package/.aios-core/development/tasks/undo-last.md +346 -346
- package/.aios-core/development/tasks/update-manifest.md +409 -409
- package/.aios-core/development/tasks/ux-create-wireframe.md +617 -617
- package/.aios-core/development/tasks/ux-ds-scan-artifact.md +672 -672
- package/.aios-core/development/tasks/ux-user-research.md +559 -559
- package/.aios-core/development/tasks/validate-next-story.md +422 -422
- package/.aios-core/development/workflows/README.md +83 -83
- package/.aios-core/development/workflows/brownfield-fullstack.yaml +297 -297
- package/.aios-core/development/workflows/brownfield-service.yaml +187 -187
- package/.aios-core/development/workflows/brownfield-ui.yaml +197 -197
- package/.aios-core/development/workflows/greenfield-fullstack.yaml +333 -333
- package/.aios-core/development/workflows/greenfield-service.yaml +206 -206
- package/.aios-core/development/workflows/greenfield-ui.yaml +235 -235
- package/.aios-core/docs/SHARD-TRANSLATION-GUIDE.md +335 -335
- package/.aios-core/docs/component-creation-guide.md +457 -457
- package/.aios-core/docs/session-update-pattern.md +307 -307
- package/.aios-core/docs/standards/AGENT-PERSONALIZATION-STANDARD-V1.md +572 -572
- package/.aios-core/docs/standards/AIOS-COLOR-PALETTE-QUICK-REFERENCE.md +185 -185
- package/.aios-core/docs/standards/AIOS-COLOR-PALETTE-V2.1.md +354 -354
- package/.aios-core/docs/standards/AIOS-FRAMEWORK-MASTER.md +1963 -1963
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1-COMPLETE.md +821 -821
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1-SUMMARY.md +1190 -1190
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1.md +439 -439
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.2-SUMMARY.md +1339 -1339
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO.md +5398 -5398
- package/.aios-core/docs/standards/EXECUTOR-DECISION-TREE.md +697 -697
- package/.aios-core/docs/standards/OPEN-SOURCE-VS-SERVICE-DIFFERENCES.md +511 -511
- package/.aios-core/docs/standards/QUALITY-GATES-SPECIFICATION.md +556 -556
- package/.aios-core/docs/standards/STANDARDS-INDEX.md +210 -210
- package/.aios-core/docs/standards/STORY-TEMPLATE-V2-SPECIFICATION.md +550 -550
- package/.aios-core/docs/standards/TASK-FORMAT-SPECIFICATION-V1.md +1414 -1414
- package/.aios-core/docs/standards/V3-ARCHITECTURAL-DECISIONS.md +523 -523
- package/.aios-core/docs/template-syntax.md +266 -266
- package/.aios-core/docs/troubleshooting-guide.md +624 -624
- package/.aios-core/index.esm.js +15 -15
- package/.aios-core/index.js +1 -1
- package/.aios-core/infrastructure/README.md +126 -126
- package/.aios-core/infrastructure/integrations/pm-adapters/README.md +59 -59
- package/.aios-core/infrastructure/scripts/approval-workflow.js +1 -1
- package/.aios-core/infrastructure/scripts/batch-creator.js +1 -1
- package/.aios-core/infrastructure/scripts/component-generator.js +3 -3
- package/.aios-core/infrastructure/scripts/component-metadata.js +1 -1
- package/.aios-core/infrastructure/scripts/component-search.js +1 -1
- package/.aios-core/infrastructure/scripts/coverage-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/dependency-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/dependency-impact-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/framework-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/improvement-engine.js +1 -1
- package/.aios-core/infrastructure/scripts/llm-routing/install-llm-routing.js +26 -13
- package/.aios-core/infrastructure/scripts/llm-routing/templates/claude-free-tracked.cmd +127 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/claude-free-tracked.sh +108 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/deepseek-proxy.cmd +71 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/deepseek-proxy.sh +65 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/deepseek-usage.cmd +51 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/deepseek-usage.sh +16 -0
- package/.aios-core/infrastructure/scripts/llm-routing/usage-tracker/index.js +549 -0
- package/.aios-core/infrastructure/scripts/modification-risk-assessment.js +1 -1
- package/.aios-core/infrastructure/scripts/performance-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/pm-adapter.js +134 -134
- package/.aios-core/infrastructure/scripts/repository-detector.js +3 -3
- package/.aios-core/infrastructure/scripts/template-engine.js +1 -1
- package/.aios-core/infrastructure/scripts/template-validator.js +1 -1
- package/.aios-core/infrastructure/scripts/test-generator.js +1 -1
- package/.aios-core/infrastructure/scripts/test-quality-assessment.js +1 -1
- package/.aios-core/infrastructure/scripts/transaction-manager.js +1 -1
- package/.aios-core/infrastructure/scripts/usage-analytics.js +1 -1
- package/.aios-core/infrastructure/scripts/visual-impact-generator.js +2 -2
- package/.aios-core/infrastructure/templates/github-workflows/README.md +109 -109
- package/.aios-core/infrastructure/tests/regression-suite-v2.md +621 -621
- package/.aios-core/infrastructure/tools/README.md +222 -222
- package/.aios-core/infrastructure/tools/cli/github-cli.yaml +200 -200
- package/.aios-core/infrastructure/tools/cli/railway-cli.yaml +260 -260
- package/.aios-core/infrastructure/tools/cli/supabase-cli.yaml +224 -224
- package/.aios-core/infrastructure/tools/local/ffmpeg.yaml +261 -261
- package/.aios-core/infrastructure/tools/mcp/21st-dev-magic.yaml +127 -127
- package/.aios-core/infrastructure/tools/mcp/browser.yaml +103 -103
- package/.aios-core/infrastructure/tools/mcp/clickup.yaml +534 -534
- package/.aios-core/infrastructure/tools/mcp/context7.yaml +78 -78
- package/.aios-core/infrastructure/tools/mcp/desktop-commander.yaml +180 -180
- package/.aios-core/infrastructure/tools/mcp/exa.yaml +103 -103
- package/.aios-core/infrastructure/tools/mcp/google-workspace.yaml +930 -930
- package/.aios-core/infrastructure/tools/mcp/n8n.yaml +551 -551
- package/.aios-core/infrastructure/tools/mcp/supabase.yaml +808 -808
- package/.aios-core/install-manifest.yaml +347 -347
- package/.aios-core/product/README.md +56 -56
- package/.aios-core/product/checklists/accessibility-wcag-checklist.md +80 -0
- package/.aios-core/product/checklists/architect-checklist.md +443 -443
- package/.aios-core/product/checklists/change-checklist.md +182 -182
- package/.aios-core/product/checklists/component-quality-checklist.md +74 -0
- package/.aios-core/product/checklists/database-design-checklist.md +119 -119
- package/.aios-core/product/checklists/dba-predeploy-checklist.md +97 -97
- package/.aios-core/product/checklists/dba-rollback-checklist.md +99 -99
- package/.aios-core/product/checklists/migration-readiness-checklist.md +75 -0
- package/.aios-core/product/checklists/pattern-audit-checklist.md +88 -0
- package/.aios-core/product/checklists/pm-checklist.md +375 -375
- package/.aios-core/product/checklists/po-master-checklist.md +441 -441
- package/.aios-core/product/checklists/pre-push-checklist.md +108 -108
- package/.aios-core/product/checklists/release-checklist.md +122 -122
- package/.aios-core/product/checklists/story-dod-checklist.md +101 -101
- package/.aios-core/product/checklists/story-draft-checklist.md +215 -215
- package/.aios-core/product/data/atomic-design-principles.md +108 -0
- package/.aios-core/product/data/brainstorming-techniques.md +36 -36
- package/.aios-core/product/data/consolidation-algorithms.md +142 -0
- package/.aios-core/product/data/database-best-practices.md +182 -0
- package/.aios-core/product/data/design-token-best-practices.md +107 -0
- package/.aios-core/product/data/elicitation-methods.md +134 -134
- package/.aios-core/product/data/integration-patterns.md +207 -0
- package/.aios-core/product/data/migration-safety-guide.md +329 -0
- package/.aios-core/product/data/mode-selection-best-practices.md +471 -471
- package/.aios-core/product/data/postgres-tuning-guide.md +300 -0
- package/.aios-core/product/data/rls-security-patterns.md +333 -0
- package/.aios-core/product/data/roi-calculation-guide.md +142 -0
- package/.aios-core/product/data/supabase-patterns.md +330 -0
- package/.aios-core/product/data/test-levels-framework.md +148 -148
- package/.aios-core/product/data/test-priorities-matrix.md +174 -174
- package/.aios-core/product/data/wcag-compliance-guide.md +267 -0
- package/.aios-core/product/templates/1mcp-config.yaml +225 -225
- package/.aios-core/product/templates/activation-instructions-inline-greeting.yaml +63 -63
- package/.aios-core/product/templates/activation-instructions-template.md +258 -258
- package/.aios-core/product/templates/agent-template.yaml +120 -120
- package/.aios-core/product/templates/architecture-tmpl.yaml +650 -650
- package/.aios-core/product/templates/brainstorming-output-tmpl.yaml +155 -155
- package/.aios-core/product/templates/brownfield-architecture-tmpl.yaml +475 -475
- package/.aios-core/product/templates/brownfield-prd-tmpl.yaml +279 -279
- package/.aios-core/product/templates/changelog-template.md +134 -134
- package/.aios-core/product/templates/command-rationalization-matrix.md +152 -152
- package/.aios-core/product/templates/competitor-analysis-tmpl.yaml +292 -292
- package/.aios-core/product/templates/design-story-tmpl.yaml +587 -587
- package/.aios-core/product/templates/ds-artifact-analysis.md +70 -70
- package/.aios-core/product/templates/front-end-architecture-tmpl.yaml +205 -205
- package/.aios-core/product/templates/front-end-spec-tmpl.yaml +348 -348
- package/.aios-core/product/templates/fullstack-architecture-tmpl.yaml +804 -804
- package/.aios-core/product/templates/github-pr-template.md +67 -67
- package/.aios-core/product/templates/gordon-mcp.yaml +140 -140
- package/.aios-core/product/templates/ide-rules/antigravity-rules.md +115 -115
- package/.aios-core/product/templates/ide-rules/claude-rules.md +221 -221
- package/.aios-core/product/templates/ide-rules/cline-rules.md +84 -84
- package/.aios-core/product/templates/ide-rules/copilot-rules.md +92 -92
- package/.aios-core/product/templates/ide-rules/cursor-rules.md +115 -115
- package/.aios-core/product/templates/ide-rules/gemini-rules.md +85 -85
- package/.aios-core/product/templates/ide-rules/roo-rules.md +86 -86
- package/.aios-core/product/templates/ide-rules/trae-rules.md +104 -104
- package/.aios-core/product/templates/ide-rules/windsurf-rules.md +80 -80
- package/.aios-core/product/templates/index-strategy-tmpl.yaml +53 -53
- package/.aios-core/product/templates/market-research-tmpl.yaml +251 -251
- package/.aios-core/product/templates/mcp-workflow.js +271 -271
- package/.aios-core/product/templates/migration-plan-tmpl.yaml +1022 -1022
- package/.aios-core/product/templates/migration-strategy-tmpl.md +524 -524
- package/.aios-core/product/templates/personalized-agent-template.md +258 -258
- package/.aios-core/product/templates/personalized-checklist-template.md +340 -340
- package/.aios-core/product/templates/personalized-task-template-v2.md +905 -905
- package/.aios-core/product/templates/personalized-task-template.md +344 -344
- package/.aios-core/product/templates/personalized-template-file.yaml +322 -322
- package/.aios-core/product/templates/personalized-workflow-template.yaml +460 -460
- package/.aios-core/product/templates/prd-tmpl.yaml +201 -201
- package/.aios-core/product/templates/project-brief-tmpl.yaml +220 -220
- package/.aios-core/product/templates/qa-gate-tmpl.yaml +240 -240
- package/.aios-core/product/templates/rls-policies-tmpl.yaml +1203 -1203
- package/.aios-core/product/templates/schema-design-tmpl.yaml +428 -428
- package/.aios-core/product/templates/state-persistence-tmpl.yaml +219 -219
- package/.aios-core/product/templates/story-tmpl.yaml +331 -331
- package/.aios-core/product/templates/task-execution-report.md +495 -495
- package/.aios-core/product/templates/task-template.md +122 -122
- package/.aios-core/product/templates/token-exports-tailwind-tmpl.js +395 -395
- package/.aios-core/product/templates/tokens-schema-tmpl.yaml +305 -305
- package/.aios-core/product/templates/workflow-template.yaml +133 -133
- package/.aios-core/scripts/README.md +354 -354
- package/.aios-core/scripts/aios-doc-template.md +325 -325
- package/.aios-core/scripts/elicitation-engine.js +1 -1
- package/.aios-core/scripts/test-template-system.js +1 -1
- package/.aios-core/scripts/workflow-management.md +69 -69
- package/.aios-core/user-guide.md +1413 -1413
- package/.aios-core/working-in-the-brownfield.md +361 -361
- package/LICENSE +1 -1
- package/README.md +702 -703
- package/bin/aios-init-old.js +3 -3
- package/bin/aios-init-v4.js +1 -1
- package/bin/aios-init.backup-v1.1.4.js +1 -1
- package/bin/aios-init.js +3 -3
- package/bin/aios.js +279 -279
- package/bin/utils/install-errors.js +339 -339
- package/bin/utils/install-transaction.js +445 -445
- package/index.d.ts +18 -18
- package/index.esm.js +20 -20
- package/index.js +6 -6
- package/package.json +8 -10
- package/packages/installer/src/config/templates/env-template.js +27 -4
- package/packages/installer/src/detection/detect-project-type.js +81 -81
- package/packages/installer/tests/integration/wizard-detection.test.js +8 -6
- package/packages/installer/tests/unit/env-template.test.js +8 -8
- package/src/config/ide-configs.js +1 -1
- package/src/wizard/feedback.js +2 -2
- package/src/wizard/index.js +1 -1
- package/src/wizard/validation/report-generator.js +1 -1
- package/src/wizard/validation/troubleshooting-system.js +13 -13
- package/.aios-core/infrastructure/scripts/_archived/final-todo-count.js +0 -122
- package/.aios-core/infrastructure/scripts/_archived/fix-yaml-formatting.js +0 -89
- package/.aios-core/infrastructure/scripts/_archived/migration-generator.js +0 -780
- package/.aios-core/infrastructure/scripts/_archived/migration-path-generator.js +0 -950
- package/.aios-core/infrastructure/scripts/_archived/phase2-entrada-saida-errors.js +0 -425
- package/.aios-core/infrastructure/scripts/_archived/phase2-spot-check.js +0 -132
- package/.aios-core/infrastructure/scripts/_archived/phase3-tools-scripts-validation.js +0 -381
- package/.aios-core/infrastructure/scripts/_archived/phase4-metadata-performance.js +0 -203
- package/.aios-core/infrastructure/scripts/_archived/test-yaml-parsing.js +0 -24
- package/.aios-core/infrastructure/scripts/_archived/verify-yaml-fix.js +0 -51
- package/.aios-core/tasks/find-component.md.legacy +0 -391
- package/.aios-core/tasks/generate-commit-message.md.legacy +0 -426
- package/.aios-core/tasks/generate-migration.md.legacy +0 -382
- package/.aios-core/tasks/rollback-modification.md.legacy +0 -307
- package/.aios-core/tasks/update-tests.md.legacy +0 -283
|
@@ -1,693 +1,693 @@
|
|
|
1
|
-
# Task: Domain Modeling Session
|
|
2
|
-
|
|
3
|
-
**Purpose**: Interactive session to model business domain into database schema
|
|
4
|
-
|
|
5
|
-
**Elicit**: true
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Execution Modes
|
|
10
|
-
|
|
11
|
-
**Choose your execution mode:**
|
|
12
|
-
|
|
13
|
-
### 1. YOLO Mode - Fast, Autonomous (0-1 prompts)
|
|
14
|
-
- Autonomous decision making with logging
|
|
15
|
-
- Minimal user interaction
|
|
16
|
-
- **Best for:** Simple, deterministic tasks
|
|
17
|
-
|
|
18
|
-
### 2. Interactive Mode - Balanced, Educational (5-10 prompts) **[DEFAULT]**
|
|
19
|
-
- Explicit decision checkpoints
|
|
20
|
-
- Educational explanations
|
|
21
|
-
- **Best for:** Learning, complex decisions
|
|
22
|
-
|
|
23
|
-
### 3. Pre-Flight Planning - Comprehensive Upfront Planning
|
|
24
|
-
- Task analysis phase (identify all ambiguities)
|
|
25
|
-
- Zero ambiguity execution
|
|
26
|
-
- **Best for:** Ambiguous requirements, critical work
|
|
27
|
-
|
|
28
|
-
**Parameter:** `mode` (optional, default: `interactive`)
|
|
29
|
-
|
|
30
|
-
---
|
|
31
|
-
|
|
32
|
-
## Task Definition (AIOS Task Format V1.0)
|
|
33
|
-
|
|
34
|
-
```yaml
|
|
35
|
-
task: dbDomainModeling()
|
|
36
|
-
responsável: Dara (Sage)
|
|
37
|
-
responsavel_type: Agente
|
|
38
|
-
atomic_layer: Strategy
|
|
39
|
-
|
|
40
|
-
**Entrada:**
|
|
41
|
-
- campo: query
|
|
42
|
-
tipo: string
|
|
43
|
-
origem: User Input
|
|
44
|
-
obrigatório: true
|
|
45
|
-
validação: Valid SQL query
|
|
46
|
-
|
|
47
|
-
- campo: params
|
|
48
|
-
tipo: object
|
|
49
|
-
origem: User Input
|
|
50
|
-
obrigatório: false
|
|
51
|
-
validação: Query parameters
|
|
52
|
-
|
|
53
|
-
- campo: connection
|
|
54
|
-
tipo: object
|
|
55
|
-
origem: config
|
|
56
|
-
obrigatório: true
|
|
57
|
-
validação: Valid PostgreSQL connection via Supabase
|
|
58
|
-
|
|
59
|
-
**Saída:**
|
|
60
|
-
- campo: query_result
|
|
61
|
-
tipo: array
|
|
62
|
-
destino: Memory
|
|
63
|
-
persistido: false
|
|
64
|
-
|
|
65
|
-
- campo: records_affected
|
|
66
|
-
tipo: number
|
|
67
|
-
destino: Return value
|
|
68
|
-
persistido: false
|
|
69
|
-
|
|
70
|
-
- campo: execution_time
|
|
71
|
-
tipo: number
|
|
72
|
-
destino: Memory
|
|
73
|
-
persistido: false
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
---
|
|
77
|
-
|
|
78
|
-
## Pre-Conditions
|
|
79
|
-
|
|
80
|
-
**Purpose:** Validate prerequisites BEFORE task execution (blocking)
|
|
81
|
-
|
|
82
|
-
**Checklist:**
|
|
83
|
-
|
|
84
|
-
```yaml
|
|
85
|
-
pre-conditions:
|
|
86
|
-
- [ ] Database connection established; query syntax valid
|
|
87
|
-
tipo: pre-condition
|
|
88
|
-
blocker: true
|
|
89
|
-
validação: |
|
|
90
|
-
Check database connection established; query syntax valid
|
|
91
|
-
error_message: "Pre-condition failed: Database connection established; query syntax valid"
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
---
|
|
95
|
-
|
|
96
|
-
## Post-Conditions
|
|
97
|
-
|
|
98
|
-
**Purpose:** Validate execution success AFTER task completes
|
|
99
|
-
|
|
100
|
-
**Checklist:**
|
|
101
|
-
|
|
102
|
-
```yaml
|
|
103
|
-
post-conditions:
|
|
104
|
-
- [ ] Query executed; results returned; transaction committed
|
|
105
|
-
tipo: post-condition
|
|
106
|
-
blocker: true
|
|
107
|
-
validação: |
|
|
108
|
-
Verify query executed; results returned; transaction committed
|
|
109
|
-
error_message: "Post-condition failed: Query executed; results returned; transaction committed"
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
---
|
|
113
|
-
|
|
114
|
-
## Acceptance Criteria
|
|
115
|
-
|
|
116
|
-
**Purpose:** Definitive pass/fail criteria for task completion
|
|
117
|
-
|
|
118
|
-
**Checklist:**
|
|
119
|
-
|
|
120
|
-
```yaml
|
|
121
|
-
acceptance-criteria:
|
|
122
|
-
- [ ] Data persisted correctly; constraints respected; no orphaned data
|
|
123
|
-
tipo: acceptance-criterion
|
|
124
|
-
blocker: true
|
|
125
|
-
validação: |
|
|
126
|
-
Assert data persisted correctly; constraints respected; no orphaned data
|
|
127
|
-
error_message: "Acceptance criterion not met: Data persisted correctly; constraints respected; no orphaned data"
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
---
|
|
131
|
-
|
|
132
|
-
## Tools
|
|
133
|
-
|
|
134
|
-
**External/shared resources used by this task:**
|
|
135
|
-
|
|
136
|
-
- **Tool:** neo4j-driver
|
|
137
|
-
- **Purpose:** Neo4j database connection and query execution
|
|
138
|
-
- **Source:** npm: neo4j-driver
|
|
139
|
-
|
|
140
|
-
- **Tool:** query-validator
|
|
141
|
-
- **Purpose:** Cypher query syntax validation
|
|
142
|
-
- **Source:** .aios-core/utils/db-query-validator.js
|
|
143
|
-
|
|
144
|
-
---
|
|
145
|
-
|
|
146
|
-
## Scripts
|
|
147
|
-
|
|
148
|
-
**Agent-specific code for this task:**
|
|
149
|
-
|
|
150
|
-
- **Script:** db-query.js
|
|
151
|
-
- **Purpose:** Execute Neo4j queries with error handling
|
|
152
|
-
- **Language:** JavaScript
|
|
153
|
-
- **Location:** .aios-core/scripts/db-query.js
|
|
154
|
-
|
|
155
|
-
---
|
|
156
|
-
|
|
157
|
-
## Error Handling
|
|
158
|
-
|
|
159
|
-
**Strategy:** retry
|
|
160
|
-
|
|
161
|
-
**Common Errors:**
|
|
162
|
-
|
|
163
|
-
1. **Error:** Connection Failed
|
|
164
|
-
- **Cause:** Unable to connect to Neo4j database
|
|
165
|
-
- **Resolution:** Check connection string, credentials, network
|
|
166
|
-
- **Recovery:** Retry with exponential backoff (max 3 attempts)
|
|
167
|
-
|
|
168
|
-
2. **Error:** Query Syntax Error
|
|
169
|
-
- **Cause:** Invalid Cypher query syntax
|
|
170
|
-
- **Resolution:** Validate query syntax before execution
|
|
171
|
-
- **Recovery:** Return detailed syntax error, suggest fix
|
|
172
|
-
|
|
173
|
-
3. **Error:** Transaction Rollback
|
|
174
|
-
- **Cause:** Query violates constraints or timeout
|
|
175
|
-
- **Resolution:** Review query logic and constraints
|
|
176
|
-
- **Recovery:** Automatic rollback, preserve data integrity
|
|
177
|
-
|
|
178
|
-
---
|
|
179
|
-
|
|
180
|
-
## Performance
|
|
181
|
-
|
|
182
|
-
**Expected Metrics:**
|
|
183
|
-
|
|
184
|
-
```yaml
|
|
185
|
-
duration_expected: 5-20 min (estimated)
|
|
186
|
-
cost_estimated: $0.003-0.015
|
|
187
|
-
token_usage: ~2,000-8,000 tokens
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
**Optimization Notes:**
|
|
191
|
-
- Iterative analysis with depth limits; cache intermediate results; batch similar operations
|
|
192
|
-
|
|
193
|
-
---
|
|
194
|
-
|
|
195
|
-
## Metadata
|
|
196
|
-
|
|
197
|
-
```yaml
|
|
198
|
-
story: N/A
|
|
199
|
-
version: 1.0.0
|
|
200
|
-
dependencies:
|
|
201
|
-
- N/A
|
|
202
|
-
tags:
|
|
203
|
-
- database
|
|
204
|
-
- infrastructure
|
|
205
|
-
updated_at: 2025-11-17
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
---
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
## Overview
|
|
212
|
-
|
|
213
|
-
This task guides you through domain-driven database design, helping you translate business requirements into a well-structured database schema.
|
|
214
|
-
|
|
215
|
-
---
|
|
216
|
-
|
|
217
|
-
## Process
|
|
218
|
-
|
|
219
|
-
### 1. Understand the Domain
|
|
220
|
-
|
|
221
|
-
Ask the user comprehensive questions:
|
|
222
|
-
|
|
223
|
-
```
|
|
224
|
-
Let's model your domain!
|
|
225
|
-
|
|
226
|
-
1. What is the business domain? (e.g., e-commerce, social media, SaaS)
|
|
227
|
-
|
|
228
|
-
2. Who are the main actors? (e.g., users, admins, customers)
|
|
229
|
-
|
|
230
|
-
3. What are the core entities? (e.g., products, orders, posts)
|
|
231
|
-
|
|
232
|
-
4. What are the key relationships? (e.g., users have orders, posts belong to users)
|
|
233
|
-
|
|
234
|
-
5. What are the critical business rules? (e.g., orders cannot be deleted, users must verify email)
|
|
235
|
-
|
|
236
|
-
6. What are the main use cases? (e.g., user creates post, admin approves content)
|
|
237
|
-
|
|
238
|
-
7. What is the expected scale? (e.g., 1K users, 100K orders/month)
|
|
239
|
-
|
|
240
|
-
8. Are there any compliance requirements? (e.g., GDPR, HIPAA)
|
|
241
|
-
```
|
|
242
|
-
|
|
243
|
-
### 2. Identify Core Entities
|
|
244
|
-
|
|
245
|
-
For each entity mentioned, gather details:
|
|
246
|
-
|
|
247
|
-
```
|
|
248
|
-
Entity: {entity_name}
|
|
249
|
-
|
|
250
|
-
1. Description: What is it?
|
|
251
|
-
|
|
252
|
-
2. Attributes: What properties does it have?
|
|
253
|
-
- Required fields?
|
|
254
|
-
- Optional fields?
|
|
255
|
-
- Computed fields?
|
|
256
|
-
|
|
257
|
-
3. Identifier: How is it uniquely identified?
|
|
258
|
-
- UUID (recommended for distributed systems)
|
|
259
|
-
- Serial integer
|
|
260
|
-
- Natural key (email, SKU, etc.)
|
|
261
|
-
|
|
262
|
-
4. Lifecycle: How does it change over time?
|
|
263
|
-
- Immutable (never changes)
|
|
264
|
-
- Mutable (can be updated)
|
|
265
|
-
- Soft-deletable (archived, not deleted)
|
|
266
|
-
|
|
267
|
-
5. Access patterns: How will it be queried?
|
|
268
|
-
- By ID (primary key lookup)
|
|
269
|
-
- By user (filtered by user_id)
|
|
270
|
-
- By date range
|
|
271
|
-
- Full-text search
|
|
272
|
-
- Aggregations
|
|
273
|
-
```
|
|
274
|
-
|
|
275
|
-
### 3. Map Relationships
|
|
276
|
-
|
|
277
|
-
Identify relationships between entities:
|
|
278
|
-
|
|
279
|
-
```
|
|
280
|
-
Relationship Analysis:
|
|
281
|
-
|
|
282
|
-
For each pair of entities, determine:
|
|
283
|
-
|
|
284
|
-
1. Relationship type:
|
|
285
|
-
- One-to-One (1:1)
|
|
286
|
-
- One-to-Many (1:N)
|
|
287
|
-
- Many-to-Many (M:N)
|
|
288
|
-
|
|
289
|
-
2. Ownership:
|
|
290
|
-
- Who owns the relationship?
|
|
291
|
-
- Can it exist independently?
|
|
292
|
-
|
|
293
|
-
3. Cardinality:
|
|
294
|
-
- Optional or required?
|
|
295
|
-
- Min/max constraints?
|
|
296
|
-
|
|
297
|
-
4. Cascade behavior:
|
|
298
|
-
- What happens on delete?
|
|
299
|
-
- What happens on update?
|
|
300
|
-
|
|
301
|
-
Examples:
|
|
302
|
-
- User → Posts (1:N, user owns, CASCADE delete)
|
|
303
|
-
- Post ← Tags (M:N, junction table, no cascade)
|
|
304
|
-
- User → Profile (1:1, user owns, CASCADE delete)
|
|
305
|
-
```
|
|
306
|
-
|
|
307
|
-
### 4. Design Tables
|
|
308
|
-
|
|
309
|
-
For each entity, design the table:
|
|
310
|
-
|
|
311
|
-
```sql
|
|
312
|
-
-- Template for each table
|
|
313
|
-
|
|
314
|
-
CREATE TABLE {entity_name} (
|
|
315
|
-
-- Primary Key
|
|
316
|
-
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
317
|
-
|
|
318
|
-
-- Foreign Keys (relationships)
|
|
319
|
-
{parent}_id UUID REFERENCES {parent}(id) ON DELETE CASCADE,
|
|
320
|
-
|
|
321
|
-
-- Required Attributes
|
|
322
|
-
name TEXT NOT NULL,
|
|
323
|
-
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
324
|
-
|
|
325
|
-
-- Optional Attributes
|
|
326
|
-
description TEXT,
|
|
327
|
-
metadata JSONB DEFAULT '{}'::jsonb,
|
|
328
|
-
|
|
329
|
-
-- Audit Fields
|
|
330
|
-
updated_at TIMESTAMPTZ,
|
|
331
|
-
deleted_at TIMESTAMPTZ, -- For soft deletes
|
|
332
|
-
|
|
333
|
-
-- Constraints
|
|
334
|
-
CONSTRAINT valid_name CHECK (LENGTH(name) > 0),
|
|
335
|
-
CONSTRAINT valid_dates CHECK (created_at <= COALESCE(updated_at, NOW()))
|
|
336
|
-
);
|
|
337
|
-
|
|
338
|
-
-- Indexes (based on access patterns)
|
|
339
|
-
CREATE INDEX idx_{entity}_parent ON {entity}({parent}_id) WHERE deleted_at IS NULL;
|
|
340
|
-
CREATE INDEX idx_{entity}_created ON {entity}(created_at DESC);
|
|
341
|
-
|
|
342
|
-
-- Comments (documentation)
|
|
343
|
-
COMMENT ON TABLE {entity} IS 'Stores {business description}';
|
|
344
|
-
COMMENT ON COLUMN {entity}.metadata IS 'Flexible JSONB field for extensibility';
|
|
345
|
-
```
|
|
346
|
-
|
|
347
|
-
### 5. Handle Many-to-Many Relationships
|
|
348
|
-
|
|
349
|
-
Create junction tables for M:N relationships:
|
|
350
|
-
|
|
351
|
-
```sql
|
|
352
|
-
-- Junction table pattern
|
|
353
|
-
CREATE TABLE {entity1}_{entity2} (
|
|
354
|
-
{entity1}_id UUID NOT NULL REFERENCES {entity1}(id) ON DELETE CASCADE,
|
|
355
|
-
{entity2}_id UUID NOT NULL REFERENCES {entity2}(id) ON DELETE CASCADE,
|
|
356
|
-
|
|
357
|
-
-- Optional attributes (e.g., role, priority)
|
|
358
|
-
role TEXT DEFAULT 'member',
|
|
359
|
-
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
360
|
-
|
|
361
|
-
-- Composite primary key
|
|
362
|
-
PRIMARY KEY ({entity1}_id, {entity2}_id)
|
|
363
|
-
);
|
|
364
|
-
|
|
365
|
-
-- Indexes for both directions
|
|
366
|
-
CREATE INDEX idx_{entity1}_{entity2}_1 ON {entity1}_{entity2}({entity1}_id);
|
|
367
|
-
CREATE INDEX idx_{entity1}_{entity2}_2 ON {entity1}_{entity2}({entity2}_id);
|
|
368
|
-
```
|
|
369
|
-
|
|
370
|
-
### 6. Apply Business Rules
|
|
371
|
-
|
|
372
|
-
Translate business rules into database constraints:
|
|
373
|
-
|
|
374
|
-
```sql
|
|
375
|
-
-- Example business rules
|
|
376
|
-
|
|
377
|
-
-- Rule: Email must be unique
|
|
378
|
-
ALTER TABLE users ADD CONSTRAINT unique_email UNIQUE (email);
|
|
379
|
-
|
|
380
|
-
-- Rule: Orders cannot be negative
|
|
381
|
-
ALTER TABLE orders ADD CONSTRAINT positive_total CHECK (total >= 0);
|
|
382
|
-
|
|
383
|
-
-- Rule: Published posts must have title
|
|
384
|
-
ALTER TABLE posts ADD CONSTRAINT published_has_title
|
|
385
|
-
CHECK (status != 'published' OR (title IS NOT NULL AND LENGTH(title) > 0));
|
|
386
|
-
|
|
387
|
-
-- Rule: Soft-deleted records are read-only
|
|
388
|
-
CREATE OR REPLACE FUNCTION prevent_update_deleted()
|
|
389
|
-
RETURNS TRIGGER AS $$
|
|
390
|
-
BEGIN
|
|
391
|
-
IF OLD.deleted_at IS NOT NULL THEN
|
|
392
|
-
RAISE EXCEPTION 'Cannot update deleted record';
|
|
393
|
-
END IF;
|
|
394
|
-
RETURN NEW;
|
|
395
|
-
END;
|
|
396
|
-
$$ LANGUAGE plpgsql;
|
|
397
|
-
|
|
398
|
-
CREATE TRIGGER trg_prevent_update_deleted
|
|
399
|
-
BEFORE UPDATE ON {table}
|
|
400
|
-
FOR EACH ROW
|
|
401
|
-
EXECUTE FUNCTION prevent_update_deleted();
|
|
402
|
-
```
|
|
403
|
-
|
|
404
|
-
### 7. Design for Access Patterns
|
|
405
|
-
|
|
406
|
-
Create indexes based on how data will be queried:
|
|
407
|
-
|
|
408
|
-
```sql
|
|
409
|
-
-- Pattern 1: User-specific data (multi-tenant)
|
|
410
|
-
CREATE INDEX idx_posts_user ON posts(user_id) WHERE deleted_at IS NULL;
|
|
411
|
-
|
|
412
|
-
-- Pattern 2: Time-based queries
|
|
413
|
-
CREATE INDEX idx_posts_created ON posts(created_at DESC) WHERE deleted_at IS NULL;
|
|
414
|
-
|
|
415
|
-
-- Pattern 3: Status filtering
|
|
416
|
-
CREATE INDEX idx_posts_status ON posts(status, created_at DESC);
|
|
417
|
-
|
|
418
|
-
-- Pattern 4: Full-text search
|
|
419
|
-
CREATE INDEX idx_posts_search ON posts USING gin(to_tsvector('english', title || ' ' || content));
|
|
420
|
-
|
|
421
|
-
-- Pattern 5: JSONB queries
|
|
422
|
-
CREATE INDEX idx_posts_metadata ON posts USING gin(metadata jsonb_path_ops);
|
|
423
|
-
|
|
424
|
-
-- Pattern 6: Composite (multiple filters)
|
|
425
|
-
CREATE INDEX idx_posts_user_status ON posts(user_id, status, created_at DESC);
|
|
426
|
-
```
|
|
427
|
-
|
|
428
|
-
### 8. Add RLS Policies
|
|
429
|
-
|
|
430
|
-
Implement Row Level Security for Supabase:
|
|
431
|
-
|
|
432
|
-
```sql
|
|
433
|
-
-- Enable RLS
|
|
434
|
-
ALTER TABLE {table} ENABLE ROW LEVEL SECURITY;
|
|
435
|
-
|
|
436
|
-
-- Policy: Users see only their own data
|
|
437
|
-
CREATE POLICY "{table}_users_own"
|
|
438
|
-
ON {table}
|
|
439
|
-
FOR ALL
|
|
440
|
-
TO authenticated
|
|
441
|
-
USING (auth.uid() = user_id)
|
|
442
|
-
WITH CHECK (auth.uid() = user_id);
|
|
443
|
-
|
|
444
|
-
-- Policy: Admins see everything
|
|
445
|
-
CREATE POLICY "{table}_admins_all"
|
|
446
|
-
ON {table}
|
|
447
|
-
FOR ALL
|
|
448
|
-
TO authenticated
|
|
449
|
-
USING (
|
|
450
|
-
(auth.jwt() ->> 'role') = 'admin'
|
|
451
|
-
);
|
|
452
|
-
|
|
453
|
-
-- Policy: Public read, authenticated write
|
|
454
|
-
CREATE POLICY "{table}_public_read"
|
|
455
|
-
ON {table}
|
|
456
|
-
FOR SELECT
|
|
457
|
-
TO public
|
|
458
|
-
USING (true);
|
|
459
|
-
|
|
460
|
-
CREATE POLICY "{table}_auth_write"
|
|
461
|
-
ON {table}
|
|
462
|
-
FOR INSERT
|
|
463
|
-
TO authenticated
|
|
464
|
-
WITH CHECK (auth.uid() = user_id);
|
|
465
|
-
```
|
|
466
|
-
|
|
467
|
-
### 9. Generate Schema Document
|
|
468
|
-
|
|
469
|
-
Create schema design document using template:
|
|
470
|
-
|
|
471
|
-
```
|
|
472
|
-
Use template: schema-design-tmpl.yaml
|
|
473
|
-
|
|
474
|
-
Fill in:
|
|
475
|
-
- domain_context
|
|
476
|
-
- entities (all identified entities)
|
|
477
|
-
- relationships (all relationships)
|
|
478
|
-
- access_patterns (from step 7)
|
|
479
|
-
- constraints (from step 6)
|
|
480
|
-
- indexes (from step 7)
|
|
481
|
-
- rls_policies (from step 8)
|
|
482
|
-
```
|
|
483
|
-
|
|
484
|
-
### 10. Generate Migration
|
|
485
|
-
|
|
486
|
-
Create initial migration file:
|
|
487
|
-
|
|
488
|
-
```bash
|
|
489
|
-
TS=$(date +%Y%m%d%H%M%S)
|
|
490
|
-
MIGRATION_FILE="supabase/migrations/${TS}_initial_schema.sql"
|
|
491
|
-
|
|
492
|
-
cat > "$MIGRATION_FILE" << 'EOF'
|
|
493
|
-
-- Initial Schema Migration
|
|
494
|
-
-- Domain: {domain_name}
|
|
495
|
-
-- Generated: {timestamp}
|
|
496
|
-
|
|
497
|
-
BEGIN;
|
|
498
|
-
|
|
499
|
-
-- Create all tables
|
|
500
|
-
{table_definitions}
|
|
501
|
-
|
|
502
|
-
-- Create all indexes
|
|
503
|
-
{index_definitions}
|
|
504
|
-
|
|
505
|
-
-- Create all constraints
|
|
506
|
-
{constraint_definitions}
|
|
507
|
-
|
|
508
|
-
-- Enable RLS and create policies
|
|
509
|
-
{rls_policies}
|
|
510
|
-
|
|
511
|
-
-- Add comments
|
|
512
|
-
{comment_statements}
|
|
513
|
-
|
|
514
|
-
COMMIT;
|
|
515
|
-
EOF
|
|
516
|
-
|
|
517
|
-
echo "✓ Migration created: $MIGRATION_FILE"
|
|
518
|
-
```
|
|
519
|
-
|
|
520
|
-
---
|
|
521
|
-
|
|
522
|
-
## Output
|
|
523
|
-
|
|
524
|
-
Provide comprehensive domain model:
|
|
525
|
-
|
|
526
|
-
```
|
|
527
|
-
✅ DOMAIN MODEL COMPLETE
|
|
528
|
-
|
|
529
|
-
Domain: {domain_name}
|
|
530
|
-
|
|
531
|
-
Entities: {count}
|
|
532
|
-
- {entity1}
|
|
533
|
-
- {entity2}
|
|
534
|
-
...
|
|
535
|
-
|
|
536
|
-
Relationships:
|
|
537
|
-
- {entity1} → {entity2} (1:N)
|
|
538
|
-
- {entity3} ← {entity4} (M:N via junction)
|
|
539
|
-
...
|
|
540
|
-
|
|
541
|
-
Files Generated:
|
|
542
|
-
1. docs/schema-design.yaml - Complete schema documentation
|
|
543
|
-
2. supabase/migrations/{TS}_initial_schema.sql - Migration file
|
|
544
|
-
3. docs/erd.md - Entity relationship diagram (markdown)
|
|
545
|
-
|
|
546
|
-
Next Steps:
|
|
547
|
-
1. Review schema design document
|
|
548
|
-
2. Validate with stakeholders
|
|
549
|
-
3. Run dry-run: *dry-run {migration_file}
|
|
550
|
-
4. Apply migration: *apply-migration {migration_file}
|
|
551
|
-
5. Add seed data if needed: *seed {seed_file}
|
|
552
|
-
```
|
|
553
|
-
|
|
554
|
-
---
|
|
555
|
-
|
|
556
|
-
## Best Practices
|
|
557
|
-
|
|
558
|
-
### 1. Start Simple
|
|
559
|
-
|
|
560
|
-
- Begin with core entities
|
|
561
|
-
- Add complexity incrementally
|
|
562
|
-
- Avoid premature optimization
|
|
563
|
-
|
|
564
|
-
### 2. Use Standard Patterns
|
|
565
|
-
|
|
566
|
-
- id (UUID primary key)
|
|
567
|
-
- created_at, updated_at (timestamps)
|
|
568
|
-
- deleted_at (soft deletes)
|
|
569
|
-
- user_id (ownership)
|
|
570
|
-
|
|
571
|
-
### 3. Document Everything
|
|
572
|
-
|
|
573
|
-
- Table comments
|
|
574
|
-
- Column comments
|
|
575
|
-
- Constraint names that explain purpose
|
|
576
|
-
|
|
577
|
-
### 4. Think About Scale
|
|
578
|
-
|
|
579
|
-
- How will tables grow?
|
|
580
|
-
- What queries will be most common?
|
|
581
|
-
- Where are the hot paths?
|
|
582
|
-
|
|
583
|
-
### 5. Design for Change
|
|
584
|
-
|
|
585
|
-
- Use JSONB for flexible attributes
|
|
586
|
-
- Soft deletes preserve history
|
|
587
|
-
- Migrations are additive when possible
|
|
588
|
-
|
|
589
|
-
### 6. Security First
|
|
590
|
-
|
|
591
|
-
- RLS by default
|
|
592
|
-
- Constraints enforce data integrity
|
|
593
|
-
- Foreign keys prevent orphans
|
|
594
|
-
|
|
595
|
-
---
|
|
596
|
-
|
|
597
|
-
## Common Domain Patterns
|
|
598
|
-
|
|
599
|
-
### 1. Multi-Tenancy
|
|
600
|
-
|
|
601
|
-
```sql
|
|
602
|
-
-- Tenant isolation
|
|
603
|
-
CREATE TABLE organizations (
|
|
604
|
-
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
605
|
-
name TEXT NOT NULL
|
|
606
|
-
);
|
|
607
|
-
|
|
608
|
-
CREATE TABLE users (
|
|
609
|
-
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
610
|
-
organization_id UUID NOT NULL REFERENCES organizations(id),
|
|
611
|
-
email TEXT NOT NULL UNIQUE,
|
|
612
|
-
UNIQUE (organization_id, email)
|
|
613
|
-
);
|
|
614
|
-
|
|
615
|
-
-- RLS for tenant isolation
|
|
616
|
-
CREATE POLICY "org_isolation" ON users
|
|
617
|
-
FOR ALL TO authenticated
|
|
618
|
-
USING (
|
|
619
|
-
organization_id IN (
|
|
620
|
-
SELECT organization_id
|
|
621
|
-
FROM user_organizations
|
|
622
|
-
WHERE user_id = auth.uid()
|
|
623
|
-
)
|
|
624
|
-
);
|
|
625
|
-
```
|
|
626
|
-
|
|
627
|
-
### 2. Audit Trail
|
|
628
|
-
|
|
629
|
-
```sql
|
|
630
|
-
-- Immutable audit log
|
|
631
|
-
CREATE TABLE audit_log (
|
|
632
|
-
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
633
|
-
table_name TEXT NOT NULL,
|
|
634
|
-
record_id UUID NOT NULL,
|
|
635
|
-
operation TEXT NOT NULL, -- INSERT, UPDATE, DELETE
|
|
636
|
-
old_data JSONB,
|
|
637
|
-
new_data JSONB,
|
|
638
|
-
user_id UUID REFERENCES users(id),
|
|
639
|
-
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
640
|
-
);
|
|
641
|
-
|
|
642
|
-
-- Trigger for automatic auditing
|
|
643
|
-
CREATE OR REPLACE FUNCTION audit_trigger()
|
|
644
|
-
RETURNS TRIGGER AS $$
|
|
645
|
-
BEGIN
|
|
646
|
-
INSERT INTO audit_log (table_name, record_id, operation, old_data, new_data, user_id)
|
|
647
|
-
VALUES (
|
|
648
|
-
TG_TABLE_NAME,
|
|
649
|
-
COALESCE(NEW.id, OLD.id),
|
|
650
|
-
TG_OP,
|
|
651
|
-
CASE WHEN TG_OP != 'INSERT' THEN to_jsonb(OLD) END,
|
|
652
|
-
CASE WHEN TG_OP != 'DELETE' THEN to_jsonb(NEW) END,
|
|
653
|
-
auth.uid()
|
|
654
|
-
);
|
|
655
|
-
RETURN COALESCE(NEW, OLD);
|
|
656
|
-
END;
|
|
657
|
-
$$ LANGUAGE plpgsql SECURITY DEFINER;
|
|
658
|
-
```
|
|
659
|
-
|
|
660
|
-
### 3. Hierarchical Data
|
|
661
|
-
|
|
662
|
-
```sql
|
|
663
|
-
-- Adjacency list pattern
|
|
664
|
-
CREATE TABLE categories (
|
|
665
|
-
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
666
|
-
parent_id UUID REFERENCES categories(id),
|
|
667
|
-
name TEXT NOT NULL,
|
|
668
|
-
path TEXT[] -- Materialized path for fast queries
|
|
669
|
-
);
|
|
670
|
-
|
|
671
|
-
-- Update path on insert/update
|
|
672
|
-
CREATE OR REPLACE FUNCTION update_category_path()
|
|
673
|
-
RETURNS TRIGGER AS $$
|
|
674
|
-
BEGIN
|
|
675
|
-
IF NEW.parent_id IS NULL THEN
|
|
676
|
-
NEW.path := ARRAY[NEW.id];
|
|
677
|
-
ELSE
|
|
678
|
-
SELECT path || NEW.id INTO NEW.path
|
|
679
|
-
FROM categories
|
|
680
|
-
WHERE id = NEW.parent_id;
|
|
681
|
-
END IF;
|
|
682
|
-
RETURN NEW;
|
|
683
|
-
END;
|
|
684
|
-
$$ LANGUAGE plpgsql;
|
|
685
|
-
```
|
|
686
|
-
|
|
687
|
-
---
|
|
688
|
-
|
|
689
|
-
## References
|
|
690
|
-
|
|
691
|
-
- [Domain-Driven Design](https://en.wikipedia.org/wiki/Domain-driven_design)
|
|
692
|
-
- [PostgreSQL Data Types](https://www.postgresql.org/docs/current/datatype.html)
|
|
693
|
-
- [Supabase RLS Policies](https://supabase.com/docs/guides/auth/row-level-security)
|
|
1
|
+
# Task: Domain Modeling Session
|
|
2
|
+
|
|
3
|
+
**Purpose**: Interactive session to model business domain into database schema
|
|
4
|
+
|
|
5
|
+
**Elicit**: true
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Execution Modes
|
|
10
|
+
|
|
11
|
+
**Choose your execution mode:**
|
|
12
|
+
|
|
13
|
+
### 1. YOLO Mode - Fast, Autonomous (0-1 prompts)
|
|
14
|
+
- Autonomous decision making with logging
|
|
15
|
+
- Minimal user interaction
|
|
16
|
+
- **Best for:** Simple, deterministic tasks
|
|
17
|
+
|
|
18
|
+
### 2. Interactive Mode - Balanced, Educational (5-10 prompts) **[DEFAULT]**
|
|
19
|
+
- Explicit decision checkpoints
|
|
20
|
+
- Educational explanations
|
|
21
|
+
- **Best for:** Learning, complex decisions
|
|
22
|
+
|
|
23
|
+
### 3. Pre-Flight Planning - Comprehensive Upfront Planning
|
|
24
|
+
- Task analysis phase (identify all ambiguities)
|
|
25
|
+
- Zero ambiguity execution
|
|
26
|
+
- **Best for:** Ambiguous requirements, critical work
|
|
27
|
+
|
|
28
|
+
**Parameter:** `mode` (optional, default: `interactive`)
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Task Definition (AIOS Task Format V1.0)
|
|
33
|
+
|
|
34
|
+
```yaml
|
|
35
|
+
task: dbDomainModeling()
|
|
36
|
+
responsável: Dara (Sage)
|
|
37
|
+
responsavel_type: Agente
|
|
38
|
+
atomic_layer: Strategy
|
|
39
|
+
|
|
40
|
+
**Entrada:**
|
|
41
|
+
- campo: query
|
|
42
|
+
tipo: string
|
|
43
|
+
origem: User Input
|
|
44
|
+
obrigatório: true
|
|
45
|
+
validação: Valid SQL query
|
|
46
|
+
|
|
47
|
+
- campo: params
|
|
48
|
+
tipo: object
|
|
49
|
+
origem: User Input
|
|
50
|
+
obrigatório: false
|
|
51
|
+
validação: Query parameters
|
|
52
|
+
|
|
53
|
+
- campo: connection
|
|
54
|
+
tipo: object
|
|
55
|
+
origem: config
|
|
56
|
+
obrigatório: true
|
|
57
|
+
validação: Valid PostgreSQL connection via Supabase
|
|
58
|
+
|
|
59
|
+
**Saída:**
|
|
60
|
+
- campo: query_result
|
|
61
|
+
tipo: array
|
|
62
|
+
destino: Memory
|
|
63
|
+
persistido: false
|
|
64
|
+
|
|
65
|
+
- campo: records_affected
|
|
66
|
+
tipo: number
|
|
67
|
+
destino: Return value
|
|
68
|
+
persistido: false
|
|
69
|
+
|
|
70
|
+
- campo: execution_time
|
|
71
|
+
tipo: number
|
|
72
|
+
destino: Memory
|
|
73
|
+
persistido: false
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Pre-Conditions
|
|
79
|
+
|
|
80
|
+
**Purpose:** Validate prerequisites BEFORE task execution (blocking)
|
|
81
|
+
|
|
82
|
+
**Checklist:**
|
|
83
|
+
|
|
84
|
+
```yaml
|
|
85
|
+
pre-conditions:
|
|
86
|
+
- [ ] Database connection established; query syntax valid
|
|
87
|
+
tipo: pre-condition
|
|
88
|
+
blocker: true
|
|
89
|
+
validação: |
|
|
90
|
+
Check database connection established; query syntax valid
|
|
91
|
+
error_message: "Pre-condition failed: Database connection established; query syntax valid"
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Post-Conditions
|
|
97
|
+
|
|
98
|
+
**Purpose:** Validate execution success AFTER task completes
|
|
99
|
+
|
|
100
|
+
**Checklist:**
|
|
101
|
+
|
|
102
|
+
```yaml
|
|
103
|
+
post-conditions:
|
|
104
|
+
- [ ] Query executed; results returned; transaction committed
|
|
105
|
+
tipo: post-condition
|
|
106
|
+
blocker: true
|
|
107
|
+
validação: |
|
|
108
|
+
Verify query executed; results returned; transaction committed
|
|
109
|
+
error_message: "Post-condition failed: Query executed; results returned; transaction committed"
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Acceptance Criteria
|
|
115
|
+
|
|
116
|
+
**Purpose:** Definitive pass/fail criteria for task completion
|
|
117
|
+
|
|
118
|
+
**Checklist:**
|
|
119
|
+
|
|
120
|
+
```yaml
|
|
121
|
+
acceptance-criteria:
|
|
122
|
+
- [ ] Data persisted correctly; constraints respected; no orphaned data
|
|
123
|
+
tipo: acceptance-criterion
|
|
124
|
+
blocker: true
|
|
125
|
+
validação: |
|
|
126
|
+
Assert data persisted correctly; constraints respected; no orphaned data
|
|
127
|
+
error_message: "Acceptance criterion not met: Data persisted correctly; constraints respected; no orphaned data"
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## Tools
|
|
133
|
+
|
|
134
|
+
**External/shared resources used by this task:**
|
|
135
|
+
|
|
136
|
+
- **Tool:** neo4j-driver
|
|
137
|
+
- **Purpose:** Neo4j database connection and query execution
|
|
138
|
+
- **Source:** npm: neo4j-driver
|
|
139
|
+
|
|
140
|
+
- **Tool:** query-validator
|
|
141
|
+
- **Purpose:** Cypher query syntax validation
|
|
142
|
+
- **Source:** .aios-core/utils/db-query-validator.js
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Scripts
|
|
147
|
+
|
|
148
|
+
**Agent-specific code for this task:**
|
|
149
|
+
|
|
150
|
+
- **Script:** db-query.js
|
|
151
|
+
- **Purpose:** Execute Neo4j queries with error handling
|
|
152
|
+
- **Language:** JavaScript
|
|
153
|
+
- **Location:** .aios-core/scripts/db-query.js
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## Error Handling
|
|
158
|
+
|
|
159
|
+
**Strategy:** retry
|
|
160
|
+
|
|
161
|
+
**Common Errors:**
|
|
162
|
+
|
|
163
|
+
1. **Error:** Connection Failed
|
|
164
|
+
- **Cause:** Unable to connect to Neo4j database
|
|
165
|
+
- **Resolution:** Check connection string, credentials, network
|
|
166
|
+
- **Recovery:** Retry with exponential backoff (max 3 attempts)
|
|
167
|
+
|
|
168
|
+
2. **Error:** Query Syntax Error
|
|
169
|
+
- **Cause:** Invalid Cypher query syntax
|
|
170
|
+
- **Resolution:** Validate query syntax before execution
|
|
171
|
+
- **Recovery:** Return detailed syntax error, suggest fix
|
|
172
|
+
|
|
173
|
+
3. **Error:** Transaction Rollback
|
|
174
|
+
- **Cause:** Query violates constraints or timeout
|
|
175
|
+
- **Resolution:** Review query logic and constraints
|
|
176
|
+
- **Recovery:** Automatic rollback, preserve data integrity
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## Performance
|
|
181
|
+
|
|
182
|
+
**Expected Metrics:**
|
|
183
|
+
|
|
184
|
+
```yaml
|
|
185
|
+
duration_expected: 5-20 min (estimated)
|
|
186
|
+
cost_estimated: $0.003-0.015
|
|
187
|
+
token_usage: ~2,000-8,000 tokens
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
**Optimization Notes:**
|
|
191
|
+
- Iterative analysis with depth limits; cache intermediate results; batch similar operations
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## Metadata
|
|
196
|
+
|
|
197
|
+
```yaml
|
|
198
|
+
story: N/A
|
|
199
|
+
version: 1.0.0
|
|
200
|
+
dependencies:
|
|
201
|
+
- N/A
|
|
202
|
+
tags:
|
|
203
|
+
- database
|
|
204
|
+
- infrastructure
|
|
205
|
+
updated_at: 2025-11-17
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
## Overview
|
|
212
|
+
|
|
213
|
+
This task guides you through domain-driven database design, helping you translate business requirements into a well-structured database schema.
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## Process
|
|
218
|
+
|
|
219
|
+
### 1. Understand the Domain
|
|
220
|
+
|
|
221
|
+
Ask the user comprehensive questions:
|
|
222
|
+
|
|
223
|
+
```
|
|
224
|
+
Let's model your domain!
|
|
225
|
+
|
|
226
|
+
1. What is the business domain? (e.g., e-commerce, social media, SaaS)
|
|
227
|
+
|
|
228
|
+
2. Who are the main actors? (e.g., users, admins, customers)
|
|
229
|
+
|
|
230
|
+
3. What are the core entities? (e.g., products, orders, posts)
|
|
231
|
+
|
|
232
|
+
4. What are the key relationships? (e.g., users have orders, posts belong to users)
|
|
233
|
+
|
|
234
|
+
5. What are the critical business rules? (e.g., orders cannot be deleted, users must verify email)
|
|
235
|
+
|
|
236
|
+
6. What are the main use cases? (e.g., user creates post, admin approves content)
|
|
237
|
+
|
|
238
|
+
7. What is the expected scale? (e.g., 1K users, 100K orders/month)
|
|
239
|
+
|
|
240
|
+
8. Are there any compliance requirements? (e.g., GDPR, HIPAA)
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
### 2. Identify Core Entities
|
|
244
|
+
|
|
245
|
+
For each entity mentioned, gather details:
|
|
246
|
+
|
|
247
|
+
```
|
|
248
|
+
Entity: {entity_name}
|
|
249
|
+
|
|
250
|
+
1. Description: What is it?
|
|
251
|
+
|
|
252
|
+
2. Attributes: What properties does it have?
|
|
253
|
+
- Required fields?
|
|
254
|
+
- Optional fields?
|
|
255
|
+
- Computed fields?
|
|
256
|
+
|
|
257
|
+
3. Identifier: How is it uniquely identified?
|
|
258
|
+
- UUID (recommended for distributed systems)
|
|
259
|
+
- Serial integer
|
|
260
|
+
- Natural key (email, SKU, etc.)
|
|
261
|
+
|
|
262
|
+
4. Lifecycle: How does it change over time?
|
|
263
|
+
- Immutable (never changes)
|
|
264
|
+
- Mutable (can be updated)
|
|
265
|
+
- Soft-deletable (archived, not deleted)
|
|
266
|
+
|
|
267
|
+
5. Access patterns: How will it be queried?
|
|
268
|
+
- By ID (primary key lookup)
|
|
269
|
+
- By user (filtered by user_id)
|
|
270
|
+
- By date range
|
|
271
|
+
- Full-text search
|
|
272
|
+
- Aggregations
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
### 3. Map Relationships
|
|
276
|
+
|
|
277
|
+
Identify relationships between entities:
|
|
278
|
+
|
|
279
|
+
```
|
|
280
|
+
Relationship Analysis:
|
|
281
|
+
|
|
282
|
+
For each pair of entities, determine:
|
|
283
|
+
|
|
284
|
+
1. Relationship type:
|
|
285
|
+
- One-to-One (1:1)
|
|
286
|
+
- One-to-Many (1:N)
|
|
287
|
+
- Many-to-Many (M:N)
|
|
288
|
+
|
|
289
|
+
2. Ownership:
|
|
290
|
+
- Who owns the relationship?
|
|
291
|
+
- Can it exist independently?
|
|
292
|
+
|
|
293
|
+
3. Cardinality:
|
|
294
|
+
- Optional or required?
|
|
295
|
+
- Min/max constraints?
|
|
296
|
+
|
|
297
|
+
4. Cascade behavior:
|
|
298
|
+
- What happens on delete?
|
|
299
|
+
- What happens on update?
|
|
300
|
+
|
|
301
|
+
Examples:
|
|
302
|
+
- User → Posts (1:N, user owns, CASCADE delete)
|
|
303
|
+
- Post ← Tags (M:N, junction table, no cascade)
|
|
304
|
+
- User → Profile (1:1, user owns, CASCADE delete)
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
### 4. Design Tables
|
|
308
|
+
|
|
309
|
+
For each entity, design the table:
|
|
310
|
+
|
|
311
|
+
```sql
|
|
312
|
+
-- Template for each table
|
|
313
|
+
|
|
314
|
+
CREATE TABLE {entity_name} (
|
|
315
|
+
-- Primary Key
|
|
316
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
317
|
+
|
|
318
|
+
-- Foreign Keys (relationships)
|
|
319
|
+
{parent}_id UUID REFERENCES {parent}(id) ON DELETE CASCADE,
|
|
320
|
+
|
|
321
|
+
-- Required Attributes
|
|
322
|
+
name TEXT NOT NULL,
|
|
323
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
324
|
+
|
|
325
|
+
-- Optional Attributes
|
|
326
|
+
description TEXT,
|
|
327
|
+
metadata JSONB DEFAULT '{}'::jsonb,
|
|
328
|
+
|
|
329
|
+
-- Audit Fields
|
|
330
|
+
updated_at TIMESTAMPTZ,
|
|
331
|
+
deleted_at TIMESTAMPTZ, -- For soft deletes
|
|
332
|
+
|
|
333
|
+
-- Constraints
|
|
334
|
+
CONSTRAINT valid_name CHECK (LENGTH(name) > 0),
|
|
335
|
+
CONSTRAINT valid_dates CHECK (created_at <= COALESCE(updated_at, NOW()))
|
|
336
|
+
);
|
|
337
|
+
|
|
338
|
+
-- Indexes (based on access patterns)
|
|
339
|
+
CREATE INDEX idx_{entity}_parent ON {entity}({parent}_id) WHERE deleted_at IS NULL;
|
|
340
|
+
CREATE INDEX idx_{entity}_created ON {entity}(created_at DESC);
|
|
341
|
+
|
|
342
|
+
-- Comments (documentation)
|
|
343
|
+
COMMENT ON TABLE {entity} IS 'Stores {business description}';
|
|
344
|
+
COMMENT ON COLUMN {entity}.metadata IS 'Flexible JSONB field for extensibility';
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
### 5. Handle Many-to-Many Relationships
|
|
348
|
+
|
|
349
|
+
Create junction tables for M:N relationships:
|
|
350
|
+
|
|
351
|
+
```sql
|
|
352
|
+
-- Junction table pattern
|
|
353
|
+
CREATE TABLE {entity1}_{entity2} (
|
|
354
|
+
{entity1}_id UUID NOT NULL REFERENCES {entity1}(id) ON DELETE CASCADE,
|
|
355
|
+
{entity2}_id UUID NOT NULL REFERENCES {entity2}(id) ON DELETE CASCADE,
|
|
356
|
+
|
|
357
|
+
-- Optional attributes (e.g., role, priority)
|
|
358
|
+
role TEXT DEFAULT 'member',
|
|
359
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
360
|
+
|
|
361
|
+
-- Composite primary key
|
|
362
|
+
PRIMARY KEY ({entity1}_id, {entity2}_id)
|
|
363
|
+
);
|
|
364
|
+
|
|
365
|
+
-- Indexes for both directions
|
|
366
|
+
CREATE INDEX idx_{entity1}_{entity2}_1 ON {entity1}_{entity2}({entity1}_id);
|
|
367
|
+
CREATE INDEX idx_{entity1}_{entity2}_2 ON {entity1}_{entity2}({entity2}_id);
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
### 6. Apply Business Rules
|
|
371
|
+
|
|
372
|
+
Translate business rules into database constraints:
|
|
373
|
+
|
|
374
|
+
```sql
|
|
375
|
+
-- Example business rules
|
|
376
|
+
|
|
377
|
+
-- Rule: Email must be unique
|
|
378
|
+
ALTER TABLE users ADD CONSTRAINT unique_email UNIQUE (email);
|
|
379
|
+
|
|
380
|
+
-- Rule: Orders cannot be negative
|
|
381
|
+
ALTER TABLE orders ADD CONSTRAINT positive_total CHECK (total >= 0);
|
|
382
|
+
|
|
383
|
+
-- Rule: Published posts must have title
|
|
384
|
+
ALTER TABLE posts ADD CONSTRAINT published_has_title
|
|
385
|
+
CHECK (status != 'published' OR (title IS NOT NULL AND LENGTH(title) > 0));
|
|
386
|
+
|
|
387
|
+
-- Rule: Soft-deleted records are read-only
|
|
388
|
+
CREATE OR REPLACE FUNCTION prevent_update_deleted()
|
|
389
|
+
RETURNS TRIGGER AS $$
|
|
390
|
+
BEGIN
|
|
391
|
+
IF OLD.deleted_at IS NOT NULL THEN
|
|
392
|
+
RAISE EXCEPTION 'Cannot update deleted record';
|
|
393
|
+
END IF;
|
|
394
|
+
RETURN NEW;
|
|
395
|
+
END;
|
|
396
|
+
$$ LANGUAGE plpgsql;
|
|
397
|
+
|
|
398
|
+
CREATE TRIGGER trg_prevent_update_deleted
|
|
399
|
+
BEFORE UPDATE ON {table}
|
|
400
|
+
FOR EACH ROW
|
|
401
|
+
EXECUTE FUNCTION prevent_update_deleted();
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
### 7. Design for Access Patterns
|
|
405
|
+
|
|
406
|
+
Create indexes based on how data will be queried:
|
|
407
|
+
|
|
408
|
+
```sql
|
|
409
|
+
-- Pattern 1: User-specific data (multi-tenant)
|
|
410
|
+
CREATE INDEX idx_posts_user ON posts(user_id) WHERE deleted_at IS NULL;
|
|
411
|
+
|
|
412
|
+
-- Pattern 2: Time-based queries
|
|
413
|
+
CREATE INDEX idx_posts_created ON posts(created_at DESC) WHERE deleted_at IS NULL;
|
|
414
|
+
|
|
415
|
+
-- Pattern 3: Status filtering
|
|
416
|
+
CREATE INDEX idx_posts_status ON posts(status, created_at DESC);
|
|
417
|
+
|
|
418
|
+
-- Pattern 4: Full-text search
|
|
419
|
+
CREATE INDEX idx_posts_search ON posts USING gin(to_tsvector('english', title || ' ' || content));
|
|
420
|
+
|
|
421
|
+
-- Pattern 5: JSONB queries
|
|
422
|
+
CREATE INDEX idx_posts_metadata ON posts USING gin(metadata jsonb_path_ops);
|
|
423
|
+
|
|
424
|
+
-- Pattern 6: Composite (multiple filters)
|
|
425
|
+
CREATE INDEX idx_posts_user_status ON posts(user_id, status, created_at DESC);
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
### 8. Add RLS Policies
|
|
429
|
+
|
|
430
|
+
Implement Row Level Security for Supabase:
|
|
431
|
+
|
|
432
|
+
```sql
|
|
433
|
+
-- Enable RLS
|
|
434
|
+
ALTER TABLE {table} ENABLE ROW LEVEL SECURITY;
|
|
435
|
+
|
|
436
|
+
-- Policy: Users see only their own data
|
|
437
|
+
CREATE POLICY "{table}_users_own"
|
|
438
|
+
ON {table}
|
|
439
|
+
FOR ALL
|
|
440
|
+
TO authenticated
|
|
441
|
+
USING (auth.uid() = user_id)
|
|
442
|
+
WITH CHECK (auth.uid() = user_id);
|
|
443
|
+
|
|
444
|
+
-- Policy: Admins see everything
|
|
445
|
+
CREATE POLICY "{table}_admins_all"
|
|
446
|
+
ON {table}
|
|
447
|
+
FOR ALL
|
|
448
|
+
TO authenticated
|
|
449
|
+
USING (
|
|
450
|
+
(auth.jwt() ->> 'role') = 'admin'
|
|
451
|
+
);
|
|
452
|
+
|
|
453
|
+
-- Policy: Public read, authenticated write
|
|
454
|
+
CREATE POLICY "{table}_public_read"
|
|
455
|
+
ON {table}
|
|
456
|
+
FOR SELECT
|
|
457
|
+
TO public
|
|
458
|
+
USING (true);
|
|
459
|
+
|
|
460
|
+
CREATE POLICY "{table}_auth_write"
|
|
461
|
+
ON {table}
|
|
462
|
+
FOR INSERT
|
|
463
|
+
TO authenticated
|
|
464
|
+
WITH CHECK (auth.uid() = user_id);
|
|
465
|
+
```
|
|
466
|
+
|
|
467
|
+
### 9. Generate Schema Document
|
|
468
|
+
|
|
469
|
+
Create schema design document using template:
|
|
470
|
+
|
|
471
|
+
```
|
|
472
|
+
Use template: schema-design-tmpl.yaml
|
|
473
|
+
|
|
474
|
+
Fill in:
|
|
475
|
+
- domain_context
|
|
476
|
+
- entities (all identified entities)
|
|
477
|
+
- relationships (all relationships)
|
|
478
|
+
- access_patterns (from step 7)
|
|
479
|
+
- constraints (from step 6)
|
|
480
|
+
- indexes (from step 7)
|
|
481
|
+
- rls_policies (from step 8)
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
### 10. Generate Migration
|
|
485
|
+
|
|
486
|
+
Create initial migration file:
|
|
487
|
+
|
|
488
|
+
```bash
|
|
489
|
+
TS=$(date +%Y%m%d%H%M%S)
|
|
490
|
+
MIGRATION_FILE="supabase/migrations/${TS}_initial_schema.sql"
|
|
491
|
+
|
|
492
|
+
cat > "$MIGRATION_FILE" << 'EOF'
|
|
493
|
+
-- Initial Schema Migration
|
|
494
|
+
-- Domain: {domain_name}
|
|
495
|
+
-- Generated: {timestamp}
|
|
496
|
+
|
|
497
|
+
BEGIN;
|
|
498
|
+
|
|
499
|
+
-- Create all tables
|
|
500
|
+
{table_definitions}
|
|
501
|
+
|
|
502
|
+
-- Create all indexes
|
|
503
|
+
{index_definitions}
|
|
504
|
+
|
|
505
|
+
-- Create all constraints
|
|
506
|
+
{constraint_definitions}
|
|
507
|
+
|
|
508
|
+
-- Enable RLS and create policies
|
|
509
|
+
{rls_policies}
|
|
510
|
+
|
|
511
|
+
-- Add comments
|
|
512
|
+
{comment_statements}
|
|
513
|
+
|
|
514
|
+
COMMIT;
|
|
515
|
+
EOF
|
|
516
|
+
|
|
517
|
+
echo "✓ Migration created: $MIGRATION_FILE"
|
|
518
|
+
```
|
|
519
|
+
|
|
520
|
+
---
|
|
521
|
+
|
|
522
|
+
## Output
|
|
523
|
+
|
|
524
|
+
Provide comprehensive domain model:
|
|
525
|
+
|
|
526
|
+
```
|
|
527
|
+
✅ DOMAIN MODEL COMPLETE
|
|
528
|
+
|
|
529
|
+
Domain: {domain_name}
|
|
530
|
+
|
|
531
|
+
Entities: {count}
|
|
532
|
+
- {entity1}
|
|
533
|
+
- {entity2}
|
|
534
|
+
...
|
|
535
|
+
|
|
536
|
+
Relationships:
|
|
537
|
+
- {entity1} → {entity2} (1:N)
|
|
538
|
+
- {entity3} ← {entity4} (M:N via junction)
|
|
539
|
+
...
|
|
540
|
+
|
|
541
|
+
Files Generated:
|
|
542
|
+
1. docs/schema-design.yaml - Complete schema documentation
|
|
543
|
+
2. supabase/migrations/{TS}_initial_schema.sql - Migration file
|
|
544
|
+
3. docs/erd.md - Entity relationship diagram (markdown)
|
|
545
|
+
|
|
546
|
+
Next Steps:
|
|
547
|
+
1. Review schema design document
|
|
548
|
+
2. Validate with stakeholders
|
|
549
|
+
3. Run dry-run: *dry-run {migration_file}
|
|
550
|
+
4. Apply migration: *apply-migration {migration_file}
|
|
551
|
+
5. Add seed data if needed: *seed {seed_file}
|
|
552
|
+
```
|
|
553
|
+
|
|
554
|
+
---
|
|
555
|
+
|
|
556
|
+
## Best Practices
|
|
557
|
+
|
|
558
|
+
### 1. Start Simple
|
|
559
|
+
|
|
560
|
+
- Begin with core entities
|
|
561
|
+
- Add complexity incrementally
|
|
562
|
+
- Avoid premature optimization
|
|
563
|
+
|
|
564
|
+
### 2. Use Standard Patterns
|
|
565
|
+
|
|
566
|
+
- id (UUID primary key)
|
|
567
|
+
- created_at, updated_at (timestamps)
|
|
568
|
+
- deleted_at (soft deletes)
|
|
569
|
+
- user_id (ownership)
|
|
570
|
+
|
|
571
|
+
### 3. Document Everything
|
|
572
|
+
|
|
573
|
+
- Table comments
|
|
574
|
+
- Column comments
|
|
575
|
+
- Constraint names that explain purpose
|
|
576
|
+
|
|
577
|
+
### 4. Think About Scale
|
|
578
|
+
|
|
579
|
+
- How will tables grow?
|
|
580
|
+
- What queries will be most common?
|
|
581
|
+
- Where are the hot paths?
|
|
582
|
+
|
|
583
|
+
### 5. Design for Change
|
|
584
|
+
|
|
585
|
+
- Use JSONB for flexible attributes
|
|
586
|
+
- Soft deletes preserve history
|
|
587
|
+
- Migrations are additive when possible
|
|
588
|
+
|
|
589
|
+
### 6. Security First
|
|
590
|
+
|
|
591
|
+
- RLS by default
|
|
592
|
+
- Constraints enforce data integrity
|
|
593
|
+
- Foreign keys prevent orphans
|
|
594
|
+
|
|
595
|
+
---
|
|
596
|
+
|
|
597
|
+
## Common Domain Patterns
|
|
598
|
+
|
|
599
|
+
### 1. Multi-Tenancy
|
|
600
|
+
|
|
601
|
+
```sql
|
|
602
|
+
-- Tenant isolation
|
|
603
|
+
CREATE TABLE organizations (
|
|
604
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
605
|
+
name TEXT NOT NULL
|
|
606
|
+
);
|
|
607
|
+
|
|
608
|
+
CREATE TABLE users (
|
|
609
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
610
|
+
organization_id UUID NOT NULL REFERENCES organizations(id),
|
|
611
|
+
email TEXT NOT NULL UNIQUE,
|
|
612
|
+
UNIQUE (organization_id, email)
|
|
613
|
+
);
|
|
614
|
+
|
|
615
|
+
-- RLS for tenant isolation
|
|
616
|
+
CREATE POLICY "org_isolation" ON users
|
|
617
|
+
FOR ALL TO authenticated
|
|
618
|
+
USING (
|
|
619
|
+
organization_id IN (
|
|
620
|
+
SELECT organization_id
|
|
621
|
+
FROM user_organizations
|
|
622
|
+
WHERE user_id = auth.uid()
|
|
623
|
+
)
|
|
624
|
+
);
|
|
625
|
+
```
|
|
626
|
+
|
|
627
|
+
### 2. Audit Trail
|
|
628
|
+
|
|
629
|
+
```sql
|
|
630
|
+
-- Immutable audit log
|
|
631
|
+
CREATE TABLE audit_log (
|
|
632
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
633
|
+
table_name TEXT NOT NULL,
|
|
634
|
+
record_id UUID NOT NULL,
|
|
635
|
+
operation TEXT NOT NULL, -- INSERT, UPDATE, DELETE
|
|
636
|
+
old_data JSONB,
|
|
637
|
+
new_data JSONB,
|
|
638
|
+
user_id UUID REFERENCES users(id),
|
|
639
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
640
|
+
);
|
|
641
|
+
|
|
642
|
+
-- Trigger for automatic auditing
|
|
643
|
+
CREATE OR REPLACE FUNCTION audit_trigger()
|
|
644
|
+
RETURNS TRIGGER AS $$
|
|
645
|
+
BEGIN
|
|
646
|
+
INSERT INTO audit_log (table_name, record_id, operation, old_data, new_data, user_id)
|
|
647
|
+
VALUES (
|
|
648
|
+
TG_TABLE_NAME,
|
|
649
|
+
COALESCE(NEW.id, OLD.id),
|
|
650
|
+
TG_OP,
|
|
651
|
+
CASE WHEN TG_OP != 'INSERT' THEN to_jsonb(OLD) END,
|
|
652
|
+
CASE WHEN TG_OP != 'DELETE' THEN to_jsonb(NEW) END,
|
|
653
|
+
auth.uid()
|
|
654
|
+
);
|
|
655
|
+
RETURN COALESCE(NEW, OLD);
|
|
656
|
+
END;
|
|
657
|
+
$$ LANGUAGE plpgsql SECURITY DEFINER;
|
|
658
|
+
```
|
|
659
|
+
|
|
660
|
+
### 3. Hierarchical Data
|
|
661
|
+
|
|
662
|
+
```sql
|
|
663
|
+
-- Adjacency list pattern
|
|
664
|
+
CREATE TABLE categories (
|
|
665
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
666
|
+
parent_id UUID REFERENCES categories(id),
|
|
667
|
+
name TEXT NOT NULL,
|
|
668
|
+
path TEXT[] -- Materialized path for fast queries
|
|
669
|
+
);
|
|
670
|
+
|
|
671
|
+
-- Update path on insert/update
|
|
672
|
+
CREATE OR REPLACE FUNCTION update_category_path()
|
|
673
|
+
RETURNS TRIGGER AS $$
|
|
674
|
+
BEGIN
|
|
675
|
+
IF NEW.parent_id IS NULL THEN
|
|
676
|
+
NEW.path := ARRAY[NEW.id];
|
|
677
|
+
ELSE
|
|
678
|
+
SELECT path || NEW.id INTO NEW.path
|
|
679
|
+
FROM categories
|
|
680
|
+
WHERE id = NEW.parent_id;
|
|
681
|
+
END IF;
|
|
682
|
+
RETURN NEW;
|
|
683
|
+
END;
|
|
684
|
+
$$ LANGUAGE plpgsql;
|
|
685
|
+
```
|
|
686
|
+
|
|
687
|
+
---
|
|
688
|
+
|
|
689
|
+
## References
|
|
690
|
+
|
|
691
|
+
- [Domain-Driven Design](https://en.wikipedia.org/wiki/Domain-driven_design)
|
|
692
|
+
- [PostgreSQL Data Types](https://www.postgresql.org/docs/current/datatype.html)
|
|
693
|
+
- [Supabase RLS Policies](https://supabase.com/docs/guides/auth/row-level-security)
|