CI: SUCCESS radicle-artifact

Table of Contents

Run log

Plan, inside VM without network

plan: Executor starts
After 0.00 seconds at 2026-06-01 12:46:18ZProgram: ambient-execute-plan
Version: 0.14.0@c37ec71
plan: Runnable plan
After 0.00 seconds at 2026-06-01 12:46:18Z
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-01 12:46:18Z
  • plan: Start action mkdir: /ci
    After 0.00 seconds at 2026-06-01 12:46:18Z
    Mkdir(
        Mkdir {
            pathname: "/ci",
        },
    )
  • plan: Action succeeded mkdir: /ci
    After 0.00 seconds at 2026-06-01 12:46:18Z
    Mkdir(
        Mkdir {
            pathname: "/ci",
        },
    )
plan: Successful action mkdir: /ci/artifacts
After 0.00 seconds at 2026-06-01 12:46:18Z
  • plan: Start action mkdir: /ci/artifacts
    After 0.00 seconds at 2026-06-01 12:46:18Z
    Mkdir(
        Mkdir {
            pathname: "/ci/artifacts",
        },
    )
  • plan: Action succeeded mkdir: /ci/artifacts
    After 0.00 seconds at 2026-06-01 12:46:18Z
    Mkdir(
        Mkdir {
            pathname: "/ci/artifacts",
        },
    )
plan: Successful action tar_extract
After 0.00 seconds at 2026-06-01 12:46:18Z
  • plan: Start action tar_extract
    After 0.00 seconds at 2026-06-01 12:46:18Z
    TarExtract(
        TarExtract {
            archive: "/dev/vdc",
            directory: "/ci/src",
        },
    )
  • plan: Action succeeded tar_extract
    After 0.00 seconds at 2026-06-01 12:46:18Z
    TarExtract(
        TarExtract {
            archive: "/dev/vdc",
            directory: "/ci/src",
        },
    )
plan: Successful action tar_extract
After 0.02 seconds at 2026-06-01 12:46:18Z
  • plan: Start action tar_extract
    After 0.00 seconds at 2026-06-01 12:46:18Z
    TarExtract(
        TarExtract {
            archive: "/dev/vdf",
            directory: "/ci/deps",
        },
    )
  • plan: Action succeeded tar_extract
    After 0.00 seconds at 2026-06-01 12:46:21Z
    TarExtract(
        TarExtract {
            archive: "/dev/vdf",
            directory: "/ci/deps",
        },
    )
plan: Successful action tar_extract
After 2.26 seconds at 2026-06-01 12:46:21Z
  • plan: Start action tar_extract
    After 0.00 seconds at 2026-06-01 12:46:21Z
    TarExtract(
        TarExtract {
            archive: "/dev/vde",
            directory: "/ci/cache",
        },
    )
  • plan: Action succeeded tar_extract
    After 0.00 seconds at 2026-06-01 12:46:26Z
    TarExtract(
        TarExtract {
            archive: "/dev/vde",
            directory: "/ci/cache",
        },
    )
plan: Successful action shell: ln -sf /ci /workspace
After 7.75 seconds at 2026-06-01 12:46:26Z
  • plan: Start action shell: ln -sf /ci /workspace
    After 0.00 seconds at 2026-06-01 12:46:26Z
    Shell(
        Shell {
            shell: "ln -sf /ci /workspace",
        },
    )
  • plan: Start program bash
    After 0.00 seconds at 2026-06-01 12:46:26Z
    • bash
    • -c
    • set -xeuo pipefail ln -sf /ci /workspace
  • plan: Program succeeded
    After 0.00 seconds at 2026-06-01 12:46:26Z
    Exit code: 0
    Stderr:
    + ln -sf /ci /workspace
    
  • plan: Action succeeded shell: ln -sf /ci /workspace
    After 0.00 seconds at 2026-06-01 12:46:26Z
    Shell(
        Shell {
            shell: "ln -sf /ci /workspace",
        },
    )
