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": 1777298042,
"nanos_since_epoch": 545565204
},
"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": 1777298042,
"nanos_since_epoch": 545769110
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "mkdir",
"pathname": "/ci",
"timestamp": {
"secs_since_epoch": 1777298042,
"nanos_since_epoch": 545826218
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "mkdir",
"pathname": "/ci",
"timestamp": {
"secs_since_epoch": 1777298042,
"nanos_since_epoch": 546293013
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "mkdir",
"pathname": "/ci/artifacts",
"timestamp": {
"secs_since_epoch": 1777298042,
"nanos_since_epoch": 546489986
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "mkdir",
"pathname": "/ci/artifacts",
"timestamp": {
"secs_since_epoch": 1777298042,
"nanos_since_epoch": 546520668
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "tar_extract",
"archive": "/dev/vdc",
"directory": "/ci/src",
"timestamp": {
"secs_since_epoch": 1777298042,
"nanos_since_epoch": 546696745
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "tar_extract",
"archive": "/dev/vdc",
"directory": "/ci/src",
"timestamp": {
"secs_since_epoch": 1777298042,
"nanos_since_epoch": 574352721
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "tar_extract",
"archive": "/dev/vdf",
"directory": "/ci/deps",
"timestamp": {
"secs_since_epoch": 1777298042,
"nanos_since_epoch": 574389667
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "tar_extract",
"archive": "/dev/vdf",
"directory": "/ci/deps",
"timestamp": {
"secs_since_epoch": 1777298045,
"nanos_since_epoch": 231950256
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "tar_extract",
"archive": "/dev/vde",
"directory": "/ci/cache",
"timestamp": {
"secs_since_epoch": 1777298045,
"nanos_since_epoch": 234959482
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "tar_extract",
"archive": "/dev/vde",
"directory": "/ci/cache",
"timestamp": {
"secs_since_epoch": 1777298050,
"nanos_since_epoch": 358600406
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "shell",
"shell": "ln -sf /ci /workspace",
"timestamp": {
"secs_since_epoch": 1777298050,
"nanos_since_epoch": 361168747
},
"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": 1777298050,
"nanos_since_epoch": 363443796
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "",
"stderr": "+ ln -sf /ci /workspace\n",
"timestamp": {
"secs_since_epoch": 1777298050,
"nanos_since_epoch": 370398590
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "shell",
"shell": "ln -sf /ci /workspace",
"timestamp": {
"secs_since_epoch": 1777298050,
"nanos_since_epoch": 372929969
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "shell",
"shell": "git config --global user.name 'Ambient CI'",
"timestamp": {
"secs_since_epoch": 1777298050,
"nanos_since_epoch": 375215831
},
"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": 1777298050,
"nanos_since_epoch": 377685197
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "",
"stderr": "+ git config --global user.name 'Ambient CI'\n",
"timestamp": {
"secs_since_epoch": 1777298050,
"nanos_since_epoch": 388329186
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "shell",
"shell": "git config --global user.name 'Ambient CI'",
"timestamp": {
"secs_since_epoch": 1777298050,
"nanos_since_epoch": 391141548
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "shell",
"shell": "git config --global user.email ambient@example.com",
"timestamp": {
"secs_since_epoch": 1777298050,
"nanos_since_epoch": 393634026
},
"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": 1777298050,
"nanos_since_epoch": 396269291
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "",
"stderr": "+ git config --global user.email ambient@example.com\n",
"timestamp": {
"secs_since_epoch": 1777298050,
"nanos_since_epoch": 404065438
},
"log_source": "Plan"
}{
"type": "action_succeeded",
"action": "shell",
"shell": "git config --global user.email ambient@example.com",
"timestamp": {
"secs_since_epoch": 1777298050,
"nanos_since_epoch": 406937989
},
"log_source": "Plan"
}{
"type": "execute_action",
"action": "cargo_fmt",
"timestamp": {
"secs_since_epoch": 1777298050,
"nanos_since_epoch": 409534072
},
"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": 1777298050,
"nanos_since_epoch": 411482209
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "cargo 1.94.0 (85eff7c80 2026-01-15)\n",
"stderr": "",
"timestamp": {
"secs_since_epoch": 1777298050,
"nanos_since_epoch": 469471596
},
"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": 1777298050,
"nanos_since_epoch": 472223391
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "clippy 0.1.94 (4a4ef493e3 2026-03-02)\n",
"stderr": "",
"timestamp": {
"secs_since_epoch": 1777298050,
"nanos_since_epoch": 577189216
},
"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": 1777298050,
"nanos_since_epoch": 580008194
},
"log_source": "Plan"
}{
"type": "program_succeeded",
"exit_code": 0,
"stdout": "rustc 1.94.0 (4a4ef493e 2026-03-02)\n",
"stderr": "",
"timestamp": {
"secs_since_epoch": 1777298050,
"nanos_since_epoch": 624090080
},
"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": 1777298050,
"nanos_since_epoch": 626831503
},
"log_source": "Plan"
}{
"type": "program_failed",
"exit_code": 1,
"stdout": "Diff in /ci/src/src/bin/rad-artifact.rs:1057:\n name, commit_oid, ..\n } => {\n let short = &commit_oid.to_string()[..7];\n- let title =\n- display::CommitTitle::title(repo, commit_oid).unwrap_or_default();\n+ let title = display::CommitTitle::title(repo, commit_oid).unwrap_or_default();\n format!(\"{name} -> {short} {title}\")\n }\n Entry::Commit { oid } => {\nDiff in /ci/src/src/bin/rad-artifact.rs:1171:\n })?;\n if object.kind() == Some(ObjectType::Tag) {\n let tag_oid: Oid = object.id().into();\n- let peeled = object.peel(ObjectType::Commit).map_err(|err| error::Resolve {\n- revision: rev.to_owned(),\n- err,\n- })?;\n+ let peeled = object\n+ .peel(ObjectType::Commit)\n+ .map_err(|err| error::Resolve {\n+ revision: rev.to_owned(),\n+ err,\n+ })?;\n Ok(ResolvedRef {\n commit: peeled.id().into(),\n tag: Some(tag_oid),\nDiff in /ci/src/src/lib.rs:1039:\n \n /// Collect the delegate set for a Radicle storage repository for use\n /// with `find_or_create_by_oid` and `find_unique_by_oid`.\n- fn delegates(\n- repo: &radicle::storage::git::Repository,\n- ) -> std::collections::BTreeSet<Did> {\n+ fn delegates(repo: &radicle::storage::git::Repository) -> std::collections::BTreeSet<Did> {\n use radicle::prelude::ReadRepository;\n repo.delegates().unwrap().into_iter().collect()\n }\nDiff in /ci/src/src/lib.rs:2006:\n node: _alice, repo, ..\n } = test::setup::NodeWithRepo::default();\n let test::setup::NodeWithRepo { node: bob, .. } = test::setup::NodeWithRepo::default();\n- let test::setup::NodeWithRepo { node: carol, .. } =\n- test::setup::NodeWithRepo::default();\n+ let test::setup::NodeWithRepo { node: carol, .. } = test::setup::NodeWithRepo::default();\n let oid = commit(&repo.backend, \"v1.0\");\n // Bob and Carol are not delegates of repo.\n let delegates = delegates(&repo);\nDiff in /ci/src/src/lib.rs:2270:\n node: _alice, repo, ..\n } = test::setup::NodeWithRepo::default();\n let test::setup::NodeWithRepo { node: bob, .. } = test::setup::NodeWithRepo::default();\n- let test::setup::NodeWithRepo { node: carol, .. } =\n- test::setup::NodeWithRepo::default();\n+ let test::setup::NodeWithRepo { node: carol, .. } = test::setup::NodeWithRepo::default();\n let oid = commit(&repo.backend, \"Test Commit\");\n let delegates = delegates(&repo);\n let mut releases = Releases::open(&*repo).unwrap();\n",
"stderr": "",
"timestamp": {
"secs_since_epoch": 1777298050,
"nanos_since_epoch": 823505855
},
"log_source": "Plan"
}{
"type": "action_failed",
"action": "cargo_fmt",
"timestamp": {
"secs_since_epoch": 1777298050,
"nanos_since_epoch": 862256043
},
"log_source": "Plan"
}{
"type": "executor_ends_in_failure",
"exit_code": 1,
"timestamp": {
"secs_since_epoch": 1777298050,
"nanos_since_epoch": 865801971
},
"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": "Created",
"patch": {
"id": "38c7fa789850450f8936febdad50dfe59d89648f",
"author": {
"id": "did:key:z6MktwkohCx8aHZ1QCjVZUiLmX92oPZFxRiFZkbq32Tk5Tkm",
"alias": "2color"
},
"title": "Add support for tags in releases",
"state": {
"status": "open",
"conflicts": []
},
"before": "1af9b4fc79a1e5816b92292bab422287c2dc65a3",
"after": "09680ca0635cc64ebdae618c63b798af78b17c88",
"commits": [
"09680ca0635cc64ebdae618c63b798af78b17c88",
"d8d7319f181c4f640a65a2e1ada5824e4903be96",
"35a619ce9659d3d971c179942f4e57f68dccf626",
"58dd5a7c4f6be9236bd656be066e5f64f3bccafa",
"479cd44bbe4721492964549b784806c071ca609a",
"acf7cc89bfd393f9ba4d3660c4fe5f5a4147081a",
"c0e2958fa068ac9c32ffaca65600b5a69269281b",
"b04d6befebf153c845a3e7b553cd65cf33b893ed",
"6796786e4047995656d118008aa5f576b4c60ac1"
],
"target": "1af9b4fc79a1e5816b92292bab422287c2dc65a3",
"labels": [],
"assignees": [],
"revisions": [
{
"id": "38c7fa789850450f8936febdad50dfe59d89648f",
"author": {
"id": "did:key:z6MktwkohCx8aHZ1QCjVZUiLmX92oPZFxRiFZkbq32Tk5Tkm",
"alias": "2color"
},
"description": "feat: add optional tag OID to Release schema\n\n- extend Action::Create with tag: Option<Oid> (serde default and\n skip_serializing_if to keep existing COB payloads byte-identical)\n- add Release.tag field with matching serde defaults so older COBs\n deserialize to None\n- thread tag through Release::new and Cob::from_root\n- expose Release::tag() accessor\n- thread tag through Transaction::create; current caller passes None\n\nWhy: a release can now durably record an annotated tag association\nin the COB content, without changing the commit-keyed parent that\nthe COB store requires. First-writer-wins semantics fall out of the\nexisting rule that subsequent Action::Create are ignored.\n\n\nfeat: record COB creator on Release\n\n- add Release.creator: Did, populated in Cob::from_root from the\n signer of the initial op\n- expose Release::creator() accessor\n- thread creator through Release::new\n\nWhy: needed to apply delegate-priority rules when selecting the\ncanonical COB among duplicates for the same commit. Per-op author\nis still tracked separately for artifact attribution.\n\n\nfeat: delegate-priority canonical COB selection\n\n- find_or_create_by_oid now takes a tag and a delegate set\n- selection rule: prefer delegate-authored release; if none and the\n signer is a delegate, bootstrap a fresh COB; otherwise reuse any\n existing release; otherwise create new\n- create() takes a tag argument that is recorded only at creation\n time (first-writer-wins via the existing \"subsequent Create\n ignored\" rule)\n- thread the delegate set through the rad-artifact add path\n\nWhy: a non-delegate creating a release first would otherwise lock\nin their tag and timestamp metadata for every subsequent delegate\nwrite to the same commit. With this rule, a delegate always lands\non a delegate-authored COB, while non-delegates still converge\ndeterministically to existing releases.\n\n\nfeat: delegate-priority lookup in find_unique_by_oid\n\n- prefer delegate-authored releases (smallest ReleaseId among them)\n- fall back to a single non-delegate release when no delegate\n release exists; only error Ambiguous when there are multiple\n non-delegate releases and no delegate canonical\n- thread &BTreeSet<Did> through every CLI read/write path that\n calls find_unique_by_oid (location_add, attest, redact,\n location_remove, show); add Delegates error variants where needed\n\nWhy: read paths now surface the same canonical COB the write path\nselects, so show / attest / redact resolve unambiguously when a\ndelegate has bootstrapped their own COB alongside an earlier\nnon-delegate one.\n\n\nfeat: resolve refs to (commit, optional tag) pair\n\n- replace resolve_commit with resolve_ref returning ResolvedRef\n { commit, tag: Option<Oid> }; for annotated tag refs the tag's\n own OID is returned alongside the peeled commit\n- update every CLI entry point to take .commit; add path threads\n resolved.tag into find_or_create_by_oid so the COB records the\n annotated tag association on first creation\n- picker now returns a ResolvedRef and shows both annotated tag\n entries and the commits they point to as separate options, so\n the user can explicitly opt out of tag-association by picking\n the commit entry\n\nWhy: every CLI entry point now resolves an annotated tag ref to a\ncommit OID before passing it to the COB store, fixing the\n\"parent is not a commit object\" creation failure and the lookup\nmiss that affected show / attest / redact / location / fetch when\nthe user passed a tag name.\n\n\nfeat: surface tag association in release display\n\n- display::Release carries an optional tag OID, serialized when set\n- pretty output renders 'tag <short> -> commit <short>' for\n tag-associated releases and 'commit <short>' otherwise\n- title resolution prefers the tag message's first line, falling\n back to the commit summary when the tag object isn't present\n locally\n- CommitTitle for Repository now handles both commit and annotated\n tag OIDs\n\nWhy: with the tag OID now durably recorded on the COB, display\noutput should reflect the tag association so users see the same\nref label they used to create the release.\n\n\ntest: cover tag field, creator, and delegate priority\n\n- update existing tests for new Releases API signatures (tag arg\n on create, plus tag/delegates/signer on find_or_create_by_oid\n and find_unique_by_oid)\n- add a delegates() helper for collecting the repo's delegate set\n in tests\n- replace find_or_create_picks_smallest_id_when_duplicates_exist\n with find_or_create_prefers_delegate_release; the smallest-id\n rule now only applies inside the delegate class\n- add new tests:\n - find_or_create_creates_new_when_only_non_delegate_exists\n - find_or_create_non_delegate_reuses_non_delegate_release\n - create_records_tag_oid / create_without_tag_leaves_none\n - find_or_create_first_writer_wins_tag\n - tag_persists_through_reload\n - creator_persists_through_reload\n - find_unique_prefers_delegate_release\n - find_unique_returns_single_non_delegate\n - find_unique_ambiguous_only_among_non_delegates\n - tag_field_default_none_on_old_actions\n\nWhy: lock in the schema additions, the delegate-priority rules in\nboth lookup paths, and the backward-compat handling for COBs\ncreated before the tag field existed.\n\n\ndocs: tighten comments and remove stale notes\n\n- collapse Release struct doc and field docs that duplicated each\n other\n- shorten Release::tag and Release::creator accessor docs\n- replace stale \"no delegate filter needed\" comments on attest /\n redact paths now that both pass the delegate set\n- drop the \"unlike location_add\" comment on location_remove now\n that both paths share the same canonical-release lookup\n- update picker doc: tag and peeled commit now both appear as\n separate entries, not deduped\n- tighten CommitTitle trait and impl docs; the release is always\n commit-keyed, the tag is metadata\n- trim find_or_create_by_oid body comments that restated the\n function's doc list\n\nWhy: comments and docs got out of sync as semantics changed\nthrough the schema, lookup, and display steps; stale prose was\nasserting things the code no longer does.\n\n\nrefactor: rename CLI commit args to revision\n\n- positional <COMMIT> placeholders renamed to <REVISION> on show,\n attest, redact, fetch, location add, location remove\n- the --commit named flag on `add` becomes --revision; --commit is\n kept as a hidden alias for backward compatibility\n- error::Resolve { commit } renamed to { revision } and the error\n message updated\n- ResolvedRef.commit and resolve_ref's `rev` parameter unchanged\n (they describe what the resolution outputs, not the user input)\n- examples in --help refreshed to use tag-shaped values where\n natural (e.g. v1.0)\n\nWhy: the args accept commit hashes, abbreviated OIDs, annotated\ntag names, lightweight tags — anything revparse_single resolves\nto a commit. \"Revision\" matches git's vocabulary for that and is\nno longer misleading after we added explicit tag support.",
"base": "1af9b4fc79a1e5816b92292bab422287c2dc65a3",
"oid": "09680ca0635cc64ebdae618c63b798af78b17c88",
"timestamp": 1777298029
}
]
}
}executor from config: /usr/bin/ambient-execute-plan executor from PATH: /usr/bin/ambient-execute-plan run CI for rad:z4VYyJ9KuwMNkXGQnmKuGPGKw3inv ERROR: CI run failed inside QEMU
<empty log>