CI: SUCCESS radicle-artifact

Table of Contents

Run log

Plan, inside VM without network

plan: Executor starts
After 0.00 seconds at 2026-06-08 21:30:12ZProgram: ambient-execute-plan
Version: 0.14.0@c37ec71
plan: Runnable plan
After 0.00 seconds at 2026-06-08 21:30:12Z
steps:
- action: mkdir
  pathname: /ci
- action: mkdir
  pathname: /ci/artifacts
- action: tar_extract
  archive: /dev/vdc
  directory: /ci/src
- action: tar_extract
  archive: /dev/vdf
  directory: /ci/deps
- action: tar_extract
  archive: /dev/vde
  directory: /ci/cache
- action: shell
  shell: ln -sf /ci /workspace
- action: shell
  shell: git config --global user.name 'Ambient CI'
- action: shell
  shell: git config --global user.email ambient@example.com
- action: cargo_fmt
- action: cargo_clippy
- action: cargo_test
- action: tar_create
  archive: /dev/vde
  directory: /ci/cache
- action: tar_create
  archive: /dev/vdd
  directory: /ci/artifacts
executor_drive: /dev/vdb
source_drive: /dev/vdc
artifact_drive: /dev/vdd
cache_drive: /dev/vde
deps_drive: /dev/vdf
workspace_dir: /ci
source_dir: /ci/src
deps_dir: /ci/deps
cache_dir: /ci/cache
artifacts_dir: /ci/artifacts
envs: {}
plan: Successful action mkdir: /ci
After 0.00 seconds at 2026-06-08 21:30:12Z
  • plan: Start action mkdir: /ci
    After 0.00 seconds at 2026-06-08 21:30:12Z
    Mkdir(
        Mkdir {
            pathname: "/ci",
        },
    )
  • plan: Action succeeded mkdir: /ci
    After 0.00 seconds at 2026-06-08 21:30:12Z
    Mkdir(
        Mkdir {
            pathname: "/ci",
        },
    )
plan: Successful action mkdir: /ci/artifacts
After 0.00 seconds at 2026-06-08 21:30:12Z
  • plan: Start action mkdir: /ci/artifacts
    After 0.00 seconds at 2026-06-08 21:30:12Z
    Mkdir(
        Mkdir {
            pathname: "/ci/artifacts",
        },
    )
  • plan: Action succeeded mkdir: /ci/artifacts
    After 0.00 seconds at 2026-06-08 21:30:12Z
    Mkdir(
        Mkdir {
            pathname: "/ci/artifacts",
        },
    )
plan: Successful action tar_extract
After 0.00 seconds at 2026-06-08 21:30:12Z
  • plan: Start action tar_extract
    After 0.00 seconds at 2026-06-08 21:30:12Z
    TarExtract(
        TarExtract {
            archive: "/dev/vdc",
            directory: "/ci/src",
        },
    )
  • plan: Action succeeded tar_extract
    After 0.00 seconds at 2026-06-08 21:30:12Z
    TarExtract(
        TarExtract {
            archive: "/dev/vdc",
            directory: "/ci/src",
        },
    )
plan: Successful action tar_extract
After 0.03 seconds at 2026-06-08 21:30:12Z
  • plan: Start action tar_extract
    After 0.00 seconds at 2026-06-08 21:30:12Z
    TarExtract(
        TarExtract {
            archive: "/dev/vdf",
            directory: "/ci/deps",
        },
    )
  • plan: Action succeeded tar_extract
    After 0.00 seconds at 2026-06-08 21:30:14Z
    TarExtract(
        TarExtract {
            archive: "/dev/vdf",
            directory: "/ci/deps",
        },
    )
plan: Successful action tar_extract
After 2.11 seconds at 2026-06-08 21:30:14Z
  • plan: Start action tar_extract
    After 0.00 seconds at 2026-06-08 21:30:14Z
    TarExtract(
        TarExtract {
            archive: "/dev/vde",
            directory: "/ci/cache",
        },
    )
  • plan: Action succeeded tar_extract
    After 0.00 seconds at 2026-06-08 21:30:19Z
    TarExtract(
        TarExtract {
            archive: "/dev/vde",
            directory: "/ci/cache",
        },
    )
plan: Successful action shell: ln -sf /ci /workspace
After 7.15 seconds at 2026-06-08 21:30:19Z
  • plan: Start action shell: ln -sf /ci /workspace
    After 0.00 seconds at 2026-06-08 21:30:19Z
    Shell(
        Shell {
            shell: "ln -sf /ci /workspace",
        },
    )
  • plan: Start program bash
    After 0.00 seconds at 2026-06-08 21:30:19Z
    • bash
    • -c
    • set -xeuo pipefail ln -sf /ci /workspace
  • plan: Program succeeded
    After 0.00 seconds at 2026-06-08 21:30:19Z
    Exit code: 0
    Stderr:
    + ln -sf /ci /workspace
    
  • plan: Action succeeded shell: ln -sf /ci /workspace
    After 0.00 seconds at 2026-06-08 21:30:19Z
    Shell(
        Shell {
            shell: "ln -sf /ci /workspace",
        },
    )
plan: Successful action shell: git config --global user.name 'Ambient CI'
After 7.16 seconds at 2026-06-08 21:30:19Z
  • plan: Start action shell: git config --global user.name 'Ambient CI'
    After 0.00 seconds at 2026-06-08 21:30:19Z
    Shell(
        Shell {
            shell: "git config --global user.name 'Ambient CI'",
        },
    )
  • plan: Start program bash
    After 0.00 seconds at 2026-06-08 21:30:19Z
    • bash
    • -c
    • set -xeuo pipefail git config --global user.name 'Ambient CI'
  • plan: Program succeeded
    After 0.00 seconds at 2026-06-08 21:30:19Z
    Exit code: 0
    Stderr:
    + git config --global user.name 'Ambient CI'
    
  • plan: Action succeeded shell: git config --global user.name 'Ambient CI'
    After 0.00 seconds at 2026-06-08 21:30:19Z
    Shell(
        Shell {
            shell: "git config --global user.name 'Ambient CI'",
        },
    )
plan: Successful action shell: git config --global user.email ambient@example.com
After 7.18 seconds at 2026-06-08 21:30:19Z
  • plan: Start action shell: git config --global user.email ambient@example.com
    After 0.00 seconds at 2026-06-08 21:30:19Z
    Shell(
        Shell {
            shell: "git config --global user.email ambient@example.com",
        },
    )
  • plan: Start program bash
    After 0.00 seconds at 2026-06-08 21:30:19Z
    • bash
    • -c
    • set -xeuo pipefail git config --global user.email ambient@example.com
  • plan: Program succeeded
    After 0.00 seconds at 2026-06-08 21:30:19Z
    Exit code: 0
    Stderr:
    + git config --global user.email ambient@example.com
    
  • plan: Action succeeded shell: git config --global user.email ambient@example.com
    After 0.00 seconds at 2026-06-08 21:30:19Z
    Shell(
        Shell {
            shell: "git config --global user.email ambient@example.com",
        },
    )
plan: Successful action cargo_fmt
After 7.20 seconds at 2026-06-08 21:30:19Z
  • plan: Start action cargo_fmt
    After 0.00 seconds at 2026-06-08 21:30:19Z
    CargoFmt(
        CargoFmt,
    )
  • plan: Start program cargo
    After 0.00 seconds at 2026-06-08 21:30:19Z
    • cargo
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-06-08 21:30:19Z
    Exit code: 0
    Stdout:
    cargo 1.95.0 (f2d3ce0bd 2026-03-21)
    
  • plan: Start program cargo
    After 0.00 seconds at 2026-06-08 21:30:19Z
    • cargo
    • clippy
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-06-08 21:30:19Z
    Exit code: 0
    Stdout:
    clippy 0.1.95 (59807616e1 2026-04-14)
    
  • plan: Start program rustc
    After 0.00 seconds at 2026-06-08 21:30:19Z
    • rustc
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-06-08 21:30:19Z
    Exit code: 0
    Stdout:
    rustc 1.95.0 (59807616e 2026-04-14)
    
  • plan: Start program cargo
    After 0.00 seconds at 2026-06-08 21:30:19Z
    • cargo
    • fmt
    • --check
  • plan: Program succeeded
    After 0.00 seconds at 2026-06-08 21:30:19Z
    Exit code: 0
  • plan: Action succeeded cargo_fmt
    After 0.00 seconds at 2026-06-08 21:30:19Z
    CargoFmt(
        CargoFmt,
    )
