rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5 heartwood37aa1dbca1032defced89bc3e602c8cac47449f7
{
"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": "e500399b3e1db5fe7bcf6d7661d5a42dfa49d4d5",
"author": {
"id": "did:key:z6MkgFq6z5fkF2hioLLSNu1zP2qEL1aHXHZzGH1FLFGAnBGz",
"alias": "erikli"
},
"title": "radicle: improve inline comments",
"state": {
"status": "draft",
"conflicts": []
},
"before": "2a47bc0c7dd6238ce3416e19d2ba57f3a7626f64",
"after": "37aa1dbca1032defced89bc3e602c8cac47449f7",
"commits": [
"37aa1dbca1032defced89bc3e602c8cac47449f7",
"222e53c358dd9d87894ec64e8181b8353a5c517e",
"78b41239ea8f2eafa9eecac8298bfd29dca38f9f",
"b455c819807cd7a7543d03215570c72b7cb452d7",
"e67a8f4d32c830c24ed68ea21707923480830511"
],
"target": "919d5c780c4da0b5b9f18f1549bc59dffd7125af",
"labels": [],
"assignees": [],
"revisions": [
{
"id": "e500399b3e1db5fe7bcf6d7661d5a42dfa49d4d5",
"author": {
"id": "did:key:z6MkgFq6z5fkF2hioLLSNu1zP2qEL1aHXHZzGH1FLFGAnBGz",
"alias": "erikli"
},
"description": "The previous `CodeLocation` type did not correctly represent the semantics of an\ninline code location, for the following reasons:\n\n1. If it is for lines within a file pertaining to the commit, then there should\n be no `old` or `new` ranges, only a single range.\n2. If it is for a patch created by diffing the commit with another commit, then\n the other commit is missing.\n\nIt could be argued that the semantics of these two cases could be retrieved by:\n\n1. In the first case, just use one of the ranges.\n2. In the second case, infer the commit from the context, e.g. always use\n `Revision::base` for locations used in the `ReviewComment`.\n\nInstead, the type is renamed to `PartialLocation` to represent these semantics\nbetter, and only remains for backwards-compatibility when deserializing existing\ndata.\n\nTwo new types are introduced `CommitLocation` and `DiffLocation`, which more\naccurately describe the two cases.\n\nEach of these is used in a `Patch`'s `Revision` and `Review` thread\nrespectively. These are created with new actions `RevisionCommitComment` and\n`ReviewDiffComment`, while deprecating the use of `RevisionComment` and\n`ReviewComment` \u2013 they can no longer be constructed outside of the module.\n\nThe final part is to ensure that clients can calculate stable diffs for patches\n\u2013 to allow them to display the `DiffLocation`s correctly \u2013 the relevant diff\noptions are recorded for each patch. Sane defaults are used if the options are\nmissing.",
"base": "3b5fac178eaf9bca639fbd0c1df0c68619a7f51f",
"oid": "3679d0fbeb6123e7bed99bd3ddd05fea9ac83790",
"timestamp": 1741364575
},
{
"id": "687497ce5855e549e237de665e684772dbc28f76",
"author": {
"id": "did:key:z6MkgFq6z5fkF2hioLLSNu1zP2qEL1aHXHZzGH1FLFGAnBGz",
"alias": "erikli"
},
"description": "Changes:\n- Split up the patch into separate commits\n- Optional selection for file-level comments\n- Rename actions to use `V1` suffix, keeping the latest version of actions using\n their regular names. As well as this, the enum tag renames use `.v2` suffix.\n- Refactor `diff::Options` methods to return `git2::DiffOptions` directly.\n- Add `FindOptions` to the `diff::Options`.",
"base": "3b5fac178eaf9bca639fbd0c1df0c68619a7f51f",
"oid": "17713eab9565df332bb3ce40d3cf78f282d86050",
"timestamp": 1742995065
},
{
"id": "b168b283a23c3ca2457abf8b185d2b09eabe56af",
"author": {
"id": "did:key:z6MkgFq6z5fkF2hioLLSNu1zP2qEL1aHXHZzGH1FLFGAnBGz",
"alias": "erikli"
},
"description": "Changes:\n- Remove `all` from `FindOptions` \u2013 I found that it is worse at detecting\n renames\n- Remove `exact_match`, because I believe this will only look at SHAs and not\n return renames",
"base": "3b5fac178eaf9bca639fbd0c1df0c68619a7f51f",
"oid": "ff6cb4a3633bf31513824282628a4a3d19e6fbd9",
"timestamp": 1743007134
},
{
"id": "0a74e306857f4e907324fdb1b4c4c1f09d7fb691",
"author": {
"id": "did:key:z6MkgFq6z5fkF2hioLLSNu1zP2qEL1aHXHZzGH1FLFGAnBGz",
"alias": "erikli"
},
"description": "Changes:\n- Rebased\n- Document code\n- Removed `CodeRange::Chars` \u2013 I believe that no one actually used this and I'd\n prefer not support it until it's needed.",
"base": "5553a147523778574c1671d4706d34f723138632",
"oid": "e7cab63866450f40069dbe2038a9806f6878dd63",
"timestamp": 1746615901
},
{
"id": "8ac7f35519a868d1c0ff63d626ab7b5a382cfebb",
"author": {
"id": "did:key:z6MkgFq6z5fkF2hioLLSNu1zP2qEL1aHXHZzGH1FLFGAnBGz",
"alias": "erikli"
},
"description": "Backwards-compatible Approach\n\nThis approach extends the way we implemented changes to `Review` in a previous\npatch. The change is two-fold.\n\nThe first thing we do is separate out the effected `Action` variants into the\n`actions` module. While doing this, we version them, and guard the way they are\nconstructed and how they affect a `Patch` when being applied. We also ensure\nthat we can deserialize.\n\nThe second part is to separate the \"encoding\" of a `Revision`. Since `Revision`\nis changing by changing the type of the code locations from `PartialLocation`\n(previously named `CodeLocation`) to `DiffLocation`. The `encoding::Revision`\ntype can deserialize any existing revision JSON that exists, and it does this be\n\"decoding\" the previous version of the data into the newer version. Note that to\ndo this effectively, we need to provide the `DiffLocation` with the `base: Oid`.\nWe, safely, assume that this is the `Revision::base` and use that as the\ncontextual information for building the `DiffLocation`. Note that this means\n`encoding::Review** will no longer implement `Deserialize**, but it does have a\nmethod `decode**. This method takes the contextual `base: Oid** to convert any\nfound `PartialLocation`s into `DiffLocation`s.\n\n**NOTE**: when converting a `PartialLocation` to a `DiffLocation`, there is no\nway to get the hunk selection from the line selection. This would require a\n`Repository` handle to compute. We set the `selection` to `None` as a minor\nsacrifice in the name of backwards-compatibility (almost).\n\n**Aside**: One can imagine that we might end up changing some field in `Patch`\nin the future, and this exact process will have to be done again and introduce\nan `encoding::Patch`, which provides a way to migrate from the previous encoding\nto the latest encoding.",
"base": "2a47bc0c7dd6238ce3416e19d2ba57f3a7626f64",
"oid": "222e53c358dd9d87894ec64e8181b8353a5c517e",
"timestamp": 1753287978
},
{
"id": "62142e992b09aad50caad33f9ca0a23cd99d7308",
"author": {
"id": "did:key:z6MkgFq6z5fkF2hioLLSNu1zP2qEL1aHXHZzGH1FLFGAnBGz",
"alias": "erikli"
},
"description": "Properly encode single-line review comments in the CLI",
"base": "2a47bc0c7dd6238ce3416e19d2ba57f3a7626f64",
"oid": "37aa1dbca1032defced89bc3e602c8cac47449f7",
"timestamp": 1753961422
},
{
"id": "2331a68dca43f0386ab53068f2adba784bcf5134",
"author": {
"id": "did:key:z6MkgFq6z5fkF2hioLLSNu1zP2qEL1aHXHZzGH1FLFGAnBGz",
"alias": "erikli"
},
"description": "Rebase",
"base": "a8dac56ca645fdd98955766f07abe7cdd8980e56",
"oid": "e64b39b6a6b882e56b452545d422d3918b87d12f",
"timestamp": 1754923911
},
{
"id": "8eaf54d42211577cabb3ebef1ecab78665108e4d",
"author": {
"id": "did:key:z6MkgFq6z5fkF2hioLLSNu1zP2qEL1aHXHZzGH1FLFGAnBGz",
"alias": "erikli"
},
"description": "Changes:\n- Rebased\n- Fixed SHA in workflow test\n- Removed old radicle/cob/patch.rs that was left in by accident",
"base": "de78cf7874daceefbf6b370a31a3465e34e86423",
"oid": "096963ce455e62d622ae69d11cd973ed7d814240",
"timestamp": 1755188094
}
]
}
}
{
"response": "triggered",
"run_id": {
"id": "67e876ec-ce3a-474c-8cad-f6d22cf85b3e"
},
"info_url": "https://cci.rad.levitte.org//67e876ec-ce3a-474c-8cad-f6d22cf85b3e.html"
}
Started at: 2026-09-07 16:58:11.697411+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/67e876ec-ce3a-474c-8cad-f6d22cf85b3e/w/
╭────────────────────────────────────╮
│ heartwood │
│ Radicle Heartwood Protocol & Stack │
│ 189 issues · 37 patches │
╰────────────────────────────────────╯
Run `cd ./.` to go to the repository directory.
Exit code: 0
$ rad patch checkout e500399b3e1db5fe7bcf6d7661d5a42dfa49d4d5
✓ Switched to branch patch/e500399 at revision 8eaf54d
✓ Branch patch/e500399 setup to track rad/patches/e500399b3e1db5fe7bcf6d7661d5a42dfa49d4d5
Exit code: 0
$ git config advice.detachedHead false
Exit code: 0
$ git checkout 37aa1dbca1032defced89bc3e602c8cac47449f7
fatal: unable to read tree (37aa1dbca1032defced89bc3e602c8cac47449f7)
Exit code: 128