CI run for rad:zwPaQSTBX8hktn22F6tHAZSFH2Fh

Radicle repository id rad:zwPaQSTBX8hktn22F6tHAZSFH2Fh

Table of Contents

Run log

[2025-09-11T12:58:27Z INFO  ambient] ambient starts
deprecated: the `cpus` field is replaced by `qemu.cpus`
deprecated: the `memory` field is replaced by `qemu.memory`
[=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
sr0     11:0    1   370K  0 rom  
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   2.9M  1 disk 
vdc    254:32   0   1.9M  1 disk 
vdd    254:48   0 953.7M  0 disk 
vde    254:64   0  27.9G  0 disk 
vdf    254:80   0 790.1M  1 disk 
INFO: Extracting tar archive from /dev/vdb
drwxr-xr-x _rad/_rad         0 2025-09-11 12:57 ./
-rw-r--r-- _rad/_rad       941 2025-09-11 12:57 ./plan.yaml
-rwxr-xr-x _rad/_rad   2994840 2025-09-11 12:57 ./run-ci
INFO: Extracted files:
  4587530      4 drwxr-xr-x   2 1000     1000         4096 Sep 11 12:57 .
  4587531      4 -rw-r--r--   1 1000     1000          941 Sep 11 12:57 ./plan.yaml
  4587532   2928 -rwxr-xr-x   1 1000     1000      2994840 Sep 11 12:57 ./run-ci
INFO: Running run-ci from /dev/vdb
================================ BEGIN ================================
[2025-09-11T12:57:44Z TRACE ambient_execute_plan] ambient-execute-plan starts
[2025-09-11T12:57:44Z DEBUG ambient_execute_plan] ambient-execute-plan starts
[2025-09-11T12:57:44Z INFO  ambient_execute_plan] ambient-execute-plan starts
[2025-09-11T12:57:44Z WARN  ambient_execute_plan] ambient-execute-plan starts
[2025-09-11T12:57:44Z ERROR ambient_execute_plan] ambient-execute-plan 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: |
    git clean -fdx
- 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


RUN: Action Mkdir {
    pathname: "/workspace",
}
[2025-09-11T12:57:44Z DEBUG ambient_ci::action] Plan::execute: Mkdir {
        pathname: "/workspace",
    }
RUN: Action finished OK
RUN: Action Mkdir {
    pathname: "/workspace/artifacts",
}
[2025-09-11T12:57:44Z DEBUG ambient_ci::action] Plan::execute: Mkdir {
        pathname: "/workspace/artifacts",
    }
RUN: Action finished OK
RUN: Action TarExtract {
    archive: "/dev/vdc",
    directory: "/workspace/src",
}
[2025-09-11T12:57:44Z DEBUG ambient_ci::action] Plan::execute: TarExtract {
        archive: "/dev/vdc",
        directory: "/workspace/src",
    }
[2025-09-11T12:57:44Z TRACE ambient_ci::vdrive] extracting /dev/vdc to /workspace/src
[2025-09-11T12:57:44Z TRACE ambient_ci::vdrive] extraction OK
RUN: Action finished OK
RUN: Action TarExtract {
    archive: "/dev/vdf",
    directory: "/workspace/deps",
}
[2025-09-11T12:57:44Z DEBUG ambient_ci::action] Plan::execute: TarExtract {
        archive: "/dev/vdf",
        directory: "/workspace/deps",
    }
[2025-09-11T12:57:44Z TRACE ambient_ci::vdrive] extracting /dev/vdf to /workspace/deps
[2025-09-11T12:57:46Z TRACE ambient_ci::vdrive] extraction OK
RUN: Action finished OK
RUN: Action TarExtract {
    archive: "/dev/vde",
    directory: "/workspace/cache",
}
[2025-09-11T12:57:46Z DEBUG ambient_ci::action] Plan::execute: TarExtract {
        archive: "/dev/vde",
        directory: "/workspace/cache",
    }
[2025-09-11T12:57:46Z TRACE ambient_ci::vdrive] extracting /dev/vde to /workspace/cache
[2025-09-11T12:57:48Z TRACE ambient_ci::vdrive] extraction OK
RUN: Action finished OK
RUN: Action Spawn {
    argv: [
        "find",
        "/workspace",
        "-maxdepth",
        "2",
        "-ls",
    ],
}
[2025-09-11T12:57:48Z DEBUG ambient_ci::action] Plan::execute: Spawn {
        argv: [
            "find",
            "/workspace",
            "-maxdepth",
            "2",
            "-ls",
        ],
    }
SPAWN: argv=["find", "/workspace", "-maxdepth", "2", "-ls"]
       cwd=/workspace/src (exists? true)
       extra_env=[]
  2621441      4 drwxr-xr-x   6 root     root         4096 Sep 11 12:57 /workspace
  2621573      4 drwxr-xr-x   3 root     root         4096 Sep 11 12:57 /workspace/deps
  2647701      0 -rw-r--r--   1 root     root            0 Sep 11 12:54 /workspace/deps/.package-cache-mutate
  2621574      4 drwxr-xr-x   5 root     root         4096 Sep 11 12:54 /workspace/deps/registry
  2647700    116 -rw-r--r--   1 root     root       118784 Sep 11 12:57 /workspace/deps/.global-cache
  2647702      0 -rw-r--r--   1 root     root            0 Sep 11 12:54 /workspace/deps/.package-cache
  2621443      4 drwxr-xr-x   7 root     root         4096 Sep 11 12:57 /workspace/src
  2621450      4 -rw-r--r--   1 root     root         1157 Sep 11 12:57 /workspace/src/Cargo.toml
  2621449      4 -rw-r--r--   1 root     root         2985 Sep 11 12:57 /workspace/src/INSTALL.md
  2621447      4 -rw-r--r--   1 root     root          866 Sep 11 12:57 /workspace/src/NEWS.md
  2621491     36 -rw-r--r--   1 root     root        34260 Sep 11 12:57 /workspace/src/COPYING.md
  2621444      4 -rw-r--r--   1 root     root          206 Sep 11 12:57 /workspace/src/ambient.yaml
  2621497      4 drwxr-xr-x   8 root     root         4096 Sep 11 12:57 /workspace/src/.git
  2621453      4 drwxr-xr-x   3 root     root         4096 Sep 11 12:57 /workspace/src/src
  2621490      4 -rw-r--r--   1 root     root         1641 Sep 11 12:57 /workspace/src/README.md
  2621495      4 drwxr-xr-x   2 root     root         4096 Sep 11 12:57 /workspace/src/.radicle
  2621479      4 drwxr-xr-x   3 root     root         4096 Sep 11 12:57 /workspace/src/debian
  2621446     12 -rw-r--r--   1 root     root        10220 Sep 11 12:57 /workspace/src/ambient.md
  2621489      4 -rw-r--r--   1 root     root          224 Sep 11 12:57 /workspace/src/ambient.subplot
  2621451     60 -rw-r--r--   1 root     root        61375 Sep 11 12:57 /workspace/src/Cargo.lock
  2621452      4 -rw-r--r--   1 root     root           32 Sep 11 12:57 /workspace/src/.gitignore
  2621445      4 -rw-r--r--   1 root     root         1212 Sep 11 12:57 /workspace/src/ambient.py
  2621492      4 drwxr-xr-x   2 root     root         4096 Sep 11 12:57 /workspace/src/.woodpecker
  2621448      4 -rw-r--r--   1 root     root          668 Sep 11 12:57 /workspace/src/Makefile
  2621442      4 drwxr-xr-x   2 root     root         4096 Sep 11 12:57 /workspace/artifacts
  2647703      4 drwxr-xr-x   5 root     root         4096 Sep 11 12:56 /workspace/cache
  2650187      4 drwxr-xr-x   7 root     root         4096 Sep 11 12:56 /workspace/cache/debug
  2648556      4 -rw-r--r--   1 root     root         1904 Sep 11 12:57 /workspace/cache/.rustc_info.json
  2648557      4 drwxr-xr-x   7 root     root         4096 Sep 11 12:56 /workspace/cache/release
  2647704      4 drwxr-xr-x   3 root     root         4096 Sep 11 12:56 /workspace/cache/x86_64-unknown-linux-musl
RUN: Action finished OK
RUN: Action CargoFmt
[2025-09-11T12:57:48Z DEBUG ambient_ci::action] Plan::execute: CargoFmt
SPAWN: argv=["cargo", "fmt", "--check"]
       cwd=/workspace/src (exists? true)
       extra_env=[("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")]
RUN: Action finished OK
RUN: Action CargoClippy
[2025-09-11T12:57:49Z DEBUG ambient_ci::action] Plan::execute: CargoClippy
SPAWN: argv=["cargo", "clippy", "--offline", "--locked", "--workspace", "--all-targets", "--no-deps", "--", "--deny", "warnings"]
       cwd=/workspace/src (exists? true)
       extra_env=[("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")]
   Compiling proc-macro2 v1.0.94
   Compiling unicode-ident v1.0.18
   Compiling autocfg v1.4.0
   Compiling memchr v2.7.4
   Compiling quote v1.0.40
   Compiling libc v0.2.171
   Compiling syn v2.0.100
   Compiling cfg-if v1.0.0
   Compiling anyhow v1.0.97
   Compiling aho-corasick v1.1.3
   Compiling serde_derive v1.0.219
   Compiling zerocopy v0.8.24
   Compiling thiserror v2.0.12
   Compiling regex-syntax v0.8.5
   Compiling log v0.4.27
   Compiling regex-automata v0.4.9
   Compiling serde v1.0.219
   Compiling thiserror-impl v2.0.12
   Compiling rustix v1.0.3
   Compiling getrandom v0.3.2
   Compiling bitflags v2.9.0
   Compiling getrandom v0.2.15
   Compiling num-traits v0.2.19
   Compiling serde_json v1.0.140
   Compiling time-core v0.1.4
   Compiling time-macros v0.2.22
   Compiling ppv-lite86 v0.2.21
   Compiling pest v2.8.0
   Compiling rand_core v0.6.4
   Compiling bstr v1.11.3
   Compiling indexmap v1.9.3
   Compiling libm v0.2.11
   Compiling deranged v0.4.1
   Compiling anstyle-parse v0.2.6
   Compiling thiserror v1.0.69
   Compiling cc v1.2.17
   Compiling globset v0.4.16
   Compiling pest_meta v2.8.0
   Compiling rand_chacha v0.3.1
   Compiling thiserror-impl v1.0.69
   Compiling anstyle-query v1.1.2
   Compiling anstyle v1.0.10
   Compiling colorchoice v1.0.3
   Compiling linux-raw-sys v0.9.3
   Compiling anstream v0.6.18
   Compiling clap_derive v4.5.32
   Compiling ordered-float v2.10.1
   Compiling pest_generator v2.8.0
   Compiling rand v0.8.5
   Compiling ignore v0.4.23
   Compiling pikchr v0.1.4
   Compiling time v0.3.41
   Compiling regex v1.11.1
   Compiling hashbrown v0.15.2
   Compiling deunicode v1.6.1
   Compiling clap_lex v0.7.4
   Compiling indexmap v2.8.0
   Compiling slug v0.1.6
   Compiling clap_builder v4.5.34
   Compiling tempfile v3.19.1
   Compiling git-testament-derive v0.2.1
   Compiling humansize v2.1.3
   Compiling globwalk v0.9.1
   Compiling pest_derive v2.8.0
   Compiling serde-value v0.7.0
   Compiling serde_yaml v0.8.26
   Compiling subplot v0.9.0
   Compiling getopts v0.2.21
   Compiling is-terminal v0.4.16
   Compiling percent-encoding v2.3.1
   Compiling tera v1.20.0
   Compiling pulldown-cmark v0.9.6
   Compiling serde_yaml v0.9.34+deprecated
   Compiling env_logger v0.10.2
   Compiling roadmap v0.5.0
   Compiling serde-aux v4.6.0
   Compiling clap v4.5.34
   Compiling git-testament v0.2.6
   Compiling tempfile-fast v0.3.4
   Compiling syn v1.0.109
   Compiling tracing-attributes v0.1.28
   Compiling tracing-core v0.1.33
   Compiling fehler-macros v1.0.0
   Compiling tracing v0.1.41
    Checking nix v0.29.0
   Compiling subplot-build v0.9.0
    Checking cvt v0.1.2
   Compiling portable-atomic v1.11.0
   Compiling glob v0.3.2
   Compiling rust_decimal v1.37.1
   Compiling subplotlib v0.9.0
    Checking fs_at v0.2.1
   Compiling fehler v1.0.0
    Checking normpath v1.3.0
    Checking unicode-width v0.2.0
    Checking console v0.15.11
    Checking env_filter v0.1.3
    Checking dirs-sys v0.4.1
    Checking remove_dir_all v0.8.4
    Checking libyml v0.0.5
   Compiling subplotlib-derive v0.9.0
    Checking filetime v0.2.25
    Checking fs2 v0.4.3
    Checking jiff v0.2.5
    Checking unescape v0.1.0
    Checking base64 v0.21.7
    Checking state v0.5.3
    Checking indicatif v0.17.11
    Checking byte-unit v5.1.6
    Checking sha2 v0.10.8
    Checking serde_yml v0.0.12
    Checking directories v5.0.1
    Checking env_logger v0.11.7
    Checking bytesize v1.3.2
    Checking ambient-ci v0.2.0 (/workspace/src)
error: the `Err`-variant returned from this function is very large
   --> src/action.rs:63:51
    |
63  |     pub fn execute(&self, plan: &RunnablePlan) -> Result<(), ActionError> {
    |                                                   ^^^^^^^^^^^^^^^^^^^^^^^
...
555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    = note: `-D clippy::result-large-err` implied by `-D warnings`
    = help: to override `-D warnings` add `#[allow(clippy::result_large_err)]`

error: variables can be used directly in the `format!` string
  --> src/action.rs:64:9
   |
64 |         debug!("Plan::execute: {:#?}", self);
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
   = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
   = note: `-D clippy::uninlined-format-args` implied by `-D warnings`
   = help: to override `-D warnings` add `#[allow(clippy::uninlined_format_args)]`
help: change this to
   |
64 -         debug!("Plan::execute: {:#?}", self);
64 +         debug!("Plan::execute: {self:#?}");
   |

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:147:19
    |
147 |     fn dummy() -> Result<(), ActionError> {
    |                   ^^^^^^^^^^^^^^^^^^^^^^^
...
555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:152:33
    |
152 |     fn pwd(sourcedir: &Path) -> Result<(), ActionError> {
    |                                 ^^^^^^^^^^^^^^^^^^^^^^^
...
555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:157:60
    |
157 |     fn rsync(artifactsdir: &Path, target: Option<&str>) -> Result<(), ActionError> {
    |                                                            ^^^^^^^^^^^^^^^^^^^^^^^
...
555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:166:71
    |
166 |     fn dput_action(artifactsdir: &Path, dput_target: Option<&str>) -> Result<(), ActionError> {
    |                                                                       ^^^^^^^^^^^^^^^^^^^^^^^
...
555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:176:67
    |
176 |     fn cargo_fetch(source_dir: &Path, dependencies_dir: &Path) -> Result<(), ActionError> {
    |                                                                   ^^^^^^^^^^^^^^^^^^^^^^^
...
555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:190:34
    |
190 |     fn mkdir(pathname: &Path) -> Result<(), ActionError> {
    |                                  ^^^^^^^^^^^^^^^^^^^^^^^
...
555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:197:54
    |
197 |     fn tar_create(archive: &Path, dirname: &Path) -> Result<(), ActionError> {
    |                                                      ^^^^^^^^^^^^^^^^^^^^^^^
...
555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:206:55
    |
206 |     fn tar_extract(archive: &Path, dirname: &Path) -> Result<(), ActionError> {
    |                                                       ^^^^^^^^^^^^^^^^^^^^^^^
...
555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:222:10
    |
222 |     ) -> Result<(), ActionError> {
    |          ^^^^^^^^^^^^^^^^^^^^^^^
...
555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: variables can be used directly in the `format!` string
   --> src/action.rs:232:24
    |
232 |         let argv_str = format!("{:?}", argv);
    |                        ^^^^^^^^^^^^^^^^^^^^^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
    |
232 -         let argv_str = format!("{:?}", argv);
232 +         let argv_str = format!("{argv:?}");
    |

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:258:51
    |
258 |     fn spawn_str_in(argv: &[&str], cwd: &Path) -> Result<(), ActionError> {
    |                                                   ^^^^^^^^^^^^^^^^^^^^^^^
...
555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:267:10
    |
267 |     ) -> Result<(), ActionError> {
    |          ^^^^^^^^^^^^^^^^^^^^^^^
...
555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:278:53
    |
278 |     fn shell(plan: &RunnablePlan, snippet: &str) -> Result<(), ActionError> {
    |                                                     ^^^^^^^^^^^^^^^^^^^^^^^
...
555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: variables can be used directly in the `format!` string
   --> src/action.rs:279:23
    |
279 |         let snippet = format!("set -xeuo pipefail\n{}\n", snippet);
    |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
    |
279 -         let snippet = format!("set -xeuo pipefail\n{}\n", snippet);
279 +         let snippet = format!("set -xeuo pipefail\n{snippet}\n");
    |

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:287:10
    |
287 |     ) -> Result<(), ActionError> {
    |          ^^^^^^^^^^^^^^^^^^^^^^^
...
555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:300:10
    |
300 |     ) -> Result<Vec<(&'static str, String)>, ActionError> {
    |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:318:59
    |
318 |     fn spawn_cargo(plan: &RunnablePlan, args: &[&str]) -> Result<(), ActionError> {
    |                                                           ^^^^^^^^^^^^^^^^^^^^^^^
...
555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:323:42
    |
323 |     fn cargo_fmt(plan: &RunnablePlan) -> Result<(), ActionError> {
    |                                          ^^^^^^^^^^^^^^^^^^^^^^^
...
555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:327:45
    |
327 |     fn cargo_clippy(plan: &RunnablePlan) -> Result<(), ActionError> {
    |                                             ^^^^^^^^^^^^^^^^^^^^^^^
...
555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:345:44
    |
345 |     fn cargo_build(plan: &RunnablePlan) -> Result<(), ActionError> {
    |                                            ^^^^^^^^^^^^^^^^^^^^^^^
...
555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:360:43
    |
360 |     fn cargo_test(plan: &RunnablePlan) -> Result<(), ActionError> {
    |                                           ^^^^^^^^^^^^^^^^^^^^^^^
...
555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:374:46
    |
374 |     fn cargo_install(plan: &RunnablePlan) -> Result<(), ActionError> {
    |                                              ^^^^^^^^^^^^^^^^^^^^^^^
...
555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/action.rs:392:36
    |
392 |     fn deb(plan: &RunnablePlan) -> Result<(), ActionError> {
    |                                    ^^^^^^^^^^^^^^^^^^^^^^^
...
555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     -------------------------------------------------------- the largest variant contains at least 128 bytes
...
561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
    |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
    |
    = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: variables can be used directly in the `format!` string
  --> src/checksummer.rs:21:9
   |
21 |         write!(f, "{}", s)
   |         ^^^^^^^^^^^^^^^^^^
   |
   = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
   |
21 -         write!(f, "{}", s)
21 +         write!(f, "{s}")
   |

error: variables can be used directly in the `format!` string
  --> src/cloud_init.rs:48:12
   |
48 |         Ok(format!("#cloud-config\n{}", userdata))
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
   = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
   |
48 -         Ok(format!("#cloud-config\n{}", userdata))
48 +         Ok(format!("#cloud-config\n{userdata}"))
   |

error: variables can be used directly in the `format!` string
  --> src/cloud_init.rs:78:9
   |
78 |         debug!("LocalDataStore: {:#?}", self);
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
   = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
   |
78 -         debug!("LocalDataStore: {:#?}", self);
78 +         debug!("LocalDataStore: {self:#?}");
   |

error: variables can be used directly in the `format!` string
   --> src/cloud_init.rs:125:9
    |
125 |         debug!("LocalDataStoreBuilder: {:#?}", self);
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
    |
125 -         debug!("LocalDataStoreBuilder: {:#?}", self);
125 +         debug!("LocalDataStoreBuilder: {self:#?}");
    |

error: the `Err`-variant returned from this function is very large
   --> src/plan.rs:15:42
    |
15  |     pub fn from_file(filename: &Path) -> Result<Self, PlanError> {
    |                                          ^^^^^^^^^^^^^^^^^^^^^^^
...
202 |     Action(#[from] crate::action::ActionError),
    |     ------------------------------------------ the largest variant contains at least 136 bytes
    |
    = help: try reducing the size of `plan::PlanError`, for example by boxing large elements or replacing it with `Box<plan::PlanError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/plan.rs:22:47
    |
22  |     pub fn to_file(&self, filename: &Path) -> Result<(), PlanError> {
    |                                               ^^^^^^^^^^^^^^^^^^^^^
...
202 |     Action(#[from] crate::action::ActionError),
    |     ------------------------------------------ the largest variant contains at least 136 bytes
    |
    = help: try reducing the size of `plan::PlanError`, for example by boxing large elements or replacing it with `Box<plan::PlanError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/plan.rs:53:37
    |
53  |     pub fn parse_str(yaml: &str) -> Result<Self, PlanError> {
    |                                     ^^^^^^^^^^^^^^^^^^^^^^^
...
202 |     Action(#[from] crate::action::ActionError),
    |     ------------------------------------------ the largest variant contains at least 136 bytes
    |
    = help: try reducing the size of `plan::PlanError`, for example by boxing large elements or replacing it with `Box<plan::PlanError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/plan.rs:57:42
    |
57  |     pub fn from_file(filename: &Path) -> Result<Self, PlanError> {
    |                                          ^^^^^^^^^^^^^^^^^^^^^^^
...
202 |     Action(#[from] crate::action::ActionError),
    |     ------------------------------------------ the largest variant contains at least 136 bytes
    |
    = help: try reducing the size of `plan::PlanError`, for example by boxing large elements or replacing it with `Box<plan::PlanError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/plan.rs:71:32
    |
71  |     pub fn to_string(&self) -> Result<String, PlanError> {
    |                                ^^^^^^^^^^^^^^^^^^^^^^^^^
...
202 |     Action(#[from] crate::action::ActionError),
    |     ------------------------------------------ the largest variant contains at least 136 bytes
    |
    = help: try reducing the size of `plan::PlanError`, for example by boxing large elements or replacing it with `Box<plan::PlanError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/plan.rs:75:47
    |
75  |     pub fn to_file(&self, filename: &Path) -> Result<(), PlanError> {
    |                                               ^^^^^^^^^^^^^^^^^^^^^
...
202 |     Action(#[from] crate::action::ActionError),
    |     ------------------------------------------ the largest variant contains at least 136 bytes
    |
    = help: try reducing the size of `plan::PlanError`, for example by boxing large elements or replacing it with `Box<plan::PlanError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: variables can be used directly in the `format!` string
  --> src/plan.rs:77:9
   |
77 |         trace!("RunnablePlan:to_file:\n{}", plan);
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
   = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
   |
77 -         trace!("RunnablePlan:to_file:\n{}", plan);
77 +         trace!("RunnablePlan:to_file:\n{plan}");
   |

error: the `Err`-variant returned from this function is very large
   --> src/plan.rs:96:30
    |
96  |     pub fn execute(&self) -> Result<(), PlanError> {
    |                              ^^^^^^^^^^^^^^^^^^^^^
...
202 |     Action(#[from] crate::action::ActionError),
    |     ------------------------------------------ the largest variant contains at least 136 bytes
    |
    = help: try reducing the size of `plan::PlanError`, for example by boxing large elements or replacing it with `Box<plan::PlanError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: variables can be used directly in the `format!` string
   --> src/qemu.rs:132:9
    |
132 |         debug!("QEMU exit code {}", exit);
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
    |
132 -         debug!("QEMU exit code {}", exit);
132 +         debug!("QEMU exit code {exit}");
    |

error: variables can be used directly in the `format!` string
   --> src/qemu.rs:165:9
    |
165 |         trace!("{:#?}", self);
    |         ^^^^^^^^^^^^^^^^^^^^^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
    |
165 -         trace!("{:#?}", self);
165 +         trace!("{self:#?}");
    |

error: variables can be used directly in the `format!` string
   --> src/qemu.rs:246:13
    |
246 | /             error!(
247 | |                 "QEMU failed: exit={}\nstdout: {:?}\nstderr: {:?}\nVM console: {:?}",
248 | |                 exit, out, err, console_log
249 | |             );
    | |_____________^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args

error: variables can be used directly in the `format!` string
   --> src/qemu.rs:276:13
    |
276 |             trace!("log has {:?}", EXIT);
    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
    |
276 -             trace!("log has {:?}", EXIT);
276 +             trace!("log has {EXIT:?}");
    |

error: variables can be used directly in the `format!` string
   --> src/qemu.rs:279:17
    |
279 |                 trace!("log has newline after exit: {:?}", exit);
    |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
    |
279 -                 trace!("log has newline after exit: {:?}", exit);
279 +                 trace!("log has newline after exit: {exit:?}");
    |

error: variables can be used directly in the `format!` string
   --> src/qemu.rs:281:21
    |
281 |                     trace!("log exit coded parses ok: {}", exit);
    |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
    |
281 -                     trace!("log exit coded parses ok: {}", exit);
281 +                     trace!("log exit coded parses ok: {exit}");
    |

error: variables can be used directly in the `format!` string
   --> src/qemu.rs:310:9
    |
310 | /         error!(
311 | |             "qemu-img failed: exit={}\nstdout: {:?}\nstderr: {:?}",
312 | |             exit, out, err,
313 | |         );
    | |_________^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args

error: variables can be used directly in the `format!` string
   --> src/qemu.rs:351:19
    |
351 |             .push(format!("format=qcow2,if=virtio,file={}", path));
    |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
    |
351 -             .push(format!("format=qcow2,if=virtio,file={}", path));
351 +             .push(format!("format=qcow2,if=virtio,file={path}"));
    |

error: the `Err`-variant returned from this function is very large
   --> src/run.rs:32:6
    |
32  | ) -> Result<(), RunError> {
    |      ^^^^^^^^^^^^^^^^^^^^
...
433 |     Plan(#[from] PlanError),
    |     ----------------------- the largest variant contains at least 136 bytes
    |
    = help: try reducing the size of `run::RunError`, for example by boxing large elements or replacing it with `Box<run::RunError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: variables can be used directly in the `format!` string
  --> src/run.rs:53:13
   |
53 |             info!("project {}: running CI", name);
   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
   = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
   |
53 -             info!("project {}: running CI", name);
53 +             info!("project {name}: running CI");
   |

error: variables can be used directly in the `format!` string
   --> src/run.rs:125:13
    |
125 |             info!("project {}: NOT running CI", name);
    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
    |
125 -             info!("project {}: NOT running CI", name);
125 +             info!("project {name}: NOT running CI");
    |

error: the `Err`-variant returned from this function is very large
   --> src/run.rs:132:35
    |
132 | pub fn create_cloud_init_iso() -> Result<LocalDataStore, RunError> {
    |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
433 |     Plan(#[from] PlanError),
    |     ----------------------- the largest variant contains at least 136 bytes
    |
    = help: try reducing the size of `run::RunError`, for example by boxing large elements or replacing it with `Box<run::RunError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/run.rs:158:66
    |
158 | pub fn create_source_vdrive(tmp: &TempDir, source_dir: &Path) -> Result<VirtualDrive, RunError> {
    |                                                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
433 |     Plan(#[from] PlanError),
    |     ----------------------- the largest variant contains at least 136 bytes
    |
    = help: try reducing the size of `run::RunError`, for example by boxing large elements or replacing it with `Box<run::RunError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/run.rs:167:6
    |
167 | ) -> Result<VirtualDrive, RunError> {
    |      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
433 |     Plan(#[from] PlanError),
    |     ----------------------- the largest variant contains at least 136 bytes
    |
    = help: try reducing the size of `run::RunError`, for example by boxing large elements or replacing it with `Box<run::RunError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/run.rs:178:64
    |
178 | fn create_dependencies_vdrive(tmp: &TempDir, state: &State) -> Result<VirtualDrive, RunError> {
    |                                                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
433 |     Plan(#[from] PlanError),
    |     ----------------------- the largest variant contains at least 136 bytes
    |
    = help: try reducing the size of `run::RunError`, for example by boxing large elements or replacing it with `Box<run::RunError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/run.rs:192:6
    |
192 | ) -> Result<VirtualDrive, RunError> {
    |      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
433 |     Plan(#[from] PlanError),
    |     ----------------------- the largest variant contains at least 136 bytes
    |
    = help: try reducing the size of `run::RunError`, for example by boxing large elements or replacing it with `Box<run::RunError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/run.rs:207:6
    |
207 | ) -> Result<VirtualDrive, RunError> {
    |      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
433 |     Plan(#[from] PlanError),
    |     ----------------------- the largest variant contains at least 136 bytes
    |
    = help: try reducing the size of `run::RunError`, for example by boxing large elements or replacing it with `Box<run::RunError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/run.rs:289:57
    |
289 | fn construct_runnable_plan(actions: &[UnsafeAction]) -> Result<RunnablePlan, RunError> {
    |                                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
433 |     Plan(#[from] PlanError),
    |     ----------------------- the largest variant contains at least 136 bytes
    |
    = help: try reducing the size of `run::RunError`, for example by boxing large elements or replacing it with `Box<run::RunError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: the `Err`-variant returned from this function is very large
   --> src/run.rs:332:6
    |
332 | ) -> Result<(bool, State), RunError> {
    |      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
433 |     Plan(#[from] PlanError),
    |     ----------------------- the largest variant contains at least 136 bytes
    |
    = help: try reducing the size of `run::RunError`, for example by boxing large elements or replacing it with `Box<run::RunError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err

error: variables can be used directly in the `format!` string
   --> src/run.rs:337:9
    |
337 |         debug!("latest commit: {:?}", latest_commit);
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
    |
337 -         debug!("latest commit: {:?}", latest_commit);
337 +         debug!("latest commit: {latest_commit:?}");
    |

error: variables can be used directly in the `format!` string
  --> src/util.rs:85:18
   |
85 |     let target = format!("{}/.", target);
   |                  ^^^^^^^^^^^^^^^^^^^^^^^
   |
   = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
   |
85 -     let target = format!("{}/.", target);
85 +     let target = format!("{target}/.");
   |

error: variables can be used directly in the `format!` string
  --> src/vdrive.rs:72:9
   |
72 |         trace!("creating virtual drive (tar archive): {:#?}", self);
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
   = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
   |
72 -         trace!("creating virtual drive (tar archive): {:#?}", self);
72 +         trace!("creating virtual drive (tar archive): {self:#?}");
   |

error: variables can be used directly in the `format!` string
   --> src/run.rs:523:9
    |
523 |         println!("{}", msg);
    |         ^^^^^^^^^^^^^^^^^^^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
    |
523 -         println!("{}", msg);
523 +         println!("{msg}");
    |

error: variables can be used directly in the `format!` string
   --> src/tildepathbuf.rs:201:13
    |
201 |             assert_eq!(path.display().to_string(), format!("{}/foo", home));
    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
    |
201 -             assert_eq!(path.display().to_string(), format!("{}/foo", home));
201 +             assert_eq!(path.display().to_string(), format!("{home}/foo"));
    |

error: could not compile `ambient-ci` (lib) due to 59 previous errors
warning: build failed, waiting for other jobs to finish...
error: variables can be used directly in the `format!` string
   --> src/tildepathbuf.rs:220:40
    |
220 |             let wanted = PathBuf::from(format!("{}/foo", home));
    |                                        ^^^^^^^^^^^^^^^^^^^^^^^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
help: change this to
    |
220 -             let wanted = PathBuf::from(format!("{}/foo", home));
220 +             let wanted = PathBuf::from(format!("{home}/foo"));
    |

error: could not compile `ambient-ci` (lib test) due to 62 previous errors
ERROR: Action failed: command failed: ["cargo", "clippy", "--offline", "--locked", "--workspace", "--all-targets", "--no-deps", "--", "--deny", "warnings"]
ERROR: command failed: ["cargo", "clippy", "--offline", "--locked", "--workspace", "--all-targets", "--no-deps", "--", "--deny", "warnings"]
EXIT CODE: 1
[2025-09-11T12:58:27Z INFO  ambient] ambient ends successfully

Trigger message

{
  "request": "trigger",
  "version": 1,
  "event_type": "patch",
  "repository": {
    "id": "rad:zwPaQSTBX8hktn22F6tHAZSFH2Fh",
    "name": "ambient-ci",
    "description": "Ambient command line tool to run CI projects locally",
    "private": false,
    "default_branch": "main",
    "delegates": [
      "did:key:z6MkgEMYod7Hxfy9qCvDv5hYHkZ4ciWmLFgfvm3Wn1b2w2FV"
    ]
  },
  "action": "Created",
  "patch": {
    "id": "79926aee6daa140f819fbf81d03b2ebd5363207c",
    "author": {
      "id": "did:key:z6MkgEMYod7Hxfy9qCvDv5hYHkZ4ciWmLFgfvm3Wn1b2w2FV",
      "alias": "liw"
    },
    "title": "TEMP: debug Woodpecker CI",
    "state": {
      "status": "archived",
      "conflicts": []
    },
    "before": "962467c0d5ce0eae8d2bb5128d099e8532888d7d",
    "after": "355c3c75edc1dfb4198b167b5e105440b4c0220c",
    "commits": [
      "355c3c75edc1dfb4198b167b5e105440b4c0220c",
      "4ecc1b85a8e4c88b050c40ed4bbf1f381710757d",
      "d844e8b683eb3770b8c87f3e84f6e8a519527a7e",
      "00c5c1839d054aa9baaafdad268aa050b6a34848",
      "8f54230e2a84ced91f2925c9b5ce548cc93896e9",
      "5bfb67cb9ad05333532cf2969a4453fee4846c6e",
      "2d5ede6f88efb9ec8890a11065704296c92b1db3",
      "4995754aa841373f4acdaea5ec6cb82ef3d6a484",
      "a630a1fe4a376299bc149fe674fd20be081a8ed4",
      "59b14d46b894edf331638f5db7e798e2f2dab653",
      "ce0267e787ff5b86b1eced7250fa416c0166a894",
      "b7a1faeed985dc91f4000c42f5d5aac531ab2f14",
      "294e450d5f07de424f651d5996e6ea5a266c6899",
      "4c2e465fb8aeece8009aa3c552828e03cad06986",
      "8bade0ff8401b4fa86422f39a931c654a0b1113c"
    ],
    "target": "b006b06a31704f9aec4361a948283057161cc410",
    "labels": [],
    "assignees": [],
    "revisions": [
      {
        "id": "79926aee6daa140f819fbf81d03b2ebd5363207c",
        "author": {
          "id": "did:key:z6MkgEMYod7Hxfy9qCvDv5hYHkZ4ciWmLFgfvm3Wn1b2w2FV",
          "alias": "liw"
        },
        "description": "Signed-off-by: Lars Wirzenius <liw@liw.fi>\nSponsored-by: author",
        "base": "962467c0d5ce0eae8d2bb5128d099e8532888d7d",
        "oid": "8bade0ff8401b4fa86422f39a931c654a0b1113c",
        "timestamp": 1744729642
      },
      {
        "id": "9a7725c815940bac340eec2f482fcdf6d495d820",
        "author": {
          "id": "did:key:z6MkgEMYod7Hxfy9qCvDv5hYHkZ4ciWmLFgfvm3Wn1b2w2FV",
          "alias": "liw"
        },
        "description": "TEMP: debug\n\nSigned-off-by: Lars Wirzenius <liw@liw.fi>\nSponsored-by: author",
        "base": "962467c0d5ce0eae8d2bb5128d099e8532888d7d",
        "oid": "4c2e465fb8aeece8009aa3c552828e03cad06986",
        "timestamp": 1744780226
      },
      {
        "id": "413525799bfcefd6fb8896da247f6e1e4915f6b5",
        "author": {
          "id": "did:key:z6MkgEMYod7Hxfy9qCvDv5hYHkZ4ciWmLFgfvm3Wn1b2w2FV",
          "alias": "liw"
        },
        "description": "TEMP: allow triggers\n\nSigned-off-by: Lars Wirzenius <liw@liw.fi>\nSponsored-by: author",
        "base": "962467c0d5ce0eae8d2bb5128d099e8532888d7d",
        "oid": "294e450d5f07de424f651d5996e6ea5a266c6899",
        "timestamp": 1744780362
      },
      {
        "id": "6fe334aed7bb1f6143d70496a920546ce8b7ec15",
        "author": {
          "id": "did:key:z6MkgEMYod7Hxfy9qCvDv5hYHkZ4ciWmLFgfvm3Wn1b2w2FV",
          "alias": "liw"
        },
        "description": "TEMP: no need to run checks\n\nSigned-off-by: Lars Wirzenius <liw@liw.fi>\nSponsored-by: author",
        "base": "962467c0d5ce0eae8d2bb5128d099e8532888d7d",
        "oid": "b7a1faeed985dc91f4000c42f5d5aac531ab2f14",
        "timestamp": 1744780851
      },
      {
        "id": "c8f294487d8cc8f6eb095d94d7254136ac7f4b4c",
        "author": {
          "id": "did:key:z6MkgEMYod7Hxfy9qCvDv5hYHkZ4ciWmLFgfvm3Wn1b2w2FV",
          "alias": "liw"
        },
        "description": "TEMP: debug\n\nSigned-off-by: Lars Wirzenius <liw@liw.fi>\nSponsored-by: author",
        "base": "962467c0d5ce0eae8d2bb5128d099e8532888d7d",
        "oid": "ce0267e787ff5b86b1eced7250fa416c0166a894",
        "timestamp": 1744781344
      },
      {
        "id": "3a8585472babce1e1cc9aaa83e11de3175fe9666",
        "author": {
          "id": "did:key:z6MkgEMYod7Hxfy9qCvDv5hYHkZ4ciWmLFgfvm3Wn1b2w2FV",
          "alias": "liw"
        },
        "description": "TEMP: debug\n\nSigned-off-by: Lars Wirzenius <liw@liw.fi>\nSponsored-by: author",
        "base": "962467c0d5ce0eae8d2bb5128d099e8532888d7d",
        "oid": "59b14d46b894edf331638f5db7e798e2f2dab653",
        "timestamp": 1744781410
      },
      {
        "id": "0460f21efa3a65214a3ff2dbf772793fb1e5a169",
        "author": {
          "id": "did:key:z6MkgEMYod7Hxfy9qCvDv5hYHkZ4ciWmLFgfvm3Wn1b2w2FV",
          "alias": "liw"
        },
        "description": "TEMP: debug\n\nSigned-off-by: Lars Wirzenius <liw@liw.fi>\nSponsored-by: author",
        "base": "962467c0d5ce0eae8d2bb5128d099e8532888d7d",
        "oid": "a630a1fe4a376299bc149fe674fd20be081a8ed4",
        "timestamp": 1744781564
      },
      {
        "id": "09ae9920ffcc2a1b7a51e0884be588d934140c2b",
        "author": {
          "id": "did:key:z6MkgEMYod7Hxfy9qCvDv5hYHkZ4ciWmLFgfvm3Wn1b2w2FV",
          "alias": "liw"
        },
        "description": "TEMP: debug\n\nSigned-off-by: Lars Wirzenius <liw@liw.fi>\nSponsored-by: author",
        "base": "962467c0d5ce0eae8d2bb5128d099e8532888d7d",
        "oid": "4995754aa841373f4acdaea5ec6cb82ef3d6a484",
        "timestamp": 1744781726
      },
      {
        "id": "778068828cbabfc194333f3f688e5f1e702de9a1",
        "author": {
          "id": "did:key:z6MkgEMYod7Hxfy9qCvDv5hYHkZ4ciWmLFgfvm3Wn1b2w2FV",
          "alias": "liw"
        },
        "description": "TEMP: debug\n\nSigned-off-by: Lars Wirzenius <liw@liw.fi>\nSponsored-by: author",
        "base": "962467c0d5ce0eae8d2bb5128d099e8532888d7d",
        "oid": "2d5ede6f88efb9ec8890a11065704296c92b1db3",
        "timestamp": 1744781919
      },
      {
        "id": "746b5ad797f284a61ba066bbb2c4096eea91ac3f",
        "author": {
          "id": "did:key:z6MkgEMYod7Hxfy9qCvDv5hYHkZ4ciWmLFgfvm3Wn1b2w2FV",
          "alias": "liw"
        },
        "description": "TEMP: debug\n\nSigned-off-by: Lars Wirzenius <liw@liw.fi>\nSponsored-by: author",
        "base": "962467c0d5ce0eae8d2bb5128d099e8532888d7d",
        "oid": "5bfb67cb9ad05333532cf2969a4453fee4846c6e",
        "timestamp": 1744782388
      },
      {
        "id": "084efbd9580629094e3989b0f541bbc10f1d2c5c",
        "author": {
          "id": "did:key:z6MkgEMYod7Hxfy9qCvDv5hYHkZ4ciWmLFgfvm3Wn1b2w2FV",
          "alias": "liw"
        },
        "description": "TEMP: debug\n\nSigned-off-by: Lars Wirzenius <liw@liw.fi>\nSponsored-by: author",
        "base": "962467c0d5ce0eae8d2bb5128d099e8532888d7d",
        "oid": "8f54230e2a84ced91f2925c9b5ce548cc93896e9",
        "timestamp": 1744782502
      },
      {
        "id": "86b0bee15d77bd2c0b961b47712de1060982df00",
        "author": {
          "id": "did:key:z6MkgEMYod7Hxfy9qCvDv5hYHkZ4ciWmLFgfvm3Wn1b2w2FV",
          "alias": "liw"
        },
        "description": "TEMP: debug\n\nSigned-off-by: Lars Wirzenius <liw@liw.fi>\nSponsored-by: author",
        "base": "962467c0d5ce0eae8d2bb5128d099e8532888d7d",
        "oid": "00c5c1839d054aa9baaafdad268aa050b6a34848",
        "timestamp": 1744782675
      },
      {
        "id": "409f6deda3d00632b84f2dc782ab0db095cfc510",
        "author": {
          "id": "did:key:z6MkgEMYod7Hxfy9qCvDv5hYHkZ4ciWmLFgfvm3Wn1b2w2FV",
          "alias": "liw"
        },
        "description": "TEMP: debug\n\nSigned-off-by: Lars Wirzenius <liw@liw.fi>\nSponsored-by: author",
        "base": "962467c0d5ce0eae8d2bb5128d099e8532888d7d",
        "oid": "d844e8b683eb3770b8c87f3e84f6e8a519527a7e",
        "timestamp": 1744782830
      },
      {
        "id": "10ed1547c727ca61025076b0270390092390025b",
        "author": {
          "id": "did:key:z6MkgEMYod7Hxfy9qCvDv5hYHkZ4ciWmLFgfvm3Wn1b2w2FV",
          "alias": "liw"
        },
        "description": "TEMP: tidy up\n\nSigned-off-by: Lars Wirzenius <liw@liw.fi>\nSponsored-by: author",
        "base": "962467c0d5ce0eae8d2bb5128d099e8532888d7d",
        "oid": "4ecc1b85a8e4c88b050c40ed4bbf1f381710757d",
        "timestamp": 1744783074
      },
      {
        "id": "3b4065c928749ea34d56e7649d46a5a53828f26f",
        "author": {
          "id": "did:key:z6MkgEMYod7Hxfy9qCvDv5hYHkZ4ciWmLFgfvm3Wn1b2w2FV",
          "alias": "liw"
        },
        "description": "TEMP: tidy\n\nSigned-off-by: Lars Wirzenius <liw@liw.fi>\nSponsored-by: author",
        "base": "962467c0d5ce0eae8d2bb5128d099e8532888d7d",
        "oid": "355c3c75edc1dfb4198b167b5e105440b4c0220c",
        "timestamp": 1744783272
      },
      {
        "id": "2f8c08d5d4f8eec17490c5c02fb566a7db5cdb9a",
        "author": {
          "id": "did:key:z6MkgEMYod7Hxfy9qCvDv5hYHkZ4ciWmLFgfvm3Wn1b2w2FV",
          "alias": "liw"
        },
        "description": "ci(woodpecker): debug\n\nSigned-off-by: Yorgos Saslis <yorgos.work@proton.me>",
        "base": "962467c0d5ce0eae8d2bb5128d099e8532888d7d",
        "oid": "74243a2f41c3385b44edb81f566bdb1c7c76e850",
        "timestamp": 1744785741
      },
      {
        "id": "afdb8d2b509788e0e3899fc0f455ac97e094eccc",
        "author": {
          "id": "did:key:z6MkgEMYod7Hxfy9qCvDv5hYHkZ4ciWmLFgfvm3Wn1b2w2FV",
          "alias": "liw"
        },
        "description": "ci(woodpecker): debug\n\nSigned-off-by: Yorgos Saslis <yorgos.work@proton.me>",
        "base": "962467c0d5ce0eae8d2bb5128d099e8532888d7d",
        "oid": "2834e3643e4edb6625f181ed660a5b912f113c7e",
        "timestamp": 1744785983
      },
      {
        "id": "2832ddd02a87a587ff0a20ebe1dd847733e6319b",
        "author": {
          "id": "did:key:z6MkgEMYod7Hxfy9qCvDv5hYHkZ4ciWmLFgfvm3Wn1b2w2FV",
          "alias": "liw"
        },
        "description": "ci(woodpecker): debug\n\nSigned-off-by: Yorgos Saslis <yorgos.work@proton.me>",
        "base": "962467c0d5ce0eae8d2bb5128d099e8532888d7d",
        "oid": "d7a794a2b472830688c3c7b71349e59955e9ff45",
        "timestamp": 1744786170
      },
      {
        "id": "f5d57cae481a27cb48e3aa920ebcbd130c38e90b",
        "author": {
          "id": "did:key:z6MkgEMYod7Hxfy9qCvDv5hYHkZ4ciWmLFgfvm3Wn1b2w2FV",
          "alias": "liw"
        },
        "description": "ci(woodpecker): debug\n\nSigned-off-by: Yorgos Saslis <yorgos.work@proton.me>",
        "base": "962467c0d5ce0eae8d2bb5128d099e8532888d7d",
        "oid": "35186b116c358a09b306d374045d3200b5a9b755",
        "timestamp": 1744786447
      }
    ]
  }
}

Ambient stdout

[2025-09-11T12:57:38Z INFO  ambient] ambient starts
[2025-09-11T12:57:38Z DEBUG ambient] load default configuration file /home/_rad/.config/ambient/config.yaml if it exists
deprecated: the `cpus` field is replaced by `qemu.cpus`
deprecated: the `memory` field is replaced by `qemu.memory`
[2025-09-11T12:57:38Z DEBUG ambient] complete configuration: Config {
        tmpdir: "/home/_rad/tmp",
        image_store: "/home/_rad/ambient-images",
        projects: "/dev/null",
        state: "/home/_rad/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(
            1000000000,
        ),
        cache_max_size: Byte(
            30000000000,
        ),
        qemu: QemuConfig {
            cpus: 2,
            memory: Byte(
                12000000000,
            ),
            kvm_binary: "/usr/bin/kvm",
            ovmf_vars_file: "/usr/share/ovmf/OVMF.fd",
            ovmf_code_file: "/usr/share/ovmf/OVMF.fd",
        },
    }
[2025-09-11T12:57:38Z DEBUG ambient] configuration: Config {
        tmpdir: "/home/_rad/tmp",
        image_store: "/home/_rad/ambient-images",
        projects: "/dev/null",
        state: "/home/_rad/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(
            1000000000,
        ),
        cache_max_size: Byte(
            30000000000,
        ),
        qemu: QemuConfig {
            cpus: 2,
            memory: Byte(
                12000000000,
            ),
            kvm_binary: "/usr/bin/kvm",
            ovmf_vars_file: "/usr/share/ovmf/OVMF.fd",
            ovmf_code_file: "/usr/share/ovmf/OVMF.fd",
        },
    }
[2025-09-11T12:57:38Z DEBUG ambient_ci::project] load project state from /home/_rad/ambient-state/rad:zwPaQSTBX8hktn22F6tHAZSFH2Fh/meta.yaml
[2025-09-11T12:57:38Z DEBUG ambient_ci::run] latest commit: "b006b06a31704f9aec4361a948283057161cc410"
[2025-09-11T12:57:38Z DEBUG ambient_ci::run] is a git repository
[2025-09-11T12:57:38Z DEBUG ambient_ci::run] git repository is clean
[2025-09-11T12:57:38Z DEBUG ambient_ci::run] current (HEAD) commit: 355c3c75edc1dfb4198b167b5e105440b4c0220c
[2025-09-11T12:57:38Z DEBUG ambient_ci::run] no dry run requested
[2025-09-11T12:57:38Z DEBUG ambient_ci::run] forced run requested
[2025-09-11T12:57:38Z DEBUG ambient_ci::run] run? true
[2025-09-11T12:57:38Z INFO  ambient_ci::run] project rad:zwPaQSTBX8hktn22F6tHAZSFH2Fh: running CI
[2025-09-11T12:57:38Z DEBUG ambient_ci::run] Executing pre-plan steps
[2025-09-11T12:57:38Z DEBUG ambient_ci::action] Plan::execute: CargoFetch {
        sourcedir: "/tmp/.tmp3WwRRb/src",
        dependenciesdir: "/home/_rad/ambient-state/rad:zwPaQSTBX8hktn22F6tHAZSFH2Fh/dependencies",
    }
SPAWN: argv=["env", "CARGO_HOME=/home/_rad/ambient-state/rad:zwPaQSTBX8hktn22F6tHAZSFH2Fh/dependencies", "cargo", "fetch", "--locked"]
       cwd=/tmp/.tmp3WwRRb/src (exists? true)
       extra_env=[]
    Updating crates.io index
 Downloading crates ...
  Downloaded anstyle-wincon v3.0.7
  Downloaded thiserror v2.0.12
  Downloaded toml_datetime v0.6.8
  Downloaded remove_dir_all v0.8.4
  Downloaded clap_builder v4.5.34
  Downloaded wasm-bindgen-shared v0.2.100
  Downloaded winnow v0.7.4
  Downloaded rustix v1.0.3
  Downloaded winapi-util v0.1.9
  Downloaded wasm-bindgen-macro-support v0.2.100
  Downloaded log v0.4.27
  Downloaded colorchoice v1.0.3
  Downloaded matchers v0.1.0
  Downloaded filetime v0.2.25
  Downloaded rustversion v1.0.20
  Downloaded memchr v2.7.4
  Downloaded bytesize v1.3.2
  Downloaded redox_syscall v0.5.10
  Downloaded errno v0.3.10
  Downloaded time-macros v0.2.22
  Downloaded redox_users v0.4.6
  Downloaded unescape v0.1.0
  Downloaded anstyle-parse v0.2.6
  Downloaded glob v0.3.2
  Downloaded uuid v1.16.0
  Downloaded thread_local v1.1.8
  Downloaded nu-ansi-term v0.46.0
  Downloaded overload v0.1.1
  Downloaded getrandom v0.2.15
  Downloaded normpath v1.3.0
  Downloaded js-sys v0.3.77
  Downloaded dirs-sys v0.4.1
  Downloaded clap v4.5.34
  Downloaded tinyvec v1.9.0
  Downloaded wasm-bindgen v0.2.100
  Downloaded tracing-subscriber v0.3.19
  Downloaded jiff-static v0.2.5
  Downloaded toml_edit v0.22.24
  Downloaded hashbrown v0.15.2
  Downloaded rust_decimal v1.37.1
  Downloaded wasi v0.14.2+wasi-0.2.4
  Downloaded regex-syntax v0.6.29
  Downloaded portable-atomic v1.11.0
  Downloaded pest v2.8.0
  Downloaded zerocopy v0.8.24
  Downloaded unicode-width v0.2.0
  Downloaded syn v2.0.100
  Downloaded bstr v1.11.3
  Downloaded regex-syntax v0.8.5
  Downloaded regex v1.11.1
  Downloaded regex-automata v0.1.10
  Downloaded indexmap v2.8.0
  Downloaded zerocopy-derive v0.8.24
  Downloaded pest_meta v2.8.0
  Downloaded cc v1.2.17
  Downloaded libm v0.2.11
  Downloaded deunicode v1.6.1
  Downloaded r-efi v5.2.0
  Downloaded regex-automata v0.4.9
  Downloaded getrandom v0.3.2
  Downloaded jiff v0.2.5
  Downloaded bitflags v2.9.0
  Downloaded libc v0.2.171
  Downloaded unicode-ident v1.0.18
  Downloaded clap_derive v4.5.32
  Downloaded anyhow v1.0.97
  Downloaded tracing-core v0.1.33
  Downloaded serde_json v1.0.140
  Downloaded env_logger v0.11.7
  Downloaded wasm-bindgen-backend v0.2.100
  Downloaded state v0.5.3
  Downloaded anstream v0.6.18
  Downloaded thiserror-impl v2.0.12
  Downloaded bumpalo v3.17.0
  Downloaded cfg-if v1.0.0
  Downloaded clap_lex v0.7.4
  Downloaded autocfg v1.4.0
  Downloaded percent-encoding v2.3.1
  Downloaded wasi v0.11.0+wasi-snapshot-preview1
  Downloaded linux-raw-sys v0.9.3
  Downloaded wasm-bindgen-macro v0.2.100
  Downloaded anstyle-query v1.1.2
  Downloaded sha2 v0.10.8
  Downloaded time-core v0.1.4
  Downloaded anstyle v1.0.10
  Downloaded pest_generator v2.8.0
  Downloaded libredox v0.1.3
  Downloaded getopts v0.2.21
  Downloaded smallvec v1.14.0
  Downloaded serde-aux v4.6.0
  Downloaded pest_derive v2.8.0
  Downloaded tracing-attributes v0.1.28
  Downloaded time v0.3.41
  Downloaded directories v5.0.1
  Downloaded hermit-abi v0.5.0
  Downloaded wit-bindgen-rt v0.39.0
  Downloaded proc-macro2 v1.0.94
  Downloaded tempfile v3.19.1
  Downloaded deranged v0.4.1
  Downloaded windows-sys v0.48.0
  Downloaded subplotlib-derive v0.9.0
  Downloaded subplotlib v0.9.0
[2025-09-11T12:57:39Z DEBUG ambient_ci::run] create virtual drive /home/_rad/tmp/.tmpjVRFMs/src.tar
[2025-09-11T12:57:39Z DEBUG ambient_ci::run] create virtual drive /home/_rad/tmp/.tmpjVRFMs/deps.tar
[2025-09-11T12:57:40Z DEBUG ambient_ci::run] create_executor_vdrive: executor="/usr/bin/ambient-execute-plan"
[2025-09-11T12:57:40Z 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: "git clean -fdx\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-11T12:57:40Z DEBUG ambient_ci::run] executor bin /usr/bin/ambient-execute-plan
[2025-09-11T12:57:40Z DEBUG ambient_ci::run] copying /usr/bin/ambient-execute-plan to /home/_rad/tmp/.tmpjVRFMs/ambient-execute-plan/run-ci
[2025-09-11T12:57:40Z DEBUG ambient_ci::run] copy OK: true
[2025-09-11T12:57:40Z DEBUG ambient_ci::run] create virtual drive /home/_rad/tmp/.tmpjVRFMs/executor.tar
[2025-09-11T12:57:41Z DEBUG ambient_ci::project] removing run log file /home/_rad/ambient-state/rad:zwPaQSTBX8hktn22F6tHAZSFH2Fh/run.log
[2025-09-11T12:57:41Z DEBUG ambient_ci::project] statedir is /home/_rad/ambient-state/rad:zwPaQSTBX8hktn22F6tHAZSFH2Fh, exists? true
[2025-09-11T12:57:41Z DEBUG ambient_ci::project] creating run log file /home/_rad/ambient-state/rad:zwPaQSTBX8hktn22F6tHAZSFH2Fh/run.log
[2025-09-11T12:57:41Z DEBUG ambient_ci::project] created run log file /home/_rad/ambient-state/rad:zwPaQSTBX8hktn22F6tHAZSFH2Fh/run.log OK
[2025-09-11T12:57:41Z DEBUG ambient_ci::cloud_init] with_hostname called: "ambient"
[2025-09-11T12:57:41Z DEBUG ambient_ci::cloud_init] with_runcmd called: "echo xyzzy > /dev/ttyS1"
[2025-09-11T12:57:41Z 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-11T12:57:41Z DEBUG ambient_ci::cloud_init] with_runcmd called: "poweroff"
[2025-09-11T12:57:41Z 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-11T12:57:41Z DEBUG ambient_ci::qemu] run QEMU
[2025-09-11T12:57:41Z DEBUG ambient_ci::qemu] create copy-on-write image and UEFI vars file
[2025-09-11T12:57:41Z DEBUG ambient_ci::qemu_utils] qemu-img create /home/_rad/tmp/.tmpyv8Nkm/.tmpj6y3IZ/vm.qcow2 backing on /home/_rad/ambient.qcow2
[2025-09-11T12:57:41Z DEBUG ambient_ci::qemu] create cloud-init ISO file
[2025-09-11T12:57:41Z 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-11T12:57:41Z DEBUG ambient_ci::cloud_init] write /tmp/.tmpdTMnAz/meta-data
[2025-09-11T12:57:41Z DEBUG ambient_ci::cloud_init] write /tmp/.tmpdTMnAz/user-data
[2025-09-11T12:57:41Z DEBUG ambient_ci::qemu] set console log file to /home/_rad/tmp/.tmpyv8Nkm/.tmpj6y3IZ/console.log
[2025-09-11T12:57:41Z DEBUG ambient_ci::util] create file /home/_rad/tmp/.tmpyv8Nkm/.tmpj6y3IZ/console.log
[2025-09-11T12:57:41Z DEBUG ambient_ci::qemu] set run file to /home/_rad/ambient-state/rad:zwPaQSTBX8hktn22F6tHAZSFH2Fh/run.log
[2025-09-11T12:57:41Z DEBUG ambient_ci::util] create file /home/_rad/ambient-state/rad:zwPaQSTBX8hktn22F6tHAZSFH2Fh/run.log
[2025-09-11T12:57:41Z DEBUG ambient_ci::qemu] run QEMU: QemuArgs {
        args: [
            "-m",
            "11444",
            "-smp",
            "cpus=2",
            "-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:/home/_rad/tmp/.tmpyv8Nkm/.tmpj6y3IZ/console.log",
            "-serial",
            "file:/home/_rad/ambient-state/rad:zwPaQSTBX8hktn22F6tHAZSFH2Fh/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=/home/_rad/tmp/.tmpyv8Nkm/.tmpj6y3IZ/vars.fd",
            "-drive",
            "format=qcow2,if=virtio,file=/home/_rad/tmp/.tmpyv8Nkm/.tmpj6y3IZ/vm.qcow2",
            "-drive",
            "format=raw,if=virtio,file=/home/_rad/tmp/.tmpjVRFMs/executor.tar,readonly=on",
            "-cdrom",
            "/home/_rad/tmp/.tmpyv8Nkm/.tmpj6y3IZ/cloud_init.iso",
            "-drive",
            "format=raw,if=virtio,file=/home/_rad/tmp/.tmpjVRFMs/src.tar,readonly=on",
            "-drive",
            "format=raw,if=virtio,file=/home/_rad/tmp/.tmpjVRFMs/artifacts.tar",
            "-drive",
            "format=raw,if=virtio,file=/home/_rad/tmp/.tmpjVRFMs/cache.tar",
            "-drive",
            "format=raw,if=virtio,file=/home/_rad/tmp/.tmpjVRFMs/deps.tar,readonly=on",
            "-nodefaults",
            "-no-user-config",
        ],
    }
[2025-09-11T12:58:26Z DEBUG ambient_ci::qemu] QEMU finished OK
[2025-09-11T12:58:26Z DEBUG ambient_ci::qemu] run log:
    --------------------==========
    [2025-09-11T12:57:44Z TRACE ambient_execute_plan] ambient-execute-plan starts
    [2025-09-11T12:57:44Z DEBUG ambient_execute_plan] ambient-execute-plan starts
    [2025-09-11T12:57:44Z INFO  ambient_execute_plan] ambient-execute-plan starts
    [2025-09-11T12:57:44Z WARN  ambient_execute_plan] ambient-execute-plan starts
    [2025-09-11T12:57:44Z ERROR ambient_execute_plan] ambient-execute-plan 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: |
        git clean -fdx
    - 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
    
    
    RUN: Action Mkdir {
        pathname: "/workspace",
    }
    [2025-09-11T12:57:44Z DEBUG ambient_ci::action] Plan::execute: Mkdir {
            pathname: "/workspace",
        }
    RUN: Action finished OK
    RUN: Action Mkdir {
        pathname: "/workspace/artifacts",
    }
    [2025-09-11T12:57:44Z DEBUG ambient_ci::action] Plan::execute: Mkdir {
            pathname: "/workspace/artifacts",
        }
    RUN: Action finished OK
    RUN: Action TarExtract {
        archive: "/dev/vdc",
        directory: "/workspace/src",
    }
    [2025-09-11T12:57:44Z DEBUG ambient_ci::action] Plan::execute: TarExtract {
            archive: "/dev/vdc",
            directory: "/workspace/src",
        }
    [2025-09-11T12:57:44Z TRACE ambient_ci::vdrive] extracting /dev/vdc to /workspace/src
    [2025-09-11T12:57:44Z TRACE ambient_ci::vdrive] extraction OK
    RUN: Action finished OK
    RUN: Action TarExtract {
        archive: "/dev/vdf",
        directory: "/workspace/deps",
    }
    [2025-09-11T12:57:44Z DEBUG ambient_ci::action] Plan::execute: TarExtract {
            archive: "/dev/vdf",
            directory: "/workspace/deps",
        }
    [2025-09-11T12:57:44Z TRACE ambient_ci::vdrive] extracting /dev/vdf to /workspace/deps
    [2025-09-11T12:57:46Z TRACE ambient_ci::vdrive] extraction OK
    RUN: Action finished OK
    RUN: Action TarExtract {
        archive: "/dev/vde",
        directory: "/workspace/cache",
    }
    [2025-09-11T12:57:46Z DEBUG ambient_ci::action] Plan::execute: TarExtract {
            archive: "/dev/vde",
            directory: "/workspace/cache",
        }
    [2025-09-11T12:57:46Z TRACE ambient_ci::vdrive] extracting /dev/vde to /workspace/cache
    [2025-09-11T12:57:48Z TRACE ambient_ci::vdrive] extraction OK
    RUN: Action finished OK
    RUN: Action Spawn {
        argv: [
            "find",
            "/workspace",
            "-maxdepth",
            "2",
            "-ls",
        ],
    }
    [2025-09-11T12:57:48Z DEBUG ambient_ci::action] Plan::execute: Spawn {
            argv: [
                "find",
                "/workspace",
                "-maxdepth",
                "2",
                "-ls",
            ],
        }
    SPAWN: argv=["find", "/workspace", "-maxdepth", "2", "-ls"]
           cwd=/workspace/src (exists? true)
           extra_env=[]
      2621441      4 drwxr-xr-x   6 root     root         4096 Sep 11 12:57 /workspace
      2621573      4 drwxr-xr-x   3 root     root         4096 Sep 11 12:57 /workspace/deps
      2647701      0 -rw-r--r--   1 root     root            0 Sep 11 12:54 /workspace/deps/.package-cache-mutate
      2621574      4 drwxr-xr-x   5 root     root         4096 Sep 11 12:54 /workspace/deps/registry
      2647700    116 -rw-r--r--   1 root     root       118784 Sep 11 12:57 /workspace/deps/.global-cache
      2647702      0 -rw-r--r--   1 root     root            0 Sep 11 12:54 /workspace/deps/.package-cache
      2621443      4 drwxr-xr-x   7 root     root         4096 Sep 11 12:57 /workspace/src
      2621450      4 -rw-r--r--   1 root     root         1157 Sep 11 12:57 /workspace/src/Cargo.toml
      2621449      4 -rw-r--r--   1 root     root         2985 Sep 11 12:57 /workspace/src/INSTALL.md
      2621447      4 -rw-r--r--   1 root     root          866 Sep 11 12:57 /workspace/src/NEWS.md
      2621491     36 -rw-r--r--   1 root     root        34260 Sep 11 12:57 /workspace/src/COPYING.md
      2621444      4 -rw-r--r--   1 root     root          206 Sep 11 12:57 /workspace/src/ambient.yaml
      2621497      4 drwxr-xr-x   8 root     root         4096 Sep 11 12:57 /workspace/src/.git
      2621453      4 drwxr-xr-x   3 root     root         4096 Sep 11 12:57 /workspace/src/src
      2621490      4 -rw-r--r--   1 root     root         1641 Sep 11 12:57 /workspace/src/README.md
      2621495      4 drwxr-xr-x   2 root     root         4096 Sep 11 12:57 /workspace/src/.radicle
      2621479      4 drwxr-xr-x   3 root     root         4096 Sep 11 12:57 /workspace/src/debian
      2621446     12 -rw-r--r--   1 root     root        10220 Sep 11 12:57 /workspace/src/ambient.md
      2621489      4 -rw-r--r--   1 root     root          224 Sep 11 12:57 /workspace/src/ambient.subplot
      2621451     60 -rw-r--r--   1 root     root        61375 Sep 11 12:57 /workspace/src/Cargo.lock
      2621452      4 -rw-r--r--   1 root     root           32 Sep 11 12:57 /workspace/src/.gitignore
      2621445      4 -rw-r--r--   1 root     root         1212 Sep 11 12:57 /workspace/src/ambient.py
      2621492      4 drwxr-xr-x   2 root     root         4096 Sep 11 12:57 /workspace/src/.woodpecker
      2621448      4 -rw-r--r--   1 root     root          668 Sep 11 12:57 /workspace/src/Makefile
      2621442      4 drwxr-xr-x   2 root     root         4096 Sep 11 12:57 /workspace/artifacts
      2647703      4 drwxr-xr-x   5 root     root         4096 Sep 11 12:56 /workspace/cache
      2650187      4 drwxr-xr-x   7 root     root         4096 Sep 11 12:56 /workspace/cache/debug
      2648556      4 -rw-r--r--   1 root     root         1904 Sep 11 12:57 /workspace/cache/.rustc_info.json
      2648557      4 drwxr-xr-x   7 root     root         4096 Sep 11 12:56 /workspace/cache/release
      2647704      4 drwxr-xr-x   3 root     root         4096 Sep 11 12:56 /workspace/cache/x86_64-unknown-linux-musl
    RUN: Action finished OK
    RUN: Action CargoFmt
    [2025-09-11T12:57:48Z DEBUG ambient_ci::action] Plan::execute: CargoFmt
    SPAWN: argv=["cargo", "fmt", "--check"]
           cwd=/workspace/src (exists? true)
           extra_env=[("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")]
    RUN: Action finished OK
    RUN: Action CargoClippy
    [2025-09-11T12:57:49Z DEBUG ambient_ci::action] Plan::execute: CargoClippy
    SPAWN: argv=["cargo", "clippy", "--offline", "--locked", "--workspace", "--all-targets", "--no-deps", "--", "--deny", "warnings"]
           cwd=/workspace/src (exists? true)
           extra_env=[("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")]
       Compiling proc-macro2 v1.0.94
       Compiling unicode-ident v1.0.18
       Compiling autocfg v1.4.0
       Compiling memchr v2.7.4
       Compiling quote v1.0.40
       Compiling libc v0.2.171
       Compiling syn v2.0.100
       Compiling cfg-if v1.0.0
       Compiling anyhow v1.0.97
       Compiling aho-corasick v1.1.3
       Compiling serde_derive v1.0.219
       Compiling zerocopy v0.8.24
       Compiling thiserror v2.0.12
       Compiling regex-syntax v0.8.5
       Compiling log v0.4.27
       Compiling regex-automata v0.4.9
       Compiling serde v1.0.219
       Compiling thiserror-impl v2.0.12
       Compiling rustix v1.0.3
       Compiling getrandom v0.3.2
       Compiling bitflags v2.9.0
       Compiling getrandom v0.2.15
       Compiling num-traits v0.2.19
       Compiling serde_json v1.0.140
       Compiling time-core v0.1.4
       Compiling time-macros v0.2.22
       Compiling ppv-lite86 v0.2.21
       Compiling pest v2.8.0
       Compiling rand_core v0.6.4
       Compiling bstr v1.11.3
       Compiling indexmap v1.9.3
       Compiling libm v0.2.11
       Compiling deranged v0.4.1
       Compiling anstyle-parse v0.2.6
       Compiling thiserror v1.0.69
       Compiling cc v1.2.17
       Compiling globset v0.4.16
       Compiling pest_meta v2.8.0
       Compiling rand_chacha v0.3.1
       Compiling thiserror-impl v1.0.69
       Compiling anstyle-query v1.1.2
       Compiling anstyle v1.0.10
       Compiling colorchoice v1.0.3
       Compiling linux-raw-sys v0.9.3
       Compiling anstream v0.6.18
       Compiling clap_derive v4.5.32
       Compiling ordered-float v2.10.1
       Compiling pest_generator v2.8.0
       Compiling rand v0.8.5
       Compiling ignore v0.4.23
       Compiling pikchr v0.1.4
       Compiling time v0.3.41
       Compiling regex v1.11.1
       Compiling hashbrown v0.15.2
       Compiling deunicode v1.6.1
       Compiling clap_lex v0.7.4
       Compiling indexmap v2.8.0
       Compiling slug v0.1.6
       Compiling clap_builder v4.5.34
       Compiling tempfile v3.19.1
       Compiling git-testament-derive v0.2.1
       Compiling humansize v2.1.3
       Compiling globwalk v0.9.1
       Compiling pest_derive v2.8.0
       Compiling serde-value v0.7.0
       Compiling serde_yaml v0.8.26
       Compiling subplot v0.9.0
       Compiling getopts v0.2.21
       Compiling is-terminal v0.4.16
       Compiling percent-encoding v2.3.1
       Compiling tera v1.20.0
       Compiling pulldown-cmark v0.9.6
       Compiling serde_yaml v0.9.34+deprecated
       Compiling env_logger v0.10.2
       Compiling roadmap v0.5.0
       Compiling serde-aux v4.6.0
       Compiling clap v4.5.34
       Compiling git-testament v0.2.6
       Compiling tempfile-fast v0.3.4
       Compiling syn v1.0.109
       Compiling tracing-attributes v0.1.28
       Compiling tracing-core v0.1.33
       Compiling fehler-macros v1.0.0
       Compiling tracing v0.1.41
        Checking nix v0.29.0
       Compiling subplot-build v0.9.0
        Checking cvt v0.1.2
       Compiling portable-atomic v1.11.0
       Compiling glob v0.3.2
       Compiling rust_decimal v1.37.1
       Compiling subplotlib v0.9.0
        Checking fs_at v0.2.1
       Compiling fehler v1.0.0
        Checking normpath v1.3.0
        Checking unicode-width v0.2.0
        Checking console v0.15.11
        Checking env_filter v0.1.3
        Checking dirs-sys v0.4.1
        Checking remove_dir_all v0.8.4
        Checking libyml v0.0.5
       Compiling subplotlib-derive v0.9.0
        Checking filetime v0.2.25
        Checking fs2 v0.4.3
        Checking jiff v0.2.5
        Checking unescape v0.1.0
        Checking base64 v0.21.7
        Checking state v0.5.3
        Checking indicatif v0.17.11
        Checking byte-unit v5.1.6
        Checking sha2 v0.10.8
        Checking serde_yml v0.0.12
        Checking directories v5.0.1
        Checking env_logger v0.11.7
        Checking bytesize v1.3.2
        Checking ambient-ci v0.2.0 (/workspace/src)
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:63:51
        |
    63  |     pub fn execute(&self, plan: &RunnablePlan) -> Result<(), ActionError> {
        |                                                   ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
        = note: `-D clippy::result-large-err` implied by `-D warnings`
        = help: to override `-D warnings` add `#[allow(clippy::result_large_err)]`
    
    error: variables can be used directly in the `format!` string
      --> src/action.rs:64:9
       |
    64 |         debug!("Plan::execute: {:#?}", self);
       |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       |
       = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
       = note: `-D clippy::uninlined-format-args` implied by `-D warnings`
       = help: to override `-D warnings` add `#[allow(clippy::uninlined_format_args)]`
    help: change this to
       |
    64 -         debug!("Plan::execute: {:#?}", self);
    64 +         debug!("Plan::execute: {self:#?}");
       |
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:147:19
        |
    147 |     fn dummy() -> Result<(), ActionError> {
        |                   ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:152:33
        |
    152 |     fn pwd(sourcedir: &Path) -> Result<(), ActionError> {
        |                                 ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:157:60
        |
    157 |     fn rsync(artifactsdir: &Path, target: Option<&str>) -> Result<(), ActionError> {
        |                                                            ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:166:71
        |
    166 |     fn dput_action(artifactsdir: &Path, dput_target: Option<&str>) -> Result<(), ActionError> {
        |                                                                       ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:176:67
        |
    176 |     fn cargo_fetch(source_dir: &Path, dependencies_dir: &Path) -> Result<(), ActionError> {
        |                                                                   ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:190:34
        |
    190 |     fn mkdir(pathname: &Path) -> Result<(), ActionError> {
        |                                  ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:197:54
        |
    197 |     fn tar_create(archive: &Path, dirname: &Path) -> Result<(), ActionError> {
        |                                                      ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:206:55
        |
    206 |     fn tar_extract(archive: &Path, dirname: &Path) -> Result<(), ActionError> {
        |                                                       ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:222:10
        |
    222 |     ) -> Result<(), ActionError> {
        |          ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: variables can be used directly in the `format!` string
       --> src/action.rs:232:24
        |
    232 |         let argv_str = format!("{:?}", argv);
        |                        ^^^^^^^^^^^^^^^^^^^^^
        |
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
        |
    232 -         let argv_str = format!("{:?}", argv);
    232 +         let argv_str = format!("{argv:?}");
        |
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:258:51
        |
    258 |     fn spawn_str_in(argv: &[&str], cwd: &Path) -> Result<(), ActionError> {
        |                                                   ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:267:10
        |
    267 |     ) -> Result<(), ActionError> {
        |          ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:278:53
        |
    278 |     fn shell(plan: &RunnablePlan, snippet: &str) -> Result<(), ActionError> {
        |                                                     ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: variables can be used directly in the `format!` string
       --> src/action.rs:279:23
        |
    279 |         let snippet = format!("set -xeuo pipefail\n{}\n", snippet);
        |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        |
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
        |
    279 -         let snippet = format!("set -xeuo pipefail\n{}\n", snippet);
    279 +         let snippet = format!("set -xeuo pipefail\n{snippet}\n");
        |
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:287:10
        |
    287 |     ) -> Result<(), ActionError> {
        |          ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:300:10
        |
    300 |     ) -> Result<Vec<(&'static str, String)>, ActionError> {
        |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...
    555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:318:59
        |
    318 |     fn spawn_cargo(plan: &RunnablePlan, args: &[&str]) -> Result<(), ActionError> {
        |                                                           ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:323:42
        |
    323 |     fn cargo_fmt(plan: &RunnablePlan) -> Result<(), ActionError> {
        |                                          ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:327:45
        |
    327 |     fn cargo_clippy(plan: &RunnablePlan) -> Result<(), ActionError> {
        |                                             ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:345:44
        |
    345 |     fn cargo_build(plan: &RunnablePlan) -> Result<(), ActionError> {
        |                                            ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:360:43
        |
    360 |     fn cargo_test(plan: &RunnablePlan) -> Result<(), ActionError> {
        |                                           ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:374:46
        |
    374 |     fn cargo_install(plan: &RunnablePlan) -> Result<(), ActionError> {
        |                                              ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/action.rs:392:36
        |
    392 |     fn deb(plan: &RunnablePlan) -> Result<(), ActionError> {
        |                                    ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    555 |     TarCreate(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     -------------------------------------------------------- the largest variant contains at least 128 bytes
    ...
    561 |     TarExtract(PathBuf, PathBuf, #[source] VirtualDriveError),
        |     --------------------------------------------------------- the variant `TarExtract` contains at least 128 bytes
        |
        = help: try reducing the size of `action::ActionError`, for example by boxing large elements or replacing it with `Box<action::ActionError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: variables can be used directly in the `format!` string
      --> src/checksummer.rs:21:9
       |
    21 |         write!(f, "{}", s)
       |         ^^^^^^^^^^^^^^^^^^
       |
       = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
       |
    21 -         write!(f, "{}", s)
    21 +         write!(f, "{s}")
       |
    
    error: variables can be used directly in the `format!` string
      --> src/cloud_init.rs:48:12
       |
    48 |         Ok(format!("#cloud-config\n{}", userdata))
       |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       |
       = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
       |
    48 -         Ok(format!("#cloud-config\n{}", userdata))
    48 +         Ok(format!("#cloud-config\n{userdata}"))
       |
    
    error: variables can be used directly in the `format!` string
      --> src/cloud_init.rs:78:9
       |
    78 |         debug!("LocalDataStore: {:#?}", self);
       |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       |
       = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
       |
    78 -         debug!("LocalDataStore: {:#?}", self);
    78 +         debug!("LocalDataStore: {self:#?}");
       |
    
    error: variables can be used directly in the `format!` string
       --> src/cloud_init.rs:125:9
        |
    125 |         debug!("LocalDataStoreBuilder: {:#?}", self);
        |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        |
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
        |
    125 -         debug!("LocalDataStoreBuilder: {:#?}", self);
    125 +         debug!("LocalDataStoreBuilder: {self:#?}");
        |
    
    error: the `Err`-variant returned from this function is very large
       --> src/plan.rs:15:42
        |
    15  |     pub fn from_file(filename: &Path) -> Result<Self, PlanError> {
        |                                          ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    202 |     Action(#[from] crate::action::ActionError),
        |     ------------------------------------------ the largest variant contains at least 136 bytes
        |
        = help: try reducing the size of `plan::PlanError`, for example by boxing large elements or replacing it with `Box<plan::PlanError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/plan.rs:22:47
        |
    22  |     pub fn to_file(&self, filename: &Path) -> Result<(), PlanError> {
        |                                               ^^^^^^^^^^^^^^^^^^^^^
    ...
    202 |     Action(#[from] crate::action::ActionError),
        |     ------------------------------------------ the largest variant contains at least 136 bytes
        |
        = help: try reducing the size of `plan::PlanError`, for example by boxing large elements or replacing it with `Box<plan::PlanError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/plan.rs:53:37
        |
    53  |     pub fn parse_str(yaml: &str) -> Result<Self, PlanError> {
        |                                     ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    202 |     Action(#[from] crate::action::ActionError),
        |     ------------------------------------------ the largest variant contains at least 136 bytes
        |
        = help: try reducing the size of `plan::PlanError`, for example by boxing large elements or replacing it with `Box<plan::PlanError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/plan.rs:57:42
        |
    57  |     pub fn from_file(filename: &Path) -> Result<Self, PlanError> {
        |                                          ^^^^^^^^^^^^^^^^^^^^^^^
    ...
    202 |     Action(#[from] crate::action::ActionError),
        |     ------------------------------------------ the largest variant contains at least 136 bytes
        |
        = help: try reducing the size of `plan::PlanError`, for example by boxing large elements or replacing it with `Box<plan::PlanError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/plan.rs:71:32
        |
    71  |     pub fn to_string(&self) -> Result<String, PlanError> {
        |                                ^^^^^^^^^^^^^^^^^^^^^^^^^
    ...
    202 |     Action(#[from] crate::action::ActionError),
        |     ------------------------------------------ the largest variant contains at least 136 bytes
        |
        = help: try reducing the size of `plan::PlanError`, for example by boxing large elements or replacing it with `Box<plan::PlanError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/plan.rs:75:47
        |
    75  |     pub fn to_file(&self, filename: &Path) -> Result<(), PlanError> {
        |                                               ^^^^^^^^^^^^^^^^^^^^^
    ...
    202 |     Action(#[from] crate::action::ActionError),
        |     ------------------------------------------ the largest variant contains at least 136 bytes
        |
        = help: try reducing the size of `plan::PlanError`, for example by boxing large elements or replacing it with `Box<plan::PlanError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: variables can be used directly in the `format!` string
      --> src/plan.rs:77:9
       |
    77 |         trace!("RunnablePlan:to_file:\n{}", plan);
       |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       |
       = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
       |
    77 -         trace!("RunnablePlan:to_file:\n{}", plan);
    77 +         trace!("RunnablePlan:to_file:\n{plan}");
       |
    
    error: the `Err`-variant returned from this function is very large
       --> src/plan.rs:96:30
        |
    96  |     pub fn execute(&self) -> Result<(), PlanError> {
        |                              ^^^^^^^^^^^^^^^^^^^^^
    ...
    202 |     Action(#[from] crate::action::ActionError),
        |     ------------------------------------------ the largest variant contains at least 136 bytes
        |
        = help: try reducing the size of `plan::PlanError`, for example by boxing large elements or replacing it with `Box<plan::PlanError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: variables can be used directly in the `format!` string
       --> src/qemu.rs:132:9
        |
    132 |         debug!("QEMU exit code {}", exit);
        |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        |
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
        |
    132 -         debug!("QEMU exit code {}", exit);
    132 +         debug!("QEMU exit code {exit}");
        |
    
    error: variables can be used directly in the `format!` string
       --> src/qemu.rs:165:9
        |
    165 |         trace!("{:#?}", self);
        |         ^^^^^^^^^^^^^^^^^^^^^
        |
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
        |
    165 -         trace!("{:#?}", self);
    165 +         trace!("{self:#?}");
        |
    
    error: variables can be used directly in the `format!` string
       --> src/qemu.rs:246:13
        |
    246 | /             error!(
    247 | |                 "QEMU failed: exit={}\nstdout: {:?}\nstderr: {:?}\nVM console: {:?}",
    248 | |                 exit, out, err, console_log
    249 | |             );
        | |_____________^
        |
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    
    error: variables can be used directly in the `format!` string
       --> src/qemu.rs:276:13
        |
    276 |             trace!("log has {:?}", EXIT);
        |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        |
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
        |
    276 -             trace!("log has {:?}", EXIT);
    276 +             trace!("log has {EXIT:?}");
        |
    
    error: variables can be used directly in the `format!` string
       --> src/qemu.rs:279:17
        |
    279 |                 trace!("log has newline after exit: {:?}", exit);
        |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        |
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
        |
    279 -                 trace!("log has newline after exit: {:?}", exit);
    279 +                 trace!("log has newline after exit: {exit:?}");
        |
    
    error: variables can be used directly in the `format!` string
       --> src/qemu.rs:281:21
        |
    281 |                     trace!("log exit coded parses ok: {}", exit);
        |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        |
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
        |
    281 -                     trace!("log exit coded parses ok: {}", exit);
    281 +                     trace!("log exit coded parses ok: {exit}");
        |
    
    error: variables can be used directly in the `format!` string
       --> src/qemu.rs:310:9
        |
    310 | /         error!(
    311 | |             "qemu-img failed: exit={}\nstdout: {:?}\nstderr: {:?}",
    312 | |             exit, out, err,
    313 | |         );
        | |_________^
        |
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    
    error: variables can be used directly in the `format!` string
       --> src/qemu.rs:351:19
        |
    351 |             .push(format!("format=qcow2,if=virtio,file={}", path));
        |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        |
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
        |
    351 -             .push(format!("format=qcow2,if=virtio,file={}", path));
    351 +             .push(format!("format=qcow2,if=virtio,file={path}"));
        |
    
    error: the `Err`-variant returned from this function is very large
       --> src/run.rs:32:6
        |
    32  | ) -> Result<(), RunError> {
        |      ^^^^^^^^^^^^^^^^^^^^
    ...
    433 |     Plan(#[from] PlanError),
        |     ----------------------- the largest variant contains at least 136 bytes
        |
        = help: try reducing the size of `run::RunError`, for example by boxing large elements or replacing it with `Box<run::RunError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: variables can be used directly in the `format!` string
      --> src/run.rs:53:13
       |
    53 |             info!("project {}: running CI", name);
       |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       |
       = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
       |
    53 -             info!("project {}: running CI", name);
    53 +             info!("project {name}: running CI");
       |
    
    error: variables can be used directly in the `format!` string
       --> src/run.rs:125:13
        |
    125 |             info!("project {}: NOT running CI", name);
        |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        |
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
        |
    125 -             info!("project {}: NOT running CI", name);
    125 +             info!("project {name}: NOT running CI");
        |
    
    error: the `Err`-variant returned from this function is very large
       --> src/run.rs:132:35
        |
    132 | pub fn create_cloud_init_iso() -> Result<LocalDataStore, RunError> {
        |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...
    433 |     Plan(#[from] PlanError),
        |     ----------------------- the largest variant contains at least 136 bytes
        |
        = help: try reducing the size of `run::RunError`, for example by boxing large elements or replacing it with `Box<run::RunError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/run.rs:158:66
        |
    158 | pub fn create_source_vdrive(tmp: &TempDir, source_dir: &Path) -> Result<VirtualDrive, RunError> {
        |                                                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...
    433 |     Plan(#[from] PlanError),
        |     ----------------------- the largest variant contains at least 136 bytes
        |
        = help: try reducing the size of `run::RunError`, for example by boxing large elements or replacing it with `Box<run::RunError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/run.rs:167:6
        |
    167 | ) -> Result<VirtualDrive, RunError> {
        |      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...
    433 |     Plan(#[from] PlanError),
        |     ----------------------- the largest variant contains at least 136 bytes
        |
        = help: try reducing the size of `run::RunError`, for example by boxing large elements or replacing it with `Box<run::RunError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/run.rs:178:64
        |
    178 | fn create_dependencies_vdrive(tmp: &TempDir, state: &State) -> Result<VirtualDrive, RunError> {
        |                                                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...
    433 |     Plan(#[from] PlanError),
        |     ----------------------- the largest variant contains at least 136 bytes
        |
        = help: try reducing the size of `run::RunError`, for example by boxing large elements or replacing it with `Box<run::RunError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/run.rs:192:6
        |
    192 | ) -> Result<VirtualDrive, RunError> {
        |      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...
    433 |     Plan(#[from] PlanError),
        |     ----------------------- the largest variant contains at least 136 bytes
        |
        = help: try reducing the size of `run::RunError`, for example by boxing large elements or replacing it with `Box<run::RunError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/run.rs:207:6
        |
    207 | ) -> Result<VirtualDrive, RunError> {
        |      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...
    433 |     Plan(#[from] PlanError),
        |     ----------------------- the largest variant contains at least 136 bytes
        |
        = help: try reducing the size of `run::RunError`, for example by boxing large elements or replacing it with `Box<run::RunError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/run.rs:289:57
        |
    289 | fn construct_runnable_plan(actions: &[UnsafeAction]) -> Result<RunnablePlan, RunError> {
        |                                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...
    433 |     Plan(#[from] PlanError),
        |     ----------------------- the largest variant contains at least 136 bytes
        |
        = help: try reducing the size of `run::RunError`, for example by boxing large elements or replacing it with `Box<run::RunError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: the `Err`-variant returned from this function is very large
       --> src/run.rs:332:6
        |
    332 | ) -> Result<(bool, State), RunError> {
        |      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...
    433 |     Plan(#[from] PlanError),
        |     ----------------------- the largest variant contains at least 136 bytes
        |
        = help: try reducing the size of `run::RunError`, for example by boxing large elements or replacing it with `Box<run::RunError>`
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    
    error: variables can be used directly in the `format!` string
       --> src/run.rs:337:9
        |
    337 |         debug!("latest commit: {:?}", latest_commit);
        |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        |
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
        |
    337 -         debug!("latest commit: {:?}", latest_commit);
    337 +         debug!("latest commit: {latest_commit:?}");
        |
    
    error: variables can be used directly in the `format!` string
      --> src/util.rs:85:18
       |
    85 |     let target = format!("{}/.", target);
       |                  ^^^^^^^^^^^^^^^^^^^^^^^
       |
       = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
       |
    85 -     let target = format!("{}/.", target);
    85 +     let target = format!("{target}/.");
       |
    
    error: variables can be used directly in the `format!` string
      --> src/vdrive.rs:72:9
       |
    72 |         trace!("creating virtual drive (tar archive): {:#?}", self);
       |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       |
       = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
       |
    72 -         trace!("creating virtual drive (tar archive): {:#?}", self);
    72 +         trace!("creating virtual drive (tar archive): {self:#?}");
       |
    
    error: variables can be used directly in the `format!` string
       --> src/run.rs:523:9
        |
    523 |         println!("{}", msg);
        |         ^^^^^^^^^^^^^^^^^^^
        |
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
        |
    523 -         println!("{}", msg);
    523 +         println!("{msg}");
        |
    
    error: variables can be used directly in the `format!` string
       --> src/tildepathbuf.rs:201:13
        |
    201 |             assert_eq!(path.display().to_string(), format!("{}/foo", home));
        |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        |
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
        |
    201 -             assert_eq!(path.display().to_string(), format!("{}/foo", home));
    201 +             assert_eq!(path.display().to_string(), format!("{home}/foo"));
        |
    
    error: could not compile `ambient-ci` (lib) due to 59 previous errors
    warning: build failed, waiting for other jobs to finish...
    error: variables can be used directly in the `format!` string
       --> src/tildepathbuf.rs:220:40
        |
    220 |             let wanted = PathBuf::from(format!("{}/foo", home));
        |                                        ^^^^^^^^^^^^^^^^^^^^^^^
        |
        = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
    help: change this to
        |
    220 -             let wanted = PathBuf::from(format!("{}/foo", home));
    220 +             let wanted = PathBuf::from(format!("{home}/foo"));
        |
    
    error: could not compile `ambient-ci` (lib test) due to 62 previous errors
    ERROR: Action failed: command failed: ["cargo", "clippy", "--offline", "--locked", "--workspace", "--all-targets", "--no-deps", "--", "--deny", "warnings"]
    ERROR: command failed: ["cargo", "clippy", "--offline", "--locked", "--workspace", "--all-targets", "--no-deps", "--", "--deny", "warnings"]
    EXIT CODE: 1
    
    ====================
[2025-09-11T12:58:26Z DEBUG ambient_ci::qemu] QEMU exit code 1
ERROR: failed to run actions in QEMU

Ambient stderr

<empty log>