Releases: kettle-dev/token-resolver
Releases · kettle-dev/token-resolver
v2.0.2
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.
Many paths lead to being a sponsor or a backer of this project. Are you on such a path?
v2.0.1
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.
Many paths lead to being a sponsor or a backer of this project. Are you on such a path?
v2.0.0
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 workflowruby-3.4.yml— Ruby 3.4 CI workflowtemplating.yml— Templating CI workflowtruffleruby-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.0bundler-auditdevelopment dependency bumped from~> 0.9.2to~> 0.9.3appraisal2version 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
Many paths lead to being a sponsor or a backer of this project. Are you on such a path?
v1.0.2
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
Many paths lead to being a sponsor or a backer of this project. Are you on such a path?
v1.0.1
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.
Many paths lead to being a sponsor or a backer of this project. Are you on such a path?