mix surfex.confirm (Surfex v0.6.2)

Copy Markdown View Source

Confirms one relation, named by its ends and type, with a note saying what was judged (Surfex.Record.confirm/7):

mix surfex.confirm "test:MyApp.CartTest: rejects a closed cart" spec.md#closed \
  --type verifies --note "spec reworded; the test still checks a closed cart is refused"

It is the judgement path (§18): a verifies relation after a spec rewording that changes no behaviour, an excuses relation, a structural relation after a change, and an implements relation to a shape (a type, which no run exercises). It never confirms any other implements relation: code is validated by evidence or a review, never asserted. There is no form that confirms every relation touching an id.

With --file PATH it confirms many in one run (Surfex.Record.batch/3): one relation per line, tab-separated FROM, TO, TYPE, NOTE, each judged as the single form judges it. The notes must be distinct, and a refused line fails the whole batch.

--merge PATH (once per file) also reads other runs' evidence, such as CI artifacts, with the local run as one history (Surfex.Evidence.combined/1), so a test excluded locally counts from the run that had its environment. A missing file fails.

With --evidence it confirms instead what the test evidence justifies (Surfex.Record.confirm_by_evidence/4): each test relation on its test's failing run, each tests and implements relation on a red run and then a green one:

mix test && mix surfex.confirm --evidence

With require_red: true in .surfex.exs, a tests relation isn't confirmed by hand until its test's current version has failed first.