plan: Successful action cargo_clippy
After 7.47 seconds at 2026-06-08 21:30:19Z
  • plan: Start action cargo_clippy
    After 0.00 seconds at 2026-06-08 21:30:19Z
    CargoClippy(
        CargoClippy,
    )
  • plan: Start program cargo
    After 0.00 seconds at 2026-06-08 21:30:19Z
    • cargo
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-06-08 21:30:19Z
    Exit code: 0
    Stdout:
    cargo 1.95.0 (f2d3ce0bd 2026-03-21)
    
  • plan: Start program cargo
    After 0.00 seconds at 2026-06-08 21:30:19Z
    • cargo
    • clippy
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-06-08 21:30:19Z
    Exit code: 0
    Stdout:
    clippy 0.1.95 (59807616e1 2026-04-14)
    
  • plan: Start program rustc
    After 0.00 seconds at 2026-06-08 21:30:19Z
    • rustc
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-06-08 21:30:19Z
    Exit code: 0
    Stdout:
    rustc 1.95.0 (59807616e 2026-04-14)
    
  • plan: Start program cargo
    After 0.00 seconds at 2026-06-08 21:30:19Z
    • cargo
    • clippy
    • --offline
    • --locked
    • --workspace
    • --all-targets
    • --no-deps
    • --
    • --deny
    • warnings
  • plan: Program succeeded
    After 0.00 seconds at 2026-06-08 21:30:23Z
    Exit code: 0
    Stderr:
        Checking radicle-artifact v0.14.0 (/ci/src)
        Finished `dev` profile [unoptimized + debuginfo] target(s) in 3.54s
    
  • plan: Action succeeded cargo_clippy
    After 0.00 seconds at 2026-06-08 21:30:23Z
    CargoClippy(
        CargoClippy,
    )
plan: Successful action cargo_test
After 11.15 seconds at 2026-06-08 21:30:23Z
  • plan: Start action cargo_test
    After 0.00 seconds at 2026-06-08 21:30:23Z
    CargoTest(
        CargoTest,
    )
  • plan: Start program cargo
    After 0.00 seconds at 2026-06-08 21:30:23Z
    • cargo
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-06-08 21:30:23Z
    Exit code: 0
    Stdout:
    cargo 1.95.0 (f2d3ce0bd 2026-03-21)
    
  • plan: Start program cargo
    After 0.00 seconds at 2026-06-08 21:30:23Z
    • cargo
    • clippy
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-06-08 21:30:23Z
    Exit code: 0
    Stdout:
    clippy 0.1.95 (59807616e1 2026-04-14)
    
  • plan: Start program rustc
    After 0.00 seconds at 2026-06-08 21:30:23Z
    • rustc
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-06-08 21:30:23Z
    Exit code: 0
    Stdout:
    rustc 1.95.0 (59807616e 2026-04-14)
    
  • plan: Start program cargo
    After 0.00 seconds at 2026-06-08 21:30:23Z
    • cargo
    • test
    • --offline
    • --locked
    • --workspace
  • plan: Program succeeded
    After 0.00 seconds at 2026-06-08 21:31:27Z
    Exit code: 0
    Stdout:
    running 123 tests
    test display::tests::describe_progress_maps_every_frame ... ok
    test node::lifecycle::tests::log_path_is_under_artifacts_dir ... ok
    test node::lifecycle::tests::rotate_log_moves_current_to_dot_one ... ok
    test node::tests::double_start_errors ... ok
    test client::tests::streaming_methods_round_trip ... ok
    test node::tests::fetch_and_download_fast_path_and_no_locations ... ok
    test node::tests::has_and_export_round_trip ... ok
    test node::tests::invalid_typed_fields_surface_as_invalid_request ... ok
    test node::tests::malformed_json_surfaces_as_invalid_request ... ok
    test node::tests::run_stream_aborts_on_client_disconnect ... ok
    test node::tests::node_round_trip ... ok
    test node::tests::seed_missing_path_errors ... ok
    test protocol::tests::wire_snapshot_command_alive ... ok
    test protocol::tests::wire_snapshot_command_has_export_fetch_download ... ok
    test protocol::tests::wire_snapshot_command_result_ok_and_err ... ok
    test protocol::tests::wire_snapshot_command_seed ... ok
    test protocol::tests::wire_snapshot_command_status ... ok
    test protocol::tests::wire_snapshot_command_unseed_and_lookups ... ok
    test protocol::tests::wire_snapshot_fetch_progress ... ok
    test protocol::tests::wire_snapshot_fetch_results ... ok
    test protocol::tests::wire_snapshot_receipts ... ok
    test protocol::tests::wire_snapshot_status_zeroed ... ok
    test protocol::tests::wire_snapshot_stream_event ... ok
    test seeder::tests::all_seeded_round_trip ... ok
    test seeder::tests::per_repo_tags_isolate ... ok
    test seeder::tests::seeded_tag_layout ... ok
    test seeder::tests::unregister_unknown_is_noop ... ok
    test share::cid_utils::tests::artifact_kind_blob ... ok
    test share::cid_utils::tests::artifact_kind_collection ... ok
    test share::cid_utils::tests::artifact_kind_unknown_codec ... ok
    test share::cid_utils::tests::blake3_hash_to_cid_blob_roundtrip ... ok
    test share::cid_utils::tests::blake3_hash_to_cid_collection_roundtrip ... ok
    test share::cid_utils::tests::canonical_walk_normalizes_separators ... ok
    test share::cid_utils::tests::canonical_walk_returns_absolute_paths ... ok
    test share::cid_utils::tests::canonical_walk_returns_sorted_entries ... ok
    test share::cid_utils::tests::canonical_walk_skips_directories ... ok
    test share::cid_utils::tests::cid_to_blake3_hash_rejects_sha256 ... ok
    test share::cid_utils::tests::cid_to_blake3_hash_roundtrip ... ok
    test share::cid_utils::tests::cid_to_blake3_works_with_hashseq_codec ... ok
    test share::cid_utils::tests::determinism ... ok
    test share::cid_utils::tests::golden_hash ... ok
    test share::cid_utils::tests::symlink_is_skipped ... ok
    test share::fetch::tests::export_collection_rejects_unsafe_member ... ok
    test share::fetch::tests::export_collection_writes_members ... ok
    test share::fetch::tests::http_to_store_imports_matching_blob ... ok
    test share::fetch::tests::http_to_store_rejects_mismatch ... ok
    test share::fetch::tests::safe_join_allows_nested_paths ... ok
    test share::fetch::tests::safe_join_rejects_traversal_and_absolute ... ok
    test share::fetch::tests::scoped_path_removes_dir_on_drop ... ok
    test share::fetch::tests::scoped_path_removes_file_on_drop ... ok
    test share::iroh::tests::default_uses_radworks_endpoints ... ok
    test share::iroh::tests::parse_env_rejects_malformed_value ... ok
    test share::iroh::tests::parse_relay_urls_comma_separated ... ok
    test share::iroh::tests::parse_relay_urls_rejects_malformed ... ok
    test share::keys::tests::display_differs_from_iroh_default ... ok
    test share::keys::tests::display_is_endpoint_url ... ok
    test share::keys::tests::encrypted_keystore_requires_passphrase ... ok
    test share::keys::tests::from_url_bare_is_none ... ok
    test share::keys::tests::from_url_garbage_host_errors ... ok
    test share::keys::tests::from_url_rejects_legacy_iroh_scheme ... ok
    test share::keys::tests::from_url_wrong_scheme_errors ... ok
    test share::keys::tests::fromstr_round_trip ... ok
    test share::keys::tests::is_endpoint_url_only_matches_endpoint_scheme ... ok
    test share::keys::tests::is_legacy_endpoint_url_matches_only_iroh_scheme ... ok
    test share::keys::tests::matches_url_rules ... ok
    test share::keys::tests::radicle_and_iroh_keys_share_same_public_identity ... ok
    test share::keys::tests::url_round_trip ... ok
    test test::add_location_for_missing_cid_is_noop ... ok
    test test::attest_missing_cid_is_noop ... ok
    test test::attestation_persists_through_reload ... ok
    test test::author_self_attestation_is_noop ... ok
    test test::create_records_tag_oid ... ok
    test test::create_rejects_commit_oid_as_tag ... ok
    test test::create_rejects_tag_pointing_at_other_commit ... ok
    test test::create_rejects_unknown_tag_oid ... ok
    test test::create_without_tag_leaves_none ... ok
    test test::creator_persists_through_reload ... ok
    test test::display_marks_seeding_for_local_endpoint_location ... ok
    test test::display_renders_metadata ... ok
    test test::e2e ... ok
    test test::find_by_cid_aggregates_across_different_oids ... ok
    test test::find_by_cid_aggregates_duplicate_oid_releases ... ok
    test test::find_by_cid_finds_across_releases ... ok
    test test::find_by_commit_returns_empty_for_no_match ... ok
    test test::find_by_commit_returns_matching_releases ... ok
    test test::get_mut_not_found ... ok
    test test::idempotent_attestation ... ok
    test test::idempotent_create ... ok
    test test::idempotent_register_artifact ... ok
    test test::locations_by_scheme_duplicate_url_from_two_dids ... ok
    test test::locations_by_scheme_filters_correctly ... ok
    test test::metadata_persists_through_reload ... ok
    test test::missing_commit ... ok
    test test::multi_delegate_attestation ... ok
    test test::multi_user_redaction ... ok
    test test::multi_user_same_reason ... ok
    test test::multiple_locations_per_node ... ok
    test test::non_author_cannot_rename_artifact ... ok
    test test::pretty_renders_compact_and_detailed ... ok
    test test::redact_artifact ... ok
    test test::redact_empty_reason ... ok
    test test::redact_nonexistent_cid_errors ... ok
    test test::redact_only_removes_own_attestation ... ok
    test test::redact_reason_too_long ... ok
    test test::redact_removes_attestation ... ok
    test test::redact_then_attest_is_blocked ... ok
    test test::redact_updates_reason ... ok
    test test::redaction_persists_through_reload ... ok
    test test::register_artifact_records_author ... ok
    test test::register_artifact_wire_name_stays_add_artifact ... ok
    test test::reload_refreshes_from_store ... ok
    test test::remove_location_for_node_that_never_added_is_noop ... ok
    test test::remove_metadata_drops_key ... ok
    test test::remove_metadata_for_missing_key_is_noop ... ok
    test test::set_metadata_accepts_json_object ... ok
    test test::set_metadata_basic ... ok
    test test::set_metadata_for_missing_cid_is_noop ... ok
    test test::set_metadata_last_writer_wins ... ok
    test test::set_metadata_rejects_invalid_keys ... ok
    test test::set_metadata_rejects_oversized_value ... ok
    test test::tag_field_default_none_on_old_actions ... ok
    test test::tag_persists_through_reload ... ok
    test node::tests::stale_socket_is_reclaimed ... ok
    
    test result: ok. 123 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 50.23s
    
    
    running 12 tests
    test reconcile::tests::bare_iroh_is_current_endpoint ... ok
    test reconcile::tests::current_endpoint_not_seeded_is_orphaned_self ... ok
    test reconcile::tests::explicit_current_endpoint_is_current ... ok
    test reconcile::tests::legacy_iroh_scheme_is_stale ... ok
    test reconcile::tests::missing_and_dangling_split_correctly ... ok
    test reconcile::tests::missing_picks_release_with_latest_timestamp ... ok
    test reconcile::tests::legacy_only_cid_is_reported_missing ... ok
    test reconcile::tests::mixed_urls_on_same_cid_split_into_buckets ... ok
    test reconcile::tests::other_endpoint_is_stale ... ok
    test reconcile::tests::seeded_cid_with_no_matching_release_is_dangling ... ok
    test reconcile::tests::seeded_with_current_location_is_not_missing ... ok
    test reconcile::tests::undecodable_host_is_stale ... ok
    
    test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
    
    
    running 1 test
    test src/lib.rs - (line 13) ... ok
    
    test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.49s
    
    
    Stderr:
       Compiling radicle-artifact v0.14.0 (/ci/src)
        Finished `test` profile [unoptimized + debuginfo] target(s) in 12.56s
         Running unittests src/lib.rs (/ci/cache/cargo-target/debug/deps/radicle_artifact-e3b5a10f2c673776)
         Running unittests src/bin/rad-artifact/main.rs (/ci/cache/cargo-target/debug/deps/rad_artifact-fcbce47adca04877)
       Doc-tests radicle_artifact
    
  • plan: Action succeeded cargo_test
    After 0.00 seconds at 2026-06-08 21:31:27Z
    CargoTest(
        CargoTest,
    )
