Changelog
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 bykettle-test.
Changed
- kettle-jem-template-20260725-001 - Release pull request branches beginning
withfeature/releasenow run JRuby and TruffleRuby workflows. -
kettle-jem-template-20260725-002 - Version specs now use
anonymous_loaderto
coverversion.rbwithout 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
samegemfiles/vendor/bundletree 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
releasedtree_sitter_language_packgem 1.13.3 or newer by default. - kettle-jem-template-20260720-003 - Generated StructuredMerge Git diff driver
config now uses the installedsmorg-rbRuby 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-jemv7.0.0.
Fixed
- Corrected OpenCollective funding metadata to use the
kettle-devcollective.
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 includingkettle-dev2.0.6 andnomono1.0.2.
Fixed
- Fixed generated documentation URLs that incorrectly pointed at a monorepo
gems/token-resolverpath.
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.yml→ruby-3.2.ymlandsupported.yml→ruby-3.3.ymlfor 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.shfor Tree-sitter native library installation -
mise environment management — Added
mise.tomlfor ENV-driven local development configuration; migrated from.envrc-only approach to mise + dotenvy -
Template freeze markers — Added
kettle-jem:freeze/kettle-jem:unfreezemarkers intoken-resolver.gemspecto 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.mdandPolyForm-Small-Business-1.0.0.md
Changed
-
BREAKING: License changed from MIT to AGPL-3.0-only OR PolyForm-Small-Business-1.0.0 —
spec.licensesupdated in gemspec; license files, README badges, and compatibility metadata updated accordingly -
kettle-devdevelopment dependency bumped from~> 1.2to~> 2.0 -
bundler-auditdevelopment dependency bumped from~> 0.9.2to~> 0.9.3 -
appraisal2version constraint loosened from~> 3.0, ~> 3.0.6to~> 3.0, >= 3.0.6 -
Local dev wiring — Switched from ad hoc monorepo paths to
nomonoGemfile macros for sibling gem resolution instyle.gemfileand related local gemfiles -
Template dependency — Updated from
jsonc-mergetojson-mergeintemplating_local.gemfile -
Gemspec
homepage_uri— Hardcoded tohttps://token-resolver.galtzo.com/(was dynamically constructed withtr) -
Skip unresolved-token scan for gemspec — Added
.kettle-jem.ymlconfig to excludetoken-resolver.gemspecfrom the token scan -
CI:
codecov/codecov-actionbumped from v5 to v6 -
CI:
marocchino/sticky-pull-request-commentbumped 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.jsonandapt-installscripts with improved tooling setup
Removed
-
LICENSE.txt— Replaced byLICENSE.md,AGPL-3.0-only.md, andPolyForm-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.mdand 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-resolveragainst simpler
alternatives (String#gsubandKernel#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 forbenchmark-ipsgem - 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_patternoption — 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#resolvenow validates replacement keys against the config’ssegment_patternand
raisesArgumentErrorif 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:duringon_missing: :keep
roundtripping, silently corrupting source files. The grammar now uses
match(segment_pattern)instead ofany, 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