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": 1780318951,
"nanos_since_epoch": 745310673
},
"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": 1780318951,
"nanos_since_epoch": 745619735
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "mkdir",
"pathname": "/ci",
"timestamp": {
"secs_since_epoch": 1780318951,
"nanos_since_epoch": 745680861
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "mkdir",
"pathname": "/ci",
"timestamp": {
"secs_since_epoch": 1780318951,
"nanos_since_epoch": 745928322
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "mkdir",
"pathname": "/ci/artifacts",
"timestamp": {
"secs_since_epoch": 1780318951,
"nanos_since_epoch": 746078162
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "mkdir",
"pathname": "/ci/artifacts",
"timestamp": {
"secs_since_epoch": 1780318951,
"nanos_since_epoch": 746105274
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "tar_extract",
"archive": "/dev/vdc",
"directory": "/ci/src",
"timestamp": {
"secs_since_epoch": 1780318951,
"nanos_since_epoch": 746283952
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "tar_extract",
"archive": "/dev/vdc",
"directory": "/ci/src",
"timestamp": {
"secs_since_epoch": 1780318951,
"nanos_since_epoch": 810055480
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "tar_extract",
"archive": "/dev/vdf",
"directory": "/ci/deps",
"timestamp": {
"secs_since_epoch": 1780318951,
"nanos_since_epoch": 810097093
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "tar_extract",
"archive": "/dev/vdf",
"directory": "/ci/deps",
"timestamp": {
"secs_since_epoch": 1780318954,
"nanos_since_epoch": 32932342
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "tar_extract",
"archive": "/dev/vde",
"directory": "/ci/cache",
"timestamp": {
"secs_since_epoch": 1780318954,
"nanos_since_epoch": 35582633
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "tar_extract",
"archive": "/dev/vde",
"directory": "/ci/cache",
"timestamp": {
"secs_since_epoch": 1780318959,
"nanos_since_epoch": 610569115
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "shell",
"shell": "ln -sf /ci /workspace",
"timestamp": {
"secs_since_epoch": 1780318959,
"nanos_since_epoch": 610609987
},
"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": 1780318959,
"nanos_since_epoch": 610637203
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "",
"stderr": "+ ln -sf /ci /workspace\n",
"timestamp": {
"secs_since_epoch": 1780318959,
"nanos_since_epoch": 622731647
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "shell",
"shell": "ln -sf /ci /workspace",
"timestamp": {
"secs_since_epoch": 1780318959,
"nanos_since_epoch": 622763831
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "shell",
"shell": "git config --global user.name 'Ambient CI'",
"timestamp": {
"secs_since_epoch": 1780318959,
"nanos_since_epoch": 622976401
},
"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": 1780318959,
"nanos_since_epoch": 622986214
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "",
"stderr": "+ git config --global user.name 'Ambient CI'\n",
"timestamp": {
"secs_since_epoch": 1780318959,
"nanos_since_epoch": 640690314
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "shell",
"shell": "git config --global user.name 'Ambient CI'",
"timestamp": {
"secs_since_epoch": 1780318959,
"nanos_since_epoch": 640727032
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "shell",
"shell": "git config --global user.email ambient@example.com",
"timestamp": {
"secs_since_epoch": 1780318959,
"nanos_since_epoch": 641165091
},
"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": 1780318959,
"nanos_since_epoch": 641176158
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "",
"stderr": "+ git config --global user.email ambient@example.com\n",
"timestamp": {
"secs_since_epoch": 1780318959,
"nanos_since_epoch": 657207466
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "shell",
"shell": "git config --global user.email ambient@example.com",
"timestamp": {
"secs_since_epoch": 1780318959,
"nanos_since_epoch": 657254932
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "cargo_fmt",
"timestamp": {
"secs_since_epoch": 1780318959,
"nanos_since_epoch": 657480342
},
"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": 1780318959,
"nanos_since_epoch": 657489347
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "cargo 1.95.0 (f2d3ce0bd 2026-03-21)\n",
"stderr": "",
"timestamp": {
"secs_since_epoch": 1780318959,
"nanos_since_epoch": 695188363
},
"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": 1780318959,
"nanos_since_epoch": 695232274
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "clippy 0.1.95 (59807616e1 2026-04-14)\n",
"stderr": "",
"timestamp": {
"secs_since_epoch": 1780318959,
"nanos_since_epoch": 753090229
},
"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": 1780318959,
"nanos_since_epoch": 753133609
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "rustc 1.95.0 (59807616e 2026-04-14)\n",
"stderr": "",
"timestamp": {
"secs_since_epoch": 1780318959,
"nanos_since_epoch": 773688107
},
"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": 1780318959,
"nanos_since_epoch": 773730188
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "",
"stderr": "",
"timestamp": {
"secs_since_epoch": 1780318959,
"nanos_since_epoch": 937529350
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "cargo_fmt",
"timestamp": {
"secs_since_epoch": 1780318959,
"nanos_since_epoch": 939794548
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "cargo_clippy",
"timestamp": {
"secs_since_epoch": 1780318959,
"nanos_since_epoch": 941830256
},
"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": 1780318959,
"nanos_since_epoch": 943846857
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "cargo 1.95.0 (f2d3ce0bd 2026-03-21)\n",
"stderr": "",
"timestamp": {
"secs_since_epoch": 1780318959,
"nanos_since_epoch": 954889234
},
"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": 1780318959,
"nanos_since_epoch": 954919726
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "clippy 0.1.95 (59807616e1 2026-04-14)\n",
"stderr": "",
"timestamp": {
"secs_since_epoch": 1780318959,
"nanos_since_epoch": 986592120
},
"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": 1780318959,
"nanos_since_epoch": 989431875
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "rustc 1.95.0 (59807616e 2026-04-14)\n",
"stderr": "",
"timestamp": {
"secs_since_epoch": 1780318960,
"nanos_since_epoch": 3978881
},
"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": 1780318960,
"nanos_since_epoch": 6752801
},
"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 3.08s\n",
"timestamp": {
"secs_since_epoch": 1780318963,
"nanos_since_epoch": 157730747
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "cargo_clippy",
"timestamp": {
"secs_since_epoch": 1780318963,
"nanos_since_epoch": 157775342
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "cargo_test",
"timestamp": {
"secs_since_epoch": 1780318963,
"nanos_since_epoch": 157781714
},
"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": 1780318963,
"nanos_since_epoch": 157790339
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "cargo 1.95.0 (f2d3ce0bd 2026-03-21)\n",
"stderr": "",
"timestamp": {
"secs_since_epoch": 1780318963,
"nanos_since_epoch": 176127657
},
"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": 1780318963,
"nanos_since_epoch": 178870840
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "clippy 0.1.95 (59807616e1 2026-04-14)\n",
"stderr": "",
"timestamp": {
"secs_since_epoch": 1780318963,
"nanos_since_epoch": 208079981
},
"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": 1780318963,
"nanos_since_epoch": 210860044
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "rustc 1.95.0 (59807616e 2026-04-14)\n",
"stderr": "",
"timestamp": {
"secs_since_epoch": 1780318963,
"nanos_since_epoch": 225605628
},
"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": 1780318963,
"nanos_since_epoch": 228354987
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "\nrunning 117 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::fetch_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 ... 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. 117 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 50.20s\n\n\nrunning 12 tests\ntest reconcile::tests::bare_iroh_is_current_endpoint ... ok\ntest reconcile::tests::current_endpoint_not_seeded_is_orphaned_self ... ok\ntest reconcile::tests::explicit_current_endpoint_is_current ... ok\ntest reconcile::tests::legacy_iroh_scheme_is_stale ... ok\ntest reconcile::tests::missing_and_dangling_split_correctly ... ok\ntest reconcile::tests::missing_picks_release_with_latest_timestamp ... ok\ntest reconcile::tests::legacy_only_cid_is_reported_missing ... ok\ntest reconcile::tests::mixed_urls_on_same_cid_split_into_buckets ... ok\ntest reconcile::tests::other_endpoint_is_stale ... ok\ntest reconcile::tests::seeded_with_current_location_is_not_missing ... ok\ntest reconcile::tests::seeded_cid_with_no_matching_release_is_dangling ... 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.52s\n\n",
"stderr": " Compiling radicle-artifact v0.14.0 (/ci/src)\n Finished `test` profile [unoptimized + debuginfo] target(s) in 11.92s\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": 1780319027,
"nanos_since_epoch": 143627714
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "cargo_test",
"timestamp": {
"secs_since_epoch": 1780319027,
"nanos_since_epoch": 268536539
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "tar_create",
"archive": "/dev/vde",
"directory": "/ci/cache",
"timestamp": {
"secs_since_epoch": 1780319027,
"nanos_since_epoch": 270550227
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "tar_create",
"archive": "/dev/vde",
"directory": "/ci/cache",
"timestamp": {
"secs_since_epoch": 1780319031,
"nanos_since_epoch": 734583805
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "tar_create",
"archive": "/dev/vdd",
"directory": "/ci/artifacts",
"timestamp": {
"secs_since_epoch": 1780319031,
"nanos_since_epoch": 734624003
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "tar_create",
"archive": "/dev/vdd",
"directory": "/ci/artifacts",
"timestamp": {
"secs_since_epoch": 1780319031,
"nanos_since_epoch": 737053495
},
"log_source": "Plan"
}{
"type": "plan_succeeded",
"timestamp": {
"secs_since_epoch": 1780319031,
"nanos_since_epoch": 737217100
},
"log_source": "Plan"
}{
"type": "executor_ends_successfully",
"timestamp": {
"secs_since_epoch": 1780319031,
"nanos_since_epoch": 737222743
},
"log_source": "Plan"
}{
"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": "89aefb982e5fbb241bab49d76656303b630e0c87",
"commits": [
"89aefb982e5fbb241bab49d76656303b630e0c87",
"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
},
{
"id": "ca09045295e6c3b7ed3ea649d66c579eaa2cfa08",
"author": {
"id": "did:key:z6MktwkohCx8aHZ1QCjVZUiLmX92oPZFxRiFZkbq32Tk5Tkm",
"alias": "2color"
},
"description": "feat(node): add cheap Alive command for liveness\n\n- add Command::Alive that acks without touching node state\n- switch is_running to it instead of the heavier Status probe, so\n stale-socket detection stops enumerating tags and reading metrics\n- name it Alive, not Ping, to avoid clashing with a future\n network-level reachability check against a peer endpoint",
"base": "88543850c731a4cbcfd4919fa6443626da9fadeb",
"oid": "89aefb982e5fbb241bab49d76656303b630e0c87",
"timestamp": 1780318936
}
]
}
}executor from config: /usr/bin/ambient-execute-plan executor from PATH: /usr/bin/ambient-execute-plan run CI for rad:z4VYyJ9KuwMNkXGQnmKuGPGKw3inv
<empty log>