Synopsis
Description
crucihil verify answers the question “would this suite actually catch a regression?” It runs the suite once as a baseline, then once per mutation — the simulated DUT is broken on purpose — and scores every test against every mutation it should catch. A test that stays green while the behavior it claims to verify is broken is vacuous, and this command finds it.
Works on native CruciHiL suites and — via --framework — on existing pytest and Robot Framework suites, unchanged.
Outcomes
Each (test, mutation) pair gets one of three outcomes:blocked ≠ fail is itself a verification criterion. A test that goes blocked under a mutation is not catching the regression — it is misreporting a firmware defect as a rig-health issue. That is scored wrong_reason, not caught.Only baseline-passing tests are verifiable. Tests that fail, error, or block in the baseline run are listed under
⚠ Not verifiable (failed baseline) and excluded from scoring.Mutation kinds
The mutation plan is derived from the suite and (optionally) the contract, priority-ordered, and capped by--max-runs. Every planned run is one full-suite execution under one mutation.
DUT outputs come from the contract when
--contract is given; otherwise they are inferred from the messages the suite simulates (sim.start steps) plus every asserted signal’s message.
Options
path
required
Path to the YAML suite manifest — or a pytest/Robot test tree when
--framework is given. Short form: -s.path
required
Path to the rig TOML config. Short form:
-r.string
Verify an existing pytest or Robot Framework suite unchanged (
pytest | robot) — strength report with zero rewrites. If --suite points at a wrapper manifest with a non-crucihil framework: field, this is auto-detected.path
Contract artifact (
contracts/<component>.json, produced by crucihil author or crucihil analyze) — sharpens the mutation plan with the component’s real outputs.integer
default:"20"
Cap on mutation runs, priority-ordered (dead-DUT first — cheapest, strongest signal).
path
Write the full strength report JSON to this path.
boolean
default:"false"
Push the strength report to the cloud as a verification run — the dashboard’s run detail shows the tests × mutations matrix. Requires
CRUCIHIL_BASE_URL and CRUCIHIL_API_KEY environment variables.Exit codes
Example output
Verifying existing pytest / Robot suites
Existing test bases get a strength report with zero rewrites — point--suite at the test tree and name the framework:
crucihil author --framework needs no flag at all — the framework: field in the YAML is detected automatically:
Syncing to the dashboard
--sync pushes the strength report to the cloud as a verification run:
Examples
Native suite
Sharpen the plan with a contract; save and sync the report
Existing pytest suite, capped at 10 mutation runs
See also
- crucihil author — author a suite and verify it in one loop (
--verify) - crucihil run — run the suite normally (baseline semantics,
blockedvsfail) - YAML Manifest Reference —
faults:blocks and theframework:field