rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5 heartwood478bc5e03e83fc45e2a5c1104425f9084eff15c1
{
"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": "c57042d22408392e64cf959c90f60f882b39b03f",
"author": {
"id": "did:key:z6MkwGoyYxt6A2VE3fvZyH2rgiWdsXHBeV7jm7GSByS2aagA",
"alias": "ade"
},
"title": "tasks: Add spec for Tasks cob",
"state": {
"status": "open",
"conflicts": []
},
"before": "7bac17146c40b32b2ce0e27b96a555a44f3ef2ba",
"after": "478bc5e03e83fc45e2a5c1104425f9084eff15c1",
"commits": [
"478bc5e03e83fc45e2a5c1104425f9084eff15c1",
"cfdab9740779b13530edb1c53b3b77fbed3afc1e",
"b5e0b57ab277a628f119676818e075d7bacb5d24",
"ae210e37eb1fd731548bc058caed8c1f29743d04",
"6e78667a8136504901c85ec04225db828e85d338",
"774590458d6c5aa22bc0278a5d9c7445d5e98d94",
"49297358e39cd7a1a1644dc0a416b88e6848253c",
"1b0aae7e8ca5bf9f30144e8fbee501199d63ba4a",
"90189ca2f1fb5b1dc4f4042cf1502e856806e67d",
"89f084f1fbdc30d193a60a836fe66dbd011c9b48"
],
"target": "7e1cb406bb935c3de008d2171e8961f57b4336ea",
"labels": [],
"assignees": [],
"revisions": [
{
"id": "c57042d22408392e64cf959c90f60f882b39b03f",
"author": {
"id": "did:key:z6MkwGoyYxt6A2VE3fvZyH2rgiWdsXHBeV7jm7GSByS2aagA",
"alias": "ade"
},
"description": "An initial stab at a spec for task cob to help us (me) organise.\n\nConceptually broken into:\n\n- Boards\n- Steps (may rename to status)\n- Tasks\n\nA board is a collection of steps which in turn are a collection of tasks.\n\nSteps and tasks are ordered. Steps can have a defined start and end so as\nto enable something like a `backlog` which is the default step for tasks\nto be added to but may not be rendered.\n\nTasks are progressively moved from the start step to the end step and\neventually archived.\n\nBoards have goals to focus their intent and usage. Only delegates may\ncreate and maintain the boards.\n\nThere should be enough sorting and filtering to enable different types\nof views.",
"base": "e9245b630d728672d2b3d6ff9265fa4f1a86f13a",
"oid": "b270df902258be4d025671935ad119e13ee1b5d5",
"timestamp": 1772020202
},
{
"id": "de2803c758f2ca16f3f71e83b700e41dbec6f8f6",
"author": {
"id": "did:key:z6MkwGoyYxt6A2VE3fvZyH2rgiWdsXHBeV7jm7GSByS2aagA",
"alias": "ade"
},
"description": "",
"base": "7bac17146c40b32b2ce0e27b96a555a44f3ef2ba",
"oid": "478bc5e03e83fc45e2a5c1104425f9084eff15c1",
"timestamp": 1773682128
}
]
}
}
{
"response": "triggered",
"run_id": {
"id": "0a5a6bf9-0db6-4023-8f69-a96b40f60480"
},
"info_url": "https://cci.rad.levitte.org//0a5a6bf9-0db6-4023-8f69-a96b40f60480.html"
}
Started at: 2026-09-09 05:08:52.023891+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/0a5a6bf9-0db6-4023-8f69-a96b40f60480/w/
╭────────────────────────────────────╮
│ heartwood │
│ Radicle Heartwood Protocol & Stack │
│ 189 issues · 39 patches │
╰────────────────────────────────────╯
Run `cd ./.` to go to the repository directory.
Exit code: 0
$ rad patch checkout c57042d22408392e64cf959c90f60f882b39b03f
✓ Switched to branch patch/c57042d at revision de2803c
✓ Branch patch/c57042d setup to track rad/patches/c57042d22408392e64cf959c90f60f882b39b03f
Exit code: 0
$ git config advice.detachedHead false
Exit code: 0
$ git checkout 478bc5e03e83fc45e2a5c1104425f9084eff15c1
HEAD is now at 478bc5e0 tasks: Add glossary
Exit code: 0
$ rad patch show c57042d22408392e64cf959c90f60f882b39b03f -p
╭───────────────────────────────────────────────────────────────────────────╮
│ Title tasks: Add spec for Tasks cob │
│ Patch c57042d22408392e64cf959c90f60f882b39b03f │
│ Author ade z6MkwGo…yS2aagA │
│ Head 478bc5e03e83fc45e2a5c1104425f9084eff15c1 │
│ Base 7bac17146c40b32b2ce0e27b96a555a44f3ef2ba │
│ Target master │
│ Branches patch/c57042d │
│ Commits ahead 10, behind 454 │
│ Status open │
│ │
│ An initial stab at a spec for task cob to help us (me) organise. │
│ │
│ Conceptually broken into: │
│ │
│ - Boards │
│ - Steps (may rename to status) │
│ - Tasks │
│ │
│ A board is a collection of steps which in turn are a collection of tasks. │
│ │
│ Steps and tasks are ordered. Steps can have a defined start and end so as │
│ to enable something like a `backlog` which is the default step for tasks │
│ to be added to but may not be rendered. │
│ │
│ Tasks are progressively moved from the start step to the end step and │
│ eventually archived. │
│ │
│ Boards have goals to focus their intent and usage. Only delegates may │
│ create and maintain the boards. │
│ │
│ There should be enough sorting and filtering to enable different types │
│ of views. │
├───────────────────────────────────────────────────────────────────────────┤
│ 478bc5e tasks: Add glossary │
│ cfdab97 tasks: Remove Filter from task doers │
│ b5e0b57 tasks: Add step to table view │
│ ae210e3 tasks: Rename crate radicle-cob-tasks -> radicle-tasks │
│ 6e78667 tasks: Add show examples to board-lord │
│ 7745904 tasks: Add example cli interactions to board-lord │
│ 4929735 tasks: Add initial radicle's feature spec │
│ 1b0aae7 tasks: Add initial task-doer's feature spec │
│ 90189ca tasks: Add initial board-lord features spec │
│ 89f084f tasks: Init radicle-cob-tasks library │
├───────────────────────────────────────────────────────────────────────────┤
│ ● Revision c57042d @ e9245b6..b270df9 by ade z6MkwGo…yS2aagA 6 months ago │
│ ↑ Revision de2803c @ 7bac171..478bc5e by ade z6MkwGo…yS2aagA 5 months ago │
╰───────────────────────────────────────────────────────────────────────────╯
commit 478bc5e03e83fc45e2a5c1104425f9084eff15c1
Author: Adrian Duke <adrian.duke@gmail.com>
Date: Mon Mar 16 17:27:26 2026 +0000
tasks: Add glossary
diff --git a/crates/radicle-tasks/features/glossary.md b/crates/radicle-tasks/features/glossary.md
new file mode 100644
index 0000000000..57500f831d
--- /dev/null
+++ b/crates/radicle-tasks/features/glossary.md
@@ -0,0 +1,11 @@
+# Glossary
+
+- **Board**: A collection of _Tasks_, _Steps_, _Goal(s)_ with a name.
+- **Step**: A name that describes the state of a _Task_. Is in relation to other _Steps_ linearly.
+ - **Start Step**: The _Step_ where a _Tasks_ progression commences and the step where a _Tasks_ regression terminates.
+ - **End Step** The _Step_ where a _Tasks_ progression terminates, the step where a _Tasks_ regression never started.
+- **Task**: A title and description that belongs to a _Step_. May contain labels.
+- **Comment**: A comment that belongs to a _Task_ or _Comment_. May contain attachments and/or emoji reactions.
+- Goal: A framing descriptor for a _Board_.
+- **Archive**: A state of _Task_ distinct from a _Step_, decides visibility.
+- **Label**: A name that belongs to one or many _Tasks_
commit cfdab9740779b13530edb1c53b3b77fbed3afc1e
Author: Adrian Duke <adrian.duke@gmail.com>
Date: Mon Mar 16 17:27:10 2026 +0000
tasks: Remove Filter from task doers
diff --git a/crates/radicle-tasks/features/task-doer.md b/crates/radicle-tasks/features/task-doer.md
index 66b6071c82..f8f06fc94d 100644
--- a/crates/radicle-tasks/features/task-doer.md
+++ b/crates/radicle-tasks/features/task-doer.md
@@ -91,14 +91,6 @@
- To top
- To bottom
- After sibling
-- Filter tasks
- - ✗ Repo not defined
- - ✗ Invalid filter key
- - ✓ Filtered
- - By step
- - By assignee
- - By label
- - By status
- View board
- ✗ Repo not defined
- ✗ Board not found
commit b5e0b57ab277a628f119676818e075d7bacb5d24
Author: Adrian Duke <adrian.duke@gmail.com>
Date: Mon Mar 16 15:18:00 2026 +0000
tasks: Add step to table view
diff --git a/crates/radicle-tasks/features/board-lord.md b/crates/radicle-tasks/features/board-lord.md
index 67799a3278..66603ddc19 100644
--- a/crates/radicle-tasks/features/board-lord.md
+++ b/crates/radicle-tasks/features/board-lord.md
@@ -8,6 +8,8 @@
### Feature and scenario headings:
+> Note that ✗ = unhappy paths and ✓ = happy paths, the order of items below should be shortest to longest path through each feature.
+
- Create a board
- ✗ Repo not defined
- ✗ Non-delegate
@@ -76,12 +78,12 @@
```
$ rad board show b67a123 --table
- ╭──────────────────────────────────────────────────────────────────────────────╮
- │ ● ID Title Assignee Labels │
- ├──────────────────────────────────────────────────────────────────────────────┤
- │ ● 27d3132 Change passphrase... z6MkkPv... bug │
- │ ● 91f64c0 Add CLI command... z6MkkPv... enhancement │
- ╰──────────────────────────────────────────────────────────────────────────────╯
+ ╭─────────────────────────────────────────────────────────────────────────────────────╮
+ │ ● ID Step Title Assignee Labels │
+ ├─────────────────────────────────────────────────────────────────────────────────────┤
+ │ ● 27d3132 Todo Change passphrase... z6MkkPv... bug │
+ │ ● 91f64c0 Doing Add CLI command... z6MkkPv... enhancement │
+ ╰─────────────────────────────────────────────────────────────────────────────────────╯
```
- Filter
commit ae210e37eb1fd731548bc058caed8c1f29743d04
Author: Adrian Duke <adrian.duke@gmail.com>
Date: Mon Mar 16 13:51:03 2026 +0000
tasks: Rename crate radicle-cob-tasks -> radicle-tasks
diff --git a/Cargo.lock b/Cargo.lock
index 534de1de29..24f95cc082 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -3014,6 +3014,10 @@ dependencies = [
"thiserror 2.0.18",
]
+[[package]]
+name = "radicle-cob-tasks"
+version = "0.1.0"
+
[[package]]
name = "radicle-core"
version = "0.1.0"
diff --git a/Cargo.toml b/Cargo.toml
index 55e9335465..1b2dc3fdbd 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -29,7 +29,9 @@ cypheraddr = "0.4.0"
cyphernet = "0.5.2"
dunce = "1.0.5"
fastrand = { version = "2.0.0", default-features = false }
-git2 = { version = "0.20.4", default-features = false, features = ["vendored-libgit2"] }
+git2 = { version = "0.20.4", default-features = false, features = [
+ "vendored-libgit2",
+] }
gix-hash = { version = "0.22.1", default-features = false, features = ["sha1"] }
gix-packetline = { version = "0.21.1", default-features = false }
human-panic = "2.0.6"
@@ -47,6 +49,7 @@ radicle = { version = "0.21", path = "crates/radicle" }
radicle-cli = { version = "0.18", path = "crates/radicle-cli" }
radicle-cli-test = { path = "crates/radicle-cli-test" }
radicle-cob = { version = "0.18", path = "crates/radicle-cob" }
+radicle-tasks = { version = "0.1", path = "crates/radicle-tasks" }
radicle-core = { version = "0.1", path = "crates/radicle-core" }
radicle-crypto = { version = "0.15", path = "crates/radicle-crypto" }
radicle-dag = { version = "0.10", path = "crates/radicle-dag" }
diff --git a/crates/radicle-cob-tasks/Cargo.toml b/crates/radicle-tasks/Cargo.toml
similarity index 91%
rename from crates/radicle-cob-tasks/Cargo.toml
rename to crates/radicle-tasks/Cargo.toml
index 26073449d1..68f2004e1e 100644
--- a/crates/radicle-cob-tasks/Cargo.toml
+++ b/crates/radicle-tasks/Cargo.toml
@@ -1,5 +1,5 @@
[package]
-name = "radicle-cob-tasks"
+name = "radicle-tasks"
description = "Radicle Tasks COB"
homepage.workspace = true
repository.workspace = true
diff --git a/crates/radicle-cob-tasks/README.md b/crates/radicle-tasks/README.md
similarity index 100%
rename from crates/radicle-cob-tasks/README.md
rename to crates/radicle-tasks/README.md
diff --git a/crates/radicle-cob-tasks/features/board-lord.md b/crates/radicle-tasks/features/board-lord.md
similarity index 99%
rename from crates/radicle-cob-tasks/features/board-lord.md
rename to crates/radicle-tasks/features/board-lord.md
index b7d933e91c..67799a3278 100644
--- a/crates/radicle-cob-tasks/features/board-lord.md
+++ b/crates/radicle-tasks/features/board-lord.md
@@ -13,7 +13,6 @@
- ✗ Non-delegate
- ✗ Empty
- Name
- - Goal
- ✗ Invalid Characters
- Name
- Goal
@@ -70,7 +69,7 @@
╰──────────────────────────────────────────────────────────────────────────────╯
```
- - Table view (should contain: id, title, assignee, labels - by default)
+ - Table view
- No tasks
- One task
- Many tasks
diff --git a/crates/radicle-cob-tasks/features/radicle.md b/crates/radicle-tasks/features/radicle.md
similarity index 100%
rename from crates/radicle-cob-tasks/features/radicle.md
rename to crates/radicle-tasks/features/radicle.md
diff --git a/crates/radicle-cob-tasks/features/task-doer.md b/crates/radicle-tasks/features/task-doer.md
similarity index 100%
rename from crates/radicle-cob-tasks/features/task-doer.md
rename to crates/radicle-tasks/features/task-doer.md
diff --git a/crates/radicle-cob-tasks/src/lib.rs b/crates/radicle-tasks/src/lib.rs
similarity index 100%
rename from crates/radicle-cob-tasks/src/lib.rs
rename to crates/radicle-tasks/src/lib.rs
commit 6e78667a8136504901c85ec04225db828e85d338
Author: Adrian Duke <adrian.duke@gmail.com>
Date: Wed Feb 25 11:40:33 2026 +0000
tasks: Add show examples to board-lord
diff --git a/crates/radicle-cob-tasks/features/board-lord.md b/crates/radicle-cob-tasks/features/board-lord.md
index c9fef20fcd..b7d933e91c 100644
--- a/crates/radicle-cob-tasks/features/board-lord.md
+++ b/crates/radicle-cob-tasks/features/board-lord.md
@@ -36,6 +36,103 @@
$ rad board create --name "Engineering" --goal "Ship V1"
✓ Board 'Engineering' created (b67a123)
```
+
+- Show board
+ - ✗ Repo not defined
+ - ✗ Not found
+ - ✗ Invalid sort
+ - ✗ Invalid filter
+ - ✗ Invalid assignee
+ - ✓ Shown
+ - Views:
+ - Board view
+ - No tasks
+ - One task
+ - Many tasks
+
+ ```
+ $ rad board show b67a123
+ ╭──────────────────────────────────────────────────────────────────────────────╮
+ │ Name Engineering │
+ │ Board b67a123... │
+ │ Goal Ship V1 │
+ ├──────────────────────────────────────────────────────────────────────────────┤
+ │ Todo │ Doing │ Done │
+ ├──────────────────────────┼──────────────────────────┼────────────────────────┤
+ │ ● 27d3132 │ ● 91f64c0 │ ● c10ecd2 │
+ │ Change passphrase │ Add CLI command for │ git push: info links │
+ │ prompt │ canonical refs │ wrong │
+ │ │ │ │
+ │ ● 4e2a36e │ │ ● 23fef8f │
+ │ refs/heads/* cref │ │ Collect errors for │
+ │ rule conflicts │ │ fetch updates │
+ │ │ │ │
+ ╰──────────────────────────────────────────────────────────────────────────────╯
+ ```
+
+ - Table view (should contain: id, title, assignee, labels - by default)
+ - No tasks
+ - One task
+ - Many tasks
+
+ ```
+ $ rad board show b67a123 --table
+ ╭──────────────────────────────────────────────────────────────────────────────╮
+ │ ● ID Title Assignee Labels │
+ ├──────────────────────────────────────────────────────────────────────────────┤
+ │ ● 27d3132 Change passphrase... z6MkkPv... bug │
+ │ ● 91f64c0 Add CLI command... z6MkkPv... enhancement │
+ ╰──────────────────────────────────────────────────────────────────────────────╯
+ ```
+
+ - Filter
+ - By step
+ ```
+ $ rad board show b67a123 --step "Todo"
+ ...
+ ```
+ - By assignee
+ ```
+ $ rad board show b67a123 --assignee z6MkkPvad...
+ ...
+ ```
+ - By author
+ ```
+ $ rad board show b67a123 --author adrianduke
+ ...
+ ```
+ - By fuzzy search
+ ```
+ $ rad board show b67a123 --search "CLI"
+ ...
+ ```
+ - Sort
+ - By creation
+ ```
+ $ rad board show b67a123 --sort created
+ ...
+ ```
+ - By updated
+ ```
+ $ rad board show b67a123 --sort updated
+ ...
+ ```
+ - By assignee
+ ```
+ $ rad board show b67a123 --sort assignee
+ ...
+ ```
+ - By author
+ ```
+ $ rad board show b67a123 --sort author
+ ...
+ ```
+ - Archived
+ ```
+ $ rad board show b67a123 --archived
+ ...
+ ```
+
- Add step(s) to board
- ✗ Repo not defined
- ✗ Non-delegate
@@ -62,16 +159,19 @@
```
- ✓ Nominate step
- Start
+
```
$ rad board step add b67a123 --label "Backlog" --start
✓ Step 'Backlog' added to board 'Engineering'
```
- End
+
```
$ rad board step add b67a123 --label "Done" --end
✓ Step 'Done' added to board 'Engineering'
```
+
- Remove step(s) from board
- ✗ Repo not defined
- ✗ Non-delegate
@@ -116,16 +216,19 @@
- Start and End
- ✓ Nominated
- Start
+
```
$ rad board step nominate b67a123 --start "Backlog"
✓ Board 'Engineering' updated
```
- End
+
```
$ rad board step nominate b67a123 --end "Done"
✓ Board 'Engineering' updated
```
+
- Reorder steps
- ✗ Repo not defined
- ✗ Non-delegate
@@ -139,22 +242,26 @@
- Start and End
- ✓ Reordered
- To Start
+
```
$ rad board step move b67a123 --step "Doing" --after "Backlog"
✓ Board 'Engineering' updated
```
- To End
+
```
$ rad board step move b67a123 --step "Review" --before "Done"
✓ Board 'Engineering' updated
```
- Inbetween
+
```
$ rad board step move b67a123 --step "Review" --after "Doing"
✓ Board 'Engineering' updated
```
+
- Add goal to board
- ✗ Repo not defined
- ✗ Non-delegate
commit 774590458d6c5aa22bc0278a5d9c7445d5e98d94
Author: Adrian Duke <adrian.duke@gmail.com>
Date: Wed Feb 25 11:25:01 2026 +0000
tasks: Add example cli interactions to board-lord
diff --git a/crates/radicle-cob-tasks/features/board-lord.md b/crates/radicle-cob-tasks/features/board-lord.md
index 038844e28b..c9fef20fcd 100644
--- a/crates/radicle-cob-tasks/features/board-lord.md
+++ b/crates/radicle-cob-tasks/features/board-lord.md
@@ -24,7 +24,18 @@
- ✗ Name already exists
- ✓ Delegate creates board
- No Goal
+
+ ```
+ $ rad board create --name "Engineering"
+ ✓ Board 'Engineering' created (b67a123)
+ ```
+
- With Goal
+
+ ```
+ $ rad board create --name "Engineering" --goal "Ship V1"
+ ✓ Board 'Engineering' created (b67a123)
+ ```
- Add step(s) to board
- ✗ Repo not defined
- ✗ Non-delegate
@@ -40,19 +51,48 @@
- Proceeding
- Preceeding & Proceeding
- ✓ Start step already exists; adds new start
+ ```
+ $ rad board step add b67a123 --label "Inbox" --start
+ ✓ Step 'Inbox' added to board 'Engineering'
+ ```
- ✓ End step already exists; adds new end
+ ```
+ $ rad board step add b67a123 --label "Deployed" --end
+ ✓ Step 'Deployed' added to board 'Engineering'
+ ```
- ✓ Nominate step
- Start
+ ```
+ $ rad board step add b67a123 --label "Backlog" --start
+ ✓ Step 'Backlog' added to board 'Engineering'
+ ```
+
- End
+ ```
+ $ rad board step add b67a123 --label "Done" --end
+ ✓ Step 'Done' added to board 'Engineering'
+ ```
- Remove step(s) from board
- ✗ Repo not defined
- ✗ Non-delegate
- ✗ Not found
- ✗ Cannot remove nominated Start/End step (must re-nominate)
- ✓ Empty start step
+ ```
+ $ rad board step rm b67a123 --step "Inbox"
+ ✓ Step 'Inbox' removed from board 'Engineering'
+ ```
- ✓ Empty end step
+ ```
+ $ rad board step rm b67a123 --step "Deployed"
+ ✓ Step 'Deployed' removed from board 'Engineering'
+ ```
- ✗ Non-empty step, no migrate
- ✓ Non-empty step, with migrate
+ ```
+ $ rad board step rm b67a123 --step "Doing" --migrate-to "Todo"
+ ✓ Step 'Doing' removed from board 'Engineering'
+ ```
- Rename step(s)
- ✗ Repo not defined
- ✗ Non-delegate
@@ -62,6 +102,10 @@
- ✗ Label Too Long
- ✗ New label already exists
- ✓ Renamed
+ ```
+ $ rad board step edit b67a123 --step "Todo" --label "To Do"
+ ✓ Step 'Todo' renamed to 'To Do'
+ ```
- Nominate start and end steps
- ✗ Repo not defined
- ✗ Non-delegate
@@ -72,7 +116,16 @@
- Start and End
- ✓ Nominated
- Start
+ ```
+ $ rad board step nominate b67a123 --start "Backlog"
+ ✓ Board 'Engineering' updated
+ ```
+
- End
+ ```
+ $ rad board step nominate b67a123 --end "Done"
+ ✓ Board 'Engineering' updated
+ ```
- Reorder steps
- ✗ Repo not defined
- ✗ Non-delegate
@@ -86,8 +139,22 @@
- Start and End
- ✓ Reordered
- To Start
+ ```
+ $ rad board step move b67a123 --step "Doing" --after "Backlog"
+ ✓ Board 'Engineering' updated
+ ```
+
- To End
+ ```
+ $ rad board step move b67a123 --step "Review" --before "Done"
+ ✓ Board 'Engineering' updated
+ ```
+
- Inbetween
+ ```
+ $ rad board step move b67a123 --step "Review" --after "Doing"
+ ✓ Board 'Engineering' updated
+ ```
- Add goal to board
- ✗ Repo not defined
- ✗ Non-delegate
@@ -95,6 +162,10 @@
- ✗ Goal too Long
- ✗ Goal already exists
- ✓ Added
+ ```
+ $ rad board edit b67a123 --goal "Ship V1"
+ ✓ Board 'Engineering' updated
+ ```
- Update board goal
- ✗ Repo not defined
- ✗ Non-delegate
@@ -102,19 +173,35 @@
- ✗ Goal too Long
- ✗ Goal already exists
- ✓ Updated
+ ```
+ $ rad board edit b67a123 --goal "Ship V2"
+ ✓ Board 'Engineering' updated
+ ```
- Remove board goal
- ✗ Repo not defined
- ✗ Non-delegate
- ✗ Not found
- ✗ No existing goals
- ✓ Removed
+ ```
+ $ rad board edit b67a123 --goal ""
+ ✓ Board 'Engineering' updated
+ ```
- Archive board
- ✗ Repo not defined
- ✗ Non-delegate
- ✗ Not found
- ✓ Archived
+ ```
+ $ rad board archive b67a123
+ ✓ Board 'Engineering' archived
+ ```
- Un-archive board
- ✗ Repo not defined
- ✗ Non-delegate
- ✗ Not found
- ✓ Un-archived
+ ```
+ $ rad board unarchive b67a123
+ ✓ Board 'Engineering' un-archived
+ ```
commit 49297358e39cd7a1a1644dc0a416b88e6848253c
Author: Adrian Duke <adrian.duke@gmail.com>
Date: Wed Feb 25 10:57:17 2026 +0000
tasks: Add initial radicle's feature spec
diff --git a/crates/radicle-cob-tasks/features/radicle.md b/crates/radicle-cob-tasks/features/radicle.md
new file mode 100644
index 0000000000..f68d2b2772
--- /dev/null
+++ b/crates/radicle-cob-tasks/features/radicle.md
@@ -0,0 +1,10 @@
+# Persona: Radicle
+
+## Goal: Make delightful and easy user experiences where possible
+
+### Features:
+
+- Cross linking other cobs
+- Implicit linking of known local references
+- Default board step flow
+- Short-ID generation for CLI ergonomics
commit 1b0aae7e8ca5bf9f30144e8fbee501199d63ba4a
Author: Adrian Duke <adrian.duke@gmail.com>
Date: Wed Feb 25 10:57:03 2026 +0000
tasks: Add initial task-doer's feature spec
diff --git a/crates/radicle-cob-tasks/features/task-doer.md b/crates/radicle-cob-tasks/features/task-doer.md
new file mode 100644
index 0000000000..66b6071c82
--- /dev/null
+++ b/crates/radicle-cob-tasks/features/task-doer.md
@@ -0,0 +1,146 @@
+# Persona: Task Doer
+
+## Goal: Track and progress work items
+
+### Feature and scenario headings:
+
+- Add task
+ - ✗ Repo not defined
+ - ✗ Empty title
+ - ✗ Invalid characters
+ - ✗ Title too long
+ - ✗ Description too long
+ - ✓ Added
+ - Title only
+ - Title and description
+- Remove task
+ - ✗ Repo not defined
+ - ✗ Not found
+ - ✓ Removed
+- Edit task
+ - ✗ Repo not defined
+ - ✗ Not found
+ - ✗ Empty title
+ - ✗ Invalid characters
+ - ✗ Title too long
+ - ✓ Updated title
+ - ✓ Updated description
+- Attach file
+ - ✗ Repo not defined
+ - ✗ Task not found
+ - ✗ File not found
+ - ✗ File too large
+ - ✓ Attached
+- Remove attachment
+ - ✗ Repo not defined
+ - ✗ Task not found
+ - ✗ Attachment not found
+ - ✓ Removed
+- Comment on task
+ - ✗ Repo not defined
+ - ✗ Not found
+ - ✗ Empty comment
+ - ✗ Comment too long
+ - ✓ Commented
+- React to comment
+ - ✗ Repo not defined
+ - ✗ Task not found
+ - ✗ Comment not found
+ - ✗ Invalid reaction
+ - ✓ Reacted
+- Label task
+ - ✗ Repo not defined
+ - ✗ Not found
+ - ✗ Empty label
+ - ✗ Invalid label characters
+ - ✗ Label too long
+ - ✗ Label already exists
+ - ✓ Labeled
+- Un-label task
+ - ✗ Repo not defined
+ - ✗ Not found
+ - ✗ Label not found
+ - ✓ Un-labeled
+- Progress task
+ - ✗ Repo not defined
+ - ✗ Not found
+ - ✗ Step not found
+ - ✗ Already in step
+ - ✓ Progressed
+- Assign task
+ - ✗ Repo not defined
+ - ✗ Not found
+ - ✗ Assignee not found
+ - ✗ Already assigned
+ - ✓ Assigned
+ - Single DID
+ - Multiple DIDs
+- Unassign task
+ - ✗ Repo not defined
+ - ✗ Not found
+ - ✗ Not assigned
+ - ✓ Unassigned
+ - Single DID
+ - Multiple DIDs
+- Reorder task
+ - ✗ Repo not defined
+ - ✗ Not found
+ - ✗ Sibling not found
+ - ✗ Same position
+ - ✓ Reordered
+ - To top
+ - To bottom
+ - After sibling
+- Filter tasks
+ - ✗ Repo not defined
+ - ✗ Invalid filter key
+ - ✓ Filtered
+ - By step
+ - By assignee
+ - By label
+ - By status
+- View board
+ - ✗ Repo not defined
+ - ✗ Board not found
+ - ✓ Viewed
+- View task
+ - ✗ Repo not defined
+ - ✗ Not found
+ - ✓ Viewed
+ - With Title only
+ - With Title and Description
+ - With Single Assignee
+ - With Multiple Assignees
+ - With Attachment
+ - With Attachments
+ - With Comment
+ - With Comments
+- Archive task
+ - ✗ Repo not defined
+ - ✗ Not found
+ - ✗ Already archived
+ - ✓ Archived
+- Un-archive task
+ - ✗ Repo not defined
+ - ✗ Not found
+ - ✗ Not archived
+ - ✓ Un-archived
+- Batch progress task
+ - ✗ Repo not defined
+ - ✗ Empty list
+ - ✗ Task not found
+ - ✗ Step not found
+ - ✓ Progressed
+- Batch archive/unarchive task
+ - ✗ Repo not defined
+ - ✗ Empty list
+ - ✗ Task not found
+ - ✓ Archived
+ - ✓ Un-archived
+- Batch label/unlabel task
+ - ✗ Repo not defined
+ - ✗ Empty list
+ - ✗ Task not found
+ - ✗ Label invalid
+ - ✓ Labeled
+ - ✓ Un-labeled
commit 90189ca2f1fb5b1dc4f4042cf1502e856806e67d
Author: Adrian Duke <adrian.duke@gmail.com>
Date: Wed Feb 25 10:56:41 2026 +0000
tasks: Add initial board-lord features spec
diff --git a/crates/radicle-cob-tasks/features/board-lord.md b/crates/radicle-cob-tasks/features/board-lord.md
new file mode 100644
index 0000000000..038844e28b
--- /dev/null
+++ b/crates/radicle-cob-tasks/features/board-lord.md
@@ -0,0 +1,120 @@
+# Persona: Board Leader
+
+## Goal: Structure boards workflow to the their culture
+
+## Goal: Maintain the smallest set of boards to manage tasks at hand
+
+## Goal: Focus boards with a goal
+
+### Feature and scenario headings:
+
+- Create a board
+ - ✗ Repo not defined
+ - ✗ Non-delegate
+ - ✗ Empty
+ - Name
+ - Goal
+ - ✗ Invalid Characters
+ - Name
+ - Goal
+ - ✗ Too Long
+ - Name
+ - Goal
+ - ✗ Non-delegate can't create board
+ - ✗ Name already exists
+ - ✓ Delegate creates board
+ - No Goal
+ - With Goal
+- Add step(s) to board
+ - ✗ Repo not defined
+ - ✗ Non-delegate
+ - ✗ Empty
+ - Label
+ - ✗ Invalid Characters
+ - Label
+ - ✗ Too Long
+ - Label
+ - ✗ Label already exists
+ - ✗ Label not found
+ - Preceeding
+ - Proceeding
+ - Preceeding & Proceeding
+ - ✓ Start step already exists; adds new start
+ - ✓ End step already exists; adds new end
+ - ✓ Nominate step
+ - Start
+ - End
+- Remove step(s) from board
+ - ✗ Repo not defined
+ - ✗ Non-delegate
+ - ✗ Not found
+ - ✗ Cannot remove nominated Start/End step (must re-nominate)
+ - ✓ Empty start step
+ - ✓ Empty end step
+ - ✗ Non-empty step, no migrate
+ - ✓ Non-empty step, with migrate
+- Rename step(s)
+ - ✗ Repo not defined
+ - ✗ Non-delegate
+ - ✗ Not found
+ - ✗ Empty label
+ - ✗ Invalid Label Characters
+ - ✗ Label Too Long
+ - ✗ New label already exists
+ - ✓ Renamed
+- Nominate start and end steps
+ - ✗ Repo not defined
+ - ✗ Non-delegate
+ - ✗ Not found
+ - ✗ Start >= End
+ - Start after End
+ - End before Start
+ - Start and End
+ - ✓ Nominated
+ - Start
+ - End
+- Reorder steps
+ - ✗ Repo not defined
+ - ✗ Non-delegate
+ - ✗ Not found
+ - Preceeding
+ - Proceeding
+ - Preceeding & Proceeding
+ - ✗ Start >= End
+ - Start after End
+ - End before Start
+ - Start and End
+ - ✓ Reordered
+ - To Start
+ - To End
+ - Inbetween
+- Add goal to board
+ - ✗ Repo not defined
+ - ✗ Non-delegate
+ - ✗ Invalid goal characters
+ - ✗ Goal too Long
+ - ✗ Goal already exists
+ - ✓ Added
+- Update board goal
+ - ✗ Repo not defined
+ - ✗ Non-delegate
+ - ✗ Invalid goal characters
+ - ✗ Goal too Long
+ - ✗ Goal already exists
+ - ✓ Updated
+- Remove board goal
+ - ✗ Repo not defined
+ - ✗ Non-delegate
+ - ✗ Not found
+ - ✗ No existing goals
+ - ✓ Removed
+- Archive board
+ - ✗ Repo not defined
+ - ✗ Non-delegate
+ - ✗ Not found
+ - ✓ Archived
+- Un-archive board
+ - ✗ Repo not defined
+ - ✗ Non-delegate
+ - ✗ Not found
+ - ✓ Un-archived
commit 89f084f1fbdc30d193a60a836fe66dbd011c9b48
Author: Adrian Duke <adrian.duke@gmail.com>
Date: Wed Feb 25 10:56:16 2026 +0000
tasks: Init radicle-cob-tasks library
diff --git a/crates/radicle-cob-tasks/Cargo.toml b/crates/radicle-cob-tasks/Cargo.toml
new file mode 100644
index 0000000000..26073449d1
--- /dev/null
+++ b/crates/radicle-cob-tasks/Cargo.toml
@@ -0,0 +1,11 @@
+[package]
+name = "radicle-cob-tasks"
+description = "Radicle Tasks COB"
+homepage.workspace = true
+repository.workspace = true
+version = "0.1.0"
+authors = ["Adrian Duke <adrian.duke@gmail.com>"]
+edition.workspace = true
+license.workspace = true
+keywords = ["radicle", "cob", "cobs", "tasks"]
+rust-version.workspace = true
diff --git a/crates/radicle-cob-tasks/README.md b/crates/radicle-cob-tasks/README.md
new file mode 100644
index 0000000000..312716b418
--- /dev/null
+++ b/crates/radicle-cob-tasks/README.md
@@ -0,0 +1 @@
+# Tasks COB
diff --git a/crates/radicle-cob-tasks/src/lib.rs b/crates/radicle-cob-tasks/src/lib.rs
new file mode 100644
index 0000000000..e69de29bb2
Exit code: 0
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 '
Commands:
$ podman run --name 0a5a6bf9-0db6-4023-8f69-a96b40f60480 -v /opt/radcis/ci.rad.levitte.org/cci/state/0a5a6bf9-0db6-4023-8f69-a96b40f60480/s:/0a5a6bf9-0db6-4023-8f69-a96b40f60480/s:ro -v /opt/radcis/ci.rad.levitte.org/cci/state/0a5a6bf9-0db6-4023-8f69-a96b40f60480/w:/0a5a6bf9-0db6-4023-8f69-a96b40f60480/w -w /0a5a6bf9-0db6-4023-8f69-a96b40f60480/w -v /opt/radcis/ci.rad.levitte.org/.radicle:/${id}/.radicle:ro -e RAD_HOME=/${id}/.radicle rust:trixie bash /0a5a6bf9-0db6-4023-8f69-a96b40f60480/s/script.sh
+ export 'RUSTDOCFLAGS=-D warnings'
+ RUSTDOCFLAGS='-D warnings'
+ cargo --version
info: syncing channel updates for '1.90-x86_64-unknown-linux-gnu'
info: latest update on 2025-09-18, rust version 1.90.0 (1159e78c4 2025-09-14)
info: downloading component 'cargo'
info: downloading component 'clippy'
info: downloading component 'rust-docs'
info: downloading component 'rust-src'
info: downloading component 'rust-std'
info: downloading component 'rustc'
info: downloading component 'rustfmt'
info: installing component 'cargo'
info: installing component 'clippy'
info: installing component 'rust-docs'
info: installing component 'rust-src'
info: installing component 'rust-std'
info: installing component 'rustc'
info: installing component 'rustfmt'
cargo 1.90.0 (840b83a10 2025-07-30)
+ rustc --version
rustc 1.90.0 (1159e78c4 2025-09-14)
+ cargo fmt --check
Diff in /0a5a6bf9-0db6-4023-8f69-a96b40f60480/w/crates/radicle-tasks/src/lib.rs:1:
+
+
Exit code: 1
{
"response": "finished",
"result": "failure"
}