These raw log messages are meant to help Ambient developers figure out problems. You can ignore them.
{
"type": "executor_starts",
"name": "ambient-execute-plan",
"version": "0.14.0@c37ec71",
"timestamp": {
"secs_since_epoch": 1782142411,
"nanos_since_epoch": 801997216
},
"log_source": "Plan"
}{
"type": "runnable_plan",
"steps": [
{
"action": "mkdir",
"pathname": "/ci"
},
{
"action": "mkdir",
"pathname": "/ci/artifacts"
},
{
"action": "tar_extract",
"archive": "/dev/vdc",
"directory": "/ci/src"
},
{
"action": "tar_extract",
"archive": "/dev/vdf",
"directory": "/ci/deps"
},
{
"action": "tar_extract",
"archive": "/dev/vde",
"directory": "/ci/cache"
},
{
"action": "shell",
"shell": "ln -sf /ci /workspace"
},
{
"action": "shell",
"shell": "git config --global user.name 'Ambient CI'"
},
{
"action": "shell",
"shell": "git config --global user.email ambient@example.com"
},
{
"action": "shell",
"shell": "sed -i /components/d rust-toolchain.toml\n\n# Commit this to git so that the Debian package building doesn't\n# see changes outside the debian directory.\ngit config set user.name \"Ambient CI\"\ngit config set user.email \"ambient@example.com\"\ngit commit -m \"remove components from toolchain file\" rust-toolchain.toml\n"
},
{
"action": "cargo_fmt"
},
{
"action": "cargo_clippy"
},
{
"action": "cargo_build"
},
{
"action": "cargo_test"
},
{
"action": "shell",
"shell": "# Because of a (temporary) limitation in Ambient, we need to set\n# these variables manually. Once Ambient manages environment\n# variables better, these can be deleted.\nexport CARGO_TARGET_DIR=/workspace/cache\nexport CARGO_HOME=/workspace/deps\nexport HOME=/root\nexport PATH=\"/root/.cargo/bin:$PATH\"\nexport RUSTDOCFLAGS='-D warnings'\n\ncargo doc --workspace --no-deps --all-features\n"
},
{
"action": "shell",
"shell": "# Because of a (temporary) limitation in Ambient, we need to set\n# these variables manually. Once Ambient manages environment\n# variables better, these can be deleted.\nexport CARGO_TARGET_DIR=/workspace/cache\nexport CARGO_HOME=/workspace/deps\nexport HOME=/root\nexport PATH=\"/root/.cargo/bin:$PATH\"\n\n# These are based on debian/control.\nexport DEBEMAIL=liw@liw.fi\nexport DEBFULLNAME=\"Lars Wirzenius\"\n\n# Clean up after tests and documentation building. The Debian\n# package building tools do not want changes outside the\n# `debian` directory, compared to what is committed to Git, from\n# which the \"upstream tarball\" is created.\ngit reset --hard\ngit clean -fdx\ngit status --ignored\n\n# Update debian/changelog with a new version so that every run\n# creates a newer version. This avoids us having to update the\n# file manually for every CI run.\nV=\"$(dpkg-parsechangelog -SVersion | sed 's/-[^-]*$//')\"\nT=\"$(date -u \"+%Y%m%dT%H%M%S\")\"\nversion=\"$V.ci$T-1\"\ndch -v \"$version\" \"CI build under Ambient.\"\ndch -r ''\n"
},
{
"action": "deb",
"packages": "."
},
{
"action": "tar_create",
"archive": "/dev/vde",
"directory": "/ci/cache"
},
{
"action": "tar_create",
"archive": "/dev/vdd",
"directory": "/ci/artifacts"
}
],
"executor_drive": "/dev/vdb",
"source_drive": "/dev/vdc",
"artifact_drive": "/dev/vdd",
"cache_drive": "/dev/vde",
"deps_drive": "/dev/vdf",
"workspace_dir": "/ci",
"source_dir": "/ci/src",
"deps_dir": "/ci/deps",
"cache_dir": "/ci/cache",
"artifacts_dir": "/ci/artifacts",
"envs": {
"RUSTUP_HOME": [
47,
99,
105,
47,
100,
101,
112,
115,
47,
114,
117,
115,
116,
117,
112
]
},
"timestamp": {
"secs_since_epoch": 1782142411,
"nanos_since_epoch": 802398642
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "mkdir",
"pathname": "/ci",
"timestamp": {
"secs_since_epoch": 1782142411,
"nanos_since_epoch": 802615797
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "mkdir",
"pathname": "/ci",
"timestamp": {
"secs_since_epoch": 1782142411,
"nanos_since_epoch": 803202193
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "mkdir",
"pathname": "/ci/artifacts",
"timestamp": {
"secs_since_epoch": 1782142411,
"nanos_since_epoch": 803290032
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "mkdir",
"pathname": "/ci/artifacts",
"timestamp": {
"secs_since_epoch": 1782142411,
"nanos_since_epoch": 803331190
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "tar_extract",
"archive": "/dev/vdc",
"directory": "/ci/src",
"timestamp": {
"secs_since_epoch": 1782142411,
"nanos_since_epoch": 803512918
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "tar_extract",
"archive": "/dev/vdc",
"directory": "/ci/src",
"timestamp": {
"secs_since_epoch": 1782142412,
"nanos_since_epoch": 4069937
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "tar_extract",
"archive": "/dev/vdf",
"directory": "/ci/deps",
"timestamp": {
"secs_since_epoch": 1782142412,
"nanos_since_epoch": 6785334
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "tar_extract",
"archive": "/dev/vdf",
"directory": "/ci/deps",
"timestamp": {
"secs_since_epoch": 1782142420,
"nanos_since_epoch": 815617380
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "tar_extract",
"archive": "/dev/vde",
"directory": "/ci/cache",
"timestamp": {
"secs_since_epoch": 1782142420,
"nanos_since_epoch": 816130017
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "tar_extract",
"archive": "/dev/vde",
"directory": "/ci/cache",
"timestamp": {
"secs_since_epoch": 1782142434,
"nanos_since_epoch": 819881897
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "shell",
"shell": "ln -sf /ci /workspace",
"timestamp": {
"secs_since_epoch": 1782142434,
"nanos_since_epoch": 820340830
},
"log_source": "Plan"
}{
"type": "start_program",
"argv": [
{
"Unix": [
98,
97,
115,
104
]
},
{
"Unix": [
45,
99
]
},
{
"Unix": [
115,
101,
116,
32,
45,
120,
101,
117,
111,
32,
112,
105,
112,
101,
102,
97,
105,
108,
10,
108,
110,
32,
45,
115,
102,
32,
47,
99,
105,
32,
47,
119,
111,
114,
107,
115,
112,
97,
99,
101,
10
]
}
],
"timestamp": {
"secs_since_epoch": 1782142434,
"nanos_since_epoch": 820799509
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "",
"stderr": "+ ln -sf /ci /workspace\n",
"timestamp": {
"secs_since_epoch": 1782142434,
"nanos_since_epoch": 833194361
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "shell",
"shell": "ln -sf /ci /workspace",
"timestamp": {
"secs_since_epoch": 1782142434,
"nanos_since_epoch": 833644400
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "shell",
"shell": "git config --global user.name 'Ambient CI'",
"timestamp": {
"secs_since_epoch": 1782142434,
"nanos_since_epoch": 833848839
},
"log_source": "Plan"
}{
"type": "start_program",
"argv": [
{
"Unix": [
98,
97,
115,
104
]
},
{
"Unix": [
45,
99
]
},
{
"Unix": [
115,
101,
116,
32,
45,
120,
101,
117,
111,
32,
112,
105,
112,
101,
102,
97,
105,
108,
10,
103,
105,
116,
32,
99,
111,
110,
102,
105,
103,
32,
45,
45,
103,
108,
111,
98,
97,
108,
32,
117,
115,
101,
114,
46,
110,
97,
109,
101,
32,
39,
65,
109,
98,
105,
101,
110,
116,
32,
67,
73,
39,
10
]
}
],
"timestamp": {
"secs_since_epoch": 1782142434,
"nanos_since_epoch": 833860471
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "",
"stderr": "+ git config --global user.name 'Ambient CI'\n",
"timestamp": {
"secs_since_epoch": 1782142434,
"nanos_since_epoch": 851543818
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "shell",
"shell": "git config --global user.name 'Ambient CI'",
"timestamp": {
"secs_since_epoch": 1782142434,
"nanos_since_epoch": 854411802
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "shell",
"shell": "git config --global user.email ambient@example.com",
"timestamp": {
"secs_since_epoch": 1782142434,
"nanos_since_epoch": 856997435
},
"log_source": "Plan"
}{
"type": "start_program",
"argv": [
{
"Unix": [
98,
97,
115,
104
]
},
{
"Unix": [
45,
99
]
},
{
"Unix": [
115,
101,
116,
32,
45,
120,
101,
117,
111,
32,
112,
105,
112,
101,
102,
97,
105,
108,
10,
103,
105,
116,
32,
99,
111,
110,
102,
105,
103,
32,
45,
45,
103,
108,
111,
98,
97,
108,
32,
117,
115,
101,
114,
46,
101,
109,
97,
105,
108,
32,
97,
109,
98,
105,
101,
110,
116,
64,
101,
120,
97,
109,
112,
108,
101,
46,
99,
111,
109,
10
]
}
],
"timestamp": {
"secs_since_epoch": 1782142434,
"nanos_since_epoch": 859636328
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "",
"stderr": "+ git config --global user.email ambient@example.com\n",
"timestamp": {
"secs_since_epoch": 1782142434,
"nanos_since_epoch": 867566303
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "shell",
"shell": "git config --global user.email ambient@example.com",
"timestamp": {
"secs_since_epoch": 1782142434,
"nanos_since_epoch": 870512212
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "shell",
"shell": "sed -i /components/d rust-toolchain.toml\n\n# Commit this to git so that the Debian package building doesn't\n# see changes outside the debian directory.\ngit config set user.name \"Ambient CI\"\ngit config set user.email \"ambient@example.com\"\ngit commit -m \"remove components from toolchain file\" rust-toolchain.toml\n",
"timestamp": {
"secs_since_epoch": 1782142434,
"nanos_since_epoch": 873241596
},
"log_source": "Plan"
}{
"type": "start_program",
"argv": [
{
"Unix": [
98,
97,
115,
104
]
},
{
"Unix": [
45,
99
]
},
{
"Unix": [
115,
101,
116,
32,
45,
120,
101,
117,
111,
32,
112,
105,
112,
101,
102,
97,
105,
108,
10,
115,
101,
100,
32,
45,
105,
32,
47,
99,
111,
109,
112,
111,
110,
101,
110,
116,
115,
47,
100,
32,
114,
117,
115,
116,
45,
116,
111,
111,
108,
99,
104,
97,
105,
110,
46,
116,
111,
109,
108,
10,
10,
35,
32,
67,
111,
109,
109,
105,
116,
32,
116,
104,
105,
115,
32,
116,
111,
32,
103,
105,
116,
32,
115,
111,
32,
116,
104,
97,
116,
32,
116,
104,
101,
32,
68,
101,
98,
105,
97,
110,
32,
112,
97,
99,
107,
97,
103,
101,
32,
98,
117,
105,
108,
100,
105,
110,
103,
32,
100,
111,
101,
115,
110,
39,
116,
10,
35,
32,
115,
101,
101,
32,
99,
104,
97,
110,
103,
101,
115,
32,
111,
117,
116,
115,
105,
100,
101,
32,
116,
104,
101,
32,
100,
101,
98,
105,
97,
110,
32,
100,
105,
114,
101,
99,
116,
111,
114,
121,
46,
10,
103,
105,
116,
32,
99,
111,
110,
102,
105,
103,
32,
115,
101,
116,
32,
117,
115,
101,
114,
46,
110,
97,
109,
101,
32,
34,
65,
109,
98,
105,
101,
110,
116,
32,
67,
73,
34,
10,
103,
105,
116,
32,
99,
111,
110,
102,
105,
103,
32,
115,
101,
116,
32,
117,
115,
101,
114,
46,
101,
109,
97,
105,
108,
32,
34,
97,
109,
98,
105,
101,
110,
116,
64,
101,
120,
97,
109,
112,
108,
101,
46,
99,
111,
109,
34,
10,
103,
105,
116,
32,
99,
111,
109,
109,
105,
116,
32,
45,
109,
32,
34,
114,
101,
109,
111,
118,
101,
32,
99,
111,
109,
112,
111,
110,
101,
110,
116,
115,
32,
102,
114,
111,
109,
32,
116,
111,
111,
108,
99,
104,
97,
105,
110,
32,
102,
105,
108,
101,
34,
32,
114,
117,
115,
116,
45,
116,
111,
111,
108,
99,
104,
97,
105,
110,
46,
116,
111,
109,
108,
10,
10
]
}
],
"timestamp": {
"secs_since_epoch": 1782142434,
"nanos_since_epoch": 879541276
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "[detached HEAD 589a95870] remove components from toolchain file\n 1 file changed, 1 deletion(-)\n",
"stderr": "+ sed -i /components/d rust-toolchain.toml\n+ git config set user.name 'Ambient CI'\n+ git config set user.email ambient@example.com\n+ git commit -m 'remove components from toolchain file' rust-toolchain.toml\n",
"timestamp": {
"secs_since_epoch": 1782142434,
"nanos_since_epoch": 995955209
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "shell",
"shell": "sed -i /components/d rust-toolchain.toml\n\n# Commit this to git so that the Debian package building doesn't\n# see changes outside the debian directory.\ngit config set user.name \"Ambient CI\"\ngit config set user.email \"ambient@example.com\"\ngit commit -m \"remove components from toolchain file\" rust-toolchain.toml\n",
"timestamp": {
"secs_since_epoch": 1782142435,
"nanos_since_epoch": 2304312
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "cargo_fmt",
"timestamp": {
"secs_since_epoch": 1782142435,
"nanos_since_epoch": 8616007
},
"log_source": "Plan"
}{
"type": "start_program",
"argv": [
{
"Unix": [
99,
97,
114,
103,
111
]
},
{
"Unix": [
45,
45,
118,
101,
114,
115,
105,
111,
110
]
}
],
"timestamp": {
"secs_since_epoch": 1782142435,
"nanos_since_epoch": 10511903
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "cargo 1.95.0 (f2d3ce0bd 2026-03-21)\n",
"stderr": "",
"timestamp": {
"secs_since_epoch": 1782142435,
"nanos_since_epoch": 39956610
},
"log_source": "Plan"
}{
"type": "start_program",
"argv": [
{
"Unix": [
99,
97,
114,
103,
111
]
},
{
"Unix": [
99,
108,
105,
112,
112,
121
]
},
{
"Unix": [
45,
45,
118,
101,
114,
115,
105,
111,
110
]
}
],
"timestamp": {
"secs_since_epoch": 1782142435,
"nanos_since_epoch": 40410923
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "clippy 0.1.95 (59807616e1 2026-04-14)\n",
"stderr": "",
"timestamp": {
"secs_since_epoch": 1782142435,
"nanos_since_epoch": 95041111
},
"log_source": "Plan"
}{
"type": "start_program",
"argv": [
{
"Unix": [
114,
117,
115,
116,
99
]
},
{
"Unix": [
45,
45,
118,
101,
114,
115,
105,
111,
110
]
}
],
"timestamp": {
"secs_since_epoch": 1782142435,
"nanos_since_epoch": 95519653
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "rustc 1.95.0 (59807616e 2026-04-14)\n",
"stderr": "",
"timestamp": {
"secs_since_epoch": 1782142435,
"nanos_since_epoch": 114788661
},
"log_source": "Plan"
}{
"type": "start_program",
"argv": [
{
"Unix": [
99,
97,
114,
103,
111
]
},
{
"Unix": [
102,
109,
116
]
},
{
"Unix": [
45,
45,
99,
104,
101,
99,
107
]
}
],
"timestamp": {
"secs_since_epoch": 1782142435,
"nanos_since_epoch": 117616715
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "",
"stderr": "",
"timestamp": {
"secs_since_epoch": 1782142435,
"nanos_since_epoch": 942831324
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "cargo_fmt",
"timestamp": {
"secs_since_epoch": 1782142435,
"nanos_since_epoch": 945380765
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "cargo_clippy",
"timestamp": {
"secs_since_epoch": 1782142435,
"nanos_since_epoch": 947465689
},
"log_source": "Plan"
}{
"type": "start_program",
"argv": [
{
"Unix": [
99,
97,
114,
103,
111
]
},
{
"Unix": [
45,
45,
118,
101,
114,
115,
105,
111,
110
]
}
],
"timestamp": {
"secs_since_epoch": 1782142435,
"nanos_since_epoch": 949474550
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "cargo 1.95.0 (f2d3ce0bd 2026-03-21)\n",
"stderr": "",
"timestamp": {
"secs_since_epoch": 1782142435,
"nanos_since_epoch": 961105656
},
"log_source": "Plan"
}{
"type": "start_program",
"argv": [
{
"Unix": [
99,
97,
114,
103,
111
]
},
{
"Unix": [
99,
108,
105,
112,
112,
121
]
},
{
"Unix": [
45,
45,
118,
101,
114,
115,
105,
111,
110
]
}
],
"timestamp": {
"secs_since_epoch": 1782142435,
"nanos_since_epoch": 963825261
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "clippy 0.1.95 (59807616e1 2026-04-14)\n",
"stderr": "",
"timestamp": {
"secs_since_epoch": 1782142435,
"nanos_since_epoch": 993568961
},
"log_source": "Plan"
}{
"type": "start_program",
"argv": [
{
"Unix": [
114,
117,
115,
116,
99
]
},
{
"Unix": [
45,
45,
118,
101,
114,
115,
105,
111,
110
]
}
],
"timestamp": {
"secs_since_epoch": 1782142435,
"nanos_since_epoch": 996245241
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "rustc 1.95.0 (59807616e 2026-04-14)\n",
"stderr": "",
"timestamp": {
"secs_since_epoch": 1782142436,
"nanos_since_epoch": 10906094
},
"log_source": "Plan"
}{
"type": "start_program",
"argv": [
{
"Unix": [
99,
97,
114,
103,
111
]
},
{
"Unix": [
99,
108,
105,
112,
112,
121
]
},
{
"Unix": [
45,
45,
111,
102,
102,
108,
105,
110,
101
]
},
{
"Unix": [
45,
45,
108,
111,
99,
107,
101,
100
]
},
{
"Unix": [
45,
45,
119,
111,
114,
107,
115,
112,
97,
99,
101
]
},
{
"Unix": [
45,
45,
97,
108,
108,
45,
116,
97,
114,
103,
101,
116,
115
]
},
{
"Unix": [
45,
45,
110,
111,
45,
100,
101,
112,
115
]
},
{
"Unix": [
45,
45
]
},
{
"Unix": [
45,
45,
100,
101,
110,
121
]
},
{
"Unix": [
119,
97,
114,
110,
105,
110,
103,
115
]
}
],
"timestamp": {
"secs_since_epoch": 1782142436,
"nanos_since_epoch": 13647961
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "",
"stderr": " Checking radicle-crypto v0.17.0 (/ci/src/crates/radicle-crypto)\n Checking radicle-oid v0.2.0 (/ci/src/crates/radicle-oid)\n Checking radicle-localtime v0.1.0 (/ci/src/crates/radicle-localtime)\n Checking radicle-git-metadata v0.2.0 (/ci/src/crates/radicle-git-metadata)\n Checking radicle-dag v0.10.0 (/ci/src/crates/radicle-dag)\n Checking radicle-git-ref-format v0.1.0 (/ci/src/crates/radicle-git-ref-format)\n Compiling radicle v0.24.0 (/ci/src/crates/radicle)\n Checking radicle-cob v0.20.0 (/ci/src/crates/radicle-cob)\n Checking radicle-core v0.3.0 (/ci/src/crates/radicle-core)\n Checking radicle-signals v0.11.0 (/ci/src/crates/radicle-signals)\n Checking radicle-term v0.18.0 (/ci/src/crates/radicle-term)\n Checking radicle-log v0.1.0 (/ci/src/crates/radicle-log)\n Compiling radicle-node v0.20.0 (/ci/src/crates/radicle-node)\n Compiling radicle-cli v0.21.0 (/ci/src/crates/radicle-cli)\n Checking radicle-systemd v0.13.0 (/ci/src/crates/radicle-systemd)\n Compiling radicle-remote-helper v0.17.0 (/ci/src/crates/radicle-remote-helper)\n Checking radicle-fetch v0.20.0 (/ci/src/crates/radicle-fetch)\n Checking radicle-protocol v0.8.0 (/ci/src/crates/radicle-protocol)\n Checking radicle-cli-test v0.13.0 (/ci/src/crates/radicle-cli-test)\n Checking radicle-schemars v0.8.0 (/ci/src/crates/radicle-schemars)\n Checking radicle-windows v0.1.0 (/ci/src/crates/radicle-windows)\n Finished `dev` profile [unoptimized + debuginfo] target(s) in 11.12s\n",
"timestamp": {
"secs_since_epoch": 1782142447,
"nanos_since_epoch": 214244731
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "cargo_clippy",
"timestamp": {
"secs_since_epoch": 1782142447,
"nanos_since_epoch": 237180973
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "cargo_build",
"timestamp": {
"secs_since_epoch": 1782142447,
"nanos_since_epoch": 239162396
},
"log_source": "Plan"
}{
"type": "start_program",
"argv": [
{
"Unix": [
99,
97,
114,
103,
111
]
},
{
"Unix": [
45,
45,
118,
101,
114,
115,
105,
111,
110
]
}
],
"timestamp": {
"secs_since_epoch": 1782142447,
"nanos_since_epoch": 241148580
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "cargo 1.95.0 (f2d3ce0bd 2026-03-21)\n",
"stderr": "",
"timestamp": {
"secs_since_epoch": 1782142447,
"nanos_since_epoch": 252531056
},
"log_source": "Plan"
}{
"type": "start_program",
"argv": [
{
"Unix": [
99,
97,
114,
103,
111
]
},
{
"Unix": [
99,
108,
105,
112,
112,
121
]
},
{
"Unix": [
45,
45,
118,
101,
114,
115,
105,
111,
110
]
}
],
"timestamp": {
"secs_since_epoch": 1782142447,
"nanos_since_epoch": 255281082
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "clippy 0.1.95 (59807616e1 2026-04-14)\n",
"stderr": "",
"timestamp": {
"secs_since_epoch": 1782142447,
"nanos_since_epoch": 286002732
},
"log_source": "Plan"
}{
"type": "start_program",
"argv": [
{
"Unix": [
114,
117,
115,
116,
99
]
},
{
"Unix": [
45,
45,
118,
101,
114,
115,
105,
111,
110
]
}
],
"timestamp": {
"secs_since_epoch": 1782142447,
"nanos_since_epoch": 286460548
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "rustc 1.95.0 (59807616e 2026-04-14)\n",
"stderr": "",
"timestamp": {
"secs_since_epoch": 1782142447,
"nanos_since_epoch": 303859272
},
"log_source": "Plan"
}{
"type": "start_program",
"argv": [
{
"Unix": [
99,
97,
114,
103,
111
]
},
{
"Unix": [
98,
117,
105,
108,
100
]
},
{
"Unix": [
45,
45,
111,
102,
102,
108,
105,
110,
101
]
},
{
"Unix": [
45,
45,
108,
111,
99,
107,
101,
100
]
},
{
"Unix": [
45,
45,
119,
111,
114,
107,
115,
112,
97,
99,
101
]
},
{
"Unix": [
45,
45,
97,
108,
108,
45,
116,
97,
114,
103,
101,
116,
115
]
}
],
"timestamp": {
"secs_since_epoch": 1782142447,
"nanos_since_epoch": 306648438
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "",
"stderr": " Compiling radicle-crypto v0.17.0 (/ci/src/crates/radicle-crypto)\n Compiling radicle-oid v0.2.0 (/ci/src/crates/radicle-oid)\n Compiling radicle-localtime v0.1.0 (/ci/src/crates/radicle-localtime)\n Compiling radicle-git-metadata v0.2.0 (/ci/src/crates/radicle-git-metadata)\n Compiling radicle-dag v0.10.0 (/ci/src/crates/radicle-dag)\n Compiling radicle-git-ref-format v0.1.0 (/ci/src/crates/radicle-git-ref-format)\n Compiling radicle v0.24.0 (/ci/src/crates/radicle)\n Compiling radicle-cob v0.20.0 (/ci/src/crates/radicle-cob)\n Compiling radicle-core v0.3.0 (/ci/src/crates/radicle-core)\n Compiling radicle-signals v0.11.0 (/ci/src/crates/radicle-signals)\n Compiling radicle-term v0.18.0 (/ci/src/crates/radicle-term)\n Compiling radicle-log v0.1.0 (/ci/src/crates/radicle-log)\n Compiling radicle-cli v0.21.0 (/ci/src/crates/radicle-cli)\n Compiling radicle-node v0.20.0 (/ci/src/crates/radicle-node)\n Compiling radicle-systemd v0.13.0 (/ci/src/crates/radicle-systemd)\n Compiling radicle-remote-helper v0.17.0 (/ci/src/crates/radicle-remote-helper)\n Compiling radicle-fetch v0.20.0 (/ci/src/crates/radicle-fetch)\n Compiling radicle-protocol v0.8.0 (/ci/src/crates/radicle-protocol)\n Compiling radicle-cli-test v0.13.0 (/ci/src/crates/radicle-cli-test)\n Compiling radicle-schemars v0.8.0 (/ci/src/crates/radicle-schemars)\n Compiling radicle-windows v0.1.0 (/ci/src/crates/radicle-windows)\n Finished `dev` profile [unoptimized + debuginfo] target(s) in 16.26s\n",
"timestamp": {
"secs_since_epoch": 1782142463,
"nanos_since_epoch": 633086236
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "cargo_build",
"timestamp": {
"secs_since_epoch": 1782142463,
"nanos_since_epoch": 655251753
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "cargo_test",
"timestamp": {
"secs_since_epoch": 1782142463,
"nanos_since_epoch": 655672147
},
"log_source": "Plan"
}{
"type": "start_program",
"argv": [
{
"Unix": [
99,
97,
114,
103,
111
]
},
{
"Unix": [
45,
45,
118,
101,
114,
115,
105,
111,
110
]
}
],
"timestamp": {
"secs_since_epoch": 1782142463,
"nanos_since_epoch": 655683381
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "cargo 1.95.0 (f2d3ce0bd 2026-03-21)\n",
"stderr": "",
"timestamp": {
"secs_since_epoch": 1782142463,
"nanos_since_epoch": 669708780
},
"log_source": "Plan"
}{
"type": "start_program",
"argv": [
{
"Unix": [
99,
97,
114,
103,
111
]
},
{
"Unix": [
99,
108,
105,
112,
112,
121
]
},
{
"Unix": [
45,
45,
118,
101,
114,
115,
105,
111,
110
]
}
],
"timestamp": {
"secs_since_epoch": 1782142463,
"nanos_since_epoch": 670172314
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "clippy 0.1.95 (59807616e1 2026-04-14)\n",
"stderr": "",
"timestamp": {
"secs_since_epoch": 1782142463,
"nanos_since_epoch": 700924001
},
"log_source": "Plan"
}{
"type": "start_program",
"argv": [
{
"Unix": [
114,
117,
115,
116,
99
]
},
{
"Unix": [
45,
45,
118,
101,
114,
115,
105,
111,
110
]
}
],
"timestamp": {
"secs_since_epoch": 1782142463,
"nanos_since_epoch": 701379816
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "rustc 1.95.0 (59807616e 2026-04-14)\n",
"stderr": "",
"timestamp": {
"secs_since_epoch": 1782142463,
"nanos_since_epoch": 718006709
},
"log_source": "Plan"
}{
"type": "start_program",
"argv": [
{
"Unix": [
99,
97,
114,
103,
111
]
},
{
"Unix": [
116,
101,
115,
116
]
},
{
"Unix": [
45,
45,
111,
102,
102,
108,
105,
110,
101
]
},
{
"Unix": [
45,
45,
108,
111,
99,
107,
101,
100
]
},
{
"Unix": [
45,
45,
119,
111,
114,
107,
115,
112,
97,
99,
101
]
}
],
"timestamp": {
"secs_since_epoch": 1782142463,
"nanos_since_epoch": 718451167
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "\nrunning 383 tests\ntest canonical::formatter::test::ascii_control_characters ... ok\ntest canonical::formatter::test::ordered_nested_object ... ok\ntest canonical::formatter::test::securesystemslib_asserts ... ok\ntest cob::cache::migrations::_2::tests::test_patch_json_deserialization ... ok\ntest cob::cache::tests::test_check_version ... ok\ntest cob::cache::migrations::_2::tests::test_migration_2 ... ok\ntest cob::common::test::test_color ... ok\ntest cob::cache::tests::test_migrate_to ... ok\ntest cob::common::test::test_title ... ok\ntest cob::common::test::test_emojis ... ok\ntest cob::identity::test::prop_json_eq_str ... ok\ntest cob::identity::test::test_identity_redact_revision ... ok\ntest cob::identity::test::test_identity_reject_concurrent ... ok\ntest cob::identity::test::test_identity_remove_delegate_concurrent ... ok\ntest cob::identity::test::test_identity_updates ... ok\ntest cob::identity::test::test_identity_update_rejected ... ok\ntest cob::identity::test::test_identity_updates_concurrent ... ok\ntest cob::identity::test::test_identity_updates_concurrent_outdated ... ok\ntest cob::issue::cache::tests::test_counts ... ok\ntest cob::identity::test::test_valid_identity ... ok\ntest cob::issue::cache::tests::test_is_empty ... ok\ntest cob::issue::cache::tests::test_get ... ok\ntest cob::issue::cache::tests::test_list ... ok\ntest cob::issue::cache::tests::test_list_by_status ... ok\ntest cob::issue::cache::tests::test_remove ... ok\ntest cob::issue::test::test_embeds ... ok\ntest cob::issue::test::test_embeds_edit ... ok\ntest cob::issue::test::test_invalid_actions ... ok\ntest cob::issue::test::test_concurrency ... ok\ntest cob::issue::test::test_invalid_cob ... ok\ntest cob::issue::test::test_invalid_tx ... ok\ntest cob::issue::test::test_invalid_tx_reference ... ok\ntest cob::issue::test::test_issue_all ... ok\ntest cob::issue::test::test_issue_comment ... ok\ntest cob::issue::test::test_issue_create_and_assign ... ok\ntest cob::issue::test::test_issue_comment_redact ... ok\ntest cob::issue::test::test_issue_create_and_get ... ok\ntest cob::issue::test::test_issue_create_and_change_state ... ok\ntest cob::issue::test::test_issue_create_and_unassign ... ok\ntest cob::issue::test::test_issue_create_and_reassign ... ok\ntest cob::issue::test::test_issue_edit ... ok\ntest cob::issue::test::test_issue_edit_description ... ok\ntest cob::issue::test::test_issue_multilines ... ok\ntest cob::issue::test::test_issue_label ... ok\ntest cob::issue::test::test_issue_react ... ok\ntest cob::issue::test::test_issue_state_serde ... ok\ntest cob::issue::test::test_ordering ... ok\ntest cob::patch::actions::test::test_review_edit ... ok\ntest cob::issue::test::test_issue_reply ... ok\ntest cob::patch::cache::tests::test_counts ... ok\ntest cob::patch::cache::tests::test_get ... ok\ntest cob::patch::cache::tests::test_is_empty ... ok\ntest cob::patch::cache::tests::test_list ... ok\ntest cob::patch::cache::tests::test_list_by_status ... ok\ntest cob::patch::cache::tests::test_remove ... ok\ntest cob::patch::encoding::review::test::test_review_deserialize_summary_migration_null_summary ... ok\ntest cob::patch::encoding::review::test::test_review_deserialize_summary_migration_with_summary ... ok\ntest cob::patch::encoding::review::test::test_review_deserialize_summary_migration_without_summary ... ok\ntest cob::patch::encoding::review::test::test_review_deserialize_summary_v2 ... ok\ntest cob::patch::encoding::review::test::test_review_summary ... ok\ntest cob::patch::test::test_json ... ok\ntest cob::patch::test::test_json_serialisation_target ... ok\ntest cob::patch::test::test_json_serialization ... ok\ntest cob::patch::test::test_merge_target_resolution ... ok\ntest cob::patch::test::test_patch_create_and_get ... ok\ntest cob::patch::cache::tests::test_find_by_revision ... ok\ntest cob::patch::test::test_patch_discussion ... ok\ntest cob::patch::test::test_patch_merge_authorization_ref_formats ... ok\ntest cob::patch::test::test_patch_merge_custom_destination_authorized ... ok\ntest cob::patch::test::test_patch_merge_custom_destination_unauthorized ... ok\ntest cob::patch::test::test_patch_merge ... ok\ntest cob::patch::test::test_patch_redact ... ok\ntest cob::patch::test::test_patch_review ... ok\ntest cob::patch::test::test_patch_review_comment ... ok\ntest cob::patch::test::test_patch_review_duplicate ... ok\ntest cob::patch::test::test_patch_review_edit ... ok\ntest cob::patch::test::test_patch_review_edit_comment ... ok\ntest cob::patch::test::test_patch_review_remove_summary ... ok\ntest cob::patch::test::test_patch_review_revision_redact ... ok\ntest cob::patch::test::test_reactions_json_serialization ... ok\ntest cob::patch::test::test_revision_edit_redact ... ok\ntest cob::patch::test::test_revision_reaction ... ok\ntest cob::patch::test::test_revision_review_merge_redacted ... ok\ntest cob::patch::test::test_target_branch ... ok\ntest cob::patch::test::test_patch_update ... ok\ntest cob::stream::tests::test_all_from ... ok\ntest cob::stream::tests::test_all_from_until ... ok\ntest cob::stream::tests::test_all_until ... ok\ntest cob::stream::tests::test_regression_from_until ... ok\ntest cob::stream::tests::test_from_until ... ok\ntest cob::thread::tests::test_comment_edit_missing ... ok\ntest cob::thread::tests::test_comment_edit_redacted ... ok\ntest cob::thread::tests::test_comment_redact_missing ... ok\ntest cob::thread::tests::test_duplicate_comments ... ok\ntest cob::thread::tests::test_edit_comment ... ok\ntest cob::thread::tests::test_redact_comment ... ok\ntest cob::thread::tests::test_timeline ... ok\ntest git::canonical::protect::tests::refs_rad ... ok\ntest git::canonical::protect::tests::refs_rad_id ... ok\ntest git::canonical::protect::tests::refs_radieschen ... ok\ntest git::canonical::quorum::test::merge_base_commutative ... ok\ntest git::canonical::quorum::test::test_merge_bases ... ok\ntest git::canonical::rules::test::canonical ... ok\ntest git::canonical::rules::test::deserialization ... ok\ntest git::canonical::rules::test::deserialize_extensions ... ok\ntest git::canonical::rules::test::matches_exactly_curly_braces ... ok\ntest git::canonical::rules::test::matches_expands_globs_appropriately ... ok\ntest git::canonical::rules::test::ordering ... ok\ntest git::canonical::rules::test::property::identity ... ok\ntest git::canonical::rules::test::property::prefix ... ok\ntest git::canonical::rules::test::property::prefix_negative ... ok\ntest git::canonical::rules::test::property::suffix ... ok\ntest git::canonical::rules::test::property::suffix_negative ... ok\ntest git::canonical::rules::test::property::trailing_asterisk_partial_component ... ok\ntest git::canonical::rules::test::roundtrip ... ok\ntest git::canonical::rules::test::rule_validate_failures ... ok\ntest git::canonical::rules::test::rule_validate_success ... ok\ntest git::canonical::rules::test::special_branches ... ok\ntest git::canonical::symbolic::test::deserialize_infinite ... ok\ntest git::canonical::symbolic::test::deserialize_order ... ok\ntest git::canonical::symbolic::test::deserialize_valid ... ok\ntest git::canonical::symbolic::test::infinite_extend ... ok\ntest git::canonical::symbolic::test::infinite_multi ... ok\ntest git::canonical::symbolic::test::infinite_single ... ok\ntest git::canonical::symbolic::test::reclassification_combine ... ok\ntest git::canonical::symbolic::test::reclassification_combine_reverse ... ok\ntest git::canonical::symbolic::test::reclassification_diamond ... ok\ntest git::canonical::symbolic::test::reclassification_order_invariant ... ok\ntest git::canonical::symbolic::test::reclassification_reverse_chain ... ok\ntest git::canonical::symbolic::test::resolve_two_hop_chain ... ok\ntest git::canonical::symbolic::test::target_classification ... ok\ntest git::canonical::symbolic::test::target_classification_symbolic ... ok\ntest git::canonical::symbolic::test::target_reclassification ... ok\ntest git::canonical::symbolic::test::target_reclassification_commutative ... ok\ntest git::canonical::tests::test_commit_quorum_fork_of_a_fork ... ok\ntest git::canonical::tests::test_commit_quorum_forked_merge_commits ... ok\ntest git::canonical::tests::test_commit_quorum_groups ... ok\ntest git::canonical::tests::test_commit_quorum_linear ... ok\ntest git::canonical::tests::test_commit_quorum_merges ... ok\ntest git::canonical::tests::test_commit_quorum_single ... ok\ntest git::canonical::tests::test_commit_quorum_three_way_fork ... ok\ntest git::canonical::tests::test_commit_quorum_two_way_fork ... ok\ntest git::canonical::tests::test_quorum_different_types ... ok\ntest git::canonical::tests::test_quorum_properties ... ok\ntest git::canonical::tests::test_tag_quorum ... ok\ntest git::test::test_version_from_str ... ok\ntest git::test::test_version_ord ... ok\ntest identity::crefs::tests::invalid_clash ... ok\ntest identity::crefs::tests::invalid_clash_asterisk_name ... ok\ntest identity::crefs::tests::invalid_dangling ... ok\ntest identity::crefs::tests::omit_symbolic ... ok\ntest identity::crefs::tests::valid ... ok\ntest identity::crefs::tests::valid_asterisk_target ... ok\ntest identity::did::test::test_did_encode_decode ... ok\ntest identity::did::test::test_did_vectors ... ok\ntest identity::doc::test::default_branch_clash ... ok\ntest identity::doc::test::default_branch_without_project ... ok\ntest cob::thread::tests::prop_ordering ... ok\ntest identity::doc::test::test_canonical_doc ... ok\ntest identity::doc::test::test_canonical_example ... ok\ntest identity::doc::test::test_duplicate_dids ... ok\ntest identity::doc::test::test_future_version_error ... ok\ntest identity::doc::test::test_is_valid_version ... ok\ntest identity::doc::test::test_max_delegates ... ok\ntest identity::doc::test::test_not_found ... ok\ntest identity::doc::test::test_parse_version ... ok\ntest identity::doc::test::test_visibility_json ... ok\ntest identity::doc::update::test::test_can_update_crefs ... ok\ntest identity::doc::update::test::test_cannot_include_default_branch_rule ... ok\ntest identity::doc::update::test::test_default_branch_rule_exists_after_verification ... ok\ntest identity::project::test::test_project_name ... ok\ntest node::address::store::test::skip_invalid_address_type ... ok\ntest node::address::store::test::skip_mismatched_address_type ... ok\ntest node::address::store::test::test_alias ... ok\ntest node::address::store::test::test_disconnected ... ok\ntest node::address::store::test::test_disconnected_ban ... ok\ntest node::address::store::test::test_empty ... ok\ntest node::address::store::test::test_entries ... ok\ntest node::address::store::test::test_entries_skips_unparsable_address ... ok\ntest node::address::store::test::test_get_none ... ok\ntest node::address::store::test::test_insert_and_get ... ok\ntest node::address::store::test::test_insert_and_remove ... ok\ntest node::address::store::test::test_insert_and_update ... ok\ntest node::address::store::test::test_insert_duplicate ... ok\ntest node::address::store::test::test_node_aliases ... ok\ntest node::address::store::test::test_remove_nothing ... ok\ntest node::command::test::command_result ... ok\ntest node::config::test::deserialize_migrating_scope ... ok\ntest node::config::test::fetch_level_min ... ok\ntest node::config::test::onion_absent ... ok\ntest node::config::test::onion_null ... ok\ntest node::config::test::partial ... ok\ntest node::config::test::regression_ipv6_address_brackets ... ok\ntest node::config::test::regression_ipv6_address_no_brackets ... ok\ntest node::config::test::serialize_migrating_scope ... ok\ntest node::config::test::user_agent_custom ... ok\ntest node::config::test::user_agent_default ... ok\ntest node::config::test::user_agent_default_explicit ... ok\ntest node::config::test::user_agent_opt_out ... ok\ntest node::db::config::test::database_config_valid_combinations ... ok\ntest node::db::config::test::invalid ... ok\ntest node::db::test::migration_8::all_ipv6_formatted_dns_addresses_are_retyped ... ok\ntest node::db::test::migration_8::dns_address_starting_with_bracket_but_missing_closing_bracket_colon_is_unaffected ... ok\ntest node::db::test::migration_8::dns_address_with_bracket_not_at_start_is_unaffected ... ok\ntest node::db::test::migration_8::ipv4_address_is_unaffected ... ok\ntest node::db::test::migration_8::ipv6_formatted_dns_address_is_deleted_when_correct_ipv6_row_already_exists ... ok\ntest node::db::test::migration_8::ipv6_formatted_dns_address_is_retyped_to_ipv6 ... ok\ntest node::db::test::migration_8::migration_applies_to_all_nodes ... ok\ntest node::db::test::migration_8::plain_dns_hostname_without_brackets_is_unaffected ... ok\ntest node::db::test::migration_8::retype_preserves_address_metadata ... ok\ntest node::db::test::migration_9::bracketed_non_ipv6_garbage_is_deleted ... ok\ntest node::db::test::migration_9::dns_row_is_unaffected_even_when_inner_part_has_no_colon ... ok\ntest node::db::test::migration_9::empty_brackets_ipv6_row_is_deleted ... ok\ntest node::db::test::migration_9::full_ipv6_address_is_kept ... ok\ntest node::db::test::migration_9::ipv4_row_is_unaffected ... ok\ntest node::db::test::migration_9::loopback_address_is_kept ... ok\ntest node::db::test::migration_9::unspecified_address_is_kept ... ok\ntest node::db::test::test_version ... ok\ntest node::features::test::test_operations ... ok\ntest node::notifications::store::test::test_branch_notifications ... ok\ntest node::notifications::store::test::test_clear ... ok\ntest node::notifications::store::test::test_cob_notifications ... ok\ntest node::notifications::store::test::test_counts_by_repo ... ok\ntest node::notifications::store::test::test_duplicate_notifications ... ok\ntest node::notifications::store::test::test_notification_status ... ok\ntest node::policy::store::test::test_follow_and_unfollow_node ... ok\ntest node::policy::store::test::test_node_aliases ... ok\ntest node::policy::store::test::test_node_policies ... ok\ntest node::policy::store::test::test_node_policy ... ok\ntest node::policy::store::test::test_repo_policies ... ok\ntest node::policy::store::test::test_repo_policy ... ok\ntest node::policy::store::test::test_seed_and_unseed_repo ... ok\ntest node::policy::store::test::test_update_alias ... ok\ntest node::policy::store::test::test_update_scope ... ok\ntest node::refs::store::test::test_count ... ok\ntest node::refs::store::test::test_set_and_delete ... ok\ntest node::refs::store::test::test_set_and_get ... ok\ntest node::routing::test::test_count ... ok\ntest node::routing::test::test_entries ... ok\ntest node::routing::test::test_insert_and_get ... ok\ntest node::routing::test::test_insert_and_get_resources ... ok\ntest node::routing::test::test_insert_and_remove ... ok\ntest node::routing::test::test_insert_duplicate ... ok\ntest node::routing::test::test_insert_existing_updated_time ... ok\ntest node::routing::test::test_len ... ok\ntest node::routing::test::test_prune ... ok\ntest node::routing::test::test_remove_many ... ok\ntest node::routing::test::test_remove_redundant ... ok\ntest node::routing::test::test_update_existing_multi ... ok\ntest node::sync::announce::test::all_synced_nodes_are_preferred_seeds ... ok\ntest node::sync::announce::test::announcer_adapts_target_to_reach ... ok\ntest node::sync::announce::test::announcer_preferred_seeds_or_replica_factor ... ok\ntest node::sync::announce::test::announcer_reached_max_replication_target ... ok\ntest node::sync::announce::test::announcer_reached_min_replication_target ... ok\ntest node::sync::announce::test::announcer_reached_preferred_seeds ... ok\ntest node::sync::announce::test::announcer_synced_with_unknown_node ... ok\ntest node::sync::announce::test::announcer_timed_out ... ok\ntest node::sync::announce::test::announcer_with_replication_factor_zero_and_preferred_seeds ... ok\ntest node::sync::announce::test::cannot_construct_announcer ... ok\ntest node::sync::announce::test::construct_node_appears_in_multiple_input_sets ... ok\ntest node::sync::announce::test::construct_only_preferred_seeds_provided ... ok\ntest node::sync::announce::test::invariant_progress_should_match_state ... ok\ntest node::sync::announce::test::local_node_in_multiple_sets ... ok\ntest node::sync::announce::test::local_node_in_preferred_seeds ... ok\ntest node::sync::announce::test::local_node_in_synced_set ... ok\ntest node::sync::announce::test::local_node_in_unsynced_set ... ok\ntest node::sync::announce::test::local_node_only_in_all_sets_results_in_no_seeds_error ... ok\ntest node::sync::announce::test::preferred_seeds_already_synced ... ok\ntest node::sync::announce::test::synced_with_local_node_is_ignored ... ok\ntest node::sync::announce::test::synced_with_same_node_multiple_times ... ok\ntest node::sync::announce::test::timed_out_after_reaching_success ... ok\ntest node::sync::fetch::test::all_nodes_are_candidates ... ok\ntest node::sync::fetch::test::all_nodes_are_fetchable ... ok\ntest node::sync::fetch::test::could_not_reach_target ... ok\ntest node::sync::fetch::test::ignores_duplicates_and_local_node ... ok\ntest node::sync::fetch::test::preferred_seeds_target_returned_over_replicas ... ok\ntest node::sync::fetch::test::reaches_target_of_max_replicas ... ok\ntest node::sync::fetch::test::reaches_target_of_preferred_seeds ... ok\ntest node::sync::fetch::test::reaches_target_of_replicas ... ok\ntest node::sync::test::ensure_replicas_construction ... ok\ntest node::sync::test::replicas_constrain_to ... ok\ntest node::test::test_address ... ok\ntest node::test::test_alias ... ok\ntest node::test::test_command_result ... ok\ntest node::test::test_user_agent ... ok\ntest node::timestamp::tests::test_timestamp_max ... ok\ntest profile::config::test::schema ... ok\ntest profile::test::canonicalize_home ... ok\ntest profile::test::test_config ... ok\ntest rad::tests::test_checkout ... ok\ntest rad::tests::test_fork ... ok\ntest rad::tests::test_init ... ok\ntest storage::git::tests::test_references_of ... ok\ntest storage::git::tests::test_sign_refs ... ok\ntest storage::git::transport::local::url::test::test_url_parse ... ok\ntest storage::git::transport::local::url::test::test_url_to_string ... ok\ntest storage::git::transport::remote::url::test::test_url_parse ... ok\ntest identity::doc::test::prop_encode_decode ... ok\ntest storage::refs::sigrefs::git::properties::idempotent_write ... ok\ntest storage::refs::sigrefs::git::properties::initial_commit_roundtrip ... ok\ntest storage::refs::sigrefs::property::idempotent ... ok\ntest storage::refs::sigrefs::git::properties::chain_roundtrip ... ok\ntest storage::refs::sigrefs::read::test::commit_reader::identity_root_error ... ok\ntest storage::refs::sigrefs::read::test::commit_reader::missing_commit ... ok\ntest storage::refs::sigrefs::read::test::commit_reader::read_ok ... ok\ntest storage::refs::sigrefs::read::test::commit_reader::too_many_parents ... ok\ntest storage::refs::sigrefs::read::test::commit_reader::tree_error ... ok\ntest storage::refs::sigrefs::read::test::identity_root_reader::doc_blob_error ... ok\ntest storage::refs::sigrefs::read::test::identity_root_reader::missing_identity ... ok\ntest storage::refs::sigrefs::read::test::identity_root_reader::read_ok_none ... ok\ntest storage::refs::sigrefs::read::test::identity_root_reader::read_ok_some ... ok\ntest storage::refs::sigrefs::read::test::resolve_tip::find_reference_error ... ok\ntest storage::refs::sigrefs::read::test::resolve_tip::missing_sigrefs ... ok\ntest storage::refs::sigrefs::read::test::resolve_tip::resolve_tip_ok ... ok\ntest storage::refs::sigrefs::read::test::signed_refs_reader::detect_parent::root_without_parent ... ok\ntest storage::refs::sigrefs::read::test::signed_refs_reader::detect_parent::root_without_root ... ok\ntest storage::refs::sigrefs::read::test::signed_refs_reader::downgrade::parent ... ok\ntest storage::refs::sigrefs::read::test::signed_refs_reader::downgrade::restore ... ok\ntest storage::refs::sigrefs::read::test::signed_refs_reader::downgrade::root ... ok\ntest storage::refs::sigrefs::read::test::signed_refs_reader::downgrade::root_with_parent ... ok\ntest storage::refs::sigrefs::read::test::signed_refs_reader::head_commit_error ... ok\ntest storage::refs::sigrefs::read::test::signed_refs_reader::head_verify_mismatched_identity_error ... ok\ntest storage::refs::sigrefs::read::test::signed_refs_reader::head_verify_signature_error ... ok\ntest storage::refs::sigrefs::read::test::signed_refs_reader::invalid_parent ... ok\ntest storage::refs::sigrefs::read::test::signed_refs_reader::read_ok_no_parent ... ok\ntest storage::refs::sigrefs::read::test::signed_refs_reader::read_ok_parent ... ok\ntest storage::refs::sigrefs::read::test::signed_refs_reader::read_ok_root ... ok\ntest storage::refs::sigrefs::read::test::signed_refs_reader::replay::alternating ... ok\ntest storage::refs::sigrefs::read::test::signed_refs_reader::replay::chain ... ok\ntest storage::refs::sigrefs::read::test::signed_refs_reader::replay::multiple ... ok\ntest storage::refs::sigrefs::read::test::signed_refs_reader::replay::root_at_head ... ok\ntest storage::refs::sigrefs::read::test::signed_refs_reader::single_commit ... ok\ntest storage::refs::sigrefs::read::test::signed_refs_reader::two_commits ... ok\ntest storage::refs::sigrefs::read::test::signed_refs_reader::walk_commit_error ... ok\ntest storage::refs::sigrefs::read::test::signed_refs_reader::walk_verify_error ... ok\ntest storage::refs::sigrefs::read::test::tree_reader::missing_both ... ok\ntest storage::refs::sigrefs::read::test::tree_reader::missing_refs ... ok\ntest storage::refs::sigrefs::read::test::tree_reader::missing_signature ... ok\ntest storage::refs::sigrefs::read::test::tree_reader::parse_refs_error ... ok\ntest storage::refs::sigrefs::read::test::tree_reader::parse_signature_error ... ok\ntest storage::refs::sigrefs::read::test::tree_reader::read_ok ... ok\ntest storage::refs::sigrefs::read::test::tree_reader::read_refs_error ... ok\ntest storage::refs::sigrefs::read::test::tree_reader::read_signature_error ... ok\ntest storage::refs::sigrefs::write::test::commit_writer::tree_error ... ok\ntest storage::refs::sigrefs::write::test::commit_writer::write_commit_error ... ok\ntest storage::refs::sigrefs::write::test::commit_writer::write_empty_refs ... ok\ntest storage::refs::sigrefs::write::test::commit_writer::write_root_ok ... ok\ntest storage::refs::sigrefs::write::test::commit_writer::write_with_parent_ok ... ok\ntest storage::refs::sigrefs::write::test::head_reader::no_head ... ok\ntest storage::refs::sigrefs::write::test::head_reader::read_ok ... ok\ntest storage::refs::sigrefs::write::test::head_reader::reference_error ... ok\ntest storage::refs::sigrefs::write::test::head_reader::refs_blob_error ... ok\ntest storage::refs::sigrefs::write::test::head_reader::refs_blob_missing ... ok\ntest storage::refs::sigrefs::write::test::head_reader::refs_parse_error ... ok\ntest storage::refs::sigrefs::write::test::head_reader::signature_blob_error ... ok\ntest storage::refs::sigrefs::write::test::head_reader::signature_blob_missing ... ok\ntest storage::refs::sigrefs::write::test::head_reader::signature_parse_error ... ok\ntest storage::refs::sigrefs::write::test::signed_refs_writer::commit_error ... ok\ntest storage::refs::sigrefs::write::test::signed_refs_writer::head_error ... ok\ntest storage::refs::sigrefs::write::test::signed_refs_writer::never_write_rad_sigrefs ... ok\ntest storage::refs::sigrefs::write::test::signed_refs_writer::reference_error ... ok\ntest storage::refs::sigrefs::write::test::signed_refs_writer::unchanged ... ok\ntest storage::refs::sigrefs::write::test::signed_refs_writer::unchanged_force_writes_new_commit ... ok\ntest storage::refs::sigrefs::write::test::signed_refs_writer::write_empty_refs ... ok\ntest storage::refs::sigrefs::write::test::signed_refs_writer::write_root_ok ... ok\ntest storage::refs::sigrefs::write::test::signed_refs_writer::write_with_parent_ok ... ok\ntest storage::refs::sigrefs::write::test::tree_writer::sign_error ... ok\ntest storage::refs::sigrefs::write::test::tree_writer::write_ok ... ok\ntest storage::refs::sigrefs::write::test::tree_writer::write_tree_error ... ok\ntest storage::refs::tests::prop_canonical_roundtrip ... ok\ntest storage::refs::tests::test_rid_verification ... ok\ntest storage::tests::test_storage ... ok\ntest test::assert::test::assert_with_message ... ok\ntest test::assert::test::test_assert_no_move ... ok\ntest test::assert::test::test_assert_panic_0 - should panic ... ok\ntest test::assert::test::test_assert_panic_1 - should panic ... ok\ntest test::assert::test::test_assert_panic_2 - should panic ... ok\ntest test::assert::test::test_assert_succeed ... ok\ntest test::assert::test::test_panic_message ... ok\ntest version::test::test_version ... ok\ntest web::test::description_only ... ok\ntest web::test::pinned_empty ... ok\ntest storage::refs::sigrefs::property::roundtrip ... ok\n\ntest result: ok. 383 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 8.37s\n\n\nrunning 46 tests\ntest commands::block::args::test::should_not_parse ... ok\ntest commands::block::args::test::should_parse_nid ... ok\ntest commands::block::args::test::should_parse_rid ... ok\ntest commands::clone::args::test::should_parse_rid_non_urn ... ok\ntest commands::clone::args::test::should_parse_rid_url ... ok\ntest commands::clone::args::test::should_parse_rid_urn ... ok\ntest commands::cob::args::test::should_allow_log_json_format ... ok\ntest commands::cob::args::test::should_allow_log_pretty_format ... ok\ntest commands::cob::args::test::should_allow_show_json_format ... ok\ntest commands::cob::args::test::should_allow_update_json_format ... ok\ntest commands::cob::args::test::should_not_allow_show_pretty_format ... ok\ntest commands::cob::args::test::should_not_allow_update_pretty_format ... ok\ntest commands::fork::args::test::should_not_parse_rid_url ... ok\ntest commands::fork::args::test::should_parse_rid_non_urn ... ok\ntest commands::fork::args::test::should_parse_rid_urn ... ok\ntest commands::id::args::test::should_not_parse_into_payload - should panic ... ok\ntest commands::id::args::test::should_not_clobber_payload_args ... ok\ntest commands::id::args::test::should_not_parse_single_payload ... ok\ntest commands::id::args::test::should_parse_into_payload ... ok\ntest commands::id::args::test::should_not_parse_single_payloads ... ok\ntest commands::id::args::test::should_parse_multiple_payloads ... ok\ntest commands::id::args::test::should_parse_single_payload ... ok\ntest commands::init::args::test::should_not_parse_rid_url ... ok\ntest commands::init::args::test::should_parse_rid_non_urn ... ok\ntest commands::inspect::test::test_tree ... ok\ntest commands::init::args::test::should_parse_rid_urn ... ok\ntest commands::patch::review::builder::tests::test_review_comments_basic ... ok\ntest commands::patch::review::builder::tests::test_review_comments_before ... ok\ntest commands::patch::review::builder::tests::test_review_comments_multiline ... ok\ntest commands::patch::review::builder::tests::test_review_comments_split_hunk ... ok\ntest commands::publish::args::test::should_not_parse_rid_url ... ok\ntest commands::publish::args::test::should_parse_rid_non_urn ... ok\ntest commands::publish::args::test::should_parse_rid_urn ... ok\ntest git::ddiff::tests::diff_encode_decode_ddiff_hunk ... ok\ntest git::pretty_diff::test::test_pretty ... ignored\ntest commands::watch::args::test::should_parse_ref_str ... ok\ntest git::unified_diff::test::test_diff_content_encode_decode_content ... ok\ntest git::unified_diff::test::test_diff_encode_decode_diff ... ok\ntest terminal::args::test::should_not_parse ... ok\ntest terminal::args::test::should_parse_rid ... ok\ntest terminal::args::test::should_parse_nid ... ok\ntest terminal::format::test::test_bytes ... ok\ntest terminal::format::test::test_strip_comments ... ok\ntest terminal::patch::test::test_edit_display_message ... ok\ntest terminal::patch::test::test_create_display_message ... ok\ntest terminal::patch::test::test_update_display_message ... ok\n\ntest result: ok. 45 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.01s\n\n\nrunning 0 tests\n\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 126 tests\ntest commands::clone::rad_clone ... ok\ntest commands::checkout::rad_checkout ... ok\ntest commands::clone::rad_clone_bare ... ok\ntest commands::clone::rad_clone_connect ... ok\ntest commands::clone::rad_clone_all ... ok\ntest commands::clone::rad_clone_directory ... ok\ntest commands::clone::rad_clone_partial_fail ... ok\ntest commands::clone::rad_clone_unknown ... ok\ntest commands::clone::test_clone_without_seeds ... ok\ntest commands::clone::rad_clone_scope ... ok\ntest commands::cob::rad_cob_migrate ... ok\ntest commands::cob::rad_cob_log ... ok\ntest commands::cob::rad_cob_multiset ... ok\ntest commands::cob::rad_cob_operations ... ok\ntest commands::cob::rad_cob_show ... ok\ntest commands::cob::rad_cob_update_identity ... ok\ntest commands::cob::rad_cob_update ... ok\ntest commands::cob::test_cob_deletion ... ok\ntest commands::cob::test_cob_replication ... ok\ntest commands::git::git_push_amend ... ok\ntest commands::git::git_push_and_fetch ... ok\ntest commands::git::git_push_canonical_lightweight_tags ... ok\ntest commands::git::git_push_canonical ... ok\ntest commands::git::git_push_diverge ... ok\ntest commands::git::git_push_converge ... ok\ntest commands::git::git_push_force_with_lease ... ok\ntest commands::git::git_tag ... ok\ntest commands::git::git_push_rollback ... ok\ntest commands::id::rad_id_collaboration ... ignored, slow\ntest commands::id::rad_id ... ok\ntest commands::id::rad_id_conflict ... ok\ntest commands::id::rad_id_private ... ok\ntest commands::id::rad_id_multi_delegate ... ok\ntest commands::id::rad_id_threshold ... ok\ntest commands::id::rad_id_threshold_soft_fork ... ok\ntest commands::id::rad_id_unknown_field ... ok\ntest commands::id::rad_id_unauthorized_delegate ... ok\ntest commands::id::rad_id_update_delete_field ... ok\ntest commands::init::rad_init ... ignored, part of many other tests\ntest commands::init::rad_init_bare ... ok\ntest commands::init::rad_init_detached_head ... ok\ntest commands::init::rad_init_existing ... ok\ntest commands::init::rad_init_existing_bare ... ok\ntest commands::init::rad_init_no_git ... ok\ntest commands::init::rad_init_no_seed ... ok\ntest commands::init::rad_init_private ... ok\ntest commands::inbox::rad_inbox ... ok\ntest commands::init::rad_init_private_clone ... ok\ntest commands::init::rad_init_private_no_seed ... ok\ntest commands::init::rad_init_private_clone_seed ... ok\ntest commands::init::rad_init_private_seed ... ok\ntest commands::init::rad_init_sync_not_connected ... ok\ntest commands::init::rad_init_sync_preferred ... ok\ntest commands::init::rad_init_sync_and_clone ... ok\ntest commands::init::rad_init_with_existing_remote ... ok\ntest commands::init::rad_init_sync_timeout ... ok\ntest commands::init::rad_publish ... ok\ntest commands::issue::rad_issue ... ok\ntest commands::jj::rad_jj_bare ... ignored, the bare repository does not have a `rad` remote, and so it cannot determine the RID of the repository\ntest commands::jj::rad_jj_colocated_patch ... ok\ntest commands::issue::rad_issue_list ... ok\ntest commands::node::rad_node_connect ... ok\ntest commands::node::rad_node_connect_without_address ... ok\ntest commands::patch::rad_merge_after_update ... ok\ntest commands::patch::rad_merge_no_ff ... ok\ntest commands::node::rad_node ... ok\ntest commands::patch::rad_merge_via_push ... ok\ntest commands::patch::rad_patch ... ok\ntest commands::patch::rad_patch_ahead_behind ... ok\ntest commands::patch::rad_patch_change_base ... ok\ntest commands::patch::rad_patch_checkout ... ok\ntest commands::patch::rad_patch_checkout_revision ... ok\ntest commands::patch::rad_patch_checkout_force ... ok\ntest commands::patch::rad_patch_detached_head ... ok\ntest commands::patch::rad_patch_diff ... ok\ntest commands::patch::rad_patch_draft ... ok\ntest commands::patch::rad_patch_edit ... ok\ntest commands::patch::rad_patch_delete ... ok\ntest commands::patch::rad_patch_fetch_2 ... ok\ntest commands::patch::rad_patch_fetch_1 ... ok\ntest commands::patch::rad_patch_magic_push ... ok\ntest commands::patch::rad_patch_merge_draft ... ok\ntest commands::patch::rad_patch_merge_into_canonical_ref_branch ... ok\ntest commands::patch::rad_patch_merge_on_first_push ... ok\ntest commands::patch::rad_patch_merge_unauthorized_branch ... ok\ntest commands::patch::rad_patch_merge_wrong_branch ... ok\ntest commands::patch::rad_patch_open_explore ... ok\ntest commands::patch::rad_patch_revert_custom_branch ... ok\ntest commands::patch::rad_patch_revert_merge ... ok\ntest commands::patch::rad_patch_review_no_options ... ok\ntest commands::patch::rad_patch_update ... ok\ntest commands::patch::rad_patch_via_push ... ok\ntest commands::patch::rad_push_and_pull_patches ... ok\ntest commands::patch::rad_patch_pull_update ... ok\ntest commands::patch::rad_review_by_hunk ... ok\ntest commands::policy::rad_block ... ok\ntest commands::policy::rad_seed_and_follow ... ok\ntest commands::policy::rad_seed_policy_allow_no_scope ... ok\ntest commands::policy::rad_seed_scope ... ok\ntest commands::policy::rad_unseed ... ok\ntest commands::policy::rad_unseed_many ... ok\ntest commands::policy::rad_seed_many ... ok\ntest commands::sigpipe::config ... ok\ntest commands::sigpipe::help ... ok\ntest commands::sigpipe::rad_self ... ok\ntest commands::remote::rad_remote ... ok\ntest commands::sync::rad_sync ... ok\ntest commands::sync::rad_sync_without_node ... ok\ntest commands::sync::rad_fetch ... ok\ntest commands::utility::framework_home ... ok\ntest commands::utility::rad_auth ... ok\ntest commands::utility::rad_auth_errors ... ok\ntest commands::utility::rad_clean ... ok\ntest commands::utility::rad_config ... ok\ntest commands::utility::rad_diff ... ok\ntest commands::sync::test_replication_via_seed ... ok\ntest commands::utility::rad_help ... ok\ntest commands::utility::rad_inspect ... ok\ntest commands::utility::rad_key_mismatch ... ok\ntest commands::utility::rad_self ... ok\ntest commands::utility::rad_warn_ipv6 ... ok\ntest commands::utility::rad_warn_old_nodes ... ok\ntest commands::watch::rad_watch ... ok\ntest commands::workflow::rad_workflow ... ok\ntest commands::utility::rad_fork ... ok\ntest rad_remote ... ok\n\ntest result: ok. 123 passed; 0 failed; 3 ignored; 0 measured; 0 filtered out; finished in 62.15s\n\n\nrunning 3 tests\ntest tests::test_parse ... ok\ntest tests::test_run ... ok\ntest tests::test_example_spaced_brackets ... ok\n\ntest result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s\n\n\nrunning 9 tests\ntest object::tests::test_serde ... ok\ntest tests::git::roundtrip ... ok\ntest tests::git::list_cobs ... ok\ntest tests::git::traverse_cobs ... ok\ntest tests::git::update_cob ... ok\ntest tests::invalid_parse_refstr ... ok\ntest type_name::test::invalid_typenames ... ok\ntest type_name::test::valid_typenames ... ok\ntest tests::parse_refstr ... ok\n\ntest result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s\n\n\nrunning 4 tests\ntest repo::test::assert_prop_roundtrip_parse ... ok\ntest repo::test::invalid ... ok\ntest repo::test::valid ... ok\ntest repo::serde_impls::test::assert_prop_roundtrip_serde_json ... ok\n\ntest result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s\n\n\nrunning 11 tests\ntest ssh::agent::test::test_agent_encoding_sign ... ok\ntest ssh::agent::test::test_agent_encoding_remove ... ok\ntest ssh::fmt::test::test_key ... ok\ntest ssh::fmt::test::test_fingerprint ... ok\ntest ssh::keystore::tests::test_init_no_passphrase ... ok\ntest ssh::keystore::tests::test_signer ... ok\ntest tests::prop_encode_decode ... ok\ntest tests::prop_key_equality ... ok\ntest tests::test_e25519_dh ... ok\ntest tests::test_encode_decode ... ok\ntest ssh::keystore::tests::test_init_passphrase ... ok\n\ntest result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.27s\n\n\nrunning 20 tests\ntest tests::test_contains ... ok\ntest tests::test_cycle ... ok\ntest tests::test_dependencies ... ok\ntest tests::test_diamond ... ok\ntest tests::test_complex ... ok\ntest tests::test_fold_diamond ... ok\ntest tests::test_fold_multiple_roots ... ok\ntest tests::test_fold_reject ... ok\ntest tests::test_fold_sorting_1 ... ok\ntest tests::test_fold_sorting_2 ... ok\ntest tests::test_get ... ok\ntest tests::test_is_empty ... ok\ntest tests::test_len ... ok\ntest tests::test_merge_1 ... ok\ntest tests::test_merge_2 ... ok\ntest tests::test_prune_1 ... ok\ntest tests::test_prune_2 ... ok\ntest tests::test_prune_by_sorting ... ok\ntest tests::test_remove ... ok\ntest tests::test_siblings ... ok\n\ntest result: ok. 20 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 0 tests\n\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 24 tests\ntest commit::parse::test::error::invalid_author ... ok\ntest commit::parse::test::error::invalid_committer ... ok\ntest commit::parse::test::error::invalid_format_continuation_without_preceding_header ... ok\ntest commit::parse::test::error::invalid_parent ... ok\ntest commit::parse::test::error::invalid_tree ... ok\ntest commit::parse::test::error::missing_author ... ok\ntest commit::parse::test::error::missing_committer ... ok\ntest commit::parse::test::error::missing_header_body_separator ... ok\ntest commit::parse::test::error::missing_tree_empty_header ... ok\ntest commit::parse::test::error::missing_tree_wrong_first_line ... ok\ntest commit::parse::test::success::commit_gpgsig_is_preserved_and_strip_removes_it ... ok\ntest commit::parse::test::success::commit_last_paragraph_kept_in_message_when_not_all_trailers ... ok\ntest commit::parse::test::success::commit_with_extra_headers ... ok\ntest commit::parse::test::success::commit_with_multiline_gpgsig ... ok\ntest commit::parse::test::success::commit_with_single_parent ... ok\ntest commit::parse::test::success::commit_with_trailers ... ok\ntest commit::parse::test::success::merge_commit ... ok\ntest commit::parse::test::success::root_commit ... ok\ntest commit::parse::test::unit::body_last_paragraph_not_trailers_stays_in_message ... ok\ntest commit::parse::test::success::roundtrip ... ok\ntest commit::parse::test::unit::body_no_paragraph_separator_means_no_trailers ... ok\ntest commit::parse::test::unit::trailers_accepts_empty_input ... ok\ntest commit::parse::test::unit::trailers_rejects_invalid_token_chars ... ok\ntest commit::parse::test::unit::trailers_rejects_line_without_separator ... ok\n\ntest result: ok. 24 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 9 tests\ntest test::component ... ok\ntest test::component_invalid - should panic ... ok\ntest test::pattern ... ok\ntest test::qualified ... ok\ntest test::qualified_invalid - should panic ... ok\ntest test::qualified_pattern ... ok\ntest test::qualified_pattern_invalid - should panic ... ok\ntest test::refname ... ok\ntest test::refname_invalid - should panic ... ok\n\ntest result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 1 test\ntest serde_impls::test::test_localtime ... ok\n\ntest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 0 tests\n\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 84 tests\ntest control::tests::test_control_socket ... ok\ntest control::tests::test_seed_unseed ... ok\ntest fingerprint::tests::matching ... ok\ntest reactor::timer::tests::test_next ... ok\ntest reactor::timer::tests::test_wake ... ok\ntest reactor::timer::tests::test_wake_exact ... ok\ntest tests::e2e::fetch_does_not_contain_rad_sigrefs_parent ... ok\ntest tests::e2e::missing_default_branch ... ok\ntest tests::e2e::test_background_foreground_fetch ... ok\ntest tests::e2e::missing_delegate_default_branch ... ok\ntest tests::e2e::test_block_prevents_connection ... ok\ntest tests::e2e::test_block_prevents_fetch ... ok\ntest tests::e2e::test_block_active_connection ... ok\ntest tests::e2e::test_catchup_on_refs_announcements ... ok\ntest tests::e2e::test_channel_reader_limit ... ok\ntest tests::e2e::test_clone ... ok\ntest tests::e2e::test_connection_crossing ... ok\ntest tests::e2e::test_dont_fetch_owned_refs ... ok\ntest tests::e2e::test_concurrent_fetches ... ok\ntest tests::e2e::test_fetch_emits_canonical_ref_update_partial_glob ... ok\ntest tests::e2e::test_fetch_followed_remotes ... ok\ntest tests::e2e::test_fetch_preserve_owned_refs ... ok\ntest tests::e2e::test_fetch_unseeded ... ok\ntest tests::e2e::test_fetch_up_to_date ... ok\ntest tests::e2e::test_fetch_emits_canonical_ref_update ... ok\ntest tests::e2e::test_inventory_sync_basic ... ok\ntest tests::e2e::test_inventory_sync_bridge ... ok\ntest tests::e2e::test_inventory_sync_ring ... ok\ntest tests::e2e::test_large_fetch ... ok\ntest tests::e2e::test_migrated_clone ... ok\ntest tests::e2e::test_missing_remote ... ok\ntest tests::e2e::test_multiple_offline_inits ... ok\ntest tests::e2e::test_non_fast_forward_identity_doc ... ok\ntest tests::e2e::test_non_fast_forward_sigrefs ... ok\ntest tests::e2e::test_outdated_delegate_sigrefs ... ok\ntest tests::e2e::test_outdated_sigrefs ... ok\ntest tests::e2e::test_inventory_sync_star ... ok\ntest tests::e2e::test_replication_invalid ... ok\ntest tests::e2e::test_replication ... ok\ntest tests::e2e::test_replication_ref_in_sigrefs ... ok\ntest tests::prop_inventory_exchange_dense ... ok\ntest tests::test_announcement_rebroadcast ... ok\ntest tests::test_announcement_rebroadcast_duplicates ... ok\ntest tests::test_announcement_rebroadcast_timestamp_filtered ... ok\ntest tests::test_announcement_relay ... ok\ntest tests::test_connection_kept_alive ... ok\ntest tests::test_disconnecting_unresponsive_peer ... ok\ntest tests::test_fetch_missing_inventory_on_gossip ... ok\ntest tests::test_fetch_missing_inventory_on_schedule ... ok\ntest tests::test_inbound_connection ... ok\ntest tests::test_init_and_seed ... ok\ntest tests::test_inventory_decode ... ok\ntest tests::test_inventory_pruning ... ok\ntest tests::test_inventory_relay ... ok\ntest tests::test_inventory_relay_bad_timestamp ... ok\ntest tests::test_inventory_sync ... ok\ntest tests::test_maintain_connections ... ok\ntest tests::test_maintain_connections_failed_attempt ... ok\ntest tests::test_maintain_connections_same_second_loop ... ok\ntest tests::test_maintain_connections_transient ... ok\ntest tests::test_orphaned_fetch_blocks_repo_from_all_nodes ... ok\ntest tests::test_outbound_connection ... ok\ntest tests::test_persistent_peer_connect ... ok\ntest tests::test_persistent_peer_reconnect_attempt ... ok\ntest tests::test_persistent_peer_reconnect_success ... ok\ntest tests::test_ping_response ... ok\ntest tests::test_queued_fetch_from_ann_same_rid ... ok\ntest tests::test_queued_fetch_from_command_same_rid ... ok\ntest tests::test_queued_fetch_max_capacity ... ok\ntest tests::test_redundant_connect ... ok\ntest tests::test_announcement_message_amplification ... ok\ntest tests::test_refs_announcement_followed ... ok\ntest tests::test_refs_announcement_no_subscribe ... ok\ntest tests::test_refs_announcement_fetch_trusted_no_inventory ... ok\ntest tests::test_refs_announcement_relay_private ... ok\ntest tests::test_refs_announcement_offline ... ok\ntest tests::test_refs_synced_event ... ok\ntest tests::test_seed_repo_subscribe ... ok\ntest tests::test_seeding ... ok\ntest wire::test::test_inventory_ann_with_extension ... ok\ntest wire::test::test_pong_message_with_extension ... ok\ntest wire::test::worker_result_clears_active_when_peer_connected ... ok\ntest wire::test::worker_result_clears_active_when_peer_disconnecting ... ok\ntest tests::test_refs_announcement_relay_public ... ok\n\ntest result: ok. 84 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 21.64s\n\n\nrunning 0 tests\n\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 10 tests\ntest fmt::test::fixture ... ok\ntest fmt::test::git2 ... ok\ntest fmt::test::zero ... ok\ntest fmt::test::gix ... ok\ntest git2::test::zero ... ok\ntest gix::test::zero ... ok\ntest str::test::fixture ... ok\ntest str::test::git2_roundtrip ... ok\ntest str::test::gix_roundtrip ... ok\ntest str::test::zero ... ok\n\ntest result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 101 tests\ntest deserializer::test::test_decode_next ... ok\ntest deserializer::test::test_unparsed ... ok\ntest deserializer::test::prop_decode_next ... ok\ntest fetcher::service::tests::test_fetch_coalescing_different_refs ... ok\ntest fetcher::test::queue::properties::capacity::bounded ... ok\ntest fetcher::test::queue::properties::capacity::capacity_reached_returns_same_item ... ok\ntest fetcher::test::queue::properties::capacity::rejection ... ok\ntest fetcher::test::queue::properties::dequeue::drained_queue_returns_none ... ok\ntest fetcher::test::queue::properties::dequeue::empty_queue_returns_none ... ok\ntest fetcher::test::queue::properties::dequeue::enables_reenqueue ... ok\ntest fetcher::test::queue::properties::capacity::restored_after_dequeue ... ok\ntest fetcher::test::queue::properties::equality::reflexive ... ok\ntest fetcher::test::queue::properties::equality::symmetric ... ok\ntest fetcher::test::queue::properties::fifo::interleaved_operations ... ok\ntest fetcher::test::queue::properties::fifo::ordering ... ok\ntest fetcher::test::queue::properties::equality::transitive ... ok\ntest fetcher::test::queue::properties::merge::combines_refs ... ok\ntest fetcher::test::queue::properties::merge::different_rid_accepted ... ok\ntest fetcher::test::queue::properties::merge::does_not_increase_queue_length ... ok\ntest fetcher::test::queue::properties::merge::longer_timeout_preserved ... ok\ntest fetcher::test::queue::properties::merge::empty_refs_fetches_all ... ok\ntest fetcher::test::queue::properties::merge::same_rid_merges_anywhere_in_queue ... ok\ntest fetcher::test::queue::unit::capacity_takes_precedence_over_merge_for_new_items ... ok\ntest fetcher::test::queue::unit::empty_refs_items_can_be_equal ... ok\ntest fetcher::test::queue::unit::max_timeout_accepted ... ok\ntest fetcher::test::queue::unit::merge_preserves_position_in_queue ... ok\ntest fetcher::test::queue::unit::zero_timeout_accepted ... ok\ntest fetcher::test::state::command::cancel::cancellation_is_isolated ... ok\ntest fetcher::test::state::command::cancel::non_existent_returns_unexpected ... ok\ntest fetcher::test::state::command::cancel::ongoing_and_queued ... ok\ntest fetcher::test::state::command::cancel::single_ongoing ... ok\ntest fetcher::test::queue::properties::merge::succeed_when_at_capacity ... ok\ntest fetcher::test::state::command::fetch::fetch_after_previous_completed ... ok\ntest fetcher::test::state::command::fetch::fetch_different_repo_same_node_within_capacity ... ok\ntest fetcher::test::state::command::fetch::fetch_at_capacity_enqueues ... ok\ntest fetcher::test::state::command::fetch::fetch_duplicate_returns_already_fetching ... ok\ntest fetcher::test::state::command::fetch::fetch_queue_merge_empty_refs_fetches_all ... ok\ntest fetcher::test::state::command::fetch::fetch_queue_merge_takes_longer_timeout ... ok\ntest fetcher::test::state::command::fetch::fetch_queue_merges_already_queued ... ok\ntest fetcher::test::state::command::fetch::fetch_same_repo_different_nodes_queues_second ... ok\ntest fetcher::test::state::command::fetch::fetch_queue_rejected_capacity_reached ... ok\ntest fetcher::test::state::command::fetch::fetch_start_first_fetch_for_node ... ok\ntest fetcher::test::state::command::fetch::fetch_same_repo_different_refs_enqueues ... ok\ntest fetcher::test::state::command::fetched::complete_single_ongoing ... ok\ntest fetcher::test::state::command::fetched::complete_one_of_multiple ... ok\ntest fetcher::test::state::command::fetched::non_existent_returns_not_found ... ok\ntest fetcher::test::state::command::fetched::complete_then_dequeue_fifo ... ok\ntest fetcher::test::state::command::fetched::stale_from_does_not_clear_active ... ok\ntest fetcher::test::state::concurrent::fetched_then_cancel ... ok\ntest fetcher::test::state::concurrent::interleaved_operations ... ok\ntest fetcher::test::state::config::min_queue_size ... ok\ntest fetcher::test::state::dequeue::cannot_dequeue_while_node_at_capacity ... ok\ntest fetcher::test::state::dequeue::empty_queue_returns_none ... ok\ntest fetcher::test::state::dequeue::maintains_fifo_order ... ok\ntest fetcher::test::state::invariant::orphaned_active_blocks_repo_from_all_nodes ... ok\ntest fetcher::test::state::invariant::queue_integrity_after_merge ... ok\ntest fetcher::test::state::config::high_concurrency ... ok\ntest fetcher::test::state::multinode::independent_queues ... ok\ntest service::filter::test::compatible ... ok\ntest service::filter::test::test_parameters ... ok\ntest service::filter::test::test_sizes ... ok\ntest service::gossip::store::test::test_announced ... ok\ntest service::limiter::test::test_limiter_different_rates ... ok\ntest service::limiter::test::test_limiter_multi ... ok\ntest service::limiter::test::test_limiter_refill ... ok\ntest fetcher::test::state::multinode::high_count ... ok\ntest service::message::tests::test_inventory_limit ... ok\ntest service::message::tests::prop_refs_announcement_signing ... ok\ntest service::message::tests::test_ref_remote_limit ... ok\ntest wire::frame::test::test_encode_git_large ... ok\ntest wire::frame::test::test_stream_id ... ok\ntest service::message::tests::test_node_announcement_validate ... ok\ntest wire::message::tests::prop_roundtrip_address ... ok\ntest wire::message::tests::prop_roundtrip_message ... ok\ntest wire::message::tests::prop_zero_bytes_encode_decode ... ok\ntest wire::message::tests::test_inv_ann_max_size ... ok\ntest wire::message::tests::test_node_ann_max_size ... ok\ntest wire::message::tests::test_ping_encode_size_overflow - should panic ... ok\ntest wire::message::tests::test_pingpong_encode_max_size ... ok\ntest wire::message::tests::test_pong_encode_size_overflow - should panic ... ok\ntest wire::message::tests::prop_message_decoder ... ok\ntest wire::tests::prop_oid ... ok\ntest wire::tests::prop_roundtrip_filter ... ok\ntest wire::tests::prop_roundtrip_publickey ... ok\ntest wire::tests::prop_roundtrip_refs ... ok\ntest wire::tests::prop_roundtrip_repoid ... ok\ntest wire::tests::prop_roundtrip_tuple ... ok\ntest wire::tests::prop_roundtrip_u16 ... ok\ntest wire::tests::prop_roundtrip_u32 ... ok\ntest wire::tests::prop_roundtrip_u64 ... ok\ntest wire::tests::prop_roundtrip_vec ... ok\ntest wire::tests::prop_signature ... ok\ntest wire::tests::prop_string ... ok\ntest wire::tests::test_alias ... ok\ntest wire::tests::test_bounded_vec_limit ... ok\ntest wire::tests::test_filter_invalid ... ok\ntest wire::tests::test_string ... ok\ntest wire::varint::test::prop_roundtrip_varint ... ok\ntest wire::varint::test::test_encode_overflow - should panic ... ok\ntest wire::varint::test::test_encoding ... ok\ntest wire::message::tests::test_refs_ann_max_size ... ok\n\ntest result: ok. 101 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.44s\n\n\nrunning 12 tests\ntest protocol::tests::test_capabilities ... ok\ntest protocol::tests::test_empty ... ok\ntest protocol::tests::test_fetch ... ok\ntest protocol::tests::test_fetch_whitespace ... ok\ntest protocol::tests::test_invalid ... ok\ntest protocol::tests::test_list ... ok\ntest protocol::tests::test_list_for_push ... ok\ntest protocol::tests::test_option ... ok\ntest protocol::tests::test_option_whitespace_preservation ... ok\ntest protocol::tests::test_push ... ok\ntest protocol::tests::test_push_delete ... ok\ntest protocol::tests::test_push_force ... ok\n\ntest result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 0 tests\n\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 0 tests\n\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 0 tests\n\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 21 tests\ntest ansi::tests::colors_disabled ... ok\ntest ansi::tests::colors_enabled ... ok\ntest ansi::tests::wrapping ... ok\ntest cell::test::test_width ... ok\ntest element::test::test_spaced ... ok\ntest element::test::test_width ... ok\ntest element::test::test_truncate ... ok\ntest table::test::test_table ... ok\ntest table::test::test_table_border_maximized ... ok\ntest table::test::test_table_border ... ok\ntest table::test::test_table_border_truncated ... ok\ntest table::test::test_table_truncate ... ok\ntest table::test::test_table_unicode ... ok\ntest table::test::test_table_unicode_truncate ... ok\ntest table::test::test_truncate ... ok\ntest textarea::test::test_wrapping_code_block ... ok\ntest textarea::test::test_wrapping ... ok\ntest textarea::test::test_wrapping_fenced_block ... ok\ntest vstack::test::test_vstack ... ok\ntest vstack::test::test_vstack_maximize ... ok\ntest textarea::test::test_wrapping_paragraphs ... ok\n\ntest result: ok. 21 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 0 tests\n\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 1 test\ntest crates/radicle/src/cob/patch/encoding/review.rs - cob::patch::encoding::review::Review (line 23) ... ignored\n\ntest result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 0 tests\n\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 0 tests\n\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 1 test\ntest crates/radicle-cob/src/backend/stable.rs - backend::stable::with_advanced_timestamp (line 56) ... ignored\n\ntest result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\nall doctests ran in 0.12s; merged doctests compilation took 0.12s\n\nrunning 0 tests\n\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 0 tests\n\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 0 tests\n\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 0 tests\n\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 0 tests\n\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 0 tests\n\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 0 tests\n\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 0 tests\n\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 0 tests\n\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 0 tests\n\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 6 tests\ntest crates/radicle-protocol/src/bounded.rs - bounded::BoundedVec<T,N>::collect_from (line 30) ... ok\ntest crates/radicle-protocol/src/bounded.rs - bounded::BoundedVec<T,N>::max (line 96) ... ok\ntest crates/radicle-protocol/src/bounded.rs - bounded::BoundedVec<T,N>::push (line 122) ... ok\ntest crates/radicle-protocol/src/bounded.rs - bounded::BoundedVec<T,N>::truncate (line 50) ... ok\ntest crates/radicle-protocol/src/bounded.rs - bounded::BoundedVec<T,N>::unbound (line 149) ... ok\ntest crates/radicle-protocol/src/bounded.rs - bounded::BoundedVec<T,N>::with_capacity (line 66) ... ok\n\ntest result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\nall doctests ran in 0.61s; merged doctests compilation took 0.60s\n\nrunning 0 tests\n\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 0 tests\n\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 1 test\ntest crates/radicle-term/src/table.rs - table (line 4) ... ok\n\ntest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\nall doctests ran in 0.27s; merged doctests compilation took 0.27s\n\nrunning 0 tests\n\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n",
"stderr": " Finished `test` profile [unoptimized + debuginfo] target(s) in 0.26s\n Running unittests src/lib.rs (/ci/cache/cargo-target/debug/deps/radicle-f47a7c2ba456ab00)\n Running unittests src/lib.rs (/ci/cache/cargo-target/debug/deps/radicle_cli-6bfba036d8f69ef1)\n Running unittests src/main.rs (/ci/cache/cargo-target/debug/deps/rad-9617691c862a9839)\n Running tests/commands.rs (/ci/cache/cargo-target/debug/deps/commands-f88e037b1bdbeca7)\n Running unittests src/lib.rs (/ci/cache/cargo-target/debug/deps/radicle_cli_test-39ff3967fcfd38a1)\n Running unittests src/lib.rs (/ci/cache/cargo-target/debug/deps/radicle_cob-1ff8ee99f73a113c)\n Running unittests src/lib.rs (/ci/cache/cargo-target/debug/deps/radicle_core-f9d12dcddf722a8f)\n Running unittests src/lib.rs (/ci/cache/cargo-target/debug/deps/radicle_crypto-296ceac40b7fe69b)\n Running unittests src/lib.rs (/ci/cache/cargo-target/debug/deps/radicle_dag-e10cdde88570a8e0)\n Running unittests src/lib.rs (/ci/cache/cargo-target/debug/deps/radicle_fetch-92b111a684cd2a9a)\n Running unittests src/lib.rs (/ci/cache/cargo-target/debug/deps/radicle_git_metadata-41b02b9ef3e2236d)\n Running unittests src/lib.rs (/ci/cache/cargo-target/debug/deps/radicle_git_ref_format-2868a65b3ff2c590)\n Running unittests src/lib.rs (/ci/cache/cargo-target/debug/deps/radicle_localtime-ec55a7767b981c91)\n Running unittests src/lib.rs (/ci/cache/cargo-target/debug/deps/radicle_log-aa8a5607eeb05b0d)\n Running unittests src/lib.rs (/ci/cache/cargo-target/debug/deps/radicle_node-aaa9e54e49654ece)\n Running unittests src/main.rs (/ci/cache/cargo-target/debug/deps/radicle_node-388c037e59b06fbe)\n Running unittests src/lib.rs (/ci/cache/cargo-target/debug/deps/radicle_oid-f350725ba9f62eb5)\n Running unittests src/lib.rs (/ci/cache/cargo-target/debug/deps/radicle_protocol-d984e15bcd2f38e3)\n Running unittests src/main.rs (/ci/cache/cargo-target/debug/deps/git_remote_rad-ec460ed6e139fb1e)\n Running unittests src/main.rs (/ci/cache/cargo-target/debug/deps/radicle_schemars-dd3c5e3b8cead261)\n Running unittests src/lib.rs (/ci/cache/cargo-target/debug/deps/radicle_signals-e91beff5378165d8)\n Running unittests src/lib.rs (/ci/cache/cargo-target/debug/deps/radicle_systemd-77e26f6a607513aa)\n Running unittests src/lib.rs (/ci/cache/cargo-target/debug/deps/radicle_term-afa03b1828121040)\n Running unittests src/lib.rs (/ci/cache/cargo-target/debug/deps/radicle_windows-942926f7348a8563)\n Doc-tests radicle\n Doc-tests radicle_cli\n Doc-tests radicle_cli_test\n Doc-tests radicle_cob\n Doc-tests radicle_core\n Doc-tests radicle_crypto\n Doc-tests radicle_dag\n Doc-tests radicle_fetch\n Doc-tests radicle_git_metadata\n Doc-tests radicle_git_ref_format\n Doc-tests radicle_localtime\n Doc-tests radicle_log\n Doc-tests radicle_node\n Doc-tests radicle_oid\n Doc-tests radicle_protocol\n Doc-tests radicle_signals\n Doc-tests radicle_systemd\n Doc-tests radicle_term\n Doc-tests radicle_windows\n",
"timestamp": {
"secs_since_epoch": 1782142562,
"nanos_since_epoch": 981543018
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "cargo_test",
"timestamp": {
"secs_since_epoch": 1782142563,
"nanos_since_epoch": 748837218
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "shell",
"shell": "# Because of a (temporary) limitation in Ambient, we need to set\n# these variables manually. Once Ambient manages environment\n# variables better, these can be deleted.\nexport CARGO_TARGET_DIR=/workspace/cache\nexport CARGO_HOME=/workspace/deps\nexport HOME=/root\nexport PATH=\"/root/.cargo/bin:$PATH\"\nexport RUSTDOCFLAGS='-D warnings'\n\ncargo doc --workspace --no-deps --all-features\n",
"timestamp": {
"secs_since_epoch": 1782142563,
"nanos_since_epoch": 748966677
},
"log_source": "Plan"
}{
"type": "start_program",
"argv": [
{
"Unix": [
98,
97,
115,
104
]
},
{
"Unix": [
45,
99
]
},
{
"Unix": [
115,
101,
116,
32,
45,
120,
101,
117,
111,
32,
112,
105,
112,
101,
102,
97,
105,
108,
10,
35,
32,
66,
101,
99,
97,
117,
115,
101,
32,
111,
102,
32,
97,
32,
40,
116,
101,
109,
112,
111,
114,
97,
114,
121,
41,
32,
108,
105,
109,
105,
116,
97,
116,
105,
111,
110,
32,
105,
110,
32,
65,
109,
98,
105,
101,
110,
116,
44,
32,
119,
101,
32,
110,
101,
101,
100,
32,
116,
111,
32,
115,
101,
116,
10,
35,
32,
116,
104,
101,
115,
101,
32,
118,
97,
114,
105,
97,
98,
108,
101,
115,
32,
109,
97,
110,
117,
97,
108,
108,
121,
46,
32,
79,
110,
99,
101,
32,
65,
109,
98,
105,
101,
110,
116,
32,
109,
97,
110,
97,
103,
101,
115,
32,
101,
110,
118,
105,
114,
111,
110,
109,
101,
110,
116,
10,
35,
32,
118,
97,
114,
105,
97,
98,
108,
101,
115,
32,
98,
101,
116,
116,
101,
114,
44,
32,
116,
104,
101,
115,
101,
32,
99,
97,
110,
32,
98,
101,
32,
100,
101,
108,
101,
116,
101,
100,
46,
10,
101,
120,
112,
111,
114,
116,
32,
67,
65,
82,
71,
79,
95,
84,
65,
82,
71,
69,
84,
95,
68,
73,
82,
61,
47,
119,
111,
114,
107,
115,
112,
97,
99,
101,
47,
99,
97,
99,
104,
101,
10,
101,
120,
112,
111,
114,
116,
32,
67,
65,
82,
71,
79,
95,
72,
79,
77,
69,
61,
47,
119,
111,
114,
107,
115,
112,
97,
99,
101,
47,
100,
101,
112,
115,
10,
101,
120,
112,
111,
114,
116,
32,
72,
79,
77,
69,
61,
47,
114,
111,
111,
116,
10,
101,
120,
112,
111,
114,
116,
32,
80,
65,
84,
72,
61,
34,
47,
114,
111,
111,
116,
47,
46,
99,
97,
114,
103,
111,
47,
98,
105,
110,
58,
36,
80,
65,
84,
72,
34,
10,
101,
120,
112,
111,
114,
116,
32,
82,
85,
83,
84,
68,
79,
67,
70,
76,
65,
71,
83,
61,
39,
45,
68,
32,
119,
97,
114,
110,
105,
110,
103,
115,
39,
10,
10,
99,
97,
114,
103,
111,
32,
100,
111,
99,
32,
45,
45,
119,
111,
114,
107,
115,
112,
97,
99,
101,
32,
45,
45,
110,
111,
45,
100,
101,
112,
115,
32,
45,
45,
97,
108,
108,
45,
102,
101,
97,
116,
117,
114,
101,
115,
10,
10
]
}
],
"timestamp": {
"secs_since_epoch": 1782142563,
"nanos_since_epoch": 749193786
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "",
"stderr": "+ export CARGO_TARGET_DIR=/workspace/cache\n+ CARGO_TARGET_DIR=/workspace/cache\n+ export CARGO_HOME=/workspace/deps\n+ CARGO_HOME=/workspace/deps\n+ export HOME=/root\n+ HOME=/root\n+ export PATH=/root/.cargo/bin:/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin\n+ PATH=/root/.cargo/bin:/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin\n+ export 'RUSTDOCFLAGS=-D warnings'\n+ RUSTDOCFLAGS='-D warnings'\n+ cargo doc --workspace --no-deps --all-features\n Checking radicle-git-ref-format v0.1.0 (/ci/src/crates/radicle-git-ref-format)\n Checking radicle-crypto v0.17.0 (/ci/src/crates/radicle-crypto)\n Checking radicle-oid v0.2.0 (/ci/src/crates/radicle-oid)\n Checking radicle-localtime v0.1.0 (/ci/src/crates/radicle-localtime)\n Checking radicle-git-metadata v0.2.0 (/ci/src/crates/radicle-git-metadata)\n Checking radicle-dag v0.10.0 (/ci/src/crates/radicle-dag)\n Compiling radicle v0.24.0 (/ci/src/crates/radicle)\n Checking radicle-cob v0.20.0 (/ci/src/crates/radicle-cob)\n Checking radicle-core v0.3.0 (/ci/src/crates/radicle-core)\n Checking radicle-signals v0.11.0 (/ci/src/crates/radicle-signals)\n Checking radicle-term v0.18.0 (/ci/src/crates/radicle-term)\n Checking radicle-log v0.1.0 (/ci/src/crates/radicle-log)\n Compiling radicle-cli v0.21.0 (/ci/src/crates/radicle-cli)\n Compiling radicle-node v0.20.0 (/ci/src/crates/radicle-node)\n Compiling radicle-remote-helper v0.17.0 (/ci/src/crates/radicle-remote-helper)\n Checking radicle-systemd v0.13.0 (/ci/src/crates/radicle-systemd)\n Documenting radicle-systemd v0.13.0 (/ci/src/crates/radicle-systemd)\n Documenting radicle-log v0.1.0 (/ci/src/crates/radicle-log)\n Checking radicle-fetch v0.20.0 (/ci/src/crates/radicle-fetch)\n Checking radicle-protocol v0.8.0 (/ci/src/crates/radicle-protocol)\n Documenting radicle-cli v0.21.0 (/ci/src/crates/radicle-cli)\n Documenting radicle-remote-helper v0.17.0 (/ci/src/crates/radicle-remote-helper)\n Documenting radicle-node v0.20.0 (/ci/src/crates/radicle-node)\n Documenting radicle-protocol v0.8.0 (/ci/src/crates/radicle-protocol)\n Documenting radicle-schemars v0.8.0 (/ci/src/crates/radicle-schemars)\n Documenting radicle-fetch v0.20.0 (/ci/src/crates/radicle-fetch)\n Documenting radicle-cli-test v0.13.0 (/ci/src/crates/radicle-cli-test)\n Documenting radicle-term v0.18.0 (/ci/src/crates/radicle-term)\n Documenting radicle v0.24.0 (/ci/src/crates/radicle)\n Documenting radicle-signals v0.11.0 (/ci/src/crates/radicle-signals)\n Documenting radicle-cob v0.20.0 (/ci/src/crates/radicle-cob)\n Documenting radicle-core v0.3.0 (/ci/src/crates/radicle-core)\n Documenting radicle-oid v0.2.0 (/ci/src/crates/radicle-oid)\n Documenting radicle-crypto v0.17.0 (/ci/src/crates/radicle-crypto)\n Documenting radicle-localtime v0.1.0 (/ci/src/crates/radicle-localtime)\n Documenting radicle-git-ref-format v0.1.0 (/ci/src/crates/radicle-git-ref-format)\n Documenting radicle-git-metadata v0.2.0 (/ci/src/crates/radicle-git-metadata)\n Documenting radicle-dag v0.10.0 (/ci/src/crates/radicle-dag)\n Documenting radicle-windows v0.1.0 (/ci/src/crates/radicle-windows)\n Finished `dev` profile [unoptimized + debuginfo] target(s) in 19.04s\n Generated /workspace/cache/doc/radicle/index.html and 21 other files\n",
"timestamp": {
"secs_since_epoch": 1782142582,
"nanos_since_epoch": 886663956
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "shell",
"shell": "# Because of a (temporary) limitation in Ambient, we need to set\n# these variables manually. Once Ambient manages environment\n# variables better, these can be deleted.\nexport CARGO_TARGET_DIR=/workspace/cache\nexport CARGO_HOME=/workspace/deps\nexport HOME=/root\nexport PATH=\"/root/.cargo/bin:$PATH\"\nexport RUSTDOCFLAGS='-D warnings'\n\ncargo doc --workspace --no-deps --all-features\n",
"timestamp": {
"secs_since_epoch": 1782142582,
"nanos_since_epoch": 932311159
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "shell",
"shell": "# Because of a (temporary) limitation in Ambient, we need to set\n# these variables manually. Once Ambient manages environment\n# variables better, these can be deleted.\nexport CARGO_TARGET_DIR=/workspace/cache\nexport CARGO_HOME=/workspace/deps\nexport HOME=/root\nexport PATH=\"/root/.cargo/bin:$PATH\"\n\n# These are based on debian/control.\nexport DEBEMAIL=liw@liw.fi\nexport DEBFULLNAME=\"Lars Wirzenius\"\n\n# Clean up after tests and documentation building. The Debian\n# package building tools do not want changes outside the\n# `debian` directory, compared to what is committed to Git, from\n# which the \"upstream tarball\" is created.\ngit reset --hard\ngit clean -fdx\ngit status --ignored\n\n# Update debian/changelog with a new version so that every run\n# creates a newer version. This avoids us having to update the\n# file manually for every CI run.\nV=\"$(dpkg-parsechangelog -SVersion | sed 's/-[^-]*$//')\"\nT=\"$(date -u \"+%Y%m%dT%H%M%S\")\"\nversion=\"$V.ci$T-1\"\ndch -v \"$version\" \"CI build under Ambient.\"\ndch -r ''\n",
"timestamp": {
"secs_since_epoch": 1782142582,
"nanos_since_epoch": 939443116
},
"log_source": "Plan"
}{
"type": "start_program",
"argv": [
{
"Unix": [
98,
97,
115,
104
]
},
{
"Unix": [
45,
99
]
},
{
"Unix": [
115,
101,
116,
32,
45,
120,
101,
117,
111,
32,
112,
105,
112,
101,
102,
97,
105,
108,
10,
35,
32,
66,
101,
99,
97,
117,
115,
101,
32,
111,
102,
32,
97,
32,
40,
116,
101,
109,
112,
111,
114,
97,
114,
121,
41,
32,
108,
105,
109,
105,
116,
97,
116,
105,
111,
110,
32,
105,
110,
32,
65,
109,
98,
105,
101,
110,
116,
44,
32,
119,
101,
32,
110,
101,
101,
100,
32,
116,
111,
32,
115,
101,
116,
10,
35,
32,
116,
104,
101,
115,
101,
32,
118,
97,
114,
105,
97,
98,
108,
101,
115,
32,
109,
97,
110,
117,
97,
108,
108,
121,
46,
32,
79,
110,
99,
101,
32,
65,
109,
98,
105,
101,
110,
116,
32,
109,
97,
110,
97,
103,
101,
115,
32,
101,
110,
118,
105,
114,
111,
110,
109,
101,
110,
116,
10,
35,
32,
118,
97,
114,
105,
97,
98,
108,
101,
115,
32,
98,
101,
116,
116,
101,
114,
44,
32,
116,
104,
101,
115,
101,
32,
99,
97,
110,
32,
98,
101,
32,
100,
101,
108,
101,
116,
101,
100,
46,
10,
101,
120,
112,
111,
114,
116,
32,
67,
65,
82,
71,
79,
95,
84,
65,
82,
71,
69,
84,
95,
68,
73,
82,
61,
47,
119,
111,
114,
107,
115,
112,
97,
99,
101,
47,
99,
97,
99,
104,
101,
10,
101,
120,
112,
111,
114,
116,
32,
67,
65,
82,
71,
79,
95,
72,
79,
77,
69,
61,
47,
119,
111,
114,
107,
115,
112,
97,
99,
101,
47,
100,
101,
112,
115,
10,
101,
120,
112,
111,
114,
116,
32,
72,
79,
77,
69,
61,
47,
114,
111,
111,
116,
10,
101,
120,
112,
111,
114,
116,
32,
80,
65,
84,
72,
61,
34,
47,
114,
111,
111,
116,
47,
46,
99,
97,
114,
103,
111,
47,
98,
105,
110,
58,
36,
80,
65,
84,
72,
34,
10,
10,
35,
32,
84,
104,
101,
115,
101,
32,
97,
114,
101,
32,
98,
97,
115,
101,
100,
32,
111,
110,
32,
100,
101,
98,
105,
97,
110,
47,
99,
111,
110,
116,
114,
111,
108,
46,
10,
101,
120,
112,
111,
114,
116,
32,
68,
69,
66,
69,
77,
65,
73,
76,
61,
108,
105,
119,
64,
108,
105,
119,
46,
102,
105,
10,
101,
120,
112,
111,
114,
116,
32,
68,
69,
66,
70,
85,
76,
76,
78,
65,
77,
69,
61,
34,
76,
97,
114,
115,
32,
87,
105,
114,
122,
101,
110,
105,
117,
115,
34,
10,
10,
35,
32,
67,
108,
101,
97,
110,
32,
117,
112,
32,
97,
102,
116,
101,
114,
32,
116,
101,
115,
116,
115,
32,
97,
110,
100,
32,
100,
111,
99,
117,
109,
101,
110,
116,
97,
116,
105,
111,
110,
32,
98,
117,
105,
108,
100,
105,
110,
103,
46,
32,
84,
104,
101,
32,
68,
101,
98,
105,
97,
110,
10,
35,
32,
112,
97,
99,
107,
97,
103,
101,
32,
98,
117,
105,
108,
100,
105,
110,
103,
32,
116,
111,
111,
108,
115,
32,
100,
111,
32,
110,
111,
116,
32,
119,
97,
110,
116,
32,
99,
104,
97,
110,
103,
101,
115,
32,
111,
117,
116,
115,
105,
100,
101,
32,
116,
104,
101,
10,
35,
32,
96,
100,
101,
98,
105,
97,
110,
96,
32,
100,
105,
114,
101,
99,
116,
111,
114,
121,
44,
32,
99,
111,
109,
112,
97,
114,
101,
100,
32,
116,
111,
32,
119,
104,
97,
116,
32,
105,
115,
32,
99,
111,
109,
109,
105,
116,
116,
101,
100,
32,
116,
111,
32,
71,
105,
116,
44,
32,
102,
114,
111,
109,
10,
35,
32,
119,
104,
105,
99,
104,
32,
116,
104,
101,
32,
34,
117,
112,
115,
116,
114,
101,
97,
109,
32,
116,
97,
114,
98,
97,
108,
108,
34,
32,
105,
115,
32,
99,
114,
101,
97,
116,
101,
100,
46,
10,
103,
105,
116,
32,
114,
101,
115,
101,
116,
32,
45,
45,
104,
97,
114,
100,
10,
103,
105,
116,
32,
99,
108,
101,
97,
110,
32,
45,
102,
100,
120,
10,
103,
105,
116,
32,
115,
116,
97,
116,
117,
115,
32,
45,
45,
105,
103,
110,
111,
114,
101,
100,
10,
10,
35,
32,
85,
112,
100,
97,
116,
101,
32,
100,
101,
98,
105,
97,
110,
47,
99,
104,
97,
110,
103,
101,
108,
111,
103,
32,
119,
105,
116,
104,
32,
97,
32,
110,
101,
119,
32,
118,
101,
114,
115,
105,
111,
110,
32,
115,
111,
32,
116,
104,
97,
116,
32,
101,
118,
101,
114,
121,
32,
114,
117,
110,
10,
35,
32,
99,
114,
101,
97,
116,
101,
115,
32,
97,
32,
110,
101,
119,
101,
114,
32,
118,
101,
114,
115,
105,
111,
110,
46,
32,
84,
104,
105,
115,
32,
97,
118,
111,
105,
100,
115,
32,
117,
115,
32,
104,
97,
118,
105,
110,
103,
32,
116,
111,
32,
117,
112,
100,
97,
116,
101,
32,
116,
104,
101,
10,
35,
32,
102,
105,
108,
101,
32,
109,
97,
110,
117,
97,
108,
108,
121,
32,
102,
111,
114,
32,
101,
118,
101,
114,
121,
32,
67,
73,
32,
114,
117,
110,
46,
10,
86,
61,
34,
36,
40,
100,
112,
107,
103,
45,
112,
97,
114,
115,
101,
99,
104,
97,
110,
103,
101,
108,
111,
103,
32,
45,
83,
86,
101,
114,
115,
105,
111,
110,
32,
124,
32,
115,
101,
100,
32,
39,
115,
47,
45,
91,
94,
45,
93,
42,
36,
47,
47,
39,
41,
34,
10,
84,
61,
34,
36,
40,
100,
97,
116,
101,
32,
45,
117,
32,
34,
43,
37,
89,
37,
109,
37,
100,
84,
37,
72,
37,
77,
37,
83,
34,
41,
34,
10,
118,
101,
114,
115,
105,
111,
110,
61,
34,
36,
86,
46,
99,
105,
36,
84,
45,
49,
34,
10,
100,
99,
104,
32,
45,
118,
32,
34,
36,
118,
101,
114,
115,
105,
111,
110,
34,
32,
34,
67,
73,
32,
98,
117,
105,
108,
100,
32,
117,
110,
100,
101,
114,
32,
65,
109,
98,
105,
101,
110,
116,
46,
34,
10,
100,
99,
104,
32,
45,
114,
32,
39,
39,
10,
10
]
}
],
"timestamp": {
"secs_since_epoch": 1782142582,
"nanos_since_epoch": 955072217
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "HEAD is now at 589a95870 remove components from toolchain file\nHEAD detached from 9c06e1651\nnothing to commit, working tree clean\n",
"stderr": "+ export CARGO_TARGET_DIR=/workspace/cache\n+ CARGO_TARGET_DIR=/workspace/cache\n+ export CARGO_HOME=/workspace/deps\n+ CARGO_HOME=/workspace/deps\n+ export HOME=/root\n+ HOME=/root\n+ export PATH=/root/.cargo/bin:/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin\n+ PATH=/root/.cargo/bin:/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin\n+ export DEBEMAIL=liw@liw.fi\n+ DEBEMAIL=liw@liw.fi\n+ export 'DEBFULLNAME=Lars Wirzenius'\n+ DEBFULLNAME='Lars Wirzenius'\n+ git reset --hard\n+ git clean -fdx\n+ git status --ignored\n++ dpkg-parsechangelog -SVersion\n++ sed 's/-[^-]*$//'\n+ V=1.2.1\n++ date -u +%Y%m%dT%H%M%S\n+ T=20260622T153623\n+ version=1.2.1.ci20260622T153623-1\n+ dch -v 1.2.1.ci20260622T153623-1 'CI build under Ambient.'\n+ dch -r ''\n",
"timestamp": {
"secs_since_epoch": 1782142583,
"nanos_since_epoch": 207750892
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "shell",
"shell": "# Because of a (temporary) limitation in Ambient, we need to set\n# these variables manually. Once Ambient manages environment\n# variables better, these can be deleted.\nexport CARGO_TARGET_DIR=/workspace/cache\nexport CARGO_HOME=/workspace/deps\nexport HOME=/root\nexport PATH=\"/root/.cargo/bin:$PATH\"\n\n# These are based on debian/control.\nexport DEBEMAIL=liw@liw.fi\nexport DEBFULLNAME=\"Lars Wirzenius\"\n\n# Clean up after tests and documentation building. The Debian\n# package building tools do not want changes outside the\n# `debian` directory, compared to what is committed to Git, from\n# which the \"upstream tarball\" is created.\ngit reset --hard\ngit clean -fdx\ngit status --ignored\n\n# Update debian/changelog with a new version so that every run\n# creates a newer version. This avoids us having to update the\n# file manually for every CI run.\nV=\"$(dpkg-parsechangelog -SVersion | sed 's/-[^-]*$//')\"\nT=\"$(date -u \"+%Y%m%dT%H%M%S\")\"\nversion=\"$V.ci$T-1\"\ndch -v \"$version\" \"CI build under Ambient.\"\ndch -r ''\n",
"timestamp": {
"secs_since_epoch": 1782142583,
"nanos_since_epoch": 208258592
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "deb",
"packages": ".",
"timestamp": {
"secs_since_epoch": 1782142583,
"nanos_since_epoch": 208454832
},
"log_source": "Plan"
}{
"type": "start_program",
"argv": [
{
"Unix": [
47,
98,
105,
110,
47,
98,
97,
115,
104
]
},
{
"Unix": [
45,
99
]
},
{
"Unix": [
35,
33,
47,
117,
115,
114,
47,
98,
105,
110,
47,
101,
110,
118,
32,
98,
97,
115,
104,
10,
115,
101,
116,
32,
45,
120,
101,
117,
111,
32,
112,
105,
112,
101,
102,
97,
105,
108,
10,
10,
101,
99,
104,
111,
32,
34,
80,
65,
84,
72,
32,
97,
116,
32,
115,
116,
97,
114,
116,
58,
32,
36,
80,
65,
84,
72,
34,
10,
101,
120,
112,
111,
114,
116,
32,
80,
65,
84,
72,
61,
34,
47,
114,
111,
111,
116,
47,
46,
99,
97,
114,
103,
111,
47,
98,
105,
110,
58,
36,
80,
65,
84,
72,
34,
10,
101,
120,
112,
111,
114,
116,
32,
67,
65,
82,
71,
79,
95,
72,
79,
77,
69,
61,
47,
99,
105,
47,
100,
101,
112,
115,
10,
101,
120,
112,
111,
114,
116,
32,
68,
69,
66,
69,
77,
65,
73,
76,
61,
108,
105,
119,
64,
108,
105,
119,
46,
102,
105,
10,
101,
120,
112,
111,
114,
116,
32,
68,
69,
66,
70,
85,
76,
76,
78,
65,
77,
69,
61,
34,
76,
97,
114,
115,
32,
87,
105,
114,
122,
101,
110,
105,
117,
115,
34,
10,
47,
98,
105,
110,
47,
101,
110,
118,
10,
10,
99,
111,
109,
109,
97,
110,
100,
32,
45,
118,
32,
99,
97,
114,
103,
111,
10,
99,
111,
109,
109,
97,
110,
100,
32,
45,
118,
32,
114,
117,
115,
116,
99,
10,
10,
99,
97,
114,
103,
111,
32,
45,
45,
118,
101,
114,
115,
105,
111,
110,
10,
114,
117,
115,
116,
99,
32,
45,
45,
118,
101,
114,
115,
105,
111,
110,
10,
10,
35,
32,
71,
101,
116,
32,
110,
97,
109,
101,
32,
97,
110,
100,
32,
118,
101,
114,
115,
105,
111,
110,
32,
111,
102,
32,
115,
111,
117,
114,
99,
101,
32,
112,
97,
99,
107,
97,
103,
101,
46,
10,
110,
97,
109,
101,
61,
34,
36,
40,
100,
112,
107,
103,
45,
112,
97,
114,
115,
101,
99,
104,
97,
110,
103,
101,
108,
111,
103,
32,
45,
83,
83,
111,
117,
114,
99,
101,
41,
34,
10,
118,
101,
114,
115,
105,
111,
110,
61,
34,
36,
40,
100,
112,
107,
103,
45,
112,
97,
114,
115,
101,
99,
104,
97,
110,
103,
101,
108,
111,
103,
32,
45,
83,
86,
101,
114,
115,
105,
111,
110,
41,
34,
10,
10,
35,
32,
71,
101,
116,
32,
117,
112,
115,
116,
114,
101,
97,
109,
32,
118,
101,
114,
115,
105,
111,
110,
58,
32,
101,
118,
101,
114,
121,
116,
104,
105,
110,
103,
32,
98,
101,
102,
111,
114,
101,
32,
116,
104,
101,
32,
108,
97,
115,
116,
32,
100,
97,
115,
104,
46,
10,
117,
118,
61,
34,
36,
40,
101,
99,
104,
111,
32,
34,
36,
118,
101,
114,
115,
105,
111,
110,
34,
32,
124,
32,
115,
101,
100,
32,
39,
115,
47,
45,
91,
94,
45,
93,
42,
36,
47,
47,
39,
41,
34,
10,
10,
35,
32,
70,
105,
108,
101,
115,
32,
116,
104,
97,
116,
32,
119,
105,
108,
108,
32,
98,
101,
32,
99,
114,
101,
97,
116,
101,
100,
46,
10,
97,
114,
99,
104,
61,
34,
36,
40,
100,
112,
107,
103,
32,
45,
45,
112,
114,
105,
110,
116,
45,
97,
114,
99,
104,
105,
116,
101,
99,
116,
117,
114,
101,
41,
34,
10,
111,
114,
105,
103,
61,
34,
46,
46,
47,
36,
123,
110,
97,
109,
101,
125,
95,
36,
123,
117,
118,
125,
46,
111,
114,
105,
103,
46,
116,
97,
114,
46,
120,
122,
34,
10,
100,
101,
98,
61,
34,
46,
46,
47,
36,
123,
110,
97,
109,
101,
125,
95,
36,
123,
118,
101,
114,
115,
105,
111,
110,
125,
95,
36,
123,
97,
114,
99,
104,
125,
46,
100,
101,
98,
34,
10,
99,
104,
97,
110,
103,
101,
115,
61,
34,
46,
46,
47,
36,
123,
110,
97,
109,
101,
125,
95,
36,
123,
118,
101,
114,
115,
105,
111,
110,
125,
95,
36,
123,
97,
114,
99,
104,
125,
46,
99,
104,
97,
110,
103,
101,
115,
34,
10,
10,
35,
32,
67,
114,
101,
97,
116,
101,
32,
34,
117,
112,
115,
116,
114,
101,
97,
109,
32,
116,
97,
114,
98,
97,
108,
108,
34,
46,
10,
103,
105,
116,
32,
97,
114,
99,
104,
105,
118,
101,
32,
72,
69,
65,
68,
32,
124,
32,
120,
122,
32,
62,
34,
36,
111,
114,
105,
103,
34,
10,
10,
35,
32,
66,
117,
105,
108,
100,
32,
112,
97,
99,
107,
97,
103,
101,
46,
10,
100,
112,
107,
103,
45,
98,
117,
105,
108,
100,
112,
97,
99,
107,
97,
103,
101,
32,
45,
117,
115,
32,
45,
117,
99,
10,
10,
35,
32,
68,
117,
109,
112,
32,
115,
111,
109,
101,
32,
105,
110,
102,
111,
114,
109,
97,
116,
105,
111,
110,
32,
116,
111,
32,
109,
97,
107,
101,
32,
105,
116,
32,
101,
97,
115,
105,
101,
114,
32,
116,
111,
32,
118,
105,
115,
117,
97,
108,
108,
121,
32,
118,
101,
114,
105,
102,
121,
10,
35,
32,
101,
118,
101,
114,
121,
116,
104,
105,
110,
103,
32,
108,
111,
111,
107,
115,
32,
79,
75,
46,
32,
65,
108,
115,
111,
44,
32,
116,
101,
115,
116,
32,
116,
104,
101,
32,
112,
97,
99,
107,
97,
103,
101,
32,
119,
105,
116,
104,
32,
116,
104,
101,
32,
108,
105,
110,
116,
105,
97,
110,
32,
116,
111,
111,
108,
46,
10,
10,
108,
115,
32,
45,
108,
32,
46,
46,
10,
102,
111,
114,
32,
120,
32,
105,
110,
32,
46,
46,
47,
42,
46,
100,
101,
98,
59,
32,
100,
111,
32,
100,
112,
107,
103,
32,
45,
99,
32,
34,
36,
120,
34,
59,
32,
100,
111,
110,
101,
10,
35,
32,
70,
73,
88,
77,
69,
58,
32,
100,
105,
115,
97,
98,
108,
101,
100,
32,
119,
104,
105,
108,
101,
32,
116,
104,
105,
115,
32,
112,
114,
101,
118,
101,
110,
116,
115,
32,
114,
97,
100,
105,
99,
108,
101,
45,
110,
97,
116,
105,
118,
101,
45,
99,
105,
32,
100,
101,
98,
32,
102,
114,
111,
109,
32,
98,
101,
105,
110,
103,
32,
98,
117,
105,
108,
116,
46,
10,
35,
32,
108,
105,
110,
116,
105,
97,
110,
32,
45,
105,
32,
45,
45,
97,
108,
108,
111,
119,
45,
114,
111,
111,
116,
32,
45,
45,
102,
97,
105,
108,
45,
111,
110,
32,
119,
97,
114,
110,
105,
110,
103,
32,
46,
46,
47,
42,
46,
99,
104,
97,
110,
103,
101,
115,
10,
10,
35,
32,
77,
111,
118,
101,
32,
102,
105,
108,
101,
115,
32,
116,
111,
32,
97,
114,
116,
105,
102,
97,
99,
116,
115,
32,
100,
105,
114,
101,
99,
116,
111,
114,
121,
46,
10,
109,
118,
32,
46,
46,
47,
42,
95,
42,
32,
47,
99,
105,
47,
97,
114,
116,
105,
102,
97,
99,
116,
115,
47,
46,
10,
32,
32,
32,
32,
32,
32,
32,
32
]
}
],
"timestamp": {
"secs_since_epoch": 1782142583,
"nanos_since_epoch": 208881459
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "PATH at start: /root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin\nMEMORY_PRESSURE_WRITE=c29tZSAyMDAwMDAgMjAwMDAwMAA=\nDEBFULLNAME=Lars Wirzenius\nCARGO_TARGET_DIR=/ci/cache/cargo-target\nPWD=/ci/src\nSYSTEMD_EXEC_PID=374\nHOME=/root\nLANG=C.UTF-8\nCARGO_HOME=/ci/deps\nMEMORY_PRESSURE_WATCH=/sys/fs/cgroup/system.slice/ambient.service/memory.pressure\nDEBEMAIL=liw@liw.fi\nINVOCATION_ID=bd9406f335d048719e2b67114c256b9c\nRUSTUP_HOME=/ci/deps/rustup\nUSER=root\nSHLVL=2\nJOURNAL_STREAM=9:3284\nPATH=/root/.cargo/bin:/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin\nOLDPWD=/\n_=/bin/env\n/root/.cargo/bin/cargo\n/root/.cargo/bin/rustc\ncargo 1.95.0 (f2d3ce0bd 2026-03-21)\nrustc 1.95.0 (59807616e 2026-04-14)\ndpkg-buildpackage: info: source package radicle\ndpkg-buildpackage: info: source version 1.2.1.ci20260622T153623-1\ndpkg-buildpackage: info: source distribution unstable\ndpkg-buildpackage: info: source changed by Lars Wirzenius <liw@liw.fi>\ndpkg-buildpackage: info: host architecture amd64\ndh clean\n dh_clean\ndpkg-source: info: using source format '3.0 (quilt)'\ndpkg-source: info: building radicle using existing ./radicle_1.2.1.ci20260622T153623.orig.tar.xz\ndpkg-source: info: building radicle in radicle_1.2.1.ci20260622T153623-1.debian.tar.xz\ndpkg-source: info: building radicle in radicle_1.2.1.ci20260622T153623-1.dsc\ndh binary\n dh_update_autotools_config\n dh_autoreconf\n debian/rules override_dh_auto_build\nmake[1]: Entering directory '/ci/src'\nscripts/build-man-pages.sh . *.adoc\nBuilding git-remote-rad.1.adoc..\nBuilding rad-id.1.adoc..\nBuilding rad-patch.1.adoc..\nBuilding rad.1.adoc..\nBuilding radicle-node.1.adoc..\nmake[1]: Leaving directory '/ci/src'\n debian/rules override_dh_auto_test\nmake[1]: Entering directory '/ci/src'\necho tests are disabled, for now\ntests are disabled, for now\nmake[1]: Leaving directory '/ci/src'\n create-stamp debian/debhelper-build-stamp\n dh_prep\n debian/rules override_dh_auto_install\nmake[1]: Entering directory '/ci/src'\nmkdir -p debian/radicle/usr\ncargo install --offline --locked --path=crates/radicle-cli --root=debian/radicle/usr\ncargo install --offline --locked --path=crates/radicle-node --root=debian/radicle/usr\ncargo install --offline --locked --path=crates/radicle-remote-helper --root=debian/radicle/usr\nfind debian/radicle -name '.crates*' -delete\nmake[1]: Leaving directory '/ci/src'\n dh_install\n dh_installdocs\n dh_installchangelogs\n dh_installman\n dh_lintian\n dh_perl\n dh_link\n dh_strip_nondeterminism\n dh_compress\n dh_fixperms\n dh_missing\n dh_strip\n dh_makeshlibs\n dh_shlibdeps\n dh_installdeb\n dh_gencontrol\n dh_md5sums\n dh_builddeb\ndpkg-deb: building package 'radicle' in '../radicle_1.2.1.ci20260622T153623-1_amd64.deb'.\ndpkg-genchanges: info: including full source code in upload\ndpkg-buildpackage: info: full upload (original source is included)\ntotal 13124\ndrwxr-xr-x 2 root root 4096 Jun 22 15:33 artifacts\ndrwxr-xr-x 5 root root 4096 Jun 22 09:46 cache\ndrwxr-xr-x 4 root root 4096 Jun 22 15:38 deps\n-rw-r--r-- 1 root root 2096 Jun 22 15:36 radicle_1.2.1.ci20260622T153623-1.debian.tar.xz\n-rw-r--r-- 1 root root 1028 Jun 22 15:36 radicle_1.2.1.ci20260622T153623-1.dsc\n-rw-r--r-- 1 root root 5390 Jun 22 15:39 radicle_1.2.1.ci20260622T153623-1_amd64.buildinfo\n-rw-r--r-- 1 root root 2023 Jun 22 15:39 radicle_1.2.1.ci20260622T153623-1_amd64.changes\n-rw-r--r-- 1 root root 12027860 Jun 22 15:39 radicle_1.2.1.ci20260622T153623-1_amd64.deb\n-rw-r--r-- 1 root root 1368268 Jun 22 15:36 radicle_1.2.1.ci20260622T153623.orig.tar.xz\ndrwxr-xr-x 14 root root 4096 Jun 22 15:36 src\ndrwxr-xr-x root/root 0 2026-06-22 15:36 ./\ndrwxr-xr-x root/root 0 2026-06-22 15:36 ./usr/\ndrwxr-xr-x root/root 0 2026-06-22 15:36 ./usr/bin/\n-rwxr-xr-x root/root 9155288 2026-06-22 15:36 ./usr/bin/git-remote-rad\n-rwxr-xr-x root/root 30662192 2026-06-22 15:36 ./usr/bin/rad\n-rwxr-xr-x root/root 12396088 2026-06-22 15:36 ./usr/bin/radicle-node\ndrwxr-xr-x root/root 0 2026-06-22 15:36 ./usr/share/\ndrwxr-xr-x root/root 0 2026-06-22 15:36 ./usr/share/doc/\ndrwxr-xr-x root/root 0 2026-06-22 15:36 ./usr/share/doc/radicle/\n-rw-r--r-- root/root 287 2026-06-22 15:36 ./usr/share/doc/radicle/changelog.Debian.gz\n-rw-r--r-- root/root 13917 2026-06-22 15:33 ./usr/share/doc/radicle/changelog.gz\n-rw-r--r-- root/root 357 2026-06-22 15:33 ./usr/share/doc/radicle/copyright\ndrwxr-xr-x root/root 0 2026-06-22 15:36 ./usr/share/lintian/\ndrwxr-xr-x root/root 0 2026-06-22 15:36 ./usr/share/lintian/overrides/\n-rw-r--r-- root/root 121 2026-06-22 15:33 ./usr/share/lintian/overrides/radicle\ndrwxr-xr-x root/root 0 2026-06-22 15:36 ./usr/share/man/\ndrwxr-xr-x root/root 0 2026-06-22 15:36 ./usr/share/man/man1/\n-rw-r--r-- root/root 557 2026-06-22 15:36 ./usr/share/man/man1/git-remote-rad.1.gz\n-rw-r--r-- root/root 2701 2026-06-22 15:36 ./usr/share/man/man1/rad-id.1.gz\n-rw-r--r-- root/root 4364 2026-06-22 15:36 ./usr/share/man/man1/rad-patch.1.gz\n-rw-r--r-- root/root 3717 2026-06-22 15:36 ./usr/share/man/man1/rad.1.gz\n-rw-r--r-- root/root 490 2026-06-22 15:36 ./usr/share/man/man1/radicle-node.1.gz\n",
"stderr": "+ echo 'PATH at start: /root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin'\n+ export PATH=/root/.cargo/bin:/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin\n+ PATH=/root/.cargo/bin:/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin\n+ export CARGO_HOME=/ci/deps\n+ CARGO_HOME=/ci/deps\n+ export DEBEMAIL=liw@liw.fi\n+ DEBEMAIL=liw@liw.fi\n+ export 'DEBFULLNAME=Lars Wirzenius'\n+ DEBFULLNAME='Lars Wirzenius'\n+ /bin/env\n+ command -v cargo\n+ command -v rustc\n+ cargo --version\n+ rustc --version\n++ dpkg-parsechangelog -SSource\n+ name=radicle\n++ dpkg-parsechangelog -SVersion\n+ version=1.2.1.ci20260622T153623-1\n++ echo 1.2.1.ci20260622T153623-1\n++ sed 's/-[^-]*$//'\n+ uv=1.2.1.ci20260622T153623\n++ dpkg --print-architecture\n+ arch=amd64\n+ orig=../radicle_1.2.1.ci20260622T153623.orig.tar.xz\n+ deb=../radicle_1.2.1.ci20260622T153623-1_amd64.deb\n+ changes=../radicle_1.2.1.ci20260622T153623-1_amd64.changes\n+ git archive HEAD\n+ xz\n+ dpkg-buildpackage -us -uc\n dpkg-source --before-build .\n debian/rules clean\n dpkg-source -b .\n debian/rules binary\n Installing radicle-cli v0.21.0 (/ci/src/crates/radicle-cli)\n Compiling radicle-crypto v0.17.0 (/ci/src/crates/radicle-crypto)\n Compiling radicle-oid v0.2.0 (/ci/src/crates/radicle-oid)\n Compiling radicle-signals v0.11.0 (/ci/src/crates/radicle-signals)\n Compiling radicle-dag v0.10.0 (/ci/src/crates/radicle-dag)\n Compiling radicle-localtime v0.1.0 (/ci/src/crates/radicle-localtime)\n Compiling radicle-git-metadata v0.2.0 (/ci/src/crates/radicle-git-metadata)\n Compiling radicle v0.24.0 (/ci/src/crates/radicle)\n Compiling radicle-term v0.18.0 (/ci/src/crates/radicle-term)\n Compiling radicle-cob v0.20.0 (/ci/src/crates/radicle-cob)\n Compiling radicle-core v0.3.0 (/ci/src/crates/radicle-core)\n Compiling radicle-git-ref-format v0.1.0 (/ci/src/crates/radicle-git-ref-format)\n Compiling radicle-cli v0.21.0 (/ci/src/crates/radicle-cli)\n Compiling radicle-log v0.1.0 (/ci/src/crates/radicle-log)\n Finished `release` profile [optimized] target(s) in 1m 17s\n Installing /ci/src/debian/radicle/usr/bin/rad\n Installed package `radicle-cli v0.21.0 (/ci/src/crates/radicle-cli)` (executable `rad`)\nwarning: be sure to add `/ci/src/debian/radicle/usr/bin` to your PATH to be able to run the installed binaries\n Installing radicle-node v0.20.0 (/ci/src/crates/radicle-node)\n Compiling radicle-crypto v0.17.0 (/ci/src/crates/radicle-crypto)\n Compiling radicle-oid v0.2.0 (/ci/src/crates/radicle-oid)\n Compiling radicle-localtime v0.1.0 (/ci/src/crates/radicle-localtime)\n Compiling radicle-git-metadata v0.2.0 (/ci/src/crates/radicle-git-metadata)\n Compiling radicle v0.24.0 (/ci/src/crates/radicle)\n Compiling radicle-cob v0.20.0 (/ci/src/crates/radicle-cob)\n Compiling radicle-core v0.3.0 (/ci/src/crates/radicle-core)\n Compiling radicle-git-ref-format v0.1.0 (/ci/src/crates/radicle-git-ref-format)\n Compiling radicle-term v0.18.0 (/ci/src/crates/radicle-term)\n Compiling radicle-node v0.20.0 (/ci/src/crates/radicle-node)\n Compiling radicle-log v0.1.0 (/ci/src/crates/radicle-log)\n Compiling radicle-systemd v0.13.0 (/ci/src/crates/radicle-systemd)\n Compiling radicle-fetch v0.20.0 (/ci/src/crates/radicle-fetch)\n Compiling radicle-protocol v0.8.0 (/ci/src/crates/radicle-protocol)\n Finished `release` profile [optimized] target(s) in 56.39s\n Installing /ci/src/debian/radicle/usr/bin/radicle-node\n Installed package `radicle-node v0.20.0 (/ci/src/crates/radicle-node)` (executable `radicle-node`)\nwarning: be sure to add `/ci/src/debian/radicle/usr/bin` to your PATH to be able to run the installed binaries\n Installing radicle-remote-helper v0.17.0 (/ci/src/crates/radicle-remote-helper)\n Compiling radicle-remote-helper v0.17.0 (/ci/src/crates/radicle-remote-helper)\n Finished `release` profile [optimized] target(s) in 11.63s\n Installing /ci/src/debian/radicle/usr/bin/git-remote-rad\n Installed package `radicle-remote-helper v0.17.0 (/ci/src/crates/radicle-remote-helper)` (executable `git-remote-rad`)\nwarning: be sure to add `/ci/src/debian/radicle/usr/bin` to your PATH to be able to run the installed binaries\ndpkg-shlibdeps: warning: diversions involved - output may be incorrect\n diversion by libc6 from: /lib64/ld-linux-x86-64.so.2\ndpkg-shlibdeps: warning: diversions involved - output may be incorrect\n diversion by libc6 to: /lib64/ld-linux-x86-64.so.2.usr-is-merged\n dpkg-genbuildinfo -O../radicle_1.2.1.ci20260622T153623-1_amd64.buildinfo\n dpkg-genchanges -O../radicle_1.2.1.ci20260622T153623-1_amd64.changes\n dpkg-source --after-build .\n+ ls -l ..\n+ for x in ../*.deb\n+ dpkg -c ../radicle_1.2.1.ci20260622T153623-1_amd64.deb\n+ mv ../radicle_1.2.1.ci20260622T153623-1.debian.tar.xz ../radicle_1.2.1.ci20260622T153623-1.dsc ../radicle_1.2.1.ci20260622T153623-1_amd64.buildinfo ../radicle_1.2.1.ci20260622T153623-1_amd64.changes ../radicle_1.2.1.ci20260622T153623-1_amd64.deb ../radicle_1.2.1.ci20260622T153623.orig.tar.xz /ci/artifacts/.\n",
"timestamp": {
"secs_since_epoch": 1782142741,
"nanos_since_epoch": 752147844
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "deb",
"packages": ".",
"timestamp": {
"secs_since_epoch": 1782142741,
"nanos_since_epoch": 853194685
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "tar_create",
"archive": "/dev/vde",
"directory": "/ci/cache",
"timestamp": {
"secs_since_epoch": 1782142741,
"nanos_since_epoch": 853365229
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "tar_create",
"archive": "/dev/vde",
"directory": "/ci/cache",
"timestamp": {
"secs_since_epoch": 1782142756,
"nanos_since_epoch": 19174123
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "tar_create",
"archive": "/dev/vdd",
"directory": "/ci/artifacts",
"timestamp": {
"secs_since_epoch": 1782142756,
"nanos_since_epoch": 23015032
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "tar_create",
"archive": "/dev/vdd",
"directory": "/ci/artifacts",
"timestamp": {
"secs_since_epoch": 1782142756,
"nanos_since_epoch": 57738940
},
"log_source": "Plan"
}{
"type": "plan_succeeded",
"timestamp": {
"secs_since_epoch": 1782142756,
"nanos_since_epoch": 58217695
},
"log_source": "Plan"
}{
"type": "executor_ends_successfully",
"timestamp": {
"secs_since_epoch": 1782142756,
"nanos_since_epoch": 58230751
},
"log_source": "Plan"
}{
"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": "Updated",
"patch": {
"id": "9e557d1ad972dab998c920a82122de8e8b921c73",
"author": {
"id": "did:key:z6MktwkohCx8aHZ1QCjVZUiLmX92oPZFxRiFZkbq32Tk5Tkm",
"alias": "2color"
},
"title": "node/wire: fix stuck repo sync by always reporting fetch results to the service",
"state": {
"status": "open",
"conflicts": []
},
"before": "07f748475beacd41463ee5ebc0d7a93539ab8f55",
"after": "9c06e16513a096dba19cdcabe822454cdd183da4",
"commits": [
"9c06e16513a096dba19cdcabe822454cdd183da4",
"e922ea73858d66f1152b20152ff9c86e74feb26f",
"2ad6cc40f14f79b3769dc00b8e8840ce2de1a264",
"1083e2f0dd02a08e644d6779878b9a887aff38fe",
"ff9f9f6bee3caca9b514255e32b25ea1440ad372",
"e86272264ff5aa728b411a4bdb2ae5a277077b23",
"2ad59beb7306ee77ba82952171dffa0323d04563"
],
"target": "018266023a738c51b3a4bf6abef5bb16ee3b1181",
"labels": [],
"assignees": [],
"revisions": [
{
"id": "9e557d1ad972dab998c920a82122de8e8b921c73",
"author": {
"id": "did:key:z6MktwkohCx8aHZ1QCjVZUiLmX92oPZFxRiFZkbq32Tk5Tkm",
"alias": "2color"
},
"description": "## Background \n\nWhile running nodes for Radicle Garden, we've repeatedly seen repositories that\nstop syncing: a repo gets \"stuck\" and won't fetch from *any* peer, and the only\nway to recover is to restart the node. This patch is a suspected fix for that,\nplus tests that reproduce the underlying bug.\n\n## What (I think) was going wrong\n\nWhen a node starts fetching a repo from a peer, it records that fetch as\n\"active\" so it doesn't try to fetch the same repo twice at once. That active\nmarker is supposed to be cleared when the fetch finishes (success or failure).\n\nThe problem is what happens when the peer **disconnects** at the wrong moment.\nThere are two spots where, if the peer was no longer connected, the code would\nquietly give up and never tell the rest of the system the fetch had ended:\n\n1. When a fetch result came back but the peer had already dropped, the result\n was logged and discarded.\n2. When a fetch was about to start but the peer had already dropped, the fetch\n was dropped silently.\n\nIn both cases the \"active\" marker for that repo was never cleared. From then on,\nevery future attempt to fetch that repo, even from a perfectly healthy peer,\nwould be blocked because the system still thought a fetch was already in\nprogress. That matches the \"stuck repo until restart\" behavior we've been\nseeing.\n\n## What the fix does\n\n- **Always report the outcome, even on disconnect.** Both spots now notify the\n service that the fetch ended (as a failure), so the active marker always gets\n cleared and the repo becomes fetchable again.\n- **Ignore stale/late results.** As a safety guard, when a result comes in we\n now confirm it came from the *same* peer that started the active fetch. If a\n late result arrives from an old peer after we've already moved on and started\n fetching the repo from someone else, we ignore it rather than wrongly\n cancelling the newer fetch.\n\n## Tests included\n\nMost of the diff is tests that first reproduce the orphaned-fetch behavior and\nthen confirm the fix:\n\n- A test proving the old code discarded the result on disconnect, plus a\n \"connected\" contrast test so we know it's actually exercising the disconnect\n path and not passing trivially.\n- A service-layer reproduction of the orphaned fetch.\n- An invariant check on the fetcher state guarding against leftover active\n entries.\n\n## Caveat\n\nThis is a **suspected** fix. The reasoning and the tests line up with the symptoms we've observed, but since the original bug only showed up intermittently in production under real disconnect timing, we can't be fully certain this covers every cause of the stuck-repo issue. Worth a careful review of the wire.rs changes in particular, since that's where the disconnect handling logic changed, and it's my first time delving into this part of the codebase.",
"base": "07f748475beacd41463ee5ebc0d7a93539ab8f55",
"oid": "2ad6cc40f14f79b3769dc00b8e8840ce2de1a264",
"timestamp": 1781902413
},
{
"id": "b3845fd2dcbbe292ae5ec764521c225414f37676",
"author": {
"id": "did:key:z6MktwkohCx8aHZ1QCjVZUiLmX92oPZFxRiFZkbq32Tk5Tkm",
"alias": "2color"
},
"description": "fetcher: Guard fetched against stale node results\n\n- Clear active[rid] only when the result's node matches the node that\n started the fetch; mismatched results now report NotFound\n- Prevent a late completion from a disconnected peer clearing a newer\n fetch for the same repo started by a different node\n- Add test covering the stale-from mismatch path",
"base": "07f748475beacd41463ee5ebc0d7a93539ab8f55",
"oid": "44e7cbded222bc0bd45ba246eff793ba2188d152",
"timestamp": 1781904439
},
{
"id": "4baa4f9815c32935c5f08cae1c4737da8783947c",
"author": {
"id": "did:key:z6MktwkohCx8aHZ1QCjVZUiLmX92oPZFxRiFZkbq32Tk5Tkm",
"alias": "2color"
},
"description": "",
"base": "07f748475beacd41463ee5ebc0d7a93539ab8f55",
"oid": "d513158566da0f4d942206ea6503c0e317f23612",
"timestamp": 1781904594
},
{
"id": "5d831a0a1f194bb328efc9df3c8bc364a094f5df",
"author": {
"id": "did:key:z6MktwkohCx8aHZ1QCjVZUiLmX92oPZFxRiFZkbq32Tk5Tkm",
"alias": "2color"
},
"description": "",
"base": "07f748475beacd41463ee5ebc0d7a93539ab8f55",
"oid": "40e415ea843b8665839ae761a7461ce1ad1b6b2b",
"timestamp": 1781960274
},
{
"id": "a4970e258818a0478aeda401973d05e9a916380b",
"author": {
"id": "did:key:z6MktwkohCx8aHZ1QCjVZUiLmX92oPZFxRiFZkbq32Tk5Tkm",
"alias": "2color"
},
"description": "",
"base": "07f748475beacd41463ee5ebc0d7a93539ab8f55",
"oid": "e922ea73858d66f1152b20152ff9c86e74feb26f",
"timestamp": 1782121156
},
{
"id": "e4e2622180d2c85324391bc737adbec8d7a5ca79",
"author": {
"id": "did:key:z6MktwkohCx8aHZ1QCjVZUiLmX92oPZFxRiFZkbq32Tk5Tkm",
"alias": "2color"
},
"description": "Use image that actually exists\n\nWe discovered that there is no rust alpine image\nfor the 1.85 and 3.22 combination",
"base": "07f748475beacd41463ee5ebc0d7a93539ab8f55",
"oid": "7b6f6047f109688d4a53bd53319fcd5c16cc49eb",
"timestamp": 1782141994
},
{
"id": "356206a9649fdc4645966388386cd708c5b118e9",
"author": {
"id": "did:key:z6MktwkohCx8aHZ1QCjVZUiLmX92oPZFxRiFZkbq32Tk5Tkm",
"alias": "2color"
},
"description": "",
"base": "07f748475beacd41463ee5ebc0d7a93539ab8f55",
"oid": "9c06e16513a096dba19cdcabe822454cdd183da4",
"timestamp": 1782142037
}
]
}
}executor from config: /usr/bin/ambient-execute-plan executor from PATH: /usr/bin/ambient-execute-plan run CI for rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5
<empty log>