Changelog

SemVer 2.0.0 Keep-A-Changelog 1.0.0

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog,
and this project adheres to Semantic Versioning,
and yes, platform and engine support are part of the public API.
Please file a bug if you notice a violation of semantic versioning.

Unreleased

Added

Changed

Deprecated

Removed

Fixed

Security

2.0.9 - 2026-08-03

  • TAG: v2.0.9
  • COVERAGE: 99.62% – 265/266 lines in 11 files
  • BRANCH COVERAGE: 100.00% – 64/64 branches in 11 files
  • 98.39% documented

Fixed

  • kettle-jem-template-20260802-001 - Devcontainer JSON files now merge as JSONC,
    preserving comments and trailing commas during template updates.

  • Refresh kettle-family with nomono in the templating workflow.

2.0.8 - 2026-08-01

  • TAG: v2.0.8
  • COVERAGE: 99.62% – 265/266 lines in 11 files
  • BRANCH COVERAGE: 100.00% – 64/64 branches in 11 files
  • 96.77% documented

Changed

  • kettle-jem-template-20260801-001 - Generated README gem dashboard links now
    use ClickGems instead of BestGems.

Fixed

  • kettle-jem-template-20260801-002 - Generated RSpec helpers now normalize
    managed configuration block bindings structurally, preventing mixed block
    parameter names from producing invalid configuration after a merge.
  • kettle-jem-template-20260801-003 - Generated project metadata and
    documentation now normalize configured underscore hostnames to valid
    hyphenated hostnames.
  • kettle-jem-template-20260801-004 - Generated organization README logos now
    use GitHub’s stable organization avatar endpoint instead of assuming a
    matching Galtzo-hosted asset exists.

2.0.7 - 2026-07-31

  • TAG: v2.0.7
  • COVERAGE: 99.62% – 265/266 lines in 11 files
  • BRANCH COVERAGE: 100.00% – 64/64 branches in 11 files
  • 96.77% documented

Added

Fixed

  • kettle-jem-template-20260728-004 - Generated dep-heads workflows now use the
    setup-ruby Bundler install path for direct appraisal Gemfiles, avoiding rv
    lockfile parser failures on Git and path dependencies.
  • kettle-jem-template-20260728-005 - VersionGem bootstrap now creates the
    missing canonical version spec when a project only has shim namespace version
    specs.
  • kettle-jem-template-20260730-001 - Gemspec package file enumeration now runs
    relative to the gemspec directory, so release package contents stay correct
    even when the gemspec is loaded from another working directory.

2.0.6 - 2026-07-28

  • TAG: v2.0.6
  • COVERAGE: 99.62% – 265/266 lines in 11 files
  • BRANCH COVERAGE: 100.00% – 64/64 branches in 11 files
  • 96.77% documented

Added

  • kettle-jem-template-20260726-001 - Projects now include YARD lint
    configuration and documentation dependencies so documentation issues fail
    before generated docs are refreshed.

  • kettle-jem-template-20260727-001 - Spec harness documentation now lists the
    RSpec helpers provided by kettle-test.

Changed

  • kettle-jem-template-20260725-001 - Release pull request branches beginning
    with feature/release now run JRuby and TruffleRuby workflows.
  • kettle-jem-template-20260725-002 - Version specs now use anonymous_loader to
    cover version.rb without redefining constants, or are removed when version
    specs are not managed for the project.

  • kettle-jem-template-20260728-001 - Generated Ruby workflows now use clearer
    setup-ruby-flash planning and can prepare appraisal-only jobs without
    installing the main Gemfile bundle.

Fixed

  • kettle-jem-template-20260726-002 - Generated version files now document their
    version namespace and constants, reducing warning-only YARD lint output.

  • kettle-jem-template-20260726-003 - Coverage upload steps now treat Coveralls,
    QLTY, and Codecov as optional, so provider outages do not fail CI when local
    coverage thresholds still pass.
  • kettle-jem-template-20260728-002 - Generated RuboCop configs now ignore the
    same gemfiles/vendor/bundle tree as .gitignore, so vendored dependency
    installs are not reported as project lint debt.
  • kettle-jem-template-20260728-003 - Generated dep-heads workflows now run
    TruffleRuby jobs with current RubyGems and Bundler, avoiding setup failures
    before the test suite starts.

2.0.5 - 2026-07-21

  • TAG: v2.0.5
  • COVERAGE: 99.62% – 265/266 lines in 11 files
  • BRANCH COVERAGE: 100.00% – 64/64 branches in 11 files
  • 93.55% documented

