CI: FAILURE heartwood

Table of Contents

Run log

Plan, inside VM without network

plan: Executor starts
After 0.00 seconds at 2026-05-22 13:50:27ZProgram: ambient-execute-plan
Version: 0.14.0@c37ec71
plan: Runnable plan
After 0.00 seconds at 2026-05-22 13:50:27Z
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

    # Commit this to git so that the Debian package building doesn't
    # see changes outside the debian directory.
    git config set user.name "Ambient CI"
    git config set user.email "ambient@example.com"
    git commit -m "remove components from toolchain file" rust-toolchain.toml
- 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
    # these variables manually. Once Ambient manages environment
    # variables better, these can be deleted.
    export CARGO_TARGET_DIR=/workspace/cache
    export CARGO_HOME=/workspace/deps
    export HOME=/root
    export PATH="/root/.cargo/bin:$PATH"
    export RUSTDOCFLAGS='-D warnings'

    cargo doc --workspace --no-deps --all-features
- action: shell
  shell: |
    # Because of a (temporary) limitation in Ambient, we need to set
    # these variables manually. Once Ambient manages environment
    # variables better, these can be deleted.
    export CARGO_TARGET_DIR=/workspace/cache
    export CARGO_HOME=/workspace/deps
    export HOME=/root
    export PATH="/root/.cargo/bin:$PATH"

    # These are based on debian/control.
    export DEBEMAIL=liw@liw.fi
    export DEBFULLNAME="Lars Wirzenius"

    # Clean up after tests and documentation building. The Debian
    # package building tools do not want changes outside the
    # `debian` directory, compared to what is committed to Git, from
    # which the "upstream tarball" is created.
    git reset --hard
    git clean -fdx
    git status --ignored

    # Update debian/changelog with a new version so that every run
    # creates a newer version. This avoids us having to update the
    # file manually for every CI run.
    V="$(dpkg-parsechangelog -SVersion | sed 's/-[^-]*$//')"
    T="$(date -u "+%Y%m%dT%H%M%S")"
    version="$V.ci$T-1"
    dch -v "$version" "CI build under Ambient."
    dch -r ''
- 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
plan: Successful action mkdir: /ci
After 0.00 seconds at 2026-05-22 13:50:27Z
  • plan: Start action mkdir: /ci
    After 0.00 seconds at 2026-05-22 13:50:27Z
    Mkdir(
        Mkdir {
            pathname: "/ci",
        },
    )
  • plan: Action succeeded mkdir: /ci
    After 0.00 seconds at 2026-05-22 13:50:27Z
    Mkdir(
        Mkdir {
            pathname: "/ci",
        },
    )
plan: Successful action mkdir: /ci/artifacts
After 0.00 seconds at 2026-05-22 13:50:27Z
  • plan: Start action mkdir: /ci/artifacts
    After 0.00 seconds at 2026-05-22 13:50:27Z
    Mkdir(
        Mkdir {
            pathname: "/ci/artifacts",
        },
    )
  • plan: Action succeeded mkdir: /ci/artifacts
    After 0.00 seconds at 2026-05-22 13:50:27Z
    Mkdir(
        Mkdir {
            pathname: "/ci/artifacts",
        },
    )
plan: Successful action tar_extract
After 0.00 seconds at 2026-05-22 13:50:27Z
  • plan: Start action tar_extract
    After 0.00 seconds at 2026-05-22 13:50:27Z
    TarExtract(
        TarExtract {
            archive: "/dev/vdc",
            directory: "/ci/src",
        },
    )
  • plan: Action succeeded tar_extract
    After 0.00 seconds at 2026-05-22 13:50:27Z
    TarExtract(
        TarExtract {
            archive: "/dev/vdc",
            directory: "/ci/src",
        },
    )
plan: Successful action tar_extract
After 0.18 seconds at 2026-05-22 13:50:27Z
  • plan: Start action tar_extract
    After 0.00 seconds at 2026-05-22 13:50:27Z
    TarExtract(
        TarExtract {
            archive: "/dev/vdf",
            directory: "/ci/deps",
        },
    )
  • plan: Action succeeded tar_extract
    After 0.00 seconds at 2026-05-22 13:50:35Z
    TarExtract(
        TarExtract {
            archive: "/dev/vdf",
            directory: "/ci/deps",
        },
    )
plan: Successful action tar_extract
After 8.70 seconds at 2026-05-22 13:50:35Z
  • plan: Start action tar_extract
    After 0.00 seconds at 2026-05-22 13:50:35Z
    TarExtract(
        TarExtract {
            archive: "/dev/vde",
            directory: "/ci/cache",
        },
    )
  • plan: Action succeeded tar_extract
    After 0.00 seconds at 2026-05-22 13:50:55Z
    TarExtract(
        TarExtract {
            archive: "/dev/vde",
            directory: "/ci/cache",
        },
    )
plan: Successful action shell: ln -sf /ci /workspace
After 28.73 seconds at 2026-05-22 13:50:55Z
  • plan: Start action shell: ln -sf /ci /workspace
    After 0.00 seconds at 2026-05-22 13:50:55Z
    Shell(
        Shell {
            shell: "ln -sf /ci /workspace",
        },
    )
  • plan: Start program bash
    After 0.00 seconds at 2026-05-22 13:50:55Z
    • bash
    • -c
    • set -xeuo pipefail ln -sf /ci /workspace
  • plan: Program succeeded
    After 0.00 seconds at 2026-05-22 13:50:55Z
    Exit code: 0
    Stderr:
    + ln -sf /ci /workspace
    
  • plan: Action succeeded shell: ln -sf /ci /workspace
    After 0.00 seconds at 2026-05-22 13:50:55Z
    Shell(
        Shell {
            shell: "ln -sf /ci /workspace",
        },
    )
plan: Successful action shell: git config --global user.name 'Ambient CI'
After 28.74 seconds at 2026-05-22 13:50:55Z
  • plan: Start action shell: git config --global user.name 'Ambient CI'
    After 0.00 seconds at 2026-05-22 13:50:55Z
    Shell(
        Shell {
            shell: "git config --global user.name 'Ambient CI'",
        },
    )
  • plan: Start program bash
    After 0.00 seconds at 2026-05-22 13:50:55Z
    • bash
    • -c
    • set -xeuo pipefail git config --global user.name 'Ambient CI'
  • plan: Program succeeded
    After 0.00 seconds at 2026-05-22 13:50:55Z
    Exit code: 0
    Stderr:
    + git config --global user.name 'Ambient CI'
    
  • plan: Action succeeded shell: git config --global user.name 'Ambient CI'
    After 0.00 seconds at 2026-05-22 13:50:55Z
    Shell(
        Shell {
            shell: "git config --global user.name 'Ambient CI'",
        },
    )
plan: Successful action shell: git config --global user.email ambient@example.com
After 28.76 seconds at 2026-05-22 13:50:55Z
  • plan: Start action shell: git config --global user.email ambient@example.com
    After 0.00 seconds at 2026-05-22 13:50:55Z
    Shell(
        Shell {
            shell: "git config --global user.email ambient@example.com",
        },
    )
  • plan: Start program bash
    After 0.00 seconds at 2026-05-22 13:50:55Z
    • bash
    • -c
    • set -xeuo pipefail git config --global user.email ambient@example.com
  • plan: Program succeeded
    After 0.00 seconds at 2026-05-22 13:50:55Z
    Exit code: 0
    Stderr:
    + git config --global user.email ambient@example.com
    
  • plan: Action succeeded shell: git config --global user.email ambient@example.com
    After 0.00 seconds at 2026-05-22 13:50:55Z
    Shell(
        Shell {
            shell: "git config --global user.email ambient@example.com",
        },
    )