plan: Successful action shell: git config --global user.name 'Ambient CI'
After 7.84 seconds at 2026-06-01 12:46:26Z
  • plan: Start action shell: git config --global user.name 'Ambient CI'
    After 0.00 seconds at 2026-06-01 12:46:26Z
    Shell(
        Shell {
            shell: "git config --global user.name 'Ambient CI'",
        },
    )
  • plan: Start program bash
    After 0.00 seconds at 2026-06-01 12:46:26Z
    • bash
    • -c
    • set -xeuo pipefail git config --global user.name 'Ambient CI'
  • plan: Program succeeded
    After 0.00 seconds at 2026-06-01 12:46:26Z
    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-01 12:46:26Z
    Shell(
        Shell {
            shell: "git config --global user.name 'Ambient CI'",
        },
    )
plan: Successful action shell: git config --global user.email ambient@example.com
After 7.88 seconds at 2026-06-01 12:46:26Z
  • plan: Start action shell: git config --global user.email ambient@example.com
    After 0.00 seconds at 2026-06-01 12:46:26Z
    Shell(
        Shell {
            shell: "git config --global user.email ambient@example.com",
        },
    )
  • plan: Start program bash
    After 0.00 seconds at 2026-06-01 12:46:26Z
    • bash
    • -c
    • set -xeuo pipefail git config --global user.email ambient@example.com
  • plan: Program succeeded
    After 0.00 seconds at 2026-06-01 12:46:26Z
    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-01 12:46:26Z
    Shell(
        Shell {
            shell: "git config --global user.email ambient@example.com",
        },
    )
plan: Successful action cargo_fmt
After 7.90 seconds at 2026-06-01 12:46:26Z
  • plan: Start action cargo_fmt
    After 0.00 seconds at 2026-06-01 12:46:26Z
    CargoFmt(
        CargoFmt,
    )
  • plan: Start program cargo
    After 0.00 seconds at 2026-06-01 12:46:26Z
    • cargo
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-06-01 12:46:26Z
    Exit code: 0
    Stdout:
    cargo 1.95.0 (f2d3ce0bd 2026-03-21)
    
  • plan: Start program cargo
    After 0.00 seconds at 2026-06-01 12:46:26Z
    • cargo
    • clippy
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-06-01 12:46:26Z
    Exit code: 0
    Stdout:
    clippy 0.1.95 (59807616e1 2026-04-14)
    
  • plan: Start program rustc
    After 0.00 seconds at 2026-06-01 12:46:26Z
    • rustc
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-06-01 12:46:27Z
    Exit code: 0
    Stdout:
    rustc 1.95.0 (59807616e 2026-04-14)
    
  • plan: Start program cargo
    After 0.00 seconds at 2026-06-01 12:46:27Z
    • cargo
    • fmt
    • --check
  • plan: Program succeeded
    After 0.00 seconds at 2026-06-01 12:46:27Z
    Exit code: 0
  • plan: Action succeeded cargo_fmt
    After 0.00 seconds at 2026-06-01 12:46:27Z
    CargoFmt(
        CargoFmt,
    )
plan: Successful action cargo_clippy
After 8.21 seconds at 2026-06-01 12:46:27Z
  • plan: Start action cargo_clippy
    After 0.00 seconds at 2026-06-01 12:46:27Z
    CargoClippy(
        CargoClippy,
    )
  • plan: Start program cargo
    After 0.00 seconds at 2026-06-01 12:46:27Z
    • cargo
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-06-01 12:46:27Z
    Exit code: 0
    Stdout:
    cargo 1.95.0 (f2d3ce0bd 2026-03-21)
    
  • plan: Start program cargo
    After 0.00 seconds at 2026-06-01 12:46:27Z
    • cargo
    • clippy
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-06-01 12:46:27Z
    Exit code: 0
    Stdout:
    clippy 0.1.95 (59807616e1 2026-04-14)
    
  • plan: Start program rustc
    After 0.00 seconds at 2026-06-01 12:46:27Z
    • rustc
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-06-01 12:46:27Z
    Exit code: 0
    Stdout:
    rustc 1.95.0 (59807616e 2026-04-14)
    
  • plan: Start program cargo
    After 0.00 seconds at 2026-06-01 12:46:27Z
    • cargo
    • clippy
    • --offline
    • --locked
    • --workspace
    • --all-targets
    • --no-deps
    • --
    • --deny
    • warnings
  • plan: Program succeeded
    After 0.00 seconds at 2026-06-01 12:46:30Z
    Exit code: 0
    Stderr:
        Checking radicle-artifact v0.14.0 (/ci/src)
        Finished `dev` profile [unoptimized + debuginfo] target(s) in 2.87s
    
  • plan: Action succeeded cargo_clippy
    After 0.00 seconds at 2026-06-01 12:46:30Z
    CargoClippy(
        CargoClippy,
    )
