Radish alpha
h
Radicle Heartwood Protocol & Stack
Radicle
Git (anonymous pull)
Log in to clone via SSH
tasks: Rename crate radicle-cob-tasks -> radicle-tasks
Adrian Duke committed 1 month ago
commit ae210e37eb1fd731548bc058caed8c1f29743d04
parent 6e78667a8136504901c85ec04225db828e85d338
14 files changed +489 -483
modified Cargo.lock
@@ -3015,6 +3015,10 @@ dependencies = [
]

[[package]]
+
name = "radicle-cob-tasks"
+
version = "0.1.0"
+

+
[[package]]
name = "radicle-core"
version = "0.1.0"
dependencies = [
modified 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" }
deleted crates/radicle-cob-tasks/Cargo.toml
@@ -1,11 +0,0 @@
-
[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
deleted crates/radicle-cob-tasks/README.md
@@ -1 +0,0 @@
-
# Tasks COB
deleted crates/radicle-cob-tasks/features/board-lord.md
@@ -1,314 +0,0 @@
-
# 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
-

-
    ```
-
    $ rad board create --name "Engineering"
-
    ✓ Board 'Engineering' created (b67a123)
-
    ```
-

-
    - With Goal
-

-
    ```
-
    $ 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
-
  - ✗ 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
-
    ```
-
    $ 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
-
  - ✗ Not found
-
  - ✗ Empty label
-
  - ✗ Invalid Label Characters
-
  - ✗ 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
-
  - ✗ Not found
-
  - ✗ Start >= End
-
    - Start after End
-
    - End before Start
-
    - 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
-
  - ✗ Not found
-
    - Preceeding
-
    - Proceeding
-
    - Preceeding & Proceeding
-
  - ✗ Start >= End
-
    - Start after End
-
    - End before Start
-
    - 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
-
  - ✗ Invalid goal characters
-
  - ✗ 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
-
  - ✗ Invalid goal characters
-
  - ✗ 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
-
    ```
deleted crates/radicle-cob-tasks/features/radicle.md
@@ -1,10 +0,0 @@
-
# 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
deleted crates/radicle-cob-tasks/features/task-doer.md
@@ -1,146 +0,0 @@
-
# 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
deleted crates/radicle-cob-tasks/src/lib.rs
added crates/radicle-tasks/Cargo.toml
@@ -0,0 +1,11 @@
+
[package]
+
name = "radicle-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
added crates/radicle-tasks/README.md
@@ -0,0 +1 @@
+
# Tasks COB
added crates/radicle-tasks/features/board-lord.md
@@ -0,0 +1,313 @@
+
# 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
+
  - ✗ Invalid Characters
+
    - Name
+
    - Goal
+
  - ✗ Too Long
+
    - Name
+
    - Goal
+
  - ✗ Non-delegate can't create board
+
  - ✗ 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)
+
    ```
+

+
- 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
+
        - 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
+
  - ✗ 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
+
    ```
+
    $ 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
+
  - ✗ Not found
+
  - ✗ Empty label
+
  - ✗ Invalid Label Characters
+
  - ✗ 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
+
  - ✗ Not found
+
  - ✗ Start >= End
+
    - Start after End
+
    - End before Start
+
    - 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
+
  - ✗ Not found
+
    - Preceeding
+
    - Proceeding
+
    - Preceeding & Proceeding
+
  - ✗ Start >= End
+
    - Start after End
+
    - End before Start
+
    - 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
+
  - ✗ Invalid goal characters
+
  - ✗ 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
+
  - ✗ Invalid goal characters
+
  - ✗ 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
+
    ```
added crates/radicle-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
added crates/radicle-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
added crates/radicle-tasks/src/lib.rs