mayhem-cli 0.8.0__tar.gz → 0.9.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 (424) hide show
  1. mayhem_cli-0.9.0/.coverage +0 -0
  2. mayhem_cli-0.9.0/.github/workflows/ci.yml +146 -0
  3. mayhem_cli-0.9.0/.github/workflows/conformance.yml +34 -0
  4. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/CHANGELOG.md +250 -0
  5. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/Justfile +39 -26
  6. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/PKG-INFO +90 -15
  7. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/README.md +89 -14
  8. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/config.md +116 -14
  9. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/drill-spec.md +142 -9
  10. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/grounding-rules.md +10 -3
  11. mayhem_cli-0.9.0/docs/observability.md +44 -0
  12. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/policy-and-break-glass.md +6 -3
  13. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/provider-sdk.md +36 -0
  14. mayhem_cli-0.9.0/docs/reference/cli.md +289 -0
  15. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/reference/fault-catalog.md +10 -0
  16. mayhem_cli-0.9.0/docs/reference/output-schema.md +76 -0
  17. mayhem_cli-0.9.0/docs/v0.9.0/01-vision-and-positioning.md +64 -0
  18. mayhem_cli-0.9.0/docs/v0.9.0/02-feature-brainstorm.md +173 -0
  19. mayhem_cli-0.9.0/docs/v0.9.0/03-gaps-and-standards.md +106 -0
  20. mayhem_cli-0.9.0/docs/v0.9.0/04-architecture-and-decisions.md +115 -0
  21. mayhem_cli-0.9.0/docs/v0.9.0/05-release-roadmap.md +140 -0
  22. mayhem_cli-0.9.0/docs/v0.9.0/06-core-implementation-plan.md +276 -0
  23. mayhem_cli-0.9.0/docs/v0.9.0/07-expansion-implementation-plan.md +274 -0
  24. mayhem_cli-0.9.0/docs/v0.9.0/08-release-readiness.md +98 -0
  25. mayhem_cli-0.9.0/docs/v0.9.0/09-decision-log.md +65 -0
  26. mayhem_cli-0.9.0/docs/v0.9.0/10-repository-evidence.md +97 -0
  27. mayhem_cli-0.9.0/docs/v0.9.0/README.md +38 -0
  28. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/pyproject.toml +10 -4
  29. mayhem_cli-0.9.0/scripts/verify_release_artifacts.py +91 -0
  30. mayhem_cli-0.9.0/src/mayhem/__main__.py +8 -0
  31. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/cli/app.py +62 -2
  32. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/cli/campaign.py +239 -3
  33. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/cli/command_registry.py +8 -0
  34. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/cli/dependency.py +32 -1
  35. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/cli/doctor.py +4 -44
  36. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/cli/errors.py +26 -10
  37. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/cli/execution.py +14 -0
  38. mayhem_cli-0.9.0/src/mayhem/cli/experiment.py +122 -0
  39. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/cli/expert.py +1 -1
  40. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/cli/explore.py +30 -5
  41. mayhem_cli-0.9.0/src/mayhem/cli/game_day.py +330 -0
  42. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/cli/init.py +2 -2
  43. mayhem_cli-0.9.0/src/mayhem/cli/inspect.py +526 -0
  44. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/cli/lifecycle.py +585 -89
  45. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/cli/output.py +38 -0
  46. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/cli/render.py +15 -0
  47. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/cli/services.py +217 -16
  48. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/cli/toolkit.py +88 -0
  49. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/cli/topology.py +58 -63
  50. mayhem_cli-0.9.0/src/mayhem/cli/verify_bundle.py +70 -0
  51. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/cli/workflows.py +1 -1
  52. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/config.py +188 -5
  53. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/controller/cell_runner.py +24 -0
  54. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/controller/executor.py +152 -5
  55. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/controller/planner.py +3 -0
  56. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/controller/preflight.py +58 -17
  57. mayhem_cli-0.9.0/src/mayhem/domain/admission.py +89 -0
  58. mayhem_cli-0.9.0/src/mayhem/domain/campaign_checkpoint.py +217 -0
  59. mayhem_cli-0.9.0/src/mayhem/domain/capability_status.py +117 -0
  60. mayhem_cli-0.9.0/src/mayhem/domain/coverage_graph.py +260 -0
  61. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/evidence.py +27 -0
  62. mayhem_cli-0.9.0/src/mayhem/domain/evidence_bundle.py +309 -0
  63. mayhem_cli-0.9.0/src/mayhem/domain/execution_intent.py +332 -0
  64. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/experiments.py +9 -1
  65. mayhem_cli-0.9.0/src/mayhem/domain/game_day.py +219 -0
  66. mayhem_cli-0.9.0/src/mayhem/domain/observations.py +230 -0
  67. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/preflight.py +10 -0
  68. mayhem_cli-0.9.0/src/mayhem/domain/redaction.py +85 -0
  69. mayhem_cli-0.9.0/src/mayhem/domain/replay.py +74 -0
  70. mayhem_cli-0.9.0/src/mayhem/domain/residual_impact.py +175 -0
  71. mayhem_cli-0.9.0/src/mayhem/domain/runtime_context.py +102 -0
  72. mayhem_cli-0.9.0/src/mayhem/domain/scenarios.py +345 -0
  73. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/target_profiles.py +83 -50
  74. mayhem_cli-0.9.0/src/mayhem/infra/campaign_checkpoint_repository.py +75 -0
  75. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/infra/catalog_report.py +110 -0
  76. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/infra/coverage_repository.py +166 -0
  77. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/infra/diagnostics.py +254 -55
  78. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/infra/evidence.py +63 -8
  79. mayhem_cli-0.9.0/src/mayhem/infra/game_day_repository.py +62 -0
  80. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/infra/migrations.py +112 -0
  81. mayhem_cli-0.9.0/src/mayhem/infra/replay_repository.py +88 -0
  82. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/infra/report.py +6 -0
  83. mayhem_cli-0.9.0/src/mayhem/observability/__init__.py +20 -0
  84. mayhem_cli-0.9.0/src/mayhem/observability/base.py +56 -0
  85. mayhem_cli-0.9.0/src/mayhem/observability/loki.py +95 -0
  86. mayhem_cli-0.9.0/src/mayhem/observability/otel.py +72 -0
  87. mayhem_cli-0.9.0/src/mayhem/observability/prometheus.py +129 -0
  88. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/providers/builtin.py +6 -1
  89. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/providers/loader.py +80 -0
  90. mayhem_cli-0.9.0/src/mayhem/providers/observation.py +234 -0
  91. mayhem_cli-0.9.0/src/mayhem/providers/pack.py +195 -0
  92. mayhem_cli-0.9.0/src/mayhem/providers/permissions.py +122 -0
  93. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/toolkit/tool_runner.py +7 -3
  94. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/topology/providers/kubernetes.py +20 -10
  95. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/conftest.py +37 -0
  96. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/e2e/test_cli_e2e.py +49 -25
  97. mayhem_cli-0.9.0/tests/integration/test_artifact_secret_sweep.py +117 -0
  98. mayhem_cli-0.9.0/tests/integration/test_bundle_verifier.py +181 -0
  99. mayhem_cli-0.9.0/tests/integration/test_campaign_resume.py +210 -0
  100. mayhem_cli-0.9.0/tests/integration/test_coverage_delta.py +101 -0
  101. mayhem_cli-0.9.0/tests/integration/test_evidence_degradation.py +52 -0
  102. mayhem_cli-0.9.0/tests/integration/test_game_day_approval_flow.py +224 -0
  103. mayhem_cli-0.9.0/tests/integration/test_observability_run.py +100 -0
  104. mayhem_cli-0.9.0/tests/integration/test_recovery_proof.py +177 -0
  105. mayhem_cli-0.9.0/tests/integration/test_replay_roundtrip.py +26 -0
  106. mayhem_cli-0.9.0/tests/integration/test_scenario_plan_replay.py +133 -0
  107. mayhem_cli-0.9.0/tests/integration/test_slo_success_criteria.py +173 -0
  108. mayhem_cli-0.9.0/tests/package/test_wheel_smoke.py +78 -0
  109. mayhem_cli-0.9.0/tests/unit/test_action_outcome_contract.py +39 -0
  110. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_additive_schema.py +4 -0
  111. mayhem_cli-0.9.0/tests/unit/test_campaign_checkpoint.py +365 -0
  112. mayhem_cli-0.9.0/tests/unit/test_capability_dashboard.py +145 -0
  113. mayhem_cli-0.9.0/tests/unit/test_capability_truth.py +89 -0
  114. mayhem_cli-0.9.0/tests/unit/test_ci_workflow_contract.py +44 -0
  115. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_cli.py +40 -2
  116. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_cli_active_surface.py +2 -0
  117. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_cli_campaign.py +20 -0
  118. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_cli_doctor.py +2 -0
  119. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_cli_execution.py +6 -0
  120. mayhem_cli-0.9.0/tests/unit/test_cli_execution_intent.py +1154 -0
  121. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_cli_exhaustive_matrix.py +45 -13
  122. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_cli_exit_codes.py +3 -1
  123. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_command_inventory.py +3 -1
  124. mayhem_cli-0.9.0/tests/unit/test_config_target_profiles.py +496 -0
  125. mayhem_cli-0.9.0/tests/unit/test_coverage_graph.py +372 -0
  126. mayhem_cli-0.9.0/tests/unit/test_diagnostics_target_profiles.py +360 -0
  127. mayhem_cli-0.9.0/tests/unit/test_evidence_bundle.py +208 -0
  128. mayhem_cli-0.9.0/tests/unit/test_execution_intent.py +328 -0
  129. mayhem_cli-0.9.0/tests/unit/test_executor_admission.py +164 -0
  130. mayhem_cli-0.9.0/tests/unit/test_expansion_checkpoint.py +335 -0
  131. mayhem_cli-0.9.0/tests/unit/test_fault_pack_validation.py +230 -0
  132. mayhem_cli-0.9.0/tests/unit/test_game_day.py +179 -0
  133. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_k8s_cli.py +9 -3
  134. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_k8s_discovery.py +14 -4
  135. mayhem_cli-0.9.0/tests/unit/test_observability_connectors.py +275 -0
  136. mayhem_cli-0.9.0/tests/unit/test_observation_contract.py +281 -0
  137. mayhem_cli-0.9.0/tests/unit/test_provider_permissions.py +126 -0
  138. mayhem_cli-0.9.0/tests/unit/test_redaction_boundary.py +77 -0
  139. mayhem_cli-0.9.0/tests/unit/test_release_contract.py +556 -0
  140. mayhem_cli-0.9.0/tests/unit/test_replay_capsule.py +54 -0
  141. mayhem_cli-0.9.0/tests/unit/test_replay_cli.py +165 -0
  142. mayhem_cli-0.9.0/tests/unit/test_residual_impact.py +275 -0
  143. mayhem_cli-0.9.0/tests/unit/test_runtime_context.py +1286 -0
  144. mayhem_cli-0.9.0/tests/unit/test_scenario_compiler.py +260 -0
  145. mayhem_cli-0.9.0/tests/unit/test_target_profiles_config.py +287 -0
  146. mayhem_cli-0.9.0/tests/unit/test_v090_docs_contract.py +140 -0
  147. mayhem_cli-0.9.0/tests/unit/test_v090_edge_cases.py +587 -0
  148. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/uv.lock +26 -7
  149. mayhem_cli-0.8.0/docs/reference/cli.md +0 -110
  150. mayhem_cli-0.8.0/docs/reference/output-schema.md +0 -47
  151. mayhem_cli-0.8.0/src/mayhem/cli/experiment.py +0 -26
  152. mayhem_cli-0.8.0/src/mayhem/cli/inspect.py +0 -192
  153. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/.github/workflows/release.yml +0 -0
  154. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/.gitignore +0 -0
  155. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/cliff.toml +0 -0
  156. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/README.md +0 -0
  157. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/adr/adr-m7-1-k8s-executor.md +0 -0
  158. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/adr-adr-m7-1-k8s-executor-flip.md +0 -0
  159. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/architecture/fault-taxonomy.md +0 -0
  160. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/architecture/safety.md +0 -0
  161. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/architecture/toolkit.md +0 -0
  162. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/compensation.md +0 -0
  163. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/fault-catalog/README.md +0 -0
  164. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/fault-catalog/reliability-matrix.md +0 -0
  165. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/grounding-log.md +0 -0
  166. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/k8s-new.md +0 -0
  167. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/k8s-plan-1.md +0 -0
  168. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/k8s-plan-2.md +0 -0
  169. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/m7-k8s-executor-discovery.md +0 -0
  170. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/new-plan/00-product-and-cli-roadmap.md +0 -0
  171. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/new-plan/01-workflow-command-architecture.md +0 -0
  172. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/new-plan/02-guided-onboarding-and-target-profiles.md +0 -0
  173. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/new-plan/03-plan-first-execution-and-unified-evidence.md +0 -0
  174. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/new-plan/04-output-errors-and-script-compatibility.md +0 -0
  175. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/new-plan/05-configuration-policy-and-environment-safety.md +0 -0
  176. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/new-plan/06-docker-podman-reliability-slice.md +0 -0
  177. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/new-plan/07-first-class-kubernetes-engine.md +0 -0
  178. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/new-plan/08-fault-catalog-reliability-matrix.md +0 -0
  179. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/new-plan/09-campaigns-coverage-and-explore-loop.md +0 -0
  180. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/new-plan/10-diagnostics-recovery-and-reporting.md +0 -0
  181. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/new-plan/11-extension-api-and-packaging.md +0 -0
  182. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/new-plan/README.md +0 -0
  183. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/product/cli-product-direction.md +0 -0
  184. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/product/command-architecture.md +0 -0
  185. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/reference/experiment-dsl.md +0 -0
  186. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/reference/sqlite-schema.md +0 -0
  187. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/superpowers/plans/2026-09-24-container-kubernetes-fault-expansion-plan.md +0 -0
  188. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/superpowers/plans/2026-09-24-documentation-to-implementation-plan.md +0 -0
  189. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/superpowers/specs/2026-09-24-container-kubernetes-fault-expansion-design.md +0 -0
  190. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/docs/superpowers/specs/2026-09-24-documentation-to-implementation-design.md +0 -0
  191. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/examples/k8s/README.md +0 -0
  192. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/examples/k8s/kubernetes.yaml +0 -0
  193. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/examples/k8s/mayhem.yaml +0 -0
  194. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/examples/providers/test-catalog.json +0 -0
  195. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/examples/providers/test_provider.py +0 -0
  196. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/examples/testCase/data/hello.txt +0 -0
  197. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/examples/testCase/data/index.html +0 -0
  198. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/examples/testCase/docker-compose.mayhem.yml +0 -0
  199. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/examples/testCase/docker-compose.yml +0 -0
  200. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/examples/testCase/mayhem-safe-docker-podman.yaml +0 -0
  201. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/examples/testCase/mayhem.yaml +0 -0
  202. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/examples/testCase/nginx.conf +0 -0
  203. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/agent/__init__.py +0 -0
  204. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/agent/cli.py +0 -0
  205. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/agents/__init__.py +0 -0
  206. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/agents/capabilities.py +0 -0
  207. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/agents/executors.py +0 -0
  208. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/agents/impact.py +0 -0
  209. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/agents/k8s_control.py +0 -0
  210. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/agents/k8s_resolve.py +0 -0
  211. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/agents/lease_client.py +0 -0
  212. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/agents/probes.py +0 -0
  213. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/agents/protocol.py +0 -0
  214. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/agents/server.py +0 -0
  215. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/agents/sinks.py +0 -0
  216. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/agents/transports.py +0 -0
  217. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/agents/watchdog.py +0 -0
  218. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/cli/__init__.py +0 -0
  219. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/cli/commands.py +0 -0
  220. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/cli/config_cmd.py +0 -0
  221. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/cli/context.py +0 -0
  222. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/cli/coverage_cmd.py +0 -0
  223. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/cli/exit_codes.py +0 -0
  224. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/cli/extend.py +0 -0
  225. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/cli/next_cmd.py +0 -0
  226. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/cli/renderers.py +0 -0
  227. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/cli/resolver.py +0 -0
  228. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/cli/style.py +0 -0
  229. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/controller/__init__.py +0 -0
  230. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/controller/compensation.py +0 -0
  231. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/controller/explore_flow.py +0 -0
  232. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/controller/janitor.py +0 -0
  233. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/controller/k8s_runtime.py +0 -0
  234. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/controller/observability_collector.py +0 -0
  235. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/controller/observations.py +0 -0
  236. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/controller/plan_diff.py +0 -0
  237. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/controller/recovery.py +0 -0
  238. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/controller/resilience_report.py +0 -0
  239. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/controller/resource_manager.py +0 -0
  240. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/controller/safety.py +0 -0
  241. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/controller/target_selector.py +0 -0
  242. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/__init__.py +0 -0
  243. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/campaigns.py +0 -0
  244. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/cancellation.py +0 -0
  245. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/candidates.py +0 -0
  246. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/capabilities.py +0 -0
  247. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/catalog.py +0 -0
  248. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/cell_rules.py +0 -0
  249. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/checks.py +0 -0
  250. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/common.py +0 -0
  251. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/coverage.py +0 -0
  252. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/decisions.py +0 -0
  253. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/errors.py +0 -0
  254. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/events.py +0 -0
  255. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/execution_context.py +0 -0
  256. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/execution_loci.py +0 -0
  257. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/faults.py +0 -0
  258. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/identity.py +0 -0
  259. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/k8s_adapter.py +0 -0
  260. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/leases.py +0 -0
  261. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/load_strategy.py +0 -0
  262. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/m5_campaign.py +0 -0
  263. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/maniac.py +0 -0
  264. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/observability.py +0 -0
  265. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/outcomes.py +0 -0
  266. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/policy.py +0 -0
  267. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/provider.py +0 -0
  268. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/remote_agent_interface.py +0 -0
  269. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/resolution.py +0 -0
  270. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/resources.py +0 -0
  271. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/risks.py +0 -0
  272. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/run_outcome.py +0 -0
  273. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/runtime_adapter.py +0 -0
  274. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/success.py +0 -0
  275. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/target.py +0 -0
  276. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/target_selector.py +0 -0
  277. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/domain/topology.py +0 -0
  278. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/infra/__init__.py +0 -0
  279. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/infra/campaign_engine.py +0 -0
  280. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/infra/candidate_gates.py +0 -0
  281. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/infra/candidate_generator.py +0 -0
  282. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/infra/kpi.py +0 -0
  283. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/infra/lease_repository.py +0 -0
  284. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/infra/maniac.py +0 -0
  285. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/infra/migrator.py +0 -0
  286. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/infra/project_detection.py +0 -0
  287. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/infra/ranking.py +0 -0
  288. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/infra/store.py +0 -0
  289. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/providers/__init__.py +0 -0
  290. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/providers/protocols.py +0 -0
  291. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/providers/registry.py +0 -0
  292. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/py.typed +0 -0
  293. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/schemas/output_v1.json +0 -0
  294. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/spec.py +0 -0
  295. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/toolkit/__init__.py +0 -0
  296. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/toolkit/fingerprint.py +0 -0
  297. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/toolkit/hashing.py +0 -0
  298. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/toolkit/manifests/docker.yaml +0 -0
  299. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/toolkit/manifests/podman.yaml +0 -0
  300. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/toolkit/manifests/stress-ng.yaml +0 -0
  301. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/toolkit/manifests/tc-netem.yaml +0 -0
  302. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/toolkit/manifests/toxiproxy.yaml +0 -0
  303. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/toolkit/registry.py +0 -0
  304. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/topology/__init__.py +0 -0
  305. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/topology/providers/__init__.py +0 -0
  306. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/topology/providers/adapter_registry.py +0 -0
  307. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/topology/providers/base.py +0 -0
  308. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/topology/providers/compose.py +0 -0
  309. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/topology/providers/docker_adapter.py +0 -0
  310. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/topology/providers/docker_runtime.py +0 -0
  311. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/topology/providers/k8s_manifest.py +0 -0
  312. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/topology/providers/podman_adapter.py +0 -0
  313. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/topology/resolve.py +0 -0
  314. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/src/mayhem/topology/service.py +0 -0
  315. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/e2e/__init__.py +0 -0
  316. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/fixtures/cli/commands_show.json +0 -0
  317. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/fixtures/cli/coverage.json +0 -0
  318. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/fixtures/cli/doctor.json +0 -0
  319. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/integration/test_agent_serve.py +0 -0
  320. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/integration/test_agent_watchdog_e2e.py +0 -0
  321. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/integration/test_m5_e2e.py +0 -0
  322. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/integration/test_store.py +0 -0
  323. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_accept_criteria.py +0 -0
  324. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_agent_capabilities.py +0 -0
  325. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_agent_protocol.py +0 -0
  326. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_agents.py +0 -0
  327. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_campaign_run.py +0 -0
  328. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_campaigns.py +0 -0
  329. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_cancellation.py +0 -0
  330. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_candidates.py +0 -0
  331. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_capability_matrix.py +0 -0
  332. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_capability_registry.py +0 -0
  333. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_capability_safety.py +0 -0
  334. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_cell_rules.py +0 -0
  335. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_cell_runner.py +0 -0
  336. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_check_spec.py +0 -0
  337. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_cli_config.py +0 -0
  338. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_cli_contract.py +0 -0
  339. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_cli_errors.py +0 -0
  340. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_cli_extend.py +0 -0
  341. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_cli_init.py +0 -0
  342. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_cli_output.py +0 -0
  343. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_cli_renderers.py +0 -0
  344. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_cli_resolver.py +0 -0
  345. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_cli_topology.py +0 -0
  346. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_cli_user_regressions.py +0 -0
  347. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_command_registry.py +0 -0
  348. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_compensation.py +0 -0
  349. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_config.py +0 -0
  350. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_container_fault_matrix.py +0 -0
  351. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_coverage.py +0 -0
  352. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_coverage_repository.py +0 -0
  353. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_diagnostics.py +0 -0
  354. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_documentation_consistency.py +0 -0
  355. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_domain_properties.py +0 -0
  356. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_drill_spec.py +0 -0
  357. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_example_specs_yaml.py +0 -0
  358. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_execution_context.py +0 -0
  359. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_executor.py +0 -0
  360. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_executor_drill.py +0 -0
  361. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_fault_catalog_all.py +0 -0
  362. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_fault_catalog_exhaustive.py +0 -0
  363. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_fault_catalog_metadata.py +0 -0
  364. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_fault_expansion_catalog.py +0 -0
  365. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_fault_expansion_container.py +0 -0
  366. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_fault_expansion_kubernetes.py +0 -0
  367. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_faults.py +0 -0
  368. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_fingerprint.py +0 -0
  369. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_fork_atomicity.py +0 -0
  370. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_impact_gate.py +0 -0
  371. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_janitor.py +0 -0
  372. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_k8s_manifest.py +0 -0
  373. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_k8s_plan1.py +0 -0
  374. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_k8s_plan2.py +0 -0
  375. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_k8s_selection.py +0 -0
  376. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_kpi.py +0 -0
  377. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_kplan1_targets.py +0 -0
  378. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_kplan2_topology.py +0 -0
  379. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_kplan3_resolver.py +0 -0
  380. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_kplan3_runtime.py +0 -0
  381. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_kplan5_runtime.py +0 -0
  382. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_kplan6_runtime.py +0 -0
  383. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_lease_repository.py +0 -0
  384. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_leases.py +0 -0
  385. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_lifecycle_run_liveness.py +0 -0
  386. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_load_strategy.py +0 -0
  387. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_m12_step1_catalog.py +0 -0
  388. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_m7_k8s.py +0 -0
  389. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_m8_operations.py +0 -0
  390. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_m9_catalog.py +0 -0
  391. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_maniac.py +0 -0
  392. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_migrations.py +0 -0
  393. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_network_path_model.py +0 -0
  394. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_observability.py +0 -0
  395. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_observations.py +0 -0
  396. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_plan_diff.py +0 -0
  397. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_planner.py +0 -0
  398. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_policy_explain.py +0 -0
  399. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_preflight.py +0 -0
  400. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_provider_loader.py +0 -0
  401. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_provider_registry.py +0 -0
  402. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_ranking.py +0 -0
  403. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_recovery.py +0 -0
  404. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_report.py +0 -0
  405. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_resilience_report.py +0 -0
  406. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_resolve.py +0 -0
  407. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_resource_conflict_exec.py +0 -0
  408. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_resource_manager.py +0 -0
  409. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_resources.py +0 -0
  410. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_risks.py +0 -0
  411. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_run_outcome.py +0 -0
  412. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_runtime_adapter.py +0 -0
  413. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_runtime_execution_matrix.py +0 -0
  414. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_safety.py +0 -0
  415. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_selection_modes.py +0 -0
  416. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_success.py +0 -0
  417. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_target_profiles.py +0 -0
  418. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_three_locus.py +0 -0
  419. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_tool_runner.py +0 -0
  420. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_topology.py +0 -0
  421. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_topology_ctr.py +0 -0
  422. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_topology_providers.py +0 -0
  423. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_watchdog.py +0 -0
  424. {mayhem_cli-0.8.0 → mayhem_cli-0.9.0}/tests/unit/test_workflow_groups.py +0 -0