Changed

  • kettle-jem-template-20260716-002 - Generated gemspec manifests now ship fewer
    repository-only files by default to reduce downstream distro packaging churn.

  • kettle-jem-template-20260720-002 - Generated development Gemfiles now use the
    released tree_sitter_language_pack gem 1.13.3 or newer by default.
  • kettle-jem-template-20260720-003 - Generated StructuredMerge Git diff driver
    config now uses the installed smorg-rb Ruby driver name.
  • kettle-jem-template-20260720-005 - Generated README Support & Community rows
    now include a RubyForum help badge.

2.0.4 - 2026-07-01

  • TAG: v2.0.4
  • COVERAGE: 99.62% – 265/266 lines in 11 files
  • BRANCH COVERAGE: 98.46% – 64/65 branches in 11 files
  • 93.55% documented

Fixed

  • Package configured license files in gem release file lists.

2.0.3 - 2026-06-21

  • TAG: v2.0.3
  • COVERAGE: 99.62% – 265/266 lines in 11 files
  • BRANCH COVERAGE: 98.46% – 64/65 branches in 11 files
  • 93.55% documented

Added

  • Added support for JRuby 10.1 and TruffleRuby 34.0.

Changed

  • Retemplated project metadata and CI/development automation with kettle-jem v7.0.0.

Fixed

  • Corrected OpenCollective funding metadata to use the kettle-dev collective.

2.0.2 - 2026-06-10

  • TAG: v2.0.2
  • COVERAGE: 100.00% – 265/265 lines in 10 files
  • BRANCH COVERAGE: 100.00% – 64/64 branches in 10 files
  • 93.55% documented

Fixed

  • Updated generated project metadata links to use the migrated kettle-dev
    GitHub organization.

2.0.1 - 2026-05-31

  • TAG: v2.0.1
  • COVERAGE: 100.00% – 265/265 lines in 10 files
  • BRANCH COVERAGE: 100.00% – 64/64 branches in 10 files
  • 93.55% documented

Added

  • Added StructuredMerge git diff driver config and local .gitattributes
    entries generated by the current kettle-jem template.

Changed

  • Refreshed kettle-jem-managed project files, migrated template config to
    .structuredmerge/kettle-jem.yml, and updated local development tooling
    dependencies including kettle-dev 2.0.6 and nomono 1.0.2.

Fixed

  • Fixed generated documentation URLs that incorrectly pointed at a monorepo
    gems/token-resolver path.

2.0.0 - 2026-05-27

  • TAG: v2.0.0
  • COVERAGE: 100.00% – 265/265 lines in 10 files
  • BRANCH COVERAGE: 100.00% – 64/64 branches in 10 files
  • 93.55% documented

Added

  • New CI workflows — Expanded Ruby/engine matrix coverage:
    • jruby.yml — JRuby CI workflow
    • ruby-3.4.yml — Ruby 3.4 CI workflow
    • templating.yml — Templating CI workflow
    • truffleruby-23.1.yml, truffleruby-23.2.yml, truffleruby-24.2.yml, truffleruby-25.0.yml — TruffleRuby version-pinned CI workflows
    • Renamed legacy.ymlruby-3.2.yml and supported.ymlruby-3.3.yml for consistency
  • Dev binaries — New developer/tooling scripts in bin/: ast-merge-recipe, kettle-gh-release, kettle-jem, print_matches, rbts, unparser
  • Modular gemfiles — Added coverage_local.gemfile, style_local.gemfile, templating.gemfile, templating_local.gemfile, and recording gemfiles for local-path sibling gem development
  • Dev container setup — Added devcontainer/scripts/setup-tree-sitter.sh for Tree-sitter native library installation
  • mise environment management — Added mise.toml for ENV-driven local development configuration; migrated from .envrc-only approach to mise + dotenvy
  • Template freeze markers — Added kettle-jem:freeze / kettle-jem:unfreeze markers in token-resolver.gemspec to preserve custom sections across template runs
  • .gemrc — Added project-level gem configuration file
  • .rubocop_rspec.yml — Added RSpec-specific RuboCop configuration
  • GitHub Copilot instructions — Added .github/COPILOT_INSTRUCTIONS.md
  • License texts — Added AGPL-3.0-only.md and PolyForm-Small-Business-1.0.0.md