plan: Successful action cargo_test
After 11.22 seconds at 2026-06-01 12:46:30Z
  • plan: Start action cargo_test
    After 0.00 seconds at 2026-06-01 12:46:30Z
    CargoTest(
        CargoTest,
    )
  • plan: Start program cargo
    After 0.00 seconds at 2026-06-01 12:46:30Z
    • cargo
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-06-01 12:46:30Z
    Exit code: 0
    Stdout:
    cargo 1.95.0 (f2d3ce0bd 2026-03-21)
    
  • plan: Start program cargo
    After 0.00 seconds at 2026-06-01 12:46:30Z
    • cargo
    • clippy
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-06-01 12:46:30Z
    Exit code: 0
    Stdout:
    clippy 0.1.95 (59807616e1 2026-04-14)
    
  • plan: Start program rustc
    After 0.00 seconds at 2026-06-01 12:46:30Z
    • rustc
    • --version
  • plan: Program succeeded
    After 0.00 seconds at 2026-06-01 12:46:30Z
    Exit code: 0
    Stdout:
    rustc 1.95.0 (59807616e 2026-04-14)
    
  • plan: Start program cargo
    After 0.00 seconds at 2026-06-01 12:46:30Z
    • cargo
    • test
    • --offline
    • --locked
    • --workspace
  • plan: Program succeeded
    After 0.00 seconds at 2026-06-01 12:47:34Z
    Exit code: 0
    Stdout:
    running 116 tests
    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::has_and_export_round_trip ... ok
    test node::tests::fetch_fast_path_and_no_locations ... 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_has_export_fetch ... 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::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::radicle_and_iroh_keys_share_same_public_identity ... ok
    test share::keys::tests::url_round_trip ... ok
    test test::add_artifact_records_author ... 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_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_add_artifact ... ok
    test test::idempotent_attestation ... ok
    test test::idempotent_create ... 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::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. 116 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 50.27s
    
    
    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::legacy_only_cid_is_reported_missing ... ok
    test reconcile::tests::missing_picks_release_with_latest_timestamp ... ok
    test reconcile::tests::mixed_urls_on_same_cid_split_into_buckets ... 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::other_endpoint_is_stale ... 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.01s
    
    
    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.50s
    
    
    Stderr:
       Compiling radicle-artifact v0.14.0 (/ci/src)
        Finished `test` profile [unoptimized + debuginfo] target(s) in 12.42s
         Running unittests src/lib.rs (/ci/cache/cargo-target/debug/deps/radicle_artifact-af036db7a44c8e0c)
         Running unittests src/bin/rad-artifact/main.rs (/ci/cache/cargo-target/debug/deps/rad_artifact-8010483682cf840c)
       Doc-tests radicle_artifact
    
  • plan: Action succeeded cargo_test
    After 0.00 seconds at 2026-06-01 12:47:34Z
    CargoTest(
        CargoTest,
    )
plan: Successful action tar_create
After 75.88 seconds at 2026-06-01 12:47:34Z
  • plan: Start action tar_create
    After 0.00 seconds at 2026-06-01 12:47:34Z
    TarCreate(
        TarCreate {
            archive: "/dev/vde",
            directory: "/ci/cache",
        },
    )
  • plan: Action succeeded tar_create
    After 0.00 seconds at 2026-06-01 12:47:39Z
    TarCreate(
        TarCreate {
            archive: "/dev/vde",
            directory: "/ci/cache",
        },
    )
plan: Successful action tar_create
After 80.44 seconds at 2026-06-01 12:47:39Z
  • plan: Start action tar_create
    After 0.00 seconds at 2026-06-01 12:47:39Z
    TarCreate(
        TarCreate {
            archive: "/dev/vdd",
            directory: "/ci/artifacts",
        },
    )
  • plan: Action succeeded tar_create
    After 0.00 seconds at 2026-06-01 12:47:39Z
    TarCreate(
        TarCreate {
            archive: "/dev/vdd",
            directory: "/ci/artifacts",
        },
    )
