CI run for rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5

Radicle repository id rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5

Table of Contents

Run log

[2025-09-30T17:32:33Z INFO  ambient] ambient starts
[=3h[=3hBdsDxe: failed to load Boot0001 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0): Not Found
BdsDxe: loading Boot0002 "UEFI Misc Device" from PciRoot(0x0)/Pci(0x2,0x0)
BdsDxe: starting Boot0002 "UEFI Misc Device" from PciRoot(0x0)/Pci(0x2,0x0)
Welcome to GRUB!


INFO: Block devices
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
vda    254:0    0   100G  0 disk 
├─vda1 254:1    0   953M  0 part 
└─vda2 254:2    0  99.1G  0 part /
vdb    254:16   0   6.1M  1 disk 
vdc    254:32   0  29.2M  1 disk 
vdd    254:48   0   9.3G  0 disk 
vde    254:64   0  46.6G  0 disk 
vdf    254:80   0 809.1M  1 disk 
INFO: Extracting tar archive from /dev/vdb
drwxr-xr-x _rad/_rad         0 2025-09-30 17:28 ./
-rw-r--r-- _rad/_rad      2450 2025-09-30 17:28 ./plan.yaml
-rwxr-xr-x _rad/_rad   6410400 2025-09-30 17:28 ./run-ci
INFO: Extracted files:
  4587526      4 drwxr-xr-x   2 1001     1001         4096 Sep 30 17:28 .
  4587527      4 -rw-r--r--   1 1001     1001         2450 Sep 30 17:28 ./plan.yaml
  4587530   6264 -rwxr-xr-x   1 1001     1001      6410400 Sep 30 17:28 ./run-ci
INFO: Running run-ci from /dev/vdb
================================ BEGIN ================================
[2025-09-30T17:29:32Z TRACE ambient_execute_plan] ambient-execute-plan version 0.7.0@14cdd4c starts
[2025-09-30T17:29:32Z DEBUG ambient_execute_plan] ambient-execute-plan version 0.7.0@14cdd4c starts
[2025-09-30T17:29:32Z INFO  ambient_execute_plan] ambient-execute-plan version 0.7.0@14cdd4c starts
[2025-09-30T17:29:32Z WARN  ambient_execute_plan] ambient-execute-plan version 0.7.0@14cdd4c starts
[2025-09-30T17:29:32Z ERROR ambient_execute_plan] ambient-execute-plan version 0.7.0@14cdd4c starts
RunnablePlan::from_file: filename=plan.yaml
steps:
- action: mkdir
  pathname: /workspace
- action: mkdir
  pathname: /workspace/artifacts
- action: tar_extract
  archive: /dev/vdc
  directory: /workspace/src
- action: tar_extract
  archive: /dev/vdf
  directory: /workspace/deps
- action: tar_extract
  archive: /dev/vde
  directory: /workspace/cache
- action: spawn
  argv:
  - find
  - /workspace
  - -maxdepth
  - '2'
  - -ls
- 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
- 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
- action: tar_create
  archive: /dev/vde
  directory: /workspace/cache
- action: tar_create
  archive: /dev/vdd
  directory: /workspace/artifacts
executor_drive: /dev/vdb
source_drive: /dev/vdc
artifact_drive: /dev/vdd
cache_drive: /dev/vde
deps_drive: /dev/vdf
workspace_dir: /workspace
source_dir: /workspace/src
deps_dir: /workspace/deps
cache_dir: /workspace/cache
artifacts_dir: /workspace/artifacts


[2025-09-30T17:29:32Z DEBUG ambient_ci::plan] RUN: Action Mkdir {
        pathname: "/workspace",
    }
[2025-09-30T17:29:32Z DEBUG ambient_ci::action] Plan::execute: plan=Mkdir {
        pathname: "/workspace",
    }
[2025-09-30T17:29:32Z DEBUG ambient_ci::action] Plan::execute: context=Context {
        envs: {
            "CARGO_TARGET_DIR": "/workspace/cache",
            "CARGO_HOME": "/workspace/deps",
            "PATH": "/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
        },
        source_dir: "/workspace/src",
    }
[2025-09-30T17:29:32Z DEBUG ambient_ci::plan] RUN: Action finished OK
[2025-09-30T17:29:32Z DEBUG ambient_ci::plan] RUN: Action Mkdir {
        pathname: "/workspace/artifacts",
    }
[2025-09-30T17:29:32Z DEBUG ambient_ci::action] Plan::execute: plan=Mkdir {
        pathname: "/workspace/artifacts",
    }
[2025-09-30T17:29:32Z DEBUG ambient_ci::action] Plan::execute: context=Context {
        envs: {
            "CARGO_TARGET_DIR": "/workspace/cache",
            "CARGO_HOME": "/workspace/deps",
            "PATH": "/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
        },
        source_dir: "/workspace/src",
    }
[2025-09-30T17:29:32Z DEBUG ambient_ci::plan] RUN: Action finished OK
[2025-09-30T17:29:32Z DEBUG ambient_ci::plan] RUN: Action TarExtract {
        archive: "/dev/vdc",
        directory: "/workspace/src",
    }
[2025-09-30T17:29:32Z DEBUG ambient_ci::action] Plan::execute: plan=TarExtract {
        archive: "/dev/vdc",
        directory: "/workspace/src",
    }
[2025-09-30T17:29:32Z DEBUG ambient_ci::action] Plan::execute: context=Context {
        envs: {
            "CARGO_TARGET_DIR": "/workspace/cache",
            "CARGO_HOME": "/workspace/deps",
            "PATH": "/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
        },
        source_dir: "/workspace/src",
    }
[2025-09-30T17:29:32Z TRACE ambient_ci::vdrive] extracting /dev/vdc to /workspace/src
[2025-09-30T17:29:33Z TRACE ambient_ci::vdrive] extraction OK
[2025-09-30T17:29:33Z DEBUG ambient_ci::plan] RUN: Action finished OK
[2025-09-30T17:29:33Z DEBUG ambient_ci::plan] RUN: Action TarExtract {
        archive: "/dev/vdf",
        directory: "/workspace/deps",
    }
[2025-09-30T17:29:33Z DEBUG ambient_ci::action] Plan::execute: plan=TarExtract {
        archive: "/dev/vdf",
        directory: "/workspace/deps",
    }
[2025-09-30T17:29:33Z DEBUG ambient_ci::action] Plan::execute: context=Context {
        envs: {
            "CARGO_TARGET_DIR": "/workspace/cache",
            "CARGO_HOME": "/workspace/deps",
            "PATH": "/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
        },
        source_dir: "/workspace/src",
    }
[2025-09-30T17:29:33Z TRACE ambient_ci::vdrive] extracting /dev/vdf to /workspace/deps
[2025-09-30T17:29:57Z TRACE ambient_ci::vdrive] extraction OK
[2025-09-30T17:29:57Z DEBUG ambient_ci::plan] RUN: Action finished OK
[2025-09-30T17:29:57Z DEBUG ambient_ci::plan] RUN: Action TarExtract {
        archive: "/dev/vde",
        directory: "/workspace/cache",
    }
[2025-09-30T17:29:57Z DEBUG ambient_ci::action] Plan::execute: plan=TarExtract {
        archive: "/dev/vde",
        directory: "/workspace/cache",
    }
[2025-09-30T17:29:57Z DEBUG ambient_ci::action] Plan::execute: context=Context {
        envs: {
            "CARGO_TARGET_DIR": "/workspace/cache",
            "CARGO_HOME": "/workspace/deps",
            "PATH": "/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
        },
        source_dir: "/workspace/src",
    }
[2025-09-30T17:29:57Z TRACE ambient_ci::vdrive] extracting /dev/vde to /workspace/cache
[2025-09-30T17:32:21Z TRACE ambient_ci::vdrive] extraction OK
[2025-09-30T17:32:21Z DEBUG ambient_ci::plan] RUN: Action finished OK
[2025-09-30T17:32:21Z DEBUG ambient_ci::plan] RUN: Action Spawn {
        argv: [
            "find",
            "/workspace",
            "-maxdepth",
            "2",
            "-ls",
        ],
    }
[2025-09-30T17:32:21Z DEBUG ambient_ci::action] Plan::execute: plan=Spawn {
        argv: [
            "find",
            "/workspace",
            "-maxdepth",
            "2",
            "-ls",
        ],
    }
[2025-09-30T17:32:21Z DEBUG ambient_ci::action] Plan::execute: context=Context {
        envs: {
            "CARGO_TARGET_DIR": "/workspace/cache",
            "CARGO_HOME": "/workspace/deps",
            "PATH": "/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
        },
        source_dir: "/workspace/src",
    }
SPAWN: argv=["find", "/workspace", "-maxdepth", "2", "-ls"]
       cwd=/workspace/src (exists? true)
  2621441      4 drwxr-xr-x   6 root     root         4096 Sep 30 17:29 /workspace
  2622252      4 drwxr-xr-x   3 root     root         4096 Sep 30 17:28 /workspace/deps
  2622253      0 -rw-r--r--   1 root     root            0 Sep 22 16:46 /workspace/deps/.package-cache-mutate
  2622256      4 drwxr-xr-x   5 root     root         4096 Sep 22 16:46 /workspace/deps/registry
  2622254    128 -rw-r--r--   1 root     root       131072 Sep 30 17:28 /workspace/deps/.global-cache
  2622255      0 -rw-r--r--   1 root     root            0 Sep 22 16:46 /workspace/deps/.package-cache
  2621443      4 drwxr-xr-x  12 root     root         4096 Sep 30 17:28 /workspace/src
  2621499      4 -rw-r--r--   1 root     root         2653 Sep 30 17:28 /workspace/src/Cargo.toml
  2622248     12 -rw-r--r--   1 root     root         9636 Sep 30 17:28 /workspace/src/CONTRIBUTING.md
  2621500      4 drwxr-xr-x   2 root     root         4096 Sep 30 17:28 /workspace/src/.config
  2621496      4 -rw-r--r--   1 root     root         1623 Sep 30 17:28 /workspace/src/build.rs
  2621502      4 -rw-r--r--   1 root     root          426 Sep 30 17:28 /workspace/src/radicle-node.1.adoc
  2621504      4 drwxr-xr-x   8 root     root         4096 Sep 30 17:28 /workspace/src/.git
  2622245      8 -rw-r--r--   1 root     root         7144 Sep 30 17:28 /workspace/src/rad-id.1.adoc
  2621460      4 -rw-r--r--   1 root     root         2163 Sep 30 17:28 /workspace/src/VERSIONING.md
  2621495      4 -rw-r--r--   1 root     root         3133 Sep 30 17:28 /workspace/src/README.md
  2621653     12 -rw-r--r--   1 root     root        10975 Sep 30 17:28 /workspace/src/rad-patch.1.adoc
  2622249      4 -rw-r--r--   1 root     root           79 Sep 30 17:28 /workspace/src/ARCHITECTURE.md
  2621661      4 drwxr-xr-x  17 root     root         4096 Sep 30 17:28 /workspace/src/crates
  2621448      4 drwxr-xr-x   2 root     root         4096 Sep 30 17:28 /workspace/src/scripts
  2621444      4 drwxr-xr-x   2 root     root         4096 Sep 30 17:28 /workspace/src/.radicle
  2621467     16 -rw-r--r--   1 root     root        14022 Sep 30 17:28 /workspace/src/CHANGELOG.md
  2621482      4 drwxr-xr-x   3 root     root         4096 Sep 30 17:28 /workspace/src/debian
  2621465      4 -rw-r--r--   1 root     root           42 Sep 30 17:28 /workspace/src/.envrc
  2622246      4 -rw-r--r--   1 root     root         1203 Sep 30 17:28 /workspace/src/DCO
  2622241      4 drwxr-xr-x   3 root     root         4096 Sep 30 17:28 /workspace/src/.github
  2622251    124 -rw-r--r--   1 root     root       122985 Sep 30 17:28 /workspace/src/Cargo.lock
  2621654      4 drwxr-xr-x   5 root     root         4096 Sep 30 17:28 /workspace/src/systemd
  2621652     12 -rw-r--r--   1 root     root         9723 Sep 30 17:28 /workspace/src/LICENSE-APACHE
  2621498      4 -rw-r--r--   1 root     root          101 Sep 30 17:28 /workspace/src/.gitignore
  2622247      8 -rw-r--r--   1 root     root         5102 Sep 30 17:28 /workspace/src/flake.lock
  2621464      4 -rw-r--r--   1 root     root           77 Sep 30 17:28 /workspace/src/rust-toolchain.toml
  2621497     12 -rw-r--r--   1 root     root        10520 Sep 30 17:28 /workspace/src/flake.nix
  2621468      4 -rw-r--r--   1 root     root          571 Sep 30 17:28 /workspace/src/git-remote-rad.1.adoc
  2621466      4 -rw-r--r--   1 root     root           61 Sep 30 17:28 /workspace/src/.env.seed
  2621503      8 -rw-r--r--   1 root     root         5432 Sep 30 17:28 /workspace/src/deny.toml
  2621458      8 -rw-r--r--   1 root     root         7645 Sep 30 17:28 /workspace/src/HACKING.md
  2621447      4 -rw-r--r--   1 root     root         1079 Sep 30 17:28 /workspace/src/LICENSE-MIT
  2621463      8 -rw-r--r--   1 root     root         8023 Sep 30 17:28 /workspace/src/rad.1.adoc
  2621469      4 drwxr-xr-x   2 root     root         4096 Sep 30 17:28 /workspace/src/build
  2622250      4 -rw-r--r--   1 root     root         1083 Sep 30 17:28 /workspace/src/.gitsigners
  2621459      4 -rw-r--r--   1 root     root           30 Sep 30 17:28 /workspace/src/.dockerignore
  2621461      4 drwxr-xr-x   2 root     root         4096 Sep 30 17:28 /workspace/src/.cargo
  2621442      4 drwxr-xr-x   2 root     root         4096 Sep 30 17:29 /workspace/artifacts
  2650300      4 drwxr-xr-x   6 root     root         4096 Sep 22 23:09 /workspace/cache
  2668995      4 -rw-r--r--   1 root     root          218 Sep 22 23:08 /workspace/cache/.rustdoc_fingerprint.json
  2757416      4 drwxr-xr-x  24 root     root         4096 Sep 24 10:45 /workspace/cache/doc
  2650302      4 drwxr-xr-x   7 root     root         4096 Sep 24 10:43 /workspace/cache/debug
  2650301      4 drwxr-xr-x   2 root     root         4096 Sep 22 23:02 /workspace/cache/tmp
  2668996      4 -rw-r--r--   1 root     root         1036 Sep 24 12:56 /workspace/cache/.rustc_info.json
  2752513      4 drwxr-xr-x   7 root     root         4096 Sep 24 10:47 /workspace/cache/release
[2025-09-30T17:32:21Z DEBUG ambient_ci::plan] RUN: Action finished OK
[2025-09-30T17:32:21Z DEBUG ambient_ci::plan] RUN: Action CargoFmt
[2025-09-30T17:32:21Z DEBUG ambient_ci::action] Plan::execute: plan=CargoFmt
[2025-09-30T17:32:21Z DEBUG ambient_ci::action] Plan::execute: context=Context {
        envs: {
            "CARGO_TARGET_DIR": "/workspace/cache",
            "CARGO_HOME": "/workspace/deps",
            "PATH": "/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
        },
        source_dir: "/workspace/src",
    }
SPAWN: argv=["cargo", "--version"]
       cwd=/workspace/src (exists? true)
cargo 1.88.0 (873a06493 2025-05-10)
SPAWN: argv=["cargo", "clippy", "--version"]
       cwd=/workspace/src (exists? true)
clippy 0.1.88 (6b00bc3880 2025-06-23)
SPAWN: argv=["rustc", "--version"]
       cwd=/workspace/src (exists? true)
rustc 1.88.0 (6b00bc388 2025-06-23)
SPAWN: argv=["cargo", "fmt", "--check"]
       cwd=/workspace/src (exists? true)
Diff in /workspace/src/crates/radicle-fetch/src/git/repository.rs:68:
 }
 
 /// Determine the ancestry relationship between two commits.