plan: Successful action shell: sed -i /components/d rust-toolchain.toml # Commit this to git so that the Debian package building doesn't # see changes outside the debian directory. git config set user.name "Ambient CI" git config set user.email "ambient@example.com" git commit -m "remove components from toolchain file" rust-toolchain.toml
After 28.78 seconds at 2026-05-22 13:50:55Z
  • plan: Start action shell: sed -i /components/d rust-toolchain.toml # Commit this to git so that the Debian package building doesn't # see changes outside the debian directory. git config set user.name "Ambient CI" git config set user.email "ambient@example.com" git commit -m "remove components from toolchain file" rust-toolchain.toml
    After 0.00 seconds at 2026-05-22 13:50:55Z
    Shell(
        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",
        },
    )
  • plan: Start program bash
    After 0.00 seconds at 2026-05-22 13:50:55Z
    • bash
    • -c
    • set -xeuo pipefail sed -i /components/d rust-toolchain.toml # Commit this to git so that the Debian package building doesn't # see changes outside the debian directory. git config set user.name "Ambient CI" git config set user.email "ambient@example.com" git commit -m "remove components from toolchain file" rust-toolchain.toml
  • plan: Program succeeded
    After 0.00 seconds at 2026-05-22 13:50:55Z
    Exit code: 0
    Stdout:
    [detached HEAD 3fc553cf3] remove components from toolchain file
     1 file changed, 1 deletion(-)
    
    Stderr:
    + sed -i /components/d rust-toolchain.toml
    + git config set user.name 'Ambient CI'
    + git config set user.email ambient@example.com
    + git commit -m 'remove components from toolchain file' rust-toolchain.toml
    
  • plan: Action succeeded shell: sed -i /components/d rust-toolchain.toml # Commit this to git so that the Debian package building doesn't # see changes outside the debian directory. git config set user.name "Ambient CI" git config set user.email "ambient@example.com" git commit -m "remove components from toolchain file" rust-toolchain.toml
    After 0.00 seconds at 2026-05-22 13:50:55Z
    Shell(
        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",
        },
    )
plan: Successful action cargo_fmt
After 28.91 seconds at 2026-05-22 13:50:55Z
  • plan: Start action cargo_fmt
    After 0.00 seconds at 2026-05-22 13:50:55Z
    CargoFmt(
        CargoFmt,
    )
  • plan: Start program cargo
    After 0.00 seconds at 2026-05-22 13:50:55Z
    • cargo
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-05-22 13:50:55Z
    Exit code: 0
    Stdout:
    cargo 1.95.0 (f2d3ce0bd 2026-03-21)
    
  • plan: Start program cargo
    After 0.00 seconds at 2026-05-22 13:50:56Z
    • cargo
    • clippy
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-05-22 13:50:56Z
    Exit code: 0
    Stdout:
    clippy 0.1.95 (59807616e1 2026-04-14)
    
  • plan: Start program rustc
    After 0.00 seconds at 2026-05-22 13:50:56Z
    • rustc
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-05-22 13:50:56Z
    Exit code: 0
    Stdout:
    rustc 1.95.0 (59807616e 2026-04-14)
    
  • plan: Start program cargo
    After 0.00 seconds at 2026-05-22 13:50:56Z
    • cargo
    • fmt
    • --check
  • plan: Program succeeded
    After 0.00 seconds at 2026-05-22 13:50:56Z
    Exit code: 0
  • plan: Action succeeded cargo_fmt
    After 0.00 seconds at 2026-05-22 13:50:56Z
    CargoFmt(
        CargoFmt,
    )
plan: Successful action cargo_clippy
After 29.84 seconds at 2026-05-22 13:50:56Z
  • plan: Start action cargo_clippy
    After 0.00 seconds at 2026-05-22 13:50:56Z
    CargoClippy(
        CargoClippy,
    )
  • plan: Start program cargo
    After 0.00 seconds at 2026-05-22 13:50:56Z
    • cargo
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-05-22 13:50:56Z
    Exit code: 0
    Stdout:
    cargo 1.95.0 (f2d3ce0bd 2026-03-21)
    
  • plan: Start program cargo
    After 0.00 seconds at 2026-05-22 13:50:56Z
    • cargo
    • clippy
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-05-22 13:50:56Z
    Exit code: 0
    Stdout:
    clippy 0.1.95 (59807616e1 2026-04-14)
    
  • plan: Start program rustc
    After 0.00 seconds at 2026-05-22 13:50:56Z
    • rustc
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-05-22 13:50:56Z
    Exit code: 0
    Stdout:
    rustc 1.95.0 (59807616e 2026-04-14)
    
  • plan: Start program cargo
    After 0.00 seconds at 2026-05-22 13:50:56Z
    • cargo
    • clippy
    • --offline
    • --locked
    • --workspace
    • --all-targets
    • --no-deps
    • --
    • --deny
    • warnings
  • plan: Program succeeded
    After 0.00 seconds at 2026-05-22 13:51:08Z
    Exit code: 0
    Stderr:
        Checking radicle-crypto v0.17.0 (/ci/src/crates/radicle-crypto)
        Checking radicle-oid v0.2.0 (/ci/src/crates/radicle-oid)
        Checking radicle-localtime v0.1.0 (/ci/src/crates/radicle-localtime)
        Checking radicle-git-metadata v0.2.0 (/ci/src/crates/radicle-git-metadata)
        Checking radicle-dag v0.10.0 (/ci/src/crates/radicle-dag)
        Checking radicle-git-ref-format v0.1.0 (/ci/src/crates/radicle-git-ref-format)
       Compiling radicle v0.24.0 (/ci/src/crates/radicle)
        Checking radicle-cob v0.20.0 (/ci/src/crates/radicle-cob)
        Checking radicle-core v0.3.0 (/ci/src/crates/radicle-core)
        Checking radicle-signals v0.11.0 (/ci/src/crates/radicle-signals)
        Checking radicle-term v0.18.0 (/ci/src/crates/radicle-term)
        Checking radicle-log v0.1.0 (/ci/src/crates/radicle-log)
       Compiling radicle-node v0.20.0 (/ci/src/crates/radicle-node)
       Compiling radicle-cli v0.21.0 (/ci/src/crates/radicle-cli)
        Checking radicle-systemd v0.13.0 (/ci/src/crates/radicle-systemd)
       Compiling radicle-remote-helper v0.17.0 (/ci/src/crates/radicle-remote-helper)
        Checking radicle-fetch v0.20.0 (/ci/src/crates/radicle-fetch)
        Checking radicle-protocol v0.8.0 (/ci/src/crates/radicle-protocol)
        Checking radicle-cli-test v0.13.0 (/ci/src/crates/radicle-cli-test)
        Checking radicle-schemars v0.8.0 (/ci/src/crates/radicle-schemars)
        Checking radicle-windows v0.1.0 (/ci/src/crates/radicle-windows)
        Finished `dev` profile [unoptimized + debuginfo] target(s) in 11.57s
    
  • plan: Action succeeded cargo_clippy
    After 0.00 seconds at 2026-05-22 13:51:08Z
    CargoClippy(
        CargoClippy,
    )
plan: Successful action cargo_build
After 41.58 seconds at 2026-05-22 13:51:08Z
  • plan: Start action cargo_build
    After 0.00 seconds at 2026-05-22 13:51:08Z
    CargoBuild(
        CargoBuild,
    )
  • plan: Start program cargo
    After 0.00 seconds at 2026-05-22 13:51:08Z
    • cargo
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-05-22 13:51:08Z
    Exit code: 0
    Stdout:
    cargo 1.95.0 (f2d3ce0bd 2026-03-21)
    
  • plan: Start program cargo
    After 0.00 seconds at 2026-05-22 13:51:08Z
    • cargo
    • clippy
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-05-22 13:51:08Z
    Exit code: 0
    Stdout:
    clippy 0.1.95 (59807616e1 2026-04-14)
    
  • plan: Start program rustc
    After 0.00 seconds at 2026-05-22 13:51:08Z
    • rustc
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-05-22 13:51:08Z
    Exit code: 0
    Stdout:
    rustc 1.95.0 (59807616e 2026-04-14)
    
  • plan: Start program cargo
    After 0.00 seconds at 2026-05-22 13:51:08Z
    • cargo
    • build
    • --offline
    • --locked
    • --workspace
    • --all-targets
  • plan: Program succeeded
    After 0.00 seconds at 2026-05-22 13:51:54Z
    Exit code: 0
    Stderr:
       Compiling radicle-crypto v0.17.0 (/ci/src/crates/radicle-crypto)
       Compiling radicle-oid v0.2.0 (/ci/src/crates/radicle-oid)
       Compiling radicle-localtime v0.1.0 (/ci/src/crates/radicle-localtime)
       Compiling radicle-git-metadata v0.2.0 (/ci/src/crates/radicle-git-metadata)
       Compiling radicle-dag v0.10.0 (/ci/src/crates/radicle-dag)
       Compiling radicle-git-ref-format v0.1.0 (/ci/src/crates/radicle-git-ref-format)
       Compiling radicle v0.24.0 (/ci/src/crates/radicle)
       Compiling radicle-cob v0.20.0 (/ci/src/crates/radicle-cob)
       Compiling radicle-core v0.3.0 (/ci/src/crates/radicle-core)
       Compiling radicle-signals v0.11.0 (/ci/src/crates/radicle-signals)
       Compiling radicle-term v0.18.0 (/ci/src/crates/radicle-term)
       Compiling radicle-log v0.1.0 (/ci/src/crates/radicle-log)
       Compiling radicle-node v0.20.0 (/ci/src/crates/radicle-node)
       Compiling radicle-cli v0.21.0 (/ci/src/crates/radicle-cli)
       Compiling radicle-systemd v0.13.0 (/ci/src/crates/radicle-systemd)
       Compiling radicle-remote-helper v0.17.0 (/ci/src/crates/radicle-remote-helper)
       Compiling radicle-fetch v0.20.0 (/ci/src/crates/radicle-fetch)
       Compiling radicle-protocol v0.8.0 (/ci/src/crates/radicle-protocol)
       Compiling radicle-cli-test v0.13.0 (/ci/src/crates/radicle-cli-test)
       Compiling radicle-schemars v0.8.0 (/ci/src/crates/radicle-schemars)
       Compiling radicle-windows v0.1.0 (/ci/src/crates/radicle-windows)
        Finished `dev` profile [unoptimized + debuginfo] target(s) in 46.09s
    
  • plan: Action succeeded cargo_build
    After 0.00 seconds at 2026-05-22 13:51:54Z
    CargoBuild(
        CargoBuild,
    )
