2025-11-09 - 2026-11-09

Overview

125 Active Pull Requests
125 Active Issues
Excluding merges, 4 authors have pushed 45 commits to main and 194 commits to all branches. On main, 129 files have changed and there have been 33009 additions and 6270 deletions.

124 Pull requests merged by 2 users

Merged #258 Remove the unused GetSessionChannelIDs from the db package (closes #254) 2026-11-03 12:38:43 +01:00

Merged #257 Keep Go's caches out of the test stage's image (closes #256) 2026-11-03 12:20:49 +01:00

Merged #255 Move the test-only helpers out of the shipped db package (closes #248) 2026-11-03 11:59:17 +01:00

Merged #253 Apply MAX_MESSAGE_SIZE to the whole request body (closes #250) 2026-11-03 09:20:43 +01:00

Merged #252 Add the # to RPL_ENDOFWHO for an unknown channel over HTTP (closes #249) 2026-11-03 08:38:45 +01:00

Merged #251 Fix the sentences a fresh read of README.md failed (closes #190) 2026-11-03 08:20:55 +01:00

Merged #215 Rewrite README.md sentence by sentence 2026-11-03 07:38:43 +01:00

Merged #213 Rewrite AGENTS.md sentence by sentence 2026-11-03 06:59:37 +01:00

Merged #246 Show square brackets in the neoirc-cli message window as written (closes #233) 2026-11-02 08:30:56 +01:00

Merged #247 Refuse a PRIVMSG or NOTICE whose body or meta has the wrong type (closes #245) 2026-11-02 07:39:18 +01:00

Merged #244 Keep the connection state in the status bar on /query (closes #235) 2026-11-02 07:10:08 +01:00

Merged #242 Make the schema files match the server (closes #218) 2026-11-02 06:24:58 +01:00

Merged #243 Redraw the status bar when a line arrives in another window (closes #232) 2026-11-02 06:03:54 +01:00

Merged #236 Stop the earlier poll loop on a second /connect (closes #228) 2026-11-02 05:38:08 +01:00

Merged #241 Make the PASS notice name the HTTP API login (closes #217) 2026-11-02 05:27:28 +01:00

Merged #239 Send peers the IRC listener user's QUIT reason (closes #216) 2026-11-02 05:02:34 +01:00

Merged #240 List the missing channel modes in the 004 reply (closes #238) 2026-11-02 04:48:19 +01:00

Merged #237 List the user modes in the 004 reply (closes #220) 2026-11-02 04:17:10 +01:00

Merged #234 Keep the connection state in the status bar on /window (closes #225) 2026-11-02 03:13:10 +01:00

Merged #231 Show the connection state in the neoirc-cli status bar (closes #229) 2026-11-02 02:53:12 +01:00

Merged #230 Show the neoirc-cli screen without waiting at start-up (closes #226) 2026-11-02 02:05:25 +01:00

Merged #227 Keep neoirc-cli responding when a key or a typed line updates the screen (closes #223) 2026-11-02 01:08:43 +01:00

Merged #224 Make Alt and a digit set the send target as /window does (closes #221) 2026-10-28 01:30:34 +01:00

Merged #222 Stop startup when a setting does not parse (closes #219) 2026-10-28 00:47:55 +01:00

Merged #214 Rewrite schema/README.md sentence by sentence 2026-10-27 16:09:18 +01:00

Merged #212 Start test servers on a port the system picks (closes #211) 2026-10-27 13:34:46 +01:00

Merged #210 Keep each test database when the pool replaces its connection (closes #209) 2026-10-27 12:26:49 +01:00

Merged #208 Keep foreign keys on for every database connection (closes #207) 2026-10-27 11:14:02 +01:00

Merged #206 Let an IRC relay finish its queue read when its connection ends (closes #205) 2026-10-27 10:20:10 +01:00

Merged #204 Run the internal/handlers tests in parallel (closes #194) 2026-10-27 08:28:29 +01:00

Merged #203 Show the direct-message web tab even when other tabs change first (closes #202) 2026-10-27 07:07:40 +01:00

Merged #201 Give the web Server tab a name no nick can take (closes #200) 2026-10-27 06:29:28 +01:00

Merged #199 Keep the web tab the user reads, and show a kick in the Server tab (closes #195) 2026-10-27 05:52:49 +01:00

Merged #198 Open a channel only when the server accepts the join (closes #197) 2026-10-27 05:09:01 +01:00

Merged #196 Show a joined channel's web tab whichever reply comes first (closes #193) 2026-10-27 04:30:42 +01:00

Merged #192 Close a channel's web tab when the user parts or is kicked (closes #185) 2026-10-27 03:11:34 +01:00

Merged #188 Show neoirc-cli's own messages, joins and parts from the server's events (closes #186) 2026-10-27 02:23:35 +01:00

Merged #189 deploy 2026-10-22 18:52:01 +02:00

Merged #111 next → main: utility commands, IRC listener and audit fixes, build fixes 2026-10-22 18:27:07 +02:00

Merged #187 Make an IRC listener connection follow its session's nick (closes #184) 2026-10-21 17:56:03 +02:00

Merged #183 Show an IRC listener user what their session sends from other clients (closes #179) 2026-10-21 15:23:14 +02:00

Merged #182 Make TestIdleCleanupKeepsActiveUser independent of timing (closes #181) 2026-10-21 13:06:02 +02:00

Merged #180 Relay INVITE to IRC listener users as an INVITE line (closes #147) 2026-10-21 07:31:39 +02:00

