Problem: The Docker example was using Alpine with the Tini dependency
and some neat custom stuff, but it wasn't super clear to understand
everything that was going on. It was also slow because lots of stuff was
compiling from source.
Solution: Replace neat custom stuff with boring defaults for clarity and
much faster builds.
Problem: The auto-stage code was a horrible hack that may be causeing an
OOM bug if too many peers are staged too quickly.
Solution: Since SSB-CONN now supports a variable number of connection
hops, we can remove the auto-stage hack and use the default scheduler
instead of trying to staple on our own hacky scheduler fix.
Problem: The words "comment" and "reply" are super ambiguous, but
renaming them is hard.
Solution: I think "subtopic" captures the sentiment well, and makes it
clear that you're leaving the current topic to start a new topic (rather
than just replying to an individual message).
Problem: The indented summary took up lots of visual attention which
isn't what we wanted. Also a bad merge broke the previous `<summary>`/
Solution: Fix the bad merge and remove the dashes style from the
indented summary elements.
Problem: The "metric CSS" was kind of clever but mostly just confusing.
Solution: Use `--size-N` for the size, where the size is `2^n`. Double
size is `--size-1`, half size is `--size--1` (negative one). The
negatives kind of suck but I couldn't think of a better solution that
didn't give up the flexibility, brevity, or the ability to sort
alphabetically.
Fixes: https://github.com/fraction/oasis/issues/100
Problem: the `<summary>` element had a broken bottom margin on content
warnings, and isn't obvious that it's not just text.
Solution: Fix the margin and used a dashed border to indicate that the
content can be expanded. I think this is more intuitive than no border,
and I think the dashed line draws parallels with "cut outs" that might
make expansion intuitive (?), but either way I think it's better than
the previous design.
Problem: The sync goes forever, which isn't good if we're in an edge
case (like having peers who are offline with us).
Solution: Add a 5-minute timeout and refactor to use a design that's
maybe simpler? This is just my stab at the previous behavior, but there
are definitely improvements that could be made!
Rework how I'm doing progress checking and be very verbose about it
until I understand how this all works. Also refactors connected peer
function into shared model for use on settings page.
Problem: If you call `ensureConnection()` two times really fast, it'll
spin off two separate connection attempts, each with their own socket,
which keeps the tests from closing.
Solution: If there's a pending connection, keep track of it, and only
attempt a new connection if there are no pending connections.
Problem: The FR translation is added in `i18n.js` but it's not available
in the drop-down language selection menu.
Solution: Add it to the menu and ensure that the menu is sorted
alphabetically by the name of the language.
Problem: I think that if `open()` is called after `close()`, it keeps a
server open. This keeps the tests running forever.
Solution: Just before `open()` resolves, check `closing` and [if
necessary] close the server that we just started by re-calling
`close()`.