SmartTest

Safety model

No static analysis can guarantee that a skipped test would have passed. SmartTest's job is to make that risk small, measured and visible, and never hidden.

What SmartTest will never do (PRD §32.2) #

How each guarantee is enforced #

GuaranteeMechanismStory
Skipped ≠ passedSeparate status skipped by selection. Report integrity suite in CIST-051, ST-090
Unknown ≠ unrelatedUnresolved imports and dynamic patterns are stored as uncertainty and trigger fallback per modeST-038, ST-059
Global changes widen scopeBuilt-in mandatory triggers that can't be removed by rulesST-058, ST-066
Partial ≠ full coverageEvery coverage figure is labelled full or selected, and the two are never mergedST-088
No silent destructionDry-run equals the real plan. Atomic writes. Init journal and rollback. Generator never overwritesST-072–076, ST-082
Evidence before trustvalidate-selection, shadow and benchmark compare against full runs. The regression harness runs in the pre-push gateST-064, ST-095
Cached ≠ freshCached results have their own status (cached-pass), counted apart and labelled "cached, not run"; keys cover every input; benchmark checks them against full runs (ADR-0009)0.8.0
No stale evidenceA trace is used only while every file it loaded is unchanged and the runtime/lockfile fingerprint matches0.5.0
Observed skips are boundedTraces never rule out tests in SAFE mode, never for env, translation or asset changes, and only tests selected by static edges alone0.5.0

Adoption path we recommend #

  1. Observe. Run smarttest impact on PRs without changing CI and read the explanations.
  2. Validate. Run smarttest validate-selection on a sample of real changes and check that 0 failures are missed.
  3. Record. Run smarttest trace and, on a schedule, smarttest shadow; shadow --report shows whether any failure was ever missed.
  4. Adopt on PRs. Use run --affected --mode balanced on pull requests and keep run --all on main and nightly.
  5. Tighten. Add rules for critical areas (risk: critical) so they always run in SAFE mode.

Edit this page on GitHub