agentic-qe 3.7.9 → 3.7.11
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 -111
- package/.claude/skills/.validation/examples/chaos-engineering-output.example.json +530 -530
- package/.claude/skills/.validation/examples/performance-testing-output.example.json +252 -252
- package/.claude/skills/.validation/examples/security-testing-output.example.json +413 -413
- package/.claude/skills/.validation/examples/testability-scoring-output.example.json +350 -350
- package/.claude/skills/.validation/schemas/skill-eval.schema.json +462 -462
- package/.claude/skills/.validation/schemas/skill-frontmatter.schema.json +341 -341
- package/.claude/skills/.validation/schemas/skill-output-meta.schema.json +199 -199
- package/.claude/skills/.validation/schemas/skill-output.template.json +610 -610
- package/.claude/skills/.validation/skill-validation-mcp-integration.md +250 -250
- package/.claude/skills/.validation/templates/eval.template.yaml +366 -366
- package/.claude/skills/.validation/templates/schemas/output.json +145 -145
- package/.claude/skills/.validation/templates/security-testing-eval.template.yaml +725 -725
- package/.claude/skills/.validation/templates/skill-frontmatter.example.yaml +225 -225
- package/.claude/skills/.validation/test-data/invalid-output.json +5 -5
- package/.claude/skills/.validation/test-data/minimal-output.json +9 -9
- package/.claude/skills/.validation/test-data/sample-output.json +73 -73
- package/.claude/skills/a11y-ally/evals/a11y-ally.yaml +376 -376
- package/.claude/skills/a11y-ally/schemas/output.json +549 -549
- package/.claude/skills/accessibility-testing/evals/accessibility-testing.yaml +719 -719
- package/.claude/skills/accessibility-testing/schemas/output.json +776 -776
- package/.claude/skills/accessibility-testing/test-data/sample-output.json +191 -191
- package/.claude/skills/agentic-quality-engineering/schemas/output.json +577 -577
- package/.claude/skills/api-testing-patterns/evals/api-testing-patterns.yaml +696 -696
- package/.claude/skills/api-testing-patterns/schemas/output.json +845 -845
- package/.claude/skills/aqe-v2-v3-migration/schemas/output.json +513 -513
- package/.claude/skills/brutal-honesty-review/schemas/output.json +291 -291
- package/.claude/skills/bug-reporting-excellence/schemas/output.json +288 -288
- package/.claude/skills/chaos-engineering-resilience/evals/chaos-engineering-resilience.yaml +761 -761
- package/.claude/skills/chaos-engineering-resilience/schemas/output.json +1205 -1205
- package/.claude/skills/cicd-pipeline-qe-orchestrator/evals/cicd-pipeline-qe-orchestrator.yaml +157 -157
- package/.claude/skills/cicd-pipeline-qe-orchestrator/schemas/output.json +542 -542
- package/.claude/skills/code-review-quality/schemas/output.json +264 -264
- package/.claude/skills/compatibility-testing/evals/compatibility-testing.yaml +410 -410
- package/.claude/skills/compatibility-testing/schemas/output.json +551 -551
- package/.claude/skills/compliance-testing/evals/compliance-testing.yaml +1107 -1107
- package/.claude/skills/compliance-testing/schemas/output.json +845 -845
- package/.claude/skills/consultancy-practices/schemas/output.json +282 -282
- package/.claude/skills/contract-testing/evals/contract-testing.yaml +748 -748
- package/.claude/skills/contract-testing/schemas/output.json +638 -638
- package/.claude/skills/database-testing/evals/database-testing.yaml +968 -968
- package/.claude/skills/database-testing/schemas/output.json +1446 -1446
- package/.claude/skills/debug-loop/SKILL.md +61 -61
- package/.claude/skills/enterprise-integration-testing/SKILL.md +735 -735
- package/.claude/skills/enterprise-integration-testing/evals/enterprise-integration-testing.yaml +158 -158
- package/.claude/skills/enterprise-integration-testing/schemas/output.json +74 -74
- package/.claude/skills/enterprise-integration-testing/scripts/validate-config.json +25 -25
- package/.claude/skills/iterative-loop/SKILL.md +371 -371
- package/.claude/skills/localization-testing/evals/localization-testing.yaml +544 -544
- package/.claude/skills/localization-testing/schemas/output.json +325 -325
- package/.claude/skills/middleware-testing-patterns/SKILL.md +798 -798
- package/.claude/skills/middleware-testing-patterns/evals/middleware-testing-patterns.yaml +153 -153
- package/.claude/skills/middleware-testing-patterns/schemas/output.json +58 -58
- package/.claude/skills/middleware-testing-patterns/scripts/validate-config.json +25 -25
- package/.claude/skills/mobile-testing/evals/mobile-testing.yaml +537 -537
- package/.claude/skills/mobile-testing/schemas/output.json +318 -318
- package/.claude/skills/mutation-testing/evals/mutation-testing.yaml +652 -652
- package/.claude/skills/mutation-testing/schemas/output.json +707 -707
- package/.claude/skills/mutation-testing/test-data/sample-output.json +295 -295
- package/.claude/skills/n8n-expression-testing/evals/n8n-expression-testing.yaml +450 -450
- package/.claude/skills/n8n-expression-testing/schemas/output.json +369 -369
- package/.claude/skills/n8n-integration-testing-patterns/evals/n8n-integration-testing-patterns.yaml +522 -522
- package/.claude/skills/n8n-integration-testing-patterns/schemas/output.json +291 -291
- package/.claude/skills/n8n-security-testing/evals/n8n-security-testing.yaml +493 -493
- package/.claude/skills/n8n-security-testing/schemas/output.json +293 -293
- package/.claude/skills/n8n-trigger-testing-strategies/evals/n8n-trigger-testing-strategies.yaml +500 -500
- package/.claude/skills/n8n-trigger-testing-strategies/schemas/output.json +295 -295
- package/.claude/skills/n8n-workflow-testing-fundamentals/evals/n8n-workflow-testing-fundamentals.yaml +497 -497
- package/.claude/skills/n8n-workflow-testing-fundamentals/schemas/output.json +254 -254
- package/.claude/skills/observability-testing-patterns/SKILL.md +930 -930
- package/.claude/skills/observability-testing-patterns/evals/observability-testing-patterns.yaml +157 -157
- package/.claude/skills/observability-testing-patterns/schemas/output.json +58 -58
- package/.claude/skills/observability-testing-patterns/scripts/validate-config.json +25 -25
- package/.claude/skills/pentest-validation/SKILL.md +268 -268
- package/.claude/skills/pentest-validation/evals/pentest-validation.yaml +708 -708
- package/.claude/skills/pentest-validation/schemas/output.json +281 -281
- package/.claude/skills/performance-analysis/evals/performance-analysis.yaml +144 -144
- package/.claude/skills/performance-analysis/schemas/output.json +588 -588
- package/.claude/skills/performance-testing/evals/performance-testing.yaml +772 -772
- package/.claude/skills/performance-testing/schemas/output.json +1184 -1184
- package/.claude/skills/pr-review/SKILL.md +61 -61
- package/.claude/skills/qcsd-cicd-swarm/SKILL.md +2206 -2206
- package/.claude/skills/qcsd-cicd-swarm/evals/qcsd-cicd-swarm.yaml +211 -211
- package/.claude/skills/qcsd-cicd-swarm/schemas/output.json +86 -86
- package/.claude/skills/qcsd-cicd-swarm/scripts/validate-config.json +30 -30
- package/.claude/skills/qcsd-development-swarm/SKILL.md +2154 -2154
- package/.claude/skills/qcsd-development-swarm/evals/qcsd-development-swarm.yaml +162 -162
- package/.claude/skills/qcsd-development-swarm/schemas/output.json +72 -72
- package/.claude/skills/qcsd-development-swarm/scripts/validate-config.json +25 -25
- package/.claude/skills/qcsd-ideation-swarm/evals/qcsd-ideation-swarm.yaml +138 -138
- package/.claude/skills/qcsd-ideation-swarm/schemas/output.json +568 -568
- package/.claude/skills/qcsd-production-swarm/SKILL.md +2781 -2781
- package/.claude/skills/qcsd-production-swarm/evals/qcsd-production-swarm.yaml +246 -246
- package/.claude/skills/qcsd-production-swarm/schemas/output.json +505 -505
- package/.claude/skills/qcsd-production-swarm/scripts/validate-config.json +25 -25
- package/.claude/skills/qe-chaos-resilience/evals/qe-chaos-resilience.yaml +443 -443
- package/.claude/skills/qe-chaos-resilience/schemas/output.json +314 -314
- package/.claude/skills/qe-code-intelligence/evals/qe-code-intelligence.yaml +459 -459
- package/.claude/skills/qe-code-intelligence/schemas/output.json +315 -315
- package/.claude/skills/qe-contract-testing/evals/qe-contract-testing.yaml +513 -513
- package/.claude/skills/qe-contract-testing/schemas/output.json +295 -295
- package/.claude/skills/qe-coverage-analysis/evals/qe-coverage-analysis.yaml +494 -494
- package/.claude/skills/qe-coverage-analysis/schemas/output.json +286 -286
- package/.claude/skills/qe-defect-intelligence/evals/qe-defect-intelligence.yaml +511 -511
- package/.claude/skills/qe-defect-intelligence/schemas/output.json +283 -283
- package/.claude/skills/qe-iterative-loop/schemas/output.json +264 -264
- package/.claude/skills/qe-learning-optimization/evals/qe-learning-optimization.yaml +144 -144
- package/.claude/skills/qe-learning-optimization/schemas/output.json +288 -288
- package/.claude/skills/qe-quality-assessment/evals/qe-quality-assessment.yaml +506 -506
- package/.claude/skills/qe-quality-assessment/schemas/output.json +550 -550
- package/.claude/skills/qe-requirements-validation/evals/qe-requirements-validation.yaml +598 -598
- package/.claude/skills/qe-requirements-validation/schemas/output.json +587 -587
- package/.claude/skills/qe-security-compliance/evals/qe-security-compliance.yaml +595 -595
- package/.claude/skills/qe-security-compliance/schemas/output.json +498 -498
- package/.claude/skills/qe-test-execution/evals/qe-test-execution.yaml +607 -607
- package/.claude/skills/qe-test-execution/schemas/output.json +529 -529
- package/.claude/skills/qe-test-generation/evals/qe-test-generation.yaml +148 -148
- package/.claude/skills/qe-test-generation/schemas/output.json +439 -439
- package/.claude/skills/qe-visual-accessibility/evals/qe-visual-accessibility.yaml +142 -142
- package/.claude/skills/qe-visual-accessibility/schemas/output.json +491 -491
- package/.claude/skills/quality-metrics/evals/quality-metrics.yaml +494 -494
- package/.claude/skills/quality-metrics/schemas/output.json +403 -403
- package/.claude/skills/refactoring-patterns/schemas/output.json +475 -475
- package/.claude/skills/regression-testing/evals/regression-testing.yaml +504 -504
- package/.claude/skills/regression-testing/schemas/output.json +311 -311
- package/.claude/skills/release/SKILL.md +347 -347
- package/.claude/skills/risk-based-testing/evals/risk-based-testing.yaml +141 -141
- package/.claude/skills/risk-based-testing/schemas/output.json +480 -480
- package/.claude/skills/security-testing/evals/security-testing.yaml +789 -789
- package/.claude/skills/security-testing/schemas/output.json +879 -879
- package/.claude/skills/security-visual-testing/evals/security-visual-testing.yaml +163 -163
- package/.claude/skills/security-visual-testing/schemas/output.json +486 -486
- package/.claude/skills/sfdipot-product-factors/SKILL.md +239 -239
- package/.claude/skills/sherlock-review/schemas/output.json +297 -297
- package/.claude/skills/shift-left-testing/evals/shift-left-testing.yaml +145 -145
- package/.claude/skills/shift-left-testing/schemas/output.json +459 -459
- package/.claude/skills/shift-right-testing/evals/shift-right-testing.yaml +147 -147
- package/.claude/skills/shift-right-testing/schemas/output.json +418 -418
- package/.claude/skills/skills-manifest.json +1 -1
- package/.claude/skills/tdd-london-chicago/schemas/output.json +444 -444
- package/.claude/skills/technical-writing/schemas/output.json +268 -268
- package/.claude/skills/test-automation-strategy/evals/test-automation-strategy.yaml +148 -148
- package/.claude/skills/test-automation-strategy/schemas/output.json +444 -444
- package/.claude/skills/test-data-management/evals/test-data-management.yaml +504 -504
- package/.claude/skills/test-data-management/schemas/output.json +284 -284
- package/.claude/skills/test-design-techniques/evals/test-design-techniques.yaml +142 -142
- package/.claude/skills/test-design-techniques/schemas/output.json +295 -295
- package/.claude/skills/test-environment-management/schemas/output.json +310 -310
- package/.claude/skills/test-idea-rewriting/SKILL.md +229 -229
- package/.claude/skills/test-reporting-analytics/evals/test-reporting-analytics.yaml +155 -155
- package/.claude/skills/test-reporting-analytics/schemas/output.json +329 -329
- package/.claude/skills/testability-scoring/evals/testability-scoring.yaml +814 -814
- package/.claude/skills/testability-scoring/resources/templates/config.template.js +84 -84
- package/.claude/skills/testability-scoring/schemas/output.json +606 -606
- package/.claude/skills/testability-scoring/scripts/generate-html-report.js +1007 -1007
- package/.claude/skills/verification-quality/evals/verification-quality.yaml +150 -150
- package/.claude/skills/verification-quality/schemas/output.json +432 -432
- package/.claude/skills/visual-testing-advanced/evals/visual-testing-advanced.yaml +154 -154
- package/.claude/skills/visual-testing-advanced/schemas/output.json +294 -294
- package/.claude/skills/wms-testing-patterns/evals/wms-testing-patterns.yaml +165 -165
- package/.claude/skills/wms-testing-patterns/schemas/output.json +150 -150
- package/.claude/skills/wms-testing-patterns/scripts/validate-config.json +51 -51
- package/CHANGELOG.md +36 -0
- package/README.md +171 -901
- package/assets/agents/v3/helpers/quality-criteria/evidence-classification.md +116 -116
- package/assets/agents/v3/helpers/quality-criteria/htsm-categories.md +139 -139
- package/assets/governance/constitution.md +202 -202
- package/assets/governance/shards/chaos-resilience.shard.md +221 -221
- package/assets/governance/shards/code-intelligence.shard.md +178 -178
- package/assets/governance/shards/contract-testing.shard.md +206 -206
- package/assets/governance/shards/coverage-analysis.shard.md +146 -146
- package/assets/governance/shards/defect-intelligence.shard.md +182 -182
- package/assets/governance/shards/learning-optimization.shard.md +248 -248
- package/assets/governance/shards/quality-assessment.shard.md +165 -165
- package/assets/governance/shards/requirements-validation.shard.md +177 -177
- package/assets/governance/shards/security-compliance.shard.md +196 -196
- package/assets/governance/shards/test-execution.shard.md +156 -156
- package/assets/governance/shards/test-generation.shard.md +128 -128
- package/assets/governance/shards/visual-accessibility.shard.md +209 -209
- package/assets/hooks/cross-phase-memory.yaml +253 -253
- package/assets/patterns/adr-051-booster-patterns.json +78 -78
- package/assets/patterns/adr-051-embedding-patterns.json +147 -147
- package/assets/patterns/adr-051-integration-summary.json +62 -62
- package/assets/patterns/adr-051-reasoning-patterns.json +166 -166
- package/assets/patterns/adr-051-router-patterns.json +113 -113
- package/assets/patterns/index.json +136 -136
- package/assets/skills/.validation/README.md +111 -111
- package/assets/skills/.validation/examples/chaos-engineering-output.example.json +530 -530
- package/assets/skills/.validation/examples/performance-testing-output.example.json +252 -252
- package/assets/skills/.validation/examples/security-testing-output.example.json +413 -413
- package/assets/skills/.validation/examples/testability-scoring-output.example.json +350 -350
- package/assets/skills/.validation/schemas/skill-eval.schema.json +462 -462
- package/assets/skills/.validation/schemas/skill-frontmatter.schema.json +341 -341
- package/assets/skills/.validation/schemas/skill-output-meta.schema.json +199 -199
- package/assets/skills/.validation/schemas/skill-output.template.json +610 -610
- package/assets/skills/.validation/skill-validation-mcp-integration.md +250 -250
- package/assets/skills/.validation/templates/eval.template.yaml +366 -366
- package/assets/skills/.validation/templates/schemas/output.json +145 -145
- package/assets/skills/.validation/templates/security-testing-eval.template.yaml +725 -725
- package/assets/skills/.validation/templates/skill-frontmatter.example.yaml +225 -225
- package/assets/skills/.validation/test-data/invalid-output.json +5 -5
- package/assets/skills/.validation/test-data/minimal-output.json +9 -9
- package/assets/skills/.validation/test-data/sample-output.json +73 -73
- package/assets/skills/a11y-ally/evals/a11y-ally.yaml +376 -376
- package/assets/skills/a11y-ally/schemas/output.json +549 -549
- package/assets/skills/accessibility-testing/evals/accessibility-testing.yaml +719 -719
- package/assets/skills/accessibility-testing/schemas/output.json +776 -776
- package/assets/skills/accessibility-testing/test-data/sample-output.json +191 -191
- package/assets/skills/agentic-quality-engineering/schemas/output.json +577 -577
- package/assets/skills/api-testing-patterns/evals/api-testing-patterns.yaml +696 -696
- package/assets/skills/api-testing-patterns/schemas/output.json +845 -845
- package/assets/skills/aqe-v2-v3-migration/schemas/output.json +513 -513
- package/assets/skills/brutal-honesty-review/schemas/output.json +291 -291
- package/assets/skills/bug-reporting-excellence/schemas/output.json +288 -288
- package/assets/skills/chaos-engineering-resilience/evals/chaos-engineering-resilience.yaml +761 -761
- package/assets/skills/chaos-engineering-resilience/schemas/output.json +1205 -1205
- package/assets/skills/cicd-pipeline-qe-orchestrator/evals/cicd-pipeline-qe-orchestrator.yaml +157 -157
- package/assets/skills/cicd-pipeline-qe-orchestrator/schemas/output.json +542 -542
- package/assets/skills/code-review-quality/schemas/output.json +264 -264
- package/assets/skills/compatibility-testing/evals/compatibility-testing.yaml +410 -410
- package/assets/skills/compatibility-testing/schemas/output.json +551 -551
- package/assets/skills/compliance-testing/evals/compliance-testing.yaml +1107 -1107
- package/assets/skills/compliance-testing/schemas/output.json +845 -845
- package/assets/skills/consultancy-practices/schemas/output.json +282 -282
- package/assets/skills/contract-testing/evals/contract-testing.yaml +748 -748
- package/assets/skills/contract-testing/schemas/output.json +638 -638
- package/assets/skills/database-testing/evals/database-testing.yaml +968 -968
- package/assets/skills/database-testing/schemas/output.json +1446 -1446
- package/assets/skills/debug-loop/SKILL.md +61 -61
- package/assets/skills/enterprise-integration-testing/SKILL.md +735 -735
- package/assets/skills/enterprise-integration-testing/evals/enterprise-integration-testing.yaml +158 -158
- package/assets/skills/enterprise-integration-testing/schemas/output.json +74 -74
- package/assets/skills/enterprise-integration-testing/scripts/validate-config.json +25 -25
- package/assets/skills/localization-testing/evals/localization-testing.yaml +544 -544
- package/assets/skills/localization-testing/schemas/output.json +325 -325
- package/assets/skills/middleware-testing-patterns/SKILL.md +798 -798
- package/assets/skills/middleware-testing-patterns/evals/middleware-testing-patterns.yaml +153 -153
- package/assets/skills/middleware-testing-patterns/schemas/output.json +58 -58
- package/assets/skills/middleware-testing-patterns/scripts/validate-config.json +25 -25
- package/assets/skills/mobile-testing/evals/mobile-testing.yaml +537 -537
- package/assets/skills/mobile-testing/schemas/output.json +318 -318
- package/assets/skills/mutation-testing/evals/mutation-testing.yaml +652 -652
- package/assets/skills/mutation-testing/schemas/output.json +707 -707
- package/assets/skills/mutation-testing/test-data/sample-output.json +295 -295
- package/assets/skills/n8n-expression-testing/evals/n8n-expression-testing.yaml +450 -450
- package/assets/skills/n8n-expression-testing/schemas/output.json +369 -369
- package/assets/skills/n8n-integration-testing-patterns/evals/n8n-integration-testing-patterns.yaml +522 -522
- package/assets/skills/n8n-integration-testing-patterns/schemas/output.json +291 -291
- package/assets/skills/n8n-security-testing/evals/n8n-security-testing.yaml +493 -493
- package/assets/skills/n8n-security-testing/schemas/output.json +293 -293
- package/assets/skills/n8n-trigger-testing-strategies/evals/n8n-trigger-testing-strategies.yaml +500 -500
- package/assets/skills/n8n-trigger-testing-strategies/schemas/output.json +295 -295
- package/assets/skills/n8n-workflow-testing-fundamentals/evals/n8n-workflow-testing-fundamentals.yaml +497 -497
- package/assets/skills/n8n-workflow-testing-fundamentals/schemas/output.json +254 -254
- package/assets/skills/observability-testing-patterns/SKILL.md +930 -930
- package/assets/skills/observability-testing-patterns/evals/observability-testing-patterns.yaml +157 -157
- package/assets/skills/observability-testing-patterns/schemas/output.json +58 -58
- package/assets/skills/observability-testing-patterns/scripts/validate-config.json +25 -25
- package/assets/skills/pentest-validation/SKILL.md +268 -268
- package/assets/skills/pentest-validation/evals/pentest-validation.yaml +708 -708
- package/assets/skills/pentest-validation/schemas/output.json +281 -281
- package/assets/skills/performance-testing/evals/performance-testing.yaml +772 -772
- package/assets/skills/performance-testing/schemas/output.json +1184 -1184
- package/assets/skills/pr-review/SKILL.md +61 -61
- package/assets/skills/qcsd-cicd-swarm/SKILL.md +2206 -2206
- package/assets/skills/qcsd-cicd-swarm/evals/qcsd-cicd-swarm.yaml +211 -211
- package/assets/skills/qcsd-cicd-swarm/schemas/output.json +86 -86
- package/assets/skills/qcsd-cicd-swarm/scripts/validate-config.json +30 -30
- package/assets/skills/qcsd-development-swarm/SKILL.md +2154 -2154
- package/assets/skills/qcsd-development-swarm/evals/qcsd-development-swarm.yaml +162 -162
- package/assets/skills/qcsd-development-swarm/schemas/output.json +72 -72
- package/assets/skills/qcsd-development-swarm/scripts/validate-config.json +25 -25
- package/assets/skills/qcsd-ideation-swarm/evals/qcsd-ideation-swarm.yaml +138 -138
- package/assets/skills/qcsd-ideation-swarm/schemas/output.json +568 -568
- package/assets/skills/qcsd-production-swarm/SKILL.md +2781 -2781
- package/assets/skills/qcsd-production-swarm/evals/qcsd-production-swarm.yaml +246 -246
- package/assets/skills/qcsd-production-swarm/schemas/output.json +505 -505
- package/assets/skills/qcsd-production-swarm/scripts/validate-config.json +25 -25
- package/assets/skills/qe-chaos-resilience/evals/qe-chaos-resilience.yaml +443 -443
- package/assets/skills/qe-chaos-resilience/schemas/output.json +314 -314
- package/assets/skills/qe-code-intelligence/evals/qe-code-intelligence.yaml +459 -459
- package/assets/skills/qe-code-intelligence/schemas/output.json +315 -315
- package/assets/skills/qe-contract-testing/evals/qe-contract-testing.yaml +513 -513
- package/assets/skills/qe-contract-testing/schemas/output.json +295 -295
- package/assets/skills/qe-coverage-analysis/evals/qe-coverage-analysis.yaml +494 -494
- package/assets/skills/qe-coverage-analysis/schemas/output.json +286 -286
- package/assets/skills/qe-defect-intelligence/evals/qe-defect-intelligence.yaml +511 -511
- package/assets/skills/qe-defect-intelligence/schemas/output.json +283 -283
- package/assets/skills/qe-iterative-loop/schemas/output.json +264 -264
- package/assets/skills/qe-learning-optimization/evals/qe-learning-optimization.yaml +144 -144
- package/assets/skills/qe-learning-optimization/schemas/output.json +288 -288
- package/assets/skills/qe-quality-assessment/evals/qe-quality-assessment.yaml +506 -506
- package/assets/skills/qe-quality-assessment/schemas/output.json +550 -550
- package/assets/skills/qe-requirements-validation/evals/qe-requirements-validation.yaml +598 -598
- package/assets/skills/qe-requirements-validation/schemas/output.json +587 -587
- package/assets/skills/qe-security-compliance/evals/qe-security-compliance.yaml +595 -595
- package/assets/skills/qe-security-compliance/schemas/output.json +498 -498
- package/assets/skills/qe-test-execution/evals/qe-test-execution.yaml +607 -607
- package/assets/skills/qe-test-execution/schemas/output.json +529 -529
- package/assets/skills/qe-test-generation/evals/qe-test-generation.yaml +148 -148
- package/assets/skills/qe-test-generation/schemas/output.json +439 -439
- package/assets/skills/qe-visual-accessibility/evals/qe-visual-accessibility.yaml +142 -142
- package/assets/skills/qe-visual-accessibility/schemas/output.json +491 -491
- package/assets/skills/quality-metrics/evals/quality-metrics.yaml +494 -494
- package/assets/skills/quality-metrics/schemas/output.json +403 -403
- package/assets/skills/refactoring-patterns/schemas/output.json +475 -475
- package/assets/skills/regression-testing/evals/regression-testing.yaml +504 -504
- package/assets/skills/regression-testing/schemas/output.json +311 -311
- package/assets/skills/risk-based-testing/evals/risk-based-testing.yaml +141 -141
- package/assets/skills/risk-based-testing/schemas/output.json +480 -480
- package/assets/skills/security-testing/evals/security-testing.yaml +789 -789
- package/assets/skills/security-testing/schemas/output.json +879 -879
- package/assets/skills/security-visual-testing/evals/security-visual-testing.yaml +163 -163
- package/assets/skills/security-visual-testing/schemas/output.json +486 -486
- package/assets/skills/sfdipot-product-factors/SKILL.md +239 -239
- package/assets/skills/sherlock-review/schemas/output.json +297 -297
- package/assets/skills/shift-left-testing/evals/shift-left-testing.yaml +145 -145
- package/assets/skills/shift-left-testing/schemas/output.json +459 -459
- package/assets/skills/shift-right-testing/evals/shift-right-testing.yaml +147 -147
- package/assets/skills/shift-right-testing/schemas/output.json +418 -418
- package/assets/skills/tdd-london-chicago/schemas/output.json +444 -444
- package/assets/skills/technical-writing/schemas/output.json +268 -268
- package/assets/skills/test-automation-strategy/evals/test-automation-strategy.yaml +148 -148
- package/assets/skills/test-automation-strategy/schemas/output.json +444 -444
- package/assets/skills/test-data-management/evals/test-data-management.yaml +504 -504
- package/assets/skills/test-data-management/schemas/output.json +284 -284
- package/assets/skills/test-design-techniques/evals/test-design-techniques.yaml +142 -142
- package/assets/skills/test-design-techniques/schemas/output.json +295 -295
- package/assets/skills/test-environment-management/schemas/output.json +310 -310
- package/assets/skills/test-idea-rewriting/SKILL.md +229 -229
- package/assets/skills/test-reporting-analytics/evals/test-reporting-analytics.yaml +155 -155
- package/assets/skills/test-reporting-analytics/schemas/output.json +329 -329
- package/assets/skills/testability-scoring/evals/testability-scoring.yaml +814 -814
- package/assets/skills/testability-scoring/resources/templates/config.template.js +84 -84
- package/assets/skills/testability-scoring/schemas/output.json +606 -606
- package/assets/skills/testability-scoring/scripts/generate-html-report.js +1007 -1007
- package/assets/skills/verification-quality/evals/verification-quality.yaml +150 -150
- package/assets/skills/verification-quality/schemas/output.json +432 -432
- package/assets/skills/visual-testing-advanced/evals/visual-testing-advanced.yaml +154 -154
- package/assets/skills/visual-testing-advanced/schemas/output.json +294 -294
- package/assets/skills/wms-testing-patterns/evals/wms-testing-patterns.yaml +165 -165
- package/assets/skills/wms-testing-patterns/schemas/output.json +150 -150
- package/assets/skills/wms-testing-patterns/scripts/validate-config.json +51 -51
- package/assets/templates/validation-summary.json +56 -56
- package/dist/agents/claim-verifier/verifiers/output-verifier.d.ts +1 -0
- package/dist/agents/claim-verifier/verifiers/output-verifier.d.ts.map +1 -1
- package/dist/agents/claim-verifier/verifiers/output-verifier.js +16 -3
- package/dist/agents/claim-verifier/verifiers/output-verifier.js.map +1 -1
- package/dist/cli/bundle.js +488 -75
- package/dist/cli/commands/mcp.d.ts.map +1 -1
- package/dist/cli/commands/mcp.js +11 -9
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/governance/adversarial-defense-integration.d.ts +29 -0
- package/dist/governance/adversarial-defense-integration.d.ts.map +1 -1
- package/dist/governance/adversarial-defense-integration.js +85 -1
- package/dist/governance/adversarial-defense-integration.js.map +1 -1
- package/dist/governance/continue-gate-integration.d.ts +7 -5
- package/dist/governance/continue-gate-integration.d.ts.map +1 -1
- package/dist/governance/continue-gate-integration.js +72 -15
- package/dist/governance/continue-gate-integration.js.map +1 -1
- package/dist/governance/deterministic-gateway-integration.d.ts +5 -0
- package/dist/governance/deterministic-gateway-integration.d.ts.map +1 -1
- package/dist/governance/deterministic-gateway-integration.js +35 -1
- package/dist/governance/deterministic-gateway-integration.js.map +1 -1
- package/dist/governance/evolution-pipeline-integration.d.ts +5 -0
- package/dist/governance/evolution-pipeline-integration.d.ts.map +1 -1
- package/dist/governance/evolution-pipeline-integration.js +57 -1
- package/dist/governance/evolution-pipeline-integration.js.map +1 -1
- package/dist/governance/memory-write-gate-integration.d.ts +6 -3
- package/dist/governance/memory-write-gate-integration.d.ts.map +1 -1
- package/dist/governance/memory-write-gate-integration.js +48 -10
- package/dist/governance/memory-write-gate-integration.js.map +1 -1
- package/dist/governance/proof-envelope-integration.d.ts +1 -0
- package/dist/governance/proof-envelope-integration.d.ts.map +1 -1
- package/dist/governance/proof-envelope-integration.js +37 -0
- package/dist/governance/proof-envelope-integration.js.map +1 -1
- package/dist/governance/shard-retriever-integration.d.ts +10 -0
- package/dist/governance/shard-retriever-integration.d.ts.map +1 -1
- package/dist/governance/shard-retriever-integration.js +50 -1
- package/dist/governance/shard-retriever-integration.js.map +1 -1
- package/dist/governance/trust-accumulator-integration.d.ts +5 -0
- package/dist/governance/trust-accumulator-integration.d.ts.map +1 -1
- package/dist/governance/trust-accumulator-integration.js +35 -2
- package/dist/governance/trust-accumulator-integration.js.map +1 -1
- package/dist/init/phases/10-workers.js +2 -2
- package/dist/init/phases/10-workers.js.map +1 -1
- package/dist/mcp/bundle.js +478 -62
- package/dist/mcp/protocol-server.js +2 -2
- package/dist/mcp/tool-registry.d.ts.map +1 -1
- package/dist/mcp/tool-registry.js +1 -0
- package/dist/mcp/tool-registry.js.map +1 -1
- package/dist/shared/language-detector.js +1 -1
- package/dist/shared/language-detector.js.map +1 -1
- package/dist/shared/parsers/multi-language-parser.d.ts.map +1 -1
- package/dist/shared/parsers/multi-language-parser.js +55 -16
- package/dist/shared/parsers/multi-language-parser.js.map +1 -1
- package/dist/shared/sql-safety.d.ts.map +1 -1
- package/dist/shared/sql-safety.js +7 -1
- package/dist/shared/sql-safety.js.map +1 -1
- package/package.json +6 -2
- package/scripts/prepare-assets.sh +8 -0
|
@@ -1,725 +1,725 @@
|
|
|
1
|
-
# =============================================================================
|
|
2
|
-
# AQE Skill Evaluation Test Suite: Security Testing
|
|
3
|
-
# =============================================================================
|
|
4
|
-
#
|
|
5
|
-
# This is a comprehensive example evaluation suite for the security-testing skill.
|
|
6
|
-
# Use this as a reference for creating evaluation suites for other skills.
|
|
7
|
-
#
|
|
8
|
-
# Schema: docs/schemas/skill-eval.schema.json
|
|
9
|
-
# MCP Integration: docs/specs/skill-validation-mcp-integration.md
|
|
10
|
-
#
|
|
11
|
-
# Key Features Demonstrated:
|
|
12
|
-
# 1. Multi-model testing (claude-sonnet, claude-haiku, gpt-4o)
|
|
13
|
-
# 2. MCP integration for shared learning
|
|
14
|
-
# 3. Various test categories (injection, auth, crypto, negative tests)
|
|
15
|
-
# 4. Different priority levels and validation strategies
|
|
16
|
-
# 5. ReasoningBank integration for pattern learning
|
|
17
|
-
#
|
|
18
|
-
# =============================================================================
|
|
19
|
-
|
|
20
|
-
skill: security-testing
|
|
21
|
-
version: 1.0.0
|
|
22
|
-
description: >
|
|
23
|
-
Comprehensive evaluation suite for the security-testing skill.
|
|
24
|
-
Tests OWASP Top 10 detection capabilities, severity classification accuracy,
|
|
25
|
-
remediation quality, and cross-model consistency. Integrates with ReasoningBank
|
|
26
|
-
for pattern learning and QualityFeedbackLoop for continuous improvement.
|
|
27
|
-
|
|
28
|
-
# =============================================================================
|
|
29
|
-
# Multi-Model Configuration
|
|
30
|
-
# =============================================================================
|
|
31
|
-
# Test across multiple models to ensure consistent behavior and identify
|
|
32
|
-
# model-specific quirks. Results are compared to detect variance.
|
|
33
|
-
|
|
34
|
-
models_to_test:
|
|
35
|
-
- claude-3.5-sonnet # Primary model (high accuracy expected)
|
|
36
|
-
- claude-3-haiku # Fast model (ensure it meets minimum quality)
|
|
37
|
-
- gpt-4o # Cross-vendor validation (optional)
|
|
38
|
-
|
|
39
|
-
# =============================================================================
|
|
40
|
-
# MCP Integration Configuration
|
|
41
|
-
# =============================================================================
|
|
42
|
-
# Per docs/specs/skill-validation-mcp-integration.md
|
|
43
|
-
# These settings control how the eval runner interacts with AQE MCP tools.
|
|
44
|
-
|
|
45
|
-
mcp_integration:
|
|
46
|
-
enabled: true
|
|
47
|
-
namespace: skill-validation
|
|
48
|
-
|
|
49
|
-
# Before running evals, query existing patterns for context
|
|
50
|
-
query_patterns: true
|
|
51
|
-
|
|
52
|
-
# Track each test outcome for the learning feedback loop
|
|
53
|
-
track_outcomes: true
|
|
54
|
-
|
|
55
|
-
# After evals, store successful patterns for future reference
|
|
56
|
-
store_patterns: true
|
|
57
|
-
|
|
58
|
-
# Share learning with the fleet coordinator agents
|
|
59
|
-
share_learning: true
|
|
60
|
-
|
|
61
|
-
# Update quality gate with validation metrics
|
|
62
|
-
update_quality_gate: true
|
|
63
|
-
|
|
64
|
-
# Agents to share learning with
|
|
65
|
-
target_agents:
|
|
66
|
-
- qe-learning-coordinator
|
|
67
|
-
- qe-queen-coordinator
|
|
68
|
-
- qe-security-scanner
|
|
69
|
-
|
|
70
|
-
# =============================================================================
|
|
71
|
-
# ReasoningBank Learning Configuration
|
|
72
|
-
# =============================================================================
|
|
73
|
-
# Controls how patterns are stored and retrieved from ReasoningBank.
|
|
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
|
-
- npm # For running security scanners
|
|
100
|
-
- node # JavaScript runtime
|
|
101
|
-
|
|
102
|
-
environment_variables:
|
|
103
|
-
SECURITY_SCAN_DEPTH: "deep"
|
|
104
|
-
OWASP_ENABLED: "true"
|
|
105
|
-
|
|
106
|
-
fixtures:
|
|
107
|
-
- name: vulnerable_express_app
|
|
108
|
-
path: fixtures/vulnerable-express-app.js
|
|
109
|
-
content: |
|
|
110
|
-
const express = require('express');
|
|
111
|
-
const app = express();
|
|
112
|
-
|
|
113
|
-
// Vulnerable: SQL Injection
|
|
114
|
-
app.get('/user', (req, res) => {
|
|
115
|
-
const query = `SELECT * FROM users WHERE id = ${req.params.id}`;
|
|
116
|
-
db.query(query);
|
|
117
|
-
});
|
|
118
|
-
|
|
119
|
-
// Vulnerable: XSS
|
|
120
|
-
app.get('/profile', (req, res) => {
|
|
121
|
-
res.send(`<h1>Hello ${req.query.name}</h1>`);
|
|
122
|
-
});
|
|
123
|
-
|
|
124
|
-
// Vulnerable: Path Traversal
|
|
125
|
-
app.get('/file', (req, res) => {
|
|
126
|
-
const path = './uploads/' + req.query.filename;
|
|
127
|
-
res.sendFile(path);
|
|
128
|
-
});
|
|
129
|
-
|
|
130
|
-
# =============================================================================
|
|
131
|
-
# TEST CASES
|
|
132
|
-
# =============================================================================
|
|
133
|
-
|
|
134
|
-
test_cases:
|
|
135
|
-
# ---------------------------------------------------------------------------
|
|
136
|
-
# CATEGORY: SQL Injection (OWASP A03:2021)
|
|
137
|
-
# ---------------------------------------------------------------------------
|
|
138
|
-
|
|
139
|
-
- id: tc001_sql_injection_basic
|
|
140
|
-
description: "Detect basic SQL injection vulnerability in user input concatenation"
|
|
141
|
-
category: injection
|
|
142
|
-
priority: critical
|
|
143
|
-
|
|
144
|
-
input:
|
|
145
|
-
code: |
|
|
146
|
-
const express = require('express');
|
|
147
|
-
const app = express();
|
|
148
|
-
|
|
149
|
-
app.get('/api/users', (req, res) => {
|
|
150
|
-
const userId = req.params.id;
|
|
151
|
-
const query = `SELECT * FROM users WHERE id = ${userId}`;
|
|
152
|
-
db.query(query, (err, results) => {
|
|
153
|
-
res.json(results);
|
|
154
|
-
});
|
|
155
|
-
});
|
|
156
|
-
context:
|
|
157
|
-
language: javascript
|
|
158
|
-
framework: express
|
|
159
|
-
environment: production
|
|
160
|
-
|
|
161
|
-
expected_output:
|
|
162
|
-
must_contain:
|
|
163
|
-
- "SQL injection"
|
|
164
|
-
- "parameterized"
|
|
165
|
-
- "prepared statement"
|
|
166
|
-
must_not_contain:
|
|
167
|
-
- "no vulnerabilities"
|
|
168
|
-
- "code is secure"
|
|
169
|
-
must_match_regex:
|
|
170
|
-
- "CWE-89|CWE-564"
|
|
171
|
-
- "A0[13]:20[21][0-9]"
|
|
172
|
-
severity_classification: critical
|
|
173
|
-
finding_count:
|
|
174
|
-
min: 1
|
|
175
|
-
max: 3
|
|
176
|
-
recommendation_count:
|
|
177
|
-
min: 1
|
|
178
|
-
|
|
179
|
-
validation:
|
|
180
|
-
schema_check: true
|
|
181
|
-
keyword_match_threshold: 0.8
|
|
182
|
-
reasoning_quality_min: 0.7
|
|
183
|
-
grading_rubric:
|
|
184
|
-
completeness: 0.3
|
|
185
|
-
accuracy: 0.5
|
|
186
|
-
actionability: 0.2
|
|
187
|
-
|
|
188
|
-
timeout_ms: 30000
|
|
189
|
-
|
|
190
|
-
- id: tc002_sql_injection_parameterized
|
|
191
|
-
description: "Verify parameterized queries are correctly identified as secure"
|
|
192
|
-
category: injection
|
|
193
|
-
priority: high
|
|
194
|
-
|
|
195
|
-
input:
|
|
196
|
-
code: |
|
|
197
|
-
app.get('/api/users', (req, res) => {
|
|
198
|
-
const userId = parseInt(req.params.id, 10);
|
|
199
|
-
db.query('SELECT * FROM users WHERE id = ?', [userId], (err, results) => {
|
|
200
|
-
res.json(results);
|
|
201
|
-
});
|
|
202
|
-
});
|
|
203
|
-
context:
|
|
204
|
-
language: javascript
|
|
205
|
-
framework: express
|
|
206
|
-
|
|
207
|
-
expected_output:
|
|
208
|
-
must_contain:
|
|
209
|
-
- "parameterized"
|
|
210
|
-
- "secure"
|
|
211
|
-
must_not_contain:
|
|
212
|
-
- "SQL injection"
|
|
213
|
-
- "critical"
|
|
214
|
-
- "high"
|
|
215
|
-
severity_classification: info
|
|
216
|
-
finding_count:
|
|
217
|
-
max: 1
|
|
218
|
-
|
|
219
|
-
validation:
|
|
220
|
-
schema_check: true
|
|
221
|
-
keyword_match_threshold: 0.7
|
|
222
|
-
allow_partial: true
|
|
223
|
-
|
|
224
|
-
# ---------------------------------------------------------------------------
|
|
225
|
-
# CATEGORY: Cross-Site Scripting (OWASP A03:2021)
|
|
226
|
-
# ---------------------------------------------------------------------------
|
|
227
|
-
|
|
228
|
-
- id: tc003_xss_reflected
|
|
229
|
-
description: "Detect reflected XSS vulnerability in HTML output"
|
|
230
|
-
category: injection
|
|
231
|
-
priority: critical
|
|
232
|
-
|
|
233
|
-
input:
|
|
234
|
-
code: |
|
|
235
|
-
app.get('/profile', (req, res) => {
|
|
236
|
-
const name = req.query.name;
|
|
237
|
-
res.send(`
|
|
238
|
-
<html>
|
|
239
|
-
<body>
|
|
240
|
-
<h1>Welcome, ${name}!</h1>
|
|
241
|
-
<p>Your profile has been loaded.</p>
|
|
242
|
-
</body>
|
|
243
|
-
</html>
|
|
244
|
-
`);
|
|
245
|
-
});
|
|
246
|
-
context:
|
|
247
|
-
language: javascript
|
|
248
|
-
framework: express
|
|
249
|
-
|
|
250
|
-
expected_output:
|
|
251
|
-
must_contain:
|
|
252
|
-
- "XSS"
|
|
253
|
-
- "cross-site scripting"
|
|
254
|
-
- "sanitize"
|
|
255
|
-
- "encode"
|
|
256
|
-
- "escape"
|
|
257
|
-
must_match_regex:
|
|
258
|
-
- "CWE-79"
|
|
259
|
-
severity_classification: high
|
|
260
|
-
finding_count:
|
|
261
|
-
min: 1
|
|
262
|
-
|
|
263
|
-
validation:
|
|
264
|
-
schema_check: true
|
|
265
|
-
keyword_match_threshold: 0.8
|
|
266
|
-
reasoning_quality_min: 0.75
|
|
267
|
-
|
|
268
|
-
- id: tc004_xss_dom_based
|
|
269
|
-
description: "Detect DOM-based XSS in client-side JavaScript"
|
|
270
|
-
category: injection
|
|
271
|
-
priority: high
|
|
272
|
-
|
|
273
|
-
input:
|
|
274
|
-
code: |
|
|
275
|
-
// Client-side JavaScript
|
|
276
|
-
const params = new URLSearchParams(window.location.search);
|
|
277
|
-
const message = params.get('msg');
|
|
278
|
-
document.getElementById('output').innerHTML = message;
|
|
279
|
-
context:
|
|
280
|
-
language: javascript
|
|
281
|
-
framework: vanilla
|
|
282
|
-
environment: production
|
|
283
|
-
|
|
284
|
-
expected_output:
|
|
285
|
-
must_contain:
|
|
286
|
-
- "DOM"
|
|
287
|
-
- "XSS"
|
|
288
|
-
- "innerHTML"
|
|
289
|
-
- "textContent"
|
|
290
|
-
must_match_regex:
|
|
291
|
-
- "CWE-79"
|
|
292
|
-
severity_classification: high
|
|
293
|
-
|
|
294
|
-
validation:
|
|
295
|
-
schema_check: true
|
|
296
|
-
keyword_match_threshold: 0.7
|
|
297
|
-
|
|
298
|
-
# ---------------------------------------------------------------------------
|
|
299
|
-
# CATEGORY: Authentication/Authorization (OWASP A01/A07:2021)
|
|
300
|
-
# ---------------------------------------------------------------------------
|
|
301
|
-
|
|
302
|
-
- id: tc005_insecure_auth
|
|
303
|
-
description: "Detect hardcoded credentials and weak authentication"
|
|
304
|
-
category: authentication
|
|
305
|
-
priority: critical
|
|
306
|
-
|
|
307
|
-
input:
|
|
308
|
-
code: |
|
|
309
|
-
const ADMIN_PASSWORD = 'admin123';
|
|
310
|
-
const API_KEY = 'sk-1234567890abcdef';
|
|
311
|
-
|
|
312
|
-
app.post('/login', (req, res) => {
|
|
313
|
-
if (req.body.password === ADMIN_PASSWORD) {
|
|
314
|
-
req.session.isAdmin = true;
|
|
315
|
-
res.send('Login successful');
|
|
316
|
-
}
|
|
317
|
-
});
|
|
318
|
-
context:
|
|
319
|
-
language: javascript
|
|
320
|
-
framework: express
|
|
321
|
-
|
|
322
|
-
expected_output:
|
|
323
|
-
must_contain:
|
|
324
|
-
- "hardcoded"
|
|
325
|
-
- "credentials"
|
|
326
|
-
- "secret"
|
|
327
|
-
- "environment variable"
|
|
328
|
-
must_match_regex:
|
|
329
|
-
- "CWE-798|CWE-259"
|
|
330
|
-
severity_classification: critical
|
|
331
|
-
finding_count:
|
|
332
|
-
min: 2
|
|
333
|
-
|
|
334
|
-
validation:
|
|
335
|
-
schema_check: true
|
|
336
|
-
keyword_match_threshold: 0.8
|
|
337
|
-
reasoning_quality_min: 0.8
|
|
338
|
-
|
|
339
|
-
- id: tc006_broken_access_control
|
|
340
|
-
description: "Detect missing authorization checks (IDOR)"
|
|
341
|
-
category: authorization
|
|
342
|
-
priority: critical
|
|
343
|
-
|
|
344
|
-
input:
|
|
345
|
-
code: |
|
|
346
|
-
app.get('/api/users/:id/profile', (req, res) => {
|
|
347
|
-
// No authorization check - any user can access any profile
|
|
348
|
-
const userId = req.params.id;
|
|
349
|
-
db.query('SELECT * FROM profiles WHERE user_id = ?', [userId])
|
|
350
|
-
.then(profile => res.json(profile));
|
|
351
|
-
});
|
|
352
|
-
|
|
353
|
-
app.delete('/api/users/:id', (req, res) => {
|
|
354
|
-
// No check if requesting user owns this account
|
|
355
|
-
db.query('DELETE FROM users WHERE id = ?', [req.params.id]);
|
|
356
|
-
res.send('User deleted');
|
|
357
|
-
});
|
|
358
|
-
context:
|
|
359
|
-
language: javascript
|
|
360
|
-
framework: express
|
|
361
|
-
|
|
362
|
-
expected_output:
|
|
363
|
-
must_contain:
|
|
364
|
-
- "authorization"
|
|
365
|
-
- "access control"
|
|
366
|
-
- "IDOR"
|
|
367
|
-
- "verify"
|
|
368
|
-
- "ownership"
|
|
369
|
-
must_match_regex:
|
|
370
|
-
- "CWE-639|CWE-284"
|
|
371
|
-
- "A01:2021"
|
|
372
|
-
severity_classification: critical
|
|
373
|
-
|
|
374
|
-
validation:
|
|
375
|
-
schema_check: true
|
|
376
|
-
keyword_match_threshold: 0.7
|
|
377
|
-
|
|
378
|
-
# ---------------------------------------------------------------------------
|
|
379
|
-
# CATEGORY: Cryptographic Failures (OWASP A02:2021)
|
|
380
|
-
# ---------------------------------------------------------------------------
|
|
381
|
-
|
|
382
|
-
- id: tc007_weak_crypto
|
|
383
|
-
description: "Detect weak cryptographic algorithms (MD5, SHA1 for passwords)"
|
|
384
|
-
category: cryptography
|
|
385
|
-
priority: high
|
|
386
|
-
|
|
387
|
-
input:
|
|
388
|
-
code: |
|
|
389
|
-
const crypto = require('crypto');
|
|
390
|
-
|
|
391
|
-
function hashPassword(password) {
|
|
392
|
-
return crypto.createHash('md5').update(password).digest('hex');
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
function encryptData(data, key) {
|
|
396
|
-
const cipher = crypto.createCipher('des', key);
|
|
397
|
-
return cipher.update(data, 'utf8', 'hex') + cipher.final('hex');
|
|
398
|
-
}
|
|
399
|
-
context:
|
|
400
|
-
language: javascript
|
|
401
|
-
framework: nodejs
|
|
402
|
-
|
|
403
|
-
expected_output:
|
|
404
|
-
must_contain:
|
|
405
|
-
- "MD5"
|
|
406
|
-
- "weak"
|
|
407
|
-
- "bcrypt"
|
|
408
|
-
- "argon2"
|
|
409
|
-
- "DES"
|
|
410
|
-
- "deprecated"
|
|
411
|
-
must_match_regex:
|
|
412
|
-
- "CWE-327|CWE-328"
|
|
413
|
-
severity_classification: high
|
|
414
|
-
finding_count:
|
|
415
|
-
min: 2
|
|
416
|
-
|
|
417
|
-
validation:
|
|
418
|
-
schema_check: true
|
|
419
|
-
keyword_match_threshold: 0.8
|
|
420
|
-
|
|
421
|
-
# ---------------------------------------------------------------------------
|
|
422
|
-
# CATEGORY: Path Traversal (OWASP A01:2021)
|
|
423
|
-
# ---------------------------------------------------------------------------
|
|
424
|
-
|
|
425
|
-
- id: tc008_path_traversal
|
|
426
|
-
description: "Detect path traversal vulnerability in file access"
|
|
427
|
-
category: injection
|
|
428
|
-
priority: critical
|
|
429
|
-
|
|
430
|
-
input:
|
|
431
|
-
code: |
|
|
432
|
-
const path = require('path');
|
|
433
|
-
const fs = require('fs');
|
|
434
|
-
|
|
435
|
-
app.get('/download', (req, res) => {
|
|
436
|
-
const filename = req.query.file;
|
|
437
|
-
const filepath = './uploads/' + filename;
|
|
438
|
-
res.sendFile(filepath);
|
|
439
|
-
});
|
|
440
|
-
|
|
441
|
-
app.get('/read', (req, res) => {
|
|
442
|
-
const content = fs.readFileSync('./data/' + req.params.name);
|
|
443
|
-
res.send(content);
|
|
444
|
-
});
|
|
445
|
-
context:
|
|
446
|
-
language: javascript
|
|
447
|
-
framework: express
|
|
448
|
-
|
|
449
|
-
expected_output:
|
|
450
|
-
must_contain:
|
|
451
|
-
- "path traversal"
|
|
452
|
-
- "directory traversal"
|
|
453
|
-
- "../"
|
|
454
|
-
- "sanitize"
|
|
455
|
-
- "path.resolve"
|
|
456
|
-
- "path.normalize"
|
|
457
|
-
must_match_regex:
|
|
458
|
-
- "CWE-22|CWE-23"
|
|
459
|
-
severity_classification: critical
|
|
460
|
-
|
|
461
|
-
validation:
|
|
462
|
-
schema_check: true
|
|
463
|
-
keyword_match_threshold: 0.7
|
|
464
|
-
|
|
465
|
-
# ---------------------------------------------------------------------------
|
|
466
|
-
# CATEGORY: Negative Tests (Should NOT find critical issues)
|
|
467
|
-
# ---------------------------------------------------------------------------
|
|
468
|
-
|
|
469
|
-
- id: tc010_secure_code_no_false_positives
|
|
470
|
-
description: "Verify skill does not flag secure code as vulnerable"
|
|
471
|
-
category: negative
|
|
472
|
-
priority: high
|
|
473
|
-
|
|
474
|
-
input:
|
|
475
|
-
code: |
|
|
476
|
-
const express = require('express');
|
|
477
|
-
const helmet = require('helmet');
|
|
478
|
-
const rateLimit = require('express-rate-limit');
|
|
479
|
-
const bcrypt = require('bcrypt');
|
|
480
|
-
const validator = require('validator');
|
|
481
|
-
|
|
482
|
-
const app = express();
|
|
483
|
-
app.use(helmet());
|
|
484
|
-
app.use(rateLimit({ windowMs: 15 * 60 * 1000, max: 100 }));
|
|
485
|
-
|
|
486
|
-
app.post('/api/users', async (req, res) => {
|
|
487
|
-
const { email, password } = req.body;
|
|
488
|
-
|
|
489
|
-
// Input validation
|
|
490
|
-
if (!validator.isEmail(email)) {
|
|
491
|
-
return res.status(400).json({ error: 'Invalid email' });
|
|
492
|
-
}
|
|
493
|
-
|
|
494
|
-
// Secure password hashing
|
|
495
|
-
const hashedPassword = await bcrypt.hash(password, 12);
|
|
496
|
-
|
|
497
|
-
// Parameterized query
|
|
498
|
-
await db.query(
|
|
499
|
-
'INSERT INTO users (email, password) VALUES ($1, $2)',
|
|
500
|
-
[email, hashedPassword]
|
|
501
|
-
);
|
|
502
|
-
|
|
503
|
-
res.status(201).json({ message: 'User created' });
|
|
504
|
-
});
|
|
505
|
-
context:
|
|
506
|
-
language: javascript
|
|
507
|
-
framework: express
|
|
508
|
-
environment: production
|
|
509
|
-
|
|
510
|
-
expected_output:
|
|
511
|
-
must_contain:
|
|
512
|
-
- "secure"
|
|
513
|
-
- "best practice"
|
|
514
|
-
must_not_contain:
|
|
515
|
-
- "SQL injection"
|
|
516
|
-
- "XSS"
|
|
517
|
-
- "critical vulnerability"
|
|
518
|
-
- "high severity"
|
|
519
|
-
finding_count:
|
|
520
|
-
max: 2 # Allow informational findings only
|
|
521
|
-
|
|
522
|
-
validation:
|
|
523
|
-
schema_check: true
|
|
524
|
-
keyword_match_threshold: 0.6
|
|
525
|
-
allow_partial: true
|
|
526
|
-
|
|
527
|
-
- id: tc011_informational_only
|
|
528
|
-
description: "Code with only informational-level findings (no vulnerabilities)"
|
|
529
|
-
category: negative
|
|
530
|
-
priority: medium
|
|
531
|
-
|
|
532
|
-
input:
|
|
533
|
-
code: |
|
|
534
|
-
// Secure but could use some improvements
|
|
535
|
-
app.get('/api/health', (req, res) => {
|
|
536
|
-
res.json({ status: 'healthy', timestamp: Date.now() });
|
|
537
|
-
});
|
|
538
|
-
|
|
539
|
-
app.get('/api/version', (req, res) => {
|
|
540
|
-
res.json({ version: process.env.APP_VERSION || '1.0.0' });
|
|
541
|
-
});
|
|
542
|
-
context:
|
|
543
|
-
language: javascript
|
|
544
|
-
framework: express
|
|
545
|
-
|
|
546
|
-
expected_output:
|
|
547
|
-
must_not_contain:
|
|
548
|
-
- "critical"
|
|
549
|
-
- "high"
|
|
550
|
-
- "vulnerability"
|
|
551
|
-
- "injection"
|
|
552
|
-
severity_classification: info
|
|
553
|
-
|
|
554
|
-
validation:
|
|
555
|
-
schema_check: true
|
|
556
|
-
allow_partial: true
|
|
557
|
-
|
|
558
|
-
# ---------------------------------------------------------------------------
|
|
559
|
-
# CATEGORY: Edge Cases
|
|
560
|
-
# ---------------------------------------------------------------------------
|
|
561
|
-
|
|
562
|
-
- id: tc020_mixed_vulnerabilities
|
|
563
|
-
description: "Detect multiple vulnerability types in single codebase"
|
|
564
|
-
category: edge_cases
|
|
565
|
-
priority: high
|
|
566
|
-
|
|
567
|
-
input:
|
|
568
|
-
code: |
|
|
569
|
-
const express = require('express');
|
|
570
|
-
const mysql = require('mysql');
|
|
571
|
-
|
|
572
|
-
// SQL Injection
|
|
573
|
-
app.get('/users', (req, res) => {
|
|
574
|
-
db.query(`SELECT * FROM users WHERE name = '${req.query.name}'`);
|
|
575
|
-
});
|
|
576
|
-
|
|
577
|
-
// XSS
|
|
578
|
-
app.get('/greet', (req, res) => {
|
|
579
|
-
res.send(`<div>${req.query.message}</div>`);
|
|
580
|
-
});
|
|
581
|
-
|
|
582
|
-
// Hardcoded secret
|
|
583
|
-
const JWT_SECRET = 'super-secret-key-123';
|
|
584
|
-
|
|
585
|
-
// Weak random
|
|
586
|
-
function generateToken() {
|
|
587
|
-
return Math.random().toString(36);
|
|
588
|
-
}
|
|
589
|
-
context:
|
|
590
|
-
language: javascript
|
|
591
|
-
framework: express
|
|
592
|
-
|
|
593
|
-
expected_output:
|
|
594
|
-
must_contain:
|
|
595
|
-
- "SQL injection"
|
|
596
|
-
- "XSS"
|
|
597
|
-
- "hardcoded"
|
|
598
|
-
- "random"
|
|
599
|
-
finding_count:
|
|
600
|
-
min: 3
|
|
601
|
-
max: 6
|
|
602
|
-
|
|
603
|
-
validation:
|
|
604
|
-
schema_check: true
|
|
605
|
-
keyword_match_threshold: 0.7
|
|
606
|
-
|
|
607
|
-
timeout_ms: 45000
|
|
608
|
-
|
|
609
|
-
- id: tc021_typescript_analysis
|
|
610
|
-
description: "Analyze TypeScript code with type information"
|
|
611
|
-
category: edge_cases
|
|
612
|
-
priority: medium
|
|
613
|
-
|
|
614
|
-
input:
|
|
615
|
-
code: |
|
|
616
|
-
import express, { Request, Response } from 'express';
|
|
617
|
-
|
|
618
|
-
interface UserQuery {
|
|
619
|
-
id: string;
|
|
620
|
-
filter?: string;
|
|
621
|
-
}
|
|
622
|
-
|
|
623
|
-
app.get('/api/users', (req: Request<{}, {}, {}, UserQuery>, res: Response) => {
|
|
624
|
-
const { id, filter } = req.query;
|
|
625
|
-
// Still vulnerable despite TypeScript
|
|
626
|
-
const query = `SELECT * FROM users WHERE id = '${id}' AND status = '${filter}'`;
|
|
627
|
-
db.query(query);
|
|
628
|
-
});
|
|
629
|
-
context:
|
|
630
|
-
language: typescript
|
|
631
|
-
framework: express
|
|
632
|
-
|
|
633
|
-
expected_output:
|
|
634
|
-
must_contain:
|
|
635
|
-
- "SQL injection"
|
|
636
|
-
- "TypeScript"
|
|
637
|
-
- "runtime"
|
|
638
|
-
must_match_regex:
|
|
639
|
-
- "CWE-89"
|
|
640
|
-
|
|
641
|
-
validation:
|
|
642
|
-
schema_check: true
|
|
643
|
-
|
|
644
|
-
- id: tc022_python_flask_vulnerabilities
|
|
645
|
-
description: "Detect vulnerabilities in Python Flask application"
|
|
646
|
-
category: language_support
|
|
647
|
-
priority: medium
|
|
648
|
-
|
|
649
|
-
input:
|
|
650
|
-
code: |
|
|
651
|
-
from flask import Flask, request, render_template_string
|
|
652
|
-
import sqlite3
|
|
653
|
-
import pickle
|
|
654
|
-
|
|
655
|
-
app = Flask(__name__)
|
|
656
|
-
|
|
657
|
-
@app.route('/user')
|
|
658
|
-
def get_user():
|
|
659
|
-
user_id = request.args.get('id')
|
|
660
|
-
conn = sqlite3.connect('users.db')
|
|
661
|
-
cursor = conn.cursor()
|
|
662
|
-
cursor.execute(f"SELECT * FROM users WHERE id = {user_id}")
|
|
663
|
-
return str(cursor.fetchone())
|
|
664
|
-
|
|
665
|
-
@app.route('/render')
|
|
666
|
-
def render():
|
|
667
|
-
template = request.args.get('template')
|
|
668
|
-
return render_template_string(template)
|
|
669
|
-
|
|
670
|
-
@app.route('/load')
|
|
671
|
-
def load_data():
|
|
672
|
-
data = request.get_data()
|
|
673
|
-
return pickle.loads(data)
|
|
674
|
-
context:
|
|
675
|
-
language: python
|
|
676
|
-
framework: flask
|
|
677
|
-
|
|
678
|
-
expected_output:
|
|
679
|
-
must_contain:
|
|
680
|
-
- "SQL injection"
|
|
681
|
-
- "SSTI"
|
|
682
|
-
- "template injection"
|
|
683
|
-
- "pickle"
|
|
684
|
-
- "deserialization"
|
|
685
|
-
finding_count:
|
|
686
|
-
min: 3
|
|
687
|
-
|
|
688
|
-
validation:
|
|
689
|
-
schema_check: true
|
|
690
|
-
keyword_match_threshold: 0.7
|
|
691
|
-
|
|
692
|
-
# =============================================================================
|
|
693
|
-
# SUCCESS CRITERIA
|
|
694
|
-
# =============================================================================
|
|
695
|
-
# These criteria determine whether the eval suite passes or fails overall.
|
|
696
|
-
|
|
697
|
-
success_criteria:
|
|
698
|
-
# Overall pass rate (90% of tests must pass)
|
|
699
|
-
pass_rate: 0.9
|
|
700
|
-
|
|
701
|
-
# Critical tests must ALL pass (100%)
|
|
702
|
-
critical_pass_rate: 1.0
|
|
703
|
-
|
|
704
|
-
# Average reasoning quality score
|
|
705
|
-
avg_reasoning_quality: 0.75
|
|
706
|
-
|
|
707
|
-
# Maximum suite execution time (5 minutes)
|
|
708
|
-
max_execution_time_ms: 300000
|
|
709
|
-
|
|
710
|
-
# Maximum variance between model results (15%)
|
|
711
|
-
# If claude-sonnet gets 95% and claude-haiku gets 75%, variance is 20% (FAIL)
|
|
712
|
-
cross_model_variance: 0.15
|
|
713
|
-
|
|
714
|
-
# =============================================================================
|
|
715
|
-
# METADATA
|
|
716
|
-
# =============================================================================
|
|
717
|
-
|
|
718
|
-
metadata:
|
|
719
|
-
author: "qe-security-scanner"
|
|
720
|
-
created: "2026-02-02"
|
|
721
|
-
last_updated: "2026-02-02"
|
|
722
|
-
coverage_target: >
|
|
723
|
-
OWASP Top 10 2021: A01 (Broken Access Control), A02 (Cryptographic Failures),
|
|
724
|
-
A03 (Injection), A07 (Identification and Authentication Failures).
|
|
725
|
-
Covers JavaScript/TypeScript Express apps and Python Flask apps.
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# AQE Skill Evaluation Test Suite: Security Testing
|
|
3
|
+
# =============================================================================
|
|
4
|
+
#
|
|
5
|
+
# This is a comprehensive example evaluation suite for the security-testing skill.
|
|
6
|
+
# Use this as a reference for creating evaluation suites for other skills.
|
|
7
|
+
#
|
|
8
|
+
# Schema: docs/schemas/skill-eval.schema.json
|
|
9
|
+
# MCP Integration: docs/specs/skill-validation-mcp-integration.md
|
|
10
|
+
#
|
|
11
|
+
# Key Features Demonstrated:
|
|
12
|
+
# 1. Multi-model testing (claude-sonnet, claude-haiku, gpt-4o)
|
|
13
|
+
# 2. MCP integration for shared learning
|
|
14
|
+
# 3. Various test categories (injection, auth, crypto, negative tests)
|
|
15
|
+
# 4. Different priority levels and validation strategies
|
|
16
|
+
# 5. ReasoningBank integration for pattern learning
|
|
17
|
+
#
|
|
18
|
+
# =============================================================================
|
|
19
|
+
|
|
20
|
+
skill: security-testing
|
|
21
|
+
version: 1.0.0
|
|
22
|
+
description: >
|
|
23
|
+
Comprehensive evaluation suite for the security-testing skill.
|
|
24
|
+
Tests OWASP Top 10 detection capabilities, severity classification accuracy,
|
|
25
|
+
remediation quality, and cross-model consistency. Integrates with ReasoningBank
|
|
26
|
+
for pattern learning and QualityFeedbackLoop for continuous improvement.
|
|
27
|
+
|
|
28
|
+
# =============================================================================
|
|
29
|
+
# Multi-Model Configuration
|
|
30
|
+
# =============================================================================
|
|
31
|
+
# Test across multiple models to ensure consistent behavior and identify
|
|
32
|
+
# model-specific quirks. Results are compared to detect variance.
|
|
33
|
+
|
|
34
|
+
models_to_test:
|
|
35
|
+
- claude-3.5-sonnet # Primary model (high accuracy expected)
|
|
36
|
+
- claude-3-haiku # Fast model (ensure it meets minimum quality)
|
|
37
|
+
- gpt-4o # Cross-vendor validation (optional)
|
|
38
|
+
|
|
39
|
+
# =============================================================================
|
|
40
|
+
# MCP Integration Configuration
|
|
41
|
+
# =============================================================================
|
|
42
|
+
# Per docs/specs/skill-validation-mcp-integration.md
|
|
43
|
+
# These settings control how the eval runner interacts with AQE MCP tools.
|
|
44
|
+
|
|
45
|
+
mcp_integration:
|
|
46
|
+
enabled: true
|
|
47
|
+
namespace: skill-validation
|
|
48
|
+
|
|
49
|
+
# Before running evals, query existing patterns for context
|
|
50
|
+
query_patterns: true
|
|
51
|
+
|
|
52
|
+
# Track each test outcome for the learning feedback loop
|
|
53
|
+
track_outcomes: true
|
|
54
|
+
|
|
55
|
+
# After evals, store successful patterns for future reference
|
|
56
|
+
store_patterns: true
|
|
57
|
+
|
|
58
|
+
# Share learning with the fleet coordinator agents
|
|
59
|
+
share_learning: true
|
|
60
|
+
|
|
61
|
+
# Update quality gate with validation metrics
|
|
62
|
+
update_quality_gate: true
|
|
63
|
+
|
|
64
|
+
# Agents to share learning with
|
|
65
|
+
target_agents:
|
|
66
|
+
- qe-learning-coordinator
|
|
67
|
+
- qe-queen-coordinator
|
|
68
|
+
- qe-security-scanner
|
|
69
|
+
|
|
70
|
+
# =============================================================================
|
|
71
|
+
# ReasoningBank Learning Configuration
|
|
72
|
+
# =============================================================================
|
|
73
|
+
# Controls how patterns are stored and retrieved from ReasoningBank.
|
|
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
|
+
- npm # For running security scanners
|
|
100
|
+
- node # JavaScript runtime
|
|
101
|
+
|
|
102
|
+
environment_variables:
|
|
103
|
+
SECURITY_SCAN_DEPTH: "deep"
|
|
104
|
+
OWASP_ENABLED: "true"
|
|
105
|
+
|
|
106
|
+
fixtures:
|
|
107
|
+
- name: vulnerable_express_app
|
|
108
|
+
path: fixtures/vulnerable-express-app.js
|
|
109
|
+
content: |
|
|
110
|
+
const express = require('express');
|
|
111
|
+
const app = express();
|
|
112
|
+
|
|
113
|
+
// Vulnerable: SQL Injection
|
|
114
|
+
app.get('/user', (req, res) => {
|
|
115
|
+
const query = `SELECT * FROM users WHERE id = ${req.params.id}`;
|
|
116
|
+
db.query(query);
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
// Vulnerable: XSS
|
|
120
|
+
app.get('/profile', (req, res) => {
|
|
121
|
+
res.send(`<h1>Hello ${req.query.name}</h1>`);
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
// Vulnerable: Path Traversal
|
|
125
|
+
app.get('/file', (req, res) => {
|
|
126
|
+
const path = './uploads/' + req.query.filename;
|
|
127
|
+
res.sendFile(path);
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
# =============================================================================
|
|
131
|
+
# TEST CASES
|
|
132
|
+
# =============================================================================
|
|
133
|
+
|
|
134
|
+
test_cases:
|
|
135
|
+
# ---------------------------------------------------------------------------
|
|
136
|
+
# CATEGORY: SQL Injection (OWASP A03:2021)
|
|
137
|
+
# ---------------------------------------------------------------------------
|
|
138
|
+
|
|
139
|
+
- id: tc001_sql_injection_basic
|
|
140
|
+
description: "Detect basic SQL injection vulnerability in user input concatenation"
|
|
141
|
+
category: injection
|
|
142
|
+
priority: critical
|
|
143
|
+
|
|
144
|
+
input:
|
|
145
|
+
code: |
|
|
146
|
+
const express = require('express');
|
|
147
|
+
const app = express();
|
|
148
|
+
|
|
149
|
+
app.get('/api/users', (req, res) => {
|
|
150
|
+
const userId = req.params.id;
|
|
151
|
+
const query = `SELECT * FROM users WHERE id = ${userId}`;
|
|
152
|
+
db.query(query, (err, results) => {
|
|
153
|
+
res.json(results);
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
context:
|
|
157
|
+
language: javascript
|
|
158
|
+
framework: express
|
|
159
|
+
environment: production
|
|
160
|
+
|
|
161
|
+
expected_output:
|
|
162
|
+
must_contain:
|
|
163
|
+
- "SQL injection"
|
|
164
|
+
- "parameterized"
|
|
165
|
+
- "prepared statement"
|
|
166
|
+
must_not_contain:
|
|
167
|
+
- "no vulnerabilities"
|
|
168
|
+
- "code is secure"
|
|
169
|
+
must_match_regex:
|
|
170
|
+
- "CWE-89|CWE-564"
|
|
171
|
+
- "A0[13]:20[21][0-9]"
|
|
172
|
+
severity_classification: critical
|
|
173
|
+
finding_count:
|
|
174
|
+
min: 1
|
|
175
|
+
max: 3
|
|
176
|
+
recommendation_count:
|
|
177
|
+
min: 1
|
|
178
|
+
|
|
179
|
+
validation:
|
|
180
|
+
schema_check: true
|
|
181
|
+
keyword_match_threshold: 0.8
|
|
182
|
+
reasoning_quality_min: 0.7
|
|
183
|
+
grading_rubric:
|
|
184
|
+
completeness: 0.3
|
|
185
|
+
accuracy: 0.5
|
|
186
|
+
actionability: 0.2
|
|
187
|
+
|
|
188
|
+
timeout_ms: 30000
|
|
189
|
+
|
|
190
|
+
- id: tc002_sql_injection_parameterized
|
|
191
|
+
description: "Verify parameterized queries are correctly identified as secure"
|
|
192
|
+
category: injection
|
|
193
|
+
priority: high
|
|
194
|
+
|
|
195
|
+
input:
|
|
196
|
+
code: |
|
|
197
|
+
app.get('/api/users', (req, res) => {
|
|
198
|
+
const userId = parseInt(req.params.id, 10);
|
|
199
|
+
db.query('SELECT * FROM users WHERE id = ?', [userId], (err, results) => {
|
|
200
|
+
res.json(results);
|
|
201
|
+
});
|
|
202
|
+
});
|
|
203
|
+
context:
|
|
204
|
+
language: javascript
|
|
205
|
+
framework: express
|
|
206
|
+
|
|
207
|
+
expected_output:
|
|
208
|
+
must_contain:
|
|
209
|
+
- "parameterized"
|
|
210
|
+
- "secure"
|
|
211
|
+
must_not_contain:
|
|
212
|
+
- "SQL injection"
|
|
213
|
+
- "critical"
|
|
214
|
+
- "high"
|
|
215
|
+
severity_classification: info
|
|
216
|
+
finding_count:
|
|
217
|
+
max: 1
|
|
218
|
+
|
|
219
|
+
validation:
|
|
220
|
+
schema_check: true
|
|
221
|
+
keyword_match_threshold: 0.7
|
|
222
|
+
allow_partial: true
|
|
223
|
+
|
|
224
|
+
# ---------------------------------------------------------------------------
|
|
225
|
+
# CATEGORY: Cross-Site Scripting (OWASP A03:2021)
|
|
226
|
+
# ---------------------------------------------------------------------------
|
|
227
|
+
|
|
228
|
+
- id: tc003_xss_reflected
|
|
229
|
+
description: "Detect reflected XSS vulnerability in HTML output"
|
|
230
|
+
category: injection
|
|
231
|
+
priority: critical
|
|
232
|
+
|
|
233
|
+
input:
|
|
234
|
+
code: |
|
|
235
|
+
app.get('/profile', (req, res) => {
|
|
236
|
+
const name = req.query.name;
|
|
237
|
+
res.send(`
|
|
238
|
+
<html>
|
|
239
|
+
<body>
|
|
240
|
+
<h1>Welcome, ${name}!</h1>
|
|
241
|
+
<p>Your profile has been loaded.</p>
|
|
242
|
+
</body>
|
|
243
|
+
</html>
|
|
244
|
+
`);
|
|
245
|
+
});
|
|
246
|
+
context:
|
|
247
|
+
language: javascript
|
|
248
|
+
framework: express
|
|
249
|
+
|
|
250
|
+
expected_output:
|
|
251
|
+
must_contain:
|
|
252
|
+
- "XSS"
|
|
253
|
+
- "cross-site scripting"
|
|
254
|
+
- "sanitize"
|
|
255
|
+
- "encode"
|
|
256
|
+
- "escape"
|
|
257
|
+
must_match_regex:
|
|
258
|
+
- "CWE-79"
|
|
259
|
+
severity_classification: high
|
|
260
|
+
finding_count:
|
|
261
|
+
min: 1
|
|
262
|
+
|
|
263
|
+
validation:
|
|
264
|
+
schema_check: true
|
|
265
|
+
keyword_match_threshold: 0.8
|
|
266
|
+
reasoning_quality_min: 0.75
|
|
267
|
+
|
|
268
|
+
- id: tc004_xss_dom_based
|
|
269
|
+
description: "Detect DOM-based XSS in client-side JavaScript"
|
|
270
|
+
category: injection
|
|
271
|
+
priority: high
|
|
272
|
+
|
|
273
|
+
input:
|
|
274
|
+
code: |
|
|
275
|
+
// Client-side JavaScript
|
|
276
|
+
const params = new URLSearchParams(window.location.search);
|
|
277
|
+
const message = params.get('msg');
|
|
278
|
+
document.getElementById('output').innerHTML = message;
|
|
279
|
+
context:
|
|
280
|
+
language: javascript
|
|
281
|
+
framework: vanilla
|
|
282
|
+
environment: production
|
|
283
|
+
|
|
284
|
+
expected_output:
|
|
285
|
+
must_contain:
|
|
286
|
+
- "DOM"
|
|
287
|
+
- "XSS"
|
|
288
|
+
- "innerHTML"
|
|
289
|
+
- "textContent"
|
|
290
|
+
must_match_regex:
|
|
291
|
+
- "CWE-79"
|
|
292
|
+
severity_classification: high
|
|
293
|
+
|
|
294
|
+
validation:
|
|
295
|
+
schema_check: true
|
|
296
|
+
keyword_match_threshold: 0.7
|
|
297
|
+
|
|
298
|
+
# ---------------------------------------------------------------------------
|
|
299
|
+
# CATEGORY: Authentication/Authorization (OWASP A01/A07:2021)
|
|
300
|
+
# ---------------------------------------------------------------------------
|
|
301
|
+
|
|
302
|
+
- id: tc005_insecure_auth
|
|
303
|
+
description: "Detect hardcoded credentials and weak authentication"
|
|
304
|
+
category: authentication
|
|
305
|
+
priority: critical
|
|
306
|
+
|
|
307
|
+
input:
|
|
308
|
+
code: |
|
|
309
|
+
const ADMIN_PASSWORD = 'admin123';
|
|
310
|
+
const API_KEY = 'sk-1234567890abcdef';
|
|
311
|
+
|
|
312
|
+
app.post('/login', (req, res) => {
|
|
313
|
+
if (req.body.password === ADMIN_PASSWORD) {
|
|
314
|
+
req.session.isAdmin = true;
|
|
315
|
+
res.send('Login successful');
|
|
316
|
+
}
|
|
317
|
+
});
|
|
318
|
+
context:
|
|
319
|
+
language: javascript
|
|
320
|
+
framework: express
|
|
321
|
+
|
|
322
|
+
expected_output:
|
|
323
|
+
must_contain:
|
|
324
|
+
- "hardcoded"
|
|
325
|
+
- "credentials"
|
|
326
|
+
- "secret"
|
|
327
|
+
- "environment variable"
|
|
328
|
+
must_match_regex:
|
|
329
|
+
- "CWE-798|CWE-259"
|
|
330
|
+
severity_classification: critical
|
|
331
|
+
finding_count:
|
|
332
|
+
min: 2
|
|
333
|
+
|
|
334
|
+
validation:
|
|
335
|
+
schema_check: true
|
|
336
|
+
keyword_match_threshold: 0.8
|
|
337
|
+
reasoning_quality_min: 0.8
|
|
338
|
+
|
|
339
|
+
- id: tc006_broken_access_control
|
|
340
|
+
description: "Detect missing authorization checks (IDOR)"
|
|
341
|
+
category: authorization
|
|
342
|
+
priority: critical
|
|
343
|
+
|
|
344
|
+
input:
|
|
345
|
+
code: |
|
|
346
|
+
app.get('/api/users/:id/profile', (req, res) => {
|
|
347
|
+
// No authorization check - any user can access any profile
|
|
348
|
+
const userId = req.params.id;
|
|
349
|
+
db.query('SELECT * FROM profiles WHERE user_id = ?', [userId])
|
|
350
|
+
.then(profile => res.json(profile));
|
|
351
|
+
});
|
|
352
|
+
|
|
353
|
+
app.delete('/api/users/:id', (req, res) => {
|
|
354
|
+
// No check if requesting user owns this account
|
|
355
|
+
db.query('DELETE FROM users WHERE id = ?', [req.params.id]);
|
|
356
|
+
res.send('User deleted');
|
|
357
|
+
});
|
|
358
|
+
context:
|
|
359
|
+
language: javascript
|
|
360
|
+
framework: express
|
|
361
|
+
|
|
362
|
+
expected_output:
|
|
363
|
+
must_contain:
|
|
364
|
+
- "authorization"
|
|
365
|
+
- "access control"
|
|
366
|
+
- "IDOR"
|
|
367
|
+
- "verify"
|
|
368
|
+
- "ownership"
|
|
369
|
+
must_match_regex:
|
|
370
|
+
- "CWE-639|CWE-284"
|
|
371
|
+
- "A01:2021"
|
|
372
|
+
severity_classification: critical
|
|
373
|
+
|
|
374
|
+
validation:
|
|
375
|
+
schema_check: true
|
|
376
|
+
keyword_match_threshold: 0.7
|
|
377
|
+
|
|
378
|
+
# ---------------------------------------------------------------------------
|
|
379
|
+
# CATEGORY: Cryptographic Failures (OWASP A02:2021)
|
|
380
|
+
# ---------------------------------------------------------------------------
|
|
381
|
+
|
|
382
|
+
- id: tc007_weak_crypto
|
|
383
|
+
description: "Detect weak cryptographic algorithms (MD5, SHA1 for passwords)"
|
|
384
|
+
category: cryptography
|
|
385
|
+
priority: high
|
|
386
|
+
|
|
387
|
+
input:
|
|
388
|
+
code: |
|
|
389
|
+
const crypto = require('crypto');
|
|
390
|
+
|
|
391
|
+
function hashPassword(password) {
|
|
392
|
+
return crypto.createHash('md5').update(password).digest('hex');
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
function encryptData(data, key) {
|
|
396
|
+
const cipher = crypto.createCipher('des', key);
|
|
397
|
+
return cipher.update(data, 'utf8', 'hex') + cipher.final('hex');
|
|
398
|
+
}
|
|
399
|
+
context:
|
|
400
|
+
language: javascript
|
|
401
|
+
framework: nodejs
|
|
402
|
+
|
|
403
|
+
expected_output:
|
|
404
|
+
must_contain:
|
|
405
|
+
- "MD5"
|
|
406
|
+
- "weak"
|
|
407
|
+
- "bcrypt"
|
|
408
|
+
- "argon2"
|
|
409
|
+
- "DES"
|
|
410
|
+
- "deprecated"
|
|
411
|
+
must_match_regex:
|
|
412
|
+
- "CWE-327|CWE-328"
|
|
413
|
+
severity_classification: high
|
|
414
|
+
finding_count:
|
|
415
|
+
min: 2
|
|
416
|
+
|
|
417
|
+
validation:
|
|
418
|
+
schema_check: true
|
|
419
|
+
keyword_match_threshold: 0.8
|
|
420
|
+
|
|
421
|
+
# ---------------------------------------------------------------------------
|
|
422
|
+
# CATEGORY: Path Traversal (OWASP A01:2021)
|
|
423
|
+
# ---------------------------------------------------------------------------
|
|
424
|
+
|
|
425
|
+
- id: tc008_path_traversal
|
|
426
|
+
description: "Detect path traversal vulnerability in file access"
|
|
427
|
+
category: injection
|
|
428
|
+
priority: critical
|
|
429
|
+
|
|
430
|
+
input:
|
|
431
|
+
code: |
|
|
432
|
+
const path = require('path');
|
|
433
|
+
const fs = require('fs');
|
|
434
|
+
|
|
435
|
+
app.get('/download', (req, res) => {
|
|
436
|
+
const filename = req.query.file;
|
|
437
|
+
const filepath = './uploads/' + filename;
|
|
438
|
+
res.sendFile(filepath);
|
|
439
|
+
});
|
|
440
|
+
|
|
441
|
+
app.get('/read', (req, res) => {
|
|
442
|
+
const content = fs.readFileSync('./data/' + req.params.name);
|
|
443
|
+
res.send(content);
|
|
444
|
+
});
|
|
445
|
+
context:
|
|
446
|
+
language: javascript
|
|
447
|
+
framework: express
|
|
448
|
+
|
|
449
|
+
expected_output:
|
|
450
|
+
must_contain:
|
|
451
|
+
- "path traversal"
|
|
452
|
+
- "directory traversal"
|
|
453
|
+
- "../"
|
|
454
|
+
- "sanitize"
|
|
455
|
+
- "path.resolve"
|
|
456
|
+
- "path.normalize"
|
|
457
|
+
must_match_regex:
|
|
458
|
+
- "CWE-22|CWE-23"
|
|
459
|
+
severity_classification: critical
|
|
460
|
+
|
|
461
|
+
validation:
|
|
462
|
+
schema_check: true
|
|
463
|
+
keyword_match_threshold: 0.7
|
|
464
|
+
|
|
465
|
+
# ---------------------------------------------------------------------------
|
|
466
|
+
# CATEGORY: Negative Tests (Should NOT find critical issues)
|
|
467
|
+
# ---------------------------------------------------------------------------
|
|
468
|
+
|
|
469
|
+
- id: tc010_secure_code_no_false_positives
|
|
470
|
+
description: "Verify skill does not flag secure code as vulnerable"
|
|
471
|
+
category: negative
|
|
472
|
+
priority: high
|
|
473
|
+
|
|
474
|
+
input:
|
|
475
|
+
code: |
|
|
476
|
+
const express = require('express');
|
|
477
|
+
const helmet = require('helmet');
|
|
478
|
+
const rateLimit = require('express-rate-limit');
|
|
479
|
+
const bcrypt = require('bcrypt');
|
|
480
|
+
const validator = require('validator');
|
|
481
|
+
|
|
482
|
+
const app = express();
|
|
483
|
+
app.use(helmet());
|
|
484
|
+
app.use(rateLimit({ windowMs: 15 * 60 * 1000, max: 100 }));
|
|
485
|
+
|
|
486
|
+
app.post('/api/users', async (req, res) => {
|
|
487
|
+
const { email, password } = req.body;
|
|
488
|
+
|
|
489
|
+
// Input validation
|
|
490
|
+
if (!validator.isEmail(email)) {
|
|
491
|
+
return res.status(400).json({ error: 'Invalid email' });
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
// Secure password hashing
|
|
495
|
+
const hashedPassword = await bcrypt.hash(password, 12);
|
|
496
|
+
|
|
497
|
+
// Parameterized query
|
|
498
|
+
await db.query(
|
|
499
|
+
'INSERT INTO users (email, password) VALUES ($1, $2)',
|
|
500
|
+
[email, hashedPassword]
|
|
501
|
+
);
|
|
502
|
+
|
|
503
|
+
res.status(201).json({ message: 'User created' });
|
|
504
|
+
});
|
|
505
|
+
context:
|
|
506
|
+
language: javascript
|
|
507
|
+
framework: express
|
|
508
|
+
environment: production
|
|
509
|
+
|
|
510
|
+
expected_output:
|
|
511
|
+
must_contain:
|
|
512
|
+
- "secure"
|
|
513
|
+
- "best practice"
|
|
514
|
+
must_not_contain:
|
|
515
|
+
- "SQL injection"
|
|
516
|
+
- "XSS"
|
|
517
|
+
- "critical vulnerability"
|
|
518
|
+
- "high severity"
|
|
519
|
+
finding_count:
|
|
520
|
+
max: 2 # Allow informational findings only
|
|
521
|
+
|
|
522
|
+
validation:
|
|
523
|
+
schema_check: true
|
|
524
|
+
keyword_match_threshold: 0.6
|
|
525
|
+
allow_partial: true
|
|
526
|
+
|
|
527
|
+
- id: tc011_informational_only
|
|
528
|
+
description: "Code with only informational-level findings (no vulnerabilities)"
|
|
529
|
+
category: negative
|
|
530
|
+
priority: medium
|
|
531
|
+
|
|
532
|
+
input:
|
|
533
|
+
code: |
|
|
534
|
+
// Secure but could use some improvements
|
|
535
|
+
app.get('/api/health', (req, res) => {
|
|
536
|
+
res.json({ status: 'healthy', timestamp: Date.now() });
|
|
537
|
+
});
|
|
538
|
+
|
|
539
|
+
app.get('/api/version', (req, res) => {
|
|
540
|
+
res.json({ version: process.env.APP_VERSION || '1.0.0' });
|
|
541
|
+
});
|
|
542
|
+
context:
|
|
543
|
+
language: javascript
|
|
544
|
+
framework: express
|
|
545
|
+
|
|
546
|
+
expected_output:
|
|
547
|
+
must_not_contain:
|
|
548
|
+
- "critical"
|
|
549
|
+
- "high"
|
|
550
|
+
- "vulnerability"
|
|
551
|
+
- "injection"
|
|
552
|
+
severity_classification: info
|
|
553
|
+
|
|
554
|
+
validation:
|
|
555
|
+
schema_check: true
|
|
556
|
+
allow_partial: true
|
|
557
|
+
|
|
558
|
+
# ---------------------------------------------------------------------------
|
|
559
|
+
# CATEGORY: Edge Cases
|
|
560
|
+
# ---------------------------------------------------------------------------
|
|
561
|
+
|
|
562
|
+
- id: tc020_mixed_vulnerabilities
|
|
563
|
+
description: "Detect multiple vulnerability types in single codebase"
|
|
564
|
+
category: edge_cases
|
|
565
|
+
priority: high
|
|
566
|
+
|
|
567
|
+
input:
|
|
568
|
+
code: |
|
|
569
|
+
const express = require('express');
|
|
570
|
+
const mysql = require('mysql');
|
|
571
|
+
|
|
572
|
+
// SQL Injection
|
|
573
|
+
app.get('/users', (req, res) => {
|
|
574
|
+
db.query(`SELECT * FROM users WHERE name = '${req.query.name}'`);
|
|
575
|
+
});
|
|
576
|
+
|
|
577
|
+
// XSS
|
|
578
|
+
app.get('/greet', (req, res) => {
|
|
579
|
+
res.send(`<div>${req.query.message}</div>`);
|
|
580
|
+
});
|
|
581
|
+
|
|
582
|
+
// Hardcoded secret
|
|
583
|
+
const JWT_SECRET = 'super-secret-key-123';
|
|
584
|
+
|
|
585
|
+
// Weak random
|
|
586
|
+
function generateToken() {
|
|
587
|
+
return Math.random().toString(36);
|
|
588
|
+
}
|
|
589
|
+
context:
|
|
590
|
+
language: javascript
|
|
591
|
+
framework: express
|
|
592
|
+
|
|
593
|
+
expected_output:
|
|
594
|
+
must_contain:
|
|
595
|
+
- "SQL injection"
|
|
596
|
+
- "XSS"
|
|
597
|
+
- "hardcoded"
|
|
598
|
+
- "random"
|
|
599
|
+
finding_count:
|
|
600
|
+
min: 3
|
|
601
|
+
max: 6
|
|
602
|
+
|
|
603
|
+
validation:
|
|
604
|
+
schema_check: true
|
|
605
|
+
keyword_match_threshold: 0.7
|
|
606
|
+
|
|
607
|
+
timeout_ms: 45000
|
|
608
|
+
|
|
609
|
+
- id: tc021_typescript_analysis
|
|
610
|
+
description: "Analyze TypeScript code with type information"
|
|
611
|
+
category: edge_cases
|
|
612
|
+
priority: medium
|
|
613
|
+
|
|
614
|
+
input:
|
|
615
|
+
code: |
|
|
616
|
+
import express, { Request, Response } from 'express';
|
|
617
|
+
|
|
618
|
+
interface UserQuery {
|
|
619
|
+
id: string;
|
|
620
|
+
filter?: string;
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
app.get('/api/users', (req: Request<{}, {}, {}, UserQuery>, res: Response) => {
|
|
624
|
+
const { id, filter } = req.query;
|
|
625
|
+
// Still vulnerable despite TypeScript
|
|
626
|
+
const query = `SELECT * FROM users WHERE id = '${id}' AND status = '${filter}'`;
|
|
627
|
+
db.query(query);
|
|
628
|
+
});
|
|
629
|
+
context:
|
|
630
|
+
language: typescript
|
|
631
|
+
framework: express
|
|
632
|
+
|
|
633
|
+
expected_output:
|
|
634
|
+
must_contain:
|
|
635
|
+
- "SQL injection"
|
|
636
|
+
- "TypeScript"
|
|
637
|
+
- "runtime"
|
|
638
|
+
must_match_regex:
|
|
639
|
+
- "CWE-89"
|
|
640
|
+
|
|
641
|
+
validation:
|
|
642
|
+
schema_check: true
|
|
643
|
+
|
|
644
|
+
- id: tc022_python_flask_vulnerabilities
|
|
645
|
+
description: "Detect vulnerabilities in Python Flask application"
|
|
646
|
+
category: language_support
|
|
647
|
+
priority: medium
|
|
648
|
+
|
|
649
|
+
input:
|
|
650
|
+
code: |
|
|
651
|
+
from flask import Flask, request, render_template_string
|
|
652
|
+
import sqlite3
|
|
653
|
+
import pickle
|
|
654
|
+
|
|
655
|
+
app = Flask(__name__)
|
|
656
|
+
|
|
657
|
+
@app.route('/user')
|
|
658
|
+
def get_user():
|
|
659
|
+
user_id = request.args.get('id')
|
|
660
|
+
conn = sqlite3.connect('users.db')
|
|
661
|
+
cursor = conn.cursor()
|
|
662
|
+
cursor.execute(f"SELECT * FROM users WHERE id = {user_id}")
|
|
663
|
+
return str(cursor.fetchone())
|
|
664
|
+
|
|
665
|
+
@app.route('/render')
|
|
666
|
+
def render():
|
|
667
|
+
template = request.args.get('template')
|
|
668
|
+
return render_template_string(template)
|
|
669
|
+
|
|
670
|
+
@app.route('/load')
|
|
671
|
+
def load_data():
|
|
672
|
+
data = request.get_data()
|
|
673
|
+
return pickle.loads(data)
|
|
674
|
+
context:
|
|
675
|
+
language: python
|
|
676
|
+
framework: flask
|
|
677
|
+
|
|
678
|
+
expected_output:
|
|
679
|
+
must_contain:
|
|
680
|
+
- "SQL injection"
|
|
681
|
+
- "SSTI"
|
|
682
|
+
- "template injection"
|
|
683
|
+
- "pickle"
|
|
684
|
+
- "deserialization"
|
|
685
|
+
finding_count:
|
|
686
|
+
min: 3
|
|
687
|
+
|
|
688
|
+
validation:
|
|
689
|
+
schema_check: true
|
|
690
|
+
keyword_match_threshold: 0.7
|
|
691
|
+
|
|
692
|
+
# =============================================================================
|
|
693
|
+
# SUCCESS CRITERIA
|
|
694
|
+
# =============================================================================
|
|
695
|
+
# These criteria determine whether the eval suite passes or fails overall.
|
|
696
|
+
|
|
697
|
+
success_criteria:
|
|
698
|
+
# Overall pass rate (90% of tests must pass)
|
|
699
|
+
pass_rate: 0.9
|
|
700
|
+
|
|
701
|
+
# Critical tests must ALL pass (100%)
|
|
702
|
+
critical_pass_rate: 1.0
|
|
703
|
+
|
|
704
|
+
# Average reasoning quality score
|
|
705
|
+
avg_reasoning_quality: 0.75
|
|
706
|
+
|
|
707
|
+
# Maximum suite execution time (5 minutes)
|
|
708
|
+
max_execution_time_ms: 300000
|
|
709
|
+
|
|
710
|
+
# Maximum variance between model results (15%)
|
|
711
|
+
# If claude-sonnet gets 95% and claude-haiku gets 75%, variance is 20% (FAIL)
|
|
712
|
+
cross_model_variance: 0.15
|
|
713
|
+
|
|
714
|
+
# =============================================================================
|
|
715
|
+
# METADATA
|
|
716
|
+
# =============================================================================
|
|
717
|
+
|
|
718
|
+
metadata:
|
|
719
|
+
author: "qe-security-scanner"
|
|
720
|
+
created: "2026-02-02"
|
|
721
|
+
last_updated: "2026-02-02"
|
|
722
|
+
coverage_target: >
|
|
723
|
+
OWASP Top 10 2021: A01 (Broken Access Control), A02 (Cryptographic Failures),
|
|
724
|
+
A03 (Injection), A07 (Identification and Authentication Failures).
|
|
725
|
+
Covers JavaScript/TypeScript Express apps and Python Flask apps.
|