rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5 heartwood002c5b65a9fa968913ad8cce5daaee99d28ba1fd
{
"request": "trigger",
"version": 1,
"event_type": "patch",
"repository": {
"id": "rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5",
"name": "heartwood",
"description": "Radicle Heartwood Protocol & Stack",
"private": false,
"default_branch": "master",
"delegates": [
"did:key:z6MksFqXN3Yhqk8pTJdUGLwATkRfQvwZXPqR2qMEhbS9wzpT",
"did:key:z6MktaNvN1KVFMkSRAiN4qK5yvX1zuEEaseeX5sffhzPZRZW",
"did:key:z6MkireRatUThvd3qzfKht1S44wpm4FEWSSa4PRMTSQZ3voM",
"did:key:z6MkgFq6z5fkF2hioLLSNu1zP2qEL1aHXHZzGH1FLFGAnBGz",
"did:key:z6MkkPvBfjP4bQmco5Dm7UGsX2ruDBieEHi8n9DVJWX5sTEz"
]
},
"action": "Created",
"patch": {
"id": "251971da8a4d1da6a4fc949b40b3e28655313929",
"author": {
"id": "did:key:z6MkireRatUThvd3qzfKht1S44wpm4FEWSSa4PRMTSQZ3voM",
"alias": "fintohaps"
},
"title": "radicle/git: Canonical service",
"state": {
"status": "draft",
"conflicts": []
},
"before": "c3cc29b1c46980c4d5c775aa6e362029c2453e38",
"after": "002c5b65a9fa968913ad8cce5daaee99d28ba1fd",
"commits": [
"002c5b65a9fa968913ad8cce5daaee99d28ba1fd",
"30572e7f006dd4810fcfba1c97fded6435c4b50f",
"1a7972b83c8cdf78eabfa8e2606cf6fa7e366204"
],
"target": "07f748475beacd41463ee5ebc0d7a93539ab8f55",
"labels": [],
"assignees": [],
"revisions": [
{
"id": "251971da8a4d1da6a4fc949b40b3e28655313929",
"author": {
"id": "did:key:z6MkireRatUThvd3qzfKht1S44wpm4FEWSSa4PRMTSQZ3voM",
"alias": "fintohaps"
},
"description": "Canonical service implementation that utilises the recent [git abstractions](https://radicle.zulipchat.com/#narrow/channel/383670-Patches/topic/Git.20Repository.20Refactor/with/599419004).\n\nAs described by [issue: 68b88659](https://radicle.network/nodes/seed.radicle.dev/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/issues/68b886599e5b46b81ab78d6da19823e153bfefbe).",
"base": "c3cc29b1c46980c4d5c775aa6e362029c2453e38",
"oid": "30572e7f006dd4810fcfba1c97fded6435c4b50f",
"timestamp": 1780655669
},
{
"id": "84b74b09f422006928ac3819fa9e4cb7bc2a1658",
"author": {
"id": "did:key:z6MkireRatUThvd3qzfKht1S44wpm4FEWSSa4PRMTSQZ3voM",
"alias": "fintohaps"
},
"description": "REVIEW",
"base": "c3cc29b1c46980c4d5c775aa6e362029c2453e38",
"oid": "002c5b65a9fa968913ad8cce5daaee99d28ba1fd",
"timestamp": 1781855750
}
]
}
}
{
"response": "triggered",
"run_id": {
"id": "5bf320e4-1262-4dc1-9a12-c244a2b45d7f"
},
"info_url": "https://cci.rad.levitte.org//5bf320e4-1262-4dc1-9a12-c244a2b45d7f.html"
}
Started at: 2026-06-19 09:55:54.578526+02:00
Commands:
$ rad clone rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5 .
✓ Creating checkout in ./...
✓ Remote cloudhead@z6MksFqXN3Yhqk8pTJdUGLwATkRfQvwZXPqR2qMEhbS9wzpT added
✓ Remote-tracking branch cloudhead@z6MksFqXN3Yhqk8pTJdUGLwATkRfQvwZXPqR2qMEhbS9wzpT/master created for z6MksFqXN3Yhqk8pTJdUGLwATkRfQvwZXPqR2qMEhbS9wzpT
✓ Remote cloudhead@z6MktaNvN1KVFMkSRAiN4qK5yvX1zuEEaseeX5sffhzPZRZW added
✓ Remote-tracking branch cloudhead@z6MktaNvN1KVFMkSRAiN4qK5yvX1zuEEaseeX5sffhzPZRZW/master created for z6MktaNvN1KVFMkSRAiN4qK5yvX1zuEEaseeX5sffhzPZRZW
✓ Remote fintohaps@z6MkireRatUThvd3qzfKht1S44wpm4FEWSSa4PRMTSQZ3voM added
✓ Remote-tracking branch fintohaps@z6MkireRatUThvd3qzfKht1S44wpm4FEWSSa4PRMTSQZ3voM/master created for z6MkireRatUThvd3qzfKht1S44wpm4FEWSSa4PRMTSQZ3voM
✓ Remote erikli@z6MkgFq6z5fkF2hioLLSNu1zP2qEL1aHXHZzGH1FLFGAnBGz added
✓ Remote-tracking branch erikli@z6MkgFq6z5fkF2hioLLSNu1zP2qEL1aHXHZzGH1FLFGAnBGz/master created for z6MkgFq6z5fkF2hioLLSNu1zP2qEL1aHXHZzGH1FLFGAnBGz
✓ Remote lorenz@z6MkkPvBfjP4bQmco5Dm7UGsX2ruDBieEHi8n9DVJWX5sTEz added
✓ Remote-tracking branch lorenz@z6MkkPvBfjP4bQmco5Dm7UGsX2ruDBieEHi8n9DVJWX5sTEz/master created for z6MkkPvBfjP4bQmco5Dm7UGsX2ruDBieEHi8n9DVJWX5sTEz
✓ Repository successfully cloned under /opt/radcis/ci.rad.levitte.org/cci/state/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/
╭────────────────────────────────────╮
│ heartwood │
│ Radicle Heartwood Protocol & Stack │
│ 186 issues · 40 patches │
╰────────────────────────────────────╯
Run `cd ./.` to go to the repository directory.
Exit code: 0
$ rad patch checkout 251971da8a4d1da6a4fc949b40b3e28655313929
✓ Switched to branch patch/251971d at revision 251971d
✓ Branch patch/251971d setup to track rad/patches/251971da8a4d1da6a4fc949b40b3e28655313929
Exit code: 0
$ git config advice.detachedHead false
Exit code: 0
$ git checkout 002c5b65a9fa968913ad8cce5daaee99d28ba1fd
HEAD is now at 002c5b65 REVIEW
Exit code: 0
$ rad patch show 251971da8a4d1da6a4fc949b40b3e28655313929 -p
╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Title radicle/git: Canonical service │
│ Patch 251971da8a4d1da6a4fc949b40b3e28655313929 │
│ Author ade z6MkwGo…yS2aagA │
│ Head 30572e7f006dd4810fcfba1c97fded6435c4b50f │
│ Base c3cc29b1c46980c4d5c775aa6e362029c2453e38 │
│ Branches patch/251971d │
│ Commits ahead 31, behind 18 │
│ Status draft │
│ │
│ Canonical service implementation that utilises the recent [git │
│ abstractions](https://radicle.zulipchat.com/#narrow/channel/383670-Patches/topic/Git.20Repository.20Refactor/with/599419004). │
│ │
│ As described by [issue: │
│ 68b88659](https://radicle.network/nodes/seed.radicle.dev/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/issues/68b886599e5b46b81ab78d6da19823e153bfefbe). │
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ 30572e7 radicle/git/repo: Fix build errors for broken type names │
│ 1a7972b WIP │
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ ● Revision 251971d @ c3cc29b..30572e7 by ade z6MkwGo…yS2aagA 1 week ago │
│ ↑ Revision 84b74b0 @ c3cc29b..002c5b6 by fintohaps z6Mkire…SQZ3voM 6 seconds ago │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
commit 30572e7f006dd4810fcfba1c97fded6435c4b50f
Author: Adrian Duke <adrian.duke@gmail.com>
Date: Fri Jun 5 11:27:27 2026 +0100
radicle/git/repo: Fix build errors for broken type names
diff --git a/crates/radicle/src/git/repository/adapter/git2/object.rs b/crates/radicle/src/git/repository/adapter/git2/object.rs
index aa80f7b5a..f501e7da4 100644
--- a/crates/radicle/src/git/repository/adapter/git2/object.rs
+++ b/crates/radicle/src/git/repository/adapter/git2/object.rs
@@ -66,12 +66,12 @@ impl object::Reader for raw::Repository {
.map_err(error::read::Exists::backend)
}
- fn object_kind(&self, oid: Oid) -> Result<Option<ObjectKind>, read::ObjectKind> {
- let odb = self.odb().map_err(read::ObjectKind::backend)?;
+ fn object_kind(&self, oid: Oid) -> Result<Option<ObjectKind>, error::read::ObjectKind> {
+ let odb = self.odb().map_err(error::read::ObjectKind::backend)?;
match odb.read(oid.into()) {
Ok(obj) => Ok(Some(object_kind(obj.kind()))),
Err(e) if matches!(e.code(), git2::ErrorCode::NotFound) => Ok(None),
- Err(e) => Err(read::ObjectKind::backend(e)),
+ Err(e) => Err(error::read::ObjectKind::backend(e)),
}
}
}
commit 1a7972b83c8cdf78eabfa8e2606cf6fa7e366204
Author: Adrian Duke <adrian.duke@gmail.com>
Date: Thu Jun 4 12:55:04 2026 +0100
WIP
diff --git a/crates/radicle-node/src/worker/fetch.rs b/crates/radicle-node/src/worker/fetch.rs
index d63a4458b..95b817bcf 100644
--- a/crates/radicle-node/src/worker/fetch.rs
+++ b/crates/radicle-node/src/worker/fetch.rs
@@ -351,6 +351,7 @@ fn set_canonical_refs(
}
let rules = crefs.rules().clone();
+ let canonical_svc = git::repository::canonical::Service::new(repo, rules);
let mut updated_refs = UpdatedCanonicalRefs::default();
let refnames = applied
@@ -367,42 +368,20 @@ fn set_canonical_refs(
.collect::<BTreeSet<_>>();
for name in refnames {
- let canonical = match rules.canonical(name.clone(), repo) {
- Some(canonical) => canonical,
- None => continue,
- };
+ if !canonical_svc.is_canonical(&name) {
+ continue;
+ }
- let canonical = match canonical.find_objects() {
- Err(err) => {
- log::warn!(target: "worker", "Failed to find objects for canonical computation of `{name}`: {err}");
- continue;
+ match canonical_svc.reevaluate(&name, LOG_MESSAGE) {
+ Ok(Some(obj)) => {
+ updated_refs.updated(name, obj.id());
}
- Ok(canonical) => canonical,
- };
-
- match canonical.quorum() {
+ Ok(None) => {}
Err(err) => {
log::warn!(
target: "worker",
- "Failed to calculate canonical reference `{name}`: {err}",
+ "Failed to reevaluate canonical reference `{name}`: {err}",
);
- continue;
- }
- Ok(git::canonical::Quorum {
- refname, object, ..
- }) => {
- let oid = object.id();
- if let Err(e) =
- repo.backend
- .reference(refname.clone().as_str(), oid.into(), true, LOG_MESSAGE)
- {
- log::warn!(
- target: "worker",
- "Failed to set canonical reference {refname}->{oid}: {e}"
- );
- } else {
- updated_refs.updated(refname, oid);
- }
}
}
}
diff --git a/crates/radicle-remote-helper/src/push.rs b/crates/radicle-remote-helper/src/push.rs
index 61c1f9017..50dd5e698 100644
--- a/crates/radicle-remote-helper/src/push.rs
+++ b/crates/radicle-remote-helper/src/push.rs
@@ -105,13 +105,13 @@ pub(super) enum Error {
#[error(transparent)]
Quorum(#[from] radicle::git::canonical::error::QuorumError),
#[error(transparent)]
+ CanonicalUpdate(#[from] git::repository::canonical::error::Update),
+ #[error(transparent)]
CanonicalRefs(#[from] radicle::identity::doc::CanonicalRefsError),
#[error(transparent)]
PushAction(#[from] error::PushAction),
#[error(transparent)]
Canonical(#[from] error::CanonicalUnrecoverable),
- #[error("could not determine object type for {oid}")]
- UnknownObjectType { oid: git::Oid },
#[error(transparent)]
FindObjects(#[from] git::canonical::error::FindObjectsError),
@@ -373,16 +373,16 @@ pub(super) fn run(
//
// Note that we *do* allow rolling back to a previous commit on the
// canonical branch.
- if let Some(canonical) = rules.canonical(dst.clone(), stored) {
- let object = working
- .find_object(src.into(), None)
- .map(|obj| git::canonical::Object::new(&obj))?
- .ok_or(Error::UnknownObjectType { oid: *src })?;
-
- let canonical = canonical::Canonical::new(me, object, canonical)?;
- match canonical.quorum() {
- Ok(quorum) => set_canonical_refs.push(quorum),
- Err(e) => canonical::io::handle_error(e)?,
+ let canonical_svc =
+ git::repository::canonical::Service::new(stored.raw(), rules.clone());
+ if canonical_svc.is_canonical(&dst) {
+ match canonical_svc.propose(&dst, *src, me, LOG_MESSAGE) {
+ Ok(Some(obj)) => set_canonical_refs.push((dst.clone(), obj)),
+ Ok(None) => {}
+ Err(git::repository::canonical::error::Update::Quorum(e)) => {
+ canonical::io::handle_error(e)?
+ }
+ Err(e) => return Err(Error::from(e)),
}
}
Ok(explorer)
@@ -411,33 +411,12 @@ pub(super) fn run(
for (refname, object) in &set_canonical_refs {
let oid = object.id();
let kind = object.object_type();
- let print_update = || {
- eprintln!(
- "{} Canonical reference {} updated to target {kind} {}",
- term::PREFIX_SUCCESS,
- term::format::secondary(refname),
- term::format::secondary(oid),
- )
- };
-
- match stored.backend.refname_to_id(refname.as_str()) {
- Ok(new) if oid != new => {
- stored
- .backend
- .reference(refname.as_str(), oid.into(), true, LOG_MESSAGE)?;
- print_update();
- }
- Err(e) if e.code() == git::raw::ErrorCode::NotFound => {
- stored.backend.reference(
- refname.as_str(),
- oid.into(),
- true,
- "set-canonical-reference from git-push (radicle)",
- )?;
- print_update();
- }
- _ => {}
- }
+ eprintln!(
+ "{} Canonical reference {} updated to target {kind} {}",
+ term::PREFIX_SUCCESS,
+ term::format::secondary(refname),
+ term::format::secondary(oid),
+ );
}
if !opts.no_sync {
diff --git a/crates/radicle-remote-helper/src/push/canonical.rs b/crates/radicle-remote-helper/src/push/canonical.rs
index c58f540dd..206f8ad77 100644
--- a/crates/radicle-remote-helper/src/push/canonical.rs
+++ b/crates/radicle-remote-helper/src/push/canonical.rs
@@ -1,56 +1,3 @@
-use radicle::git;
-use radicle::git::canonical;
-use radicle::git::canonical::QuorumWithConvergence;
-use radicle::git::canonical::error::QuorumError;
-use radicle::git::repository;
-use radicle::git::repository::object;
-use radicle::git::repository::reference;
-use radicle::prelude::Did;
-
-/// Validates a vote to update a canonical reference during push.
-pub(crate) struct Canonical<'a, 'b, 'r, R> {
- canonical: canonical::CanonicalWithConvergence<'a, 'b, 'r, R>,
-}
-
-impl<'a, 'b, 'r, R> Canonical<'a, 'b, 'r, R>
-where
- R: repository::Ancestry + reference::Reader + object::Reader,
-{
- pub(super) fn new(
- me: Did,
- object: canonical::Object,
- canonical: canonical::Canonical<'a, 'b, 'r, R, canonical::Initial>,
- ) -> Result<Self, canonical::error::FindObjectsError> {
- let canonical = canonical.find_objects()?;
- Ok(Self {
- canonical: canonical.with_convergence(me, object),
- })
- }
-
- /// Calculates the quorum of the [`git::canonical::Canonical`] provided.
- ///
- /// In some cases, it ensures that the head commit is attempting to converge
- /// with the set of commits of the other [`Did`]s.
- ///
- /// If a quorum is found, then it is also ensured that the new head commit
- /// is a descendant of the current canonical commit; otherwise, the commits
- /// are considered diverging.
- ///
- /// # Errors
- ///
- /// Ensures that the commits of the other [`Did`]s are in the working
- /// copy, and that checks that any two commits are related in the graph.
- ///
- /// Ensures that the new head and the canonical commit do not diverge.
- pub(super) fn quorum(
- self,
- ) -> Result<(git::fmt::Qualified<'a>, canonical::Object), QuorumError> {
- self.canonical
- .quorum()
- .map(|QuorumWithConvergence { quorum, .. }| (quorum.refname, quorum.object))
- }
-}
-
pub(crate) mod io {
use radicle::git::canonical::error::QuorumError;
diff --git a/crates/radicle/src/git/repository.rs b/crates/radicle/src/git/repository.rs
index 993172078..f9749d17d 100644
--- a/crates/radicle/src/git/repository.rs
+++ b/crates/radicle/src/git/repository.rs
@@ -12,6 +12,7 @@
//! [`reference`]: self::reference
pub mod ancestry;
+pub mod canonical;
pub mod object;
pub mod reference;
pub mod revwalk;
diff --git a/crates/radicle/src/git/repository/canonical.rs b/crates/radicle/src/git/repository/canonical.rs
new file mode 100644
index 000000000..28e5e55d5
--- /dev/null
+++ b/crates/radicle/src/git/repository/canonical.rs
@@ -0,0 +1,143 @@
+//! Canonical Git reference access.
+//!
+//! [`Service`] provides operations to evaluate and update canonical references
+//! within a Git repository. It acts as a facade over the underlying repository,
+//! enforcing the rules defined in the identity document, ensuring that updates
+//! only succeed if they meet the required quorum and convergence criteria.
+
+pub mod error;
+#[cfg(test)]
+mod test;
+
+use crate::git::Oid;
+use crate::git::canonical::{Object, Rules};
+use crate::git::fmt::Qualified;
+use crate::git::repository::{Ancestry, object, reference};
+use crate::prelude::Did;
+
+// A service for managing and evaluating canonical references.
+///
+/// This acts as a domain-specific facade over a Git repository. It enforces
+/// the rules defined in an identity document (represented by [`Rules`]),
+/// ensuring that updates to shared references (like `refs/heads/main`) only
+/// succeed if they meet the required delegate quorum and convergence criteria.
+pub struct Service<'a, R> {
+ repo: &'a R,
+ rules: Rules,
+}
+
+impl<'a, R> Service<'a, R> {
+ /// Construct a new canonical namespace using the provided rules.
+ pub fn new(repo: &'a R, rules: Rules) -> Self {
+ Self { repo, rules }
+ }
+
+ /// The rules governing this canonical namespace.
+ pub fn rules(&self) -> &Rules {
+ &self.rules
+ }
+}
+
+impl<'a, R> Service<'a, R>
+where
+ R: reference::Writer + reference::Reader + object::Reader + Ancestry,
+{
+ /// Returns `true` if the reference is governed by canonical rules.
+ pub fn is_canonical(&self, name: &Qualified) -> bool {
+ self.rules.matches(name).next().is_some()
+ }
+
+ /// Propose an update to a canonical reference.
+ ///
+ /// This is typically used during a `git push` operation. It evaluates whether
+ /// the `target` object proposed by the `proposer` converges with the current
+ /// state of other delegates (e.g. ensuring there are no diverging commits).
+ ///
+ /// If the convergence check passes and the delegate quorum is met, the
+ /// canonical reference is updated in the underlying repository.
+ ///
+ /// # Errors
+ ///
+ /// Returns an [`error::Update`] if:
+ /// - The target object cannot be found or is of an invalid kind.
+ /// - The proposed update diverges from other delegates ([`QuorumError::Convergence`](crate::git::canonical::error::QuorumError::Convergence)).
+ /// - The quorum threshold is not met ([`QuorumError::NoCandidates`](crate::git::canonical::error::QuorumError::NoCandidates)).
+ /// - Writing to the underlying repository fails.
+ pub fn propose(
+ &self,
+ name: &Qualified,
+ target: Oid,
+ proposer: Did,
+ reflog: &str,
+ ) -> Result<Option<Object>, error::Update> {
+ let Some(canonical_eval) = self.rules.canonical(name.clone(), self.repo) else {
+ return Ok(None);
+ };
+
+ let kind = self
+ .repo
+ .object_kind(target)?
+ .ok_or(error::Update::ObjectNotFound(target))?;
+ let obj =
+ Object::from_kind(target, kind).ok_or(error::Update::InvalidObjectKind(target))?;
+
+ let quorum = canonical_eval
+ .find_objects()?
+ .with_convergence(proposer, obj)
+ .quorum()?
+ .quorum;
+
+ self.write_if_changed(name, quorum.object, reflog)
+ }
+
+ /// Re-evaluate the quorum of a canonical reference.
+ ///
+ /// This is typically used during a `radicle-fetch` operation. It tallies the
+ /// current references of all delegates to determine the network's consensus.
+ ///
+ /// If a quorum is reached and the resulting target differs from the current
+ /// canonical reference, the reference is updated in the underlying repository.
+ ///
+ /// # Errors
+ ///
+ /// Returns an [`error::Update`] if:
+ /// - The delegates have diverged and no consensus can be reached.
+ /// - The quorum threshold is not met.
+ /// - Writing to the underlying repository fails.
+ pub fn reevaluate(
+ &self,
+ name: &Qualified,
+ reflog: &str,
+ ) -> Result<Option<Object>, error::Update> {
+ let Some(canonical_eval) = self.rules.canonical(name.clone(), self.repo) else {
+ return Ok(None);
+ };
+
+ let quorum = canonical_eval.find_objects()?.quorum()?;
+
+ self.write_if_changed(name, quorum.object, reflog)
+ }
+
+ /// Helper to only write to the repository if the OID actually changed.
+ fn write_if_changed(
+ &self,
+ name: &Qualified,
+ new_target: Object,
+ reflog: &str,
+ ) -> Result<Option<Object>, error::Update> {
+ let current_target = self.repo.ref_target(name)?;
+
+ if current_target != Some(new_target.id()) {
+ self.repo.write_ref(
+ name,
+ reference::Target::Upsert {
+ target: new_target.id(),
+ },
+ reflog,
+ )?;
+ Ok(Some(new_target))
+ } else {
+ Ok(None)
+ }
+ }
+}
diff --git a/crates/radicle/src/git/repository/canonical/error.rs b/crates/radicle/src/git/repository/canonical/error.rs
new file mode 100644
index 000000000..2e776bd28
--- /dev/null
+++ b/crates/radicle/src/git/repository/canonical/error.rs
@@ -0,0 +1,26 @@
+use crate::git::Oid;
+use crate::git::canonical::error::{FindObjectsError, QuorumError};
+use crate::git::repository::{object, reference};
+
+/// Error returned by [`Service::propose`] and [`Service::reevaluate`].
+///
+/// [`Service::propose`]: super::Service::propose
+/// [`Service::reevaluate`]: super::Service::reevaluate
+#[derive(Debug, thiserror::Error)]
+#[non_exhaustive]
+pub enum Update {
+ #[error(transparent)]
+ Quorum(#[from] QuorumError),
+ #[error(transparent)]
+ FindObjects(#[from] FindObjectsError),
+ #[error(transparent)]
+ Write(#[from] reference::error::write::WriteRef),
+ #[error(transparent)]
+ Read(#[from] reference::error::read::RefTarget),
+ #[error(transparent)]
+ ObjectKind(#[from] object::error::read::ObjectKind),
+ #[error("object {0} not found")]
+ ObjectNotFound(Oid),
+ #[error("invalid object kind for {0}")]
+ InvalidObjectKind(Oid),
+}
diff --git a/crates/radicle/src/git/repository/canonical/test.rs b/crates/radicle/src/git/repository/canonical/test.rs
new file mode 100644
index 000000000..9beb8b935
--- /dev/null
+++ b/crates/radicle/src/git/repository/canonical/test.rs
@@ -0,0 +1,115 @@
+use super::*;
+use crate::git::canonical::rules::{Allowed, Rule, Rules};
+use crate::git::fmt::{qualified, qualified_pattern};
+use crate::git::raw::fixture;
+use crate::git::repository::reference::Reader;
+use crate::identity::doc::Delegates;
+use crate::prelude::Did;
+
+fn did(n: u8) -> Did {
+ Did::from(crate::crypto::PublicKey::from([n; 32]))
+}
+
+fn setup_rules(dids: Vec<Did>, threshold: usize) -> Rules {
+ let rule = Rule::new(Allowed::Delegates, threshold);
+ Rules::from_raw([(qualified_pattern!("refs/heads/main"), rule)], &mut || {
+ Delegates::new(nonempty::NonEmpty::from_vec(dids.clone()).unwrap()).unwrap()
+ })
+ .unwrap()
+}
+
+#[test]
+fn test_is_canonical() {
+ let repo = fixture::Repository::new();
+ let rules = setup_rules(vec![did(1)], 1);
+ let ns = Service::new(repo.raw(), rules);
+
+ assert!(ns.is_canonical(&qualified!("refs/heads/main")));
+ assert!(!ns.is_canonical(&qualified!("refs/heads/feature")));
+}
+
+#[test]
+fn test_reevaluate_calculates_quorum() {
+ let mut repo = fixture::Repository::new();
+ let c1 = repo.commit(&[], &[("f", b"x")]);
+ let d1 = did(1);
+ let d2 = did(2);
+
+ repo.namespaced_ref(d1, "refs/heads/main", c1);
+ repo.namespaced_ref(d2, "refs/heads/main", c1);
+
+ let rules = setup_rules(vec![d1, d2], 2);
+
+ let ns = Service::new(repo.raw(), rules);
+
+ let updated = ns
+ .reevaluate(&qualified!("refs/heads/main"), "test")
+ .unwrap();
+ assert_eq!(updated, Some(Object::Commit { id: c1 }));
+
+ let target = repo
+ .raw()
+ .ref_target(&qualified!("refs/heads/main"))
+ .unwrap()
+ .unwrap();
+ assert_eq!(target, c1);
+}
+
+#[test]
+fn test_propose_evaluates_convergence_ignores_diverging() {
+ let mut repo = fixture::Repository::new();
+ let c0 = repo.commit(&[], &[("f", b"0")]);
+ let c1 = repo.commit(&[c0], &[("f", b"1")]);
+ let c2 = repo.commit(&[c0], &[("f", b"2")]);
+ let d1 = did(1);
+ let d2 = did(2);
+
+ repo.namespaced_ref(d1, "refs/heads/main", c1);
+
+ let rules = setup_rules(vec![d1, d2], 1);
+
+ let ns = Service::new(repo.raw(), rules);
+
+ // d2 proposes c2, which diverges from c1.
+ // Because it diverges, it won't be added to the quorum calculation.
+ // The quorum remains c1.
+ let updated = ns
+ .propose(&qualified!("refs/heads/main"), c2, d2, "test")
+ .unwrap();
+
+ // It should write c1 (the quorum)
+ assert_eq!(updated, Some(Object::Commit { id: c1 }));
+
+ let target = repo
+ .raw()
+ .ref_target(&qualified!("refs/heads/main"))
+ .unwrap()
+ .unwrap();
+ assert_eq!(target, c1);
+}
+
+#[test]
+fn test_propose_evaluates_convergence_mismatch() {
+ let mut repo = fixture::Repository::new();
+ let c1 = repo.commit(&[], &[("f", b"1")]);
+ let t1 = repo.tag("v1", c1, false);
+ let d1 = did(1);
+ let d2 = did(2);
+
+ repo.namespaced_ref(d1, "refs/heads/main", c1);
+
+ let rules = setup_rules(vec![d1, d2], 1);
+
+ let ns = Service::new(repo.raw(), rules);
+
+ let err = ns
+ .propose(&qualified!("refs/heads/main"), t1, d2, "test")
+ .unwrap_err();
+
+ assert!(matches!(
+ err,
+ error::Update::Quorum(crate::git::canonical::error::QuorumError::Convergence(
+ crate::git::canonical::error::ConvergesError::MismatchedObject(_)
+ ))
+ ));
+}
Exit code: 0
shell: 'export RUSTDOCFLAGS=''-D warnings'' cargo --version rustc --version cargo fmt --check cargo clippy --all-targets --workspace -- --deny warnings cargo build --all-targets --workspace cargo doc --workspace --no-deps --all-features cargo test --workspace --no-fail-fast '
Commands:
$ podman run --name 5bf320e4-1262-4dc1-9a12-c244a2b45d7f -v /opt/radcis/ci.rad.levitte.org/cci/state/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/s:/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/s:ro -v /opt/radcis/ci.rad.levitte.org/cci/state/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w:/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w -w /5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w -v /opt/radcis/ci.rad.levitte.org/.radicle:/${id}/.radicle:ro -e RAD_HOME=/${id}/.radicle rust:trixie bash /5bf320e4-1262-4dc1-9a12-c244a2b45d7f/s/script.sh
+ export 'RUSTDOCFLAGS=-D warnings'
+ RUSTDOCFLAGS='-D warnings'
+ cargo --version
info: syncing channel updates for '1.95-x86_64-unknown-linux-gnu'
info: latest update on 2026-04-16, rust version 1.95.0 (59807616e 2026-04-14)
info: downloading component 'cargo'
info: downloading component 'clippy'
info: downloading component 'rust-docs'
info: downloading component 'rust-src'
info: downloading component 'rust-std'
info: downloading component 'rustc'
info: downloading component 'rustfmt'
info: installing component 'cargo'
info: installing component 'clippy'
info: installing component 'rust-docs'
info: installing component 'rust-src'
info: installing component 'rust-std'
info: installing component 'rustc'
info: installing component 'rustfmt'
cargo 1.95.0 (f2d3ce0bd 2026-03-21)
+ rustc --version
rustc 1.95.0 (59807616e 2026-04-14)
+ cargo fmt --check
+ cargo clippy --all-targets --workspace -- --deny warnings
Updating crates.io index
Downloading crates ...
Downloaded aead v0.5.2
Downloaded anstyle-parse v0.2.7
Downloaded data-encoding-macro v0.1.19
Downloaded fastrand v2.3.0
Downloaded gix-packetline v0.21.3
Downloaded litemap v0.8.1
Downloaded gix-negotiate v0.31.0
Downloaded gix-hashtable v0.15.0
Downloaded gix-path v0.12.0
Downloaded gix-odb v0.80.0
Downloaded gix-prompt v0.15.0
Downloaded gix-quote v0.7.1
Downloaded gix-hash v0.25.0
Downloaded lazy_static v1.5.0
Downloaded hash32 v0.3.1
Downloaded gix-trace v0.1.19
Downloaded faster-hex v0.10.0
Downloaded jobserver v0.1.34
Downloaded keccak v0.1.6
Downloaded icu_locale_core v2.1.1
Downloaded heck v0.5.0
Downloaded icu_properties v2.1.2
Downloaded group v0.13.0
Downloaded icu_normalizer_data v2.1.1
Downloaded multibase v0.9.2
Downloaded normalize-line-endings v0.3.0
Downloaded num v0.4.3
Downloaded idna_adapter v1.2.1
Downloaded equivalent v1.0.2
Downloaded phf_shared v0.11.3
Downloaded percent-encoding v2.3.2
Downloaded outref v0.5.2
Downloaded opaque-debug v0.3.1
Downloaded convert_case v0.10.0
Downloaded num-cmp v0.1.0
Downloaded ed25519 v1.5.3
Downloaded inout v0.1.4
Downloaded potential_utf v0.1.4
Downloaded pbkdf2 v0.12.2
Downloaded num-integer v0.1.46
Downloaded phf v0.11.3
Downloaded maybe-async v0.2.10
Downloaded rand_chacha v0.3.1
Downloaded lexopt v0.3.2
Downloaded same-file v1.0.6
Downloaded scrypt v0.11.0
Downloaded radicle-std-ext v0.2.0
Downloaded primeorder v0.13.6
Downloaded num-complex v0.4.6
Downloaded ref-cast-impl v1.0.25
Downloaded rustc_version v0.4.1
Downloaded secrecy v0.10.3
Downloaded rand_core v0.6.4
Downloaded rand_core v0.9.5
Downloaded signal-hook-mio v0.2.5
Downloaded rustversion v1.0.22
Downloaded siphasher v1.0.2
Downloaded quote v1.0.45
Downloaded signature v1.6.4
Downloaded serde_fmt v1.1.0
Downloaded sec1 v0.7.3
Downloaded signature v2.2.0
Downloaded socks5-client v0.4.3
Downloaded ssh-cipher v0.2.0
Downloaded stable_deref_trait v1.2.1
Downloaded snapbox-macros v0.3.10
Downloaded subtle v2.6.1
Downloaded strsim v0.11.1
Downloaded simd-adler32 v0.3.8
Downloaded sval_json v2.17.0
Downloaded sval_fmt v2.17.0
Downloaded sqlite v0.37.0
Downloaded test-log-macros v0.2.19
Downloaded sem_safe v0.2.1
Downloaded prodash v31.0.0
Downloaded tree-sitter-language v0.1.7
Downloaded thiserror-impl v2.0.18
Downloaded timeago v0.4.2
Downloaded unit-prefix v0.5.2
Downloaded smallvec v1.15.1
Downloaded unicode-display-width v0.3.0
Downloaded thiserror v2.0.18
Downloaded wait-timeout v0.2.1
Downloaded yoke-derive v0.8.1
Downloaded xattr v1.6.1
Downloaded zerofrom v0.1.6
Downloaded tree-sitter-toml-ng v0.6.0
Downloaded tinystr v0.8.2
Downloaded zerofrom-derive v0.1.6
Downloaded tree-sitter-html v0.23.2
Downloaded universal-hash v0.5.1
Downloaded thiserror v1.0.69
Downloaded yoke v0.8.1
Downloaded vsimd v0.8.0
Downloaded zmij v1.0.21
Downloaded socket2 v0.5.10
Downloaded value-bag v1.12.0
Downloaded rsa v0.9.10
Downloaded walkdir v2.5.0
Downloaded jsonschema v0.30.0
Downloaded unicode-ident v1.0.24
Downloaded typenum v1.19.0
Downloaded zerotrie v0.2.3
Downloaded yansi v1.0.1
Downloaded url v2.5.8
Downloaded uuid v1.22.0
Downloaded aho-corasick v1.1.4
Downloaded itertools v0.14.0
Downloaded unicode-segmentation v1.12.0
Downloaded radicle-surf v0.27.1
Downloaded regex v1.12.3
Downloaded unicode-normalization v0.1.25
Downloaded tree-sitter-python v0.23.6
Downloaded zerovec v0.11.5
Downloaded portable-atomic v1.13.1
Downloaded tracing-subscriber v0.3.23
Downloaded tree-sitter v0.24.7
Downloaded syn v1.0.109
Downloaded zlib-rs v0.6.3
Downloaded vcpkg v0.2.15
Downloaded unicode-width v0.2.2
Downloaded tree-sitter-c v0.23.4
Downloaded zerocopy v0.8.42
Downloaded syn v2.0.117
Downloaded tree-sitter-md v0.3.2
Downloaded tree-sitter-rust v0.23.3
Downloaded regex-syntax v0.8.10
Downloaded tracing v0.1.44
Downloaded rustix v1.1.4
Downloaded libz-sys v1.1.25
Downloaded tree-sitter-ruby v0.23.1
Downloaded bstr v1.12.1
Downloaded tree-sitter-bash v0.23.3
Downloaded bloomy v1.2.0
Downloaded object v0.37.3
Downloaded proptest v1.10.0
Downloaded sysinfo v0.37.2
Downloaded curve25519-dalek v4.1.3
Downloaded serde_json v1.0.149
Downloaded regex-automata v0.4.14
Downloaded chrono v0.4.44
Downloaded p384 v0.13.1
Downloaded icu_properties_data v2.1.2
Downloaded clap_builder v4.6.0
Downloaded jiff v0.2.23
Downloaded tree-sitter-go v0.23.4
Downloaded git2 v0.20.4
Downloaded libc v0.2.183
Downloaded ssh-key v0.6.7
Downloaded tokio v1.50.0
Downloaded sha1-checked v0.10.0
Downloaded tree-sitter-typescript v0.23.2
Downloaded sha3 v0.10.8
Downloaded p521 v0.13.3
Downloaded idna v1.1.0
Downloaded crossterm v0.29.0
Downloaded tracing-core v0.1.36
Downloaded sval v2.17.0
Downloaded tinyvec v1.11.0
Downloaded tar v0.4.45
Downloaded serde v1.0.228
Downloaded num-bigint-dig v0.8.6
Downloaded derive_more-impl v2.1.1
Downloaded toml v0.9.12+spec-1.1.0
Downloaded ssh-agent-lib v0.6.0
Downloaded libm v0.2.16
Downloaded rand v0.9.2
Downloaded cyphernet v0.5.4
Downloaded zerovec-derive v0.11.2
Downloaded zeroize v1.8.2
Downloaded tree-sitter-css v0.23.2
Downloaded tree-sitter-json v0.24.8
Downloaded writeable v0.6.2
Downloaded schemars v1.2.1
Downloaded rand v0.8.5
Downloaded pretty_assertions v1.4.1
Downloaded mio v1.1.1
Downloaded spin v0.9.8
Downloaded serde_derive v1.0.228
Downloaded tree-sitter-highlight v0.24.7
Downloaded tracing-log v0.2.0
Downloaded tempfile v3.27.0
Downloaded jiff-static v0.2.23
Downloaded inquire v0.9.4
Downloaded num-bigint v0.4.6
Downloaded memchr v2.8.0
Downloaded toml_writer v1.0.7+spec-1.1.0
Downloaded similar v2.7.0
Downloaded signal-hook v0.3.18
Downloaded sharded-slab v0.1.7
Downloaded cc v1.2.57
Downloaded version_check v0.9.5
Downloaded value-bag-sval2 v1.12.0
Downloaded value-bag-serde1 v1.12.0
Downloaded uuid-simd v0.8.0
Downloaded utf8parse v0.2.2
Downloaded utf8_iter v1.0.4
Downloaded toml_datetime v0.7.5+spec-1.1.0
Downloaded thread_local v1.1.9
Downloaded thiserror-impl v1.0.69
Downloaded systemd-journal-logger v2.2.2
Downloaded serde_core v1.0.228
Downloaded base64 v0.21.7
Downloaded snapbox v0.4.17
Downloaded signals_receipts v0.2.5
Downloaded libgit2-sys v0.18.3+1.9.2
Downloaded gix-diff v0.63.0
Downloaded unarray v0.1.4
Downloaded typeid v1.0.3
Downloaded sval_ref v2.17.0
Downloaded proc-macro2 v1.0.106
Downloaded backtrace v0.3.76
Downloaded synstructure v0.13.2
Downloaded sval_nested v2.17.0
Downloaded sval_buffer v2.17.0
Downloaded structured-logger v1.0.5
Downloaded pkcs1 v0.7.5
Downloaded derive_more v2.1.1
Downloaded crypto-bigint v0.5.5
Downloaded tinyvec_macros v0.1.1
Downloaded streaming-iterator v0.1.9
Downloaded ssh-encoding v0.2.0
Downloaded sqlite3-sys v0.18.0
Downloaded ryu v1.0.23
Downloaded indexmap v2.13.0
Downloaded heapless v0.8.0
Downloaded ed25519-dalek v2.2.0
Downloaded referencing v0.30.0
Downloaded p256 v0.13.2
Downloaded crossbeam-channel v0.5.15
Downloaded test-log v0.2.19
Downloaded sval_serde v2.17.0
Downloaded signal-hook-registry v1.4.8
Downloaded sha2 v0.10.9
Downloaded arc-swap v1.9.1
Downloaded spki v0.7.3
Downloaded miniz_oxide v0.8.9
Downloaded bytes v1.11.1
Downloaded bitflags v2.11.0
Downloaded sval_dynamic v2.17.0
Downloaded schemars_derive v1.2.1
Downloaded rusty-fork v0.3.1
Downloaded parking_lot_core v0.9.12
Downloaded shlex v1.3.0
Downloaded num-traits v0.2.19
Downloaded serde-untagged v0.1.9
Downloaded parking_lot v0.12.5
Downloaded sha1 v0.10.6
Downloaded rustc-demangle v0.1.27
Downloaded serde_derive_internals v0.29.1
Downloaded semver v1.0.27
Downloaded poly1305 v0.8.0
Downloaded nu-ansi-term v0.50.3
Downloaded litrs v1.0.0
Downloaded icu_provider v2.1.1
Downloaded getrandom v0.3.4
Downloaded qcheck v1.0.0
Downloaded ppv-lite86 v0.2.21
Downloaded siphasher v0.3.11
Downloaded serde_spanned v1.0.4
Downloaded log v0.4.29
Downloaded clap_derive v4.6.0
Downloaded sqlite3-src v0.7.0
Downloaded rfc6979 v0.4.0
Downloaded rand_chacha v0.9.0
Downloaded linux-raw-sys v0.12.1
Downloaded proc-macro-error2 v2.0.1
Downloaded pkcs8 v0.10.2
Downloaded pin-project-lite v0.2.17
Downloaded der v0.7.10
Downloaded shell-words v1.1.1
Downloaded pem-rfc7468 v0.7.0
Downloaded indicatif v0.18.4
Downloaded getrandom v0.4.2
Downloaded emojis v0.6.4
Downloaded chacha20poly1305 v0.10.1
Downloaded once_cell v1.21.4
Downloaded ref-cast v1.0.25
Downloaded ed25519 v2.2.3
Downloaded console v0.16.3
Downloaded hmac v0.12.1
Downloaded diff v0.1.13
Downloaded filetime v0.2.27
Downloaded quick-error v1.2.3
Downloaded num-rational v0.4.2
Downloaded humantime v2.3.0
Downloaded amplify_derive v4.0.1
Downloaded amplify v4.9.0
Downloaded scopeguard v1.2.0
Downloaded salsa20 v0.10.2
Downloaded nonempty v0.12.0
Downloaded memmap2 v0.9.10
Downloaded icu_collections v2.1.1
Downloaded gix-revision v0.45.0
Downloaded rand_xorshift v0.4.0
Downloaded radicle-git-ext v0.12.0
Downloaded qcheck-macros v1.0.0
Downloaded proc-macro-error-attr2 v2.0.0
Downloaded polyval v0.6.2
Downloaded pkg-config v0.3.32
Downloaded either v1.15.0
Downloaded gix-transport v0.57.0
Downloaded clap v4.6.0
Downloaded ascii v1.1.0
Downloaded anstyle-parse v1.0.0
Downloaded lock_api v0.4.14
Downloaded find-msvc-tools v0.1.9
Downloaded ecdsa v0.16.9
Downloaded const-str v0.4.3
Downloaded base32 v0.4.0
Downloaded autocfg v1.5.0
Downloaded gix-url v0.36.0
Downloaded gix-commitgraph v0.37.0
Downloaded displaydoc v0.2.5
Downloaded digest v0.10.7
Downloaded ctr v0.9.2
Downloaded cbc v0.1.2
Downloaded amplify_num v0.5.3
Downloaded pastey v0.2.1
Downloaded num-iter v0.1.45
Downloaded gix-revwalk v0.31.0
Downloaded fnv v1.0.7
Downloaded erased-serde v0.4.10
Downloaded email_address v0.2.9
Downloaded gix-actor v0.41.0
Downloaded git-ref-format-macro v0.6.0
Downloaded elliptic-curve v0.13.8
Downloaded ec25519 v0.1.0
Downloaded const-oid v0.9.6
Downloaded clap_complete v4.6.0
Downloaded bytesize v2.3.1
Downloaded bit-vec v0.8.0
Downloaded amplify_syn v2.0.1
Downloaded cipher v0.4.4
Downloaded base64ct v1.8.3
Downloaded match-lookup v0.1.2
Downloaded gix-tempfile v23.0.0
Downloaded cyphergraphy v0.3.1
Downloaded anstyle-query v1.1.5
Downloaded nonempty v0.9.0
Downloaded noise-framework v0.4.1
Downloaded itoa v1.0.17
Downloaded is_terminal_polyfill v1.70.2
Downloaded gix-validate v0.11.1
Downloaded cpufeatures v0.2.17
Downloaded gix-date v0.15.3
Downloaded gix-credentials v0.38.0
Downloaded gix-utils v0.3.2
Downloaded gix-shallow v0.12.0
Downloaded matchers v0.2.0
Downloaded git-ref-format-core v0.6.0
Downloaded document-features v0.2.12
Downloaded bit-set v0.8.0
Downloaded gix-config-value v0.18.0
Downloaded git-ref-format v0.6.0
Downloaded iana-time-zone v0.1.65
Downloaded gix-ref v0.63.0
Downloaded dyn-clone v1.0.20
Downloaded ct-codecs v1.1.6
Downloaded dunce v1.0.5
Downloaded data-encoding-macro-internal v0.1.17
Downloaded data-encoding v2.10.0
Downloaded colorchoice v1.0.5
Downloaded block-padding v0.3.3
Downloaded anstream v0.6.21
Downloaded human-panic v2.0.6
Downloaded gix-protocol v0.61.0
Downloaded generic-array v0.14.7
Downloaded form_urlencoded v1.2.2
Downloaded fluent-uri v0.3.2
Downloaded flate2 v1.1.9
Downloaded gix-traverse v0.57.0
Downloaded gix-command v0.9.0
Downloaded fraction v0.15.3
Downloaded env_filter v1.0.0
Downloaded cypheraddr v0.4.1
Downloaded curve25519-dalek-derive v0.1.1
Downloaded crypto-common v0.1.7
Downloaded cfg-if v1.0.4
Downloaded base16ct v0.2.0
Downloaded gix-sec v0.14.0
Downloaded gix-refspec v0.41.0
Downloaded gix-chunk v0.7.1
Downloaded ghash v0.5.1
Downloaded getrandom v0.2.17
Downloaded icu_normalizer v2.1.1
Downloaded gix-pack v0.70.0
Downloaded base64 v0.22.1
Downloaded gimli v0.32.3
Downloaded hashbrown v0.16.1
Downloaded fancy-regex v0.14.0
Downloaded borrow-or-share v0.2.4
Downloaded blowfish v0.9.1
Downloaded bcrypt-pbkdf v0.10.0
Downloaded fast-glob v0.3.3
Downloaded env_logger v0.11.9
Downloaded block-buffer v0.10.4
Downloaded anstream v1.0.0
Downloaded gix-lock v23.0.0
Downloaded gix-fs v0.21.1
Downloaded gix-features v0.48.0
Downloaded gix-error v0.2.3
Downloaded clap_lex v1.1.0
Downloaded gix-object v0.60.0
Downloaded gix-glob v0.26.0
Downloaded ff v0.13.1
Downloaded colored v2.2.0
Downloaded chacha20 v0.9.1
Downloaded anstyle v1.0.14
Downloaded escargot v0.5.15
Downloaded crossbeam-utils v0.8.21
Downloaded crc32fast v1.5.0
Downloaded byteorder v1.5.0
Downloaded bytecount v0.6.9
Downloaded base-x v0.2.11
Downloaded base256emoji v1.0.2
Downloaded errno v0.3.14
Downloaded aes v0.8.4
Downloaded aes-gcm v0.10.3
Downloaded addr2line v0.25.1
Downloaded anyhow v1.0.102
Downloaded ahash v0.8.12
Downloaded adler2 v2.0.1
Compiling libc v0.2.183
Compiling proc-macro2 v1.0.106
Compiling unicode-ident v1.0.24
Compiling quote v1.0.45
Checking cfg-if v1.0.4
Checking zeroize v1.8.2
Compiling version_check v0.9.5
Compiling typenum v1.19.0
Compiling generic-array v0.14.7
Checking getrandom v0.2.17
Compiling syn v2.0.117
Checking rand_core v0.6.4
Checking memchr v2.8.0
Compiling jobserver v0.1.34
Compiling find-msvc-tools v0.1.9
Compiling shlex v1.3.0
Checking crypto-common v0.1.7
Checking subtle v2.6.1
Compiling serde_core v1.0.228
Compiling cc v1.2.57
Checking regex-syntax v0.8.10
Checking aho-corasick v1.1.4
Checking const-oid v0.9.6
Checking smallvec v1.15.1
Checking block-buffer v0.10.4
Checking digest v0.10.7
Checking cpufeatures v0.2.17
Checking stable_deref_trait v1.2.1
Compiling thiserror v2.0.18
Checking fastrand v2.3.0
Compiling parking_lot_core v0.9.12
Checking regex-automata v0.4.14
Checking scopeguard v1.2.0
Checking lock_api v0.4.14
Checking bitflags v2.11.0
Checking parking_lot v0.12.5
Compiling typeid v1.0.3
Checking gix-trace v0.1.19
Compiling erased-serde v0.4.10
Compiling crc32fast v1.5.0
Checking tinyvec_macros v0.1.1
Checking tinyvec v1.11.0
Compiling serde v1.0.228
Checking unicode-normalization v0.1.25
Checking byteorder v1.5.0
Checking itoa v1.0.17
Checking gix-utils v0.3.2
Checking serde_fmt v1.1.0
Checking hashbrown v0.16.1
Checking value-bag-serde1 v1.12.0
Compiling synstructure v0.13.2
Checking bstr v1.12.1
Checking value-bag v1.12.0
Compiling thiserror-impl v2.0.18
Compiling serde_derive v1.0.228
Checking gix-validate v0.11.1
Checking log v0.4.29
Compiling zerofrom-derive v0.1.6
Checking same-file v1.0.6
Checking walkdir v2.5.0
Compiling yoke-derive v0.8.1
Checking gix-path v0.12.0
Checking zerofrom v0.1.6
Checking prodash v31.0.0
Checking zlib-rs v0.6.3
Checking yoke v0.8.1
Compiling rustix v1.1.4
Compiling heapless v0.8.0
Compiling pkg-config v0.3.32
Compiling zerovec-derive v0.11.2
Checking hash32 v0.3.1
Checking linux-raw-sys v0.12.1
Checking gix-features v0.48.0
Compiling libm v0.2.16
Compiling autocfg v1.5.0
Checking zerovec v0.11.5
Compiling num-traits v0.2.19
Compiling displaydoc v0.2.5
Compiling getrandom v0.4.2
Checking faster-hex v0.10.0
Checking block-padding v0.3.3
Compiling zerocopy v0.8.42
Checking inout v0.1.4
Checking sha2 v0.10.9
Checking sha1 v0.10.6
Checking sha1-checked v0.10.0
Checking cipher v0.4.4
Checking tinystr v0.8.2
Checking litemap v0.8.1
Checking once_cell v1.21.4
Checking writeable v0.6.2
Checking percent-encoding v2.3.2
Checking icu_locale_core v2.1.1
Checking gix-hash v0.25.0
Checking zerotrie v0.2.3
Checking potential_utf v0.1.4
Compiling zmij v1.0.21
Compiling icu_normalizer_data v2.1.1
Compiling icu_properties_data v2.1.2
Checking icu_provider v2.1.1
Checking icu_collections v2.1.1
Checking der v0.7.10
Compiling serde_json v1.0.149
Checking equivalent v1.0.2
Checking indexmap v2.13.0
Compiling vcpkg v0.2.15
Compiling syn v1.0.109
Compiling thiserror v1.0.69
Compiling ref-cast v1.0.25
Checking icu_normalizer v2.1.1
Compiling libz-sys v1.1.25
Checking icu_properties v2.1.2
Checking tempfile v3.27.0
Compiling ref-cast-impl v1.0.25
Compiling thiserror-impl v1.0.69
Checking ppv-lite86 v0.2.21
Checking spin v0.9.8
Checking lazy_static v1.5.0
Checking idna_adapter v1.2.1
Checking num-integer v0.1.46
Checking hmac v0.12.1
Checking universal-hash v0.5.1
Compiling tree-sitter-language v0.1.7
Checking utf8_iter v1.0.4
Checking opaque-debug v0.3.1
Checking dyn-clone v1.0.20
Checking idna v1.1.0
Checking spki v0.7.3
Compiling libgit2-sys v0.18.3+1.9.2
Checking signature v2.2.0
Checking ff v0.13.1
Checking base16ct v0.2.0
Checking group v0.13.0
Checking sec1 v0.7.3
Checking rand_chacha v0.3.1
Checking form_urlencoded v1.2.2
Compiling serde_derive_internals v0.29.1
Checking crypto-bigint v0.5.5
Compiling schemars_derive v1.2.1
Checking elliptic-curve v0.13.8
Compiling amplify_syn v2.0.1
Checking url v2.5.8
Checking rand v0.8.5
Checking num-iter v0.1.45
Checking aead v0.5.2
Checking signature v1.6.4
Compiling semver v1.0.27
Checking ed25519 v1.5.3
Compiling amplify_derive v4.0.1
Checking schemars v1.2.1
Compiling rustc_version v0.4.1
Checking poly1305 v0.8.0
Checking rfc6979 v0.4.0
Checking chacha20 v0.9.1
Checking ascii v1.1.0
Checking ct-codecs v1.1.6
Checking amplify_num v0.5.3
Checking ec25519 v0.1.0
Checking ecdsa v0.16.9
Compiling curve25519-dalek v4.1.3
Checking git-ref-format-core v0.6.0
Checking primeorder v0.13.6
Checking polyval v0.6.2
Checking amplify v4.9.0
Checking base64ct v1.8.3
Compiling num-bigint-dig v0.8.6
Checking pem-rfc7468 v0.7.0
Checking ghash v0.5.1
Checking cyphergraphy v0.3.1
Checking pkcs8 v0.10.2
Checking pbkdf2 v0.12.2
Checking aes v0.8.4
Checking ctr v0.9.2
Compiling sqlite3-src v0.7.0
Checking gix-error v0.2.3
Compiling curve25519-dalek-derive v0.1.1
Checking keccak v0.1.6
Checking sha3 v0.10.8
Checking aes-gcm v0.10.3
Checking pkcs1 v0.7.5
Checking ssh-encoding v0.2.0
Checking ed25519 v2.2.3
Checking cbc v0.1.2
Checking blowfish v0.9.1
Compiling crossbeam-utils v0.8.21
Checking base32 v0.4.0
Compiling data-encoding v2.10.0
Checking cypheraddr v0.4.1
Checking rsa v0.9.10
Compiling data-encoding-macro-internal v0.1.17
Checking bcrypt-pbkdf v0.10.0
Checking ssh-cipher v0.2.0
Checking ed25519-dalek v2.2.0
Checking p384 v0.13.1
Checking p521 v0.13.3
Checking p256 v0.13.2
Checking chacha20poly1305 v0.10.1
Checking qcheck v1.0.0
Compiling match-lookup v0.1.2
Checking const-str v0.4.3
Checking base256emoji v1.0.2
Checking data-encoding-macro v0.1.19
Checking noise-framework v0.4.1
Checking ssh-key v0.6.7
Checking socks5-client v0.4.3
Checking secrecy v0.10.3
Checking base-x v0.2.11
Checking multibase v0.9.2
Checking ssh-agent-lib v0.6.0
Checking crossbeam-channel v0.5.15
Checking cyphernet v0.5.4
Checking anstyle-query v1.1.5
Checking errno v0.3.14
Checking jiff v0.2.23
Checking utf8parse v0.2.2
Checking nonempty v0.9.0
Checking siphasher v1.0.2
Checking radicle-localtime v0.1.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-localtime)
Checking radicle-git-metadata v0.2.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-git-metadata)
Checking radicle-dag v0.10.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-dag)
Checking anstyle v1.0.14
Checking is_terminal_polyfill v1.70.2
Checking colorchoice v1.0.5
Checking radicle-git-ref-format v0.1.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-git-ref-format)
Checking gix-hashtable v0.15.0
Compiling unicode-segmentation v1.12.0
Checking base64 v0.21.7
Compiling radicle v0.24.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle)
Compiling signal-hook v0.3.18
Compiling convert_case v0.10.0
Checking signal-hook-registry v1.4.8
Checking gix-date v0.15.3
Checking serde-untagged v0.1.9
Checking gix-actor v0.41.0
Checking bytesize v2.3.1
Checking gix-object v0.60.0
Checking memmap2 v0.9.10
Checking nonempty v0.12.0
Checking dunce v1.0.5
Checking fast-glob v0.3.3
Compiling derive_more-impl v2.1.1
Checking gix-chunk v0.7.1
Checking mio v1.1.1
Checking regex v1.12.3
Checking sem_safe v0.2.1
Checking unicode-width v0.2.2
Compiling portable-atomic v1.13.1
Compiling litrs v1.0.0
Checking signals_receipts v0.2.5
Checking derive_more v2.1.1
Compiling document-features v0.2.12
Checking signal-hook-mio v0.2.5
Checking gix-commitgraph v0.37.0
Checking anstyle-parse v0.2.7
Checking crossterm v0.29.0
Checking anstream v0.6.21
Checking gix-revwalk v0.31.0
Checking console v0.16.3
Checking gix-fs v0.21.1
Checking unit-prefix v0.5.2
Checking indicatif v0.18.4
Checking gix-tempfile v23.0.0
Checking inquire v0.9.4
Checking unicode-display-width v0.3.0
Checking radicle-signals v0.11.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-signals)
Checking gix-quote v0.7.1
Checking shell-words v1.1.1
Checking either v1.15.0
Checking iana-time-zone v0.1.65
Checking gix-command v0.9.0
Checking chrono v0.4.44
Checking colored v2.2.0
Compiling rustversion v1.0.22
Compiling object v0.37.3
Checking gix-lock v23.0.0
Checking gix-url v0.36.0
Checking gix-config-value v0.18.0
Checking gix-sec v0.14.0
Checking adler2 v2.0.1
Checking gimli v0.32.3
Checking miniz_oxide v0.8.9
Checking gix-prompt v0.15.0
Checking addr2line v0.25.1
Checking gix-revision v0.45.0
Checking gix-traverse v0.57.0
Checking gix-diff v0.63.0
Checking gix-packetline v0.21.3
Checking gix-glob v0.26.0
Compiling tree-sitter v0.24.7
Checking rustc-demangle v0.1.27
Compiling anyhow v1.0.102
Checking backtrace v0.3.76
Checking gix-refspec v0.41.0
Checking gix-transport v0.57.0
Checking gix-pack v0.70.0
Checking arc-swap v1.9.1
Checking gix-credentials v0.38.0
Checking gix-shallow v0.12.0
Checking gix-ref v0.63.0
Checking gix-negotiate v0.31.0
Compiling maybe-async v0.2.10
Compiling proc-macro-error-attr2 v2.0.0
Compiling getrandom v0.3.4
Compiling simd-adler32 v0.3.8
Checking gix-protocol v0.61.0
Compiling proc-macro-error2 v2.0.1
Checking gix-odb v0.80.0
Compiling xattr v1.6.1
Compiling filetime v0.2.27
Checking anstyle-parse v1.0.0
Checking uuid v1.22.0
Checking bytes v1.11.1
Checking anstream v1.0.0
Compiling flate2 v1.1.9
Compiling tar v0.4.45
Compiling git-ref-format-macro v0.6.0
Checking snapbox-macros v0.3.10
Checking salsa20 v0.10.2
Checking clap_lex v1.1.0
Checking streaming-iterator v0.1.9
Checking siphasher v0.3.11
Compiling heck v0.5.0
Checking similar v2.7.0
Checking strsim v0.11.1
Checking normalize-line-endings v0.3.0
Checking clap_builder v4.6.0
Checking snapbox v0.4.17
Compiling clap_derive v4.6.0
Checking bloomy v1.2.0
Compiling radicle-surf v0.27.1
Checking scrypt v0.11.0
Checking git-ref-format v0.6.0
Checking systemd-journal-logger v2.2.2
Checking serde_spanned v1.0.4
Checking toml_datetime v0.7.5+spec-1.1.0
Compiling tree-sitter-c v0.23.4
Compiling tree-sitter-html v0.23.2
Compiling tree-sitter-typescript v0.23.2
Compiling tree-sitter-rust v0.23.3
Compiling tree-sitter-toml-ng v0.6.0
Compiling tree-sitter-ruby v0.23.1
Compiling tree-sitter-css v0.23.2
Compiling tree-sitter-python v0.23.6
Compiling tree-sitter-go v0.23.4
Compiling tree-sitter-json v0.24.8
Compiling tree-sitter-md v0.3.2
Compiling tree-sitter-bash v0.23.3
Checking pin-project-lite v0.2.17
Checking radicle-std-ext v0.2.0
Checking toml_writer v1.0.7+spec-1.1.0
Checking toml v0.9.12+spec-1.1.0
Checking tokio v1.50.0
Checking sqlite3-sys v0.18.0
Checking sqlite v0.37.0
Checking radicle-crypto v0.17.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-crypto)
Checking clap v4.6.0
Checking sysinfo v0.37.2
Checking yansi v1.0.1
Checking diff v0.1.13
Compiling radicle-cli v0.21.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-cli)
Compiling radicle-node v0.20.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-node)
Checking pretty_assertions v1.4.1
Checking human-panic v2.0.6
Checking clap_complete v4.6.0
Checking structured-logger v1.0.5
Checking radicle-systemd v0.13.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-systemd)
Checking tree-sitter-highlight v0.24.7
Checking itertools v0.14.0
Compiling qcheck-macros v1.0.0
Checking socket2 v0.5.10
Compiling escargot v0.5.15
Checking humantime v2.3.0
Checking lexopt v0.3.2
Checking timeago v0.4.2
Checking bit-vec v0.8.0
Checking bit-set v0.8.0
Checking rand_core v0.9.5
Checking num-bigint v0.4.6
Compiling ahash v0.8.12
Checking num-complex v0.4.6
Checking env_filter v1.0.0
Checking borrow-or-share v0.2.4
Checking fluent-uri v0.3.2
Checking env_logger v0.11.9
Checking phf_shared v0.11.3
Compiling test-log-macros v0.2.19
Checking wait-timeout v0.2.1
Checking quick-error v1.2.3
Checking num-rational v0.4.2
Checking outref v0.5.2
Checking vsimd v0.8.0
Compiling radicle-remote-helper v0.17.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-remote-helper)
Checking num v0.4.3
Checking fnv v1.0.7
Checking rusty-fork v0.3.1
Checking uuid-simd v0.8.0
Checking fraction v0.15.3
Checking test-log v0.2.19
Checking phf v0.11.3
Checking referencing v0.30.0
Checking rand v0.9.2
Checking rand_xorshift v0.4.0
Checking rand_chacha v0.9.0
Checking fancy-regex v0.14.0
Checking email_address v0.2.9
Checking unarray v0.1.4
Checking num-cmp v0.1.0
Checking base64 v0.22.1
Checking bytecount v0.6.9
Checking proptest v1.10.0
Checking emojis v0.6.4
Checking jsonschema v0.30.0
Compiling pastey v0.2.1
Checking radicle-windows v0.1.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-windows)
Checking git2 v0.20.4
Checking radicle-oid v0.2.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-oid)
Checking radicle-term v0.18.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-term)
Checking radicle-git-ext v0.12.0
Checking radicle-core v0.3.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-core)
Checking radicle-cob v0.20.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-cob)
Checking radicle-log v0.1.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-log)
Checking radicle-fetch v0.20.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-fetch)
Checking radicle-cli-test v0.13.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-cli-test)
Checking radicle-schemars v0.8.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-schemars)
Checking radicle-protocol v0.8.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-protocol)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 40.12s
+ cargo build --all-targets --workspace
Compiling libc v0.2.183
Compiling cfg-if v1.0.4
Compiling zeroize v1.8.2
Compiling typenum v1.19.0
Compiling memchr v2.8.0
Compiling shlex v1.3.0
Compiling subtle v2.6.1
Compiling regex-syntax v0.8.10
Compiling generic-array v0.14.7
Compiling getrandom v0.2.17
Compiling jobserver v0.1.34
Compiling rand_core v0.6.4
Compiling cc v1.2.57
Compiling aho-corasick v1.1.4
Compiling crypto-common v0.1.7
Compiling serde_core v1.0.228
Compiling const-oid v0.9.6
Compiling regex-automata v0.4.14
Compiling smallvec v1.15.1
Compiling block-buffer v0.10.4
Compiling digest v0.10.7
Compiling cpufeatures v0.2.17
Compiling stable_deref_trait v1.2.1
Compiling fastrand v2.3.0
Compiling bitflags v2.11.0
Compiling thiserror v2.0.18
Compiling scopeguard v1.2.0
Compiling lock_api v0.4.14
Compiling parking_lot_core v0.9.12
Compiling tinyvec_macros v0.1.1
Compiling gix-trace v0.1.19
Compiling parking_lot v0.12.5
Compiling tinyvec v1.11.0
Compiling typeid v1.0.3
Compiling erased-serde v0.4.10
Compiling unicode-normalization v0.1.25
Compiling itoa v1.0.17
Compiling byteorder v1.5.0
Compiling gix-utils v0.3.2
Compiling serde v1.0.228
Compiling crc32fast v1.5.0
Compiling serde_fmt v1.1.0
Compiling hashbrown v0.16.1
Compiling value-bag-serde1 v1.12.0
Compiling value-bag v1.12.0
Compiling bstr v1.12.1
Compiling log v0.4.29
Compiling same-file v1.0.6
Compiling walkdir v2.5.0
Compiling gix-validate v0.11.1
Compiling zerofrom v0.1.6
Compiling prodash v31.0.0
Compiling zlib-rs v0.6.3
Compiling gix-path v0.12.0
Compiling yoke v0.8.1
Compiling hash32 v0.3.1
Compiling linux-raw-sys v0.12.1
Compiling heapless v0.8.0
Compiling zerovec v0.11.5
Compiling faster-hex v0.10.0
Compiling libm v0.2.16
Compiling rustix v1.1.4
Compiling block-padding v0.3.3
Compiling inout v0.1.4
Compiling getrandom v0.4.2
Compiling num-traits v0.2.19
Compiling sha2 v0.10.9
Compiling sha1 v0.10.6
Compiling cipher v0.4.4
Compiling sha1-checked v0.10.0
Compiling zerocopy v0.8.42
Compiling tinystr v0.8.2
Compiling litemap v0.8.1
Compiling writeable v0.6.2
Compiling percent-encoding v2.3.2
Compiling gix-features v0.48.0
Compiling once_cell v1.21.4
Compiling gix-hash v0.25.0
Compiling icu_locale_core v2.1.1
Compiling zerotrie v0.2.3
Compiling potential_utf v0.1.4
Compiling der v0.7.10
Compiling icu_collections v2.1.1
Compiling icu_provider v2.1.1
Compiling equivalent v1.0.2
Compiling indexmap v2.13.0
Compiling zmij v1.0.21
Compiling icu_normalizer_data v2.1.1
Compiling icu_properties_data v2.1.2
Compiling libz-sys v1.1.25
Compiling icu_properties v2.1.2
Compiling serde_json v1.0.149
Compiling icu_normalizer v2.1.1
Compiling ppv-lite86 v0.2.21
Compiling tempfile v3.27.0
Compiling spin v0.9.8
Compiling lazy_static v1.5.0
Compiling ref-cast v1.0.25
Compiling idna_adapter v1.2.1
Compiling num-integer v0.1.46
Compiling hmac v0.12.1
Compiling universal-hash v0.5.1
Compiling opaque-debug v0.3.1
Compiling dyn-clone v1.0.20
Compiling utf8_iter v1.0.4
Compiling thiserror v1.0.69
Compiling spki v0.7.3
Compiling idna v1.1.0
Compiling libgit2-sys v0.18.3+1.9.2
Compiling signature v2.2.0
Compiling ff v0.13.1
Compiling base16ct v0.2.0
Compiling group v0.13.0
Compiling sec1 v0.7.3
Compiling rand_chacha v0.3.1
Compiling form_urlencoded v1.2.2
Compiling crypto-bigint v0.5.5
Compiling url v2.5.8
Compiling rand v0.8.5
Compiling num-iter v0.1.45
Compiling aead v0.5.2
Compiling signature v1.6.4
Compiling ed25519 v1.5.3
Compiling schemars v1.2.1
Compiling elliptic-curve v0.13.8
Compiling poly1305 v0.8.0
Compiling rfc6979 v0.4.0
Compiling chacha20 v0.9.1
Compiling ct-codecs v1.1.6
Compiling amplify_num v0.5.3
Compiling ascii v1.1.0
Compiling ec25519 v0.1.0
Compiling ecdsa v0.16.9
Compiling primeorder v0.13.6
Compiling amplify v4.9.0
Compiling git-ref-format-core v0.6.0
Compiling polyval v0.6.2
Compiling base64ct v1.8.3
Compiling cyphergraphy v0.3.1
Compiling pem-rfc7468 v0.7.0
Compiling ghash v0.5.1
Compiling pkcs8 v0.10.2
Compiling pbkdf2 v0.12.2
Compiling ctr v0.9.2
Compiling aes v0.8.4
Compiling sqlite3-src v0.7.0
Compiling gix-error v0.2.3
Compiling keccak v0.1.6
Compiling curve25519-dalek v4.1.3
Compiling sha3 v0.10.8
Compiling aes-gcm v0.10.3
Compiling pkcs1 v0.7.5
Compiling ssh-encoding v0.2.0
Compiling num-bigint-dig v0.8.6
Compiling ed25519 v2.2.3
Compiling blowfish v0.9.1
Compiling cbc v0.1.2
Compiling base32 v0.4.0
Compiling cypheraddr v0.4.1
Compiling rsa v0.9.10
Compiling ssh-cipher v0.2.0
Compiling bcrypt-pbkdf v0.10.0
Compiling ed25519-dalek v2.2.0
Compiling p521 v0.13.3
Compiling p384 v0.13.1
Compiling p256 v0.13.2
Compiling chacha20poly1305 v0.10.1
Compiling qcheck v1.0.0
Compiling const-str v0.4.3
Compiling data-encoding v2.10.0
Compiling data-encoding-macro v0.1.19
Compiling base256emoji v1.0.2
Compiling noise-framework v0.4.1
Compiling ssh-key v0.6.7
Compiling crossbeam-utils v0.8.21
Compiling socks5-client v0.4.3
Compiling secrecy v0.10.3
Compiling base-x v0.2.11
Compiling multibase v0.9.2
Compiling ssh-agent-lib v0.6.0
Compiling cyphernet v0.5.4
Compiling crossbeam-channel v0.5.15
Compiling anstyle-query v1.1.5
Compiling errno v0.3.14
Compiling jiff v0.2.23
Compiling utf8parse v0.2.2
Compiling nonempty v0.9.0
Compiling siphasher v1.0.2
Compiling radicle-localtime v0.1.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-localtime)
Compiling radicle-dag v0.10.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-dag)
Compiling radicle-git-metadata v0.2.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-git-metadata)
Compiling is_terminal_polyfill v1.70.2
Compiling colorchoice v1.0.5
Compiling anstyle v1.0.14
Compiling unicode-segmentation v1.12.0
Compiling radicle-git-ref-format v0.1.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-git-ref-format)
Compiling gix-hashtable v0.15.0
Compiling base64 v0.21.7
Compiling radicle v0.24.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle)
Compiling convert_case v0.10.0
Compiling signal-hook-registry v1.4.8
Compiling gix-date v0.15.3
Compiling gix-actor v0.41.0
Compiling gix-object v0.60.0
Compiling tree-sitter-language v0.1.7
Compiling serde-untagged v0.1.9
Compiling bytesize v2.3.1
Compiling memmap2 v0.9.10
Compiling fast-glob v0.3.3
Compiling dunce v1.0.5
Compiling nonempty v0.12.0
Compiling signal-hook v0.3.18
Compiling derive_more-impl v2.1.1
Compiling gix-chunk v0.7.1
Compiling mio v1.1.1
Compiling regex v1.12.3
Compiling sem_safe v0.2.1
Compiling unicode-width v0.2.2
Compiling signals_receipts v0.2.5
Compiling signal-hook-mio v0.2.5
Compiling derive_more v2.1.1
Compiling gix-commitgraph v0.37.0
Compiling anstyle-parse v0.2.7
Compiling adler2 v2.0.1
Compiling anstream v0.6.21
Compiling gix-revwalk v0.31.0
Compiling crossterm v0.29.0
Compiling console v0.16.3
Compiling portable-atomic v1.13.1
Compiling gix-fs v0.21.1
Compiling unit-prefix v0.5.2
Compiling indicatif v0.18.4
Compiling gix-tempfile v23.0.0
Compiling inquire v0.9.4
Compiling radicle-signals v0.11.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-signals)
Compiling unicode-display-width v0.3.0
Compiling gix-quote v0.7.1
Compiling shell-words v1.1.1
Compiling iana-time-zone v0.1.65
Compiling either v1.15.0
Compiling chrono v0.4.44
Compiling gix-command v0.9.0
Compiling colored v2.2.0
Compiling gix-lock v23.0.0
Compiling gix-url v0.36.0
Compiling gix-config-value v0.18.0
Compiling gix-sec v0.14.0
Compiling gimli v0.32.3
Compiling gix-prompt v0.15.0
Compiling object v0.37.3
Compiling addr2line v0.25.1
Compiling gix-revision v0.45.0
Compiling gix-traverse v0.57.0
Compiling miniz_oxide v0.8.9
Compiling gix-diff v0.63.0
Compiling gix-glob v0.26.0
Compiling gix-packetline v0.21.3
Compiling tree-sitter v0.24.7
Compiling rustc-demangle v0.1.27
Compiling backtrace v0.3.76
Compiling gix-refspec v0.41.0
Compiling gix-transport v0.57.0
Compiling gix-pack v0.70.0
Compiling sqlite3-sys v0.18.0
Compiling sqlite v0.37.0
Compiling radicle-crypto v0.17.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-crypto)
Compiling arc-swap v1.9.1
Compiling gix-credentials v0.38.0
Compiling gix-shallow v0.12.0
Compiling gix-ref v0.63.0
Compiling gix-negotiate v0.31.0
Compiling gix-protocol v0.61.0
Compiling gix-odb v0.80.0
Compiling xattr v1.6.1
Compiling anstyle-parse v1.0.0
Compiling uuid v1.22.0
Compiling filetime v0.2.27
Compiling bytes v1.11.1
Compiling tar v0.4.45
Compiling git-ref-format-macro v0.6.0
Compiling anstream v1.0.0
Compiling flate2 v1.1.9
Compiling getrandom v0.3.4
Compiling anyhow v1.0.102
Compiling snapbox-macros v0.3.10
Compiling salsa20 v0.10.2
Compiling streaming-iterator v0.1.9
Compiling strsim v0.11.1
Compiling normalize-line-endings v0.3.0
Compiling clap_lex v1.1.0
Compiling siphasher v0.3.11
Compiling similar v2.7.0
Compiling bloomy v1.2.0
Compiling clap_builder v4.6.0
Compiling snapbox v0.4.17
Compiling radicle-surf v0.27.1
Compiling scrypt v0.11.0
Compiling git-ref-format v0.6.0
Compiling systemd-journal-logger v2.2.2
Compiling serde_spanned v1.0.4
Compiling toml_datetime v0.7.5+spec-1.1.0
Compiling tree-sitter-bash v0.23.3
Compiling tree-sitter-go v0.23.4
Compiling tree-sitter-ruby v0.23.1
Compiling tree-sitter-html v0.23.2
Compiling tree-sitter-toml-ng v0.6.0
Compiling tree-sitter-json v0.24.8
Compiling tree-sitter-python v0.23.6
Compiling tree-sitter-typescript v0.23.2
Compiling tree-sitter-css v0.23.2
Compiling tree-sitter-rust v0.23.3
Compiling tree-sitter-md v0.3.2
Compiling tree-sitter-c v0.23.4
Compiling pin-project-lite v0.2.17
Compiling toml_writer v1.0.7+spec-1.1.0
Compiling radicle-std-ext v0.2.0
Compiling toml v0.9.12+spec-1.1.0
Compiling tokio v1.50.0
Compiling clap v4.6.0
Compiling sysinfo v0.37.2
Compiling radicle-node v0.20.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-node)
Compiling radicle-cli v0.21.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-cli)
Compiling yansi v1.0.1
Compiling diff v0.1.13
Compiling pretty_assertions v1.4.1
Compiling human-panic v2.0.6
Compiling clap_complete v4.6.0
Compiling structured-logger v1.0.5
Compiling radicle-systemd v0.13.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-systemd)
Compiling tree-sitter-highlight v0.24.7
Compiling itertools v0.14.0
Compiling socket2 v0.5.10
Compiling timeago v0.4.2
Compiling lexopt v0.3.2
Compiling humantime v2.3.0
Compiling bit-vec v0.8.0
Compiling escargot v0.5.15
Compiling bit-set v0.8.0
Compiling rand_core v0.9.5
Compiling num-bigint v0.4.6
Compiling num-complex v0.4.6
Compiling env_filter v1.0.0
Compiling borrow-or-share v0.2.4
Compiling fluent-uri v0.3.2
Compiling env_logger v0.11.9
Compiling num-rational v0.4.2
Compiling ahash v0.8.12
Compiling phf_shared v0.11.3
Compiling wait-timeout v0.2.1
Compiling num v0.4.3
Compiling vsimd v0.8.0
Compiling quick-error v1.2.3
Compiling outref v0.5.2
Compiling radicle-remote-helper v0.17.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-remote-helper)
Compiling fnv v1.0.7
Compiling rusty-fork v0.3.1
Compiling uuid-simd v0.8.0
Compiling test-log v0.2.19
Compiling fraction v0.15.3
Compiling phf v0.11.3
Compiling referencing v0.30.0
Compiling rand v0.9.2
Compiling rand_chacha v0.9.0
Compiling rand_xorshift v0.4.0
Compiling fancy-regex v0.14.0
Compiling email_address v0.2.9
Compiling unarray v0.1.4
Compiling bytecount v0.6.9
Compiling base64 v0.22.1
Compiling num-cmp v0.1.0
Compiling proptest v1.10.0
Compiling jsonschema v0.30.0
Compiling emojis v0.6.4
Compiling git2 v0.20.4
Compiling radicle-oid v0.2.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-oid)
Compiling radicle-core v0.3.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-core)
Compiling radicle-cob v0.20.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-cob)
Compiling radicle-term v0.18.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-term)
Compiling radicle-git-ext v0.12.0
Compiling radicle-log v0.1.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-log)
Compiling radicle-windows v0.1.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-windows)
Compiling radicle-fetch v0.20.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-fetch)
Compiling radicle-protocol v0.8.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-protocol)
Compiling radicle-cli-test v0.13.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-cli-test)
Compiling radicle-schemars v0.8.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-schemars)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 57.62s
+ cargo doc --workspace --no-deps --all-features
Downloading crates ...
Downloaded thousands v0.2.0
Downloaded rustc-hash v1.1.0
Downloaded mintex v0.1.4
Downloaded dhat v0.3.3
Checking regex-automata v0.4.14
Compiling num-traits v0.2.19
Checking once_cell v1.21.4
Compiling syn v1.0.109
Checking tempfile v3.27.0
Checking idna v1.1.0
Checking url v2.5.8
Checking num-integer v0.1.46
Checking git2 v0.20.4
Checking num-iter v0.1.45
Checking num-bigint-dig v0.8.6
Compiling amplify_syn v2.0.1
Checking bstr v1.12.1
Checking gix-validate v0.11.1
Checking git-ref-format-core v0.6.0
Compiling amplify_derive v4.0.1
Checking gix-path v0.12.0
Checking gix-error v0.2.3
Checking gix-features v0.48.0
Checking rsa v0.9.10
Checking gix-hash v0.25.0
Checking radicle-git-ref-format v0.1.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-git-ref-format)
Checking gix-date v0.15.3
Checking ssh-key v0.6.7
Checking radicle-oid v0.2.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-oid)
Checking rusty-fork v0.3.1
Checking gix-actor v0.41.0
Checking gix-hashtable v0.15.0
Checking proptest v1.10.0
Checking gix-object v0.60.0
Checking ssh-agent-lib v0.6.0
Checking radicle-localtime v0.1.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-localtime)
Checking radicle-git-metadata v0.2.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-git-metadata)
Checking radicle-dag v0.10.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-dag)
Checking amplify v4.9.0
Checking gix-chunk v0.7.1
Checking gix-fs v0.21.1
Checking gix-commitgraph v0.37.0
Checking gix-tempfile v23.0.0
Checking cyphergraphy v0.3.1
Checking gix-quote v0.7.1
Checking gix-revwalk v0.31.0
Checking regex v1.12.3
Checking cypheraddr v0.4.1
Checking noise-framework v0.4.1
Checking inquire v0.9.4
Checking radicle-signals v0.11.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-signals)
Checking gix-command v0.9.0
Checking socks5-client v0.4.3
Checking chrono v0.4.44
Checking gix-lock v23.0.0
Checking cyphernet v0.5.4
Checking radicle-crypto v0.17.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-crypto)
Checking gix-url v0.36.0
Checking radicle-term v0.18.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-term)
Checking gix-config-value v0.18.0
Checking radicle-cob v0.20.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-cob)
Checking radicle-core v0.3.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-core)
Checking gix-prompt v0.15.0
Checking gix-revision v0.45.0
Checking gix-traverse v0.57.0
Checking gix-diff v0.63.0
Checking gix-glob v0.26.0
Checking gix-packetline v0.21.3
Checking tree-sitter v0.24.7
Checking radicle v0.24.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle)
Checking gix-transport v0.57.0
Checking gix-refspec v0.41.0
Checking gix-pack v0.70.0
Checking gix-credentials v0.38.0
Checking radicle-log v0.1.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-log)
Checking git-ref-format v0.6.0
Checking gix-ref v0.63.0
Checking gix-shallow v0.12.0
Checking gix-negotiate v0.31.0
Checking radicle-git-ext v0.12.0
Checking uuid v1.22.0
Checking gix-protocol v0.61.0
Compiling radicle-cli v0.21.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-cli)
Checking human-panic v2.0.6
Checking radicle-surf v0.27.1
Checking gix-odb v0.80.0
Checking tree-sitter-toml-ng v0.6.0
Checking tree-sitter-highlight v0.24.7
Checking thousands v0.2.0
Compiling radicle-node v0.20.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-node)
Checking mintex v0.1.4
Checking rustc-hash v1.1.0
Checking radicle-systemd v0.13.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-systemd)
Checking dhat v0.3.3
Documenting radicle-systemd v0.13.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-systemd)
Documenting radicle v0.24.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle)
Documenting radicle-log v0.1.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-log)
Documenting radicle-core v0.3.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-core)
Documenting radicle-cob v0.20.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-cob)
Documenting radicle-term v0.18.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-term)
Documenting radicle-crypto v0.17.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-crypto)
Documenting radicle-signals v0.11.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-signals)
Documenting radicle-oid v0.2.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-oid)
Documenting radicle-git-ref-format v0.1.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-git-ref-format)
Documenting radicle-localtime v0.1.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-localtime)
Documenting radicle-git-metadata v0.2.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-git-metadata)
Documenting radicle-dag v0.10.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-dag)
error: unresolved link to `Service`
--> crates/radicle/src/git/repository/canonical.rs:3:7
|
3 | //! [`Service`] provides operations to evaluate and update canonical references
| ^^^^^^^ no item named `Service` in scope
|
= help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]`
= note: `-D rustdoc::broken-intra-doc-links` implied by `-D warnings`
= help: to override `-D warnings` add `#[allow(rustdoc::broken_intra_doc_links)]`
error: unresolved link to `super::Service::propose`
--> crates/radicle/src/git/repository/canonical/error.rs:7:27
|
7 | /// [`Service::propose`]: super::Service::propose
| ^^^^^^^^^^^^^^^^^^^^^^^ no item named `Service` in module `canonical`
error: unresolved link to `super::Service::reevaluate`
--> crates/radicle/src/git/repository/canonical/error.rs:8:30
|
8 | /// [`Service::reevaluate`]: super::Service::reevaluate
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ no item named `Service` in module `canonical`
Documenting radicle-windows v0.1.0 (/5bf320e4-1262-4dc1-9a12-c244a2b45d7f/w/crates/radicle-windows)
error: could not document `radicle`
warning: build failed, waiting for other jobs to finish...
Exit code: 101
{
"response": "finished",
"result": "failure"
}