These raw log messages are meant to help Ambient developers figure out problems. You can ignore them.
{
"type": "executor_starts",
"name": "ambient-execute-plan",
"version": "0.14.0@c37ec71",
"timestamp": {
"secs_since_epoch": 1781008643,
"nanos_since_epoch": 884163723
},
"log_source": "Plan"
}{
"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": 1781008643,
"nanos_since_epoch": 884477140
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "mkdir",
"pathname": "/ci",
"timestamp": {
"secs_since_epoch": 1781008643,
"nanos_since_epoch": 884543307
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "mkdir",
"pathname": "/ci",
"timestamp": {
"secs_since_epoch": 1781008643,
"nanos_since_epoch": 884818374
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "mkdir",
"pathname": "/ci/artifacts",
"timestamp": {
"secs_since_epoch": 1781008643,
"nanos_since_epoch": 884971773
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "mkdir",
"pathname": "/ci/artifacts",
"timestamp": {
"secs_since_epoch": 1781008643,
"nanos_since_epoch": 884999453
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "tar_extract",
"archive": "/dev/vdc",
"directory": "/ci/src",
"timestamp": {
"secs_since_epoch": 1781008643,
"nanos_since_epoch": 885184541
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "tar_extract",
"archive": "/dev/vdc",
"directory": "/ci/src",
"timestamp": {
"secs_since_epoch": 1781008643,
"nanos_since_epoch": 916764039
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "tar_extract",
"archive": "/dev/vdf",
"directory": "/ci/deps",
"timestamp": {
"secs_since_epoch": 1781008643,
"nanos_since_epoch": 917211515
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "tar_extract",
"archive": "/dev/vdf",
"directory": "/ci/deps",
"timestamp": {
"secs_since_epoch": 1781008646,
"nanos_since_epoch": 35190466
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "tar_extract",
"archive": "/dev/vde",
"directory": "/ci/cache",
"timestamp": {
"secs_since_epoch": 1781008646,
"nanos_since_epoch": 35641098
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "tar_extract",
"archive": "/dev/vde",
"directory": "/ci/cache",
"timestamp": {
"secs_since_epoch": 1781008650,
"nanos_since_epoch": 967005651
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "shell",
"shell": "ln -sf /ci /workspace",
"timestamp": {
"secs_since_epoch": 1781008650,
"nanos_since_epoch": 969642200
},
"log_source": "Plan"
}{
"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": 1781008650,
"nanos_since_epoch": 971965308
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "",
"stderr": "+ ln -sf /ci /workspace\n",
"timestamp": {
"secs_since_epoch": 1781008650,
"nanos_since_epoch": 979112792
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "shell",
"shell": "ln -sf /ci /workspace",
"timestamp": {
"secs_since_epoch": 1781008650,
"nanos_since_epoch": 981661774
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "shell",
"shell": "git config --global user.name 'Ambient CI'",
"timestamp": {
"secs_since_epoch": 1781008650,
"nanos_since_epoch": 984003148
},
"log_source": "Plan"
}{
"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": 1781008650,
"nanos_since_epoch": 986591857
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "",
"stderr": "+ git config --global user.name 'Ambient CI'\n",
"timestamp": {
"secs_since_epoch": 1781008650,
"nanos_since_epoch": 996780343
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "shell",
"shell": "git config --global user.name 'Ambient CI'",
"timestamp": {
"secs_since_epoch": 1781008650,
"nanos_since_epoch": 999654519
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "shell",
"shell": "git config --global user.email ambient@example.com",
"timestamp": {
"secs_since_epoch": 1781008651,
"nanos_since_epoch": 2266885
},
"log_source": "Plan"
}{
"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": 1781008651,
"nanos_since_epoch": 4950950
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "",
"stderr": "+ git config --global user.email ambient@example.com\n",
"timestamp": {
"secs_since_epoch": 1781008651,
"nanos_since_epoch": 12861797
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "shell",
"shell": "git config --global user.email ambient@example.com",
"timestamp": {
"secs_since_epoch": 1781008651,
"nanos_since_epoch": 15799476
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "cargo_fmt",
"timestamp": {
"secs_since_epoch": 1781008651,
"nanos_since_epoch": 18502828
},
"log_source": "Plan"
}{
"type": "start_program",
"argv": [
{
"Unix": [
99,
97,
114,
103,
111
]
},
{
"Unix": [
45,
45,
118,
101,
114,
115,
105,
111,
110
]
}
],
"timestamp": {
"secs_since_epoch": 1781008651,
"nanos_since_epoch": 20436041
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "cargo 1.95.0 (f2d3ce0bd 2026-03-21)\n",
"stderr": "",
"timestamp": {
"secs_since_epoch": 1781008651,
"nanos_since_epoch": 49285890
},
"log_source": "Plan"
}{
"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": 1781008651,
"nanos_since_epoch": 52014627
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "clippy 0.1.95 (59807616e1 2026-04-14)\n",
"stderr": "",
"timestamp": {
"secs_since_epoch": 1781008651,
"nanos_since_epoch": 105820565
},
"log_source": "Plan"
}{
"type": "start_program",
"argv": [
{
"Unix": [
114,
117,
115,
116,
99
]
},
{
"Unix": [
45,
45,
118,
101,
114,
115,
105,
111,
110
]
}
],
"timestamp": {
"secs_since_epoch": 1781008651,
"nanos_since_epoch": 108621229
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "rustc 1.95.0 (59807616e 2026-04-14)\n",
"stderr": "",
"timestamp": {
"secs_since_epoch": 1781008651,
"nanos_since_epoch": 125895236
},
"log_source": "Plan"
}{
"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": 1781008651,
"nanos_since_epoch": 126357386
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "",
"stderr": "",
"timestamp": {
"secs_since_epoch": 1781008651,
"nanos_since_epoch": 293647479
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "cargo_fmt",
"timestamp": {
"secs_since_epoch": 1781008651,
"nanos_since_epoch": 295987192
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "cargo_clippy",
"timestamp": {
"secs_since_epoch": 1781008651,
"nanos_since_epoch": 297954286
},
"log_source": "Plan"
}{
"type": "start_program",
"argv": [
{
"Unix": [
99,
97,
114,
103,
111
]
},
{
"Unix": [
45,
45,
118,
101,
114,
115,
105,
111,
110
]
}
],
"timestamp": {
"secs_since_epoch": 1781008651,
"nanos_since_epoch": 299939907
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "cargo 1.95.0 (f2d3ce0bd 2026-03-21)\n",
"stderr": "",
"timestamp": {
"secs_since_epoch": 1781008651,
"nanos_since_epoch": 310720096
},
"log_source": "Plan"
}{
"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": 1781008651,
"nanos_since_epoch": 313468071
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "clippy 0.1.95 (59807616e1 2026-04-14)\n",
"stderr": "",
"timestamp": {
"secs_since_epoch": 1781008651,
"nanos_since_epoch": 342337676
},
"log_source": "Plan"
}{
"type": "start_program",
"argv": [
{
"Unix": [
114,
117,
115,
116,
99
]
},
{
"Unix": [
45,
45,
118,
101,
114,
115,
105,
111,
110
]
}
],
"timestamp": {
"secs_since_epoch": 1781008651,
"nanos_since_epoch": 345115925
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "rustc 1.95.0 (59807616e 2026-04-14)\n",
"stderr": "",
"timestamp": {
"secs_since_epoch": 1781008651,
"nanos_since_epoch": 359594399
},
"log_source": "Plan"
}{
"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": 1781008651,
"nanos_since_epoch": 360059565
},
"log_source": "Plan"
}{
"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.97s\n",
"timestamp": {
"secs_since_epoch": 1781008654,
"nanos_since_epoch": 406945350
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "cargo_clippy",
"timestamp": {
"secs_since_epoch": 1781008654,
"nanos_since_epoch": 407473839
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "cargo_test",
"timestamp": {
"secs_since_epoch": 1781008654,
"nanos_since_epoch": 407919661
},
"log_source": "Plan"
}{
"type": "start_program",
"argv": [
{
"Unix": [
99,
97,
114,
103,
111
]
},
{
"Unix": [
45,
45,
118,
101,
114,
115,
105,
111,
110
]
}
],
"timestamp": {
"secs_since_epoch": 1781008654,
"nanos_since_epoch": 408151391
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "cargo 1.95.0 (f2d3ce0bd 2026-03-21)\n",
"stderr": "",
"timestamp": {
"secs_since_epoch": 1781008654,
"nanos_since_epoch": 425560760
},
"log_source": "Plan"
}{
"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": 1781008654,
"nanos_since_epoch": 426058569
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "clippy 0.1.95 (59807616e1 2026-04-14)\n",
"stderr": "",
"timestamp": {
"secs_since_epoch": 1781008654,
"nanos_since_epoch": 457270083
},
"log_source": "Plan"
}{
"type": "start_program",
"argv": [
{
"Unix": [
114,
117,
115,
116,
99
]
},
{
"Unix": [
45,
45,
118,
101,
114,
115,
105,
111,
110
]
}
],
"timestamp": {
"secs_since_epoch": 1781008654,
"nanos_since_epoch": 460035384
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "rustc 1.95.0 (59807616e 2026-04-14)\n",
"stderr": "",
"timestamp": {
"secs_since_epoch": 1781008654,
"nanos_since_epoch": 474476325
},
"log_source": "Plan"
}{
"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": 1781008654,
"nanos_since_epoch": 477286678
},
"log_source": "Plan"
}{
"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 client::tests::streaming_methods_round_trip ... ok\ntest node::tests::double_start_errors ... 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.26s\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::legacy_only_cid_is_reported_missing ... ok\ntest reconcile::tests::missing_and_dangling_split_correctly ... 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::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 9.95s\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": 1781008716,
"nanos_since_epoch": 463324408
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "cargo_test",
"timestamp": {
"secs_since_epoch": 1781008716,
"nanos_since_epoch": 580744168
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "tar_create",
"archive": "/dev/vde",
"directory": "/ci/cache",
"timestamp": {
"secs_since_epoch": 1781008716,
"nanos_since_epoch": 582636880
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "tar_create",
"archive": "/dev/vde",
"directory": "/ci/cache",
"timestamp": {
"secs_since_epoch": 1781008721,
"nanos_since_epoch": 36651168
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "tar_create",
"archive": "/dev/vdd",
"directory": "/ci/artifacts",
"timestamp": {
"secs_since_epoch": 1781008721,
"nanos_since_epoch": 37123609
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "tar_create",
"archive": "/dev/vdd",
"directory": "/ci/artifacts",
"timestamp": {
"secs_since_epoch": 1781008721,
"nanos_since_epoch": 43951175
},
"log_source": "Plan"
}{
"type": "plan_succeeded",
"timestamp": {
"secs_since_epoch": 1781008721,
"nanos_since_epoch": 47881640
},
"log_source": "Plan"
}{
"type": "executor_ends_successfully",
"timestamp": {
"secs_since_epoch": 1781008721,
"nanos_since_epoch": 49641169
},
"log_source": "Plan"
}{
"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": "909bf6e8166991065752117ee76f43a7807251a3",
"commits": [
"909bf6e8166991065752117ee76f43a7807251a3",
"846d1c4f32160290c818f63f48fdb86dc5cafe44",
"d0d56152fc880569b57ef8753474c5c503e8fd36",
"f0e9ad9885218d375944e876bbcec68d501c504b",
"64cdc342dda024e62e3d0a1c1c80b1c31eacebd6",
"c6b9a7588d3d600afd02de8219841bbf9a39eee7",
"ddcb763fd82f168fb3e898539482e0c95536afbf",
"5bf6dee015ad40b94e164d0473b469050ba00832",
"74394f2f870a698c59424753cedd7d98bd690d73",
"c7cfb0fe0398a7feba046a316abb59058b9e4667",
"da6217735d8280278b6f830ba18644dc8b69cada",
"2e6002a9f5388c227e5a54e01eb7ff35eb1e8d0e",
"674d9bc9696f4c491ef9771a425455dcf1bd8caf",
"616350dc5b7b8f908ce35fb82fb9c57c7518ad42",
"c8afba4b537ca15ba303ba2918a40e1cc0a01c41"
],
"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
},
{
"id": "78ce641c2983c09642929c785ad89f10499baab9",
"author": {
"id": "did:key:z6MktwkohCx8aHZ1QCjVZUiLmX92oPZFxRiFZkbq32Tk5Tkm",
"alias": "2color"
},
"description": "Clean history",
"base": "8a545e7378e1eb87a638b66d045bc584219c510b",
"oid": "64cdc342dda024e62e3d0a1c1c80b1c31eacebd6",
"timestamp": 1780993321
},
{
"id": "80460e336c827109f516620512fe67934158a1ce",
"author": {
"id": "did:key:z6MktwkohCx8aHZ1QCjVZUiLmX92oPZFxRiFZkbq32Tk5Tkm",
"alias": "2color"
},
"description": "feat: allow fetch/download with --cid only\n\n- Remove clap `requires = \"revision\"` from --cid on fetch and download\n- Handle (None, Some(cid)) arm in resolve_retrieval; skip OID validation\n- Pick most-recently-created release as primary for CID-only lookups\n- Add CID-only examples to both command help texts\n\n\nrefactor: extract log_retrieval_plan helper\n\n- move location-count/already-local logic out of resolve_retrieval\n- deduplicate identical block shared by run_fetch and run_download\n- fixes resolve_retrieval producing side effects as a pure resolver\n\n\nrefactor: make unseed accept cid as a flag\n\n- change `cid` from a positional arg to `--cid` on both\n `unseed` and `node unseed`\n- align with the `--cid` convention used by every other\n command, so users don't have to remember one exception\n- update help examples, README, and command references\n\nCLI guidelines favor flags over positional args and\nconsistent flag names across subcommands.\n\n\nfeat: add --offline export to download\n\n- add `download --offline` to export bytes straight from the store\n without touching the network, failing if they aren't complete locally\n- thread `require_locations` through retrieval so offline export skips\n the no-locations check\n- update changelog and CONTEXT.md to reflect fetch/download split",
"base": "8a545e7378e1eb87a638b66d045bc584219c510b",
"oid": "909bf6e8166991065752117ee76f43a7807251a3",
"timestamp": 1781008626
}
]
}
}executor from config: /usr/bin/ambient-execute-plan executor from PATH: /usr/bin/ambient-execute-plan run CI for rad:z4VYyJ9KuwMNkXGQnmKuGPGKw3inv
<empty log>