Skip to content

Phase D.5 smoke — Go backend in place of the Python spike listener

Status: verified — completed 2026-04-19

First real-CDS smoke test of the Go backend (cmd/iosmux-backend/, commit 114548a). Cross-compiled for havoc's darwin/amd64, deployed, and run in place of the Python iter-4 listener. Byte-exact match against iter-04/results/session-01-send.bin (14,313 B, cmp clean). Same 9 server frames, same quiescent state. CDS-side reorder of one SETTINGS-ACK is a legal run-to-run variation, not a backend change. Full writeup: findings.md.

Phase D.5 closes. Phase D.6 (per-service handlers) is the next implementation pass.

What D.5 proved

The 400-line Python spike listener that drove iter-1 through iter-4 can now be replaced by the ~300 LOC Go dispatcher in internal/backend/dispatcher.go with zero observable change to CDS's behaviour. The replacement is:

  • Byte-exact on the server→client direction (14,313 B cmp-clean)
  • Behaviourally equivalent on the client←server side (same frame set, CDS reaches the same quiescent state)

Files

  • findings.md — full writeup: byte-level comparison table, client-side reorder analysis, implications for D.6/D.7.
  • smoke-01.log — backend stdout from run 1 (no pcap).
  • smoke-02.log — backend stdout from run 2 (with pcap). Identical to smoke-01.log.
  • iosmux-d5-smoke.pcap — 18 KB loopback capture from run 2. Scanned for UDID/serial patterns, zero matches, kept as-is.

Why this directory is named "iter-05-go-backend"

For continuity with the iter-NN series in the parent directory. Each iter-NN tracked one empirical step in the Q3 research arc (iter-1 through iter-4 under Python replay). This "iter-05" is the first step beyond pure replay: same wire behaviour, different implementation language. The naming signals "same research cadence, still empirical, but we've crossed into Phase D implementation territory".

Next step

devicectl pair (or Xcode Pair button) on havoc should drive CDS past handshake into an actual service request. Whatever CDS asks for next is D.6's first dispatch target.