Diff of the two buildlogs:

--
--- b1/build.log	2025-03-20 00:09:31.348535188 +0000
+++ b2/build.log	2025-03-20 00:20:30.854688032 +0000
@@ -1,6 +1,6 @@
 I: pbuilder: network access will be disabled during build
-I: Current time: Tue Apr 21 18:31:04 -12 2026
-I: pbuilder-time-stamp: 1776839464
+I: Current time: Thu Mar 20 14:09:34 +14 2025
+I: pbuilder-time-stamp: 1742429374
 I: Building the build Environment
 I: extracting base tarball [/var/cache/pbuilder/unstable-reproducible-base.tgz]
 I: copying local configuration
@@ -22,52 +22,84 @@
 dpkg-source: info: unpacking alertmanager-irc-relay_0.5.1-3.debian.tar.xz
 I: Not using root during the build.
 I: Installing the build-deps
-I: user script /srv/workspace/pbuilder/3963998/tmp/hooks/D02_print_environment starting
+I: user script /srv/workspace/pbuilder/724678/tmp/hooks/D01_modify_environment starting
+debug: Running on ionos1-amd64.
+I: Changing host+domainname to test build reproducibility
+I: Adding a custom variable just for the fun of it...
+I: Changing /bin/sh to bash
+'/bin/sh' -> '/bin/bash'
+lrwxrwxrwx 1 root root 9 Mar 20 00:09 /bin/sh -> /bin/bash
+I: Setting pbuilder2's login shell to /bin/bash
+I: Setting pbuilder2's GECOS to second user,second room,second work-phone,second home-phone,second other
+I: user script /srv/workspace/pbuilder/724678/tmp/hooks/D01_modify_environment finished
+I: user script /srv/workspace/pbuilder/724678/tmp/hooks/D02_print_environment starting
 I: set
