Metadata: - Bump dew CLI version 0.0.1 → 1.0.0 - Add repository + issue_tracker URLs to all pubspec.yaml files - Switch inter-package path deps to versioned deps (^1.0.0) - Remove publish_to: none from all packages - Add MIT LICENSE to root and all packages - Confirm all four pub.dev names available (dew, dew_core, dew_kanban, dew_mcp) Documentation: - Add CHANGELOG.md (Keep a Changelog format, full 1.0.0 feature history) - Overhaul README.md (pitch, pub.dev badge, quick-start, feature sections) - Add TUI section + full keybinding tables to docs/features/kanban.md - Add CONTRIBUTING.md (setup, test, lint, branch strategy, command guide) Tests: - Add packages/cli/test/cli_test.dart (6 smoke tests) - Add packages/kanban/test/integration_test.dart (6 TicketStore e2e tests) - Expand packages/mcp/test/mcp_test.dart (5 tool registration tests) - Add dew_kanban as dev dependency in packages/mcp/pubspec.yaml - 57/57 tests passing Code quality: - dart format applied across all 23 changed source files - dart analyze: zero errors, zero warnings Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
90 lines
5 KiB
Markdown
90 lines
5 KiB
Markdown
# Changelog
|
|
|
|
All notable changes to this project will be documented in this file.
|
|
|
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
|
## [Unreleased]
|
|
|
|
## [1.0.0] - 2026-04-25
|
|
|
|
### Added
|
|
|
|
#### `dew init`
|
|
|
|
- `dew init <path>` scaffolds a new project, generating `.project/dew.yaml` with
|
|
sensible defaults and running all module init hooks (kanban directory layout, etc.).
|
|
|
|
#### Kanban CLI (`dew kanban`)
|
|
|
|
Full set of kanban subcommands, each also registered as an MCP tool automatically:
|
|
|
|
| Subcommand | Description |
|
|
| ------------ | ------------------------------------------------------------------------ |
|
|
| `create` | Create a new ticket with title, type, column, body, labels, and milestones |
|
|
| `list` | List tickets filtered by column, type, label, milestone, or archived state |
|
|
| `get` | Fetch a single ticket by ID |
|
|
| `update` | Update any field on a ticket (title, type, column, body, labels, milestones) |
|
|
| `delete` | Permanently delete a ticket |
|
|
| `move` | Move a ticket to a different column (validates column transition rules) |
|
|
| `search` | Full-text search across ticket titles, bodies, and comments |
|
|
| `comment` | Append a comment to a ticket |
|
|
| `archive` | Soft-delete a ticket by moving it to the archive column |
|
|
| `unarchive` | Restore an archived ticket to a column |
|
|
| `link` | Create a typed bidirectional link between two tickets |
|
|
| `unlink` | Remove a link between two tickets |
|
|
| `stats` | Display ticket counts grouped by column and type |
|
|
| `board` | Print an ASCII representation of the board |
|
|
| `config` | Print the current kanban configuration |
|
|
| `tui` | Launch the interactive terminal UI |
|
|
|
|
- File-based storage: each ticket is a Markdown file with YAML frontmatter for
|
|
metadata and inline `---` separators for comments. Column is derived from the
|
|
containing subdirectory — not duplicated in the file.
|
|
- Typed, bidirectional ticket links: `blocks`/`is_blocked_by`, `relates_to`,
|
|
`duplicates`/`is_duplicated_by`, `parent_of`/`child_of`. Writing one side
|
|
automatically writes the inverse on the target ticket.
|
|
- Labels and milestones as first-class ticket fields.
|
|
- Column transition validation: enforces allowed moves between configured columns.
|
|
- `--include-archived` flag on `list` and `search` to include soft-deleted tickets.
|
|
|
|
#### Interactive TUI (`dew kanban tui`)
|
|
|
|
- Full Trello-style terminal board rendered with ANSI box-drawing characters.
|
|
- **Board mode**: pill/tab column headers, scrollable ticket list per column,
|
|
live `?` filter/search overlay, `n` create, `e` edit, `a` archive, `D` delete,
|
|
`c` comment, `L` link, `<`/`>` move ticket between columns, Enter open detail.
|
|
- **Detail mode**: scrollable ticket detail view with formatted body and comments.
|
|
- **Editor modal**: in-terminal overlay for editing all ticket fields — title,
|
|
type (picker), column (picker), labels, milestones, and body. Arrow keys cycle
|
|
selector values; Enter edits text fields or opens `$VISUAL`/`$EDITOR` for body.
|
|
- F1 help overlay in every mode showing context-sensitive keybindings.
|
|
- Auto-refresh via filesystem watching: board reloads live when ticket files
|
|
change on disk (e.g. from another terminal or AI agent).
|
|
- SIGWINCH handling for correct redraws on terminal resize.
|
|
|
|
#### MCP Server (`dew mcp serve`)
|
|
|
|
- `dew mcp serve` starts an MCP-compliant stdio server.
|
|
- All kanban commands that implement the `DewToolCommand` mixin are automatically
|
|
exposed as MCP tools — no separate registration required.
|
|
- JSON Schema for each tool's input is derived directly from the command's
|
|
`ArgParser`, so argument definitions are written exactly once.
|
|
- Compiled CLI binary at `.project/toolchain/bin/dew` used by the MCP server to
|
|
avoid stdin conflicts.
|
|
|
|
#### Core Architecture
|
|
|
|
- `DewToolCommand` mixin: mix into any `DewCommand` to register it simultaneously
|
|
as a CLI subcommand and an MCP tool.
|
|
- `CommandRegistry`: central registry collected at startup; MCP server reads from
|
|
this registry to enumerate available tools.
|
|
- `DewConfig` with typed extension pattern: `core` holds the raw YAML map; feature
|
|
packages (`kanban`, `mcp`) add typed accessors via Dart extensions, keeping
|
|
feature-specific config out of `core`.
|
|
- `ProjectDirs` with injectable filesystem abstraction (`package:file`) for
|
|
testable path resolution.
|
|
|
|
[Unreleased]: https://github.com/artificery-dev/dew/compare/v1.0.0...HEAD
|
|
[1.0.0]: https://github.com/artificery-dev/dew/releases/tag/v1.0.0
|