master is what github sees, so the submodule it names has to be one a
stranger can fetch: a clone of this branch resolves nobilis from
github.com/Moho-Chat, not from a Gitea instance they have no account on and
may not be able to reach at all.
development keeps the Gitea URL, being where the work happens and where both
repositories already live side by side. The commit the submodule points at
is the same object in both places; only the address differs.
The cost of that, written down because it will be met again: every merge of
development into master arrives carrying the Gitea URL and has to keep
master's. `git submodule sync` after switching branches, too - the URL a
checkout uses is copied into .git/config, and changing branches does not
recopy it.
Co-Authored-By: Claude Opus 5 <[email protected]>
The daemon moves to its own repository as nobilis, so both frontends - this
one and dms-chat - depend on it as a peer instead of one of them vendoring it.
The vendored chatd tree and the Rust workspace are gone; `npm run daemon`
builds the submodule, and packaging pulls the binary out of it.
The Sneedchat smiley images go with it, next to the table that names them.
Previously nobilis held the filenames while this repository held the files,
so the two could drift apart with nothing to catch it.
Fixes found while testing against live accounts:
- The sidebar did not truncate. A flex item's automatic minimum size is its
content's min-content width, so prose-titled Matrix rooms made the buffer
list wider than its pane and painted over the message list.
- Discord's QR never rendered: the event field is `qrCodePath`, not `path`.
The Sneedchat and Matrix login progress text was blank for the same reason -
all four status events carry `detail`, not `status`.
- Every Matrix message rendered as a grey system line with no author or
avatar. IRC, Discord and Sneedchat tag an ordinary message "chat" but Matrix
tags it "message"; only the first was treated as something a person said.
- Context menus and the emoji picker swallowed their own clicks. Both
dismissed on a capture-phase mousedown, which unmounts the item before the
click can land on it - so pin, mute, hide and emoji selection all did
nothing. Presses inside the popup are now ignored.