-pub fn ahead_behind(repo: &Repository, old_commit: Oid, new_commit: Oid) -> Result<Ancestry, error::Ancestry> {
+pub fn ahead_behind(
+    repo: &Repository,
+    old_commit: Oid,
+    new_commit: Oid,
+) -> Result<Ancestry, error::Ancestry> {
     if old_commit == new_commit {
         return Ok(Ancestry::Equal);
     }
Diff in /workspace/src/crates/radicle-fetch/src/git/repository.rs:76:
     let (ahead, behind) = repo
         .backend
         .graph_ahead_behind(*new_commit, *old_commit)
-        .map_err(|err| error::Ancestry::Check { old: old_commit, new: new_commit, err })?;
+        .map_err(|err| error::Ancestry::Check {
+            old: old_commit,
+            new: new_commit,
+            err,
+        })?;
 
     if ahead > 0 && behind == 0 {
         Ok(Ancestry::Ahead)
Diff in /workspace/src/crates/radicle-fetch/src/git/repository.rs:143:
                 target,
                 err,
             })?;
-        
+
         return Ok(RefUpdate::Created {
             name: name.to_ref_string(),
             oid: target,
Diff in /workspace/src/crates/radicle-fetch/src/git/repository.rs:150:
         }
-        .into())
+        .into());
     };
 
     let Some(prev) = reference.target() else {
Diff in /workspace/src/crates/radicle-fetch/src/git/repository.rs:156:
         // symbolic references in Radicle namespaces. If it does, e.g. because
         // some external program or the user themselves created it, we better
         // do not touch it.
-        return Err(error::Update::Symbolic { name: name.to_owned() });
+        return Err(error::Update::Symbolic {
+            name: name.to_owned(),
+        });
     };
 
     let ancestry = {
Diff in /workspace/src/crates/radicle-fetch/src/git/repository.rs:163:
         use git::raw::ObjectType::{self, *};
         const ANY_KIND: Option<ObjectType> = Some(Any);
 
-        let prev = repo
-            .backend
-            .find_object(prev, ANY_KIND).map_err(|err| {
-                error::Update::Ancestry(error::Ancestry::Object {
-                    oid: prev.into(),
-                    err
-                })
-            })?;
+        let prev = repo.backend.find_object(prev, ANY_KIND).map_err(|err| {
+            error::Update::Ancestry(error::Ancestry::Object {
+                oid: prev.into(),
+                err,
+            })
+        })?;
 
         let target = repo
             .backend
Diff in /workspace/src/crates/radicle-fetch/src/git/repository.rs:177:
-            .find_object(*target, ANY_KIND).map_err(|err| {
-                error::Update::Ancestry(error::Ancestry::Object {
-                    oid: target,
-                    err,
-                })
-            })?;
+            .find_object(*target, ANY_KIND)
+            .map_err(|err| error::Update::Ancestry(error::Ancestry::Object { oid: target, err }))?;
 
         if prev.id() == target.id() {
             // If the two objects are identical, their ancestry does not matter,
Diff in /workspace/src/crates/radicle-fetch/src/git/repository.rs:187:
             return Ok(RefUpdate::Skipped {
                 name: name.to_ref_string(),
                 oid: target.id().into(),
-            }.into());
+            }
+            .into());
         }
 
         match (prev.kind(), target.kind()) {
Diff in /workspace/src/crates/radicle-fetch/src/git/repository.rs:196:
                 let prev = prev.id().into();
                 let target = target.id().into();
                 Some(ahead_behind(repo, prev, target)?)
-            },
+            }
             (Some(Tag), Some(Tag)) => {
                 // Even though these tags might point to the same commit,
                 // refuse to peel, because that tag itself has changed
Diff in /workspace/src/crates/radicle-fetch/src/git/repository.rs:203:
                 // (e.g. its name or signature).
                 None
-            },
+            }
             (Some(Commit | Tag), Some(Commit | Tag)) => {
                 // The reference changes from a commit to a tag or vice versa.
                 None
Diff in /workspace/src/crates/radicle-fetch/src/git/repository.rs:209:
-            },
+            }
             _ => {
                 // One of the objects is not a commit or a tag, we're clueless.
                 None
[2025-09-30T17:32:26Z ERROR ambient_ci::plan] ERROR: Action failed: failed to execute cargo
[2025-09-30T17:32:26Z ERROR ambient_ci::plan] caused by: command failed: "cargo": exit code 1
ERROR: failed to execute cargo
caused by: command failed: "cargo": exit code 1
EXIT CODE: 1
[2025-09-30T17:32:33Z INFO  ambient] ambient ends successfully

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": "c34e0c1940da85c02228d7b20168403c2a98e9ac",
    "author": {
      "id": "did:key:z6MkkPvBfjP4bQmco5Dm7UGsX2ruDBieEHi8n9DVJWX5sTEz",
      "alias": "lorenz"
    },
    "title": "fetch: Rewrite `git::repository::direct`",
    "state": {
      "status": "open",
      "conflicts": []
    },
    "before": "4787b53b1e85d8052744fc77e4160e4d90e46d0f",
    "after": "149b06a6d1200b996a4441c8e4df4a2458628290",
    "commits": [
      "149b06a6d1200b996a4441c8e4df4a2458628290"
    ],
    "target": "4787b53b1e85d8052744fc77e4160e4d90e46d0f",
    "labels": [],
    "assignees": [],
    "revisions": [
      {
        "id": "c34e0c1940da85c02228d7b20168403c2a98e9ac",
        "author": {
          "id": "did:key:z6MkkPvBfjP4bQmco5Dm7UGsX2ruDBieEHi8n9DVJWX5sTEz",
          "alias": "lorenz"
        },
        "description": "This function (and the helpers `ancestry` and `find_and_peel`) are\neagerly peeling to commits, leading to updates of tags that target the\nsame commit to be missed.\n\nFor example, there could be tag two tag objects with *different* OIDs\nA and B, from *different* authors, using *different* tag names, signed\nwith *different* secret keys, and both pointing to *the same* commit C.\n\nThe implementation would consider A and B to be the same, just becuase\nA and B both peel to C, skipping the update.\n\nThis is counterintuitive, and when combined with canonical references\ncan be quite confusing.\n\nChange this to only reason about an ancestry if the two objects in\nquestion really both are commits directly. Otherwise, treat cases where\nno structure can be used as ancestry similarly to non-fast-forward\nupdates.",
        "base": "4787b53b1e85d8052744fc77e4160e4d90e46d0f",
        "oid": "149b06a6d1200b996a4441c8e4df4a2458628290",
        "timestamp": 1759252535
      }
    ]
  }
}

