mix crosswake.proof_lane.physical_iphone (crosswake v0.2.4)

View Source

Runs the host-owned physical-iPhone proof only after closed preflight.

Exit status contract

  • 0 — every assertion passed.
  • 1 — a validated, complete, correctly-owned, correctly-ordered report was produced and it contains at least one non-passing assertion outcome: a real, provable defect (join_reports/3's PI-REPORT-OUTCOME rule).
  • 2 — no such report was produced: a bad envelope, a missing device or backend report, a command-options error, a blocked preflight or readiness result, a host-callback or cleanup failure, or any rule id this module does not otherwise recognise. 2 is the conservative "could not run" status, reached through exit_status_for/1's explicit catch-all.

This mirrors the adopter's own host-owned 0/1/2 convention. It is unrelated to Crosswake.ReleaseStatus's distinct exit 3 for a could-not-verify outcome (Phase 169) — that is a different command with its own documented contract, not this one retrofitted onto it.

The emitted JSON for a non-passing run also carries an exit_classification field ("refuted" for 1, "could_not_run" for 2), so a consumer reading stdout does not have to infer the classification from the process status alone.

Summary

Functions

run_with(args, options)

@spec run_with(
  [String.t()],
  keyword()
) :: {:ready, map()} | {:blocked, map()} | {:error, String.t()}