Radish alpha
h
rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5
Radicle Heartwood Protocol & Stack
Radicle
Git
Rust 2024
Merged lorenz opened 1 month ago

Switch from Rust 2021 to Rust 2024.

256 files changed +1165 -1057 edde15d9 8bac24d6
modified .rustfmt.toml
@@ -1 +1 @@
-
edition = "2021"
+
edition = "2024"
modified Cargo.toml
@@ -3,7 +3,7 @@ members = ["crates/*"]
resolver = "2"

[workspace.package]
-
edition = "2021"
+
edition = "2024"
homepage = "https://radicle.xyz"
license = "MIT OR Apache-2.0"
repository = "https://app.radicle.xyz/seeds/seed.radicle.xyz/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5"
modified crates/radicle-cli/src/commands/auth.rs
@@ -3,13 +3,13 @@ mod args;

use std::str::FromStr;

-
use anyhow::{anyhow, Context};
+
use anyhow::{Context, anyhow};

use radicle::crypto::ssh;
use radicle::crypto::ssh::Passphrase;
use radicle::node::Alias;
use radicle::profile::env;
-
use radicle::{profile, Profile};
+
use radicle::{Profile, profile};

use crate::terminal as term;

modified crates/radicle-cli/src/commands/block/args.rs
@@ -16,8 +16,8 @@ pub struct Args {

#[cfg(test)]
mod test {
-
    use clap::error::ErrorKind;
    use clap::Parser;
+
    use clap::error::ErrorKind;

    use super::Args;

modified crates/radicle-cli/src/commands/checkout.rs
@@ -3,8 +3,8 @@ mod args;

use std::path::PathBuf;

-
use anyhow::anyhow;
use anyhow::Context as _;
+
use anyhow::anyhow;

use radicle::git;
use radicle::node::AliasStore;
modified crates/radicle-cli/src/commands/clone/args.rs
@@ -2,15 +2,15 @@ use std::path::PathBuf;

use clap::Parser;

-
use radicle::identity::doc::RepoId;
use radicle::identity::IdError;
+
use radicle::identity::doc::RepoId;
use radicle::node::policy::Scope;
use radicle::prelude::*;
use radicle::storage::refs;

use crate::common_args::{
-
    SignedReferencesFeatureLevel, SignedReferencesFeatureLevelParser,
-
    ABOUT_FETCH_SIGNED_REFERENCES_FEATURE_LEVEL_MINIMUM,
+
    ABOUT_FETCH_SIGNED_REFERENCES_FEATURE_LEVEL_MINIMUM, SignedReferencesFeatureLevel,
+
    SignedReferencesFeatureLevelParser,
};
use crate::node::SyncSettings;
use crate::terminal;
modified crates/radicle-cli/src/commands/cob.rs
@@ -21,7 +21,7 @@ use crate::terminal as term;

pub use args::Args;

-
use args::{parse_many_embeds, FilteredTypeName, Format};
+
use args::{FilteredTypeName, Format, parse_many_embeds};

fn embeds(
    repo: &storage::git::Repository,
modified crates/radicle-cli/src/commands/cob/args.rs
@@ -339,8 +339,8 @@ impl std::str::FromStr for FilteredTypeName {
#[cfg(test)]
mod test {
    use super::Args;
-
    use clap::error::ErrorKind;
    use clap::Parser;
+
    use clap::error::ErrorKind;

    const ARGS: &[&str] = &[
        "--repo",
modified crates/radicle-cli/src/commands/config.rs
@@ -5,7 +5,7 @@ use args::Command;

use std::path::Path;

-
use radicle::profile::{config, Config, ConfigPath, RawConfig};
+
use radicle::profile::{Config, ConfigPath, RawConfig, config};

use crate::terminal as term;
use crate::terminal::Element as _;
modified crates/radicle-cli/src/commands/follow.rs
@@ -1,7 +1,7 @@
mod args;

-
use radicle::node::{policy, Alias, AliasStore, Handle, NodeId};
-
use radicle::{prelude::*, Node};
+
use radicle::node::{Alias, AliasStore, Handle, NodeId, policy};
+
use radicle::{Node, prelude::*};
use radicle_term::{Element as _, Paint, Table};

use crate::terminal as term;
modified crates/radicle-cli/src/commands/fork/args.rs
@@ -25,8 +25,8 @@ pub struct Args {
#[cfg(test)]
mod test {
    use super::Args;
-
    use clap::error::ErrorKind;
    use clap::Parser;
+
    use clap::error::ErrorKind;

    #[test]
    fn should_parse_rid_non_urn() {
modified crates/radicle-cli/src/commands/id.rs
@@ -2,21 +2,21 @@ mod args;

use std::collections::BTreeSet;

-
use anyhow::{anyhow, Context};
+
use anyhow::{Context, anyhow};

-
use radicle::cob::identity::{self, IdentityMut, Revision, RevisionId};
use radicle::cob::Title;
+
use radicle::cob::identity::{self, IdentityMut, Revision, RevisionId};
use radicle::identity::doc::update;
-
use radicle::identity::{doc, Doc, Identity, RawDoc};
-
use radicle::node::device::Device;
+
use radicle::identity::{Doc, Identity, RawDoc, doc};
use radicle::node::NodeId;
+
use radicle::node::device::Device;
use radicle::storage::{ReadStorage as _, WriteRepository};
-
use radicle::{cob, crypto, Profile};
+
use radicle::{Profile, cob, crypto};
use radicle_surf::diff::Diff;
use radicle_term::Element;

-
use crate::git::unified_diff::Encode as _;
use crate::git::Rev;
+
use crate::git::unified_diff::Encode as _;
use crate::terminal as term;
use crate::terminal::args::Error;
use crate::terminal::format::Author;
modified crates/radicle-cli/src/commands/id/args.rs
@@ -8,9 +8,9 @@ use serde_json as json;
use thiserror::Error;

use radicle::cob::{Title, TypeNameParse};
+
use radicle::identity::doc::PayloadId;
use radicle::identity::doc::update::EditVisibility;
use radicle::identity::doc::update::PayloadUpsert;
-
use radicle::identity::doc::PayloadId;
use radicle::prelude::{Did, RepoId};

use crate::git::Rev;
@@ -240,9 +240,9 @@ pub(super) enum Command {

#[cfg(test)]
mod test {
-
    use super::{parse_many_upserts, Args};
-
    use clap::error::ErrorKind;
+
    use super::{Args, parse_many_upserts};
    use clap::Parser;
+
    use clap::error::ErrorKind;

    #[test]
    fn should_parse_single_payload() {
modified crates/radicle-cli/src/commands/inbox.rs
@@ -9,8 +9,8 @@ use anyhow::anyhow;

use localtime::LocalTime;
use radicle::cob::TypedId;
-
use radicle::git::fmt::Qualified;
use radicle::git::BranchName;
+
use radicle::git::fmt::Qualified;
use radicle::identity::Identity;
use radicle::issue::cache::Issues as _;
use radicle::node::notifications;
@@ -18,7 +18,7 @@ use radicle::node::notifications::*;
use radicle::patch::cache::Patches as _;
use radicle::prelude::{NodeId, Profile, RepoId};
use radicle::storage::{ReadRepository, ReadStorage};
-
use radicle::{cob, git, Storage};
+
use radicle::{Storage, cob, git};

use term::Element as _;

modified crates/radicle-cli/src/commands/init.rs
@@ -10,7 +10,7 @@ use std::convert::TryFrom;
use std::env;
use std::str::FromStr;

-
use anyhow::{anyhow, bail, Context as _};
+
use anyhow::{Context as _, anyhow, bail};
use serde_json as json;

use radicle::crypto::ssh;
@@ -21,9 +21,9 @@ use radicle::git::raw::ErrorExt as _;
use radicle::identity::project::ProjectName;
use radicle::identity::{Doc, RepoId, Visibility};
use radicle::node::events::UploadPack;
-
use radicle::node::{Event, Handle, NodeId, DEFAULT_SUBSCRIBE_TIMEOUT};
+
use radicle::node::{DEFAULT_SUBSCRIBE_TIMEOUT, Event, Handle, NodeId};
use radicle::storage::ReadStorage as _;
-
use radicle::{profile, Node};
+
use radicle::{Node, profile};

use crate::commands;
use crate::git;
@@ -63,7 +63,9 @@ pub fn init(repo: git::Repository, args: Args, profile: &profile::Profile) -> an
    let default_branch = match find_default_branch(&repo) {
        Err(err @ DefaultBranchError::Head) => {
            term::error(err);
-
            term::hint("try `git checkout <default branch>` or set `git config set --local init.defaultBranch <default branch>`");
+
            term::hint(
+
                "try `git checkout <default branch>` or set `git config set --local init.defaultBranch <default branch>`",
+
            );
            anyhow::bail!("aborting `rad init`")
        }
        Err(err @ DefaultBranchError::NoHead) => {
@@ -209,7 +211,9 @@ pub fn init(repo: git::Repository, args: Args, profile: &profile::Profile) -> an
                term::warning(format!(
                    "There was an error announcing your repository to the network: {e}"
                ));
-
                term::warning("Try again with `rad sync --announce`, or check your logs with `rad node logs`.");
+
                term::warning(
+
                    "Try again with `rad sync --announce`, or check your logs with `rad node logs`.",
+
                );
                term::blank();
            }
            term::info!("To push changes, run {}.", term::format::command(push_cmd));
@@ -445,7 +449,8 @@ pub fn announce(
                term::blank();
                term::info!(
                    "You are not connected to any peers. Your repository will be announced as soon as \
-
                    your node establishes a connection with the network.");
+
                    your node establishes a connection with the network."
+
                );
                term::info!("Check for peer connections with `rad node status`.");
                term::blank();
            }
modified crates/radicle-cli/src/commands/init/args.rs
@@ -2,7 +2,7 @@ use std::path::PathBuf;

use clap::Parser;
use radicle::{
-
    identity::{project::ProjectName, Visibility},
+
    identity::{Visibility, project::ProjectName},
    node::policy::Scope,
    prelude::RepoId,
};
@@ -115,8 +115,8 @@ impl clap::builder::TypedValueParser for ScopeParser {
#[cfg(test)]
mod test {
    use super::Args;
-
    use clap::error::ErrorKind;
    use clap::Parser;
+
    use clap::error::ErrorKind;

    #[test]
    fn should_parse_rid_non_urn() {
modified crates/radicle-cli/src/commands/inspect.rs
@@ -11,15 +11,15 @@ use chrono::prelude::*;

use radicle::identity::RepoId;
use radicle::identity::{DocAt, Identity};
-
use radicle::node::policy::SeedingPolicy;
use radicle::node::AliasStore as _;
+
use radicle::node::policy::SeedingPolicy;
use radicle::storage::git::{Repository, Storage};
use radicle::storage::refs::{FeatureLevel, RefsAt, SignedRefs};
use radicle::storage::{ReadRepository, ReadStorage};

use crate::terminal as term;
-
use crate::terminal::json;
use crate::terminal::Element;
+
use crate::terminal::json;

pub use args::Args;
use args::Target;
modified crates/radicle-cli/src/commands/issue.rs
@@ -6,18 +6,18 @@ use anyhow::Context as _;

use radicle::cob::common::Label;
use radicle::cob::issue::{CloseReason, State};
-
use radicle::cob::{issue, Title};
+
use radicle::cob::{Title, issue};

+
use radicle::Profile;
use radicle::crypto;
use radicle::issue::cache::Issues as _;
-
use radicle::node::device::Device;
use radicle::node::NodeId;
+
use radicle::node::device::Device;
use radicle::prelude::Did;
use radicle::profile;
use radicle::storage;
use radicle::storage::{WriteRepository, WriteStorage};
-
use radicle::Profile;
-
use radicle::{cob, Node};
+
use radicle::{Node, cob};

pub use args::Args;
use args::{Assigned, Command, CommentAction, StateArg};
@@ -25,10 +25,10 @@ use args::{Assigned, Command, CommentAction, StateArg};
use crate::git::Rev;
use crate::node;
use crate::terminal as term;
+
use crate::terminal::Element;
use crate::terminal::args::Error;
use crate::terminal::format::Author;
use crate::terminal::issue::Format;
-
use crate::terminal::Element;

const ABOUT: &str = "Manage issues";

modified crates/radicle-cli/src/commands/issue/args.rs
@@ -4,7 +4,7 @@ use clap::{Parser, Subcommand};

use radicle::{
    cob::{Label, Reaction, Title},
-
    identity::{did::DidError, Did, RepoId},
+
    identity::{Did, RepoId, did::DidError},
    issue::{CloseReason, State},
};

modified crates/radicle-cli/src/commands/issue/cache.rs
@@ -1,9 +1,9 @@
use std::ops::ControlFlow;

+
use radicle::Profile;
use radicle::issue::IssueId;
-
use radicle::storage::git::Repository;
use radicle::storage::ReadStorage as _;
-
use radicle::Profile;
+
use radicle::storage::git::Repository;

use crate::terminal as term;

modified crates/radicle-cli/src/commands/issue/comment.rs
@@ -1,12 +1,12 @@
+
use radicle::Profile;
use radicle::cob::thread;
use radicle::storage::WriteRepository;
-
use radicle::Profile;
use radicle::{cob, git, issue, storage};

use crate::git::Rev;
use crate::terminal as term;
-
use crate::terminal::patch::Message;
use crate::terminal::Element as _;
+
use crate::terminal::patch::Message;

pub(super) fn comment(
    profile: &Profile,
modified crates/radicle-cli/src/commands/node.rs
@@ -7,11 +7,11 @@ pub mod routing;

use std::{process, time};

+
use radicle::node::Handle as _;
+
use radicle::node::Node;
use radicle::node::address::Store as AddressStore;
use radicle::node::config::ConnectAddress;
use radicle::node::routing::Store;
-
use radicle::node::Handle as _;
-
use radicle::node::Node;

use crate::commands::node::args::Only;
use crate::terminal as term;
modified crates/radicle-cli/src/commands/node/control.rs
@@ -4,14 +4,14 @@ use std::fs::File;
use std::io::{BufRead, BufReader, Read, Seek, SeekFrom, Write};
use std::{path::Path, process, thread, time};

-
use anyhow::{anyhow, Context};
+
use anyhow::{Context, anyhow};
use localtime::LocalTime;

+
use radicle::Node;
use radicle::node;
use radicle::node::{Address, ConnectResult, Handle as _, NodeId};
use radicle::profile::env::RAD_PASSPHRASE;
-
use radicle::Node;
-
use radicle::{profile, Profile};
+
use radicle::{Profile, profile};

use crate::commands::node::logs::{LogRotatorFileSystem, Rotated};
use crate::terminal as term;
modified crates/radicle-cli/src/commands/patch.rs
@@ -22,10 +22,10 @@ use std::collections::BTreeSet;
use anyhow::anyhow;

use radicle::cob::patch::PatchId;
-
use radicle::cob::{patch, Label};
+
use radicle::cob::{Label, patch};
use radicle::patch::cache::Patches as _;
use radicle::storage::git::transport;
-
use radicle::{prelude::*, Node};
+
use radicle::{Node, prelude::*};

use crate::git::Rev;
use crate::node;
modified crates/radicle-cli/src/commands/patch/cache.rs
@@ -1,9 +1,9 @@
use std::ops::ControlFlow;

+
use radicle::Profile;
use radicle::patch::PatchId;
-
use radicle::storage::git::Repository;
use radicle::storage::ReadStorage as _;
-
use radicle::Profile;
+
use radicle::storage::git::Repository;

use crate::terminal as term;

modified crates/radicle-cli/src/commands/patch/checkout.rs
@@ -5,10 +5,10 @@ use radicle::cob::patch::RevisionId;
use radicle::git::fmt::Qualified;
use radicle::git::fmt::RefString;
use radicle::git::raw::ErrorExt as _;
-
use radicle::patch::cache::Patches as _;
use radicle::patch::PatchId;
+
use radicle::patch::cache::Patches as _;
use radicle::storage::git::Repository;
-
use radicle::{git, rad, Profile};
+
use radicle::{Profile, git, rad};

use crate::terminal as term;

modified crates/radicle-cli/src/commands/patch/comment/edit.rs
@@ -1,12 +1,12 @@
use anyhow::anyhow;

+
use radicle::Profile;
use radicle::cob;
use radicle::cob::patch;
use radicle::cob::thread;
-
use radicle::patch::cache::Patches as _;
use radicle::patch::ByRevision;
+
use radicle::patch::cache::Patches as _;
use radicle::storage::git::Repository;
-
use radicle::Profile;

use crate::git;
use crate::terminal as term;
modified crates/radicle-cli/src/commands/patch/comment/react.rs
@@ -1,13 +1,13 @@
use anyhow::anyhow;

+
use radicle::Profile;
use radicle::cob;
+
use radicle::cob::Reaction;
use radicle::cob::patch;
use radicle::cob::thread;
-
use radicle::cob::Reaction;
-
use radicle::patch::cache::Patches as _;
use radicle::patch::ByRevision;
+
use radicle::patch::cache::Patches as _;
use radicle::storage::git::Repository;
-
use radicle::Profile;

use crate::git;
use crate::terminal as term;
modified crates/radicle-cli/src/commands/patch/comment/redact.rs
@@ -1,12 +1,12 @@
use anyhow::anyhow;

+
use radicle::Profile;
use radicle::cob;
use radicle::cob::patch;
use radicle::cob::thread;
-
use radicle::patch::cache::Patches as _;
use radicle::patch::ByRevision;
+
use radicle::patch::cache::Patches as _;
use radicle::storage::git::Repository;
-
use radicle::Profile;

use crate::git;
use crate::terminal as term;
modified crates/radicle-cli/src/commands/patch/edit.rs
@@ -1,8 +1,8 @@
use super::*;

use radicle::cob;
-
use radicle::cob::patch;
use radicle::cob::Title;
+
use radicle::cob::patch;
use radicle::crypto;
use radicle::node::device::Device;
use radicle::prelude::*;
modified crates/radicle-cli/src/commands/patch/list.rs
@@ -7,9 +7,9 @@ use radicle::prelude::*;
use radicle::profile::Profile;
use radicle::storage::git::Repository;

+
use term::Element as _;
use term::format::Author;
use term::table::{Table, TableOptions};
-
use term::Element as _;

use crate::terminal as term;
use crate::terminal::patch as common;
modified crates/radicle-cli/src/commands/patch/react.rs
@@ -1,11 +1,11 @@
use anyhow::anyhow;

+
use radicle::Profile;
use radicle::cob;
-
use radicle::cob::{patch, Reaction};
-
use radicle::patch::cache::Patches as _;
+
use radicle::cob::{Reaction, patch};
use radicle::patch::ByRevision;
+
use radicle::patch::cache::Patches as _;
use radicle::storage::git::Repository;
-
use radicle::Profile;

use crate::git;
use crate::terminal as term;
modified crates/radicle-cli/src/commands/patch/resolve.rs
@@ -1,9 +1,9 @@
use anyhow::anyhow;
+
use radicle::Profile;
use radicle::cob::thread::CommentId;
use radicle::patch::{self, PatchId};
-
use radicle::patch::{cache::Patches as _, ReviewId};
+
use radicle::patch::{ReviewId, cache::Patches as _};
use radicle::storage::git::Repository;
-
use radicle::Profile;

use crate::terminal as term;

modified crates/radicle-cli/src/commands/patch/review.rs
@@ -1,6 +1,6 @@
mod builder;

-
use anyhow::{anyhow, Context};
+
use anyhow::{Context, anyhow};

use radicle::cob::patch::{PatchId, RevisionId, Verdict};
use radicle::git;
modified crates/radicle-cli/src/commands/patch/review/builder.rs
@@ -26,7 +26,7 @@ use radicle::git;
use radicle::git::Oid;
use radicle::node::device::Device;
use radicle::prelude::*;
-
use radicle::storage::git::{cob::DraftStore, Repository};
+
use radicle::storage::git::{Repository, cob::DraftStore};
use radicle_surf::diff::*;
use radicle_term::{Element, VStack};

modified crates/radicle-cli/src/commands/publish.rs
@@ -1,6 +1,6 @@
mod args;

-
use anyhow::{anyhow, Context as _};
+
use anyhow::{Context as _, anyhow};

use radicle::cob;
use radicle::identity::{Identity, Visibility};
modified crates/radicle-cli/src/commands/publish/args.rs
@@ -27,8 +27,8 @@ pub struct Args {
#[cfg(test)]
mod test {
    use super::Args;
-
    use clap::error::ErrorKind;
    use clap::Parser;
+
    use clap::error::ErrorKind;

    #[test]
    fn should_parse_rid_non_urn() {
modified crates/radicle-cli/src/commands/remote/add.rs
@@ -1,9 +1,9 @@
use std::str::FromStr;

+
use radicle::Profile;
use radicle::git;
use radicle::git::fmt::RefString;
use radicle::prelude::*;
-
use radicle::Profile;
use radicle_crypto::PublicKey;

use crate::commands::checkout;
modified crates/radicle-cli/src/commands/remote/list.rs
@@ -1,10 +1,10 @@
use std::collections::HashSet;

+
use radicle::Profile;
use radicle::git::Url;
use radicle::identity::{Did, RepoId};
use radicle::node::{Alias, AliasStore as _, NodeId};
use radicle::storage::ReadStorage as _;
-
use radicle::Profile;
use radicle_term::{Element, Table};

use crate::git;
modified crates/radicle-cli/src/commands/seed.rs
@@ -1,9 +1,9 @@
mod args;

+
use radicle::node::Handle;
use radicle::node::policy;
use radicle::node::policy::{Policy, Scope};
-
use radicle::node::Handle;
-
use radicle::{prelude::*, Node};
+
use radicle::{Node, prelude::*};
use radicle_term::Element as _;

use crate::commands::sync;
modified crates/radicle-cli/src/commands/sync.rs
@@ -5,13 +5,13 @@ use std::collections::BTreeMap;
use std::collections::HashSet;
use std::time;

-
use anyhow::{anyhow, Context as _};
+
use anyhow::{Context as _, anyhow};

use radicle::node;
+
use radicle::node::SyncedAt;
use radicle::node::address::Store;
use radicle::node::sync;
use radicle::node::sync::fetch::SuccessfulOutcome;
-
use radicle::node::SyncedAt;
use radicle::node::{AliasStore, Handle as _, Node, Seed, SyncStatus};
use radicle::prelude::{NodeId, Profile, RepoId};
use radicle::storage::ReadRepository;
modified crates/radicle-cli/src/commands/sync/args.rs
@@ -4,14 +4,14 @@ use std::time;
use clap::{Parser, Subcommand, ValueEnum};

use radicle::{
-
    node::{sync, NodeId},
+
    node::{NodeId, sync},
    prelude::RepoId,
    storage::refs,
};

use crate::common_args::{
-
    SignedReferencesFeatureLevel, SignedReferencesFeatureLevelParser,
-
    ABOUT_FETCH_SIGNED_REFERENCES_FEATURE_LEVEL_MINIMUM,
+
    ABOUT_FETCH_SIGNED_REFERENCES_FEATURE_LEVEL_MINIMUM, SignedReferencesFeatureLevel,
+
    SignedReferencesFeatureLevelParser,
};
use crate::node::SyncSettings;

modified crates/radicle-cli/src/commands/unseed.rs
@@ -1,6 +1,6 @@
pub mod args;

-
use radicle::{prelude::*, Node};
+
use radicle::{Node, prelude::*};

use crate::terminal as term;

modified crates/radicle-cli/src/commands/watch.rs
@@ -2,7 +2,7 @@ mod args;

use std::{thread, time};

-
use anyhow::{anyhow, Context as _};
+
use anyhow::{Context as _, anyhow};

use radicle::git;
use radicle::git::raw::ErrorExt as _;
modified crates/radicle-cli/src/git.rs
@@ -14,21 +14,21 @@ use std::path::{Path, PathBuf};
use std::process::Command;
use std::str::FromStr;

-
use anyhow::anyhow;
use anyhow::Context as _;
+
use anyhow::anyhow;
use thiserror::Error;

use radicle::crypto::ssh;
use radicle::git;
-
use radicle::git::{Version, VERSION_REQUIRED};
+
use radicle::git::{VERSION_REQUIRED, Version};
use radicle::prelude::{NodeId, RepoId};
use radicle::storage::git::transport;

pub use radicle::git::Oid;

pub use radicle::git::raw::{
-
    build::CheckoutBuilder, AnnotatedCommit, Commit, Direction, ErrorCode, ErrorExt as _,
-
    MergeAnalysis, MergeOptions, Reference, Repository, Signature,
+
    AnnotatedCommit, Commit, Direction, ErrorCode, ErrorExt as _, MergeAnalysis, MergeOptions,
+
    Reference, Repository, Signature, build::CheckoutBuilder,
};

pub const CONFIG_COMMIT_GPG_SIGN: &str = "commit.gpgsign";
modified crates/radicle-cli/src/git/ddiff.rs
@@ -305,7 +305,7 @@ impl unified_diff::Decode for DiffModification {
            (v1, v2) => {
                return Err(unified_diff::Error::syntax(format!(
                    "indicator character expected, but got '{v1}{v2}'"
-
                )))
+
                )));
            }
        };

modified crates/radicle-cli/src/git/pretty_diff.rs
@@ -7,8 +7,8 @@ use radicle_surf::diff;
use radicle_surf::diff::{Added, Copied, Deleted, FileStats, Hunks, Modified, Moved};
use radicle_surf::diff::{Diff, DiffContent, FileDiff, Hunk, Modification};
use radicle_term as term;
-
use term::cell::Cell;
use term::VStack;
+
use term::cell::Cell;

use crate::git::unified_diff::FileHeader;
use crate::terminal::highlight::{Highlighter, Theme};
modified crates/radicle-cli/src/git/unified_diff.rs
@@ -533,7 +533,7 @@ impl Decode for Modification {
            Some(c) => {
                return Err(Error::syntax(format!(
                    "indicator character expected, but got '{c}'",
-
                )))
+
                )));
            }
            None => return Err(Error::UnexpectedEof),
        };
modified crates/radicle-cli/src/main.rs
@@ -5,8 +5,8 @@ use std::io::Write;
use std::{io::ErrorKind, process};

use anyhow::anyhow;
-
use clap::builder::styling::AnsiColor;
use clap::builder::Styles;
+
use clap::builder::styling::AnsiColor;
use clap::{CommandFactory as _, Parser, Subcommand};

use radicle::version::Version;
@@ -223,7 +223,7 @@ impl ExternalCommand {
        exe
    }

-
    fn display_exe(&self) -> impl Display {
+
    fn display_exe(&self) -> impl Display + use<> {
        match self.exe().into_string() {
            Ok(exe) => exe,
            Err(exe) => format!("{exe:?}"),
modified crates/radicle-cli/src/node.rs
@@ -4,7 +4,7 @@ use std::io::Write;

use radicle::node::sync;
use radicle::node::{Handle as _, NodeId};
-
use radicle::storage::{refs, ReadRepository, RepositoryError};
+
use radicle::storage::{ReadRepository, RepositoryError, refs};
use radicle::{Node, Profile};

use crate::terminal as term;
@@ -136,7 +136,9 @@ pub fn announce<R: ReadRepository>(
    match announce_(repo, settings, reporting, node, profile) {
        Ok(result) => Ok(result),
        Err(e) if e.is_connection_err() => {
-
            term::hint("Node is stopped. To announce changes to the network, start it with `rad node start`.");
+
            term::hint(
+
                "Node is stopped. To announce changes to the network, start it with `rad node start`.",
+
            );
            Ok(None)
        }
        Err(e) => Err(e),
modified crates/radicle-cli/src/terminal/args.rs
@@ -32,7 +32,9 @@ pub(crate) enum BlockTarget {
}

#[derive(Debug, Error)]
-
#[error("invalid repository or node specified (RID parsing failed with: '{repo}', NID parsing failed with: '{node}'))")]
+
#[error(
+
    "invalid repository or node specified (RID parsing failed with: '{repo}', NID parsing failed with: '{node}'))"
+
)]
pub(crate) struct BlockTargetParseError {
    repo: radicle::identity::IdError,
    node: radicle::crypto::PublicKeyError,
@@ -62,7 +64,9 @@ impl std::fmt::Display for BlockTarget {
}

#[derive(Debug, thiserror::Error)]
-
#[error("invalid Node ID specified (Node ID parsing failed with: '{nid}', DID parsing failed with: '{did}'))")]
+
#[error(
+
    "invalid Node ID specified (Node ID parsing failed with: '{nid}', DID parsing failed with: '{did}'))"
+
)]
pub(crate) struct NodeIdParseError {
    did: radicle::identity::did::DidError,
    nid: radicle::crypto::PublicKeyError,
modified crates/radicle-cli/src/terminal/cob.rs
@@ -1,4 +1,5 @@
use radicle::{
+
    Profile,
    cob::{
        self,
        cache::{MigrateCallback, MigrateProgress},
@@ -6,7 +7,6 @@ use radicle::{
    prelude::NodeId,
    profile,
    storage::ReadRepository,
-
    Profile,
};
use radicle_term as term;

modified crates/radicle-cli/src/terminal/comment.rs
@@ -1,5 +1,5 @@
-
use radicle::cob::thread::{Comment, CommentId};
use radicle::Profile;
+
use radicle::cob::thread::{Comment, CommentId};

use crate::terminal as term;
use crate::terminal::format::Author;
modified crates/radicle-cli/src/terminal/format.rs
@@ -3,14 +3,14 @@ use std::fmt;
use localtime::LocalTime;

pub use radicle_term::format::*;
-
pub use radicle_term::{style, Paint};
+
pub use radicle_term::{Paint, style};

use radicle::cob::ObjectId;
use radicle::identity::Visibility;
use radicle::node::policy::Policy;
use radicle::node::{Alias, AliasStore, NodeId};
use radicle::prelude::Did;
-
use radicle::profile::{env, Profile};
+
use radicle::profile::{Profile, env};
use radicle::storage::RefUpdate;
use radicle_term::element::Line;

modified crates/radicle-cli/src/terminal/io.rs
@@ -1,12 +1,12 @@
use anyhow::anyhow;
+
use radicle::cob::Reaction;
use radicle::cob::issue::Issue;
use radicle::cob::thread::{Comment, CommentId};
-
use radicle::cob::Reaction;
-
use radicle::crypto::ssh::keystore::MemorySigner;
use radicle::crypto::ssh::Keystore;
+
use radicle::crypto::ssh::keystore::MemorySigner;
use radicle::node::device::{BoxedDevice, Device};
-
use radicle::profile::env::RAD_PASSPHRASE;
use radicle::profile::Profile;
+
use radicle::profile::env::RAD_PASSPHRASE;

pub use radicle_term::io::*;
pub use radicle_term::spinner;
modified crates/radicle-cli/src/terminal/issue.rs
@@ -3,14 +3,14 @@ use std::io;
use radicle_term::table::TableOptions;
use radicle_term::{Table, VStack};

+
use radicle::Profile;
use radicle::cob;
use radicle::cob::issue;
use radicle::cob::issue::CloseReason;
-
use radicle::Profile;

use crate::terminal as term;
-
use crate::terminal::format::Author;
use crate::terminal::Element;
+
use crate::terminal::format::Author;

pub const OPEN_MSG: &str = r#"
<!--
modified crates/radicle-cli/src/terminal/patch.rs
@@ -9,13 +9,13 @@ use std::io::IsTerminal as _;
use thiserror::Error;

use radicle::cob;
-
use radicle::cob::patch;
use radicle::cob::Title;
+
use radicle::cob::patch;
use radicle::git;
use radicle::patch::{Patch, PatchId};
use radicle::prelude::Profile;
-
use radicle::storage::git::Repository;
use radicle::storage::WriteRepository as _;
+
use radicle::storage::git::Repository;

use crate::terminal as term;
use crate::terminal::Element;
modified crates/radicle-cli/src/warning.rs
@@ -1,8 +1,8 @@
use std::collections::HashMap;
use std::sync::LazyLock;

-
use radicle::node::config::ConnectAddress;
use radicle::node::Address;
+
use radicle::node::config::ConnectAddress;
use radicle::profile::Config;

static NODES_RENAMED: LazyLock<HashMap<Address, Address>> = LazyLock::new(|| {
modified crates/radicle-cli/tests/commands/clone.rs
@@ -1,10 +1,10 @@
use crate::test;
use crate::util::environment::Environment;
use radicle::node;
+
use radicle::node::UserAgent;
use radicle::node::address::Store as _;
use radicle::node::policy::Scope;
use radicle::node::routing::Store as _;
-
use radicle::node::UserAgent;
use radicle::node::{Alias, Handle as _};
use radicle::prelude::{NodeId, RepoId};
use radicle::storage::ReadStorage as _;
modified crates/radicle-cli/tests/commands/id.rs
@@ -1,9 +1,9 @@
use crate::test;
use crate::util::environment::Environment;
use crate::util::formula::formula;
-
use radicle::node::policy::Scope;
-
use radicle::node::Event;
use radicle::node::DEFAULT_TIMEOUT;
+
use radicle::node::Event;
+
use radicle::node::policy::Scope;
use radicle::node::{Alias, Handle as _};
use radicle::prelude::RepoId;
use radicle::storage::ReadStorage as _;
modified crates/radicle-cli/tests/commands/node.rs
@@ -1,9 +1,9 @@
use crate::test;
use crate::util::environment::Environment;
-
use radicle::node::address::Store as _;
-
use radicle::node::config::DefaultSeedingPolicy;
use radicle::node::Address;
use radicle::node::UserAgent;
+
use radicle::node::address::Store as _;
+
use radicle::node::config::DefaultSeedingPolicy;
use radicle::node::{Alias, Handle as _};
use radicle::test::fixtures;
use radicle_localtime::LocalTime;
modified crates/radicle-cli/tests/commands/patch.rs
@@ -1,8 +1,8 @@
use crate::test;
use crate::util::environment::Environment;
use crate::util::formula::formula;
-
use radicle::node::policy::Scope;
use radicle::node::Handle as _;
+
use radicle::node::policy::Scope;
use radicle::prelude::RepoId;
use radicle::test::fixtures;
use std::str::FromStr;
modified crates/radicle-cli/tests/commands/policy.rs
@@ -1,8 +1,8 @@
use crate::test;
use crate::util::environment::Environment;
use radicle::node;
-
use radicle::node::config::DefaultSeedingPolicy;
use radicle::node::Alias;
+
use radicle::node::config::DefaultSeedingPolicy;

#[test]
fn rad_seed_and_follow() {
modified crates/radicle-cli/tests/commands/sync.rs
@@ -1,8 +1,8 @@
use std::str::FromStr as _;

+
use radicle::node::Handle as _;
use radicle::node::config::DefaultSeedingPolicy;
use radicle::node::policy::Scope;
-
use radicle::node::Handle as _;
use radicle::prelude::RepoId;
use radicle::storage::{ReadStorage as _, RemoteRepository as _};

modified crates/radicle-cli/tests/commands/utility.rs
@@ -1,7 +1,7 @@
use std::str::FromStr as _;

-
use radicle::node::policy::Scope;
use radicle::node::DEFAULT_TIMEOUT;
+
use radicle::node::policy::Scope;
use radicle::node::{Alias, Handle as _};
use radicle::prelude::RepoId;
use radicle::profile;
@@ -36,11 +36,13 @@ fn rad_config() {
    let mut environment = Environment::new();
    let alias = Alias::new("alice");
    let profile = environment.profile_with(profile::Config {
-
        preferred_seeds: vec![radicle::node::config::seeds::RADICLE_NODE_BOOTSTRAP_IRIS
-
            .clone()
-
            .first()
-
            .unwrap()
-
            .clone()],
+
        preferred_seeds: vec![
+
            radicle::node::config::seeds::RADICLE_NODE_BOOTSTRAP_IRIS
+
                .clone()
+
                .first()
+
                .unwrap()
+
                .clone(),
+
        ],
        ..profile::Config::new(alias)
    });
    let working = tempfile::tempdir().unwrap();
modified crates/radicle-cli/tests/util/environment.rs
@@ -2,7 +2,7 @@ use std::path::PathBuf;
use std::str::FromStr;

use radicle::cob::cache::COBS_DB_FILE;
-
use radicle::crypto::ssh::{keystore::MemorySigner, Keystore};
+
use radicle::crypto::ssh::{Keystore, keystore::MemorySigner};
use radicle::crypto::{KeyPair, Seed};
use radicle::git;
use radicle::node::policy::store as policy;
@@ -47,10 +47,9 @@ pub(crate) mod config {
                },
                ..Limits::default()
            },
-
            external_addresses: vec![node::Address::from_str(&format!(
-
                "{alias}.radicle.example:8776"
-
            ))
-
            .unwrap()],
+
            external_addresses: vec![
+
                node::Address::from_str(&format!("{alias}.radicle.example:8776")).unwrap(),
+
            ],
            ..node(alias)
        }
    }
modified crates/radicle-cob/src/backend/git/change.rs
@@ -15,10 +15,10 @@ use crate::change::store::Version;
use crate::signatures;
use crate::trailers::CommitTrailer;
use crate::{
-
    change,
-
    change::{store, Contents, Entry, Timestamp},
+
    Embed, change,
+
    change::{Contents, Entry, Timestamp, store},
    signatures::{ExtendedSignature, Signatures},
-
    trailers, Embed,
+
    trailers,
};

use super::commit::Commit;
modified crates/radicle-cob/src/backend/git/commit.rs
@@ -6,9 +6,9 @@ use std::str::{self, FromStr};
use git2::{ObjectType, Oid};

use metadata::author::Author;
+
use metadata::commit::CommitData;
use metadata::commit::headers::Headers;
use metadata::commit::trailers::OwnedTrailer;
-
use metadata::commit::CommitData;

use trailers::Trailers;

modified crates/radicle-cob/src/change/store.rs
@@ -7,7 +7,7 @@ use oid::Oid;
use serde::{Deserialize, Serialize};

use crate::object::collaboration::error::{Create, Update};
-
use crate::{signatures, TypeName};
+
use crate::{TypeName, signatures};

/// Change entry storage.
pub trait Storage {
modified crates/radicle-cob/src/change_graph.rs
@@ -7,8 +7,8 @@ use dag::Dag;
use oid::Oid;

use crate::{
-
    change, object, object::collaboration::Evaluate, signatures::ExtendedSignature,
-
    CollaborativeObject, Entry, EntryId, History, ObjectId, TypeName,
+
    CollaborativeObject, Entry, EntryId, History, ObjectId, TypeName, change, object,
+
    object::collaboration::Evaluate, signatures::ExtendedSignature,
};

#[derive(Debug, thiserror::Error)]
modified crates/radicle-cob/src/lib.rs
@@ -77,8 +77,8 @@ mod change_graph;
mod trailers;

pub mod change;
-
pub use change::store::{Contents, Embed, EntryId, Manifest, Version};
pub use change::Entry;
+
pub use change::store::{Contents, Embed, EntryId, Manifest, Version};

pub mod history;
pub use history::History;
@@ -91,8 +91,8 @@ pub use type_name::TypeName;

pub mod object;
pub use object::{
-
    create, get, info, list, remove, update, CollaborativeObject, Create, Evaluate, ObjectId,
-
    Update, Updated,
+
    CollaborativeObject, Create, Evaluate, ObjectId, Update, Updated, create, get, info, list,
+
    remove, update,
};

#[cfg(test)]
modified crates/radicle-cob/src/object.rs
@@ -9,8 +9,8 @@ use thiserror::Error;

pub mod collaboration;
pub use collaboration::{
-
    create, get, info, list, parse_refstr, remove, update, CollaborativeObject, Create, Evaluate,
-
    Update, Updated,
+
    CollaborativeObject, Create, Evaluate, Update, Updated, create, get, info, list, parse_refstr,
+
    remove, update,
};

pub mod storage;
modified crates/radicle-cob/src/object/collaboration.rs
@@ -6,12 +6,12 @@ use nonempty::NonEmpty;
use oid::Oid;

use crate::change::store::{Manifest, Version};
-
use crate::{change, Entry, History, ObjectId, TypeName};
+
use crate::{Entry, History, ObjectId, TypeName, change};

pub mod error;

mod create;
-
pub use create::{create, Create};
+
pub use create::{Create, create};

mod get;
pub use get::get;
@@ -25,7 +25,7 @@ mod remove;
pub use remove::remove;

mod update;
-
pub use update::{update, Update, Updated};
+
pub use update::{Update, Updated, update};

/// A collaborative object
#[derive(Debug, Clone, PartialEq, Eq)]
modified crates/radicle-cob/src/object/collaboration/get.rs
@@ -2,7 +2,7 @@

use crypto::ssh::ExtendedSignature;

-
use crate::{change_graph::ChangeGraph, CollaborativeObject, Evaluate, ObjectId, TypeName};
+
use crate::{CollaborativeObject, Evaluate, ObjectId, TypeName, change_graph::ChangeGraph};

use super::error;

@@ -24,10 +24,10 @@ where
    T: Evaluate<S>,
    S: crate::object::Storage,
    S: crate::change::Storage<
-
        ObjectId = crate::object::Oid,
-
        Parent = crate::object::Oid,
-
        Signatures = ExtendedSignature,
-
    >,
+
            ObjectId = crate::object::Oid,
+
            Parent = crate::object::Oid,
+
            Signatures = ExtendedSignature,
+
        >,
{
    let tip_refs = storage
        .objects(typename, oid)
modified crates/radicle-cob/src/object/collaboration/info.rs
@@ -9,7 +9,7 @@ use std::collections::BTreeSet;
use crypto::ssh::ExtendedSignature;
use oid::Oid;

-
use crate::{change_graph::ChangeGraph, ObjectId, TypeName};
+
use crate::{ObjectId, TypeName, change_graph::ChangeGraph};

use super::error;

@@ -41,10 +41,10 @@ pub fn changegraph<S>(
where
    S: crate::object::Storage,
    S: crate::change::Storage<
-
        ObjectId = crate::object::Oid,
-
        Parent = crate::object::Oid,
-
        Signatures = ExtendedSignature,
-
    >,
+
            ObjectId = crate::object::Oid,
+
            Parent = crate::object::Oid,
+
            Signatures = ExtendedSignature,
+
        >,
{
    let tip_refs = storage
        .objects(typename, oid)
modified crates/radicle-cob/src/object/collaboration/list.rs
@@ -1,6 +1,6 @@
// Copyright © 2022 The Radicle Link Contributors

-
use crate::{change_graph::ChangeGraph, CollaborativeObject, Evaluate, TypeName};
+
use crate::{CollaborativeObject, Evaluate, TypeName, change_graph::ChangeGraph};

use super::error;

@@ -19,10 +19,10 @@ where
    T: Evaluate<S>,
    S: crate::object::Storage,
    S: crate::change::Storage<
-
        ObjectId = crate::object::Oid,
-
        Parent = crate::object::Oid,
-
        Signatures = crate::ExtendedSignature,
-
    >,
+
            ObjectId = crate::object::Oid,
+
            Parent = crate::object::Oid,
+
            Signatures = crate::ExtendedSignature,
+
        >,
{
    let references = storage
        .types(typename)
modified crates/radicle-cob/src/object/collaboration/update.rs
@@ -5,8 +5,8 @@ use nonempty::NonEmpty;
use oid::Oid;

use crate::{
-
    change, change_graph::ChangeGraph, history::EntryId, CollaborativeObject, Embed, Evaluate,
-
    ExtendedSignature, ObjectId, TypeName,
+
    CollaborativeObject, Embed, Evaluate, ExtendedSignature, ObjectId, TypeName, change,
+
    change_graph::ChangeGraph, history::EntryId,
};

use super::error;
modified crates/radicle-cob/src/signatures.rs
@@ -7,10 +7,10 @@ use std::{
    ops::{Deref, DerefMut},
};

-
use crypto::{ssh, PublicKey};
+
use crypto::{PublicKey, ssh};
use metadata::commit::{
-
    headers::Signature::{Pgp, Ssh},
    CommitData,
+
    headers::Signature::{Pgp, Ssh},
};

pub use ssh::ExtendedSignature;
modified crates/radicle-cob/src/test/storage.rs
@@ -6,9 +6,9 @@ use fmt::Component;
use tempfile::TempDir;

use crate::{
-
    change,
+
    ObjectId, Store, change,
    object::{self, Reference},
-
    signatures, ObjectId, Store,
+
    signatures,
};

pub mod error {
modified crates/radicle-cob/src/tests.rs
@@ -2,7 +2,7 @@ use fmt::{Component, RefString};

use radicle_git_ref_format::refname;

-
use crate::{object, test::arbitrary::Invalid, ObjectId, TypeName};
+
use crate::{ObjectId, TypeName, object, test::arbitrary::Invalid};

#[cfg(feature = "git2")]
mod git {
@@ -10,11 +10,11 @@ mod git {

    use crypto::test::signer::MockSigner;
    use crypto::{PublicKey, Signer};
-
    use nonempty::{nonempty, NonEmpty};
+
    use nonempty::{NonEmpty, nonempty};
    use qcheck::Arbitrary;

    use crate::{
-
        create, get, list, update, Create, Entry, ObjectId, TypeName, Update, Updated, Version,
+
        Create, Entry, ObjectId, TypeName, Update, Updated, Version, create, get, list, update,
    };

    use crate::test;
@@ -22,7 +22,7 @@ mod git {
    #[test]
    fn roundtrip() {
        let storage = test::Storage::new();
-
        let signer = gen::<MockSigner>(1);
+
        let signer = r#gen::<MockSigner>(1);
        let terry = test::Person::new(&storage, "terry", *signer.public_key()).unwrap();
        let proj = test::Project::new(&storage, "discworld", *signer.public_key()).unwrap();
        let proj = test::RemoteProject {
@@ -56,7 +56,7 @@ mod git {
    #[test]
    fn list_cobs() {
        let storage = test::Storage::new();
-
        let signer = gen::<MockSigner>(1);
+
        let signer = r#gen::<MockSigner>(1);
        let terry = test::Person::new(&storage, "terry", *signer.public_key()).unwrap();
        let proj = test::Project::new(&storage, "discworld", *signer.public_key()).unwrap();
        let proj = test::RemoteProject {
@@ -108,7 +108,7 @@ mod git {
    #[test]
    fn update_cob() {
        let storage = test::Storage::new();
-
        let signer = gen::<MockSigner>(1);
+
        let signer = r#gen::<MockSigner>(1);
        let terry = test::Person::new(&storage, "terry", *signer.public_key()).unwrap();
        let proj = test::Project::new(&storage, "discworld", *signer.public_key()).unwrap();
        let proj = test::RemoteProject {
@@ -163,9 +163,9 @@ mod git {
    #[test]
    fn traverse_cobs() {
        let storage = test::Storage::new();
-
        let neil_signer = gen::<MockSigner>(2);
+
        let neil_signer = r#gen::<MockSigner>(2);
        let neil = test::Person::new(&storage, "gaiman", *neil_signer.public_key()).unwrap();
-
        let terry_signer = gen::<MockSigner>(1);
+
        let terry_signer = r#gen::<MockSigner>(1);
        let terry = test::Person::new(&storage, "pratchett", *terry_signer.public_key()).unwrap();
        let proj = test::Project::new(&storage, "discworld", *terry_signer.public_key()).unwrap();
        let terry_proj = test::RemoteProject {
@@ -264,10 +264,10 @@ mod git {
        Ok(())
    }

-
    fn gen<T: Arbitrary>(size: usize) -> T {
-
        let mut gen = qcheck::Gen::new(size);
+
    fn r#gen<T: Arbitrary>(size: usize) -> T {
+
        let mut r#gen = qcheck::Gen::new(size);

-
        T::arbitrary(&mut gen)
+
        T::arbitrary(&mut r#gen)
    }
}

modified crates/radicle-cob/src/type_name.rs
@@ -116,15 +116,19 @@ mod test {
        assert!(TypeName::from_str("abc..ghi").is_err());
        assert!(TypeName::from_str("abc.-123.ghi").is_err());
        assert!(TypeName::from_str("abc.123-.ghi").is_err());
-
        assert!(TypeName::from_str(&format!(
-
            "a.very.long.name.that.exceeds.the.two-hundred-and-fifty-five.length.limit.{}",
-
            "a".repeat(255)
-
        ))
-
        .is_err());
-
        assert!(TypeName::from_str(&format!(
-
            "component.exceeds.sixty-three.limit.{}",
-
            "a".repeat(64)
-
        ))
-
        .is_err());
+
        assert!(
+
            TypeName::from_str(&format!(
+
                "a.very.long.name.that.exceeds.the.two-hundred-and-fifty-five.length.limit.{}",
+
                "a".repeat(255)
+
            ))
+
            .is_err()
+
        );
+
        assert!(
+
            TypeName::from_str(&format!(
+
                "component.exceeds.sixty-three.limit.{}",
+
                "a".repeat(64)
+
            ))
+
            .is_err()
+
        );
    }
}
modified crates/radicle-core/src/repo.rs
@@ -219,7 +219,7 @@ mod radicle_git_ref_format_impls {
mod serde_impls {
    use alloc::string::String;

-
    use serde::{de, Deserialize, Deserializer, Serialize};
+
    use serde::{Deserialize, Deserializer, Serialize, de};

    use super::RepoId;

@@ -347,48 +347,72 @@ mod test {
    fn invalid() {
        assert!("".parse::<RepoId>().is_err());
        assert!("not-a-valid-rid".parse::<RepoId>().is_err());
-
        assert!("xyz:z3gqcJUoA1n9HaHKufZs5FCSGazv5"
-
            .parse::<RepoId>()
-
            .is_err());
-
        assert!("RAD:z3gqcJUoA1n9HaHKufZs5FCSGazv5"
-
            .parse::<RepoId>()
-
            .is_err());
+
        assert!(
+
            "xyz:z3gqcJUoA1n9HaHKufZs5FCSGazv5"
+
                .parse::<RepoId>()
+
                .is_err()
+
        );
+
        assert!(
+
            "RAD:z3gqcJUoA1n9HaHKufZs5FCSGazv5"
+
                .parse::<RepoId>()
+
                .is_err()
+
        );
        assert!("rad:".parse::<RepoId>().is_err());
-
        assert!("rad:z3gqcJUoA1n9HaHKufZs5FCSG0zv5"
-
            .parse::<RepoId>()
-
            .is_err());
-
        assert!("rad:z3gqcJUoA1n9HaHKufZs5FCSGOzv5"
-
            .parse::<RepoId>()
-
            .is_err());
-
        assert!("rad:z3gqcJUoA1n9HaHKufZs5FCSGIzv5"
-
            .parse::<RepoId>()
-
            .is_err());
-
        assert!("rad:z3gqcJUoA1n9HaHKufZs5FCSGlzv5"
-
            .parse::<RepoId>()
-
            .is_err());
-
        assert!("rad:z3gqcJUoA1n9HaHKufZs5FCSGázv5"
-
            .parse::<RepoId>()
-
            .is_err());
-
        assert!("rad:z3gqcJUoA1n9HaHKufZs5FCSG@zv5"
-
            .parse::<RepoId>()
-
            .is_err());
-
        assert!("rad:Z3gqcJUoA1n9HaHKufZs5FCSGazv5"
-
            .parse::<RepoId>()
-
            .is_err());
+
        assert!(
+
            "rad:z3gqcJUoA1n9HaHKufZs5FCSG0zv5"
+
                .parse::<RepoId>()
+
                .is_err()
+
        );
+
        assert!(
+
            "rad:z3gqcJUoA1n9HaHKufZs5FCSGOzv5"
+
                .parse::<RepoId>()
+
                .is_err()
+
        );
+
        assert!(
+
            "rad:z3gqcJUoA1n9HaHKufZs5FCSGIzv5"
+
                .parse::<RepoId>()
+
                .is_err()
+
        );
+
        assert!(
+
            "rad:z3gqcJUoA1n9HaHKufZs5FCSGlzv5"
+
                .parse::<RepoId>()
+
                .is_err()
+
        );
+
        assert!(
+
            "rad:z3gqcJUoA1n9HaHKufZs5FCSGázv5"
+
                .parse::<RepoId>()
+
                .is_err()
+
        );
+
        assert!(
+
            "rad:z3gqcJUoA1n9HaHKufZs5FCSG@zv5"
+
                .parse::<RepoId>()
+
                .is_err()
+
        );
+
        assert!(
+
            "rad:Z3gqcJUoA1n9HaHKufZs5FCSGazv5"
+
                .parse::<RepoId>()
+
                .is_err()
+
        );
        assert!("rad:z3gqcJUoA1n9HaHKuf".parse::<RepoId>().is_err());
-
        assert!("rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5abcdef"
-
            .parse::<RepoId>()
-
            .is_err());
-
        assert!("rad: z3gqcJUoA1n9HaHKufZs5FCSGazv5"
-
            .parse::<RepoId>()
-
            .is_err());
+
        assert!(
+
            "rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5abcdef"
+
                .parse::<RepoId>()
+
                .is_err()
+
        );
+
        assert!(
+
            "rad: z3gqcJUoA1n9HaHKufZs5FCSGazv5"
+
                .parse::<RepoId>()
+
                .is_err()
+
        );
    }

    #[test]
    fn valid() {
-
        assert!("rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5"
-
            .parse::<RepoId>()
-
            .is_ok());
+
        assert!(
+
            "rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5"
+
                .parse::<RepoId>()
+
                .is_ok()
+
        );
        assert!("z3gqcJUoA1n9HaHKufZs5FCSGazv5".parse::<RepoId>().is_ok());
        assert!("z3XncAdkZjeK9mQS5Sdc4qhw98BUX".parse::<RepoId>().is_ok());
    }
modified crates/radicle-crypto/src/lib.rs
@@ -6,7 +6,7 @@ use ec25519 as ed25519;
use serde::{Deserialize, Serialize};
use thiserror::Error;

-
pub use ed25519::{edwards25519, Error, KeyPair, Seed};
+
pub use ed25519::{Error, KeyPair, Seed, edwards25519};

pub extern crate signature;

modified crates/radicle-crypto/src/ssh/keystore.rs
@@ -284,7 +284,7 @@ impl EcSk for MemorySigner {
    where
        Self: Sized,
    {
-
        let ms = Self::gen();
+
        let ms = Self::r#gen();
        let pk = ms.public;

        (ms, pk)
@@ -356,7 +356,7 @@ impl MemorySigner {
    }

    /// Generate a new memory signer.
-
    pub fn gen() -> Self {
+
    pub fn r#gen() -> Self {
        let keypair = KeyPair::generate();
        let sk = keypair.sk;

modified crates/radicle-crypto/src/test/arbitrary.rs
@@ -1,6 +1,6 @@
use qcheck::Arbitrary;

-
use crate::{test::signer::MockSigner, KeyPair, PublicKey, SecretKey, Seed};
+
use crate::{KeyPair, PublicKey, SecretKey, Seed, test::signer::MockSigner};

impl Arbitrary for MockSigner {
    fn arbitrary(g: &mut qcheck::Gen) -> Self {
modified crates/radicle-crypto/src/test/signer.rs
@@ -1,4 +1,4 @@
-
use crate::{ssh::ExtendedSignature, KeyPair, PublicKey, SecretKey, Seed, Signature};
+
use crate::{KeyPair, PublicKey, SecretKey, Seed, Signature, ssh::ExtendedSignature};

#[derive(Debug, Clone)]
pub struct MockSigner {
modified crates/radicle-fetch/src/git/mem.rs
@@ -1,7 +1,7 @@
use std::collections::HashMap;

-
use radicle::git::fmt::{Component, Qualified, RefString};
use radicle::git::Oid;
+
use radicle::git::fmt::{Component, Qualified, RefString};
use radicle::prelude::PublicKey;

use super::refs::{Applied, RefUpdate, Update};
modified crates/radicle-fetch/src/git/refs/update.rs
@@ -18,8 +18,8 @@
use std::collections::BTreeMap;

use either::Either;
-
use radicle::git::fmt::{Namespaced, Qualified};
use radicle::git::Oid;
+
use radicle::git::fmt::{Namespaced, Qualified};
use radicle::prelude::PublicKey;

pub use radicle::storage::RefUpdate;
modified crates/radicle-fetch/src/git/repository.rs
@@ -3,9 +3,8 @@ pub mod error;
use either::Either;
use radicle::git::raw::ErrorExt as _;
use radicle::git::{
-
    self,
+
    self, Oid,
    fmt::{Namespaced, Qualified},
-
    Oid,
};
use radicle::storage::git::Repository;

modified crates/radicle-fetch/src/git/repository/error.rs
@@ -1,7 +1,6 @@
use radicle::git::{
-
    self,
+
    self, Oid,
    fmt::{Namespaced, Qualified},
-
    Oid,
};
use thiserror::Error;

modified crates/radicle-fetch/src/handle.rs
@@ -1,12 +1,12 @@
-
use std::sync::atomic::{self, AtomicBool};
use std::sync::Arc;
+
use std::sync::atomic::{self, AtomicBool};

use bstr::BString;
use radicle::crypto::PublicKey;
use radicle::git::Oid;
use radicle::identity::{Doc, DocError};
-
use radicle::storage::git::Repository;
use radicle::storage::ReadRepository;
+
use radicle::storage::git::Repository;

use crate::policy::{Allowed, BlockList};
use crate::transport::{ConnectionStream, Transport};
modified crates/radicle-fetch/src/lib.rs
@@ -12,9 +12,9 @@ mod state;
use std::io;
use std::time::Instant;

-
use gix_protocol::{handshake, Handshake};
+
use gix_protocol::{Handshake, handshake};

-
pub use gix_protocol::{transport::bstr::ByteSlice, RemoteProgress};
+
pub use gix_protocol::{RemoteProgress, transport::bstr::ByteSlice};
pub use handle::Handle;
pub use policy::{Allowed, BlockList, Scope};
use radicle::storage::git::Repository;
@@ -22,8 +22,8 @@ pub use state::{Config, FetchLimit, FetchResult};
pub use transport::Transport;

use radicle::crypto::PublicKey;
-
use radicle::storage::refs::RefsAt;
use radicle::storage::ReadRepository as _;
+
use radicle::storage::refs::RefsAt;
use state::FetchState;
use thiserror::Error;

modified crates/radicle-fetch/src/refs.rs
@@ -2,9 +2,8 @@ use bstr::{BString, ByteSlice};
use either::Either;
use radicle::crypto::PublicKey;
use radicle::git::{
-
    self,
+
    self, Oid,
    fmt::{Component, Namespaced, Qualified},
-
    Oid,
};
use thiserror::Error;

modified crates/radicle-fetch/src/sigrefs.rs
@@ -2,7 +2,7 @@ use std::collections::BTreeMap;
use std::ops::Not as _;

pub use radicle::storage::refs::SignedRefs;
-
pub use radicle::storage::{git::Validation, Validations};
+
pub use radicle::storage::{Validations, git::Validation};
use radicle::{crypto::PublicKey, storage::ValidateRepository};

pub mod error {
modified crates/radicle-fetch/src/stage.rs
@@ -37,10 +37,10 @@ use either::Either;
use gix_protocol::handshake::Ref;
use nonempty::NonEmpty;
use radicle::crypto::PublicKey;
-
use radicle::git::fmt::{refname, Component, Namespaced, Qualified};
+
use radicle::git::fmt::{Component, Namespaced, Qualified, refname};
+
use radicle::storage::ReadRepository;
use radicle::storage::git::Repository;
use radicle::storage::refs::{RefsAt, Special};
-
use radicle::storage::ReadRepository;

use crate::git::refs::{Policy, Update, Updates};
use crate::policy::BlockList;
modified crates/radicle-fetch/src/state.rs
@@ -3,14 +3,14 @@ use std::time::Instant;

use gix_protocol::Handshake;
use radicle::crypto::PublicKey;
-
use radicle::git::{fmt::Qualified, Oid};
+
use radicle::git::{Oid, fmt::Qualified};
use radicle::identity::{Did, Doc, DocError};

use radicle::storage;
use radicle::storage::git::Repository;
use radicle::storage::refs::{FeatureLevel, RefsAt};
use radicle::storage::{
-
    git::Validation, Remote, RemoteId, RemoteRepository, Remotes, ValidateRepository, Validations,
+
    Remote, RemoteId, RemoteRepository, Remotes, ValidateRepository, Validations, git::Validation,
};

use crate::git;
@@ -20,7 +20,7 @@ use crate::git::repository;
use crate::sigrefs::SignedRefs;
use crate::stage;
use crate::stage::ProtocolStage;
-
use crate::{refs, sigrefs, transport, Handle};
+
use crate::{Handle, refs, sigrefs, transport};

/// The data size limit, 5Mb, while fetching the special refs,
/// i.e. `rad/id` and `rad/sigrefs`.
@@ -549,9 +549,13 @@ impl FetchState {
                        }) => {
                            let level_required = levels.max();
                            if level_reachable >= level_required {
-
                                log::info!("Non-delegate {remote} has downgraded history, currently stuck at '{actual}', expects to be upgraded to '{level_required}' and will be upgraded to '{level_reachable}'.")
+
                                log::info!(
+
                                    "Non-delegate {remote} has downgraded history, currently stuck at '{actual}', expects to be upgraded to '{level_required}' and will be upgraded to '{level_reachable}'."
+
                                )
                            } else {
-
                                log::debug!("Non-delegate {remote} has downgraded history, currently stuck at '{actual}', expects to be upgraded to '{level_required}' but only level '{level_reachable}' was advertised.");
+
                                log::debug!(
+
                                    "Non-delegate {remote} has downgraded history, currently stuck at '{actual}', expects to be upgraded to '{level_required}' but only level '{level_reachable}' was advertised."
+
                                );
                                self.prune(&remote);
                                continue;
                            }
@@ -601,9 +605,13 @@ impl FetchState {
                        }) => {
                            let level_required = levels.max();
                            if level_reachable >= level_required {
-
                                log::info!("Delegate {remote} has downgraded history, currently stuck at '{actual}', expects to be upgraded to '{level_required}' and will be upgraded to '{level_reachable}'.")
+
                                log::info!(
+
                                    "Delegate {remote} has downgraded history, currently stuck at '{actual}', expects to be upgraded to '{level_required}' and will be upgraded to '{level_reachable}'."
+
                                )
                            } else {
-
                                log::info!("Delegate {remote} has downgraded history, currently stuck at '{actual}', expects to be upgraded to '{level_required}' but only level '{level_reachable}' was advertised.");
+
                                log::info!(
+
                                    "Delegate {remote} has downgraded history, currently stuck at '{actual}', expects to be upgraded to '{level_required}' but only level '{level_reachable}' was advertised."
+
                                );
                                self.prune(&remote);
                                continue;
                            }
@@ -629,7 +637,10 @@ impl FetchState {
                    }

                    if level_reachable < FeatureLevel::LATEST {
-
                        log::warn!("Delegate {remote} is on feature level '{level_reachable}' which is lower than '{}', they should consider upgrading Radicle.", FeatureLevel::LATEST)
+
                        log::warn!(
+
                            "Delegate {remote} is on feature level '{level_reachable}' which is lower than '{}', they should consider upgrading Radicle.",
+
                            FeatureLevel::LATEST
+
                        )
                    }
                }
            }
modified crates/radicle-fetch/src/transport.rs
@@ -4,18 +4,18 @@ pub(crate) mod ls_refs;
use std::collections::BTreeSet;
use std::io;
use std::path::PathBuf;
-
use std::sync::atomic::AtomicBool;
use std::sync::Arc;
+
use std::sync::atomic::AtomicBool;

use bstr::BString;
use gix_features::progress::prodash::progress;
-
use gix_protocol::handshake;
use gix_protocol::Handshake;
-
use gix_transport::client;
+
use gix_protocol::handshake;
use gix_transport::Protocol;
use gix_transport::Service;
-
use radicle::git::fmt::Qualified;
+
use gix_transport::client;
use radicle::git::Oid;
+
use radicle::git::fmt::Qualified;
use radicle::storage::git::Repository;
use thiserror::Error;

modified crates/radicle-fetch/src/transport/fetch.rs
@@ -1,16 +1,16 @@
use std::io;
use std::path::PathBuf;
-
use std::sync::{atomic::AtomicBool, Arc};
+
use std::sync::{Arc, atomic::AtomicBool};

use gix_features::progress::{DynNestedProgress, NestedProgress};
use gix_pack as pack;
use gix_protocol::fetch::negotiate::one_round::State;
use gix_protocol::handshake::Ref;
-
use gix_protocol::{fetch, Handshake};
+
use gix_protocol::{Handshake, fetch};

use crate::git::packfile;

-
use super::{agent_name, Connection, WantsHaves};
+
use super::{Connection, WantsHaves, agent_name};

pub type Error = fetch::Error;

modified crates/radicle-fetch/src/transport/ls_refs.rs
@@ -5,12 +5,12 @@ use std::io;
use gix_features::progress::Progress;
use gix_protocol::handshake::Ref;
use gix_protocol::transport::Protocol;
-
use gix_protocol::{ls_refs, Handshake};
+
use gix_protocol::{Handshake, ls_refs};
use gix_transport::bstr::BString;

use crate::stage::RefPrefix;

-
use super::{agent_name, Connection};
+
use super::{Connection, agent_name};

/// Configuration for running an ls-refs process.
///
modified crates/radicle-git-metadata/src/commit/parse.rs
@@ -6,9 +6,9 @@ use std::borrow::Cow;
use crate::author::Author;

use super::{
+
    CommitData,
    headers::Headers,
    trailers::{OwnedTrailer, Token, Trailer},
-
    CommitData,
};

#[derive(Debug, thiserror::Error)]
modified crates/radicle-git-metadata/src/commit/parse/test/error.rs
@@ -1,4 +1,4 @@
-
use crate::commit::parse::{parse, ParseError};
+
use crate::commit::parse::{ParseError, parse};

/// Helper type whose FromStr always fails.
///
modified crates/radicle-git-metadata/src/commit/parse/test/success.rs
@@ -142,9 +142,11 @@ This line is not a valid trailer."#;

    assert_eq!(commit.trailers().count(), 0);
    assert!(commit.message().contains("Signed-off-by"));
-
    assert!(commit
-
        .message()
-
        .contains("This line is not a valid trailer."));
+
    assert!(
+
        commit
+
            .message()
+
            .contains("This line is not a valid trailer.")
+
    );
}

#[test]
modified crates/radicle-node/src/control.rs
@@ -1,7 +1,7 @@
//! Client control socket implementation.
-
use std::io::prelude::*;
use std::io::BufReader;
use std::io::LineWriter;
+
use std::io::prelude::*;
use std::path::PathBuf;
use std::{io, net, time};

@@ -283,8 +283,8 @@ mod tests {

    use super::*;
    use crate::identity::RepoId;
-
    use crate::node::policy::Scope;
    use crate::node::Handle;
+
    use crate::node::policy::Scope;
    use crate::node::{Alias, Node, NodeId};
    use crate::test;

@@ -342,8 +342,8 @@ mod tests {
    fn test_seed_unseed() {
        let tmp = tempfile::tempdir().unwrap();
        let socket = tmp.path().join("node.sock");
-
        let proj = test::arbitrary::gen::<RepoId>(1);
-
        let peer = test::arbitrary::gen::<NodeId>(1);
+
        let proj = test::arbitrary::r#gen::<RepoId>(1);
+
        let peer = test::arbitrary::r#gen::<NodeId>(1);
        let listener = UnixListener::bind(&socket).unwrap();
        let mut handle = Node::new(&socket);

modified crates/radicle-node/src/lib.rs
@@ -26,8 +26,8 @@ use radicle::version::Version;

pub use localtime::{LocalDuration, LocalTime};
pub use radicle::node::Link;
-
pub use radicle::node::UserAgent;
pub use radicle::node::PROTOCOL_VERSION;
+
pub use radicle::node::UserAgent;
pub use radicle::prelude::Timestamp;
pub use radicle::{collections, crypto, git, identity, node, profile, rad, storage};
pub use runtime::Runtime;
@@ -49,10 +49,10 @@ pub static USER_AGENT: LazyLock<UserAgent> = LazyLock::new(|| {
pub mod prelude {
    pub use crate::crypto::{PublicKey, Signature};
    pub use crate::identity::{Did, RepoId};
-
    pub use crate::node::{config::Network, Address, Event, NodeId};
+
    pub use crate::node::{Address, Event, NodeId, config::Network};
    pub use crate::service::filter::Filter;
    pub use crate::service::{DisconnectReason, Message};
-
    pub use crate::storage::refs::Refs;
    pub use crate::storage::WriteStorage;
+
    pub use crate::storage::refs::Refs;
    pub use crate::{LocalDuration, LocalTime, Timestamp};
}
modified crates/radicle-node/src/main.rs
@@ -141,7 +141,9 @@ fn parse_options() -> Result<Options, lexopt::Error> {
            }
            Long("log") | Long("log-level") => {
                if matches!(arg, Long("log")) {
-
                    eprintln!("Warning: The option `--log` is deprecated and will be removed. Please use `--log-level` instead.");
+
                    eprintln!(
+
                        "Warning: The option `--log` is deprecated and will be removed. Please use `--log-level` instead."
+
                    );
                }
                log_level = Some(parser.value()?.parse_with(log::Level::from_str)?);
            }
@@ -202,7 +204,9 @@ enum ExecutionError {
        path: PathBuf,
        source: radicle::crypto::ssh::keystore::Error,
    },
-
    #[error("failed to load secret key '{secret}': fingerprint of corresponding public key is different from '{fingerprint}'")]
+
    #[error(
+
        "failed to load secret key '{secret}': fingerprint of corresponding public key is different from '{fingerprint}'"
+
    )]
    FingerprintMismatch {
        secret: PathBuf,
        fingerprint: Fingerprint,
@@ -341,7 +345,7 @@ fn initialize_logging(options: &LogOptions) -> Result<(), Box<dyn std::error::Er
        match options.logger {
            #[cfg(feature = "structured-logger")]
            Logger::Structured => {
-
                use structured_logger::{json, Builder};
+
                use structured_logger::{Builder, json};

                let writer = match options.format.unwrap_or(LogFormat::Json) {
                    LogFormat::Json => json::new_writer(io::stdout()),
modified crates/radicle-node/src/reactor.rs
@@ -13,7 +13,7 @@ use std::thread::JoinHandle;
use std::time::{Duration, Instant};
use std::{io, thread};

-
use crossbeam_channel::{unbounded, Receiver, TryRecvError};
+
use crossbeam_channel::{Receiver, TryRecvError, unbounded};
use mio::event::{Event, Source};
use mio::{Events, Interest, Poll, Waker};
use thiserror::Error;
modified crates/radicle-node/src/reactor/session.rs
@@ -256,7 +256,7 @@ impl Session for TcpStream {
}

mod impl_noise {
-
    use cyphernet::encrypt::noise::{error::NoiseError as Error, NoiseState as Noise};
+
    use cyphernet::encrypt::noise::{NoiseState as Noise, error::NoiseError as Error};
    use cyphernet::{Digest, Ecdh};

    use super::*;
modified crates/radicle-node/src/reactor/transport.rs
@@ -286,8 +286,8 @@ impl<S: Session + Source> EventHandler for Transport<S> {
    type Reaction = SessionEvent<S>;

    fn interests(&self) -> Option<Interest> {
-
        use mio::Interest;
        use TransportState::*;
+
        use mio::Interest;

        match self.state {
            Init => Some(Interest::WRITABLE),
modified crates/radicle-node/src/runtime.rs
@@ -19,23 +19,23 @@ use radicle_signals::Signal;
use thiserror::Error;

use radicle::node;
+
use radicle::node::Event;
+
use radicle::node::UserAgent;
use radicle::node::address;
use radicle::node::address::Store as _;
use radicle::node::notifications;
use radicle::node::policy::config as policy;
-
use radicle::node::Event;
-
use radicle::node::UserAgent;
use radicle::profile::Home;
-
use radicle::{cob, git, storage, Storage};
+
use radicle::{Storage, cob, git, storage};

use crate::control;
-
use crate::node::{routing, NodeId};
+
use crate::node::{NodeId, routing};
use crate::reactor;
use crate::reactor::Reactor;
use crate::service::gossip;
use crate::wire::Wire;
use crate::worker;
-
use crate::{service, LocalTime};
+
use crate::{LocalTime, service};

pub use handle::Error as HandleError;
pub use handle::Handle;
@@ -282,22 +282,24 @@ impl Runtime {
            || control::listen(listener, handle)
        });

-
        let _signals = thread::spawn(&self.id, "signals", move || loop {
-
            use radicle::node::Handle as _;
-

-
            match self.signals.recv() {
-
                Ok(Signal::Terminate | Signal::Interrupt) => {
-
                    log::info!(target: "node", "Termination signal received; shutting down..");
-
                    self.handle.shutdown().ok();
-
                    break;
-
                }
-
                Ok(Signal::Hangup) => {
-
                    log::debug!(target: "node", "Hangup signal (SIGHUP) received; ignoring..");
-
                }
-
                Ok(Signal::WindowChanged) => {}
-
                Err(e) => {
-
                    log::warn!(target: "node", "Signal notifications channel error: {e}");
-
                    break;
+
        let _signals = thread::spawn(&self.id, "signals", move || {
+
            loop {
+
                use radicle::node::Handle as _;
+

+
                match self.signals.recv() {
+
                    Ok(Signal::Terminate | Signal::Interrupt) => {
+
                        log::info!(target: "node", "Termination signal received; shutting down..");
+
                        self.handle.shutdown().ok();
+
                        break;
+
                    }
+
                    Ok(Signal::Hangup) => {
+
                        log::debug!(target: "node", "Hangup signal (SIGHUP) received; ignoring..");
+
                    }
+
                    Ok(Signal::WindowChanged) => {}
+
                    Err(e) => {
+
                        log::warn!(target: "node", "Signal notifications channel error: {e}");
+
                        break;
+
                    }
                }
            }
        });
@@ -318,7 +320,8 @@ impl Runtime {

    #[cfg(all(feature = "systemd", target_os = "linux"))]
    fn receive_listener() -> Option<UnixListener> {
-
        let fd = match radicle_systemd::listen::fd("control") {
+
        // SAFETY: When `fd` is called, no other threads are spawned (yet).
+
        let fd = match unsafe { radicle_systemd::listen::fd("control") } {
            Ok(Some(fd)) => fd,
            Ok(None) => return None,
            Err(err) => {
modified crates/radicle-node/src/runtime/handle.rs
@@ -1,7 +1,7 @@
use std::collections::HashSet;
use std::net;
-
use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::Arc;
+
use std::sync::atomic::{AtomicBool, Ordering};
use std::{fmt, io, time};

#[cfg(unix)]
modified crates/radicle-node/src/test/gossip.rs
@@ -1,15 +1,15 @@
use std::str::FromStr;

use radicle::node;
-
use radicle::node::device::Device;
use radicle::node::UserAgent;
-
use radicle::test::fixtures::gen;
+
use radicle::node::device::Device;
+
use radicle::test::fixtures::r#gen;

use crate::test::arbitrary;
use crate::{
+
    PROTOCOL_VERSION,
    prelude::{LocalDuration, LocalTime, Message},
    service::message::{InventoryAnnouncement, NodeAnnouncement},
-
    PROTOCOL_VERSION,
};

pub fn messages(count: usize, now: LocalTime, delta: LocalDuration) -> Vec<Message> {
@@ -23,11 +23,7 @@ pub fn messages(count: usize, now: LocalTime, delta: LocalDuration) -> Vec<Messa
        } else {
            let delta = LocalDuration::from_secs(rng.u64(0..delta.as_secs()));

-
            if rng.bool() {
-
                now + delta
-
            } else {
-
                now - delta
-
            }
+
            if rng.bool() { now + delta } else { now - delta }
        };

        msgs.push(Message::node(
@@ -35,7 +31,7 @@ pub fn messages(count: usize, now: LocalTime, delta: LocalDuration) -> Vec<Messa
                version: PROTOCOL_VERSION,
                features: node::Features::SEED,
                timestamp: time.into(),
-
                alias: node::Alias::new(gen::string(5)),
+
                alias: node::Alias::new(r#gen::string(5)),
                addresses: None.into(),
                nonce: 0,
                agent: UserAgent::from_str("/radicle:test/").unwrap(),
modified crates/radicle-node/src/test/handle.rs
@@ -10,8 +10,8 @@ use radicle::storage::refs::{self, RefsAt};
use crate::identity::RepoId;
use crate::node::{Alias, Config, ConnectOptions, ConnectResult, Event, FetchResult, Seeds};
use crate::runtime::HandleError;
-
use radicle::node::policy;
use radicle::node::NodeId;
+
use radicle::node::policy;

#[derive(Default, Clone)]
pub struct Handle {
modified crates/radicle-node/src/test/node.rs
@@ -11,33 +11,33 @@ use std::{

use crossbeam_channel as chan;

+
use radicle::Storage;
use radicle::cob;
use radicle::cob::issue;
+
use radicle::crypto::Signature;
use radicle::crypto::signature::Signer;
use radicle::crypto::ssh::keystore::MemorySigner;
use radicle::crypto::test::signer::MockSigner;
-
use radicle::crypto::Signature;
use radicle::git;
use radicle::git::fmt::refname;
use radicle::identity::{RepoId, Visibility};
+
use radicle::node::Config;
+
use radicle::node::Event;
use radicle::node::config::ConnectAddress;
use radicle::node::policy::store as policy;
use radicle::node::seed::Store as _;
-
use radicle::node::Config;
-
use radicle::node::Event;
use radicle::node::{self, Alias};
use radicle::node::{ConnectOptions, Handle as _};
use radicle::node::{Database, POLICIES_DB_FILE};
-
use radicle::profile::{env, Home, Profile};
+
use radicle::profile::{Home, Profile, env};
use radicle::rad;
use radicle::storage::{ReadStorage as _, RemoteRepository as _, SignRepository as _};
use radicle::test::fixtures;
-
use radicle::Storage;

-
use crate::node::device::Device;
use crate::node::NodeId;
+
use crate::node::device::Device;
use crate::storage::git::transport;
-
use crate::{runtime, runtime::Handle, service, Runtime};
+
use crate::{Runtime, runtime, runtime::Handle, service};

/// A node that can be run.
pub struct Node<G> {
modified crates/radicle-node/src/test/peer.rs
@@ -7,19 +7,19 @@ use std::str::FromStr;

use log::*;

+
use radicle::Storage;
use radicle::crypto;
use radicle::git::Oid;
use radicle::identity::Visibility;
-
use radicle::node::address::Store as _;
-
use radicle::node::device::Device;
use radicle::node::Database;
use radicle::node::UserAgent;
-
use radicle::node::{address, Alias, ConnectOptions};
+
use radicle::node::address::Store as _;
+
use radicle::node::device::Device;
+
use radicle::node::{Alias, ConnectOptions, address};
use radicle::rad;
use radicle::storage::refs;
use radicle::storage::refs::{RefsAt, SignedRefs};
use radicle::storage::{ReadRepository, RemoteRepository};
-
use radicle::Storage;

use crate::crypto::test::signer::MockSigner;
use crate::identity::RepoId;
@@ -434,7 +434,7 @@ where
    }

    /// Drain outgoing messages sent from this peer to the remote peer.
-
    pub fn messages(&mut self, remote: NodeId) -> impl Iterator<Item = Message> {
+
    pub fn messages(&mut self, remote: NodeId) -> impl Iterator<Item = Message> + use<S, G> {
        let mut msgs = Vec::new();

        Service::outbox(&mut self.service)
modified crates/radicle-node/src/test/simulator.rs
@@ -13,10 +13,11 @@ use std::{fmt, io, net};

use localtime::{LocalDuration, LocalTime};
use log::*;
-
use radicle::node::events::Event;
use radicle::node::NodeId;
+
use radicle::node::events::Event;
use radicle_protocol::worker::FetchError;

+
use crate::Link;
use crate::crypto;
use crate::prelude::{Address, RepoId};
use crate::service::io::Io;
@@ -26,7 +27,6 @@ use crate::storage::{ReadRepository, WriteStorage};
use crate::test::arbitrary;
use crate::test::peer::Service;
use crate::worker::fetch;
-
use crate::Link;

/// Minimum latency between peers.
pub const MIN_LATENCY: LocalDuration = LocalDuration::from_millis(1);
@@ -666,7 +666,7 @@ where
                                    canonical: fetch::UpdatedCanonicalRefs::default(),
                                    namespaces: HashSet::new(),
                                    clone: true,
-
                                    doc: arbitrary::gen(1),
+
                                    doc: arbitrary::r#gen(1),
                                })),
                            ),
                        },
modified crates/radicle-node/src/tests.rs
@@ -13,16 +13,16 @@ use test_log::test;

use radicle::cob;
use radicle::identity::Visibility;
+
use radicle::node::Link;
use radicle::node::address::Store as _;
use radicle::node::device::Device;
use radicle::node::policy;
use radicle::node::refs::Store as _;
use radicle::node::routing::Store as _;
-
use radicle::node::Link;
use radicle::node::{ConnectOptions, DEFAULT_TIMEOUT};
-
use radicle::storage::refs::RefsAt;
use radicle::storage::RefUpdate;
-
use radicle::test::arbitrary::gen;
+
use radicle::storage::refs::RefsAt;
+
use radicle::test::arbitrary::r#gen;
use radicle::test::storage::MockRepository;
use radicle_protocol::bounded::BoundedVec;

@@ -32,15 +32,15 @@ use crate::node;
use crate::node::config::*;
use crate::prelude::*;
use crate::prelude::{LocalDuration, Timestamp};
+
use crate::service::ServiceState as _;
use crate::service::filter::Filter;
use crate::service::io::Io;
use crate::service::message::*;
-
use crate::service::ServiceState as _;
use crate::service::*;
-
use crate::storage::git::transport::{local, remote};
+
use crate::storage::ReadStorage;
use crate::storage::git::Storage;
+
use crate::storage::git::transport::{local, remote};
use crate::storage::refs::SIGREFS_BRANCH;
-
use crate::storage::ReadStorage;
use crate::test::arbitrary;
use crate::test::assert_matches;
use crate::test::fixtures;
@@ -51,11 +51,11 @@ use crate::test::peer::Peer;
use crate::test::simulator;
use crate::test::simulator::{Peer as _, Simulation};

+
use crate::LocalTime;
use crate::test::storage::MockStorage;
use crate::wire::Decode;
use crate::wire::Encode;
use crate::worker::fetch;
-
use crate::LocalTime;
use crate::{git, identity, rad, runtime, service, test};

/// Default number of tests to run when testing things with high variance.
@@ -78,7 +78,7 @@ pub static TEST_CASES: LazyLock<usize> = LazyLock::new(|| {

#[test]
fn test_inventory_decode() {
-
    let inventory: Vec<RepoId> = arbitrary::gen(300);
+
    let inventory: Vec<RepoId> = arbitrary::r#gen(300);
    let timestamp: Timestamp = LocalTime::now().into();

    let mut buf = Vec::new();
@@ -414,7 +414,7 @@ fn test_inventory_pruning() {
#[test]
fn test_seeding() {
    let mut alice = Peer::new("alice", [7, 7, 7, 7]);
-
    let proj_id: identity::RepoId = test::arbitrary::gen(1);
+
    let proj_id: identity::RepoId = test::arbitrary::r#gen(1);

    let (cmd, receiver) = Command::seed(proj_id, policy::Scope::default());
    alice.command(cmd);
@@ -722,7 +722,7 @@ fn test_refs_announcement_relay_public() {
        .elapse(service::GOSSIP_INTERVAL);

    // Pretend Alice cloned Bob's repos.
-
    let repos = gen::<[MockRepository; 3]>(1);
+
    let repos = r#gen::<[MockRepository; 3]>(1);
    for (i, mut repo) in repos.into_iter().enumerate() {
        repo.doc.doc = repo
            .doc
@@ -803,7 +803,7 @@ fn test_refs_announcement_relay_private() {

    // The first repo is not visible to Eve.
    let repo1 = {
-
        let mut repo = gen::<MockRepository>(1);
+
        let mut repo = r#gen::<MockRepository>(1);
        repo.doc.doc = repo
            .doc
            .doc
@@ -817,7 +817,7 @@ fn test_refs_announcement_relay_private() {

    // The second repo is visible to Eve.
    let repo2 = {
-
        let mut repo = gen::<MockRepository>(1);
+
        let mut repo = r#gen::<MockRepository>(1);
        repo.doc.doc = repo
            .doc
            .doc
@@ -960,7 +960,7 @@ fn test_refs_announcement_no_subscribe() {
    let mut alice = Peer::with_storage("alice", [7, 7, 7, 7], storage);
    let bob = Peer::new("bob", [8, 8, 8, 8]);
    let eve = Peer::new("eve", [9, 9, 9, 9]);
-
    let id = arbitrary::gen(1);
+
    let id = arbitrary::r#gen(1);

    alice.seed(&id, policy::Scope::All).unwrap();
    alice.connect_to(&bob);
@@ -1406,7 +1406,7 @@ fn test_maintain_connections_failed_attempt() {
fn test_seed_repo_subscribe() {
    let mut alice = Peer::new("alice", [7, 7, 7, 7]);
    let bob = Peer::new("bob", [8, 8, 8, 8]);
-
    let rid = arbitrary::gen::<RepoId>(1);
+
    let rid = arbitrary::r#gen::<RepoId>(1);

    alice.connect_to(&bob);
    let (cmd, recv) = Command::seed(rid, policy::Scope::default());
@@ -1425,7 +1425,7 @@ fn test_seed_repo_subscribe() {

#[test]
fn test_fetch_missing_inventory_on_gossip() {
-
    let rid = arbitrary::gen::<RepoId>(1);
+
    let rid = arbitrary::r#gen::<RepoId>(1);
    let mut alice = Peer::new("alice", [7, 7, 7, 7]);
    let bob = Peer::new("bob", [8, 8, 8, 8]);
    let now = LocalTime::now();
@@ -1450,7 +1450,7 @@ fn test_fetch_missing_inventory_on_gossip() {

#[test]
fn test_fetch_missing_inventory_on_schedule() {
-
    let rid = arbitrary::gen::<RepoId>(1);
+
    let rid = arbitrary::r#gen::<RepoId>(1);
    let mut alice = Peer::new("alice", [7, 7, 7, 7]);
    let bob = Peer::new("bob", [8, 8, 8, 8]);
    let now = LocalTime::now();
@@ -1596,7 +1596,7 @@ fn test_queued_fetch_from_ann_same_rid() {
            canonical: fetch::UpdatedCanonicalRefs::default(),
            namespaces: [carol.id()].into_iter().collect(),
            clone: false,
-
            doc: arbitrary::gen(1),
+
            doc: arbitrary::r#gen(1),
        }),
    );
    // Now the 1st fetch is done, but the 2nd and 3rd fetches are redundant.
@@ -1646,7 +1646,7 @@ fn test_queued_fetch_from_command_same_rid() {
    alice.elapse(KEEP_ALIVE_DELTA);

    // Finish the 1st fetch.
-
    alice.fetched(rid1, nid, Ok(arbitrary::gen::<fetch::FetchResult>(1)));
+
    alice.fetched(rid1, nid, Ok(arbitrary::r#gen::<fetch::FetchResult>(1)));
    // Now the 1st fetch is done, the 2nd fetch is dequeued.
    let (rid, nid) = alice.fetches().next().unwrap();
    assert_eq!(rid, rid1);
@@ -1656,7 +1656,7 @@ fn test_queued_fetch_from_command_same_rid() {
    assert_matches!(alice.fetches().next(), None);

    // Finish the 2nd fetch.
-
    alice.fetched(rid1, nid, Ok(arbitrary::gen::<fetch::FetchResult>(1)));
+
    alice.fetched(rid1, nid, Ok(arbitrary::r#gen::<fetch::FetchResult>(1)));
    // Now the 2nd fetch is done, the 3rd fetch is dequeued.
    assert_matches!(alice.fetches().next(), Some((rid, nid)) if rid == rid1 && peers.remove(&nid));
    // All fetches were initiated.
@@ -1909,7 +1909,7 @@ fn prop_inventory_exchange_dense() {
        }
    }
    qcheck::QuickCheck::new()
-
        .gen(qcheck::Gen::new(5))
+
        .r#gen(qcheck::Gen::new(5))
        .tests(20)
        .quickcheck(property as fn(MockStorage, MockStorage, MockStorage));
}
@@ -1933,7 +1933,7 @@ fn test_announcement_message_amplification() {
                failure_rate: 0.,
            },
        );
-
        let rid = gen::<RepoId>(1);
+
        let rid = r#gen::<RepoId>(1);

        // Make sure the node gossip intervals are not accidentally synchronized.
        alice.elapse(LocalDuration::from_millis(
@@ -2030,7 +2030,7 @@ fn test_announcement_message_amplification() {
        alice
            .storage_mut()
            .repos
-
            .insert(rid, gen::<MockRepository>(1));
+
            .insert(rid, r#gen::<MockRepository>(1));
        let (cmd, _) = Command::add_inventory(rid);
        alice.command(cmd);

@@ -2040,13 +2040,14 @@ fn test_announcement_message_amplification() {

        // Make sure they have the routing table entry.
        for node in [&bob, &eve, &zod, &tom] {
-
            assert!(node
-
                .service
-
                .database()
-
                .routing()
-
                .get(&rid)
-
                .unwrap()
-
                .contains(&alice.id));
+
            assert!(
+
                node.service
+
                    .database()
+
                    .routing()
+
                    .get(&rid)
+
                    .unwrap()
+
                    .contains(&alice.id)
+
            );
        }

        // Count how many copies of Alice's inventory message have been received by peers.
modified crates/radicle-node/src/tests/e2e.rs
@@ -6,10 +6,10 @@ use radicle_crypto::test::signer::MockSigner;
use test_log::test;

use radicle::git::raw::ErrorExt as _;
+
use radicle::node::Event;
use radicle::node::device::Device;
use radicle::node::policy::Scope;
-
use radicle::node::Event;
-
use radicle::node::{Alias, ConnectResult, FetchResult, Handle as _, DEFAULT_TIMEOUT};
+
use radicle::node::{Alias, ConnectResult, DEFAULT_TIMEOUT, FetchResult, Handle as _};
use radicle::storage::{
    ReadRepository, ReadStorage, RefUpdate, RemoteRepository, SignRepository, ValidateRepository,
    WriteRepository, WriteStorage,
@@ -22,7 +22,7 @@ use crate::node::config::Limits;
use crate::node::{Config, ConnectOptions};
use crate::service;
use crate::storage::git::transport;
-
use crate::test::node::{converge, Node, NodeHandle};
+
use crate::test::node::{Node, NodeHandle, converge};

mod config {
    use super::*;
@@ -631,12 +631,13 @@ fn test_clone() {
    assert_eq!(canonical, oid);

    // Make sure that bob has refs/rad/id set
-
    assert!(bob
-
        .storage
-
        .repository(acme)
-
        .unwrap()
-
        .identity_head()
-
        .is_ok());
+
    assert!(
+
        bob.storage
+
            .repository(acme)
+
            .unwrap()
+
            .identity_head()
+
            .is_ok()
+
    );
}

#[test]
modified crates/radicle-node/src/wire.rs
@@ -1,8 +1,8 @@
//! Implementation of the transport protocol.
//!
//! We use the Noise XK handshake pattern to establish an encrypted stream with a remote peer.
-
use std::collections::hash_map::Entry;
use std::collections::VecDeque;
+
use std::collections::hash_map::Entry;
use std::fmt::Debug;
use std::sync::Arc;
use std::time::Instant;
@@ -19,9 +19,9 @@ use radicle::node::device::Device;

use radicle::collections::{RandomMap, RandomSet};
use radicle::crypto;
-
use radicle::node::config::AddressConfig;
use radicle::node::Link;
use radicle::node::NodeId;
+
use radicle::node::config::AddressConfig;
use radicle::storage::WriteStorage;
use radicle_protocol::deserializer::Deserializer;
pub use radicle_protocol::wire::frame;
@@ -34,9 +34,9 @@ use crate::reactor::{Listener, Transport};
use crate::reactor::{NoiseSession, ProtocolArtifact, SessionEvent, Socks5Session};
use crate::reactor::{Token, Tokens};
use crate::service;
-
use crate::service::io::Io;
use crate::service::FETCH_TIMEOUT;
-
use crate::service::{session, DisconnectReason, Metrics, Service};
+
use crate::service::io::Io;
+
use crate::service::{DisconnectReason, Metrics, Service, session};
use crate::worker;
use crate::worker::{ChannelEvent, ChannelsConfig};
use crate::worker::{Task, TaskResult};
@@ -897,7 +897,10 @@ where
                        e.remove();
                    }
                    Peer::Connected { nid, .. } => {
-
                        panic!("Wire::handover_transport: Unexpected handover of connected peer {nid} with token {}", token.0);
+
                        panic!(
+
                            "Wire::handover_transport: Unexpected handover of connected peer {nid} with token {}",
+
                            token.0
+
                        );
                    }
                }
            }
@@ -1297,9 +1300,9 @@ mod test {
            }
        }

-
        let rid = radicle::test::arbitrary::gen(1);
-
        let pk = radicle::test::arbitrary::gen(1);
-
        let sig: [u8; 64] = radicle::test::arbitrary::gen(1);
+
        let rid = radicle::test::arbitrary::r#gen(1);
+
        let pk = radicle::test::arbitrary::r#gen(1);
+
        let sig: [u8; 64] = radicle::test::arbitrary::r#gen(1);

        // Message with extension.
        let mut stream = Vec::new();
modified crates/radicle-node/src/worker.rs
@@ -16,13 +16,13 @@ use radicle::node::policy::config::SeedingPolicy;
use radicle::prelude::NodeId;
use radicle::storage::refs::RefsAt;
use radicle::storage::{ReadRepository, ReadStorage};
-
use radicle::{cob, crypto, Storage};
+
use radicle::{Storage, cob, crypto};

pub use radicle_protocol::worker::{
    AuthorizationError, FetchError, FetchRequest, FetchResult, UploadError,
};

-
use crate::runtime::{thread, Handle};
+
use crate::runtime::{Handle, thread};
use crate::wire::StreamId;

pub use channels::{ChannelEvent, Channels, ChannelsConfig};
@@ -154,13 +154,13 @@ impl Worker {
                                std::io::ErrorKind::UnexpectedEof,
                                "unexpected end of stream while reading upload-pack header",
                            ))),
-
                        }
+
                        };
                    }
                    Some(Err(e)) => {
                        return FetchResult::Responder {
                            rid: None,
                            result: Err(UploadError::PacketLine(e)),
-
                        }
+
                        };
                    }
                    Some(Ok(Err(e))) => {
                        return FetchResult::Responder {
@@ -169,7 +169,7 @@ impl Worker {
                                std::io::ErrorKind::InvalidData,
                                format!("invalid upload-pack header: {e}"),
                            ))),
-
                        }
+
                        };
                    }
                    Some(Ok(Ok(header))) => header,
                };
modified crates/radicle-node/src/worker/channels.rs
@@ -3,8 +3,8 @@ use std::ops::Deref;
use std::{fmt, io, time};

use crossbeam_channel as chan;
-
use radicle::node::config::FetchPackSizeLimit;
use radicle::node::NodeId;
+
use radicle::node::config::FetchPackSizeLimit;

use crate::runtime::Handle;
use crate::wire::StreamId;
modified crates/radicle-node/src/worker/fetch.rs
@@ -1,5 +1,5 @@
-
use radicle::identity::doc::CanonicalRefsError;
use radicle::identity::CanonicalRefs;
+
use radicle::identity::doc::CanonicalRefsError;
use radicle::storage::git::TempRepository;
pub(crate) use radicle_protocol::worker::fetch::error;

@@ -19,7 +19,7 @@ use radicle::storage::{
    ReadRepository, ReadStorage as _, RefUpdate, RemoteRepository, RepositoryError,
    WriteRepository as _,
};
-
use radicle::{cob, git, node, Storage};
+
use radicle::{Storage, cob, git, node};
use radicle_fetch::git::refs::Applied;
use radicle_fetch::{Allowed, BlockList};
pub use radicle_protocol::worker::fetch::{FetchResult, UpdatedCanonicalRefs};
modified crates/radicle-node/src/worker/upload_pack.rs
@@ -5,12 +5,12 @@ use std::time::{Duration, Instant};

use radicle_fetch::{ByteSlice as _, RemoteProgress};

+
use radicle::Storage;
use radicle::identity::RepoId;
use radicle::node::events;
use radicle::node::events::Emitter;
use radicle::node::{Event, NodeId};
use radicle::storage::git::paths;
-
use radicle::Storage;

use crate::runtime::thread;

@@ -39,7 +39,7 @@ where
        .extra
        .iter()
        .find_map(|kv| match kv {
-
            (ref k, Some(v)) if k == "version" => {
+
            (k, Some(v)) if k == "version" => {
                let version = match v.as_str() {
                    "2" => 2,
                    "1" => 1,
modified crates/radicle-oid/src/lib.rs
@@ -108,7 +108,7 @@ impl Oid {
    /// See also [`::git2::Oid::is_zero`].
    pub fn is_zero(&self) -> bool {
        match self {
-
            Oid::Sha1(ref array) => array.iter().all(|b| *b == 0),
+
            Oid::Sha1(array) => array.iter().all(|b| *b == 0),
        }
    }
}
@@ -116,7 +116,7 @@ impl Oid {
impl AsRef<[u8]> for Oid {
    fn as_ref(&self) -> &[u8] {
        match self {
-
            Oid::Sha1(ref array) => array,
+
            Oid::Sha1(array) => array,
        }
    }
}
@@ -509,7 +509,10 @@ mod serde {

                    fn expecting(&self, f: &mut fmt::Formatter) -> fmt::Result {
                        use crate::str::SHA1_DIGEST_STR_LEN;
-
                        write!(f, "a Git object identifier (SHA-1 digest in hexadecimal notation; {SHA1_DIGEST_STR_LEN} characters; {SHA1_DIGEST_LEN} bytes)")
+
                        write!(
+
                            f,
+
                            "a Git object identifier (SHA-1 digest in hexadecimal notation; {SHA1_DIGEST_STR_LEN} characters; {SHA1_DIGEST_LEN} bytes)"
+
                        )
                    }

                    fn visit_str<E>(self, s: &str) -> Result<Self::Value, E>
@@ -551,7 +554,7 @@ mod radicle_git_ref_format {
mod schemars {
    use alloc::{borrow::Cow, format};

-
    use ::schemars::{json_schema, JsonSchema, Schema, SchemaGenerator};
+
    use ::schemars::{JsonSchema, Schema, SchemaGenerator, json_schema};

    use super::Oid;

@@ -565,7 +568,7 @@ mod schemars {
        }

        fn json_schema(_: &mut SchemaGenerator) -> Schema {
-
            use crate::{str::SHA1_DIGEST_STR_LEN, SHA1_DIGEST_LEN};
+
            use crate::{SHA1_DIGEST_LEN, str::SHA1_DIGEST_STR_LEN};
            json_schema!({
                "description": format!("A Git object identifier (SHA-1 digest in hexadecimal notation; {SHA1_DIGEST_STR_LEN} characters; {SHA1_DIGEST_LEN} bytes)"),
                "type": "string",
modified crates/radicle-protocol/src/bounded.rs
@@ -268,8 +268,10 @@ unsafe impl<const N: usize> bytes::BufMut for BoundedVec<u8, N> {

        debug_assert!(len <= N);

-
        // Addition will not overflow since the sum is at most the capacity.
-
        self.v.set_len(len);
+
        // SAFETY: See bounds check above.
+
        unsafe {
+
            self.v.set_len(len);
+
        }
    }

    fn chunk_mut(&mut self) -> &mut bytes::buf::UninitSlice {
modified crates/radicle-protocol/src/deserializer.rs
@@ -85,7 +85,9 @@ unsafe impl<const B: usize, D: wire::Decode> bytes::BufMut for Deserializer<B, D
    }

    unsafe fn advance_mut(&mut self, cnt: usize) {
-
        self.unparsed.advance_mut(cnt);
+
        unsafe {
+
            self.unparsed.advance_mut(cnt);
+
        }
    }

    fn chunk_mut(&mut self) -> &mut bytes::buf::UninitSlice {
modified crates/radicle-protocol/src/fetcher/service.rs
@@ -3,11 +3,12 @@ use std::collections::HashMap;
use radicle_core::{NodeId, RepoId};

use crate::fetcher::{
+
    RefsToFetch,
    state::{
+
        Config, FetcherState, QueuedFetch,
        command::{self},
-
        event, Config, FetcherState, QueuedFetch,
+
        event,
    },
-
    RefsToFetch,
};

/// Service layer that wraps [`FetcherState`] and manages subscriber coalescing.
@@ -176,8 +177,8 @@ mod tests {
            .with_max_concurrency(NonZeroUsize::new(1).unwrap())
            .with_max_capacity(MaxQueueSize::new(NonZeroUsize::new(10).unwrap()));
        let mut service = FetcherService::<usize>::new(config);
-
        let node = arbitrary::gen(1);
-
        let repo = arbitrary::gen(1);
+
        let node = arbitrary::r#gen(1);
+
        let repo = arbitrary::r#gen(1);
        let refs_specific: Vec<RefsAt> = arbitrary::vec(2);
        let refs_all = vec![];
        let config = FetchConfig::default();
modified crates/radicle-protocol/src/fetcher/test/queue.rs
@@ -11,8 +11,8 @@ use radicle::storage::refs::{FeatureLevel, RefsAt};
use radicle_core::RepoId;

use crate::fetcher::{
-
    state::{MaxQueueSize, QueuedFetch},
    FetchConfig,
+
    state::{MaxQueueSize, QueuedFetch},
};

impl Arbitrary for QueuedFetch {
modified crates/radicle-protocol/src/fetcher/test/queue/helpers.rs
@@ -12,7 +12,7 @@ pub fn create_queue(capacity: usize) -> Queue {

pub fn create_fetch() -> QueuedFetch {
    QueuedFetch {
-
        rid: arbitrary::gen(1),
+
        rid: arbitrary::r#gen(1),
        refs: RefsToFetch::All,
        config: FetchConfig::default(),
    }
modified crates/radicle-protocol/src/fetcher/test/queue/properties/capacity.rs
@@ -1,7 +1,7 @@
use qcheck_macros::quickcheck;

use crate::fetcher::test::queue::helpers::*;
-
use crate::fetcher::{state::Enqueue, MaxQueueSize};
+
use crate::fetcher::{MaxQueueSize, state::Enqueue};
use crate::fetcher::{Queue, QueuedFetch};

#[quickcheck]
modified crates/radicle-protocol/src/fetcher/test/queue/properties/equality.rs
@@ -14,9 +14,5 @@ fn symmetric(a: QueuedFetch, b: QueuedFetch) -> bool {

#[quickcheck]
fn transitive(a: QueuedFetch, b: QueuedFetch, c: QueuedFetch) -> bool {
-
    if a == b && b == c {
-
        a == c
-
    } else {
-
        true
-
    }
+
    if a == b && b == c { a == c } else { true }
}
modified crates/radicle-protocol/src/fetcher/test/queue/properties/fifo.rs
@@ -1,8 +1,8 @@
use qcheck_macros::quickcheck;

+
use crate::fetcher::QueuedFetch;
use crate::fetcher::state::Enqueue;
use crate::fetcher::test::queue::helpers::*;
-
use crate::fetcher::QueuedFetch;

#[quickcheck]
fn ordering(count: u8) -> bool {
modified crates/radicle-protocol/src/fetcher/test/queue/properties/merge.rs
@@ -32,7 +32,7 @@ fn same_rid_merges_anywhere_in_queue(max_size: MaxQueueSize, merge_index: usize)
    let target_index = merge_index % items.len();
    let same_rid_item = QueuedFetch {
        rid: items[target_index].rid,
-
        refs: vec![arbitrary::gen(1)].into(),
+
        refs: vec![arbitrary::r#gen(1)].into(),
        config: FetchConfig::default(),
    };

@@ -47,9 +47,9 @@ fn combines_refs(base_refs_count: u8, merge_refs_count: u8) -> bool {
    let mut queue = create_queue(10);
    let config = FetchConfig::default();

-
    let rid: RepoId = arbitrary::gen(1);
-
    let base_refs: Vec<RefsAt> = (0..base_refs_count).map(|_| arbitrary::gen(1)).collect();
-
    let merge_refs: Vec<RefsAt> = (0..merge_refs_count).map(|_| arbitrary::gen(1)).collect();
+
    let rid: RepoId = arbitrary::r#gen(1);
+
    let base_refs: Vec<RefsAt> = (0..base_refs_count).map(|_| arbitrary::r#gen(1)).collect();
+
    let merge_refs: Vec<RefsAt> = (0..merge_refs_count).map(|_| arbitrary::r#gen(1)).collect();

    let base_item = QueuedFetch {
        rid,
@@ -84,13 +84,13 @@ fn combines_refs(base_refs_count: u8, merge_refs_count: u8) -> bool {
#[quickcheck]
fn empty_refs_fetches_all() -> bool {
    let mut queue = create_queue(10);
-
    let rid: RepoId = arbitrary::gen(1);
+
    let rid: RepoId = arbitrary::r#gen(1);
    let config = FetchConfig::default();

    // First enqueue with specific refs
    let item_with_refs = QueuedFetch {
        rid,
-
        refs: vec![arbitrary::gen(1), arbitrary::gen(1)].into(),
+
        refs: vec![arbitrary::r#gen(1), arbitrary::r#gen(1)].into(),
        config,
    };

@@ -114,7 +114,7 @@ fn longer_timeout_preserved(short_secs: u16, long_secs: u16) -> bool {
    let long = Duration::from_secs(short_secs.max(long_secs) as u64);
    let config = FetchConfig::default();
    let mut queue = create_queue(10);
-
    let rid: RepoId = arbitrary::gen(1);
+
    let rid: RepoId = arbitrary::r#gen(1);

    let item_short = QueuedFetch {
        rid,
@@ -144,18 +144,18 @@ fn longer_timeout_preserved(short_secs: u16, long_secs: u16) -> bool {
#[quickcheck]
fn does_not_increase_queue_length() -> bool {
    let mut queue = create_queue(10);
-
    let rid: RepoId = arbitrary::gen(1);
+
    let rid: RepoId = arbitrary::r#gen(1);
    let config = FetchConfig::default();

    let item1 = QueuedFetch {
        rid,
-
        refs: vec![arbitrary::gen(1)].into(),
+
        refs: vec![arbitrary::r#gen(1)].into(),
        config: config.with_timeout(Duration::from_secs(30)),
    };

    let item2 = QueuedFetch {
        rid,
-
        refs: vec![arbitrary::gen(1)].into(),
+
        refs: vec![arbitrary::r#gen(1)].into(),
        config: config.with_timeout(Duration::from_secs(60)),
    };

@@ -175,7 +175,7 @@ fn different_rid_accepted(base_item: QueuedFetch) -> bool {

    // Item with different rid should be queued (not merged)
    let different_rid = QueuedFetch {
-
        rid: arbitrary::gen(1),
+
        rid: arbitrary::r#gen(1),
        ..base_item
    };

@@ -186,7 +186,7 @@ fn different_rid_accepted(base_item: QueuedFetch) -> bool {
fn succeed_when_at_capacity() -> bool {
    // When queue is at capacity, merging with existing item should still work
    let mut queue = create_queue(2);
-
    let rid: RepoId = arbitrary::gen(1);
+
    let rid: RepoId = arbitrary::r#gen(1);
    let config = FetchConfig::default();

    let item1 = QueuedFetch {
@@ -196,14 +196,14 @@ fn succeed_when_at_capacity() -> bool {
    };

    let item2 = QueuedFetch {
-
        rid: arbitrary::gen(1), // Different rid
+
        rid: arbitrary::r#gen(1), // Different rid
        refs: RefsToFetch::All,
        config: config.with_timeout(Duration::from_secs(30)),
    };

    let merge_item = QueuedFetch {
        rid, // Same as item1
-
        refs: vec![arbitrary::gen(1)].into(),
+
        refs: vec![arbitrary::r#gen(1)].into(),
        config: config.with_timeout(Duration::from_secs(60)),
    };

modified crates/radicle-protocol/src/fetcher/test/queue/unit.rs
@@ -3,18 +3,18 @@ use std::time::Duration;
use radicle::test::arbitrary;
use radicle_core::RepoId;

-
use crate::fetcher::state::Enqueue;
-
use crate::fetcher::test::queue::helpers::*;
use crate::fetcher::FetchConfig;
use crate::fetcher::QueuedFetch;
use crate::fetcher::RefsToFetch;
+
use crate::fetcher::state::Enqueue;
+
use crate::fetcher::test::queue::helpers::*;

#[test]
fn zero_timeout_accepted() {
    let mut queue = create_queue(10);
    let config = FetchConfig::default().with_timeout(Duration::ZERO);
    let item = QueuedFetch {
-
        rid: arbitrary::gen(1),
+
        rid: arbitrary::r#gen(1),
        refs: RefsToFetch::All,
        config,
    };
@@ -26,7 +26,7 @@ fn max_timeout_accepted() {
    let mut queue = create_queue(10);
    let config = FetchConfig::default().with_timeout(Duration::MAX);
    let item = QueuedFetch {
-
        rid: arbitrary::gen(1),
+
        rid: arbitrary::r#gen(1),
        refs: RefsToFetch::All,
        config,
    };
@@ -35,7 +35,7 @@ fn max_timeout_accepted() {

#[test]
fn empty_refs_items_can_be_equal() {
-
    let rid: RepoId = arbitrary::gen(1);
+
    let rid: RepoId = arbitrary::r#gen(1);
    let config = FetchConfig::default();

    let item1 = QueuedFetch {
@@ -56,9 +56,9 @@ fn empty_refs_items_can_be_equal() {
fn merge_preserves_position_in_queue() {
    let mut queue = create_queue(10);

-
    let rid_first: RepoId = arbitrary::gen(1);
-
    let rid_second: RepoId = arbitrary::gen(2);
-
    let rid_third: RepoId = arbitrary::gen(3);
+
    let rid_first: RepoId = arbitrary::r#gen(1);
+
    let rid_second: RepoId = arbitrary::r#gen(2);
+
    let rid_third: RepoId = arbitrary::r#gen(3);
    let config = FetchConfig::default();

    // Enqueue three items
@@ -81,7 +81,7 @@ fn merge_preserves_position_in_queue() {
    // Merge into the second item
    let result = queue.enqueue(QueuedFetch {
        rid: rid_second,
-
        refs: vec![arbitrary::gen(1)].into(),
+
        refs: vec![arbitrary::r#gen(1)].into(),
        config: config.with_timeout(Duration::from_secs(60)),
    });
    assert_eq!(result, Enqueue::Merged);
modified crates/radicle-protocol/src/fetcher/test/state/command/cancel.rs
@@ -8,8 +8,8 @@ use crate::fetcher::{ActiveFetch, FetchConfig, FetcherState};
#[test]
fn single_ongoing() {
    let mut state = FetcherState::new(helpers::config(1, 10));
-
    let node_a: NodeId = arbitrary::gen(1);
-
    let repo_1: RepoId = arbitrary::gen(1);
+
    let node_a: NodeId = arbitrary::r#gen(1);
+
    let repo_1: RepoId = arbitrary::r#gen(1);
    let refs_1 = helpers::gen_refs(1);
    let config = FetchConfig::default();

@@ -47,10 +47,10 @@ fn single_ongoing() {
#[test]
fn ongoing_and_queued() {
    let mut state = FetcherState::new(helpers::config(1, 10));
-
    let node_a: NodeId = arbitrary::gen(1);
-
    let repo_1: RepoId = arbitrary::gen(1);
-
    let repo_2: RepoId = arbitrary::gen(1);
-
    let repo_3: RepoId = arbitrary::gen(1);
+
    let node_a: NodeId = arbitrary::r#gen(1);
+
    let repo_1: RepoId = arbitrary::r#gen(1);
+
    let repo_2: RepoId = arbitrary::r#gen(1);
+
    let repo_3: RepoId = arbitrary::r#gen(1);
    let config = FetchConfig::default();

    state.fetch(command::Fetch {
@@ -91,7 +91,7 @@ fn ongoing_and_queued() {
#[test]
fn non_existent_returns_unexpected() {
    let mut state = FetcherState::new(helpers::config(1, 10));
-
    let node_unknown: NodeId = arbitrary::gen(1);
+
    let node_unknown: NodeId = arbitrary::r#gen(1);

    let event = state.cancel(command::Cancel { from: node_unknown });

@@ -101,10 +101,10 @@ fn non_existent_returns_unexpected() {
#[test]
fn cancellation_is_isolated() {
    let mut state = FetcherState::new(helpers::config(1, 10));
-
    let node_a: NodeId = arbitrary::gen(1);
-
    let node_b: NodeId = arbitrary::gen(1);
-
    let repo_1: RepoId = arbitrary::gen(1);
-
    let repo_2: RepoId = arbitrary::gen(1);
+
    let node_a: NodeId = arbitrary::r#gen(1);
+
    let node_b: NodeId = arbitrary::r#gen(1);
+
    let repo_1: RepoId = arbitrary::r#gen(1);
+
    let repo_2: RepoId = arbitrary::r#gen(1);
    let config = FetchConfig::default();

    state.fetch(command::Fetch {
modified crates/radicle-protocol/src/fetcher/test/state/command/fetch.rs
@@ -11,8 +11,8 @@ use crate::fetcher::{FetchConfig, RefsToFetch};
#[test]
fn fetch_start_first_fetch_for_node() {
    let mut state = FetcherState::new(helpers::config(1, 10));
-
    let node_a: NodeId = arbitrary::gen(1);
-
    let repo_1: RepoId = arbitrary::gen(1);
+
    let node_a: NodeId = arbitrary::r#gen(1);
+
    let repo_1: RepoId = arbitrary::r#gen(1);
    let refs_1 = helpers::gen_refs(2);
    let config = FetchConfig::default();

@@ -44,9 +44,9 @@ fn fetch_start_first_fetch_for_node() {
#[test]
fn fetch_different_repo_same_node_within_capacity() {
    let mut state = FetcherState::new(helpers::config(2, 10));
-
    let node_a: NodeId = arbitrary::gen(1);
-
    let repo_1: RepoId = arbitrary::gen(1);
-
    let repo_2: RepoId = arbitrary::gen(1);
+
    let node_a: NodeId = arbitrary::r#gen(1);
+
    let repo_1: RepoId = arbitrary::r#gen(1);
+
    let repo_2: RepoId = arbitrary::r#gen(1);
    let config = FetchConfig::default();

    let event1 = state.fetch(command::Fetch {
@@ -72,9 +72,9 @@ fn fetch_different_repo_same_node_within_capacity() {
#[test]
fn fetch_same_repo_different_nodes_queues_second() {
    let mut state = FetcherState::new(helpers::config(1, 10));
-
    let node_a: NodeId = arbitrary::gen(1);
-
    let node_b: NodeId = arbitrary::gen(1);
-
    let repo_1: RepoId = arbitrary::gen(1);
+
    let node_a: NodeId = arbitrary::r#gen(1);
+
    let node_b: NodeId = arbitrary::r#gen(1);
+
    let repo_1: RepoId = arbitrary::r#gen(1);
    let refs_1 = helpers::gen_refs(1);
    let config = FetchConfig::default();

@@ -106,8 +106,8 @@ fn fetch_same_repo_different_nodes_queues_second() {
#[test]
fn fetch_duplicate_returns_already_fetching() {
    let mut state = FetcherState::new(helpers::config(1, 10));
-
    let node_a: NodeId = arbitrary::gen(1);
-
    let repo_1: RepoId = arbitrary::gen(1);
+
    let node_a: NodeId = arbitrary::r#gen(1);
+
    let repo_1: RepoId = arbitrary::r#gen(1);
    let refs_1 = helpers::gen_refs(2);
    let config = FetchConfig::default();

@@ -137,8 +137,8 @@ fn fetch_duplicate_returns_already_fetching() {
#[test]
fn fetch_same_repo_different_refs_enqueues() {
    let mut state = FetcherState::new(helpers::config(1, 10));
-
    let node_a: NodeId = arbitrary::gen(1);
-
    let repo_1: RepoId = arbitrary::gen(1);
+
    let node_a: NodeId = arbitrary::r#gen(1);
+
    let repo_1: RepoId = arbitrary::r#gen(1);
    let refs_1 = helpers::gen_refs(1);
    let refs_2 = helpers::gen_refs(2);
    let config = FetchConfig::default();
@@ -169,9 +169,9 @@ fn fetch_same_repo_different_refs_enqueues() {
#[test]
fn fetch_at_capacity_enqueues() {
    let mut state = FetcherState::new(helpers::config(1, 10));
-
    let node_a: NodeId = arbitrary::gen(1);
-
    let repo_1: RepoId = arbitrary::gen(1);
-
    let repo_2: RepoId = arbitrary::gen(1);
+
    let node_a: NodeId = arbitrary::r#gen(1);
+
    let repo_1: RepoId = arbitrary::r#gen(1);
+
    let repo_2: RepoId = arbitrary::r#gen(1);
    let config = FetchConfig::default();

    state.fetch(command::Fetch {
@@ -202,11 +202,11 @@ fn fetch_at_capacity_enqueues() {
#[test]
fn fetch_queue_rejected_capacity_reached() {
    let mut state = FetcherState::new(helpers::config(1, 2));
-
    let node_a: NodeId = arbitrary::gen(1);
-
    let repo_1: RepoId = arbitrary::gen(1);
-
    let repo_2: RepoId = arbitrary::gen(1);
-
    let repo_3: RepoId = arbitrary::gen(1);
-
    let repo_4: RepoId = arbitrary::gen(1);
+
    let node_a: NodeId = arbitrary::r#gen(1);
+
    let repo_1: RepoId = arbitrary::r#gen(1);
+
    let repo_2: RepoId = arbitrary::r#gen(1);
+
    let repo_3: RepoId = arbitrary::r#gen(1);
+
    let repo_4: RepoId = arbitrary::r#gen(1);
    let config = FetchConfig::default();

    // Fill concurrency
@@ -255,9 +255,9 @@ fn fetch_queue_rejected_capacity_reached() {
#[test]
fn fetch_queue_merges_already_queued() {
    let mut state = FetcherState::new(helpers::config(1, 10));
-
    let node_a: NodeId = arbitrary::gen(1);
-
    let repo_1: RepoId = arbitrary::gen(1);
-
    let repo_2: RepoId = arbitrary::gen(1);
+
    let node_a: NodeId = arbitrary::r#gen(1);
+
    let repo_1: RepoId = arbitrary::r#gen(1);
+
    let repo_2: RepoId = arbitrary::r#gen(1);
    let refs_2a = helpers::gen_refs(1);
    let refs_2b = helpers::gen_refs(1);
    let config = FetchConfig::default();
@@ -315,9 +315,9 @@ fn fetch_queue_merges_already_queued() {
#[test]
fn fetch_queue_merge_empty_refs_fetches_all() {
    let mut state = FetcherState::new(helpers::config(1, 10));
-
    let node_a: NodeId = arbitrary::gen(1);
-
    let repo_1: RepoId = arbitrary::gen(1);
-
    let repo_2: RepoId = arbitrary::gen(1);
+
    let node_a: NodeId = arbitrary::r#gen(1);
+
    let repo_1: RepoId = arbitrary::r#gen(1);
+
    let repo_2: RepoId = arbitrary::r#gen(1);
    let refs_2 = helpers::gen_refs(2);
    let config = FetchConfig::default();

@@ -357,9 +357,9 @@ fn fetch_queue_merge_empty_refs_fetches_all() {
#[test]
fn fetch_queue_merge_takes_longer_timeout() {
    let mut state = FetcherState::new(helpers::config(1, 10));
-
    let node_a: NodeId = arbitrary::gen(1);
-
    let repo_1: RepoId = arbitrary::gen(1);
-
    let repo_2: RepoId = arbitrary::gen(1);
+
    let node_a: NodeId = arbitrary::r#gen(1);
+
    let repo_1: RepoId = arbitrary::r#gen(1);
+
    let repo_2: RepoId = arbitrary::r#gen(1);
    let short_timeout = Duration::from_secs(10);
    let long_timeout = Duration::from_secs(60);
    let config = FetchConfig::default();
@@ -399,8 +399,8 @@ fn fetch_queue_merge_takes_longer_timeout() {
#[test]
fn fetch_after_previous_completed() {
    let mut state = FetcherState::new(helpers::config(1, 10));
-
    let node_a: NodeId = arbitrary::gen(1);
-
    let repo_1: RepoId = arbitrary::gen(1);
+
    let node_a: NodeId = arbitrary::r#gen(1);
+
    let repo_1: RepoId = arbitrary::r#gen(1);
    let refs_1 = helpers::gen_refs(1);
    let config = FetchConfig::default();

modified crates/radicle-protocol/src/fetcher/test/state/command/fetched.rs
@@ -8,8 +8,8 @@ use crate::fetcher::{FetchConfig, FetcherState};
#[test]
fn complete_single_ongoing() {
    let mut state = FetcherState::new(helpers::config(1, 10));
-
    let node_a: NodeId = arbitrary::gen(1);
-
    let repo_1: RepoId = arbitrary::gen(1);
+
    let node_a: NodeId = arbitrary::r#gen(1);
+
    let repo_1: RepoId = arbitrary::r#gen(1);
    let refs_1 = helpers::gen_refs(2);
    let config = FetchConfig::default();

@@ -39,10 +39,10 @@ fn complete_single_ongoing() {
#[test]
fn complete_then_dequeue_fifo() {
    let mut state = FetcherState::new(helpers::config(1, 10));
-
    let node_a: NodeId = arbitrary::gen(1);
-
    let repo_1: RepoId = arbitrary::gen(1);
-
    let repo_2: RepoId = arbitrary::gen(1);
-
    let repo_3: RepoId = arbitrary::gen(1);
+
    let node_a: NodeId = arbitrary::r#gen(1);
+
    let repo_1: RepoId = arbitrary::r#gen(1);
+
    let repo_2: RepoId = arbitrary::r#gen(1);
+
    let repo_3: RepoId = arbitrary::r#gen(1);
    let refs_2 = helpers::gen_refs(1);
    let config = FetchConfig::default();

@@ -85,10 +85,10 @@ fn complete_then_dequeue_fifo() {
#[test]
fn complete_one_of_multiple() {
    let mut state = FetcherState::new(helpers::config(3, 10));
-
    let node_a: NodeId = arbitrary::gen(1);
-
    let repo_1: RepoId = arbitrary::gen(1);
-
    let repo_2: RepoId = arbitrary::gen(1);
-
    let repo_3: RepoId = arbitrary::gen(1);
+
    let node_a: NodeId = arbitrary::r#gen(1);
+
    let repo_1: RepoId = arbitrary::r#gen(1);
+
    let repo_2: RepoId = arbitrary::r#gen(1);
+
    let repo_3: RepoId = arbitrary::r#gen(1);
    let config = FetchConfig::default();

    state.fetch(command::Fetch {
@@ -124,8 +124,8 @@ fn complete_one_of_multiple() {
#[test]
fn non_existent_returns_not_found() {
    let mut state = FetcherState::new(helpers::config(1, 10));
-
    let node_a: NodeId = arbitrary::gen(1);
-
    let repo_1: RepoId = arbitrary::gen(1);
+
    let node_a: NodeId = arbitrary::r#gen(1);
+
    let repo_1: RepoId = arbitrary::r#gen(1);

    let event = state.fetched(command::Fetched {
        from: node_a,
modified crates/radicle-protocol/src/fetcher/test/state/concurrent.rs
@@ -8,11 +8,11 @@ use crate::fetcher::{FetchConfig, FetcherState};
#[test]
fn interleaved_operations() {
    let mut state = FetcherState::new(helpers::config(1, 10));
-
    let node_a: NodeId = arbitrary::gen(1);
-
    let node_b: NodeId = arbitrary::gen(1);
-
    let repo_1: RepoId = arbitrary::gen(1);
-
    let repo_2: RepoId = arbitrary::gen(1);
-
    let repo_3: RepoId = arbitrary::gen(1);
+
    let node_a: NodeId = arbitrary::r#gen(1);
+
    let node_b: NodeId = arbitrary::r#gen(1);
+
    let repo_1: RepoId = arbitrary::r#gen(1);
+
    let repo_2: RepoId = arbitrary::r#gen(1);
+
    let repo_3: RepoId = arbitrary::r#gen(1);
    let config = FetchConfig::default();

    // fetch(A, r1)
@@ -65,9 +65,9 @@ fn interleaved_operations() {
#[test]
fn fetched_then_cancel() {
    let mut state = FetcherState::new(helpers::config(2, 10));
-
    let node_a: NodeId = arbitrary::gen(1);
-
    let repo_1: RepoId = arbitrary::gen(1);
-
    let repo_2: RepoId = arbitrary::gen(1);
+
    let node_a: NodeId = arbitrary::r#gen(1);
+
    let repo_1: RepoId = arbitrary::r#gen(1);
+
    let repo_2: RepoId = arbitrary::r#gen(1);
    let config = FetchConfig::default();

    state.fetch(command::Fetch {
modified crates/radicle-protocol/src/fetcher/test/state/config.rs
@@ -8,11 +8,11 @@ use crate::fetcher::{FetchConfig, FetcherState};
#[test]
fn high_concurrency() {
    let mut state = FetcherState::new(helpers::config(100, 10));
-
    let node_a: NodeId = arbitrary::gen(1);
+
    let node_a: NodeId = arbitrary::r#gen(1);
    let config = FetchConfig::default();

    for i in 0..100 {
-
        let repo: RepoId = arbitrary::gen(i + 1);
+
        let repo: RepoId = arbitrary::r#gen(i + 1);
        let event = state.fetch(command::Fetch {
            from: node_a,
            rid: repo,
@@ -39,10 +39,10 @@ fn high_concurrency() {
#[test]
fn min_queue_size() {
    let mut state = FetcherState::new(helpers::config(1, 1));
-
    let node_a: NodeId = arbitrary::gen(1);
-
    let repo_1: RepoId = arbitrary::gen(1);
-
    let repo_2: RepoId = arbitrary::gen(1);
-
    let repo_3: RepoId = arbitrary::gen(1);
+
    let node_a: NodeId = arbitrary::r#gen(1);
+
    let repo_1: RepoId = arbitrary::r#gen(1);
+
    let repo_2: RepoId = arbitrary::r#gen(1);
+
    let repo_3: RepoId = arbitrary::r#gen(1);
    let config = FetchConfig::default();

    state.fetch(command::Fetch {
modified crates/radicle-protocol/src/fetcher/test/state/dequeue.rs
@@ -10,9 +10,9 @@ use crate::fetcher::{FetchConfig, FetcherState};
#[test]
fn cannot_dequeue_while_node_at_capacity() {
    let mut state = FetcherState::new(helpers::config(1, 10));
-
    let node_a: NodeId = arbitrary::gen(1);
-
    let repo_1: RepoId = arbitrary::gen(1);
-
    let repo_2: RepoId = arbitrary::gen(1);
+
    let node_a: NodeId = arbitrary::r#gen(1);
+
    let repo_1: RepoId = arbitrary::r#gen(1);
+
    let repo_2: RepoId = arbitrary::r#gen(1);
    let refs_2 = helpers::gen_refs(3);
    let timeout_2 = Duration::from_secs(42);

@@ -48,11 +48,11 @@ fn cannot_dequeue_while_node_at_capacity() {
#[test]
fn maintains_fifo_order() {
    let mut state = FetcherState::new(helpers::config(1, 10));
-
    let node_a: NodeId = arbitrary::gen(1);
-
    let repo_1: RepoId = arbitrary::gen(1);
-
    let repo_2: RepoId = arbitrary::gen(1);
-
    let repo_3: RepoId = arbitrary::gen(1);
-
    let repo_4: RepoId = arbitrary::gen(1);
+
    let node_a: NodeId = arbitrary::r#gen(1);
+
    let repo_1: RepoId = arbitrary::r#gen(1);
+
    let repo_2: RepoId = arbitrary::r#gen(1);
+
    let repo_3: RepoId = arbitrary::r#gen(1);
+
    let repo_4: RepoId = arbitrary::r#gen(1);
    let config = FetchConfig::default();

    state.fetch(command::Fetch {
@@ -105,7 +105,7 @@ fn maintains_fifo_order() {
#[test]
fn empty_queue_returns_none() {
    let mut state = FetcherState::new(helpers::config(1, 10));
-
    let node_a: NodeId = arbitrary::gen(1);
+
    let node_a: NodeId = arbitrary::r#gen(1);

    assert!(state.dequeue(&node_a).is_none());
}
modified crates/radicle-protocol/src/fetcher/test/state/helpers.rs
@@ -13,6 +13,6 @@ pub fn config(max_concurrency: usize, max_queue_size: usize) -> Config {
}

pub fn gen_refs(count: usize) -> RefsToFetch {
-
    let refs: Vec<_> = (0..count).map(|_| arbitrary::gen(1)).collect();
+
    let refs: Vec<_> = (0..count).map(|_| arbitrary::r#gen(1)).collect();
    refs.into()
}
modified crates/radicle-protocol/src/fetcher/test/state/invariant.rs
@@ -8,9 +8,9 @@ use crate::fetcher::{FetchConfig, FetcherState};
#[test]
fn queue_integrity_after_merge() {
    let mut state = FetcherState::new(helpers::config(1, 10));
-
    let node_a: NodeId = arbitrary::gen(1);
-
    let repo_1: RepoId = arbitrary::gen(1);
-
    let repo_2: RepoId = arbitrary::gen(1);
+
    let node_a: NodeId = arbitrary::r#gen(1);
+
    let repo_1: RepoId = arbitrary::r#gen(1);
+
    let repo_2: RepoId = arbitrary::r#gen(1);
    let refs_2a = helpers::gen_refs(1);
    let refs_2b = helpers::gen_refs(1);
    let config = FetchConfig::default();
modified crates/radicle-protocol/src/fetcher/test/state/multinode.rs
@@ -8,12 +8,12 @@ use crate::fetcher::{FetchConfig, FetcherState};
#[test]
fn independent_queues() {
    let mut state = FetcherState::new(helpers::config(1, 10));
-
    let node_a: NodeId = arbitrary::gen(1);
-
    let node_b: NodeId = arbitrary::gen(1);
-
    let repo_a_active: RepoId = arbitrary::gen(1);
-
    let repo_b_active: RepoId = arbitrary::gen(2);
-
    let repo_a_queued: RepoId = arbitrary::gen(10);
-
    let repo_b_queued: RepoId = arbitrary::gen(20);
+
    let node_a: NodeId = arbitrary::r#gen(1);
+
    let node_b: NodeId = arbitrary::r#gen(1);
+
    let repo_a_active: RepoId = arbitrary::r#gen(1);
+
    let repo_b_active: RepoId = arbitrary::r#gen(2);
+
    let repo_a_queued: RepoId = arbitrary::r#gen(10);
+
    let repo_b_queued: RepoId = arbitrary::r#gen(20);
    let fetch_config = FetchConfig::default();

    // Fill capacity for both nodes
@@ -66,8 +66,8 @@ fn high_count() {
    let config = FetchConfig::default();

    for i in 0..100 {
-
        let node: NodeId = arbitrary::gen(i + 1);
-
        let repo: RepoId = arbitrary::gen(i + 1);
+
        let node: NodeId = arbitrary::r#gen(i + 1);
+
        let repo: RepoId = arbitrary::r#gen(i + 1);
        let event = state.fetch(command::Fetch {
            from: node,
            rid: repo,
modified crates/radicle-protocol/src/service.rs
@@ -42,14 +42,14 @@ use radicle::storage::{RepositoryError, RepositoryInfo, SignedRefsInfo};
use radicle_fetch::policy::SeedingPolicy;

use crate::fetcher;
-
use crate::fetcher::service::FetcherService;
use crate::fetcher::FetcherState;
use crate::fetcher::RefsToFetch;
+
use crate::fetcher::service::FetcherService;
use crate::service::gossip::Store as _;
use crate::service::message::{
    Announcement, AnnouncementMessage, Info, NodeAnnouncement, Ping, RefsAnnouncement, RefsStatus,
};
-
use crate::service::policy::{store::Write, Scope};
+
use crate::service::policy::{Scope, store::Write};
use radicle::identity::RepoId;
use radicle::node::events::Emitter;
use radicle::node::routing;
@@ -57,7 +57,7 @@ use radicle::node::routing::InsertResult;
use radicle::node::{Address, Features, FetchResult, HostName, Seed, Seeds, SyncStatus, SyncedAt};
use radicle::prelude::*;
use radicle::storage;
-
use radicle::storage::{refs::RefsAt, Namespaces, ReadStorage};
+
use radicle::storage::{Namespaces, ReadStorage, refs::RefsAt};
// use radicle::worker::fetch;
// use crate::worker::FetchError;
use radicle::crypto;
modified crates/radicle-protocol/src/service/command.rs
@@ -4,9 +4,9 @@ use crossbeam_channel::Receiver;
use crossbeam_channel::SendError;
use crossbeam_channel::Sender;
use radicle::crypto::PublicKey;
-
use radicle::node::policy::Scope;
use radicle::node::FetchResult;
use radicle::node::Seeds;
+
use radicle::node::policy::Scope;
use radicle::node::{Address, Alias, Config, ConnectOptions};
use radicle::storage::refs;
use radicle::storage::refs::RefsAt;
modified crates/radicle-protocol/src/service/gossip.rs
@@ -5,8 +5,8 @@ use std::sync::LazyLock;

use super::*;
use crate::bounded::BoundedVec;
-
use radicle::node::UserAgent;
use radicle::node::PROTOCOL_VERSION;
+
use radicle::node::UserAgent;

pub use store::{AnnouncementId, Error, RelayStatus, Store};

modified crates/radicle-protocol/src/service/gossip/store.rs
@@ -389,8 +389,8 @@ mod test {
    #[test]
    fn test_announced() {
        let mut db = Database::memory().unwrap();
-
        let nid = arbitrary::gen::<NodeId>(1);
-
        let rid = arbitrary::gen::<RepoId>(1);
+
        let nid = arbitrary::r#gen::<NodeId>(1);
+
        let rid = arbitrary::r#gen::<RepoId>(1);
        let timestamp = LocalTime::now().into();
        let signer = Device::mock();
        let refs = AnnouncementMessage::Refs(RefsAnnouncement {
modified crates/radicle-protocol/src/service/io.rs
@@ -3,16 +3,16 @@ use std::collections::VecDeque;
use localtime::LocalDuration;
use log::*;
use radicle::identity::RepoId;
-
use radicle::node::config::FetchPackSizeLimit;
use radicle::node::Address;
use radicle::node::NodeId;
+
use radicle::node::config::FetchPackSizeLimit;
use radicle::storage::refs::RefsAt;

use crate::fetcher;
-
use crate::service::message::Message;
-
use crate::service::session::Session;
use crate::service::DisconnectReason;
use crate::service::Link;
+
use crate::service::message::Message;
+
use crate::service::session::Session;

use super::gossip;
use super::message::{Announcement, AnnouncementMessage};
modified crates/radicle-protocol/src/service/limiter.rs
@@ -1,7 +1,7 @@
use std::collections::{HashMap, HashSet};

use localtime::LocalTime;
-
use radicle::node::{address, config, HostName, NodeId};
+
use radicle::node::{HostName, NodeId, address, config};

/// Peer rate limiter.
///
@@ -159,7 +159,7 @@ mod test {
        let mut r = RateLimiter::default();
        let t = (3, 0.2); // Three tokens burst. One token every 5 seconds.
        let a = HostName::Dns(String::from("seed.radicle.example.com"));
-
        let n = arbitrary::gen::<NodeId>(1);
+
        let n = arbitrary::r#gen::<NodeId>(1);
        let n = Some(&n);

        assert_eq!(r.limit(a.clone(), n, &t, LocalTime::from_secs(0)), false); // Burst capacity
@@ -189,7 +189,7 @@ mod test {
    #[rustfmt::skip]
    fn test_limiter_multi() {
        let t = (1, 1.0); // One token per second. One token burst.
-
        let n = arbitrary::gen::<NodeId>(1);
+
        let n = arbitrary::r#gen::<NodeId>(1);
        let n = Some(&n);
        let mut r = RateLimiter::default();
        let addr1 = HostName::Dns(String::from("seed.radicle.example.com"));
@@ -210,7 +210,7 @@ mod test {
    fn test_limiter_different_rates() {
        let t1 = (1, 1.0); // One token per second. One token burst.
        let t2 = (2, 2.0); // Two tokens per second. Two token burst.
-
        let n = arbitrary::gen::<NodeId>(1);
+
        let n = arbitrary::r#gen::<NodeId>(1);
        let n = Some(&n);
        let mut r = RateLimiter::default();
        let addr1 = HostName::Dns(String::from("seed.radicle.example.com"));
modified crates/radicle-protocol/src/service/message.rs
@@ -92,7 +92,7 @@ impl NodeAnnouncement {
        .expect("proof-of-work output vector is a valid length");

        // Calculate the number of leading zero bits in the output vector.
-
        if let Some((zero_bytes, non_zero)) = output.iter().enumerate().find(|(_, &x)| x != 0) {
+
        if let Some((zero_bytes, non_zero)) = output.iter().enumerate().find(|&(_, &x)| x != 0) {
            zero_bytes as u32 * 8 + non_zero.leading_zeros()
        } else {
            output.len() as u32 * 8
@@ -482,26 +482,35 @@ impl Message {
        };
        let msg = match self {
            Self::Announcement(Announcement { node, message, .. }) => match message {
-
                AnnouncementMessage::Node(NodeAnnouncement { addresses, timestamp, .. }) => format!(
+
                AnnouncementMessage::Node(NodeAnnouncement {
+
                    addresses,
+
                    timestamp,
+
                    ..
+
                }) => format!(
                    "{verb} node announcement of {node} with {} address(es) {prep} {remote} (t={timestamp})",
                    addresses.len()
                ),
-
                AnnouncementMessage::Refs(RefsAnnouncement { rid, refs, timestamp }) => format!(
+
                AnnouncementMessage::Refs(RefsAnnouncement {
+
                    rid,
+
                    refs,
+
                    timestamp,
+
                }) => format!(
                    "{verb} refs announcement of {node} for {rid} with {} remote(s) {prep} {remote} (t={timestamp})",
                    refs.len()
                ),
-
                AnnouncementMessage::Inventory(InventoryAnnouncement { inventory, timestamp }) => {
+
                AnnouncementMessage::Inventory(InventoryAnnouncement {
+
                    inventory,
+
                    timestamp,
+
                }) => {
                    format!(
                        "{verb} inventory announcement of {node} with {} item(s) {prep} {remote} (t={timestamp})",
                        inventory.len()
                    )
                }
            },
-
            Self::Info(Info::RefsAlreadySynced { rid,  .. }) => {
-
                format!(
-
                    "{verb} `refs-already-synced` info {prep} {remote} for {rid}"
-
                )
-
            },
+
            Self::Info(Info::RefsAlreadySynced { rid, .. }) => {
+
                format!("{verb} `refs-already-synced` info {prep} {remote} for {rid}")
+
            }
            Self::Ping { .. } => format!("{verb} ping {prep} {remote}"),
            Self::Pong { .. } => format!("{verb} pong {prep} {remote}"),
            Self::Subscribe(Subscribe { .. }) => {
@@ -530,7 +539,7 @@ impl Ping {
    /// Maximum number of zero bytes in a pong message.
    pub const MAX_PONG_ZEROES: wire::Size =
        Message::MAX_SIZE - mem::size_of::<wire::Size>() as wire::Size; // Account for zeroes length
-
                                                                        // prefix.
+
    // prefix.

    pub fn new(rng: &mut fastrand::Rng) -> Self {
        let ponglen = rng.u16(0..Self::MAX_PONG_ZEROES);
@@ -703,7 +712,7 @@ mod tests {
        }

        let msg: Message = AnnouncementMessage::from(RefsAnnouncement {
-
            rid: arbitrary::gen(1),
+
            rid: arbitrary::r#gen(1),
            refs,
            timestamp: LocalTime::now().into(),
        })
modified crates/radicle-protocol/src/wire.rs
@@ -85,7 +85,9 @@ pub enum Error {
    #[error(transparent)]
    Invalid(#[from] Invalid),

-
    #[error("unexpected end of buffer, requested {requested} more bytes but only {available} are available")]
+
    #[error(
+
        "unexpected end of buffer, requested {requested} more bytes but only {available} are available"
+
    )]
    UnexpectedEnd { available: usize, requested: usize },
}

modified crates/radicle-protocol/src/wire/frame.rs
@@ -6,7 +6,7 @@ use bytes::{Buf, BufMut};
use radicle::node::Link;

use crate::service::Message;
-
use crate::{wire, wire::varint, wire::varint::VarInt, PROTOCOL_VERSION};
+
use crate::{PROTOCOL_VERSION, wire, wire::varint, wire::varint::VarInt};

/// Protocol version strings all start with the magic sequence `rad`, followed
/// by a version number.
modified crates/radicle-protocol/src/wire/message.rs
@@ -2,7 +2,7 @@ use std::{mem, net};

use bytes::Buf;
use bytes::BufMut;
-
use cypheraddr::{tor, HostName, NetAddr};
+
use cypheraddr::{HostName, NetAddr, tor};
use radicle::crypto::Signature;
use radicle::git::Oid;
use radicle::identity::RepoId;
@@ -426,14 +426,14 @@ impl wire::Decode for ZeroBytes {
#[cfg(test)]
mod tests {
    use qcheck_macros::quickcheck;
-
    use radicle::node::device::Device;
    use radicle::node::UserAgent;
+
    use radicle::node::device::Device;
    use radicle::storage::refs::RefsAt;
    use radicle::test::arbitrary;

    use crate::deserializer::Deserializer;
    use crate::prop_roundtrip;
-
    use crate::wire::{roundtrip, Encode as _};
+
    use crate::wire::{Encode as _, roundtrip};

    use super::*;

@@ -443,11 +443,11 @@ mod tests {
    #[test]
    fn test_refs_ann_max_size() {
        let signer = Device::mock();
-
        let refs: [RefsAt; REF_REMOTE_LIMIT] = arbitrary::gen(1);
+
        let refs: [RefsAt; REF_REMOTE_LIMIT] = arbitrary::r#gen(1);
        let ann = AnnouncementMessage::Refs(RefsAnnouncement {
-
            rid: arbitrary::gen(1),
+
            rid: arbitrary::r#gen(1),
            refs: BoundedVec::collect_from(&mut refs.into_iter()),
-
            timestamp: arbitrary::gen(1),
+
            timestamp: arbitrary::r#gen(1),
        });
        let ann = ann.signed(&signer);
        let msg = Message::Announcement(ann);
@@ -459,10 +459,10 @@ mod tests {
    #[test]
    fn test_inv_ann_max_size() {
        let signer = Device::mock();
-
        let inv: [RepoId; INVENTORY_LIMIT] = arbitrary::gen(1);
+
        let inv: [RepoId; INVENTORY_LIMIT] = arbitrary::r#gen(1);
        let ann = AnnouncementMessage::Inventory(InventoryAnnouncement {
            inventory: BoundedVec::collect_from(&mut inv.into_iter()),
-
            timestamp: arbitrary::gen(1),
+
            timestamp: arbitrary::r#gen(1),
        });
        let ann = ann.signed(&signer);
        let msg = Message::Announcement(ann);
@@ -474,14 +474,14 @@ mod tests {
    #[test]
    fn test_node_ann_max_size() {
        let signer = Device::mock();
-
        let addrs: [Address; ADDRESS_LIMIT] = arbitrary::gen(1);
+
        let addrs: [Address; ADDRESS_LIMIT] = arbitrary::r#gen(1);
        let alias = ['@'; radicle::node::MAX_ALIAS_LENGTH];
        let ann = AnnouncementMessage::Node(NodeAnnouncement {
            version: 1,
            features: Default::default(),
            alias: radicle::node::Alias::new(String::from_iter(alias)),
            addresses: BoundedVec::collect_from(&mut addrs.into_iter()),
-
            timestamp: arbitrary::gen(1),
+
            timestamp: arbitrary::r#gen(1),
            nonce: u64::MAX,
            agent: UserAgent::default(),
        });
@@ -539,7 +539,7 @@ mod tests {
        }

        qcheck::QuickCheck::new()
-
            .gen(qcheck::Gen::new(16))
+
            .r#gen(qcheck::Gen::new(16))
            .quickcheck(property as fn(items: Vec<Message>));
    }

modified crates/radicle-protocol/src/worker/fetch/error.rs
@@ -19,7 +19,9 @@ pub enum Fetch {
    Repository(#[from] radicle::storage::RepositoryError),
    #[error(transparent)]
    RefsDb(Box<radicle::node::refs::Error>),
-
    #[error("validation of the storage repository failed: the delegates {delegates:?} failed to validate to meet a threshold of {threshold}")]
+
    #[error(
+
        "validation of the storage repository failed: the delegates {delegates:?} failed to validate to meet a threshold of {threshold}"
+
    )]
    Validation {
        threshold: usize,
        delegates: Vec<String>,
modified crates/radicle-remote-helper/src/fetch.rs
@@ -5,8 +5,8 @@ use thiserror::Error;

use radicle::git;

-
use crate::service::GitService;
use crate::Verbosity;
+
use crate::service::GitService;

#[derive(Debug, Error)]
pub(super) enum Error {
@@ -24,7 +24,9 @@ pub(super) enum Error {
    InvalidOid(#[from] radicle::git::ParseOidError),

    /// Error fetching pack from storage to working copy.
-
    #[error("`git fetch-pack` failed with exit status {status}, stderr and stdout follow:\n{stderr}\n{stdout}")]
+
    #[error(
+
        "`git fetch-pack` failed with exit status {status}, stderr and stdout follow:\n{stderr}\n{stdout}"
+
    )]
    FetchPackFailed {
        status: ExitStatus,
        stderr: String,
modified crates/radicle-remote-helper/src/list.rs
@@ -2,12 +2,12 @@ use radicle::patch::cache::Patches as _;
use radicle::profile;
use thiserror::Error;

+
use radicle::Profile;
use radicle::cob;
use radicle::git;
use radicle::prelude::NodeId;
-
use radicle::storage::git::transport::local::Url;
use radicle::storage::ReadRepository;
-
use radicle::Profile;
+
use radicle::storage::git::transport::local::Url;

#[derive(Debug, Error)]
pub(super) enum Error {
modified crates/radicle-remote-helper/src/main.rs
@@ -34,8 +34,8 @@ use radicle::prelude::NodeId;
use radicle::storage::git::transport::local::{Url, UrlError};
use radicle::storage::{ReadRepository, WriteStorage};
use radicle::version::Version;
+
use radicle::{Profile, git, storage};
use radicle::{cob, profile};
-
use radicle::{git, storage, Profile};
use radicle_cli::terminal as cli;

use crate::protocol::{Command, Line, LineReader};
modified crates/radicle-remote-helper/src/push.rs
@@ -13,6 +13,7 @@ use radicle::identity::doc::CanonicalRefsError;
use radicle::node::device::Device;
use thiserror::Error;

+
use radicle::Profile;
use radicle::cob;
use radicle::cob::object::ParseObjectId;
use radicle::cob::patch;
@@ -25,13 +26,12 @@ use radicle::node::NodeId;
use radicle::storage;
use radicle::storage::git::transport::local::Url;
use radicle::storage::{ReadRepository, SignRepository as _, WriteRepository};
-
use radicle::Profile;
use radicle::{git, rad};
use radicle_cli::terminal as term;

use crate::service::GitService;
use crate::service::NodeSession;
-
use crate::{hint, warn, Options, Verbosity};
+
use crate::{Options, Verbosity, hint, warn};

#[derive(Debug, Error)]
pub(super) enum Error {
@@ -39,7 +39,9 @@ pub(super) enum Error {
    #[error("cannot push to remote namespace owned by {0}")]
    KeyMismatch(Did),
    /// No public key is given
-
    #[error("no public key given as a remote namespace, perhaps you are attempting to push to restricted refs")]
+
    #[error(
+
        "no public key given as a remote namespace, perhaps you are attempting to push to restricted refs"
+
    )]
    NoKey,
    /// User tried to delete the canonical branch.
    #[error("refusing to delete default branch ref '{0}'")]
@@ -116,7 +118,9 @@ pub(super) enum Error {
    FindObjects(#[from] git::canonical::error::FindObjectsError),

    /// Error sending pack from the working copy to storage.
-
    #[error("`git send-pack` failed with exit status {status}, stderr and stdout follow:\n{stderr}\n{stdout}")]
+
    #[error(
+
        "`git send-pack` failed with exit status {status}, stderr and stdout follow:\n{stderr}\n{stdout}"
+
    )]
    SendPackFailed {
        status: ExitStatus,
        stderr: String,
modified crates/radicle-remote-helper/src/push/canonical.rs
@@ -1,8 +1,8 @@
use radicle::git;
use radicle::git::canonical;
+
use radicle::git::canonical::QuorumWithConvergence;
use radicle::git::canonical::effects;
use radicle::git::canonical::error::QuorumError;
-
use radicle::git::canonical::QuorumWithConvergence;
use radicle::prelude::Did;

/// Validates a vote to update a canonical reference during push.
modified crates/radicle-remote-helper/src/push/error.rs
@@ -26,7 +26,9 @@ pub(crate) struct GraphDescendant {

#[derive(Debug, Error)]
/// Head being pushed diverges from canonical head.
-
#[error("refusing to update canonical reference to commit that is not a descendant of current canonical head")]
+
#[error(
+
    "refusing to update canonical reference to commit that is not a descendant of current canonical head"
+
)]
pub(crate) struct HeadsDiverge {
    head: git::Oid,
    canonical: git::Oid,
modified crates/radicle-remote-helper/src/service.rs
@@ -3,11 +3,11 @@ use std::io::IsTerminal;
use std::path::Path;
use std::process;

+
use radicle::Profile;
use radicle::explorer::ExplorerResource;
use radicle::git;
use radicle::node::Handle;
use radicle::storage;
-
use radicle::Profile;
use radicle_cli::node::{SyncError, SyncReporting, SyncSettings};
use radicle_cli::terminal as term;

modified crates/radicle-signals/src/windows.rs
@@ -3,13 +3,13 @@ use std::sync::OnceLock;

use crossbeam_channel as chan;

-
use ::windows::core::BOOL;
use ::windows::Win32::System::Console::{
-
    SetConsoleCtrlHandler, CTRL_BREAK_EVENT, CTRL_CLOSE_EVENT, CTRL_C_EVENT, CTRL_LOGOFF_EVENT,
-
    CTRL_SHUTDOWN_EVENT,
+
    CTRL_BREAK_EVENT, CTRL_C_EVENT, CTRL_CLOSE_EVENT, CTRL_LOGOFF_EVENT, CTRL_SHUTDOWN_EVENT,
+
    SetConsoleCtrlHandler,
};
+
use ::windows::core::BOOL;

-
use crate::{already_installed, Signal};
+
use crate::{Signal, already_installed};

static NOTIFY: OnceLock<chan::Sender<Signal>> = OnceLock::new();

modified crates/radicle-ssh/src/agent/client.rs
@@ -11,8 +11,8 @@ pub use winpipe::WinStream as Stream;
use thiserror::Error;
use zeroize::Zeroize as _;

-
use crate::agent::msg;
use crate::agent::Constraint;
+
use crate::agent::msg;
use crate::encoding::{self, Encodable};
use crate::encoding::{Buffer, Encoding, Reader};

@@ -97,13 +97,13 @@ impl AgentClient<Stream> {
                return Err(Error::BadAuthSock {
                    path: path.display().to_string(),
                    source: err,
-
                })
+
                });
            }
            Err(err) => {
                return Err(Error::Connect {
                    path: path.display().to_string(),
                    source: err,
-
                })
+
                });
            }
            Ok(stream) => stream,
        };
modified crates/radicle-systemd/src/credential.rs
@@ -1,7 +1,7 @@
-
use std::env::{var, VarError::*};
+
use std::env::{VarError::*, var};
use std::ffi::OsString;
use std::fmt;
-
use std::path::{is_separator, PathBuf};
+
use std::path::{PathBuf, is_separator};

const CREDENTIALS_DIRECTORY: &str = "CREDENTIALS_DIRECTORY";

@@ -39,8 +39,12 @@ impl fmt::Display for PathError {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        use PathError::*;
        match self {
-
		InvalidCredentialId { id } => write!(f, "The systemd credential ID '{id}' is invalid."),
-
		EnvVarNotUnicode { os } => write!(f, "The value of environment variable '{CREDENTIALS_DIRECTORY}' is not valid Unicode (it lossily translates to '{}').", os.to_string_lossy()),
-
	}
+
            InvalidCredentialId { id } => write!(f, "The systemd credential ID '{id}' is invalid."),
+
            EnvVarNotUnicode { os } => write!(
+
                f,
+
                "The value of environment variable '{CREDENTIALS_DIRECTORY}' is not valid Unicode (it lossily translates to '{}').",
+
                os.to_string_lossy()
+
            ),
+
        }
    }
}
modified crates/radicle-systemd/src/journal.rs
@@ -1,4 +1,4 @@
-
use systemd_journal_logger::{connected_to_journal, JournalLog};
+
use systemd_journal_logger::{JournalLog, connected_to_journal};

/// If the current process is directly connected to the systemd journal,
/// return a logger that will write to it.
modified crates/radicle-systemd/src/listen.rs
@@ -1,4 +1,4 @@
-
use std::env::{remove_var, var, VarError};
+
use std::env::{VarError, remove_var, var};
use std::os::fd::RawFd;
use std::process::id;

@@ -20,20 +20,28 @@ const SD_LISTEN_FDS_START: RawFd = 3;
///  - <https://github.com/systemd/systemd/blob/v254/src/libsystemd/sd-daemon/sd-daemon.c>
///  - <https://0pointer.de/blog/projects/socket-activation.html>
///  - <https://0pointer.de/blog/projects/socket-activation2.html>
-
pub fn fd(name: &str) -> Result<Option<RawFd>, VarError> {
-
    let fd = match var(LISTEN_PID) {
+
///
+
/// # Safety
+
///
+
/// This function calls [`remove_var`] to remove the environment variables
+
/// it interpreted in case it returns `Ok(Some(_))`. In this case, this
+
/// function inherits the unsafe behavior of [`remove_var`].
+
pub unsafe fn fd(name: &str) -> Result<Option<RawFd>, VarError> {
+
    match var(LISTEN_PID) {
        Err(VarError::NotPresent) => Ok(None),
        Err(err) => Err(err),
        Ok(pid) if pid != id().to_string() => Ok(None),
        _ if var(LISTEN_FDS)? != "1" || var(LISTEN_FDNAMES).ok() != Some(name.to_string()) => {
            Ok(None)
        }
-
        _ => Ok(Some(SD_LISTEN_FDS_START)),
-
    };
+
        _ => {
+
            unsafe {
+
                remove_var(LISTEN_PID);
+
                remove_var(LISTEN_FDS);
+
                remove_var(LISTEN_FDNAMES);
+
            }

-
    remove_var(LISTEN_PID);
-
    remove_var(LISTEN_FDS);
-
    remove_var(LISTEN_FDNAMES);
-

-
    fd
+
            Ok(Some(SD_LISTEN_FDS_START))
+
        }
+
    }
}
modified crates/radicle-term/src/ansi.rs
@@ -10,8 +10,8 @@ mod style;
mod tests;

pub use color::Color;
-
pub use paint::paint;
pub use paint::Filled;
pub use paint::Paint;
pub use paint::TerminalFile;
+
pub use paint::paint;
pub use style::Style;
modified crates/radicle-term/src/ansi/paint.rs
@@ -1,6 +1,6 @@
use std::io::IsTerminal as _;
-
use std::sync::atomic::{AtomicBool, AtomicI32};
use std::sync::LazyLock;
+
use std::sync::atomic::{AtomicBool, AtomicI32};
use std::{fmt, sync};

use super::color::Color;
modified crates/radicle-term/src/element.rs
@@ -4,7 +4,7 @@ use std::ops::Deref;
use std::{io, vec};

use crate::cell::Cell;
-
use crate::{viewport, Color, Filled, Label, Style};
+
use crate::{Color, Filled, Label, Style, viewport};

/// Rendering constraint.
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
modified crates/radicle-term/src/io.rs
@@ -4,15 +4,15 @@ use std::process::Stdio;
use std::sync::LazyLock;
use std::{env, fmt, io, process};

+
use inquire::InquireError;
use inquire::ui::{ErrorMessageRenderConfig, StyleSheet, Styled};
use inquire::validator;
-
use inquire::InquireError;
-
use inquire::{ui::Color, ui::RenderConfig, Confirm, CustomType, Password};
+
use inquire::{Confirm, CustomType, Password, ui::Color, ui::RenderConfig};
use thiserror::Error;
use zeroize::Zeroizing;

use crate::format;
-
use crate::{style, Paint, Size};
+
use crate::{Paint, Size, style};

pub use inquire;
pub use inquire::Select;
@@ -70,7 +70,7 @@ impl PaintTarget {

#[macro_export]
macro_rules! info {
-
    ($writer:expr; $($arg:tt)*) => ({
+
    ($writer:expr_2021; $($arg:tt)*) => ({
        writeln!($writer, $($arg)*).ok();
    });
    ($($arg:tt)*) => ({
@@ -81,7 +81,7 @@ macro_rules! info {
#[macro_export]
macro_rules! success {
    // Pattern when a writer is provided.
-
    ($writer:expr; $($arg:tt)*) => ({
+
    ($writer:expr_2021; $($arg:tt)*) => ({
        $crate::io::success_args($writer, format_args!($($arg)*));
    });
    // Pattern without writer.
@@ -100,7 +100,7 @@ macro_rules! tip {
#[macro_export]
macro_rules! notice {
    // Pattern when a writer is provided.
-
    ($writer:expr; $($arg:tt)*) => ({
+
    ($writer:expr_2021; $($arg:tt)*) => ({
        $crate::io::notice_args($writer, format_args!($($arg)*));
    });
    ($($arg:tt)*) => ({
modified crates/radicle-term/src/label.rs
@@ -1,6 +1,6 @@
use std::fmt;

-
use crate::{cell::Cell, Color, Constraint, Element, Filled, Line, Paint, Size, Style};
+
use crate::{Color, Constraint, Element, Filled, Line, Paint, Size, Style, cell::Cell};

/// A styled string that does not contain any `'\n'` and implements [`Element`] and [`Cell`].
#[derive(Clone, Default, Debug)]
modified crates/radicle-term/src/lib.rs
@@ -16,16 +16,16 @@ use std::fmt;
use std::io::IsTerminal;

pub use ansi::Color;
-
pub use ansi::{paint, Filled, Paint, Style, TerminalFile};
+
pub use ansi::{Filled, Paint, Style, TerminalFile, paint};
pub use editor::Editor;
pub use element::{Constraint, Element, Line, Size};
pub use hstack::HStack;
pub use inquire::ui::Styled;
pub use io::*;
-
pub use label::{label, Label};
-
pub use spinner::{spinner, spinner_to, Spinner};
+
pub use label::{Label, label};
+
pub use spinner::{Spinner, spinner, spinner_to};
pub use table::{Table, TableOptions};
-
pub use textarea::{textarea, TextArea};
+
pub use textarea::{TextArea, textarea};
pub use vstack::{VStack, VStackOptions};

#[derive(Debug, PartialEq, Eq, Copy, Clone, Default)]
@@ -49,11 +49,7 @@ impl Interactive {
    }

    pub fn confirm(&self, prompt: impl fmt::Display) -> bool {
-
        if self.yes() {
-
            confirm(prompt)
-
        } else {
-
            true
-
        }
+
        if self.yes() { confirm(prompt) } else { true }
    }
}

@@ -68,11 +64,7 @@ impl From<Interactive> for bool {

impl From<bool> for Interactive {
    fn from(b: bool) -> Self {
-
        if b {
-
            Interactive::Yes
-
        } else {
-
            Interactive::No
-
        }
+
        if b { Interactive::Yes } else { Interactive::No }
    }
}

modified crates/radicle-term/src/textarea.rs
@@ -1,4 +1,4 @@
-
use crate::{cell::Cell, Constraint, Element, Line, Paint, Size};
+
use crate::{Constraint, Element, Line, Paint, Size, cell::Cell};

/// Default text wrap width.
pub const DEFAULT_WRAP: usize = 80;
@@ -30,7 +30,7 @@ impl TextArea {
    }

    /// Get the lines of text in this text area.
-
    pub fn lines(&self) -> impl Iterator<Item = String> {
+
    pub fn lines(&self) -> impl Iterator<Item = String> + use<> {
        let mut lines: Vec<String> = Vec::new();
        let mut fenced = false;

modified crates/radicle-windows/src/jobs.rs
@@ -2,11 +2,11 @@ use std::io;
use std::os::windows::io::AsRawHandle as _;

use windows::{
-
    core::PCWSTR,
    Win32::{
        Foundation::{CloseHandle, HANDLE},
        System::JobObjects::{AssignProcessToJobObject, CreateJobObjectW, TerminateJobObject},
    },
+
    core::PCWSTR,
};

use thiserror::Error;
modified crates/radicle/src/cob.rs
@@ -16,13 +16,13 @@ pub mod test;
#[cfg(test)]
pub use radicle_cob::stable;

-
pub use cache::{migrate, MigrateCallback};
+
pub use cache::{MigrateCallback, migrate};
pub use common::*;
pub use op::{ActorId, Op};
pub use radicle_cob::{
-
    change, history::EntryId, object, object::collaboration::error, type_name::TypeNameParse,
    CollaborativeObject, Contents, Create, Embed, Entry, Evaluate, History, Manifest, ObjectId,
-
    Store, TypeName, Update, Updated, Version,
+
    Store, TypeName, Update, Updated, Version, change, history::EntryId, object,
+
    object::collaboration::error, type_name::TypeNameParse,
};
pub use radicle_cob::{create, get, list, remove, update};

modified crates/radicle/src/cob/common.rs
@@ -4,7 +4,7 @@ use std::ops::{Deref, Range};
use std::path::PathBuf;
use std::str::FromStr;

-
use base64::prelude::{Engine, BASE64_STANDARD};
+
use base64::prelude::{BASE64_STANDARD, Engine};
use localtime::LocalTime;
use serde::{Deserialize, Serialize};
use thiserror::Error;
@@ -454,11 +454,7 @@ pub enum Authorization {

impl From<bool> for Authorization {
    fn from(value: bool) -> Self {
-
        if value {
-
            Self::Allow
-
        } else {
-
            Self::Deny
-
        }
+
        if value { Self::Allow } else { Self::Deny }
    }
}

modified crates/radicle/src/cob/external.rs
@@ -87,7 +87,7 @@ use std::process::{Command, Stdio};
use serde::{Deserialize, Serialize};
use thiserror::Error;

-
use serde_json::{from_slice, to_writer, Error as JsonError, Map, Value};
+
use serde_json::{Error as JsonError, Map, Value, from_slice, to_writer};

use crate::cob::object::collaboration::Evaluate;
use crate::cob::op::{Op as CobOp, OpEncodingError};
modified crates/radicle/src/cob/identity.rs
@@ -10,19 +10,18 @@ use thiserror::Error;
use crate::git;
use crate::git::Oid;
use crate::identity::doc::Doc;
-
use crate::node::device::Device;
use crate::node::NodeId;
+
use crate::node::device::Device;
use crate::storage;
use crate::{
    cob,
    cob::{
-
        op, store,
+
        ActorId, Timestamp, Uri, op, store,
        store::{Cob, CobAction, Transaction},
-
        ActorId, Timestamp, Uri,
    },
    identity::{
-
        doc::{DocError, RepoId},
        Did,
+
        doc::{DocError, RepoId},
    },
    storage::{ReadRepository, RepositoryError, WriteRepository},
};
@@ -1074,12 +1073,12 @@ mod test {

    use crate::cob::{self, Title};
    use crate::crypto::PublicKey;
+
    use crate::identity::Visibility;
    use crate::identity::did::Did;
    use crate::identity::doc::PayloadId;
-
    use crate::identity::Visibility;
    use crate::rad;
-
    use crate::storage::git::Storage;
    use crate::storage::ReadStorage;
+
    use crate::storage::git::Storage;
    use crate::test::fixtures;
    use crate::test::setup::{Network, NodeWithRepo};

modified crates/radicle/src/cob/issue.rs
@@ -13,11 +13,11 @@ use crate::cob::common::{Author, Authorization, Label, Reaction, Timestamp, Uri}
use crate::cob::store::Transaction;
use crate::cob::store::{Cob, CobAction};
use crate::cob::thread::{Comment, CommentId, Thread};
-
use crate::cob::{op, store, ActorId, Embed, EntryId, ObjectId, TypeName};
-
use crate::cob::{thread, TitleError};
+
use crate::cob::{ActorId, Embed, EntryId, ObjectId, TypeName, op, store};
+
use crate::cob::{TitleError, thread};
use crate::identity::doc::DocError;
-
use crate::node::device::Device;
use crate::node::NodeId;
+
use crate::node::device::Device;
use crate::prelude::{Did, Doc, ReadRepository, RepoId};
use crate::storage;
use crate::storage::{HasRepoId, RepositoryError, WriteRepository};
@@ -981,7 +981,7 @@ mod test {
    use pretty_assertions::assert_eq;

    use super::*;
-
    use crate::cob::{store::CobWithType, ActorId, Reaction};
+
    use crate::cob::{ActorId, Reaction, store::CobWithType};
    use crate::git::Oid;
    use crate::issue::cache::Issues as _;
    use crate::test::arbitrary;
@@ -1080,8 +1080,8 @@ mod test {
        let test::setup::NodeWithRepo { node, repo, .. } = test::setup::NodeWithRepo::default();
        let mut issues = Cache::no_cache(&*repo).unwrap();

-
        let assignee = Did::from(arbitrary::gen::<ActorId>(1));
-
        let assignee_two = Did::from(arbitrary::gen::<ActorId>(1));
+
        let assignee = Did::from(arbitrary::r#gen::<ActorId>(1));
+
        let assignee_two = Did::from(arbitrary::r#gen::<ActorId>(1));
        let issue = issues
            .create(
                cob::Title::new("My first issue").unwrap(),
@@ -1119,8 +1119,8 @@ mod test {
        let test::setup::NodeWithRepo { node, repo, .. } = test::setup::NodeWithRepo::default();
        let mut issues = Cache::no_cache(&*repo).unwrap();

-
        let assignee = Did::from(arbitrary::gen::<ActorId>(1));
-
        let assignee_two = Did::from(arbitrary::gen::<ActorId>(1));
+
        let assignee = Did::from(arbitrary::r#gen::<ActorId>(1));
+
        let assignee_two = Did::from(arbitrary::r#gen::<ActorId>(1));
        let mut issue = issues
            .create(
                cob::Title::new("My first issue").unwrap(),
@@ -1218,8 +1218,8 @@ mod test {
        let test::setup::NodeWithRepo { node, repo, .. } = test::setup::NodeWithRepo::default();
        let mut issues = Cache::no_cache(&*repo).unwrap();

-
        let assignee = Did::from(arbitrary::gen::<ActorId>(1));
-
        let assignee_two = Did::from(arbitrary::gen::<ActorId>(1));
+
        let assignee = Did::from(arbitrary::r#gen::<ActorId>(1));
+
        let assignee_two = Did::from(arbitrary::r#gen::<ActorId>(1));
        let mut issue = issues
            .create(
                cob::Title::new("My first issue").unwrap(),
modified crates/radicle/src/cob/issue/cache.rs
@@ -9,8 +9,8 @@ use crate::cob::cache;
use crate::cob::cache::{Remove, StoreReader, StoreWriter, Update};
use crate::cob::store;
use crate::cob::{Embed, Label, ObjectId, TypeName, Uri};
-
use crate::node::device::Device;
use crate::node::NodeId;
+
use crate::node::device::Device;
use crate::prelude::{Did, RepoId};
use crate::storage::{HasRepoId, ReadRepository, RepositoryError, SignRepository, WriteRepository};

@@ -635,7 +635,7 @@ mod tests {

    #[test]
    fn test_is_empty() {
-
        let repo = arbitrary::gen::<MockRepository>(1);
+
        let repo = arbitrary::r#gen::<MockRepository>(1);
        let mut cache = memory(repo);
        assert!(cache.is_empty().unwrap());

@@ -657,10 +657,10 @@ mod tests {

    #[test]
    fn test_counts() {
-
        let repo = arbitrary::gen::<MockRepository>(1);
+
        let repo = arbitrary::r#gen::<MockRepository>(1);
        let mut cache = memory(repo);
-
        let n_open = arbitrary::gen::<u8>(0);
-
        let n_closed = arbitrary::gen::<u8>(1);
+
        let n_open = arbitrary::r#gen::<u8>(0);
+
        let n_closed = arbitrary::r#gen::<u8>(1);
        let open_ids = (0..n_open)
            .map(|_| IssueId::from(arbitrary::oid()))
            .collect::<BTreeSet<IssueId>>();
@@ -698,12 +698,12 @@ mod tests {

    #[test]
    fn test_get() {
-
        let repo = arbitrary::gen::<MockRepository>(1);
+
        let repo = arbitrary::r#gen::<MockRepository>(1);
        let mut cache = memory(repo);
-
        let ids = (0..arbitrary::gen::<u8>(1))
+
        let ids = (0..arbitrary::r#gen::<u8>(1))
            .map(|_| IssueId::from(arbitrary::oid()))
            .collect::<BTreeSet<IssueId>>();
-
        let missing = (0..arbitrary::gen::<u8>(2))
+
        let missing = (0..arbitrary::r#gen::<u8>(2))
            .filter_map(|_| {
                let id = IssueId::from(arbitrary::oid());
                (!ids.contains(&id)).then_some(id)
@@ -733,9 +733,9 @@ mod tests {

    #[test]
    fn test_list() {
-
        let repo = arbitrary::gen::<MockRepository>(1);
+
        let repo = arbitrary::r#gen::<MockRepository>(1);
        let mut cache = memory(repo);
-
        let ids = (0..arbitrary::gen::<u8>(1))
+
        let ids = (0..arbitrary::r#gen::<u8>(1))
            .map(|_| IssueId::from(arbitrary::oid()))
            .collect::<BTreeSet<IssueId>>();
        let mut issues = Vec::with_capacity(ids.len());
@@ -763,9 +763,9 @@ mod tests {

    #[test]
    fn test_list_by_status() {
-
        let repo = arbitrary::gen::<MockRepository>(1);
+
        let repo = arbitrary::r#gen::<MockRepository>(1);
        let mut cache = memory(repo);
-
        let ids = (0..arbitrary::gen::<u8>(1))
+
        let ids = (0..arbitrary::r#gen::<u8>(1))
            .map(|_| IssueId::from(arbitrary::oid()))
            .collect::<BTreeSet<IssueId>>();
        let mut issues = Vec::with_capacity(ids.len());
@@ -793,9 +793,9 @@ mod tests {

    #[test]
    fn test_remove() {
-
        let repo = arbitrary::gen::<MockRepository>(1);
+
        let repo = arbitrary::r#gen::<MockRepository>(1);
        let mut cache = memory(repo);
-
        let ids = (0..arbitrary::gen::<u8>(1))
+
        let ids = (0..arbitrary::r#gen::<u8>(1))
            .map(|_| IssueId::from(arbitrary::oid()))
            .collect::<BTreeSet<IssueId>>();

modified crates/radicle/src/cob/op.rs
@@ -122,10 +122,10 @@ impl<A> Op<A> {
    pub fn manifest_of<S>(store: &S, id: &git::Oid) -> Result<Manifest, ManifestError>
    where
        S: cob::change::Storage<
-
            ObjectId = git::Oid,
-
            Parent = git::Oid,
-
            Signatures = crypto::ssh::ExtendedSignature,
-
        >,
+
                ObjectId = git::Oid,
+
                Parent = git::Oid,
+
                Signatures = crypto::ssh::ExtendedSignature,
+
            >,
    {
        store.manifest_of(id).map_err(|err| ManifestError {
            object: *id,
@@ -137,10 +137,10 @@ impl<A> Op<A> {
    pub fn load<S>(store: &S, id: git::Oid) -> Result<Self, LoadError>
    where
        S: cob::change::Storage<
-
            ObjectId = git::Oid,
-
            Parent = git::Oid,
-
            Signatures = crypto::ssh::ExtendedSignature,
-
        >,
+
                ObjectId = git::Oid,
+
                Parent = git::Oid,
+
                Signatures = crypto::ssh::ExtendedSignature,
+
            >,
        for<'de> A: serde::Deserialize<'de>,
    {
        let entry = store.load(id).map_err(|err| LoadError::Load {
modified crates/radicle/src/cob/patch.rs
@@ -25,11 +25,11 @@ use crate::cob::store::{Cob, CobAction};
use crate::cob::thread;
use crate::cob::thread::Thread;
use crate::cob::thread::{Comment, CommentId, Edit, Reactions};
-
use crate::cob::{op, store, ActorId, Embed, EntryId, ObjectId, TypeName, Uri};
+
use crate::cob::{ActorId, Embed, EntryId, ObjectId, TypeName, Uri, op, store};
use crate::crypto::PublicKey;
use crate::git;
-
use crate::identity::doc::{DocAt, DocError};
use crate::identity::PayloadError;
+
use crate::identity::doc::{DocAt, DocError};
use crate::node::device::Device;
use crate::prelude::*;
use crate::storage;
@@ -2868,7 +2868,7 @@ mod ser {

    use serde::ser::SerializeSeq;

-
    use crate::cob::{thread::Reactions, ActorId, CodeLocation};
+
    use crate::cob::{ActorId, CodeLocation, thread::Reactions};

    /// Serialize a `Revision`'s reaction as an object containing the
    /// `location`, `emoji`, and all `authors` that have performed the
@@ -2999,7 +2999,7 @@ mod test {
    use crate::profile::env;
    use crate::test;
    use crate::test::arbitrary;
-
    use crate::test::arbitrary::gen;
+
    use crate::test::arbitrary::r#gen;
    use crate::test::storage::MockRepository;

    use cob::migrate;
@@ -3251,9 +3251,9 @@ mod test {
        let base = git::Oid::from_str("cb18e95ada2bb38aadd8e6cef0963ce37a87add3").unwrap();
        let oid = git::Oid::from_str("518d5069f94c03427f694bb494ac1cd7d1339380").unwrap();
        let mut alice = Actor::<MockSigner>::default();
-
        let rid = gen::<RepoId>(1);
+
        let rid = r#gen::<RepoId>(1);
        let doc = RawDoc::new(
-
            gen::<Project>(1),
+
            r#gen::<Project>(1),
            vec![alice.did()],
            1,
            identity::Visibility::Public,
@@ -3308,7 +3308,7 @@ mod test {
    fn test_revision_edit_redact() {
        let base = arbitrary::oid();
        let oid = arbitrary::oid();
-
        let repo = gen::<MockRepository>(1);
+
        let repo = r#gen::<MockRepository>(1);
        let time = env::local_time();
        let alice = MockSigner::default();
        let bob = MockSigner::default();
@@ -3370,7 +3370,7 @@ mod test {
        let base = git::Oid::from_str("cb18e95ada2bb38aadd8e6cef0963ce37a87add3").unwrap();
        let oid = git::Oid::from_str("518d5069f94c03427f694bb494ac1cd7d1339380").unwrap();
        let mut alice = Actor::<MockSigner>::default();
-
        let repo = gen::<MockRepository>(1);
+
        let repo = r#gen::<MockRepository>(1);
        let reaction = Reaction::new('👍').expect("failed to create a reaction");

        let a1 = alice.op::<Patch>([
modified crates/radicle/src/cob/patch/actions.rs
@@ -5,9 +5,9 @@

use serde::{Deserialize, Serialize};

-
use crate::cob::{thread::Edit, ActorId, Embed, Label, Timestamp, Uri};
+
use crate::cob::{ActorId, Embed, Label, Timestamp, Uri, thread::Edit};

-
use super::{lookup, Error, Patch, ReviewId, Verdict};
+
use super::{Error, Patch, ReviewId, Verdict, lookup};

/// A review edit that keeps track of the different versions of actions.
///
modified crates/radicle/src/cob/patch/cache.rs
@@ -712,7 +712,7 @@ mod tests {

    use crate::cob::cache::{Store, Update, Write};
    use crate::cob::thread::{Comment, Thread};
-
    use crate::cob::{migrate, Author, Title};
+
    use crate::cob::{Author, Title, migrate};
    use crate::patch::{
        ByRevision, MergeTarget, Patch, PatchCounts, PatchId, Revision, RevisionId, State, Status,
    };
@@ -732,8 +732,8 @@ mod tests {
    }

    fn revision() -> (RevisionId, Revision) {
-
        let author = arbitrary::gen::<Did>(1);
-
        let description = arbitrary::gen::<String>(1);
+
        let author = arbitrary::r#gen::<Did>(1);
+
        let description = arbitrary::r#gen::<String>(1);
        let base = arbitrary::oid();
        let oid = arbitrary::oid();
        let timestamp = env::local_time();
@@ -763,7 +763,7 @@ mod tests {

    #[test]
    fn test_is_empty() {
-
        let repo = arbitrary::gen::<MockRepository>(1);
+
        let repo = arbitrary::r#gen::<MockRepository>(1);
        let mut cache = memory(repo);
        assert!(cache.is_empty().unwrap());

@@ -791,12 +791,12 @@ mod tests {

    #[test]
    fn test_counts() {
-
        let repo = arbitrary::gen::<MockRepository>(1);
+
        let repo = arbitrary::r#gen::<MockRepository>(1);
        let mut cache = memory(repo);
-
        let n_open = arbitrary::gen::<u8>(0);
-
        let n_draft = arbitrary::gen::<u8>(1);
-
        let n_archived = arbitrary::gen::<u8>(1);
-
        let n_merged = arbitrary::gen::<u8>(1);
+
        let n_open = arbitrary::r#gen::<u8>(0);
+
        let n_draft = arbitrary::r#gen::<u8>(1);
+
        let n_archived = arbitrary::r#gen::<u8>(1);
+
        let n_merged = arbitrary::r#gen::<u8>(1);
        let open_ids = (0..n_open)
            .map(|_| PatchId::from(arbitrary::oid()))
            .collect::<BTreeSet<PatchId>>();
@@ -879,12 +879,12 @@ mod tests {

    #[test]
    fn test_get() {
-
        let repo = arbitrary::gen::<MockRepository>(1);
+
        let repo = arbitrary::r#gen::<MockRepository>(1);
        let mut cache = memory(repo);
-
        let ids = (0..arbitrary::gen::<u8>(1))
+
        let ids = (0..arbitrary::r#gen::<u8>(1))
            .map(|_| PatchId::from(arbitrary::oid()))
            .collect::<BTreeSet<PatchId>>();
-
        let missing = (0..arbitrary::gen::<u8>(2))
+
        let missing = (0..arbitrary::r#gen::<u8>(2))
            .filter_map(|_| {
                let id = PatchId::from(arbitrary::oid());
                (!ids.contains(&id)).then_some(id)
@@ -915,10 +915,10 @@ mod tests {

    #[test]
    fn test_find_by_revision() {
-
        let repo = arbitrary::gen::<MockRepository>(1);
+
        let repo = arbitrary::r#gen::<MockRepository>(1);
        let mut cache = memory(repo);
        let patch_id = PatchId::from(arbitrary::oid());
-
        let revisions = (0..arbitrary::gen::<NonZeroU8>(1).into())
+
        let revisions = (0..arbitrary::r#gen::<NonZeroU8>(1).into())
            .map(|_| revision())
            .collect::<BTreeMap<RevisionId, Revision>>();
        let (rev_id, rev) = revisions
@@ -957,9 +957,9 @@ mod tests {

    #[test]
    fn test_list() {
-
        let repo = arbitrary::gen::<MockRepository>(1);
+
        let repo = arbitrary::r#gen::<MockRepository>(1);
        let mut cache = memory(repo);
-
        let ids = (0..arbitrary::gen::<u8>(1))
+
        let ids = (0..arbitrary::r#gen::<u8>(1))
            .map(|_| PatchId::from(arbitrary::oid()))
            .collect::<BTreeSet<PatchId>>();
        let mut patches = Vec::with_capacity(ids.len());
@@ -988,9 +988,9 @@ mod tests {

    #[test]
    fn test_list_by_status() {
-
        let repo = arbitrary::gen::<MockRepository>(1);
+
        let repo = arbitrary::r#gen::<MockRepository>(1);
        let mut cache = memory(repo);
-
        let ids = (0..arbitrary::gen::<u8>(1))
+
        let ids = (0..arbitrary::r#gen::<u8>(1))
            .map(|_| PatchId::from(arbitrary::oid()))
            .collect::<BTreeSet<PatchId>>();
        let mut patches = Vec::with_capacity(ids.len());
@@ -1019,9 +1019,9 @@ mod tests {

    #[test]
    fn test_remove() {
-
        let repo = arbitrary::gen::<MockRepository>(1);
+
        let repo = arbitrary::r#gen::<MockRepository>(1);
        let mut cache = memory(repo);
-
        let ids = (0..arbitrary::gen::<u8>(1))
+
        let ids = (0..arbitrary::r#gen::<u8>(1))
            .map(|_| PatchId::from(arbitrary::oid()))
            .collect::<BTreeSet<PatchId>>();

modified crates/radicle/src/cob/patch/encoding/review.rs
@@ -127,7 +127,7 @@ mod test {
    use serde_json::json;

    use crate::{
-
        cob::{thread::Edit, Timestamp},
+
        cob::{Timestamp, thread::Edit},
        patch,
    };

modified crates/radicle/src/cob/store.rs
@@ -13,8 +13,8 @@ use crate::cob::{Create, Embed, EntryId, ObjectId, TypeName, Update, Updated, Ur
use crate::git;
use crate::node::device::Device;
use crate::prelude::*;
-
use crate::storage::git as storage;
use crate::storage::SignRepository;
+
use crate::storage::git as storage;
use crate::{cob, identity};

pub trait CobAction {
@@ -129,7 +129,9 @@ pub enum Error {
        #[source]
        err: git::raw::Error,
    },
-
    #[error("transaction already contains action {0} which produces an identifier, denying to add action {1} which also produces an identifier")]
+
    #[error(
+
        "transaction already contains action {0} which produces an identifier, denying to add action {1} which also produces an identifier"
+
    )]
    ClashingIdentifiers(String, String),
}

@@ -344,7 +346,8 @@ where
    /// Return all objects.
    pub fn all(
        &self,
-
    ) -> Result<impl ExactSizeIterator<Item = Result<(ObjectId, T), Error>> + 'a, Error> {
+
    ) -> Result<impl ExactSizeIterator<Item = Result<(ObjectId, T), Error>> + use<'a, T, R>, Error>
+
    {
        let raw = cob::list::<T, _>(self.repo, self.type_name)?;

        Ok(raw.into_iter().map(|o| Ok((*o.id(), o.object))))
modified crates/radicle/src/cob/stream.rs
@@ -177,7 +177,7 @@ mod tests {
    use crate::cob::change::Storage as _;
    use crate::crypto::test::signer::MockSigner;
    use crate::test::arbitrary;
-
    use crate::test::arbitrary::gen;
+
    use crate::test::arbitrary::r#gen;
    use crate::{cob, test};

    use super::*;
@@ -188,13 +188,13 @@ mod tests {

    fn gen_ops(repo: &git::raw::Repository, signer: &MockSigner) -> Vec<cob::Entry> {
        // Number of ops
-
        let n = gen::<u8>(1).clamp(1, 10);
+
        let n = r#gen::<u8>(1).clamp(1, 10);
        let mut entries = Vec::with_capacity(n.into());

        let mut parent = None;
        for _ in 0..n {
            // Number of actions in this op
-
            let m = gen::<u8>(1).clamp(1, 3);
+
            let m = r#gen::<u8>(1).clamp(1, 3);
            let contents = create_contents((0..m).map(|_| arbitrary::alphanumeric(1)));
            let entry = create_entry(repo, signer, contents, parent);
            parent = Some(entry.id);
@@ -383,7 +383,7 @@ mod tests {
            until: ops.last().unwrap().id.into(),
        };
        let n = ops.len() - 1;
-
        let (x, y) = gen::<(usize, usize)>(1);
+
        let (x, y) = r#gen::<(usize, usize)>(1);
        let x = x.clamp(0, n);
        let y = y.clamp(0, n);
        let (from, until) = if x <= y {
modified crates/radicle/src/cob/stream/iter.rs
@@ -4,11 +4,11 @@ use serde::Deserialize;

use crate::cob::{Op, TypeName};
use crate::git;
-
use crate::git::fmt::refspec::PatternString;
use crate::git::Oid;
+
use crate::git::fmt::refspec::PatternString;

-
use super::error;
use super::CobRange;
+
use super::error;

/// A `Walk` specifies a range to construct a [`WalkIter`].
#[derive(Clone, Debug)]
modified crates/radicle/src/cob/test.rs
@@ -9,8 +9,8 @@ use serde::{Deserialize, Serialize};
use crate::cob::op::Op;
use crate::cob::patch::Patch;
use crate::cob::store::encoding;
-
use crate::cob::{patch, Title};
use crate::cob::{Entry, History, Manifest, Timestamp, Version};
+
use crate::cob::{Title, patch};
use crate::crypto::Signer;
use crate::git::Oid;
use crate::node::device::Device;
@@ -257,7 +257,7 @@ fn encoded<T: Cob, G: Signer>(
) -> (Vec<u8>, crate::git::Oid) {
    use radicle_git_metadata::{
        author::{Author, Time},
-
        commit::{headers::Headers, trailers::OwnedTrailer, CommitData},
+
        commit::{CommitData, headers::Headers, trailers::OwnedTrailer},
    };

    let data = encoding::encode(action).unwrap();
modified crates/radicle/src/cob/thread.rs
@@ -3,13 +3,13 @@ use std::collections::{BTreeMap, BTreeSet};
use std::str::FromStr;
use std::sync::LazyLock;

-
use serde::{ser::SerializeStruct, Deserialize, Serialize};
+
use serde::{Deserialize, Serialize, ser::SerializeStruct};
use thiserror::Error;

use crate::cob;
use crate::cob::common::{Reaction, Timestamp, Uri};
use crate::cob::store::Cob;
-
use crate::cob::{op, ActorId, Embed, EntryId, Op};
+
use crate::cob::{ActorId, Embed, EntryId, Op, op};
use crate::git;
use crate::prelude::ReadRepository;

@@ -633,12 +633,12 @@ mod tests {
    use crate as radicle;
    use crate::cob::store::Cob;
    use crate::cob::test;
-
    use crate::crypto::test::signer::MockSigner;
    use crate::crypto::Signer;
+
    use crate::crypto::test::signer::MockSigner;
    use crate::node::device::Device;
    use crate::profile::env;
    use crate::test::arbitrary;
-
    use crate::test::arbitrary::gen;
+
    use crate::test::arbitrary::r#gen;
    use crate::test::storage::MockRepository;

    /// An object that can be used to create and sign changes.
@@ -700,7 +700,7 @@ mod tests {
    #[test]
    fn test_redact_comment() {
        let radicle::test::setup::Node { signer, .. } = radicle::test::setup::Node::default();
-
        let repo = gen::<MockRepository>(1);
+
        let repo = r#gen::<MockRepository>(1);
        let mut alice = Actor::new(signer);

        let a0 = alice.comment("First comment", None);
@@ -725,7 +725,7 @@ mod tests {
    #[test]
    fn test_edit_comment() {
        let mut alice = Actor::<MockSigner>::default();
-
        let repo = gen::<MockRepository>(1);
+
        let repo = r#gen::<MockRepository>(1);

        let c0 = alice.comment("Hello world!", None);
        let c1 = alice.edit(c0.id(), "Goodbye world.");
@@ -747,7 +747,7 @@ mod tests {
        let alice = MockSigner::default();
        let bob = MockSigner::default();
        let eve = MockSigner::default();
-
        let repo = gen::<MockRepository>(1);
+
        let repo = r#gen::<MockRepository>(1);
        let time = env::local_time();

        let mut a = test::history::<Thread, _>(
@@ -812,7 +812,7 @@ mod tests {

    #[test]
    fn test_duplicate_comments() {
-
        let repo = gen::<MockRepository>(1);
+
        let repo = r#gen::<MockRepository>(1);
        let alice = MockSigner::default();
        let bob = MockSigner::default();
        let time = env::local_time();
@@ -856,7 +856,7 @@ mod tests {

    #[quickcheck]
    fn prop_ordering(timestamp: u64) {
-
        let repo = gen::<MockRepository>(1);
+
        let repo = r#gen::<MockRepository>(1);
        let alice = MockSigner::default();
        let bob = MockSigner::default();
        let timestamp = Timestamp::from_secs(timestamp);
@@ -915,7 +915,7 @@ mod tests {

    #[test]
    fn test_comment_redact_missing() {
-
        let repo = gen::<MockRepository>(1);
+
        let repo = r#gen::<MockRepository>(1);
        let mut alice = Actor::<MockSigner>::default();
        let mut t = Thread::default();
        let id = arbitrary::entry_id();
@@ -925,7 +925,7 @@ mod tests {

    #[test]
    fn test_comment_edit_missing() {
-
        let repo = gen::<MockRepository>(1);
+
        let repo = r#gen::<MockRepository>(1);
        let mut alice = Actor::<MockSigner>::default();
        let mut t = Thread::default();
        let id = arbitrary::entry_id();
@@ -935,7 +935,7 @@ mod tests {

    #[test]
    fn test_comment_edit_redacted() {
-
        let repo = gen::<MockRepository>(1);
+
        let repo = r#gen::<MockRepository>(1);
        let mut alice = Actor::<MockSigner>::default();

        let a1 = alice.comment("Hi", None);
modified crates/radicle/src/git.rs
@@ -6,7 +6,7 @@ use std::path::Path;
use std::process::Command;
use std::str::FromStr;

-
pub use radicle_oid::{str::ParseOidError, Oid};
+
pub use radicle_oid::{Oid, str::ParseOidError};

pub extern crate radicle_git_ref_format as fmt;

@@ -705,20 +705,12 @@ pub fn set_upstream(
    let branch_remote = format!("branch.{branch}.remote");
    let branch_merge = format!("branch.{branch}.merge");

-
    config.remove_multivar(&branch_remote, ".*").or_else(|e| {
-
        if e.is_not_found() {
-
            Ok(())
-
        } else {
-
            Err(e)
-
        }
-
    })?;
-
    config.remove_multivar(&branch_merge, ".*").or_else(|e| {
-
        if e.is_not_found() {
-
            Ok(())
-
        } else {
-
            Err(e)
-
        }
-
    })?;
+
    config
+
        .remove_multivar(&branch_remote, ".*")
+
        .or_else(|e| if e.is_not_found() { Ok(()) } else { Err(e) })?;
+
    config
+
        .remove_multivar(&branch_merge, ".*")
+
        .or_else(|e| if e.is_not_found() { Ok(()) } else { Err(e) })?;
    config.set_multivar(&branch_remote, ".*", remote)?;
    config.set_multivar(&branch_merge, ".*", merge)?;

@@ -768,7 +760,7 @@ pub mod process {

    use crate::storage::ReadRepository;

-
    use super::{run, Oid, Verbosity};
+
    use super::{Oid, Verbosity, run};

    /// Perform a local fetch, from storage using `git fetch-pack`.
    ///
modified crates/radicle/src/git/canonical.rs
@@ -304,7 +304,7 @@ impl<'a, 'b> QuorumFinder<'a, 'b> {
        }
    }

-
    fn find_merge_bases(&mut self) -> ControlFlow<(), impl Iterator<Item = (Oid, Oid)>> {
+
    fn find_merge_bases(&mut self) -> ControlFlow<(), impl Iterator<Item = (Oid, Oid)> + use<>> {
        match self.commit_quorum.next_candidate() {
            Some(candidate) => ControlFlow::Continue(candidate),
            None => ControlFlow::Break(()),
modified crates/radicle/src/git/canonical/convergence.rs
@@ -3,7 +3,7 @@ use std::{fmt, ops::ControlFlow};
use crate::git::Oid;
use crate::prelude::Did;

-
use super::{effects, error, Object};
+
use super::{Object, effects, error};

/// Checks for convergence and ensures that compared objects are of the same
/// type, i.e. commit or tag, to the [`Candidate`].
modified crates/radicle/src/git/canonical/effects.rs
@@ -1,9 +1,9 @@
use std::collections::{BTreeMap, BTreeSet};

use crate::git;
+
use crate::git::Oid;
use crate::git::fmt::Qualified;
use crate::git::raw::ErrorExt as _;
-
use crate::git::Oid;
use crate::prelude::Did;

use super::{FoundObjects, GraphAheadBehind, MergeBase, Object};
modified crates/radicle/src/git/canonical/error.rs
@@ -2,20 +2,26 @@ use thiserror::Error;

use crate::git::Oid;

-
use super::{effects, ObjectType};
+
use super::{ObjectType, effects};
pub use effects::{FindObjectsError, MergeBaseError};

#[derive(Debug, Error)]
pub enum QuorumError {
-
    #[error("could not determine target for canonical reference '{refname}', found objects of different types")]
+
    #[error(
+
        "could not determine target for canonical reference '{refname}', found objects of different types"
+
    )]
    DifferentTypes { refname: String },
    #[error(transparent)]
    Convergence(#[from] ConvergesError),
    #[error(transparent)]
    MergeBase(#[from] MergeBaseError),
-
    #[error("could not determine target for canonical reference '{refname}', no object with at least {threshold} vote(s) found (threshold not met)")]
+
    #[error(
+
        "could not determine target for canonical reference '{refname}', no object with at least {threshold} vote(s) found (threshold not met)"
+
    )]
    NoCandidates { refname: String, threshold: usize },
-
    #[error("could not determine target commit for canonical reference '{refname}', found diverging commits {longest} and {head}, with base commit {base} and threshold {threshold}")]
+
    #[error(
+
        "could not determine target commit for canonical reference '{refname}', found diverging commits {longest} and {head}, with base commit {base} and threshold {threshold}"
+
    )]
    DivergingCommits {
        refname: String,
        threshold: usize,
@@ -23,7 +29,9 @@ pub enum QuorumError {
        longest: Oid,
        head: Oid,
    },
-
    #[error("could not determine target tag for canonical reference '{refname}', found multiple candidates with threshold {threshold}")]
+
    #[error(
+
        "could not determine target tag for canonical reference '{refname}', found multiple candidates with threshold {threshold}"
+
    )]
    DivergingTags {
        refname: String,
        threshold: usize,
modified crates/radicle/src/git/canonical/quorum.rs
@@ -156,7 +156,7 @@ impl CommitQuorum {
    ///
    /// A [`MergeBase`] should be calculated for each, and these should be
    /// recorded using [`CommitQuorum::found_merge_bases`].
-
    pub fn next_candidate(&mut self) -> Option<impl Iterator<Item = (Oid, Oid)>> {
+
    pub fn next_candidate(&mut self) -> Option<impl Iterator<Item = (Oid, Oid)> + use<>> {
        self.voting.next_candidate()
    }

@@ -239,7 +239,7 @@ pub enum CommitQuorumFailure {
#[allow(clippy::unwrap_used)]
#[cfg(test)]
mod test {
-
    use crate::git::{canonical::MergeBase, Oid};
+
    use crate::git::{Oid, canonical::MergeBase};

    use super::MergeBases;

modified crates/radicle/src/git/canonical/rules.rs
@@ -22,10 +22,10 @@ use thiserror::Error;
use crate::git;
use crate::git::canonical;
use crate::git::canonical::Canonical;
-
use crate::git::fmt::refspec::QualifiedPattern;
use crate::git::fmt::Qualified;
-
use crate::git::fmt::{refname, RefString};
-
use crate::identity::{doc, Did};
+
use crate::git::fmt::refspec::QualifiedPattern;
+
use crate::git::fmt::{RefString, refname};
+
use crate::identity::{Did, doc};

const ASTERISK: char = '*';

@@ -745,18 +745,18 @@ mod tests {

    use nonempty::nonempty;

-
    use crate::crypto::{test::signer::MockSigner, Signer};
+
    use crate::Storage;
+
    use crate::crypto::{Signer, test::signer::MockSigner};
    use crate::git;
-
    use crate::git::fmt::qualified_pattern;
    use crate::git::fmt::RefString;
-
    use crate::identity::doc::Doc;
+
    use crate::git::fmt::qualified_pattern;
    use crate::identity::Visibility;
+
    use crate::identity::doc::Doc;
    use crate::node::device::Device;
    use crate::rad;
    use crate::storage::refs::{IDENTITY_BRANCH, IDENTITY_ROOT, SIGREFS_BRANCH, SIGREFS_PARENT};
-
    use crate::storage::{git::transport, ReadStorage};
+
    use crate::storage::{ReadStorage, git::transport};
    use crate::test::{arbitrary, fixtures};
-
    use crate::Storage;

    use super::*;

@@ -994,7 +994,9 @@ mod tests {

        assert_eq!(
            patterns,
-
            [pattern05, pattern06, pattern03, pattern02, pattern04, pattern01]
+
            [
+
                pattern05, pattern06, pattern03, pattern02, pattern04, pattern01
+
            ]
        );
    }

@@ -1026,7 +1028,7 @@ mod tests {

    #[test]
    fn test_rule_validate_success() {
-
        let doc = arbitrary::gen::<Doc>(1);
+
        let doc = arbitrary::r#gen::<Doc>(1);
        let delegates = Allowed::Set(doc.delegates().as_ref().clone());
        let threshold = doc.majority();

@@ -1041,7 +1043,7 @@ mod tests {

    #[test]
    fn test_rule_validate_failures() {
-
        let doc = arbitrary::gen::<Doc>(1);
+
        let doc = arbitrary::r#gen::<Doc>(1);
        let pattern = pattern(qualified_pattern!("refs/heads/main"));

        assert!(matches!(
modified crates/radicle/src/git/canonical/voting.rs
@@ -66,7 +66,7 @@ impl CommitVoting {
    /// compared to the other commit to see what their common merge base is. The
    /// merge base is then recorded using [`MergeBase`] and is recorded using
    /// [`CommitVoting::found_merge_base`].
-
    pub fn next_candidate(&mut self) -> Option<impl Iterator<Item = (Oid, Oid)>> {
+
    pub fn next_candidate(&mut self) -> Option<impl Iterator<Item = (Oid, Oid)> + use<>> {
        self.candidates
            .pop()
            .map(|(oid, others)| others.into_iter().map(move |other| (oid, other)))
modified crates/radicle/src/git/raw.rs
@@ -6,7 +6,7 @@

// Re-exports that are only used within this crate.
pub(crate) use git2::{
-
    message_trailers_strs, AutotagOption, Blob, FetchOptions, FetchPrune, Object, Revwalk, Sort,
+
    AutotagOption, Blob, FetchOptions, FetchPrune, Object, Revwalk, Sort, message_trailers_strs,
};

#[cfg(unix)]
@@ -35,7 +35,7 @@ pub mod build {

pub(crate) mod transport {
    pub use git2::transport::{
-
        register, Service, SmartSubtransport, SmartSubtransportStream, Transport,
+
        Service, SmartSubtransport, SmartSubtransportStream, Transport, register,
    };
}

modified crates/radicle/src/identity/crefs.rs
@@ -1,8 +1,8 @@
use serde::{Deserialize, Serialize};

use crate::git::canonical::{
-
    rules::{self, RawRules, Rules, ValidationError},
    ValidRule,
+
    rules::{self, RawRules, Rules, ValidationError},
};

use super::doc::{Delegates, Payload};
modified crates/radicle/src/identity/doc.rs
@@ -11,7 +11,7 @@ use std::sync::LazyLock;
use crate::git::Oid;
use nonempty::NonEmpty;
use radicle_cob::type_name::{TypeName, TypeNameParse};
-
use serde::{de, Deserialize, Serialize};
+
use serde::{Deserialize, Serialize, de};
use thiserror::Error;

use crate::canonical::formatter::CanonicalFormatter;
@@ -21,7 +21,7 @@ use crate::crypto::Signature;
use crate::git;
use crate::git::canonical::rules;
use crate::git::raw::ErrorExt as _;
-
use crate::identity::{project::Project, Did};
+
use crate::identity::{Did, project::Project};
use crate::node::device::Device;
use crate::storage;
use crate::storage::{ReadRepository, RepositoryError};
@@ -29,8 +29,8 @@ use crate::storage::{ReadRepository, RepositoryError};
pub use crypto::PublicKey;
pub use radicle_core::repo::*;

-
use super::crefs::{self, RawCanonicalRefs};
use super::CanonicalRefs;
+
use super::crefs::{self, RawCanonicalRefs};

/// Path to the identity document in the identity branch.
pub static PATH: LazyLock<&Path> = LazyLock::new(|| Path::new("radicle.json"));
@@ -974,11 +974,11 @@ mod test {

    use crate::assert_matches;
    use crate::rad;
-
    use crate::storage::git::transport;
    use crate::storage::git::Storage;
+
    use crate::storage::git::transport;
    use crate::storage::{ReadStorage as _, RemoteId, WriteStorage as _};
    use crate::test::arbitrary;
-
    use crate::test::arbitrary::gen;
+
    use crate::test::arbitrary::r#gen;
    use crate::test::fixtures;

    use super::*;
@@ -988,7 +988,7 @@ mod test {
    fn test_duplicate_dids() {
        let delegate = Device::mock_from_seed([0xff; 32]);
        let did = Did::from(delegate.public_key());
-
        let mut doc = RawDoc::new(gen::<Project>(1), vec![did], 1, Visibility::Public);
+
        let mut doc = RawDoc::new(r#gen::<Project>(1), vec![did], 1, Visibility::Public);
        doc.delegate(did);
        let doc = doc.verified().unwrap();
        assert!(doc.delegates().len() == 1, "Duplicate DID was not removed");
@@ -998,11 +998,11 @@ mod test {
    #[test]
    fn test_max_delegates() {
        // Generate more than the max delegates
-
        let delegates = (0..MAX_DELEGATES + 1).map(gen).collect::<Vec<Did>>();
+
        let delegates = (0..MAX_DELEGATES + 1).map(r#gen).collect::<Vec<Did>>();

        // A document with max delegates will be fine
        let doc = RawDoc::new(
-
            gen::<Project>(1),
+
            r#gen::<Project>(1),
            delegates[0..MAX_DELEGATES].into(),
            1,
            Visibility::Public,
@@ -1010,7 +1010,7 @@ mod test {
        assert_matches!(doc.verified(), Ok(_));

        // A document that exceeds max delegates should fail
-
        let doc = RawDoc::new(gen::<Project>(1), delegates, 1, Visibility::Public);
+
        let doc = RawDoc::new(r#gen::<Project>(1), delegates, 1, Visibility::Public);
        assert_matches!(doc.verified(), Err(DocError::Delegates(DelegatesError(_))));
    }

@@ -1149,8 +1149,8 @@ mod test {
    fn test_not_found() {
        let tempdir = tempfile::tempdir().unwrap();
        let storage = Storage::open(tempdir.path().join("storage"), fixtures::user()).unwrap();
-
        let remote = arbitrary::gen::<RemoteId>(1);
-
        let proj = arbitrary::gen::<RepoId>(1);
+
        let remote = arbitrary::r#gen::<RemoteId>(1);
+
        let proj = arbitrary::r#gen::<RepoId>(1);
        let repo = storage.create(proj).unwrap();
        let oid = git::raw::Oid::from_str("2d52a53ce5e4f141148a5f770cfd3ead2d6a45b8").unwrap();

modified crates/radicle/src/identity/doc/update.rs
@@ -8,7 +8,7 @@ use crate::{
    git,
    identity::crefs::GetCanonicalRefs as _,
    prelude::Did,
-
    storage::{self, refs, ReadRepository, RepositoryError},
+
    storage::{self, ReadRepository, RepositoryError, refs},
};

use super::{Doc, PayloadError, PayloadId, RawDoc, Visibility};
@@ -206,7 +206,7 @@ pub fn verify(raw: RawDoc) -> Result<Doc, error::DocVerification> {
            return Err(error::DocVerification::PayloadError {
                id: PayloadId::project(),
                err: e.to_string(),
-
            })
+
            });
        }
    };
    // Ensure that if we have canonical reference rules and a project, that no
@@ -279,7 +279,7 @@ mod test {
        git,
        identity::{
            crefs::GetCanonicalRefs,
-
            doc::{update::error, PayloadId},
+
            doc::{PayloadId, update::error},
        },
        prelude::RawDoc,
        test::arbitrary,
@@ -289,7 +289,7 @@ mod test {

    #[test]
    fn test_can_update_crefs() {
-
        let raw = arbitrary::gen::<RawDoc>(1);
+
        let raw = arbitrary::r#gen::<RawDoc>(1);
        let raw = super::payload(
            raw,
            [PayloadUpsert {
@@ -310,7 +310,7 @@ mod test {

    #[test]
    fn test_cannot_include_default_branch_rule() {
-
        let raw = arbitrary::gen::<RawDoc>(1);
+
        let raw = arbitrary::r#gen::<RawDoc>(1);
        let branch = git::fmt::Qualified::from(git::fmt::lit::refs_heads(
            raw.project().unwrap().default_branch(),
        ));
@@ -343,7 +343,7 @@ mod test {

    #[test]
    fn test_default_branch_rule_exists_after_verification() {
-
        let raw = arbitrary::gen::<RawDoc>(1);
+
        let raw = arbitrary::r#gen::<RawDoc>(1);
        let branch = git::fmt::Qualified::from(git::fmt::lit::refs_heads(
            raw.project().unwrap().default_branch(),
        ));
modified crates/radicle/src/identity/doc/update/error.rs
@@ -2,7 +2,7 @@ use thiserror::Error;

use crate::git;
use crate::git::fmt::RefString;
-
use crate::identity::{doc::PayloadId, Did, DocError};
+
use crate::identity::{Did, DocError, doc::PayloadId};

#[derive(Debug, Error)]
#[error("'{0}' is not a valid visibility type")]
@@ -28,7 +28,9 @@ pub enum DocVerification {
    PayloadError { id: PayloadId, err: String },
    #[error(transparent)]
    Doc(#[from] DocError),
-
    #[error("incompatible payloads: The rule(s) xyz.radicle.crefs.rules.{matches:?} matches the value of xyz.radicle.project.defaultBranch ('{default}'). Possible resolutions: Change the name of the default branch or remove the rule(s).")]
+
    #[error(
+
        "incompatible payloads: The rule(s) xyz.radicle.crefs.rules.{matches:?} matches the value of xyz.radicle.project.defaultBranch ('{default}'). Possible resolutions: Change the name of the default branch or remove the rule(s)."
+
    )]
    DisallowDefault {
        matches: Vec<String>,
        default: git::fmt::Qualified<'static>,
modified crates/radicle/src/identity/project.rs
@@ -1,8 +1,8 @@
use std::{fmt, str::FromStr};

use serde::{
-
    de::{self, MapAccess, Visitor},
    Deserialize, Serialize,
+
    de::{self, MapAccess, Visitor},
};
use thiserror::Error;

modified crates/radicle/src/io.rs
@@ -1,7 +1,7 @@
use std::io;

#[cfg(unix)]
-
use libc::{getrlimit, rlim_t, rlimit, setrlimit, RLIMIT_NOFILE};
+
use libc::{RLIMIT_NOFILE, getrlimit, rlim_t, rlimit, setrlimit};

#[cfg(unix)]
type Int = rlim_t;
modified crates/radicle/src/lib.rs
@@ -44,7 +44,7 @@ pub mod prelude {

    pub use crypto::PublicKey;
    pub use git::BranchName;
-
    pub use identity::{project::Project, Did, Doc, RawDoc, RepoId};
+
    pub use identity::{Did, Doc, RawDoc, RepoId, project::Project};
    pub use node::{Alias, NodeId, Timestamp};
    pub use profile::Profile;
    pub use storage::{ReadRepository, ReadStorage, SignRepository, WriteRepository, WriteStorage};
modified crates/radicle/src/node.rs
@@ -43,11 +43,11 @@ use crate::crypto::PublicKey;
use crate::git;
use crate::identity::RepoId;
use crate::profile;
-
use crate::storage::refs::{FeatureLevel, RefsAt};
use crate::storage::RefUpdate;
+
use crate::storage::refs::{FeatureLevel, RefsAt};

pub use address::KnownAddress;
-
pub use command::{Command, CommandResult, ConnectOptions, Success, DEFAULT_TIMEOUT};
+
pub use command::{Command, CommandResult, ConnectOptions, DEFAULT_TIMEOUT, Success};
pub use config::Config;
pub use cyphernet::addr::{HostName, PeerAddr, PeerAddrParseError};
pub use db::Database;
@@ -488,7 +488,7 @@ impl Address {
        self.0.port
    }

-
    pub fn display_compact(&self) -> impl Display {
+
    pub fn display_compact(&self) -> impl Display + use<> {
        let host = match self.host() {
            HostName::Ip(IpAddr::V4(ip)) => ip.to_string(),
            HostName::Ip(IpAddr::V6(ip)) => format!("[{ip}]"),
@@ -1049,7 +1049,7 @@ impl<T: DeserializeOwned> Iterator for LineIter<T> {
                        return Some(Err(Error::InvalidJson {
                            response: l.clone(),
                            error: e,
-
                        }))
+
                        }));
                    }
                    Ok(result) => result,
                };
@@ -1420,11 +1420,11 @@ pub(crate) mod properties {

    impl AliasInput {
        pub fn new() -> Self {
-
            let short = arbitrary::gen::<Alias>(0);
+
            let short = arbitrary::r#gen::<Alias>(0);
            let long = {
                // Ensure we have a second, unique alias
                let mut a = short.to_string();
-
                a.push_str(arbitrary::gen::<Alias>(1).as_str());
+
                a.push_str(arbitrary::r#gen::<Alias>(1).as_str());
                Alias::new(a)
            };
            Self {
modified crates/radicle/src/node/address/store.rs
@@ -8,8 +8,8 @@ use sqlite as sql;
use thiserror::Error;

use crate::node;
-
use crate::node::address::{AddressType, KnownAddress, Node, Source};
use crate::node::UserAgent;
+
use crate::node::address::{AddressType, KnownAddress, Node, Source};
use crate::node::{Address, Alias, AliasError, AliasStore, Database, NodeId, Penalty, Severity};
use crate::prelude::Timestamp;
use crate::sql::transaction;
@@ -575,7 +575,7 @@ mod test {

    #[test]
    fn test_get_none() {
-
        let alice = arbitrary::gen::<NodeId>(1);
+
        let alice = arbitrary::r#gen::<NodeId>(1);
        let cache = Database::memory().unwrap();
        let result = cache.get(&alice).unwrap();

@@ -584,7 +584,7 @@ mod test {

    #[test]
    fn test_remove_nothing() {
-
        let alice = arbitrary::gen::<NodeId>(1);
+
        let alice = arbitrary::r#gen::<NodeId>(1);
        let mut cache = Database::memory().unwrap();
        let removed = cache.remove(&alice).unwrap();

@@ -593,7 +593,7 @@ mod test {

    #[test]
    fn test_alias() {
-
        let alice = arbitrary::gen::<NodeId>(1);
+
        let alice = arbitrary::r#gen::<NodeId>(1);
        let mut cache = Database::memory().unwrap();
        let features = node::Features::SEED;
        let timestamp = Timestamp::from(LocalTime::now());
@@ -632,7 +632,7 @@ mod test {

    #[test]
    fn test_insert_and_get() {
-
        let alice = arbitrary::gen::<NodeId>(1);
+
        let alice = arbitrary::r#gen::<NodeId>(1);
        let mut cache = Database::memory().unwrap();
        let version = 2;
        let features = node::Features::SEED;
@@ -672,7 +672,7 @@ mod test {

    #[test]
    fn test_insert_duplicate() {
-
        let alice = arbitrary::gen::<NodeId>(1);
+
        let alice = arbitrary::r#gen::<NodeId>(1);
        let mut cache = Database::memory().unwrap();
        let features = node::Features::SEED;
        let timestamp = LocalTime::now().into();
@@ -701,7 +701,7 @@ mod test {

    #[test]
    fn test_insert_and_update() {
-
        let alice = arbitrary::gen::<NodeId>(1);
+
        let alice = arbitrary::r#gen::<NodeId>(1);
        let mut cache = Database::memory().unwrap();
        let timestamp = LocalTime::now().into();
        let features = node::Features::SEED;
@@ -776,8 +776,8 @@ mod test {

    #[test]
    fn test_insert_and_remove() {
-
        let alice = arbitrary::gen::<NodeId>(1);
-
        let bob = arbitrary::gen::<NodeId>(1);
+
        let alice = arbitrary::r#gen::<NodeId>(1);
+
        let bob = arbitrary::r#gen::<NodeId>(1);
        let mut cache = Database::memory().unwrap();
        let timestamp = LocalTime::now().into();
        let ua = UserAgent::default();
@@ -868,8 +868,8 @@ mod test {

    #[test]
    fn test_disconnected() {
-
        let alice = arbitrary::gen::<NodeId>(1);
-
        let addr = arbitrary::gen::<Address>(1);
+
        let alice = arbitrary::r#gen::<NodeId>(1);
+
        let addr = arbitrary::r#gen::<Address>(1);
        let mut cache = Database::memory().unwrap();
        let features = node::Features::SEED;
        let timestamp = Timestamp::from(LocalTime::now());
@@ -909,16 +909,16 @@ mod test {

    #[test]
    fn test_disconnected_ban() {
-
        let alice = arbitrary::gen::<NodeId>(1);
+
        let alice = arbitrary::r#gen::<NodeId>(1);
        let ua = UserAgent::default();
        let ip1: net::Ipv4Addr = [8, 8, 8, 8].into();
        let ip2: net::Ipv4Addr = [9, 9, 9, 9].into();
-
        let ka1 = arbitrary::gen::<KnownAddress>(1);
+
        let ka1 = arbitrary::r#gen::<KnownAddress>(1);
        let ka1 = KnownAddress {
            addr: Address::from(NetAddr::new(ip1.into(), 8776)),
            ..ka1
        };
-
        let ka2 = arbitrary::gen::<KnownAddress>(1);
+
        let ka2 = arbitrary::r#gen::<KnownAddress>(1);
        let ka2 = KnownAddress {
            addr: Address::from(NetAddr::new(ip2.into(), 8776)),
            ..ka2
@@ -980,7 +980,7 @@ mod test {
        let features = node::Features::SEED;
        let agent = UserAgent::default();
        let timestamp = Timestamp::from(LocalTime::now());
-
        let ka = arbitrary::gen::<KnownAddress>(1);
+
        let ka = arbitrary::r#gen::<KnownAddress>(1);

        for id in short_ids {
            db.insert(id, 1, features, short, 16, &agent, timestamp, [ka.clone()])
modified crates/radicle/src/node/command.rs
@@ -17,8 +17,8 @@ use crate::crypto::PublicKey;
use crate::identity::RepoId;
use crate::storage::refs;

-
use super::events::Event;
use super::NodeId;
+
use super::events::Event;

/// Default timeout when waiting for the node to respond with data.
pub const DEFAULT_TIMEOUT: time::Duration = time::Duration::from_secs(30);
modified crates/radicle/src/node/config.rs
@@ -22,7 +22,7 @@ pub type ProtocolVersion = u8;
pub mod seeds {
    use std::{str::FromStr, sync::LazyLock};

-
    use cyphernet::addr::{tor::OnionAddrV3, HostName, NetAddr};
+
    use cyphernet::addr::{HostName, NetAddr, tor::OnionAddrV3};

    use super::{ConnectAddress, NodeId, PeerAddr};

@@ -718,7 +718,7 @@ impl From<LimitGossipMaxAge> for LocalDuration {
///   - `Deserialize`
///   - `From<$name> for $type`, i.e. can convert back into the original type
macro_rules! wrapper {
-
    ($name:ident, $type:ty, $default:expr $(, $derive:ty)*) => {
+
    ($name:ident, $type:ty, $default:expr_2021 $(, $derive:ty)*) => {
        #[derive(Clone, Debug, Deserialize, Display, Serialize, From $(, $derive)*)]
        #[display("{0}")]
        #[serde(transparent)]
@@ -767,7 +767,7 @@ wrapper!(
#[allow(clippy::unwrap_used)]
mod test {
    use super::{DefaultSeedingPolicy, Scope};
-
    use crate::node::{policy, Alias};
+
    use crate::node::{Alias, policy};
    use serde_json::json;

    #[test]
modified crates/radicle/src/node/db.rs
@@ -16,7 +16,7 @@ use sqlite as sql;
use thiserror::Error;

use crate::node::{
-
    address, Address, Alias, Features, KnownAddress, NodeId, Timestamp, UserAgent, PROTOCOL_VERSION,
+
    Address, Alias, Features, KnownAddress, NodeId, PROTOCOL_VERSION, Timestamp, UserAgent, address,
};
use crate::sql::transaction;

modified crates/radicle/src/node/device.rs
@@ -2,9 +2,9 @@ use std::fmt;
use std::ops::Deref;

use crypto::{
+
    Signature,
    signature::{Keypair, KeypairRef, Signer, Verifier},
    ssh::ExtendedSignature,
-
    Signature,
};

use crate::crypto;
modified crates/radicle/src/node/events.rs
@@ -9,11 +9,11 @@ use std::time;

use crossbeam_channel as chan;

-
use crate::git::fmt::Qualified;
use crate::git::Oid;
+
use crate::git::fmt::Qualified;
use crate::node;
use crate::prelude::*;
-
use crate::storage::{refs, RefUpdate};
+
use crate::storage::{RefUpdate, refs};

/// Maximum unconsumed events allowed per subscription.
pub const MAX_PENDING_EVENTS: usize = 8192;
modified crates/radicle/src/node/features.rs
@@ -116,13 +116,17 @@ mod test {
    fn test_operations() {
        assert_eq!(Features::NONE.with(Features::SEED), Features::SEED);

-
        assert!(!Features::from(u64::MAX)
-
            .without(Features::SEED)
-
            .has(Features::SEED));
+
        assert!(
+
            !Features::from(u64::MAX)
+
                .without(Features::SEED)
+
                .has(Features::SEED)
+
        );

-
        assert!(Features::from(u64::MIN)
-
            .with(Features::SEED)
-
            .has(Features::SEED));
+
        assert!(
+
            Features::from(u64::MIN)
+
                .with(Features::SEED)
+
                .has(Features::SEED)
+
        );

        assert_eq!(
            Features::NONE.with(Features::SEED).without(Features::SEED),
modified crates/radicle/src/node/notifications.rs
@@ -7,7 +7,7 @@ use thiserror::Error;

use crate::cob;
use crate::cob::TypedId;
-
use crate::git::{fmt::Qualified, BranchName};
+
use crate::git::{BranchName, fmt::Qualified};
use crate::prelude::RepoId;
use crate::storage::{RefUpdate, RemoteId};

modified crates/radicle/src/node/notifications/store.rs
@@ -10,9 +10,9 @@ use sqlite as sql;
use thiserror::Error;

use crate::git;
-
use crate::git::fmt::RefString;
use crate::git::Oid;
use crate::git::RefError;
+
use crate::git::fmt::RefString;
use crate::prelude::RepoId;
use crate::sql::transaction;
use crate::storage::RefUpdate;
@@ -294,7 +294,7 @@ impl<T> Store<T> {
        &self,
        repo: &RepoId,
        order_by: &str,
-
    ) -> Result<impl Iterator<Item = Result<Notification, Error>> + '_, Error> {
+
    ) -> Result<impl Iterator<Item = Result<Notification, Error>> + '_ + use<'_, T>, Error> {
        let mut stmt = self.db.prepare(format!(
            "SELECT rowid, repo, ref, old, new, status, timestamp
             FROM `repository-notifications`
@@ -424,7 +424,7 @@ mod test {
    #[test]
    fn test_clear() {
        let mut db = Store::open(":memory:").unwrap();
-
        let repo = arbitrary::gen::<RepoId>(1);
+
        let repo = arbitrary::r#gen::<RepoId>(1);
        let old = arbitrary::oid();
        let time = LocalTime::from_millis(32188142);
        let master = arbitrary::oid();
@@ -447,8 +447,8 @@ mod test {
    #[test]
    fn test_counts_by_repo() {
        let mut db = Store::open(":memory:").unwrap();
-
        let repo1 = arbitrary::gen::<RepoId>(1);
-
        let repo2 = arbitrary::gen::<RepoId>(1);
+
        let repo1 = arbitrary::r#gen::<RepoId>(1);
+
        let repo2 = arbitrary::r#gen::<RepoId>(1);
        let oid = arbitrary::oid();
        let time = LocalTime::from_millis(32188142);

@@ -480,7 +480,7 @@ mod test {

    #[test]
    fn test_branch_notifications() {
-
        let repo = arbitrary::gen::<RepoId>(1);
+
        let repo = arbitrary::r#gen::<RepoId>(1);
        let old = arbitrary::oid();
        let master = arbitrary::oid();
        let other = arbitrary::oid();
@@ -558,7 +558,7 @@ mod test {

    #[test]
    fn test_notification_status() {
-
        let repo = arbitrary::gen::<RepoId>(1);
+
        let repo = arbitrary::r#gen::<RepoId>(1);
        let oid = arbitrary::oid();
        let time = LocalTime::from_millis(32188142);
        let mut db = Store::open(":memory:").unwrap();
@@ -578,9 +578,10 @@ mod test {
        assert!(db.insert(&repo, &update1, time).unwrap());
        assert!(db.insert(&repo, &update2, time).unwrap());
        assert!(db.insert(&repo, &update3, time).unwrap());
-
        assert!(db
-
            .set_status(NotificationStatus::ReadAt(time), &[1, 2, 3])
-
            .unwrap());
+
        assert!(
+
            db.set_status(NotificationStatus::ReadAt(time), &[1, 2, 3])
+
                .unwrap()
+
        );

        let mut notifs = db.by_repo(&repo, "timestamp").unwrap();

@@ -600,7 +601,7 @@ mod test {

    #[test]
    fn test_duplicate_notifications() {
-
        let repo = arbitrary::gen::<RepoId>(1);
+
        let repo = arbitrary::r#gen::<RepoId>(1);
        let old = arbitrary::oid();
        let master1 = arbitrary::oid();
        let master2 = arbitrary::oid();
@@ -619,9 +620,10 @@ mod test {
            new: master2,
        };
        assert!(db.insert(&repo, &update1, time1).unwrap());
-
        assert!(db
-
            .set_status(NotificationStatus::ReadAt(time1), &[1])
-
            .unwrap());
+
        assert!(
+
            db.set_status(NotificationStatus::ReadAt(time1), &[1])
+
                .unwrap()
+
        );
        assert!(db.insert(&repo, &update2, time2).unwrap());

        let mut notifs = db.by_repo(&repo, "timestamp").unwrap();
@@ -647,7 +649,7 @@ mod test {

    #[test]
    fn test_cob_notifications() {
-
        let repo = arbitrary::gen::<RepoId>(1);
+
        let repo = arbitrary::r#gen::<RepoId>(1);
        let old = arbitrary::oid();
        let new = arbitrary::oid();
        let timestamp = LocalTime::from_millis(32189874);
modified crates/radicle/src/node/policy/store.rs
@@ -467,7 +467,7 @@ mod test {

    #[test]
    fn test_follow_and_unfollow_node() {
-
        let id = arbitrary::gen::<NodeId>(1);
+
        let id = arbitrary::r#gen::<NodeId>(1);
        let mut db = Store::open(":memory:").unwrap();
        let eve = Alias::new("eve");

@@ -480,7 +480,7 @@ mod test {

    #[test]
    fn test_seed_and_unseed_repo() {
-
        let id = arbitrary::gen::<RepoId>(1);
+
        let id = arbitrary::r#gen::<RepoId>(1);
        let mut db = Store::open(":memory:").unwrap();

        assert!(db.seed(&id, Scope::All).unwrap());
@@ -520,7 +520,7 @@ mod test {

    #[test]
    fn test_update_alias() {
-
        let id = arbitrary::gen::<NodeId>(1);
+
        let id = arbitrary::r#gen::<NodeId>(1);
        let mut db = Store::open(":memory:").unwrap();

        assert!(db.follow(&id, Some(&Alias::new("eve"))).unwrap());
@@ -540,7 +540,7 @@ mod test {

    #[test]
    fn test_update_scope() {
-
        let id = arbitrary::gen::<RepoId>(1);
+
        let id = arbitrary::r#gen::<RepoId>(1);
        let mut db = Store::open(":memory:").unwrap();

        assert!(db.seed(&id, Scope::All).unwrap());
@@ -557,7 +557,7 @@ mod test {

    #[test]
    fn test_repo_policy() {
-
        let id = arbitrary::gen::<RepoId>(1);
+
        let id = arbitrary::r#gen::<RepoId>(1);
        let mut db = Store::open(":memory:").unwrap();

        assert!(db.seed(&id, Scope::All).unwrap());
@@ -569,7 +569,7 @@ mod test {

    #[test]
    fn test_node_policy() {
-
        let id = arbitrary::gen::<NodeId>(1);
+
        let id = arbitrary::r#gen::<NodeId>(1);
        let mut db = Store::open(":memory:").unwrap();

        assert!(db.follow(&id, None).unwrap());
modified crates/radicle/src/node/refs/store.rs
@@ -6,8 +6,8 @@ use localtime::LocalTime;
use sqlite as sql;
use thiserror::Error;

-
use crate::git::fmt::Qualified;
use crate::git::Oid;
+
use crate::git::fmt::Qualified;
use crate::node::Database;
use crate::node::NodeId;
use crate::prelude::RepoId;
@@ -186,8 +186,8 @@ mod test {
        let mut db = Database::memory().unwrap();
        let oid = arbitrary::oid();

-
        let repo = arbitrary::gen::<RepoId>(1);
-
        let namespace = arbitrary::gen::<NodeId>(1);
+
        let repo = arbitrary::r#gen::<RepoId>(1);
+
        let namespace = arbitrary::r#gen::<NodeId>(1);
        let refname1 = qualified!("refs/heads/master");
        let refname2 = qualified!("refs/heads/main");
        let timestamp = LocalTime::now();
@@ -195,15 +195,17 @@ mod test {
        assert!(db.is_empty().unwrap());
        assert_eq!(db.count().unwrap(), 0);

-
        assert!(db
-
            .set(&repo, &namespace, &refname1, oid, timestamp)
-
            .unwrap());
+
        assert!(
+
            db.set(&repo, &namespace, &refname1, oid, timestamp)
+
                .unwrap()
+
        );
        assert!(!db.is_empty().unwrap());
        assert_eq!(db.count().unwrap(), 1);

-
        assert!(db
-
            .set(&repo, &namespace, &refname2, oid, timestamp)
-
            .unwrap());
+
        assert!(
+
            db.set(&repo, &namespace, &refname2, oid, timestamp)
+
                .unwrap()
+
        );
        assert_eq!(db.count().unwrap(), 2);
    }

@@ -212,8 +214,8 @@ mod test {
        let mut db = Database::memory().unwrap();
        let oid = arbitrary::oid();

-
        let repo = arbitrary::gen::<RepoId>(1);
-
        let namespace = arbitrary::gen::<NodeId>(1);
+
        let repo = arbitrary::r#gen::<RepoId>(1);
+
        let namespace = arbitrary::r#gen::<NodeId>(1);
        let refname = qualified!("refs/heads/master");
        let timestamp = LocalTime::now();

@@ -232,27 +234,30 @@ mod test {

        assert_ne!(oid1, oid2);

-
        let repo = arbitrary::gen::<RepoId>(1);
-
        let namespace = arbitrary::gen::<NodeId>(1);
+
        let repo = arbitrary::r#gen::<RepoId>(1);
+
        let namespace = arbitrary::r#gen::<NodeId>(1);
        let refname = qualified!("refs/heads/master");
        let mut timestamp = LocalTime::now();

        assert_eq!(db.get(&repo, &namespace, &refname).unwrap(), None);
-
        assert!(db
-
            .set(&repo, &namespace, &refname, oid1, timestamp)
-
            .unwrap());
+
        assert!(
+
            db.set(&repo, &namespace, &refname, oid1, timestamp)
+
                .unwrap()
+
        );
        assert_eq!(
            db.get(&repo, &namespace, &refname).unwrap(),
            Some((oid1, timestamp))
        );
-
        assert!(!db
-
            .set(&repo, &namespace, &refname, oid1, timestamp)
-
            .unwrap());
+
        assert!(
+
            !db.set(&repo, &namespace, &refname, oid1, timestamp)
+
                .unwrap()
+
        );
        timestamp.elapse(LocalDuration::from_millis(1));

-
        assert!(db
-
            .set(&repo, &namespace, &refname, oid2, timestamp)
-
            .unwrap());
+
        assert!(
+
            db.set(&repo, &namespace, &refname, oid2, timestamp)
+
                .unwrap()
+
        );
        assert_eq!(
            db.get(&repo, &namespace, &refname).unwrap(),
            Some((oid2, timestamp))
modified crates/radicle/src/node/routing.rs
@@ -320,11 +320,12 @@ mod test {
        let mut db = database(":memory:");

        for node in &nodes {
-
            assert!(db
-
                .add_inventory(&ids, *node, Timestamp::EPOCH)
-
                .unwrap()
-
                .iter()
-
                .all(|(_, r)| *r == InsertResult::SeedAdded));
+
            assert!(
+
                db.add_inventory(&ids, *node, Timestamp::EPOCH)
+
                    .unwrap()
+
                    .iter()
+
                    .all(|(_, r)| *r == InsertResult::SeedAdded)
+
            );
        }

        let results = db.entries().unwrap().collect::<Vec<_>>();
@@ -357,8 +358,8 @@ mod test {

    #[test]
    fn test_insert_duplicate() {
-
        let id = arbitrary::gen::<RepoId>(1);
-
        let node = arbitrary::gen::<NodeId>(1);
+
        let id = arbitrary::r#gen::<RepoId>(1);
+
        let node = arbitrary::r#gen::<NodeId>(1);
        let mut db = database(":memory:");

        assert_eq!(
@@ -377,8 +378,8 @@ mod test {

    #[test]
    fn test_insert_existing_updated_time() {
-
        let id = arbitrary::gen::<RepoId>(1);
-
        let node = arbitrary::gen::<NodeId>(1);
+
        let id = arbitrary::r#gen::<RepoId>(1);
+
        let node = arbitrary::r#gen::<NodeId>(1);
        let mut db = database(":memory:");

        assert_eq!(
@@ -398,9 +399,9 @@ mod test {

    #[test]
    fn test_update_existing_multi() {
-
        let id1 = arbitrary::gen::<RepoId>(1);
-
        let id2 = arbitrary::gen::<RepoId>(1);
-
        let node = arbitrary::gen::<NodeId>(1);
+
        let id1 = arbitrary::r#gen::<RepoId>(1);
+
        let id2 = arbitrary::r#gen::<RepoId>(1);
+
        let node = arbitrary::r#gen::<NodeId>(1);
        let mut db = database(":memory:");

        assert_eq!(
@@ -427,8 +428,8 @@ mod test {

    #[test]
    fn test_remove_redundant() {
-
        let id = arbitrary::gen::<RepoId>(1);
-
        let node = arbitrary::gen::<NodeId>(1);
+
        let id = arbitrary::r#gen::<RepoId>(1);
+
        let node = arbitrary::r#gen::<NodeId>(1);
        let mut db = database(":memory:");

        assert_eq!(
@@ -441,10 +442,10 @@ mod test {

    #[test]
    fn test_remove_many() {
-
        let id1 = arbitrary::gen::<RepoId>(1);
-
        let id2 = arbitrary::gen::<RepoId>(1);
-
        let id3 = arbitrary::gen::<RepoId>(1);
-
        let node = arbitrary::gen::<NodeId>(1);
+
        let id1 = arbitrary::r#gen::<RepoId>(1);
+
        let id2 = arbitrary::r#gen::<RepoId>(1);
+
        let id3 = arbitrary::r#gen::<RepoId>(1);
+
        let node = arbitrary::r#gen::<NodeId>(1);
        let mut db = database(":memory:");

        db.add_inventory([&id1, &id2, &id3], node, Timestamp::EPOCH)
@@ -459,7 +460,7 @@ mod test {
    fn test_len() {
        let mut db = database(":memory:");
        let ids = arbitrary::vec::<RepoId>(10);
-
        let node = arbitrary::gen(1);
+
        let node = arbitrary::r#gen(1);

        db.add_inventory(&ids, node, LocalTime::now().into())
            .unwrap();
@@ -490,7 +491,7 @@ mod test {
                .unwrap();
        }

-
        let pruned = db.prune(now.into(), None, &arbitrary::gen(1)).unwrap();
+
        let pruned = db.prune(now.into(), None, &arbitrary::r#gen(1)).unwrap();
        assert_eq!(pruned, ids.len() * nodes.len());

        for id in &ids {
@@ -503,7 +504,7 @@ mod test {

    #[test]
    fn test_count() {
-
        let id = arbitrary::gen::<RepoId>(1);
+
        let id = arbitrary::r#gen::<RepoId>(1);
        let nodes = arbitrary::set::<NodeId>(5..10);
        let mut db = database(":memory:");

modified crates/radicle/src/node/seed/store.rs
@@ -6,10 +6,10 @@ use sqlite as sql;
use thiserror::Error;

use crate::git::Oid;
+
use crate::node::NodeId;
use crate::node::address;
use crate::node::address::Store as _;
-
use crate::node::NodeId;
-
use crate::node::{seed::SyncedSeed, Database, SyncedAt};
+
use crate::node::{Database, SyncedAt, seed::SyncedSeed};
use crate::prelude::{RepoId, Timestamp};

#[derive(Error, Debug)]
modified crates/radicle/src/node/sync/announce.rs
@@ -586,7 +586,7 @@ mod test {

    #[test]
    fn all_synced_nodes_are_preferred_seeds() {
-
        let local = arbitrary::gen::<NodeId>(0);
+
        let local = arbitrary::r#gen::<NodeId>(0);
        let seeds = arbitrary::set::<NodeId>(5..=5);

        // All preferred seeds, no regular seeds in unsynced
@@ -642,7 +642,7 @@ mod test {

    #[test]
    fn preferred_seeds_already_synced() {
-
        let local = arbitrary::gen::<NodeId>(0);
+
        let local = arbitrary::r#gen::<NodeId>(0);
        let seeds = arbitrary::set::<NodeId>(6..=6);

        let preferred_seeds = seeds.iter().take(2).copied().collect::<BTreeSet<_>>();
@@ -668,7 +668,7 @@ mod test {

    #[test]
    fn announcer_reached_min_replication_target() {
-
        let local = arbitrary::gen::<NodeId>(0);
+
        let local = arbitrary::r#gen::<NodeId>(0);
        let seeds = arbitrary::set::<NodeId>(10..=10);
        let unsynced = seeds.iter().skip(3).copied().collect::<BTreeSet<_>>();
        let preferred_seeds = seeds.iter().take(2).copied().collect::<BTreeSet<_>>();
@@ -729,7 +729,7 @@ mod test {

    #[test]
    fn announcer_reached_max_replication_target() {
-
        let local = arbitrary::gen::<NodeId>(0);
+
        let local = arbitrary::r#gen::<NodeId>(0);
        let seeds = arbitrary::set::<NodeId>(10..=10);
        let unsynced = seeds.iter().skip(3).copied().collect::<BTreeSet<_>>();
        let preferred_seeds = seeds.iter().take(2).copied().collect::<BTreeSet<_>>();
@@ -776,7 +776,7 @@ mod test {

    #[test]
    fn announcer_preferred_seeds_or_replica_factor() {
-
        let local = arbitrary::gen::<NodeId>(0);
+
        let local = arbitrary::r#gen::<NodeId>(0);
        let seeds = arbitrary::set::<NodeId>(10..=10);
        let unsynced = seeds.iter().skip(2).copied().collect::<BTreeSet<_>>();
        let preferred_seeds = seeds.iter().take(2).copied().collect::<BTreeSet<_>>();
@@ -840,7 +840,7 @@ mod test {

    #[test]
    fn announcer_reached_preferred_seeds() {
-
        let local = arbitrary::gen::<NodeId>(0);
+
        let local = arbitrary::r#gen::<NodeId>(0);
        let seeds = arbitrary::set::<NodeId>(10..=10);
        let unsynced = seeds.iter().skip(2).copied().collect::<BTreeSet<_>>();
        let preferred_seeds = seeds.iter().take(2).copied().collect::<BTreeSet<_>>();
@@ -887,7 +887,7 @@ mod test {

    #[test]
    fn announcer_timed_out() {
-
        let local = arbitrary::gen::<NodeId>(0);
+
        let local = arbitrary::r#gen::<NodeId>(0);
        let seeds = arbitrary::set::<NodeId>(10..=10);
        let unsynced = seeds.iter().skip(2).copied().collect::<BTreeSet<_>>();
        let preferred_seeds = seeds.iter().take(2).copied().collect::<BTreeSet<_>>();
@@ -948,7 +948,7 @@ mod test {

    #[test]
    fn announcer_adapts_target_to_reach() {
-
        let local = arbitrary::gen::<NodeId>(0);
+
        let local = arbitrary::r#gen::<NodeId>(0);
        // Only 3 nodes available
        let unsynced = arbitrary::set::<NodeId>(3..=3)
            .into_iter()
@@ -968,7 +968,7 @@ mod test {

    #[test]
    fn announcer_with_replication_factor_zero_and_preferred_seeds() {
-
        let local = arbitrary::gen::<NodeId>(0);
+
        let local = arbitrary::r#gen::<NodeId>(0);
        let seeds = arbitrary::set::<NodeId>(5..=5);

        let preferred_seeds = seeds.iter().take(2).copied().collect::<BTreeSet<_>>();
@@ -1010,11 +1010,11 @@ mod test {

    #[test]
    fn announcer_synced_with_unknown_node() {
-
        let local = arbitrary::gen::<NodeId>(0);
+
        let local = arbitrary::r#gen::<NodeId>(0);
        let seeds = arbitrary::set::<NodeId>(5..=5);

        let unsynced = seeds.iter().take(3).copied().collect::<BTreeSet<_>>();
-
        let unknown_node = arbitrary::gen::<NodeId>(100); // Node not in any set
+
        let unknown_node = arbitrary::r#gen::<NodeId>(100); // Node not in any set

        let config = AnnouncerConfig::public(
            local,
@@ -1054,7 +1054,7 @@ mod test {

    #[test]
    fn synced_with_same_node_multiple_times() {
-
        let local = arbitrary::gen::<NodeId>(0);
+
        let local = arbitrary::r#gen::<NodeId>(0);
        let unsynced = arbitrary::set::<NodeId>(3..=3)
            .into_iter()
            .collect::<BTreeSet<_>>();
@@ -1122,7 +1122,7 @@ mod test {

    #[test]
    fn timed_out_after_reaching_success() {
-
        let local = arbitrary::gen::<NodeId>(0);
+
        let local = arbitrary::r#gen::<NodeId>(0);
        let unsynced = arbitrary::set::<NodeId>(3..=3)
            .into_iter()
            .collect::<BTreeSet<_>>();
@@ -1170,7 +1170,7 @@ mod test {
    fn construct_only_preferred_seeds_provided() {
        // Test: preferred_seeds non-empty, synced and unsynced empty
        // Expected: preferred seeds should be moved to to_sync, constructor succeeds
-
        let local = arbitrary::gen::<NodeId>(0);
+
        let local = arbitrary::r#gen::<NodeId>(0);
        let preferred_seeds = arbitrary::set::<NodeId>(2..=2)
            .into_iter()
            .collect::<BTreeSet<_>>();
@@ -1193,10 +1193,10 @@ mod test {

    #[test]
    fn construct_node_appears_in_multiple_input_sets() {
-
        let local = arbitrary::gen::<NodeId>(0);
-
        let alice = arbitrary::gen::<NodeId>(1);
-
        let bob = arbitrary::gen::<NodeId>(2);
-
        let eve = arbitrary::gen::<NodeId>(3);
+
        let local = arbitrary::r#gen::<NodeId>(0);
+
        let alice = arbitrary::r#gen::<NodeId>(1);
+
        let bob = arbitrary::r#gen::<NodeId>(2);
+
        let eve = arbitrary::r#gen::<NodeId>(3);

        // alice will appear in synced and unsynced
        let synced = [alice].iter().copied().collect::<BTreeSet<_>>();
@@ -1230,7 +1230,7 @@ mod test {

    #[test]
    fn cannot_construct_announcer() {
-
        let local = arbitrary::gen::<NodeId>(0);
+
        let local = arbitrary::r#gen::<NodeId>(0);
        let seeds = arbitrary::set::<NodeId>(10..=10);
        let synced = seeds.iter().take(3).copied().collect::<BTreeSet<_>>();
        let unsynced = seeds.iter().skip(3).copied().collect::<BTreeSet<_>>();
@@ -1301,7 +1301,7 @@ mod test {

    #[test]
    fn invariant_progress_should_match_state() {
-
        let local = arbitrary::gen::<NodeId>(0);
+
        let local = arbitrary::r#gen::<NodeId>(0);
        let seeds = arbitrary::set::<NodeId>(6..=6);

        // Set up: 2 already synced, 4 unsynced initially
@@ -1375,7 +1375,7 @@ mod test {

    #[test]
    fn local_node_in_preferred_seeds() {
-
        let local = arbitrary::gen::<NodeId>(0);
+
        let local = arbitrary::r#gen::<NodeId>(0);
        let other_seeds = arbitrary::set::<NodeId>(5..=5);

        // Include local node in preferred seeds
@@ -1416,7 +1416,7 @@ mod test {

    #[test]
    fn local_node_in_synced_set() {
-
        let local = arbitrary::gen::<NodeId>(0);
+
        let local = arbitrary::r#gen::<NodeId>(0);
        let other_seeds = arbitrary::set::<NodeId>(5..=5);

        // Include local node in synced set
@@ -1451,7 +1451,7 @@ mod test {

    #[test]
    fn local_node_in_unsynced_set() {
-
        let local = arbitrary::gen::<NodeId>(0);
+
        let local = arbitrary::r#gen::<NodeId>(0);
        let other_seeds = arbitrary::set::<NodeId>(5..=5);

        let synced = other_seeds.iter().take(2).copied().collect::<BTreeSet<_>>();
@@ -1492,7 +1492,7 @@ mod test {

    #[test]
    fn local_node_in_multiple_sets() {
-
        let local = arbitrary::gen::<NodeId>(0);
+
        let local = arbitrary::r#gen::<NodeId>(0);
        let other_seeds = arbitrary::set::<NodeId>(5..=5);

        // Include local node in ALL sets
@@ -1554,7 +1554,7 @@ mod test {

    #[test]
    fn synced_with_local_node_is_ignored() {
-
        let local = arbitrary::gen::<NodeId>(0);
+
        let local = arbitrary::r#gen::<NodeId>(0);
        let unsynced = arbitrary::set::<NodeId>(3..=3).into_iter().collect();

        let config = AnnouncerConfig::public(
@@ -1596,7 +1596,7 @@ mod test {

    #[test]
    fn local_node_only_in_all_sets_results_in_no_seeds_error() {
-
        let local = arbitrary::gen::<NodeId>(0);
+
        let local = arbitrary::r#gen::<NodeId>(0);

        // Create sets that contain ONLY the local node
        let preferred_seeds = [local].iter().copied().collect::<BTreeSet<_>>();
modified crates/radicle/src/node/sync/fetch.rs
@@ -545,7 +545,7 @@ mod test {

    #[test]
    fn all_nodes_are_candidates() {
-
        let local = arbitrary::gen::<NodeId>(0);
+
        let local = arbitrary::r#gen::<NodeId>(0);
        let replicas = ReplicationFactor::default();
        let seeds = arbitrary::set::<NodeId>(3..=6)
            .into_iter()
@@ -574,10 +574,10 @@ mod test {

    #[test]
    fn ignores_duplicates_and_local_node() {
-
        let local = arbitrary::gen::<NodeId>(0);
+
        let local = arbitrary::r#gen::<NodeId>(0);
        let replicas = ReplicationFactor::default();
-
        let bob = arbitrary::gen::<NodeId>(1);
-
        let eve = arbitrary::gen::<NodeId>(2);
+
        let bob = arbitrary::r#gen::<NodeId>(1);
+
        let eve = arbitrary::r#gen::<NodeId>(2);
        let seeds = [bob].into_iter().collect::<BTreeSet<_>>();
        let extra_candidates = vec![bob, local, eve];
        let config = FetcherConfig::public(seeds.clone(), replicas, local)
@@ -597,7 +597,7 @@ mod test {

    #[test]
    fn all_nodes_are_fetchable() {
-
        let local = arbitrary::gen::<NodeId>(0);
+
        let local = arbitrary::r#gen::<NodeId>(0);
        let replicas = ReplicationFactor::default();
        let seeds = arbitrary::set::<NodeId>(3..=6)
            .into_iter()
@@ -614,7 +614,7 @@ mod test {
            .collect::<Vec<_>>();

        while let Some(node) = fetcher.next_node() {
-
            fetcher.ready_to_fetch(node, arbitrary::gen::<Address>(0));
+
            fetcher.ready_to_fetch(node, arbitrary::r#gen::<Address>(0));
        }

        while let Some((node, _)) = fetcher.next_fetch() {
@@ -626,7 +626,7 @@ mod test {

    #[test]
    fn reaches_target_of_preferred_seeds() {
-
        let local = arbitrary::gen::<NodeId>(0);
+
        let local = arbitrary::r#gen::<NodeId>(0);
        let replicas = ReplicationFactor::default();
        let seeds = arbitrary::set::<NodeId>(3..=3)
            .into_iter()
@@ -640,7 +640,7 @@ mod test {
        let expected = seeds.into_iter().collect::<Vec<_>>();

        while let Some(node) = fetcher.next_node() {
-
            fetcher.ready_to_fetch(node, arbitrary::gen::<Address>(0));
+
            fetcher.ready_to_fetch(node, arbitrary::r#gen::<Address>(0));

            if let Some((node, _)) = fetcher.next_fetch() {
                match fetcher.fetch_complete(
@@ -668,7 +668,7 @@ mod test {

    #[test]
    fn reaches_target_of_replicas() {
-
        let local = arbitrary::gen::<NodeId>(0);
+
        let local = arbitrary::r#gen::<NodeId>(0);
        let replicas = ReplicationFactor::must_reach(3);
        let seeds = arbitrary::set::<NodeId>(3..=3)
            .into_iter()
@@ -686,7 +686,7 @@ mod test {
            .collect::<Vec<_>>();

        while let Some(node) = fetcher.next_node() {
-
            fetcher.ready_to_fetch(node, arbitrary::gen::<Address>(0));
+
            fetcher.ready_to_fetch(node, arbitrary::r#gen::<Address>(0));

            if let Some((node, _)) = fetcher.next_fetch() {
                if seeds.contains(&node) {
@@ -718,7 +718,7 @@ mod test {

    #[test]
    fn reaches_target_of_max_replicas() {
-
        let local = arbitrary::gen::<NodeId>(0);
+
        let local = arbitrary::r#gen::<NodeId>(0);
        let replicas = ReplicationFactor::range(1, 3);
        let candidates = arbitrary::set::<NodeId>(3..=3);
        let seeds = candidates.iter().take(3).copied().collect::<BTreeSet<_>>();
@@ -735,7 +735,7 @@ mod test {
            .collect::<Vec<_>>();

        while let Some(node) = fetcher.next_node() {
-
            fetcher.ready_to_fetch(node, arbitrary::gen::<Address>(0));
+
            fetcher.ready_to_fetch(node, arbitrary::r#gen::<Address>(0));

            if let Some((node, _)) = fetcher.next_fetch() {
                if seeds.contains(&node) {
@@ -777,7 +777,7 @@ mod test {

    #[test]
    fn preferred_seeds_target_returned_over_replicas() {
-
        let local = arbitrary::gen::<NodeId>(0);
+
        let local = arbitrary::r#gen::<NodeId>(0);
        let replicas = ReplicationFactor::range(1, 3);
        let candidates = arbitrary::set::<NodeId>(3..=3);
        let seeds = candidates.into_iter().collect::<BTreeSet<_>>();
@@ -787,7 +787,7 @@ mod test {
        let mut result = Vec::with_capacity(seeds.len());

        while let Some(node) = fetcher.next_node() {
-
            fetcher.ready_to_fetch(node, arbitrary::gen::<Address>(0));
+
            fetcher.ready_to_fetch(node, arbitrary::r#gen::<Address>(0));

            if let Some((node, _)) = fetcher.next_fetch() {
                match fetcher.fetch_complete(
@@ -815,7 +815,7 @@ mod test {

    #[test]
    fn could_not_reach_target() {
-
        let local = arbitrary::gen::<NodeId>(0);
+
        let local = arbitrary::r#gen::<NodeId>(0);
        let replicas = ReplicationFactor::must_reach(4);
        let candidates = arbitrary::set::<NodeId>(3..=3);
        let seeds = candidates.into_iter().collect::<BTreeSet<_>>();
@@ -824,7 +824,7 @@ mod test {
        let mut fetcher = Fetcher::new(config).expect("fetcher should be constructed correctly");

        while let Some(node) = fetcher.next_node() {
-
            fetcher.ready_to_fetch(node, arbitrary::gen::<Address>(0));
+
            fetcher.ready_to_fetch(node, arbitrary::r#gen::<Address>(0));

            if let Some((node, _)) = fetcher.next_fetch() {
                fetcher.fetch_failed(node, "could not connect");
modified crates/radicle/src/node/timestamp.rs
@@ -76,11 +76,7 @@ impl TryFrom<u64> for Timestamp {
    type Error = u64;

    fn try_from(u: u64) -> Result<Self, u64> {
-
        if u <= *Self::MAX {
-
            Ok(Self(u))
-
        } else {
-
            Err(u)
-
        }
+
        if u <= *Self::MAX { Ok(Self(u)) } else { Err(u) }
    }
}

modified crates/radicle/src/profile.rs
@@ -22,18 +22,18 @@ use localtime::LocalTime;
use thiserror::Error;

use crate::cob::migrate;
-
use crate::crypto::ssh::agent::Agent;
-
use crate::crypto::ssh::{keystore, Keystore, Passphrase};
use crate::crypto::PublicKey;
+
use crate::crypto::ssh::agent::Agent;
+
use crate::crypto::ssh::{Keystore, Passphrase, keystore};
use crate::node::device::{BoxedDevice, Device};
use crate::node::policy::config::store::Read;
use crate::node::{
-
    notifications, policy, policy::Scope, Alias, AliasStore, Handle as _, Node, UserAgent,
+
    Alias, AliasStore, Handle as _, Node, UserAgent, notifications, policy, policy::Scope,
};
use crate::prelude::{Did, NodeId, RepoId};
-
use crate::storage::git::transport;
-
use crate::storage::git::Storage;
use crate::storage::ReadRepository;
+
use crate::storage::git::Storage;
+
use crate::storage::git::transport;
use crate::{cob, git, node, storage};

/// Environment variables used by radicle.
@@ -431,7 +431,7 @@ impl Profile {

    /// Returns the routing store, with SQLite
    /// configuration from [`Self::config`] applied.
-
    pub fn routing(&self) -> Result<impl node::routing::Store, node::db::Error> {
+
    pub fn routing(&self) -> Result<impl node::routing::Store + use<>, node::db::Error> {
        self.home.routing(self.config.node.database)
    }
}
@@ -496,8 +496,7 @@ pub fn home() -> Result<Home, io::Error> {
        "Environment variables `RAD_HOME` and `HOME` are both unset or not valid Unicode.";

    #[cfg(windows)]
-
    const ERROR_MESSAGE_UNSET: &str =
-
        "Environment variables `RAD_HOME`, `HOME`, and `USERPROFILE` are all unset or not valid Unicode.";
+
    const ERROR_MESSAGE_UNSET: &str = "Environment variables `RAD_HOME`, `HOME`, and `USERPROFILE` are all unset or not valid Unicode.";

    struct DetectedHome {
        path: String,
@@ -721,7 +720,7 @@ impl Home {
    pub fn addresses(
        &self,
        config: node::db::config::Config,
-
    ) -> Result<impl node::address::Store, node::db::Error> {
+
    ) -> Result<impl node::address::Store + use<>, node::db::Error> {
        self.database_mut(config)
    }

@@ -729,7 +728,7 @@ impl Home {
    pub fn routing(
        &self,
        config: node::db::config::Config,
-
    ) -> Result<impl node::routing::Store, node::db::Error> {
+
    ) -> Result<impl node::routing::Store + use<>, node::db::Error> {
        self.database(config)
    }

@@ -737,7 +736,7 @@ impl Home {
    pub fn routing_mut(
        &self,
        config: node::db::config::Config,
-
    ) -> Result<impl node::routing::Store, node::db::Error> {
+
    ) -> Result<impl node::routing::Store + use<>, node::db::Error> {
        self.database_mut(config)
    }

modified crates/radicle/src/profile/config.rs
@@ -7,9 +7,9 @@ use serde_json as json;
use thiserror::Error;

use crate::explorer::Explorer;
+
use crate::node::Alias;
use crate::node::config::DefaultSeedingPolicy;
use crate::node::policy::{Policy, Scope};
-
use crate::node::Alias;
use crate::{cli, node, web};

#[derive(Debug, Error)]
@@ -112,7 +112,9 @@ pub enum InitError {

#[derive(Debug, Error)]
pub enum LoadError {
-
    #[error("failed to open configuration file {path:?}: {err}, perhaps you need to initialise one `rad config init --alias <alias>`")]
+
    #[error(
+
        "failed to open configuration file {path:?}: {err}, perhaps you need to initialise one `rad config init --alias <alias>`"
+
    )]
    File {
        path: PathBuf,
        #[source]
@@ -380,13 +382,11 @@ impl RawConfig {
        let mut current = &mut self.0;
        for key in config_path.iter() {
            current = match current {
-
                json::Value::Object(ref mut map) => {
-
                    map.entry(key).or_insert_with(|| json::json!({}))
-
                }
+
                json::Value::Object(map) => map.entry(key).or_insert_with(|| json::json!({})),
                _ => {
                    return Err(ModifyError::Upsert {
                        key: key.to_owned(),
-
                    })
+
                    });
                }
            }
        }
modified crates/radicle/src/rad.rs
@@ -13,10 +13,10 @@ use crate::identity::doc;
use crate::identity::doc::{DocError, RepoId, Visibility};
use crate::identity::project::{Project, ProjectName};
use crate::node::device::Device;
-
use crate::storage::git::transport;
+
use crate::storage::RepositoryError;
use crate::storage::git::Repository;
+
use crate::storage::git::transport;
use crate::storage::refs::SignedRefs;
-
use crate::storage::RepositoryError;
use crate::storage::{ReadRepository as _, RemoteId, SignRepository as _};
use crate::storage::{WriteRepository, WriteStorage};
use crate::{identity, storage};
@@ -230,7 +230,9 @@ where
pub enum CheckoutError {
    #[error("failed to fetch to working copy: {0}")]
    FetchIo(#[source] std::io::Error),
-
    #[error("internal fetch failed with exit status {status}, stderr and stdout follow:\n{stderr}\n{stdout}")]
+
    #[error(
+
        "internal fetch failed with exit status {status}, stderr and stdout follow:\n{stderr}\n{stdout}"
+
    )]
    FetchGit {
        status: std::process::ExitStatus,
        stderr: String,
@@ -510,8 +512,8 @@ mod tests {
    use pretty_assertions::assert_eq;

    use crate::identity::Did;
-
    use crate::storage::git::transport;
    use crate::storage::git::Storage;
+
    use crate::storage::git::transport;
    use crate::storage::{ReadStorage, RemoteRepository as _};
    use crate::test::fixtures;
    use git::fmt::{component, qualified};
modified crates/radicle/src/serde_ext.rs
@@ -9,7 +9,7 @@ pub mod string {
    use std::fmt::Display;
    use std::str::FromStr;

-
    use serde::{de, Deserialize, Deserializer, Serializer};
+
    use serde::{Deserialize, Deserializer, Serializer, de};

    pub fn serialize<T, S>(value: &T, serializer: S) -> Result<S::Ok, S::Error>
    where
modified crates/radicle/src/storage.rs
@@ -1,7 +1,7 @@
pub mod git;
pub mod refs;

-
use std::collections::{hash_map, HashSet};
+
use std::collections::{HashSet, hash_map};
use std::ops::Deref;
use std::path::{Path, PathBuf};
use std::{fmt, io};
@@ -16,15 +16,15 @@ pub use git::{Validation, Validations};

use crate::cob;
use crate::collections::RandomMap;
+
use crate::git::RefError;
use crate::git::canonical;
-
use crate::git::fmt::{refspec::PatternString, refspec::Refspec, Qualified, RefStr, RefString};
+
use crate::git::fmt::{Qualified, RefStr, RefString, refspec::PatternString, refspec::Refspec};
use crate::git::raw::ErrorExt as _;
-
use crate::git::RefError;
-
use crate::identity::{doc, Did, PayloadError};
+
use crate::identity::{Did, PayloadError, doc};
use crate::identity::{Doc, DocAt, DocError};
use crate::identity::{Identity, RepoId};
-
use crate::node::device::Device;
use crate::node::SyncedAt;
+
use crate::node::device::Device;
use crate::storage::git::NAMESPACES_GLOB;
use crate::storage::refs::{FeatureLevel, Refs, SignedRefs};

modified crates/radicle/src/storage/git.rs
@@ -19,21 +19,21 @@ use crate::identity::{CanonicalRefs, Doc, DocAt, RepoId};
use crate::identity::{Identity, Project};
use crate::node::device::Device;
use crate::storage::refs::{FeatureLevel, Refs, SignedRefs};
-
use crate::storage::{refs, SignedRefsInfo};
use crate::storage::{
    ReadRepository, ReadStorage, Remote, Remotes, RepositoryInfo, SetHead, SignRepository,
    WriteRepository, WriteStorage,
};
+
use crate::storage::{SignedRefsInfo, refs};
use crate::{git, git::Oid, node};

-
use crate::git::fmt::{
-
    refname, refspec, refspec::PatternStr, refspec::PatternString, Qualified, RefString,
-
};
use crate::git::RefError;
use crate::git::UserInfo;
+
use crate::git::fmt::{
+
    Qualified, RefString, refname, refspec, refspec::PatternStr, refspec::PatternString,
+
};
pub use crate::storage::{Error, RepositoryError};

-
use super::refs::{sigrefs, RefsAt};
+
use super::refs::{RefsAt, sigrefs};
use super::{RemoteId, RemoteRepository, ValidateRepository};

pub static NAMESPACES_GLOB: LazyLock<PatternString> =
modified crates/radicle/src/storage/git/cob.rs
@@ -16,18 +16,18 @@ use crate::git::fmt::*;
use crate::git::*;
use crate::identity;
use crate::identity::doc::DocError;
-
use crate::node::device::Device;
use crate::node::NodeId;
+
use crate::node::device::Device;
use crate::storage;
use crate::storage::Error;
use crate::storage::{
-
    git::{Remote, Remotes, Validations},
    ReadRepository,
+
    git::{Remote, Remotes, Validations},
};

use super::{RemoteId, Repository};

-
pub use crate::cob::{store, ObjectId, Store};
+
pub use crate::cob::{ObjectId, Store, store};

#[derive(Error, Debug)]
pub enum ObjectsError {
modified crates/radicle/src/storage/git/transport/local/url.rs
@@ -123,16 +123,22 @@ mod test {
        assert_eq!(url.repo, repo);
        assert_eq!(url.namespace, Some(namespace));

-
        assert!(format!("heartwood://{}", repo.canonical())
-
            .parse::<Url>()
-
            .is_err());
-
        assert!(format!("git://{}", repo.canonical())
-
            .parse::<Url>()
-
            .is_err());
+
        assert!(
+
            format!("heartwood://{}", repo.canonical())
+
                .parse::<Url>()
+
                .is_err()
+
        );
+
        assert!(
+
            format!("git://{}", repo.canonical())
+
                .parse::<Url>()
+
                .is_err()
+
        );
        assert!(format!("rad://{namespace}").parse::<Url>().is_err());
-
        assert!(format!("rad://{}/{namespace}/fnord", repo.canonical())
-
            .parse::<Url>()
-
            .is_err());
+
        assert!(
+
            format!("rad://{}/{namespace}/fnord", repo.canonical())
+
                .parse::<Url>()
+
                .is_err()
+
        );
    }

    #[test]
modified crates/radicle/src/storage/git/transport/remote/mock.rs
@@ -9,8 +9,8 @@ use std::{process, thread};

use super::Url;
use crate::git;
-
use crate::storage::git::transport::ChildStream;
use crate::storage::RemoteId;
+
use crate::storage::git::transport::ChildStream;

/// Nodes registered with the mock transport.
static NODES: LazyLock<Mutex<HashMap<(ThreadId, RemoteId), PathBuf>>> =
modified crates/radicle/src/storage/git/transport/remote/url.rs
@@ -130,9 +130,11 @@ mod test {

        assert!(format!("heartwood://{node}").parse::<Url>().is_err());
        assert!(format!("rad://{node}").parse::<Url>().is_err());
-
        assert!(format!("heartwood://{node}/{namespace}")
-
            .parse::<Url>()
-
            .is_err());
+
        assert!(
+
            format!("heartwood://{node}/{namespace}")
+
                .parse::<Url>()
+
                .is_err()
+
        );
        assert!(
            format!("heartwood://{node}/{}/{namespace}/fnord", repo.canonical())
                .parse::<Url>()
modified crates/radicle/src/storage/refs.rs
@@ -17,11 +17,11 @@ use serde::{Deserialize, Serialize};
use thiserror::Error;

use crate::git;
-
use crate::git::raw::ErrorExt as _;
use crate::git::Oid;
+
use crate::git::raw::ErrorExt as _;
use crate::storage;
-
use crate::storage::refs::sigrefs::read::Tip;
use crate::storage::RemoteId;
+
use crate::storage::refs::sigrefs::read::Tip;

pub use crate::git::refs::storage::*;

@@ -495,13 +495,13 @@ pub mod canonical {
#[allow(clippy::unwrap_used)]
mod tests {
    use qcheck_macros::quickcheck;
-
    use storage::{git::transport, RemoteRepository, SignRepository, WriteStorage};
+
    use storage::{RemoteRepository, SignRepository, WriteStorage, git::transport};

    use super::*;
    use crate::assert_matches;
    use crate::node::device::Device;
    use crate::storage::WriteRepository as _;
-
    use crate::{cob::identity::Identity, cob::Title, rad, test::fixtures, Storage};
+
    use crate::{Storage, cob::Title, cob::identity::Identity, rad, test::fixtures};

    #[quickcheck]
    fn prop_canonical_roundtrip(refs: Refs) {
modified crates/radicle/src/storage/refs/sigrefs/git.rs
@@ -41,8 +41,8 @@ impl Committer {
        #[cfg(not(any(test, feature = "test")))]
        {
            use crate::profile::env::GIT_COMMITTER_DATE;
-
            use std::env::var;
            use std::env::VarError;
+
            use std::env::var;

            let timestamp = match var(GIT_COMMITTER_DATE) {
                Ok(s) => match s.trim().parse::<u64>() {
@@ -147,7 +147,7 @@ mod git2_impls {
            let commit = match self.find_commit(git2::Oid::from(*oid)) {
                Ok(c) => c,
                Err(e) if e.code() == git2::ErrorCode::NotFound => {
-
                    return Err(ReadBlob::commit_not_found_error(*oid))
+
                    return Err(ReadBlob::commit_not_found_error(*oid));
                }
                Err(e) => return Err(ReadBlob::other(e)),
            };
modified crates/radicle/src/storage/refs/sigrefs/property.rs
@@ -3,14 +3,14 @@
mod mock;
use mock::*;

-
use crypto::test::signer::MockSigner;
use crypto::Signer as _;
+
use crypto::test::signer::MockSigner;
use qcheck::TestResult;
use qcheck_macros::quickcheck;

+
use crate::storage::refs::Refs;
use crate::storage::refs::sigrefs::read::{SignedRefsReader, Tip};
use crate::storage::refs::sigrefs::write::{SignedRefsWriter, Update};
-
use crate::storage::refs::Refs;

#[quickcheck]
fn roundtrip(BoundedVec(all_refs): BoundedVec<Refs>) -> TestResult {
modified crates/radicle/src/storage/refs/sigrefs/property/mock.rs
@@ -6,7 +6,7 @@ use tempfile::TempDir;

use crate::identity::doc;
use crate::storage::refs::sigrefs::git::Committer;
-
use crate::storage::refs::{Refs, IDENTITY_ROOT};
+
use crate::storage::refs::{IDENTITY_ROOT, Refs};

/// A `Vec<T>` whose [`Arbitrary`] instance caps the length at
/// [`Self::MAX_LEN`], preventing the property runner from generating inputs
modified crates/radicle/src/storage/refs/sigrefs/read.rs
@@ -9,7 +9,7 @@ use std::collections::{BTreeMap, HashMap};
use std::num::NonZeroUsize;
use std::path::Path;

-
use crypto::{signature, PublicKey};
+
use crypto::{PublicKey, signature};
use nonempty::NonEmpty;
use radicle_core::{NodeId, RepoId};
use radicle_git_metadata::commit::CommitData;
@@ -19,8 +19,8 @@ use crate::git;
use crate::identity::doc;
use crate::storage::refs::sigrefs::git::{object, reference};
use crate::storage::refs::{
-
    FeatureLevel, Refs, SignedRefs, IDENTITY_ROOT, REFS_BLOB_PATH, SIGNATURE_BLOB_PATH,
-
    SIGREFS_BRANCH,
+
    FeatureLevel, IDENTITY_ROOT, REFS_BLOB_PATH, Refs, SIGNATURE_BLOB_PATH, SIGREFS_BRANCH,
+
    SignedRefs,
};

/// A `rad/sigrefs` that has passed the following verification checks:
@@ -422,7 +422,7 @@ impl Commit {
                    sigrefs_commit: self.oid,
                    expected,
                    actual,
-
                })
+
                });
            }
        };

modified crates/radicle/src/storage/refs/sigrefs/read/error.rs
@@ -8,7 +8,7 @@ use thiserror::Error;

use crate::storage::refs::sigrefs::git::{object, reference};
use crate::storage::refs::sigrefs::read::FeatureLevels;
-
use crate::storage::refs::{canonical, FeatureLevel};
+
use crate::storage::refs::{FeatureLevel, canonical};

#[derive(Debug, Error)]
#[non_exhaustive]
@@ -114,7 +114,9 @@ pub enum IdentityRoot {
pub enum Verify {
    #[error("failed to verify signature over signed references")]
    Signature(crypto::signature::Error),
-
    #[error("expected repository identity {expected}, but found {found} under commit '{identity_commit}' during verification of '{sigrefs_commit}")]
+
    #[error(
+
        "expected repository identity {expected}, but found {found} under commit '{identity_commit}' during verification of '{sigrefs_commit}"
+
    )]
    MismatchedIdentity {
        identity_commit: Oid,
        sigrefs_commit: Oid,
modified crates/radicle/src/storage/refs/sigrefs/read/iter.rs
@@ -2,7 +2,7 @@ use radicle_oid::Oid;

use crate::storage::refs::sigrefs::git::object;

-
use super::{error, Commit, CommitReader};
+
use super::{Commit, CommitReader, error};

pub(super) struct Walk<'a, R> {
    repository: &'a R,
modified crates/radicle/src/storage/refs/sigrefs/read/test/commit_reader.rs
@@ -1,8 +1,8 @@
use radicle_oid::Oid;

-
use crate::storage::refs::sigrefs::read::{error, SignedRefsReader, Tip};
-
use crate::storage::refs::sigrefs::VerifiedCommit;
use crate::storage::refs::IDENTITY_ROOT;
+
use crate::storage::refs::sigrefs::VerifiedCommit;
+
use crate::storage::refs::sigrefs::read::{SignedRefsReader, Tip, error};

use super::mock;
use super::mock::{AlwaysVerify, MockRepository};
modified crates/radicle/src/storage/refs/sigrefs/read/test/identity_root_reader.rs
@@ -2,11 +2,11 @@ use radicle_core::RepoId;
use radicle_oid::Oid;

use crate::git;
+
use crate::storage::refs::sigrefs::VerifiedCommit;
use crate::storage::refs::sigrefs::read::{
-
    error, IdentityRoot, IdentityRootReader, SignedRefsReader, Tip,
+
    IdentityRoot, IdentityRootReader, SignedRefsReader, Tip, error,
};
-
use crate::storage::refs::sigrefs::VerifiedCommit;
-
use crate::storage::refs::{Refs, IDENTITY_ROOT};
+
use crate::storage::refs::{IDENTITY_ROOT, Refs};

use super::mock;
use super::mock::{AlwaysVerify, MockRepository};
modified crates/radicle/src/storage/refs/sigrefs/read/test/mock.rs
@@ -6,15 +6,15 @@ use std::path::{Path, PathBuf};

use radicle_core::NodeId;
use radicle_git_metadata::author::{Author, Time};
+
use radicle_git_metadata::commit::CommitData;
use radicle_git_metadata::commit::headers::Headers;
use radicle_git_metadata::commit::trailers::OwnedTrailer;
-
use radicle_git_metadata::commit::CommitData;
use radicle_oid::Oid;

use crate::git;
use crate::identity::doc;
use crate::storage::refs::sigrefs::git::{object, reference};
-
use crate::storage::refs::{Refs, REFS_BLOB_PATH, SIGNATURE_BLOB_PATH, SIGREFS_BRANCH};
+
use crate::storage::refs::{REFS_BLOB_PATH, Refs, SIGNATURE_BLOB_PATH, SIGREFS_BRANCH};

pub(crate) const MOCKED_IDENTITY: u8 = 99u8;

modified crates/radicle/src/storage/refs/sigrefs/read/test/resolve_tip.rs
@@ -1,9 +1,9 @@
use super::mock;
use super::mock::{AlwaysVerify, MockRepository};
-
use crate::storage::refs::sigrefs::read::error;
-
use crate::storage::refs::sigrefs::read::Tip;
-
use crate::storage::refs::sigrefs::SignedRefsReader;
use crate::storage::refs::IDENTITY_ROOT;
+
use crate::storage::refs::sigrefs::SignedRefsReader;
+
use crate::storage::refs::sigrefs::read::Tip;
+
use crate::storage::refs::sigrefs::read::error;

#[test]
fn missing_sigrefs() {
modified crates/radicle/src/storage/refs/sigrefs/read/test/signed_refs_reader.rs
@@ -1,8 +1,8 @@
use radicle_oid::Oid;

-
use crate::storage::refs::sigrefs::read::error::{Read, Verify};
-
use crate::storage::refs::sigrefs::read::{error, FeatureLevels, SignedRefsReader, Tip};
use crate::storage::refs::sigrefs::VerifiedCommit;
+
use crate::storage::refs::sigrefs::read::error::{Read, Verify};
+
use crate::storage::refs::sigrefs::read::{FeatureLevels, SignedRefsReader, Tip, error};
use crate::storage::refs::{FeatureLevel, IDENTITY_ROOT, SIGREFS_PARENT};
use crate::{assert_matches, git};

modified crates/radicle/src/storage/refs/sigrefs/read/test/tree_reader.rs
@@ -1,8 +1,8 @@
use radicle_oid::Oid;

use crate::git;
-
use crate::storage::refs::sigrefs::read::{error, SignedRefsReader, Tip};
use crate::storage::refs::sigrefs::VerifiedCommit;
+
use crate::storage::refs::sigrefs::read::{SignedRefsReader, Tip, error};
use crate::storage::refs::{IDENTITY_ROOT, REFS_BLOB_PATH, SIGNATURE_BLOB_PATH};

use super::mock;
modified crates/radicle/src/storage/refs/sigrefs/write.rs
@@ -5,20 +5,20 @@ mod test;

use std::path::Path;

-
use crypto::signature::{self, Signer};
use crypto::PublicKey;
+
use crypto::signature::{self, Signer};
use radicle_core::{NodeId, RepoId};
use radicle_git_metadata::author::Author;
-
use radicle_git_metadata::commit::{headers::Headers, trailers::OwnedTrailer, CommitData};
+
use radicle_git_metadata::commit::{CommitData, headers::Headers, trailers::OwnedTrailer};
use radicle_oid::Oid;

use crate::git;
-
use crate::storage::refs::sigrefs::git::{object, reference, Committer};
-
use crate::storage::refs::sigrefs::read::CommitReader;
-
use crate::storage::refs::sigrefs::{read, VerifiedCommit};
use crate::storage::refs::SignedRefs;
+
use crate::storage::refs::sigrefs::git::{Committer, object, reference};
+
use crate::storage::refs::sigrefs::read::CommitReader;
+
use crate::storage::refs::sigrefs::{VerifiedCommit, read};
use crate::storage::refs::{
-
    FeatureLevel, Refs, IDENTITY_ROOT, REFS_BLOB_PATH, SIGNATURE_BLOB_PATH, SIGREFS_BRANCH,
+
    FeatureLevel, IDENTITY_ROOT, REFS_BLOB_PATH, Refs, SIGNATURE_BLOB_PATH, SIGREFS_BRANCH,
    SIGREFS_PARENT,
};

@@ -161,7 +161,7 @@ where

        let commit_writer = match head {
            Ok(Some(head)) if !force && head.is_unchanged(&refs) => {
-
                return Ok(Update::unchanged(head.verified))
+
                return Ok(Update::unchanged(head.verified));
            }
            Ok(Some(head)) => CommitWriter::with_parent(
                refs,
modified crates/radicle/src/storage/refs/sigrefs/write/test/commit_writer.rs
@@ -1,7 +1,7 @@
use super::mock;
use super::mock::MockRepository;
-
use crate::storage::refs::sigrefs::write::{error, CommitWriter};
-
use crate::storage::refs::{Refs, IDENTITY_ROOT};
+
use crate::storage::refs::sigrefs::write::{CommitWriter, error};
+
use crate::storage::refs::{IDENTITY_ROOT, Refs};

fn mock_refs() -> Refs {
    Refs::from(
modified crates/radicle/src/storage/refs/sigrefs/write/test/head_reader.rs
@@ -2,8 +2,8 @@ use radicle_git_ref_format::Component;

use super::mock::{self, MockRepository};
use crate::storage::refs::sigrefs::read;
-
use crate::storage::refs::sigrefs::write::{error, Head, HeadReader};
-
use crate::storage::refs::{Refs, IDENTITY_ROOT, SIGREFS_BRANCH};
+
use crate::storage::refs::sigrefs::write::{Head, HeadReader, error};
+
use crate::storage::refs::{IDENTITY_ROOT, Refs, SIGREFS_BRANCH};

/// Drive `HeadReader` directly via the sigrefs reference for `mock::node_id()`.
fn read(repo: &MockRepository) -> Result<Option<Head>, error::Head> {
modified crates/radicle/src/storage/refs/sigrefs/write/test/mock.rs
@@ -4,16 +4,16 @@ use std::str::FromStr as _;

use radicle_core::{NodeId, RepoId};
use radicle_git_metadata::author::{Author, Time};
+
use radicle_git_metadata::commit::CommitData;
use radicle_git_metadata::commit::headers::Headers;
use radicle_git_metadata::commit::trailers::OwnedTrailer;
-
use radicle_git_metadata::commit::CommitData;
use radicle_oid::Oid;

use crate::git;
use crate::identity::doc;
-
use crate::storage::refs::sigrefs::git::{object, reference};
-
use crate::storage::refs::{Refs, REFS_BLOB_PATH, SIGNATURE_BLOB_PATH, SIGREFS_BRANCH};
use crate::storage::HasRepoId;
+
use crate::storage::refs::sigrefs::git::{object, reference};
+
use crate::storage::refs::{REFS_BLOB_PATH, Refs, SIGNATURE_BLOB_PATH, SIGREFS_BRANCH};

const MOCKED_IDENTITY: u8 = 99u8;

modified crates/radicle/src/storage/refs/sigrefs/write/test/signed_refs_writer.rs
@@ -1,8 +1,8 @@
use radicle_oid::Oid;

use crate::storage::refs::sigrefs::git::Committer;
-
use crate::storage::refs::sigrefs::write::{error, SignedRefsWriter, Update};
-
use crate::storage::refs::{FeatureLevel, Refs, IDENTITY_ROOT, SIGREFS_BRANCH};
+
use crate::storage::refs::sigrefs::write::{SignedRefsWriter, Update, error};
+
use crate::storage::refs::{FeatureLevel, IDENTITY_ROOT, Refs, SIGREFS_BRANCH};

use super::mock;
use super::mock::MockRepository;
modified crates/radicle/src/storage/refs/sigrefs/write/test/tree_writer.rs
@@ -1,7 +1,7 @@
use super::mock;
use super::mock::MockRepository;
-
use crate::storage::refs::sigrefs::write::{error, Tree, TreeWriter};
use crate::storage::refs::Refs;
+
use crate::storage::refs::sigrefs::write::{Tree, TreeWriter, error};

fn mock_refs() -> Refs {
    Refs::from([(mock::refs_heads_main(), mock::oid(10))].into_iter())
modified crates/radicle/src/test.rs
@@ -71,14 +71,14 @@ pub fn fetch<W: WriteRepository>(
pub mod setup {
    use std::path::{Path, PathBuf};

-
    use tempfile::{tempdir, TempDir};
+
    use tempfile::{TempDir, tempdir};

    use super::storage::{Namespaces, RefUpdate};
    use crate::crypto::test::signer::MockSigner;
    use crate::node::device::Device;
-
    use crate::storage::git::transport::remote;
    use crate::storage::git::Repository;
-
    use crate::{git, profile::Home, rad::REMOTE_NAME, test::fixtures, Storage};
+
    use crate::storage::git::transport::remote;
+
    use crate::{Storage, git, profile::Home, rad::REMOTE_NAME, test::fixtures};
    use crate::{prelude::*, rad};

    /// A node.
modified crates/radicle/src/test/arbitrary.rs
@@ -5,16 +5,16 @@ use std::str::FromStr;
use std::{iter, net};

use crypto::PublicKey;
-
use cyphernet::addr::tor::OnionAddrV3;
use cyphernet::EcPk;
+
use cyphernet::addr::tor::OnionAddrV3;
use qcheck::Arbitrary;

use crate::identity::doc::Visibility;
use crate::identity::project::ProjectName;
use crate::identity::{
+
    Did,
    doc::{Doc, DocAt, RawDoc, RepoId},
    project::Project,
-
    Did,
};
use crate::node::address::{AddressType, Source};
use crate::node::{Address, Alias, KnownAddress, Timestamp, UserAgent};
@@ -23,7 +23,7 @@ use crate::test::storage::{MockRepository, MockStorage};
use crate::{cob, git};

pub fn oid() -> storage::Oid {
-
    let oid_bytes: [u8; 20] = gen(1);
+
    let oid_bytes: [u8; 20] = r#gen(1);
    storage::Oid::from_sha1(oid_bytes)
}

@@ -65,9 +65,9 @@ pub fn vec<T: Eq + Arbitrary>(size: usize) -> Vec<T> {
}

pub fn nonempty_storage(size: usize) -> MockStorage {
-
    let mut storage = gen::<MockStorage>(size);
+
    let mut storage = r#gen::<MockStorage>(size);
    for _ in 0..size {
-
        let doc = gen::<DocAt>(1);
+
        let doc = r#gen::<DocAt>(1);
        let id = RepoId::from(doc.blob);
        storage.repos.insert(
            id,
@@ -86,32 +86,32 @@ pub fn nonempty_storage(size: usize) -> MockStorage {
pub fn alphanumeric(size: usize) -> String {
    let mut s = String::with_capacity(size);
    for _ in 0..size {
-
        let choice = gen::<u8>(size).clamp(0, 3);
+
        let choice = r#gen::<u8>(size).clamp(0, 3);
        let c = match choice {
            // Generate A-Z
-
            0 => gen::<u8>(size).clamp(0x41, 0x5A),
+
            0 => r#gen::<u8>(size).clamp(0x41, 0x5A),
            // Generate a-z
-
            1 => gen::<u8>(size).clamp(0x61, 0x7A),
+
            1 => r#gen::<u8>(size).clamp(0x61, 0x7A),
            // Generate 0-9
-
            _ => gen::<u8>(size).clamp(0x30, 0x39),
+
            _ => r#gen::<u8>(size).clamp(0x30, 0x39),
        };
        s.push(char::from(c));
    }
    s
}

-
pub fn gen<T: Arbitrary>(size: usize) -> T {
-
    let mut gen = qcheck::Gen::new(size);
+
pub fn r#gen<T: Arbitrary>(size: usize) -> T {
+
    let mut r#gen = qcheck::Gen::new(size);

-
    T::arbitrary(&mut gen)
+
    T::arbitrary(&mut r#gen)
}

pub fn with_gen<T, F>(size: usize, f: F) -> T
where
    F: FnOnce(&mut qcheck::Gen) -> T,
{
-
    let mut gen = qcheck::Gen::new(size);
-
    f(&mut gen)
+
    let mut r#gen = qcheck::Gen::new(size);
+
    f(&mut r#gen)
}

impl Arbitrary for Did {
modified crates/radicle/src/test/assert.rs
@@ -40,56 +40,56 @@
///
#[macro_export]
macro_rules! assert_matches {
-
    ( $e:expr , $($pat:pat_param)|+ ) => {
+
    ( $e:expr_2021 , $($pat:pat_param)|+ ) => {
        match $e {
            $($pat)|+ => (),
            ref e => panic!("assertion failed: `{:?}` does not match `{}`",
                e, stringify!($($pat)|+))
        }
    };
-
    ( $e:expr , $($pat:pat_param)|+ if $cond:expr ) => {
+
    ( $e:expr_2021 , $($pat:pat_param)|+ if $cond:expr_2021 ) => {
        match $e {
            $($pat)|+ if $cond => (),
            ref e => panic!("assertion failed: `{:?}` does not match `{}`",
                e, stringify!($($pat)|+ if $cond))
        }
    };
-
    ( $e:expr , $($pat:pat_param)|+ => $arm:expr ) => {
+
    ( $e:expr_2021 , $($pat:pat_param)|+ => $arm:expr_2021 ) => {
        match $e {
            $($pat)|+ => $arm,
            ref e => panic!("assertion failed: `{:?}` does not match `{}`",
                e, stringify!($($pat)|+))
        }
    };
-
    ( $e:expr , $($pat:pat_param)|+ if $cond:expr => $arm:expr ) => {
+
    ( $e:expr_2021 , $($pat:pat_param)|+ if $cond:expr_2021 => $arm:expr_2021 ) => {
        match $e {
            $($pat)|+ if $cond => $arm,
            ref e => panic!("assertion failed: `{:?}` does not match `{}`",
                e, stringify!($($pat)|+ if $cond))
        }
    };
-
    ( $e:expr , $($pat:pat_param)|+ , $($arg:tt)* ) => {
+
    ( $e:expr_2021 , $($pat:pat_param)|+ , $($arg:tt)* ) => {
        match $e {
            $($pat)|+ => (),
            ref e => panic!("assertion failed: `{:?}` does not match `{}`: {}",
                e, stringify!($($pat)|+), format_args!($($arg)*))
        }
    };
-
    ( $e:expr , $($pat:pat_param)|+ if $cond:expr , $($arg:tt)* ) => {
+
    ( $e:expr_2021 , $($pat:pat_param)|+ if $cond:expr_2021 , $($arg:tt)* ) => {
        match $e {
            $($pat)|+ if $cond => (),
            ref e => panic!("assertion failed: `{:?}` does not match `{}`: {}",
                e, stringify!($($pat)|+ if $cond), format_args!($($arg)*))
        }
    };
-
    ( $e:expr , $($pat:pat_param)|+ => $arm:expr , $($arg:tt)* ) => {
+
    ( $e:expr_2021 , $($pat:pat_param)|+ => $arm:expr_2021 , $($arg:tt)* ) => {
        match $e {
            $($pat)|+ => $arm,
            ref e => panic!("assertion failed: `{:?}` does not match `{}`: {}",
                e, stringify!($($pat)|+), format_args!($($arg)*))
        }
    };
-
    ( $e:expr , $($pat:pat_param)|+ if $cond:expr => $arm:expr , $($arg:tt)* ) => {
+
    ( $e:expr_2021 , $($pat:pat_param)|+ if $cond:expr_2021 => $arm:expr_2021 , $($arg:tt)* ) => {
        match $e {
            $($pat)|+ if $cond => $arm,
            ref e => panic!("assertion failed: `{:?}` does not match `{}`: {}",
@@ -125,7 +125,7 @@ macro_rules! _assert_matches_cfg {

#[cfg(test)]
mod test {
-
    use std::panic::{catch_unwind, UnwindSafe};
+
    use std::panic::{UnwindSafe, catch_unwind};

    #[derive(Debug)]
    enum Foo {
modified crates/radicle/src/test/fixtures.rs
@@ -3,13 +3,13 @@ use std::str::FromStr;

use crate::crypto::PublicKey;
use crate::git;
-
use crate::identity::doc::Visibility;
use crate::identity::RepoId;
-
use crate::node::device::Device;
+
use crate::identity::doc::Visibility;
use crate::node::Alias;
+
use crate::node::device::Device;
use crate::rad;
-
use crate::storage::git::transport;
use crate::storage::git::Storage;
+
use crate::storage::git::transport;
use crate::storage::refs::SignedRefs;

/// The birth of the radicle project, January 1st, 2018.
@@ -244,7 +244,7 @@ pub fn populate(repo: &git::raw::Repository, scale: usize) -> Vec<git::fmt::Qual
}

/// Generate random fixtures.
-
pub mod gen {
+
pub mod r#gen {
    use super::*;

    /// Generate a random string of the given length.
modified crates/radicle/src/test/storage.rs
@@ -10,8 +10,8 @@ pub use crate::git;
use crate::git::fmt;

use crate::identity::doc::{Doc, DocAt, DocError, RawDoc, RepoId};
-
use crate::node::device::Device;
use crate::node::NodeId;
+
use crate::node::device::Device;

pub use crate::storage::*;