-  BUILDDIR='/build/reproducible-path'
-  BUILDUSERGECOS='first user,first room,first work-phone,first home-phone,first other'
-  BUILDUSERNAME='pbuilder1'
-  BUILD_ARCH='amd64'
-  DEBIAN_FRONTEND='noninteractive'
-  DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=42 '
-  DISTRIBUTION='unstable'
-  HOME='/root'
-  HOST_ARCH='amd64'
+  BASH=/bin/sh
+  BASHOPTS=checkwinsize:cmdhist:complete_fullquote:extquote:force_fignore:globasciiranges:globskipdots:hostcomplete:interactive_comments:patsub_replacement:progcomp:promptvars:sourcepath
+  BASH_ALIASES=()
+  BASH_ARGC=()
+  BASH_ARGV=()
+  BASH_CMDS=()
+  BASH_LINENO=([0]="12" [1]="0")
+  BASH_LOADABLES_PATH=/usr/local/lib/bash:/usr/lib/bash:/opt/local/lib/bash:/usr/pkg/lib/bash:/opt/pkg/lib/bash:.
+  BASH_SOURCE=([0]="/tmp/hooks/D02_print_environment" [1]="/tmp/hooks/D02_print_environment")
+  BASH_VERSINFO=([0]="5" [1]="2" [2]="37" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu")
+  BASH_VERSION='5.2.37(1)-release'
+  BUILDDIR=/build/reproducible-path
+  BUILDUSERGECOS='second user,second room,second work-phone,second home-phone,second other'
+  BUILDUSERNAME=pbuilder2
+  BUILD_ARCH=amd64
+  DEBIAN_FRONTEND=noninteractive
+  DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=20 '
+  DIRSTACK=()
+  DISTRIBUTION=unstable
+  EUID=0
+  FUNCNAME=([0]="Echo" [1]="main")
+  GROUPS=()
+  HOME=/root
+  HOSTNAME=i-capture-the-hostname
+  HOSTTYPE=x86_64
+  HOST_ARCH=amd64
   IFS=' 	
   '
-  INVOCATION_ID='98c2a980a2b94b65b0c2b1e3f9df53aa'
-  LANG='C'
-  LANGUAGE='en_US:en'
-  LC_ALL='C'
-  MAIL='/var/mail/root'
-  OPTIND='1'
-  PATH='/usr/sbin:/usr/bin:/sbin:/bin:/usr/games'
-  PBCURRENTCOMMANDLINEOPERATION='build'
-  PBUILDER_OPERATION='build'
-  PBUILDER_PKGDATADIR='/usr/share/pbuilder'
-  PBUILDER_PKGLIBDIR='/usr/lib/pbuilder'
-  PBUILDER_SYSCONFDIR='/etc'
-  PPID='3963998'
-  PS1='# '
-  PS2='> '
+  INVOCATION_ID=78b26b1d5eb84646b5522b193c458902
+  LANG=C
+  LANGUAGE=et_EE:et
+  LC_ALL=C
+  MACHTYPE=x86_64-pc-linux-gnu
+  MAIL=/var/mail/root
+  OPTERR=1
+  OPTIND=1
+  OSTYPE=linux-gnu
+  PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
+  PBCURRENTCOMMANDLINEOPERATION=build
+  PBUILDER_OPERATION=build
+  PBUILDER_PKGDATADIR=/usr/share/pbuilder
+  PBUILDER_PKGLIBDIR=/usr/lib/pbuilder
+  PBUILDER_SYSCONFDIR=/etc
+  PIPESTATUS=([0]="0")
+  POSIXLY_CORRECT=y
+  PPID=724678
   PS4='+ '
-  PWD='/'
-  SHELL='/bin/bash'
-  SHLVL='2'
-  SUDO_COMMAND='/usr/bin/timeout -k 18.1h 18h /usr/bin/ionice -c 3 /usr/bin/nice /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.oRJnxZNk/pbuilderrc_6jpR --distribution unstable --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/unstable-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.oRJnxZNk/b1 --logfile b1/build.log alertmanager-irc-relay_0.5.1-3.dsc'
-  SUDO_GID='110'
-  SUDO_UID='105'
-  SUDO_USER='jenkins'
-  TERM='unknown'
-  TZ='/usr/share/zoneinfo/Etc/GMT+12'
-  USER='root'
-  _='/usr/bin/systemd-run'
-  http_proxy='http://213.165.73.152:3128'
+  PWD=/
+  SHELL=/bin/bash
+  SHELLOPTS=braceexpand:errexit:hashall:interactive-comments:posix
+  SHLVL=3
+  SUDO_COMMAND='/usr/bin/timeout -k 24.1h 24h /usr/bin/ionice -c 3 /usr/bin/nice -n 11 /usr/bin/unshare --uts -- /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.oRJnxZNk/pbuilderrc_ZMeY --distribution unstable --hookdir /etc/pbuilder/rebuild-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/unstable-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.oRJnxZNk/b2 --logfile b2/build.log alertmanager-irc-relay_0.5.1-3.dsc'
+  SUDO_GID=110
+  SUDO_UID=105
+  SUDO_USER=jenkins
+  TERM=unknown
+  TZ=/usr/share/zoneinfo/Etc/GMT-14
+  UID=0
+  USER=root
+  _='I: set'
+  http_proxy=http://46.16.76.132:3128
 I: uname -a
-  Linux ionos5-amd64 6.12.12+bpo-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.12-1~bpo12+1 (2025-02-23) x86_64 GNU/Linux
+  Linux i-capture-the-hostname 6.1.0-32-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.129-1 (2025-03-06) x86_64 GNU/Linux
 I: ls -l /bin
-  lrwxrwxrwx 1 root root 7 Mar  4  2025 /bin -> usr/bin
-I: user script /srv/workspace/pbuilder/3963998/tmp/hooks/D02_print_environment finished
+  lrwxrwxrwx 1 root root 7 Mar  4 11:20 /bin -> usr/bin
+I: user script /srv/workspace/pbuilder/724678/tmp/hooks/D02_print_environment finished
  -> Attempting to satisfy build-dependencies
  -> Creating pbuilder-satisfydepends-dummy package
 Package: pbuilder-satisfydepends-dummy
@@ -344,7 +376,7 @@
 Get: 223 http://deb.debian.org/debian unstable/main amd64 golang-protobuf-extensions-dev all 1.0.4-2 [29.7 kB]
 Get: 224 http://deb.debian.org/debian unstable/main amd64 golang-uber-automaxprocs-dev all 1.5.3-1 [22.3 kB]
 Get: 225 http://deb.debian.org/debian unstable/main amd64 golang-github-prometheus-alertmanager-dev all 0.28.1+ds-1 [1139 kB]
-Fetched 164 MB in 10s (16.0 MB/s)
+Fetched 164 MB in 9s (17.4 MB/s)
 Preconfiguring packages ...
 Selecting previously unselected package tzdata.
 (Reading database ... 
(Reading database ... 5%
(Reading database ... 10%
(Reading database ... 15%
(Reading database ... 20%
(Reading database ... 25%
(Reading database ... 30%
(Reading database ... 35%
(Reading database ... 40%
(Reading database ... 45%
(Reading database ... 50%
(Reading database ... 55%
(Reading database ... 60%
(Reading database ... 65%
(Reading database ... 70%
(Reading database ... 75%
(Reading database ... 80%
(Reading database ... 85%
(Reading database ... 90%
(Reading database ... 95%
(Reading database ... 100%
(Reading database ... 19784 files and directories currently installed.)
@@ -1078,8 +1110,8 @@
 Setting up tzdata (2025a-2) ...
 
 Current default time zone: 'Etc/UTC'
-Local time is now:      Wed Apr 22 06:31:52 UTC 2026.
-Universal Time is now:  Wed Apr 22 06:31:52 UTC 2026.
+Local time is now:      Thu Mar 20 00:15:24 UTC 2025.
+Universal Time is now:  Thu Mar 20 00:15:24 UTC 2025.
 Run 'dpkg-reconfigure tzdata' if you wish to change it.
 
 Setting up golang-github-cespare-xxhash-dev (2.3.0-1) ...
@@ -1265,7 +1297,11 @@
 Building tag database...
  -> Finished parsing the build-deps
 I: Building the package
-I: Running cd /build/reproducible-path/alertmanager-irc-relay-0.5.1/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-genchanges -S  > ../alertmanager-irc-relay_0.5.1-3_source.changes
+I: user script /srv/workspace/pbuilder/724678/tmp/hooks/A99_set_merged_usr starting
+Not re-configuring usrmerge for unstable
+I: user script /srv/workspace/pbuilder/724678/tmp/hooks/A99_set_merged_usr finished
+hostname: Name or service not known
+I: Running cd /build/reproducible-path/alertmanager-irc-relay-0.5.1/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-genchanges -S  > ../alertmanager-irc-relay_0.5.1-3_source.changes
 dpkg-buildpackage: info: source package alertmanager-irc-relay
 dpkg-buildpackage: info: source version 0.5.1-3
 dpkg-buildpackage: info: source distribution unstable
@@ -1283,244 +1319,244 @@
    dh_autoreconf -O--buildsystem=golang
    dh_auto_configure -O--buildsystem=golang
    dh_auto_build -O--buildsystem=golang
-	cd obj-x86_64-linux-gnu && go install -trimpath -v -p 42 github.com/google/alertmanager-irc-relay github.com/google/alertmanager-irc-relay/logging
-cmp
-internal/profilerecord
-container/list
-google.golang.org/protobuf/internal/flags
-internal/byteorder
-internal/itoa
-encoding
-internal/nettrace
-internal/unsafeheader
-unicode/utf8
-internal/goarch
-github.com/fluffle/goirc/logging
-vendor/golang.org/x/crypto/cryptobyte/asn1
-log/slog/internal
-github.com/klauspost/compress/internal/le
-math/bits
-crypto/internal/boring/sig
-internal/asan
-vendor/golang.org/x/crypto/internal/alias
-log/internal
+	cd obj-x86_64-linux-gnu && go install -trimpath -v -p 20 github.com/google/alertmanager-irc-relay github.com/google/alertmanager-irc-relay/logging
 internal/goos
-crypto/internal/fips140/alias
-internal/cpu
-sync/atomic
-unicode/utf16
 internal/msan
 internal/coverage/rtcov
-internal/runtime/syscall
+internal/goarch
+internal/itoa
+internal/unsafeheader
+internal/profilerecord
 internal/godebugs
+internal/asan
+unicode/utf8
+internal/byteorder
 unicode
-github.com/klauspost/compress/internal/cpuinfo
+math/bits
+crypto/internal/fips140/alias
 internal/goexperiment
+container/list
+internal/runtime/syscall
+sync/atomic
 internal/runtime/atomic
+internal/cpu
 internal/abi
 internal/runtime/math
 internal/runtime/sys
-crypto/internal/fips140deps/byteorder
-internal/chacha8rand
+cmp
+crypto/internal/boring/sig
+unicode/utf16
+vendor/golang.org/x/crypto/cryptobyte/asn1
+vendor/golang.org/x/crypto/internal/alias
+internal/nettrace
+encoding
 crypto/internal/fips140/subtle
+github.com/fluffle/goirc/logging
+log/internal
+internal/chacha8rand
+crypto/internal/fips140deps/byteorder
+log/slog/internal
+google.golang.org/protobuf/internal/flags
+github.com/klauspost/compress/internal/cpuinfo
+github.com/klauspost/compress/internal/le
 google.golang.org/protobuf/internal/set
-crypto/internal/fips140deps/cpu
 internal/bytealg
+crypto/internal/fips140deps/cpu
 math
 internal/runtime/exithook
 internal/stringslite
 internal/race
-internal/sync
 internal/runtime/maps
+internal/sync
 github.com/klauspost/compress
 runtime
+internal/reflectlite
+sync
 iter
 crypto/subtle
 weak
 runtime/metrics
-internal/reflectlite
-sync
-maps
 slices
-errors
-sort
-internal/singleflight
-internal/testlog
+maps
 internal/bisect
+internal/testlog
+internal/singleflight
 unique
 log/slog/internal/buffer
 google.golang.org/protobuf/internal/pragma
 runtime/cgo
-internal/oserror
+errors
+sort
 io
+internal/godebug
+internal/oserror
+strconv
 path
-vendor/golang.org/x/net/dns/dnsmessage
 math/rand/v2
-strconv
-internal/godebug
-syscall
-hash
+vendor/golang.org/x/net/dns/dnsmessage
 bytes
+hash
+syscall
 strings
-github.com/beorn7/perks/quantile
 hash/crc32
 hash/fnv
-crypto/internal/randutil
+github.com/beorn7/perks/quantile
 golang.org/x/text/internal/tag
 crypto/internal/fips140deps/godebug
 math/rand
+crypto/internal/randutil
+vendor/golang.org/x/text/transform
+golang.org/x/text/transform
 crypto
 net/netip
 reflect
-golang.org/x/text/transform
-vendor/golang.org/x/text/transform
-crypto/internal/impl
 crypto/internal/fips140
-github.com/munnerz/goautoneg
-net/http/internal/ascii
+crypto/internal/impl
 bufio
+net/http/internal/ascii
 regexp/syntax
+github.com/munnerz/goautoneg
 html
-crypto/tls/internal/fips140tls
+crypto/internal/fips140/sha256
 crypto/internal/fips140/sha3
 crypto/internal/fips140/sha512
-crypto/internal/fips140/sha256
-crypto/sha3
+crypto/tls/internal/fips140tls
 crypto/internal/fips140/hmac
+crypto/sha3
 crypto/internal/fips140/check
 crypto/internal/fips140hash
-crypto/internal/fips140/hkdf
-crypto/internal/fips140/tls12
-crypto/internal/fips140/bigmod
-crypto/internal/fips140/edwards25519/field
 crypto/internal/fips140/aes
+crypto/internal/fips140/edwards25519/field
+crypto/internal/fips140/bigmod
+crypto/internal/fips140/tls12
+crypto/internal/fips140/hkdf
 crypto/internal/fips140/nistec/fiat
-internal/syscall/execenv
+crypto/internal/fips140/tls13
 internal/syscall/unix
 time
-crypto/internal/fips140/tls13
+internal/syscall/execenv
 crypto/internal/fips140/edwards25519
 regexp
 context
 io/fs
 internal/poll
 crypto/internal/fips140/nistec
-internal/filepathlite
 embed
+internal/filepathlite
 google.golang.org/protobuf/internal/editiondefaults
 os
 internal/fmtsort
 encoding/binary
 vendor/golang.org/x/crypto/internal/poly1305
+github.com/klauspost/compress/internal/snapref
 encoding/base64
 github.com/cespare/xxhash
-github.com/klauspost/compress/internal/snapref
 golang.org/x/sys/unix
 encoding/pem
-io/ioutil
-github.com/prometheus/procfs/internal/util
 crypto/internal/sysrand
 fmt
-os/signal
-path/filepath
 vendor/golang.org/x/sys/cpu
+path/filepath
 google.golang.org/protobuf/internal/detrand
+io/ioutil
+github.com/prometheus/procfs/internal/util
+os/signal
 net
 crypto/internal/entropy
 crypto/internal/fips140/drbg
+crypto/internal/fips140/aes/gcm
 crypto/internal/fips140only
 crypto/internal/fips140/ecdh
-crypto/internal/fips140/mlkem
 crypto/internal/fips140/ed25519
 crypto/internal/fips140/ecdsa
+crypto/internal/fips140/mlkem
 crypto/internal/fips140/rsa
-crypto/internal/fips140/aes/gcm
 crypto/rc4
 crypto/md5
 crypto/cipher
 encoding/hex
-log
-google.golang.org/protobuf/internal/errors
+math/big
 net/url
-vendor/golang.org/x/net/http2/hpack
-go/token
+encoding/json
 mime/quotedprintable
-github.com/prometheus/procfs/internal/fs
-compress/flate
+vendor/golang.org/x/net/http2/hpack
+mime
+github.com/golang/mock/gomock
 net/http/internal
+go/token
+google.golang.org/protobuf/internal/errors
 google.golang.org/protobuf/internal/version
-github.com/golang/mock/gomock
-flag
 runtime/debug
-text/template/parse
-encoding/json
-mime
-gopkg.in/yaml.v2
+flag
 vendor/golang.org/x/text/unicode/norm
-github.com/klauspost/compress/fse
-golang.org/x/text/unicode/norm
-golang.org/x/text/internal/language
-math/big
-google.golang.org/protobuf/encoding/protowire
-vendor/golang.org/x/crypto/chacha20
+compress/flate
+log
 crypto/internal/boring
 crypto/des
-google.golang.org/protobuf/reflect/protoreflect
-vendor/golang.org/x/text/unicode/bidi
+vendor/golang.org/x/crypto/chacha20
+google.golang.org/protobuf/encoding/protowire
 crypto/aes
 crypto/ecdh
 crypto/sha512
 crypto/hmac
-crypto/sha256
 crypto/sha1
+crypto/sha256
+google.golang.org/protobuf/reflect/protoreflect
+github.com/prometheus/procfs/internal/fs
+golang.org/x/text/internal/language
 vendor/golang.org/x/crypto/chacha20poly1305
-github.com/klauspost/compress/huff0
-github.com/fluffle/goirc/state
+vendor/golang.org/x/text/unicode/bidi
+golang.org/x/text/unicode/norm
+text/template/parse
+github.com/klauspost/compress/fse
+gopkg.in/yaml.v2
 github.com/google/alertmanager-irc-relay/logging
+github.com/klauspost/compress/huff0
 compress/gzip
-golang.org/x/text/internal/language/compact
+github.com/fluffle/goirc/state
 vendor/golang.org/x/text/secure/bidirule
-text/template
-golang.org/x/text/language
-google.golang.org/protobuf/internal/encoding/messageset
-google.golang.org/protobuf/internal/strs
 google.golang.org/protobuf/internal/descfmt
+google.golang.org/protobuf/internal/strs
 google.golang.org/protobuf/internal/descopts
-google.golang.org/protobuf/runtime/protoiface
-google.golang.org/protobuf/internal/order
+google.golang.org/protobuf/internal/encoding/messageset
 google.golang.org/protobuf/internal/genid
+google.golang.org/protobuf/internal/order
+google.golang.org/protobuf/runtime/protoiface
+text/template
+google.golang.org/protobuf/reflect/protoregistry
 google.golang.org/protobuf/internal/protolazy
-vendor/golang.org/x/net/idna
 google.golang.org/protobuf/internal/encoding/text
-google.golang.org/protobuf/reflect/protoregistry
+golang.org/x/text/internal/language/compact
 log/slog
+golang.org/x/text/language
+vendor/golang.org/x/net/idna
+google.golang.org/protobuf/proto
+google.golang.org/protobuf/internal/encoding/defval
+github.com/prometheus/alertmanager/featurecontrol
+github.com/prometheus/common/promslog
+golang.org/x/text/internal
 crypto/elliptic
 crypto/internal/boring/bbig
 crypto/rand
-crypto/dsa
 encoding/asn1
-golang.org/x/text/internal
-google.golang.org/protobuf/proto
+crypto/dsa
+golang.org/x/text/cases
 crypto/ed25519
 crypto/internal/hpke
 crypto/rsa
 github.com/klauspost/compress/zstd
-golang.org/x/text/cases
-google.golang.org/protobuf/internal/encoding/defval
 html/template
-crypto/x509/pkix
-vendor/golang.org/x/crypto/cryptobyte
-google.golang.org/protobuf/encoding/protodelim
 google.golang.org/protobuf/encoding/prototext
+google.golang.org/protobuf/encoding/protodelim
 google.golang.org/protobuf/internal/filedesc
-github.com/prometheus/alertmanager/featurecontrol
-github.com/prometheus/common/promslog
+crypto/x509/pkix
+vendor/golang.org/x/crypto/cryptobyte
 crypto/ecdsa
 google.golang.org/protobuf/internal/encoding/tag
 google.golang.org/protobuf/internal/impl
 golang.org/x/net/internal/socks
-vendor/golang.org/x/net/http/httpproxy
 net/textproto
+vendor/golang.org/x/net/http/httpproxy
 crypto/x509
 github.com/prometheus/procfs
 golang.org/x/net/proxy
@@ -1531,19 +1567,19 @@
 google.golang.org/protobuf/runtime/protoimpl
 google.golang.org/protobuf/types/known/timestamppb
 github.com/prometheus/client_model/go
+github.com/fluffle/goirc/client
+net/http/httptrace
 github.com/prometheus/common/model
+net/http
 github.com/prometheus/alertmanager/pkg/labels
-github.com/prometheus/common/helpers/templates
 github.com/prometheus/client_golang/prometheus/internal
+github.com/prometheus/common/helpers/templates
 github.com/prometheus/alertmanager/matcher/parse
 github.com/prometheus/alertmanager/matcher/compat
-net/http/httptrace
-github.com/fluffle/goirc/client
-net/http
-github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil/header
-expvar
 github.com/gorilla/mux
+expvar
 github.com/prometheus/common/expfmt
+github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil/header
 github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil
 github.com/prometheus/client_golang/prometheus
 github.com/prometheus/alertmanager/types
@@ -1552,23 +1588,23 @@
 github.com/prometheus/alertmanager/template
 github.com/google/alertmanager-irc-relay
    dh_auto_test -O--buildsystem=golang
-	cd obj-x86_64-linux-gnu && go test -vet=off -v -p 42 github.com/google/alertmanager-irc-relay github.com/google/alertmanager-irc-relay/logging
+	cd obj-x86_64-linux-gnu && go test -vet=off -v -p 20 github.com/google/alertmanager-irc-relay github.com/google/alertmanager-irc-relay/logging
 === RUN   TestBackoffIncreasesAndReachesMax
 --- PASS: TestBackoffIncreasesAndReachesMax (0.00s)
 === RUN   TestBackoffReset
 --- PASS: TestBackoffReset (0.00s)
 === RUN   TestBackoffDelayContext
-2026/04/21 18:32:19.544003 backoff.go:111: INFO Backoff for 0s starts
-2026/04/21 18:32:19.544063 backoff.go:114: INFO Backoff for 0s ends
-2026/04/21 18:32:19.544069 backoff.go:111: INFO Backoff for 2ms starts
-2026/04/21 18:32:19.544074 backoff.go:116: INFO Backoff for 2ms canceled by context
+2025/03/20 14:19:19.518836 backoff.go:111: INFO Backoff for 0s starts
+2025/03/20 14:19:19.519019 backoff.go:114: INFO Backoff for 0s ends
+2025/03/20 14:19:19.519032 backoff.go:111: INFO Backoff for 2ms starts
+2025/03/20 14:19:19.519040 backoff.go:116: INFO Backoff for 2ms canceled by context
 --- PASS: TestBackoffDelayContext (0.00s)
 === RUN   TestNoConfig
 --- PASS: TestNoConfig (0.00s)
 === RUN   TestLoadGoodConfig
---- PASS: TestLoadGoodConfig (0.00s)
+--- PASS: TestLoadGoodConfig (0.03s)
 === RUN   TestLoadWithEnvironmentVariables
---- PASS: TestLoadWithEnvironmentVariables (0.00s)
+--- PASS: TestLoadWithEnvironmentVariables (0.08s)
 === RUN   TestLoadBadFile
 --- PASS: TestLoadBadFile (0.00s)
 === RUN   TestLoadBadConfig
@@ -1580,10 +1616,10 @@
 === RUN   TestGivenTemplateNotOverwritten
 --- PASS: TestGivenTemplateNotOverwritten (0.00s)
 === RUN   TestTemplateErrorsCreateRawAlertMsg
-2026/04/21 18:32:19.545916 format.go:59: ERROR Could not apply msg template on alert (template: msg:1:18: executing "msg" at <nil>: nil is not a command): {"status":"resolved","labels":{"alertname":"airDown","instance":"instance1:3456","job":"air","service":"prometheus","severity":"ticket","zone":"global"},"annotations":{"DESCRIPTION":"service /prometheus has irc gateway down on instance1","SUMMARY":"service /prometheus air down on instance1"},"startsAt":"2017-05-15T13:49:37.834Z","endsAt":"2017-05-15T13:50:37.835Z","generatorURL":"https://prometheus.example.com/prometheus/...","fingerprint":"66214a361160fb6f"}
-2026/04/21 18:32:19.545934 format.go:61: WARN Sending raw alert
-2026/04/21 18:32:19.545958 format.go:59: ERROR Could not apply msg template on alert (template: msg:1:18: executing "msg" at <nil>: nil is not a command): {"status":"resolved","labels":{"alertname":"airDown","instance":"instance2:7890","job":"air","service":"prometheus","severity":"ticket","zone":"global"},"annotations":{"DESCRIPTION":"service /prometheus has irc gateway down on instance2","SUMMARY":"service /prometheus air down on instance2"},"startsAt":"2017-05-15T11:47:37.834Z","endsAt":"2017-05-15T11:48:37.834Z","generatorURL":"https://prometheus.example.com/prometheus/...","fingerprint":"25a874c99325d1ce"}
-2026/04/21 18:32:19.545965 format.go:61: WARN Sending raw alert
+2025/03/20 14:19:19.637210 format.go:59: ERROR Could not apply msg template on alert (template: msg:1:18: executing "msg" at <nil>: nil is not a command): {"status":"resolved","labels":{"alertname":"airDown","instance":"instance1:3456","job":"air","service":"prometheus","severity":"ticket","zone":"global"},"annotations":{"DESCRIPTION":"service /prometheus has irc gateway down on instance1","SUMMARY":"service /prometheus air down on instance1"},"startsAt":"2017-05-15T13:49:37.834Z","endsAt":"2017-05-15T13:50:37.835Z","generatorURL":"https://prometheus.example.com/prometheus/...","fingerprint":"66214a361160fb6f"}
+2025/03/20 14:19:19.637238 format.go:61: WARN Sending raw alert
+2025/03/20 14:19:19.637298 format.go:59: ERROR Could not apply msg template on alert (template: msg:1:18: executing "msg" at <nil>: nil is not a command): {"status":"resolved","labels":{"alertname":"airDown","instance":"instance2:7890","job":"air","service":"prometheus","severity":"ticket","zone":"global"},"annotations":{"DESCRIPTION":"service /prometheus has irc gateway down on instance2","SUMMARY":"service /prometheus air down on instance2"},"startsAt":"2017-05-15T11:47:37.834Z","endsAt":"2017-05-15T11:48:37.834Z","generatorURL":"https://prometheus.example.com/prometheus/...","fingerprint":"25a874c99325d1ce"}
+2025/03/20 14:19:19.637311 format.go:61: WARN Sending raw alert
 --- PASS: TestTemplateErrorsCreateRawAlertMsg (0.00s)
 === RUN   TestAlertsDispatchedOnce
 --- PASS: TestAlertsDispatchedOnce (0.00s)
@@ -1594,482 +1630,475 @@
 === RUN   TestMultilineTemplates
 --- PASS: TestMultilineTemplates (0.00s)
 === RUN   TestAlertsDispatched
-2026/04/21 18:32:19.546551 http.go:132: INFO Starting HTTP server
+2025/03/20 14:19:19.638844 http.go:132: INFO Starting HTTP server
 --- PASS: TestAlertsDispatched (0.00s)
 === RUN   TestRootReturnsError
-2026/04/21 18:32:19.546787 http.go:132: INFO Starting HTTP server
+2025/03/20 14:19:19.639487 http.go:132: INFO Starting HTTP server
 --- PASS: TestRootReturnsError (0.00s)
 === RUN   TestInvalidDataReturnsError
-2026/04/21 18:32:19.546939 http.go:132: INFO Starting HTTP server
-2026/04/21 18:32:19.546978 http.go:96: ERROR Could not decode request body (invalid character '}' looking for beginning of object key string): {"this is not": "a valid alert",}
+2025/03/20 14:19:19.639898 http.go:132: INFO Starting HTTP server
+2025/03/20 14:19:19.639935 http.go:96: ERROR Could not decode request body (invalid character '}' looking for beginning of object key string): {"this is not": "a valid alert",}
 --- PASS: TestInvalidDataReturnsError (0.00s)
 === RUN   TestServerPassword
-2026/04/21 18:32:19.547257 irc_server_for_test.go:201: INFO =Server= Test server listening on 127.0.0.1:43465
-2026/04/21 18:32:19.547302 irc.go:302: INFO Connecting to IRC 127.0.0.1:43465
-2026/04/21 18:32:19.547317 fake_delayer.go:43: INFO Faking Backoff
-2026/04/21 18:32:19.547325 connection.go:390: INFO irc.Connect(): Connecting to 127.0.0.1:43465.
-2026/04/21 18:32:19.547583 irc_server_for_test.go:171: INFO =Server= New client connected from 127.0.0.1:59096
-2026/04/21 18:32:19.547603 irc.go:310: INFO Connected to IRC server, waiting to establish session
-2026/04/21 18:32:19.547728 irc_server_for_test.go:119: INFO =Server= Received PASS hostsecret
-2026/04/21 18:32:19.547761 irc_server_for_test.go:96: INFO =Server= No handler for command 'PASS', skipping
-2026/04/21 18:32:19.547769 irc_server_for_test.go:119: INFO =Server= Received NICK foo
-2026/04/21 18:32:19.547774 irc_server_for_test.go:96: INFO =Server= No handler for command 'NICK', skipping
-2026/04/21 18:32:19.547778 irc_server_for_test.go:119: INFO =Server= Received USER foo 12 * :
-2026/04/21 18:32:19.547921 irc.go:146: INFO Session established
-2026/04/21 18:32:19.547974 reconciler.go:105: INFO Channel #foo monitor: waiting to join
-2026/04/21 18:32:19.547991 fake_delayer.go:43: INFO Faking Backoff
-2026/04/21 18:32:19.548002 reconciler.go:114: INFO Channel #foo monitor: join request sent
-2026/04/21 18:32:19.548159 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #foo
-2026/04/21 18:32:19.548184 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
-2026/04/21 18:32:19.548190 irc_server_for_test.go:119: INFO =Server= Received JOIN #foo 
-2026/04/21 18:32:19.548216 reconciler.go:122: INFO Channel #foo monitor: context canceled while waiting for join
-2026/04/21 18:32:19.548232 irc.go:296: INFO IRC routine asked to terminate
-2026/04/21 18:32:19.548250 irc.go:271: INFO IRC client connected, quitting
-2026/04/21 18:32:19.548265 irc.go:274: INFO Wait for IRC disconnect to complete
-2026/04/21 18:32:19.548321 irc_server_for_test.go:119: INFO =Server= Received QUIT :see ya
-2026/04/21 18:32:19.548340 irc_server_for_test.go:127: INFO =Server= Closing connection: client asked to terminate
-2026/04/21 18:32:19.548407 connection.go:577: INFO irc.Close(): Disconnected from server.
-2026/04/21 18:32:19.548492 irc.go:152: INFO Disconnected from IRC
-2026/04/21 18:32:19.548528 irc.go:282: INFO IRC shutdown complete
-2026/04/21 18:32:19.548558 irc_server_for_test.go:168: INFO =Server= Stopped accepting new connections
---- PASS: TestServerPassword (0.00s)
+2025/03/20 14:19:19.640529 irc_server_for_test.go:201: INFO =Server= Test server listening on 127.0.0.1:44049
+2025/03/20 14:19:19.640598 irc.go:302: INFO Connecting to IRC 127.0.0.1:44049
+2025/03/20 14:19:19.640617 fake_delayer.go:43: INFO Faking Backoff
+2025/03/20 14:19:19.640632 connection.go:390: INFO irc.Connect(): Connecting to 127.0.0.1:44049.
+2025/03/20 14:19:19.646387 irc.go:310: INFO Connected to IRC server, waiting to establish session
+2025/03/20 14:19:19.646822 irc_server_for_test.go:171: INFO =Server= New client connected from 127.0.0.1:38324
+2025/03/20 14:19:19.646863 irc_server_for_test.go:119: INFO =Server= Received PASS hostsecret
+2025/03/20 14:19:19.646880 irc_server_for_test.go:96: INFO =Server= No handler for command 'PASS', skipping
+2025/03/20 14:19:19.646889 irc_server_for_test.go:119: INFO =Server= Received NICK foo
+2025/03/20 14:19:19.646899 irc_server_for_test.go:96: INFO =Server= No handler for command 'NICK', skipping
+2025/03/20 14:19:19.646907 irc_server_for_test.go:119: INFO =Server= Received USER foo 12 * :
+2025/03/20 14:19:19.647014 irc.go:146: INFO Session established
+2025/03/20 14:19:19.647050 reconciler.go:105: INFO Channel #foo monitor: waiting to join
+2025/03/20 14:19:19.647085 fake_delayer.go:43: INFO Faking Backoff
+2025/03/20 14:19:19.647098 reconciler.go:114: INFO Channel #foo monitor: join request sent
+2025/03/20 14:19:19.647150 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #foo
+2025/03/20 14:19:19.647164 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
+2025/03/20 14:19:19.647177 irc_server_for_test.go:119: INFO =Server= Received JOIN #foo 
+2025/03/20 14:19:19.647207 reconciler.go:122: INFO Channel #foo monitor: context canceled while waiting for join
+2025/03/20 14:19:19.647217 irc.go:296: INFO IRC routine asked to terminate
+2025/03/20 14:19:19.647225 irc.go:271: INFO IRC client connected, quitting
+2025/03/20 14:19:19.647234 irc.go:274: INFO Wait for IRC disconnect to complete
+2025/03/20 14:19:19.647262 irc_server_for_test.go:119: INFO =Server= Received QUIT :see ya
+2025/03/20 14:19:19.647276 irc_server_for_test.go:127: INFO =Server= Closing connection: client asked to terminate
+2025/03/20 14:19:19.647342 connection.go:577: INFO irc.Close(): Disconnected from server.
+2025/03/20 14:19:19.647426 irc.go:152: INFO Disconnected from IRC
+2025/03/20 14:19:19.647448 irc.go:282: INFO IRC shutdown complete
+2025/03/20 14:19:19.647475 irc_server_for_test.go:168: INFO =Server= Stopped accepting new connections
+--- PASS: TestServerPassword (0.01s)
 === RUN   TestSendAlertOnPreJoinedChannel
-2026/04/21 18:32:19.548671 irc_server_for_test.go:201: INFO =Server= Test server listening on 127.0.0.1:33121
-2026/04/21 18:32:19.548714 irc.go:302: INFO Connecting to IRC 127.0.0.1:33121
-2026/04/21 18:32:19.548729 fake_delayer.go:43: INFO Faking Backoff
-2026/04/21 18:32:19.548736 connection.go:390: INFO irc.Connect(): Connecting to 127.0.0.1:33121.
-2026/04/21 18:32:19.548918 irc_server_for_test.go:171: INFO =Server= New client connected from 127.0.0.1:52916
-2026/04/21 18:32:19.549719 irc.go:310: INFO Connected to IRC server, waiting to establish session
-2026/04/21 18:32:19.549779 irc_server_for_test.go:119: INFO =Server= Received NICK foo
-2026/04/21 18:32:19.549795 irc_server_for_test.go:96: INFO =Server= No handler for command 'NICK', skipping
-2026/04/21 18:32:19.549799 irc_server_for_test.go:119: INFO =Server= Received USER foo 12 * :
-2026/04/21 18:32:19.549869 irc.go:146: INFO Session established
-2026/04/21 18:32:19.549908 reconciler.go:105: INFO Channel #foo monitor: waiting to join
-2026/04/21 18:32:19.549928 fake_delayer.go:43: INFO Faking Backoff
-2026/04/21 18:32:19.549936 reconciler.go:114: INFO Channel #foo monitor: join request sent
-2026/04/21 18:32:19.550063 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #foo
-2026/04/21 18:32:19.550082 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
-2026/04/21 18:32:19.550087 irc_server_for_test.go:119: INFO =Server= Received JOIN #foo 
-2026/04/21 18:32:19.550157 reconciler.go:205: INFO Received JOIN confirmation for channel #foo
-2026/04/21 18:32:19.550170 reconciler.go:79: INFO Setting JOIN state on channel #foo
-2026/04/21 18:32:19.550192 reconciler.go:118: INFO Channel #foo monitor: join succeeded
-2026/04/21 18:32:19.550243 irc_server_for_test.go:119: INFO =Server= Received NOTICE #foo :test message
-2026/04/21 18:32:19.550274 reconciler.go:131: INFO Channel #foo monitor: context canceled while monitoring
-2026/04/21 18:32:19.550284 irc.go:296: INFO IRC routine asked to terminate
-2026/04/21 18:32:19.550294 irc.go:271: INFO IRC client connected, quitting
-2026/04/21 18:32:19.550308 irc.go:274: INFO Wait for IRC disconnect to complete
-2026/04/21 18:32:19.550379 irc_server_for_test.go:119: INFO =Server= Received QUIT :see ya
-2026/04/21 18:32:19.550401 irc_server_for_test.go:127: INFO =Server= Closing connection: client asked to terminate
-2026/04/21 18:32:19.550452 connection.go:577: INFO irc.Close(): Disconnected from server.
-2026/04/21 18:32:19.550523 irc.go:152: INFO Disconnected from IRC
-2026/04/21 18:32:19.550556 irc.go:282: INFO IRC shutdown complete
-2026/04/21 18:32:19.550586 irc_server_for_test.go:168: INFO =Server= Stopped accepting new connections
+2025/03/20 14:19:19.647634 irc_server_for_test.go:201: INFO =Server= Test server listening on 127.0.0.1:41517
+2025/03/20 14:19:19.647735 irc.go:302: INFO Connecting to IRC 127.0.0.1:41517
+2025/03/20 14:19:19.647750 fake_delayer.go:43: INFO Faking Backoff
+2025/03/20 14:19:19.647764 connection.go:390: INFO irc.Connect(): Connecting to 127.0.0.1:41517.
+2025/03/20 14:19:19.647953 irc_server_for_test.go:171: INFO =Server= New client connected from 127.0.0.1:55236
+2025/03/20 14:19:19.648015 irc.go:310: INFO Connected to IRC server, waiting to establish session
+2025/03/20 14:19:19.648100 irc_server_for_test.go:119: INFO =Server= Received NICK foo
+2025/03/20 14:19:19.648113 irc_server_for_test.go:96: INFO =Server= No handler for command 'NICK', skipping
+2025/03/20 14:19:19.648121 irc_server_for_test.go:119: INFO =Server= Received USER foo 12 * :
+2025/03/20 14:19:19.648189 irc.go:146: INFO Session established
+2025/03/20 14:19:19.648214 reconciler.go:105: INFO Channel #foo monitor: waiting to join
+2025/03/20 14:19:19.648226 fake_delayer.go:43: INFO Faking Backoff
+2025/03/20 14:19:19.648236 reconciler.go:114: INFO Channel #foo monitor: join request sent
+2025/03/20 14:19:19.648284 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #foo
+2025/03/20 14:19:19.648298 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
+2025/03/20 14:19:19.648306 irc_server_for_test.go:119: INFO =Server= Received JOIN #foo 
+2025/03/20 14:19:19.648364 reconciler.go:205: INFO Received JOIN confirmation for channel #foo
+2025/03/20 14:19:19.648424 reconciler.go:79: INFO Setting JOIN state on channel #foo
+2025/03/20 14:19:19.648476 reconciler.go:118: INFO Channel #foo monitor: join succeeded
+2025/03/20 14:19:19.648492 irc_server_for_test.go:119: INFO =Server= Received NOTICE #foo :test message
+2025/03/20 14:19:19.648537 reconciler.go:131: INFO Channel #foo monitor: context canceled while monitoring
+2025/03/20 14:19:19.648547 irc.go:296: INFO IRC routine asked to terminate
+2025/03/20 14:19:19.648554 irc.go:271: INFO IRC client connected, quitting
+2025/03/20 14:19:19.648562 irc.go:274: INFO Wait for IRC disconnect to complete
+2025/03/20 14:19:19.648600 irc_server_for_test.go:119: INFO =Server= Received QUIT :see ya
+2025/03/20 14:19:19.648614 irc_server_for_test.go:127: INFO =Server= Closing connection: client asked to terminate
+2025/03/20 14:19:19.648674 connection.go:577: INFO irc.Close(): Disconnected from server.
+2025/03/20 14:19:19.648737 irc.go:152: INFO Disconnected from IRC
+2025/03/20 14:19:19.648761 irc.go:282: INFO IRC shutdown complete
+2025/03/20 14:19:19.648786 irc_server_for_test.go:168: INFO =Server= Stopped accepting new connections
 --- PASS: TestSendAlertOnPreJoinedChannel (0.00s)
 === RUN   TestUsePrivmsgToSendAlertOnPreJoinedChannel
-2026/04/21 18:32:19.550698 irc_server_for_test.go:201: INFO =Server= Test server listening on 127.0.0.1:41663
-2026/04/21 18:32:19.550730 irc.go:302: INFO Connecting to IRC 127.0.0.1:41663
-2026/04/21 18:32:19.550742 fake_delayer.go:43: INFO Faking Backoff
-2026/04/21 18:32:19.550748 connection.go:390: INFO irc.Connect(): Connecting to 127.0.0.1:41663.
-2026/04/21 18:32:19.550914 irc_server_for_test.go:171: INFO =Server= New client connected from 127.0.0.1:57436
-2026/04/21 18:32:19.550930 irc.go:310: INFO Connected to IRC server, waiting to establish session
-2026/04/21 18:32:19.550965 irc_server_for_test.go:119: INFO =Server= Received NICK foo
-2026/04/21 18:32:19.550995 irc_server_for_test.go:96: INFO =Server= No handler for command 'NICK', skipping
-2026/04/21 18:32:19.551013 irc_server_for_test.go:119: INFO =Server= Received USER foo 12 * :
-2026/04/21 18:32:19.551090 irc.go:146: INFO Session established
-2026/04/21 18:32:19.551126 reconciler.go:105: INFO Channel #foo monitor: waiting to join
-2026/04/21 18:32:19.551140 fake_delayer.go:43: INFO Faking Backoff
-2026/04/21 18:32:19.551151 reconciler.go:114: INFO Channel #foo monitor: join request sent
-2026/04/21 18:32:19.551230 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #foo
-2026/04/21 18:32:19.551248 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
-2026/04/21 18:32:19.551254 irc_server_for_test.go:119: INFO =Server= Received JOIN #foo 
-2026/04/21 18:32:19.551332 reconciler.go:205: INFO Received JOIN confirmation for channel #foo
-2026/04/21 18:32:19.551348 reconciler.go:79: INFO Setting JOIN state on channel #foo
-2026/04/21 18:32:19.551375 reconciler.go:118: INFO Channel #foo monitor: join succeeded
-2026/04/21 18:32:19.551417 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG #foo :test message
-2026/04/21 18:32:19.551444 reconciler.go:131: INFO Channel #foo monitor: context canceled while monitoring
-2026/04/21 18:32:19.551455 irc.go:296: INFO IRC routine asked to terminate
-2026/04/21 18:32:19.551464 irc.go:271: INFO IRC client connected, quitting
-2026/04/21 18:32:19.551473 irc.go:274: INFO Wait for IRC disconnect to complete
-2026/04/21 18:32:19.551523 irc_server_for_test.go:119: INFO =Server= Received QUIT :see ya
-2026/04/21 18:32:19.551553 irc_server_for_test.go:127: INFO =Server= Closing connection: client asked to terminate
-2026/04/21 18:32:19.551595 connection.go:577: INFO irc.Close(): Disconnected from server.
-2026/04/21 18:32:19.551665 irc.go:152: INFO Disconnected from IRC
-2026/04/21 18:32:19.551696 irc.go:282: INFO IRC shutdown complete
-2026/04/21 18:32:19.551722 irc_server_for_test.go:168: INFO =Server= Stopped accepting new connections
+2025/03/20 14:19:19.648894 irc_server_for_test.go:201: INFO =Server= Test server listening on 127.0.0.1:44879
+2025/03/20 14:19:19.648926 irc.go:302: INFO Connecting to IRC 127.0.0.1:44879
+2025/03/20 14:19:19.648941 fake_delayer.go:43: INFO Faking Backoff
+2025/03/20 14:19:19.648953 connection.go:390: INFO irc.Connect(): Connecting to 127.0.0.1:44879.
+2025/03/20 14:19:19.649114 irc_server_for_test.go:171: INFO =Server= New client connected from 127.0.0.1:45522
+2025/03/20 14:19:19.649202 irc.go:310: INFO Connected to IRC server, waiting to establish session
+2025/03/20 14:19:19.649329 irc_server_for_test.go:119: INFO =Server= Received NICK foo
+2025/03/20 14:19:19.649344 irc_server_for_test.go:96: INFO =Server= No handler for command 'NICK', skipping
+2025/03/20 14:19:19.649352 irc_server_for_test.go:119: INFO =Server= Received USER foo 12 * :
+2025/03/20 14:19:19.649447 irc.go:146: INFO Session established
+2025/03/20 14:19:19.649477 reconciler.go:105: INFO Channel #foo monitor: waiting to join
+2025/03/20 14:19:19.649491 fake_delayer.go:43: INFO Faking Backoff
+2025/03/20 14:19:19.649503 reconciler.go:114: INFO Channel #foo monitor: join request sent
+2025/03/20 14:19:19.649563 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #foo
+2025/03/20 14:19:19.649577 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
+2025/03/20 14:19:19.649585 irc_server_for_test.go:119: INFO =Server= Received JOIN #foo 
+2025/03/20 14:19:19.649645 reconciler.go:205: INFO Received JOIN confirmation for channel #foo
+2025/03/20 14:19:19.649657 reconciler.go:79: INFO Setting JOIN state on channel #foo
+2025/03/20 14:19:19.649698 reconciler.go:118: INFO Channel #foo monitor: join succeeded
+2025/03/20 14:19:19.649731 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG #foo :test message
+2025/03/20 14:19:19.649753 reconciler.go:131: INFO Channel #foo monitor: context canceled while monitoring
+2025/03/20 14:19:19.649764 irc.go:296: INFO IRC routine asked to terminate
+2025/03/20 14:19:19.649773 irc.go:271: INFO IRC client connected, quitting
+2025/03/20 14:19:19.649782 irc.go:274: INFO Wait for IRC disconnect to complete
+2025/03/20 14:19:19.649828 irc_server_for_test.go:119: INFO =Server= Received QUIT :see ya
+2025/03/20 14:19:19.649843 irc_server_for_test.go:127: INFO =Server= Closing connection: client asked to terminate
+2025/03/20 14:19:19.649898 connection.go:577: INFO irc.Close(): Disconnected from server.
+2025/03/20 14:19:19.650003 irc.go:152: INFO Disconnected from IRC
+2025/03/20 14:19:19.650032 irc.go:282: INFO IRC shutdown complete
+2025/03/20 14:19:19.650061 irc_server_for_test.go:168: INFO =Server= Stopped accepting new connections
 --- PASS: TestUsePrivmsgToSendAlertOnPreJoinedChannel (0.00s)
 === RUN   TestSendAlertAndJoinChannel
-2026/04/21 18:32:19.551861 irc_server_for_test.go:201: INFO =Server= Test server listening on 127.0.0.1:38531
-2026/04/21 18:32:19.551904 irc.go:302: INFO Connecting to IRC 127.0.0.1:38531
-2026/04/21 18:32:19.551921 fake_delayer.go:43: INFO Faking Backoff
-2026/04/21 18:32:19.551929 connection.go:390: INFO irc.Connect(): Connecting to 127.0.0.1:38531.
-2026/04/21 18:32:19.552103 irc_server_for_test.go:171: INFO =Server= New client connected from 127.0.0.1:54646
-2026/04/21 18:32:19.552198 irc_server_for_test.go:119: INFO =Server= Received NICK foo
-2026/04/21 18:32:19.552216 irc_server_for_test.go:96: INFO =Server= No handler for command 'NICK', skipping
-2026/04/21 18:32:19.552233 irc_server_for_test.go:119: INFO =Server= Received USER foo 12 * :
-2026/04/21 18:32:19.552114 irc.go:310: INFO Connected to IRC server, waiting to establish session
-2026/04/21 18:32:19.552310 irc.go:146: INFO Session established
-2026/04/21 18:32:19.552355 reconciler.go:105: INFO Channel #foo monitor: waiting to join
-2026/04/21 18:32:19.552372 fake_delayer.go:43: INFO Faking Backoff
-2026/04/21 18:32:19.552386 reconciler.go:114: INFO Channel #foo monitor: join request sent
-2026/04/21 18:32:19.552499 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #foo
-2026/04/21 18:32:19.552525 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
-2026/04/21 18:32:19.552532 irc_server_for_test.go:119: INFO =Server= Received JOIN #foo 
-2026/04/21 18:32:19.552572 reconciler.go:249: INFO Request to JOIN new channel #foobar
-2026/04/21 18:32:19.552600 reconciler.go:105: INFO Channel #foobar monitor: waiting to join
-2026/04/21 18:32:19.552612 fake_delayer.go:43: INFO Faking Backoff
-2026/04/21 18:32:19.552623 reconciler.go:114: INFO Channel #foobar monitor: join request sent
-2026/04/21 18:32:19.552621 reconciler.go:205: INFO Received JOIN confirmation for channel #foo
-2026/04/21 18:32:19.552650 reconciler.go:79: INFO Setting JOIN state on channel #foo
-2026/04/21 18:32:19.552666 reconciler.go:118: INFO Channel #foo monitor: join succeeded
-2026/04/21 18:32:19.552695 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #foobar
-2026/04/21 18:32:19.552717 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
-2026/04/21 18:32:19.552739 irc_server_for_test.go:119: INFO =Server= Received JOIN #foobar 
-2026/04/21 18:32:19.552811 reconciler.go:205: INFO Received JOIN confirmation for channel #foobar
-2026/04/21 18:32:19.552826 reconciler.go:79: INFO Setting JOIN state on channel #foobar
-2026/04/21 18:32:19.552842 reconciler.go:118: INFO Channel #foobar monitor: join succeeded
-2026/04/21 18:32:19.552912 irc_server_for_test.go:119: INFO =Server= Received NOTICE #foobar :test message
-2026/04/21 18:32:19.552943 reconciler.go:131: INFO Channel #foo monitor: context canceled while monitoring
-2026/04/21 18:32:19.552956 reconciler.go:131: INFO Channel #foobar monitor: context canceled while monitoring
-2026/04/21 18:32:19.552952 irc.go:296: INFO IRC routine asked to terminate
-2026/04/21 18:32:19.552965 irc.go:271: INFO IRC client connected, quitting
-2026/04/21 18:32:19.552978 irc.go:274: INFO Wait for IRC disconnect to complete
-2026/04/21 18:32:19.553038 irc_server_for_test.go:119: INFO =Server= Received QUIT :see ya
-2026/04/21 18:32:19.553061 irc_server_for_test.go:127: INFO =Server= Closing connection: client asked to terminate
-2026/04/21 18:32:19.553107 connection.go:577: INFO irc.Close(): Disconnected from server.
-2026/04/21 18:32:19.553166 irc.go:152: INFO Disconnected from IRC
-2026/04/21 18:32:19.553191 irc.go:282: INFO IRC shutdown complete
-2026/04/21 18:32:19.553227 irc_server_for_test.go:168: INFO =Server= Stopped accepting new connections
---- PASS: TestSendAlertAndJoinChannel (0.00s)
+2025/03/20 14:19:19.650179 irc_server_for_test.go:201: INFO =Server= Test server listening on 127.0.0.1:45927
+2025/03/20 14:19:19.650218 irc.go:302: INFO Connecting to IRC 127.0.0.1:45927
+2025/03/20 14:19:19.650243 fake_delayer.go:43: INFO Faking Backoff
+2025/03/20 14:19:19.650258 connection.go:390: INFO irc.Connect(): Connecting to 127.0.0.1:45927.
+2025/03/20 14:19:19.650473 irc_server_for_test.go:171: INFO =Server= New client connected from 127.0.0.1:46230
+2025/03/20 14:19:19.654323 irc.go:310: INFO Connected to IRC server, waiting to establish session
+2025/03/20 14:19:19.654696 irc_server_for_test.go:119: INFO =Server= Received NICK foo
+2025/03/20 14:19:19.654721 irc_server_for_test.go:96: INFO =Server= No handler for command 'NICK', skipping
+2025/03/20 14:19:19.654731 irc_server_for_test.go:119: INFO =Server= Received USER foo 12 * :
+2025/03/20 14:19:19.654842 irc.go:146: INFO Session established
+2025/03/20 14:19:19.654903 reconciler.go:105: INFO Channel #foo monitor: waiting to join
+2025/03/20 14:19:19.654923 fake_delayer.go:43: INFO Faking Backoff
+2025/03/20 14:19:19.654937 reconciler.go:114: INFO Channel #foo monitor: join request sent
+2025/03/20 14:19:19.655002 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #foo
+2025/03/20 14:19:19.655016 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
+2025/03/20 14:19:19.655025 irc_server_for_test.go:119: INFO =Server= Received JOIN #foo 
+2025/03/20 14:19:19.655061 reconciler.go:249: INFO Request to JOIN new channel #foobar
+2025/03/20 14:19:19.655076 reconciler.go:105: INFO Channel #foobar monitor: waiting to join
+2025/03/20 14:19:19.655089 fake_delayer.go:43: INFO Faking Backoff
+2025/03/20 14:19:19.655099 reconciler.go:114: INFO Channel #foobar monitor: join request sent
+2025/03/20 14:19:19.655184 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #foobar
+2025/03/20 14:19:19.655214 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
+2025/03/20 14:19:19.655223 irc_server_for_test.go:119: INFO =Server= Received JOIN #foobar 
+2025/03/20 14:19:19.655292 reconciler.go:205: INFO Received JOIN confirmation for channel #foo
+2025/03/20 14:19:19.655302 reconciler.go:79: INFO Setting JOIN state on channel #foo
+2025/03/20 14:19:19.655327 reconciler.go:205: INFO Received JOIN confirmation for channel #foobar
+2025/03/20 14:19:19.655336 reconciler.go:79: INFO Setting JOIN state on channel #foobar
+2025/03/20 14:19:19.655350 reconciler.go:118: INFO Channel #foo monitor: join succeeded
+2025/03/20 14:19:19.655362 reconciler.go:118: INFO Channel #foobar monitor: join succeeded
+2025/03/20 14:19:19.655418 irc_server_for_test.go:119: INFO =Server= Received NOTICE #foobar :test message
+2025/03/20 14:19:19.655442 reconciler.go:131: INFO Channel #foo monitor: context canceled while monitoring
+2025/03/20 14:19:19.655452 irc.go:296: INFO IRC routine asked to terminate
+2025/03/20 14:19:19.655461 irc.go:271: INFO IRC client connected, quitting
+2025/03/20 14:19:19.655470 irc.go:274: INFO Wait for IRC disconnect to complete
+2025/03/20 14:19:19.655497 reconciler.go:131: INFO Channel #foobar monitor: context canceled while monitoring
+2025/03/20 14:19:19.655523 irc_server_for_test.go:119: INFO =Server= Received QUIT :see ya
+2025/03/20 14:19:19.655542 irc_server_for_test.go:127: INFO =Server= Closing connection: client asked to terminate
+2025/03/20 14:19:19.655632 connection.go:577: INFO irc.Close(): Disconnected from server.
+2025/03/20 14:19:19.655714 irc.go:152: INFO Disconnected from IRC
+2025/03/20 14:19:19.655737 irc.go:282: INFO IRC shutdown complete
+2025/03/20 14:19:19.655762 irc_server_for_test.go:168: INFO =Server= Stopped accepting new connections
+--- PASS: TestSendAlertAndJoinChannel (0.01s)
 === RUN   TestSendAlertDisconnected
-2026/04/21 18:32:19.553351 irc_server_for_test.go:201: INFO =Server= Test server listening on 127.0.0.1:40609
-2026/04/21 18:32:19.553389 irc.go:302: INFO Connecting to IRC 127.0.0.1:40609
-2026/04/21 18:32:19.553406 fake_delayer.go:43: INFO Faking Backoff
-2026/04/21 18:32:19.553414 connection.go:390: INFO irc.Connect(): Connecting to 127.0.0.1:40609.
-2026/04/21 18:32:19.553614 irc.go:310: INFO Connected to IRC server, waiting to establish session
-2026/04/21 18:32:19.553617 irc_server_for_test.go:171: INFO =Server= New client connected from 127.0.0.1:37772
-2026/04/21 18:32:19.553645 irc_server_for_test.go:119: INFO =Server= Received NICK foo
-2026/04/21 18:32:19.553663 irc_server_for_test.go:96: INFO =Server= No handler for command 'NICK', skipping
-2026/04/21 18:32:19.553674 irc_server_for_test.go:119: INFO =Server= Received USER foo 12 * :
-2026/04/21 18:32:19.553682 irc_test.go:294: INFO =Server= Wait before completing session
-2026/04/21 18:32:19.553692 irc_test.go:296: INFO =Server= Completing session
-2026/04/21 18:32:19.553790 irc.go:146: INFO Session established
-2026/04/21 18:32:19.553831 reconciler.go:105: INFO Channel #foo monitor: waiting to join
-2026/04/21 18:32:19.553842 fake_delayer.go:43: INFO Faking Backoff
-2026/04/21 18:32:19.553849 reconciler.go:114: INFO Channel #foo monitor: join request sent
-2026/04/21 18:32:19.553936 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #foo
-2026/04/21 18:32:19.553958 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
-2026/04/21 18:32:19.553964 irc_server_for_test.go:119: INFO =Server= Received JOIN #foo 
-2026/04/21 18:32:19.554030 reconciler.go:205: INFO Received JOIN confirmation for channel #foo
-2026/04/21 18:32:19.554041 reconciler.go:79: INFO Setting JOIN state on channel #foo
-2026/04/21 18:32:19.554073 reconciler.go:118: INFO Channel #foo monitor: join succeeded
-2026/04/21 18:32:19.554095 irc_server_for_test.go:119: INFO =Server= Received NOTICE #foo :connected test message
-2026/04/21 18:32:19.554127 reconciler.go:131: INFO Channel #foo monitor: context canceled while monitoring
-2026/04/21 18:32:19.554132 irc.go:296: INFO IRC routine asked to terminate
-2026/04/21 18:32:19.554145 irc.go:271: INFO IRC client connected, quitting
-2026/04/21 18:32:19.554158 irc.go:274: INFO Wait for IRC disconnect to complete
-2026/04/21 18:32:19.554240 irc_server_for_test.go:119: INFO =Server= Received QUIT :see ya
-2026/04/21 18:32:19.554261 irc_server_for_test.go:127: INFO =Server= Closing connection: client asked to terminate
-2026/04/21 18:32:19.554305 connection.go:577: INFO irc.Close(): Disconnected from server.
-2026/04/21 18:32:19.554385 irc.go:152: INFO Disconnected from IRC
-2026/04/21 18:32:19.554414 irc.go:282: INFO IRC shutdown complete
-2026/04/21 18:32:19.554447 irc_server_for_test.go:168: INFO =Server= Stopped accepting new connections
+2025/03/20 14:19:19.655936 irc_server_for_test.go:201: INFO =Server= Test server listening on 127.0.0.1:38401
+2025/03/20 14:19:19.655983 irc.go:302: INFO Connecting to IRC 127.0.0.1:38401
+2025/03/20 14:19:19.655998 fake_delayer.go:43: INFO Faking Backoff
+2025/03/20 14:19:19.656012 connection.go:390: INFO irc.Connect(): Connecting to 127.0.0.1:38401.
+2025/03/20 14:19:19.656207 irc_server_for_test.go:171: INFO =Server= New client connected from 127.0.0.1:59036
+2025/03/20 14:19:19.656302 irc.go:310: INFO Connected to IRC server, waiting to establish session
+2025/03/20 14:19:19.656402 irc_server_for_test.go:119: INFO =Server= Received NICK foo
+2025/03/20 14:19:19.656417 irc_server_for_test.go:96: INFO =Server= No handler for command 'NICK', skipping
+2025/03/20 14:19:19.656429 irc_server_for_test.go:119: INFO =Server= Received USER foo 12 * :
+2025/03/20 14:19:19.656440 irc_test.go:294: INFO =Server= Wait before completing session
+2025/03/20 14:19:19.656448 irc_test.go:296: INFO =Server= Completing session
+2025/03/20 14:19:19.656525 irc.go:146: INFO Session established
+2025/03/20 14:19:19.656569 reconciler.go:105: INFO Channel #foo monitor: waiting to join
+2025/03/20 14:19:19.656582 fake_delayer.go:43: INFO Faking Backoff
+2025/03/20 14:19:19.656594 reconciler.go:114: INFO Channel #foo monitor: join request sent
+2025/03/20 14:19:19.656649 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #foo
+2025/03/20 14:19:19.656663 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
+2025/03/20 14:19:19.656673 irc_server_for_test.go:119: INFO =Server= Received JOIN #foo 
+2025/03/20 14:19:19.656730 reconciler.go:205: INFO Received JOIN confirmation for channel #foo
+2025/03/20 14:19:19.656741 reconciler.go:79: INFO Setting JOIN state on channel #foo
+2025/03/20 14:19:19.656782 reconciler.go:118: INFO Channel #foo monitor: join succeeded
+2025/03/20 14:19:19.656800 irc_server_for_test.go:119: INFO =Server= Received NOTICE #foo :connected test message
+2025/03/20 14:19:19.656820 reconciler.go:131: INFO Channel #foo monitor: context canceled while monitoring
+2025/03/20 14:19:19.656830 irc.go:296: INFO IRC routine asked to terminate
+2025/03/20 14:19:19.656838 irc.go:271: INFO IRC client connected, quitting
+2025/03/20 14:19:19.656847 irc.go:274: INFO Wait for IRC disconnect to complete
+2025/03/20 14:19:19.656891 irc_server_for_test.go:119: INFO =Server= Received QUIT :see ya
+2025/03/20 14:19:19.656906 irc_server_for_test.go:127: INFO =Server= Closing connection: client asked to terminate
+2025/03/20 14:19:19.656963 connection.go:577: INFO irc.Close(): Disconnected from server.
+2025/03/20 14:19:19.657047 irc.go:152: INFO Disconnected from IRC
+2025/03/20 14:19:19.657069 irc.go:282: INFO IRC shutdown complete
+2025/03/20 14:19:19.657092 irc_server_for_test.go:168: INFO =Server= Stopped accepting new connections
 --- PASS: TestSendAlertDisconnected (0.00s)
 === RUN   TestReconnect
-2026/04/21 18:32:19.554532 irc_server_for_test.go:201: INFO =Server= Test server listening on 127.0.0.1:38611
-2026/04/21 18:32:19.554570 irc.go:302: INFO Connecting to IRC 127.0.0.1:38611
-2026/04/21 18:32:19.554582 fake_delayer.go:43: INFO Faking Backoff
-2026/04/21 18:32:19.554588 connection.go:390: INFO irc.Connect(): Connecting to 127.0.0.1:38611.
-2026/04/21 18:32:19.554760 irc_server_for_test.go:171: INFO =Server= New client connected from 127.0.0.1:53218
-2026/04/21 18:32:19.554783 irc.go:310: INFO Connected to IRC server, waiting to establish session
-2026/04/21 18:32:19.554847 irc_server_for_test.go:119: INFO =Server= Received NICK foo
-2026/04/21 18:32:19.554868 irc_server_for_test.go:96: INFO =Server= No handler for command 'NICK', skipping
-2026/04/21 18:32:19.554878 irc_server_for_test.go:119: INFO =Server= Received USER foo 12 * :
-2026/04/21 18:32:19.554952 irc.go:146: INFO Session established
-2026/04/21 18:32:19.554985 reconciler.go:105: INFO Channel #foo monitor: waiting to join
-2026/04/21 18:32:19.555006 fake_delayer.go:43: INFO Faking Backoff
-2026/04/21 18:32:19.555021 reconciler.go:114: INFO Channel #foo monitor: join request sent
-2026/04/21 18:32:19.555062 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #foo
-2026/04/21 18:32:19.555077 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
-2026/04/21 18:32:19.555096 irc_server_for_test.go:119: INFO =Server= Received JOIN #foo 
-2026/04/21 18:32:19.555167 connection.go:577: INFO irc.Close(): Disconnected from server.
-2026/04/21 18:32:19.555193 irc_server_for_test.go:115: INFO =Server= Could not read from 127.0.0.1:53218: read tcp 127.0.0.1:38611->127.0.0.1:53218: use of closed network connection
-2026/04/21 18:32:19.555242 reconciler.go:205: INFO Received JOIN confirmation for channel #foo
-2026/04/21 18:32:19.555263 reconciler.go:79: INFO Setting JOIN state on channel #foo
-2026/04/21 18:32:19.555283 reconciler.go:118: INFO Channel #foo monitor: join succeeded
-2026/04/21 18:32:19.555294 irc.go:152: INFO Disconnected from IRC
-2026/04/21 18:32:19.555315 reconciler.go:131: INFO Channel #foo monitor: context canceled while monitoring
-2026/04/21 18:32:19.555329 irc.go:302: INFO Connecting to IRC 127.0.0.1:38611
-2026/04/21 18:32:19.555334 fake_delayer.go:43: INFO Faking Backoff
-2026/04/21 18:32:19.555344 connection.go:390: INFO irc.Connect(): Connecting to 127.0.0.1:38611.
-2026/04/21 18:32:19.555504 irc_server_for_test.go:171: INFO =Server= New client connected from 127.0.0.1:53220
-2026/04/21 18:32:19.555564 irc_server_for_test.go:119: INFO =Server= Received NICK foo
-2026/04/21 18:32:19.555613 irc_server_for_test.go:96: INFO =Server= No handler for command 'NICK', skipping
-2026/04/21 18:32:19.555625 irc_server_for_test.go:119: INFO =Server= Received USER foo 12 * :
-2026/04/21 18:32:19.555526 irc.go:310: INFO Connected to IRC server, waiting to establish session
-2026/04/21 18:32:19.555751 irc.go:146: INFO Session established
-2026/04/21 18:32:19.555790 reconciler.go:105: INFO Channel #foo monitor: waiting to join
-2026/04/21 18:32:19.555817 fake_delayer.go:43: INFO Faking Backoff
-2026/04/21 18:32:19.555828 reconciler.go:114: INFO Channel #foo monitor: join request sent
-2026/04/21 18:32:19.555903 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #foo
-2026/04/21 18:32:19.555935 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
-2026/04/21 18:32:19.555943 irc_server_for_test.go:119: INFO =Server= Received JOIN #foo 
-2026/04/21 18:32:19.555988 irc.go:296: INFO IRC routine asked to terminate
-2026/04/21 18:32:19.555993 reconciler.go:122: INFO Channel #foo monitor: context canceled while waiting for join
-2026/04/21 18:32:19.555997 irc.go:271: INFO IRC client connected, quitting
-2026/04/21 18:32:19.556008 irc.go:274: INFO Wait for IRC disconnect to complete
-2026/04/21 18:32:19.556065 irc_server_for_test.go:119: INFO =Server= Received QUIT :see ya
-2026/04/21 18:32:19.556089 irc_server_for_test.go:127: INFO =Server= Closing connection: client asked to terminate
-2026/04/21 18:32:19.556117 reconciler.go:205: INFO Received JOIN confirmation for channel #foo
-2026/04/21 18:32:19.556151 connection.go:577: INFO irc.Close(): Disconnected from server.
-2026/04/21 18:32:19.556158 reconciler.go:79: INFO Setting JOIN state on channel #foo
-2026/04/21 18:32:19.556230 irc.go:152: INFO Disconnected from IRC
-2026/04/21 18:32:19.556250 irc.go:282: INFO IRC shutdown complete
-2026/04/21 18:32:19.556277 irc_server_for_test.go:168: INFO =Server= Stopped accepting new connections
---- PASS: TestReconnect (0.00s)
+2025/03/20 14:19:19.657203 irc_server_for_test.go:201: INFO =Server= Test server listening on 127.0.0.1:33523
+2025/03/20 14:19:19.657237 irc.go:302: INFO Connecting to IRC 127.0.0.1:33523
+2025/03/20 14:19:19.657250 fake_delayer.go:43: INFO Faking Backoff
+2025/03/20 14:19:19.657261 connection.go:390: INFO irc.Connect(): Connecting to 127.0.0.1:33523.
+2025/03/20 14:19:19.657409 irc_server_for_test.go:171: INFO =Server= New client connected from 127.0.0.1:35814
+2025/03/20 14:19:19.657499 irc.go:310: INFO Connected to IRC server, waiting to establish session
+2025/03/20 14:19:19.657594 irc_server_for_test.go:119: INFO =Server= Received NICK foo
+2025/03/20 14:19:19.657608 irc_server_for_test.go:96: INFO =Server= No handler for command 'NICK', skipping
+2025/03/20 14:19:19.657616 irc_server_for_test.go:119: INFO =Server= Received USER foo 12 * :
+2025/03/20 14:19:19.657694 irc.go:146: INFO Session established
+2025/03/20 14:19:19.657723 reconciler.go:105: INFO Channel #foo monitor: waiting to join
+2025/03/20 14:19:19.657736 fake_delayer.go:43: INFO Faking Backoff
+2025/03/20 14:19:19.657759 reconciler.go:114: INFO Channel #foo monitor: join request sent
+2025/03/20 14:19:19.657816 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #foo
+2025/03/20 14:19:19.657829 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
+2025/03/20 14:19:19.657845 irc_server_for_test.go:119: INFO =Server= Received JOIN #foo 
+2025/03/20 14:19:19.657909 irc_server_for_test.go:115: INFO =Server= Could not read from 127.0.0.1:35814: read tcp 127.0.0.1:33523->127.0.0.1:35814: use of closed network connection
+2025/03/20 14:19:19.657946 connection.go:577: INFO irc.Close(): Disconnected from server.
+2025/03/20 14:19:19.658334 reconciler.go:205: INFO Received JOIN confirmation for channel #foo
+2025/03/20 14:19:19.658434 reconciler.go:79: INFO Setting JOIN state on channel #foo
+2025/03/20 14:19:19.658466 irc.go:152: INFO Disconnected from IRC
+2025/03/20 14:19:19.658491 reconciler.go:118: INFO Channel #foo monitor: join succeeded
+2025/03/20 14:19:19.658519 reconciler.go:131: INFO Channel #foo monitor: context canceled while monitoring
+2025/03/20 14:19:19.658538 irc.go:302: INFO Connecting to IRC 127.0.0.1:33523
+2025/03/20 14:19:19.658547 fake_delayer.go:43: INFO Faking Backoff
+2025/03/20 14:19:19.658579 connection.go:390: INFO irc.Connect(): Connecting to 127.0.0.1:33523.
+2025/03/20 14:19:19.662271 irc.go:310: INFO Connected to IRC server, waiting to establish session
+2025/03/20 14:19:19.662592 irc_server_for_test.go:171: INFO =Server= New client connected from 127.0.0.1:35830
+2025/03/20 14:19:19.662639 irc_server_for_test.go:119: INFO =Server= Received NICK foo
+2025/03/20 14:19:19.662658 irc_server_for_test.go:96: INFO =Server= No handler for command 'NICK', skipping
+2025/03/20 14:19:19.662667 irc_server_for_test.go:119: INFO =Server= Received USER foo 12 * :
+2025/03/20 14:19:19.662768 irc.go:146: INFO Session established
+2025/03/20 14:19:19.662814 reconciler.go:105: INFO Channel #foo monitor: waiting to join
+2025/03/20 14:19:19.662831 fake_delayer.go:43: INFO Faking Backoff
+2025/03/20 14:19:19.662845 reconciler.go:114: INFO Channel #foo monitor: join request sent
+2025/03/20 14:19:19.662908 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #foo
+2025/03/20 14:19:19.662923 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
+2025/03/20 14:19:19.662931 irc_server_for_test.go:119: INFO =Server= Received JOIN #foo 
+2025/03/20 14:19:19.662980 reconciler.go:122: INFO Channel #foo monitor: context canceled while waiting for join
+2025/03/20 14:19:19.662992 irc.go:296: INFO IRC routine asked to terminate
+2025/03/20 14:19:19.663000 irc.go:271: INFO IRC client connected, quitting
+2025/03/20 14:19:19.663009 irc.go:274: INFO Wait for IRC disconnect to complete
+2025/03/20 14:19:19.663057 irc_server_for_test.go:119: INFO =Server= Received QUIT :see ya
+2025/03/20 14:19:19.663073 irc_server_for_test.go:127: INFO =Server= Closing connection: client asked to terminate
+2025/03/20 14:19:19.663146 connection.go:577: INFO irc.Close(): Disconnected from server.
+2025/03/20 14:19:19.663689 reconciler.go:205: INFO Received JOIN confirmation for channel #foo
+2025/03/20 14:19:19.663762 reconciler.go:79: INFO Setting JOIN state on channel #foo
+2025/03/20 14:19:19.663795 irc.go:152: INFO Disconnected from IRC
+2025/03/20 14:19:19.663826 irc.go:282: INFO IRC shutdown complete
+2025/03/20 14:19:19.663933 irc_server_for_test.go:168: INFO =Server= Stopped accepting new connections
+--- PASS: TestReconnect (0.01s)
 === RUN   TestConnectErrorRetry
-2026/04/21 18:32:19.556375 irc_server_for_test.go:201: INFO =Server= Test server listening on 127.0.0.1:34905
-2026/04/21 18:32:19.556416 irc.go:302: INFO Connecting to IRC 127.0.0.1:34905
-2026/04/21 18:32:19.556434 fake_delayer.go:43: INFO Faking Backoff
-2026/04/21 18:32:19.556439 fake_delayer.go:45: INFO Waiting StopDelay signal
-2026/04/21 18:32:19.556445 fake_delayer.go:47: INFO Received StopDelay signal
-2026/04/21 18:32:19.556453 connection.go:390: INFO irc.Connect(): Connecting to 127.0.0.1:34905.
-2026/04/21 18:32:19.556618 connection.go:399: INFO irc.Connect(): Performing SSL handshake.
-2026/04/21 18:32:19.556636 irc_server_for_test.go:171: INFO =Server= New client connected from 127.0.0.1:59370
-2026/04/21 18:32:19.556649 irc_server_for_test.go:157: INFO =Server= Closing connection early
-2026/04/21 18:32:19.556932 irc.go:307: ERROR Could not connect to IRC: EOF
-2026/04/21 18:32:19.556946 irc.go:302: INFO Connecting to IRC 127.0.0.1:34905
-2026/04/21 18:32:19.556953 fake_delayer.go:43: INFO Faking Backoff
-2026/04/21 18:32:19.556958 fake_delayer.go:45: INFO Waiting StopDelay signal
-2026/04/21 18:32:19.556972 fake_delayer.go:47: INFO Received StopDelay signal
-2026/04/21 18:32:19.556983 connection.go:390: INFO irc.Connect(): Connecting to 127.0.0.1:34905.
-2026/04/21 18:32:19.557148 irc_server_for_test.go:171: INFO =Server= New client connected from 127.0.0.1:59380
-2026/04/21 18:32:19.557175 irc.go:310: INFO Connected to IRC server, waiting to establish session
-2026/04/21 18:32:19.557234 irc_server_for_test.go:119: INFO =Server= Received NICK foo
-2026/04/21 18:32:19.557254 irc_server_for_test.go:96: INFO =Server= No handler for command 'NICK', skipping
-2026/04/21 18:32:19.557261 irc_server_for_test.go:119: INFO =Server= Received USER foo 12 * :
-2026/04/21 18:32:19.557356 irc.go:146: INFO Session established
-2026/04/21 18:32:19.557406 reconciler.go:105: INFO Channel #foo monitor: waiting to join
-2026/04/21 18:32:19.557423 fake_delayer.go:43: INFO Faking Backoff
-2026/04/21 18:32:19.557437 reconciler.go:114: INFO Channel #foo monitor: join request sent
-2026/04/21 18:32:19.557503 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #foo
-2026/04/21 18:32:19.557520 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
-2026/04/21 18:32:19.557525 irc_server_for_test.go:119: INFO =Server= Received JOIN #foo 
-2026/04/21 18:32:19.557562 irc.go:296: INFO IRC routine asked to terminate
-2026/04/21 18:32:19.557576 irc.go:271: INFO IRC client connected, quitting
-2026/04/21 18:32:19.557563 reconciler.go:122: INFO Channel #foo monitor: context canceled while waiting for join
-2026/04/21 18:32:19.557588 irc.go:274: INFO Wait for IRC disconnect to complete
-2026/04/21 18:32:19.557626 irc_server_for_test.go:119: INFO =Server= Received QUIT :see ya
-2026/04/21 18:32:19.557646 irc_server_for_test.go:127: INFO =Server= Closing connection: client asked to terminate
-2026/04/21 18:32:19.557659 reconciler.go:205: INFO Received JOIN confirmation for channel #foo
-2026/04/21 18:32:19.557676 reconciler.go:79: INFO Setting JOIN state on channel #foo
-2026/04/21 18:32:19.557694 connection.go:577: INFO irc.Close(): Disconnected from server.
-2026/04/21 18:32:19.557767 irc.go:152: INFO Disconnected from IRC
-2026/04/21 18:32:19.557808 irc.go:282: INFO IRC shutdown complete
-2026/04/21 18:32:19.557846 irc_server_for_test.go:168: INFO =Server= Stopped accepting new connections
---- PASS: TestConnectErrorRetry (0.00s)
+2025/03/20 14:19:19.664274 irc_server_for_test.go:201: INFO =Server= Test server listening on 127.0.0.1:38925
+2025/03/20 14:19:19.664368 irc.go:302: INFO Connecting to IRC 127.0.0.1:38925
+2025/03/20 14:19:19.664393 fake_delayer.go:43: INFO Faking Backoff
+2025/03/20 14:19:19.664403 fake_delayer.go:45: INFO Waiting StopDelay signal
+2025/03/20 14:19:19.664412 fake_delayer.go:47: INFO Received StopDelay signal
+2025/03/20 14:19:19.664436 connection.go:390: INFO irc.Connect(): Connecting to 127.0.0.1:38925.
+2025/03/20 14:19:19.664784 connection.go:399: INFO irc.Connect(): Performing SSL handshake.
+2025/03/20 14:19:19.664937 irc_server_for_test.go:171: INFO =Server= New client connected from 127.0.0.1:33614
+2025/03/20 14:19:19.664992 irc_server_for_test.go:157: INFO =Server= Closing connection early
+2025/03/20 14:19:19.665317 irc.go:307: ERROR Could not connect to IRC: EOF
+2025/03/20 14:19:19.665336 irc.go:302: INFO Connecting to IRC 127.0.0.1:38925
+2025/03/20 14:19:19.665344 fake_delayer.go:43: INFO Faking Backoff
+2025/03/20 14:19:19.665353 fake_delayer.go:45: INFO Waiting StopDelay signal
+2025/03/20 14:19:19.665363 fake_delayer.go:47: INFO Received StopDelay signal
+2025/03/20 14:19:19.665377 connection.go:390: INFO irc.Connect(): Connecting to 127.0.0.1:38925.
+2025/03/20 14:19:19.670822 irc.go:310: INFO Connected to IRC server, waiting to establish session
+2025/03/20 14:19:19.671309 irc_server_for_test.go:171: INFO =Server= New client connected from 127.0.0.1:33620
+2025/03/20 14:19:19.671355 irc_server_for_test.go:119: INFO =Server= Received NICK foo
+2025/03/20 14:19:19.671376 irc_server_for_test.go:96: INFO =Server= No handler for command 'NICK', skipping
+2025/03/20 14:19:19.671386 irc_server_for_test.go:119: INFO =Server= Received USER foo 12 * :
+2025/03/20 14:19:19.671527 irc.go:146: INFO Session established
+2025/03/20 14:19:19.671639 reconciler.go:105: INFO Channel #foo monitor: waiting to join
+2025/03/20 14:19:19.671657 fake_delayer.go:43: INFO Faking Backoff
+2025/03/20 14:19:19.671673 reconciler.go:114: INFO Channel #foo monitor: join request sent
+2025/03/20 14:19:19.671732 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #foo
+2025/03/20 14:19:19.671746 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
+2025/03/20 14:19:19.671754 irc_server_for_test.go:119: INFO =Server= Received JOIN #foo 
+2025/03/20 14:19:19.671803 reconciler.go:122: INFO Channel #foo monitor: context canceled while waiting for join
+2025/03/20 14:19:19.671816 irc.go:296: INFO IRC routine asked to terminate
+2025/03/20 14:19:19.671825 irc.go:271: INFO IRC client connected, quitting
+2025/03/20 14:19:19.671837 irc.go:274: INFO Wait for IRC disconnect to complete
+2025/03/20 14:19:19.671889 irc_server_for_test.go:119: INFO =Server= Received QUIT :see ya
+2025/03/20 14:19:19.671909 irc_server_for_test.go:127: INFO =Server= Closing connection: client asked to terminate
+2025/03/20 14:19:19.671994 connection.go:577: INFO irc.Close(): Disconnected from server.
+2025/03/20 14:19:19.672102 reconciler.go:205: INFO Received JOIN confirmation for channel #foo
+2025/03/20 14:19:19.672115 reconciler.go:79: INFO Setting JOIN state on channel #foo
+2025/03/20 14:19:19.672138 irc.go:152: INFO Disconnected from IRC
+2025/03/20 14:19:19.672159 irc.go:282: INFO IRC shutdown complete
+2025/03/20 14:19:19.672191 irc_server_for_test.go:168: INFO =Server= Stopped accepting new connections
+--- PASS: TestConnectErrorRetry (0.01s)
 === RUN   TestIdentify
-2026/04/21 18:32:19.557951 irc_server_for_test.go:201: INFO =Server= Test server listening on 127.0.0.1:36805
-2026/04/21 18:32:19.557986 irc.go:302: INFO Connecting to IRC 127.0.0.1:36805
-2026/04/21 18:32:19.558003 fake_delayer.go:43: INFO Faking Backoff
-2026/04/21 18:32:19.558011 connection.go:390: INFO irc.Connect(): Connecting to 127.0.0.1:36805.
-2026/04/21 18:32:19.558137 irc_server_for_test.go:171: INFO =Server= New client connected from 127.0.0.1:39718
-2026/04/21 18:32:19.558208 irc_server_for_test.go:119: INFO =Server= Received NICK foo
-2026/04/21 18:32:19.558251 irc_server_for_test.go:119: INFO =Server= Received USER foo 12 * :
-2026/04/21 18:32:19.558270 irc.go:167: INFO Received NOTICE from NickServ: This nickname is registered. Please choose a different nickname, or identify yourself ktnxbye.
-2026/04/21 18:32:19.558170 irc.go:310: INFO Connected to IRC server, waiting to establish session
-2026/04/21 18:32:19.558320 irc.go:191: INFO Handling NickServ request to IDENTIFY
-2026/04/21 18:32:19.558366 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG NickServ :IDENTIFY nickpassword
-2026/04/21 18:32:19.558383 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
-2026/04/21 18:32:19.558350 irc.go:146: INFO Session established
-2026/04/21 18:32:19.558423 irc.go:226: INFO Waiting for NickServ to notice us and issue an identify request
-2026/04/21 18:32:19.558445 reconciler.go:105: INFO Channel #foo monitor: waiting to join
-2026/04/21 18:32:19.558460 fake_delayer.go:43: INFO Faking Backoff
-2026/04/21 18:32:19.558473 reconciler.go:114: INFO Channel #foo monitor: join request sent
-2026/04/21 18:32:19.558544 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #foo
-2026/04/21 18:32:19.558579 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
-2026/04/21 18:32:19.558590 irc_server_for_test.go:119: INFO =Server= Received JOIN #foo 
-2026/04/21 18:32:19.558639 reconciler.go:122: INFO Channel #foo monitor: context canceled while waiting for join
-2026/04/21 18:32:19.558639 irc.go:296: INFO IRC routine asked to terminate
-2026/04/21 18:32:19.558659 irc.go:271: INFO IRC client connected, quitting
-2026/04/21 18:32:19.558671 irc.go:274: INFO Wait for IRC disconnect to complete
-2026/04/21 18:32:19.558695 reconciler.go:205: INFO Received JOIN confirmation for channel #foo
-2026/04/21 18:32:19.558708 reconciler.go:79: INFO Setting JOIN state on channel #foo
-2026/04/21 18:32:19.558712 irc_server_for_test.go:119: INFO =Server= Received QUIT :see ya
-2026/04/21 18:32:19.558726 irc_server_for_test.go:127: INFO =Server= Closing connection: client asked to terminate
-2026/04/21 18:32:19.558785 connection.go:577: INFO irc.Close(): Disconnected from server.
-2026/04/21 18:32:19.558881 irc.go:152: INFO Disconnected from IRC
-2026/04/21 18:32:19.558906 irc.go:282: INFO IRC shutdown complete
-2026/04/21 18:32:19.558932 irc_server_for_test.go:168: INFO =Server= Stopped accepting new connections
+2025/03/20 14:19:19.672375 irc_server_for_test.go:201: INFO =Server= Test server listening on 127.0.0.1:36181
+2025/03/20 14:19:19.672465 irc.go:302: INFO Connecting to IRC 127.0.0.1:36181
+2025/03/20 14:19:19.672482 fake_delayer.go:43: INFO Faking Backoff
+2025/03/20 14:19:19.672503 connection.go:390: INFO irc.Connect(): Connecting to 127.0.0.1:36181.
+2025/03/20 14:19:19.672755 irc.go:310: INFO Connected to IRC server, waiting to establish session
+2025/03/20 14:19:19.672880 irc_server_for_test.go:171: INFO =Server= New client connected from 127.0.0.1:57678
+2025/03/20 14:19:19.672912 irc_server_for_test.go:119: INFO =Server= Received NICK foo
+2025/03/20 14:19:19.672954 irc_server_for_test.go:119: INFO =Server= Received USER foo 12 * :
+2025/03/20 14:19:19.673040 irc.go:167: INFO Received NOTICE from NickServ: This nickname is registered. Please choose a different nickname, or identify yourself ktnxbye.
+2025/03/20 14:19:19.673095 irc.go:191: INFO Handling NickServ request to IDENTIFY
+2025/03/20 14:19:19.673135 irc.go:146: INFO Session established
+2025/03/20 14:19:19.673177 irc.go:226: INFO Waiting for NickServ to notice us and issue an identify request
+2025/03/20 14:19:19.673196 reconciler.go:105: INFO Channel #foo monitor: waiting to join
+2025/03/20 14:19:19.673209 fake_delayer.go:43: INFO Faking Backoff
+2025/03/20 14:19:19.673222 reconciler.go:114: INFO Channel #foo monitor: join request sent
+2025/03/20 14:19:19.673279 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG NickServ :IDENTIFY nickpassword
+2025/03/20 14:19:19.673292 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
+2025/03/20 14:19:19.673301 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #foo
+2025/03/20 14:19:19.673311 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
+2025/03/20 14:19:19.673323 irc_server_for_test.go:119: INFO =Server= Received JOIN #foo 
+2025/03/20 14:19:19.673356 reconciler.go:122: INFO Channel #foo monitor: context canceled while waiting for join
+2025/03/20 14:19:19.673368 irc.go:296: INFO IRC routine asked to terminate
+2025/03/20 14:19:19.673376 irc.go:271: INFO IRC client connected, quitting
+2025/03/20 14:19:19.673385 irc.go:274: INFO Wait for IRC disconnect to complete
+2025/03/20 14:19:19.673598 irc_server_for_test.go:119: INFO =Server= Received QUIT :see ya
+2025/03/20 14:19:19.673617 irc_server_for_test.go:127: INFO =Server= Closing connection: client asked to terminate
+2025/03/20 14:19:19.673682 connection.go:577: INFO irc.Close(): Disconnected from server.
+2025/03/20 14:19:19.673749 reconciler.go:205: INFO Received JOIN confirmation for channel #foo
+2025/03/20 14:19:19.673760 reconciler.go:79: INFO Setting JOIN state on channel #foo
+2025/03/20 14:19:19.673780 irc.go:152: INFO Disconnected from IRC
+2025/03/20 14:19:19.673800 irc.go:282: INFO IRC shutdown complete
+2025/03/20 14:19:19.673824 irc_server_for_test.go:168: INFO =Server= Stopped accepting new connections
 --- PASS: TestIdentify (0.00s)
 === RUN   TestGhost
-2026/04/21 18:32:19.559055 irc_server_for_test.go:201: INFO =Server= Test server listening on 127.0.0.1:36685
-2026/04/21 18:32:19.559098 irc.go:302: INFO Connecting to IRC 127.0.0.1:36685
-2026/04/21 18:32:19.559115 fake_delayer.go:43: INFO Faking Backoff
-2026/04/21 18:32:19.559125 connection.go:390: INFO irc.Connect(): Connecting to 127.0.0.1:36685.
-2026/04/21 18:32:19.559270 irc_server_for_test.go:171: INFO =Server= New client connected from 127.0.0.1:50544
-2026/04/21 18:32:19.559298 irc.go:310: INFO Connected to IRC server, waiting to establish session
-2026/04/21 18:32:19.559353 irc_server_for_test.go:119: INFO =Server= Received NICK foo
-2026/04/21 18:32:19.559374 irc_server_for_test.go:119: INFO =Server= Received USER foo 12 * :
-2026/04/21 18:32:19.559459 irc.go:57: INFO Received: ':example.com 433 * foo :nick in use'
-2026/04/21 18:32:19.559517 irc_server_for_test.go:119: INFO =Server= Received NICK foo^
-2026/04/21 18:32:19.559596 irc.go:146: INFO Session established
-2026/04/21 18:32:19.559628 irc.go:206: INFO My nick is 'foo^', sending GHOST to NickServ to get 'foo'
-2026/04/21 18:32:19.559643 irc.go:212: INFO Changing nick to 'foo'
-2026/04/21 18:32:19.559655 irc.go:226: INFO Waiting for NickServ to notice us and issue an identify request
-2026/04/21 18:32:19.559668 reconciler.go:105: INFO Channel #foo monitor: waiting to join
-2026/04/21 18:32:19.559684 fake_delayer.go:43: INFO Faking Backoff
-2026/04/21 18:32:19.559693 reconciler.go:114: INFO Channel #foo monitor: join request sent
-2026/04/21 18:32:19.559712 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG NickServ :GHOST foo nickpassword
-2026/04/21 18:32:19.559729 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
-2026/04/21 18:32:19.559737 irc_server_for_test.go:119: INFO =Server= Received NICK foo
-2026/04/21 18:32:19.559755 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #foo
-2026/04/21 18:32:19.559767 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
-2026/04/21 18:32:19.559773 irc_server_for_test.go:119: INFO =Server= Received JOIN #foo 
-2026/04/21 18:32:19.559825 reconciler.go:122: INFO Channel #foo monitor: context canceled while waiting for join
-2026/04/21 18:32:19.559841 irc.go:296: INFO IRC routine asked to terminate
-2026/04/21 18:32:19.559849 irc.go:271: INFO IRC client connected, quitting
-2026/04/21 18:32:19.559856 irc.go:274: INFO Wait for IRC disconnect to complete
-2026/04/21 18:32:19.559913 irc_server_for_test.go:119: INFO =Server= Received QUIT :see ya
-2026/04/21 18:32:19.559937 irc_server_for_test.go:127: INFO =Server= Closing connection: client asked to terminate
-2026/04/21 18:32:19.559995 connection.go:577: INFO irc.Close(): Disconnected from server.
-2026/04/21 18:32:19.560059 irc.go:152: INFO Disconnected from IRC
-2026/04/21 18:32:19.560099 irc.go:282: INFO IRC shutdown complete
-2026/04/21 18:32:19.560137 irc_server_for_test.go:168: INFO =Server= Stopped accepting new connections
+2025/03/20 14:19:19.673940 irc_server_for_test.go:201: INFO =Server= Test server listening on 127.0.0.1:33561
+2025/03/20 14:19:19.674061 irc.go:302: INFO Connecting to IRC 127.0.0.1:33561
+2025/03/20 14:19:19.674078 fake_delayer.go:43: INFO Faking Backoff
+2025/03/20 14:19:19.674103 connection.go:390: INFO irc.Connect(): Connecting to 127.0.0.1:33561.
+2025/03/20 14:19:19.674285 irc_server_for_test.go:171: INFO =Server= New client connected from 127.0.0.1:44286
+2025/03/20 14:19:19.674374 irc.go:310: INFO Connected to IRC server, waiting to establish session
+2025/03/20 14:19:19.674480 irc_server_for_test.go:119: INFO =Server= Received NICK foo
+2025/03/20 14:19:19.674495 irc_server_for_test.go:119: INFO =Server= Received USER foo 12 * :
+2025/03/20 14:19:19.674614 irc.go:57: INFO Received: ':example.com 433 * foo :nick in use'
+2025/03/20 14:19:19.674655 irc_server_for_test.go:119: INFO =Server= Received NICK foo^
+2025/03/20 14:19:19.674717 irc.go:146: INFO Session established
+2025/03/20 14:19:19.674741 irc.go:206: INFO My nick is 'foo^', sending GHOST to NickServ to get 'foo'
+2025/03/20 14:19:19.674757 irc.go:212: INFO Changing nick to 'foo'
+2025/03/20 14:19:19.674767 irc.go:226: INFO Waiting for NickServ to notice us and issue an identify request
+2025/03/20 14:19:19.674785 reconciler.go:105: INFO Channel #foo monitor: waiting to join
+2025/03/20 14:19:19.674799 fake_delayer.go:43: INFO Faking Backoff
+2025/03/20 14:19:19.674810 reconciler.go:114: INFO Channel #foo monitor: join request sent
+2025/03/20 14:19:19.674906 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG NickServ :GHOST foo nickpassword
+2025/03/20 14:19:19.674919 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
+2025/03/20 14:19:19.674928 irc_server_for_test.go:119: INFO =Server= Received NICK foo
+2025/03/20 14:19:19.674937 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #foo
+2025/03/20 14:19:19.674946 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
+2025/03/20 14:19:19.674953 irc_server_for_test.go:119: INFO =Server= Received JOIN #foo 
+2025/03/20 14:19:19.674985 reconciler.go:122: INFO Channel #foo monitor: context canceled while waiting for join
+2025/03/20 14:19:19.674997 irc.go:296: INFO IRC routine asked to terminate
+2025/03/20 14:19:19.675005 irc.go:271: INFO IRC client connected, quitting
+2025/03/20 14:19:19.675015 irc.go:274: INFO Wait for IRC disconnect to complete
+2025/03/20 14:19:19.675238 irc_server_for_test.go:119: INFO =Server= Received QUIT :see ya
+2025/03/20 14:19:19.675257 irc_server_for_test.go:127: INFO =Server= Closing connection: client asked to terminate
+2025/03/20 14:19:19.675333 connection.go:577: INFO irc.Close(): Disconnected from server.
+2025/03/20 14:19:19.675405 irc.go:152: INFO Disconnected from IRC
+2025/03/20 14:19:19.675428 irc.go:282: INFO IRC shutdown complete
+2025/03/20 14:19:19.675457 irc_server_for_test.go:168: INFO =Server= Stopped accepting new connections
 --- PASS: TestGhost (0.00s)
 === RUN   TestStopRunningWhenHalfConnected
-2026/04/21 18:32:19.560265 irc_server_for_test.go:201: INFO =Server= Test server listening on 127.0.0.1:33467
-2026/04/21 18:32:19.560301 irc.go:302: INFO Connecting to IRC 127.0.0.1:33467
-2026/04/21 18:32:19.560318 fake_delayer.go:43: INFO Faking Backoff
-2026/04/21 18:32:19.560329 connection.go:390: INFO irc.Connect(): Connecting to 127.0.0.1:33467.
-2026/04/21 18:32:19.560464 irc_server_for_test.go:171: INFO =Server= New client connected from 127.0.0.1:43472
-2026/04/21 18:32:19.560554 irc_server_for_test.go:119: INFO =Server= Received NICK foo
-2026/04/21 18:32:19.560576 irc_server_for_test.go:96: INFO =Server= No handler for command 'NICK', skipping
-2026/04/21 18:32:19.560586 irc_server_for_test.go:119: INFO =Server= Received USER foo 12 * :
-2026/04/21 18:32:19.560596 irc_test.go:591: INFO =Server= NOT completing session
-2026/04/21 18:32:19.560491 irc.go:310: INFO Connected to IRC server, waiting to establish session
-2026/04/21 18:32:19.560610 connection.go:577: INFO irc.Close(): Disconnected from server.
-2026/04/21 18:32:19.560612 irc.go:323: INFO IRC routine asked to terminate
-2026/04/21 18:32:19.560644 irc.go:282: INFO IRC shutdown complete
-2026/04/21 18:32:19.560674 connection.go:466: ERROR irc.recv(): read tcp 127.0.0.1:43472->127.0.0.1:33467: use of closed network connection
-2026/04/21 18:32:19.560706 irc_server_for_test.go:113: INFO =Server= Client 127.0.0.1:43472 disconnected
-2026/04/21 18:32:19.560763 irc_server_for_test.go:168: INFO =Server= Stopped accepting new connections
+2025/03/20 14:19:19.675558 irc_server_for_test.go:201: INFO =Server= Test server listening on 127.0.0.1:39813
+2025/03/20 14:19:19.675590 irc.go:302: INFO Connecting to IRC 127.0.0.1:39813
+2025/03/20 14:19:19.675604 fake_delayer.go:43: INFO Faking Backoff
+2025/03/20 14:19:19.675617 connection.go:390: INFO irc.Connect(): Connecting to 127.0.0.1:39813.
+2025/03/20 14:19:19.675755 irc_server_for_test.go:171: INFO =Server= New client connected from 127.0.0.1:49184
+2025/03/20 14:19:19.675819 irc.go:310: INFO Connected to IRC server, waiting to establish session
+2025/03/20 14:19:19.675919 irc_server_for_test.go:119: INFO =Server= Received NICK foo
+2025/03/20 14:19:19.675945 irc_server_for_test.go:96: INFO =Server= No handler for command 'NICK', skipping
+2025/03/20 14:19:19.675956 irc_server_for_test.go:119: INFO =Server= Received USER foo 12 * :
+2025/03/20 14:19:19.675967 irc_test.go:591: INFO =Server= NOT completing session
+2025/03/20 14:19:19.675984 irc.go:323: INFO IRC routine asked to terminate
+2025/03/20 14:19:19.675993 irc.go:282: INFO IRC shutdown complete
+2025/03/20 14:19:19.676018 connection.go:577: INFO irc.Close(): Disconnected from server.
+2025/03/20 14:19:19.676060 connection.go:466: ERROR irc.recv(): read tcp 127.0.0.1:49184->127.0.0.1:39813: use of closed network connection
+2025/03/20 14:19:19.676086 irc.go:152: INFO Disconnected from IRC
+2025/03/20 14:19:19.676117 irc_server_for_test.go:113: INFO =Server= Client 127.0.0.1:49184 disconnected
+2025/03/20 14:19:19.676163 irc_server_for_test.go:168: INFO =Server= Stopped accepting new connections
 --- PASS: TestStopRunningWhenHalfConnected (0.00s)
-2026/04/21 18:32:19.560701 irc.go:152: INFO Disconnected from IRC
 === RUN   TestPreJoinChannels
-2026/04/21 18:32:19.560861 irc_server_for_test.go:201: INFO =Server= Test server listening on 127.0.0.1:45593
-2026/04/21 18:32:19.560898 connection.go:390: INFO irc.Connect(): Connecting to 127.0.0.1:45593.
-2026/04/21 18:32:19.561067 irc_server_for_test.go:171: INFO =Server= New client connected from 127.0.0.1:57004
-2026/04/21 18:32:19.561101 irc_server_for_test.go:119: INFO =Server= Received NICK foo
-2026/04/21 18:32:19.561114 irc_server_for_test.go:96: INFO =Server= No handler for command 'NICK', skipping
-2026/04/21 18:32:19.561130 irc_server_for_test.go:119: INFO =Server= Received USER foo 12 * :
-2026/04/21 18:32:19.561215 reconciler.go:105: INFO Channel #baz monitor: waiting to join
-2026/04/21 18:32:19.561234 fake_delayer.go:43: INFO Faking Backoff
-2026/04/21 18:32:19.561243 reconciler.go:114: INFO Channel #baz monitor: join request sent
-2026/04/21 18:32:19.561281 reconciler.go:105: INFO Channel #foo monitor: waiting to join
-2026/04/21 18:32:19.561289 reconciler.go:105: INFO Channel #bar monitor: waiting to join
-2026/04/21 18:32:19.561303 fake_delayer.go:43: INFO Faking Backoff
-2026/04/21 18:32:19.561312 reconciler.go:114: INFO Channel #bar monitor: join request sent
-2026/04/21 18:32:19.561336 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #baz
-2026/04/21 18:32:19.561354 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
-2026/04/21 18:32:19.561375 irc_server_for_test.go:119: INFO =Server= Received JOIN #baz 
-2026/04/21 18:32:19.561407 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #bar
-2026/04/21 18:32:19.561421 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
-2026/04/21 18:32:19.561297 fake_delayer.go:43: INFO Faking Backoff
-2026/04/21 18:32:19.561427 irc_server_for_test.go:119: INFO =Server= Received JOIN #bar 
-2026/04/21 18:32:19.561434 reconciler.go:114: INFO Channel #foo monitor: join request sent
-2026/04/21 18:32:19.561459 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #foo
-2026/04/21 18:32:19.561472 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
-2026/04/21 18:32:19.561489 irc_server_for_test.go:119: INFO =Server= Received JOIN #foo 
-2026/04/21 18:32:19.561538 reconciler.go:205: INFO Received JOIN confirmation for channel #baz
-2026/04/21 18:32:19.561565 reconciler.go:79: INFO Setting JOIN state on channel #baz
-2026/04/21 18:32:19.561587 reconciler.go:205: INFO Received JOIN confirmation for channel #bar
-2026/04/21 18:32:19.561598 reconciler.go:79: INFO Setting JOIN state on channel #bar
-2026/04/21 18:32:19.561614 reconciler.go:205: INFO Received JOIN confirmation for channel #foo
-2026/04/21 18:32:19.561623 reconciler.go:79: INFO Setting JOIN state on channel #foo
-2026/04/21 18:32:19.561550 irc_server_for_test.go:119: INFO =Server= Received QUIT :see ya
-2026/04/21 18:32:19.561641 irc_server_for_test.go:127: INFO =Server= Closing connection: client asked to terminate
-2026/04/21 18:32:19.561655 reconciler.go:118: INFO Channel #foo monitor: join succeeded
-2026/04/21 18:32:19.561638 reconciler.go:118: INFO Channel #bar monitor: join succeeded
-2026/04/21 18:32:19.561645 reconciler.go:118: INFO Channel #baz monitor: join succeeded
-2026/04/21 18:32:19.561692 connection.go:577: INFO irc.Close(): Disconnected from server.
-2026/04/21 18:32:19.561783 reconciler.go:131: INFO Channel #foo monitor: context canceled while monitoring
-2026/04/21 18:32:19.561797 reconciler.go:131: INFO Channel #baz monitor: context canceled while monitoring
-2026/04/21 18:32:19.561803 reconciler.go:131: INFO Channel #bar monitor: context canceled while monitoring
-2026/04/21 18:32:19.561821 irc_server_for_test.go:168: INFO =Server= Stopped accepting new connections
+2025/03/20 14:19:19.676250 irc_server_for_test.go:201: INFO =Server= Test server listening on 127.0.0.1:45905
+2025/03/20 14:19:19.676274 connection.go:390: INFO irc.Connect(): Connecting to 127.0.0.1:45905.
+2025/03/20 14:19:19.676398 irc_server_for_test.go:171: INFO =Server= New client connected from 127.0.0.1:50948
+2025/03/20 14:19:19.676551 irc_server_for_test.go:119: INFO =Server= Received NICK foo
+2025/03/20 14:19:19.676565 irc_server_for_test.go:96: INFO =Server= No handler for command 'NICK', skipping
+2025/03/20 14:19:19.676573 irc_server_for_test.go:119: INFO =Server= Received USER foo 12 * :
+2025/03/20 14:19:19.676666 reconciler.go:105: INFO Channel #baz monitor: waiting to join
+2025/03/20 14:19:19.676681 fake_delayer.go:43: INFO Faking Backoff
+2025/03/20 14:19:19.676693 reconciler.go:114: INFO Channel #baz monitor: join request sent
+2025/03/20 14:19:19.676733 reconciler.go:105: INFO Channel #foo monitor: waiting to join
+2025/03/20 14:19:19.676746 fake_delayer.go:43: INFO Faking Backoff
+2025/03/20 14:19:19.676757 reconciler.go:114: INFO Channel #foo monitor: join request sent
+2025/03/20 14:19:19.676797 reconciler.go:105: INFO Channel #bar monitor: waiting to join
+2025/03/20 14:19:19.676869 fake_delayer.go:43: INFO Faking Backoff
+2025/03/20 14:19:19.676879 reconciler.go:114: INFO Channel #bar monitor: join request sent
+2025/03/20 14:19:19.676935 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #baz
+2025/03/20 14:19:19.676949 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
+2025/03/20 14:19:19.676957 irc_server_for_test.go:119: INFO =Server= Received JOIN #baz 
+2025/03/20 14:19:19.676981 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #foo
+2025/03/20 14:19:19.676991 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
+2025/03/20 14:19:19.676998 irc_server_for_test.go:119: INFO =Server= Received JOIN #foo 
+2025/03/20 14:19:19.677018 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #bar
+2025/03/20 14:19:19.677042 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
+2025/03/20 14:19:19.677049 irc_server_for_test.go:119: INFO =Server= Received JOIN #bar 
+2025/03/20 14:19:19.677245 irc_server_for_test.go:119: INFO =Server= Received QUIT :see ya
+2025/03/20 14:19:19.677261 irc_server_for_test.go:127: INFO =Server= Closing connection: client asked to terminate
+2025/03/20 14:19:19.677406 connection.go:577: INFO irc.Close(): Disconnected from server.
+2025/03/20 14:19:19.677781 reconciler.go:205: INFO Received JOIN confirmation for channel #baz
+2025/03/20 14:19:19.677793 reconciler.go:79: INFO Setting JOIN state on channel #baz
+2025/03/20 14:19:19.677828 reconciler.go:118: INFO Channel #baz monitor: join succeeded
+2025/03/20 14:19:19.677850 reconciler.go:122: INFO Channel #foo monitor: context canceled while waiting for join
+2025/03/20 14:19:19.677860 reconciler.go:131: INFO Channel #baz monitor: context canceled while monitoring
+2025/03/20 14:19:19.677883 reconciler.go:122: INFO Channel #bar monitor: context canceled while waiting for join
+2025/03/20 14:19:19.677924 irc_server_for_test.go:168: INFO =Server= Stopped accepting new connections
 --- PASS: TestPreJoinChannels (0.00s)
 === RUN   TestKeepJoining
-2026/04/21 18:32:19.561909 irc_server_for_test.go:201: INFO =Server= Test server listening on 127.0.0.1:39833
-2026/04/21 18:32:19.561934 connection.go:390: INFO irc.Connect(): Connecting to 127.0.0.1:39833.
-2026/04/21 18:32:19.562097 irc_server_for_test.go:171: INFO =Server= New client connected from 127.0.0.1:40372
-2026/04/21 18:32:19.562132 irc_server_for_test.go:119: INFO =Server= Received NICK foo
-2026/04/21 18:32:19.562149 irc_server_for_test.go:96: INFO =Server= No handler for command 'NICK', skipping
-2026/04/21 18:32:19.562159 irc_server_for_test.go:119: INFO =Server= Received USER foo 12 * :
-2026/04/21 18:32:19.562242 reconciler.go:105: INFO Channel #foo monitor: waiting to join
-2026/04/21 18:32:19.562271 fake_delayer.go:43: INFO Faking Backoff
-2026/04/21 18:32:19.562281 reconciler.go:114: INFO Channel #foo monitor: join request sent
-2026/04/21 18:32:19.562328 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #foo
-2026/04/21 18:32:19.562353 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
-2026/04/21 18:32:19.562365 irc_server_for_test.go:119: INFO =Server= Received JOIN #foo 
-2026/04/21 18:32:19.562385 reconciler.go:120: WARN Channel #foo monitor: could not join after 10 seconds, will retry
-2026/04/21 18:32:19.562396 reconciler.go:105: INFO Channel #foo monitor: waiting to join
-2026/04/21 18:32:19.562402 fake_delayer.go:43: INFO Faking Backoff
-2026/04/21 18:32:19.562414 reconciler.go:114: INFO Channel #foo monitor: join request sent
-2026/04/21 18:32:19.562479 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #foo
-2026/04/21 18:32:19.562498 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
-2026/04/21 18:32:19.562504 irc_server_for_test.go:119: INFO =Server= Received JOIN #foo 
-2026/04/21 18:32:19.562535 reconciler.go:120: WARN Channel #foo monitor: could not join after 10 seconds, will retry
-2026/04/21 18:32:19.562546 reconciler.go:105: INFO Channel #foo monitor: waiting to join
-2026/04/21 18:32:19.562551 fake_delayer.go:43: INFO Faking Backoff
-2026/04/21 18:32:19.562559 reconciler.go:114: INFO Channel #foo monitor: join request sent
-2026/04/21 18:32:19.562611 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #foo
-2026/04/21 18:32:19.562638 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
-2026/04/21 18:32:19.562644 irc_server_for_test.go:119: INFO =Server= Received JOIN #foo 
-2026/04/21 18:32:19.562713 reconciler.go:205: INFO Received JOIN confirmation for channel #foo
-2026/04/21 18:32:19.562729 reconciler.go:79: INFO Setting JOIN state on channel #foo
-2026/04/21 18:32:19.562729 irc_server_for_test.go:119: INFO =Server= Received QUIT :see ya
-2026/04/21 18:32:19.562741 reconciler.go:118: INFO Channel #foo monitor: join succeeded
-2026/04/21 18:32:19.562743 irc_server_for_test.go:127: INFO =Server= Closing connection: client asked to terminate
-2026/04/21 18:32:19.562811 connection.go:577: INFO irc.Close(): Disconnected from server.
-2026/04/21 18:32:19.562882 reconciler.go:131: INFO Channel #foo monitor: context canceled while monitoring
-2026/04/21 18:32:19.562917 irc_server_for_test.go:168: INFO =Server= Stopped accepting new connections
---- PASS: TestKeepJoining (0.00s)
+2025/03/20 14:19:19.678489 irc_server_for_test.go:201: INFO =Server= Test server listening on 127.0.0.1:32879
+2025/03/20 14:19:19.678578 connection.go:390: INFO irc.Connect(): Connecting to 127.0.0.1:32879.
+2025/03/20 14:19:19.678926 irc_server_for_test.go:171: INFO =Server= New client connected from 127.0.0.1:45110
+2025/03/20 14:19:19.686564 irc_server_for_test.go:119: INFO =Server= Received NICK foo
+2025/03/20 14:19:19.686687 irc_server_for_test.go:96: INFO =Server= No handler for command 'NICK', skipping
+2025/03/20 14:19:19.686699 irc_server_for_test.go:119: INFO =Server= Received USER foo 12 * :
+2025/03/20 14:19:19.687140 reconciler.go:105: INFO Channel #foo monitor: waiting to join
+2025/03/20 14:19:19.687165 fake_delayer.go:43: INFO Faking Backoff
+2025/03/20 14:19:19.687181 reconciler.go:114: INFO Channel #foo monitor: join request sent
+2025/03/20 14:19:19.687262 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #foo
+2025/03/20 14:19:19.687278 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
+2025/03/20 14:19:19.687286 irc_server_for_test.go:119: INFO =Server= Received JOIN #foo 
+2025/03/20 14:19:19.687317 reconciler.go:120: WARN Channel #foo monitor: could not join after 10 seconds, will retry
+2025/03/20 14:19:19.687327 reconciler.go:105: INFO Channel #foo monitor: waiting to join
+2025/03/20 14:19:19.687335 fake_delayer.go:43: INFO Faking Backoff
+2025/03/20 14:19:19.687350 reconciler.go:114: INFO Channel #foo monitor: join request sent
+2025/03/20 14:19:19.687406 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #foo
+2025/03/20 14:19:19.687421 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
+2025/03/20 14:19:19.687429 irc_server_for_test.go:119: INFO =Server= Received JOIN #foo 
+2025/03/20 14:19:19.687444 reconciler.go:120: WARN Channel #foo monitor: could not join after 10 seconds, will retry
+2025/03/20 14:19:19.687452 reconciler.go:105: INFO Channel #foo monitor: waiting to join
+2025/03/20 14:19:19.687458 fake_delayer.go:43: INFO Faking Backoff
+2025/03/20 14:19:19.687468 reconciler.go:114: INFO Channel #foo monitor: join request sent
+2025/03/20 14:19:19.687518 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #foo
+2025/03/20 14:19:19.687531 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
+2025/03/20 14:19:19.687538 irc_server_for_test.go:119: INFO =Server= Received JOIN #foo 
+2025/03/20 14:19:19.687604 irc_server_for_test.go:119: INFO =Server= Received QUIT :see ya
+2025/03/20 14:19:19.687634 irc_server_for_test.go:127: INFO =Server= Closing connection: client asked to terminate
+2025/03/20 14:19:19.687752 connection.go:577: INFO irc.Close(): Disconnected from server.
+2025/03/20 14:19:19.687868 reconciler.go:205: INFO Received JOIN confirmation for channel #foo
+2025/03/20 14:19:19.687879 reconciler.go:79: INFO Setting JOIN state on channel #foo
+2025/03/20 14:19:19.687903 reconciler.go:118: INFO Channel #foo monitor: join succeeded
+2025/03/20 14:19:19.687918 reconciler.go:131: INFO Channel #foo monitor: context canceled while monitoring
+2025/03/20 14:19:19.687945 irc_server_for_test.go:168: INFO =Server= Stopped accepting new connections
+--- PASS: TestKeepJoining (0.01s)
 === RUN   TestKickRejoin
-2026/04/21 18:32:19.563015 irc_server_for_test.go:201: INFO =Server= Test server listening on 127.0.0.1:41829
-2026/04/21 18:32:19.563052 connection.go:390: INFO irc.Connect(): Connecting to 127.0.0.1:41829.
-2026/04/21 18:32:19.563229 irc_server_for_test.go:171: INFO =Server= New client connected from 127.0.0.1:33260
-2026/04/21 18:32:19.563290 irc_server_for_test.go:119: INFO =Server= Received NICK foo
-2026/04/21 18:32:19.563307 irc_server_for_test.go:96: INFO =Server= No handler for command 'NICK', skipping
-2026/04/21 18:32:19.563315 irc_server_for_test.go:119: INFO =Server= Received USER foo 12 * :
-2026/04/21 18:32:19.563412 reconciler.go:105: INFO Channel #foo monitor: waiting to join
-2026/04/21 18:32:19.563433 fake_delayer.go:43: INFO Faking Backoff
-2026/04/21 18:32:19.563447 reconciler.go:114: INFO Channel #foo monitor: join request sent
-2026/04/21 18:32:19.563505 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #foo
-2026/04/21 18:32:19.563523 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
-2026/04/21 18:32:19.563529 irc_server_for_test.go:119: INFO =Server= Received JOIN #foo 
-2026/04/21 18:32:19.563563 irc_server_for_test.go:139: INFO =Server= sending to client: :test!~test@example.com KICK #foo foo :Bye!
-2026/04/21 18:32:19.563594 reconciler.go:205: INFO Received JOIN confirmation for channel #foo
-2026/04/21 18:32:19.563609 reconciler.go:79: INFO Setting JOIN state on channel #foo
-2026/04/21 18:32:19.563624 reconciler.go:118: INFO Channel #foo monitor: join succeeded
-2026/04/21 18:32:19.563629 reconciler.go:223: INFO Received KICK for channel #foo
-2026/04/21 18:32:19.563645 reconciler.go:93: INFO Removing JOIN state on channel #foo
-2026/04/21 18:32:19.563658 reconciler.go:129: INFO Channel #foo monitor: channel no longer joined
-2026/04/21 18:32:19.563664 reconciler.go:105: INFO Channel #foo monitor: waiting to join
-2026/04/21 18:32:19.563670 fake_delayer.go:43: INFO Faking Backoff
-2026/04/21 18:32:19.563679 reconciler.go:114: INFO Channel #foo monitor: join request sent
-2026/04/21 18:32:19.563726 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #foo
-2026/04/21 18:32:19.563740 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
-2026/04/21 18:32:19.563759 irc_server_for_test.go:119: INFO =Server= Received JOIN #foo 
-2026/04/21 18:32:19.563851 irc_server_for_test.go:119: INFO =Server= Received QUIT :see ya
-2026/04/21 18:32:19.563874 irc_server_for_test.go:127: INFO =Server= Closing connection: client asked to terminate
-2026/04/21 18:32:19.563860 reconciler.go:205: INFO Received JOIN confirmation for channel #foo
-2026/04/21 18:32:19.563887 reconciler.go:79: INFO Setting JOIN state on channel #foo
-2026/04/21 18:32:19.563899 reconciler.go:118: INFO Channel #foo monitor: join succeeded
-2026/04/21 18:32:19.563934 connection.go:577: INFO irc.Close(): Disconnected from server.
-2026/04/21 18:32:19.564004 reconciler.go:131: INFO Channel #foo monitor: context canceled while monitoring
-2026/04/21 18:32:19.564039 irc_server_for_test.go:168: INFO =Server= Stopped accepting new connections
+2025/03/20 14:19:19.688123 irc_server_for_test.go:201: INFO =Server= Test server listening on 127.0.0.1:41433
+2025/03/20 14:19:19.688221 connection.go:390: INFO irc.Connect(): Connecting to 127.0.0.1:41433.
+2025/03/20 14:19:19.688451 irc_server_for_test.go:171: INFO =Server= New client connected from 127.0.0.1:35262
+2025/03/20 14:19:19.688609 irc_server_for_test.go:119: INFO =Server= Received NICK foo
+2025/03/20 14:19:19.688623 irc_server_for_test.go:96: INFO =Server= No handler for command 'NICK', skipping
+2025/03/20 14:19:19.688630 irc_server_for_test.go:119: INFO =Server= Received USER foo 12 * :
+2025/03/20 14:19:19.688701 reconciler.go:105: INFO Channel #foo monitor: waiting to join
+2025/03/20 14:19:19.688715 fake_delayer.go:43: INFO Faking Backoff
+2025/03/20 14:19:19.688726 reconciler.go:114: INFO Channel #foo monitor: join request sent
+2025/03/20 14:19:19.688778 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #foo
+2025/03/20 14:19:19.688792 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
+2025/03/20 14:19:19.688803 irc_server_for_test.go:119: INFO =Server= Received JOIN #foo 
+2025/03/20 14:19:19.688833 irc_server_for_test.go:139: INFO =Server= sending to client: :test!~test@example.com KICK #foo foo :Bye!
+2025/03/20 14:19:19.688900 reconciler.go:205: INFO Received JOIN confirmation for channel #foo
+2025/03/20 14:19:19.688910 reconciler.go:79: INFO Setting JOIN state on channel #foo
+2025/03/20 14:19:19.688934 reconciler.go:223: INFO Received KICK for channel #foo
+2025/03/20 14:19:19.688942 reconciler.go:93: INFO Removing JOIN state on channel #foo
+2025/03/20 14:19:19.688955 reconciler.go:118: INFO Channel #foo monitor: join succeeded
+2025/03/20 14:19:19.688963 reconciler.go:105: INFO Channel #foo monitor: waiting to join
+2025/03/20 14:19:19.688970 fake_delayer.go:43: INFO Faking Backoff
+2025/03/20 14:19:19.688981 reconciler.go:114: INFO Channel #foo monitor: join request sent
+2025/03/20 14:19:19.689037 irc_server_for_test.go:119: INFO =Server= Received PRIVMSG ChanServ :UNBAN #foo
+2025/03/20 14:19:19.689049 irc_server_for_test.go:96: INFO =Server= No handler for command 'PRIVMSG', skipping
+2025/03/20 14:19:19.689057 irc_server_for_test.go:119: INFO =Server= Received JOIN #foo 
+2025/03/20 14:19:19.689134 irc_server_for_test.go:119: INFO =Server= Received QUIT :see ya
+2025/03/20 14:19:19.689148 irc_server_for_test.go:127: INFO =Server= Closing connection: client asked to terminate
+2025/03/20 14:19:19.689209 connection.go:577: INFO irc.Close(): Disconnected from server.
+2025/03/20 14:19:19.689273 reconciler.go:205: INFO Received JOIN confirmation for channel #foo
+2025/03/20 14:19:19.689282 reconciler.go:79: INFO Setting JOIN state on channel #foo
+2025/03/20 14:19:19.689303 reconciler.go:118: INFO Channel #foo monitor: join succeeded
+2025/03/20 14:19:19.689318 reconciler.go:131: INFO Channel #foo monitor: context canceled while monitoring
+2025/03/20 14:19:19.689341 irc_server_for_test.go:168: INFO =Server= Stopped accepting new connections
 --- PASS: TestKickRejoin (0.00s)
 PASS
-ok  	github.com/google/alertmanager-irc-relay	0.027s
+ok  	github.com/google/alertmanager-irc-relay	0.328s
 ?   	github.com/google/alertmanager-irc-relay/logging	[no test files]
    create-stamp debian/debhelper-build-stamp
    dh_testroot -O--buildsystem=golang
@@ -2101,8 +2130,8 @@
    dh_gencontrol -O--buildsystem=golang
    dh_md5sums -O--buildsystem=golang
    dh_builddeb -O--buildsystem=golang
-dpkg-deb: building package 'alertmanager-irc-relay' in '../alertmanager-irc-relay_0.5.1-3_amd64.deb'.
 dpkg-deb: building package 'alertmanager-irc-relay-dbgsym' in '../alertmanager-irc-relay-dbgsym_0.5.1-3_amd64.deb'.
+dpkg-deb: building package 'alertmanager-irc-relay' in '../alertmanager-irc-relay_0.5.1-3_amd64.deb'.
  dpkg-genbuildinfo --build=binary -O../alertmanager-irc-relay_0.5.1-3_amd64.buildinfo
  dpkg-genchanges --build=binary -O../alertmanager-irc-relay_0.5.1-3_amd64.changes
 dpkg-genchanges: info: binary-only upload (no source code included)
@@ -2110,12 +2139,14 @@
 dpkg-buildpackage: info: binary-only upload (no source included)
 dpkg-genchanges: info: not including original source code in upload
 I: copying local configuration
+I: user script /srv/workspace/pbuilder/724678/tmp/hooks/B01_cleanup starting
+I: user script /srv/workspace/pbuilder/724678/tmp/hooks/B01_cleanup finished
 I: unmounting dev/ptmx filesystem
 I: unmounting dev/pts filesystem
 I: unmounting dev/shm filesystem
 I: unmounting proc filesystem
 I: unmounting sys filesystem
 I: cleaning the build env 
-I: removing directory /srv/workspace/pbuilder/3963998 and its subdirectories
-I: Current time: Tue Apr 21 18:32:29 -12 2026
-I: pbuilder-time-stamp: 1776839549
+I: removing directory /srv/workspace/pbuilder/724678 and its subdirectories
+I: Current time: Thu Mar 20 14:20:29 +14 2025
+I: pbuilder-time-stamp: 1742430029