cli: read the engine's answer after a failed request write, so a refusal is not lost as a broken pipe (hq issue 444)
mesh/merge-gate pass: builds mesh-sdk, sent nowhere; no bus step; every machine composes with the change as it did without (4 of 4 compose)
mesh/repo-check pass: its merge-check.sh passed, each part in its toolchain: merge-check.sh (typescript), go/merge-check.sh (go)
mesh/delivery superseded: a newer head of the same pull request

This commit is contained in:
2026-10-11 02:43:54 +02:00
parent 19cfe0ef03
commit b4900f52b8
2 changed files with 76 additions and 1 deletions
+9 -1
View File
@@ -140,7 +140,15 @@ func AskWith(ctx context.Context, socket string, req Request) (Answer, error) {
_ = conn.SetDeadline(deadline)
}
if err := WriteRequest(conn, req); err != nil {
return Answer{}, fmt.Errorf("asking the node-engine: %w", err)
// The engine may have answered before it read the request — a refusal (busy, an unknown account) written
// and the connection closed — and the write then fails on the close. That answer is already waiting, and
// it says why where the write error says only that the pipe broke (novox/hq issue 444, found under issue
// 434). So read it, within the deadline the connection already has, and only when none came say the write.
a, rerr := ReadAnswer(conn)
if rerr != nil {
return Answer{}, fmt.Errorf("asking the node-engine: %w; and no answer came (%v)", err, rerr)
}
return a, nil
}
a, err := ReadAnswer(conn)
if err != nil {