Six things that looked like they worked

None of these fails loudly and two of them correct themselves if you reload,
which is why five were found by reading rather than by anybody reporting them.

The reply that lost its author is the one worth knowing about: the frame that
replaces a bubble when a reply lands was looking the models up as nobody, and
"no user" answers "no models" rather than "all models" -- so every finished
reply swapped the model's avatar for the plain mark and put the instance's name
where the model's should be, until the next page load put it back.

Beside it: a concurrency quota enforced on two of the six paths that start a
reply, including neither of the two most used; a custom theme whose success and
warning colours moved the text and left the background behind; a phone shell
sized to one viewport inside a document sized to another, which is the reported
scroll past the bottom of Settings; a whole conversation's Markdown rendered on
every page load and read by nothing; a skip guard inert since it was written;
and an endpoint nothing has ever called.

The scroll fix folded five near-identical scroller rules into one, which is
also where the containment they were all missing now lives.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-25 12:49:26 +00:00
co-authored by Claude Opus 5
parent d73a791c86
commit 92070d7879
14 changed files with 259 additions and 82 deletions
+42
View File
@@ -16,6 +16,48 @@ for 1.0.0 have something to be assembled from.
## Unreleased
## 1.0.4
Six things that looked like they worked. Five of them were found by reading the
code rather than by anybody reporting them, which is what they have in common:
none of these fails loudly, and two of them correct themselves if you reload.
- Fixed: **a reply lost the model's name and picture the moment it finished.**
While a reply streams it is attributed correctly; at the instant it lands, the
frame that replaces the bubble was looking the models up as nobody, and "no
user" answers "no models" rather than "all models". So a finished reply swapped
the model's avatar for the plain leaf mark, put the instance's name where the
model's should be, and grew a raw model id beside it. Reloading the page put it
all back, which is why this survived a release: it is only ever wrong until you
look away.
- Fixed: **a limit on how many replies an account may write at once could be
stepped over by pressing New chat.** It was enforced when sending into a chat
that already existed and nowhere else — not on a new chat, not on editing an
earlier message, not on sending a queued one, and not on regenerating. Four of
the six ways to start a reply ignored it, including the commonest.
- Fixed: **a custom theme's confirmations and warnings kept the built-in
theme's colour behind them.** Setting `success` or `warning` moved the text and
left the background it sits on, because the faded companion colour was derived
for three of the five settable colours. Visible on every alert and badge of
those two kinds, on the "on" state in the permissions list, and on the added
lines of every diff in an agent chat.
- Fixed: **on a phone, every page with a sidebar could be scrolled past its own
bottom into empty background.** The shell was sized to the part of the screen
you can actually see and the document around it to the part you can see with
the browser's toolbar retracted; the difference between those is real on a
phone and nil on a desktop, which is why it was never noticed on one. Reported
on Settings and true everywhere. A flick that ran off the end of a list now
stops there as well, instead of dragging the page behind it.
- Fixed: **the conversation was rendering every assistant message twice on every
page load** — once into Markdown that nothing read, and once the way it is
actually shown. The same was true of Messages, for your own turns. Nothing
looked wrong; a long conversation was simply slower to open than it needed to
be, every time, along with every rewind and every compaction.
- Fixed: a test file meant to skip itself on a machine without `setsid` never
did, because it set its marker twice and the second one replaced the first.
- Removed: an endpoint serving a message's unrendered Markdown, which nothing
had ever called — the copy button reads the page it is already on.
## 1.0.3
Two Arch-isms in the installer, both of which only a Debian machine could find.