Resetting only forgot the key, so the pending timeout still fired and
rescheduled itself: the sidebar kept reloading repos every 5 seconds
after nothing was left to replicate, and after it unmounted.
Since js-yaml 5 an empty or comment-only block throws instead of returning
undefined, as does invalid YAML. Markdown renders the content from the
same parse, so one such block made the whole document fail to render.
/repos is no longer a route, so specs fell back to the inbox and logged a
routing error. The inbox opens the first-launch guide, so tests now start
with it dismissed. The router now logs the URL it couldn't resolve
instead of just "URL".
Several commands had no route or returned stubs, so e2e tests silently got
null or empty data. A missing route now fails loudly, the profile loads on
first use so onboarding works, and node status is polled over HTTP. A
parity test keeps the routes from drifting from the Tauri handlers again;
it also caught revisions_by_patch being registered twice.
A single catalog in lib/shortcuts defines every shortcut's keys and
description. Components bind behaviour to it by id for as long as they
are mounted, and one listener applies the shared rules for text fields,
modals, priority and cycling. The shortcuts modal lists the catalog.
Add a shortcuts modal `?` and app-wide shortcuts:
- Cmd+F: sidebar repo filter, pressed again: list search
- Cmd+N: new issue, anywhere in a repo
- Cmd+1…9: jump to the nth sidebar repo; holding Cmd shows
the numbers on the repo avatars
- Cmd+[ / Cmd+] (Alt+Left / Alt+Right elsewhere): back and forward
- Cmd+R: reload, skipped while typing or in a modal with a text field
Global shortcuts are ignored while typing in an input and, except
for `?`, while a modal is open.
Co-Authored-By: Rūdolfs Ošiņš <rudolfs@osins.org>
Rebuild the issue page as a single column matching the patch page:
the state dropdown sits next to the title, with author, issue ID,
labels and assignees in a row beneath it.
Let issue authors change the state, not only delegates. Add a
delete_issue command so authors can delete their own issues.
Share the delete confirmation and ID chip with the patch page.
Adds a read-only page for a repository's identity document. It shows the
current document together with its full revision history. The data and
wording follow heartwood and the rad id / rad inspect CLI.
Co-Authored-By: Rūdolfs Ošiņš <rudolfs@osins.org>
Bind each cached loader to a `{@const}` so the `{#await}` blocks keep
the same promise across patch reloads instead of re-running and
flashing their pending branch.
Align with radicle explorer and other places where we render the commit
time like the single commit view and commit list
Fixes issue dfa74e83c4f8d0ca903c3f81d278382daad1488a
The patch page already sets the pattern: one filled primary action and
naked buttons for everything else. The issue page and the repo header
used the grey ghost fill instead, so their secondary actions competed
with the primary one.
A repository can sit in storage without being seeded, which `rad ls`
hides and `rad ls --all` shows as "local". A new Settings preference
picks the `Show` passed to `list_repos_summary`, defaulting to seeded.
Unseeding only deletes the policy row, so a node defaulting to `allow`
keeps seeding: `unseed` now reports `DefaultPolicySeeds` instead of
claiming success, and both callers refresh in a `finally` so a failed
`clean` no longer leaves a stale row behind.