mayhem-cli 0.5.1__tar.gz → 0.8.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 (356) hide show
  1. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/.github/workflows/release.yml +36 -5
  2. mayhem_cli-0.8.0/CHANGELOG.md +415 -0
  3. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/Justfile +29 -19
  4. mayhem_cli-0.8.0/PKG-INFO +404 -0
  5. mayhem_cli-0.8.0/README.md +389 -0
  6. mayhem_cli-0.8.0/cliff.toml +87 -0
  7. mayhem_cli-0.8.0/docs/README.md +74 -0
  8. mayhem_cli-0.8.0/docs/adr/adr-m7-1-k8s-executor.md +98 -0
  9. mayhem_cli-0.8.0/docs/adr-adr-m7-1-k8s-executor-flip.md +172 -0
  10. mayhem_cli-0.8.0/docs/architecture/fault-taxonomy.md +5 -0
  11. mayhem_cli-0.8.0/docs/architecture/safety.md +12 -0
  12. mayhem_cli-0.8.0/docs/architecture/toolkit.md +5 -0
  13. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/docs/compensation.md +6 -2
  14. mayhem_cli-0.8.0/docs/config.md +212 -0
  15. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/docs/drill-spec.md +105 -23
  16. mayhem_cli-0.8.0/docs/fault-catalog/README.md +21 -0
  17. mayhem_cli-0.8.0/docs/fault-catalog/reliability-matrix.md +64 -0
  18. mayhem_cli-0.8.0/docs/grounding-log.md +69 -0
  19. mayhem_cli-0.8.0/docs/grounding-rules.md +70 -0
  20. mayhem_cli-0.8.0/docs/k8s-new.md +5 -0
  21. mayhem_cli-0.8.0/docs/k8s-plan-1.md +437 -0
  22. mayhem_cli-0.8.0/docs/k8s-plan-2.md +387 -0
  23. mayhem_cli-0.8.0/docs/m7-k8s-executor-discovery.md +164 -0
  24. mayhem_cli-0.8.0/docs/new-plan/00-product-and-cli-roadmap.md +84 -0
  25. mayhem_cli-0.8.0/docs/new-plan/01-workflow-command-architecture.md +84 -0
  26. mayhem_cli-0.8.0/docs/new-plan/02-guided-onboarding-and-target-profiles.md +75 -0
  27. mayhem_cli-0.8.0/docs/new-plan/03-plan-first-execution-and-unified-evidence.md +77 -0
  28. mayhem_cli-0.8.0/docs/new-plan/04-output-errors-and-script-compatibility.md +77 -0
  29. mayhem_cli-0.8.0/docs/new-plan/05-configuration-policy-and-environment-safety.md +73 -0
  30. mayhem_cli-0.8.0/docs/new-plan/06-docker-podman-reliability-slice.md +75 -0
  31. mayhem_cli-0.8.0/docs/new-plan/07-first-class-kubernetes-engine.md +78 -0
  32. mayhem_cli-0.8.0/docs/new-plan/08-fault-catalog-reliability-matrix.md +83 -0
  33. mayhem_cli-0.8.0/docs/new-plan/09-campaigns-coverage-and-explore-loop.md +79 -0
  34. mayhem_cli-0.8.0/docs/new-plan/10-diagnostics-recovery-and-reporting.md +76 -0
  35. mayhem_cli-0.8.0/docs/new-plan/11-extension-api-and-packaging.md +88 -0
  36. mayhem_cli-0.8.0/docs/new-plan/README.md +52 -0
  37. mayhem_cli-0.8.0/docs/policy-and-break-glass.md +28 -0
  38. mayhem_cli-0.8.0/docs/product/cli-product-direction.md +64 -0
  39. mayhem_cli-0.8.0/docs/product/command-architecture.md +100 -0
  40. mayhem_cli-0.8.0/docs/provider-sdk.md +217 -0
  41. mayhem_cli-0.8.0/docs/reference/cli.md +110 -0
  42. mayhem_cli-0.8.0/docs/reference/experiment-dsl.md +10 -0
  43. mayhem_cli-0.8.0/docs/reference/fault-catalog.md +82 -0
  44. mayhem_cli-0.8.0/docs/reference/output-schema.md +47 -0
  45. mayhem_cli-0.8.0/docs/reference/sqlite-schema.md +15 -0
  46. mayhem_cli-0.8.0/docs/superpowers/plans/2026-09-24-container-kubernetes-fault-expansion-plan.md +267 -0
  47. mayhem_cli-0.8.0/docs/superpowers/plans/2026-09-24-documentation-to-implementation-plan.md +406 -0
  48. mayhem_cli-0.8.0/docs/superpowers/specs/2026-09-24-container-kubernetes-fault-expansion-design.md +61 -0
  49. mayhem_cli-0.8.0/docs/superpowers/specs/2026-09-24-documentation-to-implementation-design.md +91 -0
  50. mayhem_cli-0.8.0/examples/k8s/README.md +39 -0
  51. mayhem_cli-0.8.0/examples/k8s/mayhem.yaml +207 -0
  52. mayhem_cli-0.8.0/examples/providers/test-catalog.json +40 -0
  53. mayhem_cli-0.8.0/examples/providers/test_provider.py +19 -0
  54. mayhem_cli-0.8.0/examples/testCase/mayhem-safe-docker-podman.yaml +50 -0
  55. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/pyproject.toml +46 -5
  56. mayhem_cli-0.8.0/src/mayhem/agents/executors.py +3931 -0
  57. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/agents/impact.py +37 -1
  58. mayhem_cli-0.8.0/src/mayhem/agents/k8s_control.py +411 -0
  59. mayhem_cli-0.8.0/src/mayhem/agents/k8s_resolve.py +947 -0
  60. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/agents/lease_client.py +7 -0
  61. mayhem_cli-0.8.0/src/mayhem/cli/app.py +226 -0
  62. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/cli/campaign.py +234 -59
  63. mayhem_cli-0.8.0/src/mayhem/cli/command_registry.py +79 -0
  64. mayhem_cli-0.8.0/src/mayhem/cli/commands.py +48 -0
  65. mayhem_cli-0.8.0/src/mayhem/cli/config_cmd.py +71 -0
  66. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/cli/context.py +3 -0
  67. mayhem_cli-0.8.0/src/mayhem/cli/coverage_cmd.py +262 -0
  68. mayhem_cli-0.8.0/src/mayhem/cli/doctor.py +128 -0
  69. mayhem_cli-0.8.0/src/mayhem/cli/errors.py +196 -0
  70. mayhem_cli-0.8.0/src/mayhem/cli/execution.py +129 -0
  71. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/cli/experiment.py +2 -0
  72. mayhem_cli-0.8.0/src/mayhem/cli/expert.py +553 -0
  73. mayhem_cli-0.8.0/src/mayhem/cli/explore.py +412 -0
  74. mayhem_cli-0.8.0/src/mayhem/cli/extend.py +153 -0
  75. mayhem_cli-0.8.0/src/mayhem/cli/init.py +138 -0
  76. mayhem_cli-0.8.0/src/mayhem/cli/inspect.py +192 -0
  77. mayhem_cli-0.8.0/src/mayhem/cli/lifecycle.py +1745 -0
  78. mayhem_cli-0.8.0/src/mayhem/cli/next_cmd.py +271 -0
  79. mayhem_cli-0.8.0/src/mayhem/cli/output.py +111 -0
  80. mayhem_cli-0.8.0/src/mayhem/cli/render.py +151 -0
  81. mayhem_cli-0.8.0/src/mayhem/cli/renderers.py +193 -0
  82. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/cli/resolver.py +11 -1
  83. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/cli/services.py +167 -19
  84. mayhem_cli-0.8.0/src/mayhem/cli/toolkit.py +139 -0
  85. mayhem_cli-0.8.0/src/mayhem/cli/topology.py +334 -0
  86. mayhem_cli-0.8.0/src/mayhem/cli/workflows.py +110 -0
  87. mayhem_cli-0.8.0/src/mayhem/config.py +401 -0
  88. mayhem_cli-0.8.0/src/mayhem/controller/cell_runner.py +187 -0
  89. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/controller/compensation.py +180 -7
  90. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/controller/executor.py +748 -9
  91. mayhem_cli-0.8.0/src/mayhem/controller/explore_flow.py +280 -0
  92. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/controller/janitor.py +49 -0
  93. mayhem_cli-0.8.0/src/mayhem/controller/k8s_runtime.py +859 -0
  94. mayhem_cli-0.8.0/src/mayhem/controller/plan_diff.py +79 -0
  95. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/controller/planner.py +599 -59
  96. mayhem_cli-0.8.0/src/mayhem/controller/preflight.py +381 -0
  97. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/controller/recovery.py +210 -0
  98. mayhem_cli-0.8.0/src/mayhem/controller/safety.py +576 -0
  99. mayhem_cli-0.8.0/src/mayhem/controller/target_selector.py +3 -0
  100. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/domain/campaigns.py +46 -0
  101. mayhem_cli-0.8.0/src/mayhem/domain/catalog.py +1851 -0
  102. mayhem_cli-0.8.0/src/mayhem/domain/cell_rules.py +48 -0
  103. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/domain/common.py +12 -7
  104. mayhem_cli-0.8.0/src/mayhem/domain/coverage.py +314 -0
  105. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/domain/decisions.py +33 -0
  106. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/domain/errors.py +28 -0
  107. mayhem_cli-0.8.0/src/mayhem/domain/evidence.py +57 -0
  108. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/domain/experiments.py +172 -11
  109. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/domain/faults.py +91 -9
  110. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/domain/identity.py +15 -0
  111. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/domain/k8s_adapter.py +62 -6
  112. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/domain/leases.py +50 -1
  113. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/domain/m5_campaign.py +73 -3
  114. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/domain/maniac.py +52 -1
  115. mayhem_cli-0.8.0/src/mayhem/domain/policy.py +140 -0
  116. mayhem_cli-0.8.0/src/mayhem/domain/preflight.py +123 -0
  117. mayhem_cli-0.8.0/src/mayhem/domain/provider.py +323 -0
  118. mayhem_cli-0.8.0/src/mayhem/domain/resolution.py +72 -0
  119. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/domain/runtime_adapter.py +117 -0
  120. mayhem_cli-0.8.0/src/mayhem/domain/target.py +125 -0
  121. mayhem_cli-0.8.0/src/mayhem/domain/target_profiles.py +221 -0
  122. mayhem_cli-0.8.0/src/mayhem/domain/target_selector.py +283 -0
  123. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/domain/topology.py +8 -0
  124. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/infra/campaign_engine.py +77 -0
  125. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/infra/candidate_gates.py +20 -0
  126. mayhem_cli-0.8.0/src/mayhem/infra/catalog_report.py +277 -0
  127. mayhem_cli-0.8.0/src/mayhem/infra/coverage_repository.py +397 -0
  128. mayhem_cli-0.8.0/src/mayhem/infra/diagnostics.py +963 -0
  129. mayhem_cli-0.8.0/src/mayhem/infra/evidence.py +241 -0
  130. mayhem_cli-0.8.0/src/mayhem/infra/kpi.py +172 -0
  131. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/infra/lease_repository.py +34 -2
  132. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/infra/migrations.py +40 -0
  133. mayhem_cli-0.8.0/src/mayhem/infra/project_detection.py +115 -0
  134. mayhem_cli-0.8.0/src/mayhem/infra/ranking.py +192 -0
  135. mayhem_cli-0.8.0/src/mayhem/infra/report.py +543 -0
  136. mayhem_cli-0.8.0/src/mayhem/providers/__init__.py +19 -0
  137. mayhem_cli-0.8.0/src/mayhem/providers/builtin.py +126 -0
  138. mayhem_cli-0.8.0/src/mayhem/providers/loader.py +316 -0
  139. mayhem_cli-0.8.0/src/mayhem/providers/protocols.py +36 -0
  140. mayhem_cli-0.8.0/src/mayhem/providers/registry.py +80 -0
  141. mayhem_cli-0.8.0/src/mayhem/schemas/output_v1.json +43 -0
  142. mayhem_cli-0.8.0/src/mayhem/topology/providers/adapter_registry.py +86 -0
  143. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/topology/providers/docker_adapter.py +17 -0
  144. mayhem_cli-0.8.0/src/mayhem/topology/providers/k8s_manifest.py +229 -0
  145. mayhem_cli-0.8.0/src/mayhem/topology/providers/kubernetes.py +406 -0
  146. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/e2e/test_cli_e2e.py +84 -72
  147. mayhem_cli-0.8.0/tests/fixtures/cli/commands_show.json +37 -0
  148. mayhem_cli-0.8.0/tests/fixtures/cli/coverage.json +22 -0
  149. mayhem_cli-0.8.0/tests/fixtures/cli/doctor.json +18 -0
  150. mayhem_cli-0.8.0/tests/unit/test_accept_criteria.py +162 -0
  151. mayhem_cli-0.8.0/tests/unit/test_additive_schema.py +137 -0
  152. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_campaigns.py +91 -4
  153. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_capability_safety.py +17 -0
  154. mayhem_cli-0.8.0/tests/unit/test_cell_rules.py +86 -0
  155. mayhem_cli-0.8.0/tests/unit/test_cell_runner.py +204 -0
  156. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_cli.py +193 -8
  157. mayhem_cli-0.8.0/tests/unit/test_cli_active_surface.py +60 -0
  158. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_cli_campaign.py +3 -1
  159. mayhem_cli-0.8.0/tests/unit/test_cli_config.py +44 -0
  160. mayhem_cli-0.8.0/tests/unit/test_cli_contract.py +114 -0
  161. mayhem_cli-0.8.0/tests/unit/test_cli_doctor.py +143 -0
  162. mayhem_cli-0.8.0/tests/unit/test_cli_errors.py +132 -0
  163. mayhem_cli-0.8.0/tests/unit/test_cli_execution.py +216 -0
  164. mayhem_cli-0.8.0/tests/unit/test_cli_exhaustive_matrix.py +735 -0
  165. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_cli_exit_codes.py +11 -11
  166. mayhem_cli-0.8.0/tests/unit/test_cli_extend.py +149 -0
  167. mayhem_cli-0.8.0/tests/unit/test_cli_init.py +123 -0
  168. mayhem_cli-0.8.0/tests/unit/test_cli_output.py +75 -0
  169. mayhem_cli-0.8.0/tests/unit/test_cli_renderers.py +124 -0
  170. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_cli_resolver.py +7 -7
  171. mayhem_cli-0.8.0/tests/unit/test_cli_topology.py +139 -0
  172. mayhem_cli-0.8.0/tests/unit/test_cli_user_regressions.py +59 -0
  173. mayhem_cli-0.8.0/tests/unit/test_command_inventory.py +56 -0
  174. mayhem_cli-0.8.0/tests/unit/test_command_registry.py +33 -0
  175. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_config.py +58 -0
  176. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_container_fault_matrix.py +15 -8
  177. mayhem_cli-0.8.0/tests/unit/test_coverage.py +310 -0
  178. mayhem_cli-0.8.0/tests/unit/test_coverage_repository.py +157 -0
  179. mayhem_cli-0.8.0/tests/unit/test_diagnostics.py +330 -0
  180. mayhem_cli-0.8.0/tests/unit/test_documentation_consistency.py +58 -0
  181. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_example_specs_yaml.py +5 -3
  182. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_fault_catalog_all.py +56 -8
  183. mayhem_cli-0.8.0/tests/unit/test_fault_catalog_exhaustive.py +946 -0
  184. mayhem_cli-0.8.0/tests/unit/test_fault_catalog_metadata.py +126 -0
  185. mayhem_cli-0.8.0/tests/unit/test_fault_expansion_catalog.py +91 -0
  186. mayhem_cli-0.8.0/tests/unit/test_fault_expansion_container.py +161 -0
  187. mayhem_cli-0.8.0/tests/unit/test_fault_expansion_kubernetes.py +183 -0
  188. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_impact_gate.py +1 -0
  189. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_janitor.py +12 -0
  190. mayhem_cli-0.8.0/tests/unit/test_k8s_cli.py +150 -0
  191. mayhem_cli-0.8.0/tests/unit/test_k8s_discovery.py +360 -0
  192. mayhem_cli-0.8.0/tests/unit/test_k8s_manifest.py +512 -0
  193. mayhem_cli-0.8.0/tests/unit/test_k8s_plan1.py +285 -0
  194. mayhem_cli-0.8.0/tests/unit/test_k8s_plan2.py +210 -0
  195. mayhem_cli-0.8.0/tests/unit/test_k8s_selection.py +155 -0
  196. mayhem_cli-0.8.0/tests/unit/test_kpi.py +82 -0
  197. mayhem_cli-0.8.0/tests/unit/test_kplan1_targets.py +453 -0
  198. mayhem_cli-0.8.0/tests/unit/test_kplan2_topology.py +89 -0
  199. mayhem_cli-0.8.0/tests/unit/test_kplan3_resolver.py +203 -0
  200. mayhem_cli-0.8.0/tests/unit/test_kplan3_runtime.py +644 -0
  201. mayhem_cli-0.8.0/tests/unit/test_kplan5_runtime.py +508 -0
  202. mayhem_cli-0.8.0/tests/unit/test_kplan6_runtime.py +1205 -0
  203. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_lifecycle_run_liveness.py +66 -0
  204. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_m7_k8s.py +50 -6
  205. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_maniac.py +1 -0
  206. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_migrations.py +29 -0
  207. mayhem_cli-0.8.0/tests/unit/test_plan_diff.py +55 -0
  208. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_planner.py +98 -0
  209. mayhem_cli-0.8.0/tests/unit/test_policy_explain.py +243 -0
  210. mayhem_cli-0.8.0/tests/unit/test_preflight.py +154 -0
  211. mayhem_cli-0.8.0/tests/unit/test_provider_loader.py +222 -0
  212. mayhem_cli-0.8.0/tests/unit/test_provider_registry.py +136 -0
  213. mayhem_cli-0.8.0/tests/unit/test_ranking.py +213 -0
  214. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_recovery.py +104 -0
  215. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_report.py +133 -1
  216. mayhem_cli-0.8.0/tests/unit/test_runtime_execution_matrix.py +2311 -0
  217. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_safety.py +18 -4
  218. mayhem_cli-0.8.0/tests/unit/test_selection_modes.py +352 -0
  219. mayhem_cli-0.8.0/tests/unit/test_target_profiles.py +141 -0
  220. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_topology_providers.py +6 -1
  221. mayhem_cli-0.8.0/tests/unit/test_workflow_groups.py +47 -0
  222. mayhem_cli-0.8.0/uv.lock +1619 -0
  223. mayhem_cli-0.5.1/PKG-INFO +0 -555
  224. mayhem_cli-0.5.1/README.md +0 -541
  225. mayhem_cli-0.5.1/examples/k8s/README.md +0 -32
  226. mayhem_cli-0.5.1/examples/k8s/mayhem.yaml +0 -76
  227. mayhem_cli-0.5.1/src/mayhem/agents/executors.py +0 -430
  228. mayhem_cli-0.5.1/src/mayhem/cli/app.py +0 -154
  229. mayhem_cli-0.5.1/src/mayhem/cli/config_cmd.py +0 -47
  230. mayhem_cli-0.5.1/src/mayhem/cli/lifecycle.py +0 -805
  231. mayhem_cli-0.5.1/src/mayhem/cli/toolkit.py +0 -41
  232. mayhem_cli-0.5.1/src/mayhem/cli/topology.py +0 -127
  233. mayhem_cli-0.5.1/src/mayhem/config.py +0 -208
  234. mayhem_cli-0.5.1/src/mayhem/controller/safety.py +0 -392
  235. mayhem_cli-0.5.1/src/mayhem/domain/catalog.py +0 -727
  236. mayhem_cli-0.5.1/src/mayhem/domain/coverage.py +0 -106
  237. mayhem_cli-0.5.1/src/mayhem/infra/coverage_repository.py +0 -101
  238. mayhem_cli-0.5.1/src/mayhem/infra/report.py +0 -227
  239. mayhem_cli-0.5.1/src/mayhem/topology/providers/adapter_registry.py +0 -60
  240. mayhem_cli-0.5.1/tests/unit/test_coverage.py +0 -156
  241. mayhem_cli-0.5.1/uv.lock +0 -819
  242. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/.gitignore +0 -0
  243. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/examples/k8s/kubernetes.yaml +0 -0
  244. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/examples/testCase/data/hello.txt +0 -0
  245. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/examples/testCase/data/index.html +0 -0
  246. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/examples/testCase/docker-compose.mayhem.yml +0 -0
  247. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/examples/testCase/docker-compose.yml +0 -0
  248. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/examples/testCase/mayhem.yaml +0 -0
  249. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/examples/testCase/nginx.conf +0 -0
  250. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/agent/__init__.py +0 -0
  251. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/agent/cli.py +0 -0
  252. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/agents/__init__.py +0 -0
  253. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/agents/capabilities.py +0 -0
  254. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/agents/probes.py +0 -0
  255. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/agents/protocol.py +0 -0
  256. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/agents/server.py +0 -0
  257. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/agents/sinks.py +0 -0
  258. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/agents/transports.py +0 -0
  259. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/agents/watchdog.py +0 -0
  260. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/cli/__init__.py +0 -0
  261. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/cli/dependency.py +0 -0
  262. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/cli/exit_codes.py +0 -0
  263. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/cli/style.py +0 -0
  264. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/controller/__init__.py +0 -0
  265. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/controller/observability_collector.py +0 -0
  266. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/controller/observations.py +0 -0
  267. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/controller/resilience_report.py +0 -0
  268. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/controller/resource_manager.py +0 -0
  269. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/domain/__init__.py +0 -0
  270. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/domain/cancellation.py +0 -0
  271. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/domain/candidates.py +0 -0
  272. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/domain/capabilities.py +0 -0
  273. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/domain/checks.py +0 -0
  274. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/domain/events.py +0 -0
  275. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/domain/execution_context.py +0 -0
  276. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/domain/execution_loci.py +0 -0
  277. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/domain/load_strategy.py +0 -0
  278. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/domain/observability.py +0 -0
  279. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/domain/outcomes.py +0 -0
  280. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/domain/remote_agent_interface.py +0 -0
  281. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/domain/resources.py +0 -0
  282. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/domain/risks.py +0 -0
  283. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/domain/run_outcome.py +0 -0
  284. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/domain/success.py +0 -0
  285. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/infra/__init__.py +0 -0
  286. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/infra/candidate_generator.py +0 -0
  287. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/infra/maniac.py +0 -0
  288. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/infra/migrator.py +0 -0
  289. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/infra/store.py +0 -0
  290. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/py.typed +0 -0
  291. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/spec.py +0 -0
  292. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/toolkit/__init__.py +0 -0
  293. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/toolkit/fingerprint.py +0 -0
  294. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/toolkit/hashing.py +0 -0
  295. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/toolkit/manifests/docker.yaml +0 -0
  296. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/toolkit/manifests/podman.yaml +0 -0
  297. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/toolkit/manifests/stress-ng.yaml +0 -0
  298. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/toolkit/manifests/tc-netem.yaml +0 -0
  299. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/toolkit/manifests/toxiproxy.yaml +0 -0
  300. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/toolkit/registry.py +0 -0
  301. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/toolkit/tool_runner.py +0 -0
  302. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/topology/__init__.py +0 -0
  303. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/topology/providers/__init__.py +0 -0
  304. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/topology/providers/base.py +0 -0
  305. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/topology/providers/compose.py +0 -0
  306. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/topology/providers/docker_runtime.py +0 -0
  307. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/topology/providers/podman_adapter.py +0 -0
  308. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/topology/resolve.py +0 -0
  309. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/src/mayhem/topology/service.py +0 -0
  310. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/conftest.py +0 -0
  311. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/e2e/__init__.py +0 -0
  312. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/integration/test_agent_serve.py +0 -0
  313. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/integration/test_agent_watchdog_e2e.py +0 -0
  314. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/integration/test_m5_e2e.py +0 -0
  315. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/integration/test_store.py +0 -0
  316. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_agent_capabilities.py +0 -0
  317. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_agent_protocol.py +0 -0
  318. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_agents.py +0 -0
  319. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_campaign_run.py +0 -0
  320. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_cancellation.py +0 -0
  321. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_candidates.py +0 -0
  322. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_capability_matrix.py +0 -0
  323. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_capability_registry.py +0 -0
  324. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_check_spec.py +0 -0
  325. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_compensation.py +0 -0
  326. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_domain_properties.py +0 -0
  327. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_drill_spec.py +0 -0
  328. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_execution_context.py +0 -0
  329. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_executor.py +0 -0
  330. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_executor_drill.py +0 -0
  331. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_faults.py +0 -0
  332. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_fingerprint.py +0 -0
  333. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_fork_atomicity.py +0 -0
  334. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_lease_repository.py +0 -0
  335. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_leases.py +0 -0
  336. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_load_strategy.py +0 -0
  337. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_m12_step1_catalog.py +0 -0
  338. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_m8_operations.py +0 -0
  339. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_m9_catalog.py +0 -0
  340. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_network_path_model.py +0 -0
  341. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_observability.py +0 -0
  342. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_observations.py +0 -0
  343. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_resilience_report.py +0 -0
  344. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_resolve.py +0 -0
  345. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_resource_conflict_exec.py +0 -0
  346. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_resource_manager.py +0 -0
  347. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_resources.py +0 -0
  348. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_risks.py +0 -0
  349. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_run_outcome.py +0 -0
  350. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_runtime_adapter.py +0 -0
  351. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_success.py +0 -0
  352. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_three_locus.py +0 -0
  353. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_tool_runner.py +0 -0
  354. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_topology.py +0 -0
  355. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_topology_ctr.py +0 -0
  356. {mayhem_cli-0.5.1 → mayhem_cli-0.8.0}/tests/unit/test_watchdog.py +0 -0
