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,1099 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# =============================================================================
|
|
3
|
+
# AQE Skill Validator: database-testing v1.0.0
|
|
4
|
+
# Validates database testing skill output per ADR-056
|
|
5
|
+
# =============================================================================
|
|
6
|
+
#
|
|
7
|
+
# This validator checks:
|
|
8
|
+
# 1. JSON schema compliance (database test types, findings, integrity)
|
|
9
|
+
# 2. Required tools availability (jq required, database clients optional)
|
|
10
|
+
# 3. Test type coverage (schema, integrity, migration, transaction, performance)
|
|
11
|
+
# 4. Finding and recommendation structure validation
|
|
12
|
+
# 5. Database-specific content validation
|
|
13
|
+
#
|
|
14
|
+
# Usage: ./validate.sh <output-file> [options]
|
|
15
|
+
#
|
|
16
|
+
# Options:
|
|
17
|
+
# --self-test Run validator self-test mode
|
|
18
|
+
# --verbose Enable verbose output
|
|
19
|
+
# --json Output results as JSON only
|
|
20
|
+
# --list-tools Show available validation tools
|
|
21
|
+
# --help Show this help message
|
|
22
|
+
#
|
|
23
|
+
# Exit Codes:
|
|
24
|
+
# 0 - Validation passed
|
|
25
|
+
# 1 - Validation failed
|
|
26
|
+
# 2 - Validation skipped (missing required tools)
|
|
27
|
+
#
|
|
28
|
+
# =============================================================================
|
|
29
|
+
|
|
30
|
+
set -euo pipefail
|
|
31
|
+
|
|
32
|
+
# Get script directory
|
|
33
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
34
|
+
|
|
35
|
+
# Navigate to skill directory and project root
|
|
36
|
+
# scripts/ -> database-testing/ -> skills/ -> .claude/ -> project root
|
|
37
|
+
SKILL_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
38
|
+
PROJECT_ROOT="$(cd "$SKILL_DIR/../../.." && pwd)"
|
|
39
|
+
|
|
40
|
+
# Source validator library - check multiple locations
|
|
41
|
+
VALIDATOR_LIB=""
|
|
42
|
+
for lib_path in \
|
|
43
|
+
"$PROJECT_ROOT/.claude/skills/.validation/templates/validator-lib.sh" \
|
|
44
|
+
"$SKILL_DIR/scripts/validator-lib.sh" \
|
|
45
|
+
"$SCRIPT_DIR/validator-lib.sh"; do
|
|
46
|
+
if [[ -f "$lib_path" ]]; then
|
|
47
|
+
VALIDATOR_LIB="$lib_path"
|
|
48
|
+
break
|
|
49
|
+
fi
|
|
50
|
+
done
|
|
51
|
+
|
|
52
|
+
if [[ -n "$VALIDATOR_LIB" ]]; then
|
|
53
|
+
# shellcheck source=/dev/null
|
|
54
|
+
source "$VALIDATOR_LIB"
|
|
55
|
+
else
|
|
56
|
+
echo "ERROR: Validator library not found"
|
|
57
|
+
echo "Searched:"
|
|
58
|
+
echo " - $PROJECT_ROOT/.claude/skills/.validation/templates/validator-lib.sh"
|
|
59
|
+
echo " - $SKILL_DIR/scripts/validator-lib.sh"
|
|
60
|
+
echo " - $SCRIPT_DIR/validator-lib.sh"
|
|
61
|
+
exit 1
|
|
62
|
+
fi
|
|
63
|
+
|
|
64
|
+
# =============================================================================
|
|
65
|
+
# SKILL-SPECIFIC CONFIGURATION
|
|
66
|
+
# =============================================================================
|
|
67
|
+
|
|
68
|
+
# Skill name and version
|
|
69
|
+
SKILL_NAME="database-testing"
|
|
70
|
+
SKILL_VERSION="1.0.0"
|
|
71
|
+
|
|
72
|
+
# Required tools (validation FAILS with exit 2 if missing)
|
|
73
|
+
# jq is essential for JSON parsing
|
|
74
|
+
REQUIRED_TOOLS=("jq")
|
|
75
|
+
|
|
76
|
+
# Optional tools (validation continues with warnings if missing)
|
|
77
|
+
# These enhance database testing capabilities
|
|
78
|
+
OPTIONAL_TOOLS=("psql" "mysql" "mongo" "sqlite3" "node" "ajv" "jsonschema" "python3")
|
|
79
|
+
|
|
80
|
+
# Path to output JSON schema
|
|
81
|
+
SCHEMA_PATH="$SKILL_DIR/schemas/output.json"
|
|
82
|
+
|
|
83
|
+
# Path to sample test data for self-test
|
|
84
|
+
SAMPLE_OUTPUT_PATH="$PROJECT_ROOT/.claude/skills/.validation/examples/database-testing-output.example.json"
|
|
85
|
+
|
|
86
|
+
# =============================================================================
|
|
87
|
+
# CONTENT VALIDATION CONFIGURATION
|
|
88
|
+
# =============================================================================
|
|
89
|
+
|
|
90
|
+
# Required fields in output
|
|
91
|
+
REQUIRED_FIELDS=("skillName" "status" "output" "output.summary" "output.findings" "output.testTypes" "output.databaseInfo")
|
|
92
|
+
|
|
93
|
+
# Fields that must have non-null, non-empty values
|
|
94
|
+
REQUIRED_NON_EMPTY_FIELDS=("output.summary")
|
|
95
|
+
|
|
96
|
+
# Database-specific terms that MUST appear in output
|
|
97
|
+
MUST_CONTAIN_TERMS=("database" "schema" "table")
|
|
98
|
+
|
|
99
|
+
# Terms that must NOT appear in output (indicates failure/hallucination)
|
|
100
|
+
MUST_NOT_CONTAIN_TERMS=("TODO" "placeholder" "FIXME")
|
|
101
|
+
|
|
102
|
+
# Enum validations
|
|
103
|
+
ENUM_VALIDATIONS=(
|
|
104
|
+
".status:success,partial,failed,skipped"
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
# Minimum array lengths
|
|
108
|
+
MIN_ARRAY_LENGTHS=()
|
|
109
|
+
|
|
110
|
+
# =============================================================================
|
|
111
|
+
# Argument Parsing
|
|
112
|
+
# =============================================================================
|
|
113
|
+
|
|
114
|
+
OUTPUT_FILE=""
|
|
115
|
+
SELF_TEST=false
|
|
116
|
+
VERBOSE=false
|
|
117
|
+
JSON_ONLY=false
|
|
118
|
+
LIST_TOOLS=false
|
|
119
|
+
|
|
120
|
+
while [[ $# -gt 0 ]]; do
|
|
121
|
+
case "$1" in
|
|
122
|
+
--self-test)
|
|
123
|
+
SELF_TEST=true
|
|
124
|
+
shift
|
|
125
|
+
;;
|
|
126
|
+
--verbose|-v)
|
|
127
|
+
VERBOSE=true
|
|
128
|
+
export AQE_DEBUG=1
|
|
129
|
+
shift
|
|
130
|
+
;;
|
|
131
|
+
--json)
|
|
132
|
+
JSON_ONLY=true
|
|
133
|
+
shift
|
|
134
|
+
;;
|
|
135
|
+
--list-tools)
|
|
136
|
+
LIST_TOOLS=true
|
|
137
|
+
shift
|
|
138
|
+
;;
|
|
139
|
+
-h|--help)
|
|
140
|
+
cat << 'HELP_EOF'
|
|
141
|
+
AQE Database Testing Skill Validator v1.0.0
|
|
142
|
+
|
|
143
|
+
Usage: ./validate.sh <output-file> [options]
|
|
144
|
+
./validate.sh --self-test [--verbose]
|
|
145
|
+
./validate.sh --list-tools
|
|
146
|
+
|
|
147
|
+
Arguments:
|
|
148
|
+
<output-file> Path to skill output JSON file to validate
|
|
149
|
+
|
|
150
|
+
Options:
|
|
151
|
+
--self-test Run validator self-test mode
|
|
152
|
+
--verbose, -v Enable verbose/debug output
|
|
153
|
+
--json Output results as JSON only (for CI integration)
|
|
154
|
+
--list-tools Show available validation tools and exit
|
|
155
|
+
--help, -h Show this help message
|
|
156
|
+
|
|
157
|
+
Exit Codes:
|
|
158
|
+
0 - Validation passed
|
|
159
|
+
1 - Validation failed
|
|
160
|
+
2 - Validation skipped (missing required tools)
|
|
161
|
+
|
|
162
|
+
Database Tool Support:
|
|
163
|
+
Required: jq (JSON parsing)
|
|
164
|
+
Optional: psql (PostgreSQL), mysql (MySQL), mongo (MongoDB),
|
|
165
|
+
sqlite3 (SQLite), node (ORM tools)
|
|
166
|
+
|
|
167
|
+
Examples:
|
|
168
|
+
./validate.sh database-output.json # Validate output file
|
|
169
|
+
./validate.sh database-output.json --json # JSON output for CI
|
|
170
|
+
./validate.sh --self-test --verbose # Self-test with debug
|
|
171
|
+
./validate.sh --list-tools # Show available tools
|
|
172
|
+
|
|
173
|
+
HELP_EOF
|
|
174
|
+
exit 0
|
|
175
|
+
;;
|
|
176
|
+
-*)
|
|
177
|
+
error "Unknown option: $1"
|
|
178
|
+
echo "Use --help for usage information"
|
|
179
|
+
exit 1
|
|
180
|
+
;;
|
|
181
|
+
*)
|
|
182
|
+
OUTPUT_FILE="$1"
|
|
183
|
+
shift
|
|
184
|
+
;;
|
|
185
|
+
esac
|
|
186
|
+
done
|
|
187
|
+
|
|
188
|
+
# Handle --list-tools mode
|
|
189
|
+
if [[ "$LIST_TOOLS" == "true" ]]; then
|
|
190
|
+
echo "=============================================="
|
|
191
|
+
echo "Available Validation Tools for $SKILL_NAME"
|
|
192
|
+
echo "=============================================="
|
|
193
|
+
echo ""
|
|
194
|
+
echo "Required tools (validation fails if missing):"
|
|
195
|
+
for tool in "${REQUIRED_TOOLS[@]}"; do
|
|
196
|
+
if command_exists "$tool"; then
|
|
197
|
+
version=$($tool --version 2>&1 | head -1 || echo "installed")
|
|
198
|
+
echo " [OK] $tool - $version"
|
|
199
|
+
else
|
|
200
|
+
echo " [MISSING] $tool"
|
|
201
|
+
fi
|
|
202
|
+
done
|
|
203
|
+
echo ""
|
|
204
|
+
echo "Optional tools (enhances validation):"
|
|
205
|
+
for tool in "${OPTIONAL_TOOLS[@]}"; do
|
|
206
|
+
if command_exists "$tool"; then
|
|
207
|
+
version=""
|
|
208
|
+
case "$tool" in
|
|
209
|
+
psql) version=$(psql --version 2>&1 | head -1 || echo "installed") ;;
|
|
210
|
+
mysql) version=$(mysql --version 2>&1 | head -1 || echo "installed") ;;
|
|
211
|
+
mongo) version=$(mongo --version 2>&1 | head -1 || echo "installed") ;;
|
|
212
|
+
sqlite3) version=$(sqlite3 --version 2>&1 | head -1 || echo "installed") ;;
|
|
213
|
+
node) version=$(node --version 2>&1 | head -1 || echo "installed") ;;
|
|
214
|
+
python3) version=$(python3 --version 2>&1 | head -1 || echo "installed") ;;
|
|
215
|
+
*) version="installed" ;;
|
|
216
|
+
esac
|
|
217
|
+
echo " [OK] $tool - $version"
|
|
218
|
+
else
|
|
219
|
+
echo " [MISSING] $tool"
|
|
220
|
+
fi
|
|
221
|
+
done
|
|
222
|
+
echo ""
|
|
223
|
+
echo "Database Client Capabilities:"
|
|
224
|
+
if command_exists "psql"; then
|
|
225
|
+
echo " [OK] PostgreSQL - Full schema/query validation"
|
|
226
|
+
else
|
|
227
|
+
echo " [MISSING] psql - Install PostgreSQL client for PostgreSQL testing"
|
|
228
|
+
fi
|
|
229
|
+
if command_exists "mysql"; then
|
|
230
|
+
echo " [OK] MySQL - Full schema/query validation"
|
|
231
|
+
else
|
|
232
|
+
echo " [MISSING] mysql - Install MySQL client for MySQL testing"
|
|
233
|
+
fi
|
|
234
|
+
if command_exists "mongo" || command_exists "mongosh"; then
|
|
235
|
+
echo " [OK] MongoDB - Document/collection validation"
|
|
236
|
+
else
|
|
237
|
+
echo " [MISSING] mongo/mongosh - Install MongoDB tools for MongoDB testing"
|
|
238
|
+
fi
|
|
239
|
+
if command_exists "sqlite3"; then
|
|
240
|
+
echo " [OK] SQLite - Lightweight database validation"
|
|
241
|
+
else
|
|
242
|
+
echo " [MISSING] sqlite3 - Install SQLite for embedded database testing"
|
|
243
|
+
fi
|
|
244
|
+
if command_exists "node"; then
|
|
245
|
+
echo " [OK] Node.js - ORM-based validation (Knex, Prisma, TypeORM)"
|
|
246
|
+
else
|
|
247
|
+
echo " [MISSING] node - Install Node.js for ORM validation"
|
|
248
|
+
fi
|
|
249
|
+
exit 0
|
|
250
|
+
fi
|
|
251
|
+
|
|
252
|
+
# =============================================================================
|
|
253
|
+
# Self-Test Mode
|
|
254
|
+
# =============================================================================
|
|
255
|
+
|
|
256
|
+
if [[ "$SELF_TEST" == "true" ]]; then
|
|
257
|
+
echo "=============================================="
|
|
258
|
+
info "Running $SKILL_NAME Validator Self-Test"
|
|
259
|
+
echo "=============================================="
|
|
260
|
+
echo ""
|
|
261
|
+
echo "Validator version: $AQE_VALIDATOR_VERSION"
|
|
262
|
+
echo "Skill version: $SKILL_VERSION"
|
|
263
|
+
echo ""
|
|
264
|
+
|
|
265
|
+
self_test_passed=true
|
|
266
|
+
self_test_warnings=0
|
|
267
|
+
|
|
268
|
+
# Step 1: Check Required Tools
|
|
269
|
+
echo "--- Step 1: Required Tools ---"
|
|
270
|
+
for tool in "${REQUIRED_TOOLS[@]}"; do
|
|
271
|
+
if command_exists "$tool"; then
|
|
272
|
+
success "Required tool available: $tool"
|
|
273
|
+
else
|
|
274
|
+
error "Required tool MISSING: $tool"
|
|
275
|
+
self_test_passed=false
|
|
276
|
+
fi
|
|
277
|
+
done
|
|
278
|
+
echo ""
|
|
279
|
+
|
|
280
|
+
# Step 2: Check Database Tools
|
|
281
|
+
echo "--- Step 2: Database Tools ---"
|
|
282
|
+
db_tools=("psql" "mysql" "mongo" "sqlite3")
|
|
283
|
+
available_db_tools=0
|
|
284
|
+
for tool in "${db_tools[@]}"; do
|
|
285
|
+
if command_exists "$tool"; then
|
|
286
|
+
success "Database tool available: $tool"
|
|
287
|
+
((available_db_tools++)) || true
|
|
288
|
+
else
|
|
289
|
+
warn "Database tool missing: $tool"
|
|
290
|
+
((self_test_warnings++)) || true
|
|
291
|
+
fi
|
|
292
|
+
done
|
|
293
|
+
|
|
294
|
+
if [[ $available_db_tools -eq 0 ]]; then
|
|
295
|
+
warn "No database clients available - limited validation capability"
|
|
296
|
+
((self_test_warnings++)) || true
|
|
297
|
+
fi
|
|
298
|
+
echo ""
|
|
299
|
+
|
|
300
|
+
# Step 3: Check ORM/Node Support
|
|
301
|
+
echo "--- Step 3: ORM/Node Support ---"
|
|
302
|
+
if command_exists "node"; then
|
|
303
|
+
success "Node.js available for ORM validation"
|
|
304
|
+
# Check for common ORMs
|
|
305
|
+
if npm list knex 2>/dev/null | grep -q knex; then
|
|
306
|
+
success "Knex.js available"
|
|
307
|
+
else
|
|
308
|
+
info "Knex.js not detected (optional)"
|
|
309
|
+
fi
|
|
310
|
+
else
|
|
311
|
+
warn "Node.js not available - ORM validation limited"
|
|
312
|
+
((self_test_warnings++)) || true
|
|
313
|
+
fi
|
|
314
|
+
echo ""
|
|
315
|
+
|
|
316
|
+
# Step 4: Check Schema File
|
|
317
|
+
echo "--- Step 4: Schema File ---"
|
|
318
|
+
if [[ -f "$SCHEMA_PATH" ]]; then
|
|
319
|
+
success "Schema file exists: $SCHEMA_PATH"
|
|
320
|
+
if validate_json "$SCHEMA_PATH" 2>/dev/null; then
|
|
321
|
+
success "Schema file is valid JSON"
|
|
322
|
+
|
|
323
|
+
# Check for database-specific schema elements
|
|
324
|
+
if grep -q "testTypes" "$SCHEMA_PATH" 2>/dev/null; then
|
|
325
|
+
success "Schema includes testTypes definition"
|
|
326
|
+
else
|
|
327
|
+
warn "Schema may be missing testTypes"
|
|
328
|
+
((self_test_warnings++)) || true
|
|
329
|
+
fi
|
|
330
|
+
|
|
331
|
+
if grep -q "databaseInfo" "$SCHEMA_PATH" 2>/dev/null; then
|
|
332
|
+
success "Schema includes databaseInfo definition"
|
|
333
|
+
else
|
|
334
|
+
warn "Schema may be missing databaseInfo"
|
|
335
|
+
((self_test_warnings++)) || true
|
|
336
|
+
fi
|
|
337
|
+
|
|
338
|
+
if grep -q "schemaValidation" "$SCHEMA_PATH" 2>/dev/null; then
|
|
339
|
+
success "Schema includes schemaValidation definition"
|
|
340
|
+
else
|
|
341
|
+
warn "Schema may be missing schemaValidation"
|
|
342
|
+
((self_test_warnings++)) || true
|
|
343
|
+
fi
|
|
344
|
+
else
|
|
345
|
+
error "Schema file is NOT valid JSON"
|
|
346
|
+
self_test_passed=false
|
|
347
|
+
fi
|
|
348
|
+
else
|
|
349
|
+
error "Schema file not found: $SCHEMA_PATH"
|
|
350
|
+
self_test_passed=false
|
|
351
|
+
fi
|
|
352
|
+
echo ""
|
|
353
|
+
|
|
354
|
+
# Step 5: Test with Sample Data
|
|
355
|
+
echo "--- Step 5: Sample Data Validation ---"
|
|
356
|
+
if [[ -f "$SAMPLE_OUTPUT_PATH" ]]; then
|
|
357
|
+
success "Sample output file exists"
|
|
358
|
+
|
|
359
|
+
if validate_json "$SAMPLE_OUTPUT_PATH" 2>/dev/null; then
|
|
360
|
+
success "Sample output is valid JSON"
|
|
361
|
+
|
|
362
|
+
# Test database-specific validation
|
|
363
|
+
if validate_test_types "$SAMPLE_OUTPUT_PATH" 2>/dev/null; then
|
|
364
|
+
success "Sample output has valid test types"
|
|
365
|
+
else
|
|
366
|
+
warn "Sample output test types validation issue"
|
|
367
|
+
((self_test_warnings++)) || true
|
|
368
|
+
fi
|
|
369
|
+
else
|
|
370
|
+
error "Sample output is NOT valid JSON"
|
|
371
|
+
self_test_passed=false
|
|
372
|
+
fi
|
|
373
|
+
else
|
|
374
|
+
info "No sample output file found at: $SAMPLE_OUTPUT_PATH"
|
|
375
|
+
info "Skipping sample data validation"
|
|
376
|
+
fi
|
|
377
|
+
echo ""
|
|
378
|
+
|
|
379
|
+
# Step 6: Library Self-Test
|
|
380
|
+
echo "--- Step 6: Validator Library Self-Test ---"
|
|
381
|
+
if run_self_test 2>/dev/null; then
|
|
382
|
+
success "Library self-test passed"
|
|
383
|
+
else
|
|
384
|
+
error "Library self-test FAILED"
|
|
385
|
+
self_test_passed=false
|
|
386
|
+
fi
|
|
387
|
+
echo ""
|
|
388
|
+
|
|
389
|
+
# Summary
|
|
390
|
+
echo "=============================================="
|
|
391
|
+
echo "Self-Test Summary for $SKILL_NAME"
|
|
392
|
+
echo "=============================================="
|
|
393
|
+
|
|
394
|
+
if [[ "$self_test_passed" == "true" ]]; then
|
|
395
|
+
if [[ $self_test_warnings -gt 0 ]]; then
|
|
396
|
+
warn "Self-test PASSED with $self_test_warnings warning(s)"
|
|
397
|
+
exit 0
|
|
398
|
+
else
|
|
399
|
+
success "Self-test PASSED"
|
|
400
|
+
exit 0
|
|
401
|
+
fi
|
|
402
|
+
else
|
|
403
|
+
error "Self-test FAILED"
|
|
404
|
+
exit 1
|
|
405
|
+
fi
|
|
406
|
+
fi
|
|
407
|
+
|
|
408
|
+
# =============================================================================
|
|
409
|
+
# SKILL-SPECIFIC VALIDATION FUNCTIONS
|
|
410
|
+
# =============================================================================
|
|
411
|
+
|
|
412
|
+
# Validate test types structure
|
|
413
|
+
# Returns: 0 if valid, 1 if invalid
|
|
414
|
+
validate_test_types() {
|
|
415
|
+
local output_file="$1"
|
|
416
|
+
|
|
417
|
+
# Check testTypes exists
|
|
418
|
+
local test_types_data
|
|
419
|
+
test_types_data=$(json_get "$output_file" ".output.testTypes" 2>/dev/null)
|
|
420
|
+
|
|
421
|
+
if [[ -z "$test_types_data" ]] || [[ "$test_types_data" == "null" ]]; then
|
|
422
|
+
warn "Missing testTypes in output"
|
|
423
|
+
return 1
|
|
424
|
+
fi
|
|
425
|
+
|
|
426
|
+
# Check that at least some test types are present
|
|
427
|
+
local types_tested=0
|
|
428
|
+
for test_type in "schema" "integrity" "migration" "transaction" "performance" "dataQuality"; do
|
|
429
|
+
local type_data
|
|
430
|
+
type_data=$(json_get "$output_file" ".output.testTypes.$test_type" 2>/dev/null)
|
|
431
|
+
if [[ -n "$type_data" ]] && [[ "$type_data" != "null" ]]; then
|
|
432
|
+
((types_tested++)) || true
|
|
433
|
+
fi
|
|
434
|
+
done
|
|
435
|
+
|
|
436
|
+
if [[ $types_tested -eq 0 ]]; then
|
|
437
|
+
error "No test types found in testTypes"
|
|
438
|
+
return 1
|
|
439
|
+
fi
|
|
440
|
+
|
|
441
|
+
debug "Found $types_tested test types in output"
|
|
442
|
+
return 0
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
# Validate database info structure
|
|
446
|
+
# Returns: 0 if valid, 1 if invalid
|
|
447
|
+
validate_database_info() {
|
|
448
|
+
local output_file="$1"
|
|
449
|
+
|
|
450
|
+
# Check databaseInfo exists
|
|
451
|
+
local db_info
|
|
452
|
+
db_info=$(json_get "$output_file" ".output.databaseInfo" 2>/dev/null)
|
|
453
|
+
|
|
454
|
+
if [[ -z "$db_info" ]] || [[ "$db_info" == "null" ]]; then
|
|
455
|
+
warn "Missing databaseInfo in output"
|
|
456
|
+
return 1
|
|
457
|
+
fi
|
|
458
|
+
|
|
459
|
+
# Check database type is present
|
|
460
|
+
local db_type
|
|
461
|
+
db_type=$(json_get "$output_file" ".output.databaseInfo.type" 2>/dev/null)
|
|
462
|
+
|
|
463
|
+
if [[ -z "$db_type" ]] || [[ "$db_type" == "null" ]]; then
|
|
464
|
+
error "Missing database type in databaseInfo"
|
|
465
|
+
return 1
|
|
466
|
+
fi
|
|
467
|
+
|
|
468
|
+
# Validate database type is valid enum
|
|
469
|
+
if ! validate_enum "$db_type" "postgresql" "mysql" "mariadb" "mongodb" "sqlite" "mssql" "oracle" "redis" "cassandra" "other"; then
|
|
470
|
+
error "Invalid database type: $db_type"
|
|
471
|
+
return 1
|
|
472
|
+
fi
|
|
473
|
+
|
|
474
|
+
debug "Database type: $db_type"
|
|
475
|
+
return 0
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
# Validate database findings have required fields
|
|
479
|
+
# Returns: 0 if valid, 1 if invalid
|
|
480
|
+
validate_database_findings() {
|
|
481
|
+
local output_file="$1"
|
|
482
|
+
|
|
483
|
+
local finding_count
|
|
484
|
+
finding_count=$(json_count "$output_file" ".output.findings" 2>/dev/null)
|
|
485
|
+
|
|
486
|
+
if [[ -z "$finding_count" ]] || [[ "$finding_count" == "null" ]]; then
|
|
487
|
+
finding_count=0
|
|
488
|
+
fi
|
|
489
|
+
|
|
490
|
+
debug "Found $finding_count database findings"
|
|
491
|
+
|
|
492
|
+
# If there are findings, validate structure of first few
|
|
493
|
+
if [[ "$finding_count" -gt 0 ]]; then
|
|
494
|
+
# Check first finding has required fields
|
|
495
|
+
local first_id first_severity first_test_type
|
|
496
|
+
first_id=$(json_get "$output_file" ".output.findings[0].id" 2>/dev/null)
|
|
497
|
+
first_severity=$(json_get "$output_file" ".output.findings[0].severity" 2>/dev/null)
|
|
498
|
+
first_test_type=$(json_get "$output_file" ".output.findings[0].testType" 2>/dev/null)
|
|
499
|
+
|
|
500
|
+
if [[ -z "$first_id" ]] || [[ "$first_id" == "null" ]]; then
|
|
501
|
+
error "Finding missing 'id' field"
|
|
502
|
+
return 1
|
|
503
|
+
fi
|
|
504
|
+
|
|
505
|
+
# Validate ID format (DB-XXX)
|
|
506
|
+
if ! [[ "$first_id" =~ ^DB-[0-9]{3,6}$ ]]; then
|
|
507
|
+
warn "Finding ID does not match expected pattern DB-XXX: $first_id"
|
|
508
|
+
fi
|
|
509
|
+
|
|
510
|
+
if [[ -z "$first_severity" ]] || [[ "$first_severity" == "null" ]]; then
|
|
511
|
+
error "Finding missing 'severity' field"
|
|
512
|
+
return 1
|
|
513
|
+
fi
|
|
514
|
+
|
|
515
|
+
# Validate severity is valid enum
|
|
516
|
+
if ! validate_enum "$first_severity" "critical" "high" "medium" "low" "info"; then
|
|
517
|
+
error "Finding has invalid severity: $first_severity"
|
|
518
|
+
return 1
|
|
519
|
+
fi
|
|
520
|
+
|
|
521
|
+
if [[ -z "$first_test_type" ]] || [[ "$first_test_type" == "null" ]]; then
|
|
522
|
+
warn "Finding missing 'testType' - consider adding test type classification"
|
|
523
|
+
else
|
|
524
|
+
# Validate test type is valid enum
|
|
525
|
+
if ! validate_enum "$first_test_type" "schema" "integrity" "migration" "transaction" "performance" "data-quality"; then
|
|
526
|
+
error "Finding has invalid testType: $first_test_type"
|
|
527
|
+
return 1
|
|
528
|
+
fi
|
|
529
|
+
fi
|
|
530
|
+
fi
|
|
531
|
+
|
|
532
|
+
return 0
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
# Validate schema validation section if present
|
|
536
|
+
# Returns: 0 if valid, 1 if invalid
|
|
537
|
+
validate_schema_section() {
|
|
538
|
+
local output_file="$1"
|
|
539
|
+
|
|
540
|
+
local schema_data
|
|
541
|
+
schema_data=$(json_get "$output_file" ".output.schemaValidation" 2>/dev/null)
|
|
542
|
+
|
|
543
|
+
if [[ -z "$schema_data" ]] || [[ "$schema_data" == "null" ]]; then
|
|
544
|
+
debug "No schemaValidation section found (optional)"
|
|
545
|
+
return 0
|
|
546
|
+
fi
|
|
547
|
+
|
|
548
|
+
# If schema validation exists, check for table validations
|
|
549
|
+
local tables_validated
|
|
550
|
+
tables_validated=$(json_get "$output_file" ".output.schemaValidation.tablesValidated" 2>/dev/null)
|
|
551
|
+
|
|
552
|
+
if [[ -n "$tables_validated" ]] && [[ "$tables_validated" != "null" ]] && [[ "$tables_validated" -gt 0 ]]; then
|
|
553
|
+
debug "Schema validation covers $tables_validated tables"
|
|
554
|
+
fi
|
|
555
|
+
|
|
556
|
+
return 0
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
# Validate migration tests section if present
|
|
560
|
+
# Returns: 0 if valid, 1 if invalid
|
|
561
|
+
validate_migration_section() {
|
|
562
|
+
local output_file="$1"
|
|
563
|
+
|
|
564
|
+
local migration_data
|
|
565
|
+
migration_data=$(json_get "$output_file" ".output.migrationTests" 2>/dev/null)
|
|
566
|
+
|
|
567
|
+
if [[ -z "$migration_data" ]] || [[ "$migration_data" == "null" ]]; then
|
|
568
|
+
debug "No migrationTests section found (optional)"
|
|
569
|
+
return 0
|
|
570
|
+
fi
|
|
571
|
+
|
|
572
|
+
# If migration tests exist, check structure
|
|
573
|
+
local migrations_tested
|
|
574
|
+
migrations_tested=$(json_get "$output_file" ".output.migrationTests.migrationsTested" 2>/dev/null)
|
|
575
|
+
|
|
576
|
+
if [[ -n "$migrations_tested" ]] && [[ "$migrations_tested" != "null" ]]; then
|
|
577
|
+
debug "Migration tests cover $migrations_tested migrations"
|
|
578
|
+
fi
|
|
579
|
+
|
|
580
|
+
return 0
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
# Validate ACID compliance section if present
|
|
584
|
+
# Returns: 0 if valid, 1 if invalid
|
|
585
|
+
validate_acid_section() {
|
|
586
|
+
local output_file="$1"
|
|
587
|
+
|
|
588
|
+
local acid_data
|
|
589
|
+
acid_data=$(json_get "$output_file" ".output.transactionTests.acidCompliance" 2>/dev/null)
|
|
590
|
+
|
|
591
|
+
if [[ -z "$acid_data" ]] || [[ "$acid_data" == "null" ]]; then
|
|
592
|
+
debug "No ACID compliance section found (optional)"
|
|
593
|
+
return 0
|
|
594
|
+
fi
|
|
595
|
+
|
|
596
|
+
# Check for ACID property tests
|
|
597
|
+
for prop in "atomicity" "consistency" "isolation" "durability"; do
|
|
598
|
+
local prop_data
|
|
599
|
+
prop_data=$(json_get "$output_file" ".output.transactionTests.acidCompliance.$prop" 2>/dev/null)
|
|
600
|
+
if [[ -n "$prop_data" ]] && [[ "$prop_data" != "null" ]]; then
|
|
601
|
+
local tested passed
|
|
602
|
+
tested=$(json_get "$output_file" ".output.transactionTests.acidCompliance.$prop.tested" 2>/dev/null)
|
|
603
|
+
passed=$(json_get "$output_file" ".output.transactionTests.acidCompliance.$prop.passed" 2>/dev/null)
|
|
604
|
+
debug "ACID $prop: tested=$tested, passed=$passed"
|
|
605
|
+
fi
|
|
606
|
+
done
|
|
607
|
+
|
|
608
|
+
return 0
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
# Validate recommendations have required structure
|
|
612
|
+
# Returns: 0 if valid, 1 if invalid
|
|
613
|
+
validate_recommendations() {
|
|
614
|
+
local output_file="$1"
|
|
615
|
+
|
|
616
|
+
local rec_count
|
|
617
|
+
rec_count=$(json_count "$output_file" ".output.recommendations" 2>/dev/null)
|
|
618
|
+
|
|
619
|
+
if [[ -z "$rec_count" ]] || [[ "$rec_count" == "null" ]]; then
|
|
620
|
+
rec_count=0
|
|
621
|
+
fi
|
|
622
|
+
|
|
623
|
+
debug "Found $rec_count recommendations"
|
|
624
|
+
|
|
625
|
+
# If there are recommendations, validate structure
|
|
626
|
+
if [[ "$rec_count" -gt 0 ]]; then
|
|
627
|
+
local first_priority first_test_type
|
|
628
|
+
first_priority=$(json_get "$output_file" ".output.recommendations[0].priority" 2>/dev/null)
|
|
629
|
+
first_test_type=$(json_get "$output_file" ".output.recommendations[0].testType" 2>/dev/null)
|
|
630
|
+
|
|
631
|
+
if [[ -n "$first_priority" ]] && [[ "$first_priority" != "null" ]]; then
|
|
632
|
+
if ! validate_enum "$first_priority" "critical" "high" "medium" "low"; then
|
|
633
|
+
error "Recommendation has invalid priority: $first_priority"
|
|
634
|
+
return 1
|
|
635
|
+
fi
|
|
636
|
+
fi
|
|
637
|
+
|
|
638
|
+
if [[ -n "$first_test_type" ]] && [[ "$first_test_type" != "null" ]]; then
|
|
639
|
+
if ! validate_enum "$first_test_type" "schema" "integrity" "migration" "transaction" "performance" "data-quality"; then
|
|
640
|
+
error "Recommendation has invalid testType: $first_test_type"
|
|
641
|
+
return 1
|
|
642
|
+
fi
|
|
643
|
+
fi
|
|
644
|
+
fi
|
|
645
|
+
|
|
646
|
+
return 0
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
# Main skill-specific validation function
|
|
650
|
+
# Returns: 0 if valid, 1 if invalid
|
|
651
|
+
validate_skill_specific() {
|
|
652
|
+
local output_file="$1"
|
|
653
|
+
local has_errors=false
|
|
654
|
+
|
|
655
|
+
debug "Running database-testing specific validations..."
|
|
656
|
+
|
|
657
|
+
# Validate test types structure
|
|
658
|
+
if ! validate_test_types "$output_file"; then
|
|
659
|
+
has_errors=true
|
|
660
|
+
else
|
|
661
|
+
success "Test types validation passed"
|
|
662
|
+
fi
|
|
663
|
+
|
|
664
|
+
# Validate database info structure
|
|
665
|
+
if ! validate_database_info "$output_file"; then
|
|
666
|
+
has_errors=true
|
|
667
|
+
else
|
|
668
|
+
success "Database info validation passed"
|
|
669
|
+
fi
|
|
670
|
+
|
|
671
|
+
# Validate database findings structure
|
|
672
|
+
if ! validate_database_findings "$output_file"; then
|
|
673
|
+
has_errors=true
|
|
674
|
+
else
|
|
675
|
+
success "Database findings validation passed"
|
|
676
|
+
fi
|
|
677
|
+
|
|
678
|
+
# Validate schema section (optional)
|
|
679
|
+
if ! validate_schema_section "$output_file"; then
|
|
680
|
+
has_errors=true
|
|
681
|
+
else
|
|
682
|
+
success "Schema validation section passed"
|
|
683
|
+
fi
|
|
684
|
+
|
|
685
|
+
# Validate migration section (optional)
|
|
686
|
+
if ! validate_migration_section "$output_file"; then
|
|
687
|
+
has_errors=true
|
|
688
|
+
else
|
|
689
|
+
success "Migration tests section passed"
|
|
690
|
+
fi
|
|
691
|
+
|
|
692
|
+
# Validate ACID section (optional)
|
|
693
|
+
if ! validate_acid_section "$output_file"; then
|
|
694
|
+
has_errors=true
|
|
695
|
+
else
|
|
696
|
+
success "ACID compliance section passed"
|
|
697
|
+
fi
|
|
698
|
+
|
|
699
|
+
# Validate recommendations
|
|
700
|
+
if ! validate_recommendations "$output_file"; then
|
|
701
|
+
has_errors=true
|
|
702
|
+
else
|
|
703
|
+
success "Recommendations validation passed"
|
|
704
|
+
fi
|
|
705
|
+
|
|
706
|
+
# Check for database tool attribution
|
|
707
|
+
local tools_used
|
|
708
|
+
tools_used=$(json_get "$output_file" ".metadata.toolsUsed" 2>/dev/null)
|
|
709
|
+
if [[ -z "$tools_used" ]] || [[ "$tools_used" == "null" ]] || [[ "$tools_used" == "[]" ]]; then
|
|
710
|
+
warn "No database tools listed in metadata.toolsUsed"
|
|
711
|
+
else
|
|
712
|
+
debug "Database tools used: $tools_used"
|
|
713
|
+
fi
|
|
714
|
+
|
|
715
|
+
if [[ "$has_errors" == "true" ]]; then
|
|
716
|
+
return 1
|
|
717
|
+
fi
|
|
718
|
+
|
|
719
|
+
return 0
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
# =============================================================================
|
|
723
|
+
# Validation Functions (Override base template as needed)
|
|
724
|
+
# =============================================================================
|
|
725
|
+
|
|
726
|
+
validate_tools() {
|
|
727
|
+
if [[ ${#REQUIRED_TOOLS[@]} -eq 0 ]]; then
|
|
728
|
+
debug "No required tools specified"
|
|
729
|
+
return 0
|
|
730
|
+
fi
|
|
731
|
+
|
|
732
|
+
local missing=()
|
|
733
|
+
for tool in "${REQUIRED_TOOLS[@]}"; do
|
|
734
|
+
if ! command_exists "$tool"; then
|
|
735
|
+
missing+=("$tool")
|
|
736
|
+
fi
|
|
737
|
+
done
|
|
738
|
+
|
|
739
|
+
if [[ ${#missing[@]} -gt 0 ]]; then
|
|
740
|
+
error "Missing required tools: ${missing[*]}"
|
|
741
|
+
return 1
|
|
742
|
+
fi
|
|
743
|
+
|
|
744
|
+
debug "All required tools available"
|
|
745
|
+
return 0
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
validate_schema() {
|
|
749
|
+
local output_file="$1"
|
|
750
|
+
|
|
751
|
+
if [[ -z "$SCHEMA_PATH" ]]; then
|
|
752
|
+
debug "No schema path configured, skipping schema validation"
|
|
753
|
+
return 2
|
|
754
|
+
fi
|
|
755
|
+
|
|
756
|
+
if [[ ! -f "$SCHEMA_PATH" ]]; then
|
|
757
|
+
warn "Schema file not found: $SCHEMA_PATH"
|
|
758
|
+
return 2
|
|
759
|
+
fi
|
|
760
|
+
|
|
761
|
+
debug "Validating against schema: $SCHEMA_PATH"
|
|
762
|
+
|
|
763
|
+
local result
|
|
764
|
+
result=$(validate_json_schema "$SCHEMA_PATH" "$output_file" 2>&1)
|
|
765
|
+
local status=$?
|
|
766
|
+
|
|
767
|
+
case $status in
|
|
768
|
+
0)
|
|
769
|
+
success "Schema validation passed"
|
|
770
|
+
return 0
|
|
771
|
+
;;
|
|
772
|
+
1)
|
|
773
|
+
error "Schema validation failed"
|
|
774
|
+
if [[ "$VERBOSE" == "true" ]]; then
|
|
775
|
+
echo "$result" | while read -r line; do
|
|
776
|
+
echo " $line"
|
|
777
|
+
done
|
|
778
|
+
fi
|
|
779
|
+
return 1
|
|
780
|
+
;;
|
|
781
|
+
2)
|
|
782
|
+
warn "Schema validation skipped (no validator available)"
|
|
783
|
+
return 2
|
|
784
|
+
;;
|
|
785
|
+
esac
|
|
786
|
+
}
|
|
787
|
+
|
|
788
|
+
validate_required_fields() {
|
|
789
|
+
local output_file="$1"
|
|
790
|
+
local missing=()
|
|
791
|
+
local empty=()
|
|
792
|
+
|
|
793
|
+
for field in "${REQUIRED_FIELDS[@]}"; do
|
|
794
|
+
local value
|
|
795
|
+
value=$(json_get "$output_file" ".$field" 2>/dev/null)
|
|
796
|
+
if [[ -z "$value" ]] || [[ "$value" == "null" ]]; then
|
|
797
|
+
missing+=("$field")
|
|
798
|
+
fi
|
|
799
|
+
done
|
|
800
|
+
|
|
801
|
+
for field in "${REQUIRED_NON_EMPTY_FIELDS[@]}"; do
|
|
802
|
+
local value
|
|
803
|
+
value=$(json_get "$output_file" ".$field" 2>/dev/null)
|
|
804
|
+
if [[ -z "$value" ]] || [[ "$value" == "null" ]] || [[ "$value" == "" ]] || [[ "$value" == "[]" ]] || [[ "$value" == "{}" ]]; then
|
|
805
|
+
empty+=("$field")
|
|
806
|
+
fi
|
|
807
|
+
done
|
|
808
|
+
|
|
809
|
+
local has_errors=false
|
|
810
|
+
|
|
811
|
+
if [[ ${#missing[@]} -gt 0 ]]; then
|
|
812
|
+
error "Missing required fields: ${missing[*]}"
|
|
813
|
+
has_errors=true
|
|
814
|
+
fi
|
|
815
|
+
|
|
816
|
+
if [[ ${#empty[@]} -gt 0 ]]; then
|
|
817
|
+
error "Empty required fields: ${empty[*]}"
|
|
818
|
+
has_errors=true
|
|
819
|
+
fi
|
|
820
|
+
|
|
821
|
+
if [[ "$has_errors" == "true" ]]; then
|
|
822
|
+
return 1
|
|
823
|
+
fi
|
|
824
|
+
|
|
825
|
+
success "All required fields present and valid"
|
|
826
|
+
return 0
|
|
827
|
+
}
|
|
828
|
+
|
|
829
|
+
validate_enum_fields() {
|
|
830
|
+
local output_file="$1"
|
|
831
|
+
|
|
832
|
+
if [[ ${#ENUM_VALIDATIONS[@]} -eq 0 ]]; then
|
|
833
|
+
return 0
|
|
834
|
+
fi
|
|
835
|
+
|
|
836
|
+
local has_errors=false
|
|
837
|
+
|
|
838
|
+
for validation in "${ENUM_VALIDATIONS[@]}"; do
|
|
839
|
+
local field_path="${validation%%:*}"
|
|
840
|
+
local allowed_values="${validation#*:}"
|
|
841
|
+
|
|
842
|
+
local actual_value
|
|
843
|
+
actual_value=$(json_get "$output_file" "$field_path" 2>/dev/null)
|
|
844
|
+
|
|
845
|
+
if [[ -z "$actual_value" ]] || [[ "$actual_value" == "null" ]]; then
|
|
846
|
+
continue
|
|
847
|
+
fi
|
|
848
|
+
|
|
849
|
+
local found=false
|
|
850
|
+
IFS=',' read -ra allowed_array <<< "$allowed_values"
|
|
851
|
+
for allowed in "${allowed_array[@]}"; do
|
|
852
|
+
if [[ "$actual_value" == "$allowed" ]]; then
|
|
853
|
+
found=true
|
|
854
|
+
break
|
|
855
|
+
fi
|
|
856
|
+
done
|
|
857
|
+
|
|
858
|
+
if [[ "$found" == "false" ]]; then
|
|
859
|
+
error "Invalid value for $field_path: '$actual_value' (allowed: $allowed_values)"
|
|
860
|
+
has_errors=true
|
|
861
|
+
fi
|
|
862
|
+
done
|
|
863
|
+
|
|
864
|
+
if [[ "$has_errors" == "true" ]]; then
|
|
865
|
+
return 1
|
|
866
|
+
fi
|
|
867
|
+
|
|
868
|
+
success "All enum fields have valid values"
|
|
869
|
+
return 0
|
|
870
|
+
}
|
|
871
|
+
|
|
872
|
+
validate_content_terms() {
|
|
873
|
+
local output_file="$1"
|
|
874
|
+
local content
|
|
875
|
+
content=$(cat "$output_file")
|
|
876
|
+
|
|
877
|
+
local has_errors=false
|
|
878
|
+
|
|
879
|
+
if [[ ${#MUST_CONTAIN_TERMS[@]} -gt 0 ]]; then
|
|
880
|
+
local missing_terms=()
|
|
881
|
+
for term in "${MUST_CONTAIN_TERMS[@]}"; do
|
|
882
|
+
if ! grep -qi "$term" <<< "$content"; then
|
|
883
|
+
missing_terms+=("$term")
|
|
884
|
+
fi
|
|
885
|
+
done
|
|
886
|
+
|
|
887
|
+
if [[ ${#missing_terms[@]} -gt 0 ]]; then
|
|
888
|
+
error "Output missing required database terms: ${missing_terms[*]}"
|
|
889
|
+
has_errors=true
|
|
890
|
+
else
|
|
891
|
+
success "All required database terms found"
|
|
892
|
+
fi
|
|
893
|
+
fi
|
|
894
|
+
|
|
895
|
+
if [[ ${#MUST_NOT_CONTAIN_TERMS[@]} -gt 0 ]]; then
|
|
896
|
+
local found_forbidden=()
|
|
897
|
+
for term in "${MUST_NOT_CONTAIN_TERMS[@]}"; do
|
|
898
|
+
if grep -qi "$term" <<< "$content"; then
|
|
899
|
+
found_forbidden+=("$term")
|
|
900
|
+
fi
|
|
901
|
+
done
|
|
902
|
+
|
|
903
|
+
if [[ ${#found_forbidden[@]} -gt 0 ]]; then
|
|
904
|
+
error "Output contains forbidden terms: ${found_forbidden[*]}"
|
|
905
|
+
has_errors=true
|
|
906
|
+
else
|
|
907
|
+
success "No forbidden terms found"
|
|
908
|
+
fi
|
|
909
|
+
fi
|
|
910
|
+
|
|
911
|
+
if [[ "$has_errors" == "true" ]]; then
|
|
912
|
+
return 1
|
|
913
|
+
fi
|
|
914
|
+
|
|
915
|
+
return 0
|
|
916
|
+
}
|
|
917
|
+
|
|
918
|
+
# =============================================================================
|
|
919
|
+
# Main Validation Flow
|
|
920
|
+
# =============================================================================
|
|
921
|
+
|
|
922
|
+
main() {
|
|
923
|
+
if [[ -z "$OUTPUT_FILE" ]]; then
|
|
924
|
+
error "No output file specified"
|
|
925
|
+
echo "Usage: $0 <output-file> [options]"
|
|
926
|
+
echo "Use --help for more information"
|
|
927
|
+
exit 1
|
|
928
|
+
fi
|
|
929
|
+
|
|
930
|
+
if [[ ! -f "$OUTPUT_FILE" ]]; then
|
|
931
|
+
error "Output file not found: $OUTPUT_FILE"
|
|
932
|
+
exit 1
|
|
933
|
+
fi
|
|
934
|
+
|
|
935
|
+
if [[ "$JSON_ONLY" != "true" ]]; then
|
|
936
|
+
echo "=============================================="
|
|
937
|
+
info "Validating $SKILL_NAME Output"
|
|
938
|
+
echo "=============================================="
|
|
939
|
+
echo ""
|
|
940
|
+
echo " Skill: $SKILL_NAME v$SKILL_VERSION"
|
|
941
|
+
echo " File: $OUTPUT_FILE"
|
|
942
|
+
echo " Schema: ${SCHEMA_PATH:-none}"
|
|
943
|
+
echo ""
|
|
944
|
+
fi
|
|
945
|
+
|
|
946
|
+
# Track validation status
|
|
947
|
+
local tool_status="passed"
|
|
948
|
+
local json_status="passed"
|
|
949
|
+
local schema_status="passed"
|
|
950
|
+
local fields_status="passed"
|
|
951
|
+
local enums_status="passed"
|
|
952
|
+
local content_status="passed"
|
|
953
|
+
local specific_status="passed"
|
|
954
|
+
local error_count=0
|
|
955
|
+
local warning_count=0
|
|
956
|
+
|
|
957
|
+
# Step 1: Check Required Tools
|
|
958
|
+
[[ "$JSON_ONLY" != "true" ]] && echo "--- Step 1: Tool Availability ---"
|
|
959
|
+
|
|
960
|
+
if ! validate_tools; then
|
|
961
|
+
tool_status="failed"
|
|
962
|
+
((error_count++)) || true
|
|
963
|
+
if [[ "$JSON_ONLY" == "true" ]]; then
|
|
964
|
+
output_validation_report "$SKILL_NAME" "skipped" "skipped" "failed"
|
|
965
|
+
fi
|
|
966
|
+
exit $EXIT_SKIP
|
|
967
|
+
fi
|
|
968
|
+
|
|
969
|
+
[[ "$JSON_ONLY" != "true" ]] && success "Tool check passed" && echo ""
|
|
970
|
+
|
|
971
|
+
# Step 2: Validate JSON Syntax
|
|
972
|
+
[[ "$JSON_ONLY" != "true" ]] && echo "--- Step 2: JSON Syntax ---"
|
|
973
|
+
|
|
974
|
+
if ! validate_json "$OUTPUT_FILE"; then
|
|
975
|
+
json_status="failed"
|
|
976
|
+
((error_count++)) || true
|
|
977
|
+
[[ "$JSON_ONLY" != "true" ]] && error "File is not valid JSON"
|
|
978
|
+
if [[ "$JSON_ONLY" == "true" ]]; then
|
|
979
|
+
output_validation_report "$SKILL_NAME" "failed" "failed" "$tool_status"
|
|
980
|
+
fi
|
|
981
|
+
exit $EXIT_FAIL
|
|
982
|
+
fi
|
|
983
|
+
|
|
984
|
+
[[ "$JSON_ONLY" != "true" ]] && success "JSON syntax valid" && echo ""
|
|
985
|
+
|
|
986
|
+
# Step 3: Validate Against Schema
|
|
987
|
+
[[ "$JSON_ONLY" != "true" ]] && echo "--- Step 3: Schema Validation ---"
|
|
988
|
+
|
|
989
|
+
local schema_exit_code
|
|
990
|
+
validate_schema "$OUTPUT_FILE" && schema_exit_code=0 || schema_exit_code=$?
|
|
991
|
+
|
|
992
|
+
case $schema_exit_code in
|
|
993
|
+
0) [[ "$JSON_ONLY" != "true" ]] && echo "" ;;
|
|
994
|
+
1) schema_status="failed"; ((error_count++)) || true; [[ "$JSON_ONLY" != "true" ]] && echo "" ;;
|
|
995
|
+
2) schema_status="skipped"; ((warning_count++)) || true; [[ "$JSON_ONLY" != "true" ]] && echo "" ;;
|
|
996
|
+
esac
|
|
997
|
+
|
|
998
|
+
# Step 4: Validate Required Fields
|
|
999
|
+
[[ "$JSON_ONLY" != "true" ]] && echo "--- Step 4: Required Fields ---"
|
|
1000
|
+
|
|
1001
|
+
if ! validate_required_fields "$OUTPUT_FILE"; then
|
|
1002
|
+
fields_status="failed"
|
|
1003
|
+
((error_count++)) || true
|
|
1004
|
+
fi
|
|
1005
|
+
|
|
1006
|
+
[[ "$JSON_ONLY" != "true" ]] && echo ""
|
|
1007
|
+
|
|
1008
|
+
# Step 5: Validate Enum Values
|
|
1009
|
+
[[ "$JSON_ONLY" != "true" ]] && echo "--- Step 5: Enum Validation ---"
|
|
1010
|
+
|
|
1011
|
+
if ! validate_enum_fields "$OUTPUT_FILE"; then
|
|
1012
|
+
enums_status="failed"
|
|
1013
|
+
((error_count++)) || true
|
|
1014
|
+
fi
|
|
1015
|
+
|
|
1016
|
+
[[ "$JSON_ONLY" != "true" ]] && echo ""
|
|
1017
|
+
|
|
1018
|
+
# Step 6: Validate Database Content Terms
|
|
1019
|
+
[[ "$JSON_ONLY" != "true" ]] && echo "--- Step 6: Database Content Terms ---"
|
|
1020
|
+
|
|
1021
|
+
if ! validate_content_terms "$OUTPUT_FILE"; then
|
|
1022
|
+
content_status="failed"
|
|
1023
|
+
((error_count++)) || true
|
|
1024
|
+
fi
|
|
1025
|
+
|
|
1026
|
+
[[ "$JSON_ONLY" != "true" ]] && echo ""
|
|
1027
|
+
|
|
1028
|
+
# Step 7: Database-Specific Validation
|
|
1029
|
+
[[ "$JSON_ONLY" != "true" ]] && echo "--- Step 7: Database-Specific Validation ---"
|
|
1030
|
+
|
|
1031
|
+
if ! validate_skill_specific "$OUTPUT_FILE"; then
|
|
1032
|
+
specific_status="failed"
|
|
1033
|
+
((error_count++)) || true
|
|
1034
|
+
fi
|
|
1035
|
+
|
|
1036
|
+
[[ "$JSON_ONLY" != "true" ]] && echo ""
|
|
1037
|
+
|
|
1038
|
+
# Determine Overall Status
|
|
1039
|
+
local overall_status="passed"
|
|
1040
|
+
local content_overall="passed"
|
|
1041
|
+
|
|
1042
|
+
if [[ "$fields_status" == "failed" ]] || \
|
|
1043
|
+
[[ "$enums_status" == "failed" ]] || \
|
|
1044
|
+
[[ "$content_status" == "failed" ]] || \
|
|
1045
|
+
[[ "$specific_status" == "failed" ]]; then
|
|
1046
|
+
content_overall="failed"
|
|
1047
|
+
fi
|
|
1048
|
+
|
|
1049
|
+
if [[ "$json_status" == "failed" ]] || \
|
|
1050
|
+
[[ "$schema_status" == "failed" ]] || \
|
|
1051
|
+
[[ "$content_overall" == "failed" ]]; then
|
|
1052
|
+
overall_status="failed"
|
|
1053
|
+
elif [[ "$schema_status" == "skipped" ]]; then
|
|
1054
|
+
overall_status="partial"
|
|
1055
|
+
fi
|
|
1056
|
+
|
|
1057
|
+
# Output Results
|
|
1058
|
+
if [[ "$JSON_ONLY" == "true" ]]; then
|
|
1059
|
+
output_validation_report "$SKILL_NAME" "$schema_status" "$content_overall" "$tool_status"
|
|
1060
|
+
else
|
|
1061
|
+
echo "=============================================="
|
|
1062
|
+
echo "Validation Summary for $SKILL_NAME"
|
|
1063
|
+
echo "=============================================="
|
|
1064
|
+
echo ""
|
|
1065
|
+
echo " Tools: $tool_status"
|
|
1066
|
+
echo " JSON Syntax: $json_status"
|
|
1067
|
+
echo " Schema: $schema_status"
|
|
1068
|
+
echo " Required Fields: $fields_status"
|
|
1069
|
+
echo " Enum Values: $enums_status"
|
|
1070
|
+
echo " Content Terms: $content_status"
|
|
1071
|
+
echo " Database-Specific: $specific_status"
|
|
1072
|
+
echo ""
|
|
1073
|
+
echo " ------------------------------"
|
|
1074
|
+
echo " Overall: $overall_status"
|
|
1075
|
+
echo " Errors: $error_count"
|
|
1076
|
+
echo " Warnings: $warning_count"
|
|
1077
|
+
echo "=============================================="
|
|
1078
|
+
echo ""
|
|
1079
|
+
fi
|
|
1080
|
+
|
|
1081
|
+
# Exit with appropriate code
|
|
1082
|
+
case "$overall_status" in
|
|
1083
|
+
"passed")
|
|
1084
|
+
[[ "$JSON_ONLY" != "true" ]] && success "Validation PASSED"
|
|
1085
|
+
exit $EXIT_PASS
|
|
1086
|
+
;;
|
|
1087
|
+
"partial")
|
|
1088
|
+
[[ "$JSON_ONLY" != "true" ]] && warn "Validation PARTIAL (some checks skipped)"
|
|
1089
|
+
exit $EXIT_PASS
|
|
1090
|
+
;;
|
|
1091
|
+
"failed")
|
|
1092
|
+
[[ "$JSON_ONLY" != "true" ]] && error "Validation FAILED"
|
|
1093
|
+
exit $EXIT_FAIL
|
|
1094
|
+
;;
|
|
1095
|
+
esac
|
|
1096
|
+
}
|
|
1097
|
+
|
|
1098
|
+
# Run main function
|
|
1099
|
+
main
|