- 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>
105 lines
3.5 KiB
Markdown
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.
|