Binary file
@@ -0,0 +1,146 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [v0.9.0, main, master]
6
+ pull_request:
7
+ workflow_dispatch:
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ concurrency:
13
+ group: ci-${{ github.workflow }}-${{ github.ref }}
14
+ cancel-in-progress: true
15
+
16
+ jobs:
17
+ unit:
18
+ name: unit
19
+ runs-on: ubuntu-latest
20
+ steps:
21
+ - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
22
+ - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
23
+ with:
24
+ python-version: "3.12"
25
+ - name: Install uv
26
+ run: python -m pip install --quiet uv
27
+ - run: uv sync --group dev
28
+ - run: uv run pytest tests/unit
29
+
30
+ integration:
31
+ name: integration
32
+ runs-on: ubuntu-latest
33
+ steps:
34
+ - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
35
+ - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
36
+ with:
37
+ python-version: "3.12"
38
+ - name: Install uv
39
+ run: python -m pip install --quiet uv
40
+ - run: uv sync --group dev
41
+ - run: uv run pytest tests/integration
42
+
43
+ e2e:
44
+ name: e2e (in-process)
45
+ runs-on: ubuntu-latest
46
+ steps:
47
+ - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
48
+ - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
49
+ with:
50
+ python-version: "3.12"
51
+ - name: Install uv
52
+ run: python -m pip install --quiet uv
53
+ - run: uv sync --group dev
54
+ - run: uv run pytest tests/e2e
55
+
56
+ schema:
57
+ name: schema
58
+ runs-on: ubuntu-latest
59
+ steps:
60
+ - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
61
+ - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
62
+ with:
63
+ python-version: "3.12"
64
+ - run: python -c "import json; json.load(open('src/mayhem/schemas/output_v1.json'))"
65
+
66
+ ruff-fatal:
67
+ name: ruff (fatal subset)
68
+ runs-on: ubuntu-latest
69
+ steps:
70
+ - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
71
+ - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
72
+ with:
73
+ python-version: "3.12"
74
+ - name: Install uv
75
+ run: python -m pip install --quiet uv
76
+ - run: uv sync --group dev
77
+ - run: uv run ruff check --select E9,F63,F7,F82,F821,F811 src/ tests/
78
+
79
+ package-build:
80
+ name: package build
81
+ runs-on: ubuntu-latest
82
+ needs: [unit, integration, e2e, ruff-fatal]
83
+ steps:
84
+ - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
85
+ with:
86
+ fetch-depth: 0
87
+ - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
88
+ with:
89
+ python-version: "3.12"
90
+ - name: Install build tooling
91
+ run: python -m pip install --upgrade build
92
+ - run: python -m build --sdist --wheel
93
+ - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
94
+ with:
95
+ name: dist
96
+ path: dist/
97
+ if-no-files-found: error
98
+
99
+ wheel-smoke:
100
+ name: wheel install smoke
101
+ runs-on: ubuntu-latest
102
+ needs: package-build
103
+ steps:
104
+ - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
105
+ - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
106
+ with:
107
+ python-version: "3.12"
108
+ - name: Install uv
109
+ run: python -m pip install --quiet uv
110
+ - uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
111
+ with:
112
+ name: dist
113
+ path: dist
114
+ - name: Run wheel smoke test
115
+ run: MAYHEM_PACKAGE_SMOKE=1 uv run pytest tests/package -q -rs
116
+
117
+ verify-artifacts:
118
+ name: verify release artifacts
119
+ runs-on: ubuntu-latest
120
+ needs: package-build
121
+ steps:
122
+ - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
123
+ - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
124
+ with:
125
+ python-version: "3.12"
126
+ - uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
127
+ with:
128
+ name: dist
129
+ path: dist
130
+ - run: python scripts/verify_release_artifacts.py dist
131
+
132
+ advisory:
133
+ name: advisory quality checks
134
+ runs-on: ubuntu-latest
135
+ continue-on-error: true
136
+ steps:
137
+ - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
138
+ - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
139
+ with:
140
+ python-version: "3.12"
141
+ - name: Install uv
142
+ run: python -m pip install --quiet uv
143
+ - run: uv sync --group dev
144
+ - run: uv run ruff check src/ tests/
145
+ - run: uv run mypy src/mayhem
146
+ - run: uv run lint-imports
@@ -0,0 +1,34 @@
1
+ name: Live Conformance
2
+
3
+ on:
4
+ workflow_dispatch:
5
+
6
+ permissions:
7
+ contents: read
8
+
9
+ jobs:
10
+ live-conformance:
11
+ name: live conformance (manual)
12
+ runs-on: ubuntu-latest
13
+ if: github.event_name == 'workflow_dispatch'
14
+ steps:
15
+ - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
16
+ - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
17
+ with:
18
+ python-version: "3.12"
19
+ - name: Install uv
20
+ run: python -m pip install --quiet uv
21
+ - run: uv sync --group dev
22
+ - name: Record conformance environment
23
+ run: |
24
+ date -u +%Y-%m-%dT%H:%M:%SZ > conformance-environment.txt
25
+ uname -a >> conformance-environment.txt
26
+ docker version --format '{{.Server.Version}}' >> conformance-environment.txt 2>&1 || true
27
+ kubectl version -o json >> conformance-environment.txt 2>&1 || true
28
+ - name: Run unit conformance profile
29
+ run: uv run pytest tests/unit -m nightly -q
30
+ - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
31
+ with:
32
+ name: conformance-environment
33
+ path: conformance-environment.txt
34
+ if-no-files-found: error
@@ -7,6 +7,256 @@ This changelog is generated from the project's git history by
7
7
  **drill phase** that produced them (Explore / Expert / Coverage / Next) and
