Commit Graph
952 Commits
Author SHA1 Message Date
Daniel Norman e930bfd397 Link and mention releases
- Route release and release list links to their views
- Offer releases for a pasted ID or link
- List delegate releases in # search
- Show release references as chips
- Cache release lookups for mentions
- Record release mentions in ADR 0003
2026-10-08 18:21:48 +02:00
595a81150b Add Releases and Release views
- Add the Releases list and Release page
- Add modals to create, delete and redact releases
- Register artifacts and add or remove their locations
- Download, seed and unseed artifacts from the release page
- Share one artifact node state and show its status
- Pick the release commit from a list
- Rename Stop seeding to Unseed

Co-authored-by: Daniel Norman <daniel@norman.life>
Co-authored-by: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-10-08 18:21:48 +02:00
837766212e Add artifact node port and commands
- Add the ArtifactNode port over radicle-artifact-client
- Seed, unseed, download and fetch artifacts per release
- Unseed artifacts on redaction and release deletion
- Report artifact node status and installed binaries
- Probe the artifact node alongside the radicle node
- Add node commands and mirror them in test API

Co-authored-by: Brandon Oxendine <brandon.oxendine@gmail.com>
Co-authored-by: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-10-08 18:20:59 +02:00
7a0b67da64 Add release COB ports and commands
- Add release types and the Releases and ReleasesMut ports
- Create, delete and redact releases
- Register, attest and locate artifacts
- Filter releases with radicle-artifact
- Add release commands and mirror them in test API

Co-authored-by: Brandon Oxendine <brandon.oxendine@gmail.com>
Co-authored-by: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-10-08 18:20:59 +02:00
Georgios Jason Efstathiou 2ffcf1b95a ryph: warm the cargo build in image builds only
At run time the warm steps rebuilt the crates with build scripts on
every start, which took about two minutes. Cargo now builds only what a
command needs, when it runs.
2026-10-08 13:04:16 +02:00
Rūdolfs Ošiņš 840f1b0c08 Only let an AppImage claim the rad: scheme
A dev build or an AppImage registered itself whenever it wasn't already
the handler, replacing the installed app as the target of rad: links.
Now installers own the scheme, and an AppImage only claims it when no
other handler is set. Dev builds never register; the README explains
how to test links in them instead.
2026-10-08 10:35:46 +02:00
Rūdolfs Ošiņš 344e10d967 Give dev builds their own identifier
Since we started opening rad: links in the app, a dev build and an
installed release can't run side by side: they share the identifier, so
whichever starts second hands over to the first and quits. A separate
identifier also keeps dev from sharing window state and logs with the
release.
2026-10-08 10:35:46 +02:00
Rūdolfs Ošiņš 021c9f8a59 Link AsciiDoc cross references to their source
`xref:other.adoc[]` linked to `other.html`, which doesn't exist in the
repository, so following it showed a missing file instead.
2026-10-08 10:29:43 +02:00
Rūdolfs Ošiņš 38279298d1 Keep document links inside the app
Clicking a relative link in a README reloaded the whole app, and links
starting with `/` dropped you in the inbox. Links to files in the repo
now open in the source view, at the linked section if there is one, and
links the app can't follow explain why instead of navigating the window
away.

This also fixes a missing linked file showing the previous file's
content instead of an error, and section links disabling the back
button.
2026-10-08 10:29:43 +02:00
Brandon OxendineandRūdolfs Ošiņš dc1a067396 Render mermaid diagrams
Mermaid code blocks showed up as code. Mermaid is loaded lazily, and
diagrams are redrawn when the app theme changes. DOMPurify's config
moves from a global `setConfig` to each call site, because the global
one stripped mermaid's SVG output.

Co-authored-by: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-10-07 16:56:58 +02:00
Brandon OxendineandRūdolfs Ošiņš ab8300e09a Show repository images in READMEs
Relative images in markdown and AsciiDoc files were broken, nothing
resolved them against the repository. They're read through a new
`repo_blob_bytes` command, which skips the text encoding and last
commit lookup of `repo_blob`. Images now also keep their alt text.

Co-authored-by: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-10-07 16:56:16 +02:00
Brandon OxendineandRūdolfs Ošiņš 70046d0c74 Render GitHub style alerts
A blockquote starting with `[!NOTE]` or one of its siblings showed up
as a plain quote, while GitHub and the web explorer render it as a
titled callout.

