Programming · free software · the open webSubscribe via RSS

IRC presence is not an appointment to answer

IRC exposes connection state and an explicit away message, but neither is a promise about when a person will reply. Treat messaging as asynchronous and write bug reports that include a reproducible exchange.

A connected nickname is a narrow fact

When an IRC client is connected, the network can route messages to that session. A PRIVMSG asks the server to send text to a user or channel; it does not establish that the recipient is watching the screen or can respond now. RFC 2812 describes IRC client-to-server messages as asynchronous and advises clients not to wait forever for a reply. [1]

That observation applies to software too. A bot that sends a question and blocks indefinitely for a human response is treating message transport as a synchronous function call. The server’s ability to accept a line says nothing about the recipient’s attention, network stability, or schedule. A sensible client can display delivery context, retain the unanswered question, and let the sender continue working.

AWAY reports declared state

IRC has an explicit AWAY command and corresponding server replies. A user can set an away message, and a later AWAY without the message clears it under the protocol’s defined behavior. This is a declared status, not a measurement inferred from idle time. [1]

The distinction prevents a familiar mistake: a quiet user is not necessarily absent. They may be reading, working in another window, or simply choosing not to type. Conversely, a user without an away message can be temporarily unreachable. Presence is useful as a hint, but it cannot answer the social question “when should I expect a reply?” without additional context and conventions established by the people involved.

Read the exchange as a trace

Imagine a client sends PRIVMSG pat :Could you review this patch? and receives no message from Pat. The trace establishes only that the sender issued a request and has not observed a reply. If Pat previously sent AWAY :back after lunch, the sender has a declared clue about availability; the message still does not schedule a response. If Pat disconnects, the connection state changes, but the request remains socially unanswered. [1]

This is a useful protocol trace when diagnosing an application that reports “message sent” as “person notified.” The client should distinguish local queueing, server acceptance, and any network-specific delivery signal it actually receives. A successful write to a socket is not evidence of a human reading the message. Different servers and clients may add behavior beyond the historical core protocol, so describe the exact network and client when reporting a discrepancy.

Make asynchronous bugs reproducible

A useful bug report says what software and network were involved, then lists the steps that produce the issue. For example: connect client version X to network Y; set an away message; disconnect; reconnect through a bouncer; send a private message from a second account. State the expected result separately from the actual result, including whether the away text appears, whether the message is delivered, and what the sender sees.

A bouncer may keep a network connection alive while the user’s foreground client is closed, but its behavior depends on the service and configuration. That can change observed presence without changing the underlying expectation that a reply is asynchronous. Avoid interpreting an idle timer as a protocol guarantee. The clearer mental model is that IRC offers message exchange and some explicit state; people decide how quickly to answer.

References

  1. IRC client specification, RFC 2812

Suggest a correction · All posts