8
8
  by conventional-commit type — see the phase map below.
9
9
 
10
+ ## [unreleased]
11
+
12
+
13
+
14
+ ### 📚 Documentation
15
+
16
+ - Add v0.9.0 roadmap and implementation plans
17
+
18
+ - Establish the v0.9.0 release truth baseline: checked command inventory, install
19
+ dependency contract, version metadata, and Justfile recipe paths
20
+
21
+
22
+ ## 0.8.0 - 2026-09-25
23
+
24
+
25
+
26
+ ### 🚀 Features
27
+
28
+ - Kubernetes targeting system
29
+
30
+ - Refined target.py
31
+
32
+ - Kube topology structure
33
+
34
+ - Kube topology for cli
35
+
36
+ - **k8s**: K-plan-3 container-level signal execution
37
+
38
+ - Update executors.py
39
+
40
+ - Update k8s_resolve.py
41
+
42
+ - Update lease_client.py
43
+
44
+ - Update campaign.py
45
+
46
+ - Update lifecycle.py
47
+
48
+ - Update services.py
49
+
50
+ - Update config.py
51
+
52
+ - Update cell_runner.py
53
+
54
+ - Update executor.py
55
+
56
+ - Update k8s_runtime.py
57
+
58
+ - Update safety.py
59
+
60
+ - Update leases.py
61
+
62
+ - Update resolution.py
63
+
64
+ - Update lease_repository.py
65
+
66
+ - Extend executor agents with K8s runtime support
67
+
68
+ - Add K8s control plane agent
69
+
70
+ - Update CLI app for K8s executor integration
71
+
72
+ - Update coverage command for K8s runtime
73
+
74
+ - Update explore command for K8s runtime
75
+
76
+ - Update next command for K8s runtime
77
+
78
+ - Update services command for K8s runtime
79
+
80
+ - Update toolkit for K8s runtime
81
+
82
+ - Update topology for K8s runtime
83
+
84
+ - Update controller executor for K8s runtime
85
+
86
+ - Extend K8s runtime with execution support
87
+
88
+ - Extend fault catalog with K8s faults
89
+
90
+ - Update K8s example spec
91
+
92
+ - Update executor agents
93
+
94
+ - Update dependencies for K8s runtime
95
+
96
+ - Update K8s control agent
97
+
98
+ - Update lifecycle CLI for K8s
99
+
100
+ - Update services CLI for K8s
101
+
102
+ - Update K8s runtime controller
103
+
104
+ - Update planner for K8s runtime
105
+
106
+ - Extend fault catalog
107
+
108
+ - Update common domain for K8s
109
+
110
+ - Add K8s adapter domain
111
+
112
+ - Update maniac domain for K8s
113
+
114
+ - Add runtime adapter for K8s
115
+
116
+ - Update target selector for K8s
117
+
118
+ - Add K8s manifest topology provider
119
+
120
+ - Add policy, evidence, provider, and schema foundations
121
+
122
+ - Expand agent and controller execution flows
123
+
124
+ - Expand CLI commands and output handling
125
+
126
+ - Finalize active CLI workflow surface
127
+
128
+
129
+
130
+ ### 🐛 Bug Fixes
131
+
132
+ - Release.yml
133
+
134
+ - Initialize slotted CLI exceptions safely
135
+
136
+
137
+
138
+ ### 💼 Other
139
+
140
+ - Update docs/adr-adr-m7-1-k8s-executor-flip.md
141
+
142
+ - Delete docs/features.md
143
+
144
+ - Delete docs/k-plan-1.md
145
+
146
+
147
+
148
+ ### 🚜 Refactor
149
+
150
+ - Format and ruff-fix
151
+
152
+
153
+
154
+ ### 📚 Documentation
155
+
156
+ - Enhance readme file, removed dev version stuff
157
+
158
+ - Kubernetes plans/spec/adrs
159
+
160
+ - Update README.md
161
+
162
+ - Update adr-m7-1-k8s-executor.md
163
+
164
+ - Update config.md
165
+
166
+ - Update drill-spec.md
167
+
168
+ - Remove k-plan-2.md
169
+
170
+ - Remove k-plan-3-implementation-subplans.md
171
+
172
+ - Remove k-plan-3-sub-plans-k8s-executor-flip.md
173
+
174
+ - Remove k-plan-3-sub-plans.md
175
+
176
+ - Remove k-plan-3.md
177
+
178
+ - Remove k-plan-4-sub-plans.md
179
+
180
+ - Remove k-plan-4.md
181
+
182
+ - Remove k-plan-5.md
183
+
184
+ - Add k8s-plan-1.md
185
+
186
+ - Add k8s-plan-2.md
187
+
188
+ - Update architecture and reference documentation
189
+
190
+ - Clarify the default installation bundle
191
+
192
+
193
+
194
+ ### 🎨 Styling
195
+
196
+ - Remove obsolete noqa suppressions
197
+
198
+
199
+
200
+ ### 🧪 Testing
201
+
202
+ - Add tests for kube
203
+
204
+ - Update test_kplan3_runtime.py
205
+
206
+ - Update test_m7_k8s.py
207
+
208
+ - Update test_safety.py
209
+
210
+ - Add test_kplan5_runtime.py
211
+
212
+ - Update CLI tests for K8s runtime
213
+
214
+ - Update container fault matrix tests for K8s
215
+
216
+ - Update example specs YAML tests for K8s
217
+
218
+ - Update fault catalog tests for K8s faults
219
+
220
+ - Update K8s plan-3 runtime tests
221
+
222
+ - Update K8s plan-5 runtime tests
223
+
224
+ - Add K8s plan-6 runtime tests
225
+
226
+ - Update CLI tests for K8s runtime
227
+
228
+ - Update K8s plan-6 runtime tests
229
+
230
+ - Add K8s manifest topology tests
231
+
232
+ - Expand runtime, CLI, provider, and policy coverage
233
+
234
+ - Add exhaustive CLI and runtime coverage
235
+
236
+ - Pin compose topology discovery runtime
237
+
238
+
239
+
240
+ ### ⚙️ Miscellaneous Tasks
241
+
242
+ - Update development tooling and package metadata
243
+
244
+ - Add provider and container examples
245
+
246
+ - **release**: Bundle Kubernetes and parallelize unit tests
247
+
248
+ - Remove broken architecture gate from release
249
+
250
+
251
+ ## 0.6.2 - 2026-09-11
252
+
253
+
254
+
255
+ ### 🐛 Bug Fixes
256
+
257
+ - ApiVersion was not added to tests
258
+
259
+
10
260
  ## 0.6.0 - 2026-09-11
