2026-08-09 - 2026-11-09
Overview
80 Pull requests merged by 2 users
Merged
#258 Remove the unused GetSessionChannelIDs from the db package (closes #254)
Merged
#257 Keep Go's caches out of the test stage's image (closes #256)
Merged
#255 Move the test-only helpers out of the shipped db package (closes #248)
Merged
#253 Apply MAX_MESSAGE_SIZE to the whole request body (closes #250)
Merged
#252 Add the # to RPL_ENDOFWHO for an unknown channel over HTTP (closes #249)
Merged
#251 Fix the sentences a fresh read of README.md failed (closes #190)
Merged
#215 Rewrite README.md sentence by sentence
Merged
#213 Rewrite AGENTS.md sentence by sentence
Merged
#246 Show square brackets in the neoirc-cli message window as written (closes #233)
Merged
#247 Refuse a PRIVMSG or NOTICE whose body or meta has the wrong type (closes #245)
Merged
#244 Keep the connection state in the status bar on /query (closes #235)
Merged
#242 Make the schema files match the server (closes #218)
Merged
#243 Redraw the status bar when a line arrives in another window (closes #232)
Merged
#236 Stop the earlier poll loop on a second /connect (closes #228)
Merged
#241 Make the PASS notice name the HTTP API login (closes #217)
Merged
#239 Send peers the IRC listener user's QUIT reason (closes #216)
Merged
#240 List the missing channel modes in the 004 reply (closes #238)
Merged
#237 List the user modes in the 004 reply (closes #220)
Merged
#234 Keep the connection state in the status bar on /window (closes #225)
Merged
#231 Show the connection state in the neoirc-cli status bar (closes #229)
Merged
#230 Show the neoirc-cli screen without waiting at start-up (closes #226)
Merged
#227 Keep neoirc-cli responding when a key or a typed line updates the screen (closes #223)
Merged
#224 Make Alt and a digit set the send target as /window does (closes #221)
Merged
#222 Stop startup when a setting does not parse (closes #219)
Merged
#214 Rewrite schema/README.md sentence by sentence
Merged
#212 Start test servers on a port the system picks (closes #211)
Merged
#210 Keep each test database when the pool replaces its connection (closes #209)
Merged
#208 Keep foreign keys on for every database connection (closes #207)
Merged
#206 Let an IRC relay finish its queue read when its connection ends (closes #205)
Merged
#204 Run the internal/handlers tests in parallel (closes #194)
Merged
#203 Show the direct-message web tab even when other tabs change first (closes #202)
Merged
#201 Give the web Server tab a name no nick can take (closes #200)
Merged
#199 Keep the web tab the user reads, and show a kick in the Server tab (closes #195)
Merged
#198 Open a channel only when the server accepts the join (closes #197)
Merged
#196 Show a joined channel's web tab whichever reply comes first (closes #193)
Merged
#192 Close a channel's web tab when the user parts or is kicked (closes #185)
Merged
#188 Show neoirc-cli's own messages, joins and parts from the server's events (closes #186)
Merged
#189 deploy
Merged
#111 next → main: utility commands, IRC listener and audit fixes, build fixes
Merged
#187 Make an IRC listener connection follow its session's nick (closes #184)
Merged
#183 Show an IRC listener user what their session sends from other clients (closes #179)
Merged
#182 Make TestIdleCleanupKeepsActiveUser independent of timing (closes #181)
Merged
#180 Relay INVITE to IRC listener users as an INVITE line (closes #147)
Merged
#178 Keep the web client's saved channels and show who changed a mode (closes #176)
Merged
#177 Send an IRC listener user their own TOPIC, MODE and KICK once (closes #143)
Merged
#175 Bring the web client in line with the current API (closes #145)
Merged
#174 Register the broker wait before the first poll (closes #157)
Merged
#173 Refuse passwords over 72 bytes and confirm only stored ones (closes #144)
Merged
#171 Spend a hashcash stamp only when the request succeeds (closes #158)
Merged
#172 Resolve IRC client hostnames off the accept loop (closes #156)
Merged
#170 Decode the API's actual fields in neoirc-cli (closes #146)
Merged
#168 Broadcast a session's QUIT once when its clients leave together (closes #154)
Merged
#169 Fail startup when the HTTP listener cannot bind (closes #167)
Merged
#166 Wait for IRC listener cleanup and HTTP shutdown on stop (closes #159)
Merged
#164 Run JOIN, PART and KICK as one transaction each (closes #153)
Merged
#165 Serve the index page for an empty URL path instead of panicking (closes #149)
Merged
#162 PING a quiet IRC listener client before closing it (closes #155)
Merged
#163 Spend a channel hashcash stamp in one statement (closes #150)
Merged
#161 Bind history to the recipient session and channel, not the name (closes #148)
Merged
#160 Remove the relay's broker wait channel after each tick (closes #151)
Merged
#152 Check nicks on the IRC listener with the HTTP API's rule (closes #142)
Merged
#141 Compare nicks by exact case everywhere (closes #128)
Merged
#139 Enforce channel keys, invites, +s and +H on the IRC listener (closes #122)
Merged
#135 Fix IRC listener relay of bodies and modes, and JOIN names (closes #127)
Merged
#138 Give each handler and service test its own database (closes #131)
Merged
#137 Let an empty IRC_LISTEN_ADDR disable the IRC listener (closes #124)
Merged
#136 Page history by message id (closes #125)
Merged
#134 Run SQLite in WAL mode with a busy timeout the driver reads (closes #123)
Merged
#133 Merge main into next (closes #132)
Merged
#130 Give each IRC listener test its own database (closes #129)
Merged
#120 Bring README.md in line with the modes and the schema (closes #119)
Merged
#126 Keep active IRC listener users from expiring (closes #121)
Merged
#96 Add the tier 3 utility IRC commands (closes #87)
Merged
#118 Build the web front end with yarn (closes #117)
Merged
#116 Make the internal/handlers tests fast (closes #113)
Merged
#115 Re-vendor the canonical files from sneak/prompts at dd4027b (closes #112)
Merged
#114 Run make test once so a failing test fails the build (closes #101)
Merged
#110 Fix the data races and the test timeout that fail make test, on main (closes #104)
Merged
#108 Remove BUILDARCH and stamp the git version in Docker builds (closes #107, closes #109)
Merged
#105 Fix the data races that fail make test (closes #104)
1 Pull request proposed by 1 user
Proposed
#191 next → main: client fixes
78 Issues closed from 1 user
Closed
#254 Remove the unused GetSessionChannelIDs from the db package
Closed
#256 make test takes about 85 seconds on the build host, over the 60-second cap
Closed
#248 Move the test-only helpers out of the shipped db package
Closed
#250 MAX_MESSAGE_SIZE bounds only the first JSON value read, not the request body
Closed
#249 WHO over the HTTP API: RPL_ENDOFWHO for an unknown channel carries the name as sent, not with the # added
Closed
#190 Rewrite README.md and the other prose documents sentence by sentence, on Fable
Closed
#233 neoirc-cli reads square brackets in nicks and messages as colour tags
Closed
#245 The HTTP API relays a PRIVMSG or NOTICE body that is not an array of strings
Closed
#235 neoirc-cli shows connected in the status bar after /query while not connected
Closed
#218 The JSON files in schema/ disagree with the server
Closed
#232 neoirc-cli does not show new lines in other windows until the status bar is next redrawn
Closed
#228 neoirc-cli keeps the old poll loop running after a second /connect
Closed
#217 The IRC listener's PASS notice promises a reconnect the server does not support
Closed
#216 The IRC listener tells peers Connection closed instead of the user's QUIT reason
Closed
#238 The 004 reply leaves out channel modes the server accepts
Closed
#220 The 004 reply sends an empty user-modes parameter
Closed
#225 neoirc-cli shows connected in the status bar after /window while not connected
Closed
#229 neoirc-cli never shows the connection state in its status bar
Closed
#226 neoirc-cli hangs at startup before it shows its screen
Closed
#223 neoirc-cli stops responding when a key or a typed line updates the screen
Closed
#221 neoirc-cli keeps sending to the old window after Alt and a digit
Closed
#219 A setting that cannot be parsed silently falls back to zero or false
Closed
#211 internal/server tests can fail at random when another process takes the port they picked
Closed
#209 Test databases lose all their data when a cancelled query makes the pool replace its connection
Closed
#207 After a cancelled query, the database runs without foreign keys
Closed
#205 TestIntegrationKill sometimes times out waiting for the killed user's QUIT
Closed
#194 internal/handlers tests take about 26 seconds, over the 20-second target
Closed
#202 The web client can open the wrong tab after /msg, from an out-of-date tab list
Closed
#200 In the web client, a user with the nick Server shares the Server tab
Closed
#195 The web client leaves the channel the user is reading when another tab closes, and a kicked user sees no notice
Closed
#197 Both clients open a channel the server refused to join
Closed
#193 The web client loses its active tab when the JOIN event arrives before the join request returns
Closed
#185 The web client keeps a channel's tab after its session leaves the channel from another client or is kicked
Closed
#186 neoirc-cli hides what its session does from other clients and shows its own join twice
Closed
#184 An IRC listener connection keeps its old nick after its session's nick is changed from another client
Closed
#179 An IRC listener connection never sees what its own session sent from another client
Closed
#181 TestIdleCleanupKeepsActiveUser fails on some runs and turns next red
Closed
#147 INVITE reaches an IRC listener user as a server NOTICE without the inviter, not as an INVITE line
Closed
#176 The web client wipes its saved channels on every load and shows a mode change without who made it
Closed
#143 An IRC listener user gets their own TOPIC, MODE and KICK twice
Closed
#145 The web client targets an older API: /mode only queries, numerics and member prefixes are not parsed, a 401 is retried forever
Closed
#157 A message that arrives between the first poll and the broker wait is delivered only after the full long-poll timeout
Closed
#144 PASS over 72 bytes gets HTTP 500, and the IRC listener confirms a password it did not store
Closed
#158 A hashcash stamp is spent before the request can still fail, so a refused request costs the client a new proof
Closed
#156 The IRC accept loop does the reverse DNS lookup before handing the connection off, so one slow lookup stalls every new IRC connection
Closed
#146 neoirc-cli reads lastId where the API sends last_id, so it re-reads its queue in a tight loop; /names and /list decode the wrong shapes
Closed
#154 Two clients of one session leaving at once broadcast its QUIT twice
Closed
#167 A failed HTTP listen is only logged, and the server runs on without its HTTP API
Closed
#159 Stopping the server leaves IRC listener sessions in the database, so after a restart their nicks are taken for up to 30 days
Closed
#153 JOIN is several statements with no transaction: +l is exceeded, two first joiners both become operator, and a JOIN racing the last PART gets 500
Closed
#149 A request with an empty URL path panics in the SPA handler
Closed
#155 The IRC listener closes a connection that sends nothing for five minutes and never sends a PING of its own
Closed
#150 A channel hashcash stamp can be spent more than once: the spent check and the record are two statements
Closed
#148 History is keyed by name, so the next holder of a nick or of a channel name can read the previous holder's messages
Closed
#151 The IRC relay adds a broker wait channel every 100 ms and removes none while the user is idle, so memory grows per idle IRC connection and stays after it closes
Closed
#142 The IRC listener accepts any nick: a nick with spaces forges lines other IRC clients read as another user's
Closed
#128 Nicks are unique by exact case but compared ignoring case
Closed
#122 The IRC listener ignores channel keys, invites, +s and +H
Closed
#127 The IRC listener drops lines and mode parameters, and accepts any channel name
Closed
#131 Handler and service tests can reuse a finished test's database
Closed
#124 An empty IRC_LISTEN_ADDR does not turn the IRC listener off
Closed
#125 History paging takes an id no response gives the client
Closed
#123 SQLite never runs in WAL mode: the database URL uses a parameter the driver ignores
Closed
#132 next does not merge into main: both carry the data race fix
Closed
#129 IRC listener tests fail when run again: test databases are shared between runs
Closed
#119 README.md describes modes and the schema as they were, not as they are
Closed
#121 IRC listener users are removed by the idle cleanup while still active
Closed
#87 Tier 3: Utility IRC commands (USERHOST, VERSION, ADMIN, INFO, TIME, KILL, WALLOPS)
Closed
#117 The web build uses npm, but REPO_POLICIES.md says yarn
Closed
#113 internal/handlers tests make make test miss its 20-second target
Closed
#112 Re-vendor the canonical files from sneak/prompts at dd4027b
Closed
#101 make test retry masks real data races and timeouts
Closed
#109 docker build . stamps dev, not the git tag or short commit
Closed
#107 Remove BUILDARCH from the Makefile
Closed
#104 Make prod green: the check fails on the commit main, next and prod share
Closed
#106 Run every build, test and lint step in the Dockerfiles at nice -n 19
Closed
#103 internal/ircserver: Disconnect doc comment understates the worst-case socket close delay
Closed
#102 internal/db: SetSessionWallops is dead production code after the #96 B2 refactor
78 Issues created by 1 user
Opened
#101 make test retry masks real data races and timeouts
Opened
#102 internal/db: SetSessionWallops is dead production code after the #96 B2 refactor
Opened
#103 internal/ircserver: Disconnect doc comment understates the worst-case socket close delay
Opened
#104 Make prod green: the check fails on the commit main, next and prod share
Opened
#106 Run every build, test and lint step in the Dockerfiles at nice -n 19
Opened
#107 Remove BUILDARCH from the Makefile
Opened
#109 docker build . stamps dev, not the git tag or short commit
Opened
#112 Re-vendor the canonical files from sneak/prompts at dd4027b
Opened
#113 internal/handlers tests make make test miss its 20-second target
Opened
#117 The web build uses npm, but REPO_POLICIES.md says yarn
Opened
#119 README.md describes modes and the schema as they were, not as they are
Opened
#121 IRC listener users are removed by the idle cleanup while still active
Opened
#123 SQLite never runs in WAL mode: the database URL uses a parameter the driver ignores
Opened
#122 The IRC listener ignores channel keys, invites, +s and +H
Opened
#124 An empty IRC_LISTEN_ADDR does not turn the IRC listener off
Opened
#125 History paging takes an id no response gives the client
Opened
#127 The IRC listener drops lines and mode parameters, and accepts any channel name
Opened
#128 Nicks are unique by exact case but compared ignoring case
Opened
#129 IRC listener tests fail when run again: test databases are shared between runs
Opened
#131 Handler and service tests can reuse a finished test's database
Opened
#132 next does not merge into main: both carry the data race fix
Opened
#140 1.0: what stands between next and a release candidate
Opened
#142 The IRC listener accepts any nick: a nick with spaces forges lines other IRC clients read as another user's
Opened
#143 An IRC listener user gets their own TOPIC, MODE and KICK twice
Opened
#144 PASS over 72 bytes gets HTTP 500, and the IRC listener confirms a password it did not store
Opened
#145 The web client targets an older API: /mode only queries, numerics and member prefixes are not parsed, a 401 is retried forever
Opened
#146 neoirc-cli reads lastId where the API sends last_id, so it re-reads its queue in a tight loop; /names and /list decode the wrong shapes
Opened
#147 INVITE reaches an IRC listener user as a server NOTICE without the inviter, not as an INVITE line
Opened
#148 History is keyed by name, so the next holder of a nick or of a channel name can read the previous holder's messages
Opened
#149 A request with an empty URL path panics in the SPA handler
Opened
#150 A channel hashcash stamp can be spent more than once: the spent check and the record are two statements
Opened
#151 The IRC relay adds a broker wait channel every 100 ms and removes none while the user is idle, so memory grows per idle IRC connection and stays after it closes
Opened
#153 JOIN is several statements with no transaction: +l is exceeded, two first joiners both become operator, and a JOIN racing the last PART gets 500
Opened
#154 Two clients of one session leaving at once broadcast its QUIT twice
Opened
#155 The IRC listener closes a connection that sends nothing for five minutes and never sends a PING of its own
Opened
#156 The IRC accept loop does the reverse DNS lookup before handing the connection off, so one slow lookup stalls every new IRC connection
Opened
#157 A message that arrives between the first poll and the broker wait is delivered only after the full long-poll timeout
Opened
#158 A hashcash stamp is spent before the request can still fail, so a refused request costs the client a new proof
Opened
#159 Stopping the server leaves IRC listener sessions in the database, so after a restart their nicks are taken for up to 30 days
Opened
#167 A failed HTTP listen is only logged, and the server runs on without its HTTP API
Opened
#176 The web client wipes its saved channels on every load and shows a mode change without who made it
Opened
#179 An IRC listener connection never sees what its own session sent from another client
Opened
#181 TestIdleCleanupKeepsActiveUser fails on some runs and turns next red
Opened
#184 An IRC listener connection keeps its old nick after its session's nick is changed from another client
Opened
#185 The web client keeps a channel's tab after its session leaves the channel from another client or is kicked
Opened
#186 neoirc-cli hides what its session does from other clients and shows its own join twice
Opened
#190 Rewrite README.md and the other prose documents sentence by sentence, on Fable
Opened
#193 The web client loses its active tab when the JOIN event arrives before the join request returns
Opened
#194 internal/handlers tests take about 26 seconds, over the 20-second target
Opened
#195 The web client leaves the channel the user is reading when another tab closes, and a kicked user sees no notice
Opened
#197 Both clients open a channel the server refused to join
Opened
#200 In the web client, a user with the nick Server shares the Server tab
Opened
#202 The web client can open the wrong tab after /msg, from an out-of-date tab list
Opened
#205 TestIntegrationKill sometimes times out waiting for the killed user's QUIT
Opened
#207 After a cancelled query, the database runs without foreign keys
Opened
#209 Test databases lose all their data when a cancelled query makes the pool replace its connection
Opened
#211 internal/server tests can fail at random when another process takes the port they picked
Opened
#218 The JSON files in schema/ disagree with the server
Opened
#216 The IRC listener tells peers Connection closed instead of the user's QUIT reason
Opened
#217 The IRC listener's PASS notice promises a reconnect the server does not support
Opened
#219 A setting that cannot be parsed silently falls back to zero or false
Opened
#220 The 004 reply sends an empty user-modes parameter
Opened
#221 neoirc-cli keeps sending to the old window after Alt and a digit
Opened
#223 neoirc-cli stops responding when a key or a typed line updates the screen
Opened
#225 neoirc-cli shows connected in the status bar after /window while not connected
Opened
#226 neoirc-cli hangs at startup before it shows its screen
Opened
#228 neoirc-cli keeps the old poll loop running after a second /connect
Opened
#229 neoirc-cli never shows the connection state in its status bar
Opened
#232 neoirc-cli does not show new lines in other windows until the status bar is next redrawn
Opened
#233 neoirc-cli reads square brackets in nicks and messages as colour tags
Opened
#235 neoirc-cli shows connected in the status bar after /query while not connected
Opened
#238 The 004 reply leaves out channel modes the server accepts
Opened
#245 The HTTP API relays a PRIVMSG or NOTICE body that is not an array of strings
Opened
#248 Move the test-only helpers out of the shipped db package
Opened
#249 WHO over the HTTP API: RPL_ENDOFWHO for an unknown channel carries the name as sent, not with the # added
Opened
#250 MAX_MESSAGE_SIZE bounds only the first JSON value read, not the request body
Opened
#254 Remove the unused GetSessionChannelIDs from the db package
Opened
#256 make test takes about 85 seconds on the build host, over the 60-second cap
2 Unresolved Conversations
Open
#2
1.1.0 — Federation: Two users chatting across linked servers
Open
#25
final 1.0rc1 review/audit/test/qa