Skip to main content

Diagnostic-phone proof

The CLI is not treated as complete because its lower layers have the necessary types. Its exit criterion is a bounded process-level proof: twelve scenarios drive the shipped sipx binary, and the signalling claim is checked separately against two independent peer profiles. A specified row without an executable test remains open.

Run the structural audit without opening a socket:

./scripts/diagnostic-phone-proof.py --check

Run every local process vector, each with a finite failure bound:

./scripts/diagnostic-phone-proof.py --run

Add the container-backed independent-peer runs for the complete release proof:

./scripts/diagnostic-phone-proof.py --run --interop

The command prints one matrix with the requested and observed path for DPH-1 through DPH-12, then a transport-by-transport peer matrix. Missing tests, failed commands, timeouts, and transports with fewer than two peer paths all make it exit non-zero. Its timeout bounds only a failure; the tests themselves wait for readiness, signalling, media, or process-exit events instead of sleeping and assuming the event happened.

Current state on main

The following is the structural state, not a claim that the tests passed on the reader's machine:

EvidencePresentOpen
Diagnostic-phone vectorsDPH-1DPH-12; latest bounded run passed every vector
Two-peer signalling pathsUDP, TCP, TLS, WebSocket, secure WebSocket; both peer profiles passed the complete shared list
Public CLI contractSeven executable command helps and three versioned JSON contracts agree with the public reference

The existing vectors cover all five loopback signalling transports; strict codec and media-security selection; a server-reflexive ICE path; deterministic device audio; bounded load; and interruption cleanup. That is different from independent interoperability. WSS therefore has its own registration test in the shared peer list, with each profile declaring its actual HTTPS port and resource; the proof does not infer WSS from separate TLS and WebSocket successes.

The public-reference row is executable too: ./scripts/check-cli-reference.py --check builds the default command, runs root and all seven subcommand help paths, and compares them with the CLI page. It also discovers the three versioned JSON schemas or envelopes beside their Rust producers and holds every literal structural field against the checked public table. The diagnostic proof runs that check as a product path rather than accepting hand-reviewed prose.

Positive Opus selection and reliable early media now have their own command-process cases in the same product-path table. The structural audit confirms those cases are wired into the proof; the bounded --run invocation decides whether they pass on a candidate. Lower-layer existence is useful engineering evidence, but it is not substituted for shell-level product evidence. The early-media fixture sends its final answer only after the provisional announcement has completed, so early_media and early_samples_recorded report audio that causally preceded confirmation rather than audio inferred from a timer.

This matrix is a release threshold, not a coverage percentage. See the development process for why sipx uses executable predicates, and the CLI reference for the command contract being exercised.