Merged #178 Keep the web client's saved channels and show who changed a mode (closes #176) 2026-10-21 06:31:30 +02:00

Merged #177 Send an IRC listener user their own TOPIC, MODE and KICK once (closes #143) 2026-10-21 06:14:42 +02:00

Merged #175 Bring the web client in line with the current API (closes #145) 2026-10-21 05:48:34 +02:00

Merged #174 Register the broker wait before the first poll (closes #157) 2026-10-21 05:31:25 +02:00

Merged #173 Refuse passwords over 72 bytes and confirm only stored ones (closes #144) 2026-10-21 05:02:01 +02:00

Merged #171 Spend a hashcash stamp only when the request succeeds (closes #158) 2026-10-21 04:02:07 +02:00

Merged #172 Resolve IRC client hostnames off the accept loop (closes #156) 2026-10-21 03:31:28 +02:00

Merged #170 Decode the API's actual fields in neoirc-cli (closes #146) 2026-10-21 02:48:32 +02:00

Merged #168 Broadcast a session's QUIT once when its clients leave together (closes #154) 2026-10-21 01:48:27 +02:00

Merged #169 Fail startup when the HTTP listener cannot bind (closes #167) 2026-10-21 01:14:25 +02:00

Merged #166 Wait for IRC listener cleanup and HTTP shutdown on stop (closes #159) 2026-10-20 23:48:31 +02:00

Merged #164 Run JOIN, PART and KICK as one transaction each (closes #153) 2026-10-20 22:48:26 +02:00

Merged #165 Serve the index page for an empty URL path instead of panicking (closes #149) 2026-10-20 21:31:26 +02:00

Merged #162 PING a quiet IRC listener client before closing it (closes #155) 2026-10-20 20:53:01 +02:00

Merged #163 Spend a channel hashcash stamp in one statement (closes #150) 2026-10-20 20:31:27 +02:00

Merged #161 Bind history to the recipient session and channel, not the name (closes #148) 2026-10-20 19:48:36 +02:00

Merged #160 Remove the relay's broker wait channel after each tick (closes #151) 2026-10-20 18:02:04 +02:00

Merged #152 Check nicks on the IRC listener with the HTTP API's rule (closes #142) 2026-10-20 17:31:32 +02:00

Merged #141 Compare nicks by exact case everywhere (closes #128) 2026-10-20 16:31:29 +02:00

Merged #139 Enforce channel keys, invites, +s and +H on the IRC listener (closes #122) 2026-10-20 16:02:14 +02:00

Merged #135 Fix IRC listener relay of bodies and modes, and JOIN names (closes #127) 2026-10-20 13:48:17 +02:00

Merged #138 Give each handler and service test its own database (closes #131) 2026-10-20 13:04:42 +02:00

Merged #137 Let an empty IRC_LISTEN_ADDR disable the IRC listener (closes #124) 2026-10-20 12:35:20 +02:00

Merged #136 Page history by message id (closes #125) 2026-10-20 11:58:40 +02:00

Merged #134 Run SQLite in WAL mode with a busy timeout the driver reads (closes #123) 2026-10-20 11:30:10 +02:00

Merged #133 Merge main into next (closes #132) 2026-10-20 11:10:40 +02:00

Merged #130 Give each IRC listener test its own database (closes #129) 2026-10-08 12:01:50 +02:00

Merged #120 Bring README.md in line with the modes and the schema (closes #119) 2026-10-08 11:30:49 +02:00

Merged #126 Keep active IRC listener users from expiring (closes #121) 2026-10-08 10:47:56 +02:00

Merged #96 Add the tier 3 utility IRC commands (closes #87) 2026-10-08 07:31:38 +02:00

Merged #118 Build the web front end with yarn (closes #117) 2026-10-07 02:01:43 +02:00

Merged #116 Make the internal/handlers tests fast (closes #113) 2026-10-07 00:13:42 +02:00

Merged #115 Re-vendor the canonical files from sneak/prompts at dd4027b (closes #112) 2026-10-06 21:01:47 +02:00

Merged #114 Run make test once so a failing test fails the build (closes #101) 2026-10-06 08:31:03 +02:00

Merged #110 Fix the data races and the test timeout that fail make test, on main (closes #104) 2026-10-02 10:13:29 +02:00

Merged #108 Remove BUILDARCH and stamp the git version in Docker builds (closes #107, closes #109) 2026-10-02 04:13:07 +02:00

Merged #105 Fix the data races that fail make test (closes #104) 2026-10-02 02:49:53 +02:00

Merged #99 Change module path to sneak.berlin/go/neoirc 2026-04-01 23:05:41 +02:00

Merged #100 test: add comprehensive IRC integration test with two clients 2026-04-01 12:47:50 +02:00

Merged #94 feat: add traditional IRC wire protocol listener (closes #89) 2026-04-01 05:00:04 +02:00

Merged #95 feat: move schema_migrations into 000_bootstrap.sql 2026-03-30 21:35:53 +02:00

Merged #92 feat: implement Tier 2 channel modes (+b/+i/+s/+k/+l) 2026-03-25 22:38:46 +01:00

Merged #93 fix: use in-memory SQLite for handler tests to fix CI timeout 2026-03-25 20:11:34 +01:00

Merged #88 feat: implement Tier 1 channel modes (+o/+v/+m/+t), KICK, NOTICE 2026-03-25 02:08:29 +01:00

Merged #78 feat: add per-IP rate limiting to login endpoint 2026-03-22 00:39:38 +01:00