Ambient stdout

[2025-09-30T17:28:17Z INFO  ambient] ambient starts
[2025-09-30T17:28:17Z DEBUG ambient] load default configuration file /home/_rad/.config/ambient/config.yaml if it exists
[2025-09-30T17:28:17Z DEBUG ambient] complete configuration: Config {
        tmpdir: "/srv/tmp",
        image_store: "/home/_rad/.local/state/ambient-ci/images",
        projects: "/home/_rad/ambient-projects.yaml",
        state: "/srv/ambient-state",
        rsync_target: None,
        rsync_target_base: None,
        rsync_target_map: None,
        dput_target: None,
        executor: Some(
            "/usr/bin/ambient-execute-plan",
        ),
        artifacts_max_size: Byte(
            10000000000,
        ),
        cache_max_size: Byte(
            50000000000,
        ),
        qemu: QemuConfig {
            cpus: 4,
            memory: Byte(
                8000000000,
            ),
            kvm_binary: "/usr/bin/kvm",
            ovmf_vars_file: "/usr/share/ovmf/OVMF.fd",
            ovmf_code_file: "/usr/share/ovmf/OVMF.fd",
        },
    }
[2025-09-30T17:28:17Z DEBUG ambient] configuration: Config {
        tmpdir: "/srv/tmp",
        image_store: "/home/_rad/.local/state/ambient-ci/images",
        projects: "/home/_rad/ambient-projects.yaml",
        state: "/srv/ambient-state",
        rsync_target: None,
        rsync_target_base: None,
        rsync_target_map: None,
        dput_target: None,
        executor: Some(
            "/usr/bin/ambient-execute-plan",
        ),
        artifacts_max_size: Byte(
            10000000000,
        ),
        cache_max_size: Byte(
            50000000000,
        ),
        qemu: QemuConfig {
            cpus: 4,
            memory: Byte(
                8000000000,
            ),
            kvm_binary: "/usr/bin/kvm",
            ovmf_vars_file: "/usr/share/ovmf/OVMF.fd",
            ovmf_code_file: "/usr/share/ovmf/OVMF.fd",
        },
    }