plan: Successful action tar_create
After 75.85 seconds at 2026-06-08 21:31:27Z
  • plan: Start action tar_create
    After 0.00 seconds at 2026-06-08 21:31:27Z
    TarCreate(
        TarCreate {
            archive: "/dev/vde",
            directory: "/ci/cache",
        },
    )
  • plan: Action succeeded tar_create
    After 0.00 seconds at 2026-06-08 21:31:32Z
    TarCreate(
        TarCreate {
            archive: "/dev/vde",
            directory: "/ci/cache",
        },
    )
plan: Successful action tar_create
After 80.37 seconds at 2026-06-08 21:31:32Z
  • plan: Start action tar_create
    After 0.00 seconds at 2026-06-08 21:31:32Z
    TarCreate(
        TarCreate {
            archive: "/dev/vdd",
            directory: "/ci/artifacts",
        },
    )
  • plan: Action succeeded tar_create
    After 0.00 seconds at 2026-06-08 21:31:32Z
    TarCreate(
        TarCreate {
            archive: "/dev/vdd",
            directory: "/ci/artifacts",
        },
    )
plan: Plan succeeded
After 80.38 seconds at 2026-06-08 21:31:32ZHopefully all is good.

Raw log messages for Ambient troubleshooting

Raw log messages

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

  1. {
      "type": "executor_starts",
      "name": "ambient-execute-plan",
      "version": "0.14.0@c37ec71",
      "timestamp": {
        "secs_since_epoch": 1780954212,
        "nanos_since_epoch": 118265267
      },
      "log_source": "Plan"
    }
  2. {
      "type": "runnable_plan",
      "steps": [
        {
          "action": "mkdir",
          "pathname": "/ci"
        },
        {
          "action": "mkdir",
          "pathname": "/ci/artifacts"
        },
        {
          "action": "tar_extract",
          "archive": "/dev/vdc",
          "directory": "/ci/src"
        },
        {
          "action": "tar_extract",
          "archive": "/dev/vdf",
          "directory": "/ci/deps"
        },
        {
          "action": "tar_extract",
          "archive": "/dev/vde",
          "directory": "/ci/cache"
        },
        {
          "action": "shell",
          "shell": "ln -sf /ci /workspace"
        },
        {
          "action": "shell",
          "shell": "git config --global user.name 'Ambient CI'"
        },
        {
          "action": "shell",
          "shell": "git config --global user.email ambient@example.com"
        },
        {
          "action": "cargo_fmt"
        },
        {
          "action": "cargo_clippy"
        },
        {
          "action": "cargo_test"
        },
        {
          "action": "tar_create",
          "archive": "/dev/vde",
          "directory": "/ci/cache"
        },
        {
          "action": "tar_create",
          "archive": "/dev/vdd",
          "directory": "/ci/artifacts"
        }
      ],
      "executor_drive": "/dev/vdb",
      "source_drive": "/dev/vdc",
      "artifact_drive": "/dev/vdd",
      "cache_drive": "/dev/vde",
      "deps_drive": "/dev/vdf",
      "workspace_dir": "/ci",
      "source_dir": "/ci/src",
      "deps_dir": "/ci/deps",
      "cache_dir": "/ci/cache",
      "artifacts_dir": "/ci/artifacts",
      "envs": {},
      "timestamp": {
        "secs_since_epoch": 1780954212,
        "nanos_since_epoch": 118568498
      },
      "log_source": "Plan"
    }
  3. {
      "type": "execute_action",
      "action": "mkdir",
      "pathname": "/ci",
      "timestamp": {
        "secs_since_epoch": 1780954212,
        "nanos_since_epoch": 118634372
      },
      "log_source": "Plan"
    }
  4. {
      "type": "action_succeeded",
      "action": "mkdir",
      "pathname": "/ci",
      "timestamp": {
        "secs_since_epoch": 1780954212,
        "nanos_since_epoch": 119226383
      },
      "log_source": "Plan"
    }
  5. {
      "type": "execute_action",
      "action": "mkdir",
      "pathname": "/ci/artifacts",
      "timestamp": {
        "secs_since_epoch": 1780954212,
        "nanos_since_epoch": 119356365
      },
      "log_source": "Plan"
    }
  6. {
      "type": "action_succeeded",
      "action": "mkdir",
      "pathname": "/ci/artifacts",
      "timestamp": {
        "secs_since_epoch": 1780954212,
        "nanos_since_epoch": 119388169
      },
      "log_source": "Plan"
    }
  7. {
      "type": "execute_action",
      "action": "tar_extract",
      "archive": "/dev/vdc",
      "directory": "/ci/src",
      "timestamp": {
        "secs_since_epoch": 1780954212,
        "nanos_since_epoch": 119772548
      },
      "log_source": "Plan"
    }
  8. {
      "type": "action_succeeded",
      "action": "tar_extract",
      "archive": "/dev/vdc",
      "directory": "/ci/src",
      "timestamp": {
        "secs_since_epoch": 1780954212,
        "nanos_since_epoch": 151198472
      },
      "log_source": "Plan"
    }
  9. {
      "type": "execute_action",
      "action": "tar_extract",
      "archive": "/dev/vdf",
      "directory": "/ci/deps",
      "timestamp": {
        "secs_since_epoch": 1780954212,
        "nanos_since_epoch": 151649757
      },
      "log_source": "Plan"
    }
  10. {
      "type": "action_succeeded",
      "action": "tar_extract",
      "archive": "/dev/vdf",
      "directory": "/ci/deps",
      "timestamp": {
        "secs_since_epoch": 1780954214,
        "nanos_since_epoch": 227656689
      },
      "log_source": "Plan"
    }
  11. {
      "type": "execute_action",
      "action": "tar_extract",
      "archive": "/dev/vde",
      "directory": "/ci/cache",
      "timestamp": {
        "secs_since_epoch": 1780954214,
        "nanos_since_epoch": 228123156
      },
      "log_source": "Plan"
    }
  12. {
      "type": "action_succeeded",
      "action": "tar_extract",
      "archive": "/dev/vde",
      "directory": "/ci/cache",
      "timestamp": {
        "secs_since_epoch": 1780954219,
        "nanos_since_epoch": 265318448
      },
      "log_source": "Plan"
    }
  13. {
      "type": "execute_action",
      "action": "shell",
      "shell": "ln -sf /ci /workspace",
      "timestamp": {
        "secs_since_epoch": 1780954219,
        "nanos_since_epoch": 265807947
      },
      "log_source": "Plan"
    }
  14. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            98,
            97,
            115,
            104
          ]
        },
        {
          "Unix": [
            45,
            99
          ]
        },
        {
          "Unix": [
            115,
            101,
            116,
            32,
            45,
            120,
            101,
            117,
            111,
            32,
            112,
            105,
            112,
            101,
            102,
            97,
            105,
            108,
            10,
            108,
            110,
            32,
            45,
            115,
            102,
            32,
            47,
            99,
            105,
            32,
            47,
            119,
            111,
            114,
            107,
            115,
            112,
            97,
            99,
            101,
            10
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1780954219,
        "nanos_since_epoch": 266016024
      },
      "log_source": "Plan"
    }
  15. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "",
      "stderr": "+ ln -sf /ci /workspace\n",
      "timestamp": {
        "secs_since_epoch": 1780954219,
        "nanos_since_epoch": 277223332
      },
      "log_source": "Plan"
    }
  16. {
      "type": "action_succeeded",
      "action": "shell",
      "shell": "ln -sf /ci /workspace",
      "timestamp": {
        "secs_since_epoch": 1780954219,
        "nanos_since_epoch": 277664795
      },
      "log_source": "Plan"
    }
  17. {
      "type": "execute_action",
      "action": "shell",
      "shell": "git config --global user.name 'Ambient CI'",
      "timestamp": {
        "secs_since_epoch": 1780954219,
        "nanos_since_epoch": 277868707
      },
      "log_source": "Plan"
    }
  18. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            98,
            97,
            115,
            104
          ]
        },
        {
          "Unix": [
            45,
            99
          ]
        },
        {
          "Unix": [
            115,
            101,
            116,
            32,
            45,
            120,
            101,
            117,
            111,
            32,
            112,
            105,
            112,
            101,
            102,
            97,
            105,
            108,
            10,
            103,
            105,
            116,
            32,
            99,
            111,
            110,
            102,
            105,
            103,
            32,
            45,
            45,
            103,
            108,
            111,
            98,
            97,
            108,
            32,
            117,
            115,
            101,
            114,
            46,
            110,
            97,
            109,
            101,
            32,
            39,
            65,
            109,
            98,
            105,
            101,
            110,
            116,
            32,
            67,
            73,
            39,
            10
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1780954219,
        "nanos_since_epoch": 277876385
      },
      "log_source": "Plan"
    }
  19. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "",
      "stderr": "+ git config --global user.name 'Ambient CI'\n",
      "timestamp": {
        "secs_since_epoch": 1780954219,
        "nanos_since_epoch": 294787884
      },
      "log_source": "Plan"
    }
  20. {
      "type": "action_succeeded",
      "action": "shell",
      "shell": "git config --global user.name 'Ambient CI'",
      "timestamp": {
        "secs_since_epoch": 1780954219,
        "nanos_since_epoch": 295231271
      },
      "log_source": "Plan"
    }
  21. {
      "type": "execute_action",
      "action": "shell",
      "shell": "git config --global user.email ambient@example.com",
      "timestamp": {
        "secs_since_epoch": 1780954219,
        "nanos_since_epoch": 295438357
      },
      "log_source": "Plan"
    }
  22. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            98,
            97,
            115,
            104
          ]
        },
        {
          "Unix": [
            45,
            99
          ]
        },
        {
          "Unix": [
            115,
            101,
            116,
            32,
            45,
            120,
            101,
            117,
            111,
            32,
            112,
            105,
            112,
            101,
            102,
            97,
            105,
            108,
            10,
            103,
            105,
            116,
            32,
            99,
            111,
            110,
            102,
            105,
            103,
            32,
            45,
            45,
            103,
            108,
            111,
            98,
            97,
            108,
            32,
            117,
            115,
            101,
            114,
            46,
            101,
            109,
            97,
            105,
            108,
            32,
            97,
            109,
            98,
            105,
            101,
            110,
            116,
            64,
            101,
            120,
            97,
            109,
            112,
            108,
            101,
            46,
            99,
            111,
            109,
            10
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1780954219,
        "nanos_since_epoch": 295446747
      },
      "log_source": "Plan"
    }
  23. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "",
      "stderr": "+ git config --global user.email ambient@example.com\n",
      "timestamp": {
        "secs_since_epoch": 1780954219,
        "nanos_since_epoch": 310513217
      },
      "log_source": "Plan"
    }
  24. {
      "type": "action_succeeded",
      "action": "shell",
      "shell": "git config --global user.email ambient@example.com",
      "timestamp": {
        "secs_since_epoch": 1780954219,
        "nanos_since_epoch": 313497532
      },
      "log_source": "Plan"
    }
  25. {
      "type": "execute_action",
      "action": "cargo_fmt",
      "timestamp": {
        "secs_since_epoch": 1780954219,
        "nanos_since_epoch": 316183275
      },
      "log_source": "Plan"
    }
  26. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            99,
            97,
            114,
            103,
            111
          ]
        },
        {
          "Unix": [
            45,
            45,
            118,
            101,
            114,
            115,
            105,
            111,
            110
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1780954219,
        "nanos_since_epoch": 318125438
      },
      "log_source": "Plan"
    }
  27. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "cargo 1.95.0 (f2d3ce0bd 2026-03-21)\n",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1780954219,
        "nanos_since_epoch": 348083234
      },
      "log_source": "Plan"
    }
  28. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            99,
            97,
            114,
            103,
            111
          ]
        },
        {
          "Unix": [
            99,
            108,
            105,
            112,
            112,
            121
          ]
        },
        {
          "Unix": [
            45,
            45,
            118,
            101,
            114,
            115,
            105,
            111,
            110
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1780954219,
        "nanos_since_epoch": 350846398
      },
      "log_source": "Plan"
    }
  29. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "clippy 0.1.95 (59807616e1 2026-04-14)\n",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1780954219,
        "nanos_since_epoch": 404672708
      },
      "log_source": "Plan"
    }
  30. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            114,
            117,
            115,
            116,
            99
          ]
        },
        {
          "Unix": [
            45,
            45,
            118,
            101,
            114,
            115,
            105,
            111,
            110
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1780954219,
        "nanos_since_epoch": 405145036
      },
      "log_source": "Plan"
    }
  31. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "rustc 1.95.0 (59807616e 2026-04-14)\n",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1780954219,
        "nanos_since_epoch": 424753621
      },
      "log_source": "Plan"
    }
  32. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            99,
            97,
            114,
            103,
            111
          ]
        },
        {
          "Unix": [
            102,
            109,
            116
          ]
        },
        {
          "Unix": [
            45,
            45,
            99,
            104,
            101,
            99,
            107
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1780954219,
        "nanos_since_epoch": 425230013
      },
      "log_source": "Plan"
    }
  33. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1780954219,
        "nanos_since_epoch": 590091481
      },
      "log_source": "Plan"
    }
  34. {
      "type": "action_succeeded",
      "action": "cargo_fmt",
      "timestamp": {
        "secs_since_epoch": 1780954219,
        "nanos_since_epoch": 590554571
      },
      "log_source": "Plan"
    }
  35. {
      "type": "execute_action",
      "action": "cargo_clippy",
      "timestamp": {
        "secs_since_epoch": 1780954219,
        "nanos_since_epoch": 590762411
      },
      "log_source": "Plan"
    }
  36. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            99,
            97,
            114,
            103,
            111
          ]
        },
        {
          "Unix": [
            45,
            45,
            118,
            101,
            114,
            115,
            105,
            111,
            110
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1780954219,
        "nanos_since_epoch": 590771251
      },
      "log_source": "Plan"
    }
  37. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "cargo 1.95.0 (f2d3ce0bd 2026-03-21)\n",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1780954219,
        "nanos_since_epoch": 606646413
      },
      "log_source": "Plan"
    }
  38. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            99,
            97,
            114,
            103,
            111
          ]
        },
        {
          "Unix": [
            99,
            108,
            105,
            112,
            112,
            121
          ]
        },
        {
          "Unix": [
            45,
            45,
            118,
            101,
            114,
            115,
            105,
            111,
            110
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1780954219,
        "nanos_since_epoch": 609381378
      },
      "log_source": "Plan"
    }
  39. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "clippy 0.1.95 (59807616e1 2026-04-14)\n",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1780954219,
        "nanos_since_epoch": 637853534
      },
      "log_source": "Plan"
    }
  40. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            114,
            117,
            115,
            116,
            99
          ]
        },
        {
          "Unix": [
            45,
            45,
            118,
            101,
            114,
            115,
            105,
            111,
            110
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1780954219,
        "nanos_since_epoch": 640545959
      },
      "log_source": "Plan"
    }
  41. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "rustc 1.95.0 (59807616e 2026-04-14)\n",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1780954219,
        "nanos_since_epoch": 654850326
      },
      "log_source": "Plan"
    }
  42. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            99,
            97,
            114,
            103,
            111
          ]
        },
        {
          "Unix": [
            99,
            108,
            105,
            112,
            112,
            121
          ]
        },
        {
          "Unix": [
            45,
            45,
            111,
            102,
            102,
            108,
            105,
            110,
            101
          ]
        },
        {
          "Unix": [
            45,
            45,
            108,
            111,
            99,
            107,
            101,
            100
          ]
        },
        {
          "Unix": [
            45,
            45,
            119,
            111,
            114,
            107,
            115,
            112,
            97,
            99,
            101
          ]
        },
        {
          "Unix": [
            45,
            45,
            97,
            108,
            108,
            45,
            116,
            97,
            114,
            103,
            101,
            116,
            115
          ]
        },
        {
          "Unix": [
            45,
            45,
            110,
            111,
            45,
            100,
            101,
            112,
            115
          ]
        },
        {
          "Unix": [
            45,
            45
          ]
        },
        {
          "Unix": [
            45,
            45,
            100,
            101,
            110,
            121
          ]
        },
        {
          "Unix": [
            119,
            97,
            114,
            110,
            105,
            110,
            103,
            115
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1780954219,
        "nanos_since_epoch": 657580433
      },
      "log_source": "Plan"
    }
  43. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "",
      "stderr": "    Checking radicle-artifact v0.14.0 (/ci/src)\n    Finished `dev` profile [unoptimized + debuginfo] target(s) in 3.54s\n",
      "timestamp": {
        "secs_since_epoch": 1780954223,
        "nanos_since_epoch": 267899711
      },
      "log_source": "Plan"
    }
  44. {
      "type": "action_succeeded",
      "action": "cargo_clippy",
      "timestamp": {
        "secs_since_epoch": 1780954223,
        "nanos_since_epoch": 268374288
      },
      "log_source": "Plan"
    }
  45. {
      "type": "execute_action",
      "action": "cargo_test",
      "timestamp": {
        "secs_since_epoch": 1780954223,
        "nanos_since_epoch": 268578208
      },
      "log_source": "Plan"
    }
  46. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            99,
            97,
            114,
            103,
            111
          ]
        },
        {
          "Unix": [
            45,
            45,
            118,
            101,
            114,
            115,
            105,
            111,
            110
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1780954223,
        "nanos_since_epoch": 268587162
      },
      "log_source": "Plan"
    }
  47. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "cargo 1.95.0 (f2d3ce0bd 2026-03-21)\n",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1780954223,
        "nanos_since_epoch": 286819811
      },
      "log_source": "Plan"
    }
  48. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            99,
            97,
            114,
            103,
            111
          ]
        },
        {
          "Unix": [
            99,
            108,
            105,
            112,
            112,
            121
          ]
        },
        {
          "Unix": [
            45,
            45,
            118,
            101,
            114,
            115,
            105,
            111,
            110
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1780954223,
        "nanos_since_epoch": 287274375
      },
      "log_source": "Plan"
    }
  49. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "clippy 0.1.95 (59807616e1 2026-04-14)\n",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1780954223,
        "nanos_since_epoch": 318983852
      },
      "log_source": "Plan"
    }
  50. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            114,
            117,
            115,
            116,
            99
          ]
        },
        {
          "Unix": [
            45,
            45,
            118,
            101,
            114,
            115,
            105,
            111,
            110
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1780954223,
        "nanos_since_epoch": 319437323
      },
      "log_source": "Plan"
    }
  51. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "rustc 1.95.0 (59807616e 2026-04-14)\n",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1780954223,
        "nanos_since_epoch": 335901458
      },
      "log_source": "Plan"
    }
  52. {
      "type": "start_program",
      "argv": [
        {
          "Unix": [
            99,
            97,
            114,
            103,
            111
          ]
        },
        {
          "Unix": [
            116,
            101,
            115,
            116
          ]
        },
        {
          "Unix": [
            45,
            45,
            111,
            102,
            102,
            108,
            105,
            110,
            101
          ]
        },
        {
          "Unix": [
            45,
            45,
            108,
            111,
            99,
            107,
            101,
            100
          ]
        },
        {
          "Unix": [
            45,
            45,
            119,
            111,
            114,
            107,
            115,
            112,
            97,
            99,
            101
          ]
        }
      ],
      "timestamp": {
        "secs_since_epoch": 1780954223,
        "nanos_since_epoch": 338639775
      },
      "log_source": "Plan"
    }
  53. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "\nrunning 123 tests\ntest display::tests::describe_progress_maps_every_frame ... ok\ntest node::lifecycle::tests::log_path_is_under_artifacts_dir ... ok\ntest node::lifecycle::tests::rotate_log_moves_current_to_dot_one ... ok\ntest node::tests::double_start_errors ... ok\ntest client::tests::streaming_methods_round_trip ... ok\ntest node::tests::fetch_and_download_fast_path_and_no_locations ... ok\ntest node::tests::has_and_export_round_trip ... ok\ntest node::tests::invalid_typed_fields_surface_as_invalid_request ... ok\ntest node::tests::malformed_json_surfaces_as_invalid_request ... ok\ntest node::tests::run_stream_aborts_on_client_disconnect ... ok\ntest node::tests::node_round_trip ... ok\ntest node::tests::seed_missing_path_errors ... ok\ntest protocol::tests::wire_snapshot_command_alive ... ok\ntest protocol::tests::wire_snapshot_command_has_export_fetch_download ... ok\ntest protocol::tests::wire_snapshot_command_result_ok_and_err ... ok\ntest protocol::tests::wire_snapshot_command_seed ... ok\ntest protocol::tests::wire_snapshot_command_status ... ok\ntest protocol::tests::wire_snapshot_command_unseed_and_lookups ... ok\ntest protocol::tests::wire_snapshot_fetch_progress ... ok\ntest protocol::tests::wire_snapshot_fetch_results ... ok\ntest protocol::tests::wire_snapshot_receipts ... ok\ntest protocol::tests::wire_snapshot_status_zeroed ... ok\ntest protocol::tests::wire_snapshot_stream_event ... ok\ntest seeder::tests::all_seeded_round_trip ... ok\ntest seeder::tests::per_repo_tags_isolate ... ok\ntest seeder::tests::seeded_tag_layout ... ok\ntest seeder::tests::unregister_unknown_is_noop ... ok\ntest share::cid_utils::tests::artifact_kind_blob ... ok\ntest share::cid_utils::tests::artifact_kind_collection ... ok\ntest share::cid_utils::tests::artifact_kind_unknown_codec ... ok\ntest share::cid_utils::tests::blake3_hash_to_cid_blob_roundtrip ... ok\ntest share::cid_utils::tests::blake3_hash_to_cid_collection_roundtrip ... ok\ntest share::cid_utils::tests::canonical_walk_normalizes_separators ... ok\ntest share::cid_utils::tests::canonical_walk_returns_absolute_paths ... ok\ntest share::cid_utils::tests::canonical_walk_returns_sorted_entries ... ok\ntest share::cid_utils::tests::canonical_walk_skips_directories ... ok\ntest share::cid_utils::tests::cid_to_blake3_hash_rejects_sha256 ... ok\ntest share::cid_utils::tests::cid_to_blake3_hash_roundtrip ... ok\ntest share::cid_utils::tests::cid_to_blake3_works_with_hashseq_codec ... ok\ntest share::cid_utils::tests::determinism ... ok\ntest share::cid_utils::tests::golden_hash ... ok\ntest share::cid_utils::tests::symlink_is_skipped ... ok\ntest share::fetch::tests::export_collection_rejects_unsafe_member ... ok\ntest share::fetch::tests::export_collection_writes_members ... ok\ntest share::fetch::tests::http_to_store_imports_matching_blob ... ok\ntest share::fetch::tests::http_to_store_rejects_mismatch ... ok\ntest share::fetch::tests::safe_join_allows_nested_paths ... ok\ntest share::fetch::tests::safe_join_rejects_traversal_and_absolute ... ok\ntest share::fetch::tests::scoped_path_removes_dir_on_drop ... ok\ntest share::fetch::tests::scoped_path_removes_file_on_drop ... ok\ntest share::iroh::tests::default_uses_radworks_endpoints ... ok\ntest share::iroh::tests::parse_env_rejects_malformed_value ... ok\ntest share::iroh::tests::parse_relay_urls_comma_separated ... ok\ntest share::iroh::tests::parse_relay_urls_rejects_malformed ... ok\ntest share::keys::tests::display_differs_from_iroh_default ... ok\ntest share::keys::tests::display_is_endpoint_url ... ok\ntest share::keys::tests::encrypted_keystore_requires_passphrase ... ok\ntest share::keys::tests::from_url_bare_is_none ... ok\ntest share::keys::tests::from_url_garbage_host_errors ... ok\ntest share::keys::tests::from_url_rejects_legacy_iroh_scheme ... ok\ntest share::keys::tests::from_url_wrong_scheme_errors ... ok\ntest share::keys::tests::fromstr_round_trip ... ok\ntest share::keys::tests::is_endpoint_url_only_matches_endpoint_scheme ... ok\ntest share::keys::tests::is_legacy_endpoint_url_matches_only_iroh_scheme ... ok\ntest share::keys::tests::matches_url_rules ... ok\ntest share::keys::tests::radicle_and_iroh_keys_share_same_public_identity ... ok\ntest share::keys::tests::url_round_trip ... ok\ntest test::add_location_for_missing_cid_is_noop ... ok\ntest test::attest_missing_cid_is_noop ... ok\ntest test::attestation_persists_through_reload ... ok\ntest test::author_self_attestation_is_noop ... ok\ntest test::create_records_tag_oid ... ok\ntest test::create_rejects_commit_oid_as_tag ... ok\ntest test::create_rejects_tag_pointing_at_other_commit ... ok\ntest test::create_rejects_unknown_tag_oid ... ok\ntest test::create_without_tag_leaves_none ... ok\ntest test::creator_persists_through_reload ... ok\ntest test::display_marks_seeding_for_local_endpoint_location ... ok\ntest test::display_renders_metadata ... ok\ntest test::e2e ... ok\ntest test::find_by_cid_aggregates_across_different_oids ... ok\ntest test::find_by_cid_aggregates_duplicate_oid_releases ... ok\ntest test::find_by_cid_finds_across_releases ... ok\ntest test::find_by_commit_returns_empty_for_no_match ... ok\ntest test::find_by_commit_returns_matching_releases ... ok\ntest test::get_mut_not_found ... ok\ntest test::idempotent_attestation ... ok\ntest test::idempotent_create ... ok\ntest test::idempotent_register_artifact ... ok\ntest test::locations_by_scheme_duplicate_url_from_two_dids ... ok\ntest test::locations_by_scheme_filters_correctly ... ok\ntest test::metadata_persists_through_reload ... ok\ntest test::missing_commit ... ok\ntest test::multi_delegate_attestation ... ok\ntest test::multi_user_redaction ... ok\ntest test::multi_user_same_reason ... ok\ntest test::multiple_locations_per_node ... ok\ntest test::non_author_cannot_rename_artifact ... ok\ntest test::pretty_renders_compact_and_detailed ... ok\ntest test::redact_artifact ... ok\ntest test::redact_empty_reason ... ok\ntest test::redact_nonexistent_cid_errors ... ok\ntest test::redact_only_removes_own_attestation ... ok\ntest test::redact_reason_too_long ... ok\ntest test::redact_removes_attestation ... ok\ntest test::redact_then_attest_is_blocked ... ok\ntest test::redact_updates_reason ... ok\ntest test::redaction_persists_through_reload ... ok\ntest test::register_artifact_records_author ... ok\ntest test::register_artifact_wire_name_stays_add_artifact ... ok\ntest test::reload_refreshes_from_store ... ok\ntest test::remove_location_for_node_that_never_added_is_noop ... ok\ntest test::remove_metadata_drops_key ... ok\ntest test::remove_metadata_for_missing_key_is_noop ... ok\ntest test::set_metadata_accepts_json_object ... ok\ntest test::set_metadata_basic ... ok\ntest test::set_metadata_for_missing_cid_is_noop ... ok\ntest test::set_metadata_last_writer_wins ... ok\ntest test::set_metadata_rejects_invalid_keys ... ok\ntest test::set_metadata_rejects_oversized_value ... ok\ntest test::tag_field_default_none_on_old_actions ... ok\ntest test::tag_persists_through_reload ... ok\ntest node::tests::stale_socket_is_reclaimed ... ok\n\ntest result: ok. 123 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 50.23s\n\n\nrunning 12 tests\ntest reconcile::tests::bare_iroh_is_current_endpoint ... ok\ntest reconcile::tests::current_endpoint_not_seeded_is_orphaned_self ... ok\ntest reconcile::tests::explicit_current_endpoint_is_current ... ok\ntest reconcile::tests::legacy_iroh_scheme_is_stale ... ok\ntest reconcile::tests::missing_and_dangling_split_correctly ... ok\ntest reconcile::tests::missing_picks_release_with_latest_timestamp ... ok\ntest reconcile::tests::legacy_only_cid_is_reported_missing ... ok\ntest reconcile::tests::mixed_urls_on_same_cid_split_into_buckets ... ok\ntest reconcile::tests::other_endpoint_is_stale ... ok\ntest reconcile::tests::seeded_cid_with_no_matching_release_is_dangling ... ok\ntest reconcile::tests::seeded_with_current_location_is_not_missing ... ok\ntest reconcile::tests::undecodable_host_is_stale ... ok\n\ntest result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 1 test\ntest src/lib.rs - (line 13) ... ok\n\ntest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.49s\n\n",
      "stderr": "   Compiling radicle-artifact v0.14.0 (/ci/src)\n    Finished `test` profile [unoptimized + debuginfo] target(s) in 12.56s\n     Running unittests src/lib.rs (/ci/cache/cargo-target/debug/deps/radicle_artifact-e3b5a10f2c673776)\n     Running unittests src/bin/rad-artifact/main.rs (/ci/cache/cargo-target/debug/deps/rad_artifact-fcbce47adca04877)\n   Doc-tests radicle_artifact\n",
      "timestamp": {
        "secs_since_epoch": 1780954287,
        "nanos_since_epoch": 889034737
      },
      "log_source": "Plan"
    }
  54. {
      "type": "action_succeeded",
      "action": "cargo_test",
      "timestamp": {
        "secs_since_epoch": 1780954287,
        "nanos_since_epoch": 969498172
      },
      "log_source": "Plan"
    }
  55. {
      "type": "execute_action",
      "action": "tar_create",
      "archive": "/dev/vde",
      "directory": "/ci/cache",
      "timestamp": {
        "secs_since_epoch": 1780954287,
        "nanos_since_epoch": 969672522
      },
      "log_source": "Plan"
    }
  56. {
      "type": "action_succeeded",
      "action": "tar_create",
      "archive": "/dev/vde",
      "directory": "/ci/cache",
      "timestamp": {
        "secs_since_epoch": 1780954292,
        "nanos_since_epoch": 485351425
      },
      "log_source": "Plan"
    }
  57. {
      "type": "execute_action",
      "action": "tar_create",
      "archive": "/dev/vdd",
      "directory": "/ci/artifacts",
      "timestamp": {
        "secs_since_epoch": 1780954292,
        "nanos_since_epoch": 488395471
      },
      "log_source": "Plan"
    }
  58. {
      "type": "action_succeeded",
      "action": "tar_create",
      "archive": "/dev/vdd",
      "directory": "/ci/artifacts",
      "timestamp": {
        "secs_since_epoch": 1780954292,
        "nanos_since_epoch": 493558745
      },
      "log_source": "Plan"
    }
  59. {
      "type": "plan_succeeded",
      "timestamp": {
        "secs_since_epoch": 1780954292,
        "nanos_since_epoch": 500010808
      },
      "log_source": "Plan"
    }
  60. {
      "type": "executor_ends_successfully",
      "timestamp": {
        "secs_since_epoch": 1780954292,
        "nanos_since_epoch": 502308398
      },
      "log_source": "Plan"
    }

