[INFO] fetching crate gust-lang 0.4.1...
[INFO] testing gust-lang-0.4.1 against 1.100.0-beta.1+cargoflags=--release for beta-release-1.100-2
[INFO] extracting crate gust-lang 0.4.1 into /workspace/builds/worker-7-tc2/source
[INFO] started tweaking crates.io crate gust-lang 0.4.1
[INFO] removed 0 missing tests
[INFO] finished tweaking crates.io crate gust-lang 0.4.1
[INFO] tweaked toml for crates.io crate gust-lang 0.4.1 written to /workspace/builds/worker-7-tc2/source/Cargo.toml
[INFO] validating manifest of crates.io crate gust-lang 0.4.1 on toolchain 1.100.0-beta.1
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.100.0-beta.1" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate crates.io crate gust-lang 0.4.1 already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.100.0-beta.1" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr] warning: `package.homepage` is redundant with `package.repository`
[INFO] [stderr]   --> Cargo.toml:43:12
[INFO] [stderr]    |
[INFO] [stderr] 43 | homepage = "https://github.com/Dieshen/gust"
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 48 | repository = "https://github.com/Dieshen/gust"
[INFO] [stderr]    |              ---------------------------------
[INFO] [stderr]    |
[INFO] [stderr]    = note: `cargo::redundant_homepage` is set to `warn` by default
[INFO] [stderr] help: consider removing `package.homepage`
[INFO] [stderr] warning: `gust-lang` (manifest) generated 1 warning
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:77db811e55d90add9212f6832c23229e3de5f1c1f9905e8cb07319ea15df73ac" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 82b9b5bfd06ac6b3ec5f00d76b214b5c30d777b0d5151874b21b4a59b8ff95d6
[INFO] running `Command { std: "docker" "start" "82b9b5bfd06ac6b3ec5f00d76b214b5c30d777b0d5151874b21b4a59b8ff95d6", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "82b9b5bfd06ac6b3ec5f00d76b214b5c30d777b0d5151874b21b4a59b8ff95d6", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "82b9b5bfd06ac6b3ec5f00d76b214b5c30d777b0d5151874b21b4a59b8ff95d6" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "82b9b5bfd06ac6b3ec5f00d76b214b5c30d777b0d5151874b21b4a59b8ff95d6", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "82b9b5bfd06ac6b3ec5f00d76b214b5c30d777b0d5151874b21b4a59b8ff95d6" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "build" "--frozen" "--message-format=json" "--release", kill_on_drop: false }`
[INFO] [stderr] warning: `package.homepage` is redundant with `package.repository`
[INFO] [stderr]   --> Cargo.toml:43:12
[INFO] [stderr]    |
[INFO] [stderr] 43 | homepage = "https://github.com/Dieshen/gust"
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 48 | repository = "https://github.com/Dieshen/gust"
[INFO] [stderr]    |              ---------------------------------
[INFO] [stderr]    |
[INFO] [stderr]    = note: `cargo::redundant_homepage` is set to `warn` by default
[INFO] [stderr] help: consider removing `package.homepage`
[INFO] [stderr] warning: `gust-lang` (manifest) generated 1 warning
[INFO] [stderr]    Compiling serde_core v1.0.229
[INFO] [stderr]    Compiling thiserror v2.0.19
[INFO] [stderr]    Compiling pest v2.8.8
[INFO] [stderr]    Compiling syn v3.0.1
[INFO] [stderr]    Compiling pest_meta v2.8.8
[INFO] [stderr]    Compiling thiserror-impl v2.0.19
[INFO] [stderr]    Compiling pest_generator v2.8.8
[INFO] [stderr]    Compiling pest_derive v2.8.8
[INFO] [stderr]    Compiling serde_json v1.0.151
[INFO] [stderr]    Compiling gust-lang v0.4.1 (/opt/rustwide/workdir)
[INFO] [stderr] warning: unused dependency `thiserror`
[INFO] [stderr]   --> Cargo.toml:16:15
[INFO] [stderr]    |
[INFO] [stderr] 16 | [dependencies.thiserror]
[INFO] [stderr]    |               ^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `cargo::unused_dependencies` is set to `warn` by default
[INFO] [stderr] help: consider removing the dependency on `thiserror`
[INFO] [stderr] warning: `gust-lang` (manifest) generated 1 warning
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 20.06s
[INFO] running `Command { std: "docker" "inspect" "82b9b5bfd06ac6b3ec5f00d76b214b5c30d777b0d5151874b21b4a59b8ff95d6", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "82b9b5bfd06ac6b3ec5f00d76b214b5c30d777b0d5151874b21b4a59b8ff95d6" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "test" "--frozen" "--no-run" "--message-format=json" "--release", kill_on_drop: false }`
[INFO] [stderr] warning: `package.homepage` is redundant with `package.repository`
[INFO] [stderr]   --> Cargo.toml:43:12
[INFO] [stderr]    |
[INFO] [stderr] 43 | homepage = "https://github.com/Dieshen/gust"
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 48 | repository = "https://github.com/Dieshen/gust"
[INFO] [stderr]    |              ---------------------------------
[INFO] [stderr]    |
[INFO] [stderr]    = note: `cargo::redundant_homepage` is set to `warn` by default
[INFO] [stderr] help: consider removing `package.homepage`
[INFO] [stderr] warning: `gust-lang` (manifest) generated 1 warning
[INFO] [stderr]    Compiling libc v0.2.184
[INFO] [stderr]    Compiling getrandom v0.4.1
[INFO] [stderr]    Compiling zerocopy v0.8.40
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling getrandom v0.3.4
[INFO] [stderr]    Compiling wait-timeout v0.2.1
[INFO] [stderr]    Compiling tempfile v3.27.0
[INFO] [stderr]    Compiling rand_core v0.9.5
[INFO] [stderr]    Compiling rand_xorshift v0.4.0
[INFO] [stderr]    Compiling rand v0.9.2
[INFO] [stderr]    Compiling rusty-fork v0.3.1
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling rand_chacha v0.9.0
[INFO] [stderr]    Compiling proptest v1.11.0
[INFO] [stderr]    Compiling gust-lang v0.4.1 (/opt/rustwide/workdir)
[INFO] [stderr] warning: unused dependency `thiserror`
[INFO] [stderr]   --> Cargo.toml:16:15
[INFO] [stderr]    |
[INFO] [stderr] 16 | [dependencies.thiserror]
[INFO] [stderr]    |               ^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `cargo::unused_dependencies` is set to `warn` by default
[INFO] [stderr] help: consider removing the dependency on `thiserror`
[INFO] [stderr] warning: `gust-lang` (manifest) generated 1 warning
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 29.58s
[INFO] running `Command { std: "docker" "inspect" "82b9b5bfd06ac6b3ec5f00d76b214b5c30d777b0d5151874b21b4a59b8ff95d6", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "82b9b5bfd06ac6b3ec5f00d76b214b5c30d777b0d5151874b21b4a59b8ff95d6" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "test" "--frozen" "--release", kill_on_drop: false }`
[INFO] [stderr] warning: `package.homepage` is redundant with `package.repository`
[INFO] [stderr]   --> Cargo.toml:43:12
[INFO] [stderr]    |
[INFO] [stderr] 43 | homepage = "https://github.com/Dieshen/gust"
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 48 | repository = "https://github.com/Dieshen/gust"
[INFO] [stderr]    |              ---------------------------------
[INFO] [stderr]    |
[INFO] [stderr]    = note: `cargo::redundant_homepage` is set to `warn` by default
[INFO] [stderr] help: consider removing `package.homepage`
[INFO] [stderr] warning: `gust-lang` (manifest) generated 1 warning
[INFO] [stderr] warning: unused dependency `thiserror`
[INFO] [stderr]   --> Cargo.toml:16:15
[INFO] [stderr]    |
[INFO] [stderr] 16 | [dependencies.thiserror]
[INFO] [stderr]    |               ^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `cargo::unused_dependencies` is set to `warn` by default
[INFO] [stderr] help: consider removing the dependency on `thiserror`
[INFO] [stderr] warning: `gust-lang` (manifest) generated 1 warning
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 0.14s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/release/build/gust-lang/6561f34517926c8a/out/gust_lang-6561f34517926c8a)
[INFO] [stdout] 
[INFO] [stdout] running 8 tests
[INFO] [stdout] test error::tests::error_render_after_line_not_in_source_ok ... ok
[INFO] [stdout] test error::tests::error_render_note_and_help_present ... ok
[INFO] [stdout] test error::tests::error_render_with_line_source_and_caret ... ok
[INFO] [stdout] test error::tests::render_with_color_enabled_contains_ansi_escape ... ok
[INFO] [stdout] test error::tests::error_render_line_zero_skips_source_block ... ok
[INFO] [stdout] test error::tests::warning_render_uses_warning_kind_and_no_help ... ok
[INFO] [stdout] test parser::tests::test_parse_simple_machine ... ok
[INFO] [stdout] test error::tests::warning_render_help_text_when_set ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/action_codegen_metadata.rs (/opt/rustwide/target/release/build/gust-lang/b5bb1fe30cd74acb/out/action_codegen_metadata-b5bb1fe30cd74acb)
[INFO] [stdout] 
[INFO] [stdout] running 8 tests
[INFO] [stdout] test rust_codegen_places_kind_annotations_above_every_trait_method ... ok
[INFO] [stdout] test go_codegen_does_not_mark_plain_effect_methods ... ok
[INFO] [stdout] test rust_codegen_marks_action_methods ... ok
[INFO] [stdout] test go_codegen_marks_action_methods ... ok
[INFO] [stdout] test codegen_marker_count_matches_action_count ... ok
[INFO] [stdout] test action_only_machine_still_generates_valid_trait ... ok
[INFO] [stdout] test go_codegen_places_kind_annotations_above_every_interface_method ... ok
[INFO] [stdout] test rust_codegen_does_not_mark_plain_effect_methods ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/action_handler_safety.rs (/opt/rustwide/target/release/build/gust-lang/00fddb3a934747ac/out/action_handler_safety-00fddb3a934747ac)
[INFO] [stdout] 
[INFO] [stdout] running 12 tests
[INFO] [stdout] test action_followed_by_send_warns ... ok
[INFO] [stdout] test effect_only_machine_never_warns_about_actions ... ok
[INFO] [stdout] test action_and_effect_together_is_ok ... ok
[INFO] [stdout] test nested_perform_in_binop_still_counts_as_action ... ok
[INFO] [stdout] test single_action_in_handler_is_ok ... ok
[INFO] [stdout] test two_actions_in_handler_warns ... ok
[INFO] [stdout] test two_actions_in_same_branch_warns ... ok
[INFO] [stdout] test action_as_last_side_effect_is_ok ... ok
[INFO] [stdout] test actions_in_different_branches_are_independent ... ok
[INFO] [stdout] test action_followed_by_effect_warns ... ok
[INFO] [stdout] test action_warning_points_at_perform_not_handler ... ok
[INFO] [stdout] test perform_in_let_value_counts_as_action ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/action_keyword.rs (/opt/rustwide/target/release/build/gust-lang/6d2225184228c64d/out/action_keyword-6d2225184228c64d)
[INFO] [stdout] 
[INFO] [stdout] running 10 tests
[INFO] [stdout] test existing_effect_programs_still_parse_and_default_to_effect_kind ... ok
[INFO] [stdout] test validation_accepts_action_same_as_effect ... ok
[INFO] [stdout] test async_effect_and_async_action_both_parse ... ok
[INFO] [stdout] test parses_async_action ... ok
[INFO] [stdout] test parses_effect_keyword_as_effect_kind ... ok
[INFO] [stdout] test formatter_emits_action_keyword ... ok
[INFO] [stdout] test parses_mixed_effect_and_action ... ok
[INFO] [stdout] test parses_action_keyword ... ok
[INFO] [stdout] test formatter_roundtrip_preserves_kind ... ok
[INFO] [stdout] test effect_kind_keyword_method ... ok
[INFO] [stderr]      Running tests/codegen_backends.rs (/opt/rustwide/target/release/build/gust-lang/fb227d66dea12fe5/out/codegen_backends-fb227d66dea12fe5)
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 1 test
[INFO] [stdout] test every_backend_produces_code_its_toolchain_accepts has been running for over 60 seconds
[INFO] [stdout] test every_backend_produces_code_its_toolchain_accepts ... FAILED
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout] 
[INFO] [stdout] ---- every_backend_produces_code_its_toolchain_accepts stdout ----
[INFO] [stdout] skipped: wasm/rich — rustup target 'wasm32-unknown-unknown' not installed
[INFO] [stdout] skipped: wasm/timeout — rustup target 'wasm32-unknown-unknown' not installed
[INFO] [stdout] skipped: wasm/channel — rustup target 'wasm32-unknown-unknown' not installed
[INFO] [stdout] skipped: wasm/channel-annotations — rustup target 'wasm32-unknown-unknown' not installed
[INFO] [stdout] skipped: wasm/fieldless — rustup target 'wasm32-unknown-unknown' not installed
[INFO] [stdout] skipped: wasm/unused-binding — rustup target 'wasm32-unknown-unknown' not installed
[INFO] [stdout] skipped: wasm/source-state-fields — rustup target 'wasm32-unknown-unknown' not installed
[INFO] [stdout] skipped: wasm/result-match — rustup target 'wasm32-unknown-unknown' not installed
[INFO] [stdout] skipped: wasm/generic-machine — unsupported, wasm_bindgen does not support generics
[INFO] [stdout] skipped: wasm/stdlib-retry — unsupported, wasm_bindgen does not support generics
[INFO] [stdout] skipped: wasm/stdlib-health-check — unsupported, wasm_bindgen does not support generics
[INFO] [stdout] skipped: wasm/supervision — rustup target 'wasm32-unknown-unknown' not installed
[INFO] [stdout] skipped: wasm/supervision-no-args — rustup target 'wasm32-unknown-unknown' not installed
[INFO] [stdout] skipped: wasm/early-goto — rustup target 'wasm32-unknown-unknown' not installed
[INFO] [stdout] 
[INFO] [stdout] thread 'every_backend_produces_code_its_toolchain_accepts' (1364) panicked at tests/codegen_backends.rs:756:5:
[INFO] [stdout] 28 of 56 backend/fixture combinations produced code their toolchain rejected:
[INFO] [stdout] === rust/rich ===
[INFO] [stdout] --- generated ---
[INFO] [stdout] // Generated by Gust compiler — do not edit manually
[INFO] [stdout] use serde::{Serialize, Deserialize};
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, Copy, Serialize, Deserialize)]
[INFO] [stdout] pub enum Tier {
[INFO] [stdout]     Fast,
[INFO] [stdout]     Slow,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] pub struct Config {
[INFO] [stdout]     pub service_name: String,
[INFO] [stdout]     pub retries: i64,
[INFO] [stdout]     pub tier: Tier,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] pub enum DeployPipelineState {
[INFO] [stdout]     Idle {
[INFO] [stdout]         config: Config,
[INFO] [stdout]     },
[INFO] [stdout]     Running {
[INFO] [stdout]         config: Config,
[INFO] [stdout]         attempt: i64,
[INFO] [stdout]     },
[INFO] [stdout]     Done {
[INFO] [stdout]         message: String,
[INFO] [stdout]     },
[INFO] [stdout]     Failed {
[INFO] [stdout]         reason: String,
[INFO] [stdout]     },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] pub trait DeployPipelineEffects {
[INFO] [stdout]     /// gust:effect -- replay-safe / idempotent
[INFO] [stdout]     fn deploy(&self, name: &str) -> impl ::core::future::Future<Output = String> + Send;
[INFO] [stdout]     /// gust:effect -- replay-safe / idempotent
[INFO] [stdout]     fn log(&self, msg: &str) -> bool;
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] pub struct DeployPipeline {
[INFO] [stdout]     pub state: DeployPipelineState,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, thiserror::Error)]
[INFO] [stdout] pub enum DeployPipelineError {
[INFO] [stdout]     #[error("invalid transition '{transition}' from state '{from}'")]
[INFO] [stdout]     InvalidTransition { transition: String, from: String },
[INFO] [stdout]     #[error("transition failed: {reason}")]
[INFO] [stdout]     Failed { reason: String },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl DeployPipeline {
[INFO] [stdout]     pub fn new(config: Config) -> Self {
[INFO] [stdout]         Self { state: DeployPipelineState::Idle { config } }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn state(&self) -> &DeployPipelineState {
[INFO] [stdout]         &self.state
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub async fn start(&mut self, effects: &impl DeployPipelineEffects) -> Result<(), DeployPipelineError> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             DeployPipelineState::Idle { config } => {
[INFO] [stdout]                 let config = config.clone();
[INFO] [stdout]                 let result = effects.deploy(&config.service_name).await;
[INFO] [stdout]                 effects.log(&result);
[INFO] [stdout]                 let __goto_running_attempt = 1;
[INFO] [stdout]                 self.state = DeployPipelineState::Running { config, attempt: __goto_running_attempt };
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err(DeployPipelineError::InvalidTransition {
[INFO] [stdout]                 transition: "start".to_string(),
[INFO] [stdout]                 from: format!("{:?}", self.state),
[INFO] [stdout]             }),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub async fn finish(&mut self, effects: &impl DeployPipelineEffects) -> Result<(), DeployPipelineError> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             DeployPipelineState::Running { config, attempt } => {
[INFO] [stdout]                 let config = config.clone();
[INFO] [stdout]                 let attempt = *attempt;
[INFO] [stdout]                 if attempt > config.retries {
[INFO] [stdout]                     let __goto_failed_reason = "max retries exceeded".to_string();
[INFO] [stdout]                     self.state = DeployPipelineState::Failed { reason: __goto_failed_reason };
[INFO] [stdout]                     Ok(())
[INFO] [stdout]                 } else {
[INFO] [stdout]                     let msg = effects.deploy(&config.service_name).await;
[INFO] [stdout]                     self.state = DeployPipelineState::Done { message: msg };
[INFO] [stdout]                     Ok(())
[INFO] [stdout]                 }
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err(DeployPipelineError::InvalidTransition {
[INFO] [stdout]                 transition: "finish".to_string(),
[INFO] [stdout]                 from: format!("{:?}", self.state),
[INFO] [stdout]             }),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] --- diagnostics ---
[INFO] [stdout] error: 'cargo-clippy' is not installed for the toolchain '1.100.0-beta.1-x86_64-unknown-linux-gnu'.
[INFO] [stdout] help: run `rustup component add --toolchain 1.100.0-beta.1-x86_64-unknown-linux-gnu clippy` to install it
[INFO] [stdout] 
[INFO] [stdout] === nostd/rich ===
[INFO] [stdout] --- generated ---
[INFO] [stdout] #![no_std]
[INFO] [stdout] extern crate alloc;
[INFO] [stdout] use heapless::String as HString;
[INFO] [stdout] 
[INFO] [stdout] pub enum Tier {
[INFO] [stdout]     Fast,
[INFO] [stdout]     Slow,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] pub struct Config {
[INFO] [stdout]     pub service_name: HString<64>,
[INFO] [stdout]     pub retries: i64,
[INFO] [stdout]     pub tier: Tier,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] pub enum DeployPipelineState {
[INFO] [stdout]     Idle {
[INFO] [stdout]         config: Config,
[INFO] [stdout]     },
[INFO] [stdout]     Running {
[INFO] [stdout]         config: Config,
[INFO] [stdout]         attempt: i64,
[INFO] [stdout]     },
[INFO] [stdout]     Done {
[INFO] [stdout]         message: HString<64>,
[INFO] [stdout]     },
[INFO] [stdout]     Failed {
[INFO] [stdout]         reason: HString<64>,
[INFO] [stdout]     },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] pub struct DeployPipeline {
[INFO] [stdout]     pub state: DeployPipelineState,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl DeployPipeline {
[INFO] [stdout]     pub fn new(config: Config) -> Self {
[INFO] [stdout]         Self { state: DeployPipelineState::Idle { config } }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn start(&mut self, config: Config, attempt: i64) -> Result<(), &'static str> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             DeployPipelineState::Idle { .. } => {
[INFO] [stdout]                 self.state = DeployPipelineState::Running { config, attempt };
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err("invalid transition"),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn finish(&mut self, message: HString<64>) -> Result<(), &'static str> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             DeployPipelineState::Running { .. } => {
[INFO] [stdout]                 self.state = DeployPipelineState::Done { message };
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err("invalid transition"),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] --- diagnostics ---
[INFO] [stdout] error: failed to get `heapless` as a dependency of package `gust-backend-nostd-rich v0.0.0 (/tmp/.tmp6kNVjb)`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   failed to load source for dependency `heapless`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   unable to update registry `crates-io`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   download of config.json failed
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   [6] Could not resolve hostname (Could not resolve host: index.crates.io)
[INFO] [stdout] 
[INFO] [stdout] === rust/timeout ===
[INFO] [stdout] --- generated ---
[INFO] [stdout] // Generated by Gust compiler — do not edit manually
[INFO] [stdout] use serde::{Serialize, Deserialize};
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] pub enum DispatcherState {
[INFO] [stdout]     Idle,
[INFO] [stdout]     Done {
[INFO] [stdout]         note: String,
[INFO] [stdout]     },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] pub struct Dispatcher {
[INFO] [stdout]     pub state: DispatcherState,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, thiserror::Error)]
[INFO] [stdout] pub enum DispatcherError {
[INFO] [stdout]     #[error("invalid transition '{transition}' from state '{from}'")]
[INFO] [stdout]     InvalidTransition { transition: String, from: String },
[INFO] [stdout]     #[error("transition failed: {reason}")]
[INFO] [stdout]     Failed { reason: String },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl Dispatcher {
[INFO] [stdout]     pub fn new() -> Self {
[INFO] [stdout]         Self { state: DispatcherState::Idle }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn state(&self) -> &DispatcherState {
[INFO] [stdout]         &self.state
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub async fn run(&mut self) -> Result<(), DispatcherError> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             DispatcherState::Idle => {
[INFO] [stdout]                 let __transition_result = tokio::time::timeout(
[INFO] [stdout]                     tokio::time::Duration::from_secs(5),
[INFO] [stdout]                     async {
[INFO] [stdout]                         let __goto_done_note = "dispatched".to_string();
[INFO] [stdout]                         self.state = DispatcherState::Done { note: __goto_done_note };
[INFO] [stdout]                         Ok(())
[INFO] [stdout]                     },
[INFO] [stdout]                 ).await;
[INFO] [stdout]                 match __transition_result {
[INFO] [stdout]                     Ok(Ok(())) => {},
[INFO] [stdout]                     Ok(Err(err)) => return Err(err),
[INFO] [stdout]                     Err(_) => {
[INFO] [stdout]                         return Err(DispatcherError::Failed {
[INFO] [stdout]                             reason: format!("transition 'run' timed out after {:?}", tokio::time::Duration::from_secs(5)),
[INFO] [stdout]                         });
[INFO] [stdout]                     },
[INFO] [stdout]                 }
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err(DispatcherError::InvalidTransition {
[INFO] [stdout]                 transition: "run".to_string(),
[INFO] [stdout]                 from: format!("{:?}", self.state),
[INFO] [stdout]             }),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl Default for Dispatcher {
[INFO] [stdout]     fn default() -> Self {
[INFO] [stdout]         Self::new()
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] --- diagnostics ---
[INFO] [stdout] error: 'cargo-clippy' is not installed for the toolchain '1.100.0-beta.1-x86_64-unknown-linux-gnu'.
[INFO] [stdout] help: run `rustup component add --toolchain 1.100.0-beta.1-x86_64-unknown-linux-gnu clippy` to install it
[INFO] [stdout] 
[INFO] [stdout] === nostd/timeout ===
[INFO] [stdout] --- generated ---
[INFO] [stdout] #![no_std]
[INFO] [stdout] extern crate alloc;
[INFO] [stdout] use heapless::String as HString;
[INFO] [stdout] 
[INFO] [stdout] pub enum DispatcherState {
[INFO] [stdout]     Idle,
[INFO] [stdout]     Done {
[INFO] [stdout]         note: HString<64>,
[INFO] [stdout]     },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] pub struct Dispatcher {
[INFO] [stdout]     pub state: DispatcherState,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl Dispatcher {
[INFO] [stdout]     pub fn new() -> Self {
[INFO] [stdout]         Self { state: DispatcherState::Idle }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn run(&mut self, note: HString<64>) -> Result<(), &'static str> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             DispatcherState::Idle => {
[INFO] [stdout]                 self.state = DispatcherState::Done { note };
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err("invalid transition"),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] --- diagnostics ---
[INFO] [stdout] error: failed to get `heapless` as a dependency of package `gust-backend-nostd-timeout v0.0.0 (/tmp/.tmph4D7Pm)`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   failed to load source for dependency `heapless`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   unable to update registry `crates-io`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   download of config.json failed
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   [6] Could not resolve hostname (Could not resolve host: index.crates.io)
[INFO] [stdout] 
[INFO] [stdout] === rust/channel ===
[INFO] [stdout] --- generated ---
[INFO] [stdout] // Generated by Gust compiler — do not edit manually
[INFO] [stdout] use serde::{Serialize, Deserialize};
[INFO] [stdout] 
[INFO] [stdout] #[derive(Clone)]
[INFO] [stdout] pub struct OrderEventsChannel {
[INFO] [stdout]     sender: tokio::sync::broadcast::Sender<String>,
[INFO] [stdout] }
[INFO] [stdout] impl OrderEventsChannel {
[INFO] [stdout]     pub fn new() -> Self {
[INFO] [stdout]         let (sender, _) = tokio::sync::broadcast::channel(32usize);
[INFO] [stdout]         Self { sender }
[INFO] [stdout]     }
[INFO] [stdout]     pub fn sender(&self) -> tokio::sync::broadcast::Sender<String> {
[INFO] [stdout]         self.sender.clone()
[INFO] [stdout]     }
[INFO] [stdout]     pub fn send(&self, msg: String) {
[INFO] [stdout]         let _ = self.sender.send(msg);
[INFO] [stdout]     }
[INFO] [stdout]     pub fn subscribe(&self) -> tokio::sync::broadcast::Receiver<String> {
[INFO] [stdout]         self.sender.subscribe()
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] impl Default for OrderEventsChannel {
[INFO] [stdout]     fn default() -> Self {
[INFO] [stdout]         Self::new()
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] pub enum NotifierState {
[INFO] [stdout]     Idle,
[INFO] [stdout]     Sent,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] pub struct Notifier {
[INFO] [stdout]     pub state: NotifierState,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, thiserror::Error)]
[INFO] [stdout] pub enum NotifierError {
[INFO] [stdout]     #[error("invalid transition '{transition}' from state '{from}'")]
[INFO] [stdout]     InvalidTransition { transition: String, from: String },
[INFO] [stdout]     #[error("transition failed: {reason}")]
[INFO] [stdout]     Failed { reason: String },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl Notifier {
[INFO] [stdout]     pub fn new() -> Self {
[INFO] [stdout]         Self { state: NotifierState::Idle }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn state(&self) -> &NotifierState {
[INFO] [stdout]         &self.state
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub async fn notify(&mut self, order_events_tx: &tokio::sync::broadcast::Sender<String>) -> Result<(), NotifierError> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             NotifierState::Idle => {
[INFO] [stdout]                 let _ = order_events_tx.send("started".to_string());
[INFO] [stdout]                 self.state = NotifierState::Sent;
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err(NotifierError::InvalidTransition {
[INFO] [stdout]                 transition: "notify".to_string(),
[INFO] [stdout]                 from: format!("{:?}", self.state),
[INFO] [stdout]             }),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl Default for Notifier {
[INFO] [stdout]     fn default() -> Self {
[INFO] [stdout]         Self::new()
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] --- diagnostics ---
[INFO] [stdout] error: 'cargo-clippy' is not installed for the toolchain '1.100.0-beta.1-x86_64-unknown-linux-gnu'.
[INFO] [stdout] help: run `rustup component add --toolchain 1.100.0-beta.1-x86_64-unknown-linux-gnu clippy` to install it
[INFO] [stdout] 
[INFO] [stdout] === nostd/channel ===
[INFO] [stdout] --- generated ---
[INFO] [stdout] #![no_std]
[INFO] [stdout] extern crate alloc;
[INFO] [stdout] 
[INFO] [stdout] pub enum NotifierState {
[INFO] [stdout]     Idle,
[INFO] [stdout]     Sent,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] pub struct Notifier {
[INFO] [stdout]     pub state: NotifierState,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl Notifier {
[INFO] [stdout]     pub fn new() -> Self {
[INFO] [stdout]         Self { state: NotifierState::Idle }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn notify(&mut self) -> Result<(), &'static str> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             NotifierState::Idle => {
[INFO] [stdout]                 self.state = NotifierState::Sent;
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err("invalid transition"),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] --- diagnostics ---
[INFO] [stdout] error: failed to get `heapless` as a dependency of package `gust-backend-nostd-channel v0.0.0 (/tmp/.tmpkVZT6q)`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   failed to load source for dependency `heapless`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   unable to update registry `crates-io`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   download of config.json failed
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   [6] Could not resolve hostname (Could not resolve host: index.crates.io)
[INFO] [stdout] 
[INFO] [stdout] === rust/channel-annotations ===
[INFO] [stdout] --- generated ---
[INFO] [stdout] // Generated by Gust compiler — do not edit manually
[INFO] [stdout] use serde::{Serialize, Deserialize};
[INFO] [stdout] 
[INFO] [stdout] pub struct JobsChannel {
[INFO] [stdout]     sender: tokio::sync::mpsc::Sender<Job>,
[INFO] [stdout]     receiver: tokio::sync::Mutex<tokio::sync::mpsc::Receiver<Job>>,
[INFO] [stdout] }
[INFO] [stdout] impl JobsChannel {
[INFO] [stdout]     pub fn new() -> Self {
[INFO] [stdout]         let (sender, receiver) = tokio::sync::mpsc::channel(8usize);
[INFO] [stdout]         Self { sender, receiver: tokio::sync::Mutex::new(receiver) }
[INFO] [stdout]     }
[INFO] [stdout]     pub fn sender(&self) -> tokio::sync::mpsc::Sender<Job> {
[INFO] [stdout]         self.sender.clone()
[INFO] [stdout]     }
[INFO] [stdout]     pub fn try_send(&self, msg: Job) {
[INFO] [stdout]         let _ = self.sender.try_send(msg);
[INFO] [stdout]     }
[INFO] [stdout]     pub async fn receive(&self) -> Option<Job> {
[INFO] [stdout]         self.receiver.lock().await.recv().await
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] impl Default for JobsChannel {
[INFO] [stdout]     fn default() -> Self {
[INFO] [stdout]         Self::new()
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Clone)]
[INFO] [stdout] pub struct AuditChannel {
[INFO] [stdout]     sender: tokio::sync::broadcast::Sender<String>,
[INFO] [stdout] }
[INFO] [stdout] impl AuditChannel {
[INFO] [stdout]     pub fn new() -> Self {
[INFO] [stdout]         let (sender, _) = tokio::sync::broadcast::channel(4usize);
[INFO] [stdout]         Self { sender }
[INFO] [stdout]     }
[INFO] [stdout]     pub fn sender(&self) -> tokio::sync::broadcast::Sender<String> {
[INFO] [stdout]         self.sender.clone()
[INFO] [stdout]     }
[INFO] [stdout]     pub fn send(&self, msg: String) {
[INFO] [stdout]         let _ = self.sender.send(msg);
[INFO] [stdout]     }
[INFO] [stdout]     pub fn subscribe(&self) -> tokio::sync::broadcast::Receiver<String> {
[INFO] [stdout]         self.sender.subscribe()
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] impl Default for AuditChannel {
[INFO] [stdout]     fn default() -> Self {
[INFO] [stdout]         Self::new()
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] pub struct Job {
[INFO] [stdout]     pub id: String,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] pub enum WorkerState {
[INFO] [stdout]     Waiting,
[INFO] [stdout]     Busy,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] pub struct Worker {
[INFO] [stdout]     pub state: WorkerState,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, thiserror::Error)]
[INFO] [stdout] pub enum WorkerError {
[INFO] [stdout]     #[error("invalid transition '{transition}' from state '{from}'")]
[INFO] [stdout]     InvalidTransition { transition: String, from: String },
[INFO] [stdout]     #[error("transition failed: {reason}")]
[INFO] [stdout]     Failed { reason: String },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl Worker {
[INFO] [stdout]     pub fn new() -> Self {
[INFO] [stdout]         Self { state: WorkerState::Waiting }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn state(&self) -> &WorkerState {
[INFO] [stdout]         &self.state
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn accept(&mut self) -> Result<(), WorkerError> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             WorkerState::Waiting => {
[INFO] [stdout]                 self.state = WorkerState::Busy;
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err(WorkerError::InvalidTransition {
[INFO] [stdout]                 transition: "accept".to_string(),
[INFO] [stdout]                 from: format!("{:?}", self.state),
[INFO] [stdout]             }),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl Default for Worker {
[INFO] [stdout]     fn default() -> Self {
[INFO] [stdout]         Self::new()
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] pub enum ProducerState {
[INFO] [stdout]     Idle,
[INFO] [stdout]     Sent,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] /// Host-supplied runners for the children `Producer` supervises.
[INFO] [stdout] pub trait ProducerSupervision {
[INFO] [stdout]     /// Drives a supervised `Worker` to completion. Returning `Err`
[INFO] [stdout]     /// marks the child failed, which is what the runtime's
[INFO] [stdout]     /// restart strategy acts on.
[INFO] [stdout]     fn run_worker(&self, child: Worker) -> ::core::pin::Pin<::std::boxed::Box<dyn ::core::future::Future<Output = Result<(), String>> + Send>>;
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] /// Restart policy per supervised child of `Producer`.
[INFO] [stdout] pub const PRODUCER_SUPERVISION: &[(&str, gust_runtime::prelude::RestartStrategy)] = &[
[INFO] [stdout]     ("Worker", gust_runtime::prelude::RestartStrategy::OneForOne),
[INFO] [stdout] ];
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] pub struct Producer {
[INFO] [stdout]     pub state: ProducerState,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, thiserror::Error)]
[INFO] [stdout] pub enum ProducerError {
[INFO] [stdout]     #[error("invalid transition '{transition}' from state '{from}'")]
[INFO] [stdout]     InvalidTransition { transition: String, from: String },
[INFO] [stdout]     #[error("transition failed: {reason}")]
[INFO] [stdout]     Failed { reason: String },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl Producer {
[INFO] [stdout]     pub fn new() -> Self {
[INFO] [stdout]         Self { state: ProducerState::Idle }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn state(&self) -> &ProducerState {
[INFO] [stdout]         &self.state
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn send_jobs(&self, msg: Job, jobs_tx: &tokio::sync::mpsc::Sender<Job>) {
[INFO] [stdout]         let _ = jobs_tx.try_send(msg);
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn send_audit(&self, msg: String, audit_tx: &tokio::sync::broadcast::Sender<String>) {
[INFO] [stdout]         let _ = audit_tx.send(msg);
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn emit(&mut self, job: Job, audit_tx: &tokio::sync::broadcast::Sender<String>, jobs_tx: &tokio::sync::mpsc::Sender<Job>) -> Result<(), ProducerError> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             ProducerState::Idle => {
[INFO] [stdout]                 let _ = jobs_tx.try_send(job);
[INFO] [stdout]                 let _ = audit_tx.send("queued".to_string());
[INFO] [stdout]                 self.state = ProducerState::Sent;
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err(ProducerError::InvalidTransition {
[INFO] [stdout]                 transition: "emit".to_string(),
[INFO] [stdout]                 from: format!("{:?}", self.state),
[INFO] [stdout]             }),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl Default for Producer {
[INFO] [stdout]     fn default() -> Self {
[INFO] [stdout]         Self::new()
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] --- diagnostics ---
[INFO] [stdout] error: 'cargo-clippy' is not installed for the toolchain '1.100.0-beta.1-x86_64-unknown-linux-gnu'.
[INFO] [stdout] help: run `rustup component add --toolchain 1.100.0-beta.1-x86_64-unknown-linux-gnu clippy` to install it
[INFO] [stdout] 
[INFO] [stdout] === nostd/channel-annotations ===
[INFO] [stdout] --- generated ---
[INFO] [stdout] #![no_std]
[INFO] [stdout] extern crate alloc;
[INFO] [stdout] use heapless::String as HString;
[INFO] [stdout] 
[INFO] [stdout] pub struct Job {
[INFO] [stdout]     pub id: HString<64>,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] pub enum WorkerState {
[INFO] [stdout]     Waiting,
[INFO] [stdout]     Busy,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] pub struct Worker {
[INFO] [stdout]     pub state: WorkerState,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl Worker {
[INFO] [stdout]     pub fn new() -> Self {
[INFO] [stdout]         Self { state: WorkerState::Waiting }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn accept(&mut self) -> Result<(), &'static str> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             WorkerState::Waiting => {
[INFO] [stdout]                 self.state = WorkerState::Busy;
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err("invalid transition"),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] pub enum ProducerState {
[INFO] [stdout]     Idle,
[INFO] [stdout]     Sent,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] pub struct Producer {
[INFO] [stdout]     pub state: ProducerState,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl Producer {
[INFO] [stdout]     pub fn new() -> Self {
[INFO] [stdout]         Self { state: ProducerState::Idle }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn emit(&mut self) -> Result<(), &'static str> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             ProducerState::Idle => {
[INFO] [stdout]                 self.state = ProducerState::Sent;
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err("invalid transition"),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] --- diagnostics ---
[INFO] [stdout] error: failed to get `heapless` as a dependency of package `gust-backend-nostd-channel-annotations v0.0.0 (/tmp/.tmp5u3st4)`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   failed to load source for dependency `heapless`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   unable to update registry `crates-io`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   download of config.json failed
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   [6] Could not resolve hostname (Could not resolve host: index.crates.io)
[INFO] [stdout] 
[INFO] [stdout] === rust/fieldless ===
[INFO] [stdout] --- generated ---
[INFO] [stdout] // Generated by Gust compiler — do not edit manually
[INFO] [stdout] use serde::{Serialize, Deserialize};
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] pub enum ToggleState {
[INFO] [stdout]     Off,
[INFO] [stdout]     On,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] pub struct Toggle {
[INFO] [stdout]     pub state: ToggleState,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, thiserror::Error)]
[INFO] [stdout] pub enum ToggleError {
[INFO] [stdout]     #[error("invalid transition '{transition}' from state '{from}'")]
[INFO] [stdout]     InvalidTransition { transition: String, from: String },
[INFO] [stdout]     #[error("transition failed: {reason}")]
[INFO] [stdout]     Failed { reason: String },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl Toggle {
[INFO] [stdout]     pub fn new() -> Self {
[INFO] [stdout]         Self { state: ToggleState::Off }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn state(&self) -> &ToggleState {
[INFO] [stdout]         &self.state
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn flip(&mut self) -> Result<(), ToggleError> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             ToggleState::Off => {
[INFO] [stdout]                 self.state = ToggleState::On;
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err(ToggleError::InvalidTransition {
[INFO] [stdout]                 transition: "flip".to_string(),
[INFO] [stdout]                 from: format!("{:?}", self.state),
[INFO] [stdout]             }),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn reset(&mut self) -> Result<(), ToggleError> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             ToggleState::On => {
[INFO] [stdout]                 self.state = ToggleState::Off;
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err(ToggleError::InvalidTransition {
[INFO] [stdout]                 transition: "reset".to_string(),
[INFO] [stdout]                 from: format!("{:?}", self.state),
[INFO] [stdout]             }),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl Default for Toggle {
[INFO] [stdout]     fn default() -> Self {
[INFO] [stdout]         Self::new()
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] --- diagnostics ---
[INFO] [stdout] error: 'cargo-clippy' is not installed for the toolchain '1.100.0-beta.1-x86_64-unknown-linux-gnu'.
[INFO] [stdout] help: run `rustup component add --toolchain 1.100.0-beta.1-x86_64-unknown-linux-gnu clippy` to install it
[INFO] [stdout] 
[INFO] [stdout] === nostd/fieldless ===
[INFO] [stdout] --- generated ---
[INFO] [stdout] #![no_std]
[INFO] [stdout] extern crate alloc;
[INFO] [stdout] 
[INFO] [stdout] pub enum ToggleState {
[INFO] [stdout]     Off,
[INFO] [stdout]     On,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] pub struct Toggle {
[INFO] [stdout]     pub state: ToggleState,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl Toggle {
[INFO] [stdout]     pub fn new() -> Self {
[INFO] [stdout]         Self { state: ToggleState::Off }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn flip(&mut self) -> Result<(), &'static str> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             ToggleState::Off => {
[INFO] [stdout]                 self.state = ToggleState::On;
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err("invalid transition"),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn reset(&mut self) -> Result<(), &'static str> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             ToggleState::On => {
[INFO] [stdout]                 self.state = ToggleState::Off;
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err("invalid transition"),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] --- diagnostics ---
[INFO] [stdout] error: failed to get `heapless` as a dependency of package `gust-backend-nostd-fieldless v0.0.0 (/tmp/.tmpx93CAR)`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   failed to load source for dependency `heapless`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   unable to update registry `crates-io`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   download of config.json failed
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   [6] Could not resolve hostname (Could not resolve host: index.crates.io)
[INFO] [stdout] 
[INFO] [stdout] === rust/unused-binding ===
[INFO] [stdout] --- generated ---
[INFO] [stdout] // Generated by Gust compiler — do not edit manually
[INFO] [stdout] use serde::{Serialize, Deserialize};
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] pub enum ProbeState {
[INFO] [stdout]     Idle {
[INFO] [stdout]         id: String,
[INFO] [stdout]     },
[INFO] [stdout]     Done {
[INFO] [stdout]         id: String,
[INFO] [stdout]     },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] pub trait ProbeEffects {
[INFO] [stdout]     /// gust:effect -- replay-safe / idempotent
[INFO] [stdout]     fn check(&self, a: &str) -> bool;
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] pub struct Probe {
[INFO] [stdout]     pub state: ProbeState,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, thiserror::Error)]
[INFO] [stdout] pub enum ProbeError {
[INFO] [stdout]     #[error("invalid transition '{transition}' from state '{from}'")]
[INFO] [stdout]     InvalidTransition { transition: String, from: String },
[INFO] [stdout]     #[error("transition failed: {reason}")]
[INFO] [stdout]     Failed { reason: String },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl Probe {
[INFO] [stdout]     pub fn new(id: String) -> Self {
[INFO] [stdout]         Self { state: ProbeState::Idle { id } }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn state(&self) -> &ProbeState {
[INFO] [stdout]         &self.state
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn go(&mut self, effects: &impl ProbeEffects) -> Result<(), ProbeError> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             ProbeState::Idle { id } => {
[INFO] [stdout]                 let id = id.clone();
[INFO] [stdout]                 let _ = effects.check(&id);
[INFO] [stdout]                 self.state = ProbeState::Done { id };
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err(ProbeError::InvalidTransition {
[INFO] [stdout]                 transition: "go".to_string(),
[INFO] [stdout]                 from: format!("{:?}", self.state),
[INFO] [stdout]             }),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] --- diagnostics ---
[INFO] [stdout] error: 'cargo-clippy' is not installed for the toolchain '1.100.0-beta.1-x86_64-unknown-linux-gnu'.
[INFO] [stdout] help: run `rustup component add --toolchain 1.100.0-beta.1-x86_64-unknown-linux-gnu clippy` to install it
[INFO] [stdout] 
[INFO] [stdout] === nostd/unused-binding ===
[INFO] [stdout] --- generated ---
[INFO] [stdout] #![no_std]
[INFO] [stdout] extern crate alloc;
[INFO] [stdout] use heapless::String as HString;
[INFO] [stdout] 
[INFO] [stdout] pub enum ProbeState {
[INFO] [stdout]     Idle {
[INFO] [stdout]         id: HString<64>,
[INFO] [stdout]     },
[INFO] [stdout]     Done {
[INFO] [stdout]         id: HString<64>,
[INFO] [stdout]     },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] pub struct Probe {
[INFO] [stdout]     pub state: ProbeState,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl Probe {
[INFO] [stdout]     pub fn new(id: HString<64>) -> Self {
[INFO] [stdout]         Self { state: ProbeState::Idle { id } }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn go(&mut self, id: HString<64>) -> Result<(), &'static str> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             ProbeState::Idle { .. } => {
[INFO] [stdout]                 self.state = ProbeState::Done { id };
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err("invalid transition"),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] --- diagnostics ---
[INFO] [stdout] error: failed to get `heapless` as a dependency of package `gust-backend-nostd-unused-binding v0.0.0 (/tmp/.tmpGgb79E)`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   failed to load source for dependency `heapless`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   unable to update registry `crates-io`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   download of config.json failed
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   [6] Could not resolve hostname (Could not resolve host: index.crates.io)
[INFO] [stdout] 
[INFO] [stdout] === rust/source-state-fields ===
[INFO] [stdout] --- generated ---
[INFO] [stdout] // Generated by Gust compiler — do not edit manually
[INFO] [stdout] use serde::{Serialize, Deserialize};
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] pub enum BucketState {
[INFO] [stdout]     Available {
[INFO] [stdout]         tokens: i64,
[INFO] [stdout]         max_tokens: i64,
[INFO] [stdout]     },
[INFO] [stdout]     Exhausted {
[INFO] [stdout]         max_tokens: i64,
[INFO] [stdout]     },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] pub struct Bucket {
[INFO] [stdout]     pub state: BucketState,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, thiserror::Error)]
[INFO] [stdout] pub enum BucketError {
[INFO] [stdout]     #[error("invalid transition '{transition}' from state '{from}'")]
[INFO] [stdout]     InvalidTransition { transition: String, from: String },
[INFO] [stdout]     #[error("transition failed: {reason}")]
[INFO] [stdout]     Failed { reason: String },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl Bucket {
[INFO] [stdout]     pub fn new(tokens: i64, max_tokens: i64) -> Self {
[INFO] [stdout]         Self { state: BucketState::Available { tokens, max_tokens } }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn state(&self) -> &BucketState {
[INFO] [stdout]         &self.state
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn acquire(&mut self) -> Result<(), BucketError> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             BucketState::Available { tokens, max_tokens } => {
[INFO] [stdout]                 let tokens = *tokens;
[INFO] [stdout]                 let max_tokens = *max_tokens;
[INFO] [stdout]                 if tokens > 0 {
[INFO] [stdout]                     let __goto_available_tokens = tokens - 1;
[INFO] [stdout]                     self.state = BucketState::Available { tokens: __goto_available_tokens, max_tokens };
[INFO] [stdout]                     Ok(())
[INFO] [stdout]                 } else {
[INFO] [stdout]                     self.state = BucketState::Exhausted { max_tokens };
[INFO] [stdout]                     Ok(())
[INFO] [stdout]                 }
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err(BucketError::InvalidTransition {
[INFO] [stdout]                 transition: "acquire".to_string(),
[INFO] [stdout]                 from: format!("{:?}", self.state),
[INFO] [stdout]             }),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn refill(&mut self) -> Result<(), BucketError> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             BucketState::Exhausted { max_tokens } => {
[INFO] [stdout]                 let max_tokens = *max_tokens;
[INFO] [stdout]                 self.state = BucketState::Available { tokens: max_tokens, max_tokens };
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err(BucketError::InvalidTransition {
[INFO] [stdout]                 transition: "refill".to_string(),
[INFO] [stdout]                 from: format!("{:?}", self.state),
[INFO] [stdout]             }),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] --- diagnostics ---
[INFO] [stdout] error: 'cargo-clippy' is not installed for the toolchain '1.100.0-beta.1-x86_64-unknown-linux-gnu'.
[INFO] [stdout] help: run `rustup component add --toolchain 1.100.0-beta.1-x86_64-unknown-linux-gnu clippy` to install it
[INFO] [stdout] 
[INFO] [stdout] === nostd/source-state-fields ===
[INFO] [stdout] --- generated ---
[INFO] [stdout] #![no_std]
[INFO] [stdout] extern crate alloc;
[INFO] [stdout] 
[INFO] [stdout] pub enum BucketState {
[INFO] [stdout]     Available {
[INFO] [stdout]         tokens: i64,
[INFO] [stdout]         max_tokens: i64,
[INFO] [stdout]     },
[INFO] [stdout]     Exhausted {
[INFO] [stdout]         max_tokens: i64,
[INFO] [stdout]     },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] pub struct Bucket {
[INFO] [stdout]     pub state: BucketState,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl Bucket {
[INFO] [stdout]     pub fn new(tokens: i64, max_tokens: i64) -> Self {
[INFO] [stdout]         Self { state: BucketState::Available { tokens, max_tokens } }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn acquire(&mut self, tokens: i64, max_tokens: i64) -> Result<(), &'static str> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             BucketState::Available { .. } => {
[INFO] [stdout]                 self.state = BucketState::Available { tokens, max_tokens };
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err("invalid transition"),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn refill(&mut self, tokens: i64, max_tokens: i64) -> Result<(), &'static str> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             BucketState::Exhausted { .. } => {
[INFO] [stdout]                 self.state = BucketState::Available { tokens, max_tokens };
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err("invalid transition"),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] --- diagnostics ---
[INFO] [stdout] error: failed to get `heapless` as a dependency of package `gust-backend-nostd-source-state-fields v0.0.0 (/tmp/.tmpoD29wu)`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   failed to load source for dependency `heapless`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   unable to update registry `crates-io`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   download of config.json failed
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   [6] Could not resolve hostname (Could not resolve host: index.crates.io)
[INFO] [stdout] 
[INFO] [stdout] === rust/result-match ===
[INFO] [stdout] --- generated ---
[INFO] [stdout] // Generated by Gust compiler — do not edit manually
[INFO] [stdout] use serde::{Serialize, Deserialize};
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] pub enum FetcherState {
[INFO] [stdout]     Start,
[INFO] [stdout]     Done {
[INFO] [stdout]         body: String,
[INFO] [stdout]     },
[INFO] [stdout]     Failed {
[INFO] [stdout]         reason: String,
[INFO] [stdout]     },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] pub trait FetcherEffects {
[INFO] [stdout]     /// gust:effect -- replay-safe / idempotent
[INFO] [stdout]     fn fetch(&self) -> impl ::core::future::Future<Output = Result<String, String>> + Send;
[INFO] [stdout]     /// gust:effect -- replay-safe / idempotent
[INFO] [stdout]     fn audit(&self) -> impl ::core::future::Future<Output = ()> + Send;
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] pub struct Fetcher {
[INFO] [stdout]     pub state: FetcherState,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, thiserror::Error)]
[INFO] [stdout] pub enum FetcherError {
[INFO] [stdout]     #[error("invalid transition '{transition}' from state '{from}'")]
[INFO] [stdout]     InvalidTransition { transition: String, from: String },
[INFO] [stdout]     #[error("transition failed: {reason}")]
[INFO] [stdout]     Failed { reason: String },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl Fetcher {
[INFO] [stdout]     pub fn new() -> Self {
[INFO] [stdout]         Self { state: FetcherState::Start }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn state(&self) -> &FetcherState {
[INFO] [stdout]         &self.state
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub async fn run(&mut self, effects: &impl FetcherEffects) -> Result<(), FetcherError> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             FetcherState::Start => {
[INFO] [stdout]                 effects.audit().await;
[INFO] [stdout]                 let outcome = effects.fetch().await;
[INFO] [stdout]                 match outcome {
[INFO] [stdout]                     Ok(body) => {
[INFO] [stdout]                         self.state = FetcherState::Done { body };
[INFO] [stdout]                         Ok(())
[INFO] [stdout]                     }
[INFO] [stdout]                     Err(reason) => {
[INFO] [stdout]                         self.state = FetcherState::Failed { reason };
[INFO] [stdout]                         Ok(())
[INFO] [stdout]                     }
[INFO] [stdout]                 }
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err(FetcherError::InvalidTransition {
[INFO] [stdout]                 transition: "run".to_string(),
[INFO] [stdout]                 from: format!("{:?}", self.state),
[INFO] [stdout]             }),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl Default for Fetcher {
[INFO] [stdout]     fn default() -> Self {
[INFO] [stdout]         Self::new()
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] --- diagnostics ---
[INFO] [stdout] error: 'cargo-clippy' is not installed for the toolchain '1.100.0-beta.1-x86_64-unknown-linux-gnu'.
[INFO] [stdout] help: run `rustup component add --toolchain 1.100.0-beta.1-x86_64-unknown-linux-gnu clippy` to install it
[INFO] [stdout] 
[INFO] [stdout] === nostd/result-match ===
[INFO] [stdout] --- generated ---
[INFO] [stdout] #![no_std]
[INFO] [stdout] extern crate alloc;
[INFO] [stdout] use heapless::String as HString;
[INFO] [stdout] 
[INFO] [stdout] pub enum FetcherState {
[INFO] [stdout]     Start,
[INFO] [stdout]     Done {
[INFO] [stdout]         body: HString<64>,
[INFO] [stdout]     },
[INFO] [stdout]     Failed {
[INFO] [stdout]         reason: HString<64>,
[INFO] [stdout]     },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] pub struct Fetcher {
[INFO] [stdout]     pub state: FetcherState,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl Fetcher {
[INFO] [stdout]     pub fn new() -> Self {
[INFO] [stdout]         Self { state: FetcherState::Start }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn run(&mut self, body: HString<64>) -> Result<(), &'static str> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             FetcherState::Start => {
[INFO] [stdout]                 self.state = FetcherState::Done { body };
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err("invalid transition"),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] --- diagnostics ---
[INFO] [stdout] error: failed to get `heapless` as a dependency of package `gust-backend-nostd-result-match v0.0.0 (/tmp/.tmpzVeane)`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   failed to load source for dependency `heapless`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   unable to update registry `crates-io`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   download of config.json failed
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   [6] Could not resolve hostname (Could not resolve host: index.crates.io)
[INFO] [stdout] 
[INFO] [stdout] === rust/generic-machine ===
[INFO] [stdout] --- generated ---
[INFO] [stdout] // Generated by Gust compiler — do not edit manually
[INFO] [stdout] use serde::{Serialize, Deserialize};
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] pub enum HolderState<T> {
[INFO] [stdout]     Empty,
[INFO] [stdout]     Full {
[INFO] [stdout]         value: T,
[INFO] [stdout]         revision: i64,
[INFO] [stdout]     },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] pub struct Holder<T> {
[INFO] [stdout]     pub state: HolderState<T>,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, thiserror::Error)]
[INFO] [stdout] pub enum HolderError {
[INFO] [stdout]     #[error("invalid transition '{transition}' from state '{from}'")]
[INFO] [stdout]     InvalidTransition { transition: String, from: String },
[INFO] [stdout]     #[error("transition failed: {reason}")]
[INFO] [stdout]     Failed { reason: String },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl<T: core::fmt::Debug + Clone> Holder<T> {
[INFO] [stdout]     pub fn new() -> Self {
[INFO] [stdout]         Self { state: HolderState::Empty }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn state(&self) -> &HolderState<T> {
[INFO] [stdout]         &self.state
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn put(&mut self, value: T) -> Result<(), HolderError> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             HolderState::Empty => {
[INFO] [stdout]                 let __goto_full_revision = 1;
[INFO] [stdout]                 self.state = HolderState::Full { value, revision: __goto_full_revision };
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err(HolderError::InvalidTransition {
[INFO] [stdout]                 transition: "put".to_string(),
[INFO] [stdout]                 from: format!("{:?}", self.state),
[INFO] [stdout]             }),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn clear(&mut self) -> Result<(), HolderError> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             HolderState::Full { value: _value, revision: _revision } => {
[INFO] [stdout]                 self.state = HolderState::Empty;
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err(HolderError::InvalidTransition {
[INFO] [stdout]                 transition: "clear".to_string(),
[INFO] [stdout]                 from: format!("{:?}", self.state),
[INFO] [stdout]             }),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl<T: core::fmt::Debug + Clone> Default for Holder<T> {
[INFO] [stdout]     fn default() -> Self {
[INFO] [stdout]         Self::new()
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] --- diagnostics ---
[INFO] [stdout] error: 'cargo-clippy' is not installed for the toolchain '1.100.0-beta.1-x86_64-unknown-linux-gnu'.
[INFO] [stdout] help: run `rustup component add --toolchain 1.100.0-beta.1-x86_64-unknown-linux-gnu clippy` to install it
[INFO] [stdout] 
[INFO] [stdout] === nostd/generic-machine ===
[INFO] [stdout] --- generated ---
[INFO] [stdout] #![no_std]
[INFO] [stdout] extern crate alloc;
[INFO] [stdout] 
[INFO] [stdout] pub enum HolderState<T: Clone> {
[INFO] [stdout]     Empty,
[INFO] [stdout]     Full {
[INFO] [stdout]         value: T,
[INFO] [stdout]         revision: i64,
[INFO] [stdout]     },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] pub struct Holder<T: Clone> {
[INFO] [stdout]     pub state: HolderState<T>,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl<T: Clone> Holder<T> {
[INFO] [stdout]     pub fn new() -> Self {
[INFO] [stdout]         Self { state: HolderState::Empty }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn put(&mut self, value: T, revision: i64) -> Result<(), &'static str> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             HolderState::Empty => {
[INFO] [stdout]                 self.state = HolderState::Full { value, revision };
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err("invalid transition"),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn clear(&mut self) -> Result<(), &'static str> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             HolderState::Full { .. } => {
[INFO] [stdout]                 self.state = HolderState::Empty;
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err("invalid transition"),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] --- diagnostics ---
[INFO] [stdout] error: failed to get `heapless` as a dependency of package `gust-backend-nostd-generic-machine v0.0.0 (/tmp/.tmpOQiWdI)`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   failed to load source for dependency `heapless`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   unable to update registry `crates-io`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   download of config.json failed
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   [6] Could not resolve hostname (Could not resolve host: index.crates.io)
[INFO] [stdout] 
[INFO] [stdout] === rust/stdlib-retry ===
[INFO] [stdout] --- generated ---
[INFO] [stdout] // Generated by Gust compiler — do not edit manually
[INFO] [stdout] use serde::{Serialize, Deserialize};
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] pub enum RetryState<T> {
[INFO] [stdout]     Ready {
[INFO] [stdout]         max_attempts: i64,
[INFO] [stdout]         base_delay_ms: i64,
[INFO] [stdout]         max_delay_ms: i64,
[INFO] [stdout]         jitter_pct: i64,
[INFO] [stdout]     },
[INFO] [stdout]     Attempting {
[INFO] [stdout]         attempt: i64,
[INFO] [stdout]         max_attempts: i64,
[INFO] [stdout]         base_delay_ms: i64,
[INFO] [stdout]         max_delay_ms: i64,
[INFO] [stdout]         jitter_pct: i64,
[INFO] [stdout]     },
[INFO] [stdout]     Waiting {
[INFO] [stdout]         attempt: i64,
[INFO] [stdout]         delay_ms: i64,
[INFO] [stdout]         max_attempts: i64,
[INFO] [stdout]         base_delay_ms: i64,
[INFO] [stdout]         max_delay_ms: i64,
[INFO] [stdout]         jitter_pct: i64,
[INFO] [stdout]     },
[INFO] [stdout]     Succeeded {
[INFO] [stdout]         value: T,
[INFO] [stdout]         attempts: i64,
[INFO] [stdout]     },
[INFO] [stdout]     Failed {
[INFO] [stdout]         error: String,
[INFO] [stdout]         attempts: i64,
[INFO] [stdout]     },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] pub trait RetryEffects<T> {
[INFO] [stdout]     /// gust:effect -- replay-safe / idempotent
[INFO] [stdout]     fn execute_operation(&self) -> impl ::core::future::Future<Output = Result<T, String>> + Send;
[INFO] [stdout]     /// gust:effect -- replay-safe / idempotent
[INFO] [stdout]     fn sleep_ms(&self, duration_ms: i64) -> impl ::core::future::Future<Output = i64> + Send;
[INFO] [stdout]     /// gust:effect -- replay-safe / idempotent
[INFO] [stdout]     fn compute_backoff(&self, base_delay_ms: i64, attempt: i64, max_delay_ms: i64, jitter_pct: i64) -> i64;
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] pub struct Retry<T> {
[INFO] [stdout]     pub state: RetryState<T>,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, thiserror::Error)]
[INFO] [stdout] pub enum RetryError {
[INFO] [stdout]     #[error("invalid transition '{transition}' from state '{from}'")]
[INFO] [stdout]     InvalidTransition { transition: String, from: String },
[INFO] [stdout]     #[error("transition failed: {reason}")]
[INFO] [stdout]     Failed { reason: String },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl<T: core::fmt::Debug + Clone> Retry<T> {
[INFO] [stdout]     pub fn new(max_attempts: i64, base_delay_ms: i64, max_delay_ms: i64, jitter_pct: i64) -> Self {
[INFO] [stdout]         Self { state: RetryState::Ready { max_attempts, base_delay_ms, max_delay_ms, jitter_pct } }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn state(&self) -> &RetryState<T> {
[INFO] [stdout]         &self.state
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn begin(&mut self) -> Result<(), RetryError> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             RetryState::Ready { max_attempts, base_delay_ms, max_delay_ms, jitter_pct } => {
[INFO] [stdout]                 let max_attempts = *max_attempts;
[INFO] [stdout]                 let base_delay_ms = *base_delay_ms;
[INFO] [stdout]                 let max_delay_ms = *max_delay_ms;
[INFO] [stdout]                 let jitter_pct = *jitter_pct;
[INFO] [stdout]                 let __goto_attempting_attempt = 1;
[INFO] [stdout]                 self.state = RetryState::Attempting { attempt: __goto_attempting_attempt, max_attempts, base_delay_ms, max_delay_ms, jitter_pct };
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err(RetryError::InvalidTransition {
[INFO] [stdout]                 transition: "begin".to_string(),
[INFO] [stdout]                 from: format!("{:?}", self.state),
[INFO] [stdout]             }),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub async fn run(&mut self, effects: &impl RetryEffects<T>) -> Result<(), RetryError> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             RetryState::Attempting { attempt, max_attempts, base_delay_ms, max_delay_ms, jitter_pct } => {
[INFO] [stdout]                 let attempt = *attempt;
[INFO] [stdout]                 let max_attempts = *max_attempts;
[INFO] [stderr] error: test failed, to rerun pass `--test codegen_backends`
[INFO] [stdout]                 let base_delay_ms = *base_delay_ms;
[INFO] [stdout]                 let max_delay_ms = *max_delay_ms;
[INFO] [stdout]                 let jitter_pct = *jitter_pct;
[INFO] [stdout]                 let result = effects.execute_operation().await;
[INFO] [stdout]                 match result {
[INFO] [stdout]                     Ok(value) => {
[INFO] [stdout]                         self.state = RetryState::Succeeded { value, attempts: attempt };
[INFO] [stdout]                         Ok(())
[INFO] [stdout]                     }
[INFO] [stdout]                     Err(err) => {
[INFO] [stdout]                         if attempt >= max_attempts {
[INFO] [stdout]                             self.state = RetryState::Failed { error: err, attempts: attempt };
[INFO] [stdout]                             Ok(())
[INFO] [stdout]                         } else {
[INFO] [stdout]                             let delay = effects.compute_backoff(base_delay_ms, attempt, max_delay_ms, jitter_pct);
[INFO] [stdout]                             self.state = RetryState::Waiting { attempt, delay_ms: delay, max_attempts, base_delay_ms, max_delay_ms, jitter_pct };
[INFO] [stdout]                             Ok(())
[INFO] [stdout]                         }
[INFO] [stdout]                     }
[INFO] [stdout]                 }
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err(RetryError::InvalidTransition {
[INFO] [stdout]                 transition: "run".to_string(),
[INFO] [stdout]                 from: format!("{:?}", self.state),
[INFO] [stdout]             }),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub async fn wait_complete(&mut self, effects: &impl RetryEffects<T>) -> Result<(), RetryError> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             RetryState::Waiting { attempt, delay_ms, max_attempts, base_delay_ms, max_delay_ms, jitter_pct } => {
[INFO] [stdout]                 let attempt = *attempt;
[INFO] [stdout]                 let delay_ms = *delay_ms;
[INFO] [stdout]                 let max_attempts = *max_attempts;
[INFO] [stdout]                 let base_delay_ms = *base_delay_ms;
[INFO] [stdout]                 let max_delay_ms = *max_delay_ms;
[INFO] [stdout]                 let jitter_pct = *jitter_pct;
[INFO] [stdout]                 effects.sleep_ms(delay_ms).await;
[INFO] [stdout]                 let __goto_attempting_attempt = attempt + 1;
[INFO] [stdout]                 self.state = RetryState::Attempting { attempt: __goto_attempting_attempt, max_attempts, base_delay_ms, max_delay_ms, jitter_pct };
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err(RetryError::InvalidTransition {
[INFO] [stdout]                 transition: "wait_complete".to_string(),
[INFO] [stdout]                 from: format!("{:?}", self.state),
[INFO] [stdout]             }),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] --- diagnostics ---
[INFO] [stdout] error: 'cargo-clippy' is not installed for the toolchain '1.100.0-beta.1-x86_64-unknown-linux-gnu'.
[INFO] [stdout] help: run `rustup component add --toolchain 1.100.0-beta.1-x86_64-unknown-linux-gnu clippy` to install it
[INFO] [stdout] 
[INFO] [stdout] === nostd/stdlib-retry ===
[INFO] [stdout] --- generated ---
[INFO] [stdout] #![no_std]
[INFO] [stdout] extern crate alloc;
[INFO] [stdout] use heapless::String as HString;
[INFO] [stdout] 
[INFO] [stdout] pub enum RetryState<T: Clone> {
[INFO] [stdout]     Ready {
[INFO] [stdout]         max_attempts: i64,
[INFO] [stdout]         base_delay_ms: i64,
[INFO] [stdout]         max_delay_ms: i64,
[INFO] [stdout]         jitter_pct: i64,
[INFO] [stdout]     },
[INFO] [stdout]     Attempting {
[INFO] [stdout]         attempt: i64,
[INFO] [stdout]         max_attempts: i64,
[INFO] [stdout]         base_delay_ms: i64,
[INFO] [stdout]         max_delay_ms: i64,
[INFO] [stdout]         jitter_pct: i64,
[INFO] [stdout]     },
[INFO] [stdout]     Waiting {
[INFO] [stdout]         attempt: i64,
[INFO] [stdout]         delay_ms: i64,
[INFO] [stdout]         max_attempts: i64,
[INFO] [stdout]         base_delay_ms: i64,
[INFO] [stdout]         max_delay_ms: i64,
[INFO] [stdout]         jitter_pct: i64,
[INFO] [stdout]     },
[INFO] [stdout]     Succeeded {
[INFO] [stdout]         value: T,
[INFO] [stdout]         attempts: i64,
[INFO] [stdout]     },
[INFO] [stdout]     Failed {
[INFO] [stdout]         error: HString<64>,
[INFO] [stdout]         attempts: i64,
[INFO] [stdout]     },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] pub struct Retry<T: Clone> {
[INFO] [stdout]     pub state: RetryState<T>,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl<T: Clone> Retry<T> {
[INFO] [stdout]     pub fn new(max_attempts: i64, base_delay_ms: i64, max_delay_ms: i64, jitter_pct: i64) -> Self {
[INFO] [stdout]         Self { state: RetryState::Ready { max_attempts, base_delay_ms, max_delay_ms, jitter_pct } }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn begin(&mut self, attempt: i64, max_attempts: i64, base_delay_ms: i64, max_delay_ms: i64, jitter_pct: i64) -> Result<(), &'static str> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             RetryState::Ready { .. } => {
[INFO] [stdout]                 self.state = RetryState::Attempting { attempt, max_attempts, base_delay_ms, max_delay_ms, jitter_pct };
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err("invalid transition"),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn run(&mut self, attempt: i64, delay_ms: i64, max_attempts: i64, base_delay_ms: i64, max_delay_ms: i64, jitter_pct: i64) -> Result<(), &'static str> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             RetryState::Attempting { .. } => {
[INFO] [stdout]                 self.state = RetryState::Waiting { attempt, delay_ms, max_attempts, base_delay_ms, max_delay_ms, jitter_pct };
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err("invalid transition"),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn wait_complete(&mut self, attempt: i64, max_attempts: i64, base_delay_ms: i64, max_delay_ms: i64, jitter_pct: i64) -> Result<(), &'static str> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             RetryState::Waiting { .. } => {
[INFO] [stdout]                 self.state = RetryState::Attempting { attempt, max_attempts, base_delay_ms, max_delay_ms, jitter_pct };
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err("invalid transition"),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] --- diagnostics ---
[INFO] [stdout] error: failed to get `heapless` as a dependency of package `gust-backend-nostd-stdlib-retry v0.0.0 (/tmp/.tmpHzqRMg)`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   failed to load source for dependency `heapless`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   unable to update registry `crates-io`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   download of config.json failed
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   [6] Could not resolve hostname (Could not resolve host: index.crates.io)
[INFO] [stdout] 
[INFO] [stdout] === rust/stdlib-health-check ===
[INFO] [stdout] --- generated ---
[INFO] [stdout] // Generated by Gust compiler — do not edit manually
[INFO] [stdout] use serde::{Serialize, Deserialize};
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] pub enum HealthCheckState<T> {
[INFO] [stdout]     Healthy {
[INFO] [stdout]         status: T,
[INFO] [stdout]     },
[INFO] [stdout]     Degraded {
[INFO] [stdout]         status: T,
[INFO] [stdout]         failures: i64,
[INFO] [stdout]     },
[INFO] [stdout]     Unhealthy {
[INFO] [stdout]         reason: String,
[INFO] [stdout]     },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] pub trait HealthCheckEffects<T> {
[INFO] [stdout]     /// gust:effect -- replay-safe / idempotent
[INFO] [stdout]     fn run_probe(&self) -> impl ::core::future::Future<Output = Result<T, String>> + Send;
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] pub struct HealthCheck<T> {
[INFO] [stdout]     pub state: HealthCheckState<T>,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, thiserror::Error)]
[INFO] [stdout] pub enum HealthCheckError {
[INFO] [stdout]     #[error("invalid transition '{transition}' from state '{from}'")]
[INFO] [stdout]     InvalidTransition { transition: String, from: String },
[INFO] [stdout]     #[error("transition failed: {reason}")]
[INFO] [stdout]     Failed { reason: String },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl<T: core::fmt::Debug + Clone> HealthCheck<T> {
[INFO] [stdout]     pub fn new(status: T) -> Self {
[INFO] [stdout]         Self { state: HealthCheckState::Healthy { status } }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn state(&self) -> &HealthCheckState<T> {
[INFO] [stdout]         &self.state
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub async fn probe(&mut self, effects: &impl HealthCheckEffects<T>) -> Result<(), HealthCheckError> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             HealthCheckState::Healthy { status } => {
[INFO] [stdout]                 let status = status.clone();
[INFO] [stdout]                 let result = effects.run_probe().await;
[INFO] [stdout]                 match result {
[INFO] [stdout]                     Ok(next_status) => {
[INFO] [stdout]                         self.state = HealthCheckState::Healthy { status: next_status };
[INFO] [stdout]                         Ok(())
[INFO] [stdout]                     }
[INFO] [stdout]                     Err(_err) => {
[INFO] [stdout]                         let __goto_degraded_failures = 1;
[INFO] [stdout]                         self.state = HealthCheckState::Degraded { status, failures: __goto_degraded_failures };
[INFO] [stdout]                         Ok(())
[INFO] [stdout]                     }
[INFO] [stdout]                 }
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err(HealthCheckError::InvalidTransition {
[INFO] [stdout]                 transition: "probe".to_string(),
[INFO] [stdout]                 from: format!("{:?}", self.state),
[INFO] [stdout]             }),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub async fn recover(&mut self, effects: &impl HealthCheckEffects<T>) -> Result<(), HealthCheckError> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             HealthCheckState::Degraded { status: _status, failures: _failures } => {
[INFO] [stdout]                 let result = effects.run_probe().await;
[INFO] [stdout]                 match result {
[INFO] [stdout]                     Ok(next_status) => {
[INFO] [stdout]                         self.state = HealthCheckState::Healthy { status: next_status };
[INFO] [stdout]                         Ok(())
[INFO] [stdout]                     }
[INFO] [stdout]                     Err(err) => {
[INFO] [stdout]                         self.state = HealthCheckState::Unhealthy { reason: err };
[INFO] [stdout]                         Ok(())
[INFO] [stdout]                     }
[INFO] [stdout]                 }
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err(HealthCheckError::InvalidTransition {
[INFO] [stdout]                 transition: "recover".to_string(),
[INFO] [stdout]                 from: format!("{:?}", self.state),
[INFO] [stdout]             }),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] --- diagnostics ---
[INFO] [stdout] error: 'cargo-clippy' is not installed for the toolchain '1.100.0-beta.1-x86_64-unknown-linux-gnu'.
[INFO] [stdout] help: run `rustup component add --toolchain 1.100.0-beta.1-x86_64-unknown-linux-gnu clippy` to install it
[INFO] [stdout] 
[INFO] [stdout] === nostd/stdlib-health-check ===
[INFO] [stdout] --- generated ---
[INFO] [stdout] #![no_std]
[INFO] [stdout] extern crate alloc;
[INFO] [stdout] use heapless::String as HString;
[INFO] [stdout] 
[INFO] [stdout] pub enum HealthCheckState<T: Clone> {
[INFO] [stdout]     Healthy {
[INFO] [stdout]         status: T,
[INFO] [stdout]     },
[INFO] [stdout]     Degraded {
[INFO] [stdout]         status: T,
[INFO] [stdout]         failures: i64,
[INFO] [stdout]     },
[INFO] [stdout]     Unhealthy {
[INFO] [stdout]         reason: HString<64>,
[INFO] [stdout]     },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] pub struct HealthCheck<T: Clone> {
[INFO] [stdout]     pub state: HealthCheckState<T>,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl<T: Clone> HealthCheck<T> {
[INFO] [stdout]     pub fn new(status: T) -> Self {
[INFO] [stdout]         Self { state: HealthCheckState::Healthy { status } }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn probe(&mut self, status: T) -> Result<(), &'static str> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             HealthCheckState::Healthy { .. } => {
[INFO] [stdout]                 self.state = HealthCheckState::Healthy { status };
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err("invalid transition"),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn recover(&mut self, status: T) -> Result<(), &'static str> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             HealthCheckState::Degraded { .. } => {
[INFO] [stdout]                 self.state = HealthCheckState::Healthy { status };
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err("invalid transition"),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] --- diagnostics ---
[INFO] [stdout] error: failed to get `heapless` as a dependency of package `gust-backend-nostd-stdlib-health-check v0.0.0 (/tmp/.tmpcJQ7wX)`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   failed to load source for dependency `heapless`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   unable to update registry `crates-io`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   download of config.json failed
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   [6] Could not resolve hostname (Could not resolve host: index.crates.io)
[INFO] [stdout] 
[INFO] [stdout] === rust/supervision ===
[INFO] [stdout] --- generated ---
[INFO] [stdout] // Generated by Gust compiler — do not edit manually
[INFO] [stdout] use serde::{Serialize, Deserialize};
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] pub enum StepRunnerState {
[INFO] [stdout]     Idle {
[INFO] [stdout]         step: String,
[INFO] [stdout]     },
[INFO] [stdout]     Done {
[INFO] [stdout]         result: String,
[INFO] [stdout]     },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] pub trait StepRunnerEffects {
[INFO] [stdout]     /// gust:effect -- replay-safe / idempotent
[INFO] [stdout]     fn run_step(&self, step: &str) -> String;
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] pub struct StepRunner {
[INFO] [stdout]     pub state: StepRunnerState,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, thiserror::Error)]
[INFO] [stdout] pub enum StepRunnerError {
[INFO] [stdout]     #[error("invalid transition '{transition}' from state '{from}'")]
[INFO] [stdout]     InvalidTransition { transition: String, from: String },
[INFO] [stdout]     #[error("transition failed: {reason}")]
[INFO] [stdout]     Failed { reason: String },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl StepRunner {
[INFO] [stdout]     pub fn new(step: String) -> Self {
[INFO] [stdout]         Self { state: StepRunnerState::Idle { step } }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn state(&self) -> &StepRunnerState {
[INFO] [stdout]         &self.state
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn complete(&mut self, effects: &impl StepRunnerEffects) -> Result<(), StepRunnerError> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             StepRunnerState::Idle { step } => {
[INFO] [stdout]                 let step = step.clone();
[INFO] [stdout]                 let result = effects.run_step(&step);
[INFO] [stdout]                 self.state = StepRunnerState::Done { result };
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err(StepRunnerError::InvalidTransition {
[INFO] [stdout]                 transition: "complete".to_string(),
[INFO] [stdout]                 from: format!("{:?}", self.state),
[INFO] [stdout]             }),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] pub enum EngineState {
[INFO] [stdout]     Ready {
[INFO] [stdout]         first: String,
[INFO] [stdout]     },
[INFO] [stdout]     Running {
[INFO] [stdout]         current: String,
[INFO] [stdout]     },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] /// Host-supplied runners for the children `Engine` supervises.
[INFO] [stdout] pub trait EngineSupervision {
[INFO] [stdout]     /// Drives a supervised `StepRunner` to completion. Returning `Err`
[INFO] [stdout]     /// marks the child failed, which is what the runtime's
[INFO] [stdout]     /// restart strategy acts on.
[INFO] [stdout]     fn run_step_runner(&self, child: StepRunner) -> ::core::pin::Pin<::std::boxed::Box<dyn ::core::future::Future<Output = Result<(), String>> + Send>>;
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] /// Restart policy per supervised child of `Engine`.
[INFO] [stdout] pub const ENGINE_SUPERVISION: &[(&str, gust_runtime::prelude::RestartStrategy)] = &[
[INFO] [stdout]     ("StepRunner", gust_runtime::prelude::RestartStrategy::OneForOne),
[INFO] [stdout] ];
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] pub struct Engine {
[INFO] [stdout]     pub state: EngineState,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, thiserror::Error)]
[INFO] [stdout] pub enum EngineError {
[INFO] [stdout]     #[error("invalid transition '{transition}' from state '{from}'")]
[INFO] [stdout]     InvalidTransition { transition: String, from: String },
[INFO] [stdout]     #[error("transition failed: {reason}")]
[INFO] [stdout]     Failed { reason: String },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl Engine {
[INFO] [stdout]     pub fn new(first: String) -> Self {
[INFO] [stdout]         Self { state: EngineState::Ready { first } }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn state(&self) -> &EngineState {
[INFO] [stdout]         &self.state
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn start(&mut self, supervisor: &gust_runtime::prelude::SupervisorRuntime, children: &impl EngineSupervision) -> Result<(), EngineError> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             EngineState::Ready { first } => {
[INFO] [stdout]                 let first = first.clone();
[INFO] [stdout]                 let _child = supervisor.spawn_named("StepRunner", children.run_step_runner(StepRunner::new(first.clone())));
[INFO] [stdout]                 self.state = EngineState::Running { current: first };
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err(EngineError::InvalidTransition {
[INFO] [stdout]                 transition: "start".to_string(),
[INFO] [stdout]                 from: format!("{:?}", self.state),
[INFO] [stdout]             }),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] --- diagnostics ---
[INFO] [stdout] error: 'cargo-clippy' is not installed for the toolchain '1.100.0-beta.1-x86_64-unknown-linux-gnu'.
[INFO] [stdout] help: run `rustup component add --toolchain 1.100.0-beta.1-x86_64-unknown-linux-gnu clippy` to install it
[INFO] [stdout] 
[INFO] [stdout] === nostd/supervision ===
[INFO] [stdout] --- generated ---
[INFO] [stdout] #![no_std]
[INFO] [stdout] extern crate alloc;
[INFO] [stdout] use heapless::String as HString;
[INFO] [stdout] 
[INFO] [stdout] pub enum StepRunnerState {
[INFO] [stdout]     Idle {
[INFO] [stdout]         step: HString<64>,
[INFO] [stdout]     },
[INFO] [stdout]     Done {
[INFO] [stdout]         result: HString<64>,
[INFO] [stdout]     },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] pub struct StepRunner {
[INFO] [stdout]     pub state: StepRunnerState,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl StepRunner {
[INFO] [stdout]     pub fn new(step: HString<64>) -> Self {
[INFO] [stdout]         Self { state: StepRunnerState::Idle { step } }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn complete(&mut self, result: HString<64>) -> Result<(), &'static str> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             StepRunnerState::Idle { .. } => {
[INFO] [stdout]                 self.state = StepRunnerState::Done { result };
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err("invalid transition"),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] pub enum EngineState {
[INFO] [stdout]     Ready {
[INFO] [stdout]         first: HString<64>,
[INFO] [stdout]     },
[INFO] [stdout]     Running {
[INFO] [stdout]         current: HString<64>,
[INFO] [stdout]     },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] pub struct Engine {
[INFO] [stdout]     pub state: EngineState,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl Engine {
[INFO] [stdout]     pub fn new(first: HString<64>) -> Self {
[INFO] [stdout]         Self { state: EngineState::Ready { first } }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn start(&mut self, current: HString<64>) -> Result<(), &'static str> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             EngineState::Ready { .. } => {
[INFO] [stdout]                 self.state = EngineState::Running { current };
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err("invalid transition"),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] --- diagnostics ---
[INFO] [stdout] error: failed to get `heapless` as a dependency of package `gust-backend-nostd-supervision v0.0.0 (/tmp/.tmpjrVvzl)`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   failed to load source for dependency `heapless`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   unable to update registry `crates-io`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   download of config.json failed
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   [6] Could not resolve hostname (Could not resolve host: index.crates.io)
[INFO] [stdout] 
[INFO] [stdout] === rust/supervision-no-args ===
[INFO] [stdout] --- generated ---
[INFO] [stdout] // Generated by Gust compiler — do not edit manually
[INFO] [stdout] use serde::{Serialize, Deserialize};
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] pub enum WorkerState {
[INFO] [stdout]     Idle,
[INFO] [stdout]     Busy {
[INFO] [stdout]         job: String,
[INFO] [stdout]     },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] pub struct Worker {
[INFO] [stdout]     pub state: WorkerState,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, thiserror::Error)]
[INFO] [stdout] pub enum WorkerError {
[INFO] [stdout]     #[error("invalid transition '{transition}' from state '{from}'")]
[INFO] [stdout]     InvalidTransition { transition: String, from: String },
[INFO] [stdout]     #[error("transition failed: {reason}")]
[INFO] [stdout]     Failed { reason: String },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl Worker {
[INFO] [stdout]     pub fn new() -> Self {
[INFO] [stdout]         Self { state: WorkerState::Idle }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn state(&self) -> &WorkerState {
[INFO] [stdout]         &self.state
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn start(&mut self, job: String) -> Result<(), WorkerError> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             WorkerState::Idle => {
[INFO] [stdout]                 self.state = WorkerState::Busy { job };
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err(WorkerError::InvalidTransition {
[INFO] [stdout]                 transition: "start".to_string(),
[INFO] [stdout]                 from: format!("{:?}", self.state),
[INFO] [stdout]             }),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl Default for Worker {
[INFO] [stdout]     fn default() -> Self {
[INFO] [stdout]         Self::new()
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] pub enum BossState {
[INFO] [stdout]     Ready {
[INFO] [stdout]         first: String,
[INFO] [stdout]     },
[INFO] [stdout]     Running {
[INFO] [stdout]         current: String,
[INFO] [stdout]     },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] /// Host-supplied runners for the children `Boss` supervises.
[INFO] [stdout] pub trait BossSupervision {
[INFO] [stdout]     /// Drives a supervised `Worker` to completion. Returning `Err`
[INFO] [stdout]     /// marks the child failed, which is what the runtime's
[INFO] [stdout]     /// restart strategy acts on.
[INFO] [stdout]     fn run_worker(&self, child: Worker) -> ::core::pin::Pin<::std::boxed::Box<dyn ::core::future::Future<Output = Result<(), String>> + Send>>;
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] /// Restart policy per supervised child of `Boss`.
[INFO] [stdout] pub const BOSS_SUPERVISION: &[(&str, gust_runtime::prelude::RestartStrategy)] = &[
[INFO] [stdout]     ("Worker", gust_runtime::prelude::RestartStrategy::OneForOne),
[INFO] [stdout] ];
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] pub struct Boss {
[INFO] [stdout]     pub state: BossState,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, thiserror::Error)]
[INFO] [stdout] pub enum BossError {
[INFO] [stdout]     #[error("invalid transition '{transition}' from state '{from}'")]
[INFO] [stdout]     InvalidTransition { transition: String, from: String },
[INFO] [stdout]     #[error("transition failed: {reason}")]
[INFO] [stdout]     Failed { reason: String },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl Boss {
[INFO] [stdout]     pub fn new(first: String) -> Self {
[INFO] [stdout]         Self { state: BossState::Ready { first } }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn state(&self) -> &BossState {
[INFO] [stdout]         &self.state
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn go(&mut self, supervisor: &gust_runtime::prelude::SupervisorRuntime, children: &impl BossSupervision) -> Result<(), BossError> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             BossState::Ready { first } => {
[INFO] [stdout]                 let first = first.clone();
[INFO] [stdout]                 let _child = supervisor.spawn_named("Worker", children.run_worker(Worker::new()));
[INFO] [stdout]                 self.state = BossState::Running { current: first };
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err(BossError::InvalidTransition {
[INFO] [stdout]                 transition: "go".to_string(),
[INFO] [stdout]                 from: format!("{:?}", self.state),
[INFO] [stdout]             }),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] --- diagnostics ---
[INFO] [stdout] error: 'cargo-clippy' is not installed for the toolchain '1.100.0-beta.1-x86_64-unknown-linux-gnu'.
[INFO] [stdout] help: run `rustup component add --toolchain 1.100.0-beta.1-x86_64-unknown-linux-gnu clippy` to install it
[INFO] [stdout] 
[INFO] [stdout] === nostd/supervision-no-args ===
[INFO] [stdout] --- generated ---
[INFO] [stdout] #![no_std]
[INFO] [stdout] extern crate alloc;
[INFO] [stdout] use heapless::String as HString;
[INFO] [stdout] 
[INFO] [stdout] pub enum WorkerState {
[INFO] [stdout]     Idle,
[INFO] [stdout]     Busy {
[INFO] [stdout]         job: HString<64>,
[INFO] [stdout]     },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] pub struct Worker {
[INFO] [stdout]     pub state: WorkerState,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl Worker {
[INFO] [stdout]     pub fn new() -> Self {
[INFO] [stdout]         Self { state: WorkerState::Idle }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn start(&mut self, job: HString<64>) -> Result<(), &'static str> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             WorkerState::Idle => {
[INFO] [stdout]                 self.state = WorkerState::Busy { job };
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err("invalid transition"),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] pub enum BossState {
[INFO] [stdout]     Ready {
[INFO] [stdout]         first: HString<64>,
[INFO] [stdout]     },
[INFO] [stdout]     Running {
[INFO] [stdout]         current: HString<64>,
[INFO] [stdout]     },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] pub struct Boss {
[INFO] [stdout]     pub state: BossState,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl Boss {
[INFO] [stdout]     pub fn new(first: HString<64>) -> Self {
[INFO] [stdout]         Self { state: BossState::Ready { first } }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn go(&mut self, current: HString<64>) -> Result<(), &'static str> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             BossState::Ready { .. } => {
[INFO] [stdout]                 self.state = BossState::Running { current };
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err("invalid transition"),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] --- diagnostics ---
[INFO] [stdout] error: failed to get `heapless` as a dependency of package `gust-backend-nostd-supervision-no-args v0.0.0 (/tmp/.tmpQIT9PN)`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   failed to load source for dependency `heapless`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   unable to update registry `crates-io`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   download of config.json failed
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   [6] Could not resolve hostname (Could not resolve host: index.crates.io)
[INFO] [stdout] 
[INFO] [stdout] === rust/early-goto ===
[INFO] [stdout] --- generated ---
[INFO] [stdout] // Generated by Gust compiler — do not edit manually
[INFO] [stdout] use serde::{Serialize, Deserialize};
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] pub enum RouterState {
[INFO] [stdout]     Start {
[INFO] [stdout]         items: Vec<String>,
[INFO] [stdout]         n: i64,
[INFO] [stdout]     },
[INFO] [stdout]     Early {
[INFO] [stdout]         items: Vec<String>,
[INFO] [stdout]     },
[INFO] [stdout]     Late {
[INFO] [stdout]         items: Vec<String>,
[INFO] [stdout]         remaining: i64,
[INFO] [stdout]     },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] pub trait RouterEffects {
[INFO] [stdout]     /// gust:effect -- replay-safe / idempotent
[INFO] [stdout]     fn count(&self, items: &[String]) -> i64;
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] pub struct Router {
[INFO] [stdout]     pub state: RouterState,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] #[derive(Debug, Clone, thiserror::Error)]
[INFO] [stdout] pub enum RouterError {
[INFO] [stdout]     #[error("invalid transition '{transition}' from state '{from}'")]
[INFO] [stdout]     InvalidTransition { transition: String, from: String },
[INFO] [stdout]     #[error("transition failed: {reason}")]
[INFO] [stdout]     Failed { reason: String },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl Router {
[INFO] [stdout]     pub fn new(items: Vec<String>, n: i64) -> Self {
[INFO] [stdout]         Self { state: RouterState::Start { items, n } }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn state(&self) -> &RouterState {
[INFO] [stdout]         &self.state
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn route(&mut self, effects: &impl RouterEffects) -> Result<(), RouterError> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             RouterState::Start { items, n } => {
[INFO] [stdout]                 let items = items.clone();
[INFO] [stdout]                 let n = *n;
[INFO] [stdout]                 if n > 0 {
[INFO] [stdout]                     self.state = RouterState::Early { items };
[INFO] [stdout]                     return Ok(());
[INFO] [stdout]                 }
[INFO] [stdout]                 let __goto_late_remaining = effects.count(&items) - 1;
[INFO] [stdout]                 self.state = RouterState::Late { items, remaining: __goto_late_remaining };
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err(RouterError::InvalidTransition {
[INFO] [stdout]                 transition: "route".to_string(),
[INFO] [stdout]                 from: format!("{:?}", self.state),
[INFO] [stdout]             }),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] --- diagnostics ---
[INFO] [stdout] error: 'cargo-clippy' is not installed for the toolchain '1.100.0-beta.1-x86_64-unknown-linux-gnu'.
[INFO] [stdout] help: run `rustup component add --toolchain 1.100.0-beta.1-x86_64-unknown-linux-gnu clippy` to install it
[INFO] [stdout] 
[INFO] [stdout] === nostd/early-goto ===
[INFO] [stdout] --- generated ---
[INFO] [stdout] #![no_std]
[INFO] [stdout] extern crate alloc;
[INFO] [stdout] use heapless::{String as HString, Vec as HVec};
[INFO] [stdout] 
[INFO] [stdout] pub enum RouterState {
[INFO] [stdout]     Start {
[INFO] [stdout]         items: HVec<HString<64>, 16>,
[INFO] [stdout]         n: i64,
[INFO] [stdout]     },
[INFO] [stdout]     Early {
[INFO] [stdout]         items: HVec<HString<64>, 16>,
[INFO] [stdout]     },
[INFO] [stdout]     Late {
[INFO] [stdout]         items: HVec<HString<64>, 16>,
[INFO] [stdout]         remaining: i64,
[INFO] [stdout]     },
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] pub struct Router {
[INFO] [stdout]     pub state: RouterState,
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] impl Router {
[INFO] [stdout]     pub fn new(items: HVec<HString<64>, 16>, n: i64) -> Self {
[INFO] [stdout]         Self { state: RouterState::Start { items, n } }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout]     pub fn route(&mut self, items: HVec<HString<64>, 16>) -> Result<(), &'static str> {
[INFO] [stdout]         match &self.state {
[INFO] [stdout]             RouterState::Start { .. } => {
[INFO] [stdout]                 self.state = RouterState::Early { items };
[INFO] [stdout]                 Ok(())
[INFO] [stdout]             }
[INFO] [stdout]             _ => Err("invalid transition"),
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] 
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] --- diagnostics ---
[INFO] [stdout] error: failed to get `heapless` as a dependency of package `gust-backend-nostd-early-goto v0.0.0 (/tmp/.tmpkqkSDa)`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   failed to load source for dependency `heapless`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   unable to update registry `crates-io`
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   download of config.json failed
[INFO] [stdout] 
[INFO] [stdout] Caused by:
[INFO] [stdout]   [6] Could not resolve hostname (Could not resolve host: index.crates.io)
[INFO] [stdout] 
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x643c01d4f5b1 - <<std[617be2ca0a6fd877]::sys::backtrace::BacktraceLock>::print::DisplayBacktrace as core[a373ad73a504971]::fmt::Display>::fmt
[INFO] [stdout]    1:     0x643c01d6532a - core[a373ad73a504971]::fmt::write
[INFO] [stdout]    2:     0x643c01d53a4c - <alloc[2e1b2a31b91974c5]::vec::Vec<u8> as core[a373ad73a504971]::io::write::Write>::write_fmt
[INFO] [stdout]    3:     0x643c01d2a2a6 - std[617be2ca0a6fd877]::panicking::default_hook::{closure#0}
[INFO] [stdout]    4:     0x643c01d47349 - std[617be2ca0a6fd877]::panicking::default_hook
[INFO] [stdout]    5:     0x643c01c6f1e0 - test[aada8e7e76ba119b]::test_main_inner::{closure#0}
[INFO] [stdout]    6:     0x643c01d47502 - std[617be2ca0a6fd877]::panicking::panic_with_hook
[INFO] [stdout]    7:     0x643c01d2a352 - std[617be2ca0a6fd877]::panicking::panic_handler::{closure#0}
[INFO] [stdout]    8:     0x643c01d22f49 - std[617be2ca0a6fd877]::sys::backtrace::__rust_end_short_backtrace::<std[617be2ca0a6fd877]::panicking::panic_handler::{closure#0}, !>
[INFO] [stdout]    9:     0x643c01d2af5d - __rustc[ea4f61d10b84890b]::rust_begin_unwind
[INFO] [stdout]   10:     0x643c01d65a5c - core[a373ad73a504971]::panicking::panic_fmt
[INFO] [stdout]   11:     0x643c01c5d7f5 - codegen_backends[ee0b2f491046de7b]::every_backend_produces_code_its_toolchain_accepts
[INFO] [stdout]   12:     0x643c01c5e739 - <codegen_backends[ee0b2f491046de7b]::every_backend_produces_code_its_toolchain_accepts::{closure#0} as core[a373ad73a504971]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]   13:     0x643c01c6262b - test[aada8e7e76ba119b]::__rust_begin_short_backtrace::<core[a373ad73a504971]::result::Result<(), alloc[2e1b2a31b91974c5]::string::String>, fn() -> core[a373ad73a504971]::result::Result<(), alloc[2e1b2a31b91974c5]::string::String>>
[INFO] [stdout]   14:     0x643c01c6f805 - test[aada8e7e76ba119b]::run_test::{closure#0}
[INFO] [stdout]   15:     0x643c01c690f4 - std[617be2ca0a6fd877]::sys::backtrace::__rust_begin_short_backtrace::<test[aada8e7e76ba119b]::run_test::{closure#1}, ()>
[INFO] [stdout]   16:     0x643c01c72892 - <std[617be2ca0a6fd877]::thread::lifecycle::spawn_unchecked<test[aada8e7e76ba119b]::run_test::{closure#1}, ()>::{closure#1} as core[a373ad73a504971]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
[INFO] [stdout]   17:     0x643c01d4ec2f - <std[617be2ca0a6fd877]::sys::thread::unix::Thread>::new::thread_start
[INFO] [stdout]   18:     0x798c47129dfa - <unknown>
[INFO] [stdout]   19:     0x798c471bd3d4 - clone
[INFO] [stdout]   20:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout]     every_backend_produces_code_its_toolchain_accepts
[INFO] [stdout] 
[INFO] [stdout] test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 177.53s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "82b9b5bfd06ac6b3ec5f00d76b214b5c30d777b0d5151874b21b4a59b8ff95d6", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "82b9b5bfd06ac6b3ec5f00d76b214b5c30d777b0d5151874b21b4a59b8ff95d6", kill_on_drop: false }`
[INFO] [stdout] 82b9b5bfd06ac6b3ec5f00d76b214b5c30d777b0d5151874b21b4a59b8ff95d6
