agentic-qe 3.4.1 → 3.4.2
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/.claude/skills/.validation/README.md +111 -0
- package/.claude/skills/.validation/examples/chaos-engineering-output.example.json +530 -0
- package/.claude/skills/.validation/examples/performance-testing-output.example.json +252 -0
- package/.claude/skills/.validation/examples/security-testing-output.example.json +413 -0
- package/.claude/skills/.validation/examples/testability-scoring-output.example.json +350 -0
- package/.claude/skills/.validation/schemas/skill-eval.schema.json +452 -0
- package/.claude/skills/.validation/schemas/skill-frontmatter.schema.json +341 -0
- package/.claude/skills/.validation/schemas/skill-output-meta.schema.json +199 -0
- package/.claude/skills/.validation/schemas/skill-output.template.json +610 -0
- package/.claude/skills/.validation/skill-validation-mcp-integration.md +250 -0
- package/.claude/skills/.validation/templates/eval.template.yaml +366 -0
- package/.claude/skills/.validation/templates/schemas/output.json +145 -0
- package/.claude/skills/.validation/templates/security-testing-eval.template.yaml +725 -0
- package/.claude/skills/.validation/templates/skill-frontmatter.example.yaml +225 -0
- package/.claude/skills/.validation/templates/validate.template.sh +1060 -0
- package/.claude/skills/.validation/templates/validator-lib.sh +1031 -0
- package/.claude/skills/.validation/test-data/invalid-output.json +5 -0
- package/.claude/skills/.validation/test-data/minimal-output.json +9 -0
- package/.claude/skills/.validation/test-data/sample-output.json +73 -0
- package/.claude/skills/TRUST-TIERS.md +158 -0
- package/.claude/skills/a11y-ally/SKILL.md +1664 -1658
- package/.claude/skills/a11y-ally/evals/a11y-ally.yaml +376 -0
- package/.claude/skills/a11y-ally/schemas/output.json +549 -0
- package/.claude/skills/a11y-ally/scripts/validate.sh +690 -0
- package/.claude/skills/accessibility-testing/SKILL.md +8 -1
- package/.claude/skills/accessibility-testing/evals/accessibility-testing.yaml +719 -0
- package/.claude/skills/accessibility-testing/schemas/output.json +776 -0
- package/.claude/skills/accessibility-testing/scripts/validate.sh +943 -0
- package/.claude/skills/accessibility-testing/test-data/sample-output.json +191 -0
- package/.claude/skills/agentic-quality-engineering/SKILL.md +4 -0
- package/.claude/skills/agentic-quality-engineering/schemas/output.json +577 -0
- package/.claude/skills/api-testing-patterns/SKILL.md +5 -0
- package/.claude/skills/api-testing-patterns/evals/api-testing-patterns.yaml +696 -0
- package/.claude/skills/api-testing-patterns/schemas/output.json +845 -0
- package/.claude/skills/api-testing-patterns/scripts/validate.sh +931 -0
- package/.claude/skills/aqe-v2-v3-migration/schemas/output.json +513 -0
- package/.claude/skills/aqe-v2-v3-migration/skill.md +4 -0
- package/.claude/skills/brutal-honesty-review/SKILL.md +5 -0
- package/.claude/skills/brutal-honesty-review/schemas/output.json +291 -0
- package/.claude/skills/brutal-honesty-review/scripts/validate.sh +130 -0
- package/.claude/skills/bug-reporting-excellence/SKILL.md +5 -0
- package/.claude/skills/bug-reporting-excellence/schemas/output.json +288 -0
- package/.claude/skills/bug-reporting-excellence/scripts/validate.sh +108 -0
- package/.claude/skills/chaos-engineering-resilience/SKILL.md +5 -0
- package/.claude/skills/chaos-engineering-resilience/evals/chaos-engineering-resilience.yaml +761 -0
- package/.claude/skills/chaos-engineering-resilience/schemas/output.json +1205 -0
- package/.claude/skills/chaos-engineering-resilience/scripts/validate.sh +1107 -0
- package/.claude/skills/cicd-pipeline-qe-orchestrator/SKILL.md +6 -0
- package/.claude/skills/cicd-pipeline-qe-orchestrator/evals/cicd-pipeline-qe-orchestrator.yaml +157 -0
- package/.claude/skills/cicd-pipeline-qe-orchestrator/schemas/output.json +542 -0
- package/.claude/skills/cicd-pipeline-qe-orchestrator/scripts/validate.sh +310 -0
- package/.claude/skills/code-review-quality/SKILL.md +5 -0
- package/.claude/skills/code-review-quality/schemas/output.json +264 -0
- package/.claude/skills/code-review-quality/scripts/validate.sh +113 -0
- package/.claude/skills/compatibility-testing/evals/compatibility-testing.yaml +410 -0
- package/.claude/skills/compatibility-testing/schemas/output.json +551 -0
- package/.claude/skills/compatibility-testing/scripts/validate.sh +605 -0
- package/.claude/skills/compliance-testing/SKILL.md +7 -0
- package/.claude/skills/compliance-testing/evals/compliance-testing.yaml +1107 -0
- package/.claude/skills/compliance-testing/schemas/output.json +845 -0
- package/.claude/skills/compliance-testing/scripts/validate.sh +888 -0
- package/.claude/skills/consultancy-practices/SKILL.md +4 -0
- package/.claude/skills/consultancy-practices/schemas/output.json +282 -0
- package/.claude/skills/context-driven-testing/SKILL.md +3 -0
- package/.claude/skills/contract-testing/SKILL.md +5 -0
- package/.claude/skills/contract-testing/evals/contract-testing.yaml +748 -0
- package/.claude/skills/contract-testing/schemas/output.json +638 -0
- package/.claude/skills/contract-testing/scripts/validate.sh +1033 -0
- package/.claude/skills/database-testing/SKILL.md +5 -0
- package/.claude/skills/database-testing/evals/database-testing.yaml +968 -0
- package/.claude/skills/database-testing/schemas/output.json +1446 -0
- package/.claude/skills/database-testing/scripts/validate.sh +1099 -0
- package/.claude/skills/exploratory-testing-advanced/SKILL.md +3 -0
- package/.claude/skills/holistic-testing-pact/SKILL.md +3 -0
- package/.claude/skills/localization-testing/SKILL.md +6 -0
- package/.claude/skills/localization-testing/evals/localization-testing.yaml +544 -0
- package/.claude/skills/localization-testing/schemas/output.json +325 -0
- package/.claude/skills/localization-testing/scripts/validate.sh +131 -0
- package/.claude/skills/mobile-testing/SKILL.md +6 -0
- package/.claude/skills/mobile-testing/evals/mobile-testing.yaml +537 -0
- package/.claude/skills/mobile-testing/schemas/output.json +318 -0
- package/.claude/skills/mobile-testing/scripts/validate.sh +127 -0
- package/.claude/skills/mutation-testing/SKILL.md +8 -1
- package/.claude/skills/mutation-testing/evals/mutation-testing.yaml +652 -0
- package/.claude/skills/mutation-testing/schemas/output.json +707 -0
- package/.claude/skills/mutation-testing/scripts/validate.sh +992 -0
- package/.claude/skills/mutation-testing/test-data/sample-output.json +295 -0
- package/.claude/skills/n8n-expression-testing/SKILL.md +6 -0
- package/.claude/skills/n8n-expression-testing/evals/n8n-expression-testing.yaml +450 -0
- package/.claude/skills/n8n-expression-testing/schemas/output.json +369 -0
- package/.claude/skills/n8n-expression-testing/scripts/validate.sh +162 -0
- package/.claude/skills/n8n-integration-testing-patterns/SKILL.md +6 -0
- package/.claude/skills/n8n-integration-testing-patterns/evals/n8n-integration-testing-patterns.yaml +522 -0
- package/.claude/skills/n8n-integration-testing-patterns/schemas/output.json +291 -0
- package/.claude/skills/n8n-integration-testing-patterns/scripts/validate.sh +104 -0
- package/.claude/skills/n8n-security-testing/SKILL.md +6 -0
- package/.claude/skills/n8n-security-testing/evals/n8n-security-testing.yaml +493 -0
- package/.claude/skills/n8n-security-testing/schemas/output.json +293 -0
- package/.claude/skills/n8n-security-testing/scripts/validate.sh +120 -0
- package/.claude/skills/n8n-trigger-testing-strategies/SKILL.md +6 -0
- package/.claude/skills/n8n-trigger-testing-strategies/evals/n8n-trigger-testing-strategies.yaml +500 -0
- package/.claude/skills/n8n-trigger-testing-strategies/schemas/output.json +295 -0
- package/.claude/skills/n8n-trigger-testing-strategies/scripts/validate.sh +121 -0
- package/.claude/skills/n8n-workflow-testing-fundamentals/SKILL.md +6 -0
- package/.claude/skills/n8n-workflow-testing-fundamentals/evals/n8n-workflow-testing-fundamentals.yaml +497 -0
- package/.claude/skills/n8n-workflow-testing-fundamentals/schemas/output.json +254 -0
- package/.claude/skills/n8n-workflow-testing-fundamentals/scripts/validate.sh +126 -0
- package/.claude/skills/performance-analysis/SKILL.md +6 -0
- package/.claude/skills/performance-analysis/evals/performance-analysis.yaml +144 -0
- package/.claude/skills/performance-analysis/schemas/output.json +588 -0
- package/.claude/skills/performance-analysis/scripts/validate.sh +63 -0
- package/.claude/skills/performance-testing/SKILL.md +5 -0
- package/.claude/skills/performance-testing/evals/performance-testing.yaml +772 -0
- package/.claude/skills/performance-testing/schemas/output.json +1184 -0
- package/.claude/skills/performance-testing/scripts/validate.sh +1090 -0
- package/.claude/skills/qcsd-ideation-swarm/SKILL.md +1759 -1753
- package/.claude/skills/qcsd-ideation-swarm/evals/qcsd-ideation-swarm.yaml +138 -0
- package/.claude/skills/qcsd-ideation-swarm/schemas/output.json +568 -0
- package/.claude/skills/qcsd-ideation-swarm/scripts/validate.sh +56 -0
- package/.claude/skills/qe-chaos-resilience/SKILL.md +6 -0
- package/.claude/skills/qe-chaos-resilience/evals/qe-chaos-resilience.yaml +443 -0
- package/.claude/skills/qe-chaos-resilience/schemas/output.json +314 -0
- package/.claude/skills/qe-chaos-resilience/scripts/validate.sh +401 -0
- package/.claude/skills/qe-code-intelligence/SKILL.md +6 -0
- package/.claude/skills/qe-code-intelligence/evals/qe-code-intelligence.yaml +459 -0
- package/.claude/skills/qe-code-intelligence/schemas/output.json +315 -0
- package/.claude/skills/qe-code-intelligence/scripts/validate.sh +408 -0
- package/.claude/skills/qe-contract-testing/SKILL.md +6 -0
- package/.claude/skills/qe-contract-testing/evals/qe-contract-testing.yaml +513 -0
- package/.claude/skills/qe-contract-testing/schemas/output.json +295 -0
- package/.claude/skills/qe-contract-testing/scripts/validate.sh +421 -0
- package/.claude/skills/qe-coverage-analysis/SKILL.md +6 -0
- package/.claude/skills/qe-coverage-analysis/evals/qe-coverage-analysis.yaml +494 -0
- package/.claude/skills/qe-coverage-analysis/schemas/output.json +286 -0
- package/.claude/skills/qe-coverage-analysis/scripts/validate.sh +453 -0
- package/.claude/skills/qe-defect-intelligence/SKILL.md +6 -0
- package/.claude/skills/qe-defect-intelligence/evals/qe-defect-intelligence.yaml +511 -0
- package/.claude/skills/qe-defect-intelligence/schemas/output.json +283 -0
- package/.claude/skills/qe-defect-intelligence/scripts/validate.sh +466 -0
- package/.claude/skills/qe-iterative-loop/SKILL.md +445 -440
- package/.claude/skills/qe-iterative-loop/schemas/output.json +264 -0
- package/.claude/skills/qe-iterative-loop/scripts/validate.sh +474 -0
- package/.claude/skills/qe-learning-optimization/SKILL.md +6 -0
- package/.claude/skills/qe-learning-optimization/evals/qe-learning-optimization.yaml +144 -0
- package/.claude/skills/qe-learning-optimization/schemas/output.json +288 -0
- package/.claude/skills/qe-learning-optimization/scripts/validate.sh +56 -0
- package/.claude/skills/qe-quality-assessment/SKILL.md +6 -0
- package/.claude/skills/qe-quality-assessment/evals/qe-quality-assessment.yaml +506 -0
- package/.claude/skills/qe-quality-assessment/schemas/output.json +550 -0
- package/.claude/skills/qe-quality-assessment/scripts/validate.sh +352 -0
- package/.claude/skills/qe-requirements-validation/SKILL.md +6 -0
- package/.claude/skills/qe-requirements-validation/evals/qe-requirements-validation.yaml +598 -0
- package/.claude/skills/qe-requirements-validation/schemas/output.json +587 -0
- package/.claude/skills/qe-requirements-validation/scripts/validate.sh +275 -0
- package/.claude/skills/qe-security-compliance/SKILL.md +6 -0
- package/.claude/skills/qe-security-compliance/evals/qe-security-compliance.yaml +595 -0
- package/.claude/skills/qe-security-compliance/schemas/output.json +498 -0
- package/.claude/skills/qe-security-compliance/scripts/validate.sh +305 -0
- package/.claude/skills/qe-test-execution/SKILL.md +6 -0
- package/.claude/skills/qe-test-execution/evals/qe-test-execution.yaml +607 -0
- package/.claude/skills/qe-test-execution/schemas/output.json +529 -0
- package/.claude/skills/qe-test-execution/scripts/validate.sh +323 -0
- package/.claude/skills/qe-test-generation/SKILL.md +6 -0
- package/.claude/skills/qe-test-generation/evals/qe-test-generation.yaml +148 -0
- package/.claude/skills/qe-test-generation/schemas/output.json +439 -0
- package/.claude/skills/qe-test-generation/scripts/validate.sh +56 -0
- package/.claude/skills/qe-visual-accessibility/SKILL.md +6 -0
- package/.claude/skills/qe-visual-accessibility/evals/qe-visual-accessibility.yaml +142 -0
- package/.claude/skills/qe-visual-accessibility/schemas/output.json +491 -0
- package/.claude/skills/qe-visual-accessibility/scripts/validate.sh +56 -0
- package/.claude/skills/quality-metrics/SKILL.md +6 -0
- package/.claude/skills/quality-metrics/evals/quality-metrics.yaml +494 -0
- package/.claude/skills/quality-metrics/schemas/output.json +403 -0
- package/.claude/skills/quality-metrics/scripts/validate.sh +434 -0
- package/.claude/skills/refactoring-patterns/SKILL.md +5 -0
- package/.claude/skills/refactoring-patterns/schemas/output.json +475 -0
- package/.claude/skills/refactoring-patterns/scripts/validate.sh +241 -0
- package/.claude/skills/regression-testing/SKILL.md +6 -0
- package/.claude/skills/regression-testing/evals/regression-testing.yaml +504 -0
- package/.claude/skills/regression-testing/schemas/output.json +311 -0
- package/.claude/skills/regression-testing/scripts/validate.sh +130 -0
- package/.claude/skills/risk-based-testing/SKILL.md +6 -0
- package/.claude/skills/risk-based-testing/evals/risk-based-testing.yaml +141 -0
- package/.claude/skills/risk-based-testing/schemas/output.json +480 -0
- package/.claude/skills/risk-based-testing/scripts/validate.sh +56 -0
- package/.claude/skills/security-testing/SKILL.md +5 -0
- package/.claude/skills/security-testing/evals/security-testing.yaml +789 -0
- package/.claude/skills/security-testing/schemas/output.json +879 -0
- package/.claude/skills/security-testing/scripts/validate.sh +967 -0
- package/.claude/skills/security-visual-testing/SKILL.md +223 -217
- package/.claude/skills/security-visual-testing/evals/security-visual-testing.yaml +163 -0
- package/.claude/skills/security-visual-testing/schemas/output.json +486 -0
- package/.claude/skills/security-visual-testing/scripts/validate.sh +748 -0
- package/.claude/skills/sherlock-review/SKILL.md +5 -0
- package/.claude/skills/sherlock-review/schemas/output.json +297 -0
- package/.claude/skills/sherlock-review/scripts/validate.sh +115 -0
- package/.claude/skills/shift-left-testing/SKILL.md +6 -0
- package/.claude/skills/shift-left-testing/evals/shift-left-testing.yaml +145 -0
- package/.claude/skills/shift-left-testing/schemas/output.json +459 -0
- package/.claude/skills/shift-left-testing/scripts/validate.sh +56 -0
- package/.claude/skills/shift-right-testing/SKILL.md +6 -0
- package/.claude/skills/shift-right-testing/evals/shift-right-testing.yaml +147 -0
- package/.claude/skills/shift-right-testing/schemas/output.json +418 -0
- package/.claude/skills/shift-right-testing/scripts/validate.sh +56 -0
- package/.claude/skills/six-thinking-hats/SKILL.md +3 -0
- package/.claude/skills/tdd-london-chicago/SKILL.md +5 -0
- package/.claude/skills/tdd-london-chicago/schemas/output.json +444 -0
- package/.claude/skills/tdd-london-chicago/scripts/validate.sh +214 -0
- package/.claude/skills/technical-writing/SKILL.md +4 -0
- package/.claude/skills/technical-writing/schemas/output.json +268 -0
- package/.claude/skills/test-automation-strategy/SKILL.md +6 -0
- package/.claude/skills/test-automation-strategy/evals/test-automation-strategy.yaml +148 -0
- package/.claude/skills/test-automation-strategy/schemas/output.json +444 -0
- package/.claude/skills/test-automation-strategy/scripts/validate.sh +195 -0
- package/.claude/skills/test-data-management/SKILL.md +6 -0
- package/.claude/skills/test-data-management/evals/test-data-management.yaml +504 -0
- package/.claude/skills/test-data-management/schemas/output.json +284 -0
- package/.claude/skills/test-data-management/scripts/validate.sh +137 -0
- package/.claude/skills/test-design-techniques/SKILL.md +6 -0
- package/.claude/skills/test-design-techniques/evals/test-design-techniques.yaml +142 -0
- package/.claude/skills/test-design-techniques/schemas/output.json +295 -0
- package/.claude/skills/test-design-techniques/scripts/validate.sh +91 -0
- package/.claude/skills/test-environment-management/SKILL.md +4 -0
- package/.claude/skills/test-environment-management/schemas/output.json +310 -0
- package/.claude/skills/test-reporting-analytics/SKILL.md +6 -0
- package/.claude/skills/test-reporting-analytics/evals/test-reporting-analytics.yaml +155 -0
- package/.claude/skills/test-reporting-analytics/schemas/output.json +329 -0
- package/.claude/skills/test-reporting-analytics/scripts/validate.sh +77 -0
- package/.claude/skills/testability-scoring/SKILL.md +5 -0
- package/.claude/skills/testability-scoring/evals/testability-scoring.yaml +814 -0
- package/.claude/skills/testability-scoring/schemas/output.json +606 -0
- package/.claude/skills/testability-scoring/scripts/validate.sh +891 -0
- package/.claude/skills/trust-tier-manifest.json +2333 -0
- package/.claude/skills/verification-quality/SKILL.md +6 -0
- package/.claude/skills/verification-quality/evals/verification-quality.yaml +150 -0
- package/.claude/skills/verification-quality/schemas/output.json +432 -0
- package/.claude/skills/verification-quality/scripts/validate.sh +77 -0
- package/.claude/skills/visual-testing-advanced/SKILL.md +6 -0
- package/.claude/skills/visual-testing-advanced/evals/visual-testing-advanced.yaml +154 -0
- package/.claude/skills/visual-testing-advanced/schemas/output.json +294 -0
- package/.claude/skills/visual-testing-advanced/scripts/validate.sh +77 -0
- package/.claude/skills/xp-practices/SKILL.md +3 -0
- package/README.md +39 -2
- package/package.json +4 -1
- package/scripts/run-skill-eval.ts +1097 -0
- package/scripts/test-schema-validation.js +301 -0
- package/scripts/update-skill-manifest.ts +751 -0
- package/scripts/validate-skill-frontmatter.js +141 -0
- package/v3/CHANGELOG.md +21 -0
- package/v3/README.md +43 -3
- package/v3/assets/agents/v3/qe-test-idea-rewriter.md +375 -375
- package/v3/assets/skills/.validation/README.md +111 -0
- package/v3/assets/skills/.validation/examples/chaos-engineering-output.example.json +530 -0
- package/v3/assets/skills/.validation/examples/performance-testing-output.example.json +252 -0
- package/v3/assets/skills/.validation/examples/security-testing-output.example.json +413 -0
- package/v3/assets/skills/.validation/examples/testability-scoring-output.example.json +350 -0
- package/v3/assets/skills/.validation/schemas/skill-eval.schema.json +452 -0
- package/v3/assets/skills/.validation/schemas/skill-frontmatter.schema.json +341 -0
- package/v3/assets/skills/.validation/schemas/skill-output-meta.schema.json +199 -0
- package/v3/assets/skills/.validation/schemas/skill-output.template.json +610 -0
- package/v3/assets/skills/.validation/skill-validation-mcp-integration.md +250 -0
- package/v3/assets/skills/.validation/templates/eval.template.yaml +366 -0
- package/v3/assets/skills/.validation/templates/schemas/output.json +145 -0
- package/v3/assets/skills/.validation/templates/security-testing-eval.template.yaml +725 -0
- package/v3/assets/skills/.validation/templates/skill-frontmatter.example.yaml +225 -0
- package/v3/assets/skills/.validation/templates/validate.template.sh +1060 -0
- package/v3/assets/skills/.validation/templates/validator-lib.sh +1031 -0
- package/v3/assets/skills/.validation/test-data/invalid-output.json +5 -0
- package/v3/assets/skills/.validation/test-data/minimal-output.json +9 -0
- package/v3/assets/skills/.validation/test-data/sample-output.json +73 -0
- package/v3/assets/skills/accessibility-testing/SKILL.md +8 -1
- package/v3/assets/skills/accessibility-testing/evals/accessibility-testing.yaml +719 -0
- package/v3/assets/skills/accessibility-testing/schemas/output.json +776 -0
- package/v3/assets/skills/accessibility-testing/scripts/validate.sh +943 -0
- package/v3/assets/skills/accessibility-testing/test-data/sample-output.json +191 -0
- package/v3/assets/skills/agentic-quality-engineering/SKILL.md +4 -0
- package/v3/assets/skills/agentic-quality-engineering/schemas/output.json +577 -0
- package/v3/assets/skills/api-testing-patterns/SKILL.md +5 -0
- package/v3/assets/skills/api-testing-patterns/evals/api-testing-patterns.yaml +696 -0
- package/v3/assets/skills/api-testing-patterns/schemas/output.json +845 -0
- package/v3/assets/skills/api-testing-patterns/scripts/validate.sh +931 -0
- package/v3/assets/skills/aqe-v2-v3-migration/schemas/output.json +513 -0
- package/v3/assets/skills/aqe-v2-v3-migration/skill.md +20 -16
- package/v3/assets/skills/bug-reporting-excellence/SKILL.md +5 -0
- package/v3/assets/skills/bug-reporting-excellence/schemas/output.json +288 -0
- package/v3/assets/skills/bug-reporting-excellence/scripts/validate.sh +108 -0
- package/v3/assets/skills/chaos-engineering-resilience/SKILL.md +5 -0
- package/v3/assets/skills/chaos-engineering-resilience/evals/chaos-engineering-resilience.yaml +761 -0
- package/v3/assets/skills/chaos-engineering-resilience/schemas/output.json +1205 -0
- package/v3/assets/skills/chaos-engineering-resilience/scripts/validate.sh +1107 -0
- package/v3/assets/skills/code-review-quality/SKILL.md +5 -0
- package/v3/assets/skills/code-review-quality/schemas/output.json +264 -0
- package/v3/assets/skills/code-review-quality/scripts/validate.sh +113 -0
- package/v3/assets/skills/compatibility-testing/evals/compatibility-testing.yaml +410 -0
- package/v3/assets/skills/compatibility-testing/schemas/output.json +551 -0
- package/v3/assets/skills/compatibility-testing/scripts/validate.sh +605 -0
- package/v3/assets/skills/compliance-testing/SKILL.md +7 -0
- package/v3/assets/skills/compliance-testing/evals/compliance-testing.yaml +1107 -0
- package/v3/assets/skills/compliance-testing/schemas/output.json +845 -0
- package/v3/assets/skills/compliance-testing/scripts/validate.sh +888 -0
- package/v3/assets/skills/consultancy-practices/SKILL.md +4 -0
- package/v3/assets/skills/consultancy-practices/schemas/output.json +282 -0
- package/v3/assets/skills/context-driven-testing/SKILL.md +3 -0
- package/v3/assets/skills/contract-testing/SKILL.md +5 -0
- package/v3/assets/skills/contract-testing/evals/contract-testing.yaml +748 -0
- package/v3/assets/skills/contract-testing/schemas/output.json +638 -0
- package/v3/assets/skills/contract-testing/scripts/validate.sh +1033 -0
- package/v3/assets/skills/database-testing/SKILL.md +5 -0
- package/v3/assets/skills/database-testing/evals/database-testing.yaml +968 -0
- package/v3/assets/skills/database-testing/schemas/output.json +1446 -0
- package/v3/assets/skills/database-testing/scripts/validate.sh +1099 -0
- package/v3/assets/skills/exploratory-testing-advanced/SKILL.md +3 -0
- package/v3/assets/skills/holistic-testing-pact/SKILL.md +3 -0
- package/v3/assets/skills/localization-testing/SKILL.md +6 -0
- package/v3/assets/skills/localization-testing/evals/localization-testing.yaml +544 -0
- package/v3/assets/skills/localization-testing/schemas/output.json +325 -0
- package/v3/assets/skills/localization-testing/scripts/validate.sh +131 -0
- package/v3/assets/skills/mobile-testing/SKILL.md +6 -0
- package/v3/assets/skills/mobile-testing/evals/mobile-testing.yaml +537 -0
- package/v3/assets/skills/mobile-testing/schemas/output.json +318 -0
- package/v3/assets/skills/mobile-testing/scripts/validate.sh +127 -0
- package/v3/assets/skills/mutation-testing/SKILL.md +8 -1
- package/v3/assets/skills/mutation-testing/evals/mutation-testing.yaml +652 -0
- package/v3/assets/skills/mutation-testing/schemas/output.json +707 -0
- package/v3/assets/skills/mutation-testing/scripts/validate.sh +992 -0
- package/v3/assets/skills/mutation-testing/test-data/sample-output.json +295 -0
- package/v3/assets/skills/n8n-expression-testing/scripts/validate.sh +162 -0
- package/v3/assets/skills/n8n-integration-testing-patterns/scripts/validate.sh +104 -0
- package/v3/assets/skills/n8n-security-testing/scripts/validate.sh +120 -0
- package/v3/assets/skills/n8n-trigger-testing-strategies/scripts/validate.sh +121 -0
- package/v3/assets/skills/n8n-workflow-testing-fundamentals/scripts/validate.sh +126 -0
- package/v3/assets/skills/performance-testing/SKILL.md +5 -0
- package/v3/assets/skills/performance-testing/evals/performance-testing.yaml +772 -0
- package/v3/assets/skills/performance-testing/schemas/output.json +1184 -0
- package/v3/assets/skills/performance-testing/scripts/validate.sh +1090 -0
- package/v3/assets/skills/qe-chaos-resilience/SKILL.md +6 -0
- package/v3/assets/skills/qe-chaos-resilience/evals/qe-chaos-resilience.yaml +443 -0
- package/v3/assets/skills/qe-chaos-resilience/schemas/output.json +314 -0
- package/v3/assets/skills/qe-chaos-resilience/scripts/validate.sh +401 -0
- package/v3/assets/skills/qe-code-intelligence/SKILL.md +6 -0
- package/v3/assets/skills/qe-code-intelligence/evals/qe-code-intelligence.yaml +459 -0
- package/v3/assets/skills/qe-code-intelligence/schemas/output.json +315 -0
- package/v3/assets/skills/qe-code-intelligence/scripts/validate.sh +408 -0
- package/v3/assets/skills/qe-contract-testing/SKILL.md +6 -0
- package/v3/assets/skills/qe-contract-testing/evals/qe-contract-testing.yaml +513 -0
- package/v3/assets/skills/qe-contract-testing/schemas/output.json +295 -0
- package/v3/assets/skills/qe-contract-testing/scripts/validate.sh +421 -0
- package/v3/assets/skills/qe-coverage-analysis/SKILL.md +6 -0
- package/v3/assets/skills/qe-coverage-analysis/evals/qe-coverage-analysis.yaml +494 -0
- package/v3/assets/skills/qe-coverage-analysis/schemas/output.json +286 -0
- package/v3/assets/skills/qe-coverage-analysis/scripts/validate.sh +453 -0
- package/v3/assets/skills/qe-defect-intelligence/SKILL.md +6 -0
- package/v3/assets/skills/qe-defect-intelligence/evals/qe-defect-intelligence.yaml +511 -0
- package/v3/assets/skills/qe-defect-intelligence/schemas/output.json +283 -0
- package/v3/assets/skills/qe-defect-intelligence/scripts/validate.sh +466 -0
- package/v3/assets/skills/qe-iterative-loop/SKILL.md +445 -443
- package/v3/assets/skills/qe-iterative-loop/schemas/output.json +264 -0
- package/v3/assets/skills/qe-iterative-loop/scripts/validate.sh +474 -0
- package/v3/assets/skills/qe-learning-optimization/SKILL.md +6 -0
- package/v3/assets/skills/qe-learning-optimization/evals/qe-learning-optimization.yaml +144 -0
- package/v3/assets/skills/qe-learning-optimization/schemas/output.json +288 -0
- package/v3/assets/skills/qe-learning-optimization/scripts/validate.sh +56 -0
- package/v3/assets/skills/qe-quality-assessment/SKILL.md +6 -0
- package/v3/assets/skills/qe-quality-assessment/evals/qe-quality-assessment.yaml +506 -0
- package/v3/assets/skills/qe-quality-assessment/schemas/output.json +550 -0
- package/v3/assets/skills/qe-quality-assessment/scripts/validate.sh +352 -0
- package/v3/assets/skills/qe-requirements-validation/SKILL.md +6 -0
- package/v3/assets/skills/qe-requirements-validation/evals/qe-requirements-validation.yaml +598 -0
- package/v3/assets/skills/qe-requirements-validation/schemas/output.json +587 -0
- package/v3/assets/skills/qe-requirements-validation/scripts/validate.sh +275 -0
- package/v3/assets/skills/qe-security-compliance/SKILL.md +6 -0
- package/v3/assets/skills/qe-security-compliance/evals/qe-security-compliance.yaml +595 -0
- package/v3/assets/skills/qe-security-compliance/schemas/output.json +498 -0
- package/v3/assets/skills/qe-security-compliance/scripts/validate.sh +305 -0
- package/v3/assets/skills/qe-test-execution/SKILL.md +6 -0
- package/v3/assets/skills/qe-test-execution/evals/qe-test-execution.yaml +607 -0
- package/v3/assets/skills/qe-test-execution/schemas/output.json +529 -0
- package/v3/assets/skills/qe-test-execution/scripts/validate.sh +323 -0
- package/v3/assets/skills/qe-test-generation/SKILL.md +6 -0
- package/v3/assets/skills/qe-test-generation/evals/qe-test-generation.yaml +148 -0
- package/v3/assets/skills/qe-test-generation/schemas/output.json +439 -0
- package/v3/assets/skills/qe-test-generation/scripts/validate.sh +56 -0
- package/v3/assets/skills/qe-visual-accessibility/SKILL.md +6 -0
- package/v3/assets/skills/qe-visual-accessibility/evals/qe-visual-accessibility.yaml +142 -0
- package/v3/assets/skills/qe-visual-accessibility/schemas/output.json +491 -0
- package/v3/assets/skills/qe-visual-accessibility/scripts/validate.sh +56 -0
- package/v3/assets/skills/quality-metrics/SKILL.md +6 -0
- package/v3/assets/skills/quality-metrics/evals/quality-metrics.yaml +494 -0
- package/v3/assets/skills/quality-metrics/schemas/output.json +403 -0
- package/v3/assets/skills/quality-metrics/scripts/validate.sh +434 -0
- package/v3/assets/skills/refactoring-patterns/SKILL.md +5 -0
- package/v3/assets/skills/refactoring-patterns/schemas/output.json +475 -0
- package/v3/assets/skills/refactoring-patterns/scripts/validate.sh +241 -0
- package/v3/assets/skills/regression-testing/SKILL.md +6 -0
- package/v3/assets/skills/regression-testing/evals/regression-testing.yaml +504 -0
- package/v3/assets/skills/regression-testing/schemas/output.json +311 -0
- package/v3/assets/skills/regression-testing/scripts/validate.sh +130 -0
- package/v3/assets/skills/risk-based-testing/SKILL.md +6 -0
- package/v3/assets/skills/risk-based-testing/evals/risk-based-testing.yaml +141 -0
- package/v3/assets/skills/risk-based-testing/schemas/output.json +480 -0
- package/v3/assets/skills/risk-based-testing/scripts/validate.sh +56 -0
- package/v3/assets/skills/security-testing/SKILL.md +5 -0
- package/v3/assets/skills/security-testing/evals/security-testing.yaml +789 -0
- package/v3/assets/skills/security-testing/schemas/output.json +879 -0
- package/v3/assets/skills/security-testing/scripts/validate.sh +967 -0
- package/v3/assets/skills/shift-left-testing/SKILL.md +6 -0
- package/v3/assets/skills/shift-left-testing/evals/shift-left-testing.yaml +145 -0
- package/v3/assets/skills/shift-left-testing/schemas/output.json +459 -0
- package/v3/assets/skills/shift-left-testing/scripts/validate.sh +56 -0
- package/v3/assets/skills/shift-right-testing/SKILL.md +6 -0
- package/v3/assets/skills/shift-right-testing/evals/shift-right-testing.yaml +147 -0
- package/v3/assets/skills/shift-right-testing/schemas/output.json +418 -0
- package/v3/assets/skills/shift-right-testing/scripts/validate.sh +56 -0
- package/v3/assets/skills/six-thinking-hats/SKILL.md +3 -0
- package/v3/assets/skills/tdd-london-chicago/SKILL.md +5 -0
- package/v3/assets/skills/tdd-london-chicago/schemas/output.json +444 -0
- package/v3/assets/skills/tdd-london-chicago/scripts/validate.sh +214 -0
- package/v3/assets/skills/technical-writing/SKILL.md +4 -0
- package/v3/assets/skills/technical-writing/schemas/output.json +268 -0
- package/v3/assets/skills/test-automation-strategy/SKILL.md +6 -0
- package/v3/assets/skills/test-automation-strategy/evals/test-automation-strategy.yaml +148 -0
- package/v3/assets/skills/test-automation-strategy/schemas/output.json +444 -0
- package/v3/assets/skills/test-automation-strategy/scripts/validate.sh +195 -0
- package/v3/assets/skills/test-data-management/SKILL.md +6 -0
- package/v3/assets/skills/test-data-management/evals/test-data-management.yaml +504 -0
- package/v3/assets/skills/test-data-management/schemas/output.json +284 -0
- package/v3/assets/skills/test-data-management/scripts/validate.sh +137 -0
- package/v3/assets/skills/test-design-techniques/SKILL.md +6 -0
- package/v3/assets/skills/test-design-techniques/evals/test-design-techniques.yaml +142 -0
- package/v3/assets/skills/test-design-techniques/schemas/output.json +295 -0
- package/v3/assets/skills/test-design-techniques/scripts/validate.sh +91 -0
- package/v3/assets/skills/test-environment-management/SKILL.md +4 -0
- package/v3/assets/skills/test-environment-management/schemas/output.json +310 -0
- package/v3/assets/skills/test-reporting-analytics/SKILL.md +6 -0
- package/v3/assets/skills/test-reporting-analytics/evals/test-reporting-analytics.yaml +155 -0
- package/v3/assets/skills/test-reporting-analytics/schemas/output.json +329 -0
- package/v3/assets/skills/test-reporting-analytics/scripts/validate.sh +77 -0
- package/v3/assets/skills/verification-quality/SKILL.md +6 -0
- package/v3/assets/skills/verification-quality/evals/verification-quality.yaml +150 -0
- package/v3/assets/skills/verification-quality/schemas/output.json +432 -0
- package/v3/assets/skills/verification-quality/scripts/validate.sh +77 -0
- package/v3/assets/skills/visual-testing-advanced/SKILL.md +6 -0
- package/v3/assets/skills/visual-testing-advanced/evals/visual-testing-advanced.yaml +154 -0
- package/v3/assets/skills/visual-testing-advanced/schemas/output.json +294 -0
- package/v3/assets/skills/visual-testing-advanced/scripts/validate.sh +77 -0
- package/v3/assets/skills/xp-practices/SKILL.md +3 -0
- package/v3/assets/templates/validation-report.md.hbs +139 -0
- package/v3/assets/templates/validation-summary.json +56 -0
- package/v3/dist/cli/bundle.js +7368 -3418
- package/v3/dist/cli/commands/eval.d.ts +18 -0
- package/v3/dist/cli/commands/eval.d.ts.map +1 -0
- package/v3/dist/cli/commands/eval.js +505 -0
- package/v3/dist/cli/commands/eval.js.map +1 -0
- package/v3/dist/cli/commands/validate-swarm.d.ts +16 -0
- package/v3/dist/cli/commands/validate-swarm.d.ts.map +1 -0
- package/v3/dist/cli/commands/validate-swarm.js +251 -0
- package/v3/dist/cli/commands/validate-swarm.js.map +1 -0
- package/v3/dist/cli/commands/validate.d.ts +14 -0
- package/v3/dist/cli/commands/validate.d.ts.map +1 -0
- package/v3/dist/cli/commands/validate.js +408 -0
- package/v3/dist/cli/commands/validate.js.map +1 -0
- package/v3/dist/cli/index.js +6 -0
- package/v3/dist/cli/index.js.map +1 -1
- package/v3/dist/index.d.ts +2 -0
- package/v3/dist/index.d.ts.map +1 -1
- package/v3/dist/index.js +10 -0
- package/v3/dist/index.js.map +1 -1
- package/v3/dist/init/skills-installer.d.ts +6 -0
- package/v3/dist/init/skills-installer.d.ts.map +1 -1
- package/v3/dist/init/skills-installer.js +48 -0
- package/v3/dist/init/skills-installer.js.map +1 -1
- package/v3/dist/learning/index.d.ts +2 -0
- package/v3/dist/learning/index.d.ts.map +1 -1
- package/v3/dist/learning/index.js +4 -0
- package/v3/dist/learning/index.js.map +1 -1
- package/v3/dist/learning/skill-validation-learner.d.ts +264 -0
- package/v3/dist/learning/skill-validation-learner.d.ts.map +1 -0
- package/v3/dist/learning/skill-validation-learner.js +515 -0
- package/v3/dist/learning/skill-validation-learner.js.map +1 -0
- package/v3/dist/validation/index.d.ts +19 -0
- package/v3/dist/validation/index.d.ts.map +1 -0
- package/v3/dist/validation/index.js +31 -0
- package/v3/dist/validation/index.js.map +1 -0
- package/v3/dist/validation/parallel-eval-runner.d.ts +307 -0
- package/v3/dist/validation/parallel-eval-runner.d.ts.map +1 -0
- package/v3/dist/validation/parallel-eval-runner.js +566 -0
- package/v3/dist/validation/parallel-eval-runner.js.map +1 -0
- package/v3/dist/validation/swarm-skill-validator.d.ts +282 -0
- package/v3/dist/validation/swarm-skill-validator.d.ts.map +1 -0
- package/v3/dist/validation/swarm-skill-validator.js +460 -0
- package/v3/dist/validation/swarm-skill-validator.js.map +1 -0
- package/v3/dist/validation/validation-result-aggregator.d.ts +232 -0
- package/v3/dist/validation/validation-result-aggregator.d.ts.map +1 -0
- package/v3/dist/validation/validation-result-aggregator.js +630 -0
- package/v3/dist/validation/validation-result-aggregator.js.map +1 -0
- package/v3/package.json +1 -1
|
@@ -0,0 +1,968 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# AQE Skill Evaluation Test Suite: Database Testing v1.0.0
|
|
3
|
+
# =============================================================================
|
|
4
|
+
#
|
|
5
|
+
# Comprehensive evaluation suite for the database-testing skill per ADR-056.
|
|
6
|
+
# Tests schema validation, data integrity, migration testing, transaction ACID
|
|
7
|
+
# properties, and query performance analysis across multiple database types.
|
|
8
|
+
#
|
|
9
|
+
# Schema: .claude/skills/.validation/schemas/skill-eval.schema.json
|
|
10
|
+
# Validator: .claude/skills/database-testing/scripts/validate.sh
|
|
11
|
+
#
|
|
12
|
+
# Coverage:
|
|
13
|
+
# - Schema validation (tables, columns, constraints, indexes)
|
|
14
|
+
# - Data integrity (unique, foreign key, check constraints)
|
|
15
|
+
# - Migration testing (forward, rollback, data preservation)
|
|
16
|
+
# - Transaction testing (ACID properties, isolation levels)
|
|
17
|
+
# - Query performance (slow queries, missing indexes, N+1)
|
|
18
|
+
# - Multi-database support (PostgreSQL, MySQL, MongoDB, SQLite)
|
|
19
|
+
#
|
|
20
|
+
# =============================================================================
|
|
21
|
+
|
|
22
|
+
skill: database-testing
|
|
23
|
+
version: 1.0.0
|
|
24
|
+
description: >
|
|
25
|
+
Comprehensive evaluation suite for the database-testing skill.
|
|
26
|
+
Tests database schema validation, data integrity verification,
|
|
27
|
+
migration testing, transaction ACID compliance, and query performance
|
|
28
|
+
analysis. Supports PostgreSQL, MySQL, MongoDB, and SQLite.
|
|
29
|
+
Integrates with ReasoningBank for continuous improvement.
|
|
30
|
+
|
|
31
|
+
# =============================================================================
|
|
32
|
+
# Multi-Model Configuration
|
|
33
|
+
# =============================================================================
|
|
34
|
+
|
|
35
|
+
models_to_test:
|
|
36
|
+
- claude-sonnet-4 # Primary model (high accuracy expected)
|
|
37
|
+
- claude-3-haiku # Fast model (minimum quality threshold)
|
|
38
|
+
- gpt-4o # Cross-vendor validation
|
|
39
|
+
|
|
40
|
+
# =============================================================================
|
|
41
|
+
# MCP Integration Configuration
|
|
42
|
+
# =============================================================================
|
|
43
|
+
|
|
44
|
+
mcp_integration:
|
|
45
|
+
enabled: true
|
|
46
|
+
namespace: skill-validation
|
|
47
|
+
|
|
48
|
+
# Query existing database patterns before running evals
|
|
49
|
+
query_patterns: true
|
|
50
|
+
|
|
51
|
+
# Track each test outcome for learning feedback loop
|
|
52
|
+
track_outcomes: true
|
|
53
|
+
|
|
54
|
+
# Store successful patterns after evals complete
|
|
55
|
+
store_patterns: true
|
|
56
|
+
|
|
57
|
+
# Share learning with fleet coordinator agents
|
|
58
|
+
share_learning: true
|
|
59
|
+
|
|
60
|
+
# Update quality gate with validation metrics
|
|
61
|
+
update_quality_gate: true
|
|
62
|
+
|
|
63
|
+
# Target agents for learning distribution
|
|
64
|
+
target_agents:
|
|
65
|
+
- qe-learning-coordinator
|
|
66
|
+
- qe-queen-coordinator
|
|
67
|
+
- qe-test-data-architect
|
|
68
|
+
- qe-test-executor
|
|
69
|
+
- qe-performance-tester
|
|
70
|
+
|
|
71
|
+
# =============================================================================
|
|
72
|
+
# ReasoningBank Learning Configuration
|
|
73
|
+
# =============================================================================
|
|
74
|
+
|
|
75
|
+
learning:
|
|
76
|
+
store_success_patterns: true
|
|
77
|
+
store_failure_patterns: true
|
|
78
|
+
pattern_ttl_days: 90
|
|
79
|
+
min_confidence_to_store: 0.7
|
|
80
|
+
cross_model_comparison: true
|
|
81
|
+
|
|
82
|
+
# =============================================================================
|
|
83
|
+
# Result Format Configuration
|
|
84
|
+
# =============================================================================
|
|
85
|
+
|
|
86
|
+
result_format:
|
|
87
|
+
json_output: true
|
|
88
|
+
markdown_report: true
|
|
89
|
+
include_raw_output: false
|
|
90
|
+
include_timing: true
|
|
91
|
+
include_token_usage: true
|
|
92
|
+
|
|
93
|
+
# =============================================================================
|
|
94
|
+
# Environment Setup
|
|
95
|
+
# =============================================================================
|
|
96
|
+
|
|
97
|
+
setup:
|
|
98
|
+
required_tools:
|
|
99
|
+
- jq # JSON parsing (required)
|
|
100
|
+
- node # ORM validation (optional but recommended)
|
|
101
|
+
|
|
102
|
+
environment_variables:
|
|
103
|
+
DATABASE_TEST_DEPTH: "comprehensive"
|
|
104
|
+
MIGRATION_TEST_ROLLBACK: "true"
|
|
105
|
+
ACID_TEST_ENABLED: "true"
|
|
106
|
+
|
|
107
|
+
fixtures:
|
|
108
|
+
- name: postgresql_schema_test
|
|
109
|
+
path: fixtures/postgresql-schema.sql
|
|
110
|
+
content: |
|
|
111
|
+
-- PostgreSQL test schema with intentional issues
|
|
112
|
+
CREATE TABLE users (
|
|
113
|
+
id SERIAL PRIMARY KEY,
|
|
114
|
+
email VARCHAR(255), -- Missing UNIQUE constraint
|
|
115
|
+
password VARCHAR(255), -- Should be NOT NULL
|
|
116
|
+
created_at TIMESTAMP DEFAULT NOW()
|
|
117
|
+
);
|
|
118
|
+
|
|
119
|
+
CREATE TABLE orders (
|
|
120
|
+
id SERIAL PRIMARY KEY,
|
|
121
|
+
user_id INTEGER, -- Missing FOREIGN KEY
|
|
122
|
+
total DECIMAL(10,2),
|
|
123
|
+
status VARCHAR(50)
|
|
124
|
+
);
|
|
125
|
+
|
|
126
|
+
-- Missing index on frequently queried column
|
|
127
|
+
CREATE TABLE products (
|
|
128
|
+
id SERIAL PRIMARY KEY,
|
|
129
|
+
name VARCHAR(255),
|
|
130
|
+
category VARCHAR(100),
|
|
131
|
+
price DECIMAL(10,2)
|
|
132
|
+
);
|
|
133
|
+
|
|
134
|
+
- name: migration_test_file
|
|
135
|
+
path: fixtures/migration-add-age.js
|
|
136
|
+
content: |
|
|
137
|
+
exports.up = async function(knex) {
|
|
138
|
+
await knex.schema.alterTable('users', (table) => {
|
|
139
|
+
table.integer('age').nullable();
|
|
140
|
+
});
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
exports.down = async function(knex) {
|
|
144
|
+
await knex.schema.alterTable('users', (table) => {
|
|
145
|
+
table.dropColumn('age');
|
|
146
|
+
});
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
# =============================================================================
|
|
150
|
+
# TEST CASES
|
|
151
|
+
# =============================================================================
|
|
152
|
+
|
|
153
|
+
test_cases:
|
|
154
|
+
# ---------------------------------------------------------------------------
|
|
155
|
+
# CATEGORY: Schema Validation
|
|
156
|
+
# ---------------------------------------------------------------------------
|
|
157
|
+
|
|
158
|
+
- id: tc001_missing_unique_constraint
|
|
159
|
+
description: "Detect missing UNIQUE constraint on email column"
|
|
160
|
+
category: schema
|
|
161
|
+
priority: critical
|
|
162
|
+
|
|
163
|
+
input:
|
|
164
|
+
code: |
|
|
165
|
+
-- User table without unique email constraint
|
|
166
|
+
CREATE TABLE users (
|
|
167
|
+
id SERIAL PRIMARY KEY,
|
|
168
|
+
email VARCHAR(255),
|
|
169
|
+
name VARCHAR(100),
|
|
170
|
+
created_at TIMESTAMP DEFAULT NOW()
|
|
171
|
+
);
|
|
172
|
+
|
|
173
|
+
-- Application code that assumes email uniqueness
|
|
174
|
+
INSERT INTO users (email, name) VALUES ('john@example.com', 'John');
|
|
175
|
+
INSERT INTO users (email, name) VALUES ('john@example.com', 'Johnny'); -- Duplicate allowed!
|
|
176
|
+
context:
|
|
177
|
+
database: postgresql
|
|
178
|
+
framework: knex
|
|
179
|
+
environment: production
|
|
180
|
+
|
|
181
|
+
expected_output:
|
|
182
|
+
must_contain:
|
|
183
|
+
- "unique"
|
|
184
|
+
- "constraint"
|
|
185
|
+
- "email"
|
|
186
|
+
- "duplicate"
|
|
187
|
+
must_not_contain:
|
|
188
|
+
- "no issues"
|
|
189
|
+
- "valid schema"
|
|
190
|
+
must_match_regex:
|
|
191
|
+
- "DB-\\d{3}"
|
|
192
|
+
severity_classification: high
|
|
193
|
+
finding_count:
|
|
194
|
+
min: 1
|
|
195
|
+
max: 5
|
|
196
|
+
|
|
197
|
+
validation:
|
|
198
|
+
schema_check: true
|
|
199
|
+
keyword_match_threshold: 0.8
|
|
200
|
+
reasoning_quality_min: 0.7
|
|
201
|
+
grading_rubric:
|
|
202
|
+
completeness: 0.3
|
|
203
|
+
accuracy: 0.5
|
|
204
|
+
actionability: 0.2
|
|
205
|
+
|
|
206
|
+
timeout_ms: 30000
|
|
207
|
+
|
|
208
|
+
- id: tc002_missing_foreign_key
|
|
209
|
+
description: "Detect missing foreign key constraint causing orphaned records"
|
|
210
|
+
category: schema
|
|
211
|
+
priority: critical
|
|
212
|
+
|
|
213
|
+
input:
|
|
214
|
+
code: |
|
|
215
|
+
CREATE TABLE users (
|
|
216
|
+
id SERIAL PRIMARY KEY,
|
|
217
|
+
email VARCHAR(255) UNIQUE NOT NULL
|
|
218
|
+
);
|
|
219
|
+
|
|
220
|
+
CREATE TABLE orders (
|
|
221
|
+
id SERIAL PRIMARY KEY,
|
|
222
|
+
user_id INTEGER, -- No FK constraint!
|
|
223
|
+
total DECIMAL(10,2)
|
|
224
|
+
);
|
|
225
|
+
|
|
226
|
+
-- This allows orphaned orders
|
|
227
|
+
INSERT INTO orders (user_id, total) VALUES (999, 100.00);
|
|
228
|
+
DELETE FROM users WHERE id = 1; -- Orphans all orders for user 1
|
|
229
|
+
context:
|
|
230
|
+
database: postgresql
|
|
231
|
+
framework: prisma
|
|
232
|
+
|
|
233
|
+
expected_output:
|
|
234
|
+
must_contain:
|
|
235
|
+
- "foreign key"
|
|
236
|
+
- "referential integrity"
|
|
237
|
+
- "orphaned"
|
|
238
|
+
must_match_regex:
|
|
239
|
+
- "DB-\\d{3}"
|
|
240
|
+
severity_classification: critical
|
|
241
|
+
finding_count:
|
|
242
|
+
min: 1
|
|
243
|
+
|
|
244
|
+
validation:
|
|
245
|
+
schema_check: true
|
|
246
|
+
keyword_match_threshold: 0.8
|
|
247
|
+
|
|
248
|
+
- id: tc003_missing_index_on_foreign_key
|
|
249
|
+
description: "Detect missing index on foreign key column affecting performance"
|
|
250
|
+
category: schema
|
|
251
|
+
priority: high
|
|
252
|
+
|
|
253
|
+
input:
|
|
254
|
+
code: |
|
|
255
|
+
CREATE TABLE orders (
|
|
256
|
+
id SERIAL PRIMARY KEY,
|
|
257
|
+
user_id INTEGER REFERENCES users(id),
|
|
258
|
+
product_id INTEGER REFERENCES products(id),
|
|
259
|
+
quantity INTEGER,
|
|
260
|
+
created_at TIMESTAMP
|
|
261
|
+
);
|
|
262
|
+
|
|
263
|
+
-- Frequently run queries without indexes
|
|
264
|
+
SELECT * FROM orders WHERE user_id = 123;
|
|
265
|
+
SELECT COUNT(*) FROM orders WHERE product_id = 456;
|
|
266
|
+
context:
|
|
267
|
+
database: postgresql
|
|
268
|
+
framework: typeorm
|
|
269
|
+
|
|
270
|
+
expected_output:
|
|
271
|
+
must_contain:
|
|
272
|
+
- "index"
|
|
273
|
+
- "foreign key"
|
|
274
|
+
- "performance"
|
|
275
|
+
- "user_id"
|
|
276
|
+
must_match_regex:
|
|
277
|
+
- "CREATE INDEX"
|
|
278
|
+
severity_classification: medium
|
|
279
|
+
|
|
280
|
+
validation:
|
|
281
|
+
schema_check: true
|
|
282
|
+
keyword_match_threshold: 0.7
|
|
283
|
+
|
|
284
|
+
# ---------------------------------------------------------------------------
|
|
285
|
+
# CATEGORY: Data Integrity
|
|
286
|
+
# ---------------------------------------------------------------------------
|
|
287
|
+
|
|
288
|
+
- id: tc004_check_constraint_violation
|
|
289
|
+
description: "Detect check constraint violations on status column"
|
|
290
|
+
category: integrity
|
|
291
|
+
priority: high
|
|
292
|
+
|
|
293
|
+
input:
|
|
294
|
+
code: |
|
|
295
|
+
CREATE TABLE orders (
|
|
296
|
+
id SERIAL PRIMARY KEY,
|
|
297
|
+
status VARCHAR(20) CHECK (status IN ('pending', 'processing', 'shipped', 'delivered')),
|
|
298
|
+
total DECIMAL(10,2) CHECK (total >= 0)
|
|
299
|
+
);
|
|
300
|
+
|
|
301
|
+
-- Test constraint enforcement
|
|
302
|
+
INSERT INTO orders (status, total) VALUES ('invalid_status', 100.00);
|
|
303
|
+
INSERT INTO orders (status, total) VALUES ('pending', -50.00);
|
|
304
|
+
context:
|
|
305
|
+
database: postgresql
|
|
306
|
+
test_type: integrity
|
|
307
|
+
|
|
308
|
+
expected_output:
|
|
309
|
+
must_contain:
|
|
310
|
+
- "check constraint"
|
|
311
|
+
- "violation"
|
|
312
|
+
- "status"
|
|
313
|
+
must_not_contain:
|
|
314
|
+
- "passed"
|
|
315
|
+
- "valid"
|
|
316
|
+
severity_classification: high
|
|
317
|
+
|
|
318
|
+
validation:
|
|
319
|
+
schema_check: true
|
|
320
|
+
keyword_match_threshold: 0.8
|
|
321
|
+
|
|
322
|
+
- id: tc005_null_constraint_test
|
|
323
|
+
description: "Detect NOT NULL constraint violations"
|
|
324
|
+
category: integrity
|
|
325
|
+
priority: high
|
|
326
|
+
|
|
327
|
+
input:
|
|
328
|
+
code: |
|
|
329
|
+
const user = new User();
|
|
330
|
+
user.email = 'test@example.com';
|
|
331
|
+
// Missing required field: password
|
|
332
|
+
await user.save();
|
|
333
|
+
|
|
334
|
+
// Schema:
|
|
335
|
+
// email VARCHAR(255) NOT NULL
|
|
336
|
+
// password VARCHAR(255) NOT NULL
|
|
337
|
+
// name VARCHAR(100) -- nullable
|
|
338
|
+
context:
|
|
339
|
+
database: mysql
|
|
340
|
+
framework: sequelize
|
|
341
|
+
test_type: integrity
|
|
342
|
+
|
|
343
|
+
expected_output:
|
|
344
|
+
must_contain:
|
|
345
|
+
- "NOT NULL"
|
|
346
|
+
- "constraint"
|
|
347
|
+
- "password"
|
|
348
|
+
- "required"
|
|
349
|
+
severity_classification: high
|
|
350
|
+
finding_count:
|
|
351
|
+
min: 1
|
|
352
|
+
|
|
353
|
+
validation:
|
|
354
|
+
schema_check: true
|
|
355
|
+
keyword_match_threshold: 0.8
|
|
356
|
+
|
|
357
|
+
# ---------------------------------------------------------------------------
|
|
358
|
+
# CATEGORY: Migration Testing
|
|
359
|
+
# ---------------------------------------------------------------------------
|
|
360
|
+
|
|
361
|
+
- id: tc006_migration_forward_test
|
|
362
|
+
description: "Test migration applies successfully forward"
|
|
363
|
+
category: migration
|
|
364
|
+
priority: critical
|
|
365
|
+
|
|
366
|
+
input:
|
|
367
|
+
code: |
|
|
368
|
+
// Migration: add-user-roles.js
|
|
369
|
+
exports.up = async function(knex) {
|
|
370
|
+
await knex.schema.createTable('roles', (table) => {
|
|
371
|
+
table.increments('id');
|
|
372
|
+
table.string('name').unique().notNullable();
|
|
373
|
+
});
|
|
374
|
+
|
|
375
|
+
await knex.schema.alterTable('users', (table) => {
|
|
376
|
+
table.integer('role_id').references('id').inTable('roles');
|
|
377
|
+
});
|
|
378
|
+
};
|
|
379
|
+
|
|
380
|
+
exports.down = async function(knex) {
|
|
381
|
+
await knex.schema.alterTable('users', (table) => {
|
|
382
|
+
table.dropColumn('role_id');
|
|
383
|
+
});
|
|
384
|
+
await knex.schema.dropTable('roles');
|
|
385
|
+
};
|
|
386
|
+
context:
|
|
387
|
+
database: postgresql
|
|
388
|
+
framework: knex
|
|
389
|
+
test_type: migration
|
|
390
|
+
|
|
391
|
+
expected_output:
|
|
392
|
+
must_contain:
|
|
393
|
+
- "migration"
|
|
394
|
+
- "forward"
|
|
395
|
+
- "roles"
|
|
396
|
+
- "users"
|
|
397
|
+
must_not_contain:
|
|
398
|
+
- "failed"
|
|
399
|
+
- "error"
|
|
400
|
+
must_match_regex:
|
|
401
|
+
- "up|forward|apply"
|
|
402
|
+
|
|
403
|
+
validation:
|
|
404
|
+
schema_check: true
|
|
405
|
+
keyword_match_threshold: 0.7
|
|
406
|
+
|
|
407
|
+
- id: tc007_migration_rollback_test
|
|
408
|
+
description: "Test migration rollback works correctly"
|
|
409
|
+
category: migration
|
|
410
|
+
priority: critical
|
|
411
|
+
|
|
412
|
+
input:
|
|
413
|
+
code: |
|
|
414
|
+
// Test migration rollback
|
|
415
|
+
await migrate.latest(); // Apply all migrations
|
|
416
|
+
await migrate.rollback(); // Rollback last batch
|
|
417
|
+
|
|
418
|
+
// Verify tables are removed
|
|
419
|
+
const tables = await knex.raw("SELECT table_name FROM information_schema.tables");
|
|
420
|
+
expect(tables).not.toContain('new_feature_table');
|
|
421
|
+
context:
|
|
422
|
+
database: postgresql
|
|
423
|
+
framework: knex
|
|
424
|
+
test_type: migration
|
|
425
|
+
|
|
426
|
+
expected_output:
|
|
427
|
+
must_contain:
|
|
428
|
+
- "rollback"
|
|
429
|
+
- "down"
|
|
430
|
+
- "reverse"
|
|
431
|
+
must_not_contain:
|
|
432
|
+
- "irreversible"
|
|
433
|
+
- "failed"
|
|
434
|
+
severity_classification: medium
|
|
435
|
+
|
|
436
|
+
validation:
|
|
437
|
+
schema_check: true
|
|
438
|
+
keyword_match_threshold: 0.7
|
|
439
|
+
|
|
440
|
+
- id: tc008_migration_data_preservation
|
|
441
|
+
description: "Test migration preserves existing data"
|
|
442
|
+
category: migration
|
|
443
|
+
priority: critical
|
|
444
|
+
|
|
445
|
+
input:
|
|
446
|
+
code: |
|
|
447
|
+
// Existing data before migration
|
|
448
|
+
await db.users.create({ email: 'existing@example.com', name: 'Existing User' });
|
|
449
|
+
|
|
450
|
+
// Migration adds new column
|
|
451
|
+
exports.up = async function(knex) {
|
|
452
|
+
await knex.schema.alterTable('users', (table) => {
|
|
453
|
+
table.string('phone').nullable();
|
|
454
|
+
});
|
|
455
|
+
};
|
|
456
|
+
|
|
457
|
+
// After migration, verify existing data is preserved
|
|
458
|
+
const user = await db.users.findOne({ email: 'existing@example.com' });
|
|
459
|
+
expect(user.name).toBe('Existing User'); // Data should be intact
|
|
460
|
+
expect(user.phone).toBeNull(); // New column should be null
|
|
461
|
+
context:
|
|
462
|
+
database: postgresql
|
|
463
|
+
framework: knex
|
|
464
|
+
test_type: migration
|
|
465
|
+
|
|
466
|
+
expected_output:
|
|
467
|
+
must_contain:
|
|
468
|
+
- "data preservation"
|
|
469
|
+
- "existing"
|
|
470
|
+
- "intact"
|
|
471
|
+
- "backward compatible"
|
|
472
|
+
must_not_contain:
|
|
473
|
+
- "data loss"
|
|
474
|
+
- "corrupted"
|
|
475
|
+
severity_classification: critical
|
|
476
|
+
|
|
477
|
+
validation:
|
|
478
|
+
schema_check: true
|
|
479
|
+
keyword_match_threshold: 0.7
|
|
480
|
+
|
|
481
|
+
# ---------------------------------------------------------------------------
|
|
482
|
+
# CATEGORY: Transaction Testing (ACID)
|
|
483
|
+
# ---------------------------------------------------------------------------
|
|
484
|
+
|
|
485
|
+
- id: tc009_atomicity_test
|
|
486
|
+
description: "Test transaction atomicity - all or nothing"
|
|
487
|
+
category: transaction
|
|
488
|
+
priority: critical
|
|
489
|
+
|
|
490
|
+
input:
|
|
491
|
+
code: |
|
|
492
|
+
test('transaction rolls back on error', async () => {
|
|
493
|
+
const initialCount = await db.users.count();
|
|
494
|
+
|
|
495
|
+
try {
|
|
496
|
+
await db.transaction(async (trx) => {
|
|
497
|
+
await trx('users').insert({ email: 'user1@example.com' });
|
|
498
|
+
await trx('users').insert({ email: 'user2@example.com' });
|
|
499
|
+
throw new Error('Intentional rollback');
|
|
500
|
+
});
|
|
501
|
+
} catch (error) { /* Expected */ }
|
|
502
|
+
|
|
503
|
+
// Count should be unchanged
|
|
504
|
+
expect(await db.users.count()).toBe(initialCount);
|
|
505
|
+
});
|
|
506
|
+
context:
|
|
507
|
+
database: postgresql
|
|
508
|
+
framework: knex
|
|
509
|
+
test_type: transaction
|
|
510
|
+
|
|
511
|
+
expected_output:
|
|
512
|
+
must_contain:
|
|
513
|
+
- "atomicity"
|
|
514
|
+
- "rollback"
|
|
515
|
+
- "transaction"
|
|
516
|
+
- "all or nothing"
|
|
517
|
+
must_not_contain:
|
|
518
|
+
- "partial commit"
|
|
519
|
+
must_match_regex:
|
|
520
|
+
- "ACID|atomic"
|
|
521
|
+
severity_classification: critical
|
|
522
|
+
|
|
523
|
+
validation:
|
|
524
|
+
schema_check: true
|
|
525
|
+
keyword_match_threshold: 0.8
|
|
526
|
+
reasoning_quality_min: 0.8
|
|
527
|
+
|
|
528
|
+
- id: tc010_isolation_test
|
|
529
|
+
description: "Test transaction isolation - concurrent access"
|
|
530
|
+
category: transaction
|
|
531
|
+
priority: critical
|
|
532
|
+
|
|
533
|
+
input:
|
|
534
|
+
code: |
|
|
535
|
+
test('concurrent transactions isolated', async () => {
|
|
536
|
+
const user = await db.users.create({ balance: 100 });
|
|
537
|
+
|
|
538
|
+
// Two concurrent withdrawals - race condition test
|
|
539
|
+
const results = await Promise.all([
|
|
540
|
+
db.transaction(async (trx) => {
|
|
541
|
+
const current = await trx('users').where({ id: user.id }).first();
|
|
542
|
+
if (current.balance >= 50) {
|
|
543
|
+
await trx('users').where({ id: user.id }).update({
|
|
544
|
+
balance: current.balance - 50
|
|
545
|
+
});
|
|
546
|
+
return 'success';
|
|
547
|
+
}
|
|
548
|
+
return 'insufficient';
|
|
549
|
+
}),
|
|
550
|
+
db.transaction(async (trx) => {
|
|
551
|
+
const current = await trx('users').where({ id: user.id }).first();
|
|
552
|
+
if (current.balance >= 50) {
|
|
553
|
+
await trx('users').where({ id: user.id }).update({
|
|
554
|
+
balance: current.balance - 50
|
|
555
|
+
});
|
|
556
|
+
return 'success';
|
|
557
|
+
}
|
|
558
|
+
return 'insufficient';
|
|
559
|
+
})
|
|
560
|
+
]);
|
|
561
|
+
|
|
562
|
+
const final = await db.users.findOne({ id: user.id });
|
|
563
|
+
// With proper isolation, one should fail or balance should be 0
|
|
564
|
+
expect(final.balance).toBeGreaterThanOrEqual(0);
|
|
565
|
+
});
|
|
566
|
+
context:
|
|
567
|
+
database: postgresql
|
|
568
|
+
framework: knex
|
|
569
|
+
test_type: transaction
|
|
570
|
+
isolation_level: REPEATABLE_READ
|
|
571
|
+
|
|
572
|
+
expected_output:
|
|
573
|
+
must_contain:
|
|
574
|
+
- "isolation"
|
|
575
|
+
- "concurrent"
|
|
576
|
+
- "race condition"
|
|
577
|
+
- "lock"
|
|
578
|
+
must_match_regex:
|
|
579
|
+
- "READ_COMMITTED|REPEATABLE_READ|SERIALIZABLE"
|
|
580
|
+
severity_classification: critical
|
|
581
|
+
|
|
582
|
+
validation:
|
|
583
|
+
schema_check: true
|
|
584
|
+
keyword_match_threshold: 0.7
|
|
585
|
+
|
|
586
|
+
- id: tc011_deadlock_detection
|
|
587
|
+
description: "Test deadlock detection and resolution"
|
|
588
|
+
category: transaction
|
|
589
|
+
priority: high
|
|
590
|
+
|
|
591
|
+
input:
|
|
592
|
+
code: |
|
|
593
|
+
test('deadlock is detected and handled', async () => {
|
|
594
|
+
// Create potential deadlock scenario
|
|
595
|
+
const tx1 = db.transaction(async (trx) => {
|
|
596
|
+
await trx('accounts').where({ id: 1 }).update({ balance: 100 });
|
|
597
|
+
await delay(100);
|
|
598
|
+
await trx('accounts').where({ id: 2 }).update({ balance: 200 });
|
|
599
|
+
});
|
|
600
|
+
|
|
601
|
+
const tx2 = db.transaction(async (trx) => {
|
|
602
|
+
await trx('accounts').where({ id: 2 }).update({ balance: 150 });
|
|
603
|
+
await delay(100);
|
|
604
|
+
await trx('accounts').where({ id: 1 }).update({ balance: 250 });
|
|
605
|
+
});
|
|
606
|
+
|
|
607
|
+
// One should fail with deadlock, other should succeed
|
|
608
|
+
const results = await Promise.allSettled([tx1, tx2]);
|
|
609
|
+
const failures = results.filter(r => r.status === 'rejected');
|
|
610
|
+
expect(failures.some(f => f.reason.message.includes('deadlock'))).toBe(true);
|
|
611
|
+
});
|
|
612
|
+
context:
|
|
613
|
+
database: postgresql
|
|
614
|
+
framework: knex
|
|
615
|
+
test_type: transaction
|
|
616
|
+
|
|
617
|
+
expected_output:
|
|
618
|
+
must_contain:
|
|
619
|
+
- "deadlock"
|
|
620
|
+
- "detection"
|
|
621
|
+
- "retry"
|
|
622
|
+
- "conflict"
|
|
623
|
+
severity_classification: high
|
|
624
|
+
|
|
625
|
+
validation:
|
|
626
|
+
schema_check: true
|
|
627
|
+
keyword_match_threshold: 0.7
|
|
628
|
+
|
|
629
|
+
# ---------------------------------------------------------------------------
|
|
630
|
+
# CATEGORY: Performance Testing
|
|
631
|
+
# ---------------------------------------------------------------------------
|
|
632
|
+
|
|
633
|
+
- id: tc012_slow_query_detection
|
|
634
|
+
description: "Detect slow queries without proper indexing"
|
|
635
|
+
category: performance
|
|
636
|
+
priority: high
|
|
637
|
+
|
|
638
|
+
input:
|
|
639
|
+
code: |
|
|
640
|
+
-- Slow query: full table scan on large table
|
|
641
|
+
SELECT * FROM orders
|
|
642
|
+
WHERE created_at BETWEEN '2024-01-01' AND '2024-12-31'
|
|
643
|
+
AND status = 'pending';
|
|
644
|
+
|
|
645
|
+
-- Table has 10 million rows, no index on created_at or status
|
|
646
|
+
EXPLAIN ANALYZE SELECT * FROM orders
|
|
647
|
+
WHERE created_at BETWEEN '2024-01-01' AND '2024-12-31';
|
|
648
|
+
-- Output: Seq Scan on orders (cost=0.00..250000.00 rows=5000000)
|
|
649
|
+
context:
|
|
650
|
+
database: postgresql
|
|
651
|
+
test_type: performance
|
|
652
|
+
table_size: 10000000
|
|
653
|
+
|
|
654
|
+
expected_output:
|
|
655
|
+
must_contain:
|
|
656
|
+
- "slow query"
|
|
657
|
+
- "full table scan"
|
|
658
|
+
- "index"
|
|
659
|
+
- "Seq Scan"
|
|
660
|
+
must_match_regex:
|
|
661
|
+
- "CREATE INDEX"
|
|
662
|
+
severity_classification: high
|
|
663
|
+
finding_count:
|
|
664
|
+
min: 1
|
|
665
|
+
|
|
666
|
+
validation:
|
|
667
|
+
schema_check: true
|
|
668
|
+
keyword_match_threshold: 0.8
|
|
669
|
+
|
|
670
|
+
- id: tc013_n_plus_one_detection
|
|
671
|
+
description: "Detect N+1 query problem"
|
|
672
|
+
category: performance
|
|
673
|
+
priority: high
|
|
674
|
+
|
|
675
|
+
input:
|
|
676
|
+
code: |
|
|
677
|
+
// N+1 query problem
|
|
678
|
+
const users = await User.findAll(); // 1 query
|
|
679
|
+
|
|
680
|
+
for (const user of users) {
|
|
681
|
+
const orders = await Order.findAll({
|
|
682
|
+
where: { userId: user.id }
|
|
683
|
+
}); // N queries!
|
|
684
|
+
user.orderCount = orders.length;
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
// Should be:
|
|
688
|
+
// const users = await User.findAll({
|
|
689
|
+
// include: [{ model: Order }]
|
|
690
|
+
// });
|
|
691
|
+
context:
|
|
692
|
+
database: postgresql
|
|
693
|
+
framework: sequelize
|
|
694
|
+
test_type: performance
|
|
695
|
+
|
|
696
|
+
expected_output:
|
|
697
|
+
must_contain:
|
|
698
|
+
- "N+1"
|
|
699
|
+
- "query"
|
|
700
|
+
- "include"
|
|
701
|
+
- "eager loading"
|
|
702
|
+
- "join"
|
|
703
|
+
must_not_contain:
|
|
704
|
+
- "efficient"
|
|
705
|
+
- "optimal"
|
|
706
|
+
severity_classification: high
|
|
707
|
+
|
|
708
|
+
validation:
|
|
709
|
+
schema_check: true
|
|
710
|
+
keyword_match_threshold: 0.8
|
|
711
|
+
|
|
712
|
+
- id: tc014_connection_pool_exhaustion
|
|
713
|
+
description: "Detect connection pool exhaustion risk"
|
|
714
|
+
category: performance
|
|
715
|
+
priority: critical
|
|
716
|
+
|
|
717
|
+
input:
|
|
718
|
+
code: |
|
|
719
|
+
// Connection leak - connections not released
|
|
720
|
+
async function getUserData(userId) {
|
|
721
|
+
const connection = await pool.getConnection();
|
|
722
|
+
const user = await connection.query('SELECT * FROM users WHERE id = ?', [userId]);
|
|
723
|
+
// Missing: connection.release()
|
|
724
|
+
return user;
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
// Called in a loop without releasing connections
|
|
728
|
+
for (let i = 0; i < 1000; i++) {
|
|
729
|
+
await getUserData(i);
|
|
730
|
+
}
|
|
731
|
+
context:
|
|
732
|
+
database: mysql
|
|
733
|
+
framework: mysql2
|
|
734
|
+
test_type: performance
|
|
735
|
+
pool_size: 10
|
|
736
|
+
|
|
737
|
+
expected_output:
|
|
738
|
+
must_contain:
|
|
739
|
+
- "connection"
|
|
740
|
+
- "pool"
|
|
741
|
+
- "leak"
|
|
742
|
+
- "release"
|
|
743
|
+
- "exhaustion"
|
|
744
|
+
severity_classification: critical
|
|
745
|
+
|
|
746
|
+
validation:
|
|
747
|
+
schema_check: true
|
|
748
|
+
keyword_match_threshold: 0.8
|
|
749
|
+
|
|
750
|
+
# ---------------------------------------------------------------------------
|
|
751
|
+
# CATEGORY: Multi-Database Support
|
|
752
|
+
# ---------------------------------------------------------------------------
|
|
753
|
+
|
|
754
|
+
- id: tc015_mongodb_schema_validation
|
|
755
|
+
description: "Test MongoDB schema validation"
|
|
756
|
+
category: schema
|
|
757
|
+
priority: high
|
|
758
|
+
|
|
759
|
+
input:
|
|
760
|
+
code: |
|
|
761
|
+
// MongoDB collection without schema validation
|
|
762
|
+
db.createCollection("users");
|
|
763
|
+
|
|
764
|
+
// Can insert inconsistent documents
|
|
765
|
+
db.users.insertOne({ email: "user@example.com", age: 25 });
|
|
766
|
+
db.users.insertOne({ email: 123, age: "twenty" }); // Wrong types!
|
|
767
|
+
db.users.insertOne({ name: "John" }); // Missing email
|
|
768
|
+
|
|
769
|
+
// Should have JSON Schema validation:
|
|
770
|
+
db.createCollection("users", {
|
|
771
|
+
validator: {
|
|
772
|
+
$jsonSchema: {
|
|
773
|
+
bsonType: "object",
|
|
774
|
+
required: ["email"],
|
|
775
|
+
properties: {
|
|
776
|
+
email: { bsonType: "string" },
|
|
777
|
+
age: { bsonType: "int" }
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
}
|
|
781
|
+
});
|
|
782
|
+
context:
|
|
783
|
+
database: mongodb
|
|
784
|
+
test_type: schema
|
|
785
|
+
|
|
786
|
+
expected_output:
|
|
787
|
+
must_contain:
|
|
788
|
+
- "schema validation"
|
|
789
|
+
- "MongoDB"
|
|
790
|
+
- "jsonSchema"
|
|
791
|
+
- "bsonType"
|
|
792
|
+
severity_classification: high
|
|
793
|
+
|
|
794
|
+
validation:
|
|
795
|
+
schema_check: true
|
|
796
|
+
keyword_match_threshold: 0.7
|
|
797
|
+
|
|
798
|
+
- id: tc016_sqlite_foreign_key_enforcement
|
|
799
|
+
description: "Test SQLite foreign key enforcement"
|
|
800
|
+
category: integrity
|
|
801
|
+
priority: high
|
|
802
|
+
|
|
803
|
+
input:
|
|
804
|
+
code: |
|
|
805
|
+
-- SQLite: Foreign keys are OFF by default!
|
|
806
|
+
CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT);
|
|
807
|
+
CREATE TABLE orders (
|
|
808
|
+
id INTEGER PRIMARY KEY,
|
|
809
|
+
user_id INTEGER REFERENCES users(id)
|
|
810
|
+
);
|
|
811
|
+
|
|
812
|
+
-- This succeeds even though user 999 doesn't exist
|
|
813
|
+
INSERT INTO orders (user_id) VALUES (999);
|
|
814
|
+
|
|
815
|
+
-- Need to enable: PRAGMA foreign_keys = ON;
|
|
816
|
+
context:
|
|
817
|
+
database: sqlite
|
|
818
|
+
test_type: integrity
|
|
819
|
+
|
|
820
|
+
expected_output:
|
|
821
|
+
must_contain:
|
|
822
|
+
- "foreign_keys"
|
|
823
|
+
- "PRAGMA"
|
|
824
|
+
- "SQLite"
|
|
825
|
+
- "enforcement"
|
|
826
|
+
must_match_regex:
|
|
827
|
+
- "PRAGMA foreign_keys\\s*=\\s*ON"
|
|
828
|
+
severity_classification: high
|
|
829
|
+
|
|
830
|
+
validation:
|
|
831
|
+
schema_check: true
|
|
832
|
+
keyword_match_threshold: 0.8
|
|
833
|
+
|
|
834
|
+
# ---------------------------------------------------------------------------
|
|
835
|
+
# CATEGORY: Negative Tests (Secure/Valid Code)
|
|
836
|
+
# ---------------------------------------------------------------------------
|
|
837
|
+
|
|
838
|
+
- id: tc017_valid_schema_no_false_positives
|
|
839
|
+
description: "Verify well-designed schema is NOT flagged as problematic"
|
|
840
|
+
category: negative
|
|
841
|
+
priority: critical
|
|
842
|
+
|
|
843
|
+
input:
|
|
844
|
+
code: |
|
|
845
|
+
CREATE TABLE users (
|
|
846
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
847
|
+
email VARCHAR(255) UNIQUE NOT NULL,
|
|
848
|
+
password_hash VARCHAR(255) NOT NULL,
|
|
849
|
+
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
850
|
+
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
|
851
|
+
);
|
|
852
|
+
|
|
853
|
+
CREATE TABLE orders (
|
|
854
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
855
|
+
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
856
|
+
total DECIMAL(10,2) NOT NULL CHECK (total >= 0),
|
|
857
|
+
status VARCHAR(20) NOT NULL DEFAULT 'pending'
|
|
858
|
+
CHECK (status IN ('pending', 'processing', 'shipped', 'delivered', 'cancelled')),
|
|
859
|
+
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
|
860
|
+
);
|
|
861
|
+
|
|
862
|
+
CREATE INDEX idx_orders_user_id ON orders(user_id);
|
|
863
|
+
CREATE INDEX idx_orders_status ON orders(status);
|
|
864
|
+
CREATE INDEX idx_orders_created_at ON orders(created_at);
|
|
865
|
+
context:
|
|
866
|
+
database: postgresql
|
|
867
|
+
framework: prisma
|
|
868
|
+
environment: production
|
|
869
|
+
|
|
870
|
+
expected_output:
|
|
871
|
+
must_contain:
|
|
872
|
+
- "valid"
|
|
873
|
+
- "well-designed"
|
|
874
|
+
- "proper constraints"
|
|
875
|
+
must_not_contain:
|
|
876
|
+
- "missing constraint"
|
|
877
|
+
- "critical"
|
|
878
|
+
- "high severity"
|
|
879
|
+
- "orphaned"
|
|
880
|
+
finding_count:
|
|
881
|
+
max: 2 # Allow informational findings only
|
|
882
|
+
|
|
883
|
+
validation:
|
|
884
|
+
schema_check: true
|
|
885
|
+
keyword_match_threshold: 0.6
|
|
886
|
+
allow_partial: true
|
|
887
|
+
|
|
888
|
+
- id: tc018_proper_migration_pattern
|
|
889
|
+
description: "Verify proper migration pattern is recognized"
|
|
890
|
+
category: negative
|
|
891
|
+
priority: high
|
|
892
|
+
|
|
893
|
+
input:
|
|
894
|
+
code: |
|
|
895
|
+
// Proper reversible migration with data preservation
|
|
896
|
+
exports.up = async function(knex) {
|
|
897
|
+
// Check if column exists before adding
|
|
898
|
+
const hasColumn = await knex.schema.hasColumn('users', 'phone');
|
|
899
|
+
if (!hasColumn) {
|
|
900
|
+
await knex.schema.alterTable('users', (table) => {
|
|
901
|
+
table.string('phone').nullable();
|
|
902
|
+
});
|
|
903
|
+
}
|
|
904
|
+
};
|
|
905
|
+
|
|
906
|
+
exports.down = async function(knex) {
|
|
907
|
+
const hasColumn = await knex.schema.hasColumn('users', 'phone');
|
|
908
|
+
if (hasColumn) {
|
|
909
|
+
await knex.schema.alterTable('users', (table) => {
|
|
910
|
+
table.dropColumn('phone');
|
|
911
|
+
});
|
|
912
|
+
}
|
|
913
|
+
};
|
|
914
|
+
context:
|
|
915
|
+
database: postgresql
|
|
916
|
+
framework: knex
|
|
917
|
+
test_type: migration
|
|
918
|
+
|
|
919
|
+
expected_output:
|
|
920
|
+
must_contain:
|
|
921
|
+
- "reversible"
|
|
922
|
+
- "idempotent"
|
|
923
|
+
- "safe"
|
|
924
|
+
must_not_contain:
|
|
925
|
+
- "irreversible"
|
|
926
|
+
- "data loss"
|
|
927
|
+
- "critical"
|
|
928
|
+
severity_classification: info
|
|
929
|
+
|
|
930
|
+
validation:
|
|
931
|
+
schema_check: true
|
|
932
|
+
allow_partial: true
|
|
933
|
+
|
|
934
|
+
# =============================================================================
|
|
935
|
+
# SUCCESS CRITERIA
|
|
936
|
+
# =============================================================================
|
|
937
|
+
|
|
938
|
+
success_criteria:
|
|
939
|
+
# Overall pass rate (90% of tests must pass)
|
|
940
|
+
pass_rate: 0.9
|
|
941
|
+
|
|
942
|
+
# Critical tests must ALL pass (100%)
|
|
943
|
+
critical_pass_rate: 1.0
|
|
944
|
+
|
|
945
|
+
# Average reasoning quality score
|
|
946
|
+
avg_reasoning_quality: 0.75
|
|
947
|
+
|
|
948
|
+
# Maximum suite execution time (5 minutes)
|
|
949
|
+
max_execution_time_ms: 300000
|
|
950
|
+
|
|
951
|
+
# Maximum variance between model results (15%)
|
|
952
|
+
cross_model_variance: 0.15
|
|
953
|
+
|
|
954
|
+
# =============================================================================
|
|
955
|
+
# METADATA
|
|
956
|
+
# =============================================================================
|
|
957
|
+
|
|
958
|
+
metadata:
|
|
959
|
+
author: "qe-test-data-architect"
|
|
960
|
+
created: "2026-02-02"
|
|
961
|
+
last_updated: "2026-02-02"
|
|
962
|
+
coverage_target: >
|
|
963
|
+
Database testing coverage: Schema validation (missing constraints, indexes),
|
|
964
|
+
Data integrity (unique, FK, check, NOT NULL), Migration testing (forward,
|
|
965
|
+
rollback, data preservation), Transaction testing (ACID: atomicity, isolation,
|
|
966
|
+
deadlock), Performance (slow queries, N+1, connection pools). Multi-database
|
|
967
|
+
support: PostgreSQL, MySQL, MongoDB, SQLite. 18 test cases with 90% pass rate
|
|
968
|
+
requirement and 100% critical pass rate for ACID and migration tests.
|