plan: Plan succeeded
After 80.45 seconds at 2026-06-01 12:47:39ZHopefully 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": 1780317978,
        "nanos_since_epoch": 967287928
      },
      "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": 1780317978,
        "nanos_since_epoch": 967607257
      },
      "log_source": "Plan"
    }
  3. {
      "type": "execute_action",
      "action": "mkdir",
      "pathname": "/ci",
      "timestamp": {
        "secs_since_epoch": 1780317978,
        "nanos_since_epoch": 967673132
      },
      "log_source": "Plan"
    }
  4. {
      "type": "action_succeeded",
      "action": "mkdir",
      "pathname": "/ci",
      "timestamp": {
        "secs_since_epoch": 1780317978,
        "nanos_since_epoch": 967919301
      },
      "log_source": "Plan"
    }
  5. {
      "type": "execute_action",
      "action": "mkdir",
      "pathname": "/ci/artifacts",
      "timestamp": {
        "secs_since_epoch": 1780317978,
        "nanos_since_epoch": 968082381
      },
      "log_source": "Plan"
    }
  6. {
      "type": "action_succeeded",
      "action": "mkdir",
      "pathname": "/ci/artifacts",
      "timestamp": {
        "secs_since_epoch": 1780317978,
        "nanos_since_epoch": 968109744
      },
      "log_source": "Plan"
    }
  7. {
      "type": "execute_action",
      "action": "tar_extract",
      "archive": "/dev/vdc",
      "directory": "/ci/src",
      "timestamp": {
        "secs_since_epoch": 1780317978,
        "nanos_since_epoch": 968293591
      },
      "log_source": "Plan"
    }
  8. {
      "type": "action_succeeded",
      "action": "tar_extract",
      "archive": "/dev/vdc",
      "directory": "/ci/src",
      "timestamp": {
        "secs_since_epoch": 1780317978,
        "nanos_since_epoch": 988091833
      },
      "log_source": "Plan"
    }
  9. {
      "type": "execute_action",
      "action": "tar_extract",
      "archive": "/dev/vdf",
      "directory": "/ci/deps",
      "timestamp": {
        "secs_since_epoch": 1780317978,
        "nanos_since_epoch": 988239079
      },
      "log_source": "Plan"
    }
  10. {
      "type": "action_succeeded",
      "action": "tar_extract",
      "archive": "/dev/vdf",
      "directory": "/ci/deps",
      "timestamp": {
        "secs_since_epoch": 1780317981,
        "nanos_since_epoch": 223130884
      },
      "log_source": "Plan"
    }
  11. {
      "type": "execute_action",
      "action": "tar_extract",
      "archive": "/dev/vde",
      "directory": "/ci/cache",
      "timestamp": {
        "secs_since_epoch": 1780317981,
        "nanos_since_epoch": 225776359
      },
      "log_source": "Plan"
    }
  12. {
      "type": "action_succeeded",
      "action": "tar_extract",
      "archive": "/dev/vde",
      "directory": "/ci/cache",
      "timestamp": {
        "secs_since_epoch": 1780317986,
        "nanos_since_epoch": 714218931
      },
      "log_source": "Plan"
    }
  13. {
      "type": "execute_action",
      "action": "shell",
      "shell": "ln -sf /ci /workspace",
      "timestamp": {
        "secs_since_epoch": 1780317986,
        "nanos_since_epoch": 714686373
      },
      "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": 1780317986,
        "nanos_since_epoch": 714900986
      },
      "log_source": "Plan"
    }
  15. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "",
      "stderr": "+ ln -sf /ci /workspace\n",
      "timestamp": {
        "secs_since_epoch": 1780317986,
        "nanos_since_epoch": 806199391
      },
      "log_source": "Plan"
    }
  16. {
      "type": "action_succeeded",
      "action": "shell",
      "shell": "ln -sf /ci /workspace",
      "timestamp": {
        "secs_since_epoch": 1780317986,
        "nanos_since_epoch": 807058269
      },
      "log_source": "Plan"
    }
  17. {
      "type": "execute_action",
      "action": "shell",
      "shell": "git config --global user.name 'Ambient CI'",
      "timestamp": {
        "secs_since_epoch": 1780317986,
        "nanos_since_epoch": 807464142
      },
      "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": 1780317986,
        "nanos_since_epoch": 807483157
      },
      "log_source": "Plan"
    }
  19. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "",
      "stderr": "+ git config --global user.name 'Ambient CI'\n",
      "timestamp": {
        "secs_since_epoch": 1780317986,
        "nanos_since_epoch": 841173870
      },
      "log_source": "Plan"
    }
  20. {
      "type": "action_succeeded",
      "action": "shell",
      "shell": "git config --global user.name 'Ambient CI'",
      "timestamp": {
        "secs_since_epoch": 1780317986,
        "nanos_since_epoch": 847134967
      },
      "log_source": "Plan"
    }
  21. {
      "type": "execute_action",
      "action": "shell",
      "shell": "git config --global user.email ambient@example.com",
      "timestamp": {
        "secs_since_epoch": 1780317986,
        "nanos_since_epoch": 852273594
      },
      "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": 1780317986,
        "nanos_since_epoch": 856674170
      },
      "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": 1780317986,
        "nanos_since_epoch": 868217525
      },
      "log_source": "Plan"
    }
  24. {
      "type": "action_succeeded",
      "action": "shell",
      "shell": "git config --global user.email ambient@example.com",
      "timestamp": {
        "secs_since_epoch": 1780317986,
        "nanos_since_epoch": 868700170
      },
      "log_source": "Plan"
    }
  25. {
      "type": "execute_action",
      "action": "cargo_fmt",
      "timestamp": {
        "secs_since_epoch": 1780317986,
        "nanos_since_epoch": 868916292
      },
      "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": 1780317986,
        "nanos_since_epoch": 868926375
      },
      "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": 1780317986,
        "nanos_since_epoch": 922182949
      },
      "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": 1780317986,
        "nanos_since_epoch": 925134559
      },
      "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": 1780317986,
        "nanos_since_epoch": 990389604
      },
      "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": 1780317986,
        "nanos_since_epoch": 993174707
      },
      "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": 1780317987,
        "nanos_since_epoch": 10813346
      },
      "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": 1780317987,
        "nanos_since_epoch": 13561129
      },
      "log_source": "Plan"
    }
  33. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "",
      "stderr": "",
      "timestamp": {
        "secs_since_epoch": 1780317987,
        "nanos_since_epoch": 175037941
      },
      "log_source": "Plan"
    }
  34. {
      "type": "action_succeeded",
      "action": "cargo_fmt",
      "timestamp": {
        "secs_since_epoch": 1780317987,
        "nanos_since_epoch": 177246666
      },
      "log_source": "Plan"
    }
  35. {
      "type": "execute_action",
      "action": "cargo_clippy",
      "timestamp": {
        "secs_since_epoch": 1780317987,
        "nanos_since_epoch": 179226621
      },
      "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": 1780317987,
        "nanos_since_epoch": 181178924
      },
      "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": 1780317987,
        "nanos_since_epoch": 192154306
      },
      "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": 1780317987,
        "nanos_since_epoch": 192595829
      },
      "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": 1780317987,
        "nanos_since_epoch": 224223332
      },
      "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": 1780317987,
        "nanos_since_epoch": 224671246
      },
      "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": 1780317987,
        "nanos_since_epoch": 241152572
      },
      "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": 1780317987,
        "nanos_since_epoch": 243899298
      },
      "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 2.87s\n",
      "timestamp": {
        "secs_since_epoch": 1780317990,
        "nanos_since_epoch": 190273416
      },
      "log_source": "Plan"
    }
  44. {
      "type": "action_succeeded",
      "action": "cargo_clippy",
      "timestamp": {
        "secs_since_epoch": 1780317990,
        "nanos_since_epoch": 190747013
      },
      "log_source": "Plan"
    }
  45. {
      "type": "execute_action",
      "action": "cargo_test",
      "timestamp": {
        "secs_since_epoch": 1780317990,
        "nanos_since_epoch": 190948498
      },
      "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": 1780317990,
        "nanos_since_epoch": 190957089
      },
      "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": 1780317990,
        "nanos_since_epoch": 208329727
      },
      "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": 1780317990,
        "nanos_since_epoch": 211061168
      },
      "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": 1780317990,
        "nanos_since_epoch": 240096871
      },
      "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": 1780317990,
        "nanos_since_epoch": 240550257
      },
      "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": 1780317990,
        "nanos_since_epoch": 256984441
      },
      "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": 1780317990,
        "nanos_since_epoch": 257435549
      },
      "log_source": "Plan"
    }
  53. {
      "type": "program_succeeded",
      "exit_code": 0,
      "stdout": "\nrunning 116 tests\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::has_and_export_round_trip ... ok\ntest node::tests::fetch_fast_path_and_no_locations ... 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_has_export_fetch ... 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::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::radicle_and_iroh_keys_share_same_public_identity ... ok\ntest share::keys::tests::url_round_trip ... ok\ntest test::add_artifact_records_author ... 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_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_add_artifact ... ok\ntest test::idempotent_attestation ... ok\ntest test::idempotent_create ... 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::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. 116 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 50.27s\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::legacy_only_cid_is_reported_missing ... ok\ntest reconcile::tests::missing_picks_release_with_latest_timestamp ... ok\ntest reconcile::tests::mixed_urls_on_same_cid_split_into_buckets ... 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::other_endpoint_is_stale ... 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.01s\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.50s\n\n",
      "stderr": "   Compiling radicle-artifact v0.14.0 (/ci/src)\n    Finished `test` profile [unoptimized + debuginfo] target(s) in 12.42s\n     Running unittests src/lib.rs (/ci/cache/cargo-target/debug/deps/radicle_artifact-af036db7a44c8e0c)\n     Running unittests src/bin/rad-artifact/main.rs (/ci/cache/cargo-target/debug/deps/rad_artifact-8010483682cf840c)\n   Doc-tests radicle_artifact\n",
      "timestamp": {
        "secs_since_epoch": 1780318054,
        "nanos_since_epoch": 731173540
      },
      "log_source": "Plan"
    }
  54. {
      "type": "action_succeeded",
      "action": "cargo_test",
      "timestamp": {
        "secs_since_epoch": 1780318054,
        "nanos_since_epoch": 846510078
      },
      "log_source": "Plan"
    }
  55. {
      "type": "execute_action",
      "action": "tar_create",
      "archive": "/dev/vde",
      "directory": "/ci/cache",
      "timestamp": {
        "secs_since_epoch": 1780318054,
        "nanos_since_epoch": 848386358
      },
      "log_source": "Plan"
    }
  56. {
      "type": "action_succeeded",
      "action": "tar_create",
      "archive": "/dev/vde",
      "directory": "/ci/cache",
      "timestamp": {
        "secs_since_epoch": 1780318059,
        "nanos_since_epoch": 409489219
      },
      "log_source": "Plan"
    }
  57. {
      "type": "execute_action",
      "action": "tar_create",
      "archive": "/dev/vdd",
      "directory": "/ci/artifacts",
      "timestamp": {
        "secs_since_epoch": 1780318059,
        "nanos_since_epoch": 412096290
      },
      "log_source": "Plan"
    }
  58. {
      "type": "action_succeeded",
      "action": "tar_create",
      "archive": "/dev/vdd",
      "directory": "/ci/artifacts",
      "timestamp": {
        "secs_since_epoch": 1780318059,
        "nanos_since_epoch": 418904216
      },
      "log_source": "Plan"
    }
  59. {
      "type": "plan_succeeded",
      "timestamp": {
        "secs_since_epoch": 1780318059,
        "nanos_since_epoch": 421868057
      },
      "log_source": "Plan"
    }
  60. {
      "type": "executor_ends_successfully",
      "timestamp": {
        "secs_since_epoch": 1780318059,
        "nanos_since_epoch": 423942719
      },
      "log_source": "Plan"
    }