11
261
 
12
262
 
@@ -27,33 +27,33 @@ setup:
27
27
  # Discover topology from compose + live runtime (containers, processes, services)
28
28
  topology:
29
29
  @echo "=== topology discover ==="
30
- mayhem topology discover --compose {{ _compose }} | python3 -m json.tool > /dev/null
30
+ mayhem discover topology --compose {{ _compose }} | python3 -m json.tool > /dev/null
31
31
  @echo "✓ topology discover"
32
32
 
33
33
  # Topology with prefix shorthand
34
34
  topology-prefix:
35
35
  @echo "=== topology prefix ==="
36
- mayhem top d --compose {{ _compose }} | python3 -m json.tool > /dev/null
36
+ mayhem disc topo --compose {{ _compose }} | python3 -m json.tool > /dev/null
37
37
  @echo "✓ topology prefix"
38
38
 
39
39
  # ── toolkit ──────────────────────────────────────────────────────────────────
40
40
 
41
- # List available faults and capabilities
41
+ # List available faults and capabilities (`mayhem discover`)
42
42
  toolkit:
43
43
  @echo "=== toolkit ==="
44
- mayhem toolkit faults
45
- mayhem toolkit list --json | python3 -m json.tool > /dev/null
44
+ mayhem discover faults
45
+ mayhem discover capabilities --json | python3 -m json.tool > /dev/null
46
46
  @echo "✓ toolkit"