@@ -25,14 +25,14 @@ jobs:
25
25
  run: python -m pip install --quiet uv
26
26
  - name: Sync dev dependencies
27
27
  run: uv sync --group dev
28
- - name: Run tests
29
- run: uv run pytest tests/unit tests/integration
28
+ - name: Run unit tests
29
+ run: uv run pytest tests/unit
30
+ - name: Run integration tests
31
+ run: uv run pytest tests/integration
30
32
  # NOTE: `ruff check src/` is NOT gated here — the repository's committed
31
33
  # ruff config currently reports 30-49 pre-existing violations under every
32
34
  # ruff generation (0.8-0.16); the project has no lint-green baseline in
33
35
  # its history. Land a lint-cleanup first, then re-add `ruff check src/`.
34
- - name: Architectural contracts
35
- run: uv run lint-imports
36
36
 
37
37
  build-and-publish:
38
38
  name: Build and publish to PyPI
@@ -55,4 +55,35 @@ jobs:
55
55
  # magichrist, repo Mayhem, workflow release.yml). Do NOT add a
56
56
  # username/password here — the action would try token auth.
57
57
  - name: Publish to PyPI
58
- uses: pypa/gh-action-pypi-publish@release/v1
58
+ uses: pypa/gh-action-pypi-publish@release/v1
59
+
60
+ publish-github-release:
61
+ name: Create GitHub release from cliff changelog
62
+ needs: test
63
+ runs-on: ubuntu-latest
64
+ permissions:
65
+ contents: write # create the GitHub release
66
+ steps:
67
+ # Full history + tags so git-cliff can resolve commit ranges.
68
+ - uses: actions/checkout@v4
69
+ with:
70
+ fetch-depth: 0
71
+ - name: Install git-cliff
72
+ run: |
73
+ curl -sSL -o /tmp/git-cliff.tar.gz \
74
+ https://github.com/orhun/git-cliff/releases/download/v2.14.1/git-cliff-2.14.1-x86_64-unknown-linux-gnu.tar.gz
75
+ tar -xzf /tmp/git-cliff.tar.gz -C /tmp
76
+ sudo install -m755 /tmp/git-cliff-*/git-cliff /usr/local/bin/git-cliff
77
+ git-cliff --version
78
+ # NOTE: names the invoking tag explicitly (`--tag`) instead of using
79
+ # `--latest` — when HEAD sits exactly on the tag (always true for a
80
+ # tag-push checkout) `--latest` degrades to a single-commit section.
81
+ # `--tag "$GITHUB_REF_NAME"` renders the same latest-release notes for
82
+ # both tag conventions (`0.5.1` and `v0.5.1`).
83
+ - name: Render release notes
84
+ run: git-cliff --config cliff.toml --tag "$GITHUB_REF_NAME" --strip header -o /tmp/body.md
85
+ - name: Create GitHub release
86
+ uses: softprops/action-gh-release@v2
87
+ with:
88
+ name: ${{ github.ref_name }}
89
+ body_path: /tmp/body.md
@@ -0,0 +1,415 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ This changelog is generated from the project's git history by
6
+ [git-cliff](https://git-cliff.org). Mayhem commits are grouped both by the
7
+ **drill phase** that produced them (Explore / Expert / Coverage / Next) and
8
+ by conventional-commit type — see the phase map below.
9
+
10
+ ## 0.6.0 - 2026-09-11
11
+
12
+
13
+
14
+ ### 🚀 Features
15
+
16
+ - Plan for 0.6.0
17
+
18
+
19
+
20
+ ### 📚 Documentation
21
+
22
+ - **feat-1**: Ground every §1 claim in a verification log + persona design rules
23
+
24
+ - New features dictation
25
+
26
+
27
+
28
+ ### 🧪 Testing
29
+
30
+ - Verify config absorption, CLI contract, coverage, KPI + ranking
31
+
32
+
33
+ ## 0.5.1 - 2026-09-09
34
+
35
+
36
+
37
+ ### 🚀 Features
38
+
39
+ - Add example experiment definitions (maniac-hour, proc-pause-drill)
40
+
41
+ - Add net.load fault
42
+
43
+ - Add color logs, better readability, also fix some bugs
44
+
45
+ - Add execution to agents
46
+
47
+ - Topology service is better now
48
+
49
+ - Lease now have more capabilities
50
+
51
+ - Adrs and milestones are mostly done
52
+
53
+ - Kube and other adrs applied
54
+
55
+ - Add M0011 migration for M5 run and outcome tables
56
+
57
+ - Add Run/Outcome persistence methods to Store
58
+
59
+ - Add M0012 migration for M5 coverage table
60
+
61
+ - Add candidates module
62
+
63
+ - Add coverage module
64
+
65
+ - Add m5_campaign module
66
+
67
+ - Add run_outcome module
68
+
69
+ - Add campaign_engine module
70
+
71
+ - Add candidate_gates module
72
+
73
+ - Add candidate_generator module
74
+
75
+ - Add coverage_repository module
76
+
77
+ - Add maniac module
78
+
79
+ - Add report module
80
+
81
+ - Add new faults and better tested campaign+runner
82
+
83
+ - **resilience**: Attach end-of-run resilience score + diagnosis to drill runs
84
+
85
+ - **dependency**: Add 'mayhem dependency compile' to bake fault tooling into compose
86
+
87
+ - **janitor**: Finalize ORPHANED/RELEASING and surrender stale DIRTY leases
88
+
89
+ - **lifecycle**: TTL-sweep sticky leases before every run
90
+
91
+ - **examples**: Add net.load fault to the testCase api drill
92
+
93
+ - **resilience**: Grade bands and grounded metric table in the report
94
+
95
+ - **cli**: Maniac zero-config synthesis and --ctr container scoping
96
+
97
+
98
+
99
+ ### 🐛 Bug Fixes
100
+
101
+ - **faults**: Better handling
102
+
103
+ - **app**: Fix known issues in app arch
104
+
105
+ - Minor change
106
+
107
+ - Executor is now behaving right
108
+
109
+ - Config old syntax removed, updated DSL
110
+
111
+ - Maniac cli now works as it should
112
+
113
+ - **impact**: Gate every in-container fault on its real tooling
114
+
115
+ - Net.load uses localhost if container exposes port else must gain ip
116
+
117
+ - **leases**: DIRTY is not terminal — may only be surrendered to EXPIRED
118
+
119
+ - **executor**: Resume orphan recovery from any checkpoint state
120
+
121
+ - **compensation**: Clock.skew inject must double-quote $target expansion
122
+
123
+ - **impact**: Gate SYS_TIME faults as inert under rootless engines
124
+
125
+ - **dependency**: Warn when bootstrapped service relies on image CMD only
126
+
127
+ - **examples**: Give testcase-lb an explicit command
128
+
129
+ - Clock.skew and process.stop are fixed, also add failure policy: fast-fail, continue
130
+
131
+ - **faults**: Accept numeric seconds for DURATION params
132
+
133
+ - **topology**: Container resolves as running when state inspect fails
134
+
135
+ - **janitor**: Reclaim crashed controllers' leases before TTL
136
+
137
+
138
+
139
+ ### 💼 Other
140
+
141
+ - Init
142
+
143
+ - Init
144
+
145
+ - Add more bugs
146
+
147
+ - Updated README
148
+
149
+ - Near release
150
+
151
+ - Add more bugs
152
+
153
+ - 0.2.0dev
154
+
155
+ - Update executors module
156
+
157
+ - Update compensation module
158
+
159
+ - Update catalog module
160
+
161
+ - Update faults module
162
+
163
+ - Remove cached .pyc file
164
+
165
+ - Update agent_protocol tests
166
+
167
+ - Update executor tests
168
+
169
+ - Update README
170
+
171
+ - Remove answer2 doc
172
+
173
+ - Update drill-spec doc
174
+
175
+ - Remove milestones docs
176
+
177
+ - Remove plan-drill-spec doc
178
+
179
+ - Remove runtime-adapters plan doc
180
+
181
+ - Update executors module
182
+
183
+ - Update impact module
184
+
185
+ - Update probes module
186
+
187
+ - Update compensation module
188
+
189
+ - Update executor controller module
190
+
191
+ - Update planner module
192
+
193
+ - Update resource_manager module
194
+
195
+ - Update safety module
196
+
197
+ - Update capabilities module
198
+
199
+ - Update catalog module
200
+
201
+ - Update common module
202
+
203
+ - Update events module
204
+
205
+ - Update execution_context module
206
+
207
+ - Update execution_loci module
208
+
209
+ - Update experiments module
210
+
211
+ - Update faults module
212
+
213
+ - Update k8s_adapter module
214
+
215
+ - Update topology module
216
+
217
+ - Update migrations module
218
+
219
+ - Update migrator module
220
+
221
+ - Update report module
222
+
223
+ - Update store module
224
+
225
+ - Update adapter_registry module
226
+
227
+ - Update docker_adapter module
228
+
229
+ - Update topology service module
230
+
231
+ - Update m5 e2e tests
232
+
233
+ - Update agents tests
234
+
235
+ - Update cancellation tests
236
+
237
+ - Update compensation tests
238
+
239
+ - Update coverage tests
240
+
241
+ - Update drill_spec tests
242
+
243
+ - Update executor tests
244
+
245
+ - Update faults tests
246
+
247
+ - Update maniac tests
248
+
249
+ - Update report tests
250
+
251
+ - Update run_outcome tests
252
+
253
+ - Update topology_providers tests
254
+
255
+ - Add MS-Complete doc
256
+
257
+ - Add ADR-M4-3 success criteria
258
+
259
+ - Add ADR-M4-4 observability
260
+
261
+ - Add observability_collector module
262
+
263
+ - Add decisions module
264
+
265
+ - Add observability module
266
+
267
+ - Add success module
268
+
269
+ - Add m7 k8s tests
270
+
271
+ - Add m8 operations tests
272
+
273
+ - Add observability tests
274
+
275
+ - Add success tests
276
+
277
+ - Rewrite README: drill-engine positioning, comparison table, run transcript walkthrough, quickstart
278
+
279
+ - Expand example drill: recovery off, check_spec, success criteria, observability sources, container.restart/pause faults
280
+
281
+ - Print copy-paste run handle with mayhem history command after run
282
+
283
+ - Pass spec_dir into plan_drill so relative asset paths resolve against the drill file
284
+
285
+ - Materialize user-supplied k6 script content into container instead of inline GET script
286
+
287
+ - False keeps fault in place, releases lease terminally as kept_faulted without dirty flag
288
+
289
+ - Embed net.load script content into frozen plan and propagate recovery flag per fault
290
+
291
+ - Add net.load script param for custom k6 script.js path
292
+
293
+ - Add recovery flag to DrillConfig, DrillFault override, and PlannedFault
294
+
295
+ - Emit ProcessNode with main PID so process-addressed faults resolve, matching docker provider
296
+
297
+ - Assert run output includes the mayhem history copy-paste handle
298
+
299
+ - Update README
300
+
301
+ - Remove MS-Complete.md
302
+
303
+ - Remove deprecated ADR documents
304
+
305
+ - Update drill spec documentation
306
+
307
+ - Update agents executors
308
+
309
+ - Update CLI app
310
+
311
+ - Update CLI lifecycle
312
+
313
+ - Update CLI services
314
+
315
+ - Update config
316
+
317
+ - Update controller compensation
318
+
319
+ - Update controller planner
320
+
321
+ - Update domain catalog
322
+
323
+ - Update domain decisions
324
+
325
+ - Update domain experiments
326
+
327
+ - Update unit test CLI
328
+
329
+ - Update unit test maniac
330
+
331
+ - Ongoing pypi release🎊
332
+
333
+
334
+
335
+ ### 🚜 Refactor
336
+
337
+ - Rename package tgondi to mayhem
338
+
339
+ - Ruff format
340
+
341
+
342
+
343
+ ### 📚 Documentation
344
+
345
+ - Update documentation for mayhem rename and add re-design/rename notes
346
+
347
+ - Removed old docs, new arch plan in next commit
348
+
349
+ - Document recovery control and net.load script param in drill spec
350
+
351
+
352
+
353
+ ### 🎨 Styling
354
+
355
+ - Reformat threshold type-check conditional in probes.py
356
+
357
+
358
+
359
+ ### 🧪 Testing
360
+
361
+ - Update and add tests for renamed mayhem package
362
+
363
+ - **e2e**: Automated e2e tests with justfile
364
+
365
+ - **e2e**: Fixed some errors
366
+
367
+ - **e2e**: All tests pass 🎉
368
+
369
+ - **unit**: Near pass
370
+
371
+ - Add M5 campaign semantics and execution loop tests
372
+
373
+ - Add m5 e2e integration tests
374
+
375
+ - Add candidates unit tests
376
+
377
+ - Add coverage unit tests
378
+
379
+ - Add maniac unit tests
380
+
381
+ - Add report unit tests
382
+
383
+ - Add run_outcome unit tests
384
+
385
+ - Test net.load user k6 script content embedding in inject argv
386
+
387
+ - Test recovery flag defaults and per-fault override in DrillSpec
388
+
389
+ - Test recovery:false keeps process stopped with kept_faulted lease and skipped undo
390
+
391
+ - Test net.load script embedding against spec_dir and recovery propagation to plan
392
+
393
+ - Add container x fault matrix and fix stale config-show e2e assertion
394
+
395
+ - **leases**: DIRTY surrender-only and janitor-only EXPIRED transition
396
+
397
+ - **domain**: DIRTY may transition to EXPIRED in the leak-property table
398
+
399
+ - **janitor**: Stale DIRTY surrendered, ORPHANED/RELEASING finalized
400
+
401
+ - **compensation**: Clock.skew full-script expansion regression
402
+
403
+ - **impact**: Rootless detection + SYS_TIME inert gating
404
+
405
+ - **e2e**: Compile warns on program-less service, silent when command declared
406
+
407
+
408
+
409
+ ### ⚙️ Miscellaneous Tasks
410
+
411
+ - Update gitignore for mayhem rename and local artifacts
412
+
413
+ - **examples**: Commit compiled docker-compose.mayhem.yml for testCase
414
+
415
+ <!-- generated by git-cliff -->
@@ -9,9 +9,10 @@ set shell := ["bash", "-euo", "pipefail", "-c"]
9
9
 
10
10
  _testcase := "examples/testCase"
11
11
  _compose := _testcase / "docker-compose.yml"
12
- _config := _testcase / "mayhem.yml"
12
+ _config := _testcase / "mayhem.yaml"
13
13
  _spec := _testcase / "mayhem.yaml"
14
14
  _db := ".mayhem/e2e.db"
15
+ _workers := "5"
15
16
 
16
17
  # ── setup ────────────────────────────────────────────────────────────────────
17
18
 
@@ -72,13 +73,6 @@ validate: setup
72
73
  mayhem --db {{ _db }} validate {{ _spec }} --compose {{ _compose }}
73
74
  @echo "✓ validate"
74
75
 
75
- # Validate with explicit process topology (no compose auto-detect)
76
- validate-process:
77
- @echo "=== validate --process ==="
78
- mayhem validate {{ _spec }} \
79
- --process "download-1=10001" --process "download-2=10002"
80
- @echo "✓ validate --process"
81
-
82
76
  # Plan the experiment
83
77
  plan:
84
78
  @echo "=== plan ==="
@@ -108,16 +102,21 @@ history:
108
102
  echo "✓ history"; \
109
103
  fi
110
104
 
111
- # Recovery sweep (orphaned fault leases)
112
- recover: setup
105
+ # Recovery sweep (orphaned fault leases for the most recent run)
106
+ recover:
113
107
  @echo "=== recover ==="
114
- mayhem --db {{ _db }} recover
108
+ @run_id=$$(sqlite3 {{ _db }} "SELECT id FROM runs ORDER BY rowid DESC LIMIT 1" 2>/dev/null || echo ""); \
109
+ if [ -z "$$run_id" ]; then \
110
+ echo "⚠ no runs in DB — skipping recover"; \
111
+ else \
112
+ mayhem --db {{ _db }} recover "$$run_id"; \
113
+ fi
115
114
  @echo "✓ recover"
116
115
 
117
116
  # Janitor sweep (stale runs / resources)
118
117
  janitor: setup
119
118
  @echo "=== janitor ==="
120
- mayhem --db {{ _db }} janitor sweep
119
+ mayhem --db {{ _db }} janitor
121
120
  @echo "✓ janitor"
122
121
 
123
122
  # ── campaign CRUD ────────────────────────────────────────────────────────────
@@ -125,14 +124,16 @@ janitor: setup
125
124
  # Create, list, show, start, abort, delete a campaign
126
125
  campaign: setup
127
126
  @echo "=== campaign ==="
128
- mayhem --db {{ _db }} campaign create --name "e2e-campaign" --hypothesis "stack survives chaos"
127
+ mayhem --db {{ _db }} campaign create "e2e-campaign" --hypothesis "stack survives chaos"
129
128
  mayhem --db {{ _db }} campaign list
130
- @cid=$$(sqlite3 {{ _db }} "SELECT id FROM campaigns ORDER BY rowid DESC LIMIT 1"); \
129
+ @cid=$$(sqlite3 {{ _db }} "SELECT id FROM campaigns WHERE name = 'e2e-campaign' ORDER BY rowid DESC LIMIT 1"); \
131
130
  mayhem --db {{ _db }} campaign show "$$cid"; \
132
131
  mayhem --db {{ _db }} campaign status "$$cid"; \
133
132
  mayhem --db {{ _db }} campaign start "$$cid" || true; \
134
- mayhem --db {{ _db }} campaign abort "$$cid" || true; \
135
- mayhem --db {{ _db }} campaign delete "$$cid"
133
+ mayhem --db {{ _db }} campaign abort "$$cid" || true
134
+ mayhem --db {{ _db }} campaign create "e2e-delete-campaign"
135
+ @delete_cid=$$(sqlite3 {{ _db }} "SELECT id FROM campaigns WHERE name = 'e2e-delete-campaign' ORDER BY rowid DESC LIMIT 1"); \
136
+ mayhem --db {{ _db }} campaign delete --yes "$$delete_cid"
136
137
  @echo "✓ campaign"
137
138
 
138
139
  # ── full round-trip ─────────────────────────────────────────────────────────
@@ -145,8 +146,8 @@ full: setup
145
146
  mayhem --db {{ _db }} run {{ _spec }} --compose {{ _compose }}
146
147
  mayhem --db {{ _db }} status
147
148
  @run_id=$$(sqlite3 {{ _db }} "SELECT id FROM runs ORDER BY rowid DESC LIMIT 1"); \
148
- mayhem --db {{ _db }} history "$$run_id"
149
- mayhem --db {{ _db }} recover
149
+ mayhem --db {{ _db }} history "$$run_id"; \
150
+ mayhem --db {{ _db }} recover "$$run_id"
150
151
  @echo "✓ full round-trip"
151
152
 
152
153
  # ── stack management ─────────────────────────────────────────────────────────
@@ -169,7 +170,7 @@ stack-down:
169
170
  # Run unit tests
170
171
  test-unit:
171
172
  @echo "=== unit tests ==="
172
- python3 -m pytest tests/unit/ -v --tb=short
173
+ python3 -m pytest tests/unit/ -n {{ _workers }} --dist loadfile -v --tb=short
173
174
  @echo "✓ unit tests"
174
175
 
175
176
  # Run e2e tests (in-process, no containers needed)
@@ -202,3 +203,12 @@ e2e: stack-up topology toolkit config experiment full campaign test
202
203
  @echo "╔══════════════════════════════════════════════╗"
203
204
  @echo "║ ALL E2E RECIPES PASSED ║"
204
205
  @echo "╚══════════════════════════════════════════════╝"
206
+
207
+ # ── changelog ─────────────────────────────────────────────────────────────────
208
+ # Regenerate CHANGELOG.md from git history (git-cliff)
209
+ changelog:
210
+ git-cliff --config cliff.toml -o CHANGELOG.md
211
+
212
+ # Render notes for the current release only (used as the GitHub release body)
213
+ changelog-release:
214
+ git-cliff --config cliff.toml --tag "$$(git describe --tags --abbrev=0)" --strip header