Commits
Replace the inline release logic in Taskfile.yaml with a dedicated
release.fish script following the same staged pattern used by lune,
yatd, and crush. The script handles tag computation, cross-compilation,
UPX packing, and upload via the shared release(1) fish function.
Taskfile changes:
- Release task now delegates to ./release.fish
- Add release:build convenience task for --from build
- Clean task also removes dist/
Extends the tool to support both commit and tag formatting:
- Add git-formatted-tag mode for annotated tag formatting
- Add install subcommand to create symlinks in ~/.local/bin
- Extract shared code (runGitWithStdin, validateSubjectLength) to git.go
- Update module path to git.secluded.site/git-format
BREAKING CHANGE: Renamed from formatted-commit to git-format. Uninstall
the old binary and reinstall following README instructions. Run
git-format install to create symlinks, then invoke via git
formatted-commit or git formatted-tag.
Fixes type mismatch where breakingChange was declared as bool but used
as string after merge.
BREAKING CHANGE: The -B/--breaking flag now requires a description
argument instead of being a boolean. Use -B "description" instead of
just -B.
Assisted-by: Claude Opus 4.5 via Crush
Assisted-by: Claude Opus 4.5 via Crush
Wraps bluemonday output with html.UnescapeString so that characters like
quotes remain as literal "quotes" instead of "quotes".
Assisted-by: Claude Opus 4.5 via Crush
Lines starting with 4+ spaces or a tab are now preserved verbatim,
fixing code block formatting in commit bodies.
Before:
task.Method1()
task.Method2()
Would become "task.Method1() task.Method2()" after reflowing.
Assisted-by: Claude Opus 4.5 via Crush
The -B flag now accepts a string argument containing the breaking change
description instead of being a boolean flag. This description is
formatted and inserted as a BREAKING CHANGE: footer between the body and
git trailers, following the Conventional Commits specification.
The flag still adds ! to the subject line. When used with heredoc
syntax, multi-line breaking change descriptions are supported.
Also re-added the -a/--amend flag that was present in main but missing
from this feature branch.
Implements: bug-e75a648
Assisted-by: Claude Sonnet 4.5 via Crush
When the -B flag is used to mark a commit as a breaking change, the tool
now validates that the body contains a BREAKING CHANGE: or BREAKING
CHANGES: footer. If not present, it returns a descriptive error
instructing users to document breaking change details in this footer.
Implements: bug-e75a648
Co-authored-by: Crush <crush@charm.land>
- Consolidated prerelease logic into a case statement
- Added 'graduate' option when current version is prerelease
- Now uses svu's built-in prerelease flag with user-provided suffix
- When graduating, llm-tag generates changelog from last stable tag
Assisted-by: Claude Sonnet 4.5 via Crush
Adds a comprehensive CHANGELOG.md tracking all releases from 0.1.1
through 0.1.8-alpha.0, following Keep a Changelog format.
Updates README to include a Changelog section pointing to the new file
and noting it's maintained by kittylog.
Assisted-by: Claude Sonnet 4.5 via Crush
Replaced justfile with Taskfile.yaml adapted from nasin-pali project.
Updated AGENTS.md to reference task commands instead of just commands.
Assisted-by: Claude Sonnet 4.5 via Crush
Previously, formatBody processed each line independently. When input
text was already wrapped (but incorrectly), each line got rewrapped
separately, making the wrapping worse.
Now consecutive plain text lines are collected in a buffer, joined with
spaces to unwrap them, then passed to wordWrap once as a single
paragraph. Blank lines, bullet points, and numbered lists interrupt the
buffer to preserve paragraph boundaries and list formatting.
Fixes: ed58135
Assisted-by: Claude Sonnet 4.5 via Crush
Commit messages are plaintext piped to 'git commit -F -' stdin,
so
HTML sanitization with bluemonday was unnecessary and harmful. It was
escaping characters like < and > that should remain literal in
commit
text.
Security is maintained through the stdin pipe preventing shell
injection.
Fixes: a6c077f
Assisted-by: Claude Sonnet 4.5 via Crush
Assisted-by: Claude Sonnet 4.5 via Crush
Changed flag behavior:
- -a is now shorthand for --add (stage all modified files)
- --amend is now long-form only (no short flag)
Updated documentation in main.go, AGENTS.md, and README.md to reflect
new flag behavior.
Closes: bug-f90a6de
Assisted-by: Claude Sonnet 4.5 via Crush
Co-authored-by: Crush <crush@charm.land>
Add upgrade subcommand to check for and apply updates to the
formatted-commit binary via go install. Includes TUI confirm, spinner,
and non-TTY fallback.
Update README and CLI help with upgrade instructions. Refresh module
dependencies to support the new command.
Co-authored-by: Crush <crush@charm.land>
Implements: bug-21bcc08
Co-authored-by: Crush <crush@charm.land>
The linter is happy, idk why reuse won't register it to get the badge
working.
Implements: bug-71272c6
Co-authored-by: Crush <crush@charm.land>
Add comprehensive trailer validation following git's trailer
specification. Each trailer is validated for proper key:value format
with no whitespace allowed before or inside the key. Multiline values
are supported using RFC 822 folding with continuation lines
requiring whitespace indentation. Trailers are now properly assembled
into a block at the end of commit messages separated by blank lines.
Implements: bug-896472f
Co-authored-by: Crush <crush@charm.land>
Implements: bug-4fbe222
Co-authored-by: Crush <crush@charm.land>
Add buildAndValidateSubject function to construct commit subjects in
conventional commit format and validate they don't exceed 50 characters.
Truncated subjects show exceeding portion with ellipsis in error output.
Implements: bug-5b35298
Co-authored-by: Crush <crush@charm.land>
Co-authored-by: Crush <crush@charm.land>
Replace the inline release logic in Taskfile.yaml with a dedicated
release.fish script following the same staged pattern used by lune,
yatd, and crush. The script handles tag computation, cross-compilation,
UPX packing, and upload via the shared release(1) fish function.
Taskfile changes:
- Release task now delegates to ./release.fish
- Add release:build convenience task for --from build
- Clean task also removes dist/
Extends the tool to support both commit and tag formatting:
- Add git-formatted-tag mode for annotated tag formatting
- Add install subcommand to create symlinks in ~/.local/bin
- Extract shared code (runGitWithStdin, validateSubjectLength) to git.go
- Update module path to git.secluded.site/git-format
BREAKING CHANGE: Renamed from formatted-commit to git-format. Uninstall
the old binary and reinstall following README instructions. Run
git-format install to create symlinks, then invoke via git
formatted-commit or git formatted-tag.
The -B flag now accepts a string argument containing the breaking change
description instead of being a boolean flag. This description is
formatted and inserted as a BREAKING CHANGE: footer between the body and
git trailers, following the Conventional Commits specification.
The flag still adds ! to the subject line. When used with heredoc
syntax, multi-line breaking change descriptions are supported.
Also re-added the -a/--amend flag that was present in main but missing
from this feature branch.
Implements: bug-e75a648
Assisted-by: Claude Sonnet 4.5 via Crush
When the -B flag is used to mark a commit as a breaking change, the tool
now validates that the body contains a BREAKING CHANGE: or BREAKING
CHANGES: footer. If not present, it returns a descriptive error
instructing users to document breaking change details in this footer.
Implements: bug-e75a648
Co-authored-by: Crush <crush@charm.land>
Replaced justfile with Taskfile.yaml adapted from nasin-pali project.
Updated AGENTS.md to reference task commands instead of just commands.
Assisted-by: Claude Sonnet 4.5 via Crush
Previously, formatBody processed each line independently. When input
text was already wrapped (but incorrectly), each line got rewrapped
separately, making the wrapping worse.
Now consecutive plain text lines are collected in a buffer, joined with
spaces to unwrap them, then passed to wordWrap once as a single
paragraph. Blank lines, bullet points, and numbered lists interrupt the
buffer to preserve paragraph boundaries and list formatting.
Fixes: ed58135
Assisted-by: Claude Sonnet 4.5 via Crush
Commit messages are plaintext piped to 'git commit -F -' stdin,
so
HTML sanitization with bluemonday was unnecessary and harmful. It was
escaping characters like < and > that should remain literal in
commit
text.
Security is maintained through the stdin pipe preventing shell
injection.
Fixes: a6c077f
Assisted-by: Claude Sonnet 4.5 via Crush
Add comprehensive trailer validation following git's trailer
specification. Each trailer is validated for proper key:value format
with no whitespace allowed before or inside the key. Multiline values
are supported using RFC 822 folding with continuation lines
requiring whitespace indentation. Trailers are now properly assembled
into a block at the end of commit messages separated by blank lines.
Implements: bug-896472f
Co-authored-by: Crush <crush@charm.land>