rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5 heartwoodcb2cbf014a123a1cd0cd0f188f093e014f93647b
{
"request": "trigger",
"version": 1,
"event_type": "patch",
"repository": {
"id": "rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5",
"name": "heartwood",
"description": "Radicle Heartwood Protocol & Stack",
"private": false,
"default_branch": "master",
"delegates": [
"did:key:z6MksFqXN3Yhqk8pTJdUGLwATkRfQvwZXPqR2qMEhbS9wzpT",
"did:key:z6MkireRatUThvd3qzfKht1S44wpm4FEWSSa4PRMTSQZ3voM",
"did:key:z6MkkPvBfjP4bQmco5Dm7UGsX2ruDBieEHi8n9DVJWX5sTEz"
]
},
"action": "Created",
"patch": {
"id": "7a31630ad30048aec7d573a0f4bbdf33916b469e",
"author": {
"id": "did:key:z6MkireRatUThvd3qzfKht1S44wpm4FEWSSa4PRMTSQZ3voM",
"alias": null
},
"title": "cli: reject `rad id` proposals that do not verify",
"state": {
"status": "merged",
"conflicts": []
},
"before": "11a1bca0fc97dbc93653e53f0e33e7883f9cb637",
"after": "cb2cbf014a123a1cd0cd0f188f093e014f93647b",
"commits": [
"cb2cbf014a123a1cd0cd0f188f093e014f93647b"
],
"target": "3fc92f83fe089263c470b328414d923227cf0e4a",
"labels": [],
"assignees": [],
"revisions": [
{
"id": "7a31630ad30048aec7d573a0f4bbdf33916b469e",
"author": {
"id": "did:key:z6MkireRatUThvd3qzfKht1S44wpm4FEWSSa4PRMTSQZ3voM",
"alias": null
},
"description": "To ensure that the `rad id` command does not modify the project payload without\nit being able to be deserialized into the `Project` type, the command performs\nthis check throught the `project` method, and returns an error if this fails.",
"base": "25c6660a59c621de1ec406e4f9b2ccfbd21e1b90",
"oid": "d582c749cd4228749ef2a71469bb49c157dadb6f",
"timestamp": 1715700009
},
{
"id": "363e16130d8d5db9ff76033febb6faeaaee5a4bb",
"author": {
"id": "did:key:z6MkireRatUThvd3qzfKht1S44wpm4FEWSSa4PRMTSQZ3voM",
"alias": null
},
"description": "Changes:\n- dropped commit for Project fields\n- clean up error message",
"base": "11a1bca0fc97dbc93653e53f0e33e7883f9cb637",
"oid": "cb2cbf014a123a1cd0cd0f188f093e014f93647b",
"timestamp": 1715850899
}
]
}
}
{
"response": "triggered",
"run_id": {
"id": "4cfe3e33-1977-4e0d-be5d-edbc33ac38f1"
},
"info_url": "https://cci.rad.levitte.org//4cfe3e33-1977-4e0d-be5d-edbc33ac38f1.html"
}
Started at: 2026-09-07 23:34:10.299810+02:00
Commands:
$ rad clone rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5 .
✓ Creating checkout in ./...
✓ Remote cloudhead@z6MksFqXN3Yhqk8pTJdUGLwATkRfQvwZXPqR2qMEhbS9wzpT added
✓ Remote-tracking branch cloudhead@z6MksFqXN3Yhqk8pTJdUGLwATkRfQvwZXPqR2qMEhbS9wzpT/master created for z6MksFqXN3Yhqk8pTJdUGLwATkRfQvwZXPqR2qMEhbS9wzpT
✓ Remote fintohaps@z6MkireRatUThvd3qzfKht1S44wpm4FEWSSa4PRMTSQZ3voM added
✓ Remote-tracking branch fintohaps@z6MkireRatUThvd3qzfKht1S44wpm4FEWSSa4PRMTSQZ3voM/master created for z6MkireRatUThvd3qzfKht1S44wpm4FEWSSa4PRMTSQZ3voM
✓ Remote lorenz@z6MkkPvBfjP4bQmco5Dm7UGsX2ruDBieEHi8n9DVJWX5sTEz added
✓ Remote-tracking branch lorenz@z6MkkPvBfjP4bQmco5Dm7UGsX2ruDBieEHi8n9DVJWX5sTEz/master created for z6MkkPvBfjP4bQmco5Dm7UGsX2ruDBieEHi8n9DVJWX5sTEz
✓ Repository successfully cloned under /opt/radcis/ci.rad.levitte.org/cci/state/4cfe3e33-1977-4e0d-be5d-edbc33ac38f1/w/
╭────────────────────────────────────╮
│ heartwood │
│ Radicle Heartwood Protocol & Stack │
│ 189 issues · 38 patches │
╰────────────────────────────────────╯
Run `cd ./.` to go to the repository directory.
Exit code: 0
$ rad patch checkout 7a31630ad30048aec7d573a0f4bbdf33916b469e
✓ Switched to branch patch/7a31630 at revision 363e161
✓ Branch patch/7a31630 setup to track rad/patches/7a31630ad30048aec7d573a0f4bbdf33916b469e
Exit code: 0
$ git config advice.detachedHead false
Exit code: 0
$ git checkout cb2cbf014a123a1cd0cd0f188f093e014f93647b
HEAD is now at cb2cbf01 cli: reject `rad id` proposals that do not verify
Exit code: 0
$ rad patch show 7a31630ad30048aec7d573a0f4bbdf33916b469e -p
╭─────────────────────────────────────────────────────────────────────────────────╮
│ Title cli: reject `rad id` proposals that do not verify │
│ Patch 7a31630ad30048aec7d573a0f4bbdf33916b469e │
│ Author fintohaps z6Mkire…SQZ3voM │
│ Head cb2cbf014a123a1cd0cd0f188f093e014f93647b │
│ Base 11a1bca0fc97dbc93653e53f0e33e7883f9cb637 │
│ Target master │
│ Branches patch/7a31630 │
│ Commits ahead 0, behind 1345 │
│ Status merged │
│ │
│ To ensure that the `rad id` command does not modify the project payload without │
│ it being able to be deserialized into the `Project` type, the command performs │
│ this check throught the `project` method, and returns an error if this fails. │
├─────────────────────────────────────────────────────────────────────────────────┤
│ cb2cbf0 cli: reject `rad id` proposals that do not verify │
├─────────────────────────────────────────────────────────────────────────────────┤
│ ● Revision 7a31630 @ 25c6660..d582c74 by fintohaps z6Mkire…SQZ3voM 2 years ago │
│ ↑ Revision 363e161 @ 11a1bca..cb2cbf0 by fintohaps z6Mkire…SQZ3voM 2 years ago │
│ └─ ✓ merged by cloudhead z6MksFq…bS9wzpT │
╰─────────────────────────────────────────────────────────────────────────────────╯
commit cb2cbf014a123a1cd0cd0f188f093e014f93647b
Author: Fintan Halpenny <fintan.halpenny@gmail.com>
Date: Tue May 14 15:59:08 2024 +0100
cli: reject `rad id` proposals that do not verify
To ensure that the `rad id` command does not modify the project payload without
it being able to be deserialized into the `Project` type, the command performs
this check throught the `project` method, and returns an error if this fails.
Signed-off-by: Fintan Halpenny <fintan.halpenny@gmail.com>
X-Clacks-Overhead: GNU Terry Pratchett
diff --git a/radicle-cli/examples/rad-id-update-delete-field.md b/radicle-cli/examples/rad-id-update-delete-field.md
index 548cc9c65..968dd829d 100644
--- a/radicle-cli/examples/rad-id-update-delete-field.md
+++ b/radicle-cli/examples/rad-id-update-delete-field.md
@@ -69,3 +69,10 @@ $ rad id update --title "Delete field" --description "Delete 'web'" --payload xy
"threshold": 1
}
```
+
+Note that we cannot delete mandatory fields:
+
+``` (fails)
+$ rad id update --title "Delete default branch" --payload xyz.radicle.project defaultBranch null
+✗ Error: failed to verify `xyz.radicle.project`, failed with json: missing field `defaultBranch`
+```
diff --git a/radicle-cli/src/commands/id.rs b/radicle-cli/src/commands/id.rs
index f2333ee84..95153beb8 100644
--- a/radicle-cli/src/commands/id.rs
+++ b/radicle-cli/src/commands/id.rs
@@ -390,6 +390,11 @@ pub fn run(options: Options, ctx: impl term::Context) -> anyhow::Result<()> {
anyhow::bail!("payload `{id}` not found in identity document");
}
}
+ // Verify that the project payload can still be parsed into the
+ // `Project` type.
+ if let Err(e) = proposal.project() {
+ anyhow::bail!("failed to verify `xyz.radicle.project`, failed with {e}",);
+ }
proposal
};
if proposal == current.doc {
Exit code: 0
shell: 'cargo --version rustc --version cargo fmt --check cargo clippy --all-targets --workspace -- --deny clippy::all cargo build --all-targets --workspace cargo doc --workspace cargo test --workspace --no-fail-fast '
Commands:
$ podman run --name 4cfe3e33-1977-4e0d-be5d-edbc33ac38f1 -v /opt/radcis/ci.rad.levitte.org/cci/state/4cfe3e33-1977-4e0d-be5d-edbc33ac38f1/s:/4cfe3e33-1977-4e0d-be5d-edbc33ac38f1/s:ro -v /opt/radcis/ci.rad.levitte.org/cci/state/4cfe3e33-1977-4e0d-be5d-edbc33ac38f1/w:/4cfe3e33-1977-4e0d-be5d-edbc33ac38f1/w -w /4cfe3e33-1977-4e0d-be5d-edbc33ac38f1/w -v /opt/radcis/ci.rad.levitte.org/.radicle:/${id}/.radicle:ro -e RAD_HOME=/${id}/.radicle rust:trixie bash /4cfe3e33-1977-4e0d-be5d-edbc33ac38f1/s/script.sh
+ cargo --version
info: syncing channel updates for '1.77-x86_64-unknown-linux-gnu'
info: latest update on 2024-04-09, rust version 1.77.2 (25ef9e3d8 2024-04-09)
info: downloading component 'cargo'
info: downloading component 'rust-std'
info: downloading component 'rustc'
info: installing component 'cargo'
info: installing component 'rust-std'
info: installing component 'rustc'
cargo 1.77.2 (e52e36006 2024-03-26)
+ rustc --version
rustc 1.77.2 (25ef9e3d8 2024-04-09)
+ cargo fmt --check
error: 'cargo-fmt' is not installed for the toolchain '1.77-x86_64-unknown-linux-gnu'.
To install, run `rustup component add --toolchain 1.77-x86_64-unknown-linux-gnu rustfmt`
Exit code: 1
{
"response": "finished",
"result": "failure"
}