Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
50 most recent check-ins
|
2026-08-26
| ||
| 08:55 |
bridge: coalesce consecutive channel messages (Heisenbridge EventQueue)
Adds eventqueue.CoalescingQueue which groups consecutive events by key and flushes them as one batched message within a 1s window. ChannelRoom uses it for IRC->Matrix relay (grouping by puppet), mirroring Heisenbridge's message coalescing. Adds tests. leaf check-in: d9c163eecb user: bapt tags: trunk | |
| 08:52 |
bridge: join puppets via appservice m.room.member state event
Match Heisenbridge's mechanism for adding puppets to rooms: instead of POST /join?user_id= (which fails on invite/restricted rooms), send the m.room.member state event as the appservice, which has the privilege to set membership for its namespace users. Also derive the puppet prefix from the registration namespace regex (config.PuppetPrefix) instead of hardcoding. check-in: b2bc486906 user: bapt tags: trunk | |
|
2026-08-25
| ||
| 16:22 |
bridge: status command lists each user's IRC channels
cmdStatus now shows every network connection (network, user, connected state) and the channels bridged for each user. check-in: d7f2ce47ee user: bapt tags: trunk | |
| 16:17 |
bridge: Matrix appservice WebSocket transport (MSC2409)
Adds internal/appsws: a WebSocket client that connects to the homeserver appservice endpoint, performs the AS_CONNECTED handshake, and forwards AS_TRANSACTION events to the bridge while ACKing them. Enabled with --websocket. Adds golang.org/x/net dependency and Bridge.HandleRawEvent. check-in: abab7abb0e user: bapt tags: trunk | |
| 16:14 |
bridge: draft/relaymsg tag and pastebin (media file)
Relay Matrix->IRC messages with the draft/relaymsg tag when use_relaymsg is set. When use_pastebin is set and a message is truncated, upload it to the homeserver media and send an m.file instead of the clipped text. check-in: 66d5e53e13 user: bapt tags: trunk | |
| 16:01 |
bridge: add displayname/disambiguation/zwsp config fields
Adds use_displaynames, use_disambiguation and use_zwsp to the Config for Heisenbridge config compatibility. check-in: d6c324ed29 user: bapt tags: trunk | |
| 15:59 |
bridge: plumbed room ban bridging (Matrix ban -> IRC KICK)
A ban in a plumbed Matrix room kicks the corresponding IRC puppet nick. check-in: c0dc49dbeb user: bapt tags: trunk | |
| 15:58 |
irc: basic SASL PLAIN authentication
irc.Client sends CAP REQ sasl + AUTHENTICATE PLAIN with the configured username/password before NICK/USER. NetworkConfig gains sasl_username and sasl_password. check-in: 28d8139524 user: bapt tags: trunk | |
| 15:56 |
bridge: prefix Matrix replies when relaying to IRC
When a Matrix message is a reply, prefix it with the replied user's localpart before sending to IRC, like Heisenbridge. Adds matrix.Client.GetEvent. check-in: 7f96495672 user: bapt tags: trunk | |
| 15:55 |
cmd: add --uid/--gid privilege drop
Drops to the given gid/uid after startup (best-effort), mirroring Heisenbridge's privilege drop. check-in: 4658a93118 user: bapt tags: trunk | |
| 15:51 |
irc: outbound pacing to avoid flood kicks
Slow down long/burst sends proportional to line length, mirroring Heisenbridge's outbound pacing. check-in: 64f690edc6 user: bapt tags: trunk | |
| 15:49 |
bridge: reacts on truncation, --generate-compat, --safe-mode
Add m.reaction (scissors) when a relayed message is truncated and reacts are enabled. Add config.GenerateCompat (extra bot namespace for Dendrite/Conduit) and the --generate-compat and --safe-mode CLI flags. check-in: eb4d079337 user: bapt tags: trunk | |
| 15:46 |
bridge: staggered network connects and plumbed topic sync
Network rooms connect 1s apart (stagger) to avoid a connection storm. Plumbed rooms propagate Matrix room topic to IRC when topic_sync is enabled. check-in: 132fec6054 user: bapt tags: trunk | |
| 15:45 |
irc: server password (PASS) and basic CAP negotiation
irc.Client sends CAP LS, PASS (if configured), NICK, USER on connect and CAP REQ/END on welcome. NetworkConfig gains Pass and Caps. check-in: 7f646bb9ed user: bapt tags: trunk | |
| 15:43 |
cmd: add --reset to leave all rooms and wipe config
Bridge.Reset leaves every joined room and resets the bridge config, mirroring heisenbridge --reset. check-in: e8725c350d user: bapt tags: trunk | |
| 15:41 |
bridge: add missing network and control-room commands
Network room: whoami, umode, raw, nickserv, chanserv, ctcp, reconnect. Control room: delnetwork (alias), avatar, ident, maxlines, pastebin, reacts, hiddenroom. Adds matrix.Client.SetAvatarURL. check-in: ca2cfbfa9e user: bapt tags: trunk | |
| 15:39 |
irc: keepnick and ping timeout
Handle ERR_NICKNAMEINUSE (433) by appending '_' and retrying (keepnick), and disconnect if no data is received within 300s (ping timeout), which the reconnect loop then handles. check-in: cef1fee7f7 user: bapt tags: trunk | |
| 15:29 |
bridge: hidden rooms (room v9) with restricted join rules
Channel and private rooms get a hidden room (room version 9, unfederated) and are set to restricted join rules allowing it, so puppets can be added without individual invites (Heisenbridge hidden-room mechanism). Best-effort; needs live validation. check-in: bb506e8057 user: bapt tags: trunk | |
| 15:27 |
bridge: IRC formatting parser and Matrix pills
Parse IRC formatting (bold, colour, underline, italic) into m.html formatted_body and strip CTCP; convert Matrix user/room references into pills. Used for channel, private and plumbed IRC->Matrix relays. check-in: dc393cf19e user: bapt tags: trunk | |
| 15:22 |
bridge: route connection/status notices to the network room like Heisenbridge
Server NOTICEs (*** Checking Ident, proxy scans), CTCP requests, the welcome (001), user mode changes, the bot's own JOINs, and the client-side Connecting / Connected / Joining channels status all go to the network room; only genuine private PRIVMSGs open a DM. check-in: cf0b5283e3 user: bapt tags: trunk | |
| 15:18 |
bridge: self-echo for channel sends when member sync is off
When member_sync is off, IRC does not echo the sender's own messages back, so show a 'You said: ...' notice, like Heisenbridge. check-in: db6c8a8cc1 user: bapt tags: trunk | |
| 15:17 |
irc: split long messages to fit the 512-byte IRC line limit
Adds irc.Client.PrivmsgSplit and uses it for Matrix->IRC relays (channel, private, plumbed), mirroring Heisenbridge's split_long without breaking UTF-8. check-in: 93ec826872 user: bapt tags: trunk | |
| 15:16 |
bridge: synapse-admin detection and more admin commands
Detect whether the appservice user is a Synapse admin at startup. Add control-room admin commands: displayname, mediaurl, mediapath, and forget (disconnect + leave/forget a user's rooms). check-in: b877b0ad30 user: bapt tags: trunk | |
| 15:11 |
bridge: create private rooms as proper Matrix DMs
Mark /query rooms as direct messages with preset private_chat, is_direct and a power-level override matching Heisenbridge, so clients classify them under People/DMs instead of normal rooms. check-in: cdebc564a8 user: bapt tags: trunk | |
| 15:09 |
bridge: serialized event queue for channel message sends
Adds an eventqueue package (single-worker FIFO) and uses it to serialize ChannelRoom IRC->Matrix message sends, preserving message ordering (mirrors Heisenbridge's EventQueue). Includes a FIFO order test. check-in: 58272143cd user: bapt tags: trunk | |
| 15:07 |
bridge: admin commands addserver/delserver/masks
Adds admin-only control-room commands to manage network servers (addserver, delserver) and list the allow masks. check-in: 4673d91c9a user: bapt tags: trunk | |
| 15:06 |
bridge: presence keepalive and bridge state
Sets the appservice user online every 60s (presence keepalive) and pushes bridge state CONNECTED / TRANSIENT_DISCONNECT on network connection changes, mirroring Heisenbridge. Adds matrix.Client.SetPresence. check-in: 24e180cd28 user: bapt tags: trunk | |
| 15:02 |
bridge: add version/status/sync control commands and network whois
Adds control-room status, version, and sync (member sync mode), and the network-room whois command (raw WHOIS). Adds irc.Client.Raw and a Version constant. check-in: 54a403f62f user: bapt tags: trunk | |
| 14:59 |
bridge: full glob (fnmatch) matching for user allow masks
User allow masks now match with glob wildcards (*, ?, [seq]) like Python's fnmatch instead of a simple suffix check. check-in: 76f6838a88 user: bapt tags: trunk | |
| 14:58 |
bridge: remove members on PART/QUIT/KICK (member sync)
Handle IRC PART/QUIT/KICK to remove a nick from the channel roster and best- effort leave the puppet from the Matrix room. LeaveRoom now supports impersonating a user (?user_id=). check-in: da23a141de user: bapt tags: trunk | |
| 14:57 |
irc: auto-reconnect with exponential backoff and failover
Network rooms now reconnect automatically after a drop, trying each server in the list (failover) and backing off exponentially (1s..1800s), like Heisenbridge. irc.Client gains Wait() and closes a done channel on disconnect so the connect loop can detect the drop and retry. check-in: 39d3d584e1 user: bapt tags: trunk | |
| 14:18 |
bridge: join the puppet to the private room before relaying IRC PMs
The relayed IRC private message is sent as the nick's puppet, but the puppet was not a member of the room, so the message did not appear. Join the puppet to the room first. check-in: a447bf1bab user: bapt tags: trunk | |
| 14:15 |
bridge: puppet impersonation, /query auto-open, channel keys, user mgmt, in-place graceful upgrade
- Send relayed IRC messages as the puppet via appservice masquerading (?user_id=) so nicks show instead of the bot. - Re-open PrivateRooms on real PRIVMSG (/query) while still filtering connection NOTICEs. - Load ChannelRoom name from the 'name' key and join channels with their key. - Add network connection status, and user management (users/admins/allow/ disallow/whoami). - Graceful upgrade now replaces the process in place (syscall.Exec, same PID, preserved listener + IRC fds) so the daemon does not restart it and there is no duplicate process. check-in: f853003d90 user: bapt tags: trunk | |
| 13:23 |
matrix: accept appservice auth from Bearer header and return JSON body
Synapse (with use_appservice_legacy_authorization=false) sends the hs_token in the Authorization: Bearer header, not as an access_token query param, so gomib was returning 401. Also the appservice spec expects a JSON object (empty {}) in the transaction response; gomib returned an empty body, causing Synapse's JSONDecodeError and repeated backoff. Both are now fixed. check-in: bf3afbeea4 user: bapt tags: trunk | |
| 13:08 |
matrix: serve transactions on the real appservice path
The homeserver pushes appservice transactions to /_matrix/app/v1/transactions/{txnId} (and /_matrix/app/unstable/...), but the server only listened on /transactions/, so Synapse got 404 and backed off and the bridge never received user events. Now serves the standard appservice path (plus the legacy aliases) and extracts the txn id from the last path segment. Adds a test for the appservice path. check-in: 2d2883d41a user: bapt tags: trunk | |
| 13:00 |
bridge: drop-in fixes for live Heisenbridge replacement
- reconnect: load NetworkRoom name from the 'name' key (Heisenbridge format), use per-user nicks, and re-join all channels/plumbed rooms after (re)connect so bridged channels come back up. - routing: IRC connection/server notices go to the network room (not private DM rooms); private rooms are never auto-created on inbound traffic and require an explicit query. - auto-open a control room for the owner at startup so the bridge responds. - rc.d: keep identd off. check-in: 89f1a9dd15 user: bapt tags: trunk | |
| 11:57 |
rc.d: FreeBSD service script for gomib using daemon(8)
Adds rc.d/gomib: starts gomib under daemon(8) (-r restart, -S syslog, -P/-p pidfiles), with config/homeserver/server-name overridable via rc.conf. Also installed the release binary into the heisenbridge jail (usr/local/bin/gomib) and the rc.d script + rc.conf.d enable entry there. check-in: e3915bbf5c user: bapt tags: trunk | |
| 11:26 | docs: remove French guide; keep English only check-in: 4e9d6f9f4d user: bapt tags: trunk | |
| 11:26 | docs: add English installation and validation guide check-in: a516844470 user: bapt tags: trunk | |
| 11:22 |
docs: real-world installation and validation guide (Synapse + Ergo)
Adds a step-by-step guide covering building gomib, generating the registration, configuring Synapse and an Ergo IRC server, validating the bridge (control room, addnetwork, query, plumb, PM relay), testing the graceful restart, and replacing an existing Heisenbridge, plus a troubleshooting table. Linked from the README. check-in: d183be2088 user: bapt tags: trunk | |
| 11:20 | docs: document graceful (Apache-style) upgrade check-in: 0c3ba1b65e user: bapt tags: trunk | |
| 11:20 |
graceful: in-place restart with listener and IRC fd handoff
Adds Bridge.Restart, which re-execs the binary passing the open appservice listener and all IRC connections as fds plus a readiness pipe, so the homeserver endpoint and IRC peers see no drop. Adds a restart/reload control-room command, --inherit-listen-fd / --inherit-irc-fds / --ready-fd flags to resume an upgraded process, and AttachInheritedIRC to re-attach inherited IRC sessions. check-in: bdcd906236 user: bapt tags: trunk | |
| 11:20 |
graceful: fd handoff primitives for Apache-style upgrades
Adds the graceful package (InheritListener/InheritConn/ListenerFile/ConnFile), irc.Client.Attach to resume an existing connection without the NICK/USER handshake, and matrix.Server.Serve to run on an already-open listener (zero HTTP downtime). IRC readLoop no longer dispatches PING to handlers. Tests cover fd handoff, Attach resume, and serving an inherited listener. check-in: 0867cea334 user: bapt tags: trunk | |
| 10:56 |
bridge: end-to-end inbound IRC integration test
Adds a real IRC server for tests that speaks the protocol over TCP: accepts a connection, performs NICK/USER registration, and injects a remote user's JOIN, NAMES and PRIVMSG. Verifies the full inbound path — the bridge's IRC client reads the message over TCP and relays it into the Matrix channel room as a puppet. Also records matrix message sends in the fake homeserver. check-in: c14574cf52 user: bapt tags: trunk | |
| 10:54 | docs: document per-user bouncer behavior check-in: d3c30d1330 user: bapt tags: trunk | |
| 10:53 |
bridge: per-user bouncer connections (multi-user)
Refactors network rooms from one-per-network to one-per-user-per-network, so each user gets their own IRC connection (the Heisenbridge bouncer model). A user's query/plumb commands create their own connection on demand; channel, private and plumbed rooms are registered on and relay through the owning user's connection. LoadRooms reconnects per-user network rooms at startup. Adds a test verifying two users on one network get separate connections and rooms. check-in: 3e2387a468 user: bapt tags: trunk | |
| 10:45 |
bridge: max_lines message truncation
Adds a clip helper that truncates relayed messages to the configured max_lines (0 = unlimited), mirroring Heisenbridge, and applies it in channel, private, and plumbed room relays. Adds a clip test. check-in: 4cf8885ea5 user: bapt tags: trunk | |
| 10:44 |
bridge: push bridge state to optional status endpoint
Adds BridgeState and pushBridgeState, which POSTs the running state to the registration's heisenbridge.status_endpoint authenticated with the as_token, mirroring Heisenbridge's bridge-state reporting. gomib pushes RUNNING on start. Tests added for the status push and the no-endpoint case. check-in: 2d1ac8cd02 user: bapt tags: trunk | |
| 10:40 |
bridge: advanced commands and IRC member sync
Adds control-room commands nick, servers, and reset; network-room commands nick and send/msg; and IRC member sync via NAMES (RPL 353) that registers each nick's puppet and joins it into bridged channel/plumbed rooms. PlumbedRoom gains a joinPuppet helper. Tests added for nick/servers commands and NAMES member sync. check-in: 0e47192e95 user: bapt tags: trunk | |
| 10:35 | docs: document full drop-in runtime (media proxy, identd, commands, rooms) check-in: ef8353f389 user: bapt tags: trunk | |