plan: Start action cargo_test
After 87.80 seconds at 2026-05-22 13:51:54Z
CargoTest(
    CargoTest,
)
plan: Start program cargo
After 87.80 seconds at 2026-05-22 13:51:54Z
  • cargo
  • --version
plan: Program succeeded
After 87.84 seconds at 2026-05-22 13:51:54Z
Exit code: 0
Stdout:
cargo 1.95.0 (f2d3ce0bd 2026-03-21)
plan: Start program cargo
After 87.84 seconds at 2026-05-22 13:51:54Z
  • cargo
  • clippy
  • --version
plan: Program succeeded
After 87.87 seconds at 2026-05-22 13:51:54Z
Exit code: 0
Stdout:
clippy 0.1.95 (59807616e1 2026-04-14)
plan: Start program rustc
After 87.87 seconds at 2026-05-22 13:51:54Z
  • rustc
  • --version
plan: Program succeeded
After 87.89 seconds at 2026-05-22 13:51:54Z
Exit code: 0
Stdout:
rustc 1.95.0 (59807616e 2026-04-14)
plan: Start program cargo
After 87.89 seconds at 2026-05-22 13:51:54Z
  • cargo
  • test
  • --offline
  • --locked
  • --workspace
plan: ERROR: Program failed
After 98.75 seconds at 2026-05-22 13:52:05Z
Exit code: 101
Stdout:
running 381 tests
test canonical::formatter::test::ascii_control_characters ... ok
test canonical::formatter::test::ordered_nested_object ... ok
test canonical::formatter::test::securesystemslib_asserts ... ok
test cob::cache::migrations::_2::tests::test_migration_2 ... ok
test cob::cache::tests::test_check_version ... ok
test cob::cache::migrations::_2::tests::test_patch_json_deserialization ... ok
test cob::common::test::test_color ... ok
test cob::cache::tests::test_migrate_to ... ok
test cob::common::test::test_emojis ... ok
test cob::common::test::test_title ... ok
test cob::identity::test::prop_json_eq_str ... ok
test cob::identity::test::eager_staleness ... ok
test cob::identity::test::test_identity_cascading_rejections ... FAILED
test cob::identity::test::test_identity_cannot_redact_terminal_states ... ok
test cob::identity::test::test_identity_redact_revision ... ok
test cob::identity::test::test_identity_remove_delegate_concurrent ... ok
test cob::identity::test::test_identity_reject_concurrent ... ok
test cob::identity::test::test_identity_update_rejected ... ok
test cob::identity::test::test_identity_updates ... ok
test cob::identity::test::test_identity_terminal_states_concurrent ... ok
test cob::identity::test::test_identity_updates_concurrent ... ok
test cob::identity::test::test_identity_updates_concurrent_outdated ... ok
test cob::identity::test::test_valid_identity ... ok
test cob::issue::cache::tests::test_get ... ok
test cob::issue::cache::tests::test_is_empty ... ok
test cob::issue::cache::tests::test_list ... ok
test cob::issue::cache::tests::test_counts ... ok
test cob::issue::cache::tests::test_remove ... ok
test cob::issue::cache::tests::test_list_by_status ... ok
test cob::issue::test::test_embeds ... ok
test cob::issue::test::test_embeds_edit ... ok
test cob::issue::test::test_invalid_actions ... ok
test cob::issue::test::test_invalid_cob ... ok
test cob::issue::test::test_concurrency ... ok
test cob::issue::test::test_invalid_tx ... ok
test cob::issue::test::test_invalid_tx_reference ... ok
test cob::issue::test::test_issue_all ... ok
test cob::issue::test::test_issue_comment ... ok
test cob::issue::test::test_issue_create_and_assign ... ok
test cob::issue::test::test_issue_comment_redact ... ok
test cob::issue::test::test_issue_create_and_get ... ok
test cob::issue::test::test_issue_create_and_change_state ... ok
test cob::issue::test::test_issue_create_and_unassign ... ok
test cob::issue::test::test_issue_create_and_reassign ... ok
test cob::issue::test::test_issue_edit ... ok
test cob::issue::test::test_issue_edit_description ... ok
test cob::issue::test::test_issue_label ... ok
test cob::issue::test::test_issue_multilines ... ok
test cob::issue::test::test_issue_react ... ok
test cob::issue::test::test_issue_state_serde ... ok
test cob::issue::test::test_ordering ... ok
test cob::patch::actions::test::test_review_edit ... ok
test cob::issue::test::test_issue_reply ... ok
test cob::patch::cache::tests::test_counts ... ok
test cob::patch::cache::tests::test_get ... ok
test cob::patch::cache::tests::test_is_empty ... ok
test cob::patch::cache::tests::test_list ... ok
test cob::patch::cache::tests::test_list_by_status ... ok
test cob::patch::cache::tests::test_remove ... ok
test cob::patch::encoding::review::test::test_review_deserialize_summary_migration_null_summary ... ok
test cob::patch::encoding::review::test::test_review_deserialize_summary_migration_with_summary ... ok
test cob::patch::encoding::review::test::test_review_deserialize_summary_migration_without_summary ... ok
test cob::patch::encoding::review::test::test_review_deserialize_summary_v2 ... ok
test cob::patch::encoding::review::test::test_review_summary ... ok
test cob::patch::test::test_json ... ok
test cob::patch::test::test_json_serialization ... ok
test cob::patch::test::test_patch_create_and_get ... ok
test cob::patch::test::test_patch_discussion ... ok
test cob::patch::test::test_patch_merge ... ok
test cob::patch::test::test_patch_redact ... ok
test cob::patch::test::test_patch_review ... ok
test cob::patch::test::test_patch_review_comment ... ok
test cob::patch::test::test_patch_review_duplicate ... ok
test cob::patch::test::test_patch_review_edit ... ok
test cob::patch::test::test_patch_review_edit_comment ... ok
test cob::patch::test::test_patch_review_remove_summary ... ok
test cob::patch::test::test_patch_review_revision_redact ... ok
test cob::patch::test::test_patch_update ... ok
test cob::patch::test::test_reactions_json_serialization ... ok
test cob::patch::test::test_revision_edit_redact ... ok
test cob::patch::test::test_revision_reaction ... ok
test cob::patch::test::test_revision_review_merge_redacted ... ok
test cob::stream::tests::test_all_from ... ok
test cob::stream::tests::test_all_from_until ... ok
test cob::stream::tests::test_all_until ... ok
test cob::stream::tests::test_from_until ... ok
test cob::stream::tests::test_regression_from_until ... ok
test cob::thread::tests::prop_ordering ... ok
test cob::thread::tests::test_comment_edit_missing ... ok
test cob::thread::tests::test_comment_edit_redacted ... ok
test cob::thread::tests::test_comment_redact_missing ... ok
test cob::thread::tests::test_duplicate_comments ... ok
test cob::thread::tests::test_edit_comment ... ok
test cob::thread::tests::test_redact_comment ... ok
test cob::thread::tests::test_timeline ... ok
test git::canonical::protect::tests::refs_rad ... ok
test git::canonical::protect::tests::refs_rad_id ... ok
test git::canonical::protect::tests::refs_radieschen ... ok
test git::canonical::quorum::test::merge_base_commutative ... ok
test git::canonical::quorum::test::test_merge_bases ... ok
test git::canonical::rules::test::canonical ... ok
test git::canonical::rules::test::deserialization ... ok
test git::canonical::rules::test::deserialize_extensions ... ok
test git::canonical::rules::test::matches_exactly_curly_braces ... ok
test git::canonical::rules::test::matches_expands_globs_appropriately ... ok
test git::canonical::rules::test::ordering ... ok
test git::canonical::rules::test::property::identity ... ok
test git::canonical::rules::test::property::prefix ... ok
test git::canonical::rules::test::property::prefix_negative ... ok
test git::canonical::rules::test::property::suffix ... ok
test git::canonical::rules::test::property::suffix_negative ... ok
test git::canonical::rules::test::property::trailing_asterisk_partial_component ... ok
test git::canonical::rules::test::roundtrip ... ok
test git::canonical::rules::test::rule_validate_failures ... ok
test git::canonical::rules::test::rule_validate_success ... ok
test git::canonical::rules::test::special_branches ... ok
test git::canonical::symbolic::test::deserialize_infinite ... ok
test git::canonical::symbolic::test::deserialize_order ... ok
test git::canonical::symbolic::test::deserialize_valid ... ok
test git::canonical::symbolic::test::infinite_extend ... ok
test git::canonical::symbolic::test::infinite_multi ... ok
test git::canonical::symbolic::test::infinite_single ... ok
test git::canonical::symbolic::test::reclassification_combine ... ok
test git::canonical::symbolic::test::reclassification_combine_reverse ... ok
test git::canonical::symbolic::test::reclassification_diamond ... ok
test git::canonical::symbolic::test::reclassification_order_invariant ... ok
test git::canonical::symbolic::test::reclassification_reverse_chain ... ok
test git::canonical::symbolic::test::resolve_two_hop_chain ... ok
test git::canonical::symbolic::test::target_classification ... ok
test git::canonical::symbolic::test::target_classification_symbolic ... ok
test git::canonical::symbolic::test::target_reclassification ... ok
test git::canonical::symbolic::test::target_reclassification_commutative ... ok
test git::canonical::tests::test_commit_quorum_fork_of_a_fork ... ok
test git::canonical::tests::test_commit_quorum_forked_merge_commits ... ok
test git::canonical::tests::test_commit_quorum_groups ... ok
test git::canonical::tests::test_commit_quorum_linear ... ok
test git::canonical::tests::test_commit_quorum_merges ... ok
test git::canonical::tests::test_commit_quorum_single ... ok
test git::canonical::tests::test_commit_quorum_three_way_fork ... ok
test git::canonical::tests::test_commit_quorum_two_way_fork ... ok
test git::canonical::tests::test_quorum_different_types ... ok
test git::canonical::tests::test_quorum_properties ... ok
test git::canonical::tests::test_tag_quorum ... ok
test git::test::test_version_from_str ... ok
test git::test::test_version_ord ... ok
test identity::crefs::tests::invalid_clash ... ok
test identity::crefs::tests::invalid_clash_asterisk_name ... ok
test identity::crefs::tests::invalid_dangling ... ok
test identity::crefs::tests::omit_symbolic ... ok
test identity::crefs::tests::valid ... ok
test identity::crefs::tests::valid_asterisk_target ... ok
test identity::did::test::test_did_encode_decode ... ok
test identity::did::test::test_did_vectors ... ok
test identity::doc::test::default_branch_clash ... ok
test identity::doc::test::default_branch_without_project ... ok
test cob::patch::cache::tests::test_find_by_revision ... ok
test identity::doc::test::test_canonical_doc ... ok
test identity::doc::test::test_canonical_example ... ok
test identity::doc::test::test_duplicate_dids ... ok
test identity::doc::test::test_future_version_error ... ok
test identity::doc::test::test_is_valid_version ... ok
test identity::doc::test::test_max_delegates ... ok
test identity::doc::test::test_not_found ... ok
test identity::doc::test::test_parse_version ... ok
test identity::doc::test::test_visibility_json ... ok
test identity::doc::update::test::test_can_update_crefs ... ok
test identity::doc::update::test::test_cannot_include_default_branch_rule ... ok
test identity::doc::update::test::test_default_branch_rule_exists_after_verification ... ok
test identity::project::test::test_project_name ... ok
test node::address::store::test::skip_invalid_address_type ... ok
test node::address::store::test::skip_mismatched_address_type ... ok
test node::address::store::test::test_alias ... ok
test node::address::store::test::test_disconnected ... ok
test node::address::store::test::test_disconnected_ban ... ok
test node::address::store::test::test_empty ... ok
test node::address::store::test::test_entries ... ok
test node::address::store::test::test_entries_skips_unparsable_address ... ok
test node::address::store::test::test_get_none ... ok
test node::address::store::test::test_insert_and_get ... ok
test node::address::store::test::test_insert_and_remove ... ok
test node::address::store::test::test_insert_and_update ... ok
test node::address::store::test::test_insert_duplicate ... ok
test node::address::store::test::test_node_aliases ... ok
test node::address::store::test::test_remove_nothing ... ok
test node::command::test::command_result ... ok
test node::config::test::deserialize_migrating_scope ... ok
test node::config::test::fetch_level_min ... ok
test node::config::test::onion_absent ... ok
test node::config::test::onion_null ... ok
test node::config::test::partial ... ok
test node::config::test::regression_ipv6_address_brackets ... ok
test node::config::test::regression_ipv6_address_no_brackets ... ok
test node::config::test::serialize_migrating_scope ... ok
test node::config::test::user_agent_custom ... ok
test node::config::test::user_agent_default ... ok
test node::config::test::user_agent_default_explicit ... ok
test node::config::test::user_agent_opt_out ... ok
test node::db::config::test::database_config_valid_combinations ... ok
test node::db::config::test::invalid ... ok
test node::db::test::migration_8::all_ipv6_formatted_dns_addresses_are_retyped ... ok
test node::db::test::migration_8::dns_address_starting_with_bracket_but_missing_closing_bracket_colon_is_unaffected ... ok
test node::db::test::migration_8::dns_address_with_bracket_not_at_start_is_unaffected ... ok
test node::db::test::migration_8::ipv4_address_is_unaffected ... ok
test node::db::test::migration_8::ipv6_formatted_dns_address_is_deleted_when_correct_ipv6_row_already_exists ... ok
test node::db::test::migration_8::ipv6_formatted_dns_address_is_retyped_to_ipv6 ... ok
test node::db::test::migration_8::migration_applies_to_all_nodes ... ok
test node::db::test::migration_8::plain_dns_hostname_without_brackets_is_unaffected ... ok
test node::db::test::migration_8::retype_preserves_address_metadata ... ok
test node::db::test::migration_9::bracketed_non_ipv6_garbage_is_deleted ... ok
test node::db::test::migration_9::dns_row_is_unaffected_even_when_inner_part_has_no_colon ... ok
test node::db::test::migration_9::empty_brackets_ipv6_row_is_deleted ... ok
test node::db::test::migration_9::full_ipv6_address_is_kept ... ok
test node::db::test::migration_9::ipv4_row_is_unaffected ... ok
test node::db::test::migration_9::loopback_address_is_kept ... ok
test node::db::test::migration_9::unspecified_address_is_kept ... ok
test node::db::test::test_version ... ok
test node::features::test::test_operations ... ok
test node::notifications::store::test::test_branch_notifications ... ok
test node::notifications::store::test::test_clear ... ok
test node::notifications::store::test::test_cob_notifications ... ok
test node::notifications::store::test::test_counts_by_repo ... ok
test node::notifications::store::test::test_duplicate_notifications ... ok
test node::notifications::store::test::test_notification_status ... ok
test node::policy::store::test::test_follow_and_unfollow_node ... ok
test node::policy::store::test::test_node_aliases ... ok
test node::policy::store::test::test_node_policies ... ok
test node::policy::store::test::test_node_policy ... ok
test node::policy::store::test::test_repo_policies ... ok
test node::policy::store::test::test_repo_policy ... ok
test node::policy::store::test::test_seed_and_unseed_repo ... ok
test node::policy::store::test::test_update_alias ... ok
test node::policy::store::test::test_update_scope ... ok
test node::refs::store::test::test_count ... ok
test node::refs::store::test::test_set_and_delete ... ok
test node::refs::store::test::test_set_and_get ... ok
test node::routing::test::test_count ... ok
test node::routing::test::test_entries ... ok
test node::routing::test::test_insert_and_get ... ok
test node::routing::test::test_insert_and_get_resources ... ok
test node::routing::test::test_insert_and_remove ... ok
test node::routing::test::test_insert_duplicate ... ok
test node::routing::test::test_insert_existing_updated_time ... ok
test node::routing::test::test_len ... ok
test node::routing::test::test_prune ... ok
test node::routing::test::test_remove_many ... ok
test node::routing::test::test_remove_redundant ... ok
test node::routing::test::test_update_existing_multi ... ok
test node::sync::announce::test::all_synced_nodes_are_preferred_seeds ... ok
test node::sync::announce::test::announcer_adapts_target_to_reach ... ok
test node::sync::announce::test::announcer_preferred_seeds_or_replica_factor ... ok
test node::sync::announce::test::announcer_reached_max_replication_target ... ok
test node::sync::announce::test::announcer_reached_min_replication_target ... ok
test node::sync::announce::test::announcer_reached_preferred_seeds ... ok
test node::sync::announce::test::announcer_synced_with_unknown_node ... ok
test node::sync::announce::test::announcer_timed_out ... ok
test node::sync::announce::test::announcer_with_replication_factor_zero_and_preferred_seeds ... ok
test node::sync::announce::test::cannot_construct_announcer ... ok
test node::sync::announce::test::construct_node_appears_in_multiple_input_sets ... ok
test node::sync::announce::test::construct_only_preferred_seeds_provided ... ok
test node::sync::announce::test::invariant_progress_should_match_state ... ok
test node::sync::announce::test::local_node_in_multiple_sets ... ok
test node::sync::announce::test::local_node_in_preferred_seeds ... ok
test node::sync::announce::test::local_node_in_synced_set ... ok
test node::sync::announce::test::local_node_in_unsynced_set ... ok
test node::sync::announce::test::local_node_only_in_all_sets_results_in_no_seeds_error ... ok
test node::sync::announce::test::preferred_seeds_already_synced ... ok
test node::sync::announce::test::synced_with_local_node_is_ignored ... ok
test node::sync::announce::test::synced_with_same_node_multiple_times ... ok
test node::sync::announce::test::timed_out_after_reaching_success ... ok
test node::sync::fetch::test::all_nodes_are_candidates ... ok
test node::sync::fetch::test::all_nodes_are_fetchable ... ok
test node::sync::fetch::test::could_not_reach_target ... ok
test node::sync::fetch::test::ignores_duplicates_and_local_node ... ok
test node::sync::fetch::test::preferred_seeds_target_returned_over_replicas ... ok
test node::sync::fetch::test::reaches_target_of_max_replicas ... ok
test node::sync::fetch::test::reaches_target_of_preferred_seeds ... ok
test node::sync::fetch::test::reaches_target_of_replicas ... ok
test node::sync::test::ensure_replicas_construction ... ok
test node::sync::test::replicas_constrain_to ... ok
test node::test::test_address ... ok
test node::test::test_alias ... ok
test node::test::test_command_result ... ok
test node::test::test_user_agent ... ok
test node::timestamp::tests::test_timestamp_max ... ok
test identity::doc::test::prop_encode_decode ... ok
test profile::test::canonicalize_home ... ok
test profile::test::test_config ... ok
test rad::tests::test_checkout ... ok
test rad::tests::test_fork ... ok
test rad::tests::test_init ... ok
test storage::git::tests::test_references_of ... ok
test storage::git::tests::test_sign_refs ... ok
test storage::git::transport::local::url::test::test_url_parse ... ok
test storage::git::transport::local::url::test::test_url_to_string ... ok
test storage::git::transport::remote::url::test::test_url_parse ... ok
test profile::config::test::schema ... ok
test storage::refs::sigrefs::git::properties::idempotent_write ... ok
test storage::refs::sigrefs::git::properties::initial_commit_roundtrip ... ok
test storage::refs::sigrefs::property::idempotent ... ok
test storage::refs::sigrefs::property::roundtrip ... ok
test storage::refs::sigrefs::read::test::commit_reader::identity_root_error ... ok
test storage::refs::sigrefs::read::test::commit_reader::missing_commit ... ok
test storage::refs::sigrefs::read::test::commit_reader::read_ok ... ok
test storage::refs::sigrefs::read::test::commit_reader::too_many_parents ... ok
test storage::refs::sigrefs::read::test::commit_reader::tree_error ... ok
test storage::refs::sigrefs::read::test::identity_root_reader::doc_blob_error ... ok
test storage::refs::sigrefs::read::test::identity_root_reader::missing_identity ... ok
test storage::refs::sigrefs::read::test::identity_root_reader::read_ok_none ... ok
test storage::refs::sigrefs::read::test::identity_root_reader::read_ok_some ... ok
test storage::refs::sigrefs::read::test::resolve_tip::find_reference_error ... ok
test storage::refs::sigrefs::read::test::resolve_tip::missing_sigrefs ... ok
test storage::refs::sigrefs::read::test::resolve_tip::resolve_tip_ok ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::detect_parent::root_without_parent ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::detect_parent::root_without_root ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::downgrade::parent ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::downgrade::restore ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::downgrade::root ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::downgrade::root_with_parent ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::head_commit_error ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::head_verify_mismatched_identity_error ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::head_verify_signature_error ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::invalid_parent ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::read_ok_no_parent ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::read_ok_parent ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::read_ok_root ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::replay::alternating ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::replay::chain ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::replay::multiple ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::replay::root_at_head ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::single_commit ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::two_commits ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::walk_commit_error ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::walk_verify_error ... ok
test storage::refs::sigrefs::read::test::tree_reader::missing_both ... ok
test storage::refs::sigrefs::read::test::tree_reader::missing_refs ... ok
test storage::refs::sigrefs::read::test::tree_reader::missing_signature ... ok
test storage::refs::sigrefs::read::test::tree_reader::parse_refs_error ... ok
test storage::refs::sigrefs::read::test::tree_reader::parse_signature_error ... ok
test storage::refs::sigrefs::read::test::tree_reader::read_ok ... ok
test storage::refs::sigrefs::read::test::tree_reader::read_refs_error ... ok
test storage::refs::sigrefs::read::test::tree_reader::read_signature_error ... ok
test storage::refs::sigrefs::write::test::commit_writer::tree_error ... ok
test storage::refs::sigrefs::write::test::commit_writer::write_commit_error ... ok
test storage::refs::sigrefs::write::test::commit_writer::write_empty_refs ... ok
test storage::refs::sigrefs::write::test::commit_writer::write_root_ok ... ok
test storage::refs::sigrefs::write::test::commit_writer::write_with_parent_ok ... ok
test storage::refs::sigrefs::write::test::head_reader::no_head ... ok
test storage::refs::sigrefs::write::test::head_reader::read_ok ... ok
test storage::refs::sigrefs::write::test::head_reader::reference_error ... ok
test storage::refs::sigrefs::write::test::head_reader::refs_blob_error ... ok
test storage::refs::sigrefs::write::test::head_reader::refs_blob_missing ... ok
test storage::refs::sigrefs::write::test::head_reader::refs_parse_error ... ok
test storage::refs::sigrefs::write::test::head_reader::signature_blob_error ... ok
test storage::refs::sigrefs::write::test::head_reader::signature_blob_missing ... ok
test storage::refs::sigrefs::write::test::head_reader::signature_parse_error ... ok
test storage::refs::sigrefs::write::test::signed_refs_writer::commit_error ... ok
test storage::refs::sigrefs::write::test::signed_refs_writer::head_error ... ok
test storage::refs::sigrefs::write::test::signed_refs_writer::never_write_rad_sigrefs ... ok
test storage::refs::sigrefs::write::test::signed_refs_writer::reference_error ... ok
test storage::refs::sigrefs::write::test::signed_refs_writer::unchanged ... ok
test storage::refs::sigrefs::write::test::signed_refs_writer::unchanged_force_writes_new_commit ... ok
test storage::refs::sigrefs::write::test::signed_refs_writer::write_empty_refs ... ok
test storage::refs::sigrefs::write::test::signed_refs_writer::write_root_ok ... ok
test storage::refs::sigrefs::write::test::signed_refs_writer::write_with_parent_ok ... ok
test storage::refs::sigrefs::write::test::tree_writer::sign_error ... ok
test storage::refs::sigrefs::write::test::tree_writer::write_ok ... ok
test storage::refs::sigrefs::write::test::tree_writer::write_tree_error ... ok
test storage::refs::tests::prop_canonical_roundtrip ... ok
test storage::refs::sigrefs::git::properties::chain_roundtrip ... ok
test storage::tests::test_storage ... ok
test test::assert::test::assert_with_message ... ok
test test::assert::test::test_assert_no_move ... ok
test test::assert::test::test_assert_panic_0 - should panic ... ok
test test::assert::test::test_assert_panic_1 - should panic ... ok
test test::assert::test::test_assert_panic_2 - should panic ... ok
test test::assert::test::test_assert_succeed ... ok
test test::assert::test::test_panic_message ... ok
test version::test::test_version ... ok
test web::test::description_only ... ok
test web::test::pinned_empty ... ok
test storage::refs::tests::test_rid_verification ... ok