Trigger message

{
  "request": "trigger",
  "version": 1,
  "event_type": "patch",
  "repository": {
    "id": "rad:z4VYyJ9KuwMNkXGQnmKuGPGKw3inv",
    "name": "radicle-artifact",
    "description": "Secure artifact distribution for Radicle",
    "private": false,
    "default_branch": "main",
    "delegates": [
      "did:key:z6MktwkohCx8aHZ1QCjVZUiLmX92oPZFxRiFZkbq32Tk5Tkm"
    ]
  },
  "action": "Updated",
  "patch": {
    "id": "9a0a5773c4b624f2e004b6f58875f6de3b64f1aa",
    "author": {
      "id": "did:key:z6MktwkohCx8aHZ1QCjVZUiLmX92oPZFxRiFZkbq32Tk5Tkm",
      "alias": "2color"
    },
    "title": "Final polish before release",
    "state": {
      "status": "open",
      "conflicts": []
    },
    "before": "8a545e7378e1eb87a638b66d045bc584219c510b",
    "after": "566c83661af6e2b2b6c152ec5a343c467b0f41aa",
    "commits": [
      "566c83661af6e2b2b6c152ec5a343c467b0f41aa",
      "8801c230ebcf06fbb6d0d163e896b0c9d32a95bd",
      "0bc438853e4832fef2c4063f2e30f1ba25d541d5",
      "8f2e854d426b46259bf6d78acd71f4ae3a9483ba",
      "ad07656b289886efc61707c34bce61f5bf24eec6",
      "020000d03213f91f0cf84bd9d5caac05b2083935",
      "c9283bab842c78024d5edd5946670d5cc1c1bbc4",
      "431b02d1d25c4b0269171877ab26ddce1e06f78c",
      "0c3876f8d4e351affd3c4d0aaec02069b06e948e",
      "6b007d28c752e1b8849a93b918b55cda3b836509",
      "3877a911ac38aaed09fa35327b7d1e6c4f1d6b42",
      "89c664c04b2ae45825e7e52d2b6d3d1ac603cdf5",
      "1f8b654c24f7cad71c7a4dd698697549b33e6942",
      "f46994a0b966df59f2fb24ff7b4d307497e5da50",
      "35b380033dec70a25cb07f862ef52ee6e3a09ffb",
      "6ed957023342a1ae745fb5a1d27b0e3fac75bfe8"
    ],
    "target": "8a545e7378e1eb87a638b66d045bc584219c510b",
    "labels": [],
    "assignees": [],
    "revisions": [
      {
        "id": "9a0a5773c4b624f2e004b6f58875f6de3b64f1aa",
        "author": {
          "id": "did:key:z6MktwkohCx8aHZ1QCjVZUiLmX92oPZFxRiFZkbq32Tk5Tkm",
          "alias": "2color"
        },
        "description": "feat(cli): warm up node command output\ndocs: distinguish creating a Release from registering Artifacts\nfeat(display): mark seeded artifacts with a seedling\ndocs: document the location url types\nrefactor: speak Location, not provider, in fetch protocol\nrefactor: extract EndpointId::matches_url helper\ndocs: speak add, not register, for Locations\nrefactor(display): drop seeding bool from JSON",
        "base": "f8e221167c53beabbe4395b8507398f87cd57bf3",
        "oid": "58ae654d343e5f8e0e1d8ceb622440855d8734d0",
        "timestamp": 1780606962
      },
      {
        "id": "2c821f712f2ee37050420f07915ae7f02c2d1760",
        "author": {
          "id": "did:key:z6MktwkohCx8aHZ1QCjVZUiLmX92oPZFxRiFZkbq32Tk5Tkm",
          "alias": "2color"
        },
        "description": "Refinements",
        "base": "f8e221167c53beabbe4395b8507398f87cd57bf3",
        "oid": "8b66fb0e55f48a0eddd0c3ccda87c78704bf9ecb",
        "timestamp": 1780656623
      },
      {
        "id": "5b249be0a53a6b9f5b818c8ece0b292a79aec1c7",
        "author": {
          "id": "did:key:z6MktwkohCx8aHZ1QCjVZUiLmX92oPZFxRiFZkbq32Tk5Tkm",
          "alias": "2color"
        },
        "description": "rewrite history",
        "base": "f8e221167c53beabbe4395b8507398f87cd57bf3",
        "oid": "f46994a0b966df59f2fb24ff7b4d307497e5da50",
        "timestamp": 1780660361
      },
      {
        "id": "5185813838e75b99d310abe698fc73f41139319c",
        "author": {
          "id": "did:key:z6MktwkohCx8aHZ1QCjVZUiLmX92oPZFxRiFZkbq32Tk5Tkm",
          "alias": "2color"
        },
        "description": "docs: update changelog\n\n\nfix(fetch): resolve output path against CLI cwd\n\n- make the fetch destination absolute before handing it to the node;\n  the node is a daemon with a different cwd, so a relative path\n  resolved to the wrong location and the export failed\n- wrap export errors with the destination path so the failure is no\n  longer an opaque IO error",
        "base": "8a545e7378e1eb87a638b66d045bc584219c510b",
        "oid": "02214948ca6e255bddad6dd1a081d49223bd88f7",
        "timestamp": 1780673635
      },
      {
        "id": "dabc7cab899d9ffc9eea6d22eae372321aef2391",
        "author": {
          "id": "did:key:z6MktwkohCx8aHZ1QCjVZUiLmX92oPZFxRiFZkbq32Tk5Tkm",
          "alias": "2color"
        },
        "description": "",
        "base": "8a545e7378e1eb87a638b66d045bc584219c510b",
        "oid": "89c664c04b2ae45825e7e52d2b6d3d1ac603cdf5",
        "timestamp": 1780687443
      },
      {
        "id": "dfb286709c1e55036f5122994a60ba14652bccc2",
        "author": {
          "id": "did:key:z6MktwkohCx8aHZ1QCjVZUiLmX92oPZFxRiFZkbq32Tk5Tkm",
          "alias": "2color"
        },
        "description": "feat(protocol): split Fetch into store-only Fetch and disk Download\n\n- make Command::Fetch pull into the store only; drop its dest field\n- add Command::Download (Fetch + export to dest) for disk writes\n- FetchReceipt drops dest, reports logical store size as bytes\n- add DownloadReceipt mirroring the old FetchReceipt shape\n\nLets callers warm the store without committing to a disk path,\nkeeping the disk-export path as a distinct, explicitly-named command.\n\n\nfeat(node,client): handle store-only Fetch and disk Download\n\n- extract ensure_complete_in_store as the shared download core\n- stream_fetch tags/returns without writing to disk\n- stream_download exports to dest after the store is complete\n- add Client::download + DownloadArgs; fetch drops dest\n- update node and client tests to cover both paths\n\n\nfeat(cli): rename fetch to download, add store-only fetch\n\n- rename the disk-writing subcommand to `download`\n- add `fetch` to pull an artifact into the store without a file\n- extract resolve_retrieval/announce_seed_location shared helpers\n- update README workflow and command reference\n\nGives users a way to warm the store (or seed) without committing to\nan on-disk path, matching the split protocol commands.\n\n\ndocs: define Fetch and Download terms\n\n- Fetch pulls bytes into the store; Download also writes to disk\n- record the avoid-list so the two stay distinct in copy\n\n\nrefactor(node): introduce TempTagGuard for the temp-tag lifecycle\n\n- wrap the temp tag in a guard carrying (rid, cid, kind, hash)\n- commit(seed) sets the Seeded Tag then releases, in order; consuming\n  self makes post-commit work a compile error\n- fold the CID-resolution prologue into TempTagGuard::ensure, dropping\n  the duplicated kind/haf/hash block from both stream handlers\n- unit-test commit/abort directly against a bare store\n\nConcentrates the seed-before-release ordering invariant in one place\ninstead of re-spelling it per handler, where a reorder could slip by.\n\n\nrefactor(display): centralize FetchProgress rendering\n\n- add describe_progress mapping FetchProgress to a ProgressUpdate value\n- collapse the duplicated match closures in fetch/download to apply_progress\n- exhaustive match in-crate, so a new progress variant is a compile error\n  rather than a silent drop at the CLI wildcard\n- unit-test every frame's mapping\n\nThe mapping was duplicated at both CLI call sites with a _ => {} that\nswallowed unfamiliar frames; now it lives once and is testable.\n\n\nrefactor(client): extract run_blocking for the blocking twins\n\n- collapse the per-method current-thread runtime construction into one\n  run_blocking helper\n- call_blocking and the fetch/download/export _blocking twins delegate\n\nConcentrates the runtime-setup knowledge in one place.\n\n\ndocs: define Temp Tag in CONTEXT.md\n\n- record the transient GC protection held during a Fetch/Download as\n  the short-lived counterpart to a Seeded Tag\n\n\nrefactor: rename to tag\n\nregister is a COB operation. local store operation\nis just tagging\n\n\nfix: check storage for seeded bytes correctly",
        "base": "8a545e7378e1eb87a638b66d045bc584219c510b",
        "oid": "8801c230ebcf06fbb6d0d163e896b0c9d32a95bd",
        "timestamp": 1780950517
      },
      {
        "id": "f610c5be629469929d19d034b356b405937a1146",
        "author": {
          "id": "did:key:z6MktwkohCx8aHZ1QCjVZUiLmX92oPZFxRiFZkbq32Tk5Tkm",
          "alias": "2color"
        },
        "description": "refactor(node): simplify fetch result to a plain struct\n\n- replace TempTagGuard with a Fetched data struct + fetch_into_store\n- drop the commit/accessor methods; handlers seed inline and let the\n  temp tag drop at scope end (still held until the Seeded Tag is set)\n- rename the misnamed ensure to the Fetch verb (fetch_into_store)\n\nThe guard type was more machinery than the invariant needed; RAII\nrelease plus completeness-in-the-constructor is all that's load-bearing.",
        "base": "8a545e7378e1eb87a638b66d045bc584219c510b",
        "oid": "566c83661af6e2b2b6c152ec5a343c467b0f41aa",
        "timestamp": 1780954195
      }
    ]
  }
}

Ambient stdout

executor from config: /usr/bin/ambient-execute-plan
executor from PATH: /usr/bin/ambient-execute-plan
run CI for rad:z4VYyJ9KuwMNkXGQnmKuGPGKw3inv

Ambient stderr

<empty log>