dew/docs/features/kanban.md
Chris Hendrickson 198d65b7e2 Update stale documentation (DEW-0009)
- index.md: rewrite architecture section to reflect DewToolCommand mixin,
  CommandRegistry, and per-package config extension pattern
- config.md: update default columns to backlog/doing/done
- features/mcp.md: replace McpToolProvider references with DewToolCommand,
  add all 12 tools to the table, add link types table
- features/kanban.md: replace stub with full docs covering storage layout,
  ticket format, CLI command reference, link types, and config

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-23 19:56:08 -04:00

105 lines
3.5 KiB
Markdown

# Dew Kanban Board
The Dew Kanban Board lets you create and manage tickets across a set of configurable columns. Every command is also registered as an MCP tool, so AI agents can interact with the board using the same operations as the CLI.
## Storage layout
Tickets live inside the `.project/kanban/` directory. Each column has its own subdirectory, and attachments are stored separately by ticket ID so they survive column moves:
```text
.project/
└── kanban/
├── backlog/
│ └── DEW-0001.md
├── doing/
│ └── DEW-0002.md
├── done/
│ └── DEW-0003.md
├── archive/ ← soft-deleted tickets (future)
└── attachments/
└── DEW-0001/ ← per-ticket attachment directory
└── screenshot.png
```
## Ticket format
Each ticket is a Markdown file with a YAML frontmatter block. The column is derived from the containing directory and is not stored redundantly in the file.
```markdown
---
id: DEW-0001
title: "My ticket"
type: story
created: 2026-04-23T19:00:00.000Z
links:
- id: DEW-0002
type: blocks
---
Body text goes here.
---
First comment.
---
Second comment.
```
## CLI commands
All commands are available under `dew kanban <subcommand>`.
| Subcommand | Description |
| ---------- | --------------------------------------------------------------- |
| `create` | Create a new ticket (`--title`, `--type`, `--column`, `--body`) |
| `list` | List tickets (`--column`, `--type`) |
| `get` | Get a ticket by ID (`--id`) |
| `update` | Update fields on a ticket (`--id`, `--title`, `--type`, `--column`, `--body`) |
| `delete` | Delete a ticket permanently (`--id`) |
| `move` | Move a ticket to a different column (`--id`, `--column`) |
| `search` | Full-text search across all ticket content (`--query`) |
| `comment` | Append a comment to a ticket (`--id`, `--comment`) |
| `config` | Print the current kanban configuration |
| `stats` | Show ticket counts by column and type |
| `link` | Link two tickets with a typed relationship (`--id`, `--target`, `--type`) |
| `unlink` | Remove a link between two tickets (`--id`, `--target`) |
## Ticket links
Links are typed and bidirectional — writing one side automatically writes the inverse on the target.
| Type | Inverse | Use case |
| ----------------- | ------------------ | --------------------------------- |
| `blocks` | `is_blocked_by` | Dependency between tickets |
| `relates_to` | `relates_to` | General relationship (symmetric) |
| `duplicates` | `is_duplicated_by` | Duplicate ticket tracking |
| `parent_of` | `child_of` | Epic → story → task hierarchy |
## Configuration
Columns, ticket types, and the ticket ID prefix are configured in `.project/dew.yaml`:
```yaml
dew:
kanban:
prefix: "DEW"
ticket_types:
- id: epic
name: Epic
- id: story
name: Story
columns:
- id: backlog
name: Backlog
color: blue
- id: doing
name: Doing
color: yellow
- id: done
name: Done
color: green
```
See the [Configuration documentation](../config.md) for the full schema reference.