SIGN IN SIGN UP

Merge origin/main into task/143

main reworked the composer around per-message forking (fork-and-send
gone) and added the async-task strip, which lands a second stable-empty
constant next to this branch's own in `use-connection.ts` — the only
conflict, and both are kept.

Nothing else collides: the steering work adds `steeredMessageIds` beside
main's new `asyncTasks` on the connection, and the timeline's steered-copy
suppression sits on the same seam the fork work left alone.
X
xintaofei committed
c5f5062857e274b25dc04637a5df3f727107d4e3