Naming builds after their commit gave dist/ more than one AppImage for the
first time, and the install script took whichever `ls` listed first. That was
correct for exactly as long as builds overwrote each other: moho-76c7c45 sorts
before moho-ede11ca, so `npm run deploy` built the new one and then installed
the old one over the top of it, reporting success either way.
Caught because the launcher kept starting a build that did not have the change
in it.
It asks for the current commit's own file now, and falls back to the newest by
time where there is no git or no matching name - so a build that did not
happen fails loudly rather than quietly launching yesterday.
Co-Authored-By: Claude Opus 5 <[email protected]>
Clicking irc://irc.coreirc.net/elitewarez anywhere on the machine now
brings moho up on that channel.
What happens depends on whether it is a network moho is already on. If
it is, there is nothing to set up: the channel is joined on that
connection and opened, which is what clicking a link to a channel meant.
If it is not, the accounts page opens with the host, port and channel
already filled in - the nick is the only thing such a link cannot
supply, which is why there is a form at all rather than an account
simply appearing. Being on the network is not string equality either: a
link to irc.libera.chat is somewhere you already are if you connected
through irc.eu.libera.chat.
The parser is written against what people actually write rather than
against the drafts, which expired twenty years ago without agreeing. A
bare # starts a fragment, so browsers split the channel off and it has
to be put back; it also arrives percent-encoded, or doubled for a
network-wide channel. A comma is usually another channel and sometimes
one of a small fixed set of flags. A key is never kept - a password out
of a link anybody could have posted is not a thing to write to disk.
Getting there needs three separate paths because the desktops disagree:
an argument on a cold start, a second-instance event once one is already
running, and open-url on macOS. A link arriving before there is a window
is held rather than dropped, since a click that launches the app is
exactly when there is not one yet. The scheme is checked again on the
way in: it arrives as a command-line argument, and an argument is not a
promise about its own contents.
The same links in a message body are now clickable and go the same way,
rather than being handed to the desktop and bounced straight back here.
Parser checked against fifteen link shapes, including the reported one.
Two of them found real faults: several channels being cut to one, and a
key being read where the drafts put a flag.
Points at nobilis 6aa2a1e, without which a new account would have joined
nothing.
Co-Authored-By: Claude Opus 5 <[email protected]>
The AppImage went to ~/.local/bin, which is already on PATH here, with
a launcher entry and the icon at every size a panel or window switcher
might ask for - scaling one 512px icon down at display time is blurrier
than shipping the sizes.
Paired with packaging as `npm run deploy` rather than left as a manual
step. Building and installing are different acts, but the gap between
them is where a stale copy lives: a fresh AppImage sitting in dist/
while an older one runs from ~/.local/bin is exactly the confusion that
already cost an evening once.
Co-Authored-By: Claude Opus 5 <[email protected]>