mayhem-cli 0.6.2__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.
- mayhem_cli-0.9.0/.coverage +0 -0
- mayhem_cli-0.9.0/.github/workflows/ci.yml +146 -0
- mayhem_cli-0.9.0/.github/workflows/conformance.yml +34 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/.github/workflows/release.yml +4 -4
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/CHANGELOG.md +250 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/Justfile +56 -42
- mayhem_cli-0.9.0/PKG-INFO +479 -0
- mayhem_cli-0.9.0/README.md +464 -0
- mayhem_cli-0.9.0/docs/README.md +74 -0
- mayhem_cli-0.9.0/docs/adr/adr-m7-1-k8s-executor.md +98 -0
- mayhem_cli-0.9.0/docs/adr-adr-m7-1-k8s-executor-flip.md +172 -0
- mayhem_cli-0.9.0/docs/architecture/fault-taxonomy.md +5 -0
- mayhem_cli-0.9.0/docs/architecture/safety.md +12 -0
- mayhem_cli-0.9.0/docs/architecture/toolkit.md +5 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/docs/compensation.md +6 -2
- mayhem_cli-0.9.0/docs/config.md +314 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/docs/drill-spec.md +245 -30
- mayhem_cli-0.9.0/docs/fault-catalog/README.md +21 -0
- mayhem_cli-0.9.0/docs/fault-catalog/reliability-matrix.md +64 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/docs/grounding-log.md +5 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/docs/grounding-rules.md +10 -3
- mayhem_cli-0.9.0/docs/k8s-new.md +5 -0
- mayhem_cli-0.9.0/docs/k8s-plan-1.md +437 -0
- mayhem_cli-0.9.0/docs/k8s-plan-2.md +387 -0
- mayhem_cli-0.9.0/docs/m7-k8s-executor-discovery.md +164 -0
- mayhem_cli-0.9.0/docs/new-plan/00-product-and-cli-roadmap.md +84 -0
- mayhem_cli-0.9.0/docs/new-plan/01-workflow-command-architecture.md +84 -0
- mayhem_cli-0.9.0/docs/new-plan/02-guided-onboarding-and-target-profiles.md +75 -0
- mayhem_cli-0.9.0/docs/new-plan/03-plan-first-execution-and-unified-evidence.md +77 -0
- mayhem_cli-0.9.0/docs/new-plan/04-output-errors-and-script-compatibility.md +77 -0
- mayhem_cli-0.9.0/docs/new-plan/05-configuration-policy-and-environment-safety.md +73 -0
- mayhem_cli-0.9.0/docs/new-plan/06-docker-podman-reliability-slice.md +75 -0
- mayhem_cli-0.9.0/docs/new-plan/07-first-class-kubernetes-engine.md +78 -0
- mayhem_cli-0.9.0/docs/new-plan/08-fault-catalog-reliability-matrix.md +83 -0
- mayhem_cli-0.9.0/docs/new-plan/09-campaigns-coverage-and-explore-loop.md +79 -0
- mayhem_cli-0.9.0/docs/new-plan/10-diagnostics-recovery-and-reporting.md +76 -0
- mayhem_cli-0.9.0/docs/new-plan/11-extension-api-and-packaging.md +88 -0
- mayhem_cli-0.9.0/docs/new-plan/README.md +52 -0
- mayhem_cli-0.9.0/docs/observability.md +44 -0
- mayhem_cli-0.9.0/docs/policy-and-break-glass.md +31 -0
- mayhem_cli-0.9.0/docs/product/cli-product-direction.md +64 -0
- mayhem_cli-0.9.0/docs/product/command-architecture.md +100 -0
- mayhem_cli-0.9.0/docs/provider-sdk.md +253 -0
- mayhem_cli-0.9.0/docs/reference/cli.md +289 -0
- mayhem_cli-0.9.0/docs/reference/experiment-dsl.md +10 -0
- mayhem_cli-0.9.0/docs/reference/fault-catalog.md +92 -0
- mayhem_cli-0.9.0/docs/reference/output-schema.md +76 -0
- mayhem_cli-0.9.0/docs/reference/sqlite-schema.md +15 -0
- mayhem_cli-0.9.0/docs/superpowers/plans/2026-09-24-container-kubernetes-fault-expansion-plan.md +267 -0
- mayhem_cli-0.9.0/docs/superpowers/plans/2026-09-24-documentation-to-implementation-plan.md +406 -0
- mayhem_cli-0.9.0/docs/superpowers/specs/2026-09-24-container-kubernetes-fault-expansion-design.md +61 -0
- mayhem_cli-0.9.0/docs/superpowers/specs/2026-09-24-documentation-to-implementation-design.md +91 -0
- mayhem_cli-0.9.0/docs/v0.9.0/01-vision-and-positioning.md +64 -0
- mayhem_cli-0.9.0/docs/v0.9.0/02-feature-brainstorm.md +173 -0
- mayhem_cli-0.9.0/docs/v0.9.0/03-gaps-and-standards.md +106 -0
- mayhem_cli-0.9.0/docs/v0.9.0/04-architecture-and-decisions.md +115 -0
- mayhem_cli-0.9.0/docs/v0.9.0/05-release-roadmap.md +140 -0
- mayhem_cli-0.9.0/docs/v0.9.0/06-core-implementation-plan.md +276 -0
- mayhem_cli-0.9.0/docs/v0.9.0/07-expansion-implementation-plan.md +274 -0
- mayhem_cli-0.9.0/docs/v0.9.0/08-release-readiness.md +98 -0
- mayhem_cli-0.9.0/docs/v0.9.0/09-decision-log.md +65 -0
- mayhem_cli-0.9.0/docs/v0.9.0/10-repository-evidence.md +97 -0
- mayhem_cli-0.9.0/docs/v0.9.0/README.md +38 -0
- mayhem_cli-0.9.0/examples/k8s/README.md +39 -0
- mayhem_cli-0.9.0/examples/k8s/mayhem.yaml +207 -0
- mayhem_cli-0.9.0/examples/providers/test-catalog.json +40 -0
- mayhem_cli-0.9.0/examples/providers/test_provider.py +19 -0
- mayhem_cli-0.9.0/examples/testCase/mayhem-safe-docker-podman.yaml +50 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/pyproject.toml +56 -9
- mayhem_cli-0.9.0/scripts/verify_release_artifacts.py +91 -0
- mayhem_cli-0.9.0/src/mayhem/__main__.py +8 -0
- mayhem_cli-0.9.0/src/mayhem/agents/executors.py +3931 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/agents/impact.py +37 -1
- mayhem_cli-0.9.0/src/mayhem/agents/k8s_control.py +411 -0
- mayhem_cli-0.9.0/src/mayhem/agents/k8s_resolve.py +947 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/agents/lease_client.py +7 -0
- mayhem_cli-0.9.0/src/mayhem/cli/app.py +286 -0
- mayhem_cli-0.9.0/src/mayhem/cli/campaign.py +907 -0
- mayhem_cli-0.9.0/src/mayhem/cli/command_registry.py +87 -0
- mayhem_cli-0.9.0/src/mayhem/cli/commands.py +48 -0
- mayhem_cli-0.9.0/src/mayhem/cli/config_cmd.py +71 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/cli/context.py +3 -0
- mayhem_cli-0.9.0/src/mayhem/cli/coverage_cmd.py +262 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/cli/dependency.py +32 -1
- mayhem_cli-0.9.0/src/mayhem/cli/doctor.py +88 -0
- mayhem_cli-0.9.0/src/mayhem/cli/errors.py +212 -0
- mayhem_cli-0.9.0/src/mayhem/cli/execution.py +143 -0
- mayhem_cli-0.9.0/src/mayhem/cli/experiment.py +122 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/cli/expert.py +85 -5
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/cli/explore.py +86 -27
- mayhem_cli-0.9.0/src/mayhem/cli/extend.py +153 -0
- mayhem_cli-0.9.0/src/mayhem/cli/game_day.py +330 -0
- mayhem_cli-0.9.0/src/mayhem/cli/init.py +138 -0
- mayhem_cli-0.9.0/src/mayhem/cli/inspect.py +526 -0
- mayhem_cli-0.9.0/src/mayhem/cli/lifecycle.py +2241 -0
- mayhem_cli-0.9.0/src/mayhem/cli/next_cmd.py +271 -0
- mayhem_cli-0.9.0/src/mayhem/cli/output.py +149 -0
- mayhem_cli-0.9.0/src/mayhem/cli/render.py +166 -0
- mayhem_cli-0.9.0/src/mayhem/cli/renderers.py +193 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/cli/resolver.py +10 -0
- mayhem_cli-0.9.0/src/mayhem/cli/services.py +808 -0
- mayhem_cli-0.9.0/src/mayhem/cli/toolkit.py +227 -0
- mayhem_cli-0.9.0/src/mayhem/cli/topology.py +329 -0
- mayhem_cli-0.9.0/src/mayhem/cli/verify_bundle.py +70 -0
- mayhem_cli-0.9.0/src/mayhem/cli/workflows.py +110 -0
- mayhem_cli-0.9.0/src/mayhem/config.py +584 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/controller/cell_runner.py +42 -5
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/controller/compensation.py +180 -7
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/controller/executor.py +897 -11
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/controller/explore_flow.py +40 -17
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/controller/janitor.py +49 -0
- mayhem_cli-0.9.0/src/mayhem/controller/k8s_runtime.py +859 -0
- mayhem_cli-0.9.0/src/mayhem/controller/plan_diff.py +79 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/controller/planner.py +560 -59
- mayhem_cli-0.9.0/src/mayhem/controller/preflight.py +422 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/controller/recovery.py +210 -0
- mayhem_cli-0.9.0/src/mayhem/controller/safety.py +576 -0
- mayhem_cli-0.9.0/src/mayhem/controller/target_selector.py +3 -0
- mayhem_cli-0.9.0/src/mayhem/domain/admission.py +89 -0
- mayhem_cli-0.9.0/src/mayhem/domain/campaign_checkpoint.py +217 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/domain/campaigns.py +46 -0
- mayhem_cli-0.9.0/src/mayhem/domain/capability_status.py +117 -0
- mayhem_cli-0.9.0/src/mayhem/domain/catalog.py +1851 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/domain/common.py +12 -7
- mayhem_cli-0.9.0/src/mayhem/domain/coverage.py +314 -0
- mayhem_cli-0.9.0/src/mayhem/domain/coverage_graph.py +260 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/domain/decisions.py +33 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/domain/errors.py +28 -0
- mayhem_cli-0.9.0/src/mayhem/domain/evidence.py +84 -0
- mayhem_cli-0.9.0/src/mayhem/domain/evidence_bundle.py +309 -0
- mayhem_cli-0.9.0/src/mayhem/domain/execution_intent.py +332 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/domain/experiments.py +181 -12
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/domain/faults.py +91 -9
- mayhem_cli-0.9.0/src/mayhem/domain/game_day.py +219 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/domain/identity.py +15 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/domain/k8s_adapter.py +62 -6
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/domain/leases.py +50 -1
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/domain/m5_campaign.py +73 -3
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/domain/maniac.py +52 -1
- mayhem_cli-0.9.0/src/mayhem/domain/observations.py +230 -0
- mayhem_cli-0.9.0/src/mayhem/domain/policy.py +140 -0
- mayhem_cli-0.9.0/src/mayhem/domain/preflight.py +133 -0
- mayhem_cli-0.9.0/src/mayhem/domain/provider.py +323 -0
- mayhem_cli-0.9.0/src/mayhem/domain/redaction.py +85 -0
- mayhem_cli-0.9.0/src/mayhem/domain/replay.py +74 -0
- mayhem_cli-0.9.0/src/mayhem/domain/residual_impact.py +175 -0
- mayhem_cli-0.9.0/src/mayhem/domain/resolution.py +72 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/domain/runtime_adapter.py +117 -0
- mayhem_cli-0.9.0/src/mayhem/domain/runtime_context.py +102 -0
- mayhem_cli-0.9.0/src/mayhem/domain/scenarios.py +345 -0
- mayhem_cli-0.9.0/src/mayhem/domain/target.py +125 -0
- mayhem_cli-0.9.0/src/mayhem/domain/target_profiles.py +254 -0
- mayhem_cli-0.9.0/src/mayhem/domain/target_selector.py +283 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/domain/topology.py +8 -0
- mayhem_cli-0.9.0/src/mayhem/infra/campaign_checkpoint_repository.py +75 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/infra/campaign_engine.py +77 -0
- mayhem_cli-0.9.0/src/mayhem/infra/catalog_report.py +387 -0
- mayhem_cli-0.9.0/src/mayhem/infra/coverage_repository.py +563 -0
- mayhem_cli-0.9.0/src/mayhem/infra/diagnostics.py +1162 -0
- mayhem_cli-0.9.0/src/mayhem/infra/evidence.py +296 -0
- mayhem_cli-0.9.0/src/mayhem/infra/game_day_repository.py +62 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/infra/lease_repository.py +34 -2
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/infra/migrations.py +125 -0
- mayhem_cli-0.9.0/src/mayhem/infra/project_detection.py +115 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/infra/ranking.py +44 -2
- mayhem_cli-0.9.0/src/mayhem/infra/replay_repository.py +88 -0
- mayhem_cli-0.9.0/src/mayhem/infra/report.py +549 -0
- mayhem_cli-0.9.0/src/mayhem/observability/__init__.py +20 -0
- mayhem_cli-0.9.0/src/mayhem/observability/base.py +56 -0
- mayhem_cli-0.9.0/src/mayhem/observability/loki.py +95 -0
- mayhem_cli-0.9.0/src/mayhem/observability/otel.py +72 -0
- mayhem_cli-0.9.0/src/mayhem/observability/prometheus.py +129 -0
- mayhem_cli-0.9.0/src/mayhem/providers/__init__.py +19 -0
- mayhem_cli-0.9.0/src/mayhem/providers/builtin.py +131 -0
- mayhem_cli-0.9.0/src/mayhem/providers/loader.py +396 -0
- mayhem_cli-0.9.0/src/mayhem/providers/observation.py +234 -0
- mayhem_cli-0.9.0/src/mayhem/providers/pack.py +195 -0
- mayhem_cli-0.9.0/src/mayhem/providers/permissions.py +122 -0
- mayhem_cli-0.9.0/src/mayhem/providers/protocols.py +36 -0
- mayhem_cli-0.9.0/src/mayhem/providers/registry.py +80 -0
- mayhem_cli-0.9.0/src/mayhem/schemas/output_v1.json +43 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/toolkit/tool_runner.py +7 -3
- mayhem_cli-0.9.0/src/mayhem/topology/providers/adapter_registry.py +86 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/topology/providers/docker_adapter.py +17 -0
- mayhem_cli-0.9.0/src/mayhem/topology/providers/k8s_manifest.py +229 -0
- mayhem_cli-0.9.0/src/mayhem/topology/providers/kubernetes.py +416 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/conftest.py +37 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/e2e/test_cli_e2e.py +112 -78
- mayhem_cli-0.9.0/tests/fixtures/cli/commands_show.json +37 -0
- mayhem_cli-0.9.0/tests/fixtures/cli/coverage.json +22 -0
- mayhem_cli-0.9.0/tests/fixtures/cli/doctor.json +18 -0
- mayhem_cli-0.9.0/tests/integration/test_artifact_secret_sweep.py +117 -0
- mayhem_cli-0.9.0/tests/integration/test_bundle_verifier.py +181 -0
- mayhem_cli-0.9.0/tests/integration/test_campaign_resume.py +210 -0
- mayhem_cli-0.9.0/tests/integration/test_coverage_delta.py +101 -0
- mayhem_cli-0.9.0/tests/integration/test_evidence_degradation.py +52 -0
- mayhem_cli-0.9.0/tests/integration/test_game_day_approval_flow.py +224 -0
- mayhem_cli-0.9.0/tests/integration/test_observability_run.py +100 -0
- mayhem_cli-0.9.0/tests/integration/test_recovery_proof.py +177 -0
- mayhem_cli-0.9.0/tests/integration/test_replay_roundtrip.py +26 -0
- mayhem_cli-0.9.0/tests/integration/test_scenario_plan_replay.py +133 -0
- mayhem_cli-0.9.0/tests/integration/test_slo_success_criteria.py +173 -0
- mayhem_cli-0.9.0/tests/package/test_wheel_smoke.py +78 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_accept_criteria.py +5 -1
- mayhem_cli-0.9.0/tests/unit/test_action_outcome_contract.py +39 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_additive_schema.py +5 -0
- mayhem_cli-0.9.0/tests/unit/test_campaign_checkpoint.py +365 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_campaigns.py +91 -4
- mayhem_cli-0.9.0/tests/unit/test_capability_dashboard.py +145 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_capability_safety.py +17 -0
- mayhem_cli-0.9.0/tests/unit/test_capability_truth.py +89 -0
- mayhem_cli-0.9.0/tests/unit/test_ci_workflow_contract.py +44 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_cli.py +231 -9
- mayhem_cli-0.9.0/tests/unit/test_cli_active_surface.py +62 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_cli_campaign.py +20 -0
- mayhem_cli-0.9.0/tests/unit/test_cli_config.py +44 -0
- mayhem_cli-0.9.0/tests/unit/test_cli_contract.py +114 -0
- mayhem_cli-0.9.0/tests/unit/test_cli_doctor.py +145 -0
- mayhem_cli-0.9.0/tests/unit/test_cli_errors.py +132 -0
- mayhem_cli-0.9.0/tests/unit/test_cli_execution.py +222 -0
- mayhem_cli-0.9.0/tests/unit/test_cli_execution_intent.py +1154 -0
- mayhem_cli-0.9.0/tests/unit/test_cli_exhaustive_matrix.py +767 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_cli_exit_codes.py +13 -11
- mayhem_cli-0.9.0/tests/unit/test_cli_extend.py +149 -0
- mayhem_cli-0.9.0/tests/unit/test_cli_init.py +123 -0
- mayhem_cli-0.9.0/tests/unit/test_cli_output.py +75 -0
- mayhem_cli-0.9.0/tests/unit/test_cli_renderers.py +124 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_cli_resolver.py +7 -7
- mayhem_cli-0.9.0/tests/unit/test_cli_topology.py +139 -0
- mayhem_cli-0.9.0/tests/unit/test_cli_user_regressions.py +59 -0
- mayhem_cli-0.9.0/tests/unit/test_command_inventory.py +58 -0
- mayhem_cli-0.9.0/tests/unit/test_command_registry.py +33 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_config.py +58 -0
- mayhem_cli-0.9.0/tests/unit/test_config_target_profiles.py +496 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_container_fault_matrix.py +15 -8
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_coverage.py +82 -7
- mayhem_cli-0.9.0/tests/unit/test_coverage_graph.py +372 -0
- mayhem_cli-0.9.0/tests/unit/test_diagnostics.py +330 -0
- mayhem_cli-0.9.0/tests/unit/test_diagnostics_target_profiles.py +360 -0
- mayhem_cli-0.9.0/tests/unit/test_documentation_consistency.py +58 -0
- mayhem_cli-0.9.0/tests/unit/test_evidence_bundle.py +208 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_example_specs_yaml.py +5 -3
- mayhem_cli-0.9.0/tests/unit/test_execution_intent.py +328 -0
- mayhem_cli-0.9.0/tests/unit/test_executor_admission.py +164 -0
- mayhem_cli-0.9.0/tests/unit/test_expansion_checkpoint.py +335 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_fault_catalog_all.py +56 -8
- mayhem_cli-0.9.0/tests/unit/test_fault_catalog_exhaustive.py +946 -0
- mayhem_cli-0.9.0/tests/unit/test_fault_catalog_metadata.py +126 -0
- mayhem_cli-0.9.0/tests/unit/test_fault_expansion_catalog.py +91 -0
- mayhem_cli-0.9.0/tests/unit/test_fault_expansion_container.py +161 -0
- mayhem_cli-0.9.0/tests/unit/test_fault_expansion_kubernetes.py +183 -0
- mayhem_cli-0.9.0/tests/unit/test_fault_pack_validation.py +230 -0
- mayhem_cli-0.9.0/tests/unit/test_game_day.py +179 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_impact_gate.py +1 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_janitor.py +12 -0
- mayhem_cli-0.9.0/tests/unit/test_k8s_cli.py +156 -0
- mayhem_cli-0.9.0/tests/unit/test_k8s_discovery.py +370 -0
- mayhem_cli-0.9.0/tests/unit/test_k8s_manifest.py +512 -0
- mayhem_cli-0.9.0/tests/unit/test_k8s_plan1.py +285 -0
- mayhem_cli-0.9.0/tests/unit/test_k8s_plan2.py +210 -0
- mayhem_cli-0.9.0/tests/unit/test_k8s_selection.py +155 -0
- mayhem_cli-0.9.0/tests/unit/test_kplan1_targets.py +453 -0
- mayhem_cli-0.9.0/tests/unit/test_kplan2_topology.py +89 -0
- mayhem_cli-0.9.0/tests/unit/test_kplan3_resolver.py +203 -0
- mayhem_cli-0.9.0/tests/unit/test_kplan3_runtime.py +644 -0
- mayhem_cli-0.9.0/tests/unit/test_kplan5_runtime.py +508 -0
- mayhem_cli-0.9.0/tests/unit/test_kplan6_runtime.py +1205 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_lifecycle_run_liveness.py +66 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_m7_k8s.py +50 -6
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_maniac.py +1 -0
- mayhem_cli-0.9.0/tests/unit/test_observability_connectors.py +275 -0
- mayhem_cli-0.9.0/tests/unit/test_observation_contract.py +281 -0
- mayhem_cli-0.9.0/tests/unit/test_plan_diff.py +55 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_planner.py +24 -0
- mayhem_cli-0.9.0/tests/unit/test_policy_explain.py +243 -0
- mayhem_cli-0.9.0/tests/unit/test_preflight.py +154 -0
- mayhem_cli-0.9.0/tests/unit/test_provider_loader.py +222 -0
- mayhem_cli-0.9.0/tests/unit/test_provider_permissions.py +126 -0
- mayhem_cli-0.9.0/tests/unit/test_provider_registry.py +136 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_ranking.py +34 -3
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_recovery.py +104 -0
- mayhem_cli-0.9.0/tests/unit/test_redaction_boundary.py +77 -0
- mayhem_cli-0.9.0/tests/unit/test_release_contract.py +556 -0
- mayhem_cli-0.9.0/tests/unit/test_replay_capsule.py +54 -0
- mayhem_cli-0.9.0/tests/unit/test_replay_cli.py +165 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_report.py +133 -1
- mayhem_cli-0.9.0/tests/unit/test_residual_impact.py +275 -0
- mayhem_cli-0.9.0/tests/unit/test_runtime_context.py +1286 -0
- mayhem_cli-0.9.0/tests/unit/test_runtime_execution_matrix.py +2311 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_safety.py +18 -4
- mayhem_cli-0.9.0/tests/unit/test_scenario_compiler.py +260 -0
- mayhem_cli-0.9.0/tests/unit/test_selection_modes.py +352 -0
- mayhem_cli-0.9.0/tests/unit/test_target_profiles.py +141 -0
- mayhem_cli-0.9.0/tests/unit/test_target_profiles_config.py +287 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_topology_providers.py +6 -1
- mayhem_cli-0.9.0/tests/unit/test_v090_docs_contract.py +140 -0
- mayhem_cli-0.9.0/tests/unit/test_v090_edge_cases.py +587 -0
- mayhem_cli-0.9.0/tests/unit/test_workflow_groups.py +47 -0
- mayhem_cli-0.9.0/uv.lock +1638 -0
- mayhem_cli-0.6.2/PKG-INFO +0 -555
- mayhem_cli-0.6.2/README.md +0 -541
- mayhem_cli-0.6.2/docs/config.md +0 -285
- mayhem_cli-0.6.2/docs/features.md +0 -408
- mayhem_cli-0.6.2/docs/re-design.md +0 -1405
- mayhem_cli-0.6.2/examples/k8s/README.md +0 -32
- mayhem_cli-0.6.2/examples/k8s/mayhem.yaml +0 -76
- mayhem_cli-0.6.2/src/mayhem/agents/executors.py +0 -430
- mayhem_cli-0.6.2/src/mayhem/cli/app.py +0 -175
- mayhem_cli-0.6.2/src/mayhem/cli/campaign.py +0 -496
- mayhem_cli-0.6.2/src/mayhem/cli/config_cmd.py +0 -47
- mayhem_cli-0.6.2/src/mayhem/cli/coverage_cmd.py +0 -325
- mayhem_cli-0.6.2/src/mayhem/cli/experiment.py +0 -24
- mayhem_cli-0.6.2/src/mayhem/cli/lifecycle.py +0 -885
- mayhem_cli-0.6.2/src/mayhem/cli/next_cmd.py +0 -216
- mayhem_cli-0.6.2/src/mayhem/cli/services.py +0 -459
- mayhem_cli-0.6.2/src/mayhem/cli/toolkit.py +0 -41
- mayhem_cli-0.6.2/src/mayhem/cli/topology.py +0 -127
- mayhem_cli-0.6.2/src/mayhem/config.py +0 -266
- mayhem_cli-0.6.2/src/mayhem/controller/safety.py +0 -392
- mayhem_cli-0.6.2/src/mayhem/domain/catalog.py +0 -727
- mayhem_cli-0.6.2/src/mayhem/domain/coverage.py +0 -204
- mayhem_cli-0.6.2/src/mayhem/infra/coverage_repository.py +0 -271
- mayhem_cli-0.6.2/src/mayhem/infra/report.py +0 -227
- mayhem_cli-0.6.2/src/mayhem/topology/providers/adapter_registry.py +0 -60
- mayhem_cli-0.6.2/tests/unit/test_cli_contract.py +0 -113
- mayhem_cli-0.6.2/tests/unit/test_command_inventory.py +0 -117
- mayhem_cli-0.6.2/uv.lock +0 -819
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/.gitignore +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/cliff.toml +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/examples/k8s/kubernetes.yaml +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/examples/testCase/data/hello.txt +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/examples/testCase/data/index.html +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/examples/testCase/docker-compose.mayhem.yml +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/examples/testCase/docker-compose.yml +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/examples/testCase/mayhem.yaml +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/examples/testCase/nginx.conf +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/agent/__init__.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/agent/cli.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/agents/__init__.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/agents/capabilities.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/agents/probes.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/agents/protocol.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/agents/server.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/agents/sinks.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/agents/transports.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/agents/watchdog.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/cli/__init__.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/cli/exit_codes.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/cli/style.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/controller/__init__.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/controller/observability_collector.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/controller/observations.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/controller/resilience_report.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/controller/resource_manager.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/domain/__init__.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/domain/cancellation.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/domain/candidates.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/domain/capabilities.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/domain/cell_rules.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/domain/checks.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/domain/events.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/domain/execution_context.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/domain/execution_loci.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/domain/load_strategy.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/domain/observability.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/domain/outcomes.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/domain/remote_agent_interface.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/domain/resources.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/domain/risks.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/domain/run_outcome.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/domain/success.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/infra/__init__.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/infra/candidate_gates.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/infra/candidate_generator.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/infra/kpi.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/infra/maniac.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/infra/migrator.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/infra/store.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/py.typed +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/spec.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/toolkit/__init__.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/toolkit/fingerprint.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/toolkit/hashing.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/toolkit/manifests/docker.yaml +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/toolkit/manifests/podman.yaml +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/toolkit/manifests/stress-ng.yaml +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/toolkit/manifests/tc-netem.yaml +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/toolkit/manifests/toxiproxy.yaml +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/toolkit/registry.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/topology/__init__.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/topology/providers/__init__.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/topology/providers/base.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/topology/providers/compose.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/topology/providers/docker_runtime.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/topology/providers/podman_adapter.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/topology/resolve.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/src/mayhem/topology/service.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/e2e/__init__.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/integration/test_agent_serve.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/integration/test_agent_watchdog_e2e.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/integration/test_m5_e2e.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/integration/test_store.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_agent_capabilities.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_agent_protocol.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_agents.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_campaign_run.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_cancellation.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_candidates.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_capability_matrix.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_capability_registry.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_cell_rules.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_cell_runner.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_check_spec.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_compensation.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_coverage_repository.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_domain_properties.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_drill_spec.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_execution_context.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_executor.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_executor_drill.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_faults.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_fingerprint.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_fork_atomicity.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_kpi.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_lease_repository.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_leases.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_load_strategy.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_m12_step1_catalog.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_m8_operations.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_m9_catalog.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_migrations.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_network_path_model.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_observability.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_observations.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_resilience_report.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_resolve.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_resource_conflict_exec.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_resource_manager.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_resources.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_risks.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_run_outcome.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_runtime_adapter.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_success.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_three_locus.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_tool_runner.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_topology.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_topology_ctr.py +0 -0
- {mayhem_cli-0.6.2 → mayhem_cli-0.9.0}/tests/unit/test_watchdog.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
|
|
@@ -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
|
|
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
|
|
@@ -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
|
|
|
@@ -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.
|
|
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
|
|
|
@@ -26,33 +27,33 @@ setup:
|
|
|
26
27
|
# Discover topology from compose + live runtime (containers, processes, services)
|
|
27
28
|
topology:
|
|
28
29
|
@echo "=== topology discover ==="
|
|
29
|
-
mayhem topology
|
|
30
|
+
mayhem discover topology --compose {{ _compose }} | python3 -m json.tool > /dev/null
|
|
30
31
|
@echo "✓ topology discover"
|
|
31
32
|
|
|
32
33
|
# Topology with prefix shorthand
|
|
33
34
|
topology-prefix:
|
|
34
35
|
@echo "=== topology prefix ==="
|
|
35
|
-
mayhem
|
|
36
|
+
mayhem disc topo --compose {{ _compose }} | python3 -m json.tool > /dev/null
|
|
36
37
|
@echo "✓ topology prefix"
|
|
37
38
|
|
|
38
39
|
# ── toolkit ──────────────────────────────────────────────────────────────────
|
|
39
40
|
|
|
40
|
-
# List available faults and capabilities
|
|
41
|
+
# List available faults and capabilities (`mayhem discover`)
|
|
41
42
|
toolkit:
|
|
42
43
|
@echo "=== toolkit ==="
|
|
43
|
-
mayhem
|
|
44
|
-
mayhem
|
|
44
|
+
mayhem discover faults
|
|
45
|
+
mayhem discover capabilities --json | python3 -m json.tool > /dev/null
|
|
45
46
|
@echo "✓ toolkit"
|
|
46
47
|
|
|
47
48
|
# ── config ───────────────────────────────────────────────────────────────────
|
|
48
49
|
|
|
49
|
-
# Show and validate effective config (default + testCase)
|
|
50
|
+
# Show and validate effective config (default + testCase) via `mayhem prepare config`
|
|
50
51
|
config:
|
|
51
52
|
@echo "=== config ==="
|
|
52
|
-
mayhem config show --json | python3 -m json.tool > /dev/null
|
|
53
|
-
mayhem --config {{ _config }} config show --json | python3 -m json.tool > /dev/null
|
|
54
|
-
mayhem config validate
|
|
55
|
-
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
|
|
56
57
|
@echo "✓ config"
|
|
57
58
|
|
|
58
59
|
# ── experiment ───────────────────────────────────────────────────────────────
|
|
@@ -66,58 +67,57 @@ experiment:
|
|
|
66
67
|
|
|
67
68
|
# ── lifecycle: validate → plan → run → status → history → recover ────────────
|
|
68
69
|
|
|
69
|
-
# Validate spec against live topology
|
|
70
|
+
# Validate spec against live topology (`mayhem prepare validate`)
|
|
70
71
|
validate: setup
|
|
71
72
|
@echo "=== validate ==="
|
|
72
|
-
mayhem --db {{ _db }} validate {{ _spec }} --compose {{ _compose }}
|
|
73
|
+
mayhem --db {{ _db }} prepare validate {{ _spec }} --compose {{ _compose }}
|
|
73
74
|
@echo "✓ validate"
|
|
74
75
|
|
|
75
|
-
#
|
|
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
|
-
# Plan the experiment
|
|
76
|
+
# Plan the experiment (`mayhem prepare plan`)
|
|
83
77
|
plan:
|
|
84
78
|
@echo "=== plan ==="
|
|
85
|
-
mayhem plan {{ _spec }} --compose {{ _compose }}
|
|
79
|
+
mayhem prepare plan {{ _spec }} --compose {{ _compose }}
|
|
86
80
|
@echo "✓ plan"
|
|
87
81
|
|
|
88
82
|
# Full run: inject faults, record events, compensate
|
|
89
83
|
run: setup
|
|
90
84
|
@echo "=== run ==="
|
|
91
|
-
mayhem --db {{ _db }} run {{ _spec }} --compose {{ _compose }}
|
|
85
|
+
mayhem --db {{ _db }} run {{ _spec }} --compose {{ _compose }} --execute
|
|
92
86
|
@echo "✓ run"
|
|
93
87
|
|
|
94
|
-
# Show run status (
|
|
88
|
+
# Show run status (text + JSON) via `mayhem inspect runs`
|
|
95
89
|
status: setup
|
|
96
90
|
@echo "=== status ==="
|
|
97
|
-
mayhem --db {{ _db }}
|
|
91
|
+
mayhem --db {{ _db }} inspect runs
|
|
92
|
+
mayhem --db {{ _db }} inspect runs --json | python3 -m json.tool > /dev/null
|
|
98
93
|
@echo "✓ status"
|
|
99
94
|
|
|
100
|
-
# Show detailed run history (
|
|
95
|
+
# Show detailed run history (text + JSON) via `mayhem inspect history`
|
|
101
96
|
history:
|
|
102
97
|
@echo "=== history ==="
|
|
103
98
|
@run_id=$$(sqlite3 {{ _db }} "SELECT id FROM runs ORDER BY rowid DESC LIMIT 1" 2>/dev/null || echo ""); \
|
|
104
99
|
if [ -z "$$run_id" ]; then \
|
|
105
100
|
echo "⚠ no runs in DB — skipping history"; \
|
|
106
101
|
else \
|
|
107
|
-
mayhem --db {{ _db }} history "$$run_id"; \
|
|
102
|
+
mayhem --db {{ _db }} inspect history "$$run_id"; \
|
|
108
103
|
echo "✓ history"; \
|
|
109
104
|
fi
|
|
110
105
|
|
|
111
|
-
# Recovery sweep (orphaned fault leases)
|
|
112
|
-
recover:
|
|
106
|
+
# Recovery sweep (orphaned fault leases for the most recent run)
|
|
107
|
+
recover:
|
|
113
108
|
@echo "=== recover ==="
|
|
114
|
-
|
|
109
|
+
@run_id=$$(sqlite3 {{ _db }} "SELECT id FROM runs ORDER BY rowid DESC LIMIT 1" 2>/dev/null || echo ""); \
|
|
110
|
+
if [ -z "$$run_id" ]; then \
|
|
111
|
+
echo "⚠ no runs in DB — skipping recover"; \
|
|
112
|
+
else \
|
|
113
|
+
mayhem --db {{ _db }} recover execute "$$run_id"; \
|
|
114
|
+
fi
|
|
115
115
|
@echo "✓ recover"
|
|
116
116
|
|
|
117
117
|
# Janitor sweep (stale runs / resources)
|
|
118
118
|
janitor: setup
|
|
119
119
|
@echo "=== janitor ==="
|
|
120
|
-
mayhem --db {{ _db }} janitor
|
|
120
|
+
mayhem --db {{ _db }} janitor
|
|
121
121
|
@echo "✓ janitor"
|
|
122
122
|
|
|
123
123
|
# ── campaign CRUD ────────────────────────────────────────────────────────────
|
|
@@ -125,14 +125,16 @@ janitor: setup
|
|
|
125
125
|
# Create, list, show, start, abort, delete a campaign
|
|
126
126
|
campaign: setup
|
|
127
127
|
@echo "=== campaign ==="
|
|
128
|
-
mayhem --db {{ _db }} campaign create
|
|
128
|
+
mayhem --db {{ _db }} campaign create "e2e-campaign" --hypothesis "stack survives chaos"
|
|
129
129
|
mayhem --db {{ _db }} campaign list
|
|
130
|
-
@cid=$$(sqlite3 {{ _db }} "SELECT id FROM campaigns ORDER BY rowid DESC LIMIT 1"); \
|
|
130
|
+
@cid=$$(sqlite3 {{ _db }} "SELECT id FROM campaigns WHERE name = 'e2e-campaign' ORDER BY rowid DESC LIMIT 1"); \
|
|
131
131
|
mayhem --db {{ _db }} campaign show "$$cid"; \
|
|
132
132
|
mayhem --db {{ _db }} campaign status "$$cid"; \
|
|
133
133
|
mayhem --db {{ _db }} campaign start "$$cid" || true; \
|
|
134
|
-
mayhem --db {{ _db }} campaign abort "$$cid" || true
|
|
135
|
-
mayhem --db {{ _db }} campaign
|
|
134
|
+
mayhem --db {{ _db }} campaign abort "$$cid" || true
|
|
135
|
+
mayhem --db {{ _db }} campaign create "e2e-delete-campaign"
|
|
136
|
+
@delete_cid=$$(sqlite3 {{ _db }} "SELECT id FROM campaigns WHERE name = 'e2e-delete-campaign' ORDER BY rowid DESC LIMIT 1"); \
|
|
137
|
+
mayhem --db {{ _db }} campaign delete --yes "$$delete_cid"
|
|
136
138
|
@echo "✓ campaign"
|
|
137
139
|
|
|
138
140
|
# ── full round-trip ─────────────────────────────────────────────────────────
|
|
@@ -140,13 +142,13 @@ campaign: setup
|
|
|
140
142
|
# Full lifecycle: validate → plan → run → status → history → recover
|
|
141
143
|
full: setup
|
|
142
144
|
@echo "=== full round-trip ==="
|
|
143
|
-
mayhem --db {{ _db }} validate {{ _spec }} --compose {{ _compose }}
|
|
144
|
-
mayhem --db {{ _db }} plan {{ _spec }} --compose {{ _compose }}
|
|
145
|
-
mayhem --db {{ _db }} run {{ _spec }} --compose {{ _compose }}
|
|
146
|
-
mayhem --db {{ _db }}
|
|
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
|
|
147
149
|
@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
|
|
150
|
+
mayhem --db {{ _db }} inspect history "$$run_id"; \
|
|
151
|
+
mayhem --db {{ _db }} recover execute "$$run_id"
|
|
150
152
|
@echo "✓ full round-trip"
|
|
151
153
|
|
|
152
154
|
# ── stack management ─────────────────────────────────────────────────────────
|
|
@@ -169,7 +171,7 @@ stack-down:
|
|
|
169
171
|
# Run unit tests
|
|
170
172
|
test-unit:
|
|
171
173
|
@echo "=== unit tests ==="
|
|
172
|
-
python3 -m pytest tests/unit/ -v --tb=short
|
|
174
|
+
python3 -m pytest tests/unit/ -n {{ _workers }} --dist loadfile -v --tb=short
|
|
173
175
|
@echo "✓ unit tests"
|
|
174
176
|
|
|
175
177
|
# Run e2e tests (in-process, no containers needed)
|
|
@@ -190,6 +192,18 @@ lint:
|
|
|
190
192
|
ruff check src/ tests/
|
|
191
193
|
@echo "✓ lint"
|
|
192
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
|
+
|
|
193
207
|
# ── aggregate targets ────────────────────────────────────────────────────────
|
|
194
208
|
|
|
195
209
|
# Quick smoke: topology + toolkit + config + experiment + validate + plan
|