Merged #84 refactor: replace Bearer token auth with HttpOnly cookies 2026-03-20 23:54:24 +01:00

Merged #82 feat: add username/hostname support with IRC hostmask format 2026-03-20 06:53:36 +01:00

Merged #79 feat: per-channel hashcash proof-of-work for PRIVMSG anti-spam 2026-03-18 03:40:34 +01:00

Merged #76 docs: update README schema section to match sessions/clients tables 2026-03-18 03:38:37 +01:00

Merged #75 security: enforce channel membership check in handleTopic 2026-03-17 12:47:00 +01:00

Merged #77 docs: document register/login and dual authentication model 2026-03-17 12:44:48 +01:00

Merged #80 feat: add runtime statistics to healthcheck endpoint 2026-03-17 12:43:40 +01:00

Merged #72 feat: implement Tier 1 IRC numerics 2026-03-13 00:41:26 +01:00

Merged #63 feat: implement hashcash proof-of-work for session creation 2026-03-13 00:38:41 +01:00

Merged #73 [deps] Migrate from chi v1 to chi/v5 2026-03-13 00:32:10 +01:00

Merged #71 Complete IRC numerics module and move to pkg/irc/ (refs #52) 2026-03-10 18:41:27 +01:00

Merged #67 Implement queue pruning and message rotation (closes #40) 2026-03-10 15:37:34 +01:00

Merged #69 feat: store auth tokens as SHA-256 hashes instead of plaintext 2026-03-10 12:44:29 +01:00

Merged #66 Replace string-matching error detection with typed SQLite errors (closes #39) 2026-03-10 11:54:27 +01:00

Merged #68 Remove dead Auth() middleware method 2026-03-10 11:41:43 +01:00

Merged #64 feat: add Content-Security-Policy middleware 2026-03-10 11:20:15 +01:00

Merged #61 fix: replay channel state on SPA reconnect 2026-03-10 11:08:13 +01:00

Merged #62 fix: add version field to /api/v1/server response 2026-03-10 11:05:11 +01:00

Merged #59 feat: implement IRC numerics batch 2 — connection registration, channel ops, user queries 2026-03-10 00:53:47 +01:00

Merged #58 fix: IRC SPA cleanup — /motd, /query, Firefox / key, default MOTD 2026-03-09 23:00:34 +01:00

Merged #56 refactor: replace HTTP error codes with IRC numeric replies 2026-03-09 22:21:31 +01:00

Merged #53 Redesign SPA to look like a proper IRC client (closes #50) 2026-03-09 22:12:34 +01:00

Merged #49 Fix SPA: bundle preact instead of leaving as external require (closes #48) 2026-03-07 14:53:14 +01:00

Merged #47 Rename app from chat to neoirc, binary to neoircd (closes #46) 2026-03-07 14:43:58 +01:00

Merged #45 fix: change appname to neoirc, default DB to /var/lib/neoirc/state.db 2026-03-06 12:40:29 +01:00

Merged #32 feat: split Dockerfile into dedicated lint stage for faster CI 2026-03-02 21:05:09 +01:00

Merged #24 feat: logout, users/me, user count, session timeout 2026-03-01 15:47:03 +01:00

Merged #23 feat: password-based registration and login (closes #1) 2026-02-28 19:57:41 +01:00

Merged #22 feat: MVP two-user chat via embedded SPA (closes #9) 2026-02-27 13:51:21 +01:00

Merged #21 dockerfile: use CGO_ENABLED=0 for binary builds (closes #13) 2026-02-27 08:47:11 +01:00

Merged #10 MVP 1.0: IRC-over-HTTP chat server 2026-02-27 07:21:35 +01:00

Merged #18 fix: repo standards audit — fix all divergences (closes #17) 2026-02-27 05:10:00 +01:00

Merged #8 Add embedded web chat client (closes #7) 2026-02-11 03:02:42 +01:00

Merged #4 Add complete database schema and ORM models 2026-02-11 03:02:34 +01:00

Merged #6 Fix code review feedback (closes #5) 2026-02-10 18:18:06 +01:00

Merged #3 Fix all lint issues, add AGENTS.md with workflow rules 2026-02-09 21:33:34 +01:00

1 Pull request proposed by 1 user

Proposed #191 next → main: client fixes 2026-10-27 02:28:21 +01:00

122 Issues closed from 2 users

Closed #254 Remove the unused GetSessionChannelIDs from the db package 2026-11-03 12:38:43 +01:00

Closed #256 make test takes about 85 seconds on the build host, over the 60-second cap 2026-11-03 12:20:50 +01:00

Closed #248 Move the test-only helpers out of the shipped db package 2026-11-03 11:59:18 +01:00

Closed #250 MAX_MESSAGE_SIZE bounds only the first JSON value read, not the request body 2026-11-03 09:20:43 +01:00

Closed #249 WHO over the HTTP API: RPL_ENDOFWHO for an unknown channel carries the name as sent, not with the # added 2026-11-03 08:38:46 +01:00

Closed #190 Rewrite README.md and the other prose documents sentence by sentence, on Fable 2026-11-03 08:20:56 +01:00

Closed #233 neoirc-cli reads square brackets in nicks and messages as colour tags 2026-11-02 08:30:57 +01:00

Closed #245 The HTTP API relays a PRIVMSG or NOTICE body that is not an array of strings 2026-11-02 07:39:19 +01:00

Closed #235 neoirc-cli shows connected in the status bar after /query while not connected 2026-11-02 07:10:08 +01:00

Closed #218 The JSON files in schema/ disagree with the server 2026-11-02 06:24:58 +01:00