47
47
 
48
48
  # ── config ───────────────────────────────────────────────────────────────────
49
49
 
50
- # Show and validate effective config (default + testCase)
50
+ # Show and validate effective config (default + testCase) via `mayhem prepare config`
51
51
  config:
52
52
  @echo "=== config ==="
53
- mayhem config show --json | python3 -m json.tool > /dev/null
54
- mayhem --config {{ _config }} config show --json | python3 -m json.tool > /dev/null
55
- mayhem config validate
56
- mayhem --config {{ _config }} config validate
53
+ mayhem prepare config show --json | python3 -m json.tool > /dev/null
54
+ mayhem --config {{ _config }} prepare config show --json | python3 -m json.tool > /dev/null
55
+ mayhem prepare config validate
56
+ mayhem --config {{ _config }} prepare config validate
57
57
  @echo "✓ config"
58
58
 
59
59
  # ── experiment ───────────────────────────────────────────────────────────────
@@ -67,38 +67,39 @@ experiment:
67
67
 
68
68
  # ── lifecycle: validate → plan → run → status → history → recover ────────────
69
69
 
70
- # Validate spec against live topology
70
+ # Validate spec against live topology (`mayhem prepare validate`)
71
71
  validate: setup
72
72
  @echo "=== validate ==="
73
- mayhem --db {{ _db }} validate {{ _spec }} --compose {{ _compose }}
73
+ mayhem --db {{ _db }} prepare validate {{ _spec }} --compose {{ _compose }}
74
74
  @echo "✓ validate"
