CCI report: d0edeb0a-e1bd-41d1-bdaa-bf310d599c16

Request message

{
  "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:z6MktaNvN1KVFMkSRAiN4qK5yvX1zuEEaseeX5sffhzPZRZW",
      "did:key:z6MkireRatUThvd3qzfKht1S44wpm4FEWSSa4PRMTSQZ3voM",
      "did:key:z6MkgFq6z5fkF2hioLLSNu1zP2qEL1aHXHZzGH1FLFGAnBGz",
      "did:key:z6MkkPvBfjP4bQmco5Dm7UGsX2ruDBieEHi8n9DVJWX5sTEz"
    ]
  },
  "action": "Created",
  "patch": {
    "id": "24e3c53626bd5e1d4a71c188e8d897f47eddbbcb",
    "author": {
      "id": "did:key:z6MkkPvBfjP4bQmco5Dm7UGsX2ruDBieEHi8n9DVJWX5sTEz",
      "alias": "lorenz"
    },
    "title": "crypto: Rewrite",
    "state": {
      "status": "open",
      "conflicts": []
    },
    "before": "027de89cdb93f9f08e46ab76ab38c62c4005724a",
    "after": "f8d4ff1fd7fd3110681659a4705bc4d0e2e5a2da",
    "commits": [
      "f8d4ff1fd7fd3110681659a4705bc4d0e2e5a2da",
      "c81ffc0ec14c5c25400025e26542f3b33f3e5685",
      "9cfaa2bd7d14855213f60bb0e9a2f008892a0a5a"
    ],
    "target": "027de89cdb93f9f08e46ab76ab38c62c4005724a",
    "labels": [],
    "assignees": [],
    "revisions": [
      {
        "id": "24e3c53626bd5e1d4a71c188e8d897f47eddbbcb",
        "author": {
          "id": "did:key:z6MkkPvBfjP4bQmco5Dm7UGsX2ruDBieEHi8n9DVJWX5sTEz",
          "alias": "lorenz"
        },
        "description": "Reasons for the rewrite:\n - Migrate away from `ec25519` as our implementation of Ed25519,\n   because that crate is unmaintained.\n   Instead of `ec25519` we use `ed25519-dalek` which is the most popular\n   implementation of Ed25519 in Rust.\n - Migrate away from `amplify`, because we make very little use of its\n   features. Here, we only use `amplify::Bytes32`, which is just a thin\n   wrapper of `[u8; 32]`.\n   Instead of `amplify::Bytes32` we use `type PublicKeyBytes = [u8; 32]`.\n\nThe realization that `ExtendedSignature` is not really tied to SSH, but\nis merely a representation of a key together with a signature, allows to\nrelax the bounds on traits in `radicle-cob`.\n\nSeparating out uses of \"public key\" (a rather simple model of a key,\njust 32 bytes) and \"verifying key\" (an actual point on the Edwards\ncurve, ready to verify signatures, using more memory than just 32 bytes)\nallows a more sensible definition of `crypto::Signer`, which propagates\nto `radicle-cob`, `radicle`, `radicle-cli`, `radicle-node` and\nsimplifies trait bounds.\n\nIn `radicle-node`, make the fact clearer that actually the secret key\nitself is required (for our implementation of Diffie-Hellman) not\n\"just\" signing. This results in removal of the generic argument\n(usually called `G`) of multiple types.\n\nConcretizing the types in `radicle-node` this way, i.e. by (morally)\nsetting `G = radicle_crypto::SigningKey`, leads to removal of\n`MemorySigner` and `MockSigner`, as they really just wrap a signing\nkey.\n\nRe-exporting `ed25519::Signature` (via re-export in `ed25519-dalek`)\nis hopefully more future-proof than using our own type for signatures.\nHowever, the fact that `ed25519::Signature` is not serializable and\ndoes not implement `std::hash::Hash` means that we have to resort to\nad-hoc solutions in `radicle`:\n 1. The Identity COB requires serialization of signatures. These are\n    generally questionable, since the security of the Identity COB\n    should rely on the security of Signed References. In the medium\n    term we might even want to consider ignoring signatures in actions.\n 2. When reading Signed References, detection of Replay Attacks uses\n    a `HashMap` keyed by signatures. This detection only exists for\n    backwards compatibility.\nThese two use cases are exotic enough to warrant ad-hoc implementations.\nBy not wrapping `ed25519::Signature`, we encourage writing more widely\ncompatible code in the future.",
        "base": "027de89cdb93f9f08e46ab76ab38c62c4005724a",
        "oid": "f8d4ff1fd7fd3110681659a4705bc4d0e2e5a2da",
        "timestamp": 1784284925
      }
    ]
  }
}

Send response

{
  "response": "triggered",
  "run_id": {
    "id": "d0edeb0a-e1bd-41d1-bdaa-bf310d599c16"
  },
  "info_url": "https://cci.rad.levitte.org//d0edeb0a-e1bd-41d1-bdaa-bf310d599c16.html"
}

Checkout the source (in /opt/radcis/ci.rad.levitte.org/cci/state/d0edeb0a-e1bd-41d1-bdaa-bf310d599c16/w)

Started at: 2026-07-17 12:43:03.722020+02:00

Commands:

Read the repo configuration (.radicle/native.yaml in /opt/radcis/ci.rad.levitte.org/cci/state/d0edeb0a-e1bd-41d1-bdaa-bf310d599c16/w)

shell: 'export RUSTDOCFLAGS=''-D warnings''


  cargo --version

  rustc --version


  cargo fmt --check

  cargo clippy --all-targets --workspace -- --deny warnings

  cargo build --all-targets --workspace

  cargo doc --workspace --no-deps --all-features

  cargo test --workspace --no-fail-fast

  '

Run the script

Commands:

Send result

{
  "response": "finished",
  "result": "failure"
}