Closed #232 neoirc-cli does not show new lines in other windows until the status bar is next redrawn 2026-11-02 06:03:54 +01:00

Closed #228 neoirc-cli keeps the old poll loop running after a second /connect 2026-11-02 05:38:09 +01:00

Closed #217 The IRC listener's PASS notice promises a reconnect the server does not support 2026-11-02 05:27:28 +01:00

Closed #216 The IRC listener tells peers Connection closed instead of the user's QUIT reason 2026-11-02 05:02:34 +01:00

Closed #238 The 004 reply leaves out channel modes the server accepts 2026-11-02 04:48:19 +01:00

Closed #220 The 004 reply sends an empty user-modes parameter 2026-11-02 04:17:10 +01:00

Closed #225 neoirc-cli shows connected in the status bar after /window while not connected 2026-11-02 03:13:10 +01:00

Closed #229 neoirc-cli never shows the connection state in its status bar 2026-11-02 02:53:12 +01:00

Closed #226 neoirc-cli hangs at startup before it shows its screen 2026-11-02 02:05:25 +01:00

Closed #223 neoirc-cli stops responding when a key or a typed line updates the screen 2026-11-02 01:08:43 +01:00

Closed #221 neoirc-cli keeps sending to the old window after Alt and a digit 2026-10-28 01:30:35 +01:00

Closed #219 A setting that cannot be parsed silently falls back to zero or false 2026-10-28 00:47:55 +01:00

Closed #211 internal/server tests can fail at random when another process takes the port they picked 2026-10-27 13:34:47 +01:00

Closed #209 Test databases lose all their data when a cancelled query makes the pool replace its connection 2026-10-27 12:26:49 +01:00

Closed #207 After a cancelled query, the database runs without foreign keys 2026-10-27 11:14:02 +01:00

Closed #205 TestIntegrationKill sometimes times out waiting for the killed user's QUIT 2026-10-27 10:20:10 +01:00

Closed #194 internal/handlers tests take about 26 seconds, over the 20-second target 2026-10-27 08:28:30 +01:00

Closed #202 The web client can open the wrong tab after /msg, from an out-of-date tab list 2026-10-27 07:07:40 +01:00

Closed #200 In the web client, a user with the nick Server shares the Server tab 2026-10-27 06:29:28 +01:00

Closed #195 The web client leaves the channel the user is reading when another tab closes, and a kicked user sees no notice 2026-10-27 05:52:49 +01:00

Closed #197 Both clients open a channel the server refused to join 2026-10-27 05:09:01 +01:00

Closed #193 The web client loses its active tab when the JOIN event arrives before the join request returns 2026-10-27 04:30:42 +01:00

Closed #185 The web client keeps a channel's tab after its session leaves the channel from another client or is kicked 2026-10-27 03:11:34 +01:00

Closed #186 neoirc-cli hides what its session does from other clients and shows its own join twice 2026-10-27 02:23:35 +01:00

Closed #184 An IRC listener connection keeps its old nick after its session's nick is changed from another client 2026-10-21 17:56:03 +02:00

Closed #179 An IRC listener connection never sees what its own session sent from another client 2026-10-21 15:23:15 +02:00

Closed #181 TestIdleCleanupKeepsActiveUser fails on some runs and turns next red 2026-10-21 13:06:03 +02:00

Closed #147 INVITE reaches an IRC listener user as a server NOTICE without the inviter, not as an INVITE line 2026-10-21 07:31:39 +02:00

Closed #176 The web client wipes its saved channels on every load and shows a mode change without who made it 2026-10-21 06:31:31 +02:00

Closed #143 An IRC listener user gets their own TOPIC, MODE and KICK twice 2026-10-21 06:14:43 +02:00

Closed #145 The web client targets an older API: /mode only queries, numerics and member prefixes are not parsed, a 401 is retried forever 2026-10-21 05:48:34 +02:00

Closed #157 A message that arrives between the first poll and the broker wait is delivered only after the full long-poll timeout 2026-10-21 05:31:25 +02:00

Closed #144 PASS over 72 bytes gets HTTP 500, and the IRC listener confirms a password it did not store 2026-10-21 05:02:01 +02:00

Closed #158 A hashcash stamp is spent before the request can still fail, so a refused request costs the client a new proof 2026-10-21 04:02:07 +02:00

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 2026-10-21 03:31:28 +02:00

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 2026-10-21 02:48:32 +02:00

Closed #154 Two clients of one session leaving at once broadcast its QUIT twice 2026-10-21 01:48:27 +02:00

Closed #167 A failed HTTP listen is only logged, and the server runs on without its HTTP API 2026-10-21 01:14:25 +02:00

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 2026-10-20 23:48:31 +02:00

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 2026-10-20 22:48:26 +02:00

Closed #149 A request with an empty URL path panics in the SPA handler 2026-10-20 21:31:26 +02:00

Closed #155 The IRC listener closes a connection that sends nothing for five minutes and never sends a PING of its own 2026-10-20 20:53:01 +02:00

Closed #150 A channel hashcash stamp can be spent more than once: the spent check and the record are two statements 2026-10-20 20:31:28 +02:00

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 2026-10-20 19:48:36 +02:00

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 2026-10-20 18:02:05 +02:00

Closed #142 The IRC listener accepts any nick: a nick with spaces forges lines other IRC clients read as another user's 2026-10-20 17:31:32 +02:00

Closed #128 Nicks are unique by exact case but compared ignoring case 2026-10-20 16:31:30 +02:00