failures:

---- cob::identity::test::test_identity_cascading_rejections stdout ----

thread 'cob::identity::test::test_identity_cascading_rejections' (7075) panicked at crates/radicle/src/cob/identity.rs:1786:9:
assertion `left == right` failed
  left: Active
 right: Rejected
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace


failures:
    cob::identity::test::test_identity_cascading_rejections

test result: FAILED. 380 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 10.56s

Stderr:
    Finished `test` profile [unoptimized + debuginfo] target(s) in 0.26s
     Running unittests src/lib.rs (/ci/cache/cargo-target/debug/deps/radicle-f47a7c2ba456ab00)
error: test failed, to rerun pass `-p radicle --lib`
plan: Action failed: cargo_test
After 99.05 seconds at 2026-05-22 13:52:06Z
CargoTest(
    CargoTest,
)

Raw log messages for Ambient troubleshooting

Raw log messages

These raw log messages are meant to help Ambient developers figure out problems. You can ignore them.

  1. {
      "type": "executor_starts",
      "name": "ambient-execute-plan",
      "version": "0.14.0@c37ec71",
      "timestamp": {
        "secs_since_epoch": 1779457827,
        "nanos_since_epoch": 57257219
      },
      "log_source": "Plan"
    }
  2. {
      "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": 1779457827,
        "nanos_since_epoch": 57656844
      },
      "log_source": "Plan"
    }
  3. {
      "type": "execute_action",
      "action": "mkdir",
      "pathname": "/ci",
      "timestamp": {
        "secs_since_epoch": 1779457827,
        "nanos_since_epoch": 57861667
      },
      "log_source": "Plan"
    }
  4. {
      "type": "action_succeeded",
      "action": "mkdir",
      "pathname": "/ci",
      "timestamp": {
        "secs_since_epoch": 1779457827,
        "nanos_since_epoch": 58459108
      },
      "log_source": "Plan"
    }
  5. {
      "type": "execute_action",
      "action": "mkdir",
      "pathname": "/ci/artifacts",
      "timestamp": {
        "secs_since_epoch": 1779457827,
        "nanos_since_epoch": 58522581
      },
      "log_source": "Plan"
    }
  6. {
      "type": "action_succeeded",
      "action": "mkdir",
      "pathname": "/ci/artifacts",
      "timestamp": {
        "secs_since_epoch": 1779457827,
        "nanos_since_epoch": 58554808
      },
      "log_source": "Plan"
    }
  7. {
      "type": "execute_action",
      "action": "tar_extract",
      "archive": "/dev/vdc",
      "directory": "/ci/src",
      "timestamp": {
        "secs_since_epoch": 1779457827,
        "nanos_since_epoch": 58730624
      },
      "log_source": "Plan"
    }
  8. {
      "type": "action_succeeded",
      "action": "tar_extract",
      "archive": "/dev/vdc",
      "directory": "/ci/src",
      "timestamp": {
        "secs_since_epoch": 1779457827,
        "nanos_since_epoch": 237237535
      },
      "log_source": "Plan"
    }
  9. {
      "type": "execute_action",
      "action": "tar_extract",
      "archive": "/dev/vdf",
      "directory": "/ci/deps",
      "timestamp": {
        "secs_since_epoch": 1779457827,
        "nanos_since_epoch": 240483932
      },
      "log_source": "Plan"
    }
  10. {
      "type": "action_succeeded",
      "action": "tar_extract",
      "archive": "/dev/vdf",
      "directory": "/ci/deps",
      "timestamp": {
        "secs_since_epoch": 1779457835,
        "nanos_since_epoch": 757098508
      },
      "log_source": "Plan"
    }
  11. {
      "type": "execute_action",
      "action": "tar_extract",
      "archive": "/dev/vde",
      "directory": "/ci/cache",
      "timestamp": {
        "secs_since_epoch": 1779457835,
        "nanos_since_epoch": 757147462
      },
      "log_source": "Plan"
    }
  12. {
      "type": "action_succeeded",
      "action": "tar_extract",
      "archive": "/dev/vde",
      "directory": "/ci/cache",
      "timestamp": {
        "secs_since_epoch": 1779457855,
        "nanos_since_epoch": 780259426
      },
      "log_source": "Plan"
    }
  13. {
      "type": "execute_action",
      "action": "shell",
      "shell": "ln -sf /ci /workspace",
      "timestamp": {
        "secs_since_epoch": 1779457855,
        "nanos_since_epoch": 783082976
      },
      "log_source": "Plan"
    }
  14. {
      "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": 1779457855,
        "nanos_since_epoch": 785551803
      },
      "log_source": "Plan"
    }
  15. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "",
      "stderr": "+ ln -sf /ci /workspace\n",
      "timestamp": {
        "secs_since_epoch": 1779457855,
        "nanos_since_epoch": 793610664
      },
      "log_source": "Plan"
    }
  16. {
      "type": "action_succeeded",
      "action": "shell",
      "shell": "ln -sf /ci /workspace",
      "timestamp": {
        "secs_since_epoch": 1779457855,
        "nanos_since_epoch": 796427814
      },
      "log_source": "Plan"
    }
  17. {
      "type": "execute_action",
      "action": "shell",
      "shell": "git config --global user.name 'Ambient CI'",
      "timestamp": {
        "secs_since_epoch": 1779457855,
        "nanos_since_epoch": 798914049
      },
      "log_source": "Plan"
    }
  18. {
      "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": 1779457855,
        "nanos_since_epoch": 801685912
      },
      "log_source": "Plan"
    }
  19. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "",
      "stderr": "+ git config --global user.name 'Ambient CI'\n",
      "timestamp": {
        "secs_since_epoch": 1779457855,
        "nanos_since_epoch": 812847515
      },
      "log_source": "Plan"
    }
  20. {
      "type": "action_succeeded",
      "action": "shell",
      "shell": "git config --global user.name 'Ambient CI'",
      "timestamp": {
        "secs_since_epoch": 1779457855,
        "nanos_since_epoch": 816000808
      },
      "log_source": "Plan"
    }
  21. {
      "type": "execute_action",
      "action": "shell",
      "shell": "git config --global user.email ambient@example.com",
      "timestamp": {
        "secs_since_epoch": 1779457855,
        "nanos_since_epoch": 818782540
      },
      "log_source": "Plan"
    }
  22. {
      "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": 1779457855,
        "nanos_since_epoch": 821539491
      },
      "log_source": "Plan"
    }
  23. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "",
      "stderr": "+ git config --global user.email ambient@example.com\n",
      "timestamp": {
        "secs_since_epoch": 1779457855,
        "nanos_since_epoch": 829606416
      },
      "log_source": "Plan"
    }
  24. {
      "type": "action_succeeded",
      "action": "shell",
      "shell": "git config --global user.email ambient@example.com",
      "timestamp": {
        "secs_since_epoch": 1779457855,
        "nanos_since_epoch": 832563442
      },
      "log_source": "Plan"
    }
  25. {
      "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": 1779457855,
        "nanos_since_epoch": 835286555
      },
      "log_source": "Plan"
    }
  26. {
      "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": 1779457855,
        "nanos_since_epoch": 841560058
      },
      "log_source": "Plan"
    }
  27. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "[detached HEAD 3fc553cf3] 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": 1779457855,
        "nanos_since_epoch": 955916961
      },
      "log_source": "Plan"
    }
  28. {
      "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": 1779457855,
        "nanos_since_epoch": 962287347
      },
      "log_source": "Plan"
    }
  29. {
      "type": "execute_action",
      "action": "cargo_fmt",
      "timestamp": {
        "secs_since_epoch": 1779457855,
        "nanos_since_epoch": 968706350
      },
      "log_source": "Plan"
    }
  30. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            99,
            97,
            114,
            103,
            111
          ]
        },
        {
          "Unix": [
            45,
            45,
            118,
            101,
            114,
            115,
            105,
            111,
            110
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1779457855,
        "nanos_since_epoch": 970688170
      },
      "log_source": "Plan"
    }
  31. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "cargo 1.95.0 (f2d3ce0bd 2026-03-21)\n",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1779457855,
        "nanos_since_epoch": 997819219
      },
      "log_source": "Plan"
    }
  32. {
      "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": 1779457856,
        "nanos_since_epoch": 641017
      },
      "log_source": "Plan"
    }
  33. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "clippy 0.1.95 (59807616e1 2026-04-14)\n",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1779457856,
        "nanos_since_epoch": 52969592
      },
      "log_source": "Plan"
    }
  34. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            114,
            117,
            115,
            116,
            99
          ]
        },
        {
          "Unix": [
            45,
            45,
            118,
            101,
            114,
            115,
            105,
            111,
            110
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1779457856,
        "nanos_since_epoch": 53014727
      },
      "log_source": "Plan"
    }
  35. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "rustc 1.95.0 (59807616e 2026-04-14)\n",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1779457856,
        "nanos_since_epoch": 72896909
      },
      "log_source": "Plan"
    }
  36. {
      "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": 1779457856,
        "nanos_since_epoch": 72942628
      },
      "log_source": "Plan"
    }
  37. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1779457856,
        "nanos_since_epoch": 895838377
      },
      "log_source": "Plan"
    }
  38. {
      "type": "action_succeeded",
      "action": "cargo_fmt",
      "timestamp": {
        "secs_since_epoch": 1779457856,
        "nanos_since_epoch": 897987333
      },
      "log_source": "Plan"
    }
  39. {
      "type": "execute_action",
      "action": "cargo_clippy",
      "timestamp": {
        "secs_since_epoch": 1779457856,
        "nanos_since_epoch": 899983993
      },
      "log_source": "Plan"
    }
  40. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            99,
            97,
            114,
            103,
            111
          ]
        },
        {
          "Unix": [
            45,
            45,
            118,
            101,
            114,
            115,
            105,
            111,
            110
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1779457856,
        "nanos_since_epoch": 901875911
      },
      "log_source": "Plan"
    }
  41. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "cargo 1.95.0 (f2d3ce0bd 2026-03-21)\n",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1779457856,
        "nanos_since_epoch": 912875506
      },
      "log_source": "Plan"
    }
  42. {
      "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": 1779457856,
        "nanos_since_epoch": 915610861
      },
      "log_source": "Plan"
    }
  43. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "clippy 0.1.95 (59807616e1 2026-04-14)\n",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1779457856,
        "nanos_since_epoch": 944962161
      },
      "log_source": "Plan"
    }
  44. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            114,
            117,
            115,
            116,
            99
          ]
        },
        {
          "Unix": [
            45,
            45,
            118,
            101,
            114,
            115,
            105,
            111,
            110
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1779457856,
        "nanos_since_epoch": 945006786
      },
      "log_source": "Plan"
    }
  45. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "rustc 1.95.0 (59807616e 2026-04-14)\n",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1779457856,
        "nanos_since_epoch": 962023694
      },
      "log_source": "Plan"
    }
  46. {
      "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": 1779457856,
        "nanos_since_epoch": 962068050
      },
      "log_source": "Plan"
    }
  47. {
      "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.57s\n",
      "timestamp": {
        "secs_since_epoch": 1779457868,
        "nanos_since_epoch": 617405613
      },
      "log_source": "Plan"
    }
  48. {
      "type": "action_succeeded",
      "action": "cargo_clippy",
      "timestamp": {
        "secs_since_epoch": 1779457868,
        "nanos_since_epoch": 640001076
      },
      "log_source": "Plan"
    }
  49. {
      "type": "execute_action",
      "action": "cargo_build",
      "timestamp": {
        "secs_since_epoch": 1779457868,
        "nanos_since_epoch": 642059327
      },
      "log_source": "Plan"
    }
  50. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            99,
            97,
            114,
            103,
            111
          ]
        },
        {
          "Unix": [
            45,
            45,
            118,
            101,
            114,
            115,
            105,
            111,
            110
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1779457868,
        "nanos_since_epoch": 644165809
      },
      "log_source": "Plan"
    }
  51. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "cargo 1.95.0 (f2d3ce0bd 2026-03-21)\n",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1779457868,
        "nanos_since_epoch": 655371321
      },
      "log_source": "Plan"
    }
  52. {
      "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": 1779457868,
        "nanos_since_epoch": 658159600
      },
      "log_source": "Plan"
    }
  53. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "clippy 0.1.95 (59807616e1 2026-04-14)\n",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1779457868,
        "nanos_since_epoch": 688051954
      },
      "log_source": "Plan"
    }
  54. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            114,
            117,
            115,
            116,
            99
          ]
        },
        {
          "Unix": [
            45,
            45,
            118,
            101,
            114,
            115,
            105,
            111,
            110
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1779457868,
        "nanos_since_epoch": 688093880
      },
      "log_source": "Plan"
    }
  55. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "rustc 1.95.0 (59807616e 2026-04-14)\n",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1779457868,
        "nanos_since_epoch": 705558861
      },
      "log_source": "Plan"
    }
  56. {
      "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": 1779457868,
        "nanos_since_epoch": 708398855
      },
      "log_source": "Plan"
    }
  57. {
      "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-node v0.20.0 (/ci/src/crates/radicle-node)\n   Compiling radicle-cli v0.21.0 (/ci/src/crates/radicle-cli)\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 46.09s\n",
      "timestamp": {
        "secs_since_epoch": 1779457914,
        "nanos_since_epoch": 859603500
      },
      "log_source": "Plan"
    }
  58. {
      "type": "action_succeeded",
      "action": "cargo_build",
      "timestamp": {
        "secs_since_epoch": 1779457914,
        "nanos_since_epoch": 859700096
      },
      "log_source": "Plan"
    }
  59. {
      "type": "execute_action",
      "action": "cargo_test",
      "timestamp": {
        "secs_since_epoch": 1779457914,
        "nanos_since_epoch": 859939316
      },
      "log_source": "Plan"
    }
  60. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            99,
            97,
            114,
            103,
            111
          ]
        },
        {
          "Unix": [
            45,
            45,
            118,
            101,
            114,
            115,
            105,
            111,
            110
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1779457914,
        "nanos_since_epoch": 859948979
      },
      "log_source": "Plan"
    }
  61. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "cargo 1.95.0 (f2d3ce0bd 2026-03-21)\n",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1779457914,
        "nanos_since_epoch": 897409804
      },
      "log_source": "Plan"
    }
  62. {
      "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": 1779457914,
        "nanos_since_epoch": 900170876
      },
      "log_source": "Plan"
    }
  63. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "clippy 0.1.95 (59807616e1 2026-04-14)\n",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1779457914,
        "nanos_since_epoch": 929604988
      },
      "log_source": "Plan"
    }
  64. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            114,
            117,
            115,
            116,
            99
          ]
        },
        {
          "Unix": [
            45,
            45,
            118,
            101,
            114,
            115,
            105,
            111,
            110
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1779457914,
        "nanos_since_epoch": 929645900
      },
      "log_source": "Plan"
    }
  65. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "rustc 1.95.0 (59807616e 2026-04-14)\n",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1779457914,
        "nanos_since_epoch": 946909724
      },
      "log_source": "Plan"
    }
  66. {
      "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": 1779457914,
        "nanos_since_epoch": 949607053
      },
      "log_source": "Plan"
    }
  67. {
      "type": "program_failed",
      "exit_code": 101,
      "stdout": "\nrunning 381 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_migration_2 ... ok\ntest cob::cache::tests::test_check_version ... ok\ntest cob::cache::migrations::_2::tests::test_patch_json_deserialization ... ok\ntest cob::common::test::test_color ... ok\ntest cob::cache::tests::test_migrate_to ... ok\ntest cob::common::test::test_emojis ... ok\ntest cob::common::test::test_title ... ok\ntest cob::identity::test::prop_json_eq_str ... ok\ntest cob::identity::test::eager_staleness ... ok\ntest cob::identity::test::test_identity_cascading_rejections ... FAILED\ntest cob::identity::test::test_identity_cannot_redact_terminal_states ... ok\ntest cob::identity::test::test_identity_redact_revision ... ok\ntest cob::identity::test::test_identity_remove_delegate_concurrent ... ok\ntest cob::identity::test::test_identity_reject_concurrent ... ok\ntest cob::identity::test::test_identity_update_rejected ... ok\ntest cob::identity::test::test_identity_updates ... ok\ntest cob::identity::test::test_identity_terminal_states_concurrent ... ok\ntest cob::identity::test::test_identity_updates_concurrent ... ok\ntest cob::identity::test::test_identity_updates_concurrent_outdated ... ok\ntest cob::identity::test::test_valid_identity ... ok\ntest cob::issue::cache::tests::test_get ... ok\ntest cob::issue::cache::tests::test_is_empty ... ok\ntest cob::issue::cache::tests::test_list ... ok\ntest cob::issue::cache::tests::test_counts ... ok\ntest cob::issue::cache::tests::test_remove ... ok\ntest cob::issue::cache::tests::test_list_by_status ... 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_invalid_cob ... ok\ntest cob::issue::test::test_concurrency ... 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_label ... ok\ntest cob::issue::test::test_issue_multilines ... 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_serialization ... ok\ntest cob::patch::test::test_patch_create_and_get ... ok\ntest cob::patch::test::test_patch_discussion ... 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_patch_update ... 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::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_from_until ... ok\ntest cob::stream::tests::test_regression_from_until ... ok\ntest cob::thread::tests::prop_ordering ... 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::patch::cache::tests::test_find_by_revision ... 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 identity::doc::test::prop_encode_decode ... 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 profile::config::test::schema ... 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::property::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::sigrefs::git::properties::chain_roundtrip ... 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::tests::test_rid_verification ... ok\n\nfailures:\n\n---- cob::identity::test::test_identity_cascading_rejections stdout ----\n\nthread 'cob::identity::test::test_identity_cascading_rejections' (7075) panicked at crates/radicle/src/cob/identity.rs:1786:9:\nassertion `left == right` failed\n  left: Active\n right: Rejected\nnote: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\n\n\nfailures:\n    cob::identity::test::test_identity_cascading_rejections\n\ntest result: FAILED. 380 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 10.56s\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)\nerror: test failed, to rerun pass `-p radicle --lib`\n",
      "timestamp": {
        "secs_since_epoch": 1779457925,
        "nanos_since_epoch": 810253241
      },
      "log_source": "Plan"
    }
  68. {
      "type": "action_failed",
      "action": "cargo_test",
      "timestamp": {
        "secs_since_epoch": 1779457926,
        "nanos_since_epoch": 109069995
      },
      "log_source": "Plan"
    }
  69. {
      "type": "executor_ends_in_failure",
      "exit_code": 1,
      "timestamp": {
        "secs_since_epoch": 1779457926,
        "nanos_since_epoch": 109850480
      },
      "log_source": "Plan"
    }

