Skip to content

Development

Storm is designed to be hackable: each package works on its own and can be composed in tests or other Go programs. This document contains the guidance that previously lived in the repository README.

Guidance

  1. Composable: packages such as diff, gitlog, and tui should expose standalone entry points that can be imported elsewhere.

  2. Frontmatter: .changes/*.md entries follow this schema:

    yaml
    type: added
    scope: cli
    summary: Add changelog command
  3. Palette: all TUIs must use the colors defined in internal/style.

  4. Command chaining: every command should behave well in pipelines, e.g.

    sh
    storm unreleased list --json
    storm generate --since v1.2.0 --interactive
    storm release --bump patch --toolchain package.json
  5. Tests:

    • Prefer teatest for Bubble Tea programs.
    • Use golden files for diff/changelog output when useful.
    • Spin up in-memory go-git repositories in unit tests.

Notes

  • Keep the workflow deterministic so releases can be derived from local files alone.
  • TUIs should degrade gracefully when stdin/stdout are not TTYs.
  • The binary should not depend on external services beyond git data already in the repo.

Roadmap

PhaseDeliverable
1Core CLI (generate, unreleased, release)
2Git integration and commit parsing
3Diff engine and styling
4.changes storage and parsing
5Interactive TUI
6Keep a Changelog writer
7Git tagging and CI integration

Conventional Commits

Storm follows the Conventional Commits spec. Use the format type(scope): summary with optional body and footers.

Structure

ElementFormatDescription
Header<type>(<scope>): <description>Main commit line.
ScopeOptional, e.g. api, cli, deps.Part of the codebase affected.
Breaking indicator! after type/scope, e.g. feat(api)!:Marks breaking change.
BodyBlank line then body text.Explains what and why.
FooterBlank line then metadata.Issue references, BREAKING CHANGE, etc.

Types

TypeDescription
featNew feature.
fixBug fix.
docsDocumentation change.
styleFormatting-only change.
refactorStructural change without new features or fixes.
perfPerformance improvement.
testAdds or updates tests.
buildBuild system or dependency change.
ciCI config change.
choreTooling or config change outside src/test.
revertReverts a previous commit.

Examples

text
feat(api): add pagination endpoint
fix(ui): correct button alignment issue
docs: update README installation instructions
perf(core): optimize user query performance
refactor: restructure payment module for clarity
style: apply consistent formatting
test(auth): add integration tests for OAuth flow
build(deps): bump dependencies to latest versions
ci: add GitHub Actions workflow for CI
chore: update .gitignore and clean up obsolete files
feat(api)!: remove support for legacy endpoints

BREAKING CHANGE: API no longer accepts XML-formatted requests.