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
|
@@ -1,554 +1,554 @@
|
|
|
1
|
-
# Task: Security Audit
|
|
2
|
-
|
|
3
|
-
**Purpose**: Comprehensive database security and quality audit (RLS coverage, schema design, full system)
|
|
4
|
-
|
|
5
|
-
**Elicit**: true
|
|
6
|
-
|
|
7
|
-
**Consolidated From (Story 6.1.2.3):**
|
|
8
|
-
- `db-rls-audit.md` - RLS policy coverage checking
|
|
9
|
-
- `schema-audit.md` - Schema design quality validation
|
|
10
|
-
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
## Execution Modes
|
|
14
|
-
|
|
15
|
-
**Choose your execution mode:**
|
|
16
|
-
|
|
17
|
-
### 1. YOLO Mode - Fast, Autonomous (0-1 prompts)
|
|
18
|
-
- Autonomous decision making with logging
|
|
19
|
-
- Minimal user interaction
|
|
20
|
-
- **Best for:** Simple, deterministic tasks
|
|
21
|
-
|
|
22
|
-
### 2. Interactive Mode - Balanced, Educational (5-10 prompts) **[DEFAULT]**
|
|
23
|
-
- Explicit decision checkpoints
|
|
24
|
-
- Educational explanations
|
|
25
|
-
- **Best for:** Learning, complex decisions
|
|
26
|
-
|
|
27
|
-
### 3. Pre-Flight Planning - Comprehensive Upfront Planning
|
|
28
|
-
- Task analysis phase (identify all ambiguities)
|
|
29
|
-
- Zero ambiguity execution
|
|
30
|
-
- **Best for:** Ambiguous requirements, critical work
|
|
31
|
-
|
|
32
|
-
**Parameter:** `mode` (optional, default: `interactive`)
|
|
33
|
-
|
|
34
|
-
---
|
|
35
|
-
|
|
36
|
-
## Task Definition (AIOS Task Format V1.0)
|
|
37
|
-
|
|
38
|
-
```yaml
|
|
39
|
-
task: securityAudit()
|
|
40
|
-
responsável: Quinn (Guardian)
|
|
41
|
-
responsavel_type: Agente
|
|
42
|
-
atomic_layer: Strategy
|
|
43
|
-
|
|
44
|
-
**Entrada:**
|
|
45
|
-
- campo: target
|
|
46
|
-
tipo: string
|
|
47
|
-
origem: User Input
|
|
48
|
-
obrigatório: true
|
|
49
|
-
validação: Valid path or resource
|
|
50
|
-
|
|
51
|
-
- campo: scan_depth
|
|
52
|
-
tipo: number
|
|
53
|
-
origem: config
|
|
54
|
-
obrigatório: false
|
|
55
|
-
validação: Default: 2 (1-5)
|
|
56
|
-
|
|
57
|
-
- campo: rules
|
|
58
|
-
tipo: array
|
|
59
|
-
origem: config
|
|
60
|
-
obrigatório: true
|
|
61
|
-
validação: Security rule set
|
|
62
|
-
|
|
63
|
-
**Saída:**
|
|
64
|
-
- campo: scan_report
|
|
65
|
-
tipo: object
|
|
66
|
-
destino: File (.ai/security/*)
|
|
67
|
-
persistido: true
|
|
68
|
-
|
|
69
|
-
- campo: vulnerabilities
|
|
70
|
-
tipo: array
|
|
71
|
-
destino: Memory
|
|
72
|
-
persistido: false
|
|
73
|
-
|
|
74
|
-
- campo: risk_score
|
|
75
|
-
tipo: number
|
|
76
|
-
destino: Memory
|
|
77
|
-
persistido: false
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
---
|
|
81
|
-
|
|
82
|
-
## Pre-Conditions
|
|
83
|
-
|
|
84
|
-
**Purpose:** Validate prerequisites BEFORE task execution (blocking)
|
|
85
|
-
|
|
86
|
-
**Checklist:**
|
|
87
|
-
|
|
88
|
-
```yaml
|
|
89
|
-
pre-conditions:
|
|
90
|
-
- [ ] Scanner available; target accessible; rules configured
|
|
91
|
-
tipo: pre-condition
|
|
92
|
-
blocker: true
|
|
93
|
-
validação: |
|
|
94
|
-
Check scanner available; target accessible; rules configured
|
|
95
|
-
error_message: "Pre-condition failed: Scanner available; target accessible; rules configured"
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
---
|
|
99
|
-
|
|
100
|
-
## Post-Conditions
|
|
101
|
-
|
|
102
|
-
**Purpose:** Validate execution success AFTER task completes
|
|
103
|
-
|
|
104
|
-
**Checklist:**
|
|
105
|
-
|
|
106
|
-
```yaml
|
|
107
|
-
post-conditions:
|
|
108
|
-
- [ ] Scan completed; vulnerabilities reported; no scan errors
|
|
109
|
-
tipo: post-condition
|
|
110
|
-
blocker: true
|
|
111
|
-
validação: |
|
|
112
|
-
Verify scan completed; vulnerabilities reported; no scan errors
|
|
113
|
-
error_message: "Post-condition failed: Scan completed; vulnerabilities reported; no scan errors"
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
---
|
|
117
|
-
|
|
118
|
-
## Acceptance Criteria
|
|
119
|
-
|
|
120
|
-
**Purpose:** Definitive pass/fail criteria for task completion
|
|
121
|
-
|
|
122
|
-
**Checklist:**
|
|
123
|
-
|
|
124
|
-
```yaml
|
|
125
|
-
acceptance-criteria:
|
|
126
|
-
- [ ] No critical vulnerabilities; all checks passed
|
|
127
|
-
tipo: acceptance-criterion
|
|
128
|
-
blocker: true
|
|
129
|
-
validação: |
|
|
130
|
-
Assert no critical vulnerabilities; all checks passed
|
|
131
|
-
error_message: "Acceptance criterion not met: No critical vulnerabilities; all checks passed"
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
---
|
|
135
|
-
|
|
136
|
-
## Tools
|
|
137
|
-
|
|
138
|
-
**External/shared resources used by this task:**
|
|
139
|
-
|
|
140
|
-
- **Tool:** security-scanner
|
|
141
|
-
- **Purpose:** Static security analysis and vulnerability detection
|
|
142
|
-
- **Source:** npm: eslint-plugin-security or similar
|
|
143
|
-
|
|
144
|
-
- **Tool:** dependency-checker
|
|
145
|
-
- **Purpose:** Check for vulnerable dependencies
|
|
146
|
-
- **Source:** npm audit or snyk
|
|
147
|
-
|
|
148
|
-
---
|
|
149
|
-
|
|
150
|
-
## Scripts
|
|
151
|
-
|
|
152
|
-
**Agent-specific code for this task:**
|
|
153
|
-
|
|
154
|
-
- **Script:** security-scan.js
|
|
155
|
-
- **Purpose:** Run security scans and generate reports
|
|
156
|
-
- **Language:** JavaScript
|
|
157
|
-
- **Location:** .aios-core/scripts/security-scan.js
|
|
158
|
-
|
|
159
|
-
---
|
|
160
|
-
|
|
161
|
-
## Error Handling
|
|
162
|
-
|
|
163
|
-
**Strategy:** retry
|
|
164
|
-
|
|
165
|
-
**Common Errors:**
|
|
166
|
-
|
|
167
|
-
1. **Error:** Scanner Unavailable
|
|
168
|
-
- **Cause:** Security scanner not installed or failed
|
|
169
|
-
- **Resolution:** Install scanner or check configuration
|
|
170
|
-
- **Recovery:** Skip scan with high-risk warning
|
|
171
|
-
|
|
172
|
-
2. **Error:** Critical Vulnerability Detected
|
|
173
|
-
- **Cause:** High-severity security issue found
|
|
174
|
-
- **Resolution:** Review vulnerability report, apply patches
|
|
175
|
-
- **Recovery:** Block deployment, alert team
|
|
176
|
-
|
|
177
|
-
3. **Error:** Scan Timeout
|
|
178
|
-
- **Cause:** Large codebase exceeds scan time limit
|
|
179
|
-
- **Resolution:** Reduce scope or increase timeout
|
|
180
|
-
- **Recovery:** Partial scan results with warning
|
|
181
|
-
|
|
182
|
-
---
|
|
183
|
-
|
|
184
|
-
## Performance
|
|
185
|
-
|
|
186
|
-
**Expected Metrics:**
|
|
187
|
-
|
|
188
|
-
```yaml
|
|
189
|
-
duration_expected: 5-20 min (estimated)
|
|
190
|
-
cost_estimated: $0.003-0.015
|
|
191
|
-
token_usage: ~2,000-8,000 tokens
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
**Optimization Notes:**
|
|
195
|
-
- Iterative analysis with depth limits; cache intermediate results; batch similar operations
|
|
196
|
-
|
|
197
|
-
---
|
|
198
|
-
|
|
199
|
-
## Metadata
|
|
200
|
-
|
|
201
|
-
```yaml
|
|
202
|
-
story: N/A
|
|
203
|
-
version: 1.0.0
|
|
204
|
-
dependencies:
|
|
205
|
-
- N/A
|
|
206
|
-
tags:
|
|
207
|
-
- security
|
|
208
|
-
- audit
|
|
209
|
-
updated_at: 2025-11-17
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
---
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
## Elicitation
|
|
216
|
-
|
|
217
|
-
**Prompt user to select audit scope:**
|
|
218
|
-
|
|
219
|
-
```
|
|
220
|
-
Select security audit scope:
|
|
221
|
-
|
|
222
|
-
1. **rls** - RLS policy coverage only (quick)
|
|
223
|
-
2. **schema** - Schema design quality only (quick)
|
|
224
|
-
3. **full** - Complete security audit (comprehensive)
|
|
225
|
-
|
|
226
|
-
Which scope? [rls/schema/full]:
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
**Capture:** `{scope}`
|
|
230
|
-
|
|
231
|
-
---
|
|
232
|
-
|
|
233
|
-
## Process
|
|
234
|
-
|
|
235
|
-
### Scope: RLS Audit
|
|
236
|
-
|
|
237
|
-
**When:** User selects `rls` or `full`
|
|
238
|
-
|
|
239
|
-
**Purpose:** Report tables with/without RLS and list all policies
|
|
240
|
-
|
|
241
|
-
```bash
|
|
242
|
-
psql "$SUPABASE_DB_URL" -v ON_ERROR_STOP=1 <<'SQL'
|
|
243
|
-
\echo '=== RLS Coverage Audit ==='
|
|
244
|
-
\echo ''
|
|
245
|
-
|
|
246
|
-
-- Tables with/without RLS
|
|
247
|
-
WITH t AS (
|
|
248
|
-
SELECT tablename, rowsecurity
|
|
249
|
-
FROM pg_tables WHERE schemaname='public'
|
|
250
|
-
)
|
|
251
|
-
SELECT
|
|
252
|
-
tablename,
|
|
253
|
-
CASE WHEN rowsecurity THEN '✓ ENABLED' ELSE '❌ DISABLED' END AS rls_status,
|
|
254
|
-
(SELECT json_agg(json_build_object(
|
|
255
|
-
'policy', policyname,
|
|
256
|
-
'cmd', cmd,
|
|
257
|
-
'roles', roles,
|
|
258
|
-
'qual', qual,
|
|
259
|
-
'with_check', with_check
|
|
260
|
-
))
|
|
261
|
-
FROM pg_policies p
|
|
262
|
-
WHERE p.tablename=t.tablename
|
|
263
|
-
AND p.schemaname='public') AS policies
|
|
264
|
-
FROM t
|
|
265
|
-
ORDER BY rowsecurity DESC, tablename;
|
|
266
|
-
|
|
267
|
-
\echo ''
|
|
268
|
-
\echo '=== RLS Summary ==='
|
|
269
|
-
|
|
270
|
-
SELECT
|
|
271
|
-
COUNT(*) AS total_tables,
|
|
272
|
-
COUNT(*) FILTER (WHERE rowsecurity) AS rls_enabled,
|
|
273
|
-
COUNT(*) FILTER (WHERE NOT rowsecurity) AS rls_disabled
|
|
274
|
-
FROM pg_tables
|
|
275
|
-
WHERE schemaname='public';
|
|
276
|
-
|
|
277
|
-
\echo ''
|
|
278
|
-
\echo '=== Tables Without RLS (Security Risk) ==='
|
|
279
|
-
|
|
280
|
-
SELECT tablename
|
|
281
|
-
FROM pg_tables
|
|
282
|
-
WHERE schemaname='public'
|
|
283
|
-
AND rowsecurity = false
|
|
284
|
-
ORDER BY tablename;
|
|
285
|
-
|
|
286
|
-
\echo ''
|
|
287
|
-
\echo '=== Policy Coverage by Command ==='
|
|
288
|
-
|
|
289
|
-
SELECT
|
|
290
|
-
tablename,
|
|
291
|
-
COUNT(*) FILTER (WHERE cmd='SELECT') AS select_policies,
|
|
292
|
-
COUNT(*) FILTER (WHERE cmd='INSERT') AS insert_policies,
|
|
293
|
-
COUNT(*) FILTER (WHERE cmd='UPDATE') AS update_policies,
|
|
294
|
-
COUNT(*) FILTER (WHERE cmd='DELETE') AS delete_policies
|
|
295
|
-
FROM pg_policies
|
|
296
|
-
WHERE schemaname='public'
|
|
297
|
-
GROUP BY tablename
|
|
298
|
-
ORDER BY tablename;
|
|
299
|
-
|
|
300
|
-
SQL
|
|
301
|
-
```
|
|
302
|
-
|
|
303
|
-
---
|
|
304
|
-
|
|
305
|
-
### Scope: Schema Audit
|
|
306
|
-
|
|
307
|
-
**When:** User selects `schema` or `full`
|
|
308
|
-
|
|
309
|
-
**Purpose:** Validate schema design quality and best practices
|
|
310
|
-
|
|
311
|
-
```bash
|
|
312
|
-
psql "$SUPABASE_DB_URL" -v ON_ERROR_STOP=1 <<'SQL'
|
|
313
|
-
\echo '=== Schema Design Quality Audit ==='
|
|
314
|
-
\echo ''
|
|
315
|
-
|
|
316
|
-
-- Missing Primary Keys
|
|
317
|
-
\echo '1. Tables Without Primary Keys (CRITICAL):'
|
|
318
|
-
SELECT t.tablename
|
|
319
|
-
FROM pg_tables t
|
|
320
|
-
LEFT JOIN pg_constraint c ON c.conrelid = (t.schemaname||'.'||t.tablename)::regclass
|
|
321
|
-
AND c.contype = 'p'
|
|
322
|
-
WHERE t.schemaname = 'public'
|
|
323
|
-
AND c.conname IS NULL
|
|
324
|
-
ORDER BY t.tablename;
|
|
325
|
-
|
|
326
|
-
\echo ''
|
|
327
|
-
\echo '2. Missing NOT NULL on Required Fields:'
|
|
328
|
-
SELECT
|
|
329
|
-
table_name,
|
|
330
|
-
column_name,
|
|
331
|
-
data_type
|
|
332
|
-
FROM information_schema.columns
|
|
333
|
-
WHERE table_schema = 'public'
|
|
334
|
-
AND is_nullable = 'YES'
|
|
335
|
-
AND column_name IN ('email', 'user_id', 'created_at', 'updated_at', 'status')
|
|
336
|
-
ORDER BY table_name, column_name;
|
|
337
|
-
|
|
338
|
-
\echo ''
|
|
339
|
-
\echo '3. Missing Foreign Key Constraints:'
|
|
340
|
-
-- Tables with _id columns but no FK
|
|
341
|
-
SELECT
|
|
342
|
-
c.table_name,
|
|
343
|
-
c.column_name,
|
|
344
|
-
'Missing FK to ' || REPLACE(c.column_name, '_id', 's') AS suggestion
|
|
345
|
-
FROM information_schema.columns c
|
|
346
|
-
LEFT JOIN information_schema.table_constraints tc
|
|
347
|
-
ON tc.table_name = c.table_name
|
|
348
|
-
AND tc.constraint_type = 'FOREIGN KEY'
|
|
349
|
-
LEFT JOIN information_schema.key_column_usage kcu
|
|
350
|
-
ON kcu.constraint_name = tc.constraint_name
|
|
351
|
-
AND kcu.column_name = c.column_name
|
|
352
|
-
WHERE c.table_schema = 'public'
|
|
353
|
-
AND c.column_name LIKE '%_id'
|
|
354
|
-
AND c.column_name != 'id'
|
|
355
|
-
AND kcu.column_name IS NULL
|
|
356
|
-
ORDER BY c.table_name, c.column_name;
|
|
357
|
-
|
|
358
|
-
\echo ''
|
|
359
|
-
\echo '4. Missing Audit Timestamps (created_at, updated_at):'
|
|
360
|
-
SELECT
|
|
361
|
-
t.tablename,
|
|
362
|
-
CASE WHEN created_col.column_name IS NULL THEN '❌ No created_at' ELSE '✓' END AS created,
|
|
363
|
-
CASE WHEN updated_col.column_name IS NULL THEN '❌ No updated_at' ELSE '✓' END AS updated
|
|
364
|
-
FROM pg_tables t
|
|
365
|
-
LEFT JOIN information_schema.columns created_col
|
|
366
|
-
ON created_col.table_name = t.tablename
|
|
367
|
-
AND created_col.column_name = 'created_at'
|
|
368
|
-
AND created_col.table_schema = 'public'
|
|
369
|
-
LEFT JOIN information_schema.columns updated_col
|
|
370
|
-
ON updated_col.table_name = t.tablename
|
|
371
|
-
AND updated_col.column_name = 'updated_at'
|
|
372
|
-
AND updated_col.table_schema = 'public'
|
|
373
|
-
WHERE t.schemaname = 'public'
|
|
374
|
-
AND (created_col.column_name IS NULL OR updated_col.column_name IS NULL)
|
|
375
|
-
ORDER BY t.tablename;
|
|
376
|
-
|
|
377
|
-
\echo ''
|
|
378
|
-
\echo '5. Missing Indexes on Foreign Keys:'
|
|
379
|
-
SELECT
|
|
380
|
-
t.tablename,
|
|
381
|
-
c.column_name,
|
|
382
|
-
'CREATE INDEX idx_' || t.tablename || '_' || c.column_name || ' ON ' || t.tablename || '(' || c.column_name || ');' AS suggested_index
|
|
383
|
-
FROM pg_tables t
|
|
384
|
-
JOIN information_schema.columns c ON c.table_name = t.tablename
|
|
385
|
-
LEFT JOIN pg_indexes i ON i.tablename = t.tablename
|
|
386
|
-
AND i.indexdef LIKE '%' || c.column_name || '%'
|
|
387
|
-
WHERE t.schemaname = 'public'
|
|
388
|
-
AND c.table_schema = 'public'
|
|
389
|
-
AND c.column_name LIKE '%_id'
|
|
390
|
-
AND c.column_name != 'id'
|
|
391
|
-
AND i.indexname IS NULL
|
|
392
|
-
ORDER BY t.tablename, c.column_name;
|
|
393
|
-
|
|
394
|
-
\echo ''
|
|
395
|
-
\echo '=== Schema Audit Summary ==='
|
|
396
|
-
SELECT
|
|
397
|
-
(SELECT COUNT(*) FROM pg_tables WHERE schemaname='public') AS total_tables,
|
|
398
|
-
(SELECT COUNT(DISTINCT tablename) FROM pg_policies WHERE schemaname='public') AS tables_with_policies,
|
|
399
|
-
(SELECT COUNT(*) FROM pg_constraint WHERE contype='f') AS foreign_keys,
|
|
400
|
-
(SELECT COUNT(*) FROM pg_indexes WHERE schemaname='public') AS total_indexes;
|
|
401
|
-
|
|
402
|
-
SQL
|
|
403
|
-
```
|
|
404
|
-
|
|
405
|
-
---
|
|
406
|
-
|
|
407
|
-
### Scope: Full Audit
|
|
408
|
-
|
|
409
|
-
**When:** User selects `full`
|
|
410
|
-
|
|
411
|
-
**Executes:** Both RLS audit + Schema audit sequentially
|
|
412
|
-
|
|
413
|
-
**Additional Checks:**
|
|
414
|
-
|
|
415
|
-
```bash
|
|
416
|
-
psql "$SUPABASE_DB_URL" -v ON_ERROR_STOP=1 <<'SQL'
|
|
417
|
-
\echo ''
|
|
418
|
-
\echo '=== Security Best Practices Check ==='
|
|
419
|
-
\echo ''
|
|
420
|
-
|
|
421
|
-
-- Check for sensitive data exposure
|
|
422
|
-
\echo '6. Potential PII/Sensitive Columns (Review for RLS):'
|
|
423
|
-
SELECT
|
|
424
|
-
table_name,
|
|
425
|
-
column_name,
|
|
426
|
-
data_type
|
|
427
|
-
FROM information_schema.columns
|
|
428
|
-
WHERE table_schema = 'public'
|
|
429
|
-
AND (
|
|
430
|
-
column_name ILIKE '%password%'
|
|
431
|
-
OR column_name ILIKE '%token%'
|
|
432
|
-
OR column_name ILIKE '%secret%'
|
|
433
|
-
OR column_name ILIKE '%ssn%'
|
|
434
|
-
OR column_name ILIKE '%credit%'
|
|
435
|
-
OR column_name ILIKE '%api_key%'
|
|
436
|
-
)
|
|
437
|
-
ORDER BY table_name, column_name;
|
|
438
|
-
|
|
439
|
-
\echo ''
|
|
440
|
-
\echo '7. Public Schema Permissions:'
|
|
441
|
-
SELECT
|
|
442
|
-
schemaname,
|
|
443
|
-
tablename,
|
|
444
|
-
tableowner,
|
|
445
|
-
hasindexes,
|
|
446
|
-
hasrules,
|
|
447
|
-
hastriggers
|
|
448
|
-
FROM pg_tables
|
|
449
|
-
WHERE schemaname = 'public'
|
|
450
|
-
ORDER BY tablename;
|
|
451
|
-
|
|
452
|
-
SQL
|
|
453
|
-
```
|
|
454
|
-
|
|
455
|
-
---
|
|
456
|
-
|
|
457
|
-
## Output
|
|
458
|
-
|
|
459
|
-
### RLS Audit Output
|
|
460
|
-
|
|
461
|
-
```
|
|
462
|
-
=== RLS Coverage Audit ===
|
|
463
|
-
|
|
464
|
-
tablename | rls_status | policies
|
|
465
|
-
-----------+------------+-------------------------------
|
|
466
|
-
users | ✓ ENABLED | [{"policy":"Users read own",...}]
|
|
467
|
-
posts | ✓ ENABLED | [{"policy":"Public read",...}]
|
|
468
|
-
secrets | ❌ DISABLED| null
|
|
469
|
-
|
|
470
|
-
=== RLS Summary ===
|
|
471
|
-
|
|
472
|
-
total_tables | rls_enabled | rls_disabled
|
|
473
|
-
--------------+-------------+--------------
|
|
474
|
-
10 | 8 | 2
|
|
475
|
-
|
|
476
|
-
=== Tables Without RLS (Security Risk) ===
|
|
477
|
-
|
|
478
|
-
tablename
|
|
479
|
-
-----------
|
|
480
|
-
secrets
|
|
481
|
-
internal_logs
|
|
482
|
-
```
|
|
483
|
-
|
|
484
|
-
### Schema Audit Output
|
|
485
|
-
|
|
486
|
-
```
|
|
487
|
-
=== Schema Design Quality Audit ===
|
|
488
|
-
|
|
489
|
-
1. Tables Without Primary Keys (CRITICAL):
|
|
490
|
-
tablename
|
|
491
|
-
-----------
|
|
492
|
-
(0 rows) ✓
|
|
493
|
-
|
|
494
|
-
2. Missing NOT NULL on Required Fields:
|
|
495
|
-
table_name | column_name | data_type
|
|
496
|
-
------------+-------------+-----------
|
|
497
|
-
users | email | text
|
|
498
|
-
|
|
499
|
-
3. Missing Foreign Key Constraints:
|
|
500
|
-
table_name | column_name | suggestion
|
|
501
|
-
------------+-------------+----------------------
|
|
502
|
-
posts | user_id | Missing FK to users
|
|
503
|
-
|
|
504
|
-
... (additional checks)
|
|
505
|
-
```
|
|
506
|
-
|
|
507
|
-
---
|
|
508
|
-
|
|
509
|
-
## Interpretation
|
|
510
|
-
|
|
511
|
-
### Critical Issues (Fix Immediately)
|
|
512
|
-
|
|
513
|
-
- **RLS Disabled:** Tables without RLS are publicly accessible
|
|
514
|
-
- **No Primary Keys:** Data integrity at risk
|
|
515
|
-
- **Sensitive Columns Exposed:** PII/secrets without RLS protection
|
|
516
|
-
|
|
517
|
-
### High Priority Issues (Fix Soon)
|
|
518
|
-
|
|
519
|
-
- **Missing Foreign Keys:** Data integrity and query performance
|
|
520
|
-
- **Missing NOT NULL:** Data quality issues
|
|
521
|
-
- **Missing Indexes on FKs:** Query performance degradation
|
|
522
|
-
|
|
523
|
-
### Medium Priority Issues (Technical Debt)
|
|
524
|
-
|
|
525
|
-
- **Missing Audit Timestamps:** Tracking challenges
|
|
526
|
-
- **Inconsistent Naming:** Maintainability issues
|
|
527
|
-
|
|
528
|
-
---
|
|
529
|
-
|
|
530
|
-
## Recommendations
|
|
531
|
-
|
|
532
|
-
**After RLS Audit:**
|
|
533
|
-
1. Enable RLS on all public tables: `ALTER TABLE {table} ENABLE ROW LEVEL SECURITY;`
|
|
534
|
-
2. Create policies for all CRUD operations (use `*policy-apply` command)
|
|
535
|
-
3. Test with `*test-as-user` command
|
|
536
|
-
|
|
537
|
-
**After Schema Audit:**
|
|
538
|
-
1. Add missing primary keys: `ALTER TABLE {table} ADD PRIMARY KEY (id);`
|
|
539
|
-
2. Add missing foreign keys: `ALTER TABLE {table} ADD FOREIGN KEY ({col}) REFERENCES {ref_table}(id);`
|
|
540
|
-
3. Add missing NOT NULL: `ALTER TABLE {table} ALTER COLUMN {col} SET NOT NULL;`
|
|
541
|
-
4. Create indexes on foreign keys: `CREATE INDEX idx_{table}_{col} ON {table}({col});`
|
|
542
|
-
|
|
543
|
-
---
|
|
544
|
-
|
|
545
|
-
## Related Commands
|
|
546
|
-
|
|
547
|
-
- `*policy-apply {table} {mode}` - Install RLS policies after audit
|
|
548
|
-
- `*test-as-user {user_id}` - Test RLS policies
|
|
549
|
-
- `*verify-order {migration}` - Validate migration DDL ordering
|
|
550
|
-
- `*create-migration-plan` - Plan schema changes
|
|
551
|
-
|
|
552
|
-
---
|
|
553
|
-
|
|
554
|
-
**Note:** This consolidated task replaces `db-rls-audit.md` and `schema-audit.md` (deprecated in v3.0)
|
|
1
|
+
# Task: Security Audit
|
|
2
|
+
|
|
3
|
+
**Purpose**: Comprehensive database security and quality audit (RLS coverage, schema design, full system)
|
|
4
|
+
|
|
5
|
+
**Elicit**: true
|
|
6
|
+
|
|
7
|
+
**Consolidated From (Story 6.1.2.3):**
|
|
8
|
+
- `db-rls-audit.md` - RLS policy coverage checking
|
|
9
|
+
- `schema-audit.md` - Schema design quality validation
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Execution Modes
|
|
14
|
+
|
|
15
|
+
**Choose your execution mode:**
|
|
16
|
+
|
|
17
|
+
### 1. YOLO Mode - Fast, Autonomous (0-1 prompts)
|
|
18
|
+
- Autonomous decision making with logging
|
|
19
|
+
- Minimal user interaction
|
|
20
|
+
- **Best for:** Simple, deterministic tasks
|
|
21
|
+
|
|
22
|
+
### 2. Interactive Mode - Balanced, Educational (5-10 prompts) **[DEFAULT]**
|
|
23
|
+
- Explicit decision checkpoints
|
|
24
|
+
- Educational explanations
|
|
25
|
+
- **Best for:** Learning, complex decisions
|
|
26
|
+
|
|
27
|
+
### 3. Pre-Flight Planning - Comprehensive Upfront Planning
|
|
28
|
+
- Task analysis phase (identify all ambiguities)
|
|
29
|
+
- Zero ambiguity execution
|
|
30
|
+
- **Best for:** Ambiguous requirements, critical work
|
|
31
|
+
|
|
32
|
+
**Parameter:** `mode` (optional, default: `interactive`)
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Task Definition (AIOS Task Format V1.0)
|
|
37
|
+
|
|
38
|
+
```yaml
|
|
39
|
+
task: securityAudit()
|
|
40
|
+
responsável: Quinn (Guardian)
|
|
41
|
+
responsavel_type: Agente
|
|
42
|
+
atomic_layer: Strategy
|
|
43
|
+
|
|
44
|
+
**Entrada:**
|
|
45
|
+
- campo: target
|
|
46
|
+
tipo: string
|
|
47
|
+
origem: User Input
|
|
48
|
+
obrigatório: true
|
|
49
|
+
validação: Valid path or resource
|
|
50
|
+
|
|
51
|
+
- campo: scan_depth
|
|
52
|
+
tipo: number
|
|
53
|
+
origem: config
|
|
54
|
+
obrigatório: false
|
|
55
|
+
validação: Default: 2 (1-5)
|
|
56
|
+
|
|
57
|
+
- campo: rules
|
|
58
|
+
tipo: array
|
|
59
|
+
origem: config
|
|
60
|
+
obrigatório: true
|
|
61
|
+
validação: Security rule set
|
|
62
|
+
|
|
63
|
+
**Saída:**
|
|
64
|
+
- campo: scan_report
|
|
65
|
+
tipo: object
|
|
66
|
+
destino: File (.ai/security/*)
|
|
67
|
+
persistido: true
|
|
68
|
+
|
|
69
|
+
- campo: vulnerabilities
|
|
70
|
+
tipo: array
|
|
71
|
+
destino: Memory
|
|
72
|
+
persistido: false
|
|
73
|
+
|
|
74
|
+
- campo: risk_score
|
|
75
|
+
tipo: number
|
|
76
|
+
destino: Memory
|
|
77
|
+
persistido: false
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Pre-Conditions
|
|
83
|
+
|
|
84
|
+
**Purpose:** Validate prerequisites BEFORE task execution (blocking)
|
|
85
|
+
|
|
86
|
+
**Checklist:**
|
|
87
|
+
|
|
88
|
+
```yaml
|
|
89
|
+
pre-conditions:
|
|
90
|
+
- [ ] Scanner available; target accessible; rules configured
|
|
91
|
+
tipo: pre-condition
|
|
92
|
+
blocker: true
|
|
93
|
+
validação: |
|
|
94
|
+
Check scanner available; target accessible; rules configured
|
|
95
|
+
error_message: "Pre-condition failed: Scanner available; target accessible; rules configured"
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## Post-Conditions
|
|
101
|
+
|
|
102
|
+
**Purpose:** Validate execution success AFTER task completes
|
|
103
|
+
|
|
104
|
+
**Checklist:**
|
|
105
|
+
|
|
106
|
+
```yaml
|
|
107
|
+
post-conditions:
|
|
108
|
+
- [ ] Scan completed; vulnerabilities reported; no scan errors
|
|
109
|
+
tipo: post-condition
|
|
110
|
+
blocker: true
|
|
111
|
+
validação: |
|
|
112
|
+
Verify scan completed; vulnerabilities reported; no scan errors
|
|
113
|
+
error_message: "Post-condition failed: Scan completed; vulnerabilities reported; no scan errors"
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Acceptance Criteria
|
|
119
|
+
|
|
120
|
+
**Purpose:** Definitive pass/fail criteria for task completion
|
|
121
|
+
|
|
122
|
+
**Checklist:**
|
|
123
|
+
|
|
124
|
+
```yaml
|
|
125
|
+
acceptance-criteria:
|
|
126
|
+
- [ ] No critical vulnerabilities; all checks passed
|
|
127
|
+
tipo: acceptance-criterion
|
|
128
|
+
blocker: true
|
|
129
|
+
validação: |
|
|
130
|
+
Assert no critical vulnerabilities; all checks passed
|
|
131
|
+
error_message: "Acceptance criterion not met: No critical vulnerabilities; all checks passed"
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## Tools
|
|
137
|
+
|
|
138
|
+
**External/shared resources used by this task:**
|
|
139
|
+
|
|
140
|
+
- **Tool:** security-scanner
|
|
141
|
+
- **Purpose:** Static security analysis and vulnerability detection
|
|
142
|
+
- **Source:** npm: eslint-plugin-security or similar
|
|
143
|
+
|
|
144
|
+
- **Tool:** dependency-checker
|
|
145
|
+
- **Purpose:** Check for vulnerable dependencies
|
|
146
|
+
- **Source:** npm audit or snyk
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## Scripts
|
|
151
|
+
|
|
152
|
+
**Agent-specific code for this task:**
|
|
153
|
+
|
|
154
|
+
- **Script:** security-scan.js
|
|
155
|
+
- **Purpose:** Run security scans and generate reports
|
|
156
|
+
- **Language:** JavaScript
|
|
157
|
+
- **Location:** .aios-core/scripts/security-scan.js
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## Error Handling
|
|
162
|
+
|
|
163
|
+
**Strategy:** retry
|
|
164
|
+
|
|
165
|
+
**Common Errors:**
|
|
166
|
+
|
|
167
|
+
1. **Error:** Scanner Unavailable
|
|
168
|
+
- **Cause:** Security scanner not installed or failed
|
|
169
|
+
- **Resolution:** Install scanner or check configuration
|
|
170
|
+
- **Recovery:** Skip scan with high-risk warning
|
|
171
|
+
|
|
172
|
+
2. **Error:** Critical Vulnerability Detected
|
|
173
|
+
- **Cause:** High-severity security issue found
|
|
174
|
+
- **Resolution:** Review vulnerability report, apply patches
|
|
175
|
+
- **Recovery:** Block deployment, alert team
|
|
176
|
+
|
|
177
|
+
3. **Error:** Scan Timeout
|
|
178
|
+
- **Cause:** Large codebase exceeds scan time limit
|
|
179
|
+
- **Resolution:** Reduce scope or increase timeout
|
|
180
|
+
- **Recovery:** Partial scan results with warning
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## Performance
|
|
185
|
+
|
|
186
|
+
**Expected Metrics:**
|
|
187
|
+
|
|
188
|
+
```yaml
|
|
189
|
+
duration_expected: 5-20 min (estimated)
|
|
190
|
+
cost_estimated: $0.003-0.015
|
|
191
|
+
token_usage: ~2,000-8,000 tokens
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
**Optimization Notes:**
|
|
195
|
+
- Iterative analysis with depth limits; cache intermediate results; batch similar operations
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## Metadata
|
|
200
|
+
|
|
201
|
+
```yaml
|
|
202
|
+
story: N/A
|
|
203
|
+
version: 1.0.0
|
|
204
|
+
dependencies:
|
|
205
|
+
- N/A
|
|
206
|
+
tags:
|
|
207
|
+
- security
|
|
208
|
+
- audit
|
|
209
|
+
updated_at: 2025-11-17
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
## Elicitation
|
|
216
|
+
|
|
217
|
+
**Prompt user to select audit scope:**
|
|
218
|
+
|
|
219
|
+
```
|
|
220
|
+
Select security audit scope:
|
|
221
|
+
|
|
222
|
+
1. **rls** - RLS policy coverage only (quick)
|
|
223
|
+
2. **schema** - Schema design quality only (quick)
|
|
224
|
+
3. **full** - Complete security audit (comprehensive)
|
|
225
|
+
|
|
226
|
+
Which scope? [rls/schema/full]:
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
**Capture:** `{scope}`
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## Process
|
|
234
|
+
|
|
235
|
+
### Scope: RLS Audit
|
|
236
|
+
|
|
237
|
+
**When:** User selects `rls` or `full`
|
|
238
|
+
|
|
239
|
+
**Purpose:** Report tables with/without RLS and list all policies
|
|
240
|
+
|
|
241
|
+
```bash
|
|
242
|
+
psql "$SUPABASE_DB_URL" -v ON_ERROR_STOP=1 <<'SQL'
|
|
243
|
+
\echo '=== RLS Coverage Audit ==='
|
|
244
|
+
\echo ''
|
|
245
|
+
|
|
246
|
+
-- Tables with/without RLS
|
|
247
|
+
WITH t AS (
|
|
248
|
+
SELECT tablename, rowsecurity
|
|
249
|
+
FROM pg_tables WHERE schemaname='public'
|
|
250
|
+
)
|
|
251
|
+
SELECT
|
|
252
|
+
tablename,
|
|
253
|
+
CASE WHEN rowsecurity THEN '✓ ENABLED' ELSE '❌ DISABLED' END AS rls_status,
|
|
254
|
+
(SELECT json_agg(json_build_object(
|
|
255
|
+
'policy', policyname,
|
|
256
|
+
'cmd', cmd,
|
|
257
|
+
'roles', roles,
|
|
258
|
+
'qual', qual,
|
|
259
|
+
'with_check', with_check
|
|
260
|
+
))
|
|
261
|
+
FROM pg_policies p
|
|
262
|
+
WHERE p.tablename=t.tablename
|
|
263
|
+
AND p.schemaname='public') AS policies
|
|
264
|
+
FROM t
|
|
265
|
+
ORDER BY rowsecurity DESC, tablename;
|
|
266
|
+
|
|
267
|
+
\echo ''
|
|
268
|
+
\echo '=== RLS Summary ==='
|
|
269
|
+
|
|
270
|
+
SELECT
|
|
271
|
+
COUNT(*) AS total_tables,
|
|
272
|
+
COUNT(*) FILTER (WHERE rowsecurity) AS rls_enabled,
|
|
273
|
+
COUNT(*) FILTER (WHERE NOT rowsecurity) AS rls_disabled
|
|
274
|
+
FROM pg_tables
|
|
275
|
+
WHERE schemaname='public';
|
|
276
|
+
|
|
277
|
+
\echo ''
|
|
278
|
+
\echo '=== Tables Without RLS (Security Risk) ==='
|
|
279
|
+
|
|
280
|
+
SELECT tablename
|
|
281
|
+
FROM pg_tables
|
|
282
|
+
WHERE schemaname='public'
|
|
283
|
+
AND rowsecurity = false
|
|
284
|
+
ORDER BY tablename;
|
|
285
|
+
|
|
286
|
+
\echo ''
|
|
287
|
+
\echo '=== Policy Coverage by Command ==='
|
|
288
|
+
|
|
289
|
+
SELECT
|
|
290
|
+
tablename,
|
|
291
|
+
COUNT(*) FILTER (WHERE cmd='SELECT') AS select_policies,
|
|
292
|
+
COUNT(*) FILTER (WHERE cmd='INSERT') AS insert_policies,
|
|
293
|
+
COUNT(*) FILTER (WHERE cmd='UPDATE') AS update_policies,
|
|
294
|
+
COUNT(*) FILTER (WHERE cmd='DELETE') AS delete_policies
|
|
295
|
+
FROM pg_policies
|
|
296
|
+
WHERE schemaname='public'
|
|
297
|
+
GROUP BY tablename
|
|
298
|
+
ORDER BY tablename;
|
|
299
|
+
|
|
300
|
+
SQL
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
---
|
|
304
|
+
|
|
305
|
+
### Scope: Schema Audit
|
|
306
|
+
|
|
307
|
+
**When:** User selects `schema` or `full`
|
|
308
|
+
|
|
309
|
+
**Purpose:** Validate schema design quality and best practices
|
|
310
|
+
|
|
311
|
+
```bash
|
|
312
|
+
psql "$SUPABASE_DB_URL" -v ON_ERROR_STOP=1 <<'SQL'
|
|
313
|
+
\echo '=== Schema Design Quality Audit ==='
|
|
314
|
+
\echo ''
|
|
315
|
+
|
|
316
|
+
-- Missing Primary Keys
|
|
317
|
+
\echo '1. Tables Without Primary Keys (CRITICAL):'
|
|
318
|
+
SELECT t.tablename
|
|
319
|
+
FROM pg_tables t
|
|
320
|
+
LEFT JOIN pg_constraint c ON c.conrelid = (t.schemaname||'.'||t.tablename)::regclass
|
|
321
|
+
AND c.contype = 'p'
|
|
322
|
+
WHERE t.schemaname = 'public'
|
|
323
|
+
AND c.conname IS NULL
|
|
324
|
+
ORDER BY t.tablename;
|
|
325
|
+
|
|
326
|
+
\echo ''
|
|
327
|
+
\echo '2. Missing NOT NULL on Required Fields:'
|
|
328
|
+
SELECT
|
|
329
|
+
table_name,
|
|
330
|
+
column_name,
|
|
331
|
+
data_type
|
|
332
|
+
FROM information_schema.columns
|
|
333
|
+
WHERE table_schema = 'public'
|
|
334
|
+
AND is_nullable = 'YES'
|
|
335
|
+
AND column_name IN ('email', 'user_id', 'created_at', 'updated_at', 'status')
|
|
336
|
+
ORDER BY table_name, column_name;
|
|
337
|
+
|
|
338
|
+
\echo ''
|
|
339
|
+
\echo '3. Missing Foreign Key Constraints:'
|
|
340
|
+
-- Tables with _id columns but no FK
|
|
341
|
+
SELECT
|
|
342
|
+
c.table_name,
|
|
343
|
+
c.column_name,
|
|
344
|
+
'Missing FK to ' || REPLACE(c.column_name, '_id', 's') AS suggestion
|
|
345
|
+
FROM information_schema.columns c
|
|
346
|
+
LEFT JOIN information_schema.table_constraints tc
|
|
347
|
+
ON tc.table_name = c.table_name
|
|
348
|
+
AND tc.constraint_type = 'FOREIGN KEY'
|
|
349
|
+
LEFT JOIN information_schema.key_column_usage kcu
|
|
350
|
+
ON kcu.constraint_name = tc.constraint_name
|
|
351
|
+
AND kcu.column_name = c.column_name
|
|
352
|
+
WHERE c.table_schema = 'public'
|
|
353
|
+
AND c.column_name LIKE '%_id'
|
|
354
|
+
AND c.column_name != 'id'
|
|
355
|
+
AND kcu.column_name IS NULL
|
|
356
|
+
ORDER BY c.table_name, c.column_name;
|
|
357
|
+
|
|
358
|
+
\echo ''
|
|
359
|
+
\echo '4. Missing Audit Timestamps (created_at, updated_at):'
|
|
360
|
+
SELECT
|
|
361
|
+
t.tablename,
|
|
362
|
+
CASE WHEN created_col.column_name IS NULL THEN '❌ No created_at' ELSE '✓' END AS created,
|
|
363
|
+
CASE WHEN updated_col.column_name IS NULL THEN '❌ No updated_at' ELSE '✓' END AS updated
|
|
364
|
+
FROM pg_tables t
|
|
365
|
+
LEFT JOIN information_schema.columns created_col
|
|
366
|
+
ON created_col.table_name = t.tablename
|
|
367
|
+
AND created_col.column_name = 'created_at'
|
|
368
|
+
AND created_col.table_schema = 'public'
|
|
369
|
+
LEFT JOIN information_schema.columns updated_col
|
|
370
|
+
ON updated_col.table_name = t.tablename
|
|
371
|
+
AND updated_col.column_name = 'updated_at'
|
|
372
|
+
AND updated_col.table_schema = 'public'
|
|
373
|
+
WHERE t.schemaname = 'public'
|
|
374
|
+
AND (created_col.column_name IS NULL OR updated_col.column_name IS NULL)
|
|
375
|
+
ORDER BY t.tablename;
|
|
376
|
+
|
|
377
|
+
\echo ''
|
|
378
|
+
\echo '5. Missing Indexes on Foreign Keys:'
|
|
379
|
+
SELECT
|
|
380
|
+
t.tablename,
|
|
381
|
+
c.column_name,
|
|
382
|
+
'CREATE INDEX idx_' || t.tablename || '_' || c.column_name || ' ON ' || t.tablename || '(' || c.column_name || ');' AS suggested_index
|
|
383
|
+
FROM pg_tables t
|
|
384
|
+
JOIN information_schema.columns c ON c.table_name = t.tablename
|
|
385
|
+
LEFT JOIN pg_indexes i ON i.tablename = t.tablename
|
|
386
|
+
AND i.indexdef LIKE '%' || c.column_name || '%'
|
|
387
|
+
WHERE t.schemaname = 'public'
|
|
388
|
+
AND c.table_schema = 'public'
|
|
389
|
+
AND c.column_name LIKE '%_id'
|
|
390
|
+
AND c.column_name != 'id'
|
|
391
|
+
AND i.indexname IS NULL
|
|
392
|
+
ORDER BY t.tablename, c.column_name;
|
|
393
|
+
|
|
394
|
+
\echo ''
|
|
395
|
+
\echo '=== Schema Audit Summary ==='
|
|
396
|
+
SELECT
|
|
397
|
+
(SELECT COUNT(*) FROM pg_tables WHERE schemaname='public') AS total_tables,
|
|
398
|
+
(SELECT COUNT(DISTINCT tablename) FROM pg_policies WHERE schemaname='public') AS tables_with_policies,
|
|
399
|
+
(SELECT COUNT(*) FROM pg_constraint WHERE contype='f') AS foreign_keys,
|
|
400
|
+
(SELECT COUNT(*) FROM pg_indexes WHERE schemaname='public') AS total_indexes;
|
|
401
|
+
|
|
402
|
+
SQL
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
---
|
|
406
|
+
|
|
407
|
+
### Scope: Full Audit
|
|
408
|
+
|
|
409
|
+
**When:** User selects `full`
|
|
410
|
+
|
|
411
|
+
**Executes:** Both RLS audit + Schema audit sequentially
|
|
412
|
+
|
|
413
|
+
**Additional Checks:**
|
|
414
|
+
|
|
415
|
+
```bash
|
|
416
|
+
psql "$SUPABASE_DB_URL" -v ON_ERROR_STOP=1 <<'SQL'
|
|
417
|
+
\echo ''
|
|
418
|
+
\echo '=== Security Best Practices Check ==='
|
|
419
|
+
\echo ''
|
|
420
|
+
|
|
421
|
+
-- Check for sensitive data exposure
|
|
422
|
+
\echo '6. Potential PII/Sensitive Columns (Review for RLS):'
|
|
423
|
+
SELECT
|
|
424
|
+
table_name,
|
|
425
|
+
column_name,
|
|
426
|
+
data_type
|
|
427
|
+
FROM information_schema.columns
|
|
428
|
+
WHERE table_schema = 'public'
|
|
429
|
+
AND (
|
|
430
|
+
column_name ILIKE '%password%'
|
|
431
|
+
OR column_name ILIKE '%token%'
|
|
432
|
+
OR column_name ILIKE '%secret%'
|
|
433
|
+
OR column_name ILIKE '%ssn%'
|
|
434
|
+
OR column_name ILIKE '%credit%'
|
|
435
|
+
OR column_name ILIKE '%api_key%'
|
|
436
|
+
)
|
|
437
|
+
ORDER BY table_name, column_name;
|
|
438
|
+
|
|
439
|
+
\echo ''
|
|
440
|
+
\echo '7. Public Schema Permissions:'
|
|
441
|
+
SELECT
|
|
442
|
+
schemaname,
|
|
443
|
+
tablename,
|
|
444
|
+
tableowner,
|
|
445
|
+
hasindexes,
|
|
446
|
+
hasrules,
|
|
447
|
+
hastriggers
|
|
448
|
+
FROM pg_tables
|
|
449
|
+
WHERE schemaname = 'public'
|
|
450
|
+
ORDER BY tablename;
|
|
451
|
+
|
|
452
|
+
SQL
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
---
|
|
456
|
+
|
|
457
|
+
## Output
|
|
458
|
+
|
|
459
|
+
### RLS Audit Output
|
|
460
|
+
|
|
461
|
+
```
|
|
462
|
+
=== RLS Coverage Audit ===
|
|
463
|
+
|
|
464
|
+
tablename | rls_status | policies
|
|
465
|
+
-----------+------------+-------------------------------
|
|
466
|
+
users | ✓ ENABLED | [{"policy":"Users read own",...}]
|
|
467
|
+
posts | ✓ ENABLED | [{"policy":"Public read",...}]
|
|
468
|
+
secrets | ❌ DISABLED| null
|
|
469
|
+
|
|
470
|
+
=== RLS Summary ===
|
|
471
|
+
|
|
472
|
+
total_tables | rls_enabled | rls_disabled
|
|
473
|
+
--------------+-------------+--------------
|
|
474
|
+
10 | 8 | 2
|
|
475
|
+
|
|
476
|
+
=== Tables Without RLS (Security Risk) ===
|
|
477
|
+
|
|
478
|
+
tablename
|
|
479
|
+
-----------
|
|
480
|
+
secrets
|
|
481
|
+
internal_logs
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
### Schema Audit Output
|
|
485
|
+
|
|
486
|
+
```
|
|
487
|
+
=== Schema Design Quality Audit ===
|
|
488
|
+
|
|
489
|
+
1. Tables Without Primary Keys (CRITICAL):
|
|
490
|
+
tablename
|
|
491
|
+
-----------
|
|
492
|
+
(0 rows) ✓
|
|
493
|
+
|
|
494
|
+
2. Missing NOT NULL on Required Fields:
|
|
495
|
+
table_name | column_name | data_type
|
|
496
|
+
------------+-------------+-----------
|
|
497
|
+
users | email | text
|
|
498
|
+
|
|
499
|
+
3. Missing Foreign Key Constraints:
|
|
500
|
+
table_name | column_name | suggestion
|
|
501
|
+
------------+-------------+----------------------
|
|
502
|
+
posts | user_id | Missing FK to users
|
|
503
|
+
|
|
504
|
+
... (additional checks)
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
---
|
|
508
|
+
|
|
509
|
+
## Interpretation
|
|
510
|
+
|
|
511
|
+
### Critical Issues (Fix Immediately)
|
|
512
|
+
|
|
513
|
+
- **RLS Disabled:** Tables without RLS are publicly accessible
|
|
514
|
+
- **No Primary Keys:** Data integrity at risk
|
|
515
|
+
- **Sensitive Columns Exposed:** PII/secrets without RLS protection
|
|
516
|
+
|
|
517
|
+
### High Priority Issues (Fix Soon)
|
|
518
|
+
|
|
519
|
+
- **Missing Foreign Keys:** Data integrity and query performance
|
|
520
|
+
- **Missing NOT NULL:** Data quality issues
|
|
521
|
+
- **Missing Indexes on FKs:** Query performance degradation
|
|
522
|
+
|
|
523
|
+
### Medium Priority Issues (Technical Debt)
|
|
524
|
+
|
|
525
|
+
- **Missing Audit Timestamps:** Tracking challenges
|
|
526
|
+
- **Inconsistent Naming:** Maintainability issues
|
|
527
|
+
|
|
528
|
+
---
|
|
529
|
+
|
|
530
|
+
## Recommendations
|
|
531
|
+
|
|
532
|
+
**After RLS Audit:**
|
|
533
|
+
1. Enable RLS on all public tables: `ALTER TABLE {table} ENABLE ROW LEVEL SECURITY;`
|
|
534
|
+
2. Create policies for all CRUD operations (use `*policy-apply` command)
|
|
535
|
+
3. Test with `*test-as-user` command
|
|
536
|
+
|
|
537
|
+
**After Schema Audit:**
|
|
538
|
+
1. Add missing primary keys: `ALTER TABLE {table} ADD PRIMARY KEY (id);`
|
|
539
|
+
2. Add missing foreign keys: `ALTER TABLE {table} ADD FOREIGN KEY ({col}) REFERENCES {ref_table}(id);`
|
|
540
|
+
3. Add missing NOT NULL: `ALTER TABLE {table} ALTER COLUMN {col} SET NOT NULL;`
|
|
541
|
+
4. Create indexes on foreign keys: `CREATE INDEX idx_{table}_{col} ON {table}({col});`
|
|
542
|
+
|
|
543
|
+
---
|
|
544
|
+
|
|
545
|
+
## Related Commands
|
|
546
|
+
|
|
547
|
+
- `*policy-apply {table} {mode}` - Install RLS policies after audit
|
|
548
|
+
- `*test-as-user {user_id}` - Test RLS policies
|
|
549
|
+
- `*verify-order {migration}` - Validate migration DDL ordering
|
|
550
|
+
- `*create-migration-plan` - Plan schema changes
|
|
551
|
+
|
|
552
|
+
---
|
|
553
|
+
|
|
554
|
+
**Note:** This consolidated task replaces `db-rls-audit.md` and `schema-audit.md` (deprecated in v3.0)
|