aios-core 2.1.5 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.aios-core/core/README.md +229 -229
- package/.aios-core/core/data/agent-config-requirements.yaml +368 -368
- package/.aios-core/core/data/aios-kb.md +923 -923
- package/.aios-core/core/data/workflow-patterns.yaml +267 -267
- package/.aios-core/core/docs/SHARD-TRANSLATION-GUIDE.md +335 -335
- package/.aios-core/core/docs/component-creation-guide.md +457 -457
- package/.aios-core/core/docs/session-update-pattern.md +307 -307
- package/.aios-core/core/docs/template-syntax.md +266 -266
- package/.aios-core/core/docs/troubleshooting-guide.md +624 -624
- package/.aios-core/core/elicitation/elicitation-engine.js +1 -1
- package/.aios-core/core/index.esm.js +42 -42
- package/.aios-core/core/index.js +1 -1
- package/.aios-core/core/migration/migration-config.yaml +83 -83
- package/.aios-core/core/migration/module-mapping.yaml +89 -89
- package/.aios-core/core/quality-gates/layer2-pr-automation.js +1 -1
- package/.aios-core/core/quality-gates/quality-gate-config.yaml +86 -86
- package/.aios-core/core/registry/README.md +179 -179
- package/.aios-core/core/utils/security-utils.js +1 -1
- package/.aios-core/core-config.yaml +391 -382
- package/.aios-core/data/agent-config-requirements.yaml +368 -368
- package/.aios-core/data/aios-kb.md +923 -923
- package/.aios-core/data/technical-preferences.md +3 -3
- package/.aios-core/data/workflow-patterns.yaml +267 -267
- package/.aios-core/development/README.md +142 -142
- package/.aios-core/development/agent-teams/team-all.yaml +15 -15
- package/.aios-core/development/agent-teams/team-fullstack.yaml +18 -18
- package/.aios-core/development/agent-teams/team-ide-minimal.yaml +10 -10
- package/.aios-core/development/agent-teams/team-no-ui.yaml +13 -13
- package/.aios-core/development/agent-teams/team-qa-focused.yaml +155 -155
- package/.aios-core/development/agents/aios-master.md +339 -339
- package/.aios-core/development/agents/analyst.md +195 -195
- package/.aios-core/development/agents/architect.md +359 -359
- package/.aios-core/development/agents/data-engineer.md +468 -468
- package/.aios-core/development/agents/dev.md +390 -390
- package/.aios-core/development/agents/devops.md +398 -398
- package/.aios-core/development/agents/pm.md +198 -198
- package/.aios-core/development/agents/po.md +256 -256
- package/.aios-core/development/agents/qa.md +312 -312
- package/.aios-core/development/agents/sm.md +220 -220
- package/.aios-core/development/agents/ux-design-expert.md +451 -451
- package/.aios-core/development/scripts/greeting-config-cli.js +85 -85
- package/.aios-core/development/tasks/add-mcp.md +319 -319
- package/.aios-core/development/tasks/advanced-elicitation.md +318 -318
- package/.aios-core/development/tasks/analyst-facilitate-brainstorming.md +341 -341
- package/.aios-core/development/tasks/analyze-brownfield.md +456 -0
- package/.aios-core/development/tasks/analyze-framework.md +696 -696
- package/.aios-core/development/tasks/analyze-performance.md +637 -637
- package/.aios-core/development/tasks/apply-qa-fixes.md +340 -340
- package/.aios-core/development/tasks/architect-analyze-impact.md +826 -826
- package/.aios-core/development/tasks/audit-codebase.md +429 -429
- package/.aios-core/development/tasks/audit-tailwind-config.md +270 -270
- package/.aios-core/development/tasks/audit-utilities.md +358 -358
- package/.aios-core/development/tasks/bootstrap-shadcn-library.md +286 -286
- package/.aios-core/development/tasks/brownfield-create-epic.md +485 -485
- package/.aios-core/development/tasks/brownfield-create-story.md +356 -356
- package/.aios-core/development/tasks/build-component.md +478 -478
- package/.aios-core/development/tasks/calculate-roi.md +455 -455
- package/.aios-core/development/tasks/ci-cd-configuration.md +764 -764
- package/.aios-core/development/tasks/cleanup-utilities.md +670 -670
- package/.aios-core/development/tasks/collaborative-edit.md +1108 -1108
- package/.aios-core/development/tasks/compose-molecule.md +284 -284
- package/.aios-core/development/tasks/consolidate-patterns.md +414 -414
- package/.aios-core/development/tasks/correct-course.md +279 -279
- package/.aios-core/development/tasks/create-agent.md +321 -321
- package/.aios-core/development/tasks/create-brownfield-story.md +726 -726
- package/.aios-core/development/tasks/create-deep-research-prompt.md +498 -498
- package/.aios-core/development/tasks/create-doc.md +316 -316
- package/.aios-core/development/tasks/create-next-story.md +774 -774
- package/.aios-core/development/tasks/create-suite.md +283 -283
- package/.aios-core/development/tasks/create-task.md +371 -371
- package/.aios-core/development/tasks/create-workflow.md +370 -370
- package/.aios-core/development/tasks/db-analyze-hotpaths.md +572 -572
- package/.aios-core/development/tasks/db-apply-migration.md +381 -381
- package/.aios-core/development/tasks/db-bootstrap.md +642 -642
- package/.aios-core/development/tasks/db-domain-modeling.md +693 -693
- package/.aios-core/development/tasks/db-dry-run.md +293 -293
- package/.aios-core/development/tasks/db-env-check.md +260 -260
- package/.aios-core/development/tasks/db-expansion-pack-integration.md +663 -663
- package/.aios-core/development/tasks/db-explain.md +631 -631
- package/.aios-core/development/tasks/db-impersonate.md +495 -495
- package/.aios-core/development/tasks/db-load-csv.md +593 -593
- package/.aios-core/development/tasks/db-policy-apply.md +653 -653
- package/.aios-core/development/tasks/db-rls-audit.md +411 -411
- package/.aios-core/development/tasks/db-rollback.md +739 -739
- package/.aios-core/development/tasks/db-run-sql.md +613 -613
- package/.aios-core/development/tasks/db-schema-audit.md +1011 -1011
- package/.aios-core/development/tasks/db-seed.md +390 -390
- package/.aios-core/development/tasks/db-smoke-test.md +351 -351
- package/.aios-core/development/tasks/db-snapshot.md +569 -569
- package/.aios-core/development/tasks/db-supabase-setup.md +712 -712
- package/.aios-core/development/tasks/db-verify-order.md +515 -515
- package/.aios-core/development/tasks/deprecate-component.md +956 -956
- package/.aios-core/development/tasks/dev-apply-qa-fixes.md +318 -318
- package/.aios-core/development/tasks/dev-backlog-debt.md +469 -469
- package/.aios-core/development/tasks/dev-develop-story.md +846 -846
- package/.aios-core/development/tasks/dev-improve-code-quality.md +872 -872
- package/.aios-core/development/tasks/dev-optimize-performance.md +1033 -1033
- package/.aios-core/development/tasks/dev-suggest-refactoring.md +870 -870
- package/.aios-core/development/tasks/dev-validate-next-story.md +348 -348
- package/.aios-core/development/tasks/document-project.md +552 -552
- package/.aios-core/development/tasks/environment-bootstrap.md +1311 -1311
- package/.aios-core/development/tasks/execute-checklist.md +301 -301
- package/.aios-core/development/tasks/export-design-tokens-dtcg.md +274 -274
- package/.aios-core/development/tasks/extend-pattern.md +269 -269
- package/.aios-core/development/tasks/extract-tokens.md +467 -467
- package/.aios-core/development/tasks/facilitate-brainstorming-session.md +518 -518
- package/.aios-core/development/tasks/generate-ai-frontend-prompt.md +260 -260
- package/.aios-core/development/tasks/generate-documentation.md +284 -284
- package/.aios-core/development/tasks/generate-migration-strategy.md +522 -522
- package/.aios-core/development/tasks/generate-shock-report.md +501 -501
- package/.aios-core/development/tasks/github-devops-github-pr-automation.md +427 -427
- package/.aios-core/development/tasks/github-devops-pre-push-quality-gate.md +733 -733
- package/.aios-core/development/tasks/github-devops-repository-cleanup.md +374 -374
- package/.aios-core/development/tasks/github-devops-version-management.md +483 -483
- package/.aios-core/development/tasks/improve-self.md +822 -822
- package/.aios-core/development/tasks/index-docs.md +387 -387
- package/.aios-core/development/tasks/init-project-status.md +506 -506
- package/.aios-core/development/tasks/integrate-expansion-pack.md +314 -314
- package/.aios-core/development/tasks/kb-mode-interaction.md +283 -283
- package/.aios-core/development/tasks/learn-patterns.md +900 -900
- package/.aios-core/development/tasks/mcp-workflow.md +437 -437
- package/.aios-core/development/tasks/modify-agent.md +381 -381
- package/.aios-core/development/tasks/modify-task.md +424 -424
- package/.aios-core/development/tasks/modify-workflow.md +465 -465
- package/.aios-core/development/tasks/po-backlog-add.md +370 -370
- package/.aios-core/development/tasks/po-manage-story-backlog.md +523 -523
- package/.aios-core/development/tasks/po-pull-story-from-clickup.md +540 -540
- package/.aios-core/development/tasks/po-pull-story.md +316 -316
- package/.aios-core/development/tasks/po-stories-index.md +351 -351
- package/.aios-core/development/tasks/po-sync-story-to-clickup.md +457 -457
- package/.aios-core/development/tasks/po-sync-story.md +303 -303
- package/.aios-core/development/tasks/pr-automation.md +701 -701
- package/.aios-core/development/tasks/propose-modification.md +842 -842
- package/.aios-core/development/tasks/qa-backlog-add-followup.md +425 -425
- package/.aios-core/development/tasks/qa-gate.md +373 -373
- package/.aios-core/development/tasks/qa-generate-tests.md +1174 -1174
- package/.aios-core/development/tasks/qa-nfr-assess.md +557 -557
- package/.aios-core/development/tasks/qa-review-proposal.md +1157 -1157
- package/.aios-core/development/tasks/qa-review-story.md +682 -682
- package/.aios-core/development/tasks/qa-risk-profile.md +566 -566
- package/.aios-core/development/tasks/qa-run-tests.md +277 -277
- package/.aios-core/development/tasks/qa-test-design.md +387 -387
- package/.aios-core/development/tasks/qa-trace-requirements.md +476 -476
- package/.aios-core/development/tasks/release-management.md +723 -723
- package/.aios-core/development/tasks/security-audit.md +554 -554
- package/.aios-core/development/tasks/security-scan.md +790 -790
- package/.aios-core/development/tasks/setup-database.md +741 -741
- package/.aios-core/development/tasks/setup-design-system.md +462 -462
- package/.aios-core/development/tasks/setup-github.md +874 -874
- package/.aios-core/development/tasks/setup-llm-routing.md +1 -1
- package/.aios-core/development/tasks/setup-mcp-docker.md +584 -584
- package/.aios-core/development/tasks/setup-project-docs.md +440 -0
- package/.aios-core/development/tasks/shard-doc.md +537 -537
- package/.aios-core/development/tasks/sm-create-next-story.md +480 -480
- package/.aios-core/development/tasks/sync-documentation.md +864 -864
- package/.aios-core/development/tasks/tailwind-upgrade.md +294 -294
- package/.aios-core/development/tasks/test-as-user.md +621 -621
- package/.aios-core/development/tasks/test-validation-task.md +171 -171
- package/.aios-core/development/tasks/undo-last.md +346 -346
- package/.aios-core/development/tasks/update-manifest.md +409 -409
- package/.aios-core/development/tasks/ux-create-wireframe.md +617 -617
- package/.aios-core/development/tasks/ux-ds-scan-artifact.md +672 -672
- package/.aios-core/development/tasks/ux-user-research.md +559 -559
- package/.aios-core/development/tasks/validate-next-story.md +422 -422
- package/.aios-core/development/workflows/README.md +83 -83
- package/.aios-core/development/workflows/brownfield-fullstack.yaml +297 -297
- package/.aios-core/development/workflows/brownfield-service.yaml +187 -187
- package/.aios-core/development/workflows/brownfield-ui.yaml +197 -197
- package/.aios-core/development/workflows/greenfield-fullstack.yaml +333 -333
- package/.aios-core/development/workflows/greenfield-service.yaml +206 -206
- package/.aios-core/development/workflows/greenfield-ui.yaml +235 -235
- package/.aios-core/docs/SHARD-TRANSLATION-GUIDE.md +335 -335
- package/.aios-core/docs/component-creation-guide.md +457 -457
- package/.aios-core/docs/session-update-pattern.md +307 -307
- package/.aios-core/docs/standards/AGENT-PERSONALIZATION-STANDARD-V1.md +572 -572
- package/.aios-core/docs/standards/AIOS-COLOR-PALETTE-QUICK-REFERENCE.md +185 -185
- package/.aios-core/docs/standards/AIOS-COLOR-PALETTE-V2.1.md +354 -354
- package/.aios-core/docs/standards/AIOS-FRAMEWORK-MASTER.md +1963 -1963
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1-COMPLETE.md +821 -821
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1-SUMMARY.md +1190 -1190
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1.md +439 -439
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.2-SUMMARY.md +1339 -1339
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO.md +5398 -5398
- package/.aios-core/docs/standards/EXECUTOR-DECISION-TREE.md +697 -697
- package/.aios-core/docs/standards/OPEN-SOURCE-VS-SERVICE-DIFFERENCES.md +511 -511
- package/.aios-core/docs/standards/QUALITY-GATES-SPECIFICATION.md +556 -556
- package/.aios-core/docs/standards/STANDARDS-INDEX.md +210 -210
- package/.aios-core/docs/standards/STORY-TEMPLATE-V2-SPECIFICATION.md +550 -550
- package/.aios-core/docs/standards/TASK-FORMAT-SPECIFICATION-V1.md +1414 -1414
- package/.aios-core/docs/standards/V3-ARCHITECTURAL-DECISIONS.md +523 -523
- package/.aios-core/docs/template-syntax.md +266 -266
- package/.aios-core/docs/troubleshooting-guide.md +624 -624
- package/.aios-core/index.esm.js +15 -15
- package/.aios-core/index.js +1 -1
- package/.aios-core/infrastructure/README.md +126 -126
- package/.aios-core/infrastructure/integrations/pm-adapters/README.md +59 -59
- package/.aios-core/infrastructure/scripts/approval-workflow.js +1 -1
- package/.aios-core/infrastructure/scripts/batch-creator.js +1 -1
- package/.aios-core/infrastructure/scripts/component-generator.js +3 -3
- package/.aios-core/infrastructure/scripts/component-metadata.js +1 -1
- package/.aios-core/infrastructure/scripts/component-search.js +1 -1
- package/.aios-core/infrastructure/scripts/coverage-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/dependency-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/dependency-impact-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/documentation-integrity/brownfield-analyzer.js +501 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/config-generator.js +368 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/deployment-config-loader.js +308 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/doc-generator.js +331 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/gitignore-generator.js +312 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/index.js +74 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/mode-detector.js +389 -0
- package/.aios-core/infrastructure/scripts/framework-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/improvement-engine.js +1 -1
- package/.aios-core/infrastructure/scripts/llm-routing/install-llm-routing.js +26 -13
- package/.aios-core/infrastructure/scripts/llm-routing/templates/claude-free-tracked.cmd +127 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/claude-free-tracked.sh +108 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/deepseek-proxy.cmd +71 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/deepseek-proxy.sh +65 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/deepseek-usage.cmd +51 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/deepseek-usage.sh +16 -0
- package/.aios-core/infrastructure/scripts/llm-routing/usage-tracker/index.js +549 -0
- package/.aios-core/infrastructure/scripts/modification-risk-assessment.js +1 -1
- package/.aios-core/infrastructure/scripts/performance-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/pm-adapter.js +134 -134
- package/.aios-core/infrastructure/scripts/repository-detector.js +3 -3
- package/.aios-core/infrastructure/scripts/template-engine.js +1 -1
- package/.aios-core/infrastructure/scripts/template-validator.js +1 -1
- package/.aios-core/infrastructure/scripts/test-generator.js +1 -1
- package/.aios-core/infrastructure/scripts/test-quality-assessment.js +1 -1
- package/.aios-core/infrastructure/scripts/transaction-manager.js +1 -1
- package/.aios-core/infrastructure/scripts/usage-analytics.js +1 -1
- package/.aios-core/infrastructure/scripts/visual-impact-generator.js +2 -2
- package/.aios-core/infrastructure/templates/core-config/core-config-brownfield.tmpl.yaml +176 -0
- package/.aios-core/infrastructure/templates/core-config/core-config-greenfield.tmpl.yaml +127 -0
- package/.aios-core/infrastructure/templates/github-workflows/README.md +109 -109
- package/.aios-core/infrastructure/templates/gitignore/gitignore-aios-base.tmpl +63 -0
- package/.aios-core/infrastructure/templates/gitignore/gitignore-brownfield-merge.tmpl +18 -0
- package/.aios-core/infrastructure/templates/gitignore/gitignore-node.tmpl +85 -0
- package/.aios-core/infrastructure/templates/gitignore/gitignore-python.tmpl +145 -0
- package/.aios-core/infrastructure/templates/project-docs/coding-standards-tmpl.md +346 -0
- package/.aios-core/infrastructure/templates/project-docs/source-tree-tmpl.md +177 -0
- package/.aios-core/infrastructure/templates/project-docs/tech-stack-tmpl.md +267 -0
- package/.aios-core/infrastructure/tests/regression-suite-v2.md +621 -621
- package/.aios-core/infrastructure/tools/README.md +222 -222
- package/.aios-core/infrastructure/tools/cli/github-cli.yaml +200 -200
- package/.aios-core/infrastructure/tools/cli/railway-cli.yaml +260 -260
- package/.aios-core/infrastructure/tools/cli/supabase-cli.yaml +224 -224
- package/.aios-core/infrastructure/tools/local/ffmpeg.yaml +261 -261
- package/.aios-core/infrastructure/tools/mcp/21st-dev-magic.yaml +127 -127
- package/.aios-core/infrastructure/tools/mcp/browser.yaml +103 -103
- package/.aios-core/infrastructure/tools/mcp/clickup.yaml +534 -534
- package/.aios-core/infrastructure/tools/mcp/context7.yaml +78 -78
- package/.aios-core/infrastructure/tools/mcp/desktop-commander.yaml +180 -180
- package/.aios-core/infrastructure/tools/mcp/exa.yaml +103 -103
- package/.aios-core/infrastructure/tools/mcp/google-workspace.yaml +930 -930
- package/.aios-core/infrastructure/tools/mcp/n8n.yaml +551 -551
- package/.aios-core/infrastructure/tools/mcp/supabase.yaml +808 -808
- package/.aios-core/install-manifest.yaml +347 -347
- package/.aios-core/product/README.md +56 -56
- package/.aios-core/product/checklists/accessibility-wcag-checklist.md +80 -0
- package/.aios-core/product/checklists/architect-checklist.md +443 -443
- package/.aios-core/product/checklists/change-checklist.md +182 -182
- package/.aios-core/product/checklists/component-quality-checklist.md +74 -0
- package/.aios-core/product/checklists/database-design-checklist.md +119 -119
- package/.aios-core/product/checklists/dba-predeploy-checklist.md +97 -97
- package/.aios-core/product/checklists/dba-rollback-checklist.md +99 -99
- package/.aios-core/product/checklists/migration-readiness-checklist.md +75 -0
- package/.aios-core/product/checklists/pattern-audit-checklist.md +88 -0
- package/.aios-core/product/checklists/pm-checklist.md +375 -375
- package/.aios-core/product/checklists/po-master-checklist.md +441 -441
- package/.aios-core/product/checklists/pre-push-checklist.md +108 -108
- package/.aios-core/product/checklists/release-checklist.md +122 -122
- package/.aios-core/product/checklists/story-dod-checklist.md +101 -101
- package/.aios-core/product/checklists/story-draft-checklist.md +215 -215
- package/.aios-core/product/data/atomic-design-principles.md +108 -0
- package/.aios-core/product/data/brainstorming-techniques.md +36 -36
- package/.aios-core/product/data/consolidation-algorithms.md +142 -0
- package/.aios-core/product/data/database-best-practices.md +182 -0
- package/.aios-core/product/data/design-token-best-practices.md +107 -0
- package/.aios-core/product/data/elicitation-methods.md +134 -134
- package/.aios-core/product/data/integration-patterns.md +207 -0
- package/.aios-core/product/data/migration-safety-guide.md +329 -0
- package/.aios-core/product/data/mode-selection-best-practices.md +471 -471
- package/.aios-core/product/data/postgres-tuning-guide.md +300 -0
- package/.aios-core/product/data/rls-security-patterns.md +333 -0
- package/.aios-core/product/data/roi-calculation-guide.md +142 -0
- package/.aios-core/product/data/supabase-patterns.md +330 -0
- package/.aios-core/product/data/test-levels-framework.md +148 -148
- package/.aios-core/product/data/test-priorities-matrix.md +174 -174
- package/.aios-core/product/data/wcag-compliance-guide.md +267 -0
- package/.aios-core/product/templates/1mcp-config.yaml +225 -225
- package/.aios-core/product/templates/activation-instructions-inline-greeting.yaml +63 -63
- package/.aios-core/product/templates/activation-instructions-template.md +258 -258
- package/.aios-core/product/templates/agent-template.yaml +120 -120
- package/.aios-core/product/templates/architecture-tmpl.yaml +650 -650
- package/.aios-core/product/templates/brainstorming-output-tmpl.yaml +155 -155
- package/.aios-core/product/templates/brownfield-architecture-tmpl.yaml +475 -475
- package/.aios-core/product/templates/brownfield-prd-tmpl.yaml +279 -279
- package/.aios-core/product/templates/changelog-template.md +134 -134
- package/.aios-core/product/templates/command-rationalization-matrix.md +152 -152
- package/.aios-core/product/templates/competitor-analysis-tmpl.yaml +292 -292
- package/.aios-core/product/templates/design-story-tmpl.yaml +587 -587
- package/.aios-core/product/templates/ds-artifact-analysis.md +70 -70
- package/.aios-core/product/templates/front-end-architecture-tmpl.yaml +205 -205
- package/.aios-core/product/templates/front-end-spec-tmpl.yaml +348 -348
- package/.aios-core/product/templates/fullstack-architecture-tmpl.yaml +804 -804
- package/.aios-core/product/templates/github-pr-template.md +67 -67
- package/.aios-core/product/templates/gordon-mcp.yaml +140 -140
- package/.aios-core/product/templates/ide-rules/antigravity-rules.md +115 -115
- package/.aios-core/product/templates/ide-rules/claude-rules.md +221 -221
- package/.aios-core/product/templates/ide-rules/cline-rules.md +84 -84
- package/.aios-core/product/templates/ide-rules/copilot-rules.md +92 -92
- package/.aios-core/product/templates/ide-rules/cursor-rules.md +115 -115
- package/.aios-core/product/templates/ide-rules/gemini-rules.md +85 -85
- package/.aios-core/product/templates/ide-rules/roo-rules.md +86 -86
- package/.aios-core/product/templates/ide-rules/trae-rules.md +104 -104
- package/.aios-core/product/templates/ide-rules/windsurf-rules.md +80 -80
- package/.aios-core/product/templates/index-strategy-tmpl.yaml +53 -53
- package/.aios-core/product/templates/market-research-tmpl.yaml +251 -251
- package/.aios-core/product/templates/mcp-workflow.js +271 -271
- package/.aios-core/product/templates/migration-plan-tmpl.yaml +1022 -1022
- package/.aios-core/product/templates/migration-strategy-tmpl.md +524 -524
- package/.aios-core/product/templates/personalized-agent-template.md +258 -258
- package/.aios-core/product/templates/personalized-checklist-template.md +340 -340
- package/.aios-core/product/templates/personalized-task-template-v2.md +905 -905
- package/.aios-core/product/templates/personalized-task-template.md +344 -344
- package/.aios-core/product/templates/personalized-template-file.yaml +322 -322
- package/.aios-core/product/templates/personalized-workflow-template.yaml +460 -460
- package/.aios-core/product/templates/prd-tmpl.yaml +201 -201
- package/.aios-core/product/templates/project-brief-tmpl.yaml +220 -220
- package/.aios-core/product/templates/qa-gate-tmpl.yaml +240 -240
- package/.aios-core/product/templates/rls-policies-tmpl.yaml +1203 -1203
- package/.aios-core/product/templates/schema-design-tmpl.yaml +428 -428
- package/.aios-core/product/templates/state-persistence-tmpl.yaml +219 -219
- package/.aios-core/product/templates/story-tmpl.yaml +331 -331
- package/.aios-core/product/templates/task-execution-report.md +495 -495
- package/.aios-core/product/templates/task-template.md +122 -122
- package/.aios-core/product/templates/token-exports-tailwind-tmpl.js +395 -395
- package/.aios-core/product/templates/tokens-schema-tmpl.yaml +305 -305
- package/.aios-core/product/templates/workflow-template.yaml +133 -133
- package/.aios-core/scripts/README.md +354 -354
- package/.aios-core/scripts/aios-doc-template.md +325 -325
- package/.aios-core/scripts/elicitation-engine.js +1 -1
- package/.aios-core/scripts/test-template-system.js +1 -1
- package/.aios-core/scripts/workflow-management.md +69 -69
- package/.aios-core/user-guide.md +1413 -1413
- package/.aios-core/working-in-the-brownfield.md +361 -361
- package/LICENSE +1 -1
- package/README.md +702 -703
- package/bin/aios-init-old.js +3 -3
- package/bin/aios-init-v4.js +1 -1
- package/bin/aios-init.backup-v1.1.4.js +1 -1
- package/bin/aios-init.js +3 -3
- package/bin/aios.js +279 -279
- package/bin/utils/install-errors.js +339 -339
- package/bin/utils/install-transaction.js +445 -445
- package/index.d.ts +18 -18
- package/index.esm.js +20 -20
- package/index.js +6 -6
- package/package.json +8 -10
- package/packages/installer/src/config/templates/env-template.js +27 -4
- package/packages/installer/src/detection/detect-project-type.js +81 -81
- package/packages/installer/src/wizard/wizard.js +185 -34
- package/packages/installer/tests/integration/environment-configuration.test.js +2 -1
- package/packages/installer/tests/integration/wizard-detection.test.js +8 -6
- package/packages/installer/tests/unit/env-template.test.js +11 -10
- package/src/config/ide-configs.js +1 -1
- package/src/wizard/feedback.js +2 -2
- package/src/wizard/index.js +1 -1
- package/src/wizard/validation/report-generator.js +1 -1
- package/src/wizard/validation/troubleshooting-system.js +13 -13
- package/.aios-core/development/tasks/validate-structure.md +0 -243
- package/.aios-core/infrastructure/scripts/_archived/final-todo-count.js +0 -122
- package/.aios-core/infrastructure/scripts/_archived/fix-yaml-formatting.js +0 -89
- package/.aios-core/infrastructure/scripts/_archived/migration-generator.js +0 -780
- package/.aios-core/infrastructure/scripts/_archived/migration-path-generator.js +0 -950
- package/.aios-core/infrastructure/scripts/_archived/phase2-entrada-saida-errors.js +0 -425
- package/.aios-core/infrastructure/scripts/_archived/phase2-spot-check.js +0 -132
- package/.aios-core/infrastructure/scripts/_archived/phase3-tools-scripts-validation.js +0 -381
- package/.aios-core/infrastructure/scripts/_archived/phase4-metadata-performance.js +0 -203
- package/.aios-core/infrastructure/scripts/_archived/test-yaml-parsing.js +0 -24
- package/.aios-core/infrastructure/scripts/_archived/verify-yaml-fix.js +0 -51
- package/.aios-core/infrastructure/scripts/source-tree-guardian/index.js +0 -375
- package/.aios-core/infrastructure/scripts/source-tree-guardian/manifest-generator.js +0 -410
- package/.aios-core/infrastructure/scripts/source-tree-guardian/rules/naming-rules.yaml +0 -285
- package/.aios-core/infrastructure/scripts/source-tree-guardian/rules/placement-rules.yaml +0 -262
- package/.aios-core/infrastructure/scripts/source-tree-guardian/validator.js +0 -468
- package/.aios-core/tasks/find-component.md.legacy +0 -391
- package/.aios-core/tasks/generate-commit-message.md.legacy +0 -426
- package/.aios-core/tasks/generate-migration.md.legacy +0 -382
- package/.aios-core/tasks/rollback-modification.md.legacy +0 -307
- package/.aios-core/tasks/update-tests.md.legacy +0 -283
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
# PostgreSQL Performance Tuning Guide
|
|
2
|
+
|
|
3
|
+
**Purpose:** Reference guide for PostgreSQL performance optimization
|
|
4
|
+
**Agent:** Dan (Data Engineer)
|
|
5
|
+
**Standard:** Production-ready PostgreSQL configurations
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## CONFIGURATION TUNING
|
|
10
|
+
|
|
11
|
+
### Memory Settings
|
|
12
|
+
|
|
13
|
+
#### shared_buffers
|
|
14
|
+
- **Purpose:** Shared memory for caching data
|
|
15
|
+
- **Recommendation:** 25% of total RAM (max ~8GB for most workloads)
|
|
16
|
+
```sql
|
|
17
|
+
-- Check current value
|
|
18
|
+
SHOW shared_buffers;
|
|
19
|
+
|
|
20
|
+
-- Example: 8GB RAM system
|
|
21
|
+
-- Set to 2GB (in postgresql.conf)
|
|
22
|
+
shared_buffers = 2GB
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
#### effective_cache_size
|
|
26
|
+
- **Purpose:** Planner's estimate of available cache
|
|
27
|
+
- **Recommendation:** 50-75% of total RAM
|
|
28
|
+
```sql
|
|
29
|
+
-- Example: 8GB RAM system
|
|
30
|
+
effective_cache_size = 6GB
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
#### work_mem
|
|
34
|
+
- **Purpose:** Memory per operation (sort, hash)
|
|
35
|
+
- **Recommendation:** total_ram / max_connections / 4
|
|
36
|
+
- **Caution:** Set too high can cause memory exhaustion
|
|
37
|
+
```sql
|
|
38
|
+
-- Example: 8GB RAM, 100 connections
|
|
39
|
+
work_mem = 20MB
|
|
40
|
+
|
|
41
|
+
-- For specific queries needing more
|
|
42
|
+
SET work_mem = '256MB';
|
|
43
|
+
-- Run query
|
|
44
|
+
RESET work_mem;
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
#### maintenance_work_mem
|
|
48
|
+
- **Purpose:** Memory for maintenance operations (VACUUM, CREATE INDEX)
|
|
49
|
+
- **Recommendation:** 256MB-1GB depending on RAM
|
|
50
|
+
```sql
|
|
51
|
+
maintenance_work_mem = 512MB
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## CONNECTION POOLING
|
|
57
|
+
|
|
58
|
+
### Why Pool Connections
|
|
59
|
+
- PostgreSQL forks a process per connection (~10MB each)
|
|
60
|
+
- Too many connections = memory exhaustion
|
|
61
|
+
- Connection overhead is significant
|
|
62
|
+
|
|
63
|
+
### PgBouncer Configuration
|
|
64
|
+
```ini
|
|
65
|
+
[databases]
|
|
66
|
+
mydb = host=localhost port=5432 dbname=mydb
|
|
67
|
+
|
|
68
|
+
[pgbouncer]
|
|
69
|
+
listen_port = 6432
|
|
70
|
+
listen_addr = *
|
|
71
|
+
auth_type = md5
|
|
72
|
+
auth_file = /etc/pgbouncer/userlist.txt
|
|
73
|
+
pool_mode = transaction
|
|
74
|
+
max_client_conn = 1000
|
|
75
|
+
default_pool_size = 20
|
|
76
|
+
min_pool_size = 5
|
|
77
|
+
reserve_pool_size = 5
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Pool Modes
|
|
81
|
+
- **session:** Connection held until client disconnects
|
|
82
|
+
- **transaction:** Connection returned after transaction (recommended)
|
|
83
|
+
- **statement:** Connection returned after each statement
|
|
84
|
+
|
|
85
|
+
### Supabase Connection Pooling
|
|
86
|
+
- Built-in Supavisor pooler
|
|
87
|
+
- Use pooler URL for application connections
|
|
88
|
+
- Use direct URL for migrations only
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## QUERY OPTIMIZATION
|
|
93
|
+
|
|
94
|
+
### EXPLAIN ANALYZE
|
|
95
|
+
```sql
|
|
96
|
+
EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT)
|
|
97
|
+
SELECT * FROM orders
|
|
98
|
+
WHERE customer_id = 123
|
|
99
|
+
ORDER BY created_at DESC
|
|
100
|
+
LIMIT 10;
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Key Metrics to Watch
|
|
104
|
+
- **Seq Scan:** Full table scan (may indicate missing index)
|
|
105
|
+
- **Rows Removed by Filter:** High count = inefficient query
|
|
106
|
+
- **Buffers:** Shared hit (cache) vs read (disk)
|
|
107
|
+
- **Actual Time:** Startup time vs total time
|
|
108
|
+
|
|
109
|
+
### Common Optimizations
|
|
110
|
+
|
|
111
|
+
#### Add Missing Indexes
|
|
112
|
+
```sql
|
|
113
|
+
-- Before: Seq Scan on orders
|
|
114
|
+
EXPLAIN SELECT * FROM orders WHERE customer_id = 123;
|
|
115
|
+
|
|
116
|
+
-- Add index
|
|
117
|
+
CREATE INDEX idx_orders_customer_id ON orders(customer_id);
|
|
118
|
+
|
|
119
|
+
-- After: Index Scan on idx_orders_customer_id
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
#### Use Covering Indexes
|
|
123
|
+
```sql
|
|
124
|
+
-- Query
|
|
125
|
+
SELECT email, name FROM users WHERE email = 'test@example.com';
|
|
126
|
+
|
|
127
|
+
-- Covering index (includes all columns needed)
|
|
128
|
+
CREATE INDEX idx_users_email_covering ON users(email) INCLUDE (name);
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
#### Partial Indexes
|
|
132
|
+
```sql
|
|
133
|
+
-- Only index active users
|
|
134
|
+
CREATE INDEX idx_users_active ON users(email)
|
|
135
|
+
WHERE is_active = true;
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## VACUUM AND MAINTENANCE
|
|
141
|
+
|
|
142
|
+
### Autovacuum Tuning
|
|
143
|
+
```sql
|
|
144
|
+
-- Check autovacuum stats
|
|
145
|
+
SELECT schemaname, relname, n_dead_tup, last_autovacuum
|
|
146
|
+
FROM pg_stat_user_tables
|
|
147
|
+
ORDER BY n_dead_tup DESC;
|
|
148
|
+
|
|
149
|
+
-- Per-table settings for high-churn tables
|
|
150
|
+
ALTER TABLE high_churn_table SET (
|
|
151
|
+
autovacuum_vacuum_scale_factor = 0.1,
|
|
152
|
+
autovacuum_analyze_scale_factor = 0.05
|
|
153
|
+
);
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Manual Maintenance
|
|
157
|
+
```sql
|
|
158
|
+
-- Analyze table statistics
|
|
159
|
+
ANALYZE table_name;
|
|
160
|
+
|
|
161
|
+
-- Vacuum (reclaim space)
|
|
162
|
+
VACUUM table_name;
|
|
163
|
+
|
|
164
|
+
-- Vacuum + analyze
|
|
165
|
+
VACUUM ANALYZE table_name;
|
|
166
|
+
|
|
167
|
+
-- Full vacuum (locks table, rewrites)
|
|
168
|
+
VACUUM FULL table_name; -- Use with caution
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Reindex
|
|
172
|
+
```sql
|
|
173
|
+
-- Rebuild bloated index (non-blocking)
|
|
174
|
+
REINDEX INDEX CONCURRENTLY idx_name;
|
|
175
|
+
|
|
176
|
+
-- Rebuild all indexes on table
|
|
177
|
+
REINDEX TABLE CONCURRENTLY table_name;
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## MONITORING QUERIES
|
|
183
|
+
|
|
184
|
+
### Find Slow Queries
|
|
185
|
+
```sql
|
|
186
|
+
-- Enable pg_stat_statements
|
|
187
|
+
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
|
|
188
|
+
|
|
189
|
+
-- Top 10 slowest queries
|
|
190
|
+
SELECT
|
|
191
|
+
calls,
|
|
192
|
+
round(total_exec_time::numeric, 2) as total_ms,
|
|
193
|
+
round(mean_exec_time::numeric, 2) as avg_ms,
|
|
194
|
+
query
|
|
195
|
+
FROM pg_stat_statements
|
|
196
|
+
ORDER BY mean_exec_time DESC
|
|
197
|
+
LIMIT 10;
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Check Index Usage
|
|
201
|
+
```sql
|
|
202
|
+
-- Unused indexes
|
|
203
|
+
SELECT
|
|
204
|
+
schemaname,
|
|
205
|
+
relname,
|
|
206
|
+
indexrelname,
|
|
207
|
+
idx_scan,
|
|
208
|
+
pg_size_pretty(pg_relation_size(indexrelid)) as size
|
|
209
|
+
FROM pg_stat_user_indexes
|
|
210
|
+
WHERE idx_scan = 0
|
|
211
|
+
AND schemaname NOT IN ('pg_catalog', 'pg_toast')
|
|
212
|
+
ORDER BY pg_relation_size(indexrelid) DESC;
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### Table Bloat
|
|
216
|
+
```sql
|
|
217
|
+
-- Check table sizes and bloat
|
|
218
|
+
SELECT
|
|
219
|
+
schemaname,
|
|
220
|
+
relname,
|
|
221
|
+
n_live_tup,
|
|
222
|
+
n_dead_tup,
|
|
223
|
+
round(100 * n_dead_tup / NULLIF(n_live_tup + n_dead_tup, 0), 2) as dead_pct
|
|
224
|
+
FROM pg_stat_user_tables
|
|
225
|
+
WHERE n_dead_tup > 0
|
|
226
|
+
ORDER BY n_dead_tup DESC;
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### Cache Hit Ratio
|
|
230
|
+
```sql
|
|
231
|
+
-- Should be > 99% for good performance
|
|
232
|
+
SELECT
|
|
233
|
+
round(100 * sum(blks_hit) / sum(blks_hit + blks_read), 2) as cache_hit_ratio
|
|
234
|
+
FROM pg_stat_database;
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
## LOCKING AND CONCURRENCY
|
|
240
|
+
|
|
241
|
+
### Check Active Locks
|
|
242
|
+
```sql
|
|
243
|
+
SELECT
|
|
244
|
+
l.pid,
|
|
245
|
+
l.mode,
|
|
246
|
+
l.granted,
|
|
247
|
+
a.usename,
|
|
248
|
+
a.query,
|
|
249
|
+
a.state
|
|
250
|
+
FROM pg_locks l
|
|
251
|
+
JOIN pg_stat_activity a ON l.pid = a.pid
|
|
252
|
+
WHERE NOT l.granted;
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
### Kill Long-Running Queries
|
|
256
|
+
```sql
|
|
257
|
+
-- Find long-running queries
|
|
258
|
+
SELECT
|
|
259
|
+
pid,
|
|
260
|
+
now() - pg_stat_activity.query_start AS duration,
|
|
261
|
+
query,
|
|
262
|
+
state
|
|
263
|
+
FROM pg_stat_activity
|
|
264
|
+
WHERE state != 'idle'
|
|
265
|
+
AND now() - pg_stat_activity.query_start > interval '5 minutes';
|
|
266
|
+
|
|
267
|
+
-- Cancel query (graceful)
|
|
268
|
+
SELECT pg_cancel_backend(pid);
|
|
269
|
+
|
|
270
|
+
-- Terminate connection (force)
|
|
271
|
+
SELECT pg_terminate_backend(pid);
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## PRODUCTION CHECKLIST
|
|
277
|
+
|
|
278
|
+
### Before Go-Live
|
|
279
|
+
- [ ] shared_buffers configured (25% RAM)
|
|
280
|
+
- [ ] effective_cache_size configured (50-75% RAM)
|
|
281
|
+
- [ ] work_mem tuned for workload
|
|
282
|
+
- [ ] Connection pooling configured
|
|
283
|
+
- [ ] Autovacuum tuned for high-churn tables
|
|
284
|
+
- [ ] pg_stat_statements enabled
|
|
285
|
+
- [ ] Slow query logging enabled
|
|
286
|
+
- [ ] Backup strategy tested
|
|
287
|
+
- [ ] Index strategy reviewed
|
|
288
|
+
|
|
289
|
+
### Regular Maintenance
|
|
290
|
+
- [ ] Monitor cache hit ratio (>99%)
|
|
291
|
+
- [ ] Check unused indexes monthly
|
|
292
|
+
- [ ] Review slow query logs weekly
|
|
293
|
+
- [ ] Analyze table statistics after bulk loads
|
|
294
|
+
- [ ] Monitor table bloat
|
|
295
|
+
- [ ] Test backup restoration quarterly
|
|
296
|
+
|
|
297
|
+
---
|
|
298
|
+
|
|
299
|
+
**Reviewer:** ________ **Date:** ________
|
|
300
|
+
**Quality Gate:** [ ] PASS [ ] NEEDS REVIEW
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
# Row Level Security (RLS) Patterns Guide
|
|
2
|
+
|
|
3
|
+
**Purpose:** Reference guide for implementing secure RLS policies
|
|
4
|
+
**Agent:** Dan (Data Engineer)
|
|
5
|
+
**Platform:** PostgreSQL / Supabase
|
|
6
|
+
**Security:** Multi-tenant data isolation patterns
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## RLS FUNDAMENTALS
|
|
11
|
+
|
|
12
|
+
### Enabling RLS
|
|
13
|
+
```sql
|
|
14
|
+
-- Enable RLS on table (required before policies work)
|
|
15
|
+
ALTER TABLE posts ENABLE ROW LEVEL SECURITY;
|
|
16
|
+
|
|
17
|
+
-- Force RLS for table owner (recommended in Supabase)
|
|
18
|
+
ALTER TABLE posts FORCE ROW LEVEL SECURITY;
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### Policy Structure
|
|
22
|
+
```sql
|
|
23
|
+
CREATE POLICY policy_name
|
|
24
|
+
ON table_name
|
|
25
|
+
FOR operation -- ALL, SELECT, INSERT, UPDATE, DELETE
|
|
26
|
+
TO role -- PUBLIC, authenticated, specific_role
|
|
27
|
+
USING (expression) -- Filter for SELECT, UPDATE, DELETE
|
|
28
|
+
WITH CHECK (expression) -- Filter for INSERT, UPDATE
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## COMMON PATTERNS
|
|
34
|
+
|
|
35
|
+
### Pattern 1: User Owns Row
|
|
36
|
+
```sql
|
|
37
|
+
-- Users can only see/modify their own data
|
|
38
|
+
CREATE POLICY "Users can view own data"
|
|
39
|
+
ON profiles FOR SELECT
|
|
40
|
+
TO authenticated
|
|
41
|
+
USING (auth.uid() = user_id);
|
|
42
|
+
|
|
43
|
+
CREATE POLICY "Users can update own data"
|
|
44
|
+
ON profiles FOR UPDATE
|
|
45
|
+
TO authenticated
|
|
46
|
+
USING (auth.uid() = user_id)
|
|
47
|
+
WITH CHECK (auth.uid() = user_id);
|
|
48
|
+
|
|
49
|
+
CREATE POLICY "Users can delete own data"
|
|
50
|
+
ON profiles FOR DELETE
|
|
51
|
+
TO authenticated
|
|
52
|
+
USING (auth.uid() = user_id);
|
|
53
|
+
|
|
54
|
+
CREATE POLICY "Users can insert own data"
|
|
55
|
+
ON profiles FOR INSERT
|
|
56
|
+
TO authenticated
|
|
57
|
+
WITH CHECK (auth.uid() = user_id);
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Pattern 2: Organization/Team Based
|
|
61
|
+
```sql
|
|
62
|
+
-- Users can see data from their organization
|
|
63
|
+
CREATE POLICY "Team members can view team data"
|
|
64
|
+
ON projects FOR SELECT
|
|
65
|
+
TO authenticated
|
|
66
|
+
USING (
|
|
67
|
+
organization_id IN (
|
|
68
|
+
SELECT organization_id
|
|
69
|
+
FROM organization_members
|
|
70
|
+
WHERE user_id = auth.uid()
|
|
71
|
+
)
|
|
72
|
+
);
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Pattern 3: Role-Based Access
|
|
76
|
+
```sql
|
|
77
|
+
-- Different access levels based on user role
|
|
78
|
+
CREATE POLICY "Admins have full access"
|
|
79
|
+
ON sensitive_data FOR ALL
|
|
80
|
+
TO authenticated
|
|
81
|
+
USING (
|
|
82
|
+
EXISTS (
|
|
83
|
+
SELECT 1 FROM user_roles
|
|
84
|
+
WHERE user_id = auth.uid()
|
|
85
|
+
AND role = 'admin'
|
|
86
|
+
)
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
CREATE POLICY "Regular users read-only"
|
|
90
|
+
ON sensitive_data FOR SELECT
|
|
91
|
+
TO authenticated
|
|
92
|
+
USING (
|
|
93
|
+
EXISTS (
|
|
94
|
+
SELECT 1 FROM user_roles
|
|
95
|
+
WHERE user_id = auth.uid()
|
|
96
|
+
AND role = 'user'
|
|
97
|
+
)
|
|
98
|
+
);
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Pattern 4: Public Read, Authenticated Write
|
|
102
|
+
```sql
|
|
103
|
+
-- Anyone can read, only authenticated can write
|
|
104
|
+
CREATE POLICY "Public read access"
|
|
105
|
+
ON public_content FOR SELECT
|
|
106
|
+
TO PUBLIC
|
|
107
|
+
USING (true);
|
|
108
|
+
|
|
109
|
+
CREATE POLICY "Authenticated write access"
|
|
110
|
+
ON public_content FOR INSERT
|
|
111
|
+
TO authenticated
|
|
112
|
+
WITH CHECK (auth.uid() = author_id);
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Pattern 5: Time-Based Access
|
|
116
|
+
```sql
|
|
117
|
+
-- Access expires after a certain date
|
|
118
|
+
CREATE POLICY "Time-limited access"
|
|
119
|
+
ON trial_content FOR SELECT
|
|
120
|
+
TO authenticated
|
|
121
|
+
USING (
|
|
122
|
+
trial_expires_at > now()
|
|
123
|
+
AND user_id = auth.uid()
|
|
124
|
+
);
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## SUPABASE-SPECIFIC PATTERNS
|
|
130
|
+
|
|
131
|
+
### Using auth.uid()
|
|
132
|
+
```sql
|
|
133
|
+
-- Get the current authenticated user's ID
|
|
134
|
+
SELECT auth.uid();
|
|
135
|
+
|
|
136
|
+
-- In policy
|
|
137
|
+
CREATE POLICY "Owner access"
|
|
138
|
+
ON documents FOR ALL
|
|
139
|
+
TO authenticated
|
|
140
|
+
USING (owner_id = auth.uid());
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Using auth.jwt()
|
|
144
|
+
```sql
|
|
145
|
+
-- Access JWT claims
|
|
146
|
+
SELECT auth.jwt() ->> 'email';
|
|
147
|
+
SELECT auth.jwt() -> 'app_metadata' ->> 'role';
|
|
148
|
+
|
|
149
|
+
-- Policy using custom claims
|
|
150
|
+
CREATE POLICY "Premium users only"
|
|
151
|
+
ON premium_content FOR SELECT
|
|
152
|
+
TO authenticated
|
|
153
|
+
USING (
|
|
154
|
+
(auth.jwt() -> 'app_metadata' ->> 'plan') = 'premium'
|
|
155
|
+
);
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Using auth.role()
|
|
159
|
+
```sql
|
|
160
|
+
-- Different policies for different Supabase roles
|
|
161
|
+
CREATE POLICY "Anon can read public"
|
|
162
|
+
ON content FOR SELECT
|
|
163
|
+
TO anon
|
|
164
|
+
USING (is_public = true);
|
|
165
|
+
|
|
166
|
+
CREATE POLICY "Authenticated can read all"
|
|
167
|
+
ON content FOR SELECT
|
|
168
|
+
TO authenticated
|
|
169
|
+
USING (true);
|
|
170
|
+
|
|
171
|
+
CREATE POLICY "Service role bypasses RLS"
|
|
172
|
+
ON content FOR ALL
|
|
173
|
+
TO service_role
|
|
174
|
+
USING (true);
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## PERFORMANCE OPTIMIZATION
|
|
180
|
+
|
|
181
|
+
### Use Indexes for RLS
|
|
182
|
+
```sql
|
|
183
|
+
-- Create index on columns used in RLS policies
|
|
184
|
+
CREATE INDEX idx_posts_user_id ON posts(user_id);
|
|
185
|
+
CREATE INDEX idx_org_members_user_org ON organization_members(user_id, organization_id);
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### Avoid Expensive Subqueries
|
|
189
|
+
```sql
|
|
190
|
+
-- ❌ Bad: Subquery in every row check
|
|
191
|
+
CREATE POLICY "Expensive policy"
|
|
192
|
+
ON documents FOR SELECT
|
|
193
|
+
USING (
|
|
194
|
+
owner_id IN (
|
|
195
|
+
SELECT user_id FROM complex_permissions_view
|
|
196
|
+
WHERE /* complex logic */
|
|
197
|
+
)
|
|
198
|
+
);
|
|
199
|
+
|
|
200
|
+
-- ✅ Better: Use a security definer function
|
|
201
|
+
CREATE OR REPLACE FUNCTION get_accessible_document_ids()
|
|
202
|
+
RETURNS SETOF uuid
|
|
203
|
+
LANGUAGE sql
|
|
204
|
+
SECURITY DEFINER
|
|
205
|
+
STABLE
|
|
206
|
+
AS $$
|
|
207
|
+
SELECT document_id FROM user_document_access
|
|
208
|
+
WHERE user_id = auth.uid()
|
|
209
|
+
$$;
|
|
210
|
+
|
|
211
|
+
CREATE POLICY "Optimized policy"
|
|
212
|
+
ON documents FOR SELECT
|
|
213
|
+
USING (id IN (SELECT get_accessible_document_ids()));
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### Materialized Permissions
|
|
217
|
+
```sql
|
|
218
|
+
-- Pre-compute permissions for complex access patterns
|
|
219
|
+
CREATE TABLE user_document_access (
|
|
220
|
+
user_id uuid REFERENCES auth.users,
|
|
221
|
+
document_id uuid REFERENCES documents,
|
|
222
|
+
PRIMARY KEY (user_id, document_id)
|
|
223
|
+
);
|
|
224
|
+
|
|
225
|
+
CREATE INDEX idx_uda_user ON user_document_access(user_id);
|
|
226
|
+
|
|
227
|
+
-- Simple, fast policy
|
|
228
|
+
CREATE POLICY "Precomputed access"
|
|
229
|
+
ON documents FOR SELECT
|
|
230
|
+
TO authenticated
|
|
231
|
+
USING (
|
|
232
|
+
id IN (
|
|
233
|
+
SELECT document_id FROM user_document_access
|
|
234
|
+
WHERE user_id = auth.uid()
|
|
235
|
+
)
|
|
236
|
+
);
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## SECURITY BEST PRACTICES
|
|
242
|
+
|
|
243
|
+
### Always Enable RLS
|
|
244
|
+
```sql
|
|
245
|
+
-- Check tables without RLS
|
|
246
|
+
SELECT tablename
|
|
247
|
+
FROM pg_tables
|
|
248
|
+
WHERE schemaname = 'public'
|
|
249
|
+
AND tablename NOT IN (
|
|
250
|
+
SELECT tablename FROM pg_policies WHERE schemaname = 'public'
|
|
251
|
+
);
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
### Default Deny
|
|
255
|
+
```sql
|
|
256
|
+
-- Enable RLS = default deny (no access without policy)
|
|
257
|
+
ALTER TABLE sensitive_data ENABLE ROW LEVEL SECURITY;
|
|
258
|
+
|
|
259
|
+
-- Only specific policies grant access
|
|
260
|
+
CREATE POLICY "Explicit access only"
|
|
261
|
+
ON sensitive_data FOR SELECT
|
|
262
|
+
TO authenticated
|
|
263
|
+
USING (/* specific conditions */);
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### Avoid USING (true)
|
|
267
|
+
```sql
|
|
268
|
+
-- ❌ Dangerous: Opens access to all
|
|
269
|
+
CREATE POLICY "Too permissive"
|
|
270
|
+
ON users FOR ALL
|
|
271
|
+
USING (true);
|
|
272
|
+
|
|
273
|
+
-- ✅ Always specify conditions
|
|
274
|
+
CREATE POLICY "Proper restriction"
|
|
275
|
+
ON users FOR SELECT
|
|
276
|
+
TO authenticated
|
|
277
|
+
USING (id = auth.uid() OR is_public = true);
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
### Separate Policies by Operation
|
|
281
|
+
```sql
|
|
282
|
+
-- ✅ Granular control
|
|
283
|
+
CREATE POLICY "Select policy" ON posts FOR SELECT ...;
|
|
284
|
+
CREATE POLICY "Insert policy" ON posts FOR INSERT ...;
|
|
285
|
+
CREATE POLICY "Update policy" ON posts FOR UPDATE ...;
|
|
286
|
+
CREATE POLICY "Delete policy" ON posts FOR DELETE ...;
|
|
287
|
+
|
|
288
|
+
-- ❌ Avoid overly broad policies
|
|
289
|
+
CREATE POLICY "All operations" ON posts FOR ALL ...;
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
## DEBUGGING RLS
|
|
295
|
+
|
|
296
|
+
### Test Policies
|
|
297
|
+
```sql
|
|
298
|
+
-- Check what policies exist
|
|
299
|
+
SELECT * FROM pg_policies WHERE tablename = 'posts';
|
|
300
|
+
|
|
301
|
+
-- Test as specific user (Supabase)
|
|
302
|
+
-- Use the SQL Editor with a specific user's JWT
|
|
303
|
+
|
|
304
|
+
-- Debug query with RLS
|
|
305
|
+
SET ROLE authenticated;
|
|
306
|
+
SET request.jwt.claim.sub = 'user-uuid-here';
|
|
307
|
+
SELECT * FROM posts;
|
|
308
|
+
RESET ROLE;
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
### Common Issues
|
|
312
|
+
1. **No data returned:** Check USING clause conditions
|
|
313
|
+
2. **Can't insert:** Check WITH CHECK clause
|
|
314
|
+
3. **Performance slow:** Add indexes on RLS filter columns
|
|
315
|
+
4. **Bypass needed:** Use service_role (admin only)
|
|
316
|
+
|
|
317
|
+
---
|
|
318
|
+
|
|
319
|
+
## TESTING CHECKLIST
|
|
320
|
+
|
|
321
|
+
- [ ] RLS enabled on all user-facing tables
|
|
322
|
+
- [ ] Policies exist for all CRUD operations
|
|
323
|
+
- [ ] Indexes created for policy filter columns
|
|
324
|
+
- [ ] Tested with different user roles
|
|
325
|
+
- [ ] Tested edge cases (no org, expired trial, etc.)
|
|
326
|
+
- [ ] Performance tested with realistic data volume
|
|
327
|
+
- [ ] service_role access restricted to backend only
|
|
328
|
+
- [ ] No USING (true) on sensitive tables
|
|
329
|
+
|
|
330
|
+
---
|
|
331
|
+
|
|
332
|
+
**Reviewer:** ________ **Date:** ________
|
|
333
|
+
**Security Audit:** [ ] PASS [ ] NEEDS REVIEW
|