mayhem-cli 0.9.1__tar.gz → 1.0.0__tar.gz
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.
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/CHANGELOG.md +348 -2
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/PKG-INFO +146 -11
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/README.md +145 -10
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/docs/README.md +29 -3
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/docs/config.md +24 -1
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/docs/drill-spec.md +603 -17
- mayhem_cli-1.0.0/docs/fault-catalog/reliability-matrix.md +118 -0
- mayhem_cli-1.0.0/docs/new-faults/OUTCOME.md +115 -0
- mayhem_cli-1.0.0/docs/new-faults/README.md +129 -0
- mayhem_cli-1.0.0/docs/new-faults/contract-checklist.md +210 -0
- mayhem_cli-1.0.0/docs/new-faults/wave-0-collisions.md +185 -0
- mayhem_cli-1.0.0/docs/new-faults/wave-1-params.md +122 -0
- mayhem_cli-1.0.0/docs/new-faults/wave-2-new-container.md +219 -0
- mayhem_cli-1.0.0/docs/new-faults/wave-3-no-primitive.md +103 -0
- mayhem_cli-1.0.0/docs/new-faults/wave-4-new-domains.md +158 -0
- mayhem_cli-1.0.0/docs/typing-ratchet.md +85 -0
- mayhem_cli-1.0.0/docs/v1.0.0/00-market-landscape.md +197 -0
- mayhem_cli-1.0.0/docs/v1.0.0/01-positioning.md +143 -0
- mayhem_cli-1.0.0/docs/v1.0.0/02-earn-maturity.md +145 -0
- mayhem_cli-1.0.0/docs/v1.0.0/03-steady-state-hypothesis.md +182 -0
- mayhem_cli-1.0.0/docs/v1.0.0/04-dry-run-and-quota.md +220 -0
- mayhem_cli-1.0.0/docs/v1.0.0/05-fault-packs.md +175 -0
- mayhem_cli-1.0.0/docs/v1.0.0/06-debt-and-quality.md +409 -0
- mayhem_cli-1.0.0/docs/v1.0.0/07-release-gates.md +159 -0
- mayhem_cli-1.0.0/docs/v1.0.0/08-withdrawal-audit.md +446 -0
- mayhem_cli-1.0.0/docs/v1.0.0/README.md +186 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/examples/k8s/mayhem.yaml +0 -1
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/examples/testCase/docker-compose.mayhem.yml +25 -19
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/examples/testCase/mayhem.yaml +83 -2
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/pyproject.toml +8 -1
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/scripts/verify_release_artifacts.py +7 -4
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/agents/executors.py +173 -71
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/agents/impact.py +91 -9
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/agents/k8s_control.py +7 -4
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/agents/k8s_resolve.py +80 -15
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/agents/lease_client.py +4 -4
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/campaign.py +66 -51
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/command_registry.py +7 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/coverage_cmd.py +1 -3
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/dependency.py +38 -5
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/doctor.py +1 -1
- mayhem_cli-1.0.0/src/mayhem/cli/execution.py +261 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/experiment.py +12 -6
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/expert.py +4 -3
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/explore.py +14 -14
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/extend.py +3 -3
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/game_day.py +18 -23
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/init.py +1 -1
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/inspect.py +105 -61
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/lifecycle.py +329 -28
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/next_cmd.py +18 -10
- mayhem_cli-1.0.0/src/mayhem/cli/pack.py +256 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/render.py +109 -21
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/resolver.py +6 -2
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/services.py +14 -5
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/toolkit.py +4 -5
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/topology.py +15 -10
- mayhem_cli-1.0.0/src/mayhem/cli/verify_bundle.py +142 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/workflows.py +1 -1
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/config.py +104 -79
- {mayhem_cli-0.9.1/src/mayhem/infra → mayhem_cli-1.0.0/src/mayhem/controller}/catalog_report.py +225 -51
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/controller/compensation.py +796 -41
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/controller/executor.py +72 -49
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/controller/explore_flow.py +8 -2
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/controller/k8s_runtime.py +5 -2
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/controller/plan_diff.py +4 -1
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/controller/preflight.py +187 -20
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/controller/recovery.py +8 -7
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/controller/resource_manager.py +30 -21
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/controller/safety.py +108 -4
- mayhem_cli-1.0.0/src/mayhem/controller/steady_state.py +1203 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/campaign_checkpoint.py +1 -1
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/cancellation.py +1 -1
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/capability_status.py +4 -2
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/catalog.py +391 -11
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/common.py +1 -1
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/coverage_graph.py +5 -3
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/evidence.py +5 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/evidence_bundle.py +66 -95
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/execution_context.py +11 -14
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/execution_intent.py +5 -11
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/experiments.py +82 -1
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/faults.py +51 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/game_day.py +15 -14
- {mayhem_cli-0.9.1/src/mayhem/toolkit → mayhem_cli-1.0.0/src/mayhem/domain}/hashing.py +11 -1
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/maniac.py +3 -1
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/observations.py +6 -2
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/preflight.py +1 -1
- mayhem_cli-1.0.0/src/mayhem/domain/quota.py +347 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/redaction.py +4 -2
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/runtime_adapter.py +29 -28
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/scenarios.py +122 -74
- mayhem_cli-1.0.0/src/mayhem/domain/steady_state.py +945 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/target_profiles.py +13 -44
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/campaign_checkpoint_repository.py +5 -4
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/campaign_engine.py +4 -2
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/coverage_repository.py +12 -14
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/diagnostics.py +8 -6
- mayhem_cli-1.0.0/src/mayhem/infra/engine_probe.py +58 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/evidence.py +7 -4
- mayhem_cli-1.0.0/src/mayhem/infra/evidence_bundle_io.py +74 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/game_day_repository.py +5 -4
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/kpi.py +4 -6
- mayhem_cli-1.0.0/src/mayhem/infra/promotion.py +1044 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/ranking.py +22 -14
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/replay_repository.py +6 -2
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/report.py +18 -2
- mayhem_cli-1.0.0/src/mayhem/infra/target_profile_io.py +69 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/observability/__init__.py +2 -2
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/observability/base.py +5 -6
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/observability/loki.py +1 -2
- mayhem_cli-1.0.0/src/mayhem/observability/metrics.py +310 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/observability/otel.py +2 -2
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/observability/prometheus.py +7 -8
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/providers/builtin.py +16 -10
- mayhem_cli-1.0.0/src/mayhem/providers/loader.py +1090 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/providers/observation.py +7 -4
- mayhem_cli-1.0.0/src/mayhem/providers/pack.py +347 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/providers/permissions.py +3 -8
- mayhem_cli-1.0.0/src/mayhem/toolkit/hashing.py +14 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/topology/providers/adapter_registry.py +3 -3
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/topology/providers/docker_adapter.py +11 -14
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/topology/providers/docker_runtime.py +52 -39
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/topology/providers/k8s_manifest.py +1 -1
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/topology/providers/podman_adapter.py +6 -15
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/topology/resolve.py +1 -1
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/e2e/test_cli_e2e.py +7 -6
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/integration/test_bundle_verifier.py +12 -17
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/integration/test_campaign_resume.py +3 -3
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/integration/test_coverage_delta.py +3 -1
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/integration/test_game_day_approval_flow.py +3 -1
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/integration/test_recovery_proof.py +9 -3
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/integration/test_slo_success_criteria.py +18 -4
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/package/test_wheel_smoke.py +5 -2
- mayhem_cli-1.0.0/tests/unit/test_baseline_from_cli.py +595 -0
- mayhem_cli-1.0.0/tests/unit/test_bundle_build_command.py +166 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_campaign_checkpoint.py +8 -14
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_capability_dashboard.py +6 -2
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_capability_truth.py +2 -5
- mayhem_cli-1.0.0/tests/unit/test_catalog_only_refusals.py +106 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli.py +4 -10
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli_active_surface.py +1 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli_campaign.py +0 -1
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli_execution.py +0 -1
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli_execution_intent.py +96 -37
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli_exhaustive_matrix.py +24 -4
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_command_inventory.py +2 -1
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_compensation.py +4 -1
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_config_target_profiles.py +2 -6
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_container_fault_matrix.py +7 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_coverage_graph.py +0 -1
- mayhem_cli-1.0.0/tests/unit/test_damage_quota.py +744 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_documentation_consistency.py +0 -2
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_drill_spec.py +18 -13
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_evidence_bundle.py +4 -8
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_execution_intent.py +3 -7
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_executor_admission.py +12 -12
- mayhem_cli-1.0.0/tests/unit/test_executor_undo_contract.py +156 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_expansion_checkpoint.py +15 -10
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_fault_catalog_all.py +3 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_fault_catalog_exhaustive.py +9 -9
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_fault_catalog_metadata.py +5 -5
- mayhem_cli-1.0.0/tests/unit/test_fault_pack_loading.py +812 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_fault_pack_validation.py +6 -10
- mayhem_cli-1.0.0/tests/unit/test_fault_params_wave1.py +294 -0
- mayhem_cli-1.0.0/tests/unit/test_fault_params_wave2_proxy.py +253 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_game_day.py +1 -4
- mayhem_cli-1.0.0/tests/unit/test_http_proxy_wire.py +208 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_impact_gate.py +143 -1
- mayhem_cli-1.0.0/tests/unit/test_import_contracts.py +437 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_k8s_manifest.py +1 -2
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_maniac.py +1 -1
- mayhem_cli-1.0.0/tests/unit/test_maturity_promotion.py +578 -0
- mayhem_cli-1.0.0/tests/unit/test_max_faults_deprecation.py +251 -0
- mayhem_cli-1.0.0/tests/unit/test_mypy_baseline.py +171 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_observability_connectors.py +8 -10
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_observation_contract.py +12 -2
- mayhem_cli-1.0.0/tests/unit/test_preflight_blast_radius.py +376 -0
- mayhem_cli-1.0.0/tests/unit/test_readme_honesty.py +712 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_release_contract.py +2 -7
- mayhem_cli-1.0.0/tests/unit/test_release_workflow_contract.py +24 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_replay_cli.py +2 -5
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_residual_impact.py +16 -15
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_runtime_context.py +14 -14
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_runtime_execution_matrix.py +14 -11
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_scenario_compiler.py +11 -6
- mayhem_cli-1.0.0/tests/unit/test_shell_quoting.py +303 -0
- mayhem_cli-1.0.0/tests/unit/test_steady_state_evaluator.py +1227 -0
- mayhem_cli-1.0.0/tests/unit/test_steady_state_metrics.py +309 -0
- mayhem_cli-1.0.0/tests/unit/test_steady_state_spec.py +1049 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_target_profiles.py +2 -6
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_target_profiles_config.py +2 -5
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_v090_edge_cases.py +21 -19
- mayhem_cli-1.0.0/tests/unit/test_withdrawal_asset.py +123 -0
- mayhem_cli-0.9.1/.github/workflows/ci.yml +0 -146
- mayhem_cli-0.9.1/docs/fault-catalog/reliability-matrix.md +0 -64
- mayhem_cli-0.9.1/examples/testCase/mayhem-safe-docker-podman.yaml +0 -50
- mayhem_cli-0.9.1/src/mayhem/cli/execution.py +0 -143
- mayhem_cli-0.9.1/src/mayhem/cli/verify_bundle.py +0 -70
- mayhem_cli-0.9.1/src/mayhem/providers/loader.py +0 -396
- mayhem_cli-0.9.1/src/mayhem/providers/pack.py +0 -195
- mayhem_cli-0.9.1/tests/unit/test_ci_workflow_contract.py +0 -44
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/.coverage +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/.github/workflows/conformance.yml +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/.github/workflows/release.yml +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/.gitignore +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/Justfile +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/cliff.toml +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/docs/compensation.md +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/docs/fault-catalog/README.md +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/examples/k8s/README.md +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/examples/k8s/kubernetes.yaml +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/examples/providers/test-catalog.json +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/examples/providers/test_provider.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/examples/testCase/data/hello.txt +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/examples/testCase/data/index.html +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/examples/testCase/docker-compose.yml +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/examples/testCase/nginx.conf +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/__main__.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/agent/__init__.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/agent/cli.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/agents/__init__.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/agents/capabilities.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/agents/probes.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/agents/protocol.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/agents/server.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/agents/sinks.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/agents/transports.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/agents/watchdog.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/__init__.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/app.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/commands.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/completion.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/config_cmd.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/context.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/errors.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/exit_codes.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/output.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/renderers.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/style.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/controller/__init__.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/controller/cell_runner.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/controller/janitor.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/controller/observability_collector.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/controller/observations.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/controller/planner.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/controller/resilience_report.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/controller/target_selector.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/__init__.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/admission.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/campaigns.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/candidates.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/capabilities.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/cell_rules.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/checks.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/coverage.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/decisions.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/errors.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/events.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/execution_loci.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/identity.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/k8s_adapter.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/leases.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/load_strategy.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/m5_campaign.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/observability.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/outcomes.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/policy.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/provider.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/remote_agent_interface.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/replay.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/residual_impact.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/resolution.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/resources.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/risks.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/run_outcome.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/runtime_context.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/success.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/target.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/target_selector.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/topology.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/__init__.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/candidate_gates.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/candidate_generator.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/lease_repository.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/maniac.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/migrations.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/migrator.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/project_detection.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/store.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/providers/__init__.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/providers/protocols.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/providers/registry.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/py.typed +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/schemas/output_v1.json +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/spec.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/toolkit/__init__.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/toolkit/fingerprint.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/toolkit/manifests/docker.yaml +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/toolkit/manifests/podman.yaml +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/toolkit/manifests/stress-ng.yaml +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/toolkit/manifests/tc-netem.yaml +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/toolkit/manifests/toxiproxy.yaml +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/toolkit/registry.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/toolkit/tool_runner.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/topology/__init__.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/topology/providers/__init__.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/topology/providers/base.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/topology/providers/compose.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/topology/providers/kubernetes.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/topology/service.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/conftest.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/e2e/__init__.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/fixtures/cli/commands_show.json +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/fixtures/cli/coverage.json +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/fixtures/cli/doctor.json +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/integration/test_agent_serve.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/integration/test_agent_watchdog_e2e.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/integration/test_artifact_secret_sweep.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/integration/test_evidence_degradation.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/integration/test_m5_e2e.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/integration/test_observability_run.py +2 -2
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/integration/test_replay_roundtrip.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/integration/test_scenario_plan_replay.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/integration/test_store.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_accept_criteria.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_action_outcome_contract.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_additive_schema.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_agent_capabilities.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_agent_protocol.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_agents.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_campaign_run.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_campaigns.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cancellation.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_candidates.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_capability_matrix.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_capability_registry.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_capability_safety.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cell_rules.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cell_runner.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_check_spec.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli_completion.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli_config.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli_contract.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli_doctor.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli_errors.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli_exit_codes.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli_extend.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli_init.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli_output.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli_renderers.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli_resolver.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli_topology.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli_user_regressions.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_command_registry.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_config.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_coverage.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_coverage_repository.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_diagnostics.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_diagnostics_target_profiles.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_domain_properties.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_example_specs_yaml.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_execution_context.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_executor.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_executor_drill.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_fault_expansion_catalog.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_fault_expansion_container.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_fault_expansion_kubernetes.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_faults.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_fingerprint.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_fork_atomicity.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_janitor.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_k8s_cli.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_k8s_discovery.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_k8s_plan1.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_k8s_plan2.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_k8s_selection.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_kpi.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_kplan1_targets.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_kplan2_topology.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_kplan3_resolver.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_kplan3_runtime.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_kplan5_runtime.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_kplan6_runtime.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_lease_repository.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_leases.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_lifecycle_run_liveness.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_load_strategy.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_m12_step1_catalog.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_m7_k8s.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_m8_operations.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_m9_catalog.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_migrations.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_network_path_model.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_observability.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_observations.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_plan_diff.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_planner.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_policy_explain.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_preflight.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_provider_loader.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_provider_permissions.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_provider_registry.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_ranking.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_recovery.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_redaction_boundary.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_replay_capsule.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_report.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_resilience_report.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_resolve.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_resource_conflict_exec.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_resource_manager.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_resources.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_risks.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_run_outcome.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_runtime_adapter.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_safety.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_selection_modes.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_success.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_three_locus.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_tool_runner.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_topology.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_topology_ctr.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_topology_providers.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_v090_docs_contract.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_watchdog.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_workflow_groups.py +0 -0
- {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/uv.lock +0 -0
|
@@ -11,12 +11,358 @@ by conventional-commit type — see the phase map below.
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
|
|
14
|
+
### 🚀 Features
|
|
15
|
+
|
|
16
|
+
- **faults**: Wire the db.query_error error param and widen six param sets
|
|
17
|
+
|
|
18
|
+
- **faults**: Add four container-lane faults (thread/child/conn exhaustion, fs corruption)
|
|
19
|
+
|
|
20
|
+
- **faults**: Add three net and five proxy-backed faults
|
|
21
|
+
|
|
22
|
+
- **faults**: Wave 3 refusals, outcome record, and docs for the new faults
|
|
23
|
+
|
|
24
|
+
- **catalog**: Add maturity promotion reporting
|
|
25
|
+
|
|
26
|
+
- **evidence**: Add canonical hashing utilities
|
|
27
|
+
|
|
28
|
+
- **evidence**: Harden portable bundle contract
|
|
29
|
+
|
|
30
|
+
- **evidence**: Add bundle persistence and verification
|
|
31
|
+
|
|
32
|
+
- **config**: Add steady-state and damage-quota drill fields
|
|
33
|
+
|
|
34
|
+
- **observability**: Add steady-state metric measurement
|
|
35
|
+
|
|
36
|
+
- **steady-state**: Add baseline capture and phase evaluation
|
|
37
|
+
|
|
38
|
+
- **cli**: Add steady-state and preflight reporting
|
|
39
|
+
|
|
40
|
+
- **preflight**: Add blast-radius quota and safety gates
|
|
41
|
+
|
|
42
|
+
- **controller**: Harden compensation and recovery flows
|
|
43
|
+
|
|
44
|
+
- **providers**: Harden pack loading and registration
|
|
45
|
+
|
|
46
|
+
- **cli**: Add pack and bundle producer commands
|
|
47
|
+
|
|
48
|
+
- **cli**: Register command and extension surfaces
|
|
49
|
+
|
|
50
|
+
- **runtime**: Centralize engine detection and selection
|
|
51
|
+
|
|
52
|
+
- **cli**: Refine campaign, coverage, and scenario commands
|
|
53
|
+
|
|
54
|
+
- **cli**: Harden residual impact inspection
|
|
55
|
+
|
|
56
|
+
- **config**: Add layered target-profile configuration
|
|
57
|
+
|
|
58
|
+
- **domain**: Expand scenario and game-day models
|
|
59
|
+
|
|
60
|
+
- **catalog**: Define maturity evidence levels
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
### 🐛 Bug Fixes
|
|
65
|
+
|
|
66
|
+
- **dependency**: Stop reporting an inert fault as a tooling gap
|
|
67
|
+
|
|
68
|
+
- **dependency**: Report unreachable containers instead of calling them clean
|
|
69
|
+
|
|
70
|
+
- **k8s**: Harden pod and node resolution at runtime
|
|
71
|
+
|
|
72
|
+
- **executor**: Enforce admission and undo contracts
|
|
73
|
+
|
|
74
|
+
- **topology**: Harden container engine providers
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
### 💼 Other
|
|
79
|
+
|
|
80
|
+
- Delete .github/workflows/ci.yml
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
### 🚜 Refactor
|
|
85
|
+
|
|
86
|
+
- Ruff fix and format
|
|
87
|
+
|
|
88
|
+
- **domain**: Tighten execution and safety model types
|
|
89
|
+
|
|
90
|
+
- **infra**: Tighten persistence and reporting types
|
|
91
|
+
|
|
92
|
+
- **controller**: Type the explore approval gate
|
|
93
|
+
|
|
94
|
+
- **cli**: Sync command help with the grouped CLI paths
|
|
95
|
+
|
|
96
|
+
- **init**: Stop emitting the unenforced max_faults cap
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
### 📚 Documentation
|
|
101
|
+
|
|
102
|
+
- **new-faults**: Implementation plan for the 72 requested fault ids
|
|
103
|
+
|
|
104
|
+
- Document wave-1 fault params and correct the max_faults claim
|
|
105
|
+
|
|
106
|
+
- Publish v1.0.0 product and release documentation
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
### 🎨 Styling
|
|
111
|
+
|
|
112
|
+
- **tests**: Apply formatter output to test suite
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
### 🧪 Testing
|
|
117
|
+
|
|
118
|
+
- Ci removed and some fixes
|
|
119
|
+
|
|
120
|
+
- Add typing baseline and release contract coverage
|
|
121
|
+
|
|
122
|
+
- **spec**: Cover the max_faults deprecation warning
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
### ⚙️ Miscellaneous Tasks
|
|
127
|
+
|
|
128
|
+
- **examples**: Cover every executable podman/docker fault in testCase drill
|
|
129
|
+
|
|
130
|
+
- **release**: Update v1.0.0 changelog and metadata
|
|
131
|
+
|
|
132
|
+
- **examples**: Drop the unreferenced safe-docker-podman drill
|
|
133
|
+
|
|
134
|
+
- **examples**: Install net and shell tooling in the testCase compose
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
## 1.0.0 - 2026-09-29
|
|
138
|
+
|
|
139
|
+
### ⚠ Breaking changes
|
|
140
|
+
|
|
141
|
+
- **`db.slow_query` now defaults to `mode: latency` (netem).** It previously
|
|
142
|
+
shipped an `iptables DROP` as its default behaviour, so a plan that relied on
|
|
143
|
+
the default was silently injecting packet loss rather than latency. The
|
|
144
|
+
blackhole behaviour is still available, but it must now be asked for
|
|
145
|
+
explicitly with `mode: timeout`. Existing specs that want a drop must add the
|
|
146
|
+
parameter; existing specs that want latency are now correct by default for the
|
|
147
|
+
first time.
|
|
148
|
+
- **Nine `catalog_only` entries are new refusals** (thirteen in the catalog
|
|
149
|
+
today). These fault ids parse, plan, and refuse before mutation instead of
|
|
150
|
+
reaching an executor. A plan that names one is now rejected at compile time;
|
|
151
|
+
a plan that ran under 0.9.x will not run now. The refusal text names the
|
|
152
|
+
mechanism mayhem does not have and points at a documented alternative — the
|
|
153
|
+
refusal is the deliverable, not a placeholder.
|
|
154
|
+
- **`mayhem p` no longer resolves.** The `pack` command made the `p` prefix
|
|
155
|
+
ambiguous, so a bare `mayhem p` invocation now exits `ambiguous_command`
|
|
156
|
+
(exit code 10) and names both candidates. Scripts using the `p` prefix must
|
|
157
|
+
move to `mayhem pre` or `mayhem prep` (both resolve to `prepare`), or spell
|
|
158
|
+
the command out in full.
|
|
159
|
+
- **`blast_radius.forbidden_fault_pairs` now actually fires.** It was silently
|
|
160
|
+
inert: the check compared a `frozenset` of *all* faults seen so far against
|
|
161
|
+
two-element forbidden pairs, so it matched on a two-fault plan by accident and
|
|
162
|
+
matched nothing on any plan of three or more faults. It is now evaluated
|
|
163
|
+
against each `{earlier, new}` pair, which makes it complete — a plan
|
|
164
|
+
containing a forbidden pair is refused no matter where the pair sits in the
|
|
165
|
+
ordering. **This is the most important item in this release: a safety rule
|
|
166
|
+
that used to be decorative is now load-bearing, and plans that ran under
|
|
167
|
+
0.9.x may now be refused.** A safety setting you configured and believed was
|
|
168
|
+
protecting you was not.
|
|
169
|
+
- **`blast_radius.damage_quota` is a new cumulative gate.** The five existing
|
|
170
|
+
`blast_radius` limits are per-step. `damage_quota` is the first budget that
|
|
171
|
+
sees the *sequence*: it charges damage-seconds per target across the whole
|
|
172
|
+
plan and refuses when the cumulative total exceeds `budget_s`, or when any one
|
|
173
|
+
target's total exceeds `per_fault_ceiling_s`, within `window_s`. A plan whose
|
|
174
|
+
every individual step passes the other five limits can now still be refused
|
|
175
|
+
for its total. It is active by default (14400 s budget, 3600 s per-fault
|
|
176
|
+
ceiling, 7-day window) rather than opt-in.
|
|
177
|
+
|
|
178
|
+
### 📚 Documentation
|
|
179
|
+
|
|
180
|
+
- State plainly in the README that mayhem has **no kernel/BPF fault injection**,
|
|
181
|
+
and name the thirteen `catalog_only` faults and the mechanism each one lacks.
|
|
182
|
+
- State that **0 of 141** catalog faults are `verified-live`, and that
|
|
183
|
+
`verified-unit` is a claim about mayhem's own parameter, refusal, and
|
|
184
|
+
compensation code rather than evidence that a fault works.
|
|
185
|
+
- Correct the two places the documentation called a fault pack *signed*. The
|
|
186
|
+
pack format declares a `signature: str` with no key, no algorithm, and no
|
|
187
|
+
trust store; a loader now enforces a SHA-256 *integrity* digest and reports
|
|
188
|
+
`signature NOT VERIFIED`. Authorship is an unverified claim.
|
|
189
|
+
- Add intra-document **anchor** validation. The documentation-consistency test
|
|
190
|
+
validated link *paths* only, so a Markdown link with a bare `#fragment`
|
|
191
|
+
target was invisible to it and a dangling anchor shipped unnoticed.
|
|
192
|
+
- Correct the README claim that `max_faults` caps simultaneous faults. No gate
|
|
193
|
+
reads it; `blast_radius.max_concurrent_faults` is the control that refuses.
|
|
194
|
+
- Document `blast_radius.damage_quota` in the configuration reference.
|
|
195
|
+
|
|
196
|
+
### 🛡 Fixed
|
|
197
|
+
|
|
198
|
+
- `blast_radius.forbidden_fault_pairs` now evaluates each `{earlier, new}` pair
|
|
199
|
+
instead of the set of all faults so far (see the breaking change above).
|
|
200
|
+
|
|
201
|
+
### 📦 Documentation index
|
|
202
|
+
|
|
203
|
+
- The 1.0.0 section above is **hand-written** because the breaking changes are
|
|
204
|
+
not derivable from commit subjects. `git-cliff` regenerates this file from
|
|
205
|
+
git history and will not reproduce it; re-add the section after any
|
|
206
|
+
regeneration.
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
## 0.9.1 - 2026-09-27
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
### 🚀 Features
|
|
215
|
+
|
|
216
|
+
- **cli**: Add mayhem completion to print bash/zsh/fish completion scripts
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
### 🐛 Bug Fixes
|
|
221
|
+
|
|
222
|
+
- **cli**: Emit Click's real completion script instead of a broken wrapper
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
### 💼 Other
|
|
227
|
+
|
|
228
|
+
- Old hanging docs >/dev/null
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
### 📚 Documentation
|
|
233
|
+
|
|
234
|
+
- Prune superseded doc packages and their now-dangling links
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
## 0.9.0 - 2026-09-26
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
### 🚀 Features
|
|
242
|
+
|
|
243
|
+
- Resolve one runtime context per plan
|
|
244
|
+
|
|
245
|
+
- Require explicit execution intent
|
|
246
|
+
|
|
247
|
+
- Integrate target profiles into configuration
|
|
248
|
+
|
|
249
|
+
- Expose capability truth for every fault
|
|
250
|
+
|
|
251
|
+
- Persist replayable run capsules
|
|
252
|
+
|
|
253
|
+
- Enforce one evidence redaction boundary
|
|
254
|
+
|
|
255
|
+
- Render action outcomes in human evidence output
|
|
256
|
+
|
|
257
|
+
- Close v0.9.0 core gaps (redaction metrics, admission ordering, replay CLI)
|
|
258
|
+
|
|
259
|
+
- Add capability truth dashboard
|
|
260
|
+
|
|
261
|
+
- Add resilience coverage graph
|
|
262
|
+
|
|
263
|
+
- Add provider-neutral SLO observations
|
|
264
|
+
|
|
265
|
+
- Compile variable-driven scenarios
|
|
266
|
+
|
|
267
|
+
- Add resumable campaign checkpoints
|
|
268
|
+
|
|
269
|
+
- Verify residual impact after compensation
|
|
270
|
+
|
|
271
|
+
- Add controlled game-day sessions
|
|
272
|
+
|
|
273
|
+
- Sandbox providers and fault packs
|
|
274
|
+
|
|
275
|
+
- Add observability connectors
|
|
276
|
+
|
|
277
|
+
- Add mayhem --version and a module entry point
|
|
278
|
+
|
|
279
|
+
- Add portable evidence bundle verification
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
### 🐛 Bug Fixes
|
|
284
|
+
|
|
285
|
+
- Close release truth drift
|
|
286
|
+
|
|
287
|
+
- Close runtime context propagation gaps
|
|
288
|
+
|
|
289
|
+
- Harden runtime context compatibility
|
|
290
|
+
|
|
291
|
+
- Close execution intent safety gaps
|
|
292
|
+
|
|
293
|
+
- Enforce dry-run precedence for mutations
|
|
294
|
+
|
|
295
|
+
- Make implicit intent evidence honest
|
|
296
|
+
|
|
297
|
+
- Unify target profile overlay resolution
|
|
298
|
+
|
|
299
|
+
- Align config and intent test contracts
|
|
300
|
+
|
|
301
|
+
- Admit typed targets before mutation
|
|
302
|
+
|
|
303
|
+
- Make unsupported actions honest
|
|
304
|
+
|
|
305
|
+
- Enforce redaction at the artifact write boundary
|
|
306
|
+
|
|
307
|
+
- Repair CI gates (duplicate import, e2e capability contract, format fallback)
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
|
|
14
311
|
### 📚 Documentation
|
|
15
312
|
|
|
16
313
|
- Add v0.9.0 roadmap and implementation plans
|
|
17
314
|
|
|
18
|
-
- Establish
|
|
19
|
-
|
|
315
|
+
- Establish v0.9.0 release truth baseline
|
|
316
|
+
|
|
317
|
+
- Mark v0.9.0 task 1 complete
|
|
318
|
+
|
|
319
|
+
- Mark v0.9.0 task 2 complete
|
|
320
|
+
|
|
321
|
+
- Mark v0.9.0 task 3 implemented
|
|
322
|
+
|
|
323
|
+
- Mark v0.9.0 task 4 complete
|
|
324
|
+
|
|
325
|
+
- Mark v0.9.0 task 5 complete
|
|
326
|
+
|
|
327
|
+
- Mark v0.9.0 task 6 implemented
|
|
328
|
+
|
|
329
|
+
- Mark v0.9.0 task 7 implemented
|
|
330
|
+
|
|
331
|
+
- Mark v0.9.0 task 8 complete
|
|
332
|
+
|
|
333
|
+
- Mark v0.9.0 task 9 implemented
|
|
334
|
+
|
|
335
|
+
- Mark v0.9.0 task 10 implemented
|
|
336
|
+
|
|
337
|
+
- Record v0.9.0 core gate results
|
|
338
|
+
|
|
339
|
+
- Close the v0.9.0 core checkpoint
|
|
340
|
+
|
|
341
|
+
- Record final v0.9.0 gate results
|
|
342
|
+
|
|
343
|
+
- Record the green CI run and the wheel smoke result
|
|
344
|
+
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
### 🧪 Testing
|
|
348
|
+
|
|
349
|
+
- Verify the v0.9.0 expansion checkpoint
|
|
350
|
+
|
|
351
|
+
- Make e2e topology discovery deterministic across hosts
|
|
352
|
+
|
|
353
|
+
- Cover v0.9.0 edge cases and pin the docs to the schema
|
|
354
|
+
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
### ⚙️ Miscellaneous Tasks
|
|
358
|
+
|
|
359
|
+
- Simplify runtime engine typing
|
|
360
|
+
|
|
361
|
+
- Add v0.9.0 quality gates
|
|
362
|
+
|
|
363
|
+
- Add schema and manual conformance gates
|
|
364
|
+
|
|
365
|
+
- Install uv in the wheel smoke job and assert --version from the wheel
|
|
20
366
|
|
|
21
367
|
|
|
22
368
|
## 0.8.0 - 2026-09-25
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: mayhem-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 1.0.0
|
|
4
4
|
Summary: General-purpose chaos engineering and resilience-testing framework: a chaos experiment orchestration engine.
|
|
5
5
|
Author: Mayhem Engineering
|
|
6
6
|
License: Proprietary
|
|
@@ -39,11 +39,12 @@ compose blueprint ─▶ topology graph ─▶ compile drill spec ─▶ frozen
|
|
|
39
39
|
SQLite evidence + decision trace
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
+
- [What mayhem cannot do](#what-mayhem-cannot-do)
|
|
42
43
|
- [Quickstart](#quickstart)
|
|
43
44
|
- [A Run in One Screen](#a-run-in-one-screen)
|
|
44
45
|
- [Authoring a Drill](#authoring-a-drill)
|
|
45
46
|
- [Configuration](#configuration)
|
|
46
|
-
- [CLI
|
|
47
|
+
- [CLI surface](#cli-surface)
|
|
47
48
|
- [Campaigns](#campaigns)
|
|
48
49
|
- [What's new in v0.9.0](#whats-new-in-v090)
|
|
49
50
|
- [Safety Model](#safety-model)
|
|
@@ -54,6 +55,120 @@ compose blueprint ─▶ topology graph ─▶ compile drill spec ─▶ frozen
|
|
|
54
55
|
|
|
55
56
|
---
|
|
56
57
|
|
|
58
|
+
## What mayhem cannot do
|
|
59
|
+
|
|
60
|
+
Read this before you evaluate mayhem against a kernel-level chaos tool. The
|
|
61
|
+
three limits below are structural: no configuration reaches them, and none is a
|
|
62
|
+
roadmap item pretending to be a setting.
|
|
63
|
+
|
|
64
|
+
### There is no kernel or eBPF fault injection
|
|
65
|
+
|
|
66
|
+
Mayhem has **no eBPF injection, no kernel module, and no in-kernel fault
|
|
67
|
+
primitive of its own**. There is no `bcc`, no `libbpf`, and no eBPF program
|
|
68
|
+
type anywhere under `src/`. Mayhem loads no code into the kernel and depends on
|
|
69
|
+
no kernel feature that a stock install does not already provide.
|
|
70
|
+
|
|
71
|
+
The whole injection substrate is userspace plus already-compiled kernel
|
|
72
|
+
configuration:
|
|
73
|
+
|
|
74
|
+
| Mechanism | Used for |
|
|
75
|
+
|-----------|----------|
|
|
76
|
+
| `tc qdisc … netem` | `net.*` latency / loss / duplication / reordering, and `db.slow_query` |
|
|
77
|
+
| `toxiproxy` | `dependency.*` and `http.*` request and response shaping |
|
|
78
|
+
| container-engine cgroup knobs (`docker` / `podman update`) | `cpu.throttle`, `mem.exhaust` |
|
|
79
|
+
| userspace allocators, writers, and file manipulation | `cpu.saturate`, `mem.*`, `fs.*`, `fd.exhaust` |
|
|
80
|
+
| the Kubernetes API | every `k8s.*` fault |
|
|
81
|
+
| `nsenter` into an existing network namespace | node- and pod-scoped `tc` |
|
|
82
|
+
|
|
83
|
+
`tc`/netem configures a qdisc that is **already compiled into the kernel**. It
|
|
84
|
+
is a traffic-shaping control, not an instrumentation program. That is the
|
|
85
|
+
closest mayhem comes to the kernel, and it is a category away from Chaos Mesh's
|
|
86
|
+
eBPF layer, which attaches a program to a running process and can block one
|
|
87
|
+
syscall, corrupt one page, or stall one `write` while everything else in the
|
|
88
|
+
process keeps running.
|
|
89
|
+
|
|
90
|
+
**If your failure model lives below the syscall boundary, mayhem cannot inject
|
|
91
|
+
it.** A fault that must be a specific `write` returning a specific `errno`, a
|
|
92
|
+
specific page corrupted in a specific process, or a specific syscall blocked
|
|
93
|
+
while the rest of the process stays healthy, is out of scope for mayhem's
|
|
94
|
+
substrate — not unimplemented, *unsupported*.
|
|
95
|
+
|
|
96
|
+
Thirteen catalog entries are `catalog_only` for exactly this reason. Mayhem has
|
|
97
|
+
no primitive to inject them, and their refusal text is the feature: it names the
|
|
98
|
+
missing mechanism instead of quietly substituting a weaker fault.
|
|
99
|
+
|
|
100
|
+
| Fault | The mechanism mayhem does not have |
|
|
101
|
+
|-------|------------------------------------|
|
|
102
|
+
| `app.deadlock` | a true lock cycle cannot be imposed from outside the process |
|
|
103
|
+
| `app.exception` | in-process bytecode injection, `ptrace`, or `/proc/<pid>/mem` patching |
|
|
104
|
+
| `clock.freeze` | a `libfaketime` preload or `CLOCK_REALTIME` interception |
|
|
105
|
+
| `cpu.interrupt_storm` | IRQ/softirq control via `/proc/interrupts` or RPS/RFS tuning |
|
|
106
|
+
| `cpu.steal` | hypervisor / host-scheduler control (KVM) |
|
|
107
|
+
| `fs.permission_failure` | a permission-preserving executor |
|
|
108
|
+
| `fs.read_error` | a device-mapper error target, or a FUSE shim needing `SYS_ADMIN` and a loop device |
|
|
109
|
+
| `mem.fragment` | buddy-allocator, `MADV_FREE`, or hugepage control |
|
|
110
|
+
| `mem.oom_kill` | an irreversible kill with no supervisor, which the compensation contract forbids |
|
|
111
|
+
| `process.oom_kill` | likewise; `mem.exhaust` deliberately caps at 95% of the cgroup limit |
|
|
112
|
+
| `process.startup_delay` | an application-aware readiness hook |
|
|
113
|
+
| `dependency.malformed_response` | a protocol-aware response proxy |
|
|
114
|
+
| `k8s.image_pull_slow` | a registry-pacing runtime |
|
|
115
|
+
|
|
116
|
+
Every one of these is discoverable rather than hidden: `mayhem discover faults
|
|
117
|
+
-e FAULT_ID` prints the refusal and the suggested alternative. Note that
|
|
118
|
+
`k8s.*` faults have a separate, independent limitation — the Kubernetes
|
|
119
|
+
executor and resolver seams exist in source but no live cluster acceptance is
|
|
120
|
+
claimed anywhere. See [Kubernetes status](#kubernetes-status).
|
|
121
|
+
|
|
122
|
+
### No fault in this repository is `verified-live`
|
|
123
|
+
|
|
124
|
+
`verified-unit` is a claim about **mayhem's own code**, not about the fault
|
|
125
|
+
working. It means that fault id's parameter grammar, refusal path, and
|
|
126
|
+
compensation contract are deterministic and covered by recorded unit evidence.
|
|
127
|
+
It says nothing about whether the fault has ever perturbed a running system.
|
|
128
|
+
Of the **141** catalog faults, **128** are `verified-unit` and **13** are
|
|
129
|
+
`experimental`. **0 of 141 are `verified-live`**, and none is `stable`.
|
|
130
|
+
Reading `verified-unit` as "this works" is a misreading, and this README
|
|
131
|
+
previously invited it.
|
|
132
|
+
|
|
133
|
+
`verified-live` is earned only from a recorded live-run record: an injected
|
|
134
|
+
effect that moved a signal, an undo that actually ran, and a probe that
|
|
135
|
+
confirmed the pre-injection baseline was restored within tolerance, on the
|
|
136
|
+
required engines. An empty evidence store yields zero live-verified faults —
|
|
137
|
+
there is no "presumed live" default, no flag, and no code path that grants the
|
|
138
|
+
level without a record. None of them is reachable in this repository today.
|
|
139
|
+
|
|
140
|
+
The reported maturity level is **derived at read time** from the evidence
|
|
141
|
+
store, not stamped onto the catalog entry. Delete the evidence for a fault and
|
|
142
|
+
its reported level drops with it. Two consequences follow, and both are
|
|
143
|
+
statements about what mayhem has *not* done. The absence of
|
|
144
|
+
`verified-live` across the whole catalog — 0 of 141 — is a **missing**
|
|
145
|
+
verification program, not a **failed** one: nothing here has been shown to work
|
|
146
|
+
against a real system, and nothing has been shown not to. And because the
|
|
147
|
+
derived level is only ever a function of recorded evidence, a fault that drops
|
|
148
|
+
to `verified-unit` is saying that mayhem's own parameter, refusal, and
|
|
149
|
+
compensation code is still deterministic — **not** that the fault works. The
|
|
150
|
+
`experimental` and `verified-unit` populations together are a catalogue of
|
|
151
|
+
contracts, not a reliability claim.
|
|
152
|
+
|
|
153
|
+
### Fault packs are integrity-checked, not signed
|
|
154
|
+
|
|
155
|
+
The pack format carries a `signature: str` and a `signer: str` with **no public
|
|
156
|
+
key, no key id, no algorithm identifier, and no trust store**, and no
|
|
157
|
+
signature-verification dependency is in the build. Mayhem therefore **cannot
|
|
158
|
+
verify a pack signature**. What the field holds is an assertion of authorship by
|
|
159
|
+
whoever wrote the file — the same trust a comment carries. Every pack fault's
|
|
160
|
+
refusal names its signer as an unverified *claim*, and every pack verdict
|
|
161
|
+
reports `signature NOT VERIFIED`.
|
|
162
|
+
|
|
163
|
+
What a pack can prove is **integrity**: `declared_digest` is a SHA-256 over the
|
|
164
|
+
canonical pack document and the loader checks it against the bytes on disk.
|
|
165
|
+
That detects tampering. It says nothing about who wrote the pack, and the two
|
|
166
|
+
axes are never collapsed into one "verified" flag. Because authorship is an
|
|
167
|
+
unverified claim, do not describe a mayhem fault pack as signed, verified, or
|
|
168
|
+
trusted.
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
57
172
|
## Quickstart
|
|
58
173
|
|
|
59
174
|
**Prerequisites**
|
|
@@ -158,6 +273,8 @@ hypothesis: "checkout stays available while cart writes are throttled"
|
|
|
158
273
|
|
|
159
274
|
config:
|
|
160
275
|
risk_ceiling: high
|
|
276
|
+
# Declared but not enforced — no gate reads it. The real budget is
|
|
277
|
+
# blast_radius.max_concurrent_faults in mayhem.yaml.
|
|
161
278
|
max_faults: 1
|
|
162
279
|
timeout: 30m
|
|
163
280
|
recovery: true
|
|
@@ -220,6 +337,10 @@ blast_radius:
|
|
|
220
337
|
max_concurrent_faults: 3
|
|
221
338
|
max_duration_per_fault_s: 300.0
|
|
222
339
|
forbidden_fault_pairs: [] # pairs such as [net.packet_loss, net.bandwidth]
|
|
340
|
+
damage_quota: # cumulative damage-seconds across the whole plan
|
|
341
|
+
budget_s: 14400.0
|
|
342
|
+
per_fault_ceiling_s: 3600.0
|
|
343
|
+
window_s: 604800.0
|
|
223
344
|
storage:
|
|
224
345
|
path: mayhem.db
|
|
225
346
|
artifacts_dir: .mayhem/artifacts
|
|
@@ -269,9 +390,10 @@ Root options precede the command. Unique prefixes work at the root and in the wo
|
|
|
269
390
|
| Command group | Purpose |
|
|
270
391
|
|---------------|---------|
|
|
271
392
|
| `mayhem discover` | Discover topology, engines, faults, and capabilities. |
|
|
393
|
+
| `mayhem pack` | Validate and load a fault pack. **Integrity-checked only — the pack format declares no key, no algorithm, and no trust store, so authorship is an unverified claim and every verdict reports `signature NOT VERIFIED`.** See [Fault packs are integrity-checked, not signed](#fault-packs-are-integrity-checked-not-signed). |
|
|
272
394
|
| `mayhem prepare` | Validate configuration, prepare dependencies, and compile plans. |
|
|
273
395
|
| `mayhem experiment` | Show, validate, and explore authored experiments. |
|
|
274
|
-
| `mayhem run`, `mayhem maniac` | Execute authored or randomized drills. |
|
|
396
|
+
| `mayhem run`, `mayhem maniac` | Execute authored or randomized drills. A drill's `steady_state:` block is graded against a previous run's captured baseline with `--baseline-from RUN_ID`; the report names the reference it was measured against, and a run id with nothing recorded is refused rather than silently re-baselined. |
|
|
275
397
|
| `mayhem inspect` | Inspect runs, history, coverage, next actions, leases, and diagnostics. |
|
|
276
398
|
| `mayhem recover`, `mayhem janitor` | Recover runs and clean leases. |
|
|
277
399
|
| `mayhem extend` | Inspect and extend faults, capabilities, dependencies, and providers. |
|
|
@@ -328,11 +450,11 @@ plan-only until explicitly executed, and every claim is recorded in evidence.
|
|
|
328
450
|
| Campaign resume | Durable checkpoints; a verified experiment is never repeated without `--retry-verified`. | `mayhem campaign resume-plan` |
|
|
329
451
|
| Residual impact | Before/after comparison proving the system came back; an unavailable source reads `unavailable`, never `clean`. | `mayhem inspect residual` |
|
|
330
452
|
| Game days | Sessions with a freeze window, named approvers, and dual control for critical faults. | `mayhem game-day` |
|
|
331
|
-
| Provider sandbox | Default grant is read-only
|
|
453
|
+
| Provider sandbox | Default grant is read-only. Fault packs are integrity-checked against a SHA-256 digest; a pack's declared signature is an unverified claim of authorship, not authentication. | `src/mayhem/providers/` |
|
|
332
454
|
| Observability | Read-only Prometheus/Loki connectors (bounded timeout, response-size cap, redacted errors) plus local OpenTelemetry spans. | `src/mayhem/observability/` |
|
|
333
455
|
| Evidence bundles | Hash-chained, offline-verifiable bundles of a run's evidence. | `mayhem bundle verify PATH` |
|
|
334
456
|
|
|
335
|
-
|
|
457
|
+
Three honesty rules are worth stating plainly, because they change what output
|
|
336
458
|
means:
|
|
337
459
|
|
|
338
460
|
- **No backend means no effect.** `start_load`, `stop_load`, and `notify` have
|
|
@@ -341,6 +463,10 @@ means:
|
|
|
341
463
|
- **No live verification is claimed without a live run.** The capability
|
|
342
464
|
dashboard reports `live=false` for every row in this repository; `live=true`
|
|
343
465
|
can only come from a recorded live run.
|
|
466
|
+
- **No fault is live-verified in this repository either.** 0 of 141 catalog
|
|
467
|
+
faults hold `verified-live`. `verified-unit` is a statement about mayhem's own
|
|
468
|
+
parameter, refusal, and compensation code — not evidence that a fault works.
|
|
469
|
+
See [No fault in this repository is `verified-live`](#no-fault-in-this-repository-is-verified-live).
|
|
344
470
|
|
|
345
471
|
### Shell completion
|
|
346
472
|
|
|
@@ -362,8 +488,8 @@ bash script says so in its header.
|
|
|
362
488
|
```bash
|
|
363
489
|
mayhem --version # installed version, or 0.0.0+source in a checkout
|
|
364
490
|
mayhem discover capabilities --explain k8s.pod_kill
|
|
365
|
-
mayhem
|
|
366
|
-
mayhem bundle verify bundle/
|
|
491
|
+
mayhem bundle build RUN_ID --out bundle/ # assemble a portable, hash-chained bundle
|
|
492
|
+
mayhem bundle verify bundle/ # re-derive every hash from the bytes
|
|
367
493
|
```
|
|
368
494
|
|
|
369
495
|
### v0.9.0 status
|
|
@@ -390,8 +516,12 @@ it described is what is implemented and documented above. What remains verified:
|
|
|
390
516
|
`critical`-risk faults (e.g. `k8s.node_drain`) need a **triple opt-in**:
|
|
391
517
|
`policy.allow_critical: true`, a per-fault ack in `policy.critical_fault_acks`,
|
|
392
518
|
and the `--allow-critical` CLI flag.
|
|
393
|
-
- **Concurrency budget.** `
|
|
394
|
-
|
|
519
|
+
- **Concurrency budget.** `blast_radius.max_concurrent_faults` in the layered
|
|
520
|
+
`mayhem.yaml` is the control that actually refuses a plan; it counts the
|
|
521
|
+
prefix of fault *steps* seen so far and is never reset. The drill spec's
|
|
522
|
+
`config.max_faults` is a declared field that **no gate reads** — it bounds
|
|
523
|
+
nothing, and a wider `parallel:` step queues into rounds rather than escaping
|
|
524
|
+
the budget. See [Fault budgets](docs/drill-spec.md#fault-budgets).
|
|
395
525
|
- **Duration caps.** Per-fault `duration` beyond the catalog maximum is a
|
|
396
526
|
compile error.
|
|
397
527
|
- **Capability gating.** Faults declare the capabilities they need
|
|
@@ -446,8 +576,8 @@ is as small as possible:
|
|
|
446
576
|
| [`docs/drill-spec.md`](docs/drill-spec.md) | Drill DSL reference. |
|
|
447
577
|
| [`docs/config.md`](docs/config.md) | Current layered configuration contract. |
|
|
448
578
|
| `src/mayhem/cli/command_registry.py` | Current commands, options, and stable exit codes. |
|
|
449
|
-
| `src/mayhem/schemas/output_v1.json`(
|
|
450
|
-
| [`docs/fault-catalog/`](docs/fault-catalog/README.md)
|
|
579
|
+
| [`src/mayhem/schemas/output_v1.json`](src/mayhem/schemas/output_v1.json) | The versioned machine-output envelope; there is no rendered prose reference for it in this repository. |
|
|
580
|
+
| [`docs/fault-catalog/`](docs/fault-catalog/README.md) | Checked Kubernetes fault catalog status snapshot and capability gates. |
|
|
451
581
|
| [`docs/compensation.md`](docs/compensation.md) | Compensation lifecycle and verification contracts. |
|
|
452
582
|
|
|
453
583
|
---
|
|
@@ -464,6 +594,11 @@ is as small as possible:
|
|
|
464
594
|
| Legacy `KubernetesAdapter` | Compatibility seam only; reports unavailable |
|
|
465
595
|
| Live Kubernetes cluster acceptance | Not claimed by repository documentation |
|
|
466
596
|
| Catalog-only Kubernetes faults | `k8s.image_pull_slow`; excluded from the available-fault register and refused before mutation |
|
|
597
|
+
| **Kernel / eBPF / BPF fault injection** | **Not implemented and not planned for 1.0.0.** No eBPF program, no kernel module, no in-kernel primitive. See [What mayhem cannot do](#what-mayhem-cannot-do) |
|
|
598
|
+
| **`verified-live` faults** | **0 of 141.** The rung is derivable from recorded live-run evidence and no such evidence exists. See [No fault in this repository is `verified-live`](#no-fault-in-this-repository-is-verified-live) |
|
|
599
|
+
| **`verified-unit` faults** | 128 of 141 — a claim about mayhem's own parameter/refusal/compensation code, not about the fault working |
|
|
600
|
+
| **`catalog_only` faults** | 13, all refused before mutation. Refusal text names the missing mechanism; it is not a weaker substitute |
|
|
601
|
+
| **Fault-pack signatures** | **Cannot be verified.** Integrity (SHA-256) only; authorship is an unverified claim |
|
|
467
602
|
| v0.9.0 core truth work (intent, admission, capability truth, replay, redaction) | Implemented; unit + integration tested |
|
|
468
603
|
| v0.9.0 expansion work (coverage graph, SLOs, scenarios, resume, residual, game day, sandbox, connectors, bundles) | Implemented; plan-only until executed |
|
|
469
604
|
| Web UI / REST API | Planned |
|