dew/CONTRIBUTING.md
Chris Hendrickson 0ad1fae213 chore: 1.0 release prep
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>
2026-04-25 15:58:54 -04:00

3.1 KiB

Contributing to Dew

Thank you for your interest in contributing! This guide covers everything you need to get set up and start making changes.

Prerequisites

  • Dart SDK ^3.11.4 — verify with dart --version
  • Melos (optional, for workspace scripts) — dart pub global activate melos

Clone & setup

git clone https://github.com/artificery-dev/dew.git
cd dew
dart pub get

Running the CLI locally

dart run packages/cli/bin/dew.dart kanban --help

Running tests

dart test packages/core/test/
dart test packages/kanban/test/
dart test packages/mcp/test/

Linting and formatting

dart analyze
dart format .

Fix any analysis warnings before opening a PR. The project uses the rules defined in analysis_options.yaml.

Branch strategy

Branch Purpose
main Stable, released code. Only merged into from develop.
develop Integration branch. All PRs target this branch.
feat/* Feature branches cut from develop.
fix/* Bug-fix branches cut from develop.

Workflow:

  1. Cut a feature branch from develop: git checkout -b feat/my-feature develop
  2. Make your changes, add tests, run dart analyze && dart format .
  3. Open a PR targeting develop
  4. Releases are prepared on develop and merged to main

Adding a new kanban command

Follow these three steps to add a command that is simultaneously a CLI subcommand and an MCP tool:

1. Create the command class

Create packages/kanban/lib/src/commands/my_command.dart implementing DewToolCommand:

import 'package:args/command_runner.dart';
import 'package:dew_core/dew_core.dart';

class MyCommand extends DewCommand with DewToolCommand {
  @override
  final String name = 'my-command';

  @override
  final String description = 'Does something useful.';

  MyCommand() {
    argParser.addOption('id', mandatory: true, help: 'Ticket ID.');
  }

  @override
  Future<void> run() async {
    final id = argResults!['id'] as String;
    // implementation
  }
}

The DewToolCommand mixin automatically derives the MCP tool JSON Schema from the ArgParser — no extra registration work needed.

2. Register in the kanban base

Add your command in packages/kanban/lib/src/dew_kanban_base.dart alongside the existing commands:

addSubcommand(MyCommand());

3. Add tests

Add tests in packages/kanban/test/my_command_test.dart. Use the existing command tests as a reference for how to set up a ProjectContext with an in-memory filesystem.

dart test packages/kanban/test/my_command_test.dart

Project structure

packages/
├── cli/       — Entry point; wires all packages together
├── core/      — DewCommand, DewToolCommand, CommandRegistry, DewConfig
├── kanban/    — All kanban commands and storage logic
└── mcp/       — MCP server; reads tools from CommandRegistry