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.