75
75
 
76
- # Plan the experiment
76
+ # Plan the experiment (`mayhem prepare plan`)
77
77
  plan:
78
78
  @echo "=== plan ==="
79
- mayhem plan {{ _spec }} --compose {{ _compose }}
79
+ mayhem prepare plan {{ _spec }} --compose {{ _compose }}
80
80
  @echo "✓ plan"
81
81
 
82
82
  # Full run: inject faults, record events, compensate
83
83
  run: setup
84
84
  @echo "=== run ==="
85
- mayhem --db {{ _db }} run {{ _spec }} --compose {{ _compose }}
85
+ mayhem --db {{ _db }} run {{ _spec }} --compose {{ _compose }} --execute
86
86
  @echo "✓ run"
87
87
 
88
- # Show run status (JSON + text)
88
+ # Show run status (text + JSON) via `mayhem inspect runs`
89
89
  status: setup
90
90
  @echo "=== status ==="
91
- mayhem --db {{ _db }} status
91
+ mayhem --db {{ _db }} inspect runs
92
+ mayhem --db {{ _db }} inspect runs --json | python3 -m json.tool > /dev/null
92
93
  @echo "✓ status"
93
94
 
94
- # Show detailed run history (JSON + text)
95
+ # Show detailed run history (text + JSON) via `mayhem inspect history`
95
96
  history:
