README.md (Multi-Client Model) says the server fans out "the user's own DMs and the channel messages it sends over the HTTP API, to every client queue for that user session". An IRC listener connection can be one of those clients (it attaches to an existing session with PASS and the nick). The service does queue those messages to the IRC connection's client, but the relay in internal/ircserver/relay.go then drops every PRIVMSG, NOTICE, JOIN, PART, NICK and QUIT, and, with #143, every TOPIC, MODE and KICK, whose sender is the connection's own nick. It does that to avoid repeating what the connection's own handlers already echoed, but it also drops what the same session sent from its other clients. So a user on the web client and an IRC client at once never sees, on IRC, what they said or did from the web client. Read from the code on d37c130 and #177.
Fix: decide "already echoed" by the client that sent the message, not by nick. When a message comes from the IRC listener, the service skips the sending connection's own client queue in the fan-out (the handler has already written the echo), and the relay drops nothing by nick. Every other client of the session, including another IRC connection, then gets the message once.
Definition of done
A session with an HTTP API client and an IRC listener connection: a PRIVMSG, NOTICE, JOIN, PART, NICK, TOPIC, MODE and KICK made from the HTTP client each reach the IRC connection once.
Each of those made from the IRC connection reaches that connection once (its echo) and the HTTP client once.
The relay has no own-nick checks left; tests in internal/ircserver for items 1 and 2.
One reviewed PR against next.
Model: opus-5-5
`README.md` (Multi-Client Model) says the server fans out "the user's own DMs and the channel messages it sends over the HTTP API, to every client queue for that user session". An IRC listener connection can be one of those clients (it attaches to an existing session with `PASS` and the nick). The service does queue those messages to the IRC connection's client, but the relay in `internal/ircserver/relay.go` then drops every PRIVMSG, NOTICE, JOIN, PART, NICK and QUIT, and, with https://git.eeqj.de/sneak/neoirc/issues/143, every TOPIC, MODE and KICK, whose sender is the connection's own nick. It does that to avoid repeating what the connection's own handlers already echoed, but it also drops what the same session sent from its other clients. So a user on the web client and an IRC client at once never sees, on IRC, what they said or did from the web client. Read from the code on `d37c130` and https://git.eeqj.de/sneak/neoirc/pulls/177.
Fix: decide "already echoed" by the client that sent the message, not by nick. When a message comes from the IRC listener, the service skips the sending connection's own client queue in the fan-out (the handler has already written the echo), and the relay drops nothing by nick. Every other client of the session, including another IRC connection, then gets the message once.
## Definition of done
1. A session with an HTTP API client and an IRC listener connection: a PRIVMSG, NOTICE, JOIN, PART, NICK, TOPIC, MODE and KICK made from the HTTP client each reach the IRC connection once.
2. Each of those made from the IRC connection reaches that connection once (its echo) and the HTTP client once.
3. The relay has no own-nick checks left; tests in `internal/ircserver` for items 1 and 2.
4. One reviewed PR against `next`.
Model: opus-5-5
clawbot
self-assigned this 2026-10-21 06:04:28 +02:00
Item 2 of the definition of done cannot be met as written for PRIVMSG and NOTICE. The IRC listener writes no echo of a PRIVMSG or NOTICE to the connection that sent it, since IRC does not echo them, so once the fan-out skips that connection's queue it gets no copy at all.
Reading taken: a PRIVMSG or NOTICE sent on the IRC connection reaches that connection zero times and the HTTP client once. The other six commands reach the IRC connection once (its echo) and the HTTP client once. Adding a PRIVMSG and NOTICE echo to the IRC listener would make ordinary IRC clients show every line twice.
Model: opus-5-5
Item 2 of the definition of done cannot be met as written for PRIVMSG and NOTICE. The IRC listener writes no echo of a PRIVMSG or NOTICE to the connection that sent it, since IRC does not echo them, so once the fan-out skips that connection's queue it gets no copy at all.
Reading taken: a PRIVMSG or NOTICE sent on the IRC connection reaches that connection zero times and the HTTP client once. The other six commands reach the IRC connection once (its echo) and the HTTP client once. Adding a PRIVMSG and NOTICE echo to the IRC listener would make ordinary IRC clients show every line twice.
Model: opus-5-5
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
README.md(Multi-Client Model) says the server fans out "the user's own DMs and the channel messages it sends over the HTTP API, to every client queue for that user session". An IRC listener connection can be one of those clients (it attaches to an existing session withPASSand the nick). The service does queue those messages to the IRC connection's client, but the relay ininternal/ircserver/relay.gothen drops every PRIVMSG, NOTICE, JOIN, PART, NICK and QUIT, and, with #143, every TOPIC, MODE and KICK, whose sender is the connection's own nick. It does that to avoid repeating what the connection's own handlers already echoed, but it also drops what the same session sent from its other clients. So a user on the web client and an IRC client at once never sees, on IRC, what they said or did from the web client. Read from the code ond37c130and #177.Fix: decide "already echoed" by the client that sent the message, not by nick. When a message comes from the IRC listener, the service skips the sending connection's own client queue in the fan-out (the handler has already written the echo), and the relay drops nothing by nick. Every other client of the session, including another IRC connection, then gets the message once.
Definition of done
internal/ircserverfor items 1 and 2.next.Model: opus-5-5
Item 2 of the definition of done cannot be met as written for PRIVMSG and NOTICE. The IRC listener writes no echo of a PRIVMSG or NOTICE to the connection that sent it, since IRC does not echo them, so once the fan-out skips that connection's queue it gets no copy at all.
Reading taken: a PRIVMSG or NOTICE sent on the IRC connection reaches that connection zero times and the HTTP client once. The other six commands reach the IRC connection once (its echo) and the HTTP client once. Adding a PRIVMSG and NOTICE echo to the IRC listener would make ordinary IRC clients show every line twice.
Model: opus-5-5