[2025-09-30T17:28:17Z DEBUG ambient_ci::project] load project state from /srv/ambient-state/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/meta.yaml
[2025-09-30T17:28:17Z DEBUG ambient_ci::run] latest commit: "4787b53b1e85d8052744fc77e4160e4d90e46d0f"
[2025-09-30T17:28:17Z DEBUG ambient_ci::run] is a git repository
[2025-09-30T17:28:17Z DEBUG ambient_ci::run] git repository is clean
[2025-09-30T17:28:17Z DEBUG ambient_ci::run] current (HEAD) commit: 149b06a6d1200b996a4441c8e4df4a2458628290
[2025-09-30T17:28:17Z DEBUG ambient_ci::run] no dry run requested
[2025-09-30T17:28:17Z DEBUG ambient_ci::run] forced run requested
[2025-09-30T17:28:17Z DEBUG ambient_ci::run] run? true
[2025-09-30T17:28:17Z INFO  ambient_ci::run] project rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5: running CI
[2025-09-30T17:28:17Z DEBUG ambient_ci::run] Executing pre-plan steps
[2025-09-30T17:28:17Z DEBUG ambient_ci::plan] RUN: Action CargoFetch {
        sourcedir: "/tmp/.tmpDuAW76/src",
    }
[2025-09-30T17:28:17Z DEBUG ambient_ci::action] Plan::execute: plan=CargoFetch {
        sourcedir: "/tmp/.tmpDuAW76/src",
    }
[2025-09-30T17:28:17Z DEBUG ambient_ci::action] Plan::execute: context=Context {
        envs: {
            "CARGO_TARGET_DIR": "/srv/ambient-state/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/cache",
            "CARGO_HOME": "/srv/ambient-state/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/dependencies",
            "PATH": "/root/.cargo/bin:/bin:/home/_rad/.radicle/bin:/home/_rad/.cargo/bin",
        },
        source_dir: "/tmp/.tmpDuAW76/src",
    }
SPAWN: argv=["cargo", "--version"]
       cwd=/tmp/.tmpDuAW76/src (exists? true)
cargo 1.88.0 (873a06493 2025-05-10)
SPAWN: argv=["cargo", "clippy", "--version"]
       cwd=/tmp/.tmpDuAW76/src (exists? true)
clippy 0.1.88 (6b00bc3880 2025-06-23)
SPAWN: argv=["rustc", "--version"]
       cwd=/tmp/.tmpDuAW76/src (exists? true)
rustc 1.88.0 (6b00bc388 2025-06-23)
SPAWN: argv=["cargo", "fetch"]
       cwd=/tmp/.tmpDuAW76/src (exists? true)