96
97
  @echo "=== history ==="
97
98
  @run_id=$$(sqlite3 {{ _db }} "SELECT id FROM runs ORDER BY rowid DESC LIMIT 1" 2>/dev/null || echo ""); \
98
99
  if [ -z "$$run_id" ]; then \
99
100
  echo "⚠ no runs in DB — skipping history"; \
100
101
  else \
101
- mayhem --db {{ _db }} history "$$run_id"; \
102
+ mayhem --db {{ _db }} inspect history "$$run_id"; \
102
103
  echo "✓ history"; \
103
104
  fi
104
105
 
@@ -109,7 +110,7 @@ recover:
109
110
  if [ -z "$$run_id" ]; then \
110
111
  echo "⚠ no runs in DB — skipping recover"; \
111
112
  else \
112
- mayhem --db {{ _db }} recover "$$run_id"; \
113
+ mayhem --db {{ _db }} recover execute "$$run_id"; \
113
114
  fi
114
115
  @echo "✓ recover"
115
116
 
@@ -141,13 +142,13 @@ campaign: setup
141
142
  # Full lifecycle: validate → plan → run → status → history → recover
142
143
  full: setup
143
144
  @echo "=== full round-trip ==="
144
- mayhem --db {{ _db }} validate {{ _spec }} --compose {{ _compose }}
145
- mayhem --db {{ _db }} plan {{ _spec }} --compose {{ _compose }}
146
- mayhem --db {{ _db }} run {{ _spec }} --compose {{ _compose }}
147
- mayhem --db {{ _db }} status
145
+ mayhem --db {{ _db }} prepare validate {{ _spec }} --compose {{ _compose }}
146
+ mayhem --db {{ _db }} prepare plan {{ _spec }} --compose {{ _compose }}
147
+ mayhem --db {{ _db }} run {{ _spec }} --compose {{ _compose }} --execute
148
+ mayhem --db {{ _db }} inspect runs
148
149
  @run_id=$$(sqlite3 {{ _db }} "SELECT id FROM runs ORDER BY rowid DESC LIMIT 1"); \
149
- mayhem --db {{ _db }} history "$$run_id"; \
150
- mayhem --db {{ _db }} recover "$$run_id"
150
+ mayhem --db {{ _db }} inspect history "$$run_id"; \
151
+ mayhem --db {{ _db }} recover execute "$$run_id"
151
152
  @echo "✓ full round-trip"
152
153
 
153
154
  # ── stack management ─────────────────────────────────────────────────────────
@@ -191,6 +192,18 @@ lint:
191
192
  ruff check src/ tests/
192
193
  @echo "✓ lint"
193
194
 
195
+ # Check the release truth baseline (docs/Justfile/packaging vs. the source)
196
+ contract:
197
+ @echo "=== release contract ==="
198
+ python3 -m pytest tests/unit/test_release_contract.py -v --tb=short
199
+ @echo "✓ release contract"
200
+
201
+ # Build the sdist and wheel
202
+ build:
203
+ @echo "=== build ==="
204
+ python3 -m build --sdist --wheel
205
+ @echo "✓ build"
206
+
194
207
  # ── aggregate targets ────────────────────────────────────────────────────────
195
208
 
196
209
  # Quick smoke: topology + toolkit + config + experiment + validate + plan