feat(adversary): emit Antithesis SDK assertions to prove the attacker fired
Adds Adversary.SDK with Reachable / Sometimes assertion emitters that
write to \$ANTITHESIS_OUTPUT_DIR/sdk.jsonl (default /tmp/sdk.jsonl).
Wires two assertions into app/Main.hs:
- reachable("adversary_chain_sync_started", {target_host, point, limit})
fires once per invocation before connectToNode. Antithesis report
will show, segmented by target_host, "the adversary fired against
pN at least once". A host that never gets attacked is visible as
a missing Reachable hit.
- sometimes(true|false, "adversary_chain_sync_completed",
{target_host, tip|reason})
fires once per invocation on completion. true on clean exit,
false on connect/protocol failure. Sometimes-true vs Sometimes-
false buckets quantify how often the adversary actually completed
a full --limit sync vs being cut short by chaos.
Layer 1 of three for issue #123.