agentic-qe 3.7.9 → 3.7.10
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 +14 -0
- package/README.md +169 -900
- 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/cli/bundle.js +54 -31
- 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/init/phases/10-workers.js +2 -2
- package/dist/init/phases/10-workers.js.map +1 -1
- package/dist/mcp/bundle.js +42 -19
- 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/package.json +1 -1
- package/scripts/prepare-assets.sh +8 -0
|
@@ -1,1205 +1,1205 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
-
"$id": "https://agentic-qe.dev/schemas/chaos-engineering-resilience-output.json",
|
|
4
|
-
"title": "AQE Chaos Engineering Resilience Skill Output Schema",
|
|
5
|
-
"description": "Schema for chaos-engineering-resilience skill output validation. Extends the base skill-output template with chaos experiment types, fault injection structures, steady-state hypothesis, blast radius controls, and tool-specific outputs (Chaos Monkey, Litmus, Gremlin).",
|
|
6
|
-
"type": "object",
|
|
7
|
-
"required": ["skillName", "version", "timestamp", "status", "trustTier", "output"],
|
|
8
|
-
"properties": {
|
|
9
|
-
"skillName": {
|
|
10
|
-
"type": "string",
|
|
11
|
-
"const": "chaos-engineering-resilience",
|
|
12
|
-
"description": "Must be 'chaos-engineering-resilience'"
|
|
13
|
-
},
|
|
14
|
-
"version": {
|
|
15
|
-
"type": "string",
|
|
16
|
-
"pattern": "^\\d+\\.\\d+\\.\\d+(-[a-zA-Z0-9]+)?$",
|
|
17
|
-
"description": "Semantic version of the skill"
|
|
18
|
-
},
|
|
19
|
-
"timestamp": {
|
|
20
|
-
"type": "string",
|
|
21
|
-
"type": "string",
|
|
22
|
-
"description": "ISO 8601 timestamp of output generation"
|
|
23
|
-
},
|
|
24
|
-
"status": {
|
|
25
|
-
"type": "string",
|
|
26
|
-
"enum": ["success", "partial", "failed", "skipped"],
|
|
27
|
-
"description": "Overall execution status"
|
|
28
|
-
},
|
|
29
|
-
"trustTier": {
|
|
30
|
-
"type": "integer",
|
|
31
|
-
"const": 3,
|
|
32
|
-
"description": "Trust tier 3 indicates full validation with eval suite"
|
|
33
|
-
},
|
|
34
|
-
"output": {
|
|
35
|
-
"type": "object",
|
|
36
|
-
"required": ["summary", "experiments", "resilienceScore"],
|
|
37
|
-
"properties": {
|
|
38
|
-
"summary": {
|
|
39
|
-
"type": "string",
|
|
40
|
-
"minLength": 50,
|
|
41
|
-
"maxLength": 2000,
|
|
42
|
-
"description": "Human-readable summary of chaos experiment results"
|
|
43
|
-
},
|
|
44
|
-
"resilienceScore": {
|
|
45
|
-
"$ref": "#/$defs/resilienceScore",
|
|
46
|
-
"description": "Overall resilience score"
|
|
47
|
-
},
|
|
48
|
-
"experiments": {
|
|
49
|
-
"type": "array",
|
|
50
|
-
"items": {
|
|
51
|
-
"$ref": "#/$defs/chaosExperiment"
|
|
52
|
-
},
|
|
53
|
-
"minItems": 1,
|
|
54
|
-
"maxItems": 100,
|
|
55
|
-
"description": "List of chaos experiments executed"
|
|
56
|
-
},
|
|
57
|
-
"weaknesses": {
|
|
58
|
-
"type": "array",
|
|
59
|
-
"items": {
|
|
60
|
-
"$ref": "#/$defs/weakness"
|
|
61
|
-
},
|
|
62
|
-
"maxItems": 50,
|
|
63
|
-
"description": "Discovered system weaknesses"
|
|
64
|
-
},
|
|
65
|
-
"recommendations": {
|
|
66
|
-
"type": "array",
|
|
67
|
-
"items": {
|
|
68
|
-
"$ref": "#/$defs/recommendation"
|
|
69
|
-
},
|
|
70
|
-
"maxItems": 100,
|
|
71
|
-
"description": "Resilience improvement recommendations"
|
|
72
|
-
},
|
|
73
|
-
"metrics": {
|
|
74
|
-
"$ref": "#/$defs/chaosMetrics",
|
|
75
|
-
"description": "Chaos experiment metrics and statistics"
|
|
76
|
-
},
|
|
77
|
-
"categories": {
|
|
78
|
-
"$ref": "#/$defs/chaosCategoryBreakdown",
|
|
79
|
-
"description": "Breakdown by chaos category"
|
|
80
|
-
},
|
|
81
|
-
"artifacts": {
|
|
82
|
-
"type": "array",
|
|
83
|
-
"items": {
|
|
84
|
-
"$ref": "#/$defs/artifact"
|
|
85
|
-
},
|
|
86
|
-
"maxItems": 50,
|
|
87
|
-
"description": "Generated reports and artifacts"
|
|
88
|
-
},
|
|
89
|
-
"timeline": {
|
|
90
|
-
"type": "array",
|
|
91
|
-
"items": {
|
|
92
|
-
"$ref": "#/$defs/timelineEvent"
|
|
93
|
-
},
|
|
94
|
-
"description": "Experiment execution timeline"
|
|
95
|
-
},
|
|
96
|
-
"experimentConfiguration": {
|
|
97
|
-
"$ref": "#/$defs/experimentConfiguration",
|
|
98
|
-
"description": "Configuration used for the chaos experiments"
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
},
|
|
102
|
-
"metadata": {
|
|
103
|
-
"$ref": "#/$defs/metadata"
|
|
104
|
-
},
|
|
105
|
-
"validation": {
|
|
106
|
-
"$ref": "#/$defs/validationResult"
|
|
107
|
-
},
|
|
108
|
-
"learning": {
|
|
109
|
-
"$ref": "#/$defs/learningData"
|
|
110
|
-
}
|
|
111
|
-
},
|
|
112
|
-
"$defs": {
|
|
113
|
-
"resilienceScore": {
|
|
114
|
-
"type": "object",
|
|
115
|
-
"required": ["value", "max"],
|
|
116
|
-
"properties": {
|
|
117
|
-
"value": {
|
|
118
|
-
"type": "number",
|
|
119
|
-
"minimum": 0,
|
|
120
|
-
"maximum": 100,
|
|
121
|
-
"description": "Resilience score (0=critical weaknesses, 100=fully resilient)"
|
|
122
|
-
},
|
|
123
|
-
"max": {
|
|
124
|
-
"type": "number",
|
|
125
|
-
"const": 100,
|
|
126
|
-
"description": "Maximum score is always 100"
|
|
127
|
-
},
|
|
128
|
-
"grade": {
|
|
129
|
-
"type": "string",
|
|
130
|
-
"pattern": "^[A-F][+-]?$",
|
|
131
|
-
"description": "Letter grade: A (90-100), B (80-89), C (70-79), D (60-69), F (<60)"
|
|
132
|
-
},
|
|
133
|
-
"trend": {
|
|
134
|
-
"type": "string",
|
|
135
|
-
"enum": ["improving", "stable", "declining", "unknown"],
|
|
136
|
-
"description": "Trend compared to previous experiments"
|
|
137
|
-
},
|
|
138
|
-
"riskLevel": {
|
|
139
|
-
"type": "string",
|
|
140
|
-
"enum": ["critical", "high", "medium", "low", "minimal"],
|
|
141
|
-
"description": "Overall risk level assessment"
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
},
|
|
145
|
-
"chaosExperiment": {
|
|
146
|
-
"type": "object",
|
|
147
|
-
"required": ["id", "name", "type", "result"],
|
|
148
|
-
"properties": {
|
|
149
|
-
"id": {
|
|
150
|
-
"type": "string",
|
|
151
|
-
"pattern": "^CHAOS-\\d{3,6}$",
|
|
152
|
-
"description": "Unique experiment identifier (e.g., CHAOS-001)"
|
|
153
|
-
},
|
|
154
|
-
"name": {
|
|
155
|
-
"type": "string",
|
|
156
|
-
"minLength": 5,
|
|
157
|
-
"maxLength": 200,
|
|
158
|
-
"description": "Experiment name describing the fault injection"
|
|
159
|
-
},
|
|
160
|
-
"description": {
|
|
161
|
-
"type": "string",
|
|
162
|
-
"maxLength": 2000,
|
|
163
|
-
"description": "Detailed description of the experiment"
|
|
164
|
-
},
|
|
165
|
-
"type": {
|
|
166
|
-
"type": "string",
|
|
167
|
-
"enum": ["network", "resource", "state", "application", "infrastructure", "byzantine"],
|
|
168
|
-
"description": "Chaos experiment type: network=latency/partition, resource=CPU/memory/disk, state=data corruption, application=exception/deadlock, infrastructure=pod/node/zone failure, byzantine=consensus/split-brain"
|
|
169
|
-
},
|
|
170
|
-
"subType": {
|
|
171
|
-
"type": "string",
|
|
172
|
-
"enum": [
|
|
173
|
-
"latency",
|
|
174
|
-
"packet-loss",
|
|
175
|
-
"partition",
|
|
176
|
-
"dns-failure",
|
|
177
|
-
"bandwidth-limit",
|
|
178
|
-
"cpu-stress",
|
|
179
|
-
"memory-exhaust",
|
|
180
|
-
"disk-fill",
|
|
181
|
-
"iops-limit",
|
|
182
|
-
"process-kill",
|
|
183
|
-
"pod-terminate",
|
|
184
|
-
"node-drain",
|
|
185
|
-
"zone-failure",
|
|
186
|
-
"service-crash",
|
|
187
|
-
"exception-inject",
|
|
188
|
-
"deadlock",
|
|
189
|
-
"thread-contention",
|
|
190
|
-
"connection-pool-exhaust",
|
|
191
|
-
"malicious-node",
|
|
192
|
-
"message-corruption",
|
|
193
|
-
"split-brain",
|
|
194
|
-
"equivocation",
|
|
195
|
-
"spike-load",
|
|
196
|
-
"ramp-load"
|
|
197
|
-
],
|
|
198
|
-
"description": "Specific fault injection subtype"
|
|
199
|
-
},
|
|
200
|
-
"target": {
|
|
201
|
-
"$ref": "#/$defs/experimentTarget",
|
|
202
|
-
"description": "Target of the chaos experiment"
|
|
203
|
-
},
|
|
204
|
-
"faultInjection": {
|
|
205
|
-
"$ref": "#/$defs/faultInjection",
|
|
206
|
-
"description": "Fault injection parameters"
|
|
207
|
-
},
|
|
208
|
-
"steadyStateHypothesis": {
|
|
209
|
-
"$ref": "#/$defs/steadyStateHypothesis",
|
|
210
|
-
"description": "Steady-state hypothesis for the experiment"
|
|
211
|
-
},
|
|
212
|
-
"blastRadius": {
|
|
213
|
-
"$ref": "#/$defs/blastRadius",
|
|
214
|
-
"description": "Blast radius controls"
|
|
215
|
-
},
|
|
216
|
-
"rollback": {
|
|
217
|
-
"$ref": "#/$defs/rollbackProcedure",
|
|
218
|
-
"description": "Rollback procedure"
|
|
219
|
-
},
|
|
220
|
-
"result": {
|
|
221
|
-
"type": "string",
|
|
222
|
-
"enum": ["passed", "failed", "partial", "expected-fail"],
|
|
223
|
-
"description": "Experiment result: passed=system resilient, failed=weakness found, partial=degraded but acceptable, expected-fail=known limitation validated"
|
|
224
|
-
},
|
|
225
|
-
"observations": {
|
|
226
|
-
"type": "array",
|
|
227
|
-
"items": {
|
|
228
|
-
"type": "string",
|
|
229
|
-
"maxLength": 500
|
|
230
|
-
},
|
|
231
|
-
"maxItems": 20,
|
|
232
|
-
"description": "Observations during the experiment"
|
|
233
|
-
},
|
|
234
|
-
"recoveryTime": {
|
|
235
|
-
"type": "object",
|
|
236
|
-
"properties": {
|
|
237
|
-
"actual": {
|
|
238
|
-
"type": "integer",
|
|
239
|
-
"minimum": 0,
|
|
240
|
-
"description": "Actual recovery time in milliseconds"
|
|
241
|
-
},
|
|
242
|
-
"sla": {
|
|
243
|
-
"type": "integer",
|
|
244
|
-
"minimum": 0,
|
|
245
|
-
"description": "SLA recovery time in milliseconds"
|
|
246
|
-
},
|
|
247
|
-
"withinSla": {
|
|
248
|
-
"type": "boolean",
|
|
249
|
-
"description": "Whether recovery was within SLA"
|
|
250
|
-
}
|
|
251
|
-
},
|
|
252
|
-
"description": "Recovery time metrics"
|
|
253
|
-
},
|
|
254
|
-
"duration": {
|
|
255
|
-
"type": "integer",
|
|
256
|
-
"minimum": 0,
|
|
257
|
-
"description": "Experiment duration in milliseconds"
|
|
258
|
-
},
|
|
259
|
-
"tool": {
|
|
260
|
-
"type": "string",
|
|
261
|
-
"enum": ["chaos-monkey", "litmus", "gremlin", "chaos-mesh", "pumba", "toxiproxy", "tc", "stress-ng", "kubectl", "custom"],
|
|
262
|
-
"description": "Chaos tool used for the experiment"
|
|
263
|
-
},
|
|
264
|
-
"confidence": {
|
|
265
|
-
"type": "number",
|
|
266
|
-
"minimum": 0,
|
|
267
|
-
"maximum": 1,
|
|
268
|
-
"description": "Confidence in experiment results (0.0-1.0)"
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
},
|
|
272
|
-
"experimentTarget": {
|
|
273
|
-
"type": "object",
|
|
274
|
-
"required": ["type", "name"],
|
|
275
|
-
"properties": {
|
|
276
|
-
"type": {
|
|
277
|
-
"type": "string",
|
|
278
|
-
"enum": ["service", "pod", "node", "zone", "cluster", "network", "database", "cache", "queue", "external-api"],
|
|
279
|
-
"description": "Target type"
|
|
280
|
-
},
|
|
281
|
-
"name": {
|
|
282
|
-
"type": "string",
|
|
283
|
-
"maxLength": 200,
|
|
284
|
-
"description": "Target name or identifier"
|
|
285
|
-
},
|
|
286
|
-
"namespace": {
|
|
287
|
-
"type": "string",
|
|
288
|
-
"maxLength": 100,
|
|
289
|
-
"description": "Kubernetes namespace if applicable"
|
|
290
|
-
},
|
|
291
|
-
"labels": {
|
|
292
|
-
"type": "object",
|
|
293
|
-
"additionalProperties": { "type": "string" },
|
|
294
|
-
"description": "Target selection labels"
|
|
295
|
-
},
|
|
296
|
-
"percentage": {
|
|
297
|
-
"type": "number",
|
|
298
|
-
"minimum": 0,
|
|
299
|
-
"maximum": 100,
|
|
300
|
-
"description": "Percentage of targets affected"
|
|
301
|
-
},
|
|
302
|
-
"count": {
|
|
303
|
-
"type": "integer",
|
|
304
|
-
"minimum": 1,
|
|
305
|
-
"description": "Number of target instances"
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
},
|
|
309
|
-
"faultInjection": {
|
|
310
|
-
"type": "object",
|
|
311
|
-
"properties": {
|
|
312
|
-
"latency": {
|
|
313
|
-
"type": "object",
|
|
314
|
-
"properties": {
|
|
315
|
-
"delay": {
|
|
316
|
-
"type": "string",
|
|
317
|
-
"pattern": "^\\d+m?s$",
|
|
318
|
-
"description": "Latency delay (e.g., 500ms, 2s)"
|
|
319
|
-
},
|
|
320
|
-
"jitter": {
|
|
321
|
-
"type": "string",
|
|
322
|
-
"pattern": "^\\d+m?s$",
|
|
323
|
-
"description": "Latency jitter"
|
|
324
|
-
},
|
|
325
|
-
"correlation": {
|
|
326
|
-
"type": "number",
|
|
327
|
-
"minimum": 0,
|
|
328
|
-
"maximum": 100,
|
|
329
|
-
"description": "Correlation percentage"
|
|
330
|
-
}
|
|
331
|
-
},
|
|
332
|
-
"description": "Network latency injection"
|
|
333
|
-
},
|
|
334
|
-
"packetLoss": {
|
|
335
|
-
"type": "object",
|
|
336
|
-
"properties": {
|
|
337
|
-
"percentage": {
|
|
338
|
-
"type": "number",
|
|
339
|
-
"minimum": 0,
|
|
340
|
-
"maximum": 100,
|
|
341
|
-
"description": "Packet loss percentage"
|
|
342
|
-
},
|
|
343
|
-
"correlation": {
|
|
344
|
-
"type": "number",
|
|
345
|
-
"minimum": 0,
|
|
346
|
-
"maximum": 100,
|
|
347
|
-
"description": "Correlation percentage"
|
|
348
|
-
}
|
|
349
|
-
},
|
|
350
|
-
"description": "Packet loss injection"
|
|
351
|
-
},
|
|
352
|
-
"partition": {
|
|
353
|
-
"type": "object",
|
|
354
|
-
"properties": {
|
|
355
|
-
"direction": {
|
|
356
|
-
"type": "string",
|
|
357
|
-
"enum": ["both", "to", "from"],
|
|
358
|
-
"description": "Partition direction"
|
|
359
|
-
},
|
|
360
|
-
"targets": {
|
|
361
|
-
"type": "array",
|
|
362
|
-
"items": { "type": "string" },
|
|
363
|
-
"description": "Targets to partition from"
|
|
364
|
-
}
|
|
365
|
-
},
|
|
366
|
-
"description": "Network partition"
|
|
367
|
-
},
|
|
368
|
-
"resource": {
|
|
369
|
-
"type": "object",
|
|
370
|
-
"properties": {
|
|
371
|
-
"cpu": {
|
|
372
|
-
"type": "object",
|
|
373
|
-
"properties": {
|
|
374
|
-
"load": {
|
|
375
|
-
"type": "number",
|
|
376
|
-
"minimum": 0,
|
|
377
|
-
"maximum": 100,
|
|
378
|
-
"description": "CPU load percentage"
|
|
379
|
-
},
|
|
380
|
-
"workers": {
|
|
381
|
-
"type": "integer",
|
|
382
|
-
"minimum": 1,
|
|
383
|
-
"description": "Number of stress workers"
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
},
|
|
387
|
-
"memory": {
|
|
388
|
-
"type": "object",
|
|
389
|
-
"properties": {
|
|
390
|
-
"size": {
|
|
391
|
-
"type": "string",
|
|
392
|
-
"pattern": "^\\d+[KMGT]?i?[Bb]?$",
|
|
393
|
-
"description": "Memory to consume (e.g., 500Mi, 2Gi)"
|
|
394
|
-
},
|
|
395
|
-
"percentage": {
|
|
396
|
-
"type": "number",
|
|
397
|
-
"minimum": 0,
|
|
398
|
-
"maximum": 100,
|
|
399
|
-
"description": "Percentage of available memory"
|
|
400
|
-
}
|
|
401
|
-
}
|
|
402
|
-
},
|
|
403
|
-
"disk": {
|
|
404
|
-
"type": "object",
|
|
405
|
-
"properties": {
|
|
406
|
-
"size": {
|
|
407
|
-
"type": "string",
|
|
408
|
-
"pattern": "^\\d+[KMGT]?i?[Bb]?$",
|
|
409
|
-
"description": "Disk space to fill"
|
|
410
|
-
},
|
|
411
|
-
"path": {
|
|
412
|
-
"type": "string",
|
|
413
|
-
"description": "Target path for disk fill"
|
|
414
|
-
},
|
|
415
|
-
"iopsLimit": {
|
|
416
|
-
"type": "integer",
|
|
417
|
-
"minimum": 0,
|
|
418
|
-
"description": "IOPS limit to impose"
|
|
419
|
-
}
|
|
420
|
-
}
|
|
421
|
-
}
|
|
422
|
-
},
|
|
423
|
-
"description": "Resource stress injection"
|
|
424
|
-
},
|
|
425
|
-
"process": {
|
|
426
|
-
"type": "object",
|
|
427
|
-
"properties": {
|
|
428
|
-
"action": {
|
|
429
|
-
"type": "string",
|
|
430
|
-
"enum": ["kill", "pause", "resume"],
|
|
431
|
-
"description": "Process action"
|
|
432
|
-
},
|
|
433
|
-
"signal": {
|
|
434
|
-
"type": "string",
|
|
435
|
-
"enum": ["SIGKILL", "SIGTERM", "SIGSTOP", "SIGCONT"],
|
|
436
|
-
"description": "Signal to send"
|
|
437
|
-
},
|
|
438
|
-
"pattern": {
|
|
439
|
-
"type": "string",
|
|
440
|
-
"description": "Process name pattern"
|
|
441
|
-
}
|
|
442
|
-
},
|
|
443
|
-
"description": "Process manipulation"
|
|
444
|
-
},
|
|
445
|
-
"exception": {
|
|
446
|
-
"type": "object",
|
|
447
|
-
"properties": {
|
|
448
|
-
"type": {
|
|
449
|
-
"type": "string",
|
|
450
|
-
"description": "Exception type to inject"
|
|
451
|
-
},
|
|
452
|
-
"message": {
|
|
453
|
-
"type": "string",
|
|
454
|
-
"description": "Exception message"
|
|
455
|
-
},
|
|
456
|
-
"probability": {
|
|
457
|
-
"type": "number",
|
|
458
|
-
"minimum": 0,
|
|
459
|
-
"maximum": 1,
|
|
460
|
-
"description": "Probability of injection (0.0-1.0)"
|
|
461
|
-
}
|
|
462
|
-
},
|
|
463
|
-
"description": "Application exception injection"
|
|
464
|
-
},
|
|
465
|
-
"byzantine": {
|
|
466
|
-
"type": "object",
|
|
467
|
-
"properties": {
|
|
468
|
-
"attackType": {
|
|
469
|
-
"type": "string",
|
|
470
|
-
"enum": ["malicious-data", "message-corruption", "equivocation", "sybil", "leader-manipulation"],
|
|
471
|
-
"description": "Byzantine attack type"
|
|
472
|
-
},
|
|
473
|
-
"affectedNodes": {
|
|
474
|
-
"type": "integer",
|
|
475
|
-
"minimum": 1,
|
|
476
|
-
"description": "Number of Byzantine nodes"
|
|
477
|
-
},
|
|
478
|
-
"totalNodes": {
|
|
479
|
-
"type": "integer",
|
|
480
|
-
"minimum": 1,
|
|
481
|
-
"description": "Total nodes in cluster"
|
|
482
|
-
},
|
|
483
|
-
"toleranceThreshold": {
|
|
484
|
-
"type": "string",
|
|
485
|
-
"pattern": "^f\\s*<\\s*n/[23]$",
|
|
486
|
-
"description": "Byzantine fault tolerance formula (e.g., f < n/3)"
|
|
487
|
-
}
|
|
488
|
-
},
|
|
489
|
-
"description": "Byzantine fault injection"
|
|
490
|
-
},
|
|
491
|
-
"load": {
|
|
492
|
-
"type": "object",
|
|
493
|
-
"properties": {
|
|
494
|
-
"pattern": {
|
|
495
|
-
"type": "string",
|
|
496
|
-
"enum": ["spike", "ramp", "constant", "wave"],
|
|
497
|
-
"description": "Load pattern type"
|
|
498
|
-
},
|
|
499
|
-
"baseline": {
|
|
500
|
-
"type": "number",
|
|
501
|
-
"minimum": 0,
|
|
502
|
-
"description": "Baseline requests per second"
|
|
503
|
-
},
|
|
504
|
-
"peak": {
|
|
505
|
-
"type": "number",
|
|
506
|
-
"minimum": 0,
|
|
507
|
-
"description": "Peak requests per second"
|
|
508
|
-
},
|
|
509
|
-
"rampDuration": {
|
|
510
|
-
"type": "integer",
|
|
511
|
-
"minimum": 0,
|
|
512
|
-
"description": "Ramp duration in milliseconds"
|
|
513
|
-
}
|
|
514
|
-
},
|
|
515
|
-
"description": "Load pattern injection"
|
|
516
|
-
}
|
|
517
|
-
},
|
|
518
|
-
"description": "Fault injection parameters"
|
|
519
|
-
},
|
|
520
|
-
"steadyStateHypothesis": {
|
|
521
|
-
"type": "object",
|
|
522
|
-
"required": ["metrics"],
|
|
523
|
-
"properties": {
|
|
524
|
-
"description": {
|
|
525
|
-
"type": "string",
|
|
526
|
-
"maxLength": 500,
|
|
527
|
-
"description": "Hypothesis description"
|
|
528
|
-
},
|
|
529
|
-
"metrics": {
|
|
530
|
-
"type": "array",
|
|
531
|
-
"items": {
|
|
532
|
-
"$ref": "#/$defs/steadyStateMetric"
|
|
533
|
-
},
|
|
534
|
-
"minItems": 1,
|
|
535
|
-
"maxItems": 20,
|
|
536
|
-
"description": "Metrics defining steady state"
|
|
537
|
-
},
|
|
538
|
-
"before": {
|
|
539
|
-
"type": "object",
|
|
540
|
-
"properties": {
|
|
541
|
-
"validated": {
|
|
542
|
-
"type": "boolean",
|
|
543
|
-
"description": "Was steady state validated before experiment"
|
|
544
|
-
},
|
|
545
|
-
"timestamp": {
|
|
546
|
-
"type": "string",
|
|
547
|
-
"type": "string",
|
|
548
|
-
"description": "When pre-validation occurred"
|
|
549
|
-
}
|
|
550
|
-
}
|
|
551
|
-
},
|
|
552
|
-
"after": {
|
|
553
|
-
"type": "object",
|
|
554
|
-
"properties": {
|
|
555
|
-
"validated": {
|
|
556
|
-
"type": "boolean",
|
|
557
|
-
"description": "Was steady state validated after experiment"
|
|
558
|
-
},
|
|
559
|
-
"timestamp": {
|
|
560
|
-
"type": "string",
|
|
561
|
-
"type": "string",
|
|
562
|
-
"description": "When post-validation occurred"
|
|
563
|
-
},
|
|
564
|
-
"recoveryDuration": {
|
|
565
|
-
"type": "integer",
|
|
566
|
-
"minimum": 0,
|
|
567
|
-
"description": "Time to return to steady state in ms"
|
|
568
|
-
}
|
|
569
|
-
}
|
|
570
|
-
}
|
|
571
|
-
},
|
|
572
|
-
"description": "Steady-state hypothesis definition"
|
|
573
|
-
},
|
|
574
|
-
"steadyStateMetric": {
|
|
575
|
-
"type": "object",
|
|
576
|
-
"required": ["name", "operator", "threshold"],
|
|
577
|
-
"properties": {
|
|
578
|
-
"name": {
|
|
579
|
-
"type": "string",
|
|
580
|
-
"enum": ["error-rate", "latency-p50", "latency-p95", "latency-p99", "throughput", "availability", "success-rate", "cpu-usage", "memory-usage", "queue-depth", "connection-count"],
|
|
581
|
-
"description": "Metric name"
|
|
582
|
-
},
|
|
583
|
-
"operator": {
|
|
584
|
-
"type": "string",
|
|
585
|
-
"enum": ["<", "<=", ">", ">=", "==", "!="],
|
|
586
|
-
"description": "Comparison operator"
|
|
587
|
-
},
|
|
588
|
-
"threshold": {
|
|
589
|
-
"description": "Threshold value"
|
|
590
|
-
},
|
|
591
|
-
"unit": {
|
|
592
|
-
"type": "string",
|
|
593
|
-
"enum": ["percent", "ms", "s", "rps", "count"],
|
|
594
|
-
"description": "Metric unit"
|
|
595
|
-
},
|
|
596
|
-
"actual": {
|
|
597
|
-
"description": "Actual measured value"
|
|
598
|
-
},
|
|
599
|
-
"passed": {
|
|
600
|
-
"type": "boolean",
|
|
601
|
-
"description": "Whether metric passed the threshold"
|
|
602
|
-
}
|
|
603
|
-
},
|
|
604
|
-
"description": "Individual steady-state metric"
|
|
605
|
-
},
|
|
606
|
-
"blastRadius": {
|
|
607
|
-
"type": "object",
|
|
608
|
-
"properties": {
|
|
609
|
-
"scope": {
|
|
610
|
-
"type": "string",
|
|
611
|
-
"enum": ["single-instance", "single-service", "multi-service", "zone", "region", "cluster"],
|
|
612
|
-
"description": "Blast radius scope"
|
|
613
|
-
},
|
|
614
|
-
"maxImpact": {
|
|
615
|
-
"type": "object",
|
|
616
|
-
"properties": {
|
|
617
|
-
"pods": {
|
|
618
|
-
"type": "integer",
|
|
619
|
-
"minimum": 0,
|
|
620
|
-
"description": "Maximum pods affected"
|
|
621
|
-
},
|
|
622
|
-
"services": {
|
|
623
|
-
"type": "integer",
|
|
624
|
-
"minimum": 0,
|
|
625
|
-
"description": "Maximum services affected"
|
|
626
|
-
},
|
|
627
|
-
"percentage": {
|
|
628
|
-
"type": "number",
|
|
629
|
-
"minimum": 0,
|
|
630
|
-
"maximum": 100,
|
|
631
|
-
"description": "Maximum percentage affected"
|
|
632
|
-
}
|
|
633
|
-
}
|
|
634
|
-
},
|
|
635
|
-
"safeguards": {
|
|
636
|
-
"type": "array",
|
|
637
|
-
"items": {
|
|
638
|
-
"type": "string",
|
|
639
|
-
"maxLength": 200
|
|
640
|
-
},
|
|
641
|
-
"description": "Safety controls in place"
|
|
642
|
-
},
|
|
643
|
-
"emergencyStop": {
|
|
644
|
-
"type": "boolean",
|
|
645
|
-
"description": "Whether emergency stop is enabled"
|
|
646
|
-
}
|
|
647
|
-
},
|
|
648
|
-
"description": "Blast radius controls"
|
|
649
|
-
},
|
|
650
|
-
"rollbackProcedure": {
|
|
651
|
-
"type": "object",
|
|
652
|
-
"properties": {
|
|
653
|
-
"automatic": {
|
|
654
|
-
"type": "boolean",
|
|
655
|
-
"description": "Whether rollback is automatic"
|
|
656
|
-
},
|
|
657
|
-
"trigger": {
|
|
658
|
-
"type": "string",
|
|
659
|
-
"maxLength": 500,
|
|
660
|
-
"description": "Condition that triggers rollback"
|
|
661
|
-
},
|
|
662
|
-
"steps": {
|
|
663
|
-
"type": "array",
|
|
664
|
-
"items": {
|
|
665
|
-
"type": "string",
|
|
666
|
-
"maxLength": 500
|
|
667
|
-
},
|
|
668
|
-
"maxItems": 20,
|
|
669
|
-
"description": "Manual rollback steps"
|
|
670
|
-
},
|
|
671
|
-
"executed": {
|
|
672
|
-
"type": "boolean",
|
|
673
|
-
"description": "Whether rollback was executed"
|
|
674
|
-
},
|
|
675
|
-
"reason": {
|
|
676
|
-
"type": "string",
|
|
677
|
-
"maxLength": 500,
|
|
678
|
-
"description": "Reason for rollback if executed"
|
|
679
|
-
}
|
|
680
|
-
},
|
|
681
|
-
"description": "Rollback procedure"
|
|
682
|
-
},
|
|
683
|
-
"weakness": {
|
|
684
|
-
"type": "object",
|
|
685
|
-
"required": ["id", "title", "severity", "category"],
|
|
686
|
-
"properties": {
|
|
687
|
-
"id": {
|
|
688
|
-
"type": "string",
|
|
689
|
-
"pattern": "^WEAK-\\d{3,6}$",
|
|
690
|
-
"description": "Unique weakness identifier"
|
|
691
|
-
},
|
|
692
|
-
"title": {
|
|
693
|
-
"type": "string",
|
|
694
|
-
"minLength": 10,
|
|
695
|
-
"maxLength": 200,
|
|
696
|
-
"description": "Weakness title"
|
|
697
|
-
},
|
|
698
|
-
"description": {
|
|
699
|
-
"type": "string",
|
|
700
|
-
"maxLength": 2000,
|
|
701
|
-
"description": "Detailed description"
|
|
702
|
-
},
|
|
703
|
-
"severity": {
|
|
704
|
-
"type": "string",
|
|
705
|
-
"enum": ["critical", "high", "medium", "low"],
|
|
706
|
-
"description": "Weakness severity"
|
|
707
|
-
},
|
|
708
|
-
"category": {
|
|
709
|
-
"type": "string",
|
|
710
|
-
"enum": ["availability", "latency", "data-integrity", "security", "scalability", "recovery", "observability"],
|
|
711
|
-
"description": "Weakness category"
|
|
712
|
-
},
|
|
713
|
-
"discoveredBy": {
|
|
714
|
-
"type": "array",
|
|
715
|
-
"items": {
|
|
716
|
-
"type": "string",
|
|
717
|
-
"pattern": "^CHAOS-\\d{3,6}$"
|
|
718
|
-
},
|
|
719
|
-
"description": "Experiments that discovered this weakness"
|
|
720
|
-
},
|
|
721
|
-
"impact": {
|
|
722
|
-
"type": "string",
|
|
723
|
-
"maxLength": 1000,
|
|
724
|
-
"description": "Business impact of this weakness"
|
|
725
|
-
},
|
|
726
|
-
"remediation": {
|
|
727
|
-
"type": "string",
|
|
728
|
-
"maxLength": 2000,
|
|
729
|
-
"description": "Suggested remediation"
|
|
730
|
-
},
|
|
731
|
-
"runbook": {
|
|
732
|
-
"type": "string",
|
|
733
|
-
"maxLength": 5000,
|
|
734
|
-
"description": "Generated runbook for handling this weakness"
|
|
735
|
-
}
|
|
736
|
-
},
|
|
737
|
-
"description": "Discovered weakness"
|
|
738
|
-
},
|
|
739
|
-
"recommendation": {
|
|
740
|
-
"type": "object",
|
|
741
|
-
"required": ["id", "title", "priority"],
|
|
742
|
-
"properties": {
|
|
743
|
-
"id": {
|
|
744
|
-
"type": "string",
|
|
745
|
-
"pattern": "^REC-\\d{3,6}$",
|
|
746
|
-
"description": "Unique recommendation identifier"
|
|
747
|
-
},
|
|
748
|
-
"title": {
|
|
749
|
-
"type": "string",
|
|
750
|
-
"minLength": 10,
|
|
751
|
-
"maxLength": 200,
|
|
752
|
-
"description": "Recommendation title"
|
|
753
|
-
},
|
|
754
|
-
"description": {
|
|
755
|
-
"type": "string",
|
|
756
|
-
"maxLength": 2000,
|
|
757
|
-
"description": "Detailed recommendation"
|
|
758
|
-
},
|
|
759
|
-
"priority": {
|
|
760
|
-
"type": "string",
|
|
761
|
-
"enum": ["critical", "high", "medium", "low"],
|
|
762
|
-
"description": "Implementation priority"
|
|
763
|
-
},
|
|
764
|
-
"effort": {
|
|
765
|
-
"type": "string",
|
|
766
|
-
"enum": ["trivial", "low", "medium", "high", "major"],
|
|
767
|
-
"description": "Estimated effort"
|
|
768
|
-
},
|
|
769
|
-
"impact": {
|
|
770
|
-
"type": "integer",
|
|
771
|
-
"minimum": 1,
|
|
772
|
-
"maximum": 10,
|
|
773
|
-
"description": "Expected resilience impact (1-10)"
|
|
774
|
-
},
|
|
775
|
-
"category": {
|
|
776
|
-
"type": "string",
|
|
777
|
-
"enum": ["circuit-breaker", "retry-policy", "timeout-config", "resource-limit", "auto-scaling", "redundancy", "monitoring", "recovery-automation"],
|
|
778
|
-
"description": "Recommendation category"
|
|
779
|
-
},
|
|
780
|
-
"relatedWeaknesses": {
|
|
781
|
-
"type": "array",
|
|
782
|
-
"items": {
|
|
783
|
-
"type": "string",
|
|
784
|
-
"pattern": "^WEAK-\\d{3,6}$"
|
|
785
|
-
},
|
|
786
|
-
"description": "IDs of related weaknesses"
|
|
787
|
-
},
|
|
788
|
-
"codeExample": {
|
|
789
|
-
"type": "string",
|
|
790
|
-
"maxLength": 5000,
|
|
791
|
-
"description": "Code example for implementation"
|
|
792
|
-
},
|
|
793
|
-
"resources": {
|
|
794
|
-
"type": "array",
|
|
795
|
-
"items": {
|
|
796
|
-
"type": "object",
|
|
797
|
-
"required": ["title", "url"],
|
|
798
|
-
"properties": {
|
|
799
|
-
"title": { "type": "string" },
|
|
800
|
-
"url": { "type": "string" }
|
|
801
|
-
}
|
|
802
|
-
},
|
|
803
|
-
"maxItems": 10,
|
|
804
|
-
"description": "External resources"
|
|
805
|
-
}
|
|
806
|
-
},
|
|
807
|
-
"description": "Resilience recommendation"
|
|
808
|
-
},
|
|
809
|
-
"chaosCategoryBreakdown": {
|
|
810
|
-
"type": "object",
|
|
811
|
-
"description": "Chaos experiment category breakdown",
|
|
812
|
-
"properties": {
|
|
813
|
-
"network": {
|
|
814
|
-
"$ref": "#/$defs/chaosCategoryScore",
|
|
815
|
-
"description": "Network chaos (latency, partition, packet loss)"
|
|
816
|
-
},
|
|
817
|
-
"resource": {
|
|
818
|
-
"$ref": "#/$defs/chaosCategoryScore",
|
|
819
|
-
"description": "Resource chaos (CPU, memory, disk)"
|
|
820
|
-
},
|
|
821
|
-
"state": {
|
|
822
|
-
"$ref": "#/$defs/chaosCategoryScore",
|
|
823
|
-
"description": "State chaos (data corruption, inconsistency)"
|
|
824
|
-
},
|
|
825
|
-
"application": {
|
|
826
|
-
"$ref": "#/$defs/chaosCategoryScore",
|
|
827
|
-
"description": "Application chaos (exceptions, deadlocks)"
|
|
828
|
-
},
|
|
829
|
-
"infrastructure": {
|
|
830
|
-
"$ref": "#/$defs/chaosCategoryScore",
|
|
831
|
-
"description": "Infrastructure chaos (pod/node/zone failure)"
|
|
832
|
-
},
|
|
833
|
-
"byzantine": {
|
|
834
|
-
"$ref": "#/$defs/chaosCategoryScore",
|
|
835
|
-
"description": "Byzantine faults (consensus, split-brain)"
|
|
836
|
-
}
|
|
837
|
-
},
|
|
838
|
-
"additionalProperties": false
|
|
839
|
-
},
|
|
840
|
-
"chaosCategoryScore": {
|
|
841
|
-
"type": "object",
|
|
842
|
-
"required": ["tested", "score"],
|
|
843
|
-
"properties": {
|
|
844
|
-
"tested": {
|
|
845
|
-
"type": "boolean",
|
|
846
|
-
"description": "Whether this category was tested"
|
|
847
|
-
},
|
|
848
|
-
"score": {
|
|
849
|
-
"type": "number",
|
|
850
|
-
"minimum": 0,
|
|
851
|
-
"maximum": 100,
|
|
852
|
-
"description": "Category resilience score (100 = fully resilient)"
|
|
853
|
-
},
|
|
854
|
-
"grade": {
|
|
855
|
-
"type": "string",
|
|
856
|
-
"pattern": "^[A-F][+-]?$",
|
|
857
|
-
"description": "Letter grade"
|
|
858
|
-
},
|
|
859
|
-
"experimentCount": {
|
|
860
|
-
"type": "integer",
|
|
861
|
-
"minimum": 0,
|
|
862
|
-
"description": "Number of experiments in this category"
|
|
863
|
-
},
|
|
864
|
-
"passedCount": {
|
|
865
|
-
"type": "integer",
|
|
866
|
-
"minimum": 0,
|
|
867
|
-
"description": "Number of passed experiments"
|
|
868
|
-
},
|
|
869
|
-
"failedCount": {
|
|
870
|
-
"type": "integer",
|
|
871
|
-
"minimum": 0,
|
|
872
|
-
"description": "Number of failed experiments"
|
|
873
|
-
},
|
|
874
|
-
"weaknessCount": {
|
|
875
|
-
"type": "integer",
|
|
876
|
-
"minimum": 0,
|
|
877
|
-
"description": "Weaknesses found in this category"
|
|
878
|
-
},
|
|
879
|
-
"status": {
|
|
880
|
-
"type": "string",
|
|
881
|
-
"enum": ["pass", "fail", "warn", "skip"],
|
|
882
|
-
"description": "Category status"
|
|
883
|
-
}
|
|
884
|
-
}
|
|
885
|
-
},
|
|
886
|
-
"chaosMetrics": {
|
|
887
|
-
"type": "object",
|
|
888
|
-
"properties": {
|
|
889
|
-
"totalExperiments": {
|
|
890
|
-
"type": "integer",
|
|
891
|
-
"minimum": 0,
|
|
892
|
-
"description": "Total chaos experiments executed"
|
|
893
|
-
},
|
|
894
|
-
"passedExperiments": {
|
|
895
|
-
"type": "integer",
|
|
896
|
-
"minimum": 0,
|
|
897
|
-
"description": "Experiments that passed"
|
|
898
|
-
},
|
|
899
|
-
"failedExperiments": {
|
|
900
|
-
"type": "integer",
|
|
901
|
-
"minimum": 0,
|
|
902
|
-
"description": "Experiments that failed (weaknesses found)"
|
|
903
|
-
},
|
|
904
|
-
"skippedExperiments": {
|
|
905
|
-
"type": "integer",
|
|
906
|
-
"minimum": 0,
|
|
907
|
-
"description": "Experiments skipped"
|
|
908
|
-
},
|
|
909
|
-
"weaknessesFound": {
|
|
910
|
-
"type": "integer",
|
|
911
|
-
"minimum": 0,
|
|
912
|
-
"description": "Total weaknesses discovered"
|
|
913
|
-
},
|
|
914
|
-
"criticalWeaknesses": {
|
|
915
|
-
"type": "integer",
|
|
916
|
-
"minimum": 0,
|
|
917
|
-
"description": "Critical severity weaknesses"
|
|
918
|
-
},
|
|
919
|
-
"servicesAffected": {
|
|
920
|
-
"type": "integer",
|
|
921
|
-
"minimum": 0,
|
|
922
|
-
"description": "Number of services affected"
|
|
923
|
-
},
|
|
924
|
-
"averageRecoveryTime": {
|
|
925
|
-
"type": "integer",
|
|
926
|
-
"minimum": 0,
|
|
927
|
-
"description": "Average recovery time in ms"
|
|
928
|
-
},
|
|
929
|
-
"maxRecoveryTime": {
|
|
930
|
-
"type": "integer",
|
|
931
|
-
"minimum": 0,
|
|
932
|
-
"description": "Maximum recovery time in ms"
|
|
933
|
-
},
|
|
934
|
-
"rollbacksTriggered": {
|
|
935
|
-
"type": "integer",
|
|
936
|
-
"minimum": 0,
|
|
937
|
-
"description": "Number of rollbacks triggered"
|
|
938
|
-
},
|
|
939
|
-
"safetyViolations": {
|
|
940
|
-
"type": "integer",
|
|
941
|
-
"minimum": 0,
|
|
942
|
-
"description": "Safety limit violations"
|
|
943
|
-
},
|
|
944
|
-
"totalDurationMs": {
|
|
945
|
-
"type": "integer",
|
|
946
|
-
"minimum": 0,
|
|
947
|
-
"description": "Total experiment duration"
|
|
948
|
-
},
|
|
949
|
-
"coverage": {
|
|
950
|
-
"type": "object",
|
|
951
|
-
"properties": {
|
|
952
|
-
"network": { "type": "boolean" },
|
|
953
|
-
"resource": { "type": "boolean" },
|
|
954
|
-
"state": { "type": "boolean" },
|
|
955
|
-
"application": { "type": "boolean" },
|
|
956
|
-
"infrastructure": { "type": "boolean" },
|
|
957
|
-
"byzantine": { "type": "boolean" }
|
|
958
|
-
},
|
|
959
|
-
"description": "Chaos category coverage"
|
|
960
|
-
}
|
|
961
|
-
}
|
|
962
|
-
},
|
|
963
|
-
"experimentConfiguration": {
|
|
964
|
-
"type": "object",
|
|
965
|
-
"properties": {
|
|
966
|
-
"target": {
|
|
967
|
-
"type": "string",
|
|
968
|
-
"description": "Primary target system or service"
|
|
969
|
-
},
|
|
970
|
-
"environment": {
|
|
971
|
-
"type": "string",
|
|
972
|
-
"enum": ["development", "staging", "production", "ci"],
|
|
973
|
-
"description": "Target environment"
|
|
974
|
-
},
|
|
975
|
-
"chaosTypes": {
|
|
976
|
-
"type": "array",
|
|
977
|
-
"items": {
|
|
978
|
-
"type": "string",
|
|
979
|
-
"enum": ["network", "resource", "state", "application", "infrastructure", "byzantine"]
|
|
980
|
-
},
|
|
981
|
-
"description": "Types of chaos tested"
|
|
982
|
-
},
|
|
983
|
-
"tools": {
|
|
984
|
-
"type": "array",
|
|
985
|
-
"items": {
|
|
986
|
-
"type": "string",
|
|
987
|
-
"enum": ["chaos-monkey", "litmus", "gremlin", "chaos-mesh", "pumba", "toxiproxy", "tc", "stress-ng", "kubectl", "custom"]
|
|
988
|
-
},
|
|
989
|
-
"description": "Chaos tools used"
|
|
990
|
-
},
|
|
991
|
-
"blastRadiusLimit": {
|
|
992
|
-
"type": "string",
|
|
993
|
-
"enum": ["single-instance", "single-service", "multi-service", "zone", "region", "cluster"],
|
|
994
|
-
"description": "Maximum blast radius allowed"
|
|
995
|
-
},
|
|
996
|
-
"duration": {
|
|
997
|
-
"type": "integer",
|
|
998
|
-
"minimum": 0,
|
|
999
|
-
"description": "Total experiment window in minutes"
|
|
1000
|
-
},
|
|
1001
|
-
"progressionStrategy": {
|
|
1002
|
-
"type": "string",
|
|
1003
|
-
"enum": ["gradual", "immediate", "adaptive"],
|
|
1004
|
-
"description": "How experiments progress in intensity"
|
|
1005
|
-
}
|
|
1006
|
-
}
|
|
1007
|
-
},
|
|
1008
|
-
"artifact": {
|
|
1009
|
-
"type": "object",
|
|
1010
|
-
"required": ["type", "path"],
|
|
1011
|
-
"properties": {
|
|
1012
|
-
"type": {
|
|
1013
|
-
"type": "string",
|
|
1014
|
-
"enum": ["report", "runbook", "data", "log", "config", "diagram"],
|
|
1015
|
-
"description": "Artifact type"
|
|
1016
|
-
},
|
|
1017
|
-
"path": {
|
|
1018
|
-
"type": "string",
|
|
1019
|
-
"maxLength": 500,
|
|
1020
|
-
"description": "Path to artifact"
|
|
1021
|
-
},
|
|
1022
|
-
"format": {
|
|
1023
|
-
"type": "string",
|
|
1024
|
-
"enum": ["json", "yaml", "html", "md", "txt", "png", "svg"],
|
|
1025
|
-
"description": "Artifact format"
|
|
1026
|
-
},
|
|
1027
|
-
"description": {
|
|
1028
|
-
"type": "string",
|
|
1029
|
-
"maxLength": 500,
|
|
1030
|
-
"description": "Artifact description"
|
|
1031
|
-
},
|
|
1032
|
-
"sizeBytes": {
|
|
1033
|
-
"type": "integer",
|
|
1034
|
-
"minimum": 0,
|
|
1035
|
-
"description": "File size"
|
|
1036
|
-
}
|
|
1037
|
-
}
|
|
1038
|
-
},
|
|
1039
|
-
"timelineEvent": {
|
|
1040
|
-
"type": "object",
|
|
1041
|
-
"required": ["timestamp", "event"],
|
|
1042
|
-
"properties": {
|
|
1043
|
-
"timestamp": {
|
|
1044
|
-
"type": "string",
|
|
1045
|
-
"type": "string",
|
|
1046
|
-
"description": "Event timestamp"
|
|
1047
|
-
},
|
|
1048
|
-
"event": {
|
|
1049
|
-
"type": "string",
|
|
1050
|
-
"maxLength": 200,
|
|
1051
|
-
"description": "Event description"
|
|
1052
|
-
},
|
|
1053
|
-
"type": {
|
|
1054
|
-
"type": "string",
|
|
1055
|
-
"enum": ["start", "checkpoint", "inject", "observe", "recover", "rollback", "complete", "warning", "error"],
|
|
1056
|
-
"description": "Event type"
|
|
1057
|
-
},
|
|
1058
|
-
"experimentId": {
|
|
1059
|
-
"type": "string",
|
|
1060
|
-
"pattern": "^CHAOS-\\d{3,6}$",
|
|
1061
|
-
"description": "Related experiment ID"
|
|
1062
|
-
},
|
|
1063
|
-
"durationMs": {
|
|
1064
|
-
"type": "integer",
|
|
1065
|
-
"minimum": 0,
|
|
1066
|
-
"description": "Duration since previous event"
|
|
1067
|
-
}
|
|
1068
|
-
}
|
|
1069
|
-
},
|
|
1070
|
-
"metadata": {
|
|
1071
|
-
"type": "object",
|
|
1072
|
-
"properties": {
|
|
1073
|
-
"executionTimeMs": {
|
|
1074
|
-
"type": "integer",
|
|
1075
|
-
"minimum": 0,
|
|
1076
|
-
"maximum": 3600000,
|
|
1077
|
-
"description": "Total execution time"
|
|
1078
|
-
},
|
|
1079
|
-
"toolsUsed": {
|
|
1080
|
-
"type": "array",
|
|
1081
|
-
"items": {
|
|
1082
|
-
"type": "string",
|
|
1083
|
-
"enum": ["chaos-monkey", "litmus", "gremlin", "chaos-mesh", "pumba", "toxiproxy", "tc", "stress-ng", "kubectl", "custom"]
|
|
1084
|
-
},
|
|
1085
|
-
"uniqueItems": true,
|
|
1086
|
-
"description": "Chaos tools used"
|
|
1087
|
-
},
|
|
1088
|
-
"agentId": {
|
|
1089
|
-
"type": "string",
|
|
1090
|
-
"pattern": "^qe-[a-z][a-z0-9-]*$",
|
|
1091
|
-
"description": "Agent ID (e.g., qe-chaos-engineer)"
|
|
1092
|
-
},
|
|
1093
|
-
"modelUsed": {
|
|
1094
|
-
"type": "string",
|
|
1095
|
-
"description": "LLM model used"
|
|
1096
|
-
},
|
|
1097
|
-
"inputHash": {
|
|
1098
|
-
"type": "string",
|
|
1099
|
-
"pattern": "^[a-f0-9]{64}$",
|
|
1100
|
-
"description": "SHA-256 hash of input"
|
|
1101
|
-
},
|
|
1102
|
-
"targetPath": {
|
|
1103
|
-
"type": "string",
|
|
1104
|
-
"description": "Target system path"
|
|
1105
|
-
},
|
|
1106
|
-
"environment": {
|
|
1107
|
-
"type": "string",
|
|
1108
|
-
"enum": ["development", "staging", "production", "ci"],
|
|
1109
|
-
"description": "Execution environment"
|
|
1110
|
-
},
|
|
1111
|
-
"retryCount": {
|
|
1112
|
-
"type": "integer",
|
|
1113
|
-
"minimum": 0,
|
|
1114
|
-
"maximum": 10,
|
|
1115
|
-
"description": "Number of retries"
|
|
1116
|
-
}
|
|
1117
|
-
}
|
|
1118
|
-
},
|
|
1119
|
-
"validationResult": {
|
|
1120
|
-
"type": "object",
|
|
1121
|
-
"properties": {
|
|
1122
|
-
"schemaValid": {
|
|
1123
|
-
"type": "boolean",
|
|
1124
|
-
"description": "Passes schema validation"
|
|
1125
|
-
},
|
|
1126
|
-
"contentValid": {
|
|
1127
|
-
"type": "boolean",
|
|
1128
|
-
"description": "Passes content validation"
|
|
1129
|
-
},
|
|
1130
|
-
"confidence": {
|
|
1131
|
-
"type": "number",
|
|
1132
|
-
"minimum": 0,
|
|
1133
|
-
"maximum": 1,
|
|
1134
|
-
"description": "Confidence score"
|
|
1135
|
-
},
|
|
1136
|
-
"warnings": {
|
|
1137
|
-
"type": "array",
|
|
1138
|
-
"items": {
|
|
1139
|
-
"type": "string",
|
|
1140
|
-
"maxLength": 500
|
|
1141
|
-
},
|
|
1142
|
-
"maxItems": 20
|
|
1143
|
-
},
|
|
1144
|
-
"errors": {
|
|
1145
|
-
"type": "array",
|
|
1146
|
-
"items": {
|
|
1147
|
-
"type": "string",
|
|
1148
|
-
"maxLength": 500
|
|
1149
|
-
},
|
|
1150
|
-
"maxItems": 20
|
|
1151
|
-
},
|
|
1152
|
-
"validatorVersion": {
|
|
1153
|
-
"type": "string",
|
|
1154
|
-
"pattern": "^\\d+\\.\\d+\\.\\d+$"
|
|
1155
|
-
}
|
|
1156
|
-
}
|
|
1157
|
-
},
|
|
1158
|
-
"learningData": {
|
|
1159
|
-
"type": "object",
|
|
1160
|
-
"properties": {
|
|
1161
|
-
"patternsDetected": {
|
|
1162
|
-
"type": "array",
|
|
1163
|
-
"items": {
|
|
1164
|
-
"type": "string",
|
|
1165
|
-
"maxLength": 200
|
|
1166
|
-
},
|
|
1167
|
-
"maxItems": 20,
|
|
1168
|
-
"description": "Chaos patterns detected"
|
|
1169
|
-
},
|
|
1170
|
-
"reward": {
|
|
1171
|
-
"type": "number",
|
|
1172
|
-
"minimum": 0,
|
|
1173
|
-
"maximum": 1,
|
|
1174
|
-
"description": "Reward signal (0.0-1.0)"
|
|
1175
|
-
},
|
|
1176
|
-
"feedbackLoop": {
|
|
1177
|
-
"type": "object",
|
|
1178
|
-
"properties": {
|
|
1179
|
-
"previousRunId": {
|
|
1180
|
-
"type": "string",
|
|
1181
|
-
"type": "string"
|
|
1182
|
-
},
|
|
1183
|
-
"improvement": {
|
|
1184
|
-
"type": "number",
|
|
1185
|
-
"minimum": -1,
|
|
1186
|
-
"maximum": 1
|
|
1187
|
-
}
|
|
1188
|
-
}
|
|
1189
|
-
},
|
|
1190
|
-
"newResiliencePatterns": {
|
|
1191
|
-
"type": "array",
|
|
1192
|
-
"items": {
|
|
1193
|
-
"type": "object",
|
|
1194
|
-
"properties": {
|
|
1195
|
-
"pattern": { "type": "string" },
|
|
1196
|
-
"category": { "type": "string" },
|
|
1197
|
-
"confidence": { "type": "number" }
|
|
1198
|
-
}
|
|
1199
|
-
},
|
|
1200
|
-
"description": "New resilience patterns learned"
|
|
1201
|
-
}
|
|
1202
|
-
}
|
|
1203
|
-
}
|
|
1204
|
-
}
|
|
1205
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://agentic-qe.dev/schemas/chaos-engineering-resilience-output.json",
|
|
4
|
+
"title": "AQE Chaos Engineering Resilience Skill Output Schema",
|
|
5
|
+
"description": "Schema for chaos-engineering-resilience skill output validation. Extends the base skill-output template with chaos experiment types, fault injection structures, steady-state hypothesis, blast radius controls, and tool-specific outputs (Chaos Monkey, Litmus, Gremlin).",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["skillName", "version", "timestamp", "status", "trustTier", "output"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"skillName": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"const": "chaos-engineering-resilience",
|
|
12
|
+
"description": "Must be 'chaos-engineering-resilience'"
|
|
13
|
+
},
|
|
14
|
+
"version": {
|
|
15
|
+
"type": "string",
|
|
16
|
+
"pattern": "^\\d+\\.\\d+\\.\\d+(-[a-zA-Z0-9]+)?$",
|
|
17
|
+
"description": "Semantic version of the skill"
|
|
18
|
+
},
|
|
19
|
+
"timestamp": {
|
|
20
|
+
"type": "string",
|
|
21
|
+
"type": "string",
|
|
22
|
+
"description": "ISO 8601 timestamp of output generation"
|
|
23
|
+
},
|
|
24
|
+
"status": {
|
|
25
|
+
"type": "string",
|
|
26
|
+
"enum": ["success", "partial", "failed", "skipped"],
|
|
27
|
+
"description": "Overall execution status"
|
|
28
|
+
},
|
|
29
|
+
"trustTier": {
|
|
30
|
+
"type": "integer",
|
|
31
|
+
"const": 3,
|
|
32
|
+
"description": "Trust tier 3 indicates full validation with eval suite"
|
|
33
|
+
},
|
|
34
|
+
"output": {
|
|
35
|
+
"type": "object",
|
|
36
|
+
"required": ["summary", "experiments", "resilienceScore"],
|
|
37
|
+
"properties": {
|
|
38
|
+
"summary": {
|
|
39
|
+
"type": "string",
|
|
40
|
+
"minLength": 50,
|
|
41
|
+
"maxLength": 2000,
|
|
42
|
+
"description": "Human-readable summary of chaos experiment results"
|
|
43
|
+
},
|
|
44
|
+
"resilienceScore": {
|
|
45
|
+
"$ref": "#/$defs/resilienceScore",
|
|
46
|
+
"description": "Overall resilience score"
|
|
47
|
+
},
|
|
48
|
+
"experiments": {
|
|
49
|
+
"type": "array",
|
|
50
|
+
"items": {
|
|
51
|
+
"$ref": "#/$defs/chaosExperiment"
|
|
52
|
+
},
|
|
53
|
+
"minItems": 1,
|
|
54
|
+
"maxItems": 100,
|
|
55
|
+
"description": "List of chaos experiments executed"
|
|
56
|
+
},
|
|
57
|
+
"weaknesses": {
|
|
58
|
+
"type": "array",
|
|
59
|
+
"items": {
|
|
60
|
+
"$ref": "#/$defs/weakness"
|
|
61
|
+
},
|
|
62
|
+
"maxItems": 50,
|
|
63
|
+
"description": "Discovered system weaknesses"
|
|
64
|
+
},
|
|
65
|
+
"recommendations": {
|
|
66
|
+
"type": "array",
|
|
67
|
+
"items": {
|
|
68
|
+
"$ref": "#/$defs/recommendation"
|
|
69
|
+
},
|
|
70
|
+
"maxItems": 100,
|
|
71
|
+
"description": "Resilience improvement recommendations"
|
|
72
|
+
},
|
|
73
|
+
"metrics": {
|
|
74
|
+
"$ref": "#/$defs/chaosMetrics",
|
|
75
|
+
"description": "Chaos experiment metrics and statistics"
|
|
76
|
+
},
|
|
77
|
+
"categories": {
|
|
78
|
+
"$ref": "#/$defs/chaosCategoryBreakdown",
|
|
79
|
+
"description": "Breakdown by chaos category"
|
|
80
|
+
},
|
|
81
|
+
"artifacts": {
|
|
82
|
+
"type": "array",
|
|
83
|
+
"items": {
|
|
84
|
+
"$ref": "#/$defs/artifact"
|
|
85
|
+
},
|
|
86
|
+
"maxItems": 50,
|
|
87
|
+
"description": "Generated reports and artifacts"
|
|
88
|
+
},
|
|
89
|
+
"timeline": {
|
|
90
|
+
"type": "array",
|
|
91
|
+
"items": {
|
|
92
|
+
"$ref": "#/$defs/timelineEvent"
|
|
93
|
+
},
|
|
94
|
+
"description": "Experiment execution timeline"
|
|
95
|
+
},
|
|
96
|
+
"experimentConfiguration": {
|
|
97
|
+
"$ref": "#/$defs/experimentConfiguration",
|
|
98
|
+
"description": "Configuration used for the chaos experiments"
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
"metadata": {
|
|
103
|
+
"$ref": "#/$defs/metadata"
|
|
104
|
+
},
|
|
105
|
+
"validation": {
|
|
106
|
+
"$ref": "#/$defs/validationResult"
|
|
107
|
+
},
|
|
108
|
+
"learning": {
|
|
109
|
+
"$ref": "#/$defs/learningData"
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
"$defs": {
|
|
113
|
+
"resilienceScore": {
|
|
114
|
+
"type": "object",
|
|
115
|
+
"required": ["value", "max"],
|
|
116
|
+
"properties": {
|
|
117
|
+
"value": {
|
|
118
|
+
"type": "number",
|
|
119
|
+
"minimum": 0,
|
|
120
|
+
"maximum": 100,
|
|
121
|
+
"description": "Resilience score (0=critical weaknesses, 100=fully resilient)"
|
|
122
|
+
},
|
|
123
|
+
"max": {
|
|
124
|
+
"type": "number",
|
|
125
|
+
"const": 100,
|
|
126
|
+
"description": "Maximum score is always 100"
|
|
127
|
+
},
|
|
128
|
+
"grade": {
|
|
129
|
+
"type": "string",
|
|
130
|
+
"pattern": "^[A-F][+-]?$",
|
|
131
|
+
"description": "Letter grade: A (90-100), B (80-89), C (70-79), D (60-69), F (<60)"
|
|
132
|
+
},
|
|
133
|
+
"trend": {
|
|
134
|
+
"type": "string",
|
|
135
|
+
"enum": ["improving", "stable", "declining", "unknown"],
|
|
136
|
+
"description": "Trend compared to previous experiments"
|
|
137
|
+
},
|
|
138
|
+
"riskLevel": {
|
|
139
|
+
"type": "string",
|
|
140
|
+
"enum": ["critical", "high", "medium", "low", "minimal"],
|
|
141
|
+
"description": "Overall risk level assessment"
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
"chaosExperiment": {
|
|
146
|
+
"type": "object",
|
|
147
|
+
"required": ["id", "name", "type", "result"],
|
|
148
|
+
"properties": {
|
|
149
|
+
"id": {
|
|
150
|
+
"type": "string",
|
|
151
|
+
"pattern": "^CHAOS-\\d{3,6}$",
|
|
152
|
+
"description": "Unique experiment identifier (e.g., CHAOS-001)"
|
|
153
|
+
},
|
|
154
|
+
"name": {
|
|
155
|
+
"type": "string",
|
|
156
|
+
"minLength": 5,
|
|
157
|
+
"maxLength": 200,
|
|
158
|
+
"description": "Experiment name describing the fault injection"
|
|
159
|
+
},
|
|
160
|
+
"description": {
|
|
161
|
+
"type": "string",
|
|
162
|
+
"maxLength": 2000,
|
|
163
|
+
"description": "Detailed description of the experiment"
|
|
164
|
+
},
|
|
165
|
+
"type": {
|
|
166
|
+
"type": "string",
|
|
167
|
+
"enum": ["network", "resource", "state", "application", "infrastructure", "byzantine"],
|
|
168
|
+
"description": "Chaos experiment type: network=latency/partition, resource=CPU/memory/disk, state=data corruption, application=exception/deadlock, infrastructure=pod/node/zone failure, byzantine=consensus/split-brain"
|
|
169
|
+
},
|
|
170
|
+
"subType": {
|
|
171
|
+
"type": "string",
|
|
172
|
+
"enum": [
|
|
173
|
+
"latency",
|
|
174
|
+
"packet-loss",
|
|
175
|
+
"partition",
|
|
176
|
+
"dns-failure",
|
|
177
|
+
"bandwidth-limit",
|
|
178
|
+
"cpu-stress",
|
|
179
|
+
"memory-exhaust",
|
|
180
|
+
"disk-fill",
|
|
181
|
+
"iops-limit",
|
|
182
|
+
"process-kill",
|
|
183
|
+
"pod-terminate",
|
|
184
|
+
"node-drain",
|
|
185
|
+
"zone-failure",
|
|
186
|
+
"service-crash",
|
|
187
|
+
"exception-inject",
|
|
188
|
+
"deadlock",
|
|
189
|
+
"thread-contention",
|
|
190
|
+
"connection-pool-exhaust",
|
|
191
|
+
"malicious-node",
|
|
192
|
+
"message-corruption",
|
|
193
|
+
"split-brain",
|
|
194
|
+
"equivocation",
|
|
195
|
+
"spike-load",
|
|
196
|
+
"ramp-load"
|
|
197
|
+
],
|
|
198
|
+
"description": "Specific fault injection subtype"
|
|
199
|
+
},
|
|
200
|
+
"target": {
|
|
201
|
+
"$ref": "#/$defs/experimentTarget",
|
|
202
|
+
"description": "Target of the chaos experiment"
|
|
203
|
+
},
|
|
204
|
+
"faultInjection": {
|
|
205
|
+
"$ref": "#/$defs/faultInjection",
|
|
206
|
+
"description": "Fault injection parameters"
|
|
207
|
+
},
|
|
208
|
+
"steadyStateHypothesis": {
|
|
209
|
+
"$ref": "#/$defs/steadyStateHypothesis",
|
|
210
|
+
"description": "Steady-state hypothesis for the experiment"
|
|
211
|
+
},
|
|
212
|
+
"blastRadius": {
|
|
213
|
+
"$ref": "#/$defs/blastRadius",
|
|
214
|
+
"description": "Blast radius controls"
|
|
215
|
+
},
|
|
216
|
+
"rollback": {
|
|
217
|
+
"$ref": "#/$defs/rollbackProcedure",
|
|
218
|
+
"description": "Rollback procedure"
|
|
219
|
+
},
|
|
220
|
+
"result": {
|
|
221
|
+
"type": "string",
|
|
222
|
+
"enum": ["passed", "failed", "partial", "expected-fail"],
|
|
223
|
+
"description": "Experiment result: passed=system resilient, failed=weakness found, partial=degraded but acceptable, expected-fail=known limitation validated"
|
|
224
|
+
},
|
|
225
|
+
"observations": {
|
|
226
|
+
"type": "array",
|
|
227
|
+
"items": {
|
|
228
|
+
"type": "string",
|
|
229
|
+
"maxLength": 500
|
|
230
|
+
},
|
|
231
|
+
"maxItems": 20,
|
|
232
|
+
"description": "Observations during the experiment"
|
|
233
|
+
},
|
|
234
|
+
"recoveryTime": {
|
|
235
|
+
"type": "object",
|
|
236
|
+
"properties": {
|
|
237
|
+
"actual": {
|
|
238
|
+
"type": "integer",
|
|
239
|
+
"minimum": 0,
|
|
240
|
+
"description": "Actual recovery time in milliseconds"
|
|
241
|
+
},
|
|
242
|
+
"sla": {
|
|
243
|
+
"type": "integer",
|
|
244
|
+
"minimum": 0,
|
|
245
|
+
"description": "SLA recovery time in milliseconds"
|
|
246
|
+
},
|
|
247
|
+
"withinSla": {
|
|
248
|
+
"type": "boolean",
|
|
249
|
+
"description": "Whether recovery was within SLA"
|
|
250
|
+
}
|
|
251
|
+
},
|
|
252
|
+
"description": "Recovery time metrics"
|
|
253
|
+
},
|
|
254
|
+
"duration": {
|
|
255
|
+
"type": "integer",
|
|
256
|
+
"minimum": 0,
|
|
257
|
+
"description": "Experiment duration in milliseconds"
|
|
258
|
+
},
|
|
259
|
+
"tool": {
|
|
260
|
+
"type": "string",
|
|
261
|
+
"enum": ["chaos-monkey", "litmus", "gremlin", "chaos-mesh", "pumba", "toxiproxy", "tc", "stress-ng", "kubectl", "custom"],
|
|
262
|
+
"description": "Chaos tool used for the experiment"
|
|
263
|
+
},
|
|
264
|
+
"confidence": {
|
|
265
|
+
"type": "number",
|
|
266
|
+
"minimum": 0,
|
|
267
|
+
"maximum": 1,
|
|
268
|
+
"description": "Confidence in experiment results (0.0-1.0)"
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
},
|
|
272
|
+
"experimentTarget": {
|
|
273
|
+
"type": "object",
|
|
274
|
+
"required": ["type", "name"],
|
|
275
|
+
"properties": {
|
|
276
|
+
"type": {
|
|
277
|
+
"type": "string",
|
|
278
|
+
"enum": ["service", "pod", "node", "zone", "cluster", "network", "database", "cache", "queue", "external-api"],
|
|
279
|
+
"description": "Target type"
|
|
280
|
+
},
|
|
281
|
+
"name": {
|
|
282
|
+
"type": "string",
|
|
283
|
+
"maxLength": 200,
|
|
284
|
+
"description": "Target name or identifier"
|
|
285
|
+
},
|
|
286
|
+
"namespace": {
|
|
287
|
+
"type": "string",
|
|
288
|
+
"maxLength": 100,
|
|
289
|
+
"description": "Kubernetes namespace if applicable"
|
|
290
|
+
},
|
|
291
|
+
"labels": {
|
|
292
|
+
"type": "object",
|
|
293
|
+
"additionalProperties": { "type": "string" },
|
|
294
|
+
"description": "Target selection labels"
|
|
295
|
+
},
|
|
296
|
+
"percentage": {
|
|
297
|
+
"type": "number",
|
|
298
|
+
"minimum": 0,
|
|
299
|
+
"maximum": 100,
|
|
300
|
+
"description": "Percentage of targets affected"
|
|
301
|
+
},
|
|
302
|
+
"count": {
|
|
303
|
+
"type": "integer",
|
|
304
|
+
"minimum": 1,
|
|
305
|
+
"description": "Number of target instances"
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
},
|
|
309
|
+
"faultInjection": {
|
|
310
|
+
"type": "object",
|
|
311
|
+
"properties": {
|
|
312
|
+
"latency": {
|
|
313
|
+
"type": "object",
|
|
314
|
+
"properties": {
|
|
315
|
+
"delay": {
|
|
316
|
+
"type": "string",
|
|
317
|
+
"pattern": "^\\d+m?s$",
|
|
318
|
+
"description": "Latency delay (e.g., 500ms, 2s)"
|
|
319
|
+
},
|
|
320
|
+
"jitter": {
|
|
321
|
+
"type": "string",
|
|
322
|
+
"pattern": "^\\d+m?s$",
|
|
323
|
+
"description": "Latency jitter"
|
|
324
|
+
},
|
|
325
|
+
"correlation": {
|
|
326
|
+
"type": "number",
|
|
327
|
+
"minimum": 0,
|
|
328
|
+
"maximum": 100,
|
|
329
|
+
"description": "Correlation percentage"
|
|
330
|
+
}
|
|
331
|
+
},
|
|
332
|
+
"description": "Network latency injection"
|
|
333
|
+
},
|
|
334
|
+
"packetLoss": {
|
|
335
|
+
"type": "object",
|
|
336
|
+
"properties": {
|
|
337
|
+
"percentage": {
|
|
338
|
+
"type": "number",
|
|
339
|
+
"minimum": 0,
|
|
340
|
+
"maximum": 100,
|
|
341
|
+
"description": "Packet loss percentage"
|
|
342
|
+
},
|
|
343
|
+
"correlation": {
|
|
344
|
+
"type": "number",
|
|
345
|
+
"minimum": 0,
|
|
346
|
+
"maximum": 100,
|
|
347
|
+
"description": "Correlation percentage"
|
|
348
|
+
}
|
|
349
|
+
},
|
|
350
|
+
"description": "Packet loss injection"
|
|
351
|
+
},
|
|
352
|
+
"partition": {
|
|
353
|
+
"type": "object",
|
|
354
|
+
"properties": {
|
|
355
|
+
"direction": {
|
|
356
|
+
"type": "string",
|
|
357
|
+
"enum": ["both", "to", "from"],
|
|
358
|
+
"description": "Partition direction"
|
|
359
|
+
},
|
|
360
|
+
"targets": {
|
|
361
|
+
"type": "array",
|
|
362
|
+
"items": { "type": "string" },
|
|
363
|
+
"description": "Targets to partition from"
|
|
364
|
+
}
|
|
365
|
+
},
|
|
366
|
+
"description": "Network partition"
|
|
367
|
+
},
|
|
368
|
+
"resource": {
|
|
369
|
+
"type": "object",
|
|
370
|
+
"properties": {
|
|
371
|
+
"cpu": {
|
|
372
|
+
"type": "object",
|
|
373
|
+
"properties": {
|
|
374
|
+
"load": {
|
|
375
|
+
"type": "number",
|
|
376
|
+
"minimum": 0,
|
|
377
|
+
"maximum": 100,
|
|
378
|
+
"description": "CPU load percentage"
|
|
379
|
+
},
|
|
380
|
+
"workers": {
|
|
381
|
+
"type": "integer",
|
|
382
|
+
"minimum": 1,
|
|
383
|
+
"description": "Number of stress workers"
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
},
|
|
387
|
+
"memory": {
|
|
388
|
+
"type": "object",
|
|
389
|
+
"properties": {
|
|
390
|
+
"size": {
|
|
391
|
+
"type": "string",
|
|
392
|
+
"pattern": "^\\d+[KMGT]?i?[Bb]?$",
|
|
393
|
+
"description": "Memory to consume (e.g., 500Mi, 2Gi)"
|
|
394
|
+
},
|
|
395
|
+
"percentage": {
|
|
396
|
+
"type": "number",
|
|
397
|
+
"minimum": 0,
|
|
398
|
+
"maximum": 100,
|
|
399
|
+
"description": "Percentage of available memory"
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
},
|
|
403
|
+
"disk": {
|
|
404
|
+
"type": "object",
|
|
405
|
+
"properties": {
|
|
406
|
+
"size": {
|
|
407
|
+
"type": "string",
|
|
408
|
+
"pattern": "^\\d+[KMGT]?i?[Bb]?$",
|
|
409
|
+
"description": "Disk space to fill"
|
|
410
|
+
},
|
|
411
|
+
"path": {
|
|
412
|
+
"type": "string",
|
|
413
|
+
"description": "Target path for disk fill"
|
|
414
|
+
},
|
|
415
|
+
"iopsLimit": {
|
|
416
|
+
"type": "integer",
|
|
417
|
+
"minimum": 0,
|
|
418
|
+
"description": "IOPS limit to impose"
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
},
|
|
423
|
+
"description": "Resource stress injection"
|
|
424
|
+
},
|
|
425
|
+
"process": {
|
|
426
|
+
"type": "object",
|
|
427
|
+
"properties": {
|
|
428
|
+
"action": {
|
|
429
|
+
"type": "string",
|
|
430
|
+
"enum": ["kill", "pause", "resume"],
|
|
431
|
+
"description": "Process action"
|
|
432
|
+
},
|
|
433
|
+
"signal": {
|
|
434
|
+
"type": "string",
|
|
435
|
+
"enum": ["SIGKILL", "SIGTERM", "SIGSTOP", "SIGCONT"],
|
|
436
|
+
"description": "Signal to send"
|
|
437
|
+
},
|
|
438
|
+
"pattern": {
|
|
439
|
+
"type": "string",
|
|
440
|
+
"description": "Process name pattern"
|
|
441
|
+
}
|
|
442
|
+
},
|
|
443
|
+
"description": "Process manipulation"
|
|
444
|
+
},
|
|
445
|
+
"exception": {
|
|
446
|
+
"type": "object",
|
|
447
|
+
"properties": {
|
|
448
|
+
"type": {
|
|
449
|
+
"type": "string",
|
|
450
|
+
"description": "Exception type to inject"
|
|
451
|
+
},
|
|
452
|
+
"message": {
|
|
453
|
+
"type": "string",
|
|
454
|
+
"description": "Exception message"
|
|
455
|
+
},
|
|
456
|
+
"probability": {
|
|
457
|
+
"type": "number",
|
|
458
|
+
"minimum": 0,
|
|
459
|
+
"maximum": 1,
|
|
460
|
+
"description": "Probability of injection (0.0-1.0)"
|
|
461
|
+
}
|
|
462
|
+
},
|
|
463
|
+
"description": "Application exception injection"
|
|
464
|
+
},
|
|
465
|
+
"byzantine": {
|
|
466
|
+
"type": "object",
|
|
467
|
+
"properties": {
|
|
468
|
+
"attackType": {
|
|
469
|
+
"type": "string",
|
|
470
|
+
"enum": ["malicious-data", "message-corruption", "equivocation", "sybil", "leader-manipulation"],
|
|
471
|
+
"description": "Byzantine attack type"
|
|
472
|
+
},
|
|
473
|
+
"affectedNodes": {
|
|
474
|
+
"type": "integer",
|
|
475
|
+
"minimum": 1,
|
|
476
|
+
"description": "Number of Byzantine nodes"
|
|
477
|
+
},
|
|
478
|
+
"totalNodes": {
|
|
479
|
+
"type": "integer",
|
|
480
|
+
"minimum": 1,
|
|
481
|
+
"description": "Total nodes in cluster"
|
|
482
|
+
},
|
|
483
|
+
"toleranceThreshold": {
|
|
484
|
+
"type": "string",
|
|
485
|
+
"pattern": "^f\\s*<\\s*n/[23]$",
|
|
486
|
+
"description": "Byzantine fault tolerance formula (e.g., f < n/3)"
|
|
487
|
+
}
|
|
488
|
+
},
|
|
489
|
+
"description": "Byzantine fault injection"
|
|
490
|
+
},
|
|
491
|
+
"load": {
|
|
492
|
+
"type": "object",
|
|
493
|
+
"properties": {
|
|
494
|
+
"pattern": {
|
|
495
|
+
"type": "string",
|
|
496
|
+
"enum": ["spike", "ramp", "constant", "wave"],
|
|
497
|
+
"description": "Load pattern type"
|
|
498
|
+
},
|
|
499
|
+
"baseline": {
|
|
500
|
+
"type": "number",
|
|
501
|
+
"minimum": 0,
|
|
502
|
+
"description": "Baseline requests per second"
|
|
503
|
+
},
|
|
504
|
+
"peak": {
|
|
505
|
+
"type": "number",
|
|
506
|
+
"minimum": 0,
|
|
507
|
+
"description": "Peak requests per second"
|
|
508
|
+
},
|
|
509
|
+
"rampDuration": {
|
|
510
|
+
"type": "integer",
|
|
511
|
+
"minimum": 0,
|
|
512
|
+
"description": "Ramp duration in milliseconds"
|
|
513
|
+
}
|
|
514
|
+
},
|
|
515
|
+
"description": "Load pattern injection"
|
|
516
|
+
}
|
|
517
|
+
},
|
|
518
|
+
"description": "Fault injection parameters"
|
|
519
|
+
},
|
|
520
|
+
"steadyStateHypothesis": {
|
|
521
|
+
"type": "object",
|
|
522
|
+
"required": ["metrics"],
|
|
523
|
+
"properties": {
|
|
524
|
+
"description": {
|
|
525
|
+
"type": "string",
|
|
526
|
+
"maxLength": 500,
|
|
527
|
+
"description": "Hypothesis description"
|
|
528
|
+
},
|
|
529
|
+
"metrics": {
|
|
530
|
+
"type": "array",
|
|
531
|
+
"items": {
|
|
532
|
+
"$ref": "#/$defs/steadyStateMetric"
|
|
533
|
+
},
|
|
534
|
+
"minItems": 1,
|
|
535
|
+
"maxItems": 20,
|
|
536
|
+
"description": "Metrics defining steady state"
|
|
537
|
+
},
|
|
538
|
+
"before": {
|
|
539
|
+
"type": "object",
|
|
540
|
+
"properties": {
|
|
541
|
+
"validated": {
|
|
542
|
+
"type": "boolean",
|
|
543
|
+
"description": "Was steady state validated before experiment"
|
|
544
|
+
},
|
|
545
|
+
"timestamp": {
|
|
546
|
+
"type": "string",
|
|
547
|
+
"type": "string",
|
|
548
|
+
"description": "When pre-validation occurred"
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
},
|
|
552
|
+
"after": {
|
|
553
|
+
"type": "object",
|
|
554
|
+
"properties": {
|
|
555
|
+
"validated": {
|
|
556
|
+
"type": "boolean",
|
|
557
|
+
"description": "Was steady state validated after experiment"
|
|
558
|
+
},
|
|
559
|
+
"timestamp": {
|
|
560
|
+
"type": "string",
|
|
561
|
+
"type": "string",
|
|
562
|
+
"description": "When post-validation occurred"
|
|
563
|
+
},
|
|
564
|
+
"recoveryDuration": {
|
|
565
|
+
"type": "integer",
|
|
566
|
+
"minimum": 0,
|
|
567
|
+
"description": "Time to return to steady state in ms"
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
},
|
|
572
|
+
"description": "Steady-state hypothesis definition"
|
|
573
|
+
},
|
|
574
|
+
"steadyStateMetric": {
|
|
575
|
+
"type": "object",
|
|
576
|
+
"required": ["name", "operator", "threshold"],
|
|
577
|
+
"properties": {
|
|
578
|
+
"name": {
|
|
579
|
+
"type": "string",
|
|
580
|
+
"enum": ["error-rate", "latency-p50", "latency-p95", "latency-p99", "throughput", "availability", "success-rate", "cpu-usage", "memory-usage", "queue-depth", "connection-count"],
|
|
581
|
+
"description": "Metric name"
|
|
582
|
+
},
|
|
583
|
+
"operator": {
|
|
584
|
+
"type": "string",
|
|
585
|
+
"enum": ["<", "<=", ">", ">=", "==", "!="],
|
|
586
|
+
"description": "Comparison operator"
|
|
587
|
+
},
|
|
588
|
+
"threshold": {
|
|
589
|
+
"description": "Threshold value"
|
|
590
|
+
},
|
|
591
|
+
"unit": {
|
|
592
|
+
"type": "string",
|
|
593
|
+
"enum": ["percent", "ms", "s", "rps", "count"],
|
|
594
|
+
"description": "Metric unit"
|
|
595
|
+
},
|
|
596
|
+
"actual": {
|
|
597
|
+
"description": "Actual measured value"
|
|
598
|
+
},
|
|
599
|
+
"passed": {
|
|
600
|
+
"type": "boolean",
|
|
601
|
+
"description": "Whether metric passed the threshold"
|
|
602
|
+
}
|
|
603
|
+
},
|
|
604
|
+
"description": "Individual steady-state metric"
|
|
605
|
+
},
|
|
606
|
+
"blastRadius": {
|
|
607
|
+
"type": "object",
|
|
608
|
+
"properties": {
|
|
609
|
+
"scope": {
|
|
610
|
+
"type": "string",
|
|
611
|
+
"enum": ["single-instance", "single-service", "multi-service", "zone", "region", "cluster"],
|
|
612
|
+
"description": "Blast radius scope"
|
|
613
|
+
},
|
|
614
|
+
"maxImpact": {
|
|
615
|
+
"type": "object",
|
|
616
|
+
"properties": {
|
|
617
|
+
"pods": {
|
|
618
|
+
"type": "integer",
|
|
619
|
+
"minimum": 0,
|
|
620
|
+
"description": "Maximum pods affected"
|
|
621
|
+
},
|
|
622
|
+
"services": {
|
|
623
|
+
"type": "integer",
|
|
624
|
+
"minimum": 0,
|
|
625
|
+
"description": "Maximum services affected"
|
|
626
|
+
},
|
|
627
|
+
"percentage": {
|
|
628
|
+
"type": "number",
|
|
629
|
+
"minimum": 0,
|
|
630
|
+
"maximum": 100,
|
|
631
|
+
"description": "Maximum percentage affected"
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
},
|
|
635
|
+
"safeguards": {
|
|
636
|
+
"type": "array",
|
|
637
|
+
"items": {
|
|
638
|
+
"type": "string",
|
|
639
|
+
"maxLength": 200
|
|
640
|
+
},
|
|
641
|
+
"description": "Safety controls in place"
|
|
642
|
+
},
|
|
643
|
+
"emergencyStop": {
|
|
644
|
+
"type": "boolean",
|
|
645
|
+
"description": "Whether emergency stop is enabled"
|
|
646
|
+
}
|
|
647
|
+
},
|
|
648
|
+
"description": "Blast radius controls"
|
|
649
|
+
},
|
|
650
|
+
"rollbackProcedure": {
|
|
651
|
+
"type": "object",
|
|
652
|
+
"properties": {
|
|
653
|
+
"automatic": {
|
|
654
|
+
"type": "boolean",
|
|
655
|
+
"description": "Whether rollback is automatic"
|
|
656
|
+
},
|
|
657
|
+
"trigger": {
|
|
658
|
+
"type": "string",
|
|
659
|
+
"maxLength": 500,
|
|
660
|
+
"description": "Condition that triggers rollback"
|
|
661
|
+
},
|
|
662
|
+
"steps": {
|
|
663
|
+
"type": "array",
|
|
664
|
+
"items": {
|
|
665
|
+
"type": "string",
|
|
666
|
+
"maxLength": 500
|
|
667
|
+
},
|
|
668
|
+
"maxItems": 20,
|
|
669
|
+
"description": "Manual rollback steps"
|
|
670
|
+
},
|
|
671
|
+
"executed": {
|
|
672
|
+
"type": "boolean",
|
|
673
|
+
"description": "Whether rollback was executed"
|
|
674
|
+
},
|
|
675
|
+
"reason": {
|
|
676
|
+
"type": "string",
|
|
677
|
+
"maxLength": 500,
|
|
678
|
+
"description": "Reason for rollback if executed"
|
|
679
|
+
}
|
|
680
|
+
},
|
|
681
|
+
"description": "Rollback procedure"
|
|
682
|
+
},
|
|
683
|
+
"weakness": {
|
|
684
|
+
"type": "object",
|
|
685
|
+
"required": ["id", "title", "severity", "category"],
|
|
686
|
+
"properties": {
|
|
687
|
+
"id": {
|
|
688
|
+
"type": "string",
|
|
689
|
+
"pattern": "^WEAK-\\d{3,6}$",
|
|
690
|
+
"description": "Unique weakness identifier"
|
|
691
|
+
},
|
|
692
|
+
"title": {
|
|
693
|
+
"type": "string",
|
|
694
|
+
"minLength": 10,
|
|
695
|
+
"maxLength": 200,
|
|
696
|
+
"description": "Weakness title"
|
|
697
|
+
},
|
|
698
|
+
"description": {
|
|
699
|
+
"type": "string",
|
|
700
|
+
"maxLength": 2000,
|
|
701
|
+
"description": "Detailed description"
|
|
702
|
+
},
|
|
703
|
+
"severity": {
|
|
704
|
+
"type": "string",
|
|
705
|
+
"enum": ["critical", "high", "medium", "low"],
|
|
706
|
+
"description": "Weakness severity"
|
|
707
|
+
},
|
|
708
|
+
"category": {
|
|
709
|
+
"type": "string",
|
|
710
|
+
"enum": ["availability", "latency", "data-integrity", "security", "scalability", "recovery", "observability"],
|
|
711
|
+
"description": "Weakness category"
|
|
712
|
+
},
|
|
713
|
+
"discoveredBy": {
|
|
714
|
+
"type": "array",
|
|
715
|
+
"items": {
|
|
716
|
+
"type": "string",
|
|
717
|
+
"pattern": "^CHAOS-\\d{3,6}$"
|
|
718
|
+
},
|
|
719
|
+
"description": "Experiments that discovered this weakness"
|
|
720
|
+
},
|
|
721
|
+
"impact": {
|
|
722
|
+
"type": "string",
|
|
723
|
+
"maxLength": 1000,
|
|
724
|
+
"description": "Business impact of this weakness"
|
|
725
|
+
},
|
|
726
|
+
"remediation": {
|
|
727
|
+
"type": "string",
|
|
728
|
+
"maxLength": 2000,
|
|
729
|
+
"description": "Suggested remediation"
|
|
730
|
+
},
|
|
731
|
+
"runbook": {
|
|
732
|
+
"type": "string",
|
|
733
|
+
"maxLength": 5000,
|
|
734
|
+
"description": "Generated runbook for handling this weakness"
|
|
735
|
+
}
|
|
736
|
+
},
|
|
737
|
+
"description": "Discovered weakness"
|
|
738
|
+
},
|
|
739
|
+
"recommendation": {
|
|
740
|
+
"type": "object",
|
|
741
|
+
"required": ["id", "title", "priority"],
|
|
742
|
+
"properties": {
|
|
743
|
+
"id": {
|
|
744
|
+
"type": "string",
|
|
745
|
+
"pattern": "^REC-\\d{3,6}$",
|
|
746
|
+
"description": "Unique recommendation identifier"
|
|
747
|
+
},
|
|
748
|
+
"title": {
|
|
749
|
+
"type": "string",
|
|
750
|
+
"minLength": 10,
|
|
751
|
+
"maxLength": 200,
|
|
752
|
+
"description": "Recommendation title"
|
|
753
|
+
},
|
|
754
|
+
"description": {
|
|
755
|
+
"type": "string",
|
|
756
|
+
"maxLength": 2000,
|
|
757
|
+
"description": "Detailed recommendation"
|
|
758
|
+
},
|
|
759
|
+
"priority": {
|
|
760
|
+
"type": "string",
|
|
761
|
+
"enum": ["critical", "high", "medium", "low"],
|
|
762
|
+
"description": "Implementation priority"
|
|
763
|
+
},
|
|
764
|
+
"effort": {
|
|
765
|
+
"type": "string",
|
|
766
|
+
"enum": ["trivial", "low", "medium", "high", "major"],
|
|
767
|
+
"description": "Estimated effort"
|
|
768
|
+
},
|
|
769
|
+
"impact": {
|
|
770
|
+
"type": "integer",
|
|
771
|
+
"minimum": 1,
|
|
772
|
+
"maximum": 10,
|
|
773
|
+
"description": "Expected resilience impact (1-10)"
|
|
774
|
+
},
|
|
775
|
+
"category": {
|
|
776
|
+
"type": "string",
|
|
777
|
+
"enum": ["circuit-breaker", "retry-policy", "timeout-config", "resource-limit", "auto-scaling", "redundancy", "monitoring", "recovery-automation"],
|
|
778
|
+
"description": "Recommendation category"
|
|
779
|
+
},
|
|
780
|
+
"relatedWeaknesses": {
|
|
781
|
+
"type": "array",
|
|
782
|
+
"items": {
|
|
783
|
+
"type": "string",
|
|
784
|
+
"pattern": "^WEAK-\\d{3,6}$"
|
|
785
|
+
},
|
|
786
|
+
"description": "IDs of related weaknesses"
|
|
787
|
+
},
|
|
788
|
+
"codeExample": {
|
|
789
|
+
"type": "string",
|
|
790
|
+
"maxLength": 5000,
|
|
791
|
+
"description": "Code example for implementation"
|
|
792
|
+
},
|
|
793
|
+
"resources": {
|
|
794
|
+
"type": "array",
|
|
795
|
+
"items": {
|
|
796
|
+
"type": "object",
|
|
797
|
+
"required": ["title", "url"],
|
|
798
|
+
"properties": {
|
|
799
|
+
"title": { "type": "string" },
|
|
800
|
+
"url": { "type": "string" }
|
|
801
|
+
}
|
|
802
|
+
},
|
|
803
|
+
"maxItems": 10,
|
|
804
|
+
"description": "External resources"
|
|
805
|
+
}
|
|
806
|
+
},
|
|
807
|
+
"description": "Resilience recommendation"
|
|
808
|
+
},
|
|
809
|
+
"chaosCategoryBreakdown": {
|
|
810
|
+
"type": "object",
|
|
811
|
+
"description": "Chaos experiment category breakdown",
|
|
812
|
+
"properties": {
|
|
813
|
+
"network": {
|
|
814
|
+
"$ref": "#/$defs/chaosCategoryScore",
|
|
815
|
+
"description": "Network chaos (latency, partition, packet loss)"
|
|
816
|
+
},
|
|
817
|
+
"resource": {
|
|
818
|
+
"$ref": "#/$defs/chaosCategoryScore",
|
|
819
|
+
"description": "Resource chaos (CPU, memory, disk)"
|
|
820
|
+
},
|
|
821
|
+
"state": {
|
|
822
|
+
"$ref": "#/$defs/chaosCategoryScore",
|
|
823
|
+
"description": "State chaos (data corruption, inconsistency)"
|
|
824
|
+
},
|
|
825
|
+
"application": {
|
|
826
|
+
"$ref": "#/$defs/chaosCategoryScore",
|
|
827
|
+
"description": "Application chaos (exceptions, deadlocks)"
|
|
828
|
+
},
|
|
829
|
+
"infrastructure": {
|
|
830
|
+
"$ref": "#/$defs/chaosCategoryScore",
|
|
831
|
+
"description": "Infrastructure chaos (pod/node/zone failure)"
|
|
832
|
+
},
|
|
833
|
+
"byzantine": {
|
|
834
|
+
"$ref": "#/$defs/chaosCategoryScore",
|
|
835
|
+
"description": "Byzantine faults (consensus, split-brain)"
|
|
836
|
+
}
|
|
837
|
+
},
|
|
838
|
+
"additionalProperties": false
|
|
839
|
+
},
|
|
840
|
+
"chaosCategoryScore": {
|
|
841
|
+
"type": "object",
|
|
842
|
+
"required": ["tested", "score"],
|
|
843
|
+
"properties": {
|
|
844
|
+
"tested": {
|
|
845
|
+
"type": "boolean",
|
|
846
|
+
"description": "Whether this category was tested"
|
|
847
|
+
},
|
|
848
|
+
"score": {
|
|
849
|
+
"type": "number",
|
|
850
|
+
"minimum": 0,
|
|
851
|
+
"maximum": 100,
|
|
852
|
+
"description": "Category resilience score (100 = fully resilient)"
|
|
853
|
+
},
|
|
854
|
+
"grade": {
|
|
855
|
+
"type": "string",
|
|
856
|
+
"pattern": "^[A-F][+-]?$",
|
|
857
|
+
"description": "Letter grade"
|
|
858
|
+
},
|
|
859
|
+
"experimentCount": {
|
|
860
|
+
"type": "integer",
|
|
861
|
+
"minimum": 0,
|
|
862
|
+
"description": "Number of experiments in this category"
|
|
863
|
+
},
|
|
864
|
+
"passedCount": {
|
|
865
|
+
"type": "integer",
|
|
866
|
+
"minimum": 0,
|
|
867
|
+
"description": "Number of passed experiments"
|
|
868
|
+
},
|
|
869
|
+
"failedCount": {
|
|
870
|
+
"type": "integer",
|
|
871
|
+
"minimum": 0,
|
|
872
|
+
"description": "Number of failed experiments"
|
|
873
|
+
},
|
|
874
|
+
"weaknessCount": {
|
|
875
|
+
"type": "integer",
|
|
876
|
+
"minimum": 0,
|
|
877
|
+
"description": "Weaknesses found in this category"
|
|
878
|
+
},
|
|
879
|
+
"status": {
|
|
880
|
+
"type": "string",
|
|
881
|
+
"enum": ["pass", "fail", "warn", "skip"],
|
|
882
|
+
"description": "Category status"
|
|
883
|
+
}
|
|
884
|
+
}
|
|
885
|
+
},
|
|
886
|
+
"chaosMetrics": {
|
|
887
|
+
"type": "object",
|
|
888
|
+
"properties": {
|
|
889
|
+
"totalExperiments": {
|
|
890
|
+
"type": "integer",
|
|
891
|
+
"minimum": 0,
|
|
892
|
+
"description": "Total chaos experiments executed"
|
|
893
|
+
},
|
|
894
|
+
"passedExperiments": {
|
|
895
|
+
"type": "integer",
|
|
896
|
+
"minimum": 0,
|
|
897
|
+
"description": "Experiments that passed"
|
|
898
|
+
},
|
|
899
|
+
"failedExperiments": {
|
|
900
|
+
"type": "integer",
|
|
901
|
+
"minimum": 0,
|
|
902
|
+
"description": "Experiments that failed (weaknesses found)"
|
|
903
|
+
},
|
|
904
|
+
"skippedExperiments": {
|
|
905
|
+
"type": "integer",
|
|
906
|
+
"minimum": 0,
|
|
907
|
+
"description": "Experiments skipped"
|
|
908
|
+
},
|
|
909
|
+
"weaknessesFound": {
|
|
910
|
+
"type": "integer",
|
|
911
|
+
"minimum": 0,
|
|
912
|
+
"description": "Total weaknesses discovered"
|
|
913
|
+
},
|
|
914
|
+
"criticalWeaknesses": {
|
|
915
|
+
"type": "integer",
|
|
916
|
+
"minimum": 0,
|
|
917
|
+
"description": "Critical severity weaknesses"
|
|
918
|
+
},
|
|
919
|
+
"servicesAffected": {
|
|
920
|
+
"type": "integer",
|
|
921
|
+
"minimum": 0,
|
|
922
|
+
"description": "Number of services affected"
|
|
923
|
+
},
|
|
924
|
+
"averageRecoveryTime": {
|
|
925
|
+
"type": "integer",
|
|
926
|
+
"minimum": 0,
|
|
927
|
+
"description": "Average recovery time in ms"
|
|
928
|
+
},
|
|
929
|
+
"maxRecoveryTime": {
|
|
930
|
+
"type": "integer",
|
|
931
|
+
"minimum": 0,
|
|
932
|
+
"description": "Maximum recovery time in ms"
|
|
933
|
+
},
|
|
934
|
+
"rollbacksTriggered": {
|
|
935
|
+
"type": "integer",
|
|
936
|
+
"minimum": 0,
|
|
937
|
+
"description": "Number of rollbacks triggered"
|
|
938
|
+
},
|
|
939
|
+
"safetyViolations": {
|
|
940
|
+
"type": "integer",
|
|
941
|
+
"minimum": 0,
|
|
942
|
+
"description": "Safety limit violations"
|
|
943
|
+
},
|
|
944
|
+
"totalDurationMs": {
|
|
945
|
+
"type": "integer",
|
|
946
|
+
"minimum": 0,
|
|
947
|
+
"description": "Total experiment duration"
|
|
948
|
+
},
|
|
949
|
+
"coverage": {
|
|
950
|
+
"type": "object",
|
|
951
|
+
"properties": {
|
|
952
|
+
"network": { "type": "boolean" },
|
|
953
|
+
"resource": { "type": "boolean" },
|
|
954
|
+
"state": { "type": "boolean" },
|
|
955
|
+
"application": { "type": "boolean" },
|
|
956
|
+
"infrastructure": { "type": "boolean" },
|
|
957
|
+
"byzantine": { "type": "boolean" }
|
|
958
|
+
},
|
|
959
|
+
"description": "Chaos category coverage"
|
|
960
|
+
}
|
|
961
|
+
}
|
|
962
|
+
},
|
|
963
|
+
"experimentConfiguration": {
|
|
964
|
+
"type": "object",
|
|
965
|
+
"properties": {
|
|
966
|
+
"target": {
|
|
967
|
+
"type": "string",
|
|
968
|
+
"description": "Primary target system or service"
|
|
969
|
+
},
|
|
970
|
+
"environment": {
|
|
971
|
+
"type": "string",
|
|
972
|
+
"enum": ["development", "staging", "production", "ci"],
|
|
973
|
+
"description": "Target environment"
|
|
974
|
+
},
|
|
975
|
+
"chaosTypes": {
|
|
976
|
+
"type": "array",
|
|
977
|
+
"items": {
|
|
978
|
+
"type": "string",
|
|
979
|
+
"enum": ["network", "resource", "state", "application", "infrastructure", "byzantine"]
|
|
980
|
+
},
|
|
981
|
+
"description": "Types of chaos tested"
|
|
982
|
+
},
|
|
983
|
+
"tools": {
|
|
984
|
+
"type": "array",
|
|
985
|
+
"items": {
|
|
986
|
+
"type": "string",
|
|
987
|
+
"enum": ["chaos-monkey", "litmus", "gremlin", "chaos-mesh", "pumba", "toxiproxy", "tc", "stress-ng", "kubectl", "custom"]
|
|
988
|
+
},
|
|
989
|
+
"description": "Chaos tools used"
|
|
990
|
+
},
|
|
991
|
+
"blastRadiusLimit": {
|
|
992
|
+
"type": "string",
|
|
993
|
+
"enum": ["single-instance", "single-service", "multi-service", "zone", "region", "cluster"],
|
|
994
|
+
"description": "Maximum blast radius allowed"
|
|
995
|
+
},
|
|
996
|
+
"duration": {
|
|
997
|
+
"type": "integer",
|
|
998
|
+
"minimum": 0,
|
|
999
|
+
"description": "Total experiment window in minutes"
|
|
1000
|
+
},
|
|
1001
|
+
"progressionStrategy": {
|
|
1002
|
+
"type": "string",
|
|
1003
|
+
"enum": ["gradual", "immediate", "adaptive"],
|
|
1004
|
+
"description": "How experiments progress in intensity"
|
|
1005
|
+
}
|
|
1006
|
+
}
|
|
1007
|
+
},
|
|
1008
|
+
"artifact": {
|
|
1009
|
+
"type": "object",
|
|
1010
|
+
"required": ["type", "path"],
|
|
1011
|
+
"properties": {
|
|
1012
|
+
"type": {
|
|
1013
|
+
"type": "string",
|
|
1014
|
+
"enum": ["report", "runbook", "data", "log", "config", "diagram"],
|
|
1015
|
+
"description": "Artifact type"
|
|
1016
|
+
},
|
|
1017
|
+
"path": {
|
|
1018
|
+
"type": "string",
|
|
1019
|
+
"maxLength": 500,
|
|
1020
|
+
"description": "Path to artifact"
|
|
1021
|
+
},
|
|
1022
|
+
"format": {
|
|
1023
|
+
"type": "string",
|
|
1024
|
+
"enum": ["json", "yaml", "html", "md", "txt", "png", "svg"],
|
|
1025
|
+
"description": "Artifact format"
|
|
1026
|
+
},
|
|
1027
|
+
"description": {
|
|
1028
|
+
"type": "string",
|
|
1029
|
+
"maxLength": 500,
|
|
1030
|
+
"description": "Artifact description"
|
|
1031
|
+
},
|
|
1032
|
+
"sizeBytes": {
|
|
1033
|
+
"type": "integer",
|
|
1034
|
+
"minimum": 0,
|
|
1035
|
+
"description": "File size"
|
|
1036
|
+
}
|
|
1037
|
+
}
|
|
1038
|
+
},
|
|
1039
|
+
"timelineEvent": {
|
|
1040
|
+
"type": "object",
|
|
1041
|
+
"required": ["timestamp", "event"],
|
|
1042
|
+
"properties": {
|
|
1043
|
+
"timestamp": {
|
|
1044
|
+
"type": "string",
|
|
1045
|
+
"type": "string",
|
|
1046
|
+
"description": "Event timestamp"
|
|
1047
|
+
},
|
|
1048
|
+
"event": {
|
|
1049
|
+
"type": "string",
|
|
1050
|
+
"maxLength": 200,
|
|
1051
|
+
"description": "Event description"
|
|
1052
|
+
},
|
|
1053
|
+
"type": {
|
|
1054
|
+
"type": "string",
|
|
1055
|
+
"enum": ["start", "checkpoint", "inject", "observe", "recover", "rollback", "complete", "warning", "error"],
|
|
1056
|
+
"description": "Event type"
|
|
1057
|
+
},
|
|
1058
|
+
"experimentId": {
|
|
1059
|
+
"type": "string",
|
|
1060
|
+
"pattern": "^CHAOS-\\d{3,6}$",
|
|
1061
|
+
"description": "Related experiment ID"
|
|
1062
|
+
},
|
|
1063
|
+
"durationMs": {
|
|
1064
|
+
"type": "integer",
|
|
1065
|
+
"minimum": 0,
|
|
1066
|
+
"description": "Duration since previous event"
|
|
1067
|
+
}
|
|
1068
|
+
}
|
|
1069
|
+
},
|
|
1070
|
+
"metadata": {
|
|
1071
|
+
"type": "object",
|
|
1072
|
+
"properties": {
|
|
1073
|
+
"executionTimeMs": {
|
|
1074
|
+
"type": "integer",
|
|
1075
|
+
"minimum": 0,
|
|
1076
|
+
"maximum": 3600000,
|
|
1077
|
+
"description": "Total execution time"
|
|
1078
|
+
},
|
|
1079
|
+
"toolsUsed": {
|
|
1080
|
+
"type": "array",
|
|
1081
|
+
"items": {
|
|
1082
|
+
"type": "string",
|
|
1083
|
+
"enum": ["chaos-monkey", "litmus", "gremlin", "chaos-mesh", "pumba", "toxiproxy", "tc", "stress-ng", "kubectl", "custom"]
|
|
1084
|
+
},
|
|
1085
|
+
"uniqueItems": true,
|
|
1086
|
+
"description": "Chaos tools used"
|
|
1087
|
+
},
|
|
1088
|
+
"agentId": {
|
|
1089
|
+
"type": "string",
|
|
1090
|
+
"pattern": "^qe-[a-z][a-z0-9-]*$",
|
|
1091
|
+
"description": "Agent ID (e.g., qe-chaos-engineer)"
|
|
1092
|
+
},
|
|
1093
|
+
"modelUsed": {
|
|
1094
|
+
"type": "string",
|
|
1095
|
+
"description": "LLM model used"
|
|
1096
|
+
},
|
|
1097
|
+
"inputHash": {
|
|
1098
|
+
"type": "string",
|
|
1099
|
+
"pattern": "^[a-f0-9]{64}$",
|
|
1100
|
+
"description": "SHA-256 hash of input"
|
|
1101
|
+
},
|
|
1102
|
+
"targetPath": {
|
|
1103
|
+
"type": "string",
|
|
1104
|
+
"description": "Target system path"
|
|
1105
|
+
},
|
|
1106
|
+
"environment": {
|
|
1107
|
+
"type": "string",
|
|
1108
|
+
"enum": ["development", "staging", "production", "ci"],
|
|
1109
|
+
"description": "Execution environment"
|
|
1110
|
+
},
|
|
1111
|
+
"retryCount": {
|
|
1112
|
+
"type": "integer",
|
|
1113
|
+
"minimum": 0,
|
|
1114
|
+
"maximum": 10,
|
|
1115
|
+
"description": "Number of retries"
|
|
1116
|
+
}
|
|
1117
|
+
}
|
|
1118
|
+
},
|
|
1119
|
+
"validationResult": {
|
|
1120
|
+
"type": "object",
|
|
1121
|
+
"properties": {
|
|
1122
|
+
"schemaValid": {
|
|
1123
|
+
"type": "boolean",
|
|
1124
|
+
"description": "Passes schema validation"
|
|
1125
|
+
},
|
|
1126
|
+
"contentValid": {
|
|
1127
|
+
"type": "boolean",
|
|
1128
|
+
"description": "Passes content validation"
|
|
1129
|
+
},
|
|
1130
|
+
"confidence": {
|
|
1131
|
+
"type": "number",
|
|
1132
|
+
"minimum": 0,
|
|
1133
|
+
"maximum": 1,
|
|
1134
|
+
"description": "Confidence score"
|
|
1135
|
+
},
|
|
1136
|
+
"warnings": {
|
|
1137
|
+
"type": "array",
|
|
1138
|
+
"items": {
|
|
1139
|
+
"type": "string",
|
|
1140
|
+
"maxLength": 500
|
|
1141
|
+
},
|
|
1142
|
+
"maxItems": 20
|
|
1143
|
+
},
|
|
1144
|
+
"errors": {
|
|
1145
|
+
"type": "array",
|
|
1146
|
+
"items": {
|
|
1147
|
+
"type": "string",
|
|
1148
|
+
"maxLength": 500
|
|
1149
|
+
},
|
|
1150
|
+
"maxItems": 20
|
|
1151
|
+
},
|
|
1152
|
+
"validatorVersion": {
|
|
1153
|
+
"type": "string",
|
|
1154
|
+
"pattern": "^\\d+\\.\\d+\\.\\d+$"
|
|
1155
|
+
}
|
|
1156
|
+
}
|
|
1157
|
+
},
|
|
1158
|
+
"learningData": {
|
|
1159
|
+
"type": "object",
|
|
1160
|
+
"properties": {
|
|
1161
|
+
"patternsDetected": {
|
|
1162
|
+
"type": "array",
|
|
1163
|
+
"items": {
|
|
1164
|
+
"type": "string",
|
|
1165
|
+
"maxLength": 200
|
|
1166
|
+
},
|
|
1167
|
+
"maxItems": 20,
|
|
1168
|
+
"description": "Chaos patterns detected"
|
|
1169
|
+
},
|
|
1170
|
+
"reward": {
|
|
1171
|
+
"type": "number",
|
|
1172
|
+
"minimum": 0,
|
|
1173
|
+
"maximum": 1,
|
|
1174
|
+
"description": "Reward signal (0.0-1.0)"
|
|
1175
|
+
},
|
|
1176
|
+
"feedbackLoop": {
|
|
1177
|
+
"type": "object",
|
|
1178
|
+
"properties": {
|
|
1179
|
+
"previousRunId": {
|
|
1180
|
+
"type": "string",
|
|
1181
|
+
"type": "string"
|
|
1182
|
+
},
|
|
1183
|
+
"improvement": {
|
|
1184
|
+
"type": "number",
|
|
1185
|
+
"minimum": -1,
|
|
1186
|
+
"maximum": 1
|
|
1187
|
+
}
|
|
1188
|
+
}
|
|
1189
|
+
},
|
|
1190
|
+
"newResiliencePatterns": {
|
|
1191
|
+
"type": "array",
|
|
1192
|
+
"items": {
|
|
1193
|
+
"type": "object",
|
|
1194
|
+
"properties": {
|
|
1195
|
+
"pattern": { "type": "string" },
|
|
1196
|
+
"category": { "type": "string" },
|
|
1197
|
+
"confidence": { "type": "number" }
|
|
1198
|
+
}
|
|
1199
|
+
},
|
|
1200
|
+
"description": "New resilience patterns learned"
|
|
1201
|
+
}
|
|
1202
|
+
}
|
|
1203
|
+
}
|
|
1204
|
+
}
|
|
1205
|
+
}
|