Update #5. Naming The travails of trying to make the term "session" stick in some form or fashion have led me to abandon the effort entirely. At the end of the day, it's just too overloaded (not least within ERC itself). Instead, I've opted to lean on the inherent namespacing provided by the erc-networks module(/feature) and base everything around the arguably more ambiguous `erc-networks--id'. As a consequence, nearly all new naming- and identity-related functions have been relocated to erc-networks.el and rebranded under its feature banner. IMO, this is much more maintainable because nearly everything associated with this initiative now lives under one roof. Moreover, it's come to my attention that the term "network identity" has been adopted by an influential project for much the same purpose. Targets There's been a change in course with respect to the makeup of internal buffer-target objects. At the time of the last update (#4), a unified struct played host to all three flavors: query, channel, and local channel. I've since decided to err instead on the side of inheritance, albeit for equally flimsy reasons (like, for example, that it's easier to dispatch on struct type should the need arise). But the move may also allow for a more convenient means of separation if we ever want to track variant-specific state that's also context dependent (e.g., detached, parted, etc.) or store miscellaneous ephemera, such as short-lived timers watching for server-initiated MODE bursts (324/329). Compat Additional efforts to unify ERC's interactions with auth-source have led to the possible need to require erc-compat by default. I've held off on doing so proactively, but it may end up being inevitable. As a side note, related changes made to this working version of 5.4.1 by a well-meaning visitor[1] (obviously unaware that we're tethered to 27) will be nullified by this series. Riders I've tacked on another piggyback patch (at least temporarily) for the same tenuous reason as before: its tests depend on changes introduced herein. This one, though, affects basic functionality and has to do with ERC only partially exempting PONGs from flood protection -- PONGs and any other "forced" outgoing messages. (Un)surprisingly, this issue has always existed but has only recently come to light due to the growing popularity of a newish bouncer called Soju and its apparent practice of using a PING's nonce for ACKing[2]. The end result is ERC users being unable to transmit during times of heavy aggregate traffic. And without modern features like `echo-message' available, users are left to suffer in the dark, wondering what gives. Until next time, J.P. P.S. As always, the attached snapshot is mainly for posterity, and the latest set can be found elsewhere[3]. [1] https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=ad5cf84f [2] https://git.sr.ht/~emersion/soju/tree/fdf97276/item/downstream.go#L604 [3] https://jpneverwas.gitlab.io/erc-tools/48598/patches.tar.gz