[2025-09-30T17:28:17Z DEBUG ambient_ci::plan] RUN: Action finished OK
[2025-09-30T17:28:17Z DEBUG ambient_ci::plan] All actions were performed successfully
[2025-09-30T17:28:17Z DEBUG ambient_ci::run] create virtual drive /srv/tmp/.tmpL8iK5R/src.tar
[2025-09-30T17:28:17Z DEBUG ambient_ci::run] create virtual drive /srv/tmp/.tmpL8iK5R/deps.tar
[2025-09-30T17:28:28Z DEBUG ambient_ci::run] create_executor_vdrive: executor="/usr/bin/ambient-execute-plan"
[2025-09-30T17:28:28Z DEBUG ambient_ci::run] create_executor_vdrive: plan=RunnablePlan {
        steps: [
            Mkdir {
                pathname: "/workspace",
            },
            Mkdir {
                pathname: "/workspace/artifacts",
            },
            TarExtract {
                archive: "/dev/vdc",
                directory: "/workspace/src",
            },
            TarExtract {
                archive: "/dev/vdf",
                directory: "/workspace/deps",
            },
            TarExtract {
                archive: "/dev/vde",
                directory: "/workspace/cache",
            },
            Spawn {
                argv: [
                    "find",
                    "/workspace",
                    "-maxdepth",
                    "2",
                    "-ls",
                ],
            },
            CargoFmt,
            CargoClippy,
            CargoBuild,
            CargoTest,
            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\n",
            },
            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",
            },
            Deb,
            TarCreate {
                archive: "/dev/vde",
                directory: "/workspace/cache",
            },
            TarCreate {
                archive: "/dev/vdd",
                directory: "/workspace/artifacts",
            },
        ],
        executor_drive: Some(
            "/dev/vdb",
        ),
        source_drive: Some(
            "/dev/vdc",
        ),
        artifact_drive: Some(
            "/dev/vdd",
        ),
        cache_drive: Some(
            "/dev/vde",
        ),
        deps_drive: Some(
            "/dev/vdf",
        ),
        workspace_dir: Some(
            "/workspace",
        ),
        source_dir: Some(
            "/workspace/src",
        ),
        deps_dir: Some(
            "/workspace/deps",
        ),
        cache_dir: Some(
            "/workspace/cache",
        ),
        artifacts_dir: Some(
            "/workspace/artifacts",
        ),
    }
[2025-09-30T17:28:28Z DEBUG ambient_ci::run] executor bin /usr/bin/ambient-execute-plan
[2025-09-30T17:28:28Z DEBUG ambient_ci::run] copying /usr/bin/ambient-execute-plan to /srv/tmp/.tmpL8iK5R/ambient-execute-plan/run-ci
[2025-09-30T17:28:28Z DEBUG ambient_ci::run] copy OK: true
[2025-09-30T17:28:28Z DEBUG ambient_ci::run] create virtual drive /srv/tmp/.tmpL8iK5R/executor.tar
[2025-09-30T17:29:16Z DEBUG ambient_ci::project] removing run log file /srv/ambient-state/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/run.log
[2025-09-30T17:29:16Z DEBUG ambient_ci::project] statedir is /srv/ambient-state/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5, exists? true
[2025-09-30T17:29:16Z DEBUG ambient_ci::project] creating run log file /srv/ambient-state/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/run.log
[2025-09-30T17:29:16Z DEBUG ambient_ci::project] created run log file /srv/ambient-state/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/run.log OK
[2025-09-30T17:29:16Z DEBUG ambient_ci::cloud_init] with_hostname called: "ambient"
[2025-09-30T17:29:16Z DEBUG ambient_ci::cloud_init] with_runcmd called: "echo xyzzy > /dev/ttyS1"
[2025-09-30T17:29:16Z DEBUG ambient_ci::cloud_init] with_runcmd called: "\n(set -xeu\nenv\ndir=\"$(mktemp -d)\"\ncd \"$dir\"\ntar -xvf /dev/vdb\nfind -ls || true\nldd ./run-ci || true\necho ================================ BEGIN ================================\nexport RUST_BACKTRACE=1\nif ./run-ci; then\n        echo \"EXIT CODE: 0\"\nelse\n        echo \"EXIT CODE: $?\"\nfi) > /dev/ttyS1 2>&1\n"
[2025-09-30T17:29:16Z DEBUG ambient_ci::cloud_init] with_runcmd called: "poweroff"
[2025-09-30T17:29:16Z DEBUG ambient_ci::cloud_init] LocalDataStoreBuilder: LocalDataStoreBuilder {
        hostname: Some(
            "ambient",
        ),
        network: false,
        bootcmd: [],
        runcmd: [
            "echo xyzzy > /dev/ttyS1",
            "\n(set -xeu\nenv\ndir=\"$(mktemp -d)\"\ncd \"$dir\"\ntar -xvf /dev/vdb\nfind -ls || true\nldd ./run-ci || true\necho ================================ BEGIN ================================\nexport RUST_BACKTRACE=1\nif ./run-ci; then\n        echo \"EXIT CODE: 0\"\nelse\n        echo \"EXIT CODE: $?\"\nfi) > /dev/ttyS1 2>&1\n",
            "poweroff",
        ],
    }
[2025-09-30T17:29:16Z DEBUG ambient_ci::qemu] run QEMU
[2025-09-30T17:29:16Z DEBUG ambient_ci::qemu] create copy-on-write image and UEFI vars file
[2025-09-30T17:29:16Z DEBUG ambient_ci::qemu_utils] qemu-img create /srv/tmp/.tmpqAcnrh/.tmpxPUUBo/vm.qcow2 backing on /home/_rad/ambient.qcow2
[2025-09-30T17:29:17Z DEBUG ambient_ci::qemu] create cloud-init ISO file
[2025-09-30T17:29:17Z DEBUG ambient_ci::cloud_init] LocalDataStore: LocalDataStore {
        hostname: "ambient",
        network: false,
        bootcmd: [],
        runcmd: [
            "echo xyzzy > /dev/ttyS1",
            "\n(set -xeu\nenv\ndir=\"$(mktemp -d)\"\ncd \"$dir\"\ntar -xvf /dev/vdb\nfind -ls || true\nldd ./run-ci || true\necho ================================ BEGIN ================================\nexport RUST_BACKTRACE=1\nif ./run-ci; then\n        echo \"EXIT CODE: 0\"\nelse\n        echo \"EXIT CODE: $?\"\nfi) > /dev/ttyS1 2>&1\n",
            "poweroff",
        ],
    }
[2025-09-30T17:29:17Z DEBUG ambient_ci::cloud_init] write /tmp/.tmpmcxWYs/meta-data
[2025-09-30T17:29:17Z DEBUG ambient_ci::cloud_init] write /tmp/.tmpmcxWYs/user-data
[2025-09-30T17:29:17Z DEBUG ambient_ci::qemu] set console log file to /srv/tmp/.tmpqAcnrh/.tmpxPUUBo/console.log
[2025-09-30T17:29:17Z DEBUG ambient_ci::util] create file /srv/tmp/.tmpqAcnrh/.tmpxPUUBo/console.log
[2025-09-30T17:29:17Z DEBUG ambient_ci::qemu] set run file to /srv/ambient-state/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/run.log
[2025-09-30T17:29:17Z DEBUG ambient_ci::util] create file /srv/ambient-state/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/run.log
[2025-09-30T17:29:17Z DEBUG ambient_ci::qemu] run QEMU: QemuArgs {
        args: [
            "-m",
            "7629",
            "-smp",
            "cpus=4",
            "-cpu",
            "kvm64",
            "-machine",
            "type=q35,accel=kvm,usb=off",
            "-uuid",
            "a85c9de7-edc0-4e54-bead-112e5733582c",
            "-boot",
            "strict=on",
            "-name",
            "ambient-ci-vm",
            "-rtc",
            "base=utc,driftfix=slew",
            "-display",
            "none",
            "-device",
            "virtio-rng-pci",
            "-serial",
            "file:/srv/tmp/.tmpqAcnrh/.tmpxPUUBo/console.log",
            "-serial",
            "file:/srv/ambient-state/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/run.log",
            "-drive",
            "if=pflash,format=raw,unit=0,file=/usr/share/ovmf/OVMF.fd,readonly=on",
            "-drive",
            "if=pflash,format=raw,unit=1,file=/srv/tmp/.tmpqAcnrh/.tmpxPUUBo/vars.fd",
            "-drive",
            "format=qcow2,if=virtio,file=/srv/tmp/.tmpqAcnrh/.tmpxPUUBo/vm.qcow2",
            "-drive",
            "format=raw,if=virtio,file=/srv/tmp/.tmpL8iK5R/executor.tar,readonly=on",
            "-cdrom",
            "/srv/tmp/.tmpqAcnrh/.tmpxPUUBo/cloud_init.iso",
            "-drive",
            "format=raw,if=virtio,file=/srv/tmp/.tmpL8iK5R/src.tar,readonly=on",
            "-drive",
            "format=raw,if=virtio,file=/srv/tmp/.tmpL8iK5R/artifacts.tar",
            "-drive",
            "format=raw,if=virtio,file=/srv/tmp/.tmpL8iK5R/cache.tar",
            "-drive",
            "format=raw,if=virtio,file=/srv/tmp/.tmpL8iK5R/deps.tar,readonly=on",
            "-nodefaults",
            "-no-user-config",
        ],
    }