Co-authored-by: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-10-07 16:54:00 +02:00
Rūdolfs Ošiņš 1bc5ffa9fe Don't abort blob URLs in e2e tests
The remote request guard read the empty hostname of a `blob:` URL as
remote, so embed previews never loaded in tests.
2026-10-07 16:41:54 +02:00
Rūdolfs Ošiņš 9ca793f393 Suggest assignees by alias as you type
Assigning someone meant finding and pasting their DID. Now the input
searches aliases and lists you, the repo's delegates and other known
peers, so a DID is only needed for someone the node has never seen.
2026-10-07 14:06:15 +02:00
Rūdolfs Ošiņš 66dcf55fd3 Show popovers above modals
The NodeId card opened from an assignee in the new issue modal ended up
underneath the modal's scrim.
2026-10-07 14:06:15 +02:00
Brandon Oxendine 950f83b2e9 Move issue metadata buttons into action row
In the new issue modal, "Add labels" and "Add assignees" sat on their
own row between the description and the action buttons. They now sit at
the left of the action row, opposite Attach, Preview and Save.
2026-10-06 17:18:20 +02:00
Rūdolfs Ošiņš ffb4aa4d3a Raise the chunk size warning limit to 5 MB
The 500 kB default is meant for websites, but Tauri loads the bundle
from disk. The limit stays close to the main chunk's size, so we still
hear about it when it grows noticeably.
2026-10-06 16:49:20 +02:00
Rūdolfs Ošiņš 6eec206caf Silence Asciidoctor warnings in the build 2026-10-06 16:46:06 +02:00
Rūdolfs Ošiņš 5aaf12500e Fix npm audit reported issues 2026-10-06 16:41:49 +02:00
Rūdolfs Ošiņš 67785a8c30 Keep the browsed file in the source view route
Browsing the file tree only changed component state, so no file view
was ever a history entry and back left the repository. The path now
travels as a query parameter, since trailing URL segments are already
consumed by the revision.
2026-10-06 16:28:14 +02:00
Rūdolfs Ošiņš 651af122b2 Render AsciiDoc readmes in repo source view
Uses @asciidoctor/core, lazily imported so the main bundle is
unchanged, with its own DOMPurify instance because the markdown
allowlist is pinned globally via setConfig.

Include directives resolve through a registered HttpCache that maps
Asciidoctor's URI reads onto repo_blob, so tag, line-range and
nesting handling stay upstream. A per-conversion token in base_dir
scopes each read to one repository and commit.
2026-10-06 16:28:10 +02:00
Rūdolfs Ošiņš 2a0dd5a747 Share code block enhancement between renderers
The copy button and syntax highlighting setup for code blocks moves out
of the Markdown component, so other document renderers can reuse it.
2026-10-06 16:27:01 +02:00
Rūdolfs Ošiņš 41eac34ddc Don't reload the dev app on E2E test output
Playwright traces written to tests/artifacts kept reloading the app
running in `npm run tauri dev`.
2026-10-06 15:53:56 +02:00
Rūdolfs Ošiņš b2bbf6f5ad Send embed bytes over IPC without JSON
Embeds went over IPC as JSON number arrays, so a 9MB image turned into
~36MB of JSON. On upload Tauri parses that on the main thread, which
beachballed the app while dropping a large screenshot.
2026-10-06 15:53:56 +02:00
Rūdolfs Ošiņš cd8a32a5e7 Show Retina screenshots at their intended size
macOS saves Retina screenshots at 144 DPI and we rendered them at twice
the size they had on screen. We now scale PNGs with a 2x or 3x density
down; everything else, including 300 DPI print exports, stays 1:1.
2026-10-06 15:53:52 +02:00
Brandon OxendineandRūdolfs Ošiņš 8175823ab8 Fix pasted images not rendering
Pasting a single image went through save_embed_by_clipboard, which
stored the clipboard's raw RGBA pixels instead of an encoded image.
The result could not be decoded, so the embed showed as a broken image.
Always store the pasted file's own bytes instead. Nothing else uses
save_embed_by_clipboard, so it's removed.

