The hostile input tests compared elapsed time against fixed limits, so
they measured the machine as well as the code. They fail on slower or
loaded builders, such as the nixpkgs x86_64-linux check phase, even
though rendering stays linear.
Compare the CPU time of an input against one four times as long
instead. Linear rendering gives about 4 and a quadratic regression
about 16. CPU time is needed because a wall-clock ratio inflates under
bursty load, when a short run fits between bursts and a long one does
not.
Rendering past the reference limit gets its own test, since the link
count cannot catch a limit that stops linking but keeps rescanning.
The bare reference test now puts a valid reference before the long
run, so giving up is visible in the result without any timing.
AI-assisted: Claude Code (claude-opus-5-5)
- Decide in ADR 0004 to always open releases on Delegates
- Drop the fallback to Others in lists and releases
- Show the Others filter whenever it has content
- Name the scope in the empty artifacts message
- Open Others in the e2e test of an artifact by a non-delegate,
which no longer opens there by itself
Extracts the avatar components and the style tokens into shared/ui, which
both apps consume as a workspace package, to try out ADR 2. Nix and the
Docker setups are not updated yet.
When a revision's head is already part of its base, the Changes view
showed an empty commits column and "0 files modified". In practice this
is a patch branch pushed after its work already landed, which also marks
the patch merged at that commit even when the work landed after it. Show
an empty state that says so and links to the last revision with changes.
This also fixes switching revisions leaving the previous revision's
single commit selected.
Co-authored-by: Rūdolfs Ošiņš <rudolfs@osins.org>
The sanitizer allowlist strips KaTeX's markup, and index.html never
loaded katex.min.css, so math has only ever shown up as flat text. We
now typeset math after sanitizing and load the stylesheet.
The patch and issue list topbars decided whether to show filter labels
from the viewport width, which ignores the sidebar. With the search
input open, the filters left it almost no room, and in narrower
windows the actions were pushed past the window edge.
Make the topbar a size container and show filter labels based on its
own width. While searching, collapse inactive filters to icons and give
the input a fixed width. When there is still not enough room, the
filters scroll and fade out at the clipped edge.
Fixes: 0d6def4600
When users block web fonts, code was rendered in the browser's default
sans-serif font because the JetBrains Mono code font tokens had no
generic fallback. Add `monospace` as a fallback so code stays
monospaced.
Fixes: 8942cea33a
Vitest's Rolldown picked up the root tsconfig.json, which extends a
package only the explorer installs, so the tests failed to start when
only desktop's dependencies were installed.
GitHub only reads workflows from the root `.github/` and ryph only reads
the root `.ryph/`. The desktop workflows now run in `desktop/`, and the
ryph setup installs and warms both projects.
- release: work on `master`, find radicle-apt-repo next to the monorepo,
tag `releases/desktop/<version>` and only commit the release files
- install-binaries: use desktop's own `tests/`, not the root one
- build-artifacts: pass `GIT_HEAD` to the Linux builds, which only see
`desktop/` and have no `.git`
- .envrc: watch `rust-toolchain.toml`