[2025-09-30T17:32:32Z DEBUG ambient_ci::qemu] QEMU finished OK
[2025-09-30T17:32:32Z DEBUG ambient_ci::qemu] run log:
    --------------------==========
    [2025-09-30T17:29:32Z TRACE ambient_execute_plan] ambient-execute-plan version 0.7.0@14cdd4c starts
    [2025-09-30T17:29:32Z DEBUG ambient_execute_plan] ambient-execute-plan version 0.7.0@14cdd4c starts
    [2025-09-30T17:29:32Z INFO  ambient_execute_plan] ambient-execute-plan version 0.7.0@14cdd4c starts
    [2025-09-30T17:29:32Z WARN  ambient_execute_plan] ambient-execute-plan version 0.7.0@14cdd4c starts
    [2025-09-30T17:29:32Z ERROR ambient_execute_plan] ambient-execute-plan version 0.7.0@14cdd4c starts
    RunnablePlan::from_file: filename=plan.yaml
    steps:
    - action: mkdir
      pathname: /workspace
    - action: mkdir
      pathname: /workspace/artifacts
    - action: tar_extract
      archive: /dev/vdc
      directory: /workspace/src
    - action: tar_extract
      archive: /dev/vdf
      directory: /workspace/deps
    - action: tar_extract
      archive: /dev/vde
      directory: /workspace/cache
    - action: spawn
      argv:
      - find
      - /workspace
      - -maxdepth
      - '2'
      - -ls
    - 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
    - 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
    - action: tar_create
      archive: /dev/vde
      directory: /workspace/cache
    - action: tar_create
      archive: /dev/vdd
      directory: /workspace/artifacts
    executor_drive: /dev/vdb
    source_drive: /dev/vdc
    artifact_drive: /dev/vdd
    cache_drive: /dev/vde
    deps_drive: /dev/vdf
    workspace_dir: /workspace
    source_dir: /workspace/src
    deps_dir: /workspace/deps
    cache_dir: /workspace/cache
    artifacts_dir: /workspace/artifacts
    
    
    [2025-09-30T17:29:32Z DEBUG ambient_ci::plan] RUN: Action Mkdir {
            pathname: "/workspace",
        }
    [2025-09-30T17:29:32Z DEBUG ambient_ci::action] Plan::execute: plan=Mkdir {
            pathname: "/workspace",
        }
    [2025-09-30T17:29:32Z DEBUG ambient_ci::action] Plan::execute: context=Context {
            envs: {
                "CARGO_TARGET_DIR": "/workspace/cache",
                "CARGO_HOME": "/workspace/deps",
                "PATH": "/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
            },
            source_dir: "/workspace/src",
        }
    [2025-09-30T17:29:32Z DEBUG ambient_ci::plan] RUN: Action finished OK
    [2025-09-30T17:29:32Z DEBUG ambient_ci::plan] RUN: Action Mkdir {
            pathname: "/workspace/artifacts",
        }
    [2025-09-30T17:29:32Z DEBUG ambient_ci::action] Plan::execute: plan=Mkdir {
            pathname: "/workspace/artifacts",
        }
    [2025-09-30T17:29:32Z DEBUG ambient_ci::action] Plan::execute: context=Context {
            envs: {
                "CARGO_TARGET_DIR": "/workspace/cache",
                "CARGO_HOME": "/workspace/deps",
                "PATH": "/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
            },
            source_dir: "/workspace/src",
        }
    [2025-09-30T17:29:32Z DEBUG ambient_ci::plan] RUN: Action finished OK
    [2025-09-30T17:29:32Z DEBUG ambient_ci::plan] RUN: Action TarExtract {
            archive: "/dev/vdc",
            directory: "/workspace/src",
        }
    [2025-09-30T17:29:32Z DEBUG ambient_ci::action] Plan::execute: plan=TarExtract {
            archive: "/dev/vdc",
            directory: "/workspace/src",
        }
    [2025-09-30T17:29:32Z DEBUG ambient_ci::action] Plan::execute: context=Context {
            envs: {
                "CARGO_TARGET_DIR": "/workspace/cache",
                "CARGO_HOME": "/workspace/deps",
                "PATH": "/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
            },
            source_dir: "/workspace/src",
        }
    [2025-09-30T17:29:32Z TRACE ambient_ci::vdrive] extracting /dev/vdc to /workspace/src
    [2025-09-30T17:29:33Z TRACE ambient_ci::vdrive] extraction OK
    [2025-09-30T17:29:33Z DEBUG ambient_ci::plan] RUN: Action finished OK
    [2025-09-30T17:29:33Z DEBUG ambient_ci::plan] RUN: Action TarExtract {
            archive: "/dev/vdf",
            directory: "/workspace/deps",
        }
    [2025-09-30T17:29:33Z DEBUG ambient_ci::action] Plan::execute: plan=TarExtract {
            archive: "/dev/vdf",
            directory: "/workspace/deps",
        }
    [2025-09-30T17:29:33Z DEBUG ambient_ci::action] Plan::execute: context=Context {
            envs: {
                "CARGO_TARGET_DIR": "/workspace/cache",
                "CARGO_HOME": "/workspace/deps",
                "PATH": "/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
            },
            source_dir: "/workspace/src",
        }
    [2025-09-30T17:29:33Z TRACE ambient_ci::vdrive] extracting /dev/vdf to /workspace/deps
    [2025-09-30T17:29:57Z TRACE ambient_ci::vdrive] extraction OK
    [2025-09-30T17:29:57Z DEBUG ambient_ci::plan] RUN: Action finished OK
    [2025-09-30T17:29:57Z DEBUG ambient_ci::plan] RUN: Action TarExtract {
            archive: "/dev/vde",
            directory: "/workspace/cache",
        }
    [2025-09-30T17:29:57Z DEBUG ambient_ci::action] Plan::execute: plan=TarExtract {
            archive: "/dev/vde",
            directory: "/workspace/cache",
        }
    [2025-09-30T17:29:57Z DEBUG ambient_ci::action] Plan::execute: context=Context {
            envs: {
                "CARGO_TARGET_DIR": "/workspace/cache",
                "CARGO_HOME": "/workspace/deps",
                "PATH": "/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
            },
            source_dir: "/workspace/src",
        }
    [2025-09-30T17:29:57Z TRACE ambient_ci::vdrive] extracting /dev/vde to /workspace/cache
    [2025-09-30T17:32:21Z TRACE ambient_ci::vdrive] extraction OK
    [2025-09-30T17:32:21Z DEBUG ambient_ci::plan] RUN: Action finished OK
    [2025-09-30T17:32:21Z DEBUG ambient_ci::plan] RUN: Action Spawn {
            argv: [
                "find",
                "/workspace",
                "-maxdepth",
                "2",
                "-ls",
            ],
        }
    [2025-09-30T17:32:21Z DEBUG ambient_ci::action] Plan::execute: plan=Spawn {
            argv: [
                "find",
                "/workspace",
                "-maxdepth",
                "2",
                "-ls",
            ],
        }
    [2025-09-30T17:32:21Z DEBUG ambient_ci::action] Plan::execute: context=Context {
            envs: {
                "CARGO_TARGET_DIR": "/workspace/cache",
                "CARGO_HOME": "/workspace/deps",
                "PATH": "/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
            },
            source_dir: "/workspace/src",
        }
    SPAWN: argv=["find", "/workspace", "-maxdepth", "2", "-ls"]
           cwd=/workspace/src (exists? true)
      2621441      4 drwxr-xr-x   6 root     root         4096 Sep 30 17:29 /workspace
      2622252      4 drwxr-xr-x   3 root     root         4096 Sep 30 17:28 /workspace/deps
      2622253      0 -rw-r--r--   1 root     root            0 Sep 22 16:46 /workspace/deps/.package-cache-mutate
      2622256      4 drwxr-xr-x   5 root     root         4096 Sep 22 16:46 /workspace/deps/registry
      2622254    128 -rw-r--r--   1 root     root       131072 Sep 30 17:28 /workspace/deps/.global-cache
      2622255      0 -rw-r--r--   1 root     root            0 Sep 22 16:46 /workspace/deps/.package-cache
      2621443      4 drwxr-xr-x  12 root     root         4096 Sep 30 17:28 /workspace/src
      2621499      4 -rw-r--r--   1 root     root         2653 Sep 30 17:28 /workspace/src/Cargo.toml
      2622248     12 -rw-r--r--   1 root     root         9636 Sep 30 17:28 /workspace/src/CONTRIBUTING.md
      2621500      4 drwxr-xr-x   2 root     root         4096 Sep 30 17:28 /workspace/src/.config
      2621496      4 -rw-r--r--   1 root     root         1623 Sep 30 17:28 /workspace/src/build.rs
      2621502      4 -rw-r--r--   1 root     root          426 Sep 30 17:28 /workspace/src/radicle-node.1.adoc
      2621504      4 drwxr-xr-x   8 root     root         4096 Sep 30 17:28 /workspace/src/.git
      2622245      8 -rw-r--r--   1 root     root         7144 Sep 30 17:28 /workspace/src/rad-id.1.adoc
      2621460      4 -rw-r--r--   1 root     root         2163 Sep 30 17:28 /workspace/src/VERSIONING.md
      2621495      4 -rw-r--r--   1 root     root         3133 Sep 30 17:28 /workspace/src/README.md
      2621653     12 -rw-r--r--   1 root     root        10975 Sep 30 17:28 /workspace/src/rad-patch.1.adoc
      2622249      4 -rw-r--r--   1 root     root           79 Sep 30 17:28 /workspace/src/ARCHITECTURE.md
      2621661      4 drwxr-xr-x  17 root     root         4096 Sep 30 17:28 /workspace/src/crates
      2621448      4 drwxr-xr-x   2 root     root         4096 Sep 30 17:28 /workspace/src/scripts
      2621444      4 drwxr-xr-x   2 root     root         4096 Sep 30 17:28 /workspace/src/.radicle
      2621467     16 -rw-r--r--   1 root     root        14022 Sep 30 17:28 /workspace/src/CHANGELOG.md
      2621482      4 drwxr-xr-x   3 root     root         4096 Sep 30 17:28 /workspace/src/debian
      2621465      4 -rw-r--r--   1 root     root           42 Sep 30 17:28 /workspace/src/.envrc
      2622246      4 -rw-r--r--   1 root     root         1203 Sep 30 17:28 /workspace/src/DCO
      2622241      4 drwxr-xr-x   3 root     root         4096 Sep 30 17:28 /workspace/src/.github
      2622251    124 -rw-r--r--   1 root     root       122985 Sep 30 17:28 /workspace/src/Cargo.lock
      2621654      4 drwxr-xr-x   5 root     root         4096 Sep 30 17:28 /workspace/src/systemd
      2621652     12 -rw-r--r--   1 root     root         9723 Sep 30 17:28 /workspace/src/LICENSE-APACHE
      2621498      4 -rw-r--r--   1 root     root          101 Sep 30 17:28 /workspace/src/.gitignore
      2622247      8 -rw-r--r--   1 root     root         5102 Sep 30 17:28 /workspace/src/flake.lock
      2621464      4 -rw-r--r--   1 root     root           77 Sep 30 17:28 /workspace/src/rust-toolchain.toml
      2621497     12 -rw-r--r--   1 root     root        10520 Sep 30 17:28 /workspace/src/flake.nix
      2621468      4 -rw-r--r--   1 root     root          571 Sep 30 17:28 /workspace/src/git-remote-rad.1.adoc
      2621466      4 -rw-r--r--   1 root     root           61 Sep 30 17:28 /workspace/src/.env.seed
      2621503      8 -rw-r--r--   1 root     root         5432 Sep 30 17:28 /workspace/src/deny.toml
      2621458      8 -rw-r--r--   1 root     root         7645 Sep 30 17:28 /workspace/src/HACKING.md
      2621447      4 -rw-r--r--   1 root     root         1079 Sep 30 17:28 /workspace/src/LICENSE-MIT
      2621463      8 -rw-r--r--   1 root     root         8023 Sep 30 17:28 /workspace/src/rad.1.adoc
      2621469      4 drwxr-xr-x   2 root     root         4096 Sep 30 17:28 /workspace/src/build
      2622250      4 -rw-r--r--   1 root     root         1083 Sep 30 17:28 /workspace/src/.gitsigners
      2621459      4 -rw-r--r--   1 root     root           30 Sep 30 17:28 /workspace/src/.dockerignore
      2621461      4 drwxr-xr-x   2 root     root         4096 Sep 30 17:28 /workspace/src/.cargo
      2621442      4 drwxr-xr-x   2 root     root         4096 Sep 30 17:29 /workspace/artifacts
      2650300      4 drwxr-xr-x   6 root     root         4096 Sep 22 23:09 /workspace/cache
      2668995      4 -rw-r--r--   1 root     root          218 Sep 22 23:08 /workspace/cache/.rustdoc_fingerprint.json
      2757416      4 drwxr-xr-x  24 root     root         4096 Sep 24 10:45 /workspace/cache/doc
      2650302      4 drwxr-xr-x   7 root     root         4096 Sep 24 10:43 /workspace/cache/debug
      2650301      4 drwxr-xr-x   2 root     root         4096 Sep 22 23:02 /workspace/cache/tmp
      2668996      4 -rw-r--r--   1 root     root         1036 Sep 24 12:56 /workspace/cache/.rustc_info.json
      2752513      4 drwxr-xr-x   7 root     root         4096 Sep 24 10:47 /workspace/cache/release
    [2025-09-30T17:32:21Z DEBUG ambient_ci::plan] RUN: Action finished OK
    [2025-09-30T17:32:21Z DEBUG ambient_ci::plan] RUN: Action CargoFmt
    [2025-09-30T17:32:21Z DEBUG ambient_ci::action] Plan::execute: plan=CargoFmt
    [2025-09-30T17:32:21Z DEBUG ambient_ci::action] Plan::execute: context=Context {
            envs: {
                "CARGO_TARGET_DIR": "/workspace/cache",
                "CARGO_HOME": "/workspace/deps",
                "PATH": "/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
            },
            source_dir: "/workspace/src",
        }
    SPAWN: argv=["cargo", "--version"]
           cwd=/workspace/src (exists? true)
    cargo 1.88.0 (873a06493 2025-05-10)
    SPAWN: argv=["cargo", "clippy", "--version"]
           cwd=/workspace/src (exists? true)
    clippy 0.1.88 (6b00bc3880 2025-06-23)
    SPAWN: argv=["rustc", "--version"]
           cwd=/workspace/src (exists? true)
    rustc 1.88.0 (6b00bc388 2025-06-23)
    SPAWN: argv=["cargo", "fmt", "--check"]
           cwd=/workspace/src (exists? true)
    Diff in /workspace/src/crates/radicle-fetch/src/git/repository.rs:68:
     }
     
     /// Determine the ancestry relationship between two commits.
    -pub fn ahead_behind(repo: &Repository, old_commit: Oid, new_commit: Oid) -> Result<Ancestry, error::Ancestry> {
    +pub fn ahead_behind(
    +    repo: &Repository,
    +    old_commit: Oid,
    +    new_commit: Oid,
    +) -> Result<Ancestry, error::Ancestry> {
         if old_commit == new_commit {
             return Ok(Ancestry::Equal);
         }
    Diff in /workspace/src/crates/radicle-fetch/src/git/repository.rs:76:
         let (ahead, behind) = repo
             .backend
             .graph_ahead_behind(*new_commit, *old_commit)
    -        .map_err(|err| error::Ancestry::Check { old: old_commit, new: new_commit, err })?;
    +        .map_err(|err| error::Ancestry::Check {
    +            old: old_commit,
    +            new: new_commit,
    +            err,
    +        })?;
     
         if ahead > 0 && behind == 0 {
             Ok(Ancestry::Ahead)
    Diff in /workspace/src/crates/radicle-fetch/src/git/repository.rs:143:
                     target,
                     err,
                 })?;
    -        
    +
             return Ok(RefUpdate::Created {
                 name: name.to_ref_string(),
                 oid: target,
    Diff in /workspace/src/crates/radicle-fetch/src/git/repository.rs:150:
             }
    -        .into())
    +        .into());
         };
     
         let Some(prev) = reference.target() else {
    Diff in /workspace/src/crates/radicle-fetch/src/git/repository.rs:156:
             // symbolic references in Radicle namespaces. If it does, e.g. because
             // some external program or the user themselves created it, we better
             // do not touch it.
    -        return Err(error::Update::Symbolic { name: name.to_owned() });
    +        return Err(error::Update::Symbolic {
    +            name: name.to_owned(),
    +        });
         };
     
         let ancestry = {
    Diff in /workspace/src/crates/radicle-fetch/src/git/repository.rs:163:
             use git::raw::ObjectType::{self, *};
             const ANY_KIND: Option<ObjectType> = Some(Any);
     
    -        let prev = repo
    -            .backend
    -            .find_object(prev, ANY_KIND).map_err(|err| {
    -                error::Update::Ancestry(error::Ancestry::Object {
    -                    oid: prev.into(),
    -                    err
    -                })
    -            })?;
    +        let prev = repo.backend.find_object(prev, ANY_KIND).map_err(|err| {
    +            error::Update::Ancestry(error::Ancestry::Object {
    +                oid: prev.into(),
    +                err,
    +            })
    +        })?;
     
             let target = repo
                 .backend
    Diff in /workspace/src/crates/radicle-fetch/src/git/repository.rs:177:
    -            .find_object(*target, ANY_KIND).map_err(|err| {
    -                error::Update::Ancestry(error::Ancestry::Object {
    -                    oid: target,
    -                    err,
    -                })
    -            })?;
    +            .find_object(*target, ANY_KIND)
    +            .map_err(|err| error::Update::Ancestry(error::Ancestry::Object { oid: target, err }))?;
     
             if prev.id() == target.id() {
                 // If the two objects are identical, their ancestry does not matter,
    Diff in /workspace/src/crates/radicle-fetch/src/git/repository.rs:187:
                 return Ok(RefUpdate::Skipped {
                     name: name.to_ref_string(),
                     oid: target.id().into(),
    -            }.into());
    +            }
    +            .into());
             }
     
             match (prev.kind(), target.kind()) {
    Diff in /workspace/src/crates/radicle-fetch/src/git/repository.rs:196:
                     let prev = prev.id().into();
                     let target = target.id().into();
                     Some(ahead_behind(repo, prev, target)?)
    -            },
    +            }
                 (Some(Tag), Some(Tag)) => {
                     // Even though these tags might point to the same commit,
                     // refuse to peel, because that tag itself has changed
    Diff in /workspace/src/crates/radicle-fetch/src/git/repository.rs:203:
                     // (e.g. its name or signature).
                     None
    -            },
    +            }
                 (Some(Commit | Tag), Some(Commit | Tag)) => {
                     // The reference changes from a commit to a tag or vice versa.
                     None
    Diff in /workspace/src/crates/radicle-fetch/src/git/repository.rs:209:
    -            },
    +            }
                 _ => {
                     // One of the objects is not a commit or a tag, we're clueless.
                     None
    [2025-09-30T17:32:26Z ERROR ambient_ci::plan] ERROR: Action failed: failed to execute cargo
    [2025-09-30T17:32:26Z ERROR ambient_ci::plan] caused by: command failed: "cargo": exit code 1
    ERROR: failed to execute cargo
    caused by: command failed: "cargo": exit code 1
    EXIT CODE: 1
    
    ====================
[2025-09-30T17:32:32Z DEBUG ambient_ci::qemu] QEMU: CI run under exit code 1
[2025-09-30T17:32:32Z DEBUG ambient_ci::run] CI run exit code from QEMU: 1
[2025-09-30T17:32:32Z DEBUG ambient_ci::project] write project state to /srv/ambient-state/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/meta.yaml
ERROR: CI run failed inside QEMU

Ambient stderr

<empty log>