Skip to content

Release Notes - v0.6.0

Overview

This release introduces TOON output format for LLM-facing commands, achieving ~8x token reduction compared to raw git log. It also adds GitLab repository support, automatic reference linking for issues, PRs, and commits, author attribution for external contributors, and compact maintenance release grouping.

Highlights

  • TOON output format for LLM commands (~8x token reduction vs raw git log)
  • GitLab repository support with automatic reference linking for issues, PRs, and commits
  • Author attribution for external contributors and compact grouping of maintenance releases

TOON Output Format

TOON (Token-Oriented Object Notation) is now the default output for LLM commands:

# Default: TOON format (~40% fewer tokens than JSON)
schangelog parse-commits --since=v0.5.0

# Explicit JSON for tooling/debugging
schangelog parse-commits --since=v0.5.0 --format=json

Example TOON output:

Repository: github.com/example/project
Range:
  Since: v0.5.0
  Until: HEAD
  CommitCount: 5
Commits[5]{Hash,Author,Date,Type,Scope,Subject,SuggestedCategory}:
  abc123d,John Doe,2026-01-04,feat,auth,add OAuth2 support,Added
  def456a,Jane Smith,2026-01-03,fix,,resolve memory leak,Fixed

GitLab Support

Repository links now work with GitLab URLs, including nested groups:

{
  "repository": "https://gitlab.com/grokify/tools/structured-changelog"
}

Generates GitLab-style links:

  • Issues: /-/issues/42
  • Merge Requests: /-/merge_requests/43
  • Commits: /-/commit/abc123d
  • Compare: /-/compare/v0.5.0...v0.6.0

Automatic Reference Linking

When using FullOptions (or LinkReferences: true), references become clickable:

- Add OAuth2 support ([#42](https://github.com/example/repo/issues/42), [`abc123d`](https://github.com/example/repo/commit/abc123def))

Configurable Header

New IR fields control the generated header:

{
  "versioning": "semver",
  "commit_convention": "conventional"
}

Generates:

The format is based on Keep a Changelog, this project adheres to Semantic Versioning, commits follow Conventional Commits, and this changelog is generated by Structured Changelog.

Author Attribution

External contributors are now automatically attributed in rendered changelogs:

{
  "maintainers": ["grokify"],
  "releases": [{
    "added": [{
      "description": "New feature",
      "author": "@contributor"
    }]
  }]
}

Generates:

- New feature by [@contributor](https://github.com/contributor)

Common bots (dependabot, renovate, github-actions, etc.) are auto-detected and excluded from attribution.

External Contributor Detection in parse-commits

Use the --changelog flag to mark external contributors in git parsing output:

schangelog parse-commits --since=v0.5.0 --changelog=CHANGELOG.json

This reads maintainers and bots from the changelog and adds:

  • IsExternal field on each commit (true for non-team members)
  • Contributors summary with deduplicated author list

Example TOON output:

Contributors[3]{Name,CommitCount,IsExternal}:
  John Wang,15,false
  Jane Doe,3,true
  dependabot[bot],2,false

The matching logic handles:

  • Direct username matches (grokify)
  • Email matches (johncwang@gmail.com)
  • GitHub noreply emails (12345+grokify@users.noreply.github.com)

Compact Maintenance Releases

Consecutive maintenance-only releases (dependencies, documentation, build, tests) are now grouped:

## Versions 0.71.1 - 0.71.10 (Maintenance)

10 releases: 8 dependency update(s), 2 documentation change(s).

This significantly reduces changelog length for projects with many patch releases.

New CLI Flags

Flag Commands Description
--format parse-commits, suggest-category, validate Output format: toon (default), json, json-compact
--changelog parse-commits Path to CHANGELOG.json for external contributor detection

New IR Fields

Field Values Description
versioning semver, calver, custom, none Versioning scheme for header
commit_convention conventional, none Commit convention for header
maintainers ["username", ...] Team members excluded from attribution
bots ["bot-name", ...] Custom bots excluded from attribution

New Renderer Options

Option Default FullOptions Description
LinkReferences false true Create hyperlinks for issues, PRs, commits
IncludeAuthors true true Add attribution for external contributors
CompactMaintenanceReleases true false Group consecutive maintenance releases

Breaking Changes

This release includes breaking changes to CLI flags:

Before After Migration
--compact --format=json-compact Use --format=json-compact for minified JSON
--json --format=json Use --format=json for JSON output
(default JSON) (default TOON) Add --format=json if scripts expect JSON

Example migration:

# Before
schangelog parse-commits --since=v0.5.0 | jq '.commits'

# After
schangelog parse-commits --since=v0.5.0 --format=json | jq '.commits'

Documentation

What's Next

v0.7.0 will focus on Localization:

  • Localized section headers (Added → Ajouté, Fixed → Corrigé)
  • 25+ language support matching Keep a Changelog translations
  • Embedded locale files via //go:embed

Installation

# Via Go
go install github.com/grokify/structured-changelog/cmd/schangelog@v0.6.0

# Via Homebrew
brew install grokify/tap/structured-changelog