Trigger message

{
  "request": "trigger",
  "version": 1,
  "event_type": "patch",
  "repository": {
    "id": "rad:z4VYyJ9KuwMNkXGQnmKuGPGKw3inv",
    "name": "radicle-artifact",
    "description": "A Radicle Collaborative Object (COB) for content-addressed release artifacts and their discovery locations",
    "private": false,
    "default_branch": "main",
    "delegates": [
      "did:key:z6MktwkohCx8aHZ1QCjVZUiLmX92oPZFxRiFZkbq32Tk5Tkm"
    ]
  },
  "action": "Updated",
  "patch": {
    "id": "659e57a23ed0bbba9031ebffe7a7877a436f73a7",
    "author": {
      "id": "did:key:z6MktwkohCx8aHZ1QCjVZUiLmX92oPZFxRiFZkbq32Tk5Tkm",
      "alias": "2color"
    },
    "title": "feat: route artifact fetching through the node",
    "state": {
      "status": "open",
      "conflicts": []
    },
    "before": "88543850c731a4cbcfd4919fa6443626da9fadeb",
    "after": "8c10fbaec9bb439b46585a1856e9b68e3e1d7069",
    "commits": [
      "8c10fbaec9bb439b46585a1856e9b68e3e1d7069",
      "27a2462b6e0a10c88e879a350ae27ac872aa4581",
      "ba4ff950810ed899a851b6d599c643ce949ec506",
      "bf23a8641cd7365a59a4e8d658df17b6151cadc0",
      "83192c5f2b2239501a6f985186b8d1a030e3c35b",
      "4d9527f9d6dc568aaef117561cc2deb9bd3449f1",
      "c59c434aafbcb4c4db34039e8293a97b14351e8b",
      "e970d1fffd931deb44225317e2dca01a0ef9f3f9",
      "8ecede5ce740aeb52042eaf39dfb941c062cfade",
      "2158775c69b8cbdf0927269114ba82c258fd3b08",
      "d2a5b36745f9a2b4b053dd0e40f2d88c3f21658f",
      "9220b0bc175ab9681eaac4dc65f6f0445dc8b84a",
      "b0d6b0f743912a646e51d89a41ab11003fcd6850",
      "1e85464aef81c7402df8e5079177961f6b41e437",
      "f90d141f4001113d1e270c76b9215492a06446d8",
      "b2d82f093bc8d4b0962b2a3daa3963a6ec870225",
      "6127a5fe8e18d10c0d60e9a942fc09885a3fa125",
      "8926b2b5f344488bfd96de57c278bef0dab114a8",
      "95f331cdf0077f5310f1e1bd377f3aa3ac88cb31",
      "9bfc742df0be7f9dba7c0c1a40b861181fced09d",
      "64c2a60883751aab4804a8073f3c651a7b14c4de"
    ],
    "target": "88543850c731a4cbcfd4919fa6443626da9fadeb",
    "labels": [],
    "assignees": [],
    "revisions": [
      {
        "id": "659e57a23ed0bbba9031ebffe7a7877a436f73a7",
        "author": {
          "id": "did:key:z6MktwkohCx8aHZ1QCjVZUiLmX92oPZFxRiFZkbq32Tk5Tkm",
          "alias": "2color"
        },
        "description": "The node becomes the single owner of all blob I/O. New control-socket commands let clients fetch, export, and probe artifacts through it instead of opening their own iroh store (which the single-writer FsStore lock forbids), and fetched bytes land in the store so they can be re-served.\n\nProtocol: add Has (one-shot), Export and Fetch (streaming) commands, a StreamEvent envelope, and provider-level FetchProgress. HTTP-fetched blobs are imported into the store so they become seedable like iroh blobs.\n\nNode: NodeCtx with a shared Downloader on the seeder endpoint; streaming framing with disconnect-to-abort; abort-safe fetch via temp-tag protection, atomic export, and tag-last ordering.\n\nClient + CLI: Client::has plus streaming fetch/export with a per-frame idle timeout; rad-artifact fetch now routes through the node, and fetch --seed announces a signed add_location COB.\n\nAlso addresses an adversarial review of the branch: collection-export path-traversal hardening and atomic dir rename, RAII temp-file cleanup, fast-path GC temp-tag protection, streamed export/HTTP progress, prompt disconnect detection, and non_exhaustive response payloads.",
        "base": "df4ef15b924286fe8a66498da8699bf3bccdcc61",
        "oid": "e127269c503776071f2efa7161a24c8824ff8e4a",
        "timestamp": 1780061094
      },
      {
        "id": "d2992100d1756c7444c67d2af1163076be4902d0",
        "author": {
          "id": "did:key:z6MktwkohCx8aHZ1QCjVZUiLmX92oPZFxRiFZkbq32Tk5Tkm",
          "alias": "2color"
        },
        "description": "docs: fix broken intra-doc links\n\n- replace links to crate-private items with plain code spans so\n  public rustdoc builds clean under -D warnings\n- drop the stale crate::share::fetch::Location reference; describe\n  the borrowed COB form instead\n- remove the redundant explicit Downloader link target\n- clarify the seed message to say radiroh:// location",
        "base": "df4ef15b924286fe8a66498da8699bf3bccdcc61",
        "oid": "c81939d7e5be50c11d593950a1d35953e3f86fb3",
        "timestamp": 1780062941
      },
      {
        "id": "4c6d48e508c39348f161e13366747c73a5ac18bf",
        "author": {
          "id": "did:key:z6MktwkohCx8aHZ1QCjVZUiLmX92oPZFxRiFZkbq32Tk5Tkm",
          "alias": "2color"
        },
        "description": "Rebase on rad/main",
        "base": "88543850c731a4cbcfd4919fa6443626da9fadeb",
        "oid": "3f21f3b901083cea4e3096deaf4d2e05af4234ec",
        "timestamp": 1780303177
      },
      {
        "id": "50b8efbf1ede4af0b9138dabfd7a4f484f84a3bb",
        "author": {
          "id": "did:key:z6MktwkohCx8aHZ1QCjVZUiLmX92oPZFxRiFZkbq32Tk5Tkm",
          "alias": "2color"
        },
        "description": "docs: update desktop handoff for the shipped fetch protocol\n\n- read side is no longer the blocker: Has/Export/Fetch are implemented;\n  reframe that section and the suggested sequence accordingly\n- add the new client read-side methods, FetchArgs, and the new protocol\n  types to the exposed-API inventory\n- note radiroh:// is already in place and point at run_fetch /\n  artifact_locations as the reference read-side caller",
        "base": "88543850c731a4cbcfd4919fa6443626da9fadeb",
        "oid": "dfce4bc1f674f15c4f7d2b2d501b2bb5ce6a0c28",
        "timestamp": 1780303650
      },
      {
        "id": "b4d1b239dda48493af1e50410373122b47694b95",
        "author": {
          "id": "did:key:z6MktwkohCx8aHZ1QCjVZUiLmX92oPZFxRiFZkbq32Tk5Tkm",
          "alias": "2color"
        },
        "description": "Refactor for simplicity and add tests",
        "base": "88543850c731a4cbcfd4919fa6443626da9fadeb",
        "oid": "bf23a8641cd7365a59a4e8d658df17b6151cadc0",
        "timestamp": 1780313032
      },
      {
        "id": "27d957e293963d327110511968c2b6f4d380d26a",
        "author": {
          "id": "did:key:z6MktwkohCx8aHZ1QCjVZUiLmX92oPZFxRiFZkbq32Tk5Tkm",
          "alias": "2color"
        },
        "description": "perf(seeder): drop redundant tag lookup in artifact_size\n\n- carry blob hash through `all_seeded` from the tag listing\n- add `artifact_size_for` taking a known hash, skipping `tags().get()`\n- use it in `build_status` so `node status` no longer re-fetches each tag\n\nThe tag stream already yields the hash; re-fetching it per artifact on\nthe status hot path was pure overhead, linear in the seed-set size.\n\n\nfeat(node): wire iroh connection and traffic stats\n\n- map endpoint socket metrics into ConnectionStats/TrafficStats so\n  `node status` reports real counters instead of zeros\n- keep an endpoint clone on NodeCtx for its live metric counters\n- out_bytes sums sends (incl. disco); in_bytes sums data-only recvs,\n  matching the documented disco-vs-data split\n\nPhase 2 left these at zero pending the metrics wiring; this lands it.\n\n\nrefactor(status): drop unused did_locations_unmatched warning\n\n- stale-location drift is already surfaced by `reconcile`; the status\n  warning duplicated it and was never populated\n- remove the field, keeping `Warnings` as an empty extension point\n- drop the dead warning line from the status pretty-printer",
        "base": "88543850c731a4cbcfd4919fa6443626da9fadeb",
        "oid": "8c10fbaec9bb439b46585a1856e9b68e3e1d7069",
        "timestamp": 1780317963
      }
    ]
  }
}

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>