kettle-jem 7.0.0 → 7.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +1428 -0
  4. data/LICENSE.md +13 -0
  5. data/README.md +807 -0
  6. data/exe/kettle-jem +20 -0
  7. data/lib/kettle/jem/cli.rb +334 -0
  8. data/lib/kettle/jem/license_txt_migrator.rb +33 -0
  9. data/lib/kettle/jem/rakelib/install.rake +10 -0
  10. data/lib/kettle/jem/rakelib/prepare.rake +10 -0
  11. data/lib/kettle/jem/rakelib/selftest.rake +10 -0
  12. data/lib/kettle/jem/rakelib/template.rake +10 -0
  13. data/lib/kettle/jem/tasks/install_task.rb +2133 -0
  14. data/lib/kettle/jem/tasks/prepare_task.rb +251 -0
  15. data/lib/kettle/jem/tasks/self_test_task.rb +256 -0
  16. data/lib/kettle/jem/tasks/template_task.rb +123 -0
  17. data/lib/kettle/jem/tasks.rb +6 -0
  18. data/lib/kettle/jem/templates/.aiignore.example +19 -0
  19. data/lib/kettle/jem/templates/.config/mise/env.sh +26 -0
  20. data/lib/kettle/jem/templates/.devcontainer/apt-install/devcontainer-feature.json.example +9 -0
  21. data/lib/kettle/jem/templates/.devcontainer/apt-install/install.sh.example +19 -0
  22. data/lib/kettle/jem/templates/.devcontainer/devcontainer.json.example +27 -0
  23. data/lib/kettle/jem/templates/.devcontainer/scripts/setup-tree-sitter.sh.example +210 -0
  24. data/lib/kettle/jem/templates/.env.local.example +67 -0
  25. data/lib/kettle/jem/templates/.envrc.example +4 -0
  26. data/lib/kettle/jem/templates/.envrc.no-osc.example +4 -0
  27. data/lib/kettle/jem/templates/.gemrc.example +1 -0
  28. data/lib/kettle/jem/templates/.git-hooks/commit-msg.example +60 -0
  29. data/lib/kettle/jem/templates/.git-hooks/commit-subjects-goalie.txt.example +8 -0
  30. data/lib/kettle/jem/templates/.git-hooks/footer-template.erb.txt.example +16 -0
  31. data/lib/kettle/jem/templates/.git-hooks/prepare-commit-msg.example +9 -0
  32. data/lib/kettle/jem/templates/.github/.codecov.yml.example +14 -0
  33. data/lib/kettle/jem/templates/.github/FUNDING.yml.example +10 -0
  34. data/lib/kettle/jem/templates/.github/FUNDING.yml.no-osc.example +10 -0
  35. data/lib/kettle/jem/templates/.github/copilot_instructions.md.example +1 -0
  36. data/lib/kettle/jem/templates/.github/dependabot.yml.example +13 -0
  37. data/lib/kettle/jem/templates/.github/workflows/auto-assign.yml.example +21 -0
  38. data/lib/kettle/jem/templates/.github/workflows/coverage.yml.example +102 -0
  39. data/lib/kettle/jem/templates/.github/workflows/current.yml.example +86 -0
  40. data/lib/kettle/jem/templates/.github/workflows/dep-heads.yml.example +249 -0
  41. data/lib/kettle/jem/templates/.github/workflows/dependency-review.yml.example +22 -0
  42. data/lib/kettle/jem/templates/.github/workflows/discord-notifier.yml.example +39 -0
  43. data/lib/kettle/jem/templates/.github/workflows/framework-ci.yml.example +81 -0
  44. data/lib/kettle/jem/templates/.github/workflows/heads.yml.example +212 -0
  45. data/lib/kettle/jem/templates/.github/workflows/jruby-10.0.yml.example +91 -0
  46. data/lib/kettle/jem/templates/.github/workflows/jruby-9.1.yml.example +90 -0
  47. data/lib/kettle/jem/templates/.github/workflows/jruby-9.2.yml.example +95 -0
  48. data/lib/kettle/jem/templates/.github/workflows/jruby-9.3.yml.example +95 -0
  49. data/lib/kettle/jem/templates/.github/workflows/jruby-9.4.yml.example +95 -0
  50. data/lib/kettle/jem/templates/.github/workflows/jruby.yml.example +91 -0
  51. data/lib/kettle/jem/templates/.github/workflows/license-eye.yml.example +43 -0
  52. data/lib/kettle/jem/templates/.github/workflows/locked_deps.yml.example +89 -0
  53. data/lib/kettle/jem/templates/.github/workflows/opencollective.yml.example +44 -0
  54. data/lib/kettle/jem/templates/.github/workflows/ruby-2.3.yml.example +80 -0
  55. data/lib/kettle/jem/templates/.github/workflows/ruby-2.4.yml.example +84 -0
  56. data/lib/kettle/jem/templates/.github/workflows/ruby-2.5.yml.example +84 -0
  57. data/lib/kettle/jem/templates/.github/workflows/ruby-2.6.yml.example +84 -0
  58. data/lib/kettle/jem/templates/.github/workflows/ruby-2.7.yml.example +84 -0
  59. data/lib/kettle/jem/templates/.github/workflows/ruby-3.0.yml.example +85 -0
  60. data/lib/kettle/jem/templates/.github/workflows/ruby-3.1.yml.example +83 -0
  61. data/lib/kettle/jem/templates/.github/workflows/ruby-3.2.yml.example +80 -0
  62. data/lib/kettle/jem/templates/.github/workflows/ruby-3.3.yml.example +80 -0
  63. data/lib/kettle/jem/templates/.github/workflows/ruby-3.4.yml.example +80 -0
  64. data/lib/kettle/jem/templates/.github/workflows/style.yml.example +78 -0
  65. data/lib/kettle/jem/templates/.github/workflows/templating.yml.example +86 -0
  66. data/lib/kettle/jem/templates/.github/workflows/truffle.yml.example +91 -0
  67. data/lib/kettle/jem/templates/.github/workflows/truffleruby-22.3.yml.example +92 -0
  68. data/lib/kettle/jem/templates/.github/workflows/truffleruby-23.0.yml.example +92 -0
  69. data/lib/kettle/jem/templates/.github/workflows/truffleruby-23.1.yml.example +78 -0
  70. data/lib/kettle/jem/templates/.github/workflows/truffleruby-24.2.yml.example +91 -0
  71. data/lib/kettle/jem/templates/.github/workflows/truffleruby-25.0.yml.example +96 -0
  72. data/lib/kettle/jem/templates/.github/workflows/truffleruby-33.0.yml.example +91 -0
  73. data/lib/kettle/jem/templates/.github/workflows/unlocked_deps.yml.example +93 -0
  74. data/lib/kettle/jem/templates/.gitignore.example +53 -0
  75. data/lib/kettle/jem/templates/.gitlab-ci.yml.example +134 -0
  76. data/lib/kettle/jem/templates/.idea/.gitignore.example +44 -0
  77. data/lib/kettle/jem/templates/.licenserc.yaml.example +8 -0
  78. data/lib/kettle/jem/templates/.opencollective.yml.example +3 -0
  79. data/lib/kettle/jem/templates/.qlty/qlty.toml.example +79 -0
  80. data/lib/kettle/jem/templates/.rspec.example +10 -0
  81. data/lib/kettle/jem/templates/.rubocop.example +1 -0
  82. data/lib/kettle/jem/templates/.rubocop.yml.example +47 -0
  83. data/lib/kettle/jem/templates/.rubocop_rspec.yml.example +55 -0
  84. data/lib/kettle/jem/templates/.simplecov.example +18 -0
  85. data/lib/kettle/jem/templates/.structuredmerge/git-drivers.toml.example +86 -0
  86. data/lib/kettle/jem/templates/.structuredmerge/kettle-jem.yml.example +519 -0
  87. data/lib/kettle/jem/templates/.yard-lint.yml.example +54 -0
  88. data/lib/kettle/jem/templates/.yardignore.example +13 -0
  89. data/lib/kettle/jem/templates/.yardopts.example +14 -0
  90. data/lib/kettle/jem/templates/AGENTS.md.example +284 -0
  91. data/lib/kettle/jem/templates/AGPL-3.0-only.md.example +235 -0
  92. data/lib/kettle/jem/templates/Appraisal.root.gemfile.example +26 -0
  93. data/lib/kettle/jem/templates/Appraisals.example +150 -0
  94. data/lib/kettle/jem/templates/Big-Time-Public-License.md.example +99 -0
  95. data/lib/kettle/jem/templates/CHANGELOG.md.example +33 -0
  96. data/lib/kettle/jem/templates/CHANGELOG.transfer.md +109 -0
  97. data/lib/kettle/jem/templates/CITATION.cff.example +20 -0
  98. data/lib/kettle/jem/templates/CODE_OF_CONDUCT.md.example +134 -0
  99. data/lib/kettle/jem/templates/CONTRIBUTING.md.example +292 -0
  100. data/lib/kettle/jem/templates/FUNDING.md.example +74 -0
  101. data/lib/kettle/jem/templates/FUNDING.md.no-osc.example +63 -0
  102. data/lib/kettle/jem/templates/Gemfile.example +49 -0
  103. data/lib/kettle/jem/templates/IRP.md.example +34 -0
  104. data/lib/kettle/jem/templates/LICENSE.md.example +3 -0
  105. data/lib/kettle/jem/templates/MIT.md.example +21 -0
  106. data/lib/kettle/jem/templates/PolyForm-Noncommercial-1.0.0.md.example +131 -0
  107. data/lib/kettle/jem/templates/PolyForm-Small-Business-1.0.0.md.example +121 -0
  108. data/lib/kettle/jem/templates/README.md.example +545 -0
  109. data/lib/kettle/jem/templates/REEK +0 -0
  110. data/lib/kettle/jem/templates/RUBOCOP.md.example +78 -0
  111. data/lib/kettle/jem/templates/Rakefile.example +163 -0
  112. data/lib/kettle/jem/templates/SECURITY.md.example +21 -0
  113. data/lib/kettle/jem/templates/bin/setup.example +36 -0
  114. data/lib/kettle/jem/templates/certs/pboling.pem.example +27 -0
  115. data/lib/kettle/jem/templates/gem.gemspec.example +161 -0
  116. data/lib/kettle/jem/templates/gemfiles/modular/benchmark/r4/v0.5.gemfile.example +2 -0
  117. data/lib/kettle/jem/templates/gemfiles/modular/benchmark/vHEAD.gemfile.example +2 -0
  118. data/lib/kettle/jem/templates/gemfiles/modular/cgi/r4/v0.5.gemfile.example +1 -0
  119. data/lib/kettle/jem/templates/gemfiles/modular/cgi/vHEAD.gemfile.example +1 -0
  120. data/lib/kettle/jem/templates/gemfiles/modular/coverage.gemfile.example +14 -0
  121. data/lib/kettle/jem/templates/gemfiles/modular/coverage_local.gemfile.example +34 -0
  122. data/lib/kettle/jem/templates/gemfiles/modular/debug.gemfile.example +22 -0
  123. data/lib/kettle/jem/templates/gemfiles/modular/documentation.gemfile.example +24 -0
  124. data/lib/kettle/jem/templates/gemfiles/modular/documentation_local.gemfile.example +20 -0
  125. data/lib/kettle/jem/templates/gemfiles/modular/erb/r2/v3.0.gemfile.example +1 -0
  126. data/lib/kettle/jem/templates/gemfiles/modular/erb/r2.3/default.gemfile.example +6 -0
  127. data/lib/kettle/jem/templates/gemfiles/modular/erb/r2.6/v2.2.gemfile.example +3 -0
  128. data/lib/kettle/jem/templates/gemfiles/modular/erb/r3/v5.0.gemfile.example +1 -0
  129. data/lib/kettle/jem/templates/gemfiles/modular/erb/r3.1/v4.0.gemfile.example +2 -0
  130. data/lib/kettle/jem/templates/gemfiles/modular/erb/r4/v5.0.gemfile.example +1 -0
  131. data/lib/kettle/jem/templates/gemfiles/modular/erb/vHEAD.gemfile.example +2 -0
  132. data/lib/kettle/jem/templates/gemfiles/modular/json/truffleruby_22_3.gemfile.example +6 -0
  133. data/lib/kettle/jem/templates/gemfiles/modular/json/truffleruby_23_0.gemfile.example +6 -0
  134. data/lib/kettle/jem/templates/gemfiles/modular/json/truffleruby_23_1.gemfile.example +6 -0
  135. data/lib/kettle/jem/templates/gemfiles/modular/mutex_m/r2/v0.3.gemfile.example +2 -0
  136. data/lib/kettle/jem/templates/gemfiles/modular/mutex_m/r2.4/v0.1.gemfile.example +3 -0
  137. data/lib/kettle/jem/templates/gemfiles/modular/mutex_m/r3/v0.3.gemfile.example +2 -0
  138. data/lib/kettle/jem/templates/gemfiles/modular/mutex_m/r4/v0.3.gemfile.example +2 -0
  139. data/lib/kettle/jem/templates/gemfiles/modular/mutex_m/vHEAD.gemfile.example +2 -0
  140. data/lib/kettle/jem/templates/gemfiles/modular/optional.gemfile.example +16 -0
  141. data/lib/kettle/jem/templates/gemfiles/modular/recording/r2.3/recording.gemfile.example +16 -0
  142. data/lib/kettle/jem/templates/gemfiles/modular/recording/r2.4/recording.gemfile.example +18 -0
  143. data/lib/kettle/jem/templates/gemfiles/modular/recording/r2.5/recording.gemfile.example +16 -0
  144. data/lib/kettle/jem/templates/gemfiles/modular/recording/r3/recording.gemfile.example +16 -0
  145. data/lib/kettle/jem/templates/gemfiles/modular/recording/r4/recording.gemfile.example +16 -0
  146. data/lib/kettle/jem/templates/gemfiles/modular/recording/vHEAD.gemfile.example +2 -0
  147. data/lib/kettle/jem/templates/gemfiles/modular/rspec.gemfile.example +4 -0
  148. data/lib/kettle/jem/templates/gemfiles/modular/runtime_heads.gemfile.example +14 -0
  149. data/lib/kettle/jem/templates/gemfiles/modular/shunted.gemfile.example +21 -0
  150. data/lib/kettle/jem/templates/gemfiles/modular/stringio/r2/v3.0.gemfile.example +5 -0
  151. data/lib/kettle/jem/templates/gemfiles/modular/stringio/r2.4/v0.0.2.gemfile.example +4 -0
  152. data/lib/kettle/jem/templates/gemfiles/modular/stringio/r3/v3.0.gemfile.example +5 -0
  153. data/lib/kettle/jem/templates/gemfiles/modular/stringio/r4/v3.0.gemfile.example +5 -0
  154. data/lib/kettle/jem/templates/gemfiles/modular/stringio/vHEAD.gemfile.example +2 -0
  155. data/lib/kettle/jem/templates/gemfiles/modular/style.gemfile.example +31 -0
  156. data/lib/kettle/jem/templates/gemfiles/modular/style_local.gemfile.example +26 -0
  157. data/lib/kettle/jem/templates/gemfiles/modular/templating.gemfile.example +34 -0
  158. data/lib/kettle/jem/templates/gemfiles/modular/templating_local.gemfile.example +72 -0
  159. data/lib/kettle/jem/templates/gemfiles/modular/webrick/r4/v1.9.gemfile.example +1 -0
  160. data/lib/kettle/jem/templates/gemfiles/modular/webrick/vHEAD.gemfile.example +1 -0
  161. data/lib/kettle/jem/templates/gemfiles/modular/x_std_libs/r2/libs.gemfile.example +3 -0
  162. data/lib/kettle/jem/templates/gemfiles/modular/x_std_libs/r2.3/libs.gemfile.example +3 -0
  163. data/lib/kettle/jem/templates/gemfiles/modular/x_std_libs/r2.4/libs.gemfile.example +3 -0
  164. data/lib/kettle/jem/templates/gemfiles/modular/x_std_libs/r2.6/libs.gemfile.example +3 -0
  165. data/lib/kettle/jem/templates/gemfiles/modular/x_std_libs/r3/libs.gemfile.example +3 -0
  166. data/lib/kettle/jem/templates/gemfiles/modular/x_std_libs/r3.1/libs.gemfile.example +3 -0
  167. data/lib/kettle/jem/templates/gemfiles/modular/x_std_libs/r4/libs.gemfile.example +6 -0
  168. data/lib/kettle/jem/templates/gemfiles/modular/x_std_libs/vHEAD.gemfile.example +6 -0
  169. data/lib/kettle/jem/templates/gemfiles/modular/x_std_libs.gemfile.example +12 -0
  170. data/lib/kettle/jem/templates/lib/gem/version.rb.example +1 -0
  171. data/lib/kettle/jem/templates/lib/gem/version_gem.rb.example +1 -0
  172. data/lib/kettle/jem/templates/mise.toml.example +25 -0
  173. data/lib/kettle/jem/templates/mise.toml.no-osc.example +25 -0
  174. data/lib/kettle/jem/templates/parsers.toml.example +19 -0
  175. data/lib/kettle/jem/templates/readme/partials/basic_usage.md.example +28 -0
  176. data/lib/kettle/jem/templates/readme/partials/configuration.md.example +112 -0
  177. data/lib/kettle/jem/templates/readme/partials/synopsis.md.example +3 -0
  178. data/lib/kettle/jem/templates/shim/.github/workflows/current.yml.example +40 -0
  179. data/lib/kettle/jem/templates/shim/.rspec.example +5 -0
  180. data/lib/kettle/jem/templates/shim/.structuredmerge/kettle-jem.yml.example +28 -0
  181. data/lib/kettle/jem/templates/shim/CHANGELOG.md.example +9 -0
  182. data/lib/kettle/jem/templates/shim/Gemfile.example +14 -0
  183. data/lib/kettle/jem/templates/shim/README.md.example +25 -0
  184. data/lib/kettle/jem/templates/shim/Rakefile.example +8 -0
  185. data/lib/kettle/jem/templates/shim/gem.gemspec.example +45 -0
  186. data/lib/kettle/jem/templates/shim/lib/compat_require.rb.example +3 -0
  187. data/lib/kettle/jem/templates/shim/lib/entrypoint.rb.example +3 -0
  188. data/lib/kettle/jem/templates/shim/lib/version.rb.example +1 -0
  189. data/lib/kettle/jem/templates/shim/spec/shim_spec.rb.example +15 -0
  190. data/lib/kettle/jem/templates/shim/spec/spec_helper.rb.example +23 -0
  191. data/lib/kettle/jem/templates/sig/gem.rbs.example +1 -0
  192. data/lib/kettle/jem/templates/spec/README.md.example +28 -0
  193. data/lib/kettle/jem/templates/spec/spec_helper.rb.example +39 -0
  194. data/lib/kettle/jem/version.rb +5 -3
  195. data/lib/kettle/jem/version_gem.rb +8 -0
  196. data/lib/kettle/jem.rb +18317 -1525
  197. data/lib/kettle-jem.rb +2 -1
  198. data/sig/kettle/jem.rbs +8 -0
  199. data.tar.gz.sig +0 -0
  200. metadata +753 -24
  201. metadata.gz.sig +0 -0