Closed #122 The IRC listener ignores channel keys, invites, +s and +H 2026-10-20 16:02:15 +02:00

Closed #127 The IRC listener drops lines and mode parameters, and accepts any channel name 2026-10-20 13:48:18 +02:00

Closed #131 Handler and service tests can reuse a finished test's database 2026-10-20 13:04:43 +02:00

Closed #124 An empty IRC_LISTEN_ADDR does not turn the IRC listener off 2026-10-20 12:35:21 +02:00

Closed #125 History paging takes an id no response gives the client 2026-10-20 11:58:41 +02:00

Closed #123 SQLite never runs in WAL mode: the database URL uses a parameter the driver ignores 2026-10-20 11:30:11 +02:00

Closed #132 next does not merge into main: both carry the data race fix 2026-10-20 11:10:41 +02:00

Closed #129 IRC listener tests fail when run again: test databases are shared between runs 2026-10-08 12:01:50 +02:00

Closed #119 README.md describes modes and the schema as they were, not as they are 2026-10-08 11:30:49 +02:00

Closed #121 IRC listener users are removed by the idle cleanup while still active 2026-10-08 10:47:57 +02:00

Closed #87 Tier 3: Utility IRC commands (USERHOST, VERSION, ADMIN, INFO, TIME, KILL, WALLOPS) 2026-10-08 07:31:39 +02:00

Closed #117 The web build uses npm, but REPO_POLICIES.md says yarn 2026-10-07 02:01:44 +02:00

Closed #113 internal/handlers tests make make test miss its 20-second target 2026-10-07 00:13:42 +02:00

Closed #112 Re-vendor the canonical files from sneak/prompts at dd4027b 2026-10-06 21:01:47 +02:00

Closed #101 make test retry masks real data races and timeouts 2026-10-06 08:31:04 +02:00

Closed #107 Remove BUILDARCH from the Makefile 2026-10-02 04:13:07 +02:00

Closed #109 docker build . stamps dev, not the git tag or short commit 2026-10-02 04:13:07 +02:00

Closed #104 Make prod green: the check fails on the commit main, next and prod share 2026-10-02 02:49:54 +02:00

Closed #106 Run every build, test and lint step in the Dockerfiles at nice -n 19 2026-09-29 13:12:22 +02:00

Closed #102 internal/db: SetSessionWallops is dead production code after the #96 B2 refactor 2026-09-05 11:32:53 +02:00

Closed #103 internal/ircserver: Disconnect doc comment understates the worst-case socket close delay 2026-09-05 11:32:53 +02:00

Closed #98 change module path 2026-04-01 23:05:42 +02:00

Closed #97 integration test: needs a testing client program 2026-04-01 22:38:43 +02:00

Closed #89 for 1.0: need a backward compat 6667 listener that speaks real irc 2026-04-01 05:00:04 +02:00

Closed #91 Move schema_migrations table creation into 000.sql with INTEGER version column 2026-03-30 21:35:53 +02:00

Closed #86 Tier 2: Ban system, invite-only, secret, channel key, user limit (+b/+i/+s/+k/+l) 2026-03-25 22:38:46 +01:00

Closed #90 critical: main branch build broken 2026-03-25 20:11:35 +01:00

Closed #85 Tier 1: Core IRC channel modes and commands (+o/+v/+m/+t, KICK, NOTICE) 2026-03-25 02:08:29 +01:00

Closed #35 [security] Add rate limiting to session creation and login endpoints 2026-03-22 00:39:38 +01:00

Closed #83 auth system? 2026-03-20 06:54:06 +01:00

Closed #81 add username/hostname support 2026-03-20 06:53:36 +01:00

Closed #12 Per-channel hashcash requirement for PRIVMSG (anti-spam) 2026-03-18 03:40:34 +01:00

Closed #37 [docs] Update README schema section to match sessions/clients tables 2026-03-18 03:38:37 +01:00

Closed #33 [security] handleTopic: enforce channel membership check 2026-03-17 12:47:00 +01:00

Closed #36 [docs] Update README to document register/login and account system 2026-03-17 12:44:49 +01:00

Closed #74 [feature] Expand healthcheck output with runtime statistics 2026-03-17 12:43:40 +01:00

Closed #52 please identify a list of all IRC numeric c2s and s2c codes that exist in common/standard irc usage, and identify which we have implemented and which we have not 2026-03-14 07:38:54 +01:00

Closed #70 Implement Tier 1 IRC numerics: AWAY system, WHOISIDLE, TOPICWHOTIME, missing error numerics 2026-03-13 00:41:26 +01:00

Closed #11 Implement hashcash proof-of-work for session creation 2026-03-13 00:38:41 +01:00

Closed #42 [deps] Evaluate migration from chi v1 to chi/v5 2026-03-13 00:32:12 +01:00

Closed #40 [feature] Implement queue pruning and message rotation 2026-03-10 15:37:34 +01:00

Closed #34 [security] Store auth tokens as SHA-256 hashes instead of plaintext 2026-03-10 12:44:30 +01:00

Closed #39 [cleanup] Replace string-matching error detection with typed errors 2026-03-10 11:54:27 +01:00

Closed #38 [cleanup] Remove dead Auth() middleware method 2026-03-10 11:41:43 +01:00

Closed #41 [security] Add CSP headers for embedded web SPA 2026-03-10 11:20:16 +01:00

Closed #60 [bug] SPA reconnect does not restore channel tabs 2026-03-10 11:08:13 +01:00

