submit method
Submits mission; resolves when THIS mission's receipt arrives.
Throws immediately when the host answers with an error envelope for
THIS envelope id (or an internal fault) — a rejected mission
never produces a receipt, so waiting would only burn the timeout.
Implementation
Future<ZapReceipt> submit(MissionEnvelope mission) {
final seen = _receiptWaiters[mission.missionId] ?? 0;
_receiptWaiters[mission.missionId] = seen + 1;
send(ZapProtocol.encodeLine(mission.toJson()));
return _awaitReceipt(mission, seen + 1);
}