# Roadmap ## Core CLI The foundation CLI structure with core commands. ### Commands - [x] `storm version` - Print version information - [x] `storm generate` - Generate changelog entries from Git commits - [x] Parse commit range (from/to refs) - [x] Support `--since` flag - [x] Support `--interactive` flag for TUI selection - [x] Parse conventional commits - [x] Write entries to `.changes/` - [ ] Deduplication logic (see TODO in generate.go) - [ ] Add --output-json for machine use - [x] `storm unreleased` - Manage unreleased changes - [x] `unreleased add` - Create new entry - [x] `unreleased list` - Display entries (text and JSON) - [x] `unreleased review` - Interactive TUI review - [x] `unreleased partial` - Create entry linked to specific commit - [x] Filename format: `..md` - [x] Auto-detect type from conventional commit format - [x] Optional `--type`, `--scope`, `--summary` override flags - [ ] Optional `--issue` flag (TODO: see issue-linking task below) - [x] Implement delete action from review - [x] Implement edit action from review - [x] `storm check` - Validate that changes include unreleased partials - [x] Detect missing partials for changed code paths - [x] Honor `[nochanges]` and `[skip changelog]` markers in commit messages - [x] Exit non-zero for CI enforcement - [x] Support `--since` flag for checking since a tag - [x] `storm release` - Promote unreleased changes to CHANGELOG - [x] Read all `.changes/*.md` files - [x] Merge into `CHANGELOG.md` - [x] Create version header with date - [x] Clear `.changes/` directory with `--clear-changes` flag - [x] Optional date override with `--date` flag - [x] Generate GitHub comparison links automatically - [x] Dry-run mode - [x] Optional Git tag creation - [x] `storm diff`: display inline diffs between refs with support for file filtering, context expansion, and multiple view modes. ## Git Integration and Commit Parsing - [x] Core gitlog utilities for parsing refs, retrieving commits and file contents, and categorizing conventional commits by type and change significance. ## Diff Engine and Styling - [x] Diff package implements the Myers diff algorithm with split and unified rendering, compressed unchanged sections, and an iceberg-themed color palette for styled visual output. ## `.changes` Storage and Parsing - [x] Provides a local .changes/ store that writes and lists YAML-frontmatter entries, auto-creates the directory, and deduplicates rebased commits by diff hash to keep unreleased changelog items clean. ## TUI - [x] Delivered Bubble Tea UIs for selecting commits, reviewing unreleased changes, and interactively viewing multi-file diffs with full keyboard-driven navigation and view toggles. ## Keep a Changelog Writer - [x] Adds a full changelog pipeline that parses the existing file, builds and writes new releases, and validates dates/sections to strictly match the Keep a Changelog [spec](https://keepachangelog.com/en/1.1.0/), including autogenerated comparison links. - [ ] Ensure deterministic sorting by category and filename timestamp ## Issue Linking Add support for linking changelog entries to issue/PR numbers. ### Tasks - [ ] Add `--issue` flag to `unreleased add` and `unreleased partial` - [ ] Add `issue` field to Entry struct - [ ] Include issue number in YAML frontmatter - [ ] Support issue validation in `check` command - [ ] Format issue links in generated CHANGELOG (e.g., #123, owner/repo#123) ## Phase 7: Git Tagging and CI Integration Repository tagging and automation-friendly features. ### Tasks - [x] Implement Git tagging in `release` command - [x] Create annotated tag with version - [x] Include release notes in tag message - [x] Validate tag doesn't already exist - [x] Support `--tag` flag - [x] Implement CI validation with `check` command - [x] Validate changelog entries exist for commits - [x] Honor `[nochanges]` markers - [x] Exit codes for CI integration - [x] Add JSON output modes for all commands - [x] `unreleased list --json` - [x] `generate --output-json` - [x] `release --output-json` - [x] Add `--dry-run` support - [x] `release --dry-run` - [x] Show what would be written without writing - [x] Display preview of CHANGELOG changes with styled output - [x] Non-TTY environment handling - [x] Detect TTY availability - [x] Fallback to non-interactive mode - [x] CI-friendly error messages - [ ] Add pre-commit hook examples - [ ] Validate commit message format - [ ] Ensure `.changes/` entries exist for features - [ ] Create GitHub Actions workflow examples - [ ] Auto-release on version tag - [ ] Validate CHANGELOG on PR ## Testing Strategy ### Current Status - [x] Test utilities package - internal/testutils/ - [x] Unit tests for changelog package - internal/changelog/changelog_test.go - [x] Unit tests for diff engine - [x] Unit tests for Git integration (in-memory repos) - [ ] Golden files for diff output - [ ] Golden files for changelog output - [ ] Bubble Tea program testing ### Planned Test Coverage - [x] `internal/diff` - Myers algorithm correctness - [ ] `internal/gitlog` - Commit parsing and range queries - [x] `internal/changeset` - File I/O and YAML parsing - [x] `internal/changelog` - Keep a Changelog formatting (13 test cases, all passing) - [ ] `cmd/generate` - End-to-end commit to entry flow - [ ] `cmd/unreleased` - Entry management - [ ] `cmd/release` - Changelog generation and tagging ## Notes - No shell calls to `git` - all operations via `go-git` - Conventional commits are parsed but not enforced - TUI sessions degrade gracefully in non-TTY environments - All output follows Keep a Changelog v1.1.0 specification