f05e3bf6f4
Writes were one POST per slot although the Agent's PUT surface accepts several id=value pairs. The slots surviving the local refusals now go out as one WriteObservationsAsync(device, pairs) per device (new IMTConnectAgentClient method; the default loops the single-pair call). A batch closes at another device or a repeated DataItem so same-item writes keep request order; a refused multi-slot request is retried per slot so one refused DataItem costs only its own slot. Health contract: any Agent answer (accepted or refused) advances LastSuccessfulRead with the state following the read / stream flags. Refs #743 Claude-Session: https://claude.ai/code/session_01Ub9hGmYLQvn9XETzw7CMsT