Co-Authored-By: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-10-06 15:04:57 +02:00
Rūdolfs Ošiņš 118abffdea Drop files only into the textarea under the cursor 2026-10-06 14:44:28 +02:00
Brandon Oxendine d6145300c1 Make task list items clickable in markdown 2026-10-06 14:33:08 +02:00
Rūdolfs Ošiņš dee73cb8f8 Fetch a new seed from preferred and known seeds
Seeding a repo only fetched from seeds we were already connected to, so
one nobody had announced to us yet stayed in the fetching state. Also
try the preferred seeds and connect to known ones, like `rad seed`.
2026-10-06 11:16:14 +02:00
Rūdolfs Ošiņš e793ed5f01 Allow seeding a missing repo from a reference
Following a link to a repo we don't have only led to the explorer, but
the reason it's missing is usually that we haven't seeded it yet.
A deep link that can't be opened now says so instead of doing nothing.
2026-10-06 11:16:14 +02:00
Rūdolfs Ošiņš e010517b79 Sort merged patches by merge time
When looking at merged patches you want to see what landed recently, not
what was opened recently. We take the earliest merge, which is exact for
repos that need a single delegate to merge.
2026-10-06 11:13:39 +02:00
Rūdolfs Ošiņš 94413587ba Show latest revision's diffstat in patch list 2026-10-06 11:00:51 +02:00
Rūdolfs Ošiņš 2f283f1047 Open rad: links in the app 2026-10-05 17:37:03 +02:00
Brandon OxendineandRūdolfs Ošiņš 91ab693b4b Link Radicle entities from comments
References are picked or pasted in the composer, stored as `rad:` URIs
with a readable label, and shown as chips or links that open in-app when
the entity is here.

Co-Authored-By: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-10-05 17:29:02 +02:00
Rūdolfs Ošiņš 990e51c38e Add a library for RIP 4 rad: URIs
The desktop and radicle-explorer render the same comment text, so they
have to agree on what a reference means.
2026-10-05 17:29:02 +02:00
Rūdolfs Ošiņš 8f21eab664 Add ADR for references to Radicle entities 2026-10-05 17:29:02 +02:00
Brandon OxendineandRūdolfs Ošiņš bee84e9d40 Search node aliases for mentions
Mentioning someone starts from their alias, but aliases are
self-declared and unrelated nodes often share one. Results say who is
followed or is you, so the composer can tell them apart.

Co-Authored-By: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-10-05 17:29:02 +02:00
Georgios Jason Efstathiou b461f0bce2 ryph: round source mtimes down instead of to the commit time
On an incremental image build, setting a changed file to the commit
time can make it older than its stale build output, so cargo would skip
the rebuild. Rounding down to the whole second still survives the image
layer and never moves a file back past its outputs.
2026-10-05 15:31:17 +02:00
Georgios Jason Efstathiou 7d70079105 ryph: keep the baked Rust build warm, and smaller
Pin source mtimes to the commit time at image build, so cargo's
fingerprints survive the image layer and the warm build stays fresh.
Build with line-tables-only debug info and drop the incremental cache
to shrink the baked target/.
2026-10-05 14:51:32 +02:00
Ada c70467c75b Set up the ryph environment
Ryph-Run: r-8757488de1
2026-10-05 09:09:38 +00:00
Rūdolfs Ošiņš 6c9e83c763 Ignore fetches cancelled by goto in e2e tests 2026-10-01 21:58:39 +02:00
Rūdolfs Ošiņš 8903f853ea Only ignore personal files under .claude
Ignoring the whole directory would keep shared settings, rules and
skills out of the repo. Only local settings and worktrees are personal.
2026-10-01 19:57:36 +02:00
Rūdolfs Ošiņš bd57ef824f Trim CLAUDE.md and bring it in line with the code 2026-10-01 19:57:26 +02:00
Rūdolfs Ošiņš 92ad43990d Add ADR 0002 for the backend architecture
Record why the backend is split into a shared core and two thin
drivers, and that we intend to move away from radicle-surf.
2026-10-01 19:57:03 +02:00
Rūdolfs Ošiņš eaf2740907 Drop unused radicle-surf leftovers 2026-10-01 19:56:53 +02:00
Rūdolfs Ošiņš b454f29a6e Test rebuilding a broken COB cache end to end
Corrupt a cached issue and patch so the list and counts disagree, and
check that rebuilding brings them back and clears the warning.
2026-10-01 18:20:25 +02:00
Rūdolfs Ošiņš 1f95ad0bb2 Test CI job results end to end
Build rad-job from the radicle-job version the app uses, so tests can
record runs. Check the status summary and that runs link to their logs.
2026-10-01 18:20:25 +02:00
Rūdolfs Ošiņš 49cf789cbc Test the remaining write paths and permissions
Reactions, review edits, patch comments, title, description and
assignees, stopping seeding, creating an identity, and that a
contributor can't resolve someone else's review comment.
2026-10-01 18:20:25 +02:00
Rūdolfs Ošiņš 47d55c4418 Check the published verdict in the draft review test
Publishing an accept as a reject went unnoticed, since the test only
checked that the review appeared.
2026-10-01 18:20:25 +02:00
Rūdolfs Ošiņš 699e0604f5 Test the keyboard shortcuts end to end
Cover the shortcut list, sidebar toggle, editor bold taking priority
over it, new issue, settings, jumping to a repo and stepping through a
patch's commits.
2026-10-01 18:20:25 +02:00