Trigger message

{
  "request": "trigger",
  "version": 1,
  "event_type": "patch",
  "repository": {
    "id": "rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5",
    "name": "heartwood",
    "description": "Radicle Heartwood Protocol & Stack",
    "private": false,
    "default_branch": "master",
    "delegates": [
      "did:key:z6MksFqXN3Yhqk8pTJdUGLwATkRfQvwZXPqR2qMEhbS9wzpT",
      "did:key:z6MktaNvN1KVFMkSRAiN4qK5yvX1zuEEaseeX5sffhzPZRZW",
      "did:key:z6MkireRatUThvd3qzfKht1S44wpm4FEWSSa4PRMTSQZ3voM",
      "did:key:z6MkgFq6z5fkF2hioLLSNu1zP2qEL1aHXHZzGH1FLFGAnBGz",
      "did:key:z6MkkPvBfjP4bQmco5Dm7UGsX2ruDBieEHi8n9DVJWX5sTEz"
    ]
  },
  "action": "Created",
  "patch": {
    "id": "712a995a282fd544b081ea02dae7ff246810a20c",
    "author": {
      "id": "did:key:z6MkwGoyYxt6A2VE3fvZyH2rgiWdsXHBeV7jm7GSByS2aagA",
      "alias": "ade"
    },
    "title": "radicle/cob/identity: Rewrite Evaluation",
    "state": {
      "status": "open",
      "conflicts": []
    },
    "before": "998ff91e2c25f1432de007c90fb447849ada37d2",
    "after": "22ce2ce70609009d3be6a6403aca07106383e262",
    "commits": [
      "22ce2ce70609009d3be6a6403aca07106383e262",
      "f569db0d45a7c3680daa8e52d20b44fe6a571b16",
      "c45d21ee5db018e0a6cecf2e57516607d9cb4ebc",
      "afc03cdff6c2d1772b53c93b2e29a783d3fa0799",
      "7f92cfda0ac5572854bc564f60071f6e17371c62",
      "d5f6dae7d019c4b7ceb0c92688936762344950d6",
      "2762c2d7aa6ef61a796292cff931b829a3989901"
    ],
    "target": "067a9d13bf3c4d7127d07ac9a475255712d4d4f2",
    "labels": [],
    "assignees": [],
    "revisions": [
      {
        "id": "712a995a282fd544b081ea02dae7ff246810a20c",
        "author": {
          "id": "did:key:z6MkwGoyYxt6A2VE3fvZyH2rgiWdsXHBeV7jm7GSByS2aagA",
          "alias": "ade"
        },
        "description": "### Use verdicts to count votes\n\nEvaluation of this COB is implemented under the assumption that\ndelegates accept at most one revision.\n\nThis can lead to issues, if some delegates create new revisions eagerly,\nwithout waiting for the others to vote on earlier revisions. As the\neager delegates start accepting newer and newer revisions, this shadows\ntheir acceptance of earlier revisions, which leads to failure to\nrecognize that these earlier revisions were actually accepted by a\nmajority.\n\nTo avoid such situations, remove `heads`, and always count the number of\n\"accept\" verdicts explicitly.\n\n### Rewrite Evaluation\n\nEvaluation of the COB `xyz.radicle.id` is rewritten to remove the\nvariant `State::Stale`.\n\nSince we require the history of accepted revisions to be linear, we may\nas well interpret all siblings of adopted revisions to be rejected.\nThis gives a nice symmetry between accepted and rejected revisions.\n\nIntroduce `State::Redacted`, as handling redacted revisions with their\nown state is easier to reason about compared to having to maintain\ninvariants for `revisions: BTreeMap<RevisionId, Option<Revision>>`.",
        "base": "998ff91e2c25f1432de007c90fb447849ada37d2",
        "oid": "7f92cfda0ac5572854bc564f60071f6e17371c62",
        "timestamp": 1779442165
      },
      {
        "id": "52e5ed2946f3c207f5de086af788253f76a1fb70",
        "author": {
          "id": "did:key:z6MkwGoyYxt6A2VE3fvZyH2rgiWdsXHBeV7jm7GSByS2aagA",
          "alias": "ade"
        },
        "description": "Adds 3 additional tests. The last is failing.",
        "base": "998ff91e2c25f1432de007c90fb447849ada37d2",
        "oid": "22ce2ce70609009d3be6a6403aca07106383e262",
        "timestamp": 1779457796
      }
    ]
  }
}

Ambient stdout

executor from config: /usr/bin/ambient-execute-plan
executor from PATH: /usr/bin/ambient-execute-plan
run CI for rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5
ERROR: CI run failed inside QEMU

Ambient stderr

<empty log>