pub fn decode_line(line: &str) -> Result<Envelope, HostError>
Parse one NDJSON line into an envelope. A garbage line is a clean HostError::Wire, never a panic — the crash-consistency contract (task deliverable 5).
HostError::Wire