Closed #43 [bug] Add version field to /api/v1/server response 2026-03-10 11:05:11 +01:00

Closed #57 irc client style needs cleanup in SPA 2026-03-09 23:00:34 +01:00

Closed #54 http response codes should not be used in response to irc commands 2026-03-09 22:21:32 +01:00

Closed #50 irc client SPA needs to look a lot more like an irc client 2026-03-09 22:12:34 +01:00

Closed #48 spa does not work 2026-03-07 14:53:14 +01:00

Closed #46 rename app: chat -> neoirc 2026-03-07 14:43:58 +01:00

Closed #44 default db location is stupid 2026-03-06 12:40:29 +01:00

Closed #27 Split Dockerfile: pre-built golangci-lint stage for faster CI 2026-03-02 11:24:17 +01:00

Closed #26 µPaaS deployment setup 2026-03-02 09:29:19 +01:00

Closed #29 Split Dockerfile: pre-built golangci-lint stage for faster CI 2026-03-02 09:29:18 +01:00

Closed #28 Split Dockerfile: pre-built golangci-lint stage for faster CI 2026-03-02 09:29:17 +01:00

Closed #30 Split Dockerfile: pre-built golangci-lint stage for faster CI 2026-03-02 08:51:54 +01:00

Closed #1 1.0.0 — MVP: Two users chatting on one server 2026-02-28 19:57:41 +01:00

Closed #9 MVP: Two users chatting via embedded SPA 2026-02-27 13:51:21 +01:00

Closed #13 CRITICAL: main branch build failure 2026-02-27 07:22:08 +01:00

Closed #16 Add branch protection to main branch 2026-02-27 05:10:56 +01:00

Closed #17 Repo standards audit: divergences from EXISTING_REPO_CHECKLIST 2026-02-27 05:10:00 +01:00

Closed #7 Add embedded web chat client (SPA) 2026-02-11 03:02:42 +01:00

Closed #5 Fix code review feedback from PR #4 2026-02-10 18:18:06 +01:00

125 Issues created by 2 users

Opened #1 1.0.0 — MVP: Two users chatting on one server 2026-02-09 21:28:24 +01:00

Opened #2 1.1.0 — Federation: Two users chatting across linked servers 2026-02-09 21:28:56 +01:00

Opened #5 Fix code review feedback from PR #4 2026-02-10 06:15:55 +01:00

Opened #7 Add embedded web chat client (SPA) 2026-02-10 18:22:47 +01:00

Opened #9 MVP: Two users chatting via embedded SPA 2026-02-11 02:44:03 +01:00

Opened #11 Implement hashcash proof-of-work for session creation 2026-02-11 03:06:41 +01:00

Opened #12 Per-channel hashcash requirement for PRIVMSG (anti-spam) 2026-02-11 03:14:11 +01:00

Opened #13 CRITICAL: main branch build failure 2026-02-20 11:23:37 +01:00

Opened #16 Add branch protection to main branch 2026-02-20 11:59:58 +01:00

Opened #17 Repo standards audit: divergences from EXISTING_REPO_CHECKLIST 2026-02-26 15:08:01 +01:00

Opened #25 final 1.0rc1 review/audit/test/qa 2026-03-01 15:49:16 +01:00

Opened #26 µPaaS deployment setup 2026-03-02 08:47:36 +01:00

Opened #27 Split Dockerfile: pre-built golangci-lint stage for faster CI 2026-03-02 08:50:54 +01:00

Opened #28 Split Dockerfile: pre-built golangci-lint stage for faster CI 2026-03-02 08:51:05 +01:00

Opened #29 Split Dockerfile: pre-built golangci-lint stage for faster CI 2026-03-02 08:51:19 +01:00

Opened #30 Split Dockerfile: pre-built golangci-lint stage for faster CI 2026-03-02 08:51:34 +01:00

Opened #33 [security] handleTopic: enforce channel membership check 2026-03-04 12:19:59 +01:00

Opened #34 [security] Store auth tokens as SHA-256 hashes instead of plaintext 2026-03-04 12:20:00 +01:00

Opened #35 [security] Add rate limiting to session creation and login endpoints 2026-03-04 12:20:00 +01:00

Opened #36 [docs] Update README to document register/login and account system 2026-03-04 12:20:01 +01:00

Opened #37 [docs] Update README schema section to match sessions/clients tables 2026-03-04 12:20:02 +01:00

Opened #38 [cleanup] Remove dead Auth() middleware method 2026-03-04 12:20:02 +01:00

Opened #39 [cleanup] Replace string-matching error detection with typed errors 2026-03-04 12:20:03 +01:00

Opened #40 [feature] Implement queue pruning and message rotation 2026-03-04 12:20:04 +01:00

Opened #41 [security] Add CSP headers for embedded web SPA 2026-03-04 12:20:04 +01:00

Opened #42 [deps] Evaluate migration from chi v1 to chi/v5 2026-03-04 12:20:05 +01:00

Opened #43 [bug] Add version field to /api/v1/server response 2026-03-04 12:20:06 +01:00

Opened #44 default db location is stupid 2026-03-06 12:26:30 +01:00

Opened #46 rename app: chat -> neoirc 2026-03-06 12:38:04 +01:00

Opened #48 spa does not work 2026-03-07 14:44:24 +01:00

Opened #50 irc client SPA needs to look a lot more like an irc client 2026-03-07 14:58:27 +01:00

Opened #52 please identify a list of all IRC numeric c2s and s2c codes that exist in common/standard irc usage, and identify which we have implemented and which we have not 2026-03-07 15:18:37 +01:00