Changed

  • BREAKING: License changed from MIT to AGPL-3.0-only OR PolyForm-Small-Business-1.0.0spec.licenses updated in gemspec; license files, README badges, and compatibility metadata updated accordingly
  • kettle-dev development dependency bumped from ~> 1.2 to ~> 2.0
  • bundler-audit development dependency bumped from ~> 0.9.2 to ~> 0.9.3
  • appraisal2 version constraint loosened from ~> 3.0, ~> 3.0.6 to ~> 3.0, >= 3.0.6
  • Local dev wiring — Switched from ad hoc monorepo paths to nomono Gemfile macros for sibling gem resolution in style.gemfile and related local gemfiles
  • Template dependency — Updated from jsonc-merge to json-merge in templating_local.gemfile
  • Gemspec homepage_uri — Hardcoded to https://token-resolver.galtzo.com/ (was dynamically constructed with tr)
  • Skip unresolved-token scan for gemspec — Added .kettle-jem.yml config to exclude token-resolver.gemspec from the token scan
  • CI: codecov/codecov-action bumped from v5 to v6
  • CI: marocchino/sticky-pull-request-comment bumped from v2 to v3
  • CI: addressable (transitive dependency) bumped from 2.8.8 to 2.8.9
  • CI: json (bundler group) bumped from 2.18.1 to 2.19.2
  • Dev container — Updated devcontainer.json and apt-install scripts with improved tooling setup

Removed

  • LICENSE.txt — Replaced by LICENSE.md, AGPL-3.0-only.md, and PolyForm-Small-Business-1.0.0.md
  • Previous license options not included in the new dual-license set — Removed retired license files such as Big-Time-Public-License.md

Fixed

  • Typos — Minor documentation/comment typo corrections in BENCHMARK.md and IDE configuration

Security

  • bundler-audit ~> 0.9.3` — Picked up latest security-advisory database and patch-level fixes

1.0.2 - 2026-02-22

  • TAG: v1.0.2
  • COVERAGE: 98.13% – 263/268 lines in 10 files
  • BRANCH COVERAGE: 91.18% – 62/68 branches in 10 files
  • 96.77% documented

Added

  • Benchmarking tools — Performance comparison suite comparing token-resolver against simpler
    alternatives (String#gsub and Kernel#sprintf):
    • benchmarks/comparison.rb — Comprehensive benchmark script measuring iterations per second
      across four realistic scenarios (simple replacement, moderate complexity, high complexity,
      and large documents with sparse tokens)
    • gemfiles/modular/benchmark/ips.gemfile — Development dependency for benchmark-ips gem
    • Rake tasks: rake bench:comparison (run comparison), rake bench:list (list benchmarks),
      rake bench:run (run all benchmarks), rake bench (alias)
    • BENCHMARK.md — Results and analysis showing token-resolver is 100-3000x slower due to
      PEG parsing, validation, and AST building; includes guidance on when to use each approach
      and real-world performance context

1.0.1 - 2026-02-22

  • TAG: v1.0.1
  • COVERAGE: 98.13% – 263/268 lines in 10 files
  • BRANCH COVERAGE: 91.18% – 62/68 branches in 10 files
  • 96.77% documented

Added

  • Config#segment_pattern option — a parslet character class constraining which characters
    are valid inside token segments (default: "[A-Za-z0-9_]"). This prevents false positive
    token matches against Ruby block parameters ({ |x| expr }), shell variable expansion
    (${VAR:+val}), and other syntax that structurally resembles tokens but contains spaces
    or punctuation in the “segments”.
  • Resolve#resolve now validates replacement keys against the config’s segment_pattern and
    raises ArgumentError if a key contains characters that the grammar would never parse.

Fixed

  • False positive token matches — the grammar previously used any (match any character)
    for segment content, which allowed spaces, operators, and punctuation inside token segments.
    This caused Ruby block syntax like { |fp| File.exist?(fp) } and shell expansion like
    ${CLASSPATH:+:$CLASSPATH} to be incorrectly parsed as tokens. With multi-separator configs
    (["|", ":"]), the second | was reconstructed as : during on_missing: :keep
    roundtripping, silently corrupting source files. The grammar now uses
    match(segment_pattern) instead of any, limiting segments to word characters by default.

1.0.0 - 2026-02-21

  • TAG: v1.0.0
  • COVERAGE: 97.67% – 252/258 lines in 10 files
  • BRANCH COVERAGE: 89.39% – 59/66 branches in 10 files
  • 96.72% documented

Added

  • Initial release

Security