data/CHANGELOG.md ADDED
@@ -0,0 +1,1428 @@
1
+ # Changelog
2
+
3
+ [![SemVer 2.0.0][📌semver-img]][📌semver] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog]
4
+
5
+ All notable changes to this project will be documented in this file.
6
+
7
+ The format is based on [Keep a Changelog][📗keep-changelog],
8
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
9
+ and [yes][📌major-versions-not-sacred], platform and engine support are part of the [public API][📌semver-breaking].
10
+ Please file a bug if you notice a violation of semantic versioning.
11
+
12
+ [📌semver]: https://semver.org/spec/v2.0.0.html
13
+ [📌semver-img]: https://img.shields.io/badge/semver-2.0.0-FFDD67.svg?style=flat
14
+ [📌semver-breaking]: https://github.com/semver/semver/issues/716#issuecomment-869336139
15
+ [📌major-versions-not-sacred]: https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html
16
+ [📗keep-changelog]: https://keepachangelog.com/en/1.0.0/
17
+ [📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-FFDD67.svg?style=flat
18
+
19
+ ## [Unreleased]
20
+
21
+ ### Added
22
+
23
+ ### Changed
24
+
25
+ ### Deprecated
26
+
27
+ ### Removed
28
+
29
+ ### Fixed
30
+
31
+ ### Security
32
+
33
+ ## [7.1.1] - 2026-08-08
34
+
35
+ - TAG: [v7.1.1][7.1.1t]
36
+ - COVERAGE: 93.95% -- 10635/11320 lines in 15 files
37
+ - BRANCH COVERAGE: 77.25% -- 4549/5889 branches in 15 files
38
+ - 18.04% documented
39
+
40
+ ### Added
41
+
42
+ - Template NDJSON summaries now distinguish checksum write bypasses, planned
43
+ files left unchanged after rendering, and changed destination files.
44
+ - Source-template fingerprinting now uses an explicit renderer-semantics
45
+ version, so unrelated Kettle-Jem code changes do not invalidate every
46
+ destination checksum record.
47
+
48
+ - `kettle-jem-deps-floor` now keeps a 30-day persistent per-gem RubyGems
49
+ version cache and honors `kettle-release` cache-bust markers, so recently
50
+ released gems refresh while untouched dependency checks can survive transient
51
+ RubyGems API failures.
52
+ - Generated spec harness files now document the RSpec helpers made available by
53
+ `kettle-test`.
54
+ - Generated main Gemfiles now include `kettle-family`, except when templating
55
+ the `kettle-family` gem itself.
56
+ - Monorepo subproject Gemfiles now use the repository package path when
57
+ generating direct sibling local-path wiring, so truthy family workspace envs
58
+ resolve siblings from the member root instead of the repository root.
59
+ - Added `.structuredmerge/kettle-jem.lock` for template application state and
60
+ checksum-based template skipping, with `--checksums` modes and
61
+ `--ignore-checksums` as an alias for `--checksums=off`.
62
+ - Documented checksum skip modes and the per-destination `input_fingerprint`
63
+ used by template-based skipping.
64
+ - `kettle-jem` now uses the shared `kettle-ndjson` event toolkit for NDJSON
65
+ progress stream filtering, emission, recording, and phase timing.
66
+ - Added `KJ_GH_ORG` as a GitHub-specific repository-owner override for
67
+ scaffolded GitHub URLs, while keeping generic `FORGE_ORG` at highest
68
+ precedence so personal `KJ_GH_USER` maintainer settings do not seed org-owned
69
+ repos.
70
+ - Changelog replay now records a cursor in the managed `kettle-jem` config
71
+ state so first-time templated projects receive only an initial templating
72
+ changelog entry, while previously templated projects replay only missed
73
+ template-impacting entries.
74
+ - Curated Bundler binstub generation now includes `kettle-gha-pins` when it is
75
+ present in the destination bundle.
76
+ - Generated gemspec templates now include `anonymous_loader` as a development
77
+ dependency, and version spec normalization uses it to execute generated
78
+ `version.rb` files for coverage without redefining package constants.
79
+ - Added a transfer changelog query API so family tooling can report how many
80
+ template-impacting changelog replay entries a project has not yet applied.
81
+ - Generated documentation tooling now includes `yard-lint` and a
82
+ `.yard-lint.yml` config for kettle-dev's documentation lint task.
83
+ - RubyForum tags are now configurable through family/project kettle-jem config
84
+ and ENV, so templated gemspecs set `mailing_list_uri` and support docs point
85
+ to tagged RubyForum pages instead of GitHub Discussions.
86
+
87
+ - kettle-jem-template-20260727-001 - Spec harness documentation now lists the
88
+ RSpec helpers provided by `kettle-test`.
89
+
90
+ - Transfer changelog replay now supports destination applicability filters and filter-aware status reporting.
91
+
92
+ ### Changed
93
+
94
+ - Runtime dependency metadata now requires `kettle-ndjson` 0.1.3 or newer and
95
+ `kettle-rb` 0.1.7 or newer.
96
+ - Gemspec package manifest merging now normalizes legacy destination `Dir[...]`
97
+ globs into the generated package-helper shape, preventing duplicated
98
+ `spec.files` assignments after templating.
99
+ - Runtime dependency metadata now requires `kettle-gha-pins` 0.3.3 or newer.
100
+ - Generated main Gemfiles now require `kettle-family` 1.2.1 or newer, so
101
+ gem-root family commands use the reset helper that runs outside broken
102
+ member bundles.
103
+ - Generated main Gemfiles now require `nomono` 1.1.1 or newer.
104
+ - Generated Ruby workflow templates now use `appraisal-rb/setup-ruby-flash` for
105
+ Ruby setup, including the workflow summary improvements for resolved Ruby
106
+ versions and head-build revisions.
107
+ - Generated Ruby workflow templates now pin the setup-ruby-flash revision that
108
+ supports appraisal-only setup without installing the main Gemfile bundle.
109
+ - kettle-jem-template-20260728-001 - Generated Ruby workflows now use clearer
110
+ setup-ruby-flash planning and can prepare appraisal-only jobs without
111
+ installing the main Gemfile bundle.
112
+
113
+ - The `kettle-jem` executable startup header is now shown only when
114
+ `--verbose` is passed, while `version`, `-v`, and `--version` still print
115
+ just the executable version and exit.
116
+ - Transfer changelog replay now reads sectioned Markdown structurally and
117
+ applies transferred entries to the matching destination changelog section.
118
+ - Transfer changelog entries now use concise destination-project wording,
119
+ focusing on what maintainers see after templating.
120
+ - `kettle-jem-deps-floor --write` now commits its managed dependency floor
121
+ updates by default, with `--no-commit` available for callers that need the
122
+ previous uncommitted write behavior.
123
+ - `kettle-jem-deps-floor` now labels text reports with dry-run/write mode and
124
+ prints the exact `--write` hint when stale floors are found in dry-run mode.
125
+ - `kettle-jem-deps-floor --write` now stages dependency floor updates correctly
126
+ when `kettle-jem` is nested below a monorepo Git worktree root.
127
+ - `kettle-jem-workflow-pins` now labels text reports with dry-run/write mode
128
+ and prints the exact `--write` hint when stale workflow pins are found in
129
+ dry-run mode.
130
+ - `kettle-jem-workflow-pins --write` now commits managed workflow pin updates
131
+ by default, with `--no-commit` available for uncommitted writes.
132
+ - `kettle-jem-workflow-pins` now detects and updates stale version comments
133
+ when a pinned GitHub Action SHA is already current.
134
+ - Generated Kettle local Gemfiles now resolve `KETTLE_DEV_DEV=true` to the
135
+ `kettle-dev` workspace family root instead of sibling directories directly
136
+ under `~/src/my`.
137
+ - Runtime dependency metadata now requires `kettle-gha-pins` 0.3.1 or newer.
138
+ - `bin/kettle-jem-workflow-pins` now calls the shared `kettle-gha-pins` API
139
+ directly for cache, GitHub ref resolution, and upgrade planning instead of
140
+ shelling out to `kettle-gha-sha-pins`.
141
+ - Templating now reuses static, shareable regexes and small lookup lists in the
142
+ recipe dispatch and template-policy paths instead of reallocating them during
143
+ each recipe execution.
144
+ - Opt-in recipe-planning Ractor mode now batches worker-safe recipes across a
145
+ bounded chunked worker pool instead of spawning one Ractor per recipe, and it
146
+ keeps parser/merge paths with known unshareable dependency state on the main
147
+ Ractor.
148
+ - Templating can now opt into thread-backed recipe planning and file work with
149
+ `KETTLE_JEM_THREAD_WORKERS` and `KETTLE_JEM_THREAD_FILE_WORKERS`, providing a
150
+ benchmarkable alternative to main-thread and Ractor execution.
151
+ - Templating now supports benchmark-oriented skip controls for external
152
+ post-template work: `--skip-drift-check`, `--skip-rubocop-gradual`, and
153
+ `--skip-binstubs`, with matching `KETTLE_JEM_SKIP_*` environment variables.
154
+ - Templating reports now persist phase duration metadata, install command steps
155
+ record elapsed duration, and benchmark summaries show recipe-phase time apart
156
+ from external command time.
157
+ - The benchmark harness now supports `KETTLE_JEM_BENCHMARK_MODE=raw-template`
158
+ to compare scoped raw `TemplateTask` runs separately from the default
159
+ install-orchestrated one-shot template flow.
160
+ - The benchmark harness now defaults worker counts to `1,min(4,n/2),min(8,n/2),n`
161
+ instead of only `min(2,n)`, giving higher-core machines a useful default
162
+ scaling matrix while keeping low-core hosts bounded.
163
+ - Benchmark summaries now show each variant's median percentage delta against
164
+ `baseline-main` immediately after the variant name.
165
+ - README recipe reports now include sub-step timing metadata, and benchmark
166
+ results summarize the baseline README timing breakdown.
167
+
168
+ - Generated gemspec templates now require `kettle-dev` >= 2.5.10 and declare
169
+ `kettle-dev` literally so dependency floor automation can keep it current.
170
+ - Generated `.rspec` files now exclude `spec/tmp/**/*_spec.rb` so temporary
171
+ fixture projects do not get discovered during member-level spec runs.
172
+ - kettle-jem now requires `kettle-rb` >= 0.1.4.
173
+ - Refreshed generated GitHub Actions workflow pins for `ruby/setup-ruby` and
174
+ CodeQL actions.
175
+ - Gemfile and Appraisals template merge adapter failures now fail closed instead
176
+ of silently accepting template content.
177
+ - Generated pull request engine workflows now keep JRuby and TruffleRuby
178
+ coverage available via branch opt-in prefixes: `jruby/*` runs JRuby
179
+ workflows, `truffleruby/*` runs TruffleRuby workflows, and `engines/*` runs
180
+ all engine workflows. Other pull request branches continue to run MRI checks
181
+ without the alternate engine jobs.
182
+ - Generated CONTRIBUTING docs now explain the `jruby/*`, `truffleruby/*`, and
183
+ `engines/*` branch prefixes that opt pull requests into alternate Ruby engine
184
+ workflows.
185
+ - Generated workflow templates now evaluate skip-CI commit messages only for
186
+ push events, and mixed head/dependency-head templates gate JRuby and
187
+ TruffleRuby jobs before runner provisioning on pull requests.
188
+ - Generated standalone JRuby and TruffleRuby workflow templates now group their
189
+ push skip checks before their pull request branch guards so ordinary pull
190
+ request branches do not run alternate engine jobs.
191
+ - Template apply now restores executable bits on generated Git hook scripts.
192
+ - `require "kettle/jem"` now defers parser-backed template runtime dependencies
193
+ until template execution so Rake task installation does not load
194
+ `tree_sitter_language_pack` before RuboCop loads `parser`.
195
+ - `require "kettle/jem"` no longer directly loads `version_gem` by default;
196
+ require `kettle/jem/version_gem` for the optional `VersionGem::Basic`
197
+ extension.
198
+ - Ruby, engine, Rails, RuboCop, and RuboCop LTS compatibility choices now come
199
+ from `Kettle::Rb::CompatMatrix` in `kettle-rb`.
200
+ - Generated `mise.toml` files no longer export `RUBOCOP_LTS_LOCAL=false`;
201
+ local RuboCop-LTS mode is now controlled by setting the variable only when a
202
+ local checkout should be used.
203
+ - Generated style Gemfiles now require `rubocop-lts-rspec` >= 1.0.4.
204
+ - kettle-jem now declares and loads the direct `rbs` runtime dependency used
205
+ by its RBS signature cleanup logic.
206
+ - Version-gem bootstrapping now preserves projects that load `version_gem`
207
+ through a dedicated `lib/<entrypoint>/version_gem.rb` file instead of forcing
208
+ it back into the default entrypoint.
209
+ - Version-gem bootstrapping now updates existing generated version specs to
210
+ require a dedicated `lib/<entrypoint>/version_gem.rb` entrypoint when present.
211
+ - Gem templates and generated root Gemfiles now require `kettle-dev` >= 2.3.5.
212
+ - Gem templates and generated root Gemfiles now require `kettle-test` >= 2.0.11.
213
+ - Gem templates and generated root Gemfiles now require `turbo_tests2` >= 3.1.14.
214
+ - Generated gemspecs and optional Gemfiles now require `stone_checksums` >= 1.0.6.
215
+ - Shim gemspec templates now include `LICENSE.md`, matching the generated
216
+ license template filename, instead of the nonexistent `LICENSE.txt`.
217
+ - Monorepo subgem package templating now includes the main `Gemfile` so existing
218
+ generated gems receive the `nomono` bootstrap required by local modular
219
+ Gemfiles during templating-mode CI.
220
+ - Templating now applies transferable kettle-jem changelog entries to destination
221
+ `CHANGELOG.md` files using stable `kettle-jem-template-YYYYMMDD-NNN` IDs.
222
+ - Generated gemspecs now support explicit extra package-file globs via
223
+ `gemspec.package_files.include` in `.structuredmerge/kettle-jem.yml`.
224
+ - Version-gem templates now generate one package-level RBS file at
225
+ `sig/<entrypoint>.rbs` and migrate legacy nested
226
+ `sig/<entrypoint>/version.rbs` files into it.
227
+ - Generated gemspec package manifests now omit repository-only governance docs,
228
+ signing certs, recursive signature directories, split license files, and
229
+ `spec.extra_rdoc_files` by default.
230
+ - Generated templates now require the released floors for `kettle-dev` 2.3.0,
231
+ `kettle-drift` 1.0.5, `kettle-test` 2.0.9, `nomono` 1.0.8, and
232
+ `token-resolver` 2.0.4.
233
+ - Generated gemspecs now require `appraisal2` >= 3.1.4.
234
+ - Generated style Gemfiles now require `appraisal2-rubocop` >= 1.0.0.
235
+
236
+ - Generated optional Gemfiles no longer duplicate the gemspec's direct
237
+ `stone_checksums` development dependency.
238
+
239
+ - Quiet templating orchestration now passes quiet flags and debug-suppressing
240
+ environment to Bundler commands.
241
+ - Generated Appraisal guidance now defaults to `bin/rake appraisal:generate`,
242
+ reserving `appraisal:update` for intentional lock refreshes.
243
+ - Gemspec templating now raises preserved `rspec-stubbed_env` dependencies to
244
+ `>= 1.0.6`.
245
+ - Generated documentation Gemfiles now require `yard-fence` >= 0.9.6,
246
+ `yard-timekeeper` >= 0.2.3, and `yard-yaml` >= 0.2.3.
247
+ - kettle-jem now requires `kettle-rb` >= 0.1.2.
248
+
249
+ - kettle-jem-template-20260716-002 - Gemspecs now ship fewer repository-only
250
+ files, reducing package noise for downstream packagers.
251
+
252
+ - kettle-jem-template-20260720-002 - Development Gemfiles now use the released
253
+ `tree_sitter_language_pack` gem 1.13.3 or newer by default.
254
+ - kettle-jem-template-20260720-003 - StructuredMerge Git diff driver config now
255
+ uses the installed `smorg-rb` driver command.
256
+ - kettle-jem-template-20260720-005 - README Support & Community links now
257
+ include RubyForum.
258
+
259
+ - kettle-jem-template-20260725-001 - Release pull request branches beginning
260
+ with `feature/release` now run JRuby and TruffleRuby workflows.
261
+ - kettle-jem-template-20260725-002 - Version specs now use `anonymous_loader` to
262
+ cover `version.rb` without redefining constants, or are removed when version
263
+ specs are not managed for the project.
264
+
265
+ - Recognize legacy git ls-files spec.files pipelines when merging gemspec templates.
266
+
267
+ - Replace legacy byebug-named Gemfile dependencies with debug during templating.
268
+
269
+ - Generated README gem dashboard links now use ClickGems instead of BestGems.
270
+
271
+ - Clarify that transferable changelog entries are destination release notes, not internal template metadata.
272
+
273
+ - kettle-jem-template-20260801-001 - Generated README gem dashboard links now
274
+ use ClickGems instead of BestGems.
275
+
276
+ - Bootstrap direct-versus-modular dependency conflicts into a reviewable dependency_conflicts.resolve list, including keep_both for compatible overlapping ranges.
277
+
278
+ - Scope direct-versus-modular conflict discovery to active top-level fragments and x_std_libs; framework appraisal matrix files remain under appraisal resolution.
279
+
280
+ - Record explicit modular dependency removals and compatible keep_both decisions so repeated templating remains deterministic.
281
+
282
+ ### Fixed
283
+
284
+ - Templating now removes the obsolete `tree_sitter_language_pack` entry from
285
+ managed StructuredMerge local-gem lists, keeping `STRUCTUREDMERGE_DEV` from
286
+ resolving it under the sibling gems directory.
287
+ - Unset optional author ORCIDs now resolve to an empty citation value rather
288
+ than leaking their template token and aborting templating.
289
+ - Gemspec package manifest merging now recognizes the historical generated
290
+ `Dir[...] + [...]` shape structurally, retains legitimate destination globs,
291
+ and removes only obsolete generated `certs` and `sig` package helpers.
292
+
293
+ - Prepare every modular Gemfile referenced by the generated Gemfile before Bundler bootstraps templating dependencies.
294
+
295
+ - Preserve an existing main Gemfile source while applying templates.
296
+
297
+ - Use bundle install when a legacy lockfile lacks the required templating bootstrap gems.
298
+
299
+ - Respect per-file Ruby merge settings when applying templates.
300
+
301
+ - Canonicalize legacy release headings before replaying transfer changelog entries.
302
+
303
+ - Generated CI workflows now retry compatibility dependency installation while newly published runtime floors propagate through gem sources.
304
+
305
+ - Template merges now normalize managed RSpec block bindings structurally, preventing invalid mixed parameter names.
306
+
307
+ - Template runtime and config synchronization now normalize invalid underscore hostnames in generated documentation and gemspec metadata.
308
+
309
+ - Generated organization README logos now use GitHub's stable avatar endpoint when no Galtzo-hosted asset is guaranteed.
310
+
311
+ - Preserve flat Ruby entrypoints and avoid duplicating equivalent version requires during template bootstrap.
312
+
313
+ - Honor explicit VersionGem disablement and default supported Ruby gems to VersionGem during templating.
314
+
315
+ - Prune stale template lock records after managed files are removed.
316
+
317
+ - Avoid recursive project fact discovery while evaluating transfer changelog filters during templating.
318
+
319
+ - Templating now removes duplicated legacy configuration comments and repeated generated SimpleCov usage guidance from destinations.
320
+
321
+ - Generated RubyGems download badges now use Shields.io total downloads instead of the discontinued download-rank endpoint.
322
+
323
+ - Generated documentation Gemfiles now correctly document that `yard-lint`
324
+ 1.10 requires Ruby 3.3 or newer; projects testing older Rubies must keep
325
+ documentation tooling out of those targeted appraisals.
326
+
327
+ - Main Gemfile templating now removes stale direct `tree_sitter_language_pack`
328
+ declarations when the current templates own that dependency through the
329
+ modular templating Gemfile, preventing duplicate Bundler requirements during
330
+ re-templating.
331
+ - Kettle config templating now resolves known template tokens retained in
332
+ destination YAML values before the unresolved-token guard runs, while still
333
+ failing unknown token leaks.
334
+ - Git preflight now honors `KETTLE_JEM_GIT_LOCK` /
335
+ `KETTLE_JEM_GIT_COMMIT_LOCK`, preventing `.git/index.lock` races when
336
+ family-level monorepo templating runs many members concurrently.
337
+ - Old-Ruby version spec normalization now removes the managed VersionGem shared
338
+ example when the destination cannot depend on VersionGem.
339
+ - Generated gemspec package file enumeration now honors the destination Ruby
340
+ floor, so old-Ruby and JRuby workflows can parse gemspecs during Bundler
341
+ install while modern gems keep modern helper code.
342
+ - kettle-jem-template-20260729-002 - VersionGem bootstrap now preserves
343
+ and templates dedicated `version_gem.rb` entrypoints even when the gemspec
344
+ dependency is intentionally omitted, and generated anonymous-loader specs
345
+ cover both `version.rb` and `version_gem.rb`.
346
+ - `kettle-jem prepare` now skips release lockfile reset while local path
347
+ development env is active, so self-templating unreleased template stacks does
348
+ not fail release validation before templating can run.
349
+ - `kettle-jem prepare` now keeps templating enabled for bootstrap bundle
350
+ commands while local path development env is active.
351
+ - `kettle-jem install` setup commands now also preserve templating when local
352
+ path development env is active.
353
+ - `kettle-jem install` now skips release-style bundle lock normalization while
354
+ local path development env is active, so unreleased monorepo siblings are not
355
+ resolved as registry gems during self-templating.
356
+ - Generated local templating gemfiles now activate the lockfile's `nomono`
357
+ version before requiring `nomono/bundler`, avoiding early activation conflicts
358
+ when a newer `nomono` is installed locally.
359
+ - Generated local templating gemfiles now keep the `kettle-dev` local override
360
+ available even when it is already declared transitively by local `kettle-jem`.
361
+ - Generated dep-heads workflows now run TruffleRuby jobs with current RubyGems
362
+ and Bundler, avoiding setup failures before the test suite starts.
363
+ - `kettle-jem-workflow-pins --write` now refreshes GitHub Actions release
364
+ metadata instead of trusting a fresh persistent cache entry, so newly
365
+ published action releases are detected immediately.
366
+ - `kettle-jem-workflow-pins` no longer downgrades an existing version comment
367
+ such as `# v2.0` to an equivalent but less specific evergreen tag like
368
+ `# v2`.
369
+ - kettle-jem-template-20260728-002 - Generated RuboCop configs now ignore the
370
+ same `gemfiles/vendor/bundle` tree as `.gitignore`, so vendored dependency
371
+ installs are not reported as project lint debt.
372
+ - Existing generated `spec/spec_helper.rb` files now receive the
373
+ `kettle-test` helper documentation comment when structural merge preserves
374
+ their existing `require "kettle/test/rspec"` line.
375
+ - Version spec normalization now removes managed version specs when
376
+ `version_gem` is disabled or incompatible with the project's runtime Ruby
377
+ floor.
378
+ - Templating plan reports now include per-recipe duration metadata, template
379
+ planning deduplicates destination and template-source file reads, and runtime
380
+ loading is reduced to explicit main-Ractor extension points. A disabled
381
+ classified planning strategy now identifies worker-safe recipes, can opt into
382
+ experimental Ractor workers with `KETTLE_JEM_RACTOR_WORKERS`, records
383
+ execution counters, and preserves sequential report parity in preparation for
384
+ Ractor-based recipe planning.
385
+ - Added a `benchmarks/` harness that templates a reset Bundler gem skeleton and
386
+ compares classified planning and phase-gated file work with and without
387
+ opt-in Ractor workers. The harness now defaults `KJ_MIN_RUBY` to `1.8.7` so
388
+ benchmark runs exercise legacy workflow and gemfile generation through the
389
+ supported one-shot `template --accept-config` flow, prints progress while
390
+ long benchmark matrices run, records planning and file-worker execution
391
+ counters for both Ractors and threads, and records the latest benchmark
392
+ outcome in a committed results README.
393
+ - Apply now routes recipe report mutations through explicit write intents and
394
+ phase-gated per-file work units, preparing the file-processing path for
395
+ opt-in `KETTLE_JEM_RACTOR_FILE_WORKERS` execution without changing phase gates
396
+ or final filesystem outcomes.
397
+ - The former monolithic thin-slice spec has been split into behavior-named
398
+ integration, system, and end-to-end specs so the project test harness can
399
+ parallelize templating coverage more effectively.
400
+ - Generated README Support & Community rows now include a RubyForum help badge.
401
+ - Generated READMEs can now render template-managed corporate sponsor logos
402
+ from `readme.corporate_sponsors` config or family-provided sponsorship data.
403
+ - `kettle-jem` now supports `--events` for newline-delimited JSON progress
404
+ events, including named event type filters via comma-separated
405
+ `--events=TYPE,...` values, phase events, per-recipe template progress,
406
+ post-apply and command-step events, diagnostics, and summary events for family
407
+ orchestration consumers.
408
+ - Generated CI workflow templates now cache `.rspec_status` with explicit
409
+ per-workflow keys so `kettle-test` / `turbo_tests2` can reuse timing data
410
+ across MRI, JRuby, TruffleRuby, coverage, heads, dep-heads, and framework
411
+ matrix runs.
412
+ - Generated JRuby and TruffleRuby workflow templates now run when pull request
413
+ head branches start with `feature/release`, so `kettle-release` CI monitoring
414
+ does not treat intentionally skipped engine workflows as release failures.
415
+ - Generated dep-heads workflows now document why every engine job runs directly
416
+ from `gemfiles/dep_heads.gemfile`, making that generated Appraisal file
417
+ required checked-in output for the workflow.
418
+ - JRuby 9.2 workflow templates now use the legacy-engine bundle install path
419
+ instead of `ruby/setup-ruby` bundler caching so old Bundler does not fail
420
+ setup against gem servers without the full legacy index.
421
+ - Gemspec templating now structurally merges destination `spec.files`
422
+ collection entries with template package entries so project-specific
423
+ packaged files are not lost when the template rewrites the generated gemspec
424
+ structure.
425
+ - Main Gemfile templating now removes repeated direct sibling execution blocks
426
+ left behind by older `nomono` bootstrap output when applying the simplified
427
+ `require "nomono/bundler"` loader.
428
+ - Gemspec templating now restores additional legacy Prism policy behavior for
429
+ destination-only metadata fields, Bundler `git ls-files` package declarations,
430
+ and empty development-dependency section cleanup after runtime dependency
431
+ promotion.
432
+ - Added the repo-local `bin/kettle-jem-workflow-pins` maintenance script to
433
+ update the GitHub Actions SHA pin index used by generated workflow templates
434
+ via `kettle-gha-sha-pins`.
435
+ - Generated local Gemfile templates now use a simple `require "nomono/bundler"`
436
+ loader, with a provider-relative loader for `nomono` itself, instead of
437
+ emitting runtime lockfile parsing or explicit gem activation ceremony.
438
+ - Generated root Gemfiles now declare `nomono` with a plain dependency line
439
+ requiring `nomono` 1.1.0 or newer, and retemplating removes the older
440
+ `nomono_requirements` helper block.
441
+ - Added the repo-local `bin/kettle-jem-deps-floor` maintenance script to scan
442
+ dependency-bearing kettle-jem templates and update their dependency floors.
443
+ - `kettle-jem install` now generates a curated `bin/appraisal` binstub for the
444
+ `appraisal2` executable.
445
+ - Added a default-off `readme.badges.fossa` template option for managed FOSSA
446
+ README badges.
447
+ - Added explicit `ruby.test_minimum` template configuration, defaulting to
448
+ Ruby 2.4, for generated CI workflow and Appraisal floors.
449
+ - Added top-level `integrations` configuration for disabling coverage
450
+ integrations (`codecov`, `coveralls`, `qlty`) and the SkyWalking Eyes license
451
+ check integration across README badges, upload/check workflow steps, packaged
452
+ config/workflow templates, and cleanup of existing config files or workflows.
453
+ - kettle-jem's own `mise` environment now enables templating dependencies so
454
+ templating-only floors are validated in the normal gem bundle.
455
+ - Restored `kettle-jem prepare` as a pre-flight dependency bootstrap mode for
456
+ applying the minimal templating Gemfile payload before full templating.
457
+ - Gem templates and generated root Gemfiles now require `kettle-dev` >= 2.2.24.
458
+ - Version-gem bootstrapping now removes stale top-level RBS `VERSION`
459
+ declarations and generated style workflows load the RBS environment so
460
+ duplicate declarations fail in CI.
461
+ - Version-gem bootstrapping now removes literal `bundle gem` scaffold RBS
462
+ `VERSION` declarations before writing the managed `version.rbs` signature.
463
+ - Added a destructive `shim` template profile for compatibility wrapper gems.
464
+ Shim templating accepts the replacement gem via `--shimmed-gem` or
465
+ `KETTLE_JEM_SHIMMED_GEM`, generates only the shim runtime/docs/specs/CI, and
466
+ deletes obsolete implementation code, behavior specs, workflows, and gemfiles.
467
+
468
+ - kettle-jem-template-20260726-001 - Projects now include an optional
469
+ `yard:lint` task and YARD lint configuration for documentation quality checks.
470
+
471
+ - Generated coverage workflows now treat Coveralls, QLTY, and Codecov uploads
472
+ as optional so third-party coverage outages do not fail CI while the internal
473
+ coverage threshold check remains authoritative.
474
+ - Generated version files now document their version namespace and constants,
475
+ reducing warning-only `yard-lint` output in templated gems.
476
+ - Existing managed checksum state is now migrated out of the user-managed
477
+ kettle-jem config and into `.structuredmerge/kettle-jem.lock` automatically.
478
+ - Legacy root `.kettle-jem.lock` files are now moved to
479
+ `.structuredmerge/kettle-jem.lock` automatically.
480
+ - Changelog transfer replay now reads migrated `.structuredmerge/kettle-jem.lock`
481
+ state, so projects do not fall back to first-template changelog behavior after
482
+ checksum-state migration.
483
+ - Template checksum fingerprints now hash template token values without writing
484
+ those values into `.structuredmerge/kettle-jem.lock`.
485
+ - Generated `.yard-lint.yml` files now use yard-lint's current schema for
486
+ severity gating and tag ordering, so documentation lint can boot before docs
487
+ are regenerated.
488
+ - The packaged transfer changelog is now actually grouped by changelog section,
489
+ while replay still treats entries as a key-sorted stack for cursor tracking.
490
+ - Changelog replay now corrects stale transfer entries already present in
491
+ released changelog sections by stable transfer ID, preserving release metadata
492
+ and project-authored entries.
493
+ - Monorepo templating now serializes local Git driver configuration with the
494
+ shared family Git operation lock and retries transient Git lock conflicts,
495
+ preventing parallel `git config --local` workers from racing on `.git/config`.
496
+ - Changelog replay now cross-checks stored replay cursors against the
497
+ destination changelog contents, so legacy templated projects whose cursor was
498
+ stamped before transfer entries landed receive the missing transfer entries
499
+ on the next template run.
500
+
501
+ - Raised the `kettle-ndjson` runtime dependency floor to v0.1.1 so template
502
+ tooling can install it on the Ruby 2.4+ Kettle support floor.
503
+
504
+ - The `kettle-jem` executable now uses normal `require` loading and suppresses
505
+ its startup header for `--json` / `--events` machine-readable output.
506
+ - Generated MRI 2.4 through 2.7 workflows now bypass `ruby/setup-ruby`
507
+ Bundler caching and run an explicit bundle install, avoiding `bundle lock`
508
+ failures against gem.coop's missing legacy specs index.
509
+ - Generated legacy-engine workflows now configure Bundler to mirror gem.coop to
510
+ RubyGems.org during explicit CI installs, avoiding old Bundler full-index
511
+ requests that gem.coop does not support.
512
+ - Main Gemfile templating now removes duplicate `eval_gemfile` declarations
513
+ for the same modular dependency file, avoiding duplicate Bundler dependency
514
+ warnings after repeated templating.
515
+ - Generated templating workflows now update the root `nomono` bootstrap
516
+ dependency before enabling `K_JEM_TEMPLATING`, so cold CI runners can install
517
+ `nomono` before local templating gemfiles require its Bundler DSL.
518
+ - Local Gemfile templating now removes obsolete nomono activation ceremony from
519
+ existing destination files while retaining the simple
520
+ `require "nomono/bundler"` loader.
521
+ - Bootstrap commit execution now honors `KETTLE_JEM_GIT_COMMIT_LOCK` by locking
522
+ around the dirty recheck, `git add`, and `git commit` sequence for monorepo
523
+ family templating.
524
+ - Generated license summaries now link split license detail files to the
525
+ repository `blob/main` copy instead of packaging-relative files that are
526
+ intentionally excluded from gem manifests.
527
+ - Generated root Gemfiles no longer duplicate the
528
+ `tree_sitter_language_pack` declaration that belongs to the templating
529
+ modular Gemfile.
530
+ - Generated README source badges now use GitHub's canonical capitalization.
531
+ - Generated nomono local Gemfiles now use the normal `require "nomono/bundler"`
532
+ loader instead of a nomono-specific `require_relative` path.
533
+ - Install orchestration now bundles each distinct Bundler environment it will
534
+ execute under, and probes RuboCop Gradual tasks with the same environment used
535
+ for the eventual command.
536
+ - Bundler child commands now strip inherited command-line Git configuration, so
537
+ parent `safe.bareRepository=explicit` settings do not break Bundler Git source
538
+ caches during templating.
539
+ - Generated semantic diff Git driver configuration now consistently uses the
540
+ installed `smorg-rb` executable and Git diff driver name for Ruby diffs.
541
+ - Generated multi-engine workflow files, including `heads.yml` and
542
+ `dep-heads.yml`, now omit JRuby and TruffleRuby jobs when the project config
543
+ declares an MRI-only `engines` list.
544
+ - `kettle-jem`'s generated development Gemfiles now depend on released
545
+ `tree_sitter_language_pack` 1.13.2 or newer by default, while still
546
+ allowing templating runs to switch to a local source with
547
+ `VENDORED_GEMS=tree_sitter_language_pack` / `VENDOR_GEM_DIR`.
548
+ - Gemspec templating now deletes empty generated development-dependency comment
549
+ sections through Prism-backed CRISPR structural edits, preventing blank-line
550
+ churn before the closing `Gem::Specification` `end`.
551
+ - Fixed the `kettle-jem` package manifest so runtime template assets are
552
+ included even when the gemspec is loaded from the monorepo root.
553
+ - Generated local templating Gemfiles can now route
554
+ `tree_sitter_language_pack` through nomono's `VENDORED_GEMS` /
555
+ `VENDOR_GEM_DIR` support instead of using a one-off inferred local path.
556
+
557
+ - Templating setup now respects explicit `STRUCTUREDMERGE_DEV=false` and
558
+ `KETTLE_DEV_DEV=false` values when reading the kettle-family local install
559
+ marker, preventing prepare-mode bundle updates from re-enabling stale local
560
+ Gemfile wiring.
561
+ - Generated root Gemfiles no longer add a separate `gem "nomono"` bootstrap
562
+ line when templating the `nomono` gem itself, avoiding duplicate dependency
563
+ declarations against the package gemspec.
564
+ - `kettle-jem prepare` no longer explicitly asks Bundler to update parser gems
565
+ before they exist in a member lockfile, allowing cold-start templating
566
+ bootstraps to introduce vendored parser path dependencies during
567
+ `bundle install`.
568
+ - Workflow template pin maintenance now compares and updates complete pinned
569
+ action strings in source files, so `bin/kettle-jem-workflow-pins --check`
570
+ fails when template files drift from `github_actions_step_pins` even if the
571
+ action name is already covered by the pin index.
572
+ - kettle-jem's own gemspec now includes public signing certs in packaged files.
573
+ - Generated CI workflow synchronization now emits valid YAML for matrix and
574
+ setup-ruby sections instead of misindenting multi-line template fragments.
575
+ - Open Collective badge/funding detection now respects disabled funding policy
576
+ without falling back to the default organization.
577
+ - Version-gem RBS consolidation now migrates all legacy nested
578
+ `sig/<entrypoint>/**/*.rbs` content into the package-level signature and
579
+ removes the nested files, including when the package-level signature is
580
+ managed by a template entry.
581
+ - Generated dep-heads workflows now run every engine job directly from the
582
+ generated `gemfiles/dep_heads.gemfile`, avoiding `Appraisal.root.gemfile`
583
+ bootstrap failures with RubyGems/Bundler and gem.coop before the dep-heads
584
+ appraisal is selected.
585
+ - Packaged Rakefile templating now merges destination Rakefiles by default
586
+ instead of replacing them wholesale, preserving project-specific rake tasks
587
+ such as release or adapter test helpers.
588
+ - Version-gem namespace discovery no longer treats nested implementation
589
+ namespaces in the public entrypoint, such as `Kettle::Dev::Tasks`, as the gem
590
+ namespace when the existing version namespace is more specific.
591
+ - Gemfile and gemspec templating byte-offset rewrites now splice source with
592
+ byte-aware slicing so non-ASCII content before an edited AST node does not
593
+ corrupt generated Ruby.
594
+ - Generated legacy-engine CI workflows now install Bundler gems under
595
+ `${RUNNER_TEMP}/bundle` instead of `vendor/bundle`, preventing Appraisal
596
+ installs from creating nested `gemfiles/vendor` bundles.
597
+ - Generated RuboCop configs now exclude `**/vendor/**/*` so nested vendored
598
+ dependency trees are not linted.
599
+
600
+ - Fixed `bin/kettle-jem-workflow-pins` so its default project root resolves to
601
+ the kettle-jem gem root relative to the script instead of the caller's working
602
+ directory.
603
+ - Generated GitHub Actions workflows now preserve existing push branch filters
604
+ from destination workflows.
605
+ - GitHub Actions workflow templating now preserves existing destination SHA
606
+ pins for the same action/version when accepted templates are stale, and emits
607
+ a final warning telling maintainers to update the workflow template pins.
608
+ - SimpleCov templating now removes legacy kettle-soup-cover startup requires
609
+ from `.simplecov` and upgrades modifier-form `spec_helper` coverage bootstraps
610
+ to the full kettle-soup-cover `SimpleCov.start` block.
611
+ - Root Gemfile templating now keeps `nomono_requirements` before existing
612
+ `gem "nomono", *nomono_requirements` calls when merging legacy local sibling
613
+ wiring.
614
+ - Root Gemfile templating no longer adds generic direct-sibling path wiring for
615
+ runtime dependencies already handled by project-specific local modular
616
+ Gemfiles.
617
+ - Root Gemfile templating now evaluates the paired modular Gemfile for direct
618
+ runtime dependencies handled by `*_local.gemfile` overrides, preserving
619
+ released-vs-local switching after `accept_template` Gemfile rewrites.
620
+ - Root Gemfile templating now recognizes `eval_nomono_gems(gems: local_gems)`
621
+ declarations in `*_local.gemfile` files before deciding whether a runtime
622
+ dependency is already handled by paired modular local wiring.
623
+ - Local GitHub remotes now override generated gemspec `source_code_uri` tag URLs
624
+ when deriving repository owner tokens, preventing stale homepage metadata from
625
+ corrupting README logos and local sibling workspace env names.
626
+ - Bootstrap configs now seed runtime URI values, OpenCollective ENV overrides,
627
+ and Gemfile template ownership so first-time full templating does not leave
628
+ raw URI tokens or merge legacy Gemfile dependency sets into the generated
629
+ bundle.
630
+ - Generated Gemfiles now activate the Bundler-locked `nomono` before loading
631
+ `nomono/bundler`, avoiding global gem activation conflicts during
632
+ templating.
633
+ - Generated Gemfiles now scope templating-only direct sibling local-path
634
+ environment overrides to the direct dependency block so later modular
635
+ Gemfiles do not accidentally enter local sibling mode.
636
+ - Generated style Gemfiles now skip released RuboCop-LTS gems that were already
637
+ declared by earlier Gemfile evaluation, avoiding duplicate path/version
638
+ declarations during templating.
639
+ - Generated documentation local Gemfiles now skip the current package and
640
+ already declared gems before adding local family path overrides.
641
+ - Gem templates now require `appraisal2` >= 3.1.3.
642
+ - Generated style Gemfiles now require `appraisal2-rubocop` >= 0.2.2.
643
+ - Generated main Gemfiles now require `nomono` >= 1.0.6.
644
+ - Generated templating local Gemfiles now only use `TSLP_DEV` for local
645
+ `tree_sitter_language_pack` path overrides and no longer derive that path
646
+ from `STRUCTUREDMERGE_DEV`.
647
+ - Generated gemspecs now require `version_gem` >= 1.1.14.
648
+ - Generated gemspecs now require `gitmoji-regex` >= 2.0.4.
649
+ - Generated documentation Gemfiles now require `yaml-converter` >= 0.2.3.
650
+ - Generated documentation Gemfiles now require `yard-fence` >= 0.9.5.
651
+ - Generated documentation Gemfiles now require `yard-timekeeper` >= 0.2.2.
652
+ - Generated documentation Gemfiles now require `yard-yaml` >= 0.2.2.
653
+ - Gemfile, gemspec, Appraisal, and Rakefile template merging now derives Ruby
654
+ call source ranges and static string values from Prism nodes so heredoc
655
+ string arguments are preserved transparently.
656
+ - Gemspec dependency preservation now rewrites project-version constant
657
+ interpolation in dependency requirements to `spec.version` so preserved
658
+ dependencies remain loadable after anonymous-module version loading.
659
+ - Removed retired funding links and template tokens from generated kettle-jem
660
+ funding and README templates.
661
+ - Retemplated generated project metadata, support documentation, CI workflows,
662
+ binstubs, and development dependency floors with `kettle-jem` v7.0.0.
663
+ - Generated README and workflow templates now treat Ruby 4.0 as MRI current,
664
+ add discrete JRuby 10.0 and TruffleRuby 33.0 workflows/badges, and include a
665
+ TruffleRuby HEAD badge pointing at the shared heads workflow.
666
+ - Generated CI workflows now disable `ruby/setup-ruby` Bundler caching for
667
+ TruffleRuby 25.0 and JRuby 9.3 and run a serial Bundler install to avoid
668
+ legacy engine setup failures.
669
+ - `kettle-jem install` now runs `rubocop_gradual:autocorrect` after templating
670
+ and before the bootstrap commit when the destination project provides
671
+ `bin/rake`, so project-local Ruby syntax floors can normalize generated
672
+ files.
673
+ - `RUBOCOP_LTS_LOCAL` templating now switches the local `rubocop-lts/rubocop-lts`
674
+ checkout to the branch matching the selected `rubocop-rubyN_N` wrapper before
675
+ running setup and RuboCop Gradual normalization.
676
+ - Generated RuboCop-LTS local style Gemfiles now exclude the current project
677
+ package and already-declared gems before adding local family path overrides.
678
+ - Generated funding templates now default missing OpenCollective orgs to
679
+ `galtzo-floss` and warn when that fallback differs from the GitHub org.
680
+ - Shim gemspec templates now include the kettle-dev release/test harness
681
+ dependencies required by `kettle-changelog`, `kettle-test`, and release tasks.
682
+ - Shim gemspec templates now resolve the generated gem version token instead of
683
+ leaving `{KJ|GEM_VERSION}` unresolved.
684
+ - Shim and monorepo-root template profiles now include generated `.gitignore`
685
+ files so local `.env.local` configuration is ignored consistently.
686
+ - Shim Gemfile templates now include `nomono` and the generated templating
687
+ Gemfiles so `K_JEM_TEMPLATING=true bundle exec kettle-jem install` works.
688
+ - Shim Gemfile templates no longer add a Git-sourced replacement gem fallback;
689
+ the released replacement gem is already declared by the generated gemspec.
690
+ - Shim Gemfile templates now use `https://gem.coop`, matching the full template
691
+ and allowing released replacement gems to resolve without Git sources.
692
+ - Generated README compatibility sections now use prose for the test-matrix
693
+ credit and render all generated details blocks with Markdown enabled.
694
+ - Generated README compatibility sections now pair the test-matrix credit with
695
+ the kettle-dev logo and use a kettle-dev-specific details summary.
696
+ - The generated README dev/test stack table now includes `kettle-jem` with its
697
+ Appraisals and CI workflow template role.
698
+ - The generated README dev/test stack table now includes `kettle-dev` and keeps
699
+ stack gems in A-Z order while preserving self-exclusion.
700
+ - Gem templates and generated root Gemfiles now require `kettle-dev` >= 2.2.22.
701
+ - Generated SimpleCov setup now keeps `.simplecov` configuration-only and
702
+ starts coverage explicitly from `spec/spec_helper.rb` for SimpleCov v1.
703
+ - `.simplecov` templating now removes obsolete `SimpleCov.start` blocks with a
704
+ Prism AST cleanup pass while preserving destination-local configuration.
705
+ - `.simplecov` templating now removes the obsolete kettle-soup-cover config
706
+ require with the same Prism AST cleanup pass so SimpleCov finishes loading
707
+ before formatter configuration is required.
708
+ - `.simplecov` templating now migrates old generated `keep_destination`
709
+ overrides and converts preserved `track_files` calls to `cover` calls.
710
+ - Generated spec helper templating now normalizes stale SimpleCov bootstrap
711
+ blocks by deduplicating SimpleCov requires and restoring the formatter config
712
+ require before `SimpleCov.start`.
713
+ - Generated spec helpers now document that requiring SimpleCov loads the
714
+ configuration-only `.simplecov` before coverage starts.
715
+ - Generated coverage Gemfiles no longer pin SimpleCov to the pre-release-only
716
+ `kettle-dev/simplecov` `fix-final-parallel-worker-formatting` branch.
717
+ - Generated workspace path examples now use the renamed `my` local workspace
718
+ instead of the old `kettle-rb` checkout path.
719
+ - Generated coverage Gemfiles now require `kettle-soup-cover` >= 3.0.0.
720
+ - Generated Rakefiles now use `# simplecov:disable` / `# simplecov:enable`
721
+ blocks instead of deprecated legacy coverage markers.
722
+ - `kettle-jem install` now uses the latest `kettle-family install` marker to
723
+ activate locally installed template-stack source roots during templating
724
+ setup.
725
+ - Generated Gemfiles now guard preserved runtime `eval_nomono_gems` workspace
726
+ overrides during `K_JEM_TEMPLATING=true`, keeping templating bundles isolated
727
+ from target runtime sibling path dependencies.
728
+ - Generated main Gemfiles now add templating-aware `nomono` wiring for direct
729
+ runtime dependencies that exist as sibling gems in the same local family
730
+ workspace.
731
+ - Install lockfile normalization now keeps direct sibling runtime dependencies
732
+ available through the generated family `*_DEV` environment while still
733
+ disabling templating-only path overrides.
734
+ - Generated kettle-jem usage instructions now use the `kettle-jem` executable as
735
+ the bootstrap entrypoint instead of starting from `bundle exec kettle-jem`.
736
+ - Generated templating Gemfiles now resolve the local tree-sitter language pack
737
+ workspace fork from `structuredmerge/vendor`.
738
+ - Generated Appraisals now use modern keyword hash syntax for the
739
+ `appraisal2-rubocop` plugin declaration.
740
+ - Refreshed the generated `codecov/codecov-action` workflow pin and made
741
+ workflow-pin specs validate immutable pin shape instead of exact live SHAs.
742
+ - Refreshed generated workflow templates to pin `actions/checkout` to the
743
+ `v7.0.0` release.
744
+ - Gem templates and generated templating Gemfiles now require `kettle-dev` >= 2.2.12.
745
+ - The packaged gemspec template now uses the same `kettle-dev` 2.2.12 floor as
746
+ generated Gemfile tooling.
747
+ - Generated templating Gemfiles now require `kettle-drift` >= 1.0.4.
748
+ - Gem templates now require `kettle-test` >= 2.0.8.
749
+ - Generated coverage Gemfiles now require `kettle-soup-cover` >= 2.0.2.
750
+ - Generated style Gemfiles now require `rubocop-gradual` >= 0.4.0.
751
+ - Generated style Gemfiles now require `appraisal2-rubocop` >= 0.2.1.
752
+ - Generated main Gemfiles now require `nomono` >= 1.0.4.
753
+ - Generated gemspec templates now preserve the full existing gemspec author list
754
+ instead of replacing it with the primary author token.
755
+ - Retemplating now removes legacy `.github/workflows/tests.yml` files as
756
+ obsolete workflows.
757
+ - Runtime dependency `token-resolver` now requires 2.0.3 or newer.
758
+ - Gem templates now require `turbo_tests2` >= 3.1.6 for the default
759
+ `kettle-test` runner dependency.
760
+ - The README template now links `kettle-readme-backers` to the generated
761
+ `bin/` binstub instead of a non-existent `exe/` path.
762
+ - The README template's test matrix credit now highlights the Kettle dev/test
763
+ stack with BestGems, GitHub, and daily download rank links, excluding the
764
+ current gem from its own stack table.
765
+ - The README dev/test stack table now includes `kettle-soup-cover`.
766
+ - Documentation templates now require `yard-yaml` >= 0.2.1.
767
+ - Gemfile and gemspec source checks now prefer Prism-backed call records instead
768
+ of regex/string fallback matching for dependency and project-name decisions.
769
+ - Appraisals template merging now delegates same-name DSL call reconciliation to
770
+ `Prism::Merge` instead of custom source-line dependency comparison.
771
+ - Generated gemspec version-loader fallbacks now use `require_relative` for
772
+ gems whose runtime Ruby floor is 2.2 or newer, reserving `$LOAD_PATH`
773
+ mutation for gems that still target older Rubies.
774
+ - Generated gemspec version-loader guards now use `Gem.ruby_version`, avoiding
775
+ RuboCop `Gemspec/RubyVersionGlobalsUsage` violations.
776
+ - Generated auto-assign workflows now pin `pozil/auto-assign-issue` to the
777
+ immutable SHA for v4.
778
+ - Generated GitHub Actions workflow templates now pin `actions/checkout` to
779
+ the peeled commit SHA for v6.0.3 and `qltysh/qlty-action/coverage` to the
780
+ immutable SHA for v2.2.1.
781
+ - Generated GitHub Actions workflow templates now refresh pins for
782
+ `coverallsapp/github-action` and `codecov/codecov-action`.
783
+ - Generated templating and unlocked dependency workflows no longer install the
784
+ legacy tree-sitter action and rely on the packaged
785
+ `tree_sitter_language_pack` runtime instead.
786
+ - Generated templating workflows and `kettle-jem prepare` now update `nomono`
787
+ before install/selftest commands run, so stale locks do not activate old
788
+ local-workspace wiring code.
789
+ - Generated GitHub Actions workflow templates now refresh pins for
790
+ `github/codeql-action` sub-actions to v4.36.2.
791
+ - Generated workflow templates now pin `coverallsapp/github-action` and
792
+ `codecov/codecov-action` to resolvable release SHAs instead of stripped
793
+ SemVer strings.
794
+ - Generated README badge URLs now use the same URI-normalized form as
795
+ `kettle-pre-release`, avoiding churn between encoded namespace separators
796
+ and Unicode badge messages.
797
+ - Generated GitHub Actions workflow templates now refresh `ruby/setup-ruby` to
798
+ the immutable SHA for v1.312.0 and `codecov/codecov-action` to the latest
799
+ v7.0.0 release comment.
800
+ - Generated GitHub Actions workflow templates now refresh `ruby/setup-ruby`,
801
+ `coverallsapp/github-action`, and `pozil/auto-assign-issue` pins.
802
+ - Generated coverage workflows now publish QLTY coverage with GitHub OIDC so
803
+ repositories do not require `QLTY_COVERAGE_TOKEN` to be configured.
804
+ - Generated README and FUNDING OpenCollective links now use the configured
805
+ OpenCollective slug instead of assuming it matches the GitHub organization.
806
+ - Generated coverage workflow uploads now share the same template token as
807
+ custom workflow injection, avoiding duplicate coverage upload step templates.
808
+ - Generated coverage workflows no longer gain an extra blank line after the
809
+ shared coverage upload step token is expanded at end of file.
810
+ - Generated Appraisal/RuboCop templates now use Appraisal2 3.1.1's `plugin`
811
+ and `generator_only` DSLs to provide the full style toolchain from modern
812
+ Appraisal root bundles without leaking style dependencies into old-Ruby
813
+ appraisal bundles, while still evaluating the style toolchain for Bundler.
814
+ - Generated Appraisals no longer add a separate `cgi >= 0.5` declaration to
815
+ the `head` appraisal because the extracted stdlib gemfiles already provide
816
+ the Ruby-specific `cgi` dependency.
817
+ - Generated Appraisal root Gemfiles now load the style toolchain only on Ruby
818
+ 3.2+, matching the current RuboCop-LTS dependency floor.
819
+ - Generated Open Collective backers workflows now skip the README update step
820
+ when `README_UPDATER_TOKEN` is not configured instead of failing the workflow.
821
+ - Generated style toolchains now use `appraisal2-rubocop` 0.2.0 as their floor.
822
+ - Generated style toolchains now include `rubocop-minitest` so projects with
823
+ preserved Minitest RuboCop config can run `rubocop_gradual`.
824
+ - Template strategy documentation now clarifies that `raw_copy` is a bootstrap
825
+ path that bypasses token resolution and StructuredMerge normalization.
826
+ - Generated EOL TruffleRuby 22.3, 23.0, and 23.1 workflows now mark their
827
+ matrix entries experimental so native extension build failures do not fail
828
+ the whole workflow.
829
+ - Documented `kettle-jem install` as the canonical full templating entrypoint
830
+ and marked generated `kettle:jem:*` rake tasks as internal orchestration targets.
831
+ - Bare `kettle-jem template` now aliases to the full install path; use
832
+ `kettle-jem template --only PATH` or `--include PATH` for scoped file updates.
833
+ - `kettle-jem` project fact discovery now uses `Kettle::Jem::GemSpecReader`
834
+ and RubyGems specification objects instead of parsing gemspec source.
835
+ - `kettle-jem` namespace discovery now prefers existing source-tree version
836
+ namespaces before stale gemspec metadata so non-standard acronym namespaces
837
+ such as `OAuth2` and `OmniAuth` are preserved.
838
+ - README and CONTRIBUTING templates now document the effective
839
+ `ruby.test_minimum` value used when the project was templated.
840
+ - README templates now list Ruby 2.3 as supported but untested, matching Ruby
841
+ 2.2 and older, instead of rendering a Ruby 2.3 CI workflow badge.
842
+ - README templates now include a closing note that identifies kettle-jem and
843
+ StructuredMerge as the templating and merge-contract tooling.
844
+ - Generated gemspec summary and description assignments now use package
845
+ metadata tokens instead of emoji-only placeholders.
846
+ - README logo templating now splits config-driven `top_logos` from
847
+ `h2_synopsis_logos`, renders logos as aligned HTML images, and normalizes logo
848
+ assets to 128px.
849
+ - README logo config now accepts optional per-logo widths with `type|width`
850
+ entries, such as `org|12%` or `ruby|96px`.
851
+ - README Ruby language logos now link to Ruby Toolbox.
852
+ - Documented `rubygems.min_ruby` in the generated `.kettle-jem.yml` so projects
853
+ can make the published runtime Ruby floor explicit.
854
+ - Documentation templates now require `yard-yaml` >= 0.2.0.
855
+ - Documentation templates now require `yard-fence` >= 0.9.4.
856
+ - Documentation templates now require `yard-timekeeper` >= 0.2.1.
857
+ - Gem templates and generated templating Gemfiles now require `kettle-dev` >= 2.1.1.
858
+ - Gem templates now require `kettle-test` >= 2.0.3.
859
+ - Gem templates now require `appraisal2` >= 3.1.1.
860
+ - Generated templating Gemfiles now require `kettle-drift` >= 1.0.1.
861
+ - Runtime dependency `token-resolver` now requires the released 2.x line.
862
+ - Development lockfile generation now uses Bundler 4.0.12.
863
+ - Rake task specs now run from a sandboxed temporary project root.
864
+ - Ruby, engine, Bundler, RubyGems, RuboCop, and Rails compatibility choices now
865
+ come from an `RRRRB_MATRIX` source of truth so generated workflows and
866
+ appraisals can select the newest stable compatible toolchain per Ruby.
867
+ - Generated JRuby 9.1 and 9.2 workflows now install RubyGems 3.3.27 and
868
+ Bundler 2.3.27 instead of using the default JRuby toolchain versions.
869
+ - Generated TruffleRuby 23.1 workflows now bootstrap from the Ruby 3.2
870
+ appraisal Gemfile so Ruby 3.2-specific dependency restrictions apply before
871
+ Bundler cache installation, then run tests directly under that bundle instead
872
+ of regenerating the active appraisal Gemfile.
873
+ - Generated Ruby 3.0 and Ruby 3.2 appraisal Gemfiles now include
874
+ TruffleRuby-only `json` modules that pin to the default `json` gem shipped
875
+ with EOL TruffleRuby releases instead of constraining MRI Ruby bundles.
876
+ - Generated main Gemfiles now install `nomono` >= 1.0.3 so local workspace
877
+ override Gemfiles can load `nomono/bundler` from the released gem.
878
+ - Generated coverage workflows now pass `K_SOUP_COV_MIN_LINE` and
879
+ `K_SOUP_COV_MIN_BRANCH` through to Code Coverage Summary thresholds instead
880
+ of hardcoding `100 100`.
881
+ - Default semantic Git driver setup now writes repo-local `diff.smorg-*`
882
+ command config as well as managed `.gitattributes`, so local `git diff`
883
+ can actually invoke StructuredMerge drivers after templating.
884
+ - Runtime dependency `token-resolver` now requires 2.0.1 or newer.
885
+ - Generated gemspecs now require `version_gem` >= 1.1.12 while allowing the
886
+ released 1.1 line.
887
+ - Gem templates now require `gitmoji-regex` >= 2.0.2.
888
+ - Gem templates now require `turbo_tests2` >= 3.1.1 for the default
889
+ `kettle-test` runner.
890
+ - Generated style Gemfiles now use the latest released `rubocop-ruby*`
891
+ wrapper patch constraints for the RuboCop-LTS family.
892
+ - Generated style Gemfiles now use the latest released `rubocop-lts` track
893
+ constraints for every supported Ruby floor.
894
+ - Generated style Gemfiles now treat style dependency floors as latest-Ruby
895
+ task dependencies, independent from the gemspec runtime Ruby floor.
896
+ - kettle-jem now requires `kettle-rb` >= 0.1.1.
897
+ - Generated coverage Gemfiles now require `kettle-soup-cover` >= 2.0.1.
898
+ - Generated documentation Gemfiles now require `yaml-converter` >= 0.2.1
899
+ while allowing the released 0.2 line.
900
+
901
+ - Generated root Gemfiles no longer path-wire direct sibling dependencies from
902
+ stale sibling directories whose gemspec defines a different gem name.
903
+ - Generated root Gemfiles now remove previously generated direct sibling wiring
904
+ when the current sibling directory no longer defines the dependency gem.
905
+ - Generated RuboCop configs now activate the `rubocop-rspec` plugin for the
906
+ packaged RSpec RuboCop overlay.
907
+ - Gemspec `spec.files` merging now supports the generated `Dir[...] + [...]`
908
+ assignment shape on subsequent template runs instead of rejecting it as
909
+ unsupported.
910
+ - Generated modular Gemfiles no longer redeclare runtime dependencies that are
911
+ already supplied by the project gemspec.
912
+ - Existing generated gemspecs with splat-based `spec.files` assignments now
913
+ retain configured root license files from the template instead of preserving
914
+ the old splat-only assignment wholesale.
915
+ - Gemspec `spec.files` templating now fails hard for unsupported package-list
916
+ shapes instead of silently preserving destination content.
917
+ - Generated gemspecs now package active root license files declared by the
918
+ project license configuration.
919
+ - Gemspec templating no longer preserves frozen `spec.files` override blocks;
920
+ `spec.files` is structurally merged so stale frozen package lists cannot
921
+ replace the merged package payload.
922
+ - README template merging no longer duplicates preserved destination-only
923
+ subsections when they are already inside another preserved destination
924
+ section.
925
+ - Generated gemspecs now add an inline `Gemspec/RequiredRubyVersion` RuboCop
926
+ disable when the published runtime Ruby floor is below 2.0.
927
+ - `kettle-jem install` no longer tries to switch the local RuboCop-LTS checkout
928
+ while templating the RuboCop-LTS checkout itself.
929
+ - Generated style Gemfiles now require `rubocop-ruby3_2` >= 3.0.6 so
930
+ Appraisal/RuboCop tasks do not select damaged packages missing
931
+ packaged RuboCop-LTS configuration files.
932
+ - Gemspec `spec.files` merging now preserves `Dir[...]` glob expansion when
933
+ merging destination glob entries into an array-based template assignment by
934
+ generating concatenated `Dir[...] + [...]` package file expressions.
935
+ - Quiet templating orchestration no longer passes unsupported `--quiet`
936
+ switches to Bundler subcommands such as `bundle binstubs` or `bundle lock`;
937
+ only Bundler subcommands documented with `--quiet` receive that flag.
938
+ - Gemspec `spec.files` merging now inserts missing trailing commas when moving
939
+ existing collection entries before appended template entries, preventing
940
+ invalid Ruby when a destination's former last entry had no comma.
941
+ - Gemfile templating now preserves destination-only Ruby-bucket
942
+ `eval_gemfile` entries, preventing configured recording Gemfiles from being
943
+ dropped when the main Gemfile template is reapplied, and restores the main
944
+ recording Gemfile eval when existing Appraisals show recording is configured.
945
+ - Generated templating Gemfiles no longer duplicate `appraisal2-rubocop`; the
946
+ Appraisal generator formatter is provided by the style Gemfile loaded from
947
+ `Appraisal.root.gemfile`.
948
+ - Generated local Gemfile overrides now load `nomono/bundler` without activating
949
+ nomono's runtime dependencies during Bundler Gemfile evaluation, and bundled
950
+ handoff no longer runs through the RubyGems `kettle-jem` wrapper.
951
+ - Gemspec template merging now preserves chained squiggly heredoc assignments
952
+ such as `spec.description = <<~DESC.strip` instead of replacing only the
953
+ opener line.
954
+ - Generated README post-processing now adds missing compatible JRuby 10.0 and
955
+ TruffleRuby 33.0 compatibility badges when the matching workflow files exist.
956
+ - Shunted Gemfile generation no longer duplicates broad gemspec development
957
+ dependencies that already have explicit modular Gemfile compatibility
958
+ overrides, such as old-Ruby fork handling.
959
+ - `kettle-jem install` no longer fails a stale outer bootstrap commit step when
960
+ the bundled handoff already committed the generated changes.
961
+ - Shim template discovery now recovers the package version from the git index
962
+ or `HEAD` when a previous failed run already replaced the working-tree
963
+ version file with replacement-gem aliases.
964
+ - Shim profile version files now alias the replacement gem version constants
965
+ and compute the replacement version require path relative to the generated
966
+ shim version file, fixing nested require paths such as `omniauth/jwt`
967
+ shimming `omniauth/jwt2`.
968
+ - `kettle-jem install` now skips its bundled handoff when the destination bundle
969
+ does not include `kettle-jem`, allowing shim-only gems to finish templating.
970
+ - Namespace discovery now detects nested module declarations in the public
971
+ entrypoint before falling back to a stale generated version namespace, and the
972
+ README namespace badge now uses the shield-safe namespace token.
973
+ - OpenCollective template tokens now use `.github/FUNDING.yml` as a valid org
974
+ source, preventing empty `https://opencollective.com//...` README and
975
+ FUNDING links when destination env variables are not loaded.
976
+ - Monorepo-root templating now uses the no-OpenCollective funding templates
977
+ when no OpenCollective slug is configured, preventing empty generated
978
+ OpenCollective badge URLs in root `FUNDING.md` files.
979
+ - The `kettle-jem` CLI now refuses to run from the `kettle-jem` project root
980
+ against a different destination, so templating cannot silently use
981
+ `kettle-jem`'s own environment instead of the target repo's environment.
982
+ - Fixed `bin/kettle-jem-workflow-pins` so its synthetic workflow is valid YAML
983
+ and child command failures include stdout diagnostics.
984
+ - Fixed `bin/kettle-jem-workflow-pins` so sub-action updates reported under the
985
+ parent action repository, such as `github/codeql-action`, update the full
986
+ pinned action path instead of being silently counted as zero updates.
987
+ - Fixed `bin/kettle-jem-workflow-pins` to default to the same broad upgrade
988
+ strategy used by family workflow pin maintenance, so minor action releases
989
+ such as `ruby/setup-ruby` are not missed by template pin refreshes.
990
+ - README compatibility badge pruning now compares Ruby minor series so patch
991
+ floors like `>= 1.8.7` and `>= 2.2.2` keep their matching minor badges.
992
+ - Gemspec template summary and description tokens now strip an already-present
993
+ project emoji and escape double quotes before rendering inside Ruby strings.
994
+ - Templates now remove `version_gem` dependencies and entrypoint references for
995
+ gems whose minimum Ruby is below 2.2 while keeping the standard
996
+ `<Namespace>::Version::VERSION` constant shape.
997
+ - Curated Bundler binstub pruning now keeps any executable owned by the curated
998
+ binstub gems, so newly added executables such as `kettle-bump` are retained
999
+ without hardcoding every executable name.
1000
+ - Gem templates now require `appraisal2` >= 3.1.2.
1001
+ - Gemspec merging now lets explicit `KJ_AUTHOR_EMAIL` and `KJ_AUTHOR_NAME`
1002
+ environment overrides replace destination `spec.email` and `spec.authors`
1003
+ metadata instead of preserving stale project fields over resolved template
1004
+ tokens.
1005
+ - Explicit `rubygems.min_ruby: "0"` template configuration now renders the
1006
+ zero runtime floor consistently while omitting `required_ruby_version` and
1007
+ runtime dependencies that cannot support Ruby 1.x.
1008
+ - Generated Ruby 4/head extracted-stdlib Gemfiles now include `cgi` and
1009
+ `webrick` so legacy suites that require extracted standard libraries can run
1010
+ on modern Rubies.
1011
+ - `kettle-jem install` now ensures curated Bundler binstubs are executable,
1012
+ including legacy `bin/rake` and rewritten `bin/yard` binstubs used by
1013
+ `kettle-changelog`.
1014
+ - Generated `LICENSE.md` copyright notice lines now render as a Markdown list.
1015
+ - Appraisals templating now treats `eval_gemfile "path"` and
1016
+ `eval_gemfile("path")` as the same dependency when merging same-named
1017
+ appraisal blocks.
1018
+ - Generated freeze-marker guidance now consistently names `kettle-jem` as the
1019
+ templating tool instead of substituting the destination gem name.
1020
+ - Templating now prunes legacy dashed Ruby workflow filenames such as
1021
+ `ruby-2-4.yml` when replacing them with dotted packaged workflow filenames.
1022
+ - Gemspec freeze-block preservation now honors configured custom
1023
+ `defaults.freeze_token` values.
1024
+ - RuboCop config templating now removes destination `AllCops.TargetRubyVersion`
1025
+ settings so Ruby target selection remains owned by the `rubocop-lts` family.
1026
+ - Coverage workflow templating now preserves `K_SOUP_COV_MIN_LINE` and
1027
+ `K_SOUP_COV_MIN_BRANCH` from `mise.toml`, keeping the generated SimpleCov
1028
+ hard gate aligned with the project's configured thresholds.
1029
+ - Framework CI workflow templating no longer emits duplicate matrix environment
1030
+ keys when generated matrix entries are visited through overlapping YAML nodes.
1031
+ - Gemspec templating no longer preserves stale `kettle-soup-cover` development
1032
+ dependencies now that coverage dependencies are owned by the modular coverage
1033
+ Gemfile.
1034
+ - Workflow action pin normalization now keeps `pozil/auto-assign-issue` on the
1035
+ pinned v4 ref.
1036
+ - Workflow templating no longer rewrites coverage summary thresholds back to
1037
+ literal numbers after applying destination-specific coverage env values.
1038
+ - Generated coverage workflows now keep Codecov upload failures non-gating, so
1039
+ generated coverage reports remain the authoritative CI gate.
1040
+ - Generated style workflows now run `rbs validate` through the appraisal bundle
1041
+ instead of the project `bin/rbs` wrapper.
1042
+ - Workflow templating now normalizes obsolete Appraisal-relative `kettle-test`
1043
+ commands to the canonical project-root `kettle-test` command.
1044
+ - Local override Gemfile and gemspec templates no longer emit RuboCop-Gradual
1045
+ regressions from trailing commas or unnecessary encoding comments.
1046
+ - README logo templating now preserves generated Synopsis H2 logo HTML during
1047
+ README heading normalization, migrates legacy combined `top_logos` config into
1048
+ `top_logos` plus `h2_synopsis_logos`, and removes unused old logo link
1049
+ definitions.
1050
+ - Ruby template merges now preserve template-only require/bootstrap nodes and
1051
+ place them at their template anchor instead of deleting them after merge.
1052
+ - Ruby template merges now preserve coverage bootstrap ordering when the
1053
+ package name and entrypoint require path differ, avoiding duplicate or
1054
+ pre-coverage library requires in generated spec helpers.
1055
+ - Generated style Gemfiles now include released `rubocop-lts-rspec` in the
1056
+ non-local RuboCop-LTS bundle instead of requiring `rubocop-rspec` directly.
1057
+ - Fixed generated documentation URLs for standalone gems so template-owned
1058
+ citation and documentation links do not retain monorepo `gems/` paths.
1059
+ - Monorepo-root templating now applies without a root gemspec, detects root
1060
+ license files ahead of stale config values, installs the generated Rakefile
1061
+ task plumbing, and syncs root Gemfile tooling dependencies without duplicating
1062
+ local nomono declarations.
1063
+ - Generated `gemfiles/modular/x_std_libs.gemfile` now selects the extracted
1064
+ stdlib dependency set from the active Ruby version, so dependency solvers
1065
+ running on Ruby 3.1 do not receive Ruby 4-only stdlib requirements.
1066
+ - README merging now preserves a destination front `## Important`/warning
1067
+ section before Synopsis when that section encloses the badge cloud.
1068
+ - Same-named destination gemspecs loaded from different project directories no
1069
+ longer bleed metadata into one another during templating.
1070
+ - `kettle-jem install` now strips inherited Bundler activation variables before
1071
+ running destination setup commands, so generated `bin/setup` can run
1072
+ `bundle install` even when the destination lockfile references gems that are
1073
+ not installed yet.
1074
+ - Generated `bin/yard` now routes through `bin/rake yard` so documentation
1075
+ plugins installed by the templated rake task, such as yard-timekeeper, run
1076
+ consistently.
1077
+ - GemSpec template merging now keeps the greater version requirement between
1078
+ template-managed dependencies and destination dependencies, allowing newer
1079
+ destination constraints to remain while still upgrading stale template-owned
1080
+ floors.
1081
+ - Generated evergreen JRuby workflows now mark the current JRuby and
1082
+ `dep-heads` JRuby jobs experimental, so JRuby 10/arjdbc incompatibilities
1083
+ remain visible without blocking release CI.
1084
+ - Same-named Appraisal blocks now merge destination-only `gem` and
1085
+ `eval_gemfile` entries into the templated block, so framework/appraisal tools
1086
+ can enrich standard `ruby-X-Y` appraisals without losing template updates.
1087
+ - Standard test Appraisal blocks now include configured
1088
+ `appraisal_matrix.appraisal_gemfiles`, allowing kettle-jem-appraisals to
1089
+ model required framework dependencies without duplicating the simple
1090
+ framework matrix.
1091
+ - Standard Appraisal gemfile injection now skips blocks already enriched by a
1092
+ collapsed framework/appraisal matrix dependency gemfile, avoiding duplicate
1093
+ broad and version-pinned framework dependency declarations.
1094
+ - Standard Appraisal gemfile injection now distinguishes ordinary modular
1095
+ support gemfiles from framework matrix fragments, so coverage and dependency
1096
+ test appraisals still receive required framework dependencies.
1097
+ - TOML recipe merging now loads the concrete TOML backend provider with
1098
+ kettle-jem, so `.toml` template merges have a registered parser in ordinary
1099
+ bundle contexts.
1100
+ - The generated `.kettle-jem.yml` keeps `Appraisal.root.gemfile`
1101
+ template-owned so stale root-appraisal content is replaced cleanly.
1102
+ - Simple `workflows.framework_matrix` version entries can now target an
1103
+ existing appraisal with `appraisal`, `appraisal_name`, or
1104
+ `standard_appraisal`, allowing explicit collapse onto standard appraisals.
1105
+ - Collapsed `workflows.framework_matrix` appraisals now preserve configured
1106
+ per-version environment variables, can skip framework workflow generation,
1107
+ respect `keep_destination` framework gemfiles, and remove replaced standalone
1108
+ framework appraisal blocks.
1109
+ - Collapsed framework matrix environment variables now render into generated
1110
+ GitHub workflow matrices instead of mutating `ENV` from `Appraisals`, so each
1111
+ appraisal run receives its own framework version without definition-order
1112
+ leakage.
1113
+ - README merge preservation now keeps configured destination-only sections
1114
+ instead of dropping them when the packaged README template has no matching
1115
+ heading.
1116
+ - Added `KETTLE_JEM_SKIP_LOCK_NORMALIZATION` for self-templating unreleased
1117
+ gems whose dependencies cannot yet resolve from remote sources.
1118
+ - Added a native `Kettle::Jem::GemSpecReader` for gemspec metadata so tooling
1119
+ built on `kettle-jem` no longer needs to call into `kettle-dev` for project
1120
+ Ruby floors and gemspec facts.
1121
+ - Kept malformed destination gemspecs from leaving template tokens unresolved
1122
+ by falling back to filename-derived gem identity inside `GemSpecReader`.
1123
+ - Fixed generated appraisal `eval_gemfile` paths so Appraisal2 resolves
1124
+ modular gemfiles relative to `gemfiles/` instead of `gemfiles/gemfiles/`.
1125
+ - Fixed generated Appraisals content so it does not end with an extra blank line.
1126
+ - Fixed generated version-gem Ruby and RBS files so whole-file template tokens
1127
+ do not add an extra blank line at EOF.
1128
+ - Generated Rakefiles now install a `kettle:jem:selftest` fallback when the
1129
+ installed `kettle-jem` package lacks rake task support.
1130
+ - Generated Rakefile merging now normalizes section spacing so template-added
1131
+ task blocks do not introduce RuboCop `Layout/EmptyLines` offenses.
1132
+ - Fixed generated framework workflow YAML indentation so `framework:` remains
1133
+ under `strategy.matrix`.
1134
+ - Removed duplicate generated `spec.homepage` assignments when destination
1135
+ gemspecs already carry the configured homepage.
1136
+ - `kettle-jem install --hook-templates l` now activates the generated
1137
+ project-local `.git-hooks` by setting `core.hooksPath` to `.git-hooks` and
1138
+ ensuring the generated hook scripts are executable.
1139
+ - Removed stale `continue-on-error` handling from the generated style workflow
1140
+ so RuboCop Gradual failures are enforced by default.
1141
+ - Removed stale `continue-on-error` handling from the generated current workflow.
1142
+ - Marked generated workflow files as template-owned by default to prevent stale
1143
+ YAML keys from surviving future template runs.
1144
+ - Replaced generated Appraisal workflow matrix Gemfile indirection with a
1145
+ fixed `Appraisal.root.gemfile` job environment so Appraisal never falls back
1146
+ to the root development `Gemfile`.
1147
+ - Changed packaged GitHub workflow templates to whole-file replacement so stale
1148
+ job steps from older matrix formats cannot accumulate beside new steps.
1149
+ - Preserved destination coverage thresholds when replacing generated coverage
1150
+ workflows.
1151
+ - Preserved the current gem in local modular gemfile workspace arrays when the
1152
+ generated local dependency wiring needs to include it.
1153
+ - Excluded the current gem from generated `eval_nomono_gems` calls so local
1154
+ workspace lists do not conflict with the root `gemspec` dependency.
1155
+ - Excluded already-declared gemspec dependencies from generated local
1156
+ `eval_nomono_gems` calls so local modular gemfiles do not conflict with
1157
+ development dependencies declared by the project gemspec.
1158
+ - Changed post-template lockfile normalization to run `bundle update` with
1159
+ templating and local sibling overrides disabled, so dependency template
1160
+ updates are fully re-resolved against released gems.
1161
+ - `kettle-jem install --accept-config` now immediately applies the newly
1162
+ bootstrapped canonical config before running bundle setup and bundled handoff,
1163
+ so first-time templating installs generate the Gemfile templating wiring that
1164
+ makes `bundle exec kettle-jem` available.
1165
+ - First-time config bootstrap now seeds `project_emoji` from the destination
1166
+ gemspec summary or description when the README does not expose a leading H1
1167
+ emoji.
1168
+ - Generated `mise.toml` files now preserve existing coverage thresholds from
1169
+ the destination `mise.toml` or legacy coverage workflow, so local
1170
+ `kettle-test` runs keep the project's established coverage floor.
1171
+ - Added curated `rbs` and `rspec-core` binstubs because generated CI templates
1172
+ call `bin/rbs` and `bin/rspec` directly through appraisals.
1173
+ - Generated optional Gemfiles now include `rbs` and `stone_checksums`,
1174
+ matching the curated binstubs generated during `kettle-jem install`.
1175
+ - Updated the generated coverage bundle to require `kettle-soup-cover` 2.0.0 or newer.
1176
+ - Removed the generated CodeQL workflow so templated repositories can rely on
1177
+ GitHub CodeQL default setup instead of failing from duplicate advanced setup.
1178
+ - Generated workflow pruning now treats TruffleRuby 23.1 as Ruby 3.1
1179
+ compatible, matching README compatibility pruning and removing that stale
1180
+ workflow from Ruby 3.2+ projects.
1181
+ - Generated JRuby 9.3 workflows now use RubyGems 3.4.22 and Bundler 2.4.22,
1182
+ matching Ruby 2.6 compatibility workflows and avoiding default-gem activation
1183
+ conflicts during Appraisal setup.
1184
+ - Monorepo-root template bootstrap now falls back to package-derived namespace
1185
+ and entrypoint tokens when no gemspec-backed RubyGems config is present.
1186
+ - Updated the generated documentation bundle to require `yard-fence` 0.9.1 or newer.
1187
+ - Removed `--plugin timekeeper` from generated `.yardopts` because
1188
+ yard-timekeeper is installed through the rake `yard` task hook.
1189
+ - Escaped generated README metadata table cells so multiline gemspec
1190
+ descriptions render with `<br>` instead of breaking table rows.
1191
+ - Fixed gemspec emoji normalization so multiline quoted summaries and
1192
+ descriptions remain valid Ruby after templating.
1193
+ - Fixed version-gem bootstrap so an explicit `rubygems.namespace` in
1194
+ `.kettle-jem.yml` wins over stale inferred entrypoint namespaces.
1195
+ - Updated the generated contributing guide to refresh the `REEK` backlog with
1196
+ `bin/rake reek:update` instead of redirecting the raw `reek` executable.
1197
+ - Replaced `bundle binstubs --all` during template install with curated
1198
+ binstubs for documented project entrypoints, and prune stale Bundler-generated
1199
+ development-tool binstubs such as `bin/reek`.
1200
+ - Added `kettle-test` to the curated generated binstub set, and preserve
1201
+ `kettle-drift` binstubs when they already exist from local/plugin installs
1202
+ without requiring unreleased `kettle-drift` in every generated gemspec.
1203
+ - Added `kettle-drift` to generated templating Gemfiles, resolved remotely in
1204
+ templating mode and via `KETTLE_DEV_DEV` locally, separate from the
1205
+ `STRUCTUREDMERGE_DEV` StructuredMerge local gem set.
1206
+ - Refreshed generated README metadata blocks after template README merging so
1207
+ version-derived gemspec metadata such as `source_code_uri` does not stay stale.
1208
+ - Added `yard-yaml` to generated local documentation Gemfiles so local
1209
+ `GALTZO_FLOSS_DEV` runs match the released documentation plugin set.
1210
+ - Updated the generated development dependency on `kettle-test` to require
1211
+ 2.0.1 or newer.
1212
+ - Updated the generated development dependency on `kettle-dev` to require
1213
+ 2.0.5 or newer.
1214
+ - Monorepo-root bootstrap now keeps existing changelogs instead of replacing
1215
+ release history with a blank generated template.
1216
+ - Monorepo-root Rakefiles no longer lose existing RSpec/default tasks during
1217
+ scaffold cleanup before plugin task injection runs.
1218
+ - StructuredMerge family templating now runs child gem updates under the
1219
+ kettle-jem bundle so child directories without a Gemfile do not inherit the
1220
+ workspace root bundle.
1221
+ - StructuredMerge family templating now uses a gitmoji-prefixed default commit
1222
+ message so scripted commits satisfy the local commit hook.
1223
+ - Generated framework CI now uses an explicit framework matrix axis instead
1224
+ of GitHub Actions `include` expansion.
1225
+ - Scrubbed parent Bundler activation variables before the post-template
1226
+ lockfile normalization command runs in the destination project.
1227
+ - Preserved multiline heredoc gemspec assignments as whole fields during
1228
+ gemspec template merging.
1229
+ - Generated two-segment framework requirements as patch-bounded pessimistic
1230
+ constraints, e.g. `~> 7.0.0`, so framework appraisals do not drift to
1231
+ later minor versions.
1232
+ - Removed generated gemspec development dependencies when the destination
1233
+ already declares the same gem as a runtime dependency.
1234
+ - Preserved zero-byte generated template outputs such as `REEK` instead of
1235
+ normalizing them to a single blank line.
1236
+ - Added `workflows.recording` to `.kettle-jem.yml` so generated Appraisals only
1237
+ include VCR/WebMock recording gemfiles for projects that opt in.
1238
+ - Applied configured `rubygems.min_ruby` to generated gemspec
1239
+ `required_ruby_version` instead of preserving a stale destination value.
1240
+ - Preserved heredoc gemspec descriptions when applying project emoji
1241
+ normalization so templating does not corrupt valid `<<~` assignments.
1242
+ - Generated local templating Gemfiles now wire `tree_sitter_language_pack` from
1243
+ the sibling StructuredMerge checkout when iterating on unreleased
1244
+ `kettle-jem`, avoiding broken released native gem materialization.
1245
+ - Generated `spec/spec_helper.rb` now starts `kettle-soup-cover`/SimpleCov
1246
+ before loading the library so `kettle-test` produces the canonical
1247
+ `coverage/coverage.json` consumed by `kettle-changelog`.
1248
+ - VersionGem-managed `version.rb` and `version.rbs` packaged template targets
1249
+ now default to whole-file replacement, preventing legacy version constants
1250
+ from being merged into the generated shape.
1251
+
1252
+ - kettle-jem-template-20260726-002 - Generated version files now document their
1253
+ version namespace and constants, reducing warning-only YARD lint output.
1254
+
1255
+ - kettle-jem-template-20260726-003 - Coverage upload steps now treat Coveralls,
1256
+ QLTY, and Codecov as optional, so provider outages do not fail CI when local
1257
+ coverage thresholds still pass.
1258
+ - kettle-jem-template-20260728-003 - Generated dep-heads workflows now run
1259
+ TruffleRuby jobs with current RubyGems and Bundler, avoiding setup failures
1260
+ before the test suite starts.
1261
+ - kettle-jem-template-20260728-004 - Generated dep-heads workflows now use the
1262
+ setup-ruby Bundler install path for direct appraisal Gemfiles, avoiding rv
1263
+ lockfile parser failures on Git and path dependencies.
1264
+ - kettle-jem-template-20260728-005 - VersionGem bootstrap now creates the
1265
+ missing canonical version spec when a project only has shim namespace version
1266
+ specs.
1267
+
1268
+ - kettle-jem-template-20260730-001 - Gemspec package file enumeration now runs
1269
+ relative to the gemspec directory, so packaged template assets are included
1270
+ even when the gemspec is loaded from another working directory.
1271
+
1272
+ - kettle-jem-template-20260801-002 - Generated RSpec helpers now normalize
1273
+ managed configuration block bindings structurally, preventing mixed block
1274
+ parameter names from producing invalid configuration after a merge.
1275
+ - kettle-jem-template-20260801-003 - Generated project metadata and
1276
+ documentation now normalize configured underscore hostnames to valid
1277
+ hyphenated hostnames.
1278
+ - kettle-jem-template-20260801-004 - Generated organization README logos now
1279
+ use GitHub's stable organization avatar endpoint instead of assuming a
1280
+ matching Galtzo-hosted asset exists.
1281
+
1282
+ - Repair stale executable version headers when a configured entrypoint differs from the package name.
1283
+
1284
+ - Generated README titles now lead with the package name when a gem retains a different legacy namespace.
1285
+
1286
+ - Generated gitignore files now ignore nested modular Gemfile lockfiles.
1287
+
1288
+ - Preserve destination README KLOC badges when current changelog coverage metadata is unavailable.
1289
+
1290
+ - Allow local Gemfile bootstraps to reuse an already activated compatible nomono version instead of pinning an older lockfile version.
1291
+
1292
+ - Remove legacy rubocop-rspec development dependencies that conflict with generated rubocop-lts-rspec tooling.
1293
+
1294
+ - Recover legacy lockfiles with unsupported tree_sitter_language_pack platforms during templating bootstrap.
1295
+
1296
+ - Remove legacy yard-junk development dependencies that conflict with generated documentation tooling.
1297
+
1298
+ - Gemfile accept-template strategy now replaces an existing dependency source instead of retaining it.
1299
+
1300
+ - Transfer changelog filters now remove inapplicable template-owned entries from released and Unreleased sections.
1301
+
1302
+ - Preserve generated version requires before executable entrypoint code when later requires exist.
1303
+
1304
+ - Merge devcontainer JSON files as JSONC so comments and trailing commas are supported.
1305
+
1306
+ - Keep parser-backed and stateful template recipes out of parallel planning workers.
1307
+
1308
+ - Preserve destination-specific SimpleCov filters and formatters when migrating legacy SimpleCov.start configuration blocks.
1309
+
1310
+ - Remove legacy standard-library declarations from Appraisals blocks managed by modular x_std_libs gemfiles.
1311
+
1312
+ - Recreate missing managed modular Gemfiles instead of treating empty checksum records as cache hits.
1313
+
1314
+ - Recognize legacy Dir.chdir-wrapped git ls-files gemspec package manifests during templating.
1315
+
1316
+ - Replace stale byebug-family spec helper requires with debug during templating.
1317
+
1318
+ - Migrate byebug-family dependencies to debug independently within each appraisal.
1319
+
1320
+ - Remove preserved duplicate gemspec dependency declarations after template merge.
1321
+
1322
+ - Template policy fingerprints now invalidate cached Appraisal, gemspec, and spec helper transforms when their merge behavior changes.
1323
+
1324
+ - Modular Gemfile fragments now retain their named runtime dependency when materializing missing files.
1325
+
1326
+ - kettle-jem-template-20260802-001 - Devcontainer JSON files now merge as JSONC,
1327
+ preserving comments and trailing commas during template updates.
1328
+
1329
+ - Fail templating when direct project dependencies collide with templated modular Gemfiles unless an exact decision is recorded in kettle-jem configuration.
1330
+
1331
+ - Preserve explicit Bundler checksum validation settings during template setup.
1332
+
1333
+ - Prevent local modular Gemfiles from evaluating the destination gem as a sibling path dependency.
1334
+
1335
+ - Avoid pinning local nomono bootstraps to unavailable versions from stale lockfiles.
1336
+
1337
+ - Clarify modular dependency conflict decisions and reject incompatible keep_both requirements.
1338
+
1339
+ - Repair legacy local Gemfile nomono bootstraps before the templating dependency bundle starts.
1340
+
1341
+ - Run legacy local Gemfile bootstrap repair after managed template application so stale nomono pins cannot reach Bundler.
1342
+
1343
+ - Remove direct rdoc development dependencies from templated gemspecs; Yard owns documentation dependencies.
1344
+
1345
+ - Remove explicit rdoc development dependency declarations from documentation modular Gemfiles.
1346
+
1347
+ - Generate engine-specific dependency lockfiles for JRuby CI workflows
1348
+
1349
+ - Generate JRuby dependency lockfiles directly instead of requiring ignored appraisal lockfiles
1350
+
1351
+ - Refresh kettle-family with nomono in the templating workflow.
1352
+
1353
+ - Guard generated debug requires for Ruby versions below the debug gem support floor.
1354
+
1355
+ - Bootstrap VersionGem wiring in existing package-level shims instead of nested implementation files.
1356
+
1357
+ - Infer direct VERSION namespaces and remove stale VersionGem wiring from former nested implementation entrypoints.
1358
+
1359
+ - Allow legacy appraisal projects to opt into a compatible Bundler via KJ_BUNDLER_VERSION.
1360
+
1361
+ - Normalize stale VersionGem class extensions when repairing an existing package shim.
1362
+
1363
+ - Remove legacy VersionGem extensions from nested implementation files during package-shim repair.
1364
+
1365
+ - Preserve local modular Gemfile bodies during template finalization.
1366
+
1367
+ - Avoid duplicate version requires when a package shim delegates version loading to its implementation.
1368
+
1369
+ - Version specs now load inline version-gem package entrypoints before exercising the VersionGem API.
1370
+
1371
+ - Version specs now require the discovered Ruby entrypoint for hyphenated package names.
1372
+
1373
+ - Version bootstrap repairs remove stale package-name requires when the discovered Ruby entrypoint uses a different require path.
1374
+
1375
+ - Version specs for packages with nested version entrypoints now load the package shim when it owns the version bootstrap.
1376
+
1377
+ - Use the canonical version file when deriving a gem namespace during templating.
1378
+
1379
+ - Invalidate version namespace template checksums after renderer policy changes so corrected bootstrap output can repair prior template damage.
1380
+
1381
+ - Reconcile malformed version namespaces against destination class declarations during templating.
1382
+
1383
+ - Preserve class-based version namespaces during template bootstrap.
1384
+
1385
+ - Preserve modular Gemfile content while filtering direct dependency conflicts.
1386
+
1387
+ - Keep policy-preserving modular Gemfile rewrites during lint autocorrection.
1388
+
1389
+ - Preserve explicit class namespace superclasses when generating VersionGem version files.
1390
+
1391
+ - Preserve tracked project-owned Bundler binstubs during template bootstrap.
1392
+
1393
+ - Preserve existing Version module includes when templating version files.
1394
+
1395
+ - Generated workflows now pin the setup-ruby-flash revision that supports compatibility-bundle retries.
1396
+
1397
+ - Debug requires generated by templating now remain opt-in and disabled in CI
1398
+
1399
+ - Define the Discord badge reference in generated CONTRIBUTING.md files.
1400
+
1401
+ - Restore legacy LICENSE.txt and workflow cleanup during templating, and treat falsey TSLP_DEV values as unset.
1402
+
1403
+ - Migrate MIT LICENSE.txt copyright notices safely and preserve custom license files with an unlabelled LICENSE.md link.
1404
+
1405
+ - Keep git-blame copyright facts authoritative when migrating legacy MIT LICENSE.txt files.
1406
+
1407
+ - Monorepo subgem mise templates no longer enforce aggregate coverage thresholds during per-gem release checks.
1408
+
1409
+ - Exclude the intentional vHEAD.gemfile appraisal filename from templated RuboCop filename checks.
1410
+
1411
+ - Include the canonical Rakefile scaffold in monorepo subgem templates.
1412
+
1413
+ - Resolve all local StructuredMerge sibling dependencies in isolated require-boundary tests.
1414
+
1415
+ ## [7.0.0] - 2026-05-05
1416
+
1417
+ - TAG: [v7.0.0][7.0.0t]
1418
+
1419
+ ### Added
1420
+
1421
+ - Released kettle-jem as part of the initial StructuredMerge Ruby 7.0.0 gem set.
1422
+ - Included packaged templates and parser-backed merge support for Ruby gem templating.
1423
+
1424
+ [Unreleased]: https://github.com/structuredmerge/structuredmerge-ruby/compare/v7.1.1...HEAD
1425
+ [7.1.1]: https://github.com/structuredmerge/structuredmerge-ruby/compare/v7.0.0...v7.1.1
1426
+ [7.1.1t]: https://github.com/structuredmerge/structuredmerge-ruby/releases/tag/v7.1.1
1427
+ [7.0.0]: https://github.com/structuredmerge/structuredmerge-ruby/compare/0aae485e7ca20583b73f8c146f467a64e526ca41...v7.0.0
1428
+ [7.0.0t]: https://github.com/structuredmerge/structuredmerge-ruby/releases/tag/v7.0.0