Opened #54 http response codes should not be used in response to irc commands 2026-03-08 10:07:20 +01:00

Opened #57 irc client style needs cleanup in SPA 2026-03-09 22:40:21 +01:00

Opened #60 [bug] SPA reconnect does not restore channel tabs 2026-03-09 23:04:04 +01:00

Opened #70 Implement Tier 1 IRC numerics: AWAY system, WHOISIDLE, TOPICWHOTIME, missing error numerics 2026-03-10 18:04:18 +01:00

Opened #74 [feature] Expand healthcheck output with runtime statistics 2026-03-17 10:01:28 +01:00

Opened #81 add username/hostname support 2026-03-17 13:01:47 +01:00

Opened #83 auth system? 2026-03-18 03:41:48 +01:00

Opened #85 Tier 1: Core IRC channel modes and commands (+o/+v/+m/+t, KICK, NOTICE) 2026-03-22 11:04:34 +01:00

Opened #86 Tier 2: Ban system, invite-only, secret, channel key, user limit (+b/+i/+s/+k/+l) 2026-03-22 11:04:58 +01:00

Opened #87 Tier 3: Utility IRC commands (USERHOST, VERSION, ADMIN, INFO, TIME, KILL, WALLOPS) 2026-03-22 11:05:13 +01:00

Opened #89 for 1.0: need a backward compat 6667 listener that speaks real irc 2026-03-25 02:10:08 +01:00

Opened #90 critical: main branch build broken 2026-03-25 02:12:50 +01:00

Opened #91 Move schema_migrations table creation into 000.sql with INTEGER version column 2026-03-25 02:22:02 +01:00

Opened #97 integration test: needs a testing client program 2026-04-01 04:58:48 +02:00

Opened #98 change module path 2026-04-01 05:01:39 +02:00

Opened #101 make test retry masks real data races and timeouts 2026-08-10 15:46:24 +02:00

Opened #102 internal/db: SetSessionWallops is dead production code after the #96 B2 refactor 2026-09-04 08:49:23 +02:00

Opened #103 internal/ircserver: Disconnect doc comment understates the worst-case socket close delay 2026-09-04 08:49:24 +02:00

Opened #104 Make prod green: the check fails on the commit main, next and prod share 2026-09-29 12:33:16 +02:00

Opened #106 Run every build, test and lint step in the Dockerfiles at nice -n 19 2026-09-29 13:02:25 +02:00

Opened #107 Remove BUILDARCH from the Makefile 2026-10-02 00:47:26 +02:00

Opened #109 docker build . stamps dev, not the git tag or short commit 2026-10-02 02:21:44 +02:00

Opened #112 Re-vendor the canonical files from sneak/prompts at dd4027b 2026-10-06 01:29:56 +02:00

Opened #113 internal/handlers tests make make test miss its 20-second target 2026-10-06 01:32:43 +02:00

Opened #117 The web build uses npm, but REPO_POLICIES.md says yarn 2026-10-07 00:14:13 +02:00

Opened #119 README.md describes modes and the schema as they were, not as they are 2026-10-08 07:33:11 +02:00

Opened #121 IRC listener users are removed by the idle cleanup while still active 2026-10-08 08:48:56 +02:00

Opened #122 The IRC listener ignores channel keys, invites, +s and +H 2026-10-08 08:48:57 +02:00

Opened #123 SQLite never runs in WAL mode: the database URL uses a parameter the driver ignores 2026-10-08 08:48:57 +02:00

Opened #124 An empty IRC_LISTEN_ADDR does not turn the IRC listener off 2026-10-08 08:48:58 +02:00

Opened #125 History paging takes an id no response gives the client 2026-10-08 08:48:59 +02:00

Opened #127 The IRC listener drops lines and mode parameters, and accepts any channel name 2026-10-08 10:31:19 +02:00

Opened #128 Nicks are unique by exact case but compared ignoring case 2026-10-08 10:31:19 +02:00

Opened #129 IRC listener tests fail when run again: test databases are shared between runs 2026-10-08 10:48:16 +02:00

Opened #131 Handler and service tests can reuse a finished test's database 2026-10-08 12:02:01 +02:00

Opened #132 next does not merge into main: both carry the data race fix 2026-10-20 10:40:58 +02:00

Opened #140 1.0: what stands between next and a release candidate 2026-10-20 14:14:26 +02:00

Opened #142 The IRC listener accepts any nick: a nick with spaces forges lines other IRC clients read as another user's 2026-10-20 16:51:32 +02:00

Opened #143 An IRC listener user gets their own TOPIC, MODE and KICK twice 2026-10-20 16:51:33 +02:00

Opened #144 PASS over 72 bytes gets HTTP 500, and the IRC listener confirms a password it did not store 2026-10-20 16:51:33 +02:00

Opened #145 The web client targets an older API: /mode only queries, numerics and member prefixes are not parsed, a 401 is retried forever 2026-10-20 16:51:34 +02:00

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 2026-10-20 16:51:34 +02:00

Opened #147 INVITE reaches an IRC listener user as a server NOTICE without the inviter, not as an INVITE line 2026-10-20 16:51:35 +02:00

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 2026-10-20 17:04:05 +02:00

Opened #149 A request with an empty URL path panics in the SPA handler 2026-10-20 17:04:05 +02:00

Opened #150 A channel hashcash stamp can be spent more than once: the spent check and the record are two statements 2026-10-20 17:04:23 +02:00

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 2026-10-20 17:10:45 +02:00

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 2026-10-20 17:14:50 +02:00

Opened #154 Two clients of one session leaving at once broadcast its QUIT twice 2026-10-20 17:14:51 +02:00

Opened #155 The IRC listener closes a connection that sends nothing for five minutes and never sends a PING of its own 2026-10-20 17:14:51 +02:00

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 2026-10-20 17:14:52 +02:00

Opened #157 A message that arrives between the first poll and the broker wait is delivered only after the full long-poll timeout 2026-10-20 17:14:52 +02:00

Opened #158 A hashcash stamp is spent before the request can still fail, so a refused request costs the client a new proof 2026-10-20 17:14:53 +02:00

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 2026-10-20 17:15:26 +02:00

Opened #167 A failed HTTP listen is only logged, and the server runs on without its HTTP API 2026-10-20 21:49:15 +02:00

Opened #176 The web client wipes its saved channels on every load and shows a mode change without who made it 2026-10-21 05:32:16 +02:00

Opened #179 An IRC listener connection never sees what its own session sent from another client 2026-10-21 06:04:28 +02:00

Opened #181 TestIdleCleanupKeepsActiveUser fails on some runs and turns next red 2026-10-21 06:34:32 +02:00

Opened #184 An IRC listener connection keeps its old nick after its session's nick is changed from another client 2026-10-21 13:41:39 +02:00

Opened #185 The web client keeps a channel's tab after its session leaves the channel from another client or is kicked 2026-10-21 13:41:43 +02:00

Opened #186 neoirc-cli hides what its session does from other clients and shows its own join twice 2026-10-21 14:23:27 +02:00

Opened #190 Rewrite README.md and the other prose documents sentence by sentence, on Fable 2026-10-22 20:16:30 +02:00

Opened #193 The web client loses its active tab when the JOIN event arrives before the join request returns 2026-10-27 02:59:44 +01:00

Opened #194 internal/handlers tests take about 26 seconds, over the 20-second target 2026-10-27 03:00:10 +01:00

Opened #195 The web client leaves the channel the user is reading when another tab closes, and a kicked user sees no notice 2026-10-27 03:11:59 +01:00

Opened #197 Both clients open a channel the server refused to join 2026-10-27 03:53:37 +01:00

Opened #200 In the web client, a user with the nick Server shares the Server tab 2026-10-27 05:38:57 +01:00

Opened #202 The web client can open the wrong tab after /msg, from an out-of-date tab list 2026-10-27 06:20:55 +01:00

Opened #205 TestIntegrationKill sometimes times out waiting for the killed user's QUIT 2026-10-27 08:28:46 +01:00

Opened #207 After a cancelled query, the database runs without foreign keys 2026-10-27 09:20:45 +01:00

Opened #209 Test databases lose all their data when a cancelled query makes the pool replace its connection 2026-10-27 10:38:59 +01:00

Opened #211 internal/server tests can fail at random when another process takes the port they picked 2026-10-27 11:39:04 +01:00

Opened #216 The IRC listener tells peers Connection closed instead of the user's QUIT reason 2026-10-27 14:21:59 +01:00

Opened #217 The IRC listener's PASS notice promises a reconnect the server does not support 2026-10-27 14:21:59 +01:00

Opened #218 The JSON files in schema/ disagree with the server 2026-10-27 14:21:59 +01:00

Opened #219 A setting that cannot be parsed silently falls back to zero or false 2026-10-27 16:39:14 +01:00

Opened #220 The 004 reply sends an empty user-modes parameter 2026-10-27 16:39:15 +01:00

Opened #221 neoirc-cli keeps sending to the old window after Alt and a digit 2026-10-27 16:39:15 +01:00

Opened #223 neoirc-cli stops responding when a key or a typed line updates the screen 2026-10-28 00:54:49 +01:00

Opened #225 neoirc-cli shows connected in the status bar after /window while not connected 2026-10-28 01:30:55 +01:00

Opened #226 neoirc-cli hangs at startup before it shows its screen 2026-11-02 00:23:35 +01:00

Opened #228 neoirc-cli keeps the old poll loop running after a second /connect 2026-11-02 01:09:31 +01:00

Opened #229 neoirc-cli never shows the connection state in its status bar 2026-11-02 01:20:35 +01:00

Opened #232 neoirc-cli does not show new lines in other windows until the status bar is next redrawn 2026-11-02 02:19:59 +01:00

Opened #233 neoirc-cli reads square brackets in nicks and messages as colour tags 2026-11-02 02:53:40 +01:00

Opened #235 neoirc-cli shows connected in the status bar after /query while not connected 2026-11-02 03:05:34 +01:00

Opened #238 The 004 reply leaves out channel modes the server accepts 2026-11-02 03:49:40 +01:00

Opened #245 The HTTP API relays a PRIVMSG or NOTICE body that is not an array of strings 2026-11-02 06:26:00 +01:00

Opened #248 Move the test-only helpers out of the shipped db package 2026-11-03 07:49:30 +01:00

Opened #249 WHO over the HTTP API: RPL_ENDOFWHO for an unknown channel carries the name as sent, not with the # added 2026-11-03 07:52:05 +01:00

Opened #250 MAX_MESSAGE_SIZE bounds only the first JSON value read, not the request body 2026-11-03 07:52:13 +01:00

Opened #254 Remove the unused GetSessionChannelIDs from the db package 2026-11-03 09:42:24 +01:00

Opened #256 make test takes about 85 seconds on the build host, over the 60-second cap 2026-11-03 11:21:51 +01:00