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.
Files changed (428) hide show
  1. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/CHANGELOG.md +348 -2
  2. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/PKG-INFO +146 -11
  3. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/README.md +145 -10
  4. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/docs/README.md +29 -3
  5. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/docs/config.md +24 -1
  6. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/docs/drill-spec.md +603 -17
  7. mayhem_cli-1.0.0/docs/fault-catalog/reliability-matrix.md +118 -0
  8. mayhem_cli-1.0.0/docs/new-faults/OUTCOME.md +115 -0
  9. mayhem_cli-1.0.0/docs/new-faults/README.md +129 -0
  10. mayhem_cli-1.0.0/docs/new-faults/contract-checklist.md +210 -0
  11. mayhem_cli-1.0.0/docs/new-faults/wave-0-collisions.md +185 -0
  12. mayhem_cli-1.0.0/docs/new-faults/wave-1-params.md +122 -0
  13. mayhem_cli-1.0.0/docs/new-faults/wave-2-new-container.md +219 -0
  14. mayhem_cli-1.0.0/docs/new-faults/wave-3-no-primitive.md +103 -0
  15. mayhem_cli-1.0.0/docs/new-faults/wave-4-new-domains.md +158 -0
  16. mayhem_cli-1.0.0/docs/typing-ratchet.md +85 -0
  17. mayhem_cli-1.0.0/docs/v1.0.0/00-market-landscape.md +197 -0
  18. mayhem_cli-1.0.0/docs/v1.0.0/01-positioning.md +143 -0
  19. mayhem_cli-1.0.0/docs/v1.0.0/02-earn-maturity.md +145 -0
  20. mayhem_cli-1.0.0/docs/v1.0.0/03-steady-state-hypothesis.md +182 -0
  21. mayhem_cli-1.0.0/docs/v1.0.0/04-dry-run-and-quota.md +220 -0
  22. mayhem_cli-1.0.0/docs/v1.0.0/05-fault-packs.md +175 -0
  23. mayhem_cli-1.0.0/docs/v1.0.0/06-debt-and-quality.md +409 -0
  24. mayhem_cli-1.0.0/docs/v1.0.0/07-release-gates.md +159 -0
  25. mayhem_cli-1.0.0/docs/v1.0.0/08-withdrawal-audit.md +446 -0
  26. mayhem_cli-1.0.0/docs/v1.0.0/README.md +186 -0
  27. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/examples/k8s/mayhem.yaml +0 -1
  28. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/examples/testCase/docker-compose.mayhem.yml +25 -19
  29. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/examples/testCase/mayhem.yaml +83 -2
  30. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/pyproject.toml +8 -1
  31. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/scripts/verify_release_artifacts.py +7 -4
  32. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/agents/executors.py +173 -71
  33. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/agents/impact.py +91 -9
  34. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/agents/k8s_control.py +7 -4
  35. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/agents/k8s_resolve.py +80 -15
  36. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/agents/lease_client.py +4 -4
  37. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/campaign.py +66 -51
  38. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/command_registry.py +7 -0
  39. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/coverage_cmd.py +1 -3
  40. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/dependency.py +38 -5
  41. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/doctor.py +1 -1
  42. mayhem_cli-1.0.0/src/mayhem/cli/execution.py +261 -0
  43. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/experiment.py +12 -6
  44. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/expert.py +4 -3
  45. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/explore.py +14 -14
  46. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/extend.py +3 -3
  47. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/game_day.py +18 -23
  48. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/init.py +1 -1
  49. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/inspect.py +105 -61
  50. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/lifecycle.py +329 -28
  51. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/next_cmd.py +18 -10
  52. mayhem_cli-1.0.0/src/mayhem/cli/pack.py +256 -0
  53. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/render.py +109 -21
  54. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/resolver.py +6 -2
  55. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/services.py +14 -5
  56. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/toolkit.py +4 -5
  57. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/topology.py +15 -10
  58. mayhem_cli-1.0.0/src/mayhem/cli/verify_bundle.py +142 -0
  59. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/workflows.py +1 -1
  60. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/config.py +104 -79
  61. {mayhem_cli-0.9.1/src/mayhem/infra → mayhem_cli-1.0.0/src/mayhem/controller}/catalog_report.py +225 -51
  62. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/controller/compensation.py +796 -41
  63. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/controller/executor.py +72 -49
  64. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/controller/explore_flow.py +8 -2
  65. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/controller/k8s_runtime.py +5 -2
  66. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/controller/plan_diff.py +4 -1
  67. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/controller/preflight.py +187 -20
  68. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/controller/recovery.py +8 -7
  69. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/controller/resource_manager.py +30 -21
  70. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/controller/safety.py +108 -4
  71. mayhem_cli-1.0.0/src/mayhem/controller/steady_state.py +1203 -0
  72. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/campaign_checkpoint.py +1 -1
  73. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/cancellation.py +1 -1
  74. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/capability_status.py +4 -2
  75. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/catalog.py +391 -11
  76. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/common.py +1 -1
  77. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/coverage_graph.py +5 -3
  78. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/evidence.py +5 -0
  79. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/evidence_bundle.py +66 -95
  80. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/execution_context.py +11 -14
  81. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/execution_intent.py +5 -11
  82. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/experiments.py +82 -1
  83. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/faults.py +51 -0
  84. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/game_day.py +15 -14
  85. {mayhem_cli-0.9.1/src/mayhem/toolkit → mayhem_cli-1.0.0/src/mayhem/domain}/hashing.py +11 -1
  86. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/maniac.py +3 -1
  87. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/observations.py +6 -2
  88. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/preflight.py +1 -1
  89. mayhem_cli-1.0.0/src/mayhem/domain/quota.py +347 -0
  90. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/redaction.py +4 -2
  91. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/runtime_adapter.py +29 -28
  92. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/scenarios.py +122 -74
  93. mayhem_cli-1.0.0/src/mayhem/domain/steady_state.py +945 -0
  94. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/target_profiles.py +13 -44
  95. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/campaign_checkpoint_repository.py +5 -4
  96. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/campaign_engine.py +4 -2
  97. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/coverage_repository.py +12 -14
  98. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/diagnostics.py +8 -6
  99. mayhem_cli-1.0.0/src/mayhem/infra/engine_probe.py +58 -0
  100. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/evidence.py +7 -4
  101. mayhem_cli-1.0.0/src/mayhem/infra/evidence_bundle_io.py +74 -0
  102. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/game_day_repository.py +5 -4
  103. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/kpi.py +4 -6
  104. mayhem_cli-1.0.0/src/mayhem/infra/promotion.py +1044 -0
  105. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/ranking.py +22 -14
  106. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/replay_repository.py +6 -2
  107. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/report.py +18 -2
  108. mayhem_cli-1.0.0/src/mayhem/infra/target_profile_io.py +69 -0
  109. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/observability/__init__.py +2 -2
  110. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/observability/base.py +5 -6
  111. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/observability/loki.py +1 -2
  112. mayhem_cli-1.0.0/src/mayhem/observability/metrics.py +310 -0
  113. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/observability/otel.py +2 -2
  114. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/observability/prometheus.py +7 -8
  115. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/providers/builtin.py +16 -10
  116. mayhem_cli-1.0.0/src/mayhem/providers/loader.py +1090 -0
  117. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/providers/observation.py +7 -4
  118. mayhem_cli-1.0.0/src/mayhem/providers/pack.py +347 -0
  119. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/providers/permissions.py +3 -8
  120. mayhem_cli-1.0.0/src/mayhem/toolkit/hashing.py +14 -0
  121. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/topology/providers/adapter_registry.py +3 -3
  122. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/topology/providers/docker_adapter.py +11 -14
  123. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/topology/providers/docker_runtime.py +52 -39
  124. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/topology/providers/k8s_manifest.py +1 -1
  125. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/topology/providers/podman_adapter.py +6 -15
  126. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/topology/resolve.py +1 -1
  127. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/e2e/test_cli_e2e.py +7 -6
  128. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/integration/test_bundle_verifier.py +12 -17
  129. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/integration/test_campaign_resume.py +3 -3
  130. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/integration/test_coverage_delta.py +3 -1
  131. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/integration/test_game_day_approval_flow.py +3 -1
  132. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/integration/test_recovery_proof.py +9 -3
  133. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/integration/test_slo_success_criteria.py +18 -4
  134. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/package/test_wheel_smoke.py +5 -2
  135. mayhem_cli-1.0.0/tests/unit/test_baseline_from_cli.py +595 -0
  136. mayhem_cli-1.0.0/tests/unit/test_bundle_build_command.py +166 -0
  137. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_campaign_checkpoint.py +8 -14
  138. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_capability_dashboard.py +6 -2
  139. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_capability_truth.py +2 -5
  140. mayhem_cli-1.0.0/tests/unit/test_catalog_only_refusals.py +106 -0
  141. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli.py +4 -10
  142. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli_active_surface.py +1 -0
  143. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli_campaign.py +0 -1
  144. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli_execution.py +0 -1
  145. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli_execution_intent.py +96 -37
  146. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli_exhaustive_matrix.py +24 -4
  147. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_command_inventory.py +2 -1
  148. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_compensation.py +4 -1
  149. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_config_target_profiles.py +2 -6
  150. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_container_fault_matrix.py +7 -0
  151. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_coverage_graph.py +0 -1
  152. mayhem_cli-1.0.0/tests/unit/test_damage_quota.py +744 -0
  153. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_documentation_consistency.py +0 -2
  154. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_drill_spec.py +18 -13
  155. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_evidence_bundle.py +4 -8
  156. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_execution_intent.py +3 -7
  157. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_executor_admission.py +12 -12
  158. mayhem_cli-1.0.0/tests/unit/test_executor_undo_contract.py +156 -0
  159. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_expansion_checkpoint.py +15 -10
  160. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_fault_catalog_all.py +3 -0
  161. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_fault_catalog_exhaustive.py +9 -9
  162. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_fault_catalog_metadata.py +5 -5
  163. mayhem_cli-1.0.0/tests/unit/test_fault_pack_loading.py +812 -0
  164. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_fault_pack_validation.py +6 -10
  165. mayhem_cli-1.0.0/tests/unit/test_fault_params_wave1.py +294 -0
  166. mayhem_cli-1.0.0/tests/unit/test_fault_params_wave2_proxy.py +253 -0
  167. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_game_day.py +1 -4
  168. mayhem_cli-1.0.0/tests/unit/test_http_proxy_wire.py +208 -0
  169. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_impact_gate.py +143 -1
  170. mayhem_cli-1.0.0/tests/unit/test_import_contracts.py +437 -0
  171. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_k8s_manifest.py +1 -2
  172. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_maniac.py +1 -1
  173. mayhem_cli-1.0.0/tests/unit/test_maturity_promotion.py +578 -0
  174. mayhem_cli-1.0.0/tests/unit/test_max_faults_deprecation.py +251 -0
  175. mayhem_cli-1.0.0/tests/unit/test_mypy_baseline.py +171 -0
  176. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_observability_connectors.py +8 -10
  177. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_observation_contract.py +12 -2
  178. mayhem_cli-1.0.0/tests/unit/test_preflight_blast_radius.py +376 -0
  179. mayhem_cli-1.0.0/tests/unit/test_readme_honesty.py +712 -0
  180. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_release_contract.py +2 -7
  181. mayhem_cli-1.0.0/tests/unit/test_release_workflow_contract.py +24 -0
  182. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_replay_cli.py +2 -5
  183. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_residual_impact.py +16 -15
  184. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_runtime_context.py +14 -14
  185. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_runtime_execution_matrix.py +14 -11
  186. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_scenario_compiler.py +11 -6
  187. mayhem_cli-1.0.0/tests/unit/test_shell_quoting.py +303 -0
  188. mayhem_cli-1.0.0/tests/unit/test_steady_state_evaluator.py +1227 -0
  189. mayhem_cli-1.0.0/tests/unit/test_steady_state_metrics.py +309 -0
  190. mayhem_cli-1.0.0/tests/unit/test_steady_state_spec.py +1049 -0
  191. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_target_profiles.py +2 -6
  192. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_target_profiles_config.py +2 -5
  193. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_v090_edge_cases.py +21 -19
  194. mayhem_cli-1.0.0/tests/unit/test_withdrawal_asset.py +123 -0
  195. mayhem_cli-0.9.1/.github/workflows/ci.yml +0 -146
  196. mayhem_cli-0.9.1/docs/fault-catalog/reliability-matrix.md +0 -64
  197. mayhem_cli-0.9.1/examples/testCase/mayhem-safe-docker-podman.yaml +0 -50
  198. mayhem_cli-0.9.1/src/mayhem/cli/execution.py +0 -143
  199. mayhem_cli-0.9.1/src/mayhem/cli/verify_bundle.py +0 -70
  200. mayhem_cli-0.9.1/src/mayhem/providers/loader.py +0 -396
  201. mayhem_cli-0.9.1/src/mayhem/providers/pack.py +0 -195
  202. mayhem_cli-0.9.1/tests/unit/test_ci_workflow_contract.py +0 -44
  203. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/.coverage +0 -0
  204. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/.github/workflows/conformance.yml +0 -0
  205. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/.github/workflows/release.yml +0 -0
  206. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/.gitignore +0 -0
  207. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/Justfile +0 -0
  208. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/cliff.toml +0 -0
  209. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/docs/compensation.md +0 -0
  210. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/docs/fault-catalog/README.md +0 -0
  211. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/examples/k8s/README.md +0 -0
  212. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/examples/k8s/kubernetes.yaml +0 -0
  213. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/examples/providers/test-catalog.json +0 -0
  214. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/examples/providers/test_provider.py +0 -0
  215. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/examples/testCase/data/hello.txt +0 -0
  216. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/examples/testCase/data/index.html +0 -0
  217. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/examples/testCase/docker-compose.yml +0 -0
  218. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/examples/testCase/nginx.conf +0 -0
  219. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/__main__.py +0 -0
  220. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/agent/__init__.py +0 -0
  221. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/agent/cli.py +0 -0
  222. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/agents/__init__.py +0 -0
  223. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/agents/capabilities.py +0 -0
  224. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/agents/probes.py +0 -0
  225. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/agents/protocol.py +0 -0
  226. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/agents/server.py +0 -0
  227. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/agents/sinks.py +0 -0
  228. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/agents/transports.py +0 -0
  229. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/agents/watchdog.py +0 -0
  230. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/__init__.py +0 -0
  231. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/app.py +0 -0
  232. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/commands.py +0 -0
  233. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/completion.py +0 -0
  234. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/config_cmd.py +0 -0
  235. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/context.py +0 -0
  236. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/errors.py +0 -0
  237. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/exit_codes.py +0 -0
  238. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/output.py +0 -0
  239. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/renderers.py +0 -0
  240. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/cli/style.py +0 -0
  241. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/controller/__init__.py +0 -0
  242. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/controller/cell_runner.py +0 -0
  243. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/controller/janitor.py +0 -0
  244. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/controller/observability_collector.py +0 -0
  245. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/controller/observations.py +0 -0
  246. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/controller/planner.py +0 -0
  247. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/controller/resilience_report.py +0 -0
  248. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/controller/target_selector.py +0 -0
  249. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/__init__.py +0 -0
  250. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/admission.py +0 -0
  251. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/campaigns.py +0 -0
  252. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/candidates.py +0 -0
  253. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/capabilities.py +0 -0
  254. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/cell_rules.py +0 -0
  255. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/checks.py +0 -0
  256. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/coverage.py +0 -0
  257. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/decisions.py +0 -0
  258. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/errors.py +0 -0
  259. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/events.py +0 -0
  260. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/execution_loci.py +0 -0
  261. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/identity.py +0 -0
  262. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/k8s_adapter.py +0 -0
  263. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/leases.py +0 -0
  264. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/load_strategy.py +0 -0
  265. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/m5_campaign.py +0 -0
  266. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/observability.py +0 -0
  267. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/outcomes.py +0 -0
  268. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/policy.py +0 -0
  269. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/provider.py +0 -0
  270. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/remote_agent_interface.py +0 -0
  271. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/replay.py +0 -0
  272. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/residual_impact.py +0 -0
  273. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/resolution.py +0 -0
  274. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/resources.py +0 -0
  275. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/risks.py +0 -0
  276. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/run_outcome.py +0 -0
  277. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/runtime_context.py +0 -0
  278. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/success.py +0 -0
  279. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/target.py +0 -0
  280. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/target_selector.py +0 -0
  281. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/domain/topology.py +0 -0
  282. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/__init__.py +0 -0
  283. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/candidate_gates.py +0 -0
  284. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/candidate_generator.py +0 -0
  285. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/lease_repository.py +0 -0
  286. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/maniac.py +0 -0
  287. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/migrations.py +0 -0
  288. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/migrator.py +0 -0
  289. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/project_detection.py +0 -0
  290. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/infra/store.py +0 -0
  291. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/providers/__init__.py +0 -0
  292. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/providers/protocols.py +0 -0
  293. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/providers/registry.py +0 -0
  294. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/py.typed +0 -0
  295. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/schemas/output_v1.json +0 -0
  296. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/spec.py +0 -0
  297. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/toolkit/__init__.py +0 -0
  298. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/toolkit/fingerprint.py +0 -0
  299. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/toolkit/manifests/docker.yaml +0 -0
  300. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/toolkit/manifests/podman.yaml +0 -0
  301. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/toolkit/manifests/stress-ng.yaml +0 -0
  302. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/toolkit/manifests/tc-netem.yaml +0 -0
  303. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/toolkit/manifests/toxiproxy.yaml +0 -0
  304. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/toolkit/registry.py +0 -0
  305. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/toolkit/tool_runner.py +0 -0
  306. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/topology/__init__.py +0 -0
  307. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/topology/providers/__init__.py +0 -0
  308. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/topology/providers/base.py +0 -0
  309. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/topology/providers/compose.py +0 -0
  310. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/topology/providers/kubernetes.py +0 -0
  311. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/src/mayhem/topology/service.py +0 -0
  312. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/conftest.py +0 -0
  313. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/e2e/__init__.py +0 -0
  314. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/fixtures/cli/commands_show.json +0 -0
  315. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/fixtures/cli/coverage.json +0 -0
  316. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/fixtures/cli/doctor.json +0 -0
  317. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/integration/test_agent_serve.py +0 -0
  318. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/integration/test_agent_watchdog_e2e.py +0 -0
  319. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/integration/test_artifact_secret_sweep.py +0 -0
  320. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/integration/test_evidence_degradation.py +0 -0
  321. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/integration/test_m5_e2e.py +0 -0
  322. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/integration/test_observability_run.py +2 -2
  323. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/integration/test_replay_roundtrip.py +0 -0
  324. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/integration/test_scenario_plan_replay.py +0 -0
  325. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/integration/test_store.py +0 -0
  326. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_accept_criteria.py +0 -0
  327. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_action_outcome_contract.py +0 -0
  328. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_additive_schema.py +0 -0
  329. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_agent_capabilities.py +0 -0
  330. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_agent_protocol.py +0 -0
  331. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_agents.py +0 -0
  332. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_campaign_run.py +0 -0
  333. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_campaigns.py +0 -0
  334. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cancellation.py +0 -0
  335. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_candidates.py +0 -0
  336. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_capability_matrix.py +0 -0
  337. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_capability_registry.py +0 -0
  338. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_capability_safety.py +0 -0
  339. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cell_rules.py +0 -0
  340. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cell_runner.py +0 -0
  341. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_check_spec.py +0 -0
  342. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli_completion.py +0 -0
  343. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli_config.py +0 -0
  344. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli_contract.py +0 -0
  345. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli_doctor.py +0 -0
  346. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli_errors.py +0 -0
  347. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli_exit_codes.py +0 -0
  348. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli_extend.py +0 -0
  349. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli_init.py +0 -0
  350. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli_output.py +0 -0
  351. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli_renderers.py +0 -0
  352. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli_resolver.py +0 -0
  353. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli_topology.py +0 -0
  354. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_cli_user_regressions.py +0 -0
  355. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_command_registry.py +0 -0
  356. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_config.py +0 -0
  357. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_coverage.py +0 -0
  358. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_coverage_repository.py +0 -0
  359. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_diagnostics.py +0 -0
  360. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_diagnostics_target_profiles.py +0 -0
  361. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_domain_properties.py +0 -0
  362. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_example_specs_yaml.py +0 -0
  363. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_execution_context.py +0 -0
  364. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_executor.py +0 -0
  365. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_executor_drill.py +0 -0
  366. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_fault_expansion_catalog.py +0 -0
  367. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_fault_expansion_container.py +0 -0
  368. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_fault_expansion_kubernetes.py +0 -0
  369. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_faults.py +0 -0
  370. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_fingerprint.py +0 -0
  371. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_fork_atomicity.py +0 -0
  372. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_janitor.py +0 -0
  373. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_k8s_cli.py +0 -0
  374. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_k8s_discovery.py +0 -0
  375. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_k8s_plan1.py +0 -0
  376. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_k8s_plan2.py +0 -0
  377. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_k8s_selection.py +0 -0
  378. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_kpi.py +0 -0
  379. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_kplan1_targets.py +0 -0
  380. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_kplan2_topology.py +0 -0
  381. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_kplan3_resolver.py +0 -0
  382. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_kplan3_runtime.py +0 -0
  383. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_kplan5_runtime.py +0 -0
  384. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_kplan6_runtime.py +0 -0
  385. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_lease_repository.py +0 -0
  386. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_leases.py +0 -0
  387. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_lifecycle_run_liveness.py +0 -0
  388. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_load_strategy.py +0 -0
  389. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_m12_step1_catalog.py +0 -0
  390. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_m7_k8s.py +0 -0
  391. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_m8_operations.py +0 -0
  392. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_m9_catalog.py +0 -0
  393. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_migrations.py +0 -0
  394. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_network_path_model.py +0 -0
  395. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_observability.py +0 -0
  396. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_observations.py +0 -0
  397. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_plan_diff.py +0 -0
  398. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_planner.py +0 -0
  399. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_policy_explain.py +0 -0
  400. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_preflight.py +0 -0
  401. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_provider_loader.py +0 -0
  402. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_provider_permissions.py +0 -0
  403. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_provider_registry.py +0 -0
  404. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_ranking.py +0 -0
  405. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_recovery.py +0 -0
  406. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_redaction_boundary.py +0 -0
  407. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_replay_capsule.py +0 -0
  408. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_report.py +0 -0
  409. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_resilience_report.py +0 -0
  410. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_resolve.py +0 -0
  411. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_resource_conflict_exec.py +0 -0
  412. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_resource_manager.py +0 -0
  413. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_resources.py +0 -0
  414. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_risks.py +0 -0
  415. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_run_outcome.py +0 -0
  416. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_runtime_adapter.py +0 -0
  417. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_safety.py +0 -0
  418. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_selection_modes.py +0 -0
  419. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_success.py +0 -0
  420. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_three_locus.py +0 -0
  421. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_tool_runner.py +0 -0
  422. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_topology.py +0 -0
  423. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_topology_ctr.py +0 -0
  424. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_topology_providers.py +0 -0
  425. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_v090_docs_contract.py +0 -0
  426. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_watchdog.py +0 -0
  427. {mayhem_cli-0.9.1 → mayhem_cli-1.0.0}/tests/unit/test_workflow_groups.py +0 -0
  428. {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 the v0.9.0 release truth baseline: checked command inventory, install
19
- dependency contract, version metadata, and Justfile recipe paths
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.9.1
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 Reference](#cli-reference)
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; signed fault packs; unsigned is development-only. | `src/mayhem/providers/`(docs/provider-sdk.md) |
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
- Two honesty rules are worth stating plainly, because they change what output
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 inspect replay export RUN_ID --out bundle/
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.** `max_faults` caps simultaneously-injected faults;
394
- a wider `parallel:` step queues into rounds.
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`(docs/reference/output-schema.md) | Versioned machine-output envelope and the v0.9.0 compatibility boundary. |
450
- | [`docs/fault-catalog/`](docs/fault-catalog/README.md)(docs/reference/fault-catalog.md) | Checked Kubernetes fault catalog status snapshot and capability gates. |
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 |