diff --git a/.kettle-family.yml b/.kettle-family.yml index 0710807e9..415c6f7ad 100644 --- a/.kettle-family.yml +++ b/.kettle-family.yml @@ -1,9 +1,43 @@ --- family: name: structuredmerge-ruby + mode: monorepo + local_path_env: STRUCTUREDMERGE_DEV members_root: gems members: + roots: + - gems/tree_haver + - gems/ast-merge + - gems/ast-crispr + - gems/ast-crispr-ruby-prism + - gems/ast-crispr-markdown-markly + - gems/ast-merge-git + - gems/plain-merge + - gems/bash-merge + - gems/dotenv-merge + - gems/rbs-merge + - gems/html-merge + - gems/json-merge + - gems/yaml-merge + - gems/toml-merge + - gems/markdown-merge + - gems/ruby-merge + - gems/go-merge + - gems/rust-merge + - gems/typescript-merge + - gems/ast-template + - gems/binary-merge + - gems/zip-merge + - gems/psych-merge + - gems/citrus-toml-merge + - gems/parslet-toml-merge + - gems/commonmarker-merge + - gems/kramdown-merge + - gems/markly-merge + - gems/prism-merge + - gems/smorg-rb + - gems/kettle-jem exclude: - "**/benchmarks/**" order: @@ -115,6 +149,8 @@ install: release: build_command: bundle exec rake build publish_command: bundle exec kettle-release + disable_local_path_env: + - TSLP_DEV env: GALTZO_FLOSS_DEV: false KETTLE_DEV_DEV: false diff --git a/CHANGELOG.md b/CHANGELOG.md index 551dc1fbd..37acd64e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,16 @@ Please file a bug if you notice a violation of semantic versioning. - `ast-crispr` now provides `Ast::Crispr::DeleteBatch` for deleting matches from multiple structural selectors through one parsed document context. +- `zip-merge` now registers a Kaitai-backed `TreeHaver.parser_for(:zip)` path + for ZIP inventory analysis. +- `plain-merge` now registers `TreeHaver.parser_for(:text)` and + `TreeHaver.parser_for(:plain)` line-backed parser paths for normalized text + block analysis. +- `dotenv-merge` now registers `TreeHaver.parser_for(:dotenv)` and + `TreeHaver.parser_for(:env)` line-backed parser paths built on the + `plain-merge` line substrate. +- `zip-merge` now depends on `binary-merge` for shared Kaitai/binary-family + report and diagnostic construction. - Added `html-merge` as a StructuredMerge Ruby family member with TreeHaver HTML parsing, feature profile reporting, and an initial ast-crispr-backed HTML structural edit adapter. @@ -33,6 +43,16 @@ Please file a bug if you notice a violation of semantic versioning. ### Changed +- Documented the StructuredMerge Ruby merge-gem family model, including + substrate/provider behavior sharing and the requirement that partial document + insertion, replacement, and removal flow through `ast-crispr` instead of + parser-specific object round-trips. +- Clarified that `zip-merge` is a Kaitai-family binary AST integration and + should not be categorized with byte or line oriented merge gems. +- Clarified that `binary-merge` is the Kaitai/binary-family substrate for + concrete schema parser gems such as `zip-merge`. +- The `smorg-rb` executable now supports `-v` / `--version` and prints a + standard startup header on normal runs. - `kettle-jem` now migrates existing SimpleCov bootstrap files for packaged monorepo subgems even when the selected template profile does not otherwise manage per-gem harness files. @@ -50,6 +70,8 @@ Please file a bug if you notice a violation of semantic versioning. - `kettle-jem` main Gemfile templating now removes repeated direct sibling execution blocks left behind by older `nomono` bootstrap output while applying the simplified `require "nomono/bundler"` loader. +- `html-merge` now follows the shared root changelog used by the other + monorepo `*-merge` gems instead of carrying a member-local changelog. - `smorg-rb` diff-driver output now appends a unified review hunk with exact removed and added source text after the semantic structured-diff summary. - Retemplated generated project metadata, support documentation, CI workflows, @@ -102,6 +124,15 @@ Please file a bug if you notice a violation of semantic versioning. ### Fixed +- `prism-merge` now preserves template-owned trailing comment lines attached to + matched Ruby statements, including comments adjacent to generated `require` + calls during template merges. +- `kettle-jem` local Gemfile templating now removes obsolete nomono activation + ceremony from existing destination files while retaining the simple + `require "nomono/bundler"` loader. +- `kettle-jem` bootstrap commits can now be serialized by monorepo family + templating, preventing concurrent member template jobs from racing while + updating the shared `HEAD`. - TreeHaver now smoke-tests `tree_sitter_language_pack` parser execution for the requested language before registering the TSLP backend, so broken native gem artifacts fail closed with a useful reason instead of surfacing parser @@ -139,6 +170,8 @@ Please file a bug if you notice a violation of semantic versioning. integrations in the current process. - Ast-merge changed-gem CI no longer times out or fails when exercising isolated fixture integrations that require Prism-backed Ruby merging. +- TreeHaver's Prism parser backend no longer depends on the removed upstream + `Prism.available?` API, allowing Prism 1.9+ to parse during templating. - Changed-gem CI suites now pass in isolated gem bundles by loading required adapter gems explicitly, avoiding Ruby 4 `Pathname#find` assumptions, and keeping Prism merge tests on the local TreeHaver capability registry. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1c039b23f..2c7517f2f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -112,6 +112,58 @@ Git diff driver setup K_JEM_TEMPLATING=true kettle-jem install ``` +## Merge gem architecture + +Merge gems are parser-backed, but merge behavior must not call parser libraries +directly. Parsing enters through `tree_haver`; structural edits enter through +`ast-crispr`; common merge orchestration enters through `ast-merge`. + +Language and format families have a substrate gem that owns shared merge +behavior for that family. A substrate gem may also register the tree-sitter +grammar interface for the same format. Provider gems register an alternate AST +backend and delegate family behavior back to the substrate gem. + +Do not infer backend registration from the behavior role. A substrate often does +register a TSLP/tree-sitter grammar, and may still share behavior with provider +gems that register native or Ruby parser backends. + +Examples: + +- `markdown-merge` registers the tree-sitter Markdown path and owns shared + Markdown merge behavior. `commonmarker-merge`, `kramdown-merge`, and + `markly-merge` provide backend-specific AST integrations and share that + Markdown behavior. +- `yaml-merge` is the YAML substrate. It registers the tree-sitter YAML path and + should own shared YAML merge behavior, including key-path partial merge + semantics. `psych-merge` provides the Psych-backed YAML AST integration and + should share those YAML behaviors. +- `ruby-merge` registers the tree-sitter Ruby path and owns shared Ruby merge + behavior. `prism-merge` provides the Prism-backed Ruby AST integration. +- `toml-merge` registers the tree-sitter TOML path and owns shared TOML merge + behavior. `citrus-toml-merge` and `parslet-toml-merge` provide alternate TOML + parser integrations. +- `rbs-merge` intentionally registers both the official RBS parser backend and + the tree-sitter RBS grammar in one gem. +- `zip-merge` is a Kaitai-family binary AST integration. It registers and + consumes a `parser_for(:zip)` Kaitai path so ZIP analysis enters through the + normalized TreeHaver API, and depends on `binary-merge` for shared + binary-family report and renderer-planning behavior. +- `binary-merge` is the Kaitai/binary substrate. It hosts common byte-range, + preservation, unsafe-diagnostic, render-policy, and nested-dispatch vocabulary + for concrete schema parser gems such as `zip-merge`. +- `plain-merge` is the line/text substrate. It registers `:text` and `:plain` + parser paths through the `:line` backend. +- `dotenv-merge` builds dotenv assignment and comment ownership on top of the + plain line substrate, and registers `:dotenv` and `:env` parser paths through + the same `:line` backend family. + +Partial document insertion, replacement, and removal are `ast-crispr` work. +`PartialTemplateMerger` should normalize the API used by merge gems and route +those operations through structural owners and source-preserving edit plans. Do +not implement partial merges by converting documents to native Ruby objects and +serializing them back out; that bypasses owner identity, comments, layout, and +backend diagnostics. + Troubleshooting Git diffs - Use `git diff --no-ext-diff` to compare against Git's built-in diff output. - Use `git diff --no-textconv` when a textconv projection obscures the raw file bytes you need to inspect. diff --git a/Gemfile b/Gemfile index 0fc912c07..182ffa717 100644 --- a/Gemfile +++ b/Gemfile @@ -73,7 +73,7 @@ gem "bundler-audit", "~> 0.9.3" if kettle_dev_dev.casecmp("false").zero? gem "kettle-dev", "~> 2.2", ">= 2.2.25" - gem "kettle-family", ">= 1.0.4" + gem "kettle-family", ">= 1.1.9" gem "kettle-test", "~> 2.0", ">= 2.0.11" end diff --git a/Gemfile.lock b/Gemfile.lock index a2d4cfaff..d9a38e1fa 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -3,6 +3,7 @@ PATH specs: ast-crispr-markdown-markly (7.1.0) ast-crispr (= 7.1.0) + markdown-merge (= 7.1.0) markly-merge (= 7.1.0) version_gem (~> 1.1, >= 1.1.9) @@ -82,6 +83,7 @@ PATH specs: dotenv-merge (7.1.0) ast-merge (= 7.1.0) + plain-merge (= 7.1.0) tree_haver (= 7.1.0) version_gem (~> 1.1, >= 1.1.14) @@ -115,10 +117,13 @@ PATH dotenv-merge (= 7.1.0) json-merge (= 7.1.0) kettle-dev (~> 2.3, >= 2.3.5) + kettle-gha-pins (~> 0.3, >= 0.3.1) + kettle-ndjson (~> 0.1, >= 0.1.1) kettle-rb (~> 0.1, >= 0.1.4) kramdown-merge (= 7.1.0) markdown-merge (= 7.1.0) markly-merge (= 7.1.0) + parslet (~> 2.0) prism-merge (= 7.1.0) psych-merge (= 7.1.0) rbs (>= 3.10) @@ -263,6 +268,7 @@ PATH remote: gems/zip-merge specs: zip-merge (7.1.0) + binary-merge (= 7.1.0) tree_haver (= 7.1.0) version_gem (~> 1.1, >= 1.1.9) @@ -271,6 +277,8 @@ GEM specs: addressable (2.9.0) public_suffix (>= 2.0.2, < 8.0) + anonymous_loader (0.1.3) + version_gem (~> 1.1, >= 1.1.14) appraisal2 (3.2.0) bundler (>= 1.17.3) rake (>= 10) @@ -297,24 +305,34 @@ GEM docopt_ng (0.7.1) emoji_regex (15.0.0) erb (6.0.6) - gitmoji-regex (2.0.4) - version_gem (~> 1.1, >= 1.1.13) + gitmoji-regex (2.0.6) + version_gem (~> 1.1, >= 1.1.14) io-console (0.8.2) - kettle-dev (2.3.9) + kettle-dev (2.4.5) emoji_regex (>= 15.0) + kettle-gha-pins (~> 0.3, >= 0.3.1) + kettle-ndjson (~> 0.1, >= 0.1.1) kettle-rb (~> 0.1, >= 0.1.2) - kettle-test (~> 2.0, >= 2.0.4) + kettle-test (~> 2.0, >= 2.0.12) ruby-progressbar (~> 1.13) - kettle-drift (1.0.6) + tty-progressbar (~> 0.18) + kettle-drift (1.0.7) version_gem (~> 1.1, >= 1.1.14) - kettle-family (1.0.4) + kettle-family (1.1.9) command_kit (~> 0.6) command_kit-completion (~> 0.1) - kettle-dev (~> 2.3, >= 2.3.4) - kettle-test (~> 2.0, >= 2.0.10) + kettle-dev (~> 2.3, >= 2.3.10) + kettle-test (~> 2.0, >= 2.0.14) tsort (~> 0.2) + tty-progressbar (~> 0.18) + kettle-gha-pins (0.3.1) + ruby-progressbar (~> 1.13) + tty-progressbar (~> 0.18) + version_gem (~> 1.1, >= 1.1.14) + kettle-ndjson (0.1.1) + version_gem (~> 1.1, >= 1.1.14) kettle-rb (0.1.5) - kettle-test (2.0.12) + kettle-test (2.0.15) appraisal2 (~> 3.0, >= 3.0.6) backports (~> 3.0) rspec (~> 3.0) @@ -367,7 +385,7 @@ GEM rspec-core (~> 3.0) ruby_engine (~> 2.0) ruby_version (~> 1.0) - rspec-stubbed_env (1.0.6) + rspec-stubbed_env (1.0.8) rspec-support (3.13.7) rspec_junit_formatter (0.6.0) rspec-core (>= 2, < 4, != 2.12.0) @@ -379,9 +397,9 @@ GEM silent_stream (1.0.12) logger (~> 1.2) version_gem (>= 1.1.8, < 3) - sorbet-runtime (0.6.13351) - stone_checksums (1.0.6) - version_gem (~> 1.1, >= 1.1.13) + sorbet-runtime (0.6.13363) + stone_checksums (1.0.7) + strings-ansi (0.2.0) thor (1.5.0) timecop (0.9.11) timecop-rspec (1.0.3) @@ -399,10 +417,18 @@ GEM tree_sitter_language_pack (1.13.3-x86_64-linux) sorbet-runtime (~> 0.5) tsort (0.2.0) - turbo_tests2 (3.2.0) + tty-cursor (0.7.1) + tty-progressbar (0.18.3) + strings-ansi (~> 0.2) + tty-cursor (~> 0.7) + tty-screen (~> 0.8) + unicode-display_width (>= 1.6, < 3.0) + tty-screen (0.8.2) + turbo_tests2 (3.2.2) parallel_tests (>= 3.3.0, < 6) rspec (>= 3.10) version_gem (~> 1.1, >= 1.1.14) + unicode-display_width (2.6.0) version_gem (1.1.14) zeitwerk (2.8.2) @@ -411,6 +437,7 @@ PLATFORMS x86_64-linux-musl DEPENDENCIES + anonymous_loader (~> 0.1, >= 0.1.3) appraisal2 (~> 3.1, ~> 3.0, >= 3.1.1, >= 3.0.6) ast-crispr! ast-crispr-markdown-markly! @@ -429,7 +456,7 @@ DEPENDENCIES json-merge! kettle-dev (~> 2.2, ~> 2.0, >= 2.2.25) kettle-drift (~> 1.0, >= 1.0.5) - kettle-family (>= 1.0.4) + kettle-family (>= 1.1.9) kettle-jem! kettle-test (~> 2.0, >= 2.0.9, >= 2.0.11) kramdown-merge! @@ -454,13 +481,14 @@ DEPENDENCIES toml-rb (~> 4.1) tree_haver! tree_sitter_language_pack (~> 1.13, >= 1.13.3) - turbo_tests2 (~> 3.2, ~> 3.1, >= 3.2.0, >= 3.1.14) + turbo_tests2 (~> 3.2, ~> 3.1, >= 3.2.2, >= 3.1.14) typescript-merge! yaml-merge! zip-merge! CHECKSUMS addressable (2.9.0) sha256=7fdf6ac3660f7f4e867a0838be3f6cf722ace541dd97767fa42bc6cfa980c7af + anonymous_loader (0.1.3) sha256=084a18e2439144d955447dc11dfc982f41fcd1583ad32d4d55151325dc44cb55 appraisal2 (3.2.0) sha256=ccd0b767ac4060cd7af6d16747459b6990f49c39c7b4fb1f7d1146b1e97c492f ast-crispr (7.1.0) ast-crispr-markdown-markly (7.1.0) @@ -489,16 +517,18 @@ CHECKSUMS dotenv-merge (7.1.0) emoji_regex (15.0.0) sha256=a508b2c0bee561169564e0aec96085020c900520d335e5533fd8e78e59493829 erb (6.0.6) sha256=a9b24986700f5bf127c4f297c5403c3ca41b83b0a316c0cd09a096b56e644ae5 - gitmoji-regex (2.0.4) sha256=01410d3217940bd0e7b2299ec805245afe8d0f06a5d6d38f623d63a63c0ac34f + gitmoji-regex (2.0.6) sha256=d50649caccc8ad1b080f01e869f0909b135206d8b3ece2313ca31a9b0e39f14b go-merge (7.1.0) io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc json-merge (7.1.0) - kettle-dev (2.3.9) sha256=03b2f72c6dda4d2c4401ee3c0c96853116c922766e7b5b04224434a49b571bfc - kettle-drift (1.0.6) sha256=46eda08fa4411d1f3c6682a95eef1c9df4e94611b3949f49d4c7b43c0ed356a3 - kettle-family (1.0.4) sha256=bd6d111e997ae07f531c553f86dfd3c8f31eb37d4b3eefaef65655f7d6bc6c51 + kettle-dev (2.4.5) sha256=3a451940796a671b7adc910db7c3da87899ebec7c5274921ca598345549ae7eb + kettle-drift (1.0.7) sha256=878117280782e89b6eec111ca3f5b31f7b2b9da3d96041c399a607173d1c3a5c + kettle-family (1.1.9) sha256=672df4a5b6b8e722ace533ecb546660011852e3a858a5ebc2d482db769cb7bc7 + kettle-gha-pins (0.3.1) sha256=b13a82a403af31880288fe65f85f2a24a93ae4740c0c7cbc15a35044d27aaa51 kettle-jem (7.1.0) + kettle-ndjson (0.1.1) sha256=2d84314e8c911d6f560f2736e8f72019df6d811829674788ff33b3bbf518ed66 kettle-rb (0.1.5) sha256=0322a569860c86e70f90d5ebe72353b8720b7054c7efa9f9044857f5c972d29f - kettle-test (2.0.12) sha256=3a8e5c5f38db03a6f0a8896da6f3576d24e36f53796578c19aafaa2ba5a8ea52 + kettle-test (2.0.15) sha256=993b132ffec17fe82cc81c69f876e15d6eb610a4831df08dc01c0cce5c070caa kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa kramdown-merge (7.1.0) logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203 @@ -528,7 +558,7 @@ CHECKSUMS rspec-expectations (3.13.5) sha256=33a4d3a1d95060aea4c94e9f237030a8f9eae5615e9bd85718fe3a09e4b58836 rspec-mocks (3.13.8) sha256=086ad3d3d17533f4237643de0b5c42f04b66348c28bf6b9c2d3f4a3b01af1d47 rspec-pending_for (0.1.21) sha256=c87fda50c20f8faca72d9cfa6a936abffd37860343f14aced95bbb29b8ae96bf - rspec-stubbed_env (1.0.6) sha256=6467a6eb0f72146d443ffb0c5a2a549d8812e59c04fbc81e03cd914ebf1f28dc + rspec-stubbed_env (1.0.8) sha256=b23c4dd5e5d6a0cf0c5b4f6ed3f3678d78e4be9ec247ea9abf0669d20b490535 rspec-support (3.13.7) sha256=0640e5570872aafefd79867901deeeeb40b0c9875a36b983d85f54fb7381c47c rspec_junit_formatter (0.6.0) sha256=40dde674e6ae4e6cc0ff560da25497677e34fefd2338cc467a8972f602b62b15 ruby-merge (7.1.0) @@ -539,8 +569,9 @@ CHECKSUMS service_actor (3.9.4) sha256=e63b523630b9a7e62959b2a90113b08d2565b5de9c148557b281ef847c9539ce silent_stream (1.0.12) sha256=377c43aa10033fe90c33b39ea8cd97d79f2d1c4856df598efc56f3091f3ae782 smorg-rb (7.1.0) - sorbet-runtime (0.6.13351) sha256=f8fee17c6e3edf835dc6823d26afb9a7c8969c6710d1fabe2fb43f4e0c15c64f - stone_checksums (1.0.6) sha256=c775f830513d6c6ab26e31d1a5fbecd4c4e39002663d4d9f8fa96e97990b5298 + sorbet-runtime (0.6.13363) sha256=f1f0b2e946fb3cd76b9d8e3d85459cdaf7f5466331a400cafcf008e508b6d2c3 + stone_checksums (1.0.7) sha256=faf7a175da7c4f32777c5292a0128b06eec183b3cc3a0b382529b21800300626 + strings-ansi (0.2.0) sha256=90262d760ea4a94cc2ae8d58205277a343409c288cbe7c29416b1826bd511c88 thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73 timecop (0.9.11) sha256=41284dc6e5041f2184f781ace766f942108c842f8d8c1386a26e6343decc7542 timecop-rspec (1.0.3) sha256=005f14841bb606dcaefb060e321b5388e2e59537742bee8b3a9a9a40e598fab9 @@ -551,8 +582,12 @@ CHECKSUMS tree_haver (7.1.0) tree_sitter_language_pack (1.13.3-x86_64-linux) sha256=1ffd045bd236ea54f58c5872ee66121d01033359c1f28f375b7fd4a4b5620cf9 tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f - turbo_tests2 (3.2.0) sha256=8b35421548399d1923567b177970f42671c65695b93cdd134d78fbcbab85dff0 + tty-cursor (0.7.1) sha256=79534185e6a777888d88628b14b6a1fdf5154a603f285f80b1753e1908e0bf48 + tty-progressbar (0.18.3) sha256=6cbb4260e55e74a9180d502143eb6a467d2c8e51bf5f3c9509fb5cacc3d4a5f6 + tty-screen (0.8.2) sha256=c090652115beae764336c28802d633f204fb84da93c6a968aa5d8e319e819b50 + turbo_tests2 (3.2.2) sha256=8d2a04c9fa9525246549f1e498a55123ea48e72d80f48e4cbdff8e3d31d96bc1 typescript-merge (7.1.0) + unicode-display_width (2.6.0) sha256=12279874bba6d5e4d2728cef814b19197dbb10d7a7837a869bab65da943b7f5a version_gem (1.1.14) sha256=6b7306c7e9416d06067561981ab3444e2cecb844f26cc325ae3c27b44cf85613 yaml-merge (7.1.0) zeitwerk (2.8.2) sha256=7212a61311083c604184b1ea2574b9aa05cd14f855a0841c06985cabe9181d12 diff --git a/README.md b/README.md index c4a6f16dd..42f78d51a 100644 --- a/README.md +++ b/README.md @@ -67,11 +67,11 @@ The family is intentionally layered: | Gem | Family | What it provides | | --- | --- | --- | -| [`plain-merge`][ruby-plain-merge] | Text | Plain-text fallback contracts and conflict-preserving merge behavior. | +| [`plain-merge`][ruby-plain-merge] | Text | Line-backed TreeHaver parser registration, plain-text fallback contracts, and conflict-preserving merge behavior. | | [`json-merge`][ruby-json-merge] | JSON and JSONC | Object/array-aware JSON merge behavior using the shared StructuredMerge merge substrate and [tree-sitter JSON][ts-json] grammar coverage where the selected backend supplies it. | | [`yaml-merge`][ruby-yaml-merge] | YAML | YAML-family merge contracts, shared provider tags, and provider-neutral behavior. | | [`toml-merge`][ruby-toml-merge] | TOML | TOML-family merge contracts and provider-neutral behavior. | -| [`dotenv-merge`][ruby-dotenv-merge] | dotenv | Environment-file merge behavior for key/value configuration files. | +| [`dotenv-merge`][ruby-dotenv-merge] | dotenv | Dotenv line parser registration and key/value configuration merge behavior built on the plain text substrate. | | [`markdown-merge`][ruby-markdown-merge] | Markdown | Markdown-family merge contracts, heading/table/list matching, link-reference handling, fenced-code flow, and provider-neutral behavior. | | [`ruby-merge`][ruby-ruby-merge] | Ruby source | Ruby source merge contracts and parser-backed source-language behavior. | | [`rbs-merge`][ruby-rbs-merge] | RBS | Ruby signature merge behavior, declaration matching, and template-owned signature updates using [RBS][rbs] and tree-sitter RBS grammar coverage where available. | @@ -79,8 +79,8 @@ The family is intentionally layered: | [`go-merge`][ruby-go-merge] | Go source | Go source merge contracts for the cross-language StructuredMerge family. | | [`rust-merge`][ruby-rust-merge] | Rust source | Rust source merge contracts for the cross-language StructuredMerge family. | | [`typescript-merge`][ruby-typescript-merge] | TypeScript source | TypeScript source merge contracts for the cross-language StructuredMerge family. | -| [`binary-merge`][ruby-binary-merge] | Binary | Binary tree planning contracts, byte-range ownership, diagnostics, and [Kaitai Struct][kaitai] oriented structured binary support. | -| [`zip-merge`][ruby-zip-merge] | Archives | ZIP archive planning helpers, archive member ownership, and archive-aware merge contracts. | +| [`binary-merge`][ruby-binary-merge] | Binary | Kaitai/binary-family substrate for byte-range ownership, preservation reports, unsafe diagnostics, and renderer planning. | +| [`zip-merge`][ruby-zip-merge] | Archives | ZIP parser registration and archive-aware merge contracts built on the binary-family substrate. | ### Provider Gems @@ -119,7 +119,7 @@ tags are capability names, not package preferences. | [RBS][rbs] | `rbs-merge` | Ruby signature parser path. | | [CommonMarker][commonmarker], [Markly][markly], [Kramdown][kramdown] | `markdown-merge` providers | Markdown parser families with different CommonMark/GFM/Ruby-native tradeoffs. | | [Citrus][citrus], [Parslet][parslet] | `toml-merge` providers | Pure-Ruby TOML parser families exposed as provider-specific TreeHaver backend paths. | -| [Kaitai Struct][kaitai] | `binary-merge` | Schema-oriented binary parsing support for structured binary work. | +| [Kaitai Struct][kaitai] | `binary-merge`, `zip-merge` | Schema-oriented binary parsing support and shared binary-family merge behavior. | #### Backend Platform Compatibility diff --git a/gems/ast-crispr-markdown-markly/.rubocop_gradual.lock b/gems/ast-crispr-markdown-markly/.rubocop_gradual.lock index 5624f80ed..d5a5e5635 100644 --- a/gems/ast-crispr-markdown-markly/.rubocop_gradual.lock +++ b/gems/ast-crispr-markdown-markly/.rubocop_gradual.lock @@ -8,11 +8,11 @@ [163, 121, 22, "Layout/LineLength: Line is too long. [142/120]", 1367093088], [166, 121, 18, "Layout/LineLength: Line is too long. [138/120]", 3881946477] ], - "ast-crispr-markdown-markly.gemspec:1188642188": [ - [128, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 2821357214], - [143, 121, 50, "Layout/LineLength: Line is too long. [170/120]", 3888612416], - [144, 121, 29, "Layout/LineLength: Line is too long. [149/120]", 981994949], - [151, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 4229808912] + "ast-crispr-markdown-markly.gemspec:804513899": [ + [129, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 2821357214], + [144, 121, 50, "Layout/LineLength: Line is too long. [170/120]", 3888612416], + [145, 121, 29, "Layout/LineLength: Line is too long. [149/120]", 981994949], + [152, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 4229808912] ], "gemfiles/modular/benchmark/r4/v0.5.gemfile:3644720371": [ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542] @@ -96,31 +96,33 @@ "lib/ast-crispr-markdown-markly.rb:374208510": [ [1, 1, 0, "Naming/FileName: The name of this source file (`ast-crispr-markdown-markly.rb`) should use snake_case.", 5381] ], - "lib/ast/crispr/markdown/markly.rb:1124197915": [ + "lib/ast/crispr/markdown/markly.rb:4076592844": [ [11, 7, 13, "Style/Documentation: Missing top-level documentation comment for `module Ast::Crispr::Markdown::Markly`.", 95841343], [14, 9, 13, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::Markdown::Markly::Adapter`.", 2579377404], - [23, 11, 695, "Metrics/MethodLength: Method has too many lines. [15/10]", 2384506812], - [49, 13, 87, "Style/RaiseArgs: Provide an exception class and message as arguments to `raise`.", 1878059440], - [52, 11, 1781, "Metrics/MethodLength: Method has too many lines. [39/10]", 2020253431], - [95, 9, 16, "Style/Documentation: Missing top-level documentation comment for `module Ast::Crispr::Markdown::Markly::Selectors`.", 2133324825], - [95, 9, 8840, "Metrics/ModuleLength: Module has too many lines. [186/100]", 1134016796], - [98, 11, 1452, "Metrics/AbcSize: Assignment Branch Condition size for `heading_section` is too high. [<2, 21, 7> 22.23/17]", 1578141243], - [98, 11, 1452, "Metrics/MethodLength: Method has too many lines. [30/10]", 1578141243], - [98, 30, 73, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 515735878], - [132, 11, 1397, "Metrics/AbcSize: Assignment Branch Condition size for `link_definition` is too high. [<2, 22, 8> 23.49/17]", 2035221200], - [132, 11, 1397, "Metrics/MethodLength: Method has too many lines. [29/10]", 2035221200], - [132, 30, 68, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 2927391196], - [165, 11, 1236, "Metrics/MethodLength: Method has too many lines. [27/10]", 2705412671], - [196, 11, 1632, "Metrics/AbcSize: Assignment Branch Condition size for `inline_reference` is too high. [<2, 25, 7> 26.04/17]", 2822954343], - [196, 11, 1632, "Metrics/MethodLength: Method has too many lines. [32/10]", 2822954343], - [196, 31, 79, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 871966347], - [232, 11, 3009, "Metrics/AbcSize: Assignment Branch Condition size for `html_comment_block` is too high. [<14, 43, 23> 50.73/17]", 1757586727], - [232, 11, 3009, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `html_comment_block` is too high. [18/7]", 1757586727], - [232, 11, 3009, "Metrics/MethodLength: Method has too many lines. [56/10]", 1757586727], - [232, 11, 3009, "Metrics/PerceivedComplexity: Perceived complexity for `html_comment_block` is too high. [18/8]", 1757586727], - [232, 33, 148, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [8/5]", 4247948333], - [244, 23, 2311, "Metrics/BlockLength: Block has too many lines. [43/25]", 3166751632], - [249, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 236074548] + [23, 11, 764, "Metrics/MethodLength: Method has too many lines. [17/10]", 1473258177], + [51, 13, 87, "Style/RaiseArgs: Provide an exception class and message as arguments to `raise`.", 1878059440], + [54, 11, 2084, "Metrics/MethodLength: Method has too many lines. [46/10]", 116781866], + [104, 9, 16, "Style/Documentation: Missing top-level documentation comment for `module Ast::Crispr::Markdown::Markly::Selectors`.", 2133324825], + [104, 9, 10193, "Metrics/ModuleLength: Module has too many lines. [217/100]", 289669313], + [107, 11, 1452, "Metrics/AbcSize: Assignment Branch Condition size for `heading_section` is too high. [<2, 21, 7> 22.23/17]", 1578141243], + [107, 11, 1452, "Metrics/MethodLength: Method has too many lines. [30/10]", 1578141243], + [107, 30, 73, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 515735878], + [141, 11, 1397, "Metrics/AbcSize: Assignment Branch Condition size for `link_definition` is too high. [<2, 22, 8> 23.49/17]", 2035221200], + [141, 11, 1397, "Metrics/MethodLength: Method has too many lines. [29/10]", 2035221200], + [141, 30, 68, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 2927391196], + [174, 11, 1236, "Metrics/MethodLength: Method has too many lines. [27/10]", 2705412671], + [205, 11, 1341, "Metrics/AbcSize: Assignment Branch Condition size for `list_item` is too high. [<2, 22, 4> 22.45/17]", 9692259], + [205, 11, 1341, "Metrics/MethodLength: Method has too many lines. [29/10]", 9692259], + [238, 11, 1632, "Metrics/AbcSize: Assignment Branch Condition size for `inline_reference` is too high. [<2, 25, 7> 26.04/17]", 2822954343], + [238, 11, 1632, "Metrics/MethodLength: Method has too many lines. [32/10]", 2822954343], + [238, 31, 79, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 871966347], + [274, 11, 3009, "Metrics/AbcSize: Assignment Branch Condition size for `html_comment_block` is too high. [<14, 43, 23> 50.73/17]", 1757586727], + [274, 11, 3009, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `html_comment_block` is too high. [18/7]", 1757586727], + [274, 11, 3009, "Metrics/MethodLength: Method has too many lines. [56/10]", 1757586727], + [274, 11, 3009, "Metrics/PerceivedComplexity: Perceived complexity for `html_comment_block` is too high. [18/8]", 1757586727], + [274, 33, 148, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [8/5]", 4247948333], + [286, 23, 2311, "Metrics/BlockLength: Block has too many lines. [43/25]", 3166751632], + [291, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 236074548] ], "spec/ast/crispr/markdown/markly_spec.rb:479377118": [ [3, 1, 13025, "Metrics/BlockLength: Block has too many lines. [238/25]", 467937705], diff --git a/gems/ast-crispr-markdown-markly/.structuredmerge/kettle-jem.lock b/gems/ast-crispr-markdown-markly/.structuredmerge/kettle-jem.lock new file mode 100644 index 000000000..f391f7597 --- /dev/null +++ b/gems/ast-crispr-markdown-markly/.structuredmerge/kettle-jem.lock @@ -0,0 +1,527 @@ +--- +version: 1 +template_state: + version: 7.1.0 + applied_at: '2026-07-26' + changelog_replay: + last_entry_key: kettle-jem-template-20260726-002 + last_entry_date: '2026-07-26' + checksums: + ".aiignore.example": 48a5dfdd93afd1a15fdce39cc28ca9920263f00018b0968ab031fa744521e5ce + ".config/mise/env.sh": aeea5a2ab489ba6e5467ae8de6e386ec8c8fe4ff31a044e69d0cd6a092dd6654 + ".devcontainer/apt-install/devcontainer-feature.json.example": 273a07f9d3926e1b6287c37709a469ee05d724cfedae62ad3b0cd8c09befc9ec + ".devcontainer/apt-install/install.sh.example": b61e020b60ca172bb7b658e63c9cd4342e49bda0531a6b19b36475e515ad20b0 + ".devcontainer/devcontainer.json.example": 4a80d471379b9720cc65cc89543cbbc0a7be87b188a818160296577c4e87606f + ".devcontainer/scripts/setup-tree-sitter.sh.example": c34f48d7bac8561fb780c4c7a81cec5004c3ac0edc11f229799ec9a4e3eccd54 + ".env.local.example": 35cb867e8bacb75252a85c29f78899b36d0d1843511ae1ba1fbc7da863b128b3 + ".envrc.example": b7232f4bae0fb399cc9c9cdc4a5eb694bd69623aeeadcbab18c9990e443040a1 + ".envrc.no-osc.example": b7232f4bae0fb399cc9c9cdc4a5eb694bd69623aeeadcbab18c9990e443040a1 + ".gemrc.example": 77b1c36ae6f91bedf08b99e662a971b02f7e66e0d65267805d068d30ff118aba + ".git-hooks/commit-msg.example": d858575bf70d6175fdd7656e9ba0b41672de3fb49163181efe3fbc9e40306024 + ".git-hooks/commit-subjects-goalie.txt.example": bb1179c8911af8afeb1f9a604b3de789d4a4b33d9d4a7743b3145998c15b0a94 + ".git-hooks/footer-template.erb.txt.example": 70ed3616ee04a4062126f53892cc255e7aa2b66741fe22d6b372f7df99676718 + ".git-hooks/prepare-commit-msg.example": 35266ead46a6385d20eeff7ec64afedef33a2db18d1238b8662a1bc758f05335 + ".github/.codecov.yml.example": d6ef3208a90eca74f79d8ff4e5ae21a915562b075cb17978b1eaadc231dd4e85 + ".github/FUNDING.yml.example": fd27dff7db58f4e8a39c35ccb60e39422517038501a5f2a99ef2aaeea2d1fa5d + ".github/FUNDING.yml.no-osc.example": 8f1a867b1921b3dec1c63f7a7cd629362c1fb1ad0d1052494b48ba746b0fc5c6 + ".github/copilot_instructions.md.example": f5c5791df013e89e170fd436379b14e251d0ff4cb6b330a6d961e80c9071f2d3 + ".github/dependabot.yml.example": db84d1c13f64100d2f48212c022f0d985e9061ca76c36d82e7057fd845ecd528 + ".github/workflows/auto-assign.yml.example": 57b8159a15bf49946506e1b624934feed6a1cc8f71ad68968323c87acac56c67 + ".github/workflows/coverage.yml.example": 524ef90e0fd2ca0b846c464197d8d43cd6a57834303c9526ea0bd277f2beb3e1 + ".github/workflows/current.yml.example": dbc82e7593804c05d2c217d5c02d79d5480b5a0d1e04eea99b7235f35f520216 + ".github/workflows/dep-heads.yml.example": d94122f3246e17774fa015dde8d9a5772a66e54f817d44e62716f6a61d899050 + ".github/workflows/dependency-review.yml.example": a895d52257a7112d796fabf349ced1079bed93e81e3aa9cb088f9af3f44d1e5f + ".github/workflows/discord-notifier.yml.example": f9cc83a87058bd420426444510a1dd1520fd7cc15af50832ad52c25c5766be94 + ".github/workflows/framework-ci.yml.example": 112ef6178fcf115fe9e0a248ec6cb4af748ce89142fd7dba30e9abb6ebdc17be + ".github/workflows/heads.yml.example": aa55cf9bb4ae35fe126384003e8af4b91e685bcf370263b3710bd429f6c44343 + ".github/workflows/jruby-10.0.yml.example": 0eaf6d10c304de606684d420bbd88cfc90fe9d139a56773e011c6abaa6c5fc91 + ".github/workflows/jruby-9.1.yml.example": 9062f9de8843da1f8c4da8f991bbd24f9540c63927deaf311649f3088a672d5b + ".github/workflows/jruby-9.2.yml.example": f330363fc0af7dd0be24c140c919c07737a3168c5647012e34ba0c36634005e5 + ".github/workflows/jruby-9.3.yml.example": 3b26b3a978d0018f01e6d87651936f2e92fcb58d62bcdf11822eca3c2656d303 + ".github/workflows/jruby-9.4.yml.example": a830b92838a09b9316a81745b48ff35bed9461783154fc6d0e52df0d6aa319f3 + ".github/workflows/jruby.yml.example": f10f779cd3be37d2ffa593d9a83ba68a8684bb849ed1c4d9ae41706ff12571e1 + ".github/workflows/license-eye.yml.example": 23db5d6ee9b5382de1f2042642219d65214e09c3f975c418d4dec4d46375036c + ".github/workflows/locked_deps.yml.example": c7eaa20cc7d7de6209e576274e592ffb4838177ae6ab56096b2439d0fa1bc31c + ".github/workflows/opencollective.yml.example": fe7d8d346f9ab055b6779abf62972291460d05275e2c4d191e291e8cd73b0e6b + ".github/workflows/ruby-2.3.yml.example": 90474f1a462edc877983b91dd40d942e82b28262f1afdca74cddcdd52d7e8c26 + ".github/workflows/ruby-2.4.yml.example": fe84af4efef6934d7ff63efa2a4c85994f2ea1887f61b1ab5d30a21365429ec9 + ".github/workflows/ruby-2.5.yml.example": c40db157514168442311191ebc88853dfb36447a90171a73f42d435e92d02f05 + ".github/workflows/ruby-2.6.yml.example": 87bb8537d0047217651a327353df670fed3ea9e4a5350e965ed80af9ce32d9d3 + ".github/workflows/ruby-2.7.yml.example": 5650ec41bc67553457019a772a3343578872749d21268d5e7fb1715ebf4e2351 + ".github/workflows/ruby-3.0.yml.example": f9d7c7dfc6eaea1ca12c92e0b98b4ba8fed5726d26459bb410ab9812a741e5b9 + ".github/workflows/ruby-3.1.yml.example": e44879cd3ea47d00e44e573745d7f95fc1a561a9c1d69d72529d0c07294bd26e + ".github/workflows/ruby-3.2.yml.example": c28b9179778157e6b4807a775968840ff1c6bf2fd847ce1ce694b9a77df42f6e + ".github/workflows/ruby-3.3.yml.example": 033e4f0ed7ded17f5d13fde6674ec9fd555cfe58c11f57f7dc2f1fee21c718b6 + ".github/workflows/ruby-3.4.yml.example": 474a96468f101b8fddac4cecaa0629f28d5ceec0c784329affdc471eb1e3e889 + ".github/workflows/style.yml.example": dea7243a91dc164a172e90b7933de58cdd353d7e5df1beac22cec63125edc086 + ".github/workflows/templating.yml.example": 327b933509e1ade4d53df5756f6407028b479c51847775db494fb9c25e66ce5a + ".github/workflows/truffle.yml.example": 56fa53dc206976c81db7cc3530f4d19d89ea5859c1245492e5a5ecb9304de63e + ".github/workflows/truffleruby-22.3.yml.example": d6773529e6961039b5cc4a145c77623881aa3857d875bbb415ca0f8147166d7a + ".github/workflows/truffleruby-23.0.yml.example": abcd23a18d748528f7558d4ab7bc4830796cb686ca7371f67a8ddaf6d0362d72 + ".github/workflows/truffleruby-23.1.yml.example": 11af8a3f0823ed3ab17e759d81b8a4551eb7af8096ce0b5a9501fd83cada1cd2 + ".github/workflows/truffleruby-24.2.yml.example": 2c4ff82eeaa3bdb19391f04cd2f41b07733986a053d5ac8498176fef5f890e5e + ".github/workflows/truffleruby-25.0.yml.example": 42cdfdcd21c7b3bb1b87c22c2bc7a98135a442742df5f9a45e2b4e03838c1e7f + ".github/workflows/truffleruby-33.0.yml.example": 2a45e428ca13dac56ee75526b80eac477b61697ca06c94680e1eb05d21dbc25a + ".github/workflows/unlocked_deps.yml.example": 15f5ccbe811aa5a8650c2aa69b32f4f6a24d5f8bd3aae2dcbec92cbe3a51f0a7 + ".gitignore.example": 14864a0c88be3f8c122ab3032efeb782ba5e035013231038acf746a400437a3e + ".gitlab-ci.yml.example": ef64afa9855ebb59bbc87446fa9533238d3ce180966ceb19649a7f165715b92b + ".idea/.gitignore.example": b44a5aa16bf9fe5635558af347454b05a76d600084308a9f43d4d0b54789ecab + ".licenserc.yaml.example": 8787fa7bddce911f8ba47bda3eb6ad9786b6650d5d94786723e88773098ed37d + ".opencollective.yml.example": 9ad9b83fe54f0bddac7fb614575585d98f78df0e181ee70a7acd0168d26e3142 + ".qlty/qlty.toml.example": cf3d750d2328f6c057b08b7ce3d7ec00a4056c7f0eedda59af321d6caca03553 + ".rspec.example": 40d3f3ff435b0f9e5863772a95df8725b939c2dc11aead2bca68dcd6d85a9788 + ".rubocop.example": 591e4b45430e85b0dd460cc11c70650912fa2734988420b934109d06a749344f + ".rubocop.yml.example": 47f9a031022db67c964dd76ee2e8dfee21295a1877ca4d6233d3de39d114af73 + ".rubocop_rspec.yml.example": 288ad75e7eb14d87d80fafe6f7272217be5c57547536ee56c780a7d10ac7ec74 + ".simplecov.example": ffc76492effe905cc65797389fc8050fda136652ac078a80303cd084b349ef28 + ".structuredmerge/git-drivers.toml.example": 9d241a44c9edffcdbd3da018fa188a238089c3d1635040924df594a6929a4f97 + ".structuredmerge/kettle-jem.yml.example": 954cfc9e35cd20e46376426675e985bf8a0de19ff5069bf7be24b574837be615 + ".yard-lint.yml.example": 90def46867c9436b4e177c47d91fc8165f4602e335715aecc39f5587ae20b55b + ".yardignore.example": 821f453c609df7d46145d675424b39dfbe6dfdca8edac5f367b85fff48502455 + ".yardopts.example": 6fd6f2701713096a8a9ea095c213bbc68eeef37797c4754d97837e3229a3a5f6 + AGENTS.md.example: aec69512cbe17004660ac0abfabb9ec91a5c51c2cd82c10f30f08886f9bf64a7 + AGPL-3.0-only.md.example: d8a6cc31abc16b6748c7a21f21611f5a1ec33f67d22ca23d7da1c19b95496bee + Appraisal.root.gemfile.example: 8724e3f6faea995be655ac49369bec64a70710112b1f65707fa38f1fd2fd3254 + Appraisals.example: 9cb1abcfb1a0bd6d859ca0705efb874dbe546754c8c71f9f95025ff6817f1471 + Big-Time-Public-License.md.example: b0c02a112c9eee0ed69f05fd8f22277a2f8bc62d447b6cb75d6df560e05bf431 + CHANGELOG.md.example: 73459e50dad34d84db88844c993d975097557bdf5229e101b0d1339de6f98ffc + CHANGELOG.transfer.md: 9c201849117c9d4234724c4599643dd42fdce5f0a673a1abee97b97e556c301b + CITATION.cff.example: e404ea0a7919d78a83d53d80e211d17b9663576aa606583b709795dc023fd75c + CODE_OF_CONDUCT.md.example: f1ad532f1860f73ef774c6b27a26d41f4bc1cb8813034f5957487766ebb0986b + CONTRIBUTING.md.example: 63d339848c615f2c181d6b0565c42e56371eedb66f310d146cb7da297f7bc641 + FUNDING.md.example: 455bbb2b55d934283a2e7c16b59c321116c53310a85a718b7cf8ca44e9e3721e + FUNDING.md.no-osc.example: 05a85d5faf22d5ea5721622d242080447cf318d3277d9d529e438be1c9d5a351 + Gemfile.example: 6b2d72ec8a630cce515b7b528022071b13eee863c3164763df03792a5004345a + IRP.md.example: 85d8887d9b0e77f7fa9835ca5b9be31f586fdc94764ed1819af2a9a7fec98e96 + LICENSE.md.example: 120edf5f23173ebbdb5ad384ffc2e9b97e62aa6d0e61b733c003bd4db1b08276 + MIT.md.example: 365fce2a82f9d258ada9a527accfd5754b406ee9cdd8f8ed86bbec64b8c42ab2 + PolyForm-Noncommercial-1.0.0.md.example: ffcca38841adb694b6f380647e15f17c446a4d1656fed51a1e2041d064c94cc8 + PolyForm-Small-Business-1.0.0.md.example: 2f81e317d36f83a199c9fa10bcb250775fd90510303eaeb15aac2d8f0c1fc2d6 + README.md.example: 452446a44d120df26cde68fbc7aff086fa815769c989b994ebc1432ea927974f + REEK: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 + RUBOCOP.md.example: c09e5533ccc59b70a2efa05c99f66e521137c1053d3c12eb43509cebd5b68b0e + Rakefile.example: 569803e726b07ea26267fec6891367a3096a0dff3c266269a7081d36afe496af + SECURITY.md.example: ee9411aa85f36d88363fdaea7a1baea4362b6ec112cf2688e711b05de1d3144c + bin/setup.example: 0ac35089c95a91d8973fe7a318bf9fd98b9f8e00db92c5d9ca6cd858abb8d41b + certs/pboling.pem.example: 18956f60643666cc181e2743b3b3691bec08c5326f514f60af54d0cdb9ebc554 + gem.gemspec.example: 9989cc8a1cd125586ea807eaed549eaecc044711d31f17dd7bac2a0815b28b1a + gemfiles/modular/benchmark/r4/v0.5.gemfile.example: 5bc3190090ae456df1a8cce28dd47a7fb293495f6d845ec7e53a7a8b50f14ae1 + gemfiles/modular/benchmark/vHEAD.gemfile.example: ca6cd52c55c3082759c6ddc97638970f12d953aec1822470823d316086aa6e25 + gemfiles/modular/cgi/r4/v0.5.gemfile.example: c2d14a39377a2435419ceaca22a3421ebd899e9cba943df8a90b576a33624870 + gemfiles/modular/cgi/vHEAD.gemfile.example: 9ff3dc789b3279642876c0aad4b0094c1139bb8fbbf36daab804d3b2b3a60b43 + gemfiles/modular/coverage.gemfile.example: 915fc161ad574fdbc071bc733b69b27e94bd7a4c68cc4f58da267c9a0987f3e8 + gemfiles/modular/coverage_local.gemfile.example: 928d5f260d7b119c038baa56da9fb78dd524dee613aea33ab72894bbce5c506e + gemfiles/modular/debug.gemfile.example: 0a508bfb02e51b75394b43f4f09d98174dac36ead41cba09c1f730671a1f5905 + gemfiles/modular/documentation.gemfile.example: e15f51e4d14ad2216b6de16c323787945bd225073d70a78420f4c99c98c1ecd1 + gemfiles/modular/documentation_local.gemfile.example: 84a20f5d4b0feb94c2cf2f7a8dce8f682f1483498e41484c2b447a5661fd1870 + gemfiles/modular/erb/r2.3/default.gemfile.example: 9da0d08fb6a299b965c37fe85efcaebd9eb0a82b2ea35fdc157c41bd75431396 + gemfiles/modular/erb/r2.6/v2.2.gemfile.example: '01787cbdf7136c0d75cc7b734c6bb3d2ef6c70d6c1c50e7d0ad2112c0f8ef8e7' + gemfiles/modular/erb/r2/v3.0.gemfile.example: 3793e7dc9ef23a7ccd893d48cbba092fd27594c63e65cca011cc658218425670 + gemfiles/modular/erb/r3.1/v4.0.gemfile.example: bdf71ddcfe5001aab7d71b10a645a785928957ef7bae61d49307eb7f712279f3 + gemfiles/modular/erb/r3/v5.0.gemfile.example: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + gemfiles/modular/erb/r4/v5.0.gemfile.example: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + gemfiles/modular/erb/vHEAD.gemfile.example: ad6f104a49e80e0cf625440e3dc816343fe7e2f037fc4971df75e7bb4305c683 + gemfiles/modular/json/truffleruby_22_3.gemfile.example: 249c12eacbe90f9d0d2e81e7a62c4c7e9102e504ededcda4ecf660cb3bb68be4 + gemfiles/modular/json/truffleruby_23_0.gemfile.example: 66aa010567f7afa1af8244a74c3c88ecaaf84dc87b6a25180691bb480d02ed28 + gemfiles/modular/json/truffleruby_23_1.gemfile.example: '080fcbdaf2bec73cad40832a3d51eebb380af789917b96f493d1460b0dd6361d' + gemfiles/modular/mutex_m/r2.4/v0.1.gemfile.example: '09728bdc10807b3ca9dd3b9f12986acbe8c40ac08ada438bcfd49cd69445c650' + gemfiles/modular/mutex_m/r2/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/r3/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/r4/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/vHEAD.gemfile.example: '08018641c97f894788fa91b462da504ab2237213d18d95404136c393274ae3cb' + gemfiles/modular/optional.gemfile.example: b45eb8ecde2902441c02b2f01d4aa8f79bff75c853ef92555c3201ee798d9e87 + gemfiles/modular/recording/r2.3/recording.gemfile.example: 154da539583c51ca78ff8affa7a7caaf7f354d321b5e748beb64de61ff72f80a + gemfiles/modular/recording/r2.4/recording.gemfile.example: 6d69381eb2f8be681c72e7a5a8b5d6ec6ee586da8ce51b9b39d845d2a87e4ecf + gemfiles/modular/recording/r2.5/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/r3/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/r4/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/vHEAD.gemfile.example: 7480fd116e9671972a2735d1d97050a4fd5754aa7abfab3d115bf9bebbca038c + gemfiles/modular/rspec.gemfile.example: d043f5c9344f6435edb4607c5adaf42c78e7fb6b8b6726007de2bbedefb376c3 + gemfiles/modular/runtime_heads.gemfile.example: f163201999bf68a942b1e5bcea506bfc4b9c59711ff502091eb215d5d5f8f658 + gemfiles/modular/shunted.gemfile.example: a54a86124eff06163497462012704f62a691daa224cebeac605cdd14cffacfbe + gemfiles/modular/stringio/r2.4/v0.0.2.gemfile.example: 6425ebcd70b2e782f4c1d9074f8685c1e93ca7bf371728ef7ebbc8b5ebdf491a + gemfiles/modular/stringio/r2/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/r3/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/r4/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/vHEAD.gemfile.example: e0497ab6dad9667b22725485b781e9d99349a079250eb29cb125d58f01f4a5be + gemfiles/modular/style.gemfile.example: a15db732f566d958c2459ef549ae3877d984df3d205116e714284d1fe4f9b068 + gemfiles/modular/style_local.gemfile.example: '0083605323d23879dc7223f0198e9f1db24a25fa38730c4dbcc71c7a8a4c307f' + gemfiles/modular/templating.gemfile.example: 6cedc39529daa9aac3a4cf13fe31a628b62a4a2428f5c4f8657c5a2fa027bb35 + gemfiles/modular/templating_local.gemfile.example: 16c0b51fd46b86db09268c8485b1d5a528e5f962b593f8ae7521b15209f7d1a5 + gemfiles/modular/webrick/r4/v1.9.gemfile.example: 1ee940ff54d5ca3ce7fcff0d82ee9553386979656b9e220d5be5404d0991d5ea + gemfiles/modular/webrick/vHEAD.gemfile.example: da545f591af987648ffbaba181707480a38dfb375db7d289617986ec2c2ca23b + gemfiles/modular/x_std_libs.gemfile.example: e3917e90717d7f9f4393d847549a78c53de7f6c8de52a7f590b34b515fd6111a + gemfiles/modular/x_std_libs/r2.3/libs.gemfile.example: 379ac2a3698615789e39dc18a961b9c793b2cc594856bb3163524a99fd4ac86f + gemfiles/modular/x_std_libs/r2.4/libs.gemfile.example: ccad8f592943481317c082ce8d340316b9e90a52463c8c1eea5c5109b23e8c3d + gemfiles/modular/x_std_libs/r2.6/libs.gemfile.example: 9af20396f404a32bf76d8999c7fdd112f0282ba331f71100ab093663b2ab5670 + gemfiles/modular/x_std_libs/r2/libs.gemfile.example: e80ec8ad06cb1b31ac982bc25cf7696987fca131aa1001eaefd0bf5cd379c273 + gemfiles/modular/x_std_libs/r3.1/libs.gemfile.example: 38068bd6a0f5d02918eb286af9bdbdf0c7cf7cf026486b9fd157b541b6153d58 + gemfiles/modular/x_std_libs/r3/libs.gemfile.example: 546f8849f4267bb19aa10ff0de40be30957197f229e6887847181ea9127b2650 + gemfiles/modular/x_std_libs/r4/libs.gemfile.example: 8c2582eaa218d216b98c86c933465295c8b4e43f3251ea388b9eaf6e471f8da6 + gemfiles/modular/x_std_libs/vHEAD.gemfile.example: d3133ec4c0638363a7fb025d19be7e95a615fd61c35ddb8d17f2280ee74a7486 + lib/gem/version.rb.example: 15e219ac3a928b5580035f891e415551213175020f1131f6e7ca0ccd55a1b2d6 + mise.toml.example: b2eb06f7daaf0c3916bba155f463e166bd1de218637ba82e636c528c077c8d6d + mise.toml.no-osc.example: 35ec90d3c67b74e0014876dccad14f5883fdad88036f6b0cf5d29ea181e132ac + parsers.toml.example: f0538ae7ad8596be2dc39b3ea663f1164dec21fb0457233c1885097e774aff6f + readme/partials/basic_usage.md.example: adaa8f9de9768d1f29cb15d957404004715e7687db68c29b121d6467db13158a + readme/partials/configuration.md.example: 5ad82bc7eaf05015d31cea9265173718abc1d92729b52e3856c8366aa54184e8 + readme/partials/synopsis.md.example: 2b7383f8261086da0995fbf2c10017b3f162723b32c324ae8c0e1c1a8d1c79ef + shim/.github/workflows/current.yml.example: c2a2a2053f2726276bb8571c8a76a4b97bcce6cd54bdca01cba63d713c3a0e2f + shim/.rspec.example: 0e3a2a1587779efc3eae8fe718a3480272fbdfb3f1f6c2f9c3901f6fd81b2cce + shim/.structuredmerge/kettle-jem.yml.example: 03faae6cfda3947ef8489008b4836aad3ca280e94ddf9d08ef733071d7daa167 + shim/CHANGELOG.md.example: 2c098802b9971c51796e34067d061adbc31fa443df96be8a1fc71fc84c262d0e + shim/Gemfile.example: 9583b19e04d7ab6f5b3ea7ebb0c5d24e6a71ae5d74404a510aa979642248ba34 + shim/README.md.example: 3a2f7211b7f92a1dfae5e523b8e34b051a3d8af942144b05286eca0b3c8f6fbe + shim/Rakefile.example: 572c94da7052083b39b62a6600785419e314a109efd7a3d8c3a96eb77ad34fd1 + shim/gem.gemspec.example: cabca9717af1a18991db1de856900494e2771b044f1d5bfd2ad71b2ed4a1367d + shim/lib/compat_require.rb.example: 94ee85e353a3ca08c8a35c9063d4ff789214ea594c7f803f6cf09d7142f48379 + shim/lib/entrypoint.rb.example: dd57613520daca01d6f6bcaa9b83b00ff74505240dc04b84ceb686df3c0539d7 + shim/lib/version.rb.example: 15e219ac3a928b5580035f891e415551213175020f1131f6e7ca0ccd55a1b2d6 + shim/spec/shim_spec.rb.example: '060013019bf39b8dc267169df83752661d02c7ad890b65a99a1d97137938edfd' + shim/spec/spec_helper.rb.example: 88e2ab0bd8888022a68e856e04f61053e238e54f51b428b386aaebf93ae8ad83 + sig/gem.rbs.example: 47a4f7e524cc6f773875b6c08691ca4d65c2b14618abd5b9b91055ae5b248cec + spec/spec_helper.rb.example: 0c8119bd75b90f3a2403789b68b539fd19952370051297b1807596e201ef4813 +files: + ".simplecov": + recipe: template_source_application_simplecov + action: write + dest_sha256: 7db91bea91bd18ab8e7ab8b7108072d885451643c1102c28714ac8b1476766fa + input_fingerprint: 65059a4702ae7408dcfcaa861c419588f30ac0b50dc8a24019542b4e4addf113 + template_sources: + - ".simplecov.example" + AGPL-3.0-only.md: + recipe: template_source_application_AGPL_3_0_only_md + action: write + dest_sha256: d8a6cc31abc16b6748c7a21f21611f5a1ec33f67d22ca23d7da1c19b95496bee + input_fingerprint: b7928122c81dfc428564f4073c68c4d4f8dcc2579c05e61199d69f714a497848 + template_sources: + - AGPL-3.0-only.md.example + Gemfile: + recipe: template_source_application_Gemfile + action: write + dest_sha256: 423cbe2fe12e64c8e2ed6dce8757b7a80641d405e0c64df60aa30d2f05b998fe + input_fingerprint: 572ffd8cb9f82973e3f134cb02865ea834fffe7e15e2a28349a962f6b85779d4 + template_sources: + - Gemfile.example + LICENSE.md: + recipe: template_source_application_LICENSE_md + action: write + dest_sha256: f6188bfd474a636d2a526420ebb411250faa447d94c9b9ccee097128ce4101b5 + input_fingerprint: 9330128c061a5aa12f7c30bd4e995d311efc2dca0da717f4eccad3c6f6ecf9aa + template_sources: + - LICENSE.md.example + PolyForm-Small-Business-1.0.0.md: + recipe: template_source_application_PolyForm_Small_Business_1_0_0_md + action: write + dest_sha256: 2f81e317d36f83a199c9fa10bcb250775fd90510303eaeb15aac2d8f0c1fc2d6 + input_fingerprint: ce1af128d2d0609a44fe46d837f4d746fe678b7da1c48d78a08417889db5d06c + template_sources: + - PolyForm-Small-Business-1.0.0.md.example + README.md: + recipe: template_source_application_README_md + action: write + dest_sha256: ea46fa1ae838d5fd6ae66c711e7bb6e6dc1756d8a946dab07e94f1f247d7db0f + input_fingerprint: 13174d262085b9fcfaea0ed69431a102d43a1d2044b3c7c88c01a5767c84a84f + template_sources: + - README.md.example + ast-crispr-markdown-markly.gemspec: + recipe: template_source_application_ast_crispr_markdown_markly_gemspec + action: write + dest_sha256: e8e03f422849499cf1e00d5d8d7e81911a876764e6f91105387f50105fe27af5 + input_fingerprint: d30deb47248dc07b78ad08043a698d19ce3b9edb70b881e59897a33f81fdf204 + template_sources: + - gem.gemspec.example + certs/pboling.pem: + recipe: template_source_application_certs_pboling_pem + action: write + dest_sha256: 18956f60643666cc181e2743b3b3691bec08c5326f514f60af54d0cdb9ebc554 + input_fingerprint: '08875d960126d754ff7b7d06a7577113c4325d38012629f597eb599805671ab9' + template_sources: + - certs/pboling.pem.example + gemfiles/modular/benchmark/r4/v0.5.gemfile: + recipe: template_source_application_gemfiles_modular_benchmark_r4_v0_5_gemfile + action: write + dest_sha256: 5bc3190090ae456df1a8cce28dd47a7fb293495f6d845ec7e53a7a8b50f14ae1 + input_fingerprint: 1e4e018d66322c424a6853d3a9da5e52599c460a71e9812bdcb5f91f3df12ab1 + template_sources: + - gemfiles/modular/benchmark/r4/v0.5.gemfile.example + gemfiles/modular/benchmark/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_benchmark_vHEAD_gemfile + action: write + dest_sha256: ca6cd52c55c3082759c6ddc97638970f12d953aec1822470823d316086aa6e25 + input_fingerprint: 33a22c0ffaa36307e4e73cee75c8f2ae84eda1949cfe45c270700da78157d84f + template_sources: + - gemfiles/modular/benchmark/vHEAD.gemfile.example + gemfiles/modular/cgi/r4/v0.5.gemfile: + recipe: template_source_application_gemfiles_modular_cgi_r4_v0_5_gemfile + action: write + dest_sha256: c2d14a39377a2435419ceaca22a3421ebd899e9cba943df8a90b576a33624870 + input_fingerprint: 02f7f861e640e1f9ec394307979d824a1c42ebf86bf0fc69382a5bb43299fe36 + template_sources: + - gemfiles/modular/cgi/r4/v0.5.gemfile.example + gemfiles/modular/cgi/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_cgi_vHEAD_gemfile + action: write + dest_sha256: 9ff3dc789b3279642876c0aad4b0094c1139bb8fbbf36daab804d3b2b3a60b43 + input_fingerprint: 91b47ec18d81c6fcee00717158e80b6117da111a7d819cd5cdcfeaa23182f7ad + template_sources: + - gemfiles/modular/cgi/vHEAD.gemfile.example + gemfiles/modular/coverage.gemfile: + recipe: template_source_application_gemfiles_modular_coverage_gemfile + action: write + dest_sha256: 915fc161ad574fdbc071bc733b69b27e94bd7a4c68cc4f58da267c9a0987f3e8 + input_fingerprint: 66e013fec1a159e598af0a2b50ed5a6a9df130b0a7791616ec9ea8b72ae50651 + template_sources: + - gemfiles/modular/coverage.gemfile.example + gemfiles/modular/coverage_local.gemfile: + recipe: template_source_application_gemfiles_modular_coverage_local_gemfile + action: write + dest_sha256: 824d853bb48c0c8416133343b90f4c00f48c3bdf278897d947ba49a4fc533256 + input_fingerprint: 84fb597397a4bebcc90e23510d641693768597eb474b7884c2b95cb847b2292e + template_sources: + - gemfiles/modular/coverage_local.gemfile.example + gemfiles/modular/debug.gemfile: + recipe: template_source_application_gemfiles_modular_debug_gemfile + action: write + dest_sha256: 0a508bfb02e51b75394b43f4f09d98174dac36ead41cba09c1f730671a1f5905 + input_fingerprint: 1a346edb489e9467f1b18891a47721b1a565af3b483d8dc782532d1a0a21e791 + template_sources: + - gemfiles/modular/debug.gemfile.example + gemfiles/modular/documentation.gemfile: + recipe: template_source_application_gemfiles_modular_documentation_gemfile + action: write + dest_sha256: e15f51e4d14ad2216b6de16c323787945bd225073d70a78420f4c99c98c1ecd1 + input_fingerprint: 2b171bfa384a9d76c8201f0f2521e96460e71652d83c3899304cc032cf05764f + template_sources: + - gemfiles/modular/documentation.gemfile.example + gemfiles/modular/documentation_local.gemfile: + recipe: template_source_application_gemfiles_modular_documentation_local_gemfile + action: write + dest_sha256: ee4972cbf9a8d75bd68c4730bdc4c566131f5cabbfb3bc2099675aad1dc65a15 + input_fingerprint: 536ee547a2faf46d62748f01519f747feb859109a1a00b7c7eca268a6737270d + template_sources: + - gemfiles/modular/documentation_local.gemfile.example + gemfiles/modular/erb/r2/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r2_v3_0_gemfile + action: write + dest_sha256: 3793e7dc9ef23a7ccd893d48cbba092fd27594c63e65cca011cc658218425670 + input_fingerprint: 3097bd61830fb1b96a8d5e3eb8f9fe308ae1eb43621ae87f8dca8c985c02416e + template_sources: + - gemfiles/modular/erb/r2/v3.0.gemfile.example + gemfiles/modular/erb/r3/v5.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r3_v5_0_gemfile + action: write + dest_sha256: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + input_fingerprint: c1ef1ab13ee4ffbd121e48314956a2cdd0b0d3fbe5946c2ccc85142c820ae2e9 + template_sources: + - gemfiles/modular/erb/r3/v5.0.gemfile.example + gemfiles/modular/erb/r4/v5.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r4_v5_0_gemfile + action: write + dest_sha256: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + input_fingerprint: 5b4a4a54238791db4fca6ce3b4b2718563ed266b80065f9a49d02ddc7b29e5b7 + template_sources: + - gemfiles/modular/erb/r4/v5.0.gemfile.example + gemfiles/modular/erb/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_erb_vHEAD_gemfile + action: write + dest_sha256: ad6f104a49e80e0cf625440e3dc816343fe7e2f037fc4971df75e7bb4305c683 + input_fingerprint: bea493e967704381986969927e57f607c9328fdee36805d076a18e72a7aee260 + template_sources: + - gemfiles/modular/erb/vHEAD.gemfile.example + gemfiles/modular/json/truffleruby_22_3.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_22_3_gemfile + action: write + dest_sha256: 249c12eacbe90f9d0d2e81e7a62c4c7e9102e504ededcda4ecf660cb3bb68be4 + input_fingerprint: 3061fc8a5ba633c03a7dadf6607484db5b3b010162aa296c602b4e379aa34b0f + template_sources: + - gemfiles/modular/json/truffleruby_22_3.gemfile.example + gemfiles/modular/json/truffleruby_23_0.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_23_0_gemfile + action: write + dest_sha256: 66aa010567f7afa1af8244a74c3c88ecaaf84dc87b6a25180691bb480d02ed28 + input_fingerprint: 424fdb8721df9c4865f663e5a24dad99e02f33cb8573d78e22bbe3d65bfa4665 + template_sources: + - gemfiles/modular/json/truffleruby_23_0.gemfile.example + gemfiles/modular/json/truffleruby_23_1.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_23_1_gemfile + action: write + dest_sha256: '080fcbdaf2bec73cad40832a3d51eebb380af789917b96f493d1460b0dd6361d' + input_fingerprint: 298f3bde20eba1fa461788afc81d5117004810b393241aaccc6d7a6ac535fa7a + template_sources: + - gemfiles/modular/json/truffleruby_23_1.gemfile.example + gemfiles/modular/mutex_m/r2/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r2_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: cc2c047ff9182f3c06655f02d32007a1a85199141e98e57ac328d41014122415 + template_sources: + - gemfiles/modular/mutex_m/r2/v0.3.gemfile.example + gemfiles/modular/mutex_m/r3/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r3_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: 8c96670afb49e5b85fd3308b03e869c90dfbab480663a52be2a6bb8681c55f8c + template_sources: + - gemfiles/modular/mutex_m/r3/v0.3.gemfile.example + gemfiles/modular/mutex_m/r4/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r4_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: 1ff95b3be13b34e89f00745558488c16727eab065233f73a8475c308cd5e9188 + template_sources: + - gemfiles/modular/mutex_m/r4/v0.3.gemfile.example + gemfiles/modular/mutex_m/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_vHEAD_gemfile + action: write + dest_sha256: '08018641c97f894788fa91b462da504ab2237213d18d95404136c393274ae3cb' + input_fingerprint: 2c5e91b5ce8212192120f55016d9fbcfa4febd3df22a58e5ac0514c00b7fcd72 + template_sources: + - gemfiles/modular/mutex_m/vHEAD.gemfile.example + gemfiles/modular/optional.gemfile: + recipe: template_source_application_gemfiles_modular_optional_gemfile + action: write + dest_sha256: f770e6e9a9dd2bd0f1f132e882d88038b2e21127dce3afe270908c7338c28bfd + input_fingerprint: b0b672e90cae1f98d1521efc5a087cdb2986f8540ed1cf820480e477ea2f8eae + template_sources: + - gemfiles/modular/optional.gemfile.example + gemfiles/modular/rspec.gemfile: + recipe: template_source_application_gemfiles_modular_rspec_gemfile + action: write + dest_sha256: d043f5c9344f6435edb4607c5adaf42c78e7fb6b8b6726007de2bbedefb376c3 + input_fingerprint: b5806a5fe1d60f4208108d1109bd704f99d90be3128f4db594e8a59bc3b3e490 + template_sources: + - gemfiles/modular/rspec.gemfile.example + gemfiles/modular/runtime_heads.gemfile: + recipe: template_source_application_gemfiles_modular_runtime_heads_gemfile + action: write + dest_sha256: 6ac7158c4a3088190f2a9082f01439eb27eca2172ab3464b15c9cb045aa885e1 + input_fingerprint: 6e7b7b0bfacfc65f566cc93ae56cc43e7980dfa5debb5fb711e6625786dbb12e + template_sources: + - gemfiles/modular/runtime_heads.gemfile.example + gemfiles/modular/stringio/r2/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r2_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: 7adb011497325adbd4d96e32a4d71ac96bdc4279f1fe2501d9b4958f77223c9f + template_sources: + - gemfiles/modular/stringio/r2/v3.0.gemfile.example + gemfiles/modular/stringio/r3/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r3_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: 9c5282505ed3229bd7540d10053beeb90d00c8de6695bf276a4e0852af7cc82c + template_sources: + - gemfiles/modular/stringio/r3/v3.0.gemfile.example + gemfiles/modular/stringio/r4/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r4_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: f761bc5f99811256a68d8e62e88b80a3071432199de46d4a6eea1d7c76984f09 + template_sources: + - gemfiles/modular/stringio/r4/v3.0.gemfile.example + gemfiles/modular/stringio/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_vHEAD_gemfile + action: write + dest_sha256: e0497ab6dad9667b22725485b781e9d99349a079250eb29cb125d58f01f4a5be + input_fingerprint: 83aa4ece69f60fc2006ae5dde6e9351ffa3cfa595aa48d8495fef45e499c6e5b + template_sources: + - gemfiles/modular/stringio/vHEAD.gemfile.example + gemfiles/modular/style.gemfile: + recipe: template_source_application_gemfiles_modular_style_gemfile + action: write + dest_sha256: 071066457ce6081cbc03d10d777f741b84019071c78e45c23889f13658a0a4a6 + input_fingerprint: 720007c80ff7755ae28e0f73daf5999013d2cb0579869f1cd45bac9cf1683980 + template_sources: + - gemfiles/modular/style.gemfile.example + gemfiles/modular/style_local.gemfile: + recipe: template_source_application_gemfiles_modular_style_local_gemfile + action: write + dest_sha256: fb072c5fc433aca6d864cd75152e74f4dddc6a0c352973316c978afff889eea5 + input_fingerprint: 9a889247415708b8cd5eb5c38d8e0c883d34832443f55e3c4e37c457a34b29be + template_sources: + - gemfiles/modular/style_local.gemfile.example + gemfiles/modular/templating.gemfile: + recipe: template_source_application_gemfiles_modular_templating_gemfile + action: write + dest_sha256: 6cedc39529daa9aac3a4cf13fe31a628b62a4a2428f5c4f8657c5a2fa027bb35 + input_fingerprint: a714863a05d0b0988107181c4b7c361eb7918b2c1c83db7c14aef1d46a260c43 + template_sources: + - gemfiles/modular/templating.gemfile.example + gemfiles/modular/templating_local.gemfile: + recipe: template_source_application_gemfiles_modular_templating_local_gemfile + action: write + dest_sha256: cb2e566a8ba5fe277475f1955660758f13cfe255d185f7eec47a30bddc18649d + input_fingerprint: 5ed6de587b2bc1cde9c4874e85ad139a13a696ae8e6c2f92083af7170bcc7e34 + template_sources: + - gemfiles/modular/templating_local.gemfile.example + gemfiles/modular/webrick/r4/v1.9.gemfile: + recipe: template_source_application_gemfiles_modular_webrick_r4_v1_9_gemfile + action: write + dest_sha256: 1ee940ff54d5ca3ce7fcff0d82ee9553386979656b9e220d5be5404d0991d5ea + input_fingerprint: 9ca1ea611a32882f7924d4eb2e3c29c36d61bf3bea8c82ea7606c1ed9d5c459b + template_sources: + - gemfiles/modular/webrick/r4/v1.9.gemfile.example + gemfiles/modular/webrick/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_webrick_vHEAD_gemfile + action: write + dest_sha256: da545f591af987648ffbaba181707480a38dfb375db7d289617986ec2c2ca23b + input_fingerprint: 9b3202d062f097f5f28773b02944e72f55b49e93b700909b08f4096d36239e68 + template_sources: + - gemfiles/modular/webrick/vHEAD.gemfile.example + gemfiles/modular/x_std_libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_gemfile + action: write + dest_sha256: e3917e90717d7f9f4393d847549a78c53de7f6c8de52a7f590b34b515fd6111a + input_fingerprint: 5308ecf3bf06fda8ff7ff9c04c2281a0a3d656625d8d4bbe347a098122e4ca80 + template_sources: + - gemfiles/modular/x_std_libs.gemfile.example + gemfiles/modular/x_std_libs/r2/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r2_libs_gemfile + action: write + dest_sha256: e80ec8ad06cb1b31ac982bc25cf7696987fca131aa1001eaefd0bf5cd379c273 + input_fingerprint: 23e3abc9bc17d056cf64a6aef48e0d24507d6613fc387f69c60a4d9fc3d08801 + template_sources: + - gemfiles/modular/x_std_libs/r2/libs.gemfile.example + gemfiles/modular/x_std_libs/r3/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r3_libs_gemfile + action: write + dest_sha256: 546f8849f4267bb19aa10ff0de40be30957197f229e6887847181ea9127b2650 + input_fingerprint: f73982b778ff001740d331f5d3937c20a92b2a15925a20a823f6deffb65bbfb7 + template_sources: + - gemfiles/modular/x_std_libs/r3/libs.gemfile.example + gemfiles/modular/x_std_libs/r4/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r4_libs_gemfile + action: write + dest_sha256: 8c2582eaa218d216b98c86c933465295c8b4e43f3251ea388b9eaf6e471f8da6 + input_fingerprint: 80a1b486905db9ade45b8f15b0ac5122b31831630cf0c3b5f7441fe359d7d404 + template_sources: + - gemfiles/modular/x_std_libs/r4/libs.gemfile.example + gemfiles/modular/x_std_libs/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_vHEAD_gemfile + action: write + dest_sha256: d3133ec4c0638363a7fb025d19be7e95a615fd61c35ddb8d17f2280ee74a7486 + input_fingerprint: 95074e3b19f827c6598ee4db0b8a9f1486a9e7b52ee0b53b242a9f3178906a9c + template_sources: + - gemfiles/modular/x_std_libs/vHEAD.gemfile.example + lib/ast/crispr/markdown/markly/version.rb: + recipe: template_source_application_lib_ast_crispr_markdown_markly_version_rb + action: write + dest_sha256: 30f6a4b860c116e1d0f4fddd2ae7db0c984f3ed59a570f2afcbbb2d1b91126e9 + input_fingerprint: afffca8b48b7bcf0d678e013ccdb2722f17fb7937e19645ad24937c0cf20853f + template_sources: + - lib/gem/version.rb.example + sig/ast/crispr/markdown/markly.rbs: + recipe: template_source_application_sig_ast_crispr_markdown_markly_rbs + action: write + dest_sha256: e6edddabcca5268e48bb90d2e7711ba5b1565a370052a46b33652bcd12938ae0 + input_fingerprint: a3e9d12d79d11265af95c9d9dc44fe9a6a68ae20b8ea15cd9005fc0c2b0089d4 + template_sources: + - sig/gem.rbs.example + spec/spec_helper.rb: + recipe: template_source_application_spec_spec_helper_rb + action: write + dest_sha256: b9f1038c0b10d3407feedc78987b4da2cebddd129f870c6b2eefb84b37ef6aa2 + input_fingerprint: 4ed02fcb589d966605b61956daea79565d15f8bab542aeab188b821e4e720d7f + template_sources: + - spec/spec_helper.rb.example diff --git a/gems/ast-crispr-markdown-markly/Gemfile b/gems/ast-crispr-markdown-markly/Gemfile index dfcb2477c..dbef999dd 100644 --- a/gems/ast-crispr-markdown-markly/Gemfile +++ b/gems/ast-crispr-markdown-markly/Gemfile @@ -19,12 +19,12 @@ git_source(:gitlab) { |repo_name| "https://gitlab.com/#{repo_name}" } gemspec # Local workspace dependency wiring for *_local.gemfile overrides -nomono_requirements = ['~> 1.0', '>= 1.0.8'] -gem 'nomono', *nomono_requirements, require: false # ruby >= 2.2 +gem 'nomono', '~> 1.1', '>= 1.1.0', require: false # ruby >= 3.2.0 # Direct sibling dependencies (env-switched via STRUCTUREDMERGE_DEV) direct_sibling_gems = %w[ ast-crispr + markdown-merge markly-merge ] direct_sibling_dev = ENV.fetch('STRUCTUREDMERGE_DEV', '') diff --git a/gems/ast-crispr-markdown-markly/Gemfile.lock b/gems/ast-crispr-markdown-markly/Gemfile.lock index b8f03a0d7..7a96b2fcf 100644 --- a/gems/ast-crispr-markdown-markly/Gemfile.lock +++ b/gems/ast-crispr-markdown-markly/Gemfile.lock @@ -3,6 +3,7 @@ PATH specs: ast-crispr-markdown-markly (7.1.0) ast-crispr (= 7.1.0) + markdown-merge (= 7.1.0) markly-merge (= 7.1.0) version_gem (~> 1.1, >= 1.1.9) @@ -82,8 +83,8 @@ GEM bundler (>= 1.14) version_gem (~> 1.1, >= 1.1.4) geom2d (0.4.1) - gitmoji-regex (2.0.4) - version_gem (~> 1.1, >= 1.1.13) + gitmoji-regex (2.0.6) + version_gem (~> 1.1, >= 1.1.14) hexapdf (1.9.1) cmdparse (~> 3.0, >= 3.0.3) geom2d (~> 0.4, >= 0.4.1) @@ -96,20 +97,29 @@ GEM rdoc (>= 4.0.0) reline (>= 0.4.2) json (2.21.1) - kettle-dev (2.3.9) + kettle-dev (2.4.5) emoji_regex (>= 15.0) + kettle-gha-pins (~> 0.3, >= 0.3.1) + kettle-ndjson (~> 0.1, >= 0.1.1) kettle-rb (~> 0.1, >= 0.1.2) - kettle-test (~> 2.0, >= 2.0.4) + kettle-test (~> 2.0, >= 2.0.12) + ruby-progressbar (~> 1.13) + tty-progressbar (~> 0.18) + kettle-gha-pins (0.3.1) ruby-progressbar (~> 1.13) + tty-progressbar (~> 0.18) + version_gem (~> 1.1, >= 1.1.14) + kettle-ndjson (0.1.1) + version_gem (~> 1.1, >= 1.1.14) kettle-rb (0.1.5) - kettle-soup-cover (3.0.4) + kettle-soup-cover (3.0.5) kettle-wash (~> 0.1, >= 0.1.0) simplecov (>= 1.0) simplecov-cobertura (>= 4.0) simplecov-console (~> 0.9, >= 0.9.5) simplecov-rcov (~> 0.3, >= 0.3.7) simplecov_lcov_formatter (~> 0.9, >= 0.9.0) - kettle-test (2.0.12) + kettle-test (2.0.15) appraisal2 (~> 3.0, >= 3.0.6) backports (~> 3.0) rspec (~> 3.0) @@ -139,8 +149,18 @@ GEM markly (~> 0.9) version_gem (~> 1.1, >= 1.1.9) mutex_m (0.3.0) + nokogiri (1.19.4-aarch64-linux-gnu) + racc (~> 1.4) + nokogiri (1.19.4-aarch64-linux-musl) + racc (~> 1.4) + nokogiri (1.19.4-arm64-darwin) + racc (~> 1.4) + nokogiri (1.19.4-x86_64-darwin) + racc (~> 1.4) nokogiri (1.19.4-x86_64-linux-gnu) racc (~> 1.4) + nokogiri (1.19.4-x86_64-linux-musl) + racc (~> 1.4) nomono (1.1.0) openssl (4.0.2) ostruct (0.6.3) @@ -195,11 +215,11 @@ GEM rspec-mocks (3.13.8) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) - rspec-pending_for (0.1.21) + rspec-pending_for (0.1.22) rspec-core (~> 3.0) ruby_engine (~> 2.0) ruby_version (~> 1.0) - rspec-stubbed_env (1.0.6) + rspec-stubbed_env (1.0.8) rspec-support (3.13.7) rspec_junit_formatter (0.6.0) rspec-core (>= 2, < 4, != 2.12.0) @@ -297,7 +317,7 @@ GEM silent_stream (1.0.12) logger (~> 1.2) version_gem (>= 1.1.8, < 3) - simplecov (1.0.2) + simplecov (1.0.3) simplecov-cobertura (4.0.0) rexml simplecov (~> 1.0) @@ -309,7 +329,7 @@ GEM simplecov (>= 0.4.1) simplecov_lcov_formatter (0.9.0) simplecov (>= 0.18) - sorbet-runtime (0.6.13351) + sorbet-runtime (0.6.13363) standard (1.56.0) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.0) @@ -333,9 +353,9 @@ GEM standard-custom (~> 1.0, >= 1.0.2) standard-performance (~> 1.9, >= 1.9.0) version_gem (~> 1.1, >= 1.1.13) - stone_checksums (1.0.6) - version_gem (~> 1.1, >= 1.1.13) + stone_checksums (1.0.7) stringio (3.2.0) + strings-ansi (0.2.0) strscan (3.1.8) terminal-table (4.0.0) unicode-display_width (>= 1.1.1, < 4) @@ -353,16 +373,27 @@ GEM parslet (~> 2.0) tree_sitter_language_pack (>= 1.13.2, < 2.0) version_gem (~> 1.1, >= 1.1.9) - tree_sitter_language_pack (1.13.3-x86_64-linux) + tree_sitter_language_pack (1.13.4-aarch64-linux) + sorbet-runtime (~> 0.5) + tree_sitter_language_pack (1.13.4-arm64-darwin) + sorbet-runtime (~> 0.5) + tree_sitter_language_pack (1.13.4-x86_64-darwin) + sorbet-runtime (~> 0.5) + tree_sitter_language_pack (1.13.4-x86_64-linux) sorbet-runtime (~> 0.5) tsort (0.2.0) - turbo_tests2 (3.2.0) + tty-cursor (0.7.1) + tty-progressbar (0.18.3) + strings-ansi (~> 0.2) + tty-cursor (~> 0.7) + tty-screen (~> 0.8) + unicode-display_width (>= 1.6, < 3.0) + tty-screen (0.8.2) + turbo_tests2 (3.2.3) parallel_tests (>= 3.3.0, < 6) rspec (>= 3.10) version_gem (~> 1.1, >= 1.1.14) - unicode-display_width (3.2.0) - unicode-emoji (~> 4.1) - unicode-emoji (4.2.0) + unicode-display_width (2.6.0) version_gem (1.1.14) webrick (1.9.2) yaml-converter (0.2.3) @@ -380,6 +411,9 @@ GEM ostruct rainbow yard + yard-lint (1.10.2) + yard (~> 0.9) + zeitwerk (~> 2.6) yard-relative_markdown_links (0.6.0) nokogiri (>= 1.14.3, < 2) yard-timekeeper (0.2.4) @@ -391,8 +425,13 @@ GEM zlib (3.2.3) PLATFORMS - x86_64-linux + aarch64-linux + aarch64-linux-gnu + aarch64-linux-musl + arm64-darwin + x86_64-darwin x86_64-linux-gnu + x86_64-linux-musl DEPENDENCIES addressable (>= 2.8, < 3) @@ -408,12 +447,12 @@ DEPENDENCIES gitmoji-regex (~> 2.0, >= 2.0.0) irb (~> 1.17) kettle-dev (~> 2.0, >= 2.2.25) - kettle-soup-cover (~> 3.0, >= 3.0.3) + kettle-soup-cover (~> 3.0, >= 3.0.5) kettle-test (~> 2.0, >= 2.0.9) kramdown (~> 2.5, >= 2.5.2) kramdown-parser-gfm (~> 1.1) mutex_m (~> 0.2) - nomono (~> 1.0, >= 1.0.8) + nomono (~> 1.1, >= 1.1.0) rake (~> 13.0) rbs (>= 3.0) rdoc (~> 6.11) @@ -436,6 +475,7 @@ DEPENDENCIES yard (~> 0.9, >= 0.9.45) yard-fence (~> 0.9, >= 0.9.6) yard-junk (~> 0.1, >= 0.1.0) + yard-lint (~> 1.10, >= 1.10.2) yard-relative_markdown_links (~> 0.6) yard-timekeeper (~> 0.2, >= 0.2.4) yard-yaml (~> 0.2, >= 0.2.3) @@ -474,15 +514,17 @@ CHECKSUMS erb (6.0.6) sha256=a9b24986700f5bf127c4f297c5403c3ca41b83b0a316c0cd09a096b56e644ae5 gem_bench (2.0.5) sha256=0dc0fb44a5a5eb7b2f5c1c68a5b0164d72007132822c012bac3abe976b199ead geom2d (0.4.1) sha256=ea0998ea90c4f2752e24fe13d85a4f89bee689d151316140ebcc6369bf634ed9 - gitmoji-regex (2.0.4) sha256=01410d3217940bd0e7b2299ec805245afe8d0f06a5d6d38f623d63a63c0ac34f + gitmoji-regex (2.0.6) sha256=d50649caccc8ad1b080f01e869f0909b135206d8b3ece2313ca31a9b0e39f14b hexapdf (1.9.1) sha256=2d1f6a3622e6bc2a70a707d4c3f3fa44f5552ecd9d899f6283abb07398a84884 io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc irb (1.18.0) sha256=de9454a0703a54704b9811a5ef31a60c86949fbf4013fcf244fabc7c775248e3 json (2.21.1) sha256=13a43df75d95641443f5702dff350f237164a9d811ff0f2c2800d4d980220583 - kettle-dev (2.3.9) sha256=03b2f72c6dda4d2c4401ee3c0c96853116c922766e7b5b04224434a49b571bfc + kettle-dev (2.4.5) sha256=3a451940796a671b7adc910db7c3da87899ebec7c5274921ca598345549ae7eb + kettle-gha-pins (0.3.1) sha256=b13a82a403af31880288fe65f85f2a24a93ae4740c0c7cbc15a35044d27aaa51 + kettle-ndjson (0.1.1) sha256=2d84314e8c911d6f560f2736e8f72019df6d811829674788ff33b3bbf518ed66 kettle-rb (0.1.5) sha256=0322a569860c86e70f90d5ebe72353b8720b7054c7efa9f9044857f5c972d29f - kettle-soup-cover (3.0.4) sha256=36d4df472362d2020d16411d7ce26ba2fe2a41fb8be64577ff9b5280acf99d86 - kettle-test (2.0.12) sha256=3a8e5c5f38db03a6f0a8896da6f3576d24e36f53796578c19aafaa2ba5a8ea52 + kettle-soup-cover (3.0.5) sha256=80abb42eb294fa5d3c8632c259a297c554fbc01902714461f3bf99a65190f5d0 + kettle-test (2.0.15) sha256=993b132ffec17fe82cc81c69f876e15d6eb610a4831df08dc01c0cce5c070caa kettle-wash (0.1.1) sha256=ae2e08b64c72c46ceed5ffa197ed859e85352f38ed0412fca2e18ce29b2dc4f9 kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa kramdown-parser-gfm (1.1.0) sha256=fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729 @@ -493,7 +535,12 @@ CHECKSUMS markly (0.16.0) sha256=6f70d79e385b1efc9e171f74c81628826259039fe6c778e03c3924c71dac5511 markly-merge (7.1.0) mutex_m (0.3.0) sha256=cfcb04ac16b69c4813777022fdceda24e9f798e48092a2b817eb4c0a782b0751 + nokogiri (1.19.4-aarch64-linux-gnu) sha256=1269fb644a6de405057a53dd5c762b1209b43ca7424f839454d3dbc677c31a8f + nokogiri (1.19.4-aarch64-linux-musl) sha256=35c65b9ce72b3bb03207bdbe7067915019dc18c1b9b59139684bd6690fdd01af + nokogiri (1.19.4-arm64-darwin) sha256=a46db9853286e6597b36ebc6953817d15acf3a299583eb3f89fdc6f91dd63527 + nokogiri (1.19.4-x86_64-darwin) sha256=7fd17057d3e1f00e9954a74b3cd76595d3d4a5ef233b7ed9599047c204f70551 nokogiri (1.19.4-x86_64-linux-gnu) sha256=379fae440b28915e3f19d752ce2dcf8465ed2b2fbefd2a7ca0dd497bc981a06a + nokogiri (1.19.4-x86_64-linux-musl) sha256=17dfb7c1fa194ae02fbf7c51a7afc8d278045ab3fdacfd86f91d02d7b274470b nomono (1.1.0) sha256=463dd4c79da02a855739a1b5483190d527b7868688be905e84abdb3449b32c88 openssl (4.0.2) sha256=1037ad2868ae58df9ad917891c0c0f9815a1172f6846d4bcdd508e4c2ee747c2 ostruct (0.6.3) sha256=95a2ed4a4bd1d190784e666b47b2d3f078e4a9efda2fccf18f84ddc6538ed912 @@ -521,8 +568,8 @@ CHECKSUMS rspec-core (3.13.6) sha256=a8823c6411667b60a8bca135364351dda34cd55e44ff94c4be4633b37d828b2d rspec-expectations (3.13.5) sha256=33a4d3a1d95060aea4c94e9f237030a8f9eae5615e9bd85718fe3a09e4b58836 rspec-mocks (3.13.8) sha256=086ad3d3d17533f4237643de0b5c42f04b66348c28bf6b9c2d3f4a3b01af1d47 - rspec-pending_for (0.1.21) sha256=c87fda50c20f8faca72d9cfa6a936abffd37860343f14aced95bbb29b8ae96bf - rspec-stubbed_env (1.0.6) sha256=6467a6eb0f72146d443ffb0c5a2a549d8812e59c04fbc81e03cd914ebf1f28dc + rspec-pending_for (0.1.22) sha256=49dc647473f8c8ea4ccc1a33813537dd94b913ef7ec5a8689896101eaacb71cf + rspec-stubbed_env (1.0.8) sha256=b23c4dd5e5d6a0cf0c5b4f6ed3f3678d78e4be9ec247ea9abf0669d20b490535 rspec-support (3.13.7) sha256=0640e5570872aafefd79867901deeeeb40b0c9875a36b983d85f54fb7381c47c rspec_junit_formatter (0.6.0) sha256=40dde674e6ae4e6cc0ff560da25497677e34fefd2338cc467a8972f602b62b15 rubocop (1.88.2) sha256=8def251c90cd955feb4daa3edc0ab56893250c4ce90ef81e6c80c03f9a939bbf @@ -547,39 +594,46 @@ CHECKSUMS ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33 ruby_engine (2.0.3) sha256=ca2ae7def8cfcdc2bfb6a186d36d5d59c8b403245dc0256c3802b767fa278aaa ruby_version (1.0.3) sha256=5930f9950746b7e6c973184398ee364ee7440b170fef7922b9f5cdf317f1ccb5 - service_actor (3.9.4) sha256=e63b523630b9a7e62959b2a90113b08d2565b5de9c148557b281ef847c9539ce + service_actor (3.9.4) silent_stream (1.0.12) sha256=377c43aa10033fe90c33b39ea8cd97d79f2d1c4856df598efc56f3091f3ae782 - simplecov (1.0.2) sha256=c6459434efe4b948b46477cc2df2faa73ab365f83a33c7c17f81262f4f7f1244 + simplecov (1.0.3) sha256=38ef0514f16ae7562f0d0f4df02610071115103d301b6de7dacbcc000082e39b simplecov-cobertura (4.0.0) sha256=e4fb3159b1ecea545b44f5452a8611305323e78ad23eae8aed35924d072e01ea simplecov-console (0.9.5) sha256=b1108bcfff5f210143e2b8301698c367b01586f20d25a73e95475a5df6fc6ff6 simplecov-rcov (0.3.7) sha256=372f50bf6df6b6350b7d0c840f2f8bdabe021861a43c26877b747c9ac96139fc simplecov_lcov_formatter (0.9.0) sha256=4c1839bb31dcf7a8f7a6474c94ed228aa03b994e9dd5e1965e58b4121b049bed - sorbet-runtime (0.6.13351) sha256=f8fee17c6e3edf835dc6823d26afb9a7c8969c6710d1fabe2fb43f4e0c15c64f + sorbet-runtime (0.6.13363) sha256=f1f0b2e946fb3cd76b9d8e3d85459cdaf7f5466331a400cafcf008e508b6d2c3 standard (1.56.0) sha256=ae2af4d9669589162ac69ed5ef59dcf9f346d4afc81f7e62b84339310dfcb787 standard-custom (1.0.2) sha256=424adc84179a074f1a2a309bb9cf7cd6bfdb2b6541f20c6bf9436c0ba22a652b standard-performance (1.9.0) sha256=49483d31be448292951d80e5e67cdcb576c2502103c7b40aec6f1b6e9c88e3f2 standard-rspec (0.5.0) sha256=64d396524a65af47f5331b423d8cdd313e0267401647bb7892489ca89dad2973 standard-rubocop-lts (2.0.10) sha256=89708a505b7d8b24d2ac399a7520fcb9e764abc2ecb4289b631b5fe0e3b76617 - stone_checksums (1.0.6) sha256=c775f830513d6c6ab26e31d1a5fbecd4c4e39002663d4d9f8fa96e97990b5298 + stone_checksums (1.0.7) sha256=faf7a175da7c4f32777c5292a0128b06eec183b3cc3a0b382529b21800300626 stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1 + strings-ansi (0.2.0) sha256=90262d760ea4a94cc2ae8d58205277a343409c288cbe7c29416b1826bd511c88 strscan (3.1.8) sha256=aae2db611a225559f21ffbb71765c9a4e60fd262534a9ea84f4f11c7f32f679e terminal-table (4.0.0) sha256=f504793203f8251b2ea7c7068333053f0beeea26093ec9962e62ea79f94301d2 thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73 timecop (0.9.11) sha256=41284dc6e5041f2184f781ace766f942108c842f8d8c1386a26e6343decc7542 timecop-rspec (1.0.3) sha256=005f14841bb606dcaefb060e321b5388e2e59537742bee8b3a9a9a40e598fab9 - token-resolver (2.0.5) sha256=b852f924287ffb58a440856e862b056c8ad97e74b4b2526cee43e0771f40c25c + token-resolver (2.0.5) tree_haver (7.1.0) - tree_sitter_language_pack (1.13.3-x86_64-linux) sha256=1ffd045bd236ea54f58c5872ee66121d01033359c1f28f375b7fd4a4b5620cf9 + tree_sitter_language_pack (1.13.4-aarch64-linux) sha256=f7bb95fd59afda1e1b91a7b6ad4df244c585a863e94e4a0f492ef2336a5358b8 + tree_sitter_language_pack (1.13.4-arm64-darwin) sha256=2b48ded1f5feae3de20be1471aaa7c211601ac1c71ca6d4789cf31560a854132 + tree_sitter_language_pack (1.13.4-x86_64-darwin) sha256=8a2460d9029e7610b863d2481e2da0078f87b18bf8668070ccb5ecce71e272d8 + tree_sitter_language_pack (1.13.4-x86_64-linux) sha256=ae3ae718534088b2dc76bd93e7d093f11e8d19188bf47edfcd962df906e1af97 tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f - turbo_tests2 (3.2.0) sha256=8b35421548399d1923567b177970f42671c65695b93cdd134d78fbcbab85dff0 - unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42 - unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f + tty-cursor (0.7.1) sha256=79534185e6a777888d88628b14b6a1fdf5154a603f285f80b1753e1908e0bf48 + tty-progressbar (0.18.3) sha256=6cbb4260e55e74a9180d502143eb6a467d2c8e51bf5f3c9509fb5cacc3d4a5f6 + tty-screen (0.8.2) sha256=c090652115beae764336c28802d633f204fb84da93c6a968aa5d8e319e819b50 + turbo_tests2 (3.2.3) sha256=f77fc0799014c1d7890977e117cf39317bc4544de2c88a55149ed920b4cff942 + unicode-display_width (2.6.0) sha256=12279874bba6d5e4d2728cef814b19197dbb10d7a7837a869bab65da943b7f5a version_gem (1.1.14) sha256=6b7306c7e9416d06067561981ab3444e2cecb844f26cc325ae3c27b44cf85613 webrick (1.9.2) sha256=beb4a15fc474defed24a3bda4ffd88a490d517c9e4e6118c3edce59e45864131 yaml-converter (0.2.3) sha256=d35e69e547610d9e347672cc277fcb7d71dff3c53a942e66f82b1c64022ada72 yard (0.9.45) sha256=52e211493f7cb8a3ebf7e104a25a1e73937a3103092545d34cb88fafebb3dc51 yard-fence (0.9.6) sha256=3d1dbf4e3df462ac78b8bd2e01cf740a2de20168387c929aca31a0bcee490659 yard-junk (0.1.0) sha256=e85fe2ec1afa47313decd333447b53458cb1ed49b510b70015fdc3041a94bcdd + yard-lint (1.10.2) sha256=3e595709d088a8cc827e706a4146b447eb6a907ee375d06c11077369d00717f6 yard-relative_markdown_links (0.6.0) sha256=3e5ffa85cbad9bac70bee5421774b190fb25d3bdf489323a5b3534f647d1a70e yard-timekeeper (0.2.4) sha256=62f8d001d737c6e2ac688e7b37386f958dceb0f6aff9c909575e1bec8d20775a yard-yaml (0.2.3) sha256=fe5fef18819e1cbd05bb8f1b9e1baad6bf70c28125eb75b57bbf6397b0831812 diff --git a/gems/ast-crispr-markdown-markly/ast-crispr-markdown-markly.gemspec b/gems/ast-crispr-markdown-markly/ast-crispr-markdown-markly.gemspec index 6fdf17d8a..0c619bc38 100644 --- a/gems/ast-crispr-markdown-markly/ast-crispr-markdown-markly.gemspec +++ b/gems/ast-crispr-markdown-markly/ast-crispr-markdown-markly.gemspec @@ -96,6 +96,7 @@ Gem::Specification.new do |spec| # Utilities spec.add_dependency 'ast-crispr', "= #{spec.version}" + spec.add_dependency 'markdown-merge', "= #{spec.version}" spec.add_dependency 'markly-merge', "= #{spec.version}" spec.add_dependency('version_gem', '~> 1.1', '>= 1.1.9') # ruby >= 2.2.0 diff --git a/gems/ast-crispr-markdown-markly/bin/kettle-gha-pins b/gems/ast-crispr-markdown-markly/bin/kettle-gha-pins new file mode 100755 index 000000000..c743cecac --- /dev/null +++ b/gems/ast-crispr-markdown-markly/bin/kettle-gha-pins @@ -0,0 +1,16 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# +# This file was generated by Bundler. +# +# The application 'kettle-gha-pins' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) + +require 'rubygems' +require 'bundler/setup' + +load Gem.bin_path('kettle-gha-pins', 'kettle-gha-pins') diff --git a/gems/ast-crispr-markdown-markly/gemfiles/modular/coverage.gemfile b/gems/ast-crispr-markdown-markly/gemfiles/modular/coverage.gemfile index b93014b6b..b4c26a504 100644 --- a/gems/ast-crispr-markdown-markly/gemfiles/modular/coverage.gemfile +++ b/gems/ast-crispr-markdown-markly/gemfiles/modular/coverage.gemfile @@ -7,7 +7,7 @@ if ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false').zero? # Coverage (remote/released) platform :mri do - gem 'kettle-soup-cover', '~> 3.0', '>= 3.0.3', require: false + gem 'kettle-soup-cover', '~> 3.0', '>= 3.0.5', require: false end else eval_gemfile 'coverage_local.gemfile' diff --git a/gems/ast-crispr-markdown-markly/gemfiles/modular/coverage_local.gemfile b/gems/ast-crispr-markdown-markly/gemfiles/modular/coverage_local.gemfile index f7d539edd..e8fdfe6a6 100644 --- a/gems/ast-crispr-markdown-markly/gemfiles/modular/coverage_local.gemfile +++ b/gems/ast-crispr-markdown-markly/gemfiles/modular/coverage_local.gemfile @@ -17,7 +17,8 @@ platform :mri do path_env: 'KETTLE_DEV_DEV', vendored_gems_env: 'VENDORED_GEMS', vendor_gem_dir_env: 'VENDOR_GEM_DIR', - debug_env: 'KETTLE_DEV_DEBUG' + debug_env: 'KETTLE_DEV_DEBUG', + root: %w[src my kettle-dev] ) if ENV.fetch('GALTZO_FLOSS_DEV', 'false').casecmp('false') != 0 diff --git a/gems/ast-crispr-markdown-markly/gemfiles/modular/documentation.gemfile b/gems/ast-crispr-markdown-markly/gemfiles/modular/documentation.gemfile index 9d4535f12..d0f4d4a76 100644 --- a/gems/ast-crispr-markdown-markly/gemfiles/modular/documentation.gemfile +++ b/gems/ast-crispr-markdown-markly/gemfiles/modular/documentation.gemfile @@ -12,6 +12,7 @@ gem 'kramdown-parser-gfm', '~> 1.1', require: false # Ruby >= 2.3 gem 'yaml-converter', '~> 0.2', '>= 0.2.3', require: false # Ruby >= 3.2 gem 'yard', '~> 0.9', '>= 0.9.45', require: false gem 'yard-junk', '~> 0.1', '>= 0.1.0', require: false # Ruby >= 3.1 +gem 'yard-lint', '~> 1.10', '>= 1.10.2', require: false # Ruby >= 3.2 gem 'yard-relative_markdown_links', '~> 0.6', require: false if ENV.fetch('GALTZO_FLOSS_DEV', 'false').casecmp('false').zero? diff --git a/gems/ast-crispr-markdown-markly/gemfiles/modular/templating.gemfile b/gems/ast-crispr-markdown-markly/gemfiles/modular/templating.gemfile index a672de184..a7e6c1f06 100644 --- a/gems/ast-crispr-markdown-markly/gemfiles/modular/templating.gemfile +++ b/gems/ast-crispr-markdown-markly/gemfiles/modular/templating.gemfile @@ -12,7 +12,7 @@ end if kettle_remote # Template/plugin checks for released installs. - gem 'kettle-drift', '~> 1.0', '>= 1.0.6', require: false + gem 'kettle-drift', '~> 1.0', '>= 1.0.7', require: false end # Set STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local development with path-based dependencies. diff --git a/gems/ast-crispr-markdown-markly/gemfiles/modular/templating_local.gemfile b/gems/ast-crispr-markdown-markly/gemfiles/modular/templating_local.gemfile index e9e55ce10..1b23ed165 100644 --- a/gems/ast-crispr-markdown-markly/gemfiles/modular/templating_local.gemfile +++ b/gems/ast-crispr-markdown-markly/gemfiles/modular/templating_local.gemfile @@ -65,7 +65,8 @@ platform :mri do path_env: 'KETTLE_DEV_DEV', vendored_gems_env: 'VENDORED_GEMS', vendor_gem_dir_env: 'VENDOR_GEM_DIR', - debug_env: 'KETTLE_DEV_DEBUG' + debug_env: 'KETTLE_DEV_DEBUG', + root: %w[src my kettle-dev] ) end end diff --git a/gems/ast-crispr-markdown-markly/lib/ast/crispr/markdown/markly.rb b/gems/ast-crispr-markdown-markly/lib/ast/crispr/markdown/markly.rb index 6116514df..39b1aa4ac 100644 --- a/gems/ast-crispr-markdown-markly/lib/ast/crispr/markdown/markly.rb +++ b/gems/ast-crispr-markdown-markly/lib/ast/crispr/markdown/markly.rb @@ -29,6 +29,8 @@ def structural_owners(document, owner_scope: :shared_default) analysis.link_definition_owners when :html_comments analysis.html_comment_owners + when :list_items + analysis.list_item_owners when :inline_references analysis.inline_reference_owners when :table_rows @@ -72,6 +74,13 @@ def structure_profile(owner_scope: :shared_default) supported_comment_regions: [], metadata: { adapter: :markly, markdown_owner: :html_comment } ) + when :list_items + Ast::Crispr::StructureProfile.new( + owner_scope: owner_scope, + owner_selector: :list_items, + supported_comment_regions: [], + metadata: { adapter: :markly, markdown_owner: :list_item } + ) when :inline_references Ast::Crispr::StructureProfile.new( owner_scope: owner_scope, @@ -193,6 +202,39 @@ def html_comment(text:, id: nil, limit: nil, metadata: {}, **options) ) end + def list_item(text: nil, id: nil, limit: nil, metadata: {}, **options) + Ast::Crispr::OwnerSelector.new( + id: id || ['list_item', text].compact.join(':'), + limit: limit, + metadata: metadata.merge( + adapter: Ast::Crispr::Markdown::Markly.adapter, + owner_scope: :list_items, + selector_kind: :list_item, + selection_intent: :predicate_filter, + include_trailing_gap: false + ).merge(options), + locate: lambda do |context| + context.structural_owners(owner_scope: :list_items).filter_map do |owner| + next if text && !owner.text.to_s.include?(text.to_s) + + Ast::Crispr::Match.new( + node: owner, + start_line: owner.location.start_line, + end_line: owner.location.end_line, + metadata: { + start_boundary: :owner_start, + end_boundary: :owner_end, + payload_kind: :structural_owner_body, + depth: owner.depth, + marker: owner.marker, + text: owner.text + } + ) + end + end + ) + end + def inline_reference(label: nil, reference_kind: nil, id: nil, limit: nil, metadata: {}, **options) Ast::Crispr::OwnerSelector.new( id: id || ['inline_reference', label, reference_kind].compact.join(':'), diff --git a/gems/ast-crispr-markdown-markly/lib/ast/crispr/markdown/markly/version.rb b/gems/ast-crispr-markdown-markly/lib/ast/crispr/markdown/markly/version.rb index ba5f0b149..b32aa013b 100644 --- a/gems/ast-crispr-markdown-markly/lib/ast/crispr/markdown/markly/version.rb +++ b/gems/ast-crispr-markdown-markly/lib/ast/crispr/markdown/markly/version.rb @@ -4,9 +4,12 @@ module Ast module Crispr module Markdown module Markly + # Version namespace for this gem. module Version + # Current gem version. VERSION = '7.1.0' end + # Current gem version exposed at the traditional constant location. VERSION = Version::VERSION # Traditional Constant Location end end diff --git a/gems/ast-crispr-markdown-markly/spec/list_item_owner_spec.rb b/gems/ast-crispr-markdown-markly/spec/list_item_owner_spec.rb new file mode 100644 index 000000000..6899b8790 --- /dev/null +++ b/gems/ast-crispr-markdown-markly/spec/list_item_owner_spec.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +RSpec.describe Ast::Crispr::Markdown::Markly do + it 'exposes Markdown list items as CRISPR structural owners' do + source = <<~MARKDOWN + # Title + + ## Changed + + - First item + continuation + MARKDOWN + + context = described_class.document_context(content: source, source_label: 'CHANGELOG.transfer.md') + owners = context.structural_owners(owner_scope: :list_items) + + expect(owners.size).to eq(1) + expect(owners.first.source).to include("- First item\n continuation") + expect(owners.first.location.start_line).to eq(5) + end + + it 'selects Markdown list item matches through the Markly selector' do + source = <<~MARKDOWN + # Title + + - Selected item + MARKDOWN + context = described_class.document_context(content: source, source_label: 'README.md') + selector = described_class::Selectors.list_item(text: 'Selected') + + matches = selector.locate_matches(context) + + expect(matches.map(&:line_range)).to eq([3..3]) + end +end diff --git a/gems/ast-crispr-ruby-prism/.structuredmerge/kettle-jem.lock b/gems/ast-crispr-ruby-prism/.structuredmerge/kettle-jem.lock new file mode 100644 index 000000000..e5f9eab82 --- /dev/null +++ b/gems/ast-crispr-ruby-prism/.structuredmerge/kettle-jem.lock @@ -0,0 +1,527 @@ +--- +version: 1 +template_state: + version: 7.1.0 + applied_at: '2026-07-26' + changelog_replay: + last_entry_key: kettle-jem-template-20260726-002 + last_entry_date: '2026-07-26' + checksums: + ".aiignore.example": 48a5dfdd93afd1a15fdce39cc28ca9920263f00018b0968ab031fa744521e5ce + ".config/mise/env.sh": aeea5a2ab489ba6e5467ae8de6e386ec8c8fe4ff31a044e69d0cd6a092dd6654 + ".devcontainer/apt-install/devcontainer-feature.json.example": 273a07f9d3926e1b6287c37709a469ee05d724cfedae62ad3b0cd8c09befc9ec + ".devcontainer/apt-install/install.sh.example": b61e020b60ca172bb7b658e63c9cd4342e49bda0531a6b19b36475e515ad20b0 + ".devcontainer/devcontainer.json.example": 4a80d471379b9720cc65cc89543cbbc0a7be87b188a818160296577c4e87606f + ".devcontainer/scripts/setup-tree-sitter.sh.example": c34f48d7bac8561fb780c4c7a81cec5004c3ac0edc11f229799ec9a4e3eccd54 + ".env.local.example": 35cb867e8bacb75252a85c29f78899b36d0d1843511ae1ba1fbc7da863b128b3 + ".envrc.example": b7232f4bae0fb399cc9c9cdc4a5eb694bd69623aeeadcbab18c9990e443040a1 + ".envrc.no-osc.example": b7232f4bae0fb399cc9c9cdc4a5eb694bd69623aeeadcbab18c9990e443040a1 + ".gemrc.example": 77b1c36ae6f91bedf08b99e662a971b02f7e66e0d65267805d068d30ff118aba + ".git-hooks/commit-msg.example": d858575bf70d6175fdd7656e9ba0b41672de3fb49163181efe3fbc9e40306024 + ".git-hooks/commit-subjects-goalie.txt.example": bb1179c8911af8afeb1f9a604b3de789d4a4b33d9d4a7743b3145998c15b0a94 + ".git-hooks/footer-template.erb.txt.example": 70ed3616ee04a4062126f53892cc255e7aa2b66741fe22d6b372f7df99676718 + ".git-hooks/prepare-commit-msg.example": 35266ead46a6385d20eeff7ec64afedef33a2db18d1238b8662a1bc758f05335 + ".github/.codecov.yml.example": d6ef3208a90eca74f79d8ff4e5ae21a915562b075cb17978b1eaadc231dd4e85 + ".github/FUNDING.yml.example": fd27dff7db58f4e8a39c35ccb60e39422517038501a5f2a99ef2aaeea2d1fa5d + ".github/FUNDING.yml.no-osc.example": 8f1a867b1921b3dec1c63f7a7cd629362c1fb1ad0d1052494b48ba746b0fc5c6 + ".github/copilot_instructions.md.example": f5c5791df013e89e170fd436379b14e251d0ff4cb6b330a6d961e80c9071f2d3 + ".github/dependabot.yml.example": db84d1c13f64100d2f48212c022f0d985e9061ca76c36d82e7057fd845ecd528 + ".github/workflows/auto-assign.yml.example": 57b8159a15bf49946506e1b624934feed6a1cc8f71ad68968323c87acac56c67 + ".github/workflows/coverage.yml.example": 524ef90e0fd2ca0b846c464197d8d43cd6a57834303c9526ea0bd277f2beb3e1 + ".github/workflows/current.yml.example": dbc82e7593804c05d2c217d5c02d79d5480b5a0d1e04eea99b7235f35f520216 + ".github/workflows/dep-heads.yml.example": d94122f3246e17774fa015dde8d9a5772a66e54f817d44e62716f6a61d899050 + ".github/workflows/dependency-review.yml.example": a895d52257a7112d796fabf349ced1079bed93e81e3aa9cb088f9af3f44d1e5f + ".github/workflows/discord-notifier.yml.example": f9cc83a87058bd420426444510a1dd1520fd7cc15af50832ad52c25c5766be94 + ".github/workflows/framework-ci.yml.example": 112ef6178fcf115fe9e0a248ec6cb4af748ce89142fd7dba30e9abb6ebdc17be + ".github/workflows/heads.yml.example": aa55cf9bb4ae35fe126384003e8af4b91e685bcf370263b3710bd429f6c44343 + ".github/workflows/jruby-10.0.yml.example": 0eaf6d10c304de606684d420bbd88cfc90fe9d139a56773e011c6abaa6c5fc91 + ".github/workflows/jruby-9.1.yml.example": 9062f9de8843da1f8c4da8f991bbd24f9540c63927deaf311649f3088a672d5b + ".github/workflows/jruby-9.2.yml.example": f330363fc0af7dd0be24c140c919c07737a3168c5647012e34ba0c36634005e5 + ".github/workflows/jruby-9.3.yml.example": 3b26b3a978d0018f01e6d87651936f2e92fcb58d62bcdf11822eca3c2656d303 + ".github/workflows/jruby-9.4.yml.example": a830b92838a09b9316a81745b48ff35bed9461783154fc6d0e52df0d6aa319f3 + ".github/workflows/jruby.yml.example": f10f779cd3be37d2ffa593d9a83ba68a8684bb849ed1c4d9ae41706ff12571e1 + ".github/workflows/license-eye.yml.example": 23db5d6ee9b5382de1f2042642219d65214e09c3f975c418d4dec4d46375036c + ".github/workflows/locked_deps.yml.example": c7eaa20cc7d7de6209e576274e592ffb4838177ae6ab56096b2439d0fa1bc31c + ".github/workflows/opencollective.yml.example": fe7d8d346f9ab055b6779abf62972291460d05275e2c4d191e291e8cd73b0e6b + ".github/workflows/ruby-2.3.yml.example": 90474f1a462edc877983b91dd40d942e82b28262f1afdca74cddcdd52d7e8c26 + ".github/workflows/ruby-2.4.yml.example": fe84af4efef6934d7ff63efa2a4c85994f2ea1887f61b1ab5d30a21365429ec9 + ".github/workflows/ruby-2.5.yml.example": c40db157514168442311191ebc88853dfb36447a90171a73f42d435e92d02f05 + ".github/workflows/ruby-2.6.yml.example": 87bb8537d0047217651a327353df670fed3ea9e4a5350e965ed80af9ce32d9d3 + ".github/workflows/ruby-2.7.yml.example": 5650ec41bc67553457019a772a3343578872749d21268d5e7fb1715ebf4e2351 + ".github/workflows/ruby-3.0.yml.example": f9d7c7dfc6eaea1ca12c92e0b98b4ba8fed5726d26459bb410ab9812a741e5b9 + ".github/workflows/ruby-3.1.yml.example": e44879cd3ea47d00e44e573745d7f95fc1a561a9c1d69d72529d0c07294bd26e + ".github/workflows/ruby-3.2.yml.example": c28b9179778157e6b4807a775968840ff1c6bf2fd847ce1ce694b9a77df42f6e + ".github/workflows/ruby-3.3.yml.example": 033e4f0ed7ded17f5d13fde6674ec9fd555cfe58c11f57f7dc2f1fee21c718b6 + ".github/workflows/ruby-3.4.yml.example": 474a96468f101b8fddac4cecaa0629f28d5ceec0c784329affdc471eb1e3e889 + ".github/workflows/style.yml.example": dea7243a91dc164a172e90b7933de58cdd353d7e5df1beac22cec63125edc086 + ".github/workflows/templating.yml.example": 327b933509e1ade4d53df5756f6407028b479c51847775db494fb9c25e66ce5a + ".github/workflows/truffle.yml.example": 56fa53dc206976c81db7cc3530f4d19d89ea5859c1245492e5a5ecb9304de63e + ".github/workflows/truffleruby-22.3.yml.example": d6773529e6961039b5cc4a145c77623881aa3857d875bbb415ca0f8147166d7a + ".github/workflows/truffleruby-23.0.yml.example": abcd23a18d748528f7558d4ab7bc4830796cb686ca7371f67a8ddaf6d0362d72 + ".github/workflows/truffleruby-23.1.yml.example": 11af8a3f0823ed3ab17e759d81b8a4551eb7af8096ce0b5a9501fd83cada1cd2 + ".github/workflows/truffleruby-24.2.yml.example": 2c4ff82eeaa3bdb19391f04cd2f41b07733986a053d5ac8498176fef5f890e5e + ".github/workflows/truffleruby-25.0.yml.example": 42cdfdcd21c7b3bb1b87c22c2bc7a98135a442742df5f9a45e2b4e03838c1e7f + ".github/workflows/truffleruby-33.0.yml.example": 2a45e428ca13dac56ee75526b80eac477b61697ca06c94680e1eb05d21dbc25a + ".github/workflows/unlocked_deps.yml.example": 15f5ccbe811aa5a8650c2aa69b32f4f6a24d5f8bd3aae2dcbec92cbe3a51f0a7 + ".gitignore.example": 14864a0c88be3f8c122ab3032efeb782ba5e035013231038acf746a400437a3e + ".gitlab-ci.yml.example": ef64afa9855ebb59bbc87446fa9533238d3ce180966ceb19649a7f165715b92b + ".idea/.gitignore.example": b44a5aa16bf9fe5635558af347454b05a76d600084308a9f43d4d0b54789ecab + ".licenserc.yaml.example": 8787fa7bddce911f8ba47bda3eb6ad9786b6650d5d94786723e88773098ed37d + ".opencollective.yml.example": 9ad9b83fe54f0bddac7fb614575585d98f78df0e181ee70a7acd0168d26e3142 + ".qlty/qlty.toml.example": cf3d750d2328f6c057b08b7ce3d7ec00a4056c7f0eedda59af321d6caca03553 + ".rspec.example": 40d3f3ff435b0f9e5863772a95df8725b939c2dc11aead2bca68dcd6d85a9788 + ".rubocop.example": 591e4b45430e85b0dd460cc11c70650912fa2734988420b934109d06a749344f + ".rubocop.yml.example": 47f9a031022db67c964dd76ee2e8dfee21295a1877ca4d6233d3de39d114af73 + ".rubocop_rspec.yml.example": 288ad75e7eb14d87d80fafe6f7272217be5c57547536ee56c780a7d10ac7ec74 + ".simplecov.example": ffc76492effe905cc65797389fc8050fda136652ac078a80303cd084b349ef28 + ".structuredmerge/git-drivers.toml.example": 9d241a44c9edffcdbd3da018fa188a238089c3d1635040924df594a6929a4f97 + ".structuredmerge/kettle-jem.yml.example": 954cfc9e35cd20e46376426675e985bf8a0de19ff5069bf7be24b574837be615 + ".yard-lint.yml.example": 90def46867c9436b4e177c47d91fc8165f4602e335715aecc39f5587ae20b55b + ".yardignore.example": 821f453c609df7d46145d675424b39dfbe6dfdca8edac5f367b85fff48502455 + ".yardopts.example": 6fd6f2701713096a8a9ea095c213bbc68eeef37797c4754d97837e3229a3a5f6 + AGENTS.md.example: aec69512cbe17004660ac0abfabb9ec91a5c51c2cd82c10f30f08886f9bf64a7 + AGPL-3.0-only.md.example: d8a6cc31abc16b6748c7a21f21611f5a1ec33f67d22ca23d7da1c19b95496bee + Appraisal.root.gemfile.example: 8724e3f6faea995be655ac49369bec64a70710112b1f65707fa38f1fd2fd3254 + Appraisals.example: 9cb1abcfb1a0bd6d859ca0705efb874dbe546754c8c71f9f95025ff6817f1471 + Big-Time-Public-License.md.example: b0c02a112c9eee0ed69f05fd8f22277a2f8bc62d447b6cb75d6df560e05bf431 + CHANGELOG.md.example: 73459e50dad34d84db88844c993d975097557bdf5229e101b0d1339de6f98ffc + CHANGELOG.transfer.md: 9c201849117c9d4234724c4599643dd42fdce5f0a673a1abee97b97e556c301b + CITATION.cff.example: e404ea0a7919d78a83d53d80e211d17b9663576aa606583b709795dc023fd75c + CODE_OF_CONDUCT.md.example: f1ad532f1860f73ef774c6b27a26d41f4bc1cb8813034f5957487766ebb0986b + CONTRIBUTING.md.example: 63d339848c615f2c181d6b0565c42e56371eedb66f310d146cb7da297f7bc641 + FUNDING.md.example: 455bbb2b55d934283a2e7c16b59c321116c53310a85a718b7cf8ca44e9e3721e + FUNDING.md.no-osc.example: 05a85d5faf22d5ea5721622d242080447cf318d3277d9d529e438be1c9d5a351 + Gemfile.example: 6b2d72ec8a630cce515b7b528022071b13eee863c3164763df03792a5004345a + IRP.md.example: 85d8887d9b0e77f7fa9835ca5b9be31f586fdc94764ed1819af2a9a7fec98e96 + LICENSE.md.example: 120edf5f23173ebbdb5ad384ffc2e9b97e62aa6d0e61b733c003bd4db1b08276 + MIT.md.example: 365fce2a82f9d258ada9a527accfd5754b406ee9cdd8f8ed86bbec64b8c42ab2 + PolyForm-Noncommercial-1.0.0.md.example: ffcca38841adb694b6f380647e15f17c446a4d1656fed51a1e2041d064c94cc8 + PolyForm-Small-Business-1.0.0.md.example: 2f81e317d36f83a199c9fa10bcb250775fd90510303eaeb15aac2d8f0c1fc2d6 + README.md.example: 452446a44d120df26cde68fbc7aff086fa815769c989b994ebc1432ea927974f + REEK: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 + RUBOCOP.md.example: c09e5533ccc59b70a2efa05c99f66e521137c1053d3c12eb43509cebd5b68b0e + Rakefile.example: 569803e726b07ea26267fec6891367a3096a0dff3c266269a7081d36afe496af + SECURITY.md.example: ee9411aa85f36d88363fdaea7a1baea4362b6ec112cf2688e711b05de1d3144c + bin/setup.example: 0ac35089c95a91d8973fe7a318bf9fd98b9f8e00db92c5d9ca6cd858abb8d41b + certs/pboling.pem.example: 18956f60643666cc181e2743b3b3691bec08c5326f514f60af54d0cdb9ebc554 + gem.gemspec.example: 9989cc8a1cd125586ea807eaed549eaecc044711d31f17dd7bac2a0815b28b1a + gemfiles/modular/benchmark/r4/v0.5.gemfile.example: 5bc3190090ae456df1a8cce28dd47a7fb293495f6d845ec7e53a7a8b50f14ae1 + gemfiles/modular/benchmark/vHEAD.gemfile.example: ca6cd52c55c3082759c6ddc97638970f12d953aec1822470823d316086aa6e25 + gemfiles/modular/cgi/r4/v0.5.gemfile.example: c2d14a39377a2435419ceaca22a3421ebd899e9cba943df8a90b576a33624870 + gemfiles/modular/cgi/vHEAD.gemfile.example: 9ff3dc789b3279642876c0aad4b0094c1139bb8fbbf36daab804d3b2b3a60b43 + gemfiles/modular/coverage.gemfile.example: 915fc161ad574fdbc071bc733b69b27e94bd7a4c68cc4f58da267c9a0987f3e8 + gemfiles/modular/coverage_local.gemfile.example: 928d5f260d7b119c038baa56da9fb78dd524dee613aea33ab72894bbce5c506e + gemfiles/modular/debug.gemfile.example: 0a508bfb02e51b75394b43f4f09d98174dac36ead41cba09c1f730671a1f5905 + gemfiles/modular/documentation.gemfile.example: e15f51e4d14ad2216b6de16c323787945bd225073d70a78420f4c99c98c1ecd1 + gemfiles/modular/documentation_local.gemfile.example: 84a20f5d4b0feb94c2cf2f7a8dce8f682f1483498e41484c2b447a5661fd1870 + gemfiles/modular/erb/r2.3/default.gemfile.example: 9da0d08fb6a299b965c37fe85efcaebd9eb0a82b2ea35fdc157c41bd75431396 + gemfiles/modular/erb/r2.6/v2.2.gemfile.example: '01787cbdf7136c0d75cc7b734c6bb3d2ef6c70d6c1c50e7d0ad2112c0f8ef8e7' + gemfiles/modular/erb/r2/v3.0.gemfile.example: 3793e7dc9ef23a7ccd893d48cbba092fd27594c63e65cca011cc658218425670 + gemfiles/modular/erb/r3.1/v4.0.gemfile.example: bdf71ddcfe5001aab7d71b10a645a785928957ef7bae61d49307eb7f712279f3 + gemfiles/modular/erb/r3/v5.0.gemfile.example: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + gemfiles/modular/erb/r4/v5.0.gemfile.example: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + gemfiles/modular/erb/vHEAD.gemfile.example: ad6f104a49e80e0cf625440e3dc816343fe7e2f037fc4971df75e7bb4305c683 + gemfiles/modular/json/truffleruby_22_3.gemfile.example: 249c12eacbe90f9d0d2e81e7a62c4c7e9102e504ededcda4ecf660cb3bb68be4 + gemfiles/modular/json/truffleruby_23_0.gemfile.example: 66aa010567f7afa1af8244a74c3c88ecaaf84dc87b6a25180691bb480d02ed28 + gemfiles/modular/json/truffleruby_23_1.gemfile.example: '080fcbdaf2bec73cad40832a3d51eebb380af789917b96f493d1460b0dd6361d' + gemfiles/modular/mutex_m/r2.4/v0.1.gemfile.example: '09728bdc10807b3ca9dd3b9f12986acbe8c40ac08ada438bcfd49cd69445c650' + gemfiles/modular/mutex_m/r2/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/r3/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/r4/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/vHEAD.gemfile.example: '08018641c97f894788fa91b462da504ab2237213d18d95404136c393274ae3cb' + gemfiles/modular/optional.gemfile.example: b45eb8ecde2902441c02b2f01d4aa8f79bff75c853ef92555c3201ee798d9e87 + gemfiles/modular/recording/r2.3/recording.gemfile.example: 154da539583c51ca78ff8affa7a7caaf7f354d321b5e748beb64de61ff72f80a + gemfiles/modular/recording/r2.4/recording.gemfile.example: 6d69381eb2f8be681c72e7a5a8b5d6ec6ee586da8ce51b9b39d845d2a87e4ecf + gemfiles/modular/recording/r2.5/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/r3/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/r4/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/vHEAD.gemfile.example: 7480fd116e9671972a2735d1d97050a4fd5754aa7abfab3d115bf9bebbca038c + gemfiles/modular/rspec.gemfile.example: d043f5c9344f6435edb4607c5adaf42c78e7fb6b8b6726007de2bbedefb376c3 + gemfiles/modular/runtime_heads.gemfile.example: f163201999bf68a942b1e5bcea506bfc4b9c59711ff502091eb215d5d5f8f658 + gemfiles/modular/shunted.gemfile.example: a54a86124eff06163497462012704f62a691daa224cebeac605cdd14cffacfbe + gemfiles/modular/stringio/r2.4/v0.0.2.gemfile.example: 6425ebcd70b2e782f4c1d9074f8685c1e93ca7bf371728ef7ebbc8b5ebdf491a + gemfiles/modular/stringio/r2/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/r3/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/r4/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/vHEAD.gemfile.example: e0497ab6dad9667b22725485b781e9d99349a079250eb29cb125d58f01f4a5be + gemfiles/modular/style.gemfile.example: a15db732f566d958c2459ef549ae3877d984df3d205116e714284d1fe4f9b068 + gemfiles/modular/style_local.gemfile.example: '0083605323d23879dc7223f0198e9f1db24a25fa38730c4dbcc71c7a8a4c307f' + gemfiles/modular/templating.gemfile.example: 6cedc39529daa9aac3a4cf13fe31a628b62a4a2428f5c4f8657c5a2fa027bb35 + gemfiles/modular/templating_local.gemfile.example: 16c0b51fd46b86db09268c8485b1d5a528e5f962b593f8ae7521b15209f7d1a5 + gemfiles/modular/webrick/r4/v1.9.gemfile.example: 1ee940ff54d5ca3ce7fcff0d82ee9553386979656b9e220d5be5404d0991d5ea + gemfiles/modular/webrick/vHEAD.gemfile.example: da545f591af987648ffbaba181707480a38dfb375db7d289617986ec2c2ca23b + gemfiles/modular/x_std_libs.gemfile.example: e3917e90717d7f9f4393d847549a78c53de7f6c8de52a7f590b34b515fd6111a + gemfiles/modular/x_std_libs/r2.3/libs.gemfile.example: 379ac2a3698615789e39dc18a961b9c793b2cc594856bb3163524a99fd4ac86f + gemfiles/modular/x_std_libs/r2.4/libs.gemfile.example: ccad8f592943481317c082ce8d340316b9e90a52463c8c1eea5c5109b23e8c3d + gemfiles/modular/x_std_libs/r2.6/libs.gemfile.example: 9af20396f404a32bf76d8999c7fdd112f0282ba331f71100ab093663b2ab5670 + gemfiles/modular/x_std_libs/r2/libs.gemfile.example: e80ec8ad06cb1b31ac982bc25cf7696987fca131aa1001eaefd0bf5cd379c273 + gemfiles/modular/x_std_libs/r3.1/libs.gemfile.example: 38068bd6a0f5d02918eb286af9bdbdf0c7cf7cf026486b9fd157b541b6153d58 + gemfiles/modular/x_std_libs/r3/libs.gemfile.example: 546f8849f4267bb19aa10ff0de40be30957197f229e6887847181ea9127b2650 + gemfiles/modular/x_std_libs/r4/libs.gemfile.example: 8c2582eaa218d216b98c86c933465295c8b4e43f3251ea388b9eaf6e471f8da6 + gemfiles/modular/x_std_libs/vHEAD.gemfile.example: d3133ec4c0638363a7fb025d19be7e95a615fd61c35ddb8d17f2280ee74a7486 + lib/gem/version.rb.example: 15e219ac3a928b5580035f891e415551213175020f1131f6e7ca0ccd55a1b2d6 + mise.toml.example: b2eb06f7daaf0c3916bba155f463e166bd1de218637ba82e636c528c077c8d6d + mise.toml.no-osc.example: 35ec90d3c67b74e0014876dccad14f5883fdad88036f6b0cf5d29ea181e132ac + parsers.toml.example: f0538ae7ad8596be2dc39b3ea663f1164dec21fb0457233c1885097e774aff6f + readme/partials/basic_usage.md.example: adaa8f9de9768d1f29cb15d957404004715e7687db68c29b121d6467db13158a + readme/partials/configuration.md.example: 5ad82bc7eaf05015d31cea9265173718abc1d92729b52e3856c8366aa54184e8 + readme/partials/synopsis.md.example: 2b7383f8261086da0995fbf2c10017b3f162723b32c324ae8c0e1c1a8d1c79ef + shim/.github/workflows/current.yml.example: c2a2a2053f2726276bb8571c8a76a4b97bcce6cd54bdca01cba63d713c3a0e2f + shim/.rspec.example: 0e3a2a1587779efc3eae8fe718a3480272fbdfb3f1f6c2f9c3901f6fd81b2cce + shim/.structuredmerge/kettle-jem.yml.example: 03faae6cfda3947ef8489008b4836aad3ca280e94ddf9d08ef733071d7daa167 + shim/CHANGELOG.md.example: 2c098802b9971c51796e34067d061adbc31fa443df96be8a1fc71fc84c262d0e + shim/Gemfile.example: 9583b19e04d7ab6f5b3ea7ebb0c5d24e6a71ae5d74404a510aa979642248ba34 + shim/README.md.example: 3a2f7211b7f92a1dfae5e523b8e34b051a3d8af942144b05286eca0b3c8f6fbe + shim/Rakefile.example: 572c94da7052083b39b62a6600785419e314a109efd7a3d8c3a96eb77ad34fd1 + shim/gem.gemspec.example: cabca9717af1a18991db1de856900494e2771b044f1d5bfd2ad71b2ed4a1367d + shim/lib/compat_require.rb.example: 94ee85e353a3ca08c8a35c9063d4ff789214ea594c7f803f6cf09d7142f48379 + shim/lib/entrypoint.rb.example: dd57613520daca01d6f6bcaa9b83b00ff74505240dc04b84ceb686df3c0539d7 + shim/lib/version.rb.example: 15e219ac3a928b5580035f891e415551213175020f1131f6e7ca0ccd55a1b2d6 + shim/spec/shim_spec.rb.example: '060013019bf39b8dc267169df83752661d02c7ad890b65a99a1d97137938edfd' + shim/spec/spec_helper.rb.example: 88e2ab0bd8888022a68e856e04f61053e238e54f51b428b386aaebf93ae8ad83 + sig/gem.rbs.example: 47a4f7e524cc6f773875b6c08691ca4d65c2b14618abd5b9b91055ae5b248cec + spec/spec_helper.rb.example: 0c8119bd75b90f3a2403789b68b539fd19952370051297b1807596e201ef4813 +files: + ".simplecov": + recipe: template_source_application_simplecov + action: write + dest_sha256: 80b953d53974291945b43322531bf628bb297c8863318bbab08213a09fa531a7 + input_fingerprint: 53fb3012757f7304f8b76bcef7798dbfa8ef9fcb0400ef73a870f829377ab52e + template_sources: + - ".simplecov.example" + AGPL-3.0-only.md: + recipe: template_source_application_AGPL_3_0_only_md + action: write + dest_sha256: d8a6cc31abc16b6748c7a21f21611f5a1ec33f67d22ca23d7da1c19b95496bee + input_fingerprint: 1dd1395922e591e2e22e825d6ca1ee97f5409799fca0d6a22d45fb9a30df2172 + template_sources: + - AGPL-3.0-only.md.example + Gemfile: + recipe: template_source_application_Gemfile + action: write + dest_sha256: b4d20725f6acb828ad79d5512664e7a3d69b0e3611a7314b4befbc02af2d807f + input_fingerprint: 135075e7e09bbc822dd55fd6ffcc490dce769b3ef2094dcdcca538790c06c349 + template_sources: + - Gemfile.example + LICENSE.md: + recipe: template_source_application_LICENSE_md + action: write + dest_sha256: f6188bfd474a636d2a526420ebb411250faa447d94c9b9ccee097128ce4101b5 + input_fingerprint: 753a2a286bffba90c644502cbc48032720389f073d6924a9b04b04e0a081909c + template_sources: + - LICENSE.md.example + PolyForm-Small-Business-1.0.0.md: + recipe: template_source_application_PolyForm_Small_Business_1_0_0_md + action: write + dest_sha256: 2f81e317d36f83a199c9fa10bcb250775fd90510303eaeb15aac2d8f0c1fc2d6 + input_fingerprint: 862375f949880d0a32a438ad69f5c8a3d78ea49cf3594d8097e01cceb6c0c3aa + template_sources: + - PolyForm-Small-Business-1.0.0.md.example + README.md: + recipe: template_source_application_README_md + action: write + dest_sha256: 87b0fe5322f561324c494953c6fa7bb546c12b97bf398df9154566e87a7b6fd0 + input_fingerprint: 3e309424e74d2d7e4edba7f21cd06d739947bf66dba6d8a2d02ef1676c2295f2 + template_sources: + - README.md.example + ast-crispr-ruby-prism.gemspec: + recipe: template_source_application_ast_crispr_ruby_prism_gemspec + action: write + dest_sha256: 31d48e002c1721a6c98905f7c7b0ee6b36a099106bb9882f7e79f56095f3dd5b + input_fingerprint: d8161d48d5902b38de6372fbb7041f6f042b710f95445ce0c4b9712c142506e9 + template_sources: + - gem.gemspec.example + certs/pboling.pem: + recipe: template_source_application_certs_pboling_pem + action: write + dest_sha256: 18956f60643666cc181e2743b3b3691bec08c5326f514f60af54d0cdb9ebc554 + input_fingerprint: 17c163a72777a32e522e3d15b22df1481f3a94184cf0054126464dd3101e4a68 + template_sources: + - certs/pboling.pem.example + gemfiles/modular/benchmark/r4/v0.5.gemfile: + recipe: template_source_application_gemfiles_modular_benchmark_r4_v0_5_gemfile + action: write + dest_sha256: 5bc3190090ae456df1a8cce28dd47a7fb293495f6d845ec7e53a7a8b50f14ae1 + input_fingerprint: dcd4bf91abba7692f5583703c7cb444c72c44a6c8961325f61c714f4d8819b59 + template_sources: + - gemfiles/modular/benchmark/r4/v0.5.gemfile.example + gemfiles/modular/benchmark/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_benchmark_vHEAD_gemfile + action: write + dest_sha256: ca6cd52c55c3082759c6ddc97638970f12d953aec1822470823d316086aa6e25 + input_fingerprint: c4ed3ffad8302e0050be2b177210138e73c411ea464cd453c0fe15bed1725421 + template_sources: + - gemfiles/modular/benchmark/vHEAD.gemfile.example + gemfiles/modular/cgi/r4/v0.5.gemfile: + recipe: template_source_application_gemfiles_modular_cgi_r4_v0_5_gemfile + action: write + dest_sha256: c2d14a39377a2435419ceaca22a3421ebd899e9cba943df8a90b576a33624870 + input_fingerprint: 7086f135f63749f7847adced43980a5395c6407e81fa631b17e4f72c60fd2c4b + template_sources: + - gemfiles/modular/cgi/r4/v0.5.gemfile.example + gemfiles/modular/cgi/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_cgi_vHEAD_gemfile + action: write + dest_sha256: 9ff3dc789b3279642876c0aad4b0094c1139bb8fbbf36daab804d3b2b3a60b43 + input_fingerprint: 6f47959ab8da8be103ad5eaf487111b57428691e402172418ab337ca19210ecf + template_sources: + - gemfiles/modular/cgi/vHEAD.gemfile.example + gemfiles/modular/coverage.gemfile: + recipe: template_source_application_gemfiles_modular_coverage_gemfile + action: write + dest_sha256: 915fc161ad574fdbc071bc733b69b27e94bd7a4c68cc4f58da267c9a0987f3e8 + input_fingerprint: 45661d403200a67e80f6663c09bd1ccccb67ba26f25eb2eef8c81368d5762dda + template_sources: + - gemfiles/modular/coverage.gemfile.example + gemfiles/modular/coverage_local.gemfile: + recipe: template_source_application_gemfiles_modular_coverage_local_gemfile + action: write + dest_sha256: b38fed20d0ce0b7894a8e757bc4a740c891c1d7a65c32138af885dfe1f8ecefd + input_fingerprint: da1ed7530ce7edb137acc6b69fd7233ece372f93ba30bf1540ef103c34dbb4c8 + template_sources: + - gemfiles/modular/coverage_local.gemfile.example + gemfiles/modular/debug.gemfile: + recipe: template_source_application_gemfiles_modular_debug_gemfile + action: write + dest_sha256: 0a508bfb02e51b75394b43f4f09d98174dac36ead41cba09c1f730671a1f5905 + input_fingerprint: aa6b7c28988adfbe117c49a568eae7f5e1e2298bc57c3782d29ff73b71f28874 + template_sources: + - gemfiles/modular/debug.gemfile.example + gemfiles/modular/documentation.gemfile: + recipe: template_source_application_gemfiles_modular_documentation_gemfile + action: write + dest_sha256: e15f51e4d14ad2216b6de16c323787945bd225073d70a78420f4c99c98c1ecd1 + input_fingerprint: 07dd2d26072e488cba443fe3c072a531aef87f5e59c30faed92b2f093158153b + template_sources: + - gemfiles/modular/documentation.gemfile.example + gemfiles/modular/documentation_local.gemfile: + recipe: template_source_application_gemfiles_modular_documentation_local_gemfile + action: write + dest_sha256: b38e442d259409c31b29037340365e7cdc19e2a68b625094bb2d25ddab10baae + input_fingerprint: f09ca3410fcdc096c72fa055dc5a7aa9a8e5f54ce88890a5d7080e12081cf4a3 + template_sources: + - gemfiles/modular/documentation_local.gemfile.example + gemfiles/modular/erb/r2/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r2_v3_0_gemfile + action: write + dest_sha256: 3793e7dc9ef23a7ccd893d48cbba092fd27594c63e65cca011cc658218425670 + input_fingerprint: 4e30b3da981bd40943522fe01c39545412f76d46bd071a1d78d477004a946c45 + template_sources: + - gemfiles/modular/erb/r2/v3.0.gemfile.example + gemfiles/modular/erb/r3/v5.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r3_v5_0_gemfile + action: write + dest_sha256: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + input_fingerprint: 8ab5ad3d6b2ae61cb504fc862c76922727016478a6395a991da866305fb58a2d + template_sources: + - gemfiles/modular/erb/r3/v5.0.gemfile.example + gemfiles/modular/erb/r4/v5.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r4_v5_0_gemfile + action: write + dest_sha256: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + input_fingerprint: 9b8b3c976e5e824005db5ec9bb69886c81ace924e29aad3733a14b9e9e9d8fd7 + template_sources: + - gemfiles/modular/erb/r4/v5.0.gemfile.example + gemfiles/modular/erb/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_erb_vHEAD_gemfile + action: write + dest_sha256: ad6f104a49e80e0cf625440e3dc816343fe7e2f037fc4971df75e7bb4305c683 + input_fingerprint: f8f6ea88639ff59eab88d3f7ae77db3f65a00fe72e5cdadaa52360520ed9dab6 + template_sources: + - gemfiles/modular/erb/vHEAD.gemfile.example + gemfiles/modular/json/truffleruby_22_3.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_22_3_gemfile + action: write + dest_sha256: 249c12eacbe90f9d0d2e81e7a62c4c7e9102e504ededcda4ecf660cb3bb68be4 + input_fingerprint: 81af1ffb37b6e8ece71753e01682261b08b5bee670782cf14832d26cf6e6ab2a + template_sources: + - gemfiles/modular/json/truffleruby_22_3.gemfile.example + gemfiles/modular/json/truffleruby_23_0.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_23_0_gemfile + action: write + dest_sha256: 66aa010567f7afa1af8244a74c3c88ecaaf84dc87b6a25180691bb480d02ed28 + input_fingerprint: 0b04cb72d5c8527fe4ee404c38353cfc6b4c595e732cf332bdc90384ce7a68b0 + template_sources: + - gemfiles/modular/json/truffleruby_23_0.gemfile.example + gemfiles/modular/json/truffleruby_23_1.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_23_1_gemfile + action: write + dest_sha256: '080fcbdaf2bec73cad40832a3d51eebb380af789917b96f493d1460b0dd6361d' + input_fingerprint: a466d7222c71d65d708edd05e15f3e604d70a592719e93a1f718a3293f3e2eeb + template_sources: + - gemfiles/modular/json/truffleruby_23_1.gemfile.example + gemfiles/modular/mutex_m/r2/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r2_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: bcf071724dbd3a91f6065dddcba3770f16603484f0f7bbccb39d824ee39ccd65 + template_sources: + - gemfiles/modular/mutex_m/r2/v0.3.gemfile.example + gemfiles/modular/mutex_m/r3/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r3_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: 787fe9a568b0e538040355f4d6d8a48c78f4c4c45a687e20afcda0028a8ab958 + template_sources: + - gemfiles/modular/mutex_m/r3/v0.3.gemfile.example + gemfiles/modular/mutex_m/r4/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r4_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: 47329ba303909e658dcaf978abbb2628fda3733a5d06cd7dd2b217c58ad66fe3 + template_sources: + - gemfiles/modular/mutex_m/r4/v0.3.gemfile.example + gemfiles/modular/mutex_m/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_vHEAD_gemfile + action: write + dest_sha256: '08018641c97f894788fa91b462da504ab2237213d18d95404136c393274ae3cb' + input_fingerprint: 8afd9af47d8a6b29b4a553928836509866081656634148428081d24f85f149e1 + template_sources: + - gemfiles/modular/mutex_m/vHEAD.gemfile.example + gemfiles/modular/optional.gemfile: + recipe: template_source_application_gemfiles_modular_optional_gemfile + action: write + dest_sha256: f770e6e9a9dd2bd0f1f132e882d88038b2e21127dce3afe270908c7338c28bfd + input_fingerprint: f51e52e6a6ca893212e79bf586a770a9436407c887615404dbfcb44ce77af5f9 + template_sources: + - gemfiles/modular/optional.gemfile.example + gemfiles/modular/rspec.gemfile: + recipe: template_source_application_gemfiles_modular_rspec_gemfile + action: write + dest_sha256: d043f5c9344f6435edb4607c5adaf42c78e7fb6b8b6726007de2bbedefb376c3 + input_fingerprint: 1cfc3372460d3a73b183db1c5e2d9bf3046d1ac7fc59fb4ead9e4e607c9e852d + template_sources: + - gemfiles/modular/rspec.gemfile.example + gemfiles/modular/runtime_heads.gemfile: + recipe: template_source_application_gemfiles_modular_runtime_heads_gemfile + action: write + dest_sha256: 6ac7158c4a3088190f2a9082f01439eb27eca2172ab3464b15c9cb045aa885e1 + input_fingerprint: 351df5431e1cedcb0e71927b9b32590e8c7eff0342b4000b6bfac50b2d89b306 + template_sources: + - gemfiles/modular/runtime_heads.gemfile.example + gemfiles/modular/stringio/r2/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r2_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: b5b06e1049bd397c8ec2588a69887f509d3af914ffd29c09cb73096f1bdb7aff + template_sources: + - gemfiles/modular/stringio/r2/v3.0.gemfile.example + gemfiles/modular/stringio/r3/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r3_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: 3250f4d2781a0ca0851c6e33d747ffcbe15fc169ce3e94f36ee9302150d66f04 + template_sources: + - gemfiles/modular/stringio/r3/v3.0.gemfile.example + gemfiles/modular/stringio/r4/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r4_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: 0bad24f0b88e814ce06362b590ba79b9013278d0ba6fd60a046f29b11584a8f2 + template_sources: + - gemfiles/modular/stringio/r4/v3.0.gemfile.example + gemfiles/modular/stringio/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_vHEAD_gemfile + action: write + dest_sha256: e0497ab6dad9667b22725485b781e9d99349a079250eb29cb125d58f01f4a5be + input_fingerprint: 27fbb541ab074a1d6cbbbdc873138f98029e51ebb4ce6d1b3b76f619ac191df4 + template_sources: + - gemfiles/modular/stringio/vHEAD.gemfile.example + gemfiles/modular/style.gemfile: + recipe: template_source_application_gemfiles_modular_style_gemfile + action: write + dest_sha256: 071066457ce6081cbc03d10d777f741b84019071c78e45c23889f13658a0a4a6 + input_fingerprint: b017ff62d228823df548c9e5a3aa03413ff739df632c2ac247c2720218a66b94 + template_sources: + - gemfiles/modular/style.gemfile.example + gemfiles/modular/style_local.gemfile: + recipe: template_source_application_gemfiles_modular_style_local_gemfile + action: write + dest_sha256: 2cf90662c0ca1511be2dbabfc6e52c2d64706c75a4047192ce10c33600821d11 + input_fingerprint: 4e47e2bdcc425539007b9793d70e7c939e22d5ae91946649c591f7d24389a1c2 + template_sources: + - gemfiles/modular/style_local.gemfile.example + gemfiles/modular/templating.gemfile: + recipe: template_source_application_gemfiles_modular_templating_gemfile + action: write + dest_sha256: 6cedc39529daa9aac3a4cf13fe31a628b62a4a2428f5c4f8657c5a2fa027bb35 + input_fingerprint: 8bbc738885ba7cc9c21dad61950b31a15a68ce2dd7efee94a2524707948390ed + template_sources: + - gemfiles/modular/templating.gemfile.example + gemfiles/modular/templating_local.gemfile: + recipe: template_source_application_gemfiles_modular_templating_local_gemfile + action: write + dest_sha256: 2ae1950f25958cde2aeade14ca169d25bf4ecd486cfeb9c8fe881c224af305ad + input_fingerprint: 4b1763323b4b16a9aae00ac932b857a17676d564fb46a264de4090715958c8fe + template_sources: + - gemfiles/modular/templating_local.gemfile.example + gemfiles/modular/webrick/r4/v1.9.gemfile: + recipe: template_source_application_gemfiles_modular_webrick_r4_v1_9_gemfile + action: write + dest_sha256: 1ee940ff54d5ca3ce7fcff0d82ee9553386979656b9e220d5be5404d0991d5ea + input_fingerprint: ee4cdbf00bee409a14c52b5b29ddf9a4c110ca89f0e197c9fc2ae4722085c9c1 + template_sources: + - gemfiles/modular/webrick/r4/v1.9.gemfile.example + gemfiles/modular/webrick/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_webrick_vHEAD_gemfile + action: write + dest_sha256: da545f591af987648ffbaba181707480a38dfb375db7d289617986ec2c2ca23b + input_fingerprint: a393282a49020c260c0c07400b63e40562b7a5b2d174610226c414f13255215a + template_sources: + - gemfiles/modular/webrick/vHEAD.gemfile.example + gemfiles/modular/x_std_libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_gemfile + action: write + dest_sha256: e3917e90717d7f9f4393d847549a78c53de7f6c8de52a7f590b34b515fd6111a + input_fingerprint: 2735fba198db7f0348202f4f0da896ad3ffd2cda22067c8a87300d3b28afc116 + template_sources: + - gemfiles/modular/x_std_libs.gemfile.example + gemfiles/modular/x_std_libs/r2/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r2_libs_gemfile + action: write + dest_sha256: e80ec8ad06cb1b31ac982bc25cf7696987fca131aa1001eaefd0bf5cd379c273 + input_fingerprint: 36eea04e2428f66a5d59881dfe654cc5cbb010e9b15b6e9f868d6dae32741439 + template_sources: + - gemfiles/modular/x_std_libs/r2/libs.gemfile.example + gemfiles/modular/x_std_libs/r3/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r3_libs_gemfile + action: write + dest_sha256: 546f8849f4267bb19aa10ff0de40be30957197f229e6887847181ea9127b2650 + input_fingerprint: 334e0baa1413dc75fb77ac18e1724a406f8a7d9a38ebd7b78446b5f07e423784 + template_sources: + - gemfiles/modular/x_std_libs/r3/libs.gemfile.example + gemfiles/modular/x_std_libs/r4/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r4_libs_gemfile + action: write + dest_sha256: 8c2582eaa218d216b98c86c933465295c8b4e43f3251ea388b9eaf6e471f8da6 + input_fingerprint: 55181ff59d77a643331430500d0f0c283d6f4e55e9c1ef160ab742377b9d4eb3 + template_sources: + - gemfiles/modular/x_std_libs/r4/libs.gemfile.example + gemfiles/modular/x_std_libs/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_vHEAD_gemfile + action: write + dest_sha256: d3133ec4c0638363a7fb025d19be7e95a615fd61c35ddb8d17f2280ee74a7486 + input_fingerprint: ae1b5b2f67f0a282e091a7dafd52f04a705518fae1267c990989921b361a12fc + template_sources: + - gemfiles/modular/x_std_libs/vHEAD.gemfile.example + lib/ast/crispr/ruby/prism/version.rb: + recipe: template_source_application_lib_ast_crispr_ruby_prism_version_rb + action: write + dest_sha256: 6d8b52a7c47103337de5be098b8afd0f6ca0ea04f5ccff61ec1332deceef3cea + input_fingerprint: 9b3eb48665df93e9d486f9fab22d5fa6451617797c6d98f69464e19972800847 + template_sources: + - lib/gem/version.rb.example + sig/ast/crispr/ruby/prism.rbs: + recipe: template_source_application_sig_ast_crispr_ruby_prism_rbs + action: write + dest_sha256: 557ce194cb22954d85f6c7356a5a1ef1706641a97952ad43fddefefeb4f8f3ee + input_fingerprint: 6764e2a866ff2a65e7d48f3cc8546ab97e1269ec77f7c785368c2ef9ac43994e + template_sources: + - sig/gem.rbs.example + spec/spec_helper.rb: + recipe: template_source_application_spec_spec_helper_rb + action: write + dest_sha256: 72c8bd0ac16e86f3df13a0e5986b5bd2442f6061ee455eb467aa723c4fa5f616 + input_fingerprint: 86eaa39222054f1fac0dd38f0601499bbdcfad2b63d568137327330b67469b01 + template_sources: + - spec/spec_helper.rb.example diff --git a/gems/ast-crispr-ruby-prism/Gemfile b/gems/ast-crispr-ruby-prism/Gemfile index 66e4af466..a6243a13a 100644 --- a/gems/ast-crispr-ruby-prism/Gemfile +++ b/gems/ast-crispr-ruby-prism/Gemfile @@ -19,8 +19,7 @@ git_source(:gitlab) { |repo_name| "https://gitlab.com/#{repo_name}" } gemspec # Local workspace dependency wiring for *_local.gemfile overrides -nomono_requirements = ['~> 1.0', '>= 1.0.8'] -gem 'nomono', *nomono_requirements, require: false # ruby >= 2.2 +gem 'nomono', '~> 1.1', '>= 1.1.0', require: false # ruby >= 3.2.0 # Direct sibling dependencies (env-switched via STRUCTUREDMERGE_DEV) direct_sibling_gems = %w[ diff --git a/gems/ast-crispr-ruby-prism/Gemfile.lock b/gems/ast-crispr-ruby-prism/Gemfile.lock index 6a9a61958..2c3a87859 100644 --- a/gems/ast-crispr-ruby-prism/Gemfile.lock +++ b/gems/ast-crispr-ruby-prism/Gemfile.lock @@ -82,8 +82,8 @@ GEM bundler (>= 1.14) version_gem (~> 1.1, >= 1.1.4) geom2d (0.4.1) - gitmoji-regex (2.0.4) - version_gem (~> 1.1, >= 1.1.13) + gitmoji-regex (2.0.6) + version_gem (~> 1.1, >= 1.1.14) hexapdf (1.9.1) cmdparse (~> 3.0, >= 3.0.3) geom2d (~> 0.4, >= 0.4.1) @@ -96,20 +96,29 @@ GEM rdoc (>= 4.0.0) reline (>= 0.4.2) json (2.21.1) - kettle-dev (2.3.9) + kettle-dev (2.4.5) emoji_regex (>= 15.0) + kettle-gha-pins (~> 0.3, >= 0.3.1) + kettle-ndjson (~> 0.1, >= 0.1.1) kettle-rb (~> 0.1, >= 0.1.2) - kettle-test (~> 2.0, >= 2.0.4) + kettle-test (~> 2.0, >= 2.0.12) ruby-progressbar (~> 1.13) + tty-progressbar (~> 0.18) + kettle-gha-pins (0.3.1) + ruby-progressbar (~> 1.13) + tty-progressbar (~> 0.18) + version_gem (~> 1.1, >= 1.1.14) + kettle-ndjson (0.1.1) + version_gem (~> 1.1, >= 1.1.14) kettle-rb (0.1.5) - kettle-soup-cover (3.0.4) + kettle-soup-cover (3.0.5) kettle-wash (~> 0.1, >= 0.1.0) simplecov (>= 1.0) simplecov-cobertura (>= 4.0) simplecov-console (~> 0.9, >= 0.9.5) simplecov-rcov (~> 0.3, >= 0.3.7) simplecov_lcov_formatter (~> 0.9, >= 0.9.0) - kettle-test (2.0.12) + kettle-test (2.0.15) appraisal2 (~> 3.0, >= 3.0.6) backports (~> 3.0) rspec (~> 3.0) @@ -130,8 +139,18 @@ GEM lint_roller (1.1.0) logger (1.7.0) mutex_m (0.3.0) + nokogiri (1.19.4-aarch64-linux-gnu) + racc (~> 1.4) + nokogiri (1.19.4-aarch64-linux-musl) + racc (~> 1.4) + nokogiri (1.19.4-arm64-darwin) + racc (~> 1.4) + nokogiri (1.19.4-x86_64-darwin) + racc (~> 1.4) nokogiri (1.19.4-x86_64-linux-gnu) racc (~> 1.4) + nokogiri (1.19.4-x86_64-linux-musl) + racc (~> 1.4) nomono (1.1.0) openssl (4.0.2) ostruct (0.6.3) @@ -190,11 +209,11 @@ GEM rspec-mocks (3.13.8) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) - rspec-pending_for (0.1.21) + rspec-pending_for (0.1.22) rspec-core (~> 3.0) ruby_engine (~> 2.0) ruby_version (~> 1.0) - rspec-stubbed_env (1.0.6) + rspec-stubbed_env (1.0.8) rspec-support (3.13.7) rspec_junit_formatter (0.6.0) rspec-core (>= 2, < 4, != 2.12.0) @@ -296,7 +315,7 @@ GEM silent_stream (1.0.12) logger (~> 1.2) version_gem (>= 1.1.8, < 3) - simplecov (1.0.2) + simplecov (1.0.3) simplecov-cobertura (4.0.0) rexml simplecov (~> 1.0) @@ -308,7 +327,7 @@ GEM simplecov (>= 0.4.1) simplecov_lcov_formatter (0.9.0) simplecov (>= 0.18) - sorbet-runtime (0.6.13351) + sorbet-runtime (0.6.13363) standard (1.56.0) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.0) @@ -332,9 +351,9 @@ GEM standard-custom (~> 1.0, >= 1.0.2) standard-performance (~> 1.9, >= 1.9.0) version_gem (~> 1.1, >= 1.1.13) - stone_checksums (1.0.6) - version_gem (~> 1.1, >= 1.1.13) + stone_checksums (1.0.7) stringio (3.2.0) + strings-ansi (0.2.0) strscan (3.1.8) terminal-table (4.0.0) unicode-display_width (>= 1.1.1, < 4) @@ -352,16 +371,27 @@ GEM parslet (~> 2.0) tree_sitter_language_pack (>= 1.13.2, < 2.0) version_gem (~> 1.1, >= 1.1.9) - tree_sitter_language_pack (1.13.3-x86_64-linux) + tree_sitter_language_pack (1.13.4-aarch64-linux) + sorbet-runtime (~> 0.5) + tree_sitter_language_pack (1.13.4-arm64-darwin) + sorbet-runtime (~> 0.5) + tree_sitter_language_pack (1.13.4-x86_64-darwin) + sorbet-runtime (~> 0.5) + tree_sitter_language_pack (1.13.4-x86_64-linux) sorbet-runtime (~> 0.5) tsort (0.2.0) - turbo_tests2 (3.2.0) + tty-cursor (0.7.1) + tty-progressbar (0.18.3) + strings-ansi (~> 0.2) + tty-cursor (~> 0.7) + tty-screen (~> 0.8) + unicode-display_width (>= 1.6, < 3.0) + tty-screen (0.8.2) + turbo_tests2 (3.2.3) parallel_tests (>= 3.3.0, < 6) rspec (>= 3.10) version_gem (~> 1.1, >= 1.1.14) - unicode-display_width (3.2.0) - unicode-emoji (~> 4.1) - unicode-emoji (4.2.0) + unicode-display_width (2.6.0) version_gem (1.1.14) webrick (1.9.2) yaml-converter (0.2.3) @@ -379,6 +409,9 @@ GEM ostruct rainbow yard + yard-lint (1.10.2) + yard (~> 0.9) + zeitwerk (~> 2.6) yard-relative_markdown_links (0.6.0) nokogiri (>= 1.14.3, < 2) yard-timekeeper (0.2.4) @@ -390,7 +423,13 @@ GEM zlib (3.2.3) PLATFORMS + aarch64-linux + aarch64-linux-gnu + aarch64-linux-musl + arm64-darwin + x86_64-darwin x86_64-linux-gnu + x86_64-linux-musl DEPENDENCIES addressable (>= 2.8, < 3) @@ -406,12 +445,12 @@ DEPENDENCIES gitmoji-regex (~> 2.0, >= 2.0.0) irb (~> 1.17) kettle-dev (~> 2.0, >= 2.2.25) - kettle-soup-cover (~> 3.0, >= 3.0.3) + kettle-soup-cover (~> 3.0, >= 3.0.5) kettle-test (~> 2.0, >= 2.0.9) kramdown (~> 2.5, >= 2.5.2) kramdown-parser-gfm (~> 1.1) mutex_m (~> 0.2) - nomono (~> 1.0, >= 1.0.8) + nomono (~> 1.1, >= 1.1.0) rake (~> 13.0) rbs (>= 3.0) rdoc (~> 6.11) @@ -434,6 +473,7 @@ DEPENDENCIES yard (~> 0.9, >= 0.9.45) yard-fence (~> 0.9, >= 0.9.6) yard-junk (~> 0.1, >= 0.1.0) + yard-lint (~> 1.10, >= 1.10.2) yard-relative_markdown_links (~> 0.6) yard-timekeeper (~> 0.2, >= 0.2.4) yard-yaml (~> 0.2, >= 0.2.3) @@ -472,15 +512,17 @@ CHECKSUMS erb (6.0.6) sha256=a9b24986700f5bf127c4f297c5403c3ca41b83b0a316c0cd09a096b56e644ae5 gem_bench (2.0.5) sha256=0dc0fb44a5a5eb7b2f5c1c68a5b0164d72007132822c012bac3abe976b199ead geom2d (0.4.1) sha256=ea0998ea90c4f2752e24fe13d85a4f89bee689d151316140ebcc6369bf634ed9 - gitmoji-regex (2.0.4) sha256=01410d3217940bd0e7b2299ec805245afe8d0f06a5d6d38f623d63a63c0ac34f + gitmoji-regex (2.0.6) sha256=d50649caccc8ad1b080f01e869f0909b135206d8b3ece2313ca31a9b0e39f14b hexapdf (1.9.1) sha256=2d1f6a3622e6bc2a70a707d4c3f3fa44f5552ecd9d899f6283abb07398a84884 io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc irb (1.18.0) sha256=de9454a0703a54704b9811a5ef31a60c86949fbf4013fcf244fabc7c775248e3 json (2.21.1) sha256=13a43df75d95641443f5702dff350f237164a9d811ff0f2c2800d4d980220583 - kettle-dev (2.3.9) sha256=03b2f72c6dda4d2c4401ee3c0c96853116c922766e7b5b04224434a49b571bfc + kettle-dev (2.4.5) sha256=3a451940796a671b7adc910db7c3da87899ebec7c5274921ca598345549ae7eb + kettle-gha-pins (0.3.1) sha256=b13a82a403af31880288fe65f85f2a24a93ae4740c0c7cbc15a35044d27aaa51 + kettle-ndjson (0.1.1) sha256=2d84314e8c911d6f560f2736e8f72019df6d811829674788ff33b3bbf518ed66 kettle-rb (0.1.5) sha256=0322a569860c86e70f90d5ebe72353b8720b7054c7efa9f9044857f5c972d29f - kettle-soup-cover (3.0.4) sha256=36d4df472362d2020d16411d7ce26ba2fe2a41fb8be64577ff9b5280acf99d86 - kettle-test (2.0.12) sha256=3a8e5c5f38db03a6f0a8896da6f3576d24e36f53796578c19aafaa2ba5a8ea52 + kettle-soup-cover (3.0.5) sha256=80abb42eb294fa5d3c8632c259a297c554fbc01902714461f3bf99a65190f5d0 + kettle-test (2.0.15) sha256=993b132ffec17fe82cc81c69f876e15d6eb610a4831df08dc01c0cce5c070caa kettle-wash (0.1.1) sha256=ae2e08b64c72c46ceed5ffa197ed859e85352f38ed0412fca2e18ce29b2dc4f9 kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa kramdown-parser-gfm (1.1.0) sha256=fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729 @@ -488,7 +530,12 @@ CHECKSUMS lint_roller (1.1.0) sha256=2c0c845b632a7d172cb849cc90c1bce937a28c5c8ccccb50dfd46a485003cc87 logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203 mutex_m (0.3.0) sha256=cfcb04ac16b69c4813777022fdceda24e9f798e48092a2b817eb4c0a782b0751 + nokogiri (1.19.4-aarch64-linux-gnu) sha256=1269fb644a6de405057a53dd5c762b1209b43ca7424f839454d3dbc677c31a8f + nokogiri (1.19.4-aarch64-linux-musl) sha256=35c65b9ce72b3bb03207bdbe7067915019dc18c1b9b59139684bd6690fdd01af + nokogiri (1.19.4-arm64-darwin) sha256=a46db9853286e6597b36ebc6953817d15acf3a299583eb3f89fdc6f91dd63527 + nokogiri (1.19.4-x86_64-darwin) sha256=7fd17057d3e1f00e9954a74b3cd76595d3d4a5ef233b7ed9599047c204f70551 nokogiri (1.19.4-x86_64-linux-gnu) sha256=379fae440b28915e3f19d752ce2dcf8465ed2b2fbefd2a7ca0dd497bc981a06a + nokogiri (1.19.4-x86_64-linux-musl) sha256=17dfb7c1fa194ae02fbf7c51a7afc8d278045ab3fdacfd86f91d02d7b274470b nomono (1.1.0) sha256=463dd4c79da02a855739a1b5483190d527b7868688be905e84abdb3449b32c88 openssl (4.0.2) sha256=1037ad2868ae58df9ad917891c0c0f9815a1172f6846d4bcdd508e4c2ee747c2 ostruct (0.6.3) sha256=95a2ed4a4bd1d190784e666b47b2d3f078e4a9efda2fccf18f84ddc6538ed912 @@ -517,8 +564,8 @@ CHECKSUMS rspec-core (3.13.6) sha256=a8823c6411667b60a8bca135364351dda34cd55e44ff94c4be4633b37d828b2d rspec-expectations (3.13.5) sha256=33a4d3a1d95060aea4c94e9f237030a8f9eae5615e9bd85718fe3a09e4b58836 rspec-mocks (3.13.8) sha256=086ad3d3d17533f4237643de0b5c42f04b66348c28bf6b9c2d3f4a3b01af1d47 - rspec-pending_for (0.1.21) sha256=c87fda50c20f8faca72d9cfa6a936abffd37860343f14aced95bbb29b8ae96bf - rspec-stubbed_env (1.0.6) sha256=6467a6eb0f72146d443ffb0c5a2a549d8812e59c04fbc81e03cd914ebf1f28dc + rspec-pending_for (0.1.22) sha256=49dc647473f8c8ea4ccc1a33813537dd94b913ef7ec5a8689896101eaacb71cf + rspec-stubbed_env (1.0.8) sha256=b23c4dd5e5d6a0cf0c5b4f6ed3f3678d78e4be9ec247ea9abf0669d20b490535 rspec-support (3.13.7) sha256=0640e5570872aafefd79867901deeeeb40b0c9875a36b983d85f54fb7381c47c rspec_junit_formatter (0.6.0) sha256=40dde674e6ae4e6cc0ff560da25497677e34fefd2338cc467a8972f602b62b15 rubocop (1.88.2) sha256=8def251c90cd955feb4daa3edc0ab56893250c4ce90ef81e6c80c03f9a939bbf @@ -544,39 +591,46 @@ CHECKSUMS ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33 ruby_engine (2.0.3) sha256=ca2ae7def8cfcdc2bfb6a186d36d5d59c8b403245dc0256c3802b767fa278aaa ruby_version (1.0.3) sha256=5930f9950746b7e6c973184398ee364ee7440b170fef7922b9f5cdf317f1ccb5 - service_actor (3.9.4) sha256=e63b523630b9a7e62959b2a90113b08d2565b5de9c148557b281ef847c9539ce + service_actor (3.9.4) silent_stream (1.0.12) sha256=377c43aa10033fe90c33b39ea8cd97d79f2d1c4856df598efc56f3091f3ae782 - simplecov (1.0.2) sha256=c6459434efe4b948b46477cc2df2faa73ab365f83a33c7c17f81262f4f7f1244 + simplecov (1.0.3) sha256=38ef0514f16ae7562f0d0f4df02610071115103d301b6de7dacbcc000082e39b simplecov-cobertura (4.0.0) sha256=e4fb3159b1ecea545b44f5452a8611305323e78ad23eae8aed35924d072e01ea simplecov-console (0.9.5) sha256=b1108bcfff5f210143e2b8301698c367b01586f20d25a73e95475a5df6fc6ff6 simplecov-rcov (0.3.7) sha256=372f50bf6df6b6350b7d0c840f2f8bdabe021861a43c26877b747c9ac96139fc simplecov_lcov_formatter (0.9.0) sha256=4c1839bb31dcf7a8f7a6474c94ed228aa03b994e9dd5e1965e58b4121b049bed - sorbet-runtime (0.6.13351) sha256=f8fee17c6e3edf835dc6823d26afb9a7c8969c6710d1fabe2fb43f4e0c15c64f + sorbet-runtime (0.6.13363) sha256=f1f0b2e946fb3cd76b9d8e3d85459cdaf7f5466331a400cafcf008e508b6d2c3 standard (1.56.0) sha256=ae2af4d9669589162ac69ed5ef59dcf9f346d4afc81f7e62b84339310dfcb787 standard-custom (1.0.2) sha256=424adc84179a074f1a2a309bb9cf7cd6bfdb2b6541f20c6bf9436c0ba22a652b standard-performance (1.9.0) sha256=49483d31be448292951d80e5e67cdcb576c2502103c7b40aec6f1b6e9c88e3f2 standard-rspec (0.5.0) sha256=64d396524a65af47f5331b423d8cdd313e0267401647bb7892489ca89dad2973 standard-rubocop-lts (2.0.10) sha256=89708a505b7d8b24d2ac399a7520fcb9e764abc2ecb4289b631b5fe0e3b76617 - stone_checksums (1.0.6) sha256=c775f830513d6c6ab26e31d1a5fbecd4c4e39002663d4d9f8fa96e97990b5298 + stone_checksums (1.0.7) sha256=faf7a175da7c4f32777c5292a0128b06eec183b3cc3a0b382529b21800300626 stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1 + strings-ansi (0.2.0) sha256=90262d760ea4a94cc2ae8d58205277a343409c288cbe7c29416b1826bd511c88 strscan (3.1.8) sha256=aae2db611a225559f21ffbb71765c9a4e60fd262534a9ea84f4f11c7f32f679e terminal-table (4.0.0) sha256=f504793203f8251b2ea7c7068333053f0beeea26093ec9962e62ea79f94301d2 thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73 timecop (0.9.11) sha256=41284dc6e5041f2184f781ace766f942108c842f8d8c1386a26e6343decc7542 timecop-rspec (1.0.3) sha256=005f14841bb606dcaefb060e321b5388e2e59537742bee8b3a9a9a40e598fab9 - token-resolver (2.0.5) sha256=b852f924287ffb58a440856e862b056c8ad97e74b4b2526cee43e0771f40c25c + token-resolver (2.0.5) tree_haver (7.1.0) - tree_sitter_language_pack (1.13.3-x86_64-linux) sha256=1ffd045bd236ea54f58c5872ee66121d01033359c1f28f375b7fd4a4b5620cf9 + tree_sitter_language_pack (1.13.4-aarch64-linux) sha256=f7bb95fd59afda1e1b91a7b6ad4df244c585a863e94e4a0f492ef2336a5358b8 + tree_sitter_language_pack (1.13.4-arm64-darwin) sha256=2b48ded1f5feae3de20be1471aaa7c211601ac1c71ca6d4789cf31560a854132 + tree_sitter_language_pack (1.13.4-x86_64-darwin) sha256=8a2460d9029e7610b863d2481e2da0078f87b18bf8668070ccb5ecce71e272d8 + tree_sitter_language_pack (1.13.4-x86_64-linux) sha256=ae3ae718534088b2dc76bd93e7d093f11e8d19188bf47edfcd962df906e1af97 tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f - turbo_tests2 (3.2.0) sha256=8b35421548399d1923567b177970f42671c65695b93cdd134d78fbcbab85dff0 - unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42 - unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f + tty-cursor (0.7.1) sha256=79534185e6a777888d88628b14b6a1fdf5154a603f285f80b1753e1908e0bf48 + tty-progressbar (0.18.3) sha256=6cbb4260e55e74a9180d502143eb6a467d2c8e51bf5f3c9509fb5cacc3d4a5f6 + tty-screen (0.8.2) sha256=c090652115beae764336c28802d633f204fb84da93c6a968aa5d8e319e819b50 + turbo_tests2 (3.2.3) sha256=f77fc0799014c1d7890977e117cf39317bc4544de2c88a55149ed920b4cff942 + unicode-display_width (2.6.0) sha256=12279874bba6d5e4d2728cef814b19197dbb10d7a7837a869bab65da943b7f5a version_gem (1.1.14) sha256=6b7306c7e9416d06067561981ab3444e2cecb844f26cc325ae3c27b44cf85613 webrick (1.9.2) sha256=beb4a15fc474defed24a3bda4ffd88a490d517c9e4e6118c3edce59e45864131 yaml-converter (0.2.3) sha256=d35e69e547610d9e347672cc277fcb7d71dff3c53a942e66f82b1c64022ada72 yard (0.9.45) sha256=52e211493f7cb8a3ebf7e104a25a1e73937a3103092545d34cb88fafebb3dc51 yard-fence (0.9.6) sha256=3d1dbf4e3df462ac78b8bd2e01cf740a2de20168387c929aca31a0bcee490659 yard-junk (0.1.0) sha256=e85fe2ec1afa47313decd333447b53458cb1ed49b510b70015fdc3041a94bcdd + yard-lint (1.10.2) sha256=3e595709d088a8cc827e706a4146b447eb6a907ee375d06c11077369d00717f6 yard-relative_markdown_links (0.6.0) sha256=3e5ffa85cbad9bac70bee5421774b190fb25d3bdf489323a5b3534f647d1a70e yard-timekeeper (0.2.4) sha256=62f8d001d737c6e2ac688e7b37386f958dceb0f6aff9c909575e1bec8d20775a yard-yaml (0.2.3) sha256=fe5fef18819e1cbd05bb8f1b9e1baad6bf70c28125eb75b57bbf6397b0831812 diff --git a/gems/ast-crispr-ruby-prism/bin/kettle-gha-pins b/gems/ast-crispr-ruby-prism/bin/kettle-gha-pins new file mode 100755 index 000000000..c743cecac --- /dev/null +++ b/gems/ast-crispr-ruby-prism/bin/kettle-gha-pins @@ -0,0 +1,16 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# +# This file was generated by Bundler. +# +# The application 'kettle-gha-pins' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) + +require 'rubygems' +require 'bundler/setup' + +load Gem.bin_path('kettle-gha-pins', 'kettle-gha-pins') diff --git a/gems/ast-crispr-ruby-prism/gemfiles/modular/coverage.gemfile b/gems/ast-crispr-ruby-prism/gemfiles/modular/coverage.gemfile index b93014b6b..b4c26a504 100644 --- a/gems/ast-crispr-ruby-prism/gemfiles/modular/coverage.gemfile +++ b/gems/ast-crispr-ruby-prism/gemfiles/modular/coverage.gemfile @@ -7,7 +7,7 @@ if ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false').zero? # Coverage (remote/released) platform :mri do - gem 'kettle-soup-cover', '~> 3.0', '>= 3.0.3', require: false + gem 'kettle-soup-cover', '~> 3.0', '>= 3.0.5', require: false end else eval_gemfile 'coverage_local.gemfile' diff --git a/gems/ast-crispr-ruby-prism/gemfiles/modular/coverage_local.gemfile b/gems/ast-crispr-ruby-prism/gemfiles/modular/coverage_local.gemfile index 1c618d554..9bae84c74 100644 --- a/gems/ast-crispr-ruby-prism/gemfiles/modular/coverage_local.gemfile +++ b/gems/ast-crispr-ruby-prism/gemfiles/modular/coverage_local.gemfile @@ -17,7 +17,8 @@ platform :mri do path_env: 'KETTLE_DEV_DEV', vendored_gems_env: 'VENDORED_GEMS', vendor_gem_dir_env: 'VENDOR_GEM_DIR', - debug_env: 'KETTLE_DEV_DEBUG' + debug_env: 'KETTLE_DEV_DEBUG', + root: %w[src my kettle-dev] ) if ENV.fetch('GALTZO_FLOSS_DEV', 'false').casecmp('false') != 0 diff --git a/gems/ast-crispr-ruby-prism/gemfiles/modular/documentation.gemfile b/gems/ast-crispr-ruby-prism/gemfiles/modular/documentation.gemfile index 9d4535f12..d0f4d4a76 100644 --- a/gems/ast-crispr-ruby-prism/gemfiles/modular/documentation.gemfile +++ b/gems/ast-crispr-ruby-prism/gemfiles/modular/documentation.gemfile @@ -12,6 +12,7 @@ gem 'kramdown-parser-gfm', '~> 1.1', require: false # Ruby >= 2.3 gem 'yaml-converter', '~> 0.2', '>= 0.2.3', require: false # Ruby >= 3.2 gem 'yard', '~> 0.9', '>= 0.9.45', require: false gem 'yard-junk', '~> 0.1', '>= 0.1.0', require: false # Ruby >= 3.1 +gem 'yard-lint', '~> 1.10', '>= 1.10.2', require: false # Ruby >= 3.2 gem 'yard-relative_markdown_links', '~> 0.6', require: false if ENV.fetch('GALTZO_FLOSS_DEV', 'false').casecmp('false').zero? diff --git a/gems/ast-crispr-ruby-prism/gemfiles/modular/templating.gemfile b/gems/ast-crispr-ruby-prism/gemfiles/modular/templating.gemfile index a672de184..a7e6c1f06 100644 --- a/gems/ast-crispr-ruby-prism/gemfiles/modular/templating.gemfile +++ b/gems/ast-crispr-ruby-prism/gemfiles/modular/templating.gemfile @@ -12,7 +12,7 @@ end if kettle_remote # Template/plugin checks for released installs. - gem 'kettle-drift', '~> 1.0', '>= 1.0.6', require: false + gem 'kettle-drift', '~> 1.0', '>= 1.0.7', require: false end # Set STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local development with path-based dependencies. diff --git a/gems/ast-crispr-ruby-prism/gemfiles/modular/templating_local.gemfile b/gems/ast-crispr-ruby-prism/gemfiles/modular/templating_local.gemfile index d961394fd..cfcdeb0b1 100644 --- a/gems/ast-crispr-ruby-prism/gemfiles/modular/templating_local.gemfile +++ b/gems/ast-crispr-ruby-prism/gemfiles/modular/templating_local.gemfile @@ -65,7 +65,8 @@ platform :mri do path_env: 'KETTLE_DEV_DEV', vendored_gems_env: 'VENDORED_GEMS', vendor_gem_dir_env: 'VENDOR_GEM_DIR', - debug_env: 'KETTLE_DEV_DEBUG' + debug_env: 'KETTLE_DEV_DEBUG', + root: %w[src my kettle-dev] ) end end diff --git a/gems/ast-crispr-ruby-prism/lib/ast/crispr/ruby/prism/version.rb b/gems/ast-crispr-ruby-prism/lib/ast/crispr/ruby/prism/version.rb index 8ba5a3151..150152736 100644 --- a/gems/ast-crispr-ruby-prism/lib/ast/crispr/ruby/prism/version.rb +++ b/gems/ast-crispr-ruby-prism/lib/ast/crispr/ruby/prism/version.rb @@ -4,9 +4,12 @@ module Ast module Crispr module Ruby module Prism + # Version namespace for this gem. module Version + # Current gem version. VERSION = '7.1.0' end + # Current gem version exposed at the traditional constant location. VERSION = Version::VERSION # Traditional Constant Location end end diff --git a/gems/ast-crispr/.kettle-drift.lock b/gems/ast-crispr/.kettle-drift.lock deleted file mode 100644 index 25b4603d6..000000000 --- a/gems/ast-crispr/.kettle-drift.lock +++ /dev/null @@ -1,208 +0,0 @@ -{ - "(direct_sibling_local ||\nENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)": [ - { - "file": "Gemfile", - "lines": [ - 79, - 119, - 159 - ] - } - ], - ".find { |spec| spec.name == 'nomono' }\nnomono_locked = nomono_locked_spec &&": [ - { - "file": "Gemfile", - "lines": [ - 90, - 130, - 170 - ] - } - ], - "ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)\ndirect_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')": [ - { - "file": "Gemfile", - "lines": [ - 80, - 120, - 160 - ] - } - ], - "Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)\nnomono_activation_requirements = [\"= #{nomono_locked_spec.version}\"] if nomono_locked": [ - { - "file": "Gemfile", - "lines": [ - 92, - 132, - 172 - ] - } - ], - "Kernel.send(:gem, 'nomono', *nomono_activation_requirements)\nrequire 'nomono/bundler'": [ - { - "file": "Gemfile", - "lines": [ - 95, - 135, - 175 - ] - } - ], - "direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')\ndirect_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)": [ - { - "file": "Gemfile", - "lines": [ - 81, - 121, - 161 - ] - } - ], - "eval_nomono_gems(\ngems: direct_sibling_gems,": [ - { - "file": "Gemfile", - "lines": [ - 59, - 99, - 139, - 179 - ] - } - ], - "gems: direct_sibling_gems,\nprefix: 'STRUCTUREDMERGE',": [ - { - "file": "Gemfile", - "lines": [ - 100, - 140, - 180 - ] - } - ], - "if File.file?(nomono_lockfile)\nnomono_locked_spec = Bundler::LockfileParser": [ - { - "file": "Gemfile", - "lines": [ - 42, - 86, - 126, - 166 - ] - } - ], - "if direct_sibling_dev_was_set\nENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original": [ - { - "file": "Gemfile", - "lines": [ - 109, - 149, - 189 - ] - } - ], - "if direct_sibling_gems.any? &&\n(direct_sibling_local ||": [ - { - "file": "Gemfile", - "lines": [ - 34, - 78, - 118, - 158 - ] - } - ], - "if direct_sibling_templating && !direct_sibling_local\nif direct_sibling_dev_was_set": [ - { - "file": "Gemfile", - "lines": [ - 68, - 108, - 148, - 188 - ] - } - ], - "nomono_activation_requirements = nomono_requirements\nnomono_lockfile = File.expand_path('Gemfile.lock', __dir__)": [ - { - "file": "Gemfile", - "lines": [ - 84, - 124, - 164 - ] - } - ], - "nomono_locked = nomono_locked_spec &&\nGem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)": [ - { - "file": "Gemfile", - "lines": [ - 47, - 91, - 131, - 171 - ] - } - ], - "nomono_locked_spec = Bundler::LockfileParser\n.new(Bundler.read_file(nomono_lockfile))": [ - { - "file": "Gemfile", - "lines": [ - 43, - 87, - 127, - 167 - ] - } - ], - "nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)\nif File.file?(nomono_lockfile)": [ - { - "file": "Gemfile", - "lines": [ - 85, - 125, - 165 - ] - } - ], - "path_env: 'STRUCTUREDMERGE_DEV',\nroot: %w[src my structuredmerge]": [ - { - "file": "Gemfile", - "lines": [ - 102, - 142, - 182 - ] - } - ], - "prefix: 'STRUCTUREDMERGE',\npath_env: 'STRUCTUREDMERGE_DEV',": [ - { - "file": "Gemfile", - "lines": [ - 101, - 141, - 181 - ] - } - ], - "require 'nomono/bundler'\nENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local": [ - { - "file": "Gemfile", - "lines": [ - 96, - 136, - 176 - ] - } - ], - "rescue LoadError\nwarn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'": [ - { - "file": "Gemfile", - "lines": [ - 105, - 145, - 185 - ] - } - ] -} diff --git a/gems/ast-crispr/.structuredmerge/kettle-jem.lock b/gems/ast-crispr/.structuredmerge/kettle-jem.lock new file mode 100644 index 000000000..43bcc1034 --- /dev/null +++ b/gems/ast-crispr/.structuredmerge/kettle-jem.lock @@ -0,0 +1,527 @@ +--- +version: 1 +template_state: + version: 7.1.0 + applied_at: '2026-07-26' + changelog_replay: + last_entry_key: kettle-jem-template-20260726-002 + last_entry_date: '2026-07-26' + checksums: + ".aiignore.example": 48a5dfdd93afd1a15fdce39cc28ca9920263f00018b0968ab031fa744521e5ce + ".config/mise/env.sh": aeea5a2ab489ba6e5467ae8de6e386ec8c8fe4ff31a044e69d0cd6a092dd6654 + ".devcontainer/apt-install/devcontainer-feature.json.example": 273a07f9d3926e1b6287c37709a469ee05d724cfedae62ad3b0cd8c09befc9ec + ".devcontainer/apt-install/install.sh.example": b61e020b60ca172bb7b658e63c9cd4342e49bda0531a6b19b36475e515ad20b0 + ".devcontainer/devcontainer.json.example": 4a80d471379b9720cc65cc89543cbbc0a7be87b188a818160296577c4e87606f + ".devcontainer/scripts/setup-tree-sitter.sh.example": c34f48d7bac8561fb780c4c7a81cec5004c3ac0edc11f229799ec9a4e3eccd54 + ".env.local.example": 35cb867e8bacb75252a85c29f78899b36d0d1843511ae1ba1fbc7da863b128b3 + ".envrc.example": b7232f4bae0fb399cc9c9cdc4a5eb694bd69623aeeadcbab18c9990e443040a1 + ".envrc.no-osc.example": b7232f4bae0fb399cc9c9cdc4a5eb694bd69623aeeadcbab18c9990e443040a1 + ".gemrc.example": 77b1c36ae6f91bedf08b99e662a971b02f7e66e0d65267805d068d30ff118aba + ".git-hooks/commit-msg.example": d858575bf70d6175fdd7656e9ba0b41672de3fb49163181efe3fbc9e40306024 + ".git-hooks/commit-subjects-goalie.txt.example": bb1179c8911af8afeb1f9a604b3de789d4a4b33d9d4a7743b3145998c15b0a94 + ".git-hooks/footer-template.erb.txt.example": 70ed3616ee04a4062126f53892cc255e7aa2b66741fe22d6b372f7df99676718 + ".git-hooks/prepare-commit-msg.example": 35266ead46a6385d20eeff7ec64afedef33a2db18d1238b8662a1bc758f05335 + ".github/.codecov.yml.example": d6ef3208a90eca74f79d8ff4e5ae21a915562b075cb17978b1eaadc231dd4e85 + ".github/FUNDING.yml.example": fd27dff7db58f4e8a39c35ccb60e39422517038501a5f2a99ef2aaeea2d1fa5d + ".github/FUNDING.yml.no-osc.example": 8f1a867b1921b3dec1c63f7a7cd629362c1fb1ad0d1052494b48ba746b0fc5c6 + ".github/copilot_instructions.md.example": f5c5791df013e89e170fd436379b14e251d0ff4cb6b330a6d961e80c9071f2d3 + ".github/dependabot.yml.example": db84d1c13f64100d2f48212c022f0d985e9061ca76c36d82e7057fd845ecd528 + ".github/workflows/auto-assign.yml.example": 57b8159a15bf49946506e1b624934feed6a1cc8f71ad68968323c87acac56c67 + ".github/workflows/coverage.yml.example": 524ef90e0fd2ca0b846c464197d8d43cd6a57834303c9526ea0bd277f2beb3e1 + ".github/workflows/current.yml.example": dbc82e7593804c05d2c217d5c02d79d5480b5a0d1e04eea99b7235f35f520216 + ".github/workflows/dep-heads.yml.example": d94122f3246e17774fa015dde8d9a5772a66e54f817d44e62716f6a61d899050 + ".github/workflows/dependency-review.yml.example": a895d52257a7112d796fabf349ced1079bed93e81e3aa9cb088f9af3f44d1e5f + ".github/workflows/discord-notifier.yml.example": f9cc83a87058bd420426444510a1dd1520fd7cc15af50832ad52c25c5766be94 + ".github/workflows/framework-ci.yml.example": 112ef6178fcf115fe9e0a248ec6cb4af748ce89142fd7dba30e9abb6ebdc17be + ".github/workflows/heads.yml.example": aa55cf9bb4ae35fe126384003e8af4b91e685bcf370263b3710bd429f6c44343 + ".github/workflows/jruby-10.0.yml.example": 0eaf6d10c304de606684d420bbd88cfc90fe9d139a56773e011c6abaa6c5fc91 + ".github/workflows/jruby-9.1.yml.example": 9062f9de8843da1f8c4da8f991bbd24f9540c63927deaf311649f3088a672d5b + ".github/workflows/jruby-9.2.yml.example": f330363fc0af7dd0be24c140c919c07737a3168c5647012e34ba0c36634005e5 + ".github/workflows/jruby-9.3.yml.example": 3b26b3a978d0018f01e6d87651936f2e92fcb58d62bcdf11822eca3c2656d303 + ".github/workflows/jruby-9.4.yml.example": a830b92838a09b9316a81745b48ff35bed9461783154fc6d0e52df0d6aa319f3 + ".github/workflows/jruby.yml.example": f10f779cd3be37d2ffa593d9a83ba68a8684bb849ed1c4d9ae41706ff12571e1 + ".github/workflows/license-eye.yml.example": 23db5d6ee9b5382de1f2042642219d65214e09c3f975c418d4dec4d46375036c + ".github/workflows/locked_deps.yml.example": c7eaa20cc7d7de6209e576274e592ffb4838177ae6ab56096b2439d0fa1bc31c + ".github/workflows/opencollective.yml.example": fe7d8d346f9ab055b6779abf62972291460d05275e2c4d191e291e8cd73b0e6b + ".github/workflows/ruby-2.3.yml.example": 90474f1a462edc877983b91dd40d942e82b28262f1afdca74cddcdd52d7e8c26 + ".github/workflows/ruby-2.4.yml.example": fe84af4efef6934d7ff63efa2a4c85994f2ea1887f61b1ab5d30a21365429ec9 + ".github/workflows/ruby-2.5.yml.example": c40db157514168442311191ebc88853dfb36447a90171a73f42d435e92d02f05 + ".github/workflows/ruby-2.6.yml.example": 87bb8537d0047217651a327353df670fed3ea9e4a5350e965ed80af9ce32d9d3 + ".github/workflows/ruby-2.7.yml.example": 5650ec41bc67553457019a772a3343578872749d21268d5e7fb1715ebf4e2351 + ".github/workflows/ruby-3.0.yml.example": f9d7c7dfc6eaea1ca12c92e0b98b4ba8fed5726d26459bb410ab9812a741e5b9 + ".github/workflows/ruby-3.1.yml.example": e44879cd3ea47d00e44e573745d7f95fc1a561a9c1d69d72529d0c07294bd26e + ".github/workflows/ruby-3.2.yml.example": c28b9179778157e6b4807a775968840ff1c6bf2fd847ce1ce694b9a77df42f6e + ".github/workflows/ruby-3.3.yml.example": 033e4f0ed7ded17f5d13fde6674ec9fd555cfe58c11f57f7dc2f1fee21c718b6 + ".github/workflows/ruby-3.4.yml.example": 474a96468f101b8fddac4cecaa0629f28d5ceec0c784329affdc471eb1e3e889 + ".github/workflows/style.yml.example": dea7243a91dc164a172e90b7933de58cdd353d7e5df1beac22cec63125edc086 + ".github/workflows/templating.yml.example": 327b933509e1ade4d53df5756f6407028b479c51847775db494fb9c25e66ce5a + ".github/workflows/truffle.yml.example": 56fa53dc206976c81db7cc3530f4d19d89ea5859c1245492e5a5ecb9304de63e + ".github/workflows/truffleruby-22.3.yml.example": d6773529e6961039b5cc4a145c77623881aa3857d875bbb415ca0f8147166d7a + ".github/workflows/truffleruby-23.0.yml.example": abcd23a18d748528f7558d4ab7bc4830796cb686ca7371f67a8ddaf6d0362d72 + ".github/workflows/truffleruby-23.1.yml.example": 11af8a3f0823ed3ab17e759d81b8a4551eb7af8096ce0b5a9501fd83cada1cd2 + ".github/workflows/truffleruby-24.2.yml.example": 2c4ff82eeaa3bdb19391f04cd2f41b07733986a053d5ac8498176fef5f890e5e + ".github/workflows/truffleruby-25.0.yml.example": 42cdfdcd21c7b3bb1b87c22c2bc7a98135a442742df5f9a45e2b4e03838c1e7f + ".github/workflows/truffleruby-33.0.yml.example": 2a45e428ca13dac56ee75526b80eac477b61697ca06c94680e1eb05d21dbc25a + ".github/workflows/unlocked_deps.yml.example": 15f5ccbe811aa5a8650c2aa69b32f4f6a24d5f8bd3aae2dcbec92cbe3a51f0a7 + ".gitignore.example": 14864a0c88be3f8c122ab3032efeb782ba5e035013231038acf746a400437a3e + ".gitlab-ci.yml.example": ef64afa9855ebb59bbc87446fa9533238d3ce180966ceb19649a7f165715b92b + ".idea/.gitignore.example": b44a5aa16bf9fe5635558af347454b05a76d600084308a9f43d4d0b54789ecab + ".licenserc.yaml.example": 8787fa7bddce911f8ba47bda3eb6ad9786b6650d5d94786723e88773098ed37d + ".opencollective.yml.example": 9ad9b83fe54f0bddac7fb614575585d98f78df0e181ee70a7acd0168d26e3142 + ".qlty/qlty.toml.example": cf3d750d2328f6c057b08b7ce3d7ec00a4056c7f0eedda59af321d6caca03553 + ".rspec.example": 40d3f3ff435b0f9e5863772a95df8725b939c2dc11aead2bca68dcd6d85a9788 + ".rubocop.example": 591e4b45430e85b0dd460cc11c70650912fa2734988420b934109d06a749344f + ".rubocop.yml.example": 47f9a031022db67c964dd76ee2e8dfee21295a1877ca4d6233d3de39d114af73 + ".rubocop_rspec.yml.example": 288ad75e7eb14d87d80fafe6f7272217be5c57547536ee56c780a7d10ac7ec74 + ".simplecov.example": ffc76492effe905cc65797389fc8050fda136652ac078a80303cd084b349ef28 + ".structuredmerge/git-drivers.toml.example": 9d241a44c9edffcdbd3da018fa188a238089c3d1635040924df594a6929a4f97 + ".structuredmerge/kettle-jem.yml.example": 954cfc9e35cd20e46376426675e985bf8a0de19ff5069bf7be24b574837be615 + ".yard-lint.yml.example": 90def46867c9436b4e177c47d91fc8165f4602e335715aecc39f5587ae20b55b + ".yardignore.example": 821f453c609df7d46145d675424b39dfbe6dfdca8edac5f367b85fff48502455 + ".yardopts.example": 6fd6f2701713096a8a9ea095c213bbc68eeef37797c4754d97837e3229a3a5f6 + AGENTS.md.example: aec69512cbe17004660ac0abfabb9ec91a5c51c2cd82c10f30f08886f9bf64a7 + AGPL-3.0-only.md.example: d8a6cc31abc16b6748c7a21f21611f5a1ec33f67d22ca23d7da1c19b95496bee + Appraisal.root.gemfile.example: 8724e3f6faea995be655ac49369bec64a70710112b1f65707fa38f1fd2fd3254 + Appraisals.example: 9cb1abcfb1a0bd6d859ca0705efb874dbe546754c8c71f9f95025ff6817f1471 + Big-Time-Public-License.md.example: b0c02a112c9eee0ed69f05fd8f22277a2f8bc62d447b6cb75d6df560e05bf431 + CHANGELOG.md.example: 73459e50dad34d84db88844c993d975097557bdf5229e101b0d1339de6f98ffc + CHANGELOG.transfer.md: 9c201849117c9d4234724c4599643dd42fdce5f0a673a1abee97b97e556c301b + CITATION.cff.example: e404ea0a7919d78a83d53d80e211d17b9663576aa606583b709795dc023fd75c + CODE_OF_CONDUCT.md.example: f1ad532f1860f73ef774c6b27a26d41f4bc1cb8813034f5957487766ebb0986b + CONTRIBUTING.md.example: 63d339848c615f2c181d6b0565c42e56371eedb66f310d146cb7da297f7bc641 + FUNDING.md.example: 455bbb2b55d934283a2e7c16b59c321116c53310a85a718b7cf8ca44e9e3721e + FUNDING.md.no-osc.example: 05a85d5faf22d5ea5721622d242080447cf318d3277d9d529e438be1c9d5a351 + Gemfile.example: 6b2d72ec8a630cce515b7b528022071b13eee863c3164763df03792a5004345a + IRP.md.example: 85d8887d9b0e77f7fa9835ca5b9be31f586fdc94764ed1819af2a9a7fec98e96 + LICENSE.md.example: 120edf5f23173ebbdb5ad384ffc2e9b97e62aa6d0e61b733c003bd4db1b08276 + MIT.md.example: 365fce2a82f9d258ada9a527accfd5754b406ee9cdd8f8ed86bbec64b8c42ab2 + PolyForm-Noncommercial-1.0.0.md.example: ffcca38841adb694b6f380647e15f17c446a4d1656fed51a1e2041d064c94cc8 + PolyForm-Small-Business-1.0.0.md.example: 2f81e317d36f83a199c9fa10bcb250775fd90510303eaeb15aac2d8f0c1fc2d6 + README.md.example: 452446a44d120df26cde68fbc7aff086fa815769c989b994ebc1432ea927974f + REEK: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 + RUBOCOP.md.example: c09e5533ccc59b70a2efa05c99f66e521137c1053d3c12eb43509cebd5b68b0e + Rakefile.example: 569803e726b07ea26267fec6891367a3096a0dff3c266269a7081d36afe496af + SECURITY.md.example: ee9411aa85f36d88363fdaea7a1baea4362b6ec112cf2688e711b05de1d3144c + bin/setup.example: 0ac35089c95a91d8973fe7a318bf9fd98b9f8e00db92c5d9ca6cd858abb8d41b + certs/pboling.pem.example: 18956f60643666cc181e2743b3b3691bec08c5326f514f60af54d0cdb9ebc554 + gem.gemspec.example: 9989cc8a1cd125586ea807eaed549eaecc044711d31f17dd7bac2a0815b28b1a + gemfiles/modular/benchmark/r4/v0.5.gemfile.example: 5bc3190090ae456df1a8cce28dd47a7fb293495f6d845ec7e53a7a8b50f14ae1 + gemfiles/modular/benchmark/vHEAD.gemfile.example: ca6cd52c55c3082759c6ddc97638970f12d953aec1822470823d316086aa6e25 + gemfiles/modular/cgi/r4/v0.5.gemfile.example: c2d14a39377a2435419ceaca22a3421ebd899e9cba943df8a90b576a33624870 + gemfiles/modular/cgi/vHEAD.gemfile.example: 9ff3dc789b3279642876c0aad4b0094c1139bb8fbbf36daab804d3b2b3a60b43 + gemfiles/modular/coverage.gemfile.example: 915fc161ad574fdbc071bc733b69b27e94bd7a4c68cc4f58da267c9a0987f3e8 + gemfiles/modular/coverage_local.gemfile.example: 928d5f260d7b119c038baa56da9fb78dd524dee613aea33ab72894bbce5c506e + gemfiles/modular/debug.gemfile.example: 0a508bfb02e51b75394b43f4f09d98174dac36ead41cba09c1f730671a1f5905 + gemfiles/modular/documentation.gemfile.example: e15f51e4d14ad2216b6de16c323787945bd225073d70a78420f4c99c98c1ecd1 + gemfiles/modular/documentation_local.gemfile.example: 84a20f5d4b0feb94c2cf2f7a8dce8f682f1483498e41484c2b447a5661fd1870 + gemfiles/modular/erb/r2.3/default.gemfile.example: 9da0d08fb6a299b965c37fe85efcaebd9eb0a82b2ea35fdc157c41bd75431396 + gemfiles/modular/erb/r2.6/v2.2.gemfile.example: '01787cbdf7136c0d75cc7b734c6bb3d2ef6c70d6c1c50e7d0ad2112c0f8ef8e7' + gemfiles/modular/erb/r2/v3.0.gemfile.example: 3793e7dc9ef23a7ccd893d48cbba092fd27594c63e65cca011cc658218425670 + gemfiles/modular/erb/r3.1/v4.0.gemfile.example: bdf71ddcfe5001aab7d71b10a645a785928957ef7bae61d49307eb7f712279f3 + gemfiles/modular/erb/r3/v5.0.gemfile.example: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + gemfiles/modular/erb/r4/v5.0.gemfile.example: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + gemfiles/modular/erb/vHEAD.gemfile.example: ad6f104a49e80e0cf625440e3dc816343fe7e2f037fc4971df75e7bb4305c683 + gemfiles/modular/json/truffleruby_22_3.gemfile.example: 249c12eacbe90f9d0d2e81e7a62c4c7e9102e504ededcda4ecf660cb3bb68be4 + gemfiles/modular/json/truffleruby_23_0.gemfile.example: 66aa010567f7afa1af8244a74c3c88ecaaf84dc87b6a25180691bb480d02ed28 + gemfiles/modular/json/truffleruby_23_1.gemfile.example: '080fcbdaf2bec73cad40832a3d51eebb380af789917b96f493d1460b0dd6361d' + gemfiles/modular/mutex_m/r2.4/v0.1.gemfile.example: '09728bdc10807b3ca9dd3b9f12986acbe8c40ac08ada438bcfd49cd69445c650' + gemfiles/modular/mutex_m/r2/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/r3/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/r4/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/vHEAD.gemfile.example: '08018641c97f894788fa91b462da504ab2237213d18d95404136c393274ae3cb' + gemfiles/modular/optional.gemfile.example: b45eb8ecde2902441c02b2f01d4aa8f79bff75c853ef92555c3201ee798d9e87 + gemfiles/modular/recording/r2.3/recording.gemfile.example: 154da539583c51ca78ff8affa7a7caaf7f354d321b5e748beb64de61ff72f80a + gemfiles/modular/recording/r2.4/recording.gemfile.example: 6d69381eb2f8be681c72e7a5a8b5d6ec6ee586da8ce51b9b39d845d2a87e4ecf + gemfiles/modular/recording/r2.5/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/r3/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/r4/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/vHEAD.gemfile.example: 7480fd116e9671972a2735d1d97050a4fd5754aa7abfab3d115bf9bebbca038c + gemfiles/modular/rspec.gemfile.example: d043f5c9344f6435edb4607c5adaf42c78e7fb6b8b6726007de2bbedefb376c3 + gemfiles/modular/runtime_heads.gemfile.example: f163201999bf68a942b1e5bcea506bfc4b9c59711ff502091eb215d5d5f8f658 + gemfiles/modular/shunted.gemfile.example: a54a86124eff06163497462012704f62a691daa224cebeac605cdd14cffacfbe + gemfiles/modular/stringio/r2.4/v0.0.2.gemfile.example: 6425ebcd70b2e782f4c1d9074f8685c1e93ca7bf371728ef7ebbc8b5ebdf491a + gemfiles/modular/stringio/r2/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/r3/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/r4/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/vHEAD.gemfile.example: e0497ab6dad9667b22725485b781e9d99349a079250eb29cb125d58f01f4a5be + gemfiles/modular/style.gemfile.example: a15db732f566d958c2459ef549ae3877d984df3d205116e714284d1fe4f9b068 + gemfiles/modular/style_local.gemfile.example: '0083605323d23879dc7223f0198e9f1db24a25fa38730c4dbcc71c7a8a4c307f' + gemfiles/modular/templating.gemfile.example: 6cedc39529daa9aac3a4cf13fe31a628b62a4a2428f5c4f8657c5a2fa027bb35 + gemfiles/modular/templating_local.gemfile.example: 16c0b51fd46b86db09268c8485b1d5a528e5f962b593f8ae7521b15209f7d1a5 + gemfiles/modular/webrick/r4/v1.9.gemfile.example: 1ee940ff54d5ca3ce7fcff0d82ee9553386979656b9e220d5be5404d0991d5ea + gemfiles/modular/webrick/vHEAD.gemfile.example: da545f591af987648ffbaba181707480a38dfb375db7d289617986ec2c2ca23b + gemfiles/modular/x_std_libs.gemfile.example: e3917e90717d7f9f4393d847549a78c53de7f6c8de52a7f590b34b515fd6111a + gemfiles/modular/x_std_libs/r2.3/libs.gemfile.example: 379ac2a3698615789e39dc18a961b9c793b2cc594856bb3163524a99fd4ac86f + gemfiles/modular/x_std_libs/r2.4/libs.gemfile.example: ccad8f592943481317c082ce8d340316b9e90a52463c8c1eea5c5109b23e8c3d + gemfiles/modular/x_std_libs/r2.6/libs.gemfile.example: 9af20396f404a32bf76d8999c7fdd112f0282ba331f71100ab093663b2ab5670 + gemfiles/modular/x_std_libs/r2/libs.gemfile.example: e80ec8ad06cb1b31ac982bc25cf7696987fca131aa1001eaefd0bf5cd379c273 + gemfiles/modular/x_std_libs/r3.1/libs.gemfile.example: 38068bd6a0f5d02918eb286af9bdbdf0c7cf7cf026486b9fd157b541b6153d58 + gemfiles/modular/x_std_libs/r3/libs.gemfile.example: 546f8849f4267bb19aa10ff0de40be30957197f229e6887847181ea9127b2650 + gemfiles/modular/x_std_libs/r4/libs.gemfile.example: 8c2582eaa218d216b98c86c933465295c8b4e43f3251ea388b9eaf6e471f8da6 + gemfiles/modular/x_std_libs/vHEAD.gemfile.example: d3133ec4c0638363a7fb025d19be7e95a615fd61c35ddb8d17f2280ee74a7486 + lib/gem/version.rb.example: 15e219ac3a928b5580035f891e415551213175020f1131f6e7ca0ccd55a1b2d6 + mise.toml.example: b2eb06f7daaf0c3916bba155f463e166bd1de218637ba82e636c528c077c8d6d + mise.toml.no-osc.example: 35ec90d3c67b74e0014876dccad14f5883fdad88036f6b0cf5d29ea181e132ac + parsers.toml.example: f0538ae7ad8596be2dc39b3ea663f1164dec21fb0457233c1885097e774aff6f + readme/partials/basic_usage.md.example: adaa8f9de9768d1f29cb15d957404004715e7687db68c29b121d6467db13158a + readme/partials/configuration.md.example: 5ad82bc7eaf05015d31cea9265173718abc1d92729b52e3856c8366aa54184e8 + readme/partials/synopsis.md.example: 2b7383f8261086da0995fbf2c10017b3f162723b32c324ae8c0e1c1a8d1c79ef + shim/.github/workflows/current.yml.example: c2a2a2053f2726276bb8571c8a76a4b97bcce6cd54bdca01cba63d713c3a0e2f + shim/.rspec.example: 0e3a2a1587779efc3eae8fe718a3480272fbdfb3f1f6c2f9c3901f6fd81b2cce + shim/.structuredmerge/kettle-jem.yml.example: 03faae6cfda3947ef8489008b4836aad3ca280e94ddf9d08ef733071d7daa167 + shim/CHANGELOG.md.example: 2c098802b9971c51796e34067d061adbc31fa443df96be8a1fc71fc84c262d0e + shim/Gemfile.example: 9583b19e04d7ab6f5b3ea7ebb0c5d24e6a71ae5d74404a510aa979642248ba34 + shim/README.md.example: 3a2f7211b7f92a1dfae5e523b8e34b051a3d8af942144b05286eca0b3c8f6fbe + shim/Rakefile.example: 572c94da7052083b39b62a6600785419e314a109efd7a3d8c3a96eb77ad34fd1 + shim/gem.gemspec.example: cabca9717af1a18991db1de856900494e2771b044f1d5bfd2ad71b2ed4a1367d + shim/lib/compat_require.rb.example: 94ee85e353a3ca08c8a35c9063d4ff789214ea594c7f803f6cf09d7142f48379 + shim/lib/entrypoint.rb.example: dd57613520daca01d6f6bcaa9b83b00ff74505240dc04b84ceb686df3c0539d7 + shim/lib/version.rb.example: 15e219ac3a928b5580035f891e415551213175020f1131f6e7ca0ccd55a1b2d6 + shim/spec/shim_spec.rb.example: '060013019bf39b8dc267169df83752661d02c7ad890b65a99a1d97137938edfd' + shim/spec/spec_helper.rb.example: 88e2ab0bd8888022a68e856e04f61053e238e54f51b428b386aaebf93ae8ad83 + sig/gem.rbs.example: 47a4f7e524cc6f773875b6c08691ca4d65c2b14618abd5b9b91055ae5b248cec + spec/spec_helper.rb.example: 0c8119bd75b90f3a2403789b68b539fd19952370051297b1807596e201ef4813 +files: + ".simplecov": + recipe: template_source_application_simplecov + action: write + dest_sha256: c1286ab1ee75d21077b76b19a01d34cc3d3b3eace701822e172b527a4bc20d70 + input_fingerprint: fddfecc6b7255d743a4c31ee2581404968af70fb992a7b7ff976b5f8244afea8 + template_sources: + - ".simplecov.example" + AGPL-3.0-only.md: + recipe: template_source_application_AGPL_3_0_only_md + action: write + dest_sha256: d8a6cc31abc16b6748c7a21f21611f5a1ec33f67d22ca23d7da1c19b95496bee + input_fingerprint: 004ba9ac48c1927a617afec7bd4b3c418cd4680c9f017186ba793c5499924df8 + template_sources: + - AGPL-3.0-only.md.example + Gemfile: + recipe: template_source_application_Gemfile + action: write + dest_sha256: af80e4b0d9ecbd9c6cdcc575f89da0b72920aea4c2c49373c0083da72206e180 + input_fingerprint: 4415da7bffd91a56550f0ea7532b9645276a07c790aa1c9fa0f04728e8757507 + template_sources: + - Gemfile.example + LICENSE.md: + recipe: template_source_application_LICENSE_md + action: write + dest_sha256: f6188bfd474a636d2a526420ebb411250faa447d94c9b9ccee097128ce4101b5 + input_fingerprint: bda0beab5f64f516e7dab833b3fb62231166b98884a3f982b835f295bc66d144 + template_sources: + - LICENSE.md.example + PolyForm-Small-Business-1.0.0.md: + recipe: template_source_application_PolyForm_Small_Business_1_0_0_md + action: write + dest_sha256: 2f81e317d36f83a199c9fa10bcb250775fd90510303eaeb15aac2d8f0c1fc2d6 + input_fingerprint: cea164e7ede1ce53b274e7ab5d504cc08f55beb80e06ae693f77271bdee21029 + template_sources: + - PolyForm-Small-Business-1.0.0.md.example + README.md: + recipe: template_source_application_README_md + action: write + dest_sha256: 63b794902afbafc3aec2511937343bbbea0bc2e1be4f11d7e953d0add0e66694 + input_fingerprint: 12273b346f34dad3ce27f6a71fa9dec58a1dd6b1bdbce797df45390a46042eb6 + template_sources: + - README.md.example + ast-crispr.gemspec: + recipe: template_source_application_ast_crispr_gemspec + action: write + dest_sha256: 8952f2a7cbb59f16cc5d90299e1cbef41afecd175649123040a97e19ce2ec7dd + input_fingerprint: fe9bfb265eeb8137bcb692d5c86128ddb2365687838f452585525d0d7045b1e0 + template_sources: + - gem.gemspec.example + certs/pboling.pem: + recipe: template_source_application_certs_pboling_pem + action: write + dest_sha256: 18956f60643666cc181e2743b3b3691bec08c5326f514f60af54d0cdb9ebc554 + input_fingerprint: 29a83271d717c898975bf4e5a3ae186902fc50de729cee88598a6278bf0fd614 + template_sources: + - certs/pboling.pem.example + gemfiles/modular/benchmark/r4/v0.5.gemfile: + recipe: template_source_application_gemfiles_modular_benchmark_r4_v0_5_gemfile + action: write + dest_sha256: 5bc3190090ae456df1a8cce28dd47a7fb293495f6d845ec7e53a7a8b50f14ae1 + input_fingerprint: 4d7dce7f37698e7b6e357221378bf8f7f648da6a51c8477b705acdf857c47c37 + template_sources: + - gemfiles/modular/benchmark/r4/v0.5.gemfile.example + gemfiles/modular/benchmark/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_benchmark_vHEAD_gemfile + action: write + dest_sha256: ca6cd52c55c3082759c6ddc97638970f12d953aec1822470823d316086aa6e25 + input_fingerprint: f3442bc3e884d99c574d90db11f8c02c523b5cd7bef8cc49cd7799fdefbd0b93 + template_sources: + - gemfiles/modular/benchmark/vHEAD.gemfile.example + gemfiles/modular/cgi/r4/v0.5.gemfile: + recipe: template_source_application_gemfiles_modular_cgi_r4_v0_5_gemfile + action: write + dest_sha256: c2d14a39377a2435419ceaca22a3421ebd899e9cba943df8a90b576a33624870 + input_fingerprint: 8186f23c566cc131018411f39fb8cf5580eb2832b8ac36054a8fa3c50ff454aa + template_sources: + - gemfiles/modular/cgi/r4/v0.5.gemfile.example + gemfiles/modular/cgi/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_cgi_vHEAD_gemfile + action: write + dest_sha256: 9ff3dc789b3279642876c0aad4b0094c1139bb8fbbf36daab804d3b2b3a60b43 + input_fingerprint: 8baaa33239804a26ab741d9c72a47d22d12b9f9f1d92207d6e1adcad24e36f77 + template_sources: + - gemfiles/modular/cgi/vHEAD.gemfile.example + gemfiles/modular/coverage.gemfile: + recipe: template_source_application_gemfiles_modular_coverage_gemfile + action: write + dest_sha256: 915fc161ad574fdbc071bc733b69b27e94bd7a4c68cc4f58da267c9a0987f3e8 + input_fingerprint: 856a9daca45ba3603f2eb776336e2a371604b55515a4c53b2deb67475c76db89 + template_sources: + - gemfiles/modular/coverage.gemfile.example + gemfiles/modular/coverage_local.gemfile: + recipe: template_source_application_gemfiles_modular_coverage_local_gemfile + action: write + dest_sha256: 3373bda4449872b6077ce34ece8428d47235354ce730036de2215b53c0946782 + input_fingerprint: 74c3db38015e7bcc9ec540e75e571bc4b914993cef03a953512a89b43d3a2db9 + template_sources: + - gemfiles/modular/coverage_local.gemfile.example + gemfiles/modular/debug.gemfile: + recipe: template_source_application_gemfiles_modular_debug_gemfile + action: write + dest_sha256: 0a508bfb02e51b75394b43f4f09d98174dac36ead41cba09c1f730671a1f5905 + input_fingerprint: 90e43a7678920032700158fa341e8f09809a009076d41b03f95a2328987fe62b + template_sources: + - gemfiles/modular/debug.gemfile.example + gemfiles/modular/documentation.gemfile: + recipe: template_source_application_gemfiles_modular_documentation_gemfile + action: write + dest_sha256: e15f51e4d14ad2216b6de16c323787945bd225073d70a78420f4c99c98c1ecd1 + input_fingerprint: 6d4bb8cd8ec87535002ef321bec9bf4cec6e4dd7da9506981a47e96643fb321a + template_sources: + - gemfiles/modular/documentation.gemfile.example + gemfiles/modular/documentation_local.gemfile: + recipe: template_source_application_gemfiles_modular_documentation_local_gemfile + action: write + dest_sha256: e5c480908cafba82fadaa0911608fc4f171f960d3ce94573a2c5fc36954a639f + input_fingerprint: ed58438a2a92f78fde771c1fd71b8194ca0388900fab27f27e0c9a3a3dfb7e99 + template_sources: + - gemfiles/modular/documentation_local.gemfile.example + gemfiles/modular/erb/r2/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r2_v3_0_gemfile + action: write + dest_sha256: 3793e7dc9ef23a7ccd893d48cbba092fd27594c63e65cca011cc658218425670 + input_fingerprint: 4740a59143dd93aaf94bf359de7dc41d4e56eb33e518892e3cf4c1dee129a8f7 + template_sources: + - gemfiles/modular/erb/r2/v3.0.gemfile.example + gemfiles/modular/erb/r3/v5.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r3_v5_0_gemfile + action: write + dest_sha256: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + input_fingerprint: 6bf6541dd2e2192809ba982d6ef2b5a035f9a5e3cc2c83c0435dd336f1e1c89f + template_sources: + - gemfiles/modular/erb/r3/v5.0.gemfile.example + gemfiles/modular/erb/r4/v5.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r4_v5_0_gemfile + action: write + dest_sha256: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + input_fingerprint: dce58cd2d7b87bcd393b9f6834a38256f3cdcc8a9edf8993ae8f5767278e4a46 + template_sources: + - gemfiles/modular/erb/r4/v5.0.gemfile.example + gemfiles/modular/erb/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_erb_vHEAD_gemfile + action: write + dest_sha256: ad6f104a49e80e0cf625440e3dc816343fe7e2f037fc4971df75e7bb4305c683 + input_fingerprint: 0f02ee80819cb9835701780a749901c0f91174ba706c49a531f70b7742850733 + template_sources: + - gemfiles/modular/erb/vHEAD.gemfile.example + gemfiles/modular/json/truffleruby_22_3.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_22_3_gemfile + action: write + dest_sha256: 249c12eacbe90f9d0d2e81e7a62c4c7e9102e504ededcda4ecf660cb3bb68be4 + input_fingerprint: d76cb30a0ad1135f5f4c979324fa53d8945c829648cbbb1ea061d730d1174bd2 + template_sources: + - gemfiles/modular/json/truffleruby_22_3.gemfile.example + gemfiles/modular/json/truffleruby_23_0.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_23_0_gemfile + action: write + dest_sha256: 66aa010567f7afa1af8244a74c3c88ecaaf84dc87b6a25180691bb480d02ed28 + input_fingerprint: 414bdd7152ef6c88534d476d3029708e9b1ca036c945256a5466ba514f013175 + template_sources: + - gemfiles/modular/json/truffleruby_23_0.gemfile.example + gemfiles/modular/json/truffleruby_23_1.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_23_1_gemfile + action: write + dest_sha256: '080fcbdaf2bec73cad40832a3d51eebb380af789917b96f493d1460b0dd6361d' + input_fingerprint: 2d6efccddb752c44c372fb42fc7e9884b9350e6a61db81127a60a59caddd6823 + template_sources: + - gemfiles/modular/json/truffleruby_23_1.gemfile.example + gemfiles/modular/mutex_m/r2/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r2_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: f0123be2b9fcf08e79eadec263d1d51ef79235b4fb64fe82ae31a4c2de15aa67 + template_sources: + - gemfiles/modular/mutex_m/r2/v0.3.gemfile.example + gemfiles/modular/mutex_m/r3/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r3_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: 7b212b0947cf4b418e464ea0b76fa33c27c51029213f50bbc8d6dc2d4124e769 + template_sources: + - gemfiles/modular/mutex_m/r3/v0.3.gemfile.example + gemfiles/modular/mutex_m/r4/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r4_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: 411de4529f8ef99b332d92f149897353fa27871ab7ca67c06d28d2beb46c0880 + template_sources: + - gemfiles/modular/mutex_m/r4/v0.3.gemfile.example + gemfiles/modular/mutex_m/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_vHEAD_gemfile + action: write + dest_sha256: '08018641c97f894788fa91b462da504ab2237213d18d95404136c393274ae3cb' + input_fingerprint: 55e4a5db68a3e27efac069e658731ef34a4a1442a99981025303bb678b24730e + template_sources: + - gemfiles/modular/mutex_m/vHEAD.gemfile.example + gemfiles/modular/optional.gemfile: + recipe: template_source_application_gemfiles_modular_optional_gemfile + action: write + dest_sha256: f770e6e9a9dd2bd0f1f132e882d88038b2e21127dce3afe270908c7338c28bfd + input_fingerprint: bdfa128ff6cf879e8321ed50c068ea6b88c0fdf79d90e4868ed18f3b19782f9b + template_sources: + - gemfiles/modular/optional.gemfile.example + gemfiles/modular/rspec.gemfile: + recipe: template_source_application_gemfiles_modular_rspec_gemfile + action: write + dest_sha256: d043f5c9344f6435edb4607c5adaf42c78e7fb6b8b6726007de2bbedefb376c3 + input_fingerprint: c020328b699c5a3a7f290055653012780363c48807174ba3575105d8da08aea5 + template_sources: + - gemfiles/modular/rspec.gemfile.example + gemfiles/modular/runtime_heads.gemfile: + recipe: template_source_application_gemfiles_modular_runtime_heads_gemfile + action: write + dest_sha256: 6ac7158c4a3088190f2a9082f01439eb27eca2172ab3464b15c9cb045aa885e1 + input_fingerprint: 9f75b286950c954e1f21c0cc7213834c656221f180fbdbfa8c4be4b1993b7e23 + template_sources: + - gemfiles/modular/runtime_heads.gemfile.example + gemfiles/modular/stringio/r2/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r2_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: e67cf41364fa4e117b74c151b40705b94040e1b8ef36e26f907473659e490504 + template_sources: + - gemfiles/modular/stringio/r2/v3.0.gemfile.example + gemfiles/modular/stringio/r3/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r3_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: 25e404cf32fbdb5fa34dea4e0ba167d8e92a437f5c99b8c7fcb9ec675e35ae16 + template_sources: + - gemfiles/modular/stringio/r3/v3.0.gemfile.example + gemfiles/modular/stringio/r4/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r4_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: 9689b4e6952a2af595533b69ca167ea2945d7d5278a65da852be6353c60be31d + template_sources: + - gemfiles/modular/stringio/r4/v3.0.gemfile.example + gemfiles/modular/stringio/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_vHEAD_gemfile + action: write + dest_sha256: e0497ab6dad9667b22725485b781e9d99349a079250eb29cb125d58f01f4a5be + input_fingerprint: 7c4356181eddbb571717973aa0c99d19995d6295d925c2194c41c0a8b26a865c + template_sources: + - gemfiles/modular/stringio/vHEAD.gemfile.example + gemfiles/modular/style.gemfile: + recipe: template_source_application_gemfiles_modular_style_gemfile + action: write + dest_sha256: 071066457ce6081cbc03d10d777f741b84019071c78e45c23889f13658a0a4a6 + input_fingerprint: 6a9e801f7f3be1b1854efcc1434dab47dc8f008ee476a85e2880d06a415f3f15 + template_sources: + - gemfiles/modular/style.gemfile.example + gemfiles/modular/style_local.gemfile: + recipe: template_source_application_gemfiles_modular_style_local_gemfile + action: write + dest_sha256: 5fb70c2348922349b6f7c1becd28f79990f1bb6d90d639ba6b46dedef555be80 + input_fingerprint: 9b4e2fc3607bdda55d9e7cd0bdf590ac12e8d3f3b8225f4179a211341c0c0377 + template_sources: + - gemfiles/modular/style_local.gemfile.example + gemfiles/modular/templating.gemfile: + recipe: template_source_application_gemfiles_modular_templating_gemfile + action: write + dest_sha256: 6cedc39529daa9aac3a4cf13fe31a628b62a4a2428f5c4f8657c5a2fa027bb35 + input_fingerprint: f6cd7e98a7bb1cd18291e9af89e29082e0e573c3175de6c62e3e0aab1ccd14a1 + template_sources: + - gemfiles/modular/templating.gemfile.example + gemfiles/modular/templating_local.gemfile: + recipe: template_source_application_gemfiles_modular_templating_local_gemfile + action: write + dest_sha256: 79bdc19c2a8ef2a1bc5b9e3af675235591e5e2f941fa4e74626f31c0d47c244a + input_fingerprint: 1a51bd37677da134aa0186d9cb202a507927d159e42e180e77e8ff5c2a3ab227 + template_sources: + - gemfiles/modular/templating_local.gemfile.example + gemfiles/modular/webrick/r4/v1.9.gemfile: + recipe: template_source_application_gemfiles_modular_webrick_r4_v1_9_gemfile + action: write + dest_sha256: 1ee940ff54d5ca3ce7fcff0d82ee9553386979656b9e220d5be5404d0991d5ea + input_fingerprint: e344e5194d156fdab62982b8a0415879d8d4ba858a2c1dc19c82ead79cf63cdf + template_sources: + - gemfiles/modular/webrick/r4/v1.9.gemfile.example + gemfiles/modular/webrick/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_webrick_vHEAD_gemfile + action: write + dest_sha256: da545f591af987648ffbaba181707480a38dfb375db7d289617986ec2c2ca23b + input_fingerprint: 8f3a9d0239b85e56945f122e012b54eabebce2cc0f27001db728e48648fb3f3d + template_sources: + - gemfiles/modular/webrick/vHEAD.gemfile.example + gemfiles/modular/x_std_libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_gemfile + action: write + dest_sha256: e3917e90717d7f9f4393d847549a78c53de7f6c8de52a7f590b34b515fd6111a + input_fingerprint: 50fc2f879a22ac3bb0c15014d779b37b1373b822dc88f0e2963142c4ef6b0f6b + template_sources: + - gemfiles/modular/x_std_libs.gemfile.example + gemfiles/modular/x_std_libs/r2/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r2_libs_gemfile + action: write + dest_sha256: e80ec8ad06cb1b31ac982bc25cf7696987fca131aa1001eaefd0bf5cd379c273 + input_fingerprint: 47d41f06a0da57289496900af9514fb1c694a8a4b3a3cc87b272292ce80ba2f3 + template_sources: + - gemfiles/modular/x_std_libs/r2/libs.gemfile.example + gemfiles/modular/x_std_libs/r3/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r3_libs_gemfile + action: write + dest_sha256: 546f8849f4267bb19aa10ff0de40be30957197f229e6887847181ea9127b2650 + input_fingerprint: 5235f73047bbf3908c67a51033fcf3aafc124761b71511227c6415501bdabbb1 + template_sources: + - gemfiles/modular/x_std_libs/r3/libs.gemfile.example + gemfiles/modular/x_std_libs/r4/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r4_libs_gemfile + action: write + dest_sha256: 8c2582eaa218d216b98c86c933465295c8b4e43f3251ea388b9eaf6e471f8da6 + input_fingerprint: b8768c7cf107425c9e800769547b464be475e0d67ff5723627bf9ae3e2fc5547 + template_sources: + - gemfiles/modular/x_std_libs/r4/libs.gemfile.example + gemfiles/modular/x_std_libs/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_vHEAD_gemfile + action: write + dest_sha256: d3133ec4c0638363a7fb025d19be7e95a615fd61c35ddb8d17f2280ee74a7486 + input_fingerprint: a4274eeb999795e75ea4ac4771b42fb92ec86901e8cfa1ef700ca9b1d6cdafa9 + template_sources: + - gemfiles/modular/x_std_libs/vHEAD.gemfile.example + lib/ast/crispr/version.rb: + recipe: template_source_application_lib_ast_crispr_version_rb + action: write + dest_sha256: 8a854a00c4bea4d1cd33bf2885709781ff211d50d6b8fae0e31a3c73744e1453 + input_fingerprint: 3bb821b22093dd1b7c6f5d05d946fc9baa4b56be763937efe4698eb2c57e713d + template_sources: + - lib/gem/version.rb.example + sig/ast/crispr.rbs: + recipe: template_source_application_sig_ast_crispr_rbs + action: write + dest_sha256: 5c2025a4bc0f20b439a1ad3eabd2df9b23be17a31c37f61007666324d40a2e51 + input_fingerprint: '071814579a5a9cb55a1c8dff2cd6cef8130e4fcc41c8a7ccd96e218869bd1b75' + template_sources: + - sig/gem.rbs.example + spec/spec_helper.rb: + recipe: template_source_application_spec_spec_helper_rb + action: write + dest_sha256: 522a1ccd43c5f61c53a5c554f7b948d8eef0b189d39bc82852acbb86c4984938 + input_fingerprint: 41ce3330ca8132b4f0285bb5b66df71519a0c8426961d73020d6a8d6438a4040 + template_sources: + - spec/spec_helper.rb.example diff --git a/gems/ast-crispr/Gemfile b/gems/ast-crispr/Gemfile index fc1c4d762..ba7d3157b 100644 --- a/gems/ast-crispr/Gemfile +++ b/gems/ast-crispr/Gemfile @@ -19,8 +19,7 @@ git_source(:gitlab) { |repo_name| "https://gitlab.com/#{repo_name}" } gemspec # Local workspace dependency wiring for *_local.gemfile overrides -nomono_requirements = ['~> 1.0', '>= 1.0.8'] -gem 'nomono', *nomono_requirements, require: false # ruby >= 2.2 +gem 'nomono', '~> 1.1', '>= 1.1.0', require: false # ruby >= 3.2.0 # Direct sibling dependencies (env-switched via STRUCTUREDMERGE_DEV) direct_sibling_gems = %w[ @@ -36,8 +35,8 @@ if direct_sibling_gems.any? && ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?) direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV') direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil) + require 'nomono/bundler' begin - require 'nomono/bundler' ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local eval_nomono_gems( @@ -46,8 +45,6 @@ if direct_sibling_gems.any? && path_env: 'STRUCTUREDMERGE_DEV', root: %w[src my structuredmerge] ) - rescue LoadError - warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.' ensure if direct_sibling_templating && !direct_sibling_local if direct_sibling_dev_was_set diff --git a/gems/ast-crispr/Gemfile.lock b/gems/ast-crispr/Gemfile.lock index d34e5295a..71ede2898 100644 --- a/gems/ast-crispr/Gemfile.lock +++ b/gems/ast-crispr/Gemfile.lock @@ -78,8 +78,8 @@ GEM bundler (>= 1.14) version_gem (~> 1.1, >= 1.1.4) geom2d (0.4.1) - gitmoji-regex (2.0.4) - version_gem (~> 1.1, >= 1.1.13) + gitmoji-regex (2.0.6) + version_gem (~> 1.1, >= 1.1.14) hexapdf (1.9.1) cmdparse (~> 3.0, >= 3.0.3) geom2d (~> 0.4, >= 0.4.1) @@ -92,20 +92,29 @@ GEM rdoc (>= 4.0.0) reline (>= 0.4.2) json (2.21.1) - kettle-dev (2.3.9) + kettle-dev (2.4.5) emoji_regex (>= 15.0) + kettle-gha-pins (~> 0.3, >= 0.3.1) + kettle-ndjson (~> 0.1, >= 0.1.1) kettle-rb (~> 0.1, >= 0.1.2) - kettle-test (~> 2.0, >= 2.0.4) + kettle-test (~> 2.0, >= 2.0.12) ruby-progressbar (~> 1.13) + tty-progressbar (~> 0.18) + kettle-gha-pins (0.3.1) + ruby-progressbar (~> 1.13) + tty-progressbar (~> 0.18) + version_gem (~> 1.1, >= 1.1.14) + kettle-ndjson (0.1.1) + version_gem (~> 1.1, >= 1.1.14) kettle-rb (0.1.5) - kettle-soup-cover (3.0.4) + kettle-soup-cover (3.0.5) kettle-wash (~> 0.1, >= 0.1.0) simplecov (>= 1.0) simplecov-cobertura (>= 4.0) simplecov-console (~> 0.9, >= 0.9.5) simplecov-rcov (~> 0.3, >= 0.3.7) simplecov_lcov_formatter (~> 0.9, >= 0.9.0) - kettle-test (2.0.12) + kettle-test (2.0.15) appraisal2 (~> 3.0, >= 3.0.6) backports (~> 3.0) rspec (~> 3.0) @@ -126,8 +135,18 @@ GEM lint_roller (1.1.0) logger (1.7.0) mutex_m (0.3.0) + nokogiri (1.19.4-aarch64-linux-gnu) + racc (~> 1.4) + nokogiri (1.19.4-aarch64-linux-musl) + racc (~> 1.4) + nokogiri (1.19.4-arm64-darwin) + racc (~> 1.4) + nokogiri (1.19.4-x86_64-darwin) + racc (~> 1.4) nokogiri (1.19.4-x86_64-linux-gnu) racc (~> 1.4) + nokogiri (1.19.4-x86_64-linux-musl) + racc (~> 1.4) nomono (1.1.0) openssl (4.0.2) ostruct (0.6.3) @@ -182,11 +201,11 @@ GEM rspec-mocks (3.13.8) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) - rspec-pending_for (0.1.21) + rspec-pending_for (0.1.22) rspec-core (~> 3.0) ruby_engine (~> 2.0) ruby_version (~> 1.0) - rspec-stubbed_env (1.0.6) + rspec-stubbed_env (1.0.8) rspec-support (3.13.7) rspec_junit_formatter (0.6.0) rspec-core (>= 2, < 4, != 2.12.0) @@ -284,7 +303,7 @@ GEM silent_stream (1.0.12) logger (~> 1.2) version_gem (>= 1.1.8, < 3) - simplecov (1.0.2) + simplecov (1.0.3) simplecov-cobertura (4.0.0) rexml simplecov (~> 1.0) @@ -296,7 +315,7 @@ GEM simplecov (>= 0.4.1) simplecov_lcov_formatter (0.9.0) simplecov (>= 0.18) - sorbet-runtime (0.6.13351) + sorbet-runtime (0.6.13363) standard (1.56.0) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.0) @@ -320,9 +339,9 @@ GEM standard-custom (~> 1.0, >= 1.0.2) standard-performance (~> 1.9, >= 1.9.0) version_gem (~> 1.1, >= 1.1.13) - stone_checksums (1.0.6) - version_gem (~> 1.1, >= 1.1.13) + stone_checksums (1.0.7) stringio (3.2.0) + strings-ansi (0.2.0) strscan (3.1.8) terminal-table (4.0.0) unicode-display_width (>= 1.1.1, < 4) @@ -340,16 +359,27 @@ GEM parslet (~> 2.0) tree_sitter_language_pack (>= 1.13.2, < 2.0) version_gem (~> 1.1, >= 1.1.9) - tree_sitter_language_pack (1.13.3-x86_64-linux) + tree_sitter_language_pack (1.13.4-aarch64-linux) + sorbet-runtime (~> 0.5) + tree_sitter_language_pack (1.13.4-arm64-darwin) + sorbet-runtime (~> 0.5) + tree_sitter_language_pack (1.13.4-x86_64-darwin) + sorbet-runtime (~> 0.5) + tree_sitter_language_pack (1.13.4-x86_64-linux) sorbet-runtime (~> 0.5) tsort (0.2.0) - turbo_tests2 (3.2.0) + tty-cursor (0.7.1) + tty-progressbar (0.18.3) + strings-ansi (~> 0.2) + tty-cursor (~> 0.7) + tty-screen (~> 0.8) + unicode-display_width (>= 1.6, < 3.0) + tty-screen (0.8.2) + turbo_tests2 (3.2.3) parallel_tests (>= 3.3.0, < 6) rspec (>= 3.10) version_gem (~> 1.1, >= 1.1.14) - unicode-display_width (3.2.0) - unicode-emoji (~> 4.1) - unicode-emoji (4.2.0) + unicode-display_width (2.6.0) version_gem (1.1.14) webrick (1.9.2) yaml-converter (0.2.3) @@ -367,6 +397,9 @@ GEM ostruct rainbow yard + yard-lint (1.10.2) + yard (~> 0.9) + zeitwerk (~> 2.6) yard-relative_markdown_links (0.6.0) nokogiri (>= 1.14.3, < 2) yard-timekeeper (0.2.4) @@ -378,8 +411,13 @@ GEM zlib (3.2.3) PLATFORMS - x86_64-linux + aarch64-linux + aarch64-linux-gnu + aarch64-linux-musl + arm64-darwin + x86_64-darwin x86_64-linux-gnu + x86_64-linux-musl DEPENDENCIES addressable (>= 2.8, < 3) @@ -395,12 +433,12 @@ DEPENDENCIES gitmoji-regex (~> 2.0, >= 2.0.0) irb (~> 1.17) kettle-dev (~> 2.0, >= 2.2.25) - kettle-soup-cover (~> 3.0, >= 3.0.3) + kettle-soup-cover (~> 3.0, >= 3.0.5) kettle-test (~> 2.0, >= 2.0.9) kramdown (~> 2.5, >= 2.5.2) kramdown-parser-gfm (~> 1.1) mutex_m (~> 0.2) - nomono (~> 1.0, >= 1.0.8) + nomono (~> 1.1, >= 1.1.0) rake (~> 13.0) rbs (>= 3.0) rdoc (~> 6.11) @@ -423,6 +461,7 @@ DEPENDENCIES yard (~> 0.9, >= 0.9.45) yard-fence (~> 0.9, >= 0.9.6) yard-junk (~> 0.1, >= 0.1.0) + yard-lint (~> 1.10, >= 1.10.2) yard-relative_markdown_links (~> 0.6) yard-timekeeper (~> 0.2, >= 0.2.4) yard-yaml (~> 0.2, >= 0.2.3) @@ -438,7 +477,7 @@ CHECKSUMS backports (3.25.3) sha256=94298d32dc3c40ca15633b54e282780b49e2db0c045f602ea1907e4f63a17235 benchmark (0.5.0) sha256=465df122341aedcb81a2a24b4d3bd19b6c67c1530713fd533f3ff034e419236c bigdecimal (4.1.2) sha256=53d217666027eab4280346fba98e7d5b66baaae1b9c3c1c0ffe89d48188a3fbd - bundler (4.0.16) sha256=d6ca5dd440c24f9abce9844cf44cc8e18c6a553de65a47efb4544137af92c47d + bundler (4.0.17) sha256=214e21431b5665dd2f99df8a5511c6b151d7a72e8015c8b38f8b775b61cbb6c1 bundler-audit (0.9.3) sha256=81c8766c71e47d0d28a0f98c7eed028539f21a6ea3cd8f685eb6f42333c9b4e9 cgi (0.5.2) sha256=61ca30298171190fd4fa0d8018e57ada456eae9b7a2b78526debf7f0a0e6f8bb citrus (3.0.2) sha256=4ec2412fc389ad186735f4baee1460f7900a8e130ffe3f216b30d4f9c684f650 @@ -460,15 +499,17 @@ CHECKSUMS erb (6.0.6) sha256=a9b24986700f5bf127c4f297c5403c3ca41b83b0a316c0cd09a096b56e644ae5 gem_bench (2.0.5) sha256=0dc0fb44a5a5eb7b2f5c1c68a5b0164d72007132822c012bac3abe976b199ead geom2d (0.4.1) sha256=ea0998ea90c4f2752e24fe13d85a4f89bee689d151316140ebcc6369bf634ed9 - gitmoji-regex (2.0.4) sha256=01410d3217940bd0e7b2299ec805245afe8d0f06a5d6d38f623d63a63c0ac34f + gitmoji-regex (2.0.6) sha256=d50649caccc8ad1b080f01e869f0909b135206d8b3ece2313ca31a9b0e39f14b hexapdf (1.9.1) sha256=2d1f6a3622e6bc2a70a707d4c3f3fa44f5552ecd9d899f6283abb07398a84884 io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc irb (1.18.0) sha256=de9454a0703a54704b9811a5ef31a60c86949fbf4013fcf244fabc7c775248e3 json (2.21.1) sha256=13a43df75d95641443f5702dff350f237164a9d811ff0f2c2800d4d980220583 - kettle-dev (2.3.9) sha256=03b2f72c6dda4d2c4401ee3c0c96853116c922766e7b5b04224434a49b571bfc + kettle-dev (2.4.5) sha256=3a451940796a671b7adc910db7c3da87899ebec7c5274921ca598345549ae7eb + kettle-gha-pins (0.3.1) sha256=b13a82a403af31880288fe65f85f2a24a93ae4740c0c7cbc15a35044d27aaa51 + kettle-ndjson (0.1.1) sha256=2d84314e8c911d6f560f2736e8f72019df6d811829674788ff33b3bbf518ed66 kettle-rb (0.1.5) sha256=0322a569860c86e70f90d5ebe72353b8720b7054c7efa9f9044857f5c972d29f - kettle-soup-cover (3.0.4) sha256=36d4df472362d2020d16411d7ce26ba2fe2a41fb8be64577ff9b5280acf99d86 - kettle-test (2.0.12) sha256=3a8e5c5f38db03a6f0a8896da6f3576d24e36f53796578c19aafaa2ba5a8ea52 + kettle-soup-cover (3.0.5) sha256=80abb42eb294fa5d3c8632c259a297c554fbc01902714461f3bf99a65190f5d0 + kettle-test (2.0.15) sha256=993b132ffec17fe82cc81c69f876e15d6eb610a4831df08dc01c0cce5c070caa kettle-wash (0.1.1) sha256=ae2e08b64c72c46ceed5ffa197ed859e85352f38ed0412fca2e18ce29b2dc4f9 kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa kramdown-parser-gfm (1.1.0) sha256=fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729 @@ -476,7 +517,12 @@ CHECKSUMS lint_roller (1.1.0) sha256=2c0c845b632a7d172cb849cc90c1bce937a28c5c8ccccb50dfd46a485003cc87 logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203 mutex_m (0.3.0) sha256=cfcb04ac16b69c4813777022fdceda24e9f798e48092a2b817eb4c0a782b0751 + nokogiri (1.19.4-aarch64-linux-gnu) sha256=1269fb644a6de405057a53dd5c762b1209b43ca7424f839454d3dbc677c31a8f + nokogiri (1.19.4-aarch64-linux-musl) sha256=35c65b9ce72b3bb03207bdbe7067915019dc18c1b9b59139684bd6690fdd01af + nokogiri (1.19.4-arm64-darwin) sha256=a46db9853286e6597b36ebc6953817d15acf3a299583eb3f89fdc6f91dd63527 + nokogiri (1.19.4-x86_64-darwin) sha256=7fd17057d3e1f00e9954a74b3cd76595d3d4a5ef233b7ed9599047c204f70551 nokogiri (1.19.4-x86_64-linux-gnu) sha256=379fae440b28915e3f19d752ce2dcf8465ed2b2fbefd2a7ca0dd497bc981a06a + nokogiri (1.19.4-x86_64-linux-musl) sha256=17dfb7c1fa194ae02fbf7c51a7afc8d278045ab3fdacfd86f91d02d7b274470b nomono (1.1.0) sha256=463dd4c79da02a855739a1b5483190d527b7868688be905e84abdb3449b32c88 openssl (4.0.2) sha256=1037ad2868ae58df9ad917891c0c0f9815a1172f6846d4bcdd508e4c2ee747c2 ostruct (0.6.3) sha256=95a2ed4a4bd1d190784e666b47b2d3f078e4a9efda2fccf18f84ddc6538ed912 @@ -504,8 +550,8 @@ CHECKSUMS rspec-core (3.13.6) sha256=a8823c6411667b60a8bca135364351dda34cd55e44ff94c4be4633b37d828b2d rspec-expectations (3.13.5) sha256=33a4d3a1d95060aea4c94e9f237030a8f9eae5615e9bd85718fe3a09e4b58836 rspec-mocks (3.13.8) sha256=086ad3d3d17533f4237643de0b5c42f04b66348c28bf6b9c2d3f4a3b01af1d47 - rspec-pending_for (0.1.21) sha256=c87fda50c20f8faca72d9cfa6a936abffd37860343f14aced95bbb29b8ae96bf - rspec-stubbed_env (1.0.6) sha256=6467a6eb0f72146d443ffb0c5a2a549d8812e59c04fbc81e03cd914ebf1f28dc + rspec-pending_for (0.1.22) sha256=49dc647473f8c8ea4ccc1a33813537dd94b913ef7ec5a8689896101eaacb71cf + rspec-stubbed_env (1.0.8) sha256=b23c4dd5e5d6a0cf0c5b4f6ed3f3678d78e4be9ec247ea9abf0669d20b490535 rspec-support (3.13.7) sha256=0640e5570872aafefd79867901deeeeb40b0c9875a36b983d85f54fb7381c47c rspec_junit_formatter (0.6.0) sha256=40dde674e6ae4e6cc0ff560da25497677e34fefd2338cc467a8972f602b62b15 rubocop (1.88.2) sha256=8def251c90cd955feb4daa3edc0ab56893250c4ce90ef81e6c80c03f9a939bbf @@ -532,37 +578,44 @@ CHECKSUMS ruby_version (1.0.3) sha256=5930f9950746b7e6c973184398ee364ee7440b170fef7922b9f5cdf317f1ccb5 service_actor (3.9.4) sha256=e63b523630b9a7e62959b2a90113b08d2565b5de9c148557b281ef847c9539ce silent_stream (1.0.12) sha256=377c43aa10033fe90c33b39ea8cd97d79f2d1c4856df598efc56f3091f3ae782 - simplecov (1.0.2) sha256=c6459434efe4b948b46477cc2df2faa73ab365f83a33c7c17f81262f4f7f1244 + simplecov (1.0.3) sha256=38ef0514f16ae7562f0d0f4df02610071115103d301b6de7dacbcc000082e39b simplecov-cobertura (4.0.0) sha256=e4fb3159b1ecea545b44f5452a8611305323e78ad23eae8aed35924d072e01ea simplecov-console (0.9.5) sha256=b1108bcfff5f210143e2b8301698c367b01586f20d25a73e95475a5df6fc6ff6 simplecov-rcov (0.3.7) sha256=372f50bf6df6b6350b7d0c840f2f8bdabe021861a43c26877b747c9ac96139fc simplecov_lcov_formatter (0.9.0) sha256=4c1839bb31dcf7a8f7a6474c94ed228aa03b994e9dd5e1965e58b4121b049bed - sorbet-runtime (0.6.13351) sha256=f8fee17c6e3edf835dc6823d26afb9a7c8969c6710d1fabe2fb43f4e0c15c64f + sorbet-runtime (0.6.13363) sha256=f1f0b2e946fb3cd76b9d8e3d85459cdaf7f5466331a400cafcf008e508b6d2c3 standard (1.56.0) sha256=ae2af4d9669589162ac69ed5ef59dcf9f346d4afc81f7e62b84339310dfcb787 standard-custom (1.0.2) sha256=424adc84179a074f1a2a309bb9cf7cd6bfdb2b6541f20c6bf9436c0ba22a652b standard-performance (1.9.0) sha256=49483d31be448292951d80e5e67cdcb576c2502103c7b40aec6f1b6e9c88e3f2 standard-rspec (0.5.0) sha256=64d396524a65af47f5331b423d8cdd313e0267401647bb7892489ca89dad2973 standard-rubocop-lts (2.0.10) sha256=89708a505b7d8b24d2ac399a7520fcb9e764abc2ecb4289b631b5fe0e3b76617 - stone_checksums (1.0.6) sha256=c775f830513d6c6ab26e31d1a5fbecd4c4e39002663d4d9f8fa96e97990b5298 + stone_checksums (1.0.7) sha256=faf7a175da7c4f32777c5292a0128b06eec183b3cc3a0b382529b21800300626 stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1 + strings-ansi (0.2.0) sha256=90262d760ea4a94cc2ae8d58205277a343409c288cbe7c29416b1826bd511c88 strscan (3.1.8) sha256=aae2db611a225559f21ffbb71765c9a4e60fd262534a9ea84f4f11c7f32f679e terminal-table (4.0.0) sha256=f504793203f8251b2ea7c7068333053f0beeea26093ec9962e62ea79f94301d2 thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73 timecop (0.9.11) sha256=41284dc6e5041f2184f781ace766f942108c842f8d8c1386a26e6343decc7542 timecop-rspec (1.0.3) sha256=005f14841bb606dcaefb060e321b5388e2e59537742bee8b3a9a9a40e598fab9 - token-resolver (2.0.5) sha256=b852f924287ffb58a440856e862b056c8ad97e74b4b2526cee43e0771f40c25c + token-resolver (2.0.5) tree_haver (7.1.0) - tree_sitter_language_pack (1.13.3-x86_64-linux) sha256=1ffd045bd236ea54f58c5872ee66121d01033359c1f28f375b7fd4a4b5620cf9 + tree_sitter_language_pack (1.13.4-aarch64-linux) sha256=f7bb95fd59afda1e1b91a7b6ad4df244c585a863e94e4a0f492ef2336a5358b8 + tree_sitter_language_pack (1.13.4-arm64-darwin) sha256=2b48ded1f5feae3de20be1471aaa7c211601ac1c71ca6d4789cf31560a854132 + tree_sitter_language_pack (1.13.4-x86_64-darwin) sha256=8a2460d9029e7610b863d2481e2da0078f87b18bf8668070ccb5ecce71e272d8 + tree_sitter_language_pack (1.13.4-x86_64-linux) sha256=ae3ae718534088b2dc76bd93e7d093f11e8d19188bf47edfcd962df906e1af97 tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f - turbo_tests2 (3.2.0) sha256=8b35421548399d1923567b177970f42671c65695b93cdd134d78fbcbab85dff0 - unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42 - unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f + tty-cursor (0.7.1) sha256=79534185e6a777888d88628b14b6a1fdf5154a603f285f80b1753e1908e0bf48 + tty-progressbar (0.18.3) sha256=6cbb4260e55e74a9180d502143eb6a467d2c8e51bf5f3c9509fb5cacc3d4a5f6 + tty-screen (0.8.2) sha256=c090652115beae764336c28802d633f204fb84da93c6a968aa5d8e319e819b50 + turbo_tests2 (3.2.3) sha256=f77fc0799014c1d7890977e117cf39317bc4544de2c88a55149ed920b4cff942 + unicode-display_width (2.6.0) sha256=12279874bba6d5e4d2728cef814b19197dbb10d7a7837a869bab65da943b7f5a version_gem (1.1.14) sha256=6b7306c7e9416d06067561981ab3444e2cecb844f26cc325ae3c27b44cf85613 webrick (1.9.2) sha256=beb4a15fc474defed24a3bda4ffd88a490d517c9e4e6118c3edce59e45864131 yaml-converter (0.2.3) sha256=d35e69e547610d9e347672cc277fcb7d71dff3c53a942e66f82b1c64022ada72 yard (0.9.45) sha256=52e211493f7cb8a3ebf7e104a25a1e73937a3103092545d34cb88fafebb3dc51 yard-fence (0.9.6) sha256=3d1dbf4e3df462ac78b8bd2e01cf740a2de20168387c929aca31a0bcee490659 yard-junk (0.1.0) sha256=e85fe2ec1afa47313decd333447b53458cb1ed49b510b70015fdc3041a94bcdd + yard-lint (1.10.2) sha256=3e595709d088a8cc827e706a4146b447eb6a907ee375d06c11077369d00717f6 yard-relative_markdown_links (0.6.0) sha256=3e5ffa85cbad9bac70bee5421774b190fb25d3bdf489323a5b3534f647d1a70e yard-timekeeper (0.2.4) sha256=62f8d001d737c6e2ac688e7b37386f958dceb0f6aff9c909575e1bec8d20775a yard-yaml (0.2.3) sha256=fe5fef18819e1cbd05bb8f1b9e1baad6bf70c28125eb75b57bbf6397b0831812 @@ -570,4 +623,4 @@ CHECKSUMS zlib (3.2.3) sha256=5bd316698b32f31a64ab910a8b6c282442ca1626a81bbd6a1674e8522e319c20 BUNDLED WITH - 4.0.16 + 4.0.17 diff --git a/gems/ast-crispr/LICENSE.md b/gems/ast-crispr/LICENSE.md index 6ad318705..65a770d1f 100644 --- a/gems/ast-crispr/LICENSE.md +++ b/gems/ast-crispr/LICENSE.md @@ -3,8 +3,8 @@ This project is made available under the following licenses. Choose the option that best fits your use case: -- [AGPL-3.0-only](AGPL-3.0-only.md) -- [PolyForm-Small-Business-1.0.0](PolyForm-Small-Business-1.0.0.md) +- [AGPL-3.0-only](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/AGPL-3.0-only.md) +- [PolyForm-Small-Business-1.0.0](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/PolyForm-Small-Business-1.0.0.md) If none of the above licenses fit your use case, please [contact us](mailto:floss@galtzo.com) to discuss a custom commercial license. diff --git a/gems/ast-crispr/README.md b/gems/ast-crispr/README.md index 8ed7f1c77..9228bf4c8 100644 --- a/gems/ast-crispr/README.md +++ b/gems/ast-crispr/README.md @@ -37,7 +37,7 @@ I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-ta |-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Works with MRI Ruby 4 | [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf]| | Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Get help from RubyForum][✉️ruby-forum-img]][✉️ruby-forum] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork] [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor] | -| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on Github.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] | +| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on GitHub.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] | | Documentation | [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![YARD on Galtzo.com][📜docs-head-rd-img]][🚎yard-head] [![Maintainer Blog][🚂maint-blog-img]][🚂maint-blog] [![GitLab Wiki][📜gl-wiki-img]][📜gl-wiki] [![GitHub Wiki][📜gh-wiki-img]][📜gh-wiki] | | Compliance | [![License: AGPL-3.0-only OR PolyForm-Small-Business-1.0.0][📄license-img]][📄license] [![Apache license compatibility: Category X][📄license-compat-img]][📄license-compat] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] | | Style | [![Enforced Code Style Linter][💎rlts-img]][💎rlts] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] [![Compatibility appraised by: appraisal2][💎appraisal2-img]][💎appraisal2] | @@ -170,7 +170,7 @@ See [CHANGELOG.md][📌changelog] for a list of releases. ## 📄 License -The gem is available under the following licenses: [AGPL-3.0-only](AGPL-3.0-only.md), [PolyForm-Small-Business-1.0.0](PolyForm-Small-Business-1.0.0.md). +The gem is available under the following licenses: [AGPL-3.0-only](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/AGPL-3.0-only.md), [PolyForm-Small-Business-1.0.0](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/PolyForm-Small-Business-1.0.0.md). See [LICENSE.md][📄license] for details. If none of the available licenses suit your use case, please [contact us](mailto:floss@galtzo.com) to discuss a custom commercial license. @@ -242,7 +242,7 @@ If none of the available licenses suit your use case, please [contact us](mailto [📜src-gl]: https://gitlab.com/structuredmerge/structuredmerge-ruby/-/tree/main/gems/ast-crispr [📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue [📜src-cb]: https://codeberg.org/structuredmerge/structuredmerge-ruby/src/branch/main/gems/ast-crispr -[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=Github&logoColor=green +[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=GitHub&logoColor=green [📜src-gh]: https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/ast-crispr [📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white [📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white diff --git a/gems/ast-crispr/bin/kettle-gha-pins b/gems/ast-crispr/bin/kettle-gha-pins new file mode 100755 index 000000000..c743cecac --- /dev/null +++ b/gems/ast-crispr/bin/kettle-gha-pins @@ -0,0 +1,16 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# +# This file was generated by Bundler. +# +# The application 'kettle-gha-pins' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) + +require 'rubygems' +require 'bundler/setup' + +load Gem.bin_path('kettle-gha-pins', 'kettle-gha-pins') diff --git a/gems/ast-crispr/gemfiles/modular/coverage.gemfile b/gems/ast-crispr/gemfiles/modular/coverage.gemfile index b93014b6b..b4c26a504 100644 --- a/gems/ast-crispr/gemfiles/modular/coverage.gemfile +++ b/gems/ast-crispr/gemfiles/modular/coverage.gemfile @@ -7,7 +7,7 @@ if ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false').zero? # Coverage (remote/released) platform :mri do - gem 'kettle-soup-cover', '~> 3.0', '>= 3.0.3', require: false + gem 'kettle-soup-cover', '~> 3.0', '>= 3.0.5', require: false end else eval_gemfile 'coverage_local.gemfile' diff --git a/gems/ast-crispr/gemfiles/modular/coverage_local.gemfile b/gems/ast-crispr/gemfiles/modular/coverage_local.gemfile index 9b7dad77d..fb606851e 100644 --- a/gems/ast-crispr/gemfiles/modular/coverage_local.gemfile +++ b/gems/ast-crispr/gemfiles/modular/coverage_local.gemfile @@ -3,7 +3,7 @@ # Local path overrides for development. # Loaded by the associated non-local gemfile when KETTLE_DEV_DEV != "false". -require "nomono/bundler" +require 'nomono/bundler' local_gems = %w[kettle-dev kettle-test kettle-soup-cover kettle-drift] declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name) @@ -17,7 +17,8 @@ platform :mri do path_env: 'KETTLE_DEV_DEV', vendored_gems_env: 'VENDORED_GEMS', vendor_gem_dir_env: 'VENDOR_GEM_DIR', - debug_env: 'KETTLE_DEV_DEBUG' + debug_env: 'KETTLE_DEV_DEBUG', + root: %w[src my kettle-dev] ) if ENV.fetch('GALTZO_FLOSS_DEV', 'false').casecmp('false') != 0 diff --git a/gems/ast-crispr/gemfiles/modular/documentation.gemfile b/gems/ast-crispr/gemfiles/modular/documentation.gemfile index 9d4535f12..d0f4d4a76 100644 --- a/gems/ast-crispr/gemfiles/modular/documentation.gemfile +++ b/gems/ast-crispr/gemfiles/modular/documentation.gemfile @@ -12,6 +12,7 @@ gem 'kramdown-parser-gfm', '~> 1.1', require: false # Ruby >= 2.3 gem 'yaml-converter', '~> 0.2', '>= 0.2.3', require: false # Ruby >= 3.2 gem 'yard', '~> 0.9', '>= 0.9.45', require: false gem 'yard-junk', '~> 0.1', '>= 0.1.0', require: false # Ruby >= 3.1 +gem 'yard-lint', '~> 1.10', '>= 1.10.2', require: false # Ruby >= 3.2 gem 'yard-relative_markdown_links', '~> 0.6', require: false if ENV.fetch('GALTZO_FLOSS_DEV', 'false').casecmp('false').zero? diff --git a/gems/ast-crispr/gemfiles/modular/documentation_local.gemfile b/gems/ast-crispr/gemfiles/modular/documentation_local.gemfile index 610362699..3fd9c155e 100644 --- a/gems/ast-crispr/gemfiles/modular/documentation_local.gemfile +++ b/gems/ast-crispr/gemfiles/modular/documentation_local.gemfile @@ -3,7 +3,7 @@ # Local path overrides for development. # Loaded by the associated non-local gemfile when GALTZO_FLOSS_DEV != "false". -require "nomono/bundler" +require 'nomono/bundler' local_gems = %w[yard-fence yard-timekeeper yard-yaml] declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name) diff --git a/gems/ast-crispr/gemfiles/modular/style_local.gemfile b/gems/ast-crispr/gemfiles/modular/style_local.gemfile index 1d53a3076..28f53ae26 100644 --- a/gems/ast-crispr/gemfiles/modular/style_local.gemfile +++ b/gems/ast-crispr/gemfiles/modular/style_local.gemfile @@ -6,7 +6,7 @@ # Local path overrides for development. # Loaded by the associated non-local gemfile when RUBOCOP_LTS_LOCAL != "false". -require "nomono/bundler" +require 'nomono/bundler' local_gems = %w[rubocop-lts rubocop-lts-rspec rubocop-ruby3_2 standard-rubocop-lts] declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name) diff --git a/gems/ast-crispr/gemfiles/modular/templating.gemfile b/gems/ast-crispr/gemfiles/modular/templating.gemfile index a672de184..a7e6c1f06 100644 --- a/gems/ast-crispr/gemfiles/modular/templating.gemfile +++ b/gems/ast-crispr/gemfiles/modular/templating.gemfile @@ -12,7 +12,7 @@ end if kettle_remote # Template/plugin checks for released installs. - gem 'kettle-drift', '~> 1.0', '>= 1.0.6', require: false + gem 'kettle-drift', '~> 1.0', '>= 1.0.7', require: false end # Set STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local development with path-based dependencies. diff --git a/gems/ast-crispr/gemfiles/modular/templating_local.gemfile b/gems/ast-crispr/gemfiles/modular/templating_local.gemfile index ecbe542ab..629f4ef4c 100644 --- a/gems/ast-crispr/gemfiles/modular/templating_local.gemfile +++ b/gems/ast-crispr/gemfiles/modular/templating_local.gemfile @@ -4,7 +4,7 @@ # Loaded by the associated non-local gemfile when STRUCTUREDMERGE_DEV or KETTLE_DEV_DEV # is not "false". -require "nomono/bundler" +require 'nomono/bundler' structuredmerge_local_gems = %w[ tree_haver @@ -65,7 +65,8 @@ platform :mri do path_env: 'KETTLE_DEV_DEV', vendored_gems_env: 'VENDORED_GEMS', vendor_gem_dir_env: 'VENDOR_GEM_DIR', - debug_env: 'KETTLE_DEV_DEBUG' + debug_env: 'KETTLE_DEV_DEBUG', + root: %w[src my kettle-dev] ) end end diff --git a/gems/ast-crispr/lib/ast/crispr/version.rb b/gems/ast-crispr/lib/ast/crispr/version.rb index c2c80e954..00b461e66 100644 --- a/gems/ast-crispr/lib/ast/crispr/version.rb +++ b/gems/ast-crispr/lib/ast/crispr/version.rb @@ -2,9 +2,12 @@ module Ast module Crispr + # Version namespace for this gem. module Version + # Current gem version. VERSION = '7.1.0' end + # Current gem version exposed at the traditional constant location. VERSION = Version::VERSION # Traditional Constant Location end end diff --git a/gems/ast-merge-git/.structuredmerge/kettle-jem.lock b/gems/ast-merge-git/.structuredmerge/kettle-jem.lock new file mode 100644 index 000000000..3ccb3b345 --- /dev/null +++ b/gems/ast-merge-git/.structuredmerge/kettle-jem.lock @@ -0,0 +1,527 @@ +--- +version: 1 +template_state: + version: 7.1.0 + applied_at: '2026-07-26' + changelog_replay: + last_entry_key: kettle-jem-template-20260726-002 + last_entry_date: '2026-07-26' + checksums: + ".aiignore.example": 48a5dfdd93afd1a15fdce39cc28ca9920263f00018b0968ab031fa744521e5ce + ".config/mise/env.sh": aeea5a2ab489ba6e5467ae8de6e386ec8c8fe4ff31a044e69d0cd6a092dd6654 + ".devcontainer/apt-install/devcontainer-feature.json.example": 273a07f9d3926e1b6287c37709a469ee05d724cfedae62ad3b0cd8c09befc9ec + ".devcontainer/apt-install/install.sh.example": b61e020b60ca172bb7b658e63c9cd4342e49bda0531a6b19b36475e515ad20b0 + ".devcontainer/devcontainer.json.example": 4a80d471379b9720cc65cc89543cbbc0a7be87b188a818160296577c4e87606f + ".devcontainer/scripts/setup-tree-sitter.sh.example": c34f48d7bac8561fb780c4c7a81cec5004c3ac0edc11f229799ec9a4e3eccd54 + ".env.local.example": 35cb867e8bacb75252a85c29f78899b36d0d1843511ae1ba1fbc7da863b128b3 + ".envrc.example": b7232f4bae0fb399cc9c9cdc4a5eb694bd69623aeeadcbab18c9990e443040a1 + ".envrc.no-osc.example": b7232f4bae0fb399cc9c9cdc4a5eb694bd69623aeeadcbab18c9990e443040a1 + ".gemrc.example": 77b1c36ae6f91bedf08b99e662a971b02f7e66e0d65267805d068d30ff118aba + ".git-hooks/commit-msg.example": d858575bf70d6175fdd7656e9ba0b41672de3fb49163181efe3fbc9e40306024 + ".git-hooks/commit-subjects-goalie.txt.example": bb1179c8911af8afeb1f9a604b3de789d4a4b33d9d4a7743b3145998c15b0a94 + ".git-hooks/footer-template.erb.txt.example": 70ed3616ee04a4062126f53892cc255e7aa2b66741fe22d6b372f7df99676718 + ".git-hooks/prepare-commit-msg.example": 35266ead46a6385d20eeff7ec64afedef33a2db18d1238b8662a1bc758f05335 + ".github/.codecov.yml.example": d6ef3208a90eca74f79d8ff4e5ae21a915562b075cb17978b1eaadc231dd4e85 + ".github/FUNDING.yml.example": fd27dff7db58f4e8a39c35ccb60e39422517038501a5f2a99ef2aaeea2d1fa5d + ".github/FUNDING.yml.no-osc.example": 8f1a867b1921b3dec1c63f7a7cd629362c1fb1ad0d1052494b48ba746b0fc5c6 + ".github/copilot_instructions.md.example": f5c5791df013e89e170fd436379b14e251d0ff4cb6b330a6d961e80c9071f2d3 + ".github/dependabot.yml.example": db84d1c13f64100d2f48212c022f0d985e9061ca76c36d82e7057fd845ecd528 + ".github/workflows/auto-assign.yml.example": 57b8159a15bf49946506e1b624934feed6a1cc8f71ad68968323c87acac56c67 + ".github/workflows/coverage.yml.example": 524ef90e0fd2ca0b846c464197d8d43cd6a57834303c9526ea0bd277f2beb3e1 + ".github/workflows/current.yml.example": dbc82e7593804c05d2c217d5c02d79d5480b5a0d1e04eea99b7235f35f520216 + ".github/workflows/dep-heads.yml.example": d94122f3246e17774fa015dde8d9a5772a66e54f817d44e62716f6a61d899050 + ".github/workflows/dependency-review.yml.example": a895d52257a7112d796fabf349ced1079bed93e81e3aa9cb088f9af3f44d1e5f + ".github/workflows/discord-notifier.yml.example": f9cc83a87058bd420426444510a1dd1520fd7cc15af50832ad52c25c5766be94 + ".github/workflows/framework-ci.yml.example": 112ef6178fcf115fe9e0a248ec6cb4af748ce89142fd7dba30e9abb6ebdc17be + ".github/workflows/heads.yml.example": aa55cf9bb4ae35fe126384003e8af4b91e685bcf370263b3710bd429f6c44343 + ".github/workflows/jruby-10.0.yml.example": 0eaf6d10c304de606684d420bbd88cfc90fe9d139a56773e011c6abaa6c5fc91 + ".github/workflows/jruby-9.1.yml.example": 9062f9de8843da1f8c4da8f991bbd24f9540c63927deaf311649f3088a672d5b + ".github/workflows/jruby-9.2.yml.example": f330363fc0af7dd0be24c140c919c07737a3168c5647012e34ba0c36634005e5 + ".github/workflows/jruby-9.3.yml.example": 3b26b3a978d0018f01e6d87651936f2e92fcb58d62bcdf11822eca3c2656d303 + ".github/workflows/jruby-9.4.yml.example": a830b92838a09b9316a81745b48ff35bed9461783154fc6d0e52df0d6aa319f3 + ".github/workflows/jruby.yml.example": f10f779cd3be37d2ffa593d9a83ba68a8684bb849ed1c4d9ae41706ff12571e1 + ".github/workflows/license-eye.yml.example": 23db5d6ee9b5382de1f2042642219d65214e09c3f975c418d4dec4d46375036c + ".github/workflows/locked_deps.yml.example": c7eaa20cc7d7de6209e576274e592ffb4838177ae6ab56096b2439d0fa1bc31c + ".github/workflows/opencollective.yml.example": fe7d8d346f9ab055b6779abf62972291460d05275e2c4d191e291e8cd73b0e6b + ".github/workflows/ruby-2.3.yml.example": 90474f1a462edc877983b91dd40d942e82b28262f1afdca74cddcdd52d7e8c26 + ".github/workflows/ruby-2.4.yml.example": fe84af4efef6934d7ff63efa2a4c85994f2ea1887f61b1ab5d30a21365429ec9 + ".github/workflows/ruby-2.5.yml.example": c40db157514168442311191ebc88853dfb36447a90171a73f42d435e92d02f05 + ".github/workflows/ruby-2.6.yml.example": 87bb8537d0047217651a327353df670fed3ea9e4a5350e965ed80af9ce32d9d3 + ".github/workflows/ruby-2.7.yml.example": 5650ec41bc67553457019a772a3343578872749d21268d5e7fb1715ebf4e2351 + ".github/workflows/ruby-3.0.yml.example": f9d7c7dfc6eaea1ca12c92e0b98b4ba8fed5726d26459bb410ab9812a741e5b9 + ".github/workflows/ruby-3.1.yml.example": e44879cd3ea47d00e44e573745d7f95fc1a561a9c1d69d72529d0c07294bd26e + ".github/workflows/ruby-3.2.yml.example": c28b9179778157e6b4807a775968840ff1c6bf2fd847ce1ce694b9a77df42f6e + ".github/workflows/ruby-3.3.yml.example": 033e4f0ed7ded17f5d13fde6674ec9fd555cfe58c11f57f7dc2f1fee21c718b6 + ".github/workflows/ruby-3.4.yml.example": 474a96468f101b8fddac4cecaa0629f28d5ceec0c784329affdc471eb1e3e889 + ".github/workflows/style.yml.example": dea7243a91dc164a172e90b7933de58cdd353d7e5df1beac22cec63125edc086 + ".github/workflows/templating.yml.example": 327b933509e1ade4d53df5756f6407028b479c51847775db494fb9c25e66ce5a + ".github/workflows/truffle.yml.example": 56fa53dc206976c81db7cc3530f4d19d89ea5859c1245492e5a5ecb9304de63e + ".github/workflows/truffleruby-22.3.yml.example": d6773529e6961039b5cc4a145c77623881aa3857d875bbb415ca0f8147166d7a + ".github/workflows/truffleruby-23.0.yml.example": abcd23a18d748528f7558d4ab7bc4830796cb686ca7371f67a8ddaf6d0362d72 + ".github/workflows/truffleruby-23.1.yml.example": 11af8a3f0823ed3ab17e759d81b8a4551eb7af8096ce0b5a9501fd83cada1cd2 + ".github/workflows/truffleruby-24.2.yml.example": 2c4ff82eeaa3bdb19391f04cd2f41b07733986a053d5ac8498176fef5f890e5e + ".github/workflows/truffleruby-25.0.yml.example": 42cdfdcd21c7b3bb1b87c22c2bc7a98135a442742df5f9a45e2b4e03838c1e7f + ".github/workflows/truffleruby-33.0.yml.example": 2a45e428ca13dac56ee75526b80eac477b61697ca06c94680e1eb05d21dbc25a + ".github/workflows/unlocked_deps.yml.example": 15f5ccbe811aa5a8650c2aa69b32f4f6a24d5f8bd3aae2dcbec92cbe3a51f0a7 + ".gitignore.example": 14864a0c88be3f8c122ab3032efeb782ba5e035013231038acf746a400437a3e + ".gitlab-ci.yml.example": ef64afa9855ebb59bbc87446fa9533238d3ce180966ceb19649a7f165715b92b + ".idea/.gitignore.example": b44a5aa16bf9fe5635558af347454b05a76d600084308a9f43d4d0b54789ecab + ".licenserc.yaml.example": 8787fa7bddce911f8ba47bda3eb6ad9786b6650d5d94786723e88773098ed37d + ".opencollective.yml.example": 9ad9b83fe54f0bddac7fb614575585d98f78df0e181ee70a7acd0168d26e3142 + ".qlty/qlty.toml.example": cf3d750d2328f6c057b08b7ce3d7ec00a4056c7f0eedda59af321d6caca03553 + ".rspec.example": 40d3f3ff435b0f9e5863772a95df8725b939c2dc11aead2bca68dcd6d85a9788 + ".rubocop.example": 591e4b45430e85b0dd460cc11c70650912fa2734988420b934109d06a749344f + ".rubocop.yml.example": 47f9a031022db67c964dd76ee2e8dfee21295a1877ca4d6233d3de39d114af73 + ".rubocop_rspec.yml.example": 288ad75e7eb14d87d80fafe6f7272217be5c57547536ee56c780a7d10ac7ec74 + ".simplecov.example": ffc76492effe905cc65797389fc8050fda136652ac078a80303cd084b349ef28 + ".structuredmerge/git-drivers.toml.example": 9d241a44c9edffcdbd3da018fa188a238089c3d1635040924df594a6929a4f97 + ".structuredmerge/kettle-jem.yml.example": 954cfc9e35cd20e46376426675e985bf8a0de19ff5069bf7be24b574837be615 + ".yard-lint.yml.example": 90def46867c9436b4e177c47d91fc8165f4602e335715aecc39f5587ae20b55b + ".yardignore.example": 821f453c609df7d46145d675424b39dfbe6dfdca8edac5f367b85fff48502455 + ".yardopts.example": 6fd6f2701713096a8a9ea095c213bbc68eeef37797c4754d97837e3229a3a5f6 + AGENTS.md.example: aec69512cbe17004660ac0abfabb9ec91a5c51c2cd82c10f30f08886f9bf64a7 + AGPL-3.0-only.md.example: d8a6cc31abc16b6748c7a21f21611f5a1ec33f67d22ca23d7da1c19b95496bee + Appraisal.root.gemfile.example: 8724e3f6faea995be655ac49369bec64a70710112b1f65707fa38f1fd2fd3254 + Appraisals.example: 9cb1abcfb1a0bd6d859ca0705efb874dbe546754c8c71f9f95025ff6817f1471 + Big-Time-Public-License.md.example: b0c02a112c9eee0ed69f05fd8f22277a2f8bc62d447b6cb75d6df560e05bf431 + CHANGELOG.md.example: 73459e50dad34d84db88844c993d975097557bdf5229e101b0d1339de6f98ffc + CHANGELOG.transfer.md: 9c201849117c9d4234724c4599643dd42fdce5f0a673a1abee97b97e556c301b + CITATION.cff.example: e404ea0a7919d78a83d53d80e211d17b9663576aa606583b709795dc023fd75c + CODE_OF_CONDUCT.md.example: f1ad532f1860f73ef774c6b27a26d41f4bc1cb8813034f5957487766ebb0986b + CONTRIBUTING.md.example: 63d339848c615f2c181d6b0565c42e56371eedb66f310d146cb7da297f7bc641 + FUNDING.md.example: 455bbb2b55d934283a2e7c16b59c321116c53310a85a718b7cf8ca44e9e3721e + FUNDING.md.no-osc.example: 05a85d5faf22d5ea5721622d242080447cf318d3277d9d529e438be1c9d5a351 + Gemfile.example: 6b2d72ec8a630cce515b7b528022071b13eee863c3164763df03792a5004345a + IRP.md.example: 85d8887d9b0e77f7fa9835ca5b9be31f586fdc94764ed1819af2a9a7fec98e96 + LICENSE.md.example: 120edf5f23173ebbdb5ad384ffc2e9b97e62aa6d0e61b733c003bd4db1b08276 + MIT.md.example: 365fce2a82f9d258ada9a527accfd5754b406ee9cdd8f8ed86bbec64b8c42ab2 + PolyForm-Noncommercial-1.0.0.md.example: ffcca38841adb694b6f380647e15f17c446a4d1656fed51a1e2041d064c94cc8 + PolyForm-Small-Business-1.0.0.md.example: 2f81e317d36f83a199c9fa10bcb250775fd90510303eaeb15aac2d8f0c1fc2d6 + README.md.example: 452446a44d120df26cde68fbc7aff086fa815769c989b994ebc1432ea927974f + REEK: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 + RUBOCOP.md.example: c09e5533ccc59b70a2efa05c99f66e521137c1053d3c12eb43509cebd5b68b0e + Rakefile.example: 569803e726b07ea26267fec6891367a3096a0dff3c266269a7081d36afe496af + SECURITY.md.example: ee9411aa85f36d88363fdaea7a1baea4362b6ec112cf2688e711b05de1d3144c + bin/setup.example: 0ac35089c95a91d8973fe7a318bf9fd98b9f8e00db92c5d9ca6cd858abb8d41b + certs/pboling.pem.example: 18956f60643666cc181e2743b3b3691bec08c5326f514f60af54d0cdb9ebc554 + gem.gemspec.example: 9989cc8a1cd125586ea807eaed549eaecc044711d31f17dd7bac2a0815b28b1a + gemfiles/modular/benchmark/r4/v0.5.gemfile.example: 5bc3190090ae456df1a8cce28dd47a7fb293495f6d845ec7e53a7a8b50f14ae1 + gemfiles/modular/benchmark/vHEAD.gemfile.example: ca6cd52c55c3082759c6ddc97638970f12d953aec1822470823d316086aa6e25 + gemfiles/modular/cgi/r4/v0.5.gemfile.example: c2d14a39377a2435419ceaca22a3421ebd899e9cba943df8a90b576a33624870 + gemfiles/modular/cgi/vHEAD.gemfile.example: 9ff3dc789b3279642876c0aad4b0094c1139bb8fbbf36daab804d3b2b3a60b43 + gemfiles/modular/coverage.gemfile.example: 915fc161ad574fdbc071bc733b69b27e94bd7a4c68cc4f58da267c9a0987f3e8 + gemfiles/modular/coverage_local.gemfile.example: 928d5f260d7b119c038baa56da9fb78dd524dee613aea33ab72894bbce5c506e + gemfiles/modular/debug.gemfile.example: 0a508bfb02e51b75394b43f4f09d98174dac36ead41cba09c1f730671a1f5905 + gemfiles/modular/documentation.gemfile.example: e15f51e4d14ad2216b6de16c323787945bd225073d70a78420f4c99c98c1ecd1 + gemfiles/modular/documentation_local.gemfile.example: 84a20f5d4b0feb94c2cf2f7a8dce8f682f1483498e41484c2b447a5661fd1870 + gemfiles/modular/erb/r2.3/default.gemfile.example: 9da0d08fb6a299b965c37fe85efcaebd9eb0a82b2ea35fdc157c41bd75431396 + gemfiles/modular/erb/r2.6/v2.2.gemfile.example: '01787cbdf7136c0d75cc7b734c6bb3d2ef6c70d6c1c50e7d0ad2112c0f8ef8e7' + gemfiles/modular/erb/r2/v3.0.gemfile.example: 3793e7dc9ef23a7ccd893d48cbba092fd27594c63e65cca011cc658218425670 + gemfiles/modular/erb/r3.1/v4.0.gemfile.example: bdf71ddcfe5001aab7d71b10a645a785928957ef7bae61d49307eb7f712279f3 + gemfiles/modular/erb/r3/v5.0.gemfile.example: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + gemfiles/modular/erb/r4/v5.0.gemfile.example: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + gemfiles/modular/erb/vHEAD.gemfile.example: ad6f104a49e80e0cf625440e3dc816343fe7e2f037fc4971df75e7bb4305c683 + gemfiles/modular/json/truffleruby_22_3.gemfile.example: 249c12eacbe90f9d0d2e81e7a62c4c7e9102e504ededcda4ecf660cb3bb68be4 + gemfiles/modular/json/truffleruby_23_0.gemfile.example: 66aa010567f7afa1af8244a74c3c88ecaaf84dc87b6a25180691bb480d02ed28 + gemfiles/modular/json/truffleruby_23_1.gemfile.example: '080fcbdaf2bec73cad40832a3d51eebb380af789917b96f493d1460b0dd6361d' + gemfiles/modular/mutex_m/r2.4/v0.1.gemfile.example: '09728bdc10807b3ca9dd3b9f12986acbe8c40ac08ada438bcfd49cd69445c650' + gemfiles/modular/mutex_m/r2/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/r3/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/r4/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/vHEAD.gemfile.example: '08018641c97f894788fa91b462da504ab2237213d18d95404136c393274ae3cb' + gemfiles/modular/optional.gemfile.example: b45eb8ecde2902441c02b2f01d4aa8f79bff75c853ef92555c3201ee798d9e87 + gemfiles/modular/recording/r2.3/recording.gemfile.example: 154da539583c51ca78ff8affa7a7caaf7f354d321b5e748beb64de61ff72f80a + gemfiles/modular/recording/r2.4/recording.gemfile.example: 6d69381eb2f8be681c72e7a5a8b5d6ec6ee586da8ce51b9b39d845d2a87e4ecf + gemfiles/modular/recording/r2.5/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/r3/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/r4/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/vHEAD.gemfile.example: 7480fd116e9671972a2735d1d97050a4fd5754aa7abfab3d115bf9bebbca038c + gemfiles/modular/rspec.gemfile.example: d043f5c9344f6435edb4607c5adaf42c78e7fb6b8b6726007de2bbedefb376c3 + gemfiles/modular/runtime_heads.gemfile.example: f163201999bf68a942b1e5bcea506bfc4b9c59711ff502091eb215d5d5f8f658 + gemfiles/modular/shunted.gemfile.example: a54a86124eff06163497462012704f62a691daa224cebeac605cdd14cffacfbe + gemfiles/modular/stringio/r2.4/v0.0.2.gemfile.example: 6425ebcd70b2e782f4c1d9074f8685c1e93ca7bf371728ef7ebbc8b5ebdf491a + gemfiles/modular/stringio/r2/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/r3/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/r4/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/vHEAD.gemfile.example: e0497ab6dad9667b22725485b781e9d99349a079250eb29cb125d58f01f4a5be + gemfiles/modular/style.gemfile.example: a15db732f566d958c2459ef549ae3877d984df3d205116e714284d1fe4f9b068 + gemfiles/modular/style_local.gemfile.example: '0083605323d23879dc7223f0198e9f1db24a25fa38730c4dbcc71c7a8a4c307f' + gemfiles/modular/templating.gemfile.example: 6cedc39529daa9aac3a4cf13fe31a628b62a4a2428f5c4f8657c5a2fa027bb35 + gemfiles/modular/templating_local.gemfile.example: 16c0b51fd46b86db09268c8485b1d5a528e5f962b593f8ae7521b15209f7d1a5 + gemfiles/modular/webrick/r4/v1.9.gemfile.example: 1ee940ff54d5ca3ce7fcff0d82ee9553386979656b9e220d5be5404d0991d5ea + gemfiles/modular/webrick/vHEAD.gemfile.example: da545f591af987648ffbaba181707480a38dfb375db7d289617986ec2c2ca23b + gemfiles/modular/x_std_libs.gemfile.example: e3917e90717d7f9f4393d847549a78c53de7f6c8de52a7f590b34b515fd6111a + gemfiles/modular/x_std_libs/r2.3/libs.gemfile.example: 379ac2a3698615789e39dc18a961b9c793b2cc594856bb3163524a99fd4ac86f + gemfiles/modular/x_std_libs/r2.4/libs.gemfile.example: ccad8f592943481317c082ce8d340316b9e90a52463c8c1eea5c5109b23e8c3d + gemfiles/modular/x_std_libs/r2.6/libs.gemfile.example: 9af20396f404a32bf76d8999c7fdd112f0282ba331f71100ab093663b2ab5670 + gemfiles/modular/x_std_libs/r2/libs.gemfile.example: e80ec8ad06cb1b31ac982bc25cf7696987fca131aa1001eaefd0bf5cd379c273 + gemfiles/modular/x_std_libs/r3.1/libs.gemfile.example: 38068bd6a0f5d02918eb286af9bdbdf0c7cf7cf026486b9fd157b541b6153d58 + gemfiles/modular/x_std_libs/r3/libs.gemfile.example: 546f8849f4267bb19aa10ff0de40be30957197f229e6887847181ea9127b2650 + gemfiles/modular/x_std_libs/r4/libs.gemfile.example: 8c2582eaa218d216b98c86c933465295c8b4e43f3251ea388b9eaf6e471f8da6 + gemfiles/modular/x_std_libs/vHEAD.gemfile.example: d3133ec4c0638363a7fb025d19be7e95a615fd61c35ddb8d17f2280ee74a7486 + lib/gem/version.rb.example: 15e219ac3a928b5580035f891e415551213175020f1131f6e7ca0ccd55a1b2d6 + mise.toml.example: b2eb06f7daaf0c3916bba155f463e166bd1de218637ba82e636c528c077c8d6d + mise.toml.no-osc.example: 35ec90d3c67b74e0014876dccad14f5883fdad88036f6b0cf5d29ea181e132ac + parsers.toml.example: f0538ae7ad8596be2dc39b3ea663f1164dec21fb0457233c1885097e774aff6f + readme/partials/basic_usage.md.example: adaa8f9de9768d1f29cb15d957404004715e7687db68c29b121d6467db13158a + readme/partials/configuration.md.example: 5ad82bc7eaf05015d31cea9265173718abc1d92729b52e3856c8366aa54184e8 + readme/partials/synopsis.md.example: 2b7383f8261086da0995fbf2c10017b3f162723b32c324ae8c0e1c1a8d1c79ef + shim/.github/workflows/current.yml.example: c2a2a2053f2726276bb8571c8a76a4b97bcce6cd54bdca01cba63d713c3a0e2f + shim/.rspec.example: 0e3a2a1587779efc3eae8fe718a3480272fbdfb3f1f6c2f9c3901f6fd81b2cce + shim/.structuredmerge/kettle-jem.yml.example: 03faae6cfda3947ef8489008b4836aad3ca280e94ddf9d08ef733071d7daa167 + shim/CHANGELOG.md.example: 2c098802b9971c51796e34067d061adbc31fa443df96be8a1fc71fc84c262d0e + shim/Gemfile.example: 9583b19e04d7ab6f5b3ea7ebb0c5d24e6a71ae5d74404a510aa979642248ba34 + shim/README.md.example: 3a2f7211b7f92a1dfae5e523b8e34b051a3d8af942144b05286eca0b3c8f6fbe + shim/Rakefile.example: 572c94da7052083b39b62a6600785419e314a109efd7a3d8c3a96eb77ad34fd1 + shim/gem.gemspec.example: cabca9717af1a18991db1de856900494e2771b044f1d5bfd2ad71b2ed4a1367d + shim/lib/compat_require.rb.example: 94ee85e353a3ca08c8a35c9063d4ff789214ea594c7f803f6cf09d7142f48379 + shim/lib/entrypoint.rb.example: dd57613520daca01d6f6bcaa9b83b00ff74505240dc04b84ceb686df3c0539d7 + shim/lib/version.rb.example: 15e219ac3a928b5580035f891e415551213175020f1131f6e7ca0ccd55a1b2d6 + shim/spec/shim_spec.rb.example: '060013019bf39b8dc267169df83752661d02c7ad890b65a99a1d97137938edfd' + shim/spec/spec_helper.rb.example: 88e2ab0bd8888022a68e856e04f61053e238e54f51b428b386aaebf93ae8ad83 + sig/gem.rbs.example: 47a4f7e524cc6f773875b6c08691ca4d65c2b14618abd5b9b91055ae5b248cec + spec/spec_helper.rb.example: 0c8119bd75b90f3a2403789b68b539fd19952370051297b1807596e201ef4813 +files: + ".simplecov": + recipe: template_source_application_simplecov + action: write + dest_sha256: af05796d556a2227240c976db7fda6eef8d31c8b1f60deee970a60aa1f61dcfa + input_fingerprint: bf3184ad37696af56919607ccadac778c24efd43a8d7e3bced36cd8892c59e01 + template_sources: + - ".simplecov.example" + AGPL-3.0-only.md: + recipe: template_source_application_AGPL_3_0_only_md + action: write + dest_sha256: d8a6cc31abc16b6748c7a21f21611f5a1ec33f67d22ca23d7da1c19b95496bee + input_fingerprint: 59d97ea6b6bc9cc521ceac86c655f24415754d1a4df8edb18e2190cd540818e6 + template_sources: + - AGPL-3.0-only.md.example + Gemfile: + recipe: template_source_application_Gemfile + action: write + dest_sha256: 96e6b8e599fc37186dead43bbc2f41059f7932554934f973fd6713f2007e6d5e + input_fingerprint: c87a13c71c496ce8290bd045465ef2418f8726093741e8e67102eab26320bf34 + template_sources: + - Gemfile.example + LICENSE.md: + recipe: template_source_application_LICENSE_md + action: write + dest_sha256: f6188bfd474a636d2a526420ebb411250faa447d94c9b9ccee097128ce4101b5 + input_fingerprint: ae16b6f955ba0ed9fd0227305f0b1a4c908766059a074344f44f5bfe990b96a3 + template_sources: + - LICENSE.md.example + PolyForm-Small-Business-1.0.0.md: + recipe: template_source_application_PolyForm_Small_Business_1_0_0_md + action: write + dest_sha256: 2f81e317d36f83a199c9fa10bcb250775fd90510303eaeb15aac2d8f0c1fc2d6 + input_fingerprint: cde86c3c2772ae99a880af8dda9f9d3ea31c28198075e49699810b910aeb1e7e + template_sources: + - PolyForm-Small-Business-1.0.0.md.example + README.md: + recipe: template_source_application_README_md + action: write + dest_sha256: a3a68c8f512ce73b4d97bcf24dce48e1b38c2b0ba556a0b97ee1b39652ec8fd0 + input_fingerprint: 0dab6bda377771053d8c3f8cc8df29795a66f483139cfe8f6c13ca25d50468bf + template_sources: + - README.md.example + ast-merge-git.gemspec: + recipe: template_source_application_ast_merge_git_gemspec + action: write + dest_sha256: a58f8f89c497e9987fd002f0b4adae0cc2a962093b24495a3224dbe97278b42f + input_fingerprint: 0a8aa1fff8401524ba20465b82f49ab0e2d41a0bcbb2a78b07bafbc396d15145 + template_sources: + - gem.gemspec.example + certs/pboling.pem: + recipe: template_source_application_certs_pboling_pem + action: write + dest_sha256: 18956f60643666cc181e2743b3b3691bec08c5326f514f60af54d0cdb9ebc554 + input_fingerprint: 0dae2707f0db5af18e44be828ac15a84e9e41617e25298b13c20342b67533294 + template_sources: + - certs/pboling.pem.example + gemfiles/modular/benchmark/r4/v0.5.gemfile: + recipe: template_source_application_gemfiles_modular_benchmark_r4_v0_5_gemfile + action: write + dest_sha256: 5bc3190090ae456df1a8cce28dd47a7fb293495f6d845ec7e53a7a8b50f14ae1 + input_fingerprint: 15119faa3064cedd590ac09d902b059f7cdd52567095e26096ffd11b6e19d584 + template_sources: + - gemfiles/modular/benchmark/r4/v0.5.gemfile.example + gemfiles/modular/benchmark/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_benchmark_vHEAD_gemfile + action: write + dest_sha256: ca6cd52c55c3082759c6ddc97638970f12d953aec1822470823d316086aa6e25 + input_fingerprint: 2e193caa0a9b7923b05ce39c88e4b24af1db492435214b9b2420e95b137ce717 + template_sources: + - gemfiles/modular/benchmark/vHEAD.gemfile.example + gemfiles/modular/cgi/r4/v0.5.gemfile: + recipe: template_source_application_gemfiles_modular_cgi_r4_v0_5_gemfile + action: write + dest_sha256: c2d14a39377a2435419ceaca22a3421ebd899e9cba943df8a90b576a33624870 + input_fingerprint: a48a6b48068605bb34c49a1131007a5cd1fe59ee074e99f89774d09fde3e8027 + template_sources: + - gemfiles/modular/cgi/r4/v0.5.gemfile.example + gemfiles/modular/cgi/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_cgi_vHEAD_gemfile + action: write + dest_sha256: 9ff3dc789b3279642876c0aad4b0094c1139bb8fbbf36daab804d3b2b3a60b43 + input_fingerprint: c20047a5f46c2ea62b4d88a9f1042058400fa1f223e6c0b6161ba439b6d69349 + template_sources: + - gemfiles/modular/cgi/vHEAD.gemfile.example + gemfiles/modular/coverage.gemfile: + recipe: template_source_application_gemfiles_modular_coverage_gemfile + action: write + dest_sha256: 915fc161ad574fdbc071bc733b69b27e94bd7a4c68cc4f58da267c9a0987f3e8 + input_fingerprint: 5699ce16e09c8f0e096a296cd7dc18de0e7645aa603c28ddaa7d12b5b97472da + template_sources: + - gemfiles/modular/coverage.gemfile.example + gemfiles/modular/coverage_local.gemfile: + recipe: template_source_application_gemfiles_modular_coverage_local_gemfile + action: write + dest_sha256: fe643cec3082a185189510ab2a2faeb3cf062bd461c3c245576452cc9f177b5c + input_fingerprint: 30dc5114c003a9c44caa37f7c778e0a8a12abb78460538dafb02f5c5fe75971a + template_sources: + - gemfiles/modular/coverage_local.gemfile.example + gemfiles/modular/debug.gemfile: + recipe: template_source_application_gemfiles_modular_debug_gemfile + action: write + dest_sha256: 0a508bfb02e51b75394b43f4f09d98174dac36ead41cba09c1f730671a1f5905 + input_fingerprint: 2b63304acc64bf4e2f843cf435f540702e919a6677880edb9d9503fd8a46cbf6 + template_sources: + - gemfiles/modular/debug.gemfile.example + gemfiles/modular/documentation.gemfile: + recipe: template_source_application_gemfiles_modular_documentation_gemfile + action: write + dest_sha256: e15f51e4d14ad2216b6de16c323787945bd225073d70a78420f4c99c98c1ecd1 + input_fingerprint: 2d82aba7cede4b56e8139707aa332a89d59b46417f775b4fbae95d9bcc801a70 + template_sources: + - gemfiles/modular/documentation.gemfile.example + gemfiles/modular/documentation_local.gemfile: + recipe: template_source_application_gemfiles_modular_documentation_local_gemfile + action: write + dest_sha256: 32267e03933d679e833e20c6075c97b3f4f0835f61a97159269b6ce8bfc885c5 + input_fingerprint: 1c1e4597319b0ee218126e7e4391ecfd3e925fad3d843546889b58abefc8ea9f + template_sources: + - gemfiles/modular/documentation_local.gemfile.example + gemfiles/modular/erb/r2/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r2_v3_0_gemfile + action: write + dest_sha256: 3793e7dc9ef23a7ccd893d48cbba092fd27594c63e65cca011cc658218425670 + input_fingerprint: efbfcb5379247876d4648e8e9450bb05ce0f9c6c99b6f82f321c35501415b7c5 + template_sources: + - gemfiles/modular/erb/r2/v3.0.gemfile.example + gemfiles/modular/erb/r3/v5.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r3_v5_0_gemfile + action: write + dest_sha256: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + input_fingerprint: ea034dba392fcf2d2045b8ac6232d70e663c340e7bdcc46d74c621bcb946944e + template_sources: + - gemfiles/modular/erb/r3/v5.0.gemfile.example + gemfiles/modular/erb/r4/v5.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r4_v5_0_gemfile + action: write + dest_sha256: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + input_fingerprint: 8a5e8867bcdddea9b1c7cb4547d15461b57c868b0c460592a2a42b45121e6288 + template_sources: + - gemfiles/modular/erb/r4/v5.0.gemfile.example + gemfiles/modular/erb/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_erb_vHEAD_gemfile + action: write + dest_sha256: ad6f104a49e80e0cf625440e3dc816343fe7e2f037fc4971df75e7bb4305c683 + input_fingerprint: cd87c1aad2fcceedc80e1395938d077326e97d162c15c35015ffc1a86b24542f + template_sources: + - gemfiles/modular/erb/vHEAD.gemfile.example + gemfiles/modular/json/truffleruby_22_3.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_22_3_gemfile + action: write + dest_sha256: 249c12eacbe90f9d0d2e81e7a62c4c7e9102e504ededcda4ecf660cb3bb68be4 + input_fingerprint: 3dc9993accc7aaafc29614d4d67772d3bac0afaf84870d01bb41463618db9392 + template_sources: + - gemfiles/modular/json/truffleruby_22_3.gemfile.example + gemfiles/modular/json/truffleruby_23_0.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_23_0_gemfile + action: write + dest_sha256: 66aa010567f7afa1af8244a74c3c88ecaaf84dc87b6a25180691bb480d02ed28 + input_fingerprint: b6c553be413a19d13b2b811bbf3a873ae1b4cc57b9425ee1f850bb79b2f9712c + template_sources: + - gemfiles/modular/json/truffleruby_23_0.gemfile.example + gemfiles/modular/json/truffleruby_23_1.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_23_1_gemfile + action: write + dest_sha256: '080fcbdaf2bec73cad40832a3d51eebb380af789917b96f493d1460b0dd6361d' + input_fingerprint: 2b294a471dd8744099ee5860841d50660d484a63ea8fd7cdeaf8a0bed5120e21 + template_sources: + - gemfiles/modular/json/truffleruby_23_1.gemfile.example + gemfiles/modular/mutex_m/r2/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r2_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: a38e7755ec76f12435bbee2b27733fd798343273c33c3f23597c5ac816aac5e6 + template_sources: + - gemfiles/modular/mutex_m/r2/v0.3.gemfile.example + gemfiles/modular/mutex_m/r3/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r3_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: 9e118dd4097ff0009b8cddd619837b11e82b6c2b12b8bbec387589046a2ef1b6 + template_sources: + - gemfiles/modular/mutex_m/r3/v0.3.gemfile.example + gemfiles/modular/mutex_m/r4/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r4_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: 2611770e2773eafea7d1ec89cfaec8d96d0413f44bdb375f74e477d50bbce9f9 + template_sources: + - gemfiles/modular/mutex_m/r4/v0.3.gemfile.example + gemfiles/modular/mutex_m/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_vHEAD_gemfile + action: write + dest_sha256: '08018641c97f894788fa91b462da504ab2237213d18d95404136c393274ae3cb' + input_fingerprint: 16625c83f1c18de9821dfe31225e70302bdec516b3a496fee731120182842023 + template_sources: + - gemfiles/modular/mutex_m/vHEAD.gemfile.example + gemfiles/modular/optional.gemfile: + recipe: template_source_application_gemfiles_modular_optional_gemfile + action: write + dest_sha256: f770e6e9a9dd2bd0f1f132e882d88038b2e21127dce3afe270908c7338c28bfd + input_fingerprint: e7d444be9657b5e83f1b7fa05b597aad581d49013991ca5d39b5859f8bc7af7d + template_sources: + - gemfiles/modular/optional.gemfile.example + gemfiles/modular/rspec.gemfile: + recipe: template_source_application_gemfiles_modular_rspec_gemfile + action: write + dest_sha256: d043f5c9344f6435edb4607c5adaf42c78e7fb6b8b6726007de2bbedefb376c3 + input_fingerprint: 5e8de9532f04fcf820ec9662ba45348d28ade068e266a748cefef41e9b260ba5 + template_sources: + - gemfiles/modular/rspec.gemfile.example + gemfiles/modular/runtime_heads.gemfile: + recipe: template_source_application_gemfiles_modular_runtime_heads_gemfile + action: write + dest_sha256: 6ac7158c4a3088190f2a9082f01439eb27eca2172ab3464b15c9cb045aa885e1 + input_fingerprint: d34337fc3378cc77a16e7d57d0a1434c2899779cf229b6978d845cf30d37b929 + template_sources: + - gemfiles/modular/runtime_heads.gemfile.example + gemfiles/modular/stringio/r2/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r2_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: 5cb2e6507fb100fa2df0a5269024ce29dd012c5751bb82dca19ccc7fe7788aa6 + template_sources: + - gemfiles/modular/stringio/r2/v3.0.gemfile.example + gemfiles/modular/stringio/r3/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r3_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: 1a922607bf1aa7b1033ead440ed15b582022baab883d8fa463dbd54c2d71abe3 + template_sources: + - gemfiles/modular/stringio/r3/v3.0.gemfile.example + gemfiles/modular/stringio/r4/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r4_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: b45d9b172c7d047968ee87724481415d32565f995c003c800f9614eecf915741 + template_sources: + - gemfiles/modular/stringio/r4/v3.0.gemfile.example + gemfiles/modular/stringio/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_vHEAD_gemfile + action: write + dest_sha256: e0497ab6dad9667b22725485b781e9d99349a079250eb29cb125d58f01f4a5be + input_fingerprint: b02ef7b71dd91c3bd4c5f19ed2a3dfe80c40b4cbf341253935cb37ec14f7f42d + template_sources: + - gemfiles/modular/stringio/vHEAD.gemfile.example + gemfiles/modular/style.gemfile: + recipe: template_source_application_gemfiles_modular_style_gemfile + action: write + dest_sha256: 071066457ce6081cbc03d10d777f741b84019071c78e45c23889f13658a0a4a6 + input_fingerprint: dee1fd4334206f57a9dcffa2e93e631c483267567fe3d021d7a9495efa290a79 + template_sources: + - gemfiles/modular/style.gemfile.example + gemfiles/modular/style_local.gemfile: + recipe: template_source_application_gemfiles_modular_style_local_gemfile + action: write + dest_sha256: ae4cd345dd7927547f0ba9339286d304cb912887111944882795beb15055080c + input_fingerprint: d2700c41647966e0e6983544145c342981e251e751b463fa70bdcf1fefc63b7f + template_sources: + - gemfiles/modular/style_local.gemfile.example + gemfiles/modular/templating.gemfile: + recipe: template_source_application_gemfiles_modular_templating_gemfile + action: write + dest_sha256: 6cedc39529daa9aac3a4cf13fe31a628b62a4a2428f5c4f8657c5a2fa027bb35 + input_fingerprint: a7e4c8f2e9a1aa2a02713f69e00f3151be6ea1a89126637706f559ab6a7cadb2 + template_sources: + - gemfiles/modular/templating.gemfile.example + gemfiles/modular/templating_local.gemfile: + recipe: template_source_application_gemfiles_modular_templating_local_gemfile + action: write + dest_sha256: e9b0be4aa2ecc12e383b585b864dbb2ae6207917bddd7c2a98d02510b8e66bce + input_fingerprint: 8e628c1adf098b6a7225b5e771baa07c9eb5ed6e731bfb70c1466db1e9bf9e6a + template_sources: + - gemfiles/modular/templating_local.gemfile.example + gemfiles/modular/webrick/r4/v1.9.gemfile: + recipe: template_source_application_gemfiles_modular_webrick_r4_v1_9_gemfile + action: write + dest_sha256: 1ee940ff54d5ca3ce7fcff0d82ee9553386979656b9e220d5be5404d0991d5ea + input_fingerprint: c1d9cfe1d580011c6a0c47c6aaaaabab14da9b3520f41ff6b9a77a3cec990e7c + template_sources: + - gemfiles/modular/webrick/r4/v1.9.gemfile.example + gemfiles/modular/webrick/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_webrick_vHEAD_gemfile + action: write + dest_sha256: da545f591af987648ffbaba181707480a38dfb375db7d289617986ec2c2ca23b + input_fingerprint: 5bed7c292242690fd967e1de6ba629fbec6181aeebf295b16cb46a4efc42e6f7 + template_sources: + - gemfiles/modular/webrick/vHEAD.gemfile.example + gemfiles/modular/x_std_libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_gemfile + action: write + dest_sha256: e3917e90717d7f9f4393d847549a78c53de7f6c8de52a7f590b34b515fd6111a + input_fingerprint: b8986db155feff2c78891c79753919a98e4468e628e901242551d8951d7f9ddb + template_sources: + - gemfiles/modular/x_std_libs.gemfile.example + gemfiles/modular/x_std_libs/r2/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r2_libs_gemfile + action: write + dest_sha256: e80ec8ad06cb1b31ac982bc25cf7696987fca131aa1001eaefd0bf5cd379c273 + input_fingerprint: f5f871955cd8407ea64e306a0f79c6c35b6a8a28b72731297d4fb10d1c7cc705 + template_sources: + - gemfiles/modular/x_std_libs/r2/libs.gemfile.example + gemfiles/modular/x_std_libs/r3/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r3_libs_gemfile + action: write + dest_sha256: 546f8849f4267bb19aa10ff0de40be30957197f229e6887847181ea9127b2650 + input_fingerprint: cbb0ceb5172182ec463caffd6c096fd7966f9cb7be41974580dfaafd0eb70771 + template_sources: + - gemfiles/modular/x_std_libs/r3/libs.gemfile.example + gemfiles/modular/x_std_libs/r4/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r4_libs_gemfile + action: write + dest_sha256: 8c2582eaa218d216b98c86c933465295c8b4e43f3251ea388b9eaf6e471f8da6 + input_fingerprint: 2524c38c1ce6ea64eca907b5778bb3108e7c5d5b87816f4b8b1c73a742978818 + template_sources: + - gemfiles/modular/x_std_libs/r4/libs.gemfile.example + gemfiles/modular/x_std_libs/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_vHEAD_gemfile + action: write + dest_sha256: d3133ec4c0638363a7fb025d19be7e95a615fd61c35ddb8d17f2280ee74a7486 + input_fingerprint: d5630cf0500e30d85aad8c8b7893339a942890c5ff2ea29dea649935b7db0367 + template_sources: + - gemfiles/modular/x_std_libs/vHEAD.gemfile.example + lib/ast/merge/git/version.rb: + recipe: template_source_application_lib_ast_merge_git_version_rb + action: write + dest_sha256: 5deadd6f23a46503be34ddf5f08f40fe481bd50fb1bf0b812a024ebffcf0deb7 + input_fingerprint: 6a6345aebe90d8d3b86f296d7c4c0d6d9619639136c9b76ca77983fd64ad97e7 + template_sources: + - lib/gem/version.rb.example + sig/ast/merge/git.rbs: + recipe: template_source_application_sig_ast_merge_git_rbs + action: write + dest_sha256: e77e9fb29612e39efde9018ea3c15d747da1bcb5fed078821315b69b36fbbb21 + input_fingerprint: 15489115b54d26ba5780b70a6dcc7eff8df88bb3995bccafdf98c37f0bbb9c7b + template_sources: + - sig/gem.rbs.example + spec/spec_helper.rb: + recipe: template_source_application_spec_spec_helper_rb + action: write + dest_sha256: 7454f4777a67835f0a934031fc471ad2136f8cb9bdbb79dba338023506c8d840 + input_fingerprint: 7266b1d78bb92e00f7045155bef68fff9c11db2987492ada077a924619c5d770 + template_sources: + - spec/spec_helper.rb.example diff --git a/gems/ast-merge-git/Gemfile b/gems/ast-merge-git/Gemfile index ee961dec3..1f425f4bd 100644 --- a/gems/ast-merge-git/Gemfile +++ b/gems/ast-merge-git/Gemfile @@ -19,8 +19,7 @@ git_source(:gitlab) { |repo_name| "https://gitlab.com/#{repo_name}" } gemspec # Local workspace dependency wiring for *_local.gemfile overrides -nomono_requirements = ['~> 1.0', '>= 1.0.8'] -gem 'nomono', *nomono_requirements, require: false # ruby >= 2.2 +gem 'nomono', '~> 1.1', '>= 1.1.0', require: false # ruby >= 3.2.0 # Direct sibling dependencies (env-switched via STRUCTUREDMERGE_DEV) direct_sibling_gems = %w[ diff --git a/gems/ast-merge-git/Gemfile.lock b/gems/ast-merge-git/Gemfile.lock index 5c10515c9..a01dfb994 100644 --- a/gems/ast-merge-git/Gemfile.lock +++ b/gems/ast-merge-git/Gemfile.lock @@ -78,8 +78,8 @@ GEM bundler (>= 1.14) version_gem (~> 1.1, >= 1.1.4) geom2d (0.4.1) - gitmoji-regex (2.0.4) - version_gem (~> 1.1, >= 1.1.13) + gitmoji-regex (2.0.6) + version_gem (~> 1.1, >= 1.1.14) hexapdf (1.9.1) cmdparse (~> 3.0, >= 3.0.3) geom2d (~> 0.4, >= 0.4.1) @@ -96,20 +96,29 @@ GEM ast-merge (= 7.1.0) tree_haver (= 7.1.0) version_gem (~> 1.1, >= 1.1.9) - kettle-dev (2.3.9) + kettle-dev (2.4.5) emoji_regex (>= 15.0) + kettle-gha-pins (~> 0.3, >= 0.3.1) + kettle-ndjson (~> 0.1, >= 0.1.1) kettle-rb (~> 0.1, >= 0.1.2) - kettle-test (~> 2.0, >= 2.0.4) + kettle-test (~> 2.0, >= 2.0.12) ruby-progressbar (~> 1.13) + tty-progressbar (~> 0.18) + kettle-gha-pins (0.3.1) + ruby-progressbar (~> 1.13) + tty-progressbar (~> 0.18) + version_gem (~> 1.1, >= 1.1.14) + kettle-ndjson (0.1.1) + version_gem (~> 1.1, >= 1.1.14) kettle-rb (0.1.5) - kettle-soup-cover (3.0.4) + kettle-soup-cover (3.0.5) kettle-wash (~> 0.1, >= 0.1.0) simplecov (>= 1.0) simplecov-cobertura (>= 4.0) simplecov-console (~> 0.9, >= 0.9.5) simplecov-rcov (~> 0.3, >= 0.3.7) simplecov_lcov_formatter (~> 0.9, >= 0.9.0) - kettle-test (2.0.12) + kettle-test (2.0.15) appraisal2 (~> 3.0, >= 3.0.6) backports (~> 3.0) rspec (~> 3.0) @@ -130,8 +139,18 @@ GEM lint_roller (1.1.0) logger (1.7.0) mutex_m (0.3.0) + nokogiri (1.19.4-aarch64-linux-gnu) + racc (~> 1.4) + nokogiri (1.19.4-aarch64-linux-musl) + racc (~> 1.4) + nokogiri (1.19.4-arm64-darwin) + racc (~> 1.4) + nokogiri (1.19.4-x86_64-darwin) + racc (~> 1.4) nokogiri (1.19.4-x86_64-linux-gnu) racc (~> 1.4) + nokogiri (1.19.4-x86_64-linux-musl) + racc (~> 1.4) nomono (1.1.0) openssl (4.0.2) ostruct (0.6.3) @@ -186,11 +205,11 @@ GEM rspec-mocks (3.13.8) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) - rspec-pending_for (0.1.21) + rspec-pending_for (0.1.22) rspec-core (~> 3.0) ruby_engine (~> 2.0) ruby_version (~> 1.0) - rspec-stubbed_env (1.0.6) + rspec-stubbed_env (1.0.8) rspec-support (3.13.7) rspec_junit_formatter (0.6.0) rspec-core (>= 2, < 4, != 2.12.0) @@ -286,7 +305,7 @@ GEM silent_stream (1.0.12) logger (~> 1.2) version_gem (>= 1.1.8, < 3) - simplecov (1.0.2) + simplecov (1.0.3) simplecov-cobertura (4.0.0) rexml simplecov (~> 1.0) @@ -298,7 +317,7 @@ GEM simplecov (>= 0.4.1) simplecov_lcov_formatter (0.9.0) simplecov (>= 0.18) - sorbet-runtime (0.6.13351) + sorbet-runtime (0.6.13363) standard (1.56.0) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.0) @@ -322,9 +341,9 @@ GEM standard-custom (~> 1.0, >= 1.0.2) standard-performance (~> 1.9, >= 1.9.0) version_gem (~> 1.1, >= 1.1.13) - stone_checksums (1.0.6) - version_gem (~> 1.1, >= 1.1.13) + stone_checksums (1.0.7) stringio (3.2.0) + strings-ansi (0.2.0) strscan (3.1.8) terminal-table (4.0.0) unicode-display_width (>= 1.1.1, < 4) @@ -342,16 +361,27 @@ GEM parslet (~> 2.0) tree_sitter_language_pack (>= 1.13.2, < 2.0) version_gem (~> 1.1, >= 1.1.9) - tree_sitter_language_pack (1.13.3-x86_64-linux) + tree_sitter_language_pack (1.13.4-aarch64-linux) + sorbet-runtime (~> 0.5) + tree_sitter_language_pack (1.13.4-arm64-darwin) + sorbet-runtime (~> 0.5) + tree_sitter_language_pack (1.13.4-x86_64-darwin) + sorbet-runtime (~> 0.5) + tree_sitter_language_pack (1.13.4-x86_64-linux) sorbet-runtime (~> 0.5) tsort (0.2.0) - turbo_tests2 (3.2.0) + tty-cursor (0.7.1) + tty-progressbar (0.18.3) + strings-ansi (~> 0.2) + tty-cursor (~> 0.7) + tty-screen (~> 0.8) + unicode-display_width (>= 1.6, < 3.0) + tty-screen (0.8.2) + turbo_tests2 (3.2.3) parallel_tests (>= 3.3.0, < 6) rspec (>= 3.10) version_gem (~> 1.1, >= 1.1.14) - unicode-display_width (3.2.0) - unicode-emoji (~> 4.1) - unicode-emoji (4.2.0) + unicode-display_width (2.6.0) version_gem (1.1.14) webrick (1.9.2) yaml-converter (0.2.3) @@ -369,6 +399,9 @@ GEM ostruct rainbow yard + yard-lint (1.10.2) + yard (~> 0.9) + zeitwerk (~> 2.6) yard-relative_markdown_links (0.6.0) nokogiri (>= 1.14.3, < 2) yard-timekeeper (0.2.4) @@ -380,8 +413,13 @@ GEM zlib (3.2.3) PLATFORMS - x86_64-linux + aarch64-linux + aarch64-linux-gnu + aarch64-linux-musl + arm64-darwin + x86_64-darwin x86_64-linux-gnu + x86_64-linux-musl DEPENDENCIES addressable (>= 2.8, < 3) @@ -397,12 +435,12 @@ DEPENDENCIES gitmoji-regex (~> 2.0, >= 2.0.0) irb (~> 1.17) kettle-dev (~> 2.0, >= 2.2.25) - kettle-soup-cover (~> 3.0, >= 3.0.3) + kettle-soup-cover (~> 3.0, >= 3.0.5) kettle-test (~> 2.0, >= 2.0.9) kramdown (~> 2.5, >= 2.5.2) kramdown-parser-gfm (~> 1.1) mutex_m (~> 0.2) - nomono (~> 1.0, >= 1.0.8) + nomono (~> 1.1, >= 1.1.0) rake (~> 13.0) rbs (>= 3.0) rdoc (~> 6.11) @@ -425,6 +463,7 @@ DEPENDENCIES yard (~> 0.9, >= 0.9.45) yard-fence (~> 0.9, >= 0.9.6) yard-junk (~> 0.1, >= 0.1.0) + yard-lint (~> 1.10, >= 1.10.2) yard-relative_markdown_links (~> 0.6) yard-timekeeper (~> 0.2, >= 0.2.4) yard-yaml (~> 0.2, >= 0.2.3) @@ -462,16 +501,18 @@ CHECKSUMS erb (6.0.6) sha256=a9b24986700f5bf127c4f297c5403c3ca41b83b0a316c0cd09a096b56e644ae5 gem_bench (2.0.5) sha256=0dc0fb44a5a5eb7b2f5c1c68a5b0164d72007132822c012bac3abe976b199ead geom2d (0.4.1) sha256=ea0998ea90c4f2752e24fe13d85a4f89bee689d151316140ebcc6369bf634ed9 - gitmoji-regex (2.0.4) sha256=01410d3217940bd0e7b2299ec805245afe8d0f06a5d6d38f623d63a63c0ac34f + gitmoji-regex (2.0.6) sha256=d50649caccc8ad1b080f01e869f0909b135206d8b3ece2313ca31a9b0e39f14b hexapdf (1.9.1) sha256=2d1f6a3622e6bc2a70a707d4c3f3fa44f5552ecd9d899f6283abb07398a84884 io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc irb (1.18.0) sha256=de9454a0703a54704b9811a5ef31a60c86949fbf4013fcf244fabc7c775248e3 json (2.21.1) sha256=13a43df75d95641443f5702dff350f237164a9d811ff0f2c2800d4d980220583 json-merge (7.1.0) - kettle-dev (2.3.9) sha256=03b2f72c6dda4d2c4401ee3c0c96853116c922766e7b5b04224434a49b571bfc + kettle-dev (2.4.5) sha256=3a451940796a671b7adc910db7c3da87899ebec7c5274921ca598345549ae7eb + kettle-gha-pins (0.3.1) sha256=b13a82a403af31880288fe65f85f2a24a93ae4740c0c7cbc15a35044d27aaa51 + kettle-ndjson (0.1.1) sha256=2d84314e8c911d6f560f2736e8f72019df6d811829674788ff33b3bbf518ed66 kettle-rb (0.1.5) sha256=0322a569860c86e70f90d5ebe72353b8720b7054c7efa9f9044857f5c972d29f - kettle-soup-cover (3.0.4) sha256=36d4df472362d2020d16411d7ce26ba2fe2a41fb8be64577ff9b5280acf99d86 - kettle-test (2.0.12) sha256=3a8e5c5f38db03a6f0a8896da6f3576d24e36f53796578c19aafaa2ba5a8ea52 + kettle-soup-cover (3.0.5) sha256=80abb42eb294fa5d3c8632c259a297c554fbc01902714461f3bf99a65190f5d0 + kettle-test (2.0.15) sha256=993b132ffec17fe82cc81c69f876e15d6eb610a4831df08dc01c0cce5c070caa kettle-wash (0.1.1) sha256=ae2e08b64c72c46ceed5ffa197ed859e85352f38ed0412fca2e18ce29b2dc4f9 kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa kramdown-parser-gfm (1.1.0) sha256=fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729 @@ -479,7 +520,12 @@ CHECKSUMS lint_roller (1.1.0) sha256=2c0c845b632a7d172cb849cc90c1bce937a28c5c8ccccb50dfd46a485003cc87 logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203 mutex_m (0.3.0) sha256=cfcb04ac16b69c4813777022fdceda24e9f798e48092a2b817eb4c0a782b0751 + nokogiri (1.19.4-aarch64-linux-gnu) sha256=1269fb644a6de405057a53dd5c762b1209b43ca7424f839454d3dbc677c31a8f + nokogiri (1.19.4-aarch64-linux-musl) sha256=35c65b9ce72b3bb03207bdbe7067915019dc18c1b9b59139684bd6690fdd01af + nokogiri (1.19.4-arm64-darwin) sha256=a46db9853286e6597b36ebc6953817d15acf3a299583eb3f89fdc6f91dd63527 + nokogiri (1.19.4-x86_64-darwin) sha256=7fd17057d3e1f00e9954a74b3cd76595d3d4a5ef233b7ed9599047c204f70551 nokogiri (1.19.4-x86_64-linux-gnu) sha256=379fae440b28915e3f19d752ce2dcf8465ed2b2fbefd2a7ca0dd497bc981a06a + nokogiri (1.19.4-x86_64-linux-musl) sha256=17dfb7c1fa194ae02fbf7c51a7afc8d278045ab3fdacfd86f91d02d7b274470b nomono (1.1.0) sha256=463dd4c79da02a855739a1b5483190d527b7868688be905e84abdb3449b32c88 openssl (4.0.2) sha256=1037ad2868ae58df9ad917891c0c0f9815a1172f6846d4bcdd508e4c2ee747c2 ostruct (0.6.3) sha256=95a2ed4a4bd1d190784e666b47b2d3f078e4a9efda2fccf18f84ddc6538ed912 @@ -507,8 +553,8 @@ CHECKSUMS rspec-core (3.13.6) sha256=a8823c6411667b60a8bca135364351dda34cd55e44ff94c4be4633b37d828b2d rspec-expectations (3.13.5) sha256=33a4d3a1d95060aea4c94e9f237030a8f9eae5615e9bd85718fe3a09e4b58836 rspec-mocks (3.13.8) sha256=086ad3d3d17533f4237643de0b5c42f04b66348c28bf6b9c2d3f4a3b01af1d47 - rspec-pending_for (0.1.21) sha256=c87fda50c20f8faca72d9cfa6a936abffd37860343f14aced95bbb29b8ae96bf - rspec-stubbed_env (1.0.6) sha256=6467a6eb0f72146d443ffb0c5a2a549d8812e59c04fbc81e03cd914ebf1f28dc + rspec-pending_for (0.1.22) sha256=49dc647473f8c8ea4ccc1a33813537dd94b913ef7ec5a8689896101eaacb71cf + rspec-stubbed_env (1.0.8) sha256=b23c4dd5e5d6a0cf0c5b4f6ed3f3678d78e4be9ec247ea9abf0669d20b490535 rspec-support (3.13.7) sha256=0640e5570872aafefd79867901deeeeb40b0c9875a36b983d85f54fb7381c47c rspec_junit_formatter (0.6.0) sha256=40dde674e6ae4e6cc0ff560da25497677e34fefd2338cc467a8972f602b62b15 rubocop (1.88.2) sha256=8def251c90cd955feb4daa3edc0ab56893250c4ce90ef81e6c80c03f9a939bbf @@ -534,37 +580,44 @@ CHECKSUMS ruby_engine (2.0.3) sha256=ca2ae7def8cfcdc2bfb6a186d36d5d59c8b403245dc0256c3802b767fa278aaa ruby_version (1.0.3) sha256=5930f9950746b7e6c973184398ee364ee7440b170fef7922b9f5cdf317f1ccb5 silent_stream (1.0.12) sha256=377c43aa10033fe90c33b39ea8cd97d79f2d1c4856df598efc56f3091f3ae782 - simplecov (1.0.2) sha256=c6459434efe4b948b46477cc2df2faa73ab365f83a33c7c17f81262f4f7f1244 + simplecov (1.0.3) sha256=38ef0514f16ae7562f0d0f4df02610071115103d301b6de7dacbcc000082e39b simplecov-cobertura (4.0.0) sha256=e4fb3159b1ecea545b44f5452a8611305323e78ad23eae8aed35924d072e01ea simplecov-console (0.9.5) sha256=b1108bcfff5f210143e2b8301698c367b01586f20d25a73e95475a5df6fc6ff6 simplecov-rcov (0.3.7) sha256=372f50bf6df6b6350b7d0c840f2f8bdabe021861a43c26877b747c9ac96139fc simplecov_lcov_formatter (0.9.0) sha256=4c1839bb31dcf7a8f7a6474c94ed228aa03b994e9dd5e1965e58b4121b049bed - sorbet-runtime (0.6.13351) sha256=f8fee17c6e3edf835dc6823d26afb9a7c8969c6710d1fabe2fb43f4e0c15c64f + sorbet-runtime (0.6.13363) sha256=f1f0b2e946fb3cd76b9d8e3d85459cdaf7f5466331a400cafcf008e508b6d2c3 standard (1.56.0) sha256=ae2af4d9669589162ac69ed5ef59dcf9f346d4afc81f7e62b84339310dfcb787 standard-custom (1.0.2) sha256=424adc84179a074f1a2a309bb9cf7cd6bfdb2b6541f20c6bf9436c0ba22a652b standard-performance (1.9.0) sha256=49483d31be448292951d80e5e67cdcb576c2502103c7b40aec6f1b6e9c88e3f2 standard-rspec (0.5.0) sha256=64d396524a65af47f5331b423d8cdd313e0267401647bb7892489ca89dad2973 standard-rubocop-lts (2.0.10) sha256=89708a505b7d8b24d2ac399a7520fcb9e764abc2ecb4289b631b5fe0e3b76617 - stone_checksums (1.0.6) sha256=c775f830513d6c6ab26e31d1a5fbecd4c4e39002663d4d9f8fa96e97990b5298 + stone_checksums (1.0.7) sha256=faf7a175da7c4f32777c5292a0128b06eec183b3cc3a0b382529b21800300626 stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1 + strings-ansi (0.2.0) sha256=90262d760ea4a94cc2ae8d58205277a343409c288cbe7c29416b1826bd511c88 strscan (3.1.8) sha256=aae2db611a225559f21ffbb71765c9a4e60fd262534a9ea84f4f11c7f32f679e terminal-table (4.0.0) sha256=f504793203f8251b2ea7c7068333053f0beeea26093ec9962e62ea79f94301d2 thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73 timecop (0.9.11) sha256=41284dc6e5041f2184f781ace766f942108c842f8d8c1386a26e6343decc7542 timecop-rspec (1.0.3) sha256=005f14841bb606dcaefb060e321b5388e2e59537742bee8b3a9a9a40e598fab9 - token-resolver (2.0.5) sha256=b852f924287ffb58a440856e862b056c8ad97e74b4b2526cee43e0771f40c25c + token-resolver (2.0.5) tree_haver (7.1.0) - tree_sitter_language_pack (1.13.3-x86_64-linux) sha256=1ffd045bd236ea54f58c5872ee66121d01033359c1f28f375b7fd4a4b5620cf9 + tree_sitter_language_pack (1.13.4-aarch64-linux) sha256=f7bb95fd59afda1e1b91a7b6ad4df244c585a863e94e4a0f492ef2336a5358b8 + tree_sitter_language_pack (1.13.4-arm64-darwin) sha256=2b48ded1f5feae3de20be1471aaa7c211601ac1c71ca6d4789cf31560a854132 + tree_sitter_language_pack (1.13.4-x86_64-darwin) sha256=8a2460d9029e7610b863d2481e2da0078f87b18bf8668070ccb5ecce71e272d8 + tree_sitter_language_pack (1.13.4-x86_64-linux) sha256=ae3ae718534088b2dc76bd93e7d093f11e8d19188bf47edfcd962df906e1af97 tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f - turbo_tests2 (3.2.0) sha256=8b35421548399d1923567b177970f42671c65695b93cdd134d78fbcbab85dff0 - unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42 - unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f + tty-cursor (0.7.1) sha256=79534185e6a777888d88628b14b6a1fdf5154a603f285f80b1753e1908e0bf48 + tty-progressbar (0.18.3) sha256=6cbb4260e55e74a9180d502143eb6a467d2c8e51bf5f3c9509fb5cacc3d4a5f6 + tty-screen (0.8.2) sha256=c090652115beae764336c28802d633f204fb84da93c6a968aa5d8e319e819b50 + turbo_tests2 (3.2.3) sha256=f77fc0799014c1d7890977e117cf39317bc4544de2c88a55149ed920b4cff942 + unicode-display_width (2.6.0) sha256=12279874bba6d5e4d2728cef814b19197dbb10d7a7837a869bab65da943b7f5a version_gem (1.1.14) sha256=6b7306c7e9416d06067561981ab3444e2cecb844f26cc325ae3c27b44cf85613 webrick (1.9.2) sha256=beb4a15fc474defed24a3bda4ffd88a490d517c9e4e6118c3edce59e45864131 yaml-converter (0.2.3) sha256=d35e69e547610d9e347672cc277fcb7d71dff3c53a942e66f82b1c64022ada72 yard (0.9.45) sha256=52e211493f7cb8a3ebf7e104a25a1e73937a3103092545d34cb88fafebb3dc51 yard-fence (0.9.6) sha256=3d1dbf4e3df462ac78b8bd2e01cf740a2de20168387c929aca31a0bcee490659 yard-junk (0.1.0) sha256=e85fe2ec1afa47313decd333447b53458cb1ed49b510b70015fdc3041a94bcdd + yard-lint (1.10.2) sha256=3e595709d088a8cc827e706a4146b447eb6a907ee375d06c11077369d00717f6 yard-relative_markdown_links (0.6.0) sha256=3e5ffa85cbad9bac70bee5421774b190fb25d3bdf489323a5b3534f647d1a70e yard-timekeeper (0.2.4) sha256=62f8d001d737c6e2ac688e7b37386f958dceb0f6aff9c909575e1bec8d20775a yard-yaml (0.2.3) sha256=fe5fef18819e1cbd05bb8f1b9e1baad6bf70c28125eb75b57bbf6397b0831812 diff --git a/gems/ast-merge-git/bin/kettle-gha-pins b/gems/ast-merge-git/bin/kettle-gha-pins new file mode 100755 index 000000000..c743cecac --- /dev/null +++ b/gems/ast-merge-git/bin/kettle-gha-pins @@ -0,0 +1,16 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# +# This file was generated by Bundler. +# +# The application 'kettle-gha-pins' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) + +require 'rubygems' +require 'bundler/setup' + +load Gem.bin_path('kettle-gha-pins', 'kettle-gha-pins') diff --git a/gems/ast-merge-git/gemfiles/modular/coverage.gemfile b/gems/ast-merge-git/gemfiles/modular/coverage.gemfile index b93014b6b..b4c26a504 100644 --- a/gems/ast-merge-git/gemfiles/modular/coverage.gemfile +++ b/gems/ast-merge-git/gemfiles/modular/coverage.gemfile @@ -7,7 +7,7 @@ if ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false').zero? # Coverage (remote/released) platform :mri do - gem 'kettle-soup-cover', '~> 3.0', '>= 3.0.3', require: false + gem 'kettle-soup-cover', '~> 3.0', '>= 3.0.5', require: false end else eval_gemfile 'coverage_local.gemfile' diff --git a/gems/ast-merge-git/gemfiles/modular/coverage_local.gemfile b/gems/ast-merge-git/gemfiles/modular/coverage_local.gemfile index 1fb5c6d9b..e7581e1c6 100644 --- a/gems/ast-merge-git/gemfiles/modular/coverage_local.gemfile +++ b/gems/ast-merge-git/gemfiles/modular/coverage_local.gemfile @@ -17,7 +17,8 @@ platform :mri do path_env: 'KETTLE_DEV_DEV', vendored_gems_env: 'VENDORED_GEMS', vendor_gem_dir_env: 'VENDOR_GEM_DIR', - debug_env: 'KETTLE_DEV_DEBUG' + debug_env: 'KETTLE_DEV_DEBUG', + root: %w[src my kettle-dev] ) if ENV.fetch('GALTZO_FLOSS_DEV', 'false').casecmp('false') != 0 diff --git a/gems/ast-merge-git/gemfiles/modular/documentation.gemfile b/gems/ast-merge-git/gemfiles/modular/documentation.gemfile index 9d4535f12..d0f4d4a76 100644 --- a/gems/ast-merge-git/gemfiles/modular/documentation.gemfile +++ b/gems/ast-merge-git/gemfiles/modular/documentation.gemfile @@ -12,6 +12,7 @@ gem 'kramdown-parser-gfm', '~> 1.1', require: false # Ruby >= 2.3 gem 'yaml-converter', '~> 0.2', '>= 0.2.3', require: false # Ruby >= 3.2 gem 'yard', '~> 0.9', '>= 0.9.45', require: false gem 'yard-junk', '~> 0.1', '>= 0.1.0', require: false # Ruby >= 3.1 +gem 'yard-lint', '~> 1.10', '>= 1.10.2', require: false # Ruby >= 3.2 gem 'yard-relative_markdown_links', '~> 0.6', require: false if ENV.fetch('GALTZO_FLOSS_DEV', 'false').casecmp('false').zero? diff --git a/gems/ast-merge-git/gemfiles/modular/templating.gemfile b/gems/ast-merge-git/gemfiles/modular/templating.gemfile index a672de184..a7e6c1f06 100644 --- a/gems/ast-merge-git/gemfiles/modular/templating.gemfile +++ b/gems/ast-merge-git/gemfiles/modular/templating.gemfile @@ -12,7 +12,7 @@ end if kettle_remote # Template/plugin checks for released installs. - gem 'kettle-drift', '~> 1.0', '>= 1.0.6', require: false + gem 'kettle-drift', '~> 1.0', '>= 1.0.7', require: false end # Set STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local development with path-based dependencies. diff --git a/gems/ast-merge-git/gemfiles/modular/templating_local.gemfile b/gems/ast-merge-git/gemfiles/modular/templating_local.gemfile index 3392b5d85..3318c2970 100644 --- a/gems/ast-merge-git/gemfiles/modular/templating_local.gemfile +++ b/gems/ast-merge-git/gemfiles/modular/templating_local.gemfile @@ -65,7 +65,8 @@ platform :mri do path_env: 'KETTLE_DEV_DEV', vendored_gems_env: 'VENDORED_GEMS', vendor_gem_dir_env: 'VENDOR_GEM_DIR', - debug_env: 'KETTLE_DEV_DEBUG' + debug_env: 'KETTLE_DEV_DEBUG', + root: %w[src my kettle-dev] ) end end diff --git a/gems/ast-merge-git/lib/ast/merge/git/version.rb b/gems/ast-merge-git/lib/ast/merge/git/version.rb index ebc548487..e4765168d 100644 --- a/gems/ast-merge-git/lib/ast/merge/git/version.rb +++ b/gems/ast-merge-git/lib/ast/merge/git/version.rb @@ -3,9 +3,12 @@ module Ast module Merge module Git + # Version namespace for this gem. module Version + # Current gem version. VERSION = '7.1.0' end + # Current gem version exposed at the traditional constant location. VERSION = Version::VERSION # Traditional Constant Location end end diff --git a/gems/ast-merge/.kettle-drift.lock b/gems/ast-merge/.kettle-drift.lock index e8ac7ef1f..bd9d92c74 100644 --- a/gems/ast-merge/.kettle-drift.lock +++ b/gems/ast-merge/.kettle-drift.lock @@ -1,210 +1,4 @@ { - "(direct_sibling_local ||\nENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)": [ - { - "file": "Gemfile", - "lines": [ - 79, - 119, - 159 - ] - } - ], - ".find { |spec| spec.name == 'nomono' }\nnomono_locked = nomono_locked_spec &&": [ - { - "file": "Gemfile", - "lines": [ - 90, - 130, - 170 - ] - } - ], - "ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)\ndirect_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')": [ - { - "file": "Gemfile", - "lines": [ - 80, - 120, - 160 - ] - } - ], - "Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)\nnomono_activation_requirements = [\"= #{nomono_locked_spec.version}\"] if nomono_locked": [ - { - "file": "Gemfile", - "lines": [ - 92, - 132, - 172 - ] - } - ], - "Kernel.send(:gem, 'nomono', *nomono_activation_requirements)\nrequire 'nomono/bundler'": [ - { - "file": "Gemfile", - "lines": [ - 95, - 135, - 175 - ] - } - ], - "direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')\ndirect_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)": [ - { - "file": "Gemfile", - "lines": [ - 81, - 121, - 161 - ] - } - ], - "eval_nomono_gems(\ngems: direct_sibling_gems,": [ - { - "file": "Gemfile", - "lines": [ - 59, - 99, - 139, - 179 - ] - } - ], - "gems: direct_sibling_gems,\nprefix: 'STRUCTUREDMERGE',": [ - { - "file": "Gemfile", - "lines": [ - 100, - 140, - 180 - ] - } - ], - "if File.file?(nomono_lockfile)\nnomono_locked_spec = Bundler::LockfileParser": [ - { - "file": "Gemfile", - "lines": [ - 42, - 86, - 126, - 166 - ] - } - ], - "if direct_sibling_dev_was_set\nENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original": [ - { - "file": "Gemfile", - "lines": [ - 109, - 149, - 189 - ] - } - ], - "if direct_sibling_gems.any? &&\n(direct_sibling_local ||": [ - { - "file": "Gemfile", - "lines": [ - 34, - 78, - 118, - 158 - ] - } - ], - "if direct_sibling_templating && !direct_sibling_local\nif direct_sibling_dev_was_set": [ - { - "file": "Gemfile", - "lines": [ - 68, - 108, - 148, - 188 - ] - } - ], - "nomono_activation_requirements = nomono_requirements\nnomono_lockfile = File.expand_path('Gemfile.lock', __dir__)": [ - { - "file": "Gemfile", - "lines": [ - 84, - 124, - 164 - ] - } - ], - "nomono_locked = nomono_locked_spec &&\nGem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)": [ - { - "file": "Gemfile", - "lines": [ - 47, - 91, - 131, - 171 - ] - } - ], - "nomono_locked_spec = Bundler::LockfileParser\n.new(Bundler.read_file(nomono_lockfile))": [ - { - "file": "Gemfile", - "lines": [ - 43, - 87, - 127, - 167 - ] - } - ], - "nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)\nif File.file?(nomono_lockfile)": [ - { - "file": "Gemfile", - "lines": [ - 85, - 125, - 165 - ] - } - ], - "path_env: 'STRUCTUREDMERGE_DEV',\nroot: %w[src my structuredmerge]": [ - { - "file": "Gemfile", - "lines": [ - 102, - 142, - 182 - ] - } - ], - "prefix: 'STRUCTUREDMERGE',\npath_env: 'STRUCTUREDMERGE_DEV',": [ - { - "file": "Gemfile", - "lines": [ - 101, - 141, - 181 - ] - } - ], - "require 'nomono/bundler'\nENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local": [ - { - "file": "Gemfile", - "lines": [ - 96, - 136, - 176 - ] - } - ], - "rescue LoadError\nwarn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'": [ - { - "file": "Gemfile", - "lines": [ - 105, - 145, - 185 - ] - } - ], "test_source: \"# Test\\n\\nParagraph\",\ncategory: :markdown": [ { "file": "spec/spec_helper.rb", diff --git a/gems/ast-merge/.structuredmerge/kettle-jem.lock b/gems/ast-merge/.structuredmerge/kettle-jem.lock new file mode 100644 index 000000000..e251985cc --- /dev/null +++ b/gems/ast-merge/.structuredmerge/kettle-jem.lock @@ -0,0 +1,527 @@ +--- +version: 1 +template_state: + version: 7.1.0 + applied_at: '2026-07-26' + changelog_replay: + last_entry_key: kettle-jem-template-20260726-002 + last_entry_date: '2026-07-26' + checksums: + ".aiignore.example": 48a5dfdd93afd1a15fdce39cc28ca9920263f00018b0968ab031fa744521e5ce + ".config/mise/env.sh": aeea5a2ab489ba6e5467ae8de6e386ec8c8fe4ff31a044e69d0cd6a092dd6654 + ".devcontainer/apt-install/devcontainer-feature.json.example": 273a07f9d3926e1b6287c37709a469ee05d724cfedae62ad3b0cd8c09befc9ec + ".devcontainer/apt-install/install.sh.example": b61e020b60ca172bb7b658e63c9cd4342e49bda0531a6b19b36475e515ad20b0 + ".devcontainer/devcontainer.json.example": 4a80d471379b9720cc65cc89543cbbc0a7be87b188a818160296577c4e87606f + ".devcontainer/scripts/setup-tree-sitter.sh.example": c34f48d7bac8561fb780c4c7a81cec5004c3ac0edc11f229799ec9a4e3eccd54 + ".env.local.example": 35cb867e8bacb75252a85c29f78899b36d0d1843511ae1ba1fbc7da863b128b3 + ".envrc.example": b7232f4bae0fb399cc9c9cdc4a5eb694bd69623aeeadcbab18c9990e443040a1 + ".envrc.no-osc.example": b7232f4bae0fb399cc9c9cdc4a5eb694bd69623aeeadcbab18c9990e443040a1 + ".gemrc.example": 77b1c36ae6f91bedf08b99e662a971b02f7e66e0d65267805d068d30ff118aba + ".git-hooks/commit-msg.example": d858575bf70d6175fdd7656e9ba0b41672de3fb49163181efe3fbc9e40306024 + ".git-hooks/commit-subjects-goalie.txt.example": bb1179c8911af8afeb1f9a604b3de789d4a4b33d9d4a7743b3145998c15b0a94 + ".git-hooks/footer-template.erb.txt.example": 70ed3616ee04a4062126f53892cc255e7aa2b66741fe22d6b372f7df99676718 + ".git-hooks/prepare-commit-msg.example": 35266ead46a6385d20eeff7ec64afedef33a2db18d1238b8662a1bc758f05335 + ".github/.codecov.yml.example": d6ef3208a90eca74f79d8ff4e5ae21a915562b075cb17978b1eaadc231dd4e85 + ".github/FUNDING.yml.example": fd27dff7db58f4e8a39c35ccb60e39422517038501a5f2a99ef2aaeea2d1fa5d + ".github/FUNDING.yml.no-osc.example": 8f1a867b1921b3dec1c63f7a7cd629362c1fb1ad0d1052494b48ba746b0fc5c6 + ".github/copilot_instructions.md.example": f5c5791df013e89e170fd436379b14e251d0ff4cb6b330a6d961e80c9071f2d3 + ".github/dependabot.yml.example": db84d1c13f64100d2f48212c022f0d985e9061ca76c36d82e7057fd845ecd528 + ".github/workflows/auto-assign.yml.example": 57b8159a15bf49946506e1b624934feed6a1cc8f71ad68968323c87acac56c67 + ".github/workflows/coverage.yml.example": 524ef90e0fd2ca0b846c464197d8d43cd6a57834303c9526ea0bd277f2beb3e1 + ".github/workflows/current.yml.example": dbc82e7593804c05d2c217d5c02d79d5480b5a0d1e04eea99b7235f35f520216 + ".github/workflows/dep-heads.yml.example": d94122f3246e17774fa015dde8d9a5772a66e54f817d44e62716f6a61d899050 + ".github/workflows/dependency-review.yml.example": a895d52257a7112d796fabf349ced1079bed93e81e3aa9cb088f9af3f44d1e5f + ".github/workflows/discord-notifier.yml.example": f9cc83a87058bd420426444510a1dd1520fd7cc15af50832ad52c25c5766be94 + ".github/workflows/framework-ci.yml.example": 112ef6178fcf115fe9e0a248ec6cb4af748ce89142fd7dba30e9abb6ebdc17be + ".github/workflows/heads.yml.example": aa55cf9bb4ae35fe126384003e8af4b91e685bcf370263b3710bd429f6c44343 + ".github/workflows/jruby-10.0.yml.example": 0eaf6d10c304de606684d420bbd88cfc90fe9d139a56773e011c6abaa6c5fc91 + ".github/workflows/jruby-9.1.yml.example": 9062f9de8843da1f8c4da8f991bbd24f9540c63927deaf311649f3088a672d5b + ".github/workflows/jruby-9.2.yml.example": f330363fc0af7dd0be24c140c919c07737a3168c5647012e34ba0c36634005e5 + ".github/workflows/jruby-9.3.yml.example": 3b26b3a978d0018f01e6d87651936f2e92fcb58d62bcdf11822eca3c2656d303 + ".github/workflows/jruby-9.4.yml.example": a830b92838a09b9316a81745b48ff35bed9461783154fc6d0e52df0d6aa319f3 + ".github/workflows/jruby.yml.example": f10f779cd3be37d2ffa593d9a83ba68a8684bb849ed1c4d9ae41706ff12571e1 + ".github/workflows/license-eye.yml.example": 23db5d6ee9b5382de1f2042642219d65214e09c3f975c418d4dec4d46375036c + ".github/workflows/locked_deps.yml.example": c7eaa20cc7d7de6209e576274e592ffb4838177ae6ab56096b2439d0fa1bc31c + ".github/workflows/opencollective.yml.example": fe7d8d346f9ab055b6779abf62972291460d05275e2c4d191e291e8cd73b0e6b + ".github/workflows/ruby-2.3.yml.example": 90474f1a462edc877983b91dd40d942e82b28262f1afdca74cddcdd52d7e8c26 + ".github/workflows/ruby-2.4.yml.example": fe84af4efef6934d7ff63efa2a4c85994f2ea1887f61b1ab5d30a21365429ec9 + ".github/workflows/ruby-2.5.yml.example": c40db157514168442311191ebc88853dfb36447a90171a73f42d435e92d02f05 + ".github/workflows/ruby-2.6.yml.example": 87bb8537d0047217651a327353df670fed3ea9e4a5350e965ed80af9ce32d9d3 + ".github/workflows/ruby-2.7.yml.example": 5650ec41bc67553457019a772a3343578872749d21268d5e7fb1715ebf4e2351 + ".github/workflows/ruby-3.0.yml.example": f9d7c7dfc6eaea1ca12c92e0b98b4ba8fed5726d26459bb410ab9812a741e5b9 + ".github/workflows/ruby-3.1.yml.example": e44879cd3ea47d00e44e573745d7f95fc1a561a9c1d69d72529d0c07294bd26e + ".github/workflows/ruby-3.2.yml.example": c28b9179778157e6b4807a775968840ff1c6bf2fd847ce1ce694b9a77df42f6e + ".github/workflows/ruby-3.3.yml.example": 033e4f0ed7ded17f5d13fde6674ec9fd555cfe58c11f57f7dc2f1fee21c718b6 + ".github/workflows/ruby-3.4.yml.example": 474a96468f101b8fddac4cecaa0629f28d5ceec0c784329affdc471eb1e3e889 + ".github/workflows/style.yml.example": dea7243a91dc164a172e90b7933de58cdd353d7e5df1beac22cec63125edc086 + ".github/workflows/templating.yml.example": 327b933509e1ade4d53df5756f6407028b479c51847775db494fb9c25e66ce5a + ".github/workflows/truffle.yml.example": 56fa53dc206976c81db7cc3530f4d19d89ea5859c1245492e5a5ecb9304de63e + ".github/workflows/truffleruby-22.3.yml.example": d6773529e6961039b5cc4a145c77623881aa3857d875bbb415ca0f8147166d7a + ".github/workflows/truffleruby-23.0.yml.example": abcd23a18d748528f7558d4ab7bc4830796cb686ca7371f67a8ddaf6d0362d72 + ".github/workflows/truffleruby-23.1.yml.example": 11af8a3f0823ed3ab17e759d81b8a4551eb7af8096ce0b5a9501fd83cada1cd2 + ".github/workflows/truffleruby-24.2.yml.example": 2c4ff82eeaa3bdb19391f04cd2f41b07733986a053d5ac8498176fef5f890e5e + ".github/workflows/truffleruby-25.0.yml.example": 42cdfdcd21c7b3bb1b87c22c2bc7a98135a442742df5f9a45e2b4e03838c1e7f + ".github/workflows/truffleruby-33.0.yml.example": 2a45e428ca13dac56ee75526b80eac477b61697ca06c94680e1eb05d21dbc25a + ".github/workflows/unlocked_deps.yml.example": 15f5ccbe811aa5a8650c2aa69b32f4f6a24d5f8bd3aae2dcbec92cbe3a51f0a7 + ".gitignore.example": 14864a0c88be3f8c122ab3032efeb782ba5e035013231038acf746a400437a3e + ".gitlab-ci.yml.example": ef64afa9855ebb59bbc87446fa9533238d3ce180966ceb19649a7f165715b92b + ".idea/.gitignore.example": b44a5aa16bf9fe5635558af347454b05a76d600084308a9f43d4d0b54789ecab + ".licenserc.yaml.example": 8787fa7bddce911f8ba47bda3eb6ad9786b6650d5d94786723e88773098ed37d + ".opencollective.yml.example": 9ad9b83fe54f0bddac7fb614575585d98f78df0e181ee70a7acd0168d26e3142 + ".qlty/qlty.toml.example": cf3d750d2328f6c057b08b7ce3d7ec00a4056c7f0eedda59af321d6caca03553 + ".rspec.example": 40d3f3ff435b0f9e5863772a95df8725b939c2dc11aead2bca68dcd6d85a9788 + ".rubocop.example": 591e4b45430e85b0dd460cc11c70650912fa2734988420b934109d06a749344f + ".rubocop.yml.example": 47f9a031022db67c964dd76ee2e8dfee21295a1877ca4d6233d3de39d114af73 + ".rubocop_rspec.yml.example": 288ad75e7eb14d87d80fafe6f7272217be5c57547536ee56c780a7d10ac7ec74 + ".simplecov.example": ffc76492effe905cc65797389fc8050fda136652ac078a80303cd084b349ef28 + ".structuredmerge/git-drivers.toml.example": 9d241a44c9edffcdbd3da018fa188a238089c3d1635040924df594a6929a4f97 + ".structuredmerge/kettle-jem.yml.example": 954cfc9e35cd20e46376426675e985bf8a0de19ff5069bf7be24b574837be615 + ".yard-lint.yml.example": 90def46867c9436b4e177c47d91fc8165f4602e335715aecc39f5587ae20b55b + ".yardignore.example": 821f453c609df7d46145d675424b39dfbe6dfdca8edac5f367b85fff48502455 + ".yardopts.example": 6fd6f2701713096a8a9ea095c213bbc68eeef37797c4754d97837e3229a3a5f6 + AGENTS.md.example: aec69512cbe17004660ac0abfabb9ec91a5c51c2cd82c10f30f08886f9bf64a7 + AGPL-3.0-only.md.example: d8a6cc31abc16b6748c7a21f21611f5a1ec33f67d22ca23d7da1c19b95496bee + Appraisal.root.gemfile.example: 8724e3f6faea995be655ac49369bec64a70710112b1f65707fa38f1fd2fd3254 + Appraisals.example: 9cb1abcfb1a0bd6d859ca0705efb874dbe546754c8c71f9f95025ff6817f1471 + Big-Time-Public-License.md.example: b0c02a112c9eee0ed69f05fd8f22277a2f8bc62d447b6cb75d6df560e05bf431 + CHANGELOG.md.example: 73459e50dad34d84db88844c993d975097557bdf5229e101b0d1339de6f98ffc + CHANGELOG.transfer.md: 9c201849117c9d4234724c4599643dd42fdce5f0a673a1abee97b97e556c301b + CITATION.cff.example: e404ea0a7919d78a83d53d80e211d17b9663576aa606583b709795dc023fd75c + CODE_OF_CONDUCT.md.example: f1ad532f1860f73ef774c6b27a26d41f4bc1cb8813034f5957487766ebb0986b + CONTRIBUTING.md.example: 63d339848c615f2c181d6b0565c42e56371eedb66f310d146cb7da297f7bc641 + FUNDING.md.example: 455bbb2b55d934283a2e7c16b59c321116c53310a85a718b7cf8ca44e9e3721e + FUNDING.md.no-osc.example: 05a85d5faf22d5ea5721622d242080447cf318d3277d9d529e438be1c9d5a351 + Gemfile.example: 6b2d72ec8a630cce515b7b528022071b13eee863c3164763df03792a5004345a + IRP.md.example: 85d8887d9b0e77f7fa9835ca5b9be31f586fdc94764ed1819af2a9a7fec98e96 + LICENSE.md.example: 120edf5f23173ebbdb5ad384ffc2e9b97e62aa6d0e61b733c003bd4db1b08276 + MIT.md.example: 365fce2a82f9d258ada9a527accfd5754b406ee9cdd8f8ed86bbec64b8c42ab2 + PolyForm-Noncommercial-1.0.0.md.example: ffcca38841adb694b6f380647e15f17c446a4d1656fed51a1e2041d064c94cc8 + PolyForm-Small-Business-1.0.0.md.example: 2f81e317d36f83a199c9fa10bcb250775fd90510303eaeb15aac2d8f0c1fc2d6 + README.md.example: 452446a44d120df26cde68fbc7aff086fa815769c989b994ebc1432ea927974f + REEK: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 + RUBOCOP.md.example: c09e5533ccc59b70a2efa05c99f66e521137c1053d3c12eb43509cebd5b68b0e + Rakefile.example: 569803e726b07ea26267fec6891367a3096a0dff3c266269a7081d36afe496af + SECURITY.md.example: ee9411aa85f36d88363fdaea7a1baea4362b6ec112cf2688e711b05de1d3144c + bin/setup.example: 0ac35089c95a91d8973fe7a318bf9fd98b9f8e00db92c5d9ca6cd858abb8d41b + certs/pboling.pem.example: 18956f60643666cc181e2743b3b3691bec08c5326f514f60af54d0cdb9ebc554 + gem.gemspec.example: 9989cc8a1cd125586ea807eaed549eaecc044711d31f17dd7bac2a0815b28b1a + gemfiles/modular/benchmark/r4/v0.5.gemfile.example: 5bc3190090ae456df1a8cce28dd47a7fb293495f6d845ec7e53a7a8b50f14ae1 + gemfiles/modular/benchmark/vHEAD.gemfile.example: ca6cd52c55c3082759c6ddc97638970f12d953aec1822470823d316086aa6e25 + gemfiles/modular/cgi/r4/v0.5.gemfile.example: c2d14a39377a2435419ceaca22a3421ebd899e9cba943df8a90b576a33624870 + gemfiles/modular/cgi/vHEAD.gemfile.example: 9ff3dc789b3279642876c0aad4b0094c1139bb8fbbf36daab804d3b2b3a60b43 + gemfiles/modular/coverage.gemfile.example: 915fc161ad574fdbc071bc733b69b27e94bd7a4c68cc4f58da267c9a0987f3e8 + gemfiles/modular/coverage_local.gemfile.example: 928d5f260d7b119c038baa56da9fb78dd524dee613aea33ab72894bbce5c506e + gemfiles/modular/debug.gemfile.example: 0a508bfb02e51b75394b43f4f09d98174dac36ead41cba09c1f730671a1f5905 + gemfiles/modular/documentation.gemfile.example: e15f51e4d14ad2216b6de16c323787945bd225073d70a78420f4c99c98c1ecd1 + gemfiles/modular/documentation_local.gemfile.example: 84a20f5d4b0feb94c2cf2f7a8dce8f682f1483498e41484c2b447a5661fd1870 + gemfiles/modular/erb/r2.3/default.gemfile.example: 9da0d08fb6a299b965c37fe85efcaebd9eb0a82b2ea35fdc157c41bd75431396 + gemfiles/modular/erb/r2.6/v2.2.gemfile.example: '01787cbdf7136c0d75cc7b734c6bb3d2ef6c70d6c1c50e7d0ad2112c0f8ef8e7' + gemfiles/modular/erb/r2/v3.0.gemfile.example: 3793e7dc9ef23a7ccd893d48cbba092fd27594c63e65cca011cc658218425670 + gemfiles/modular/erb/r3.1/v4.0.gemfile.example: bdf71ddcfe5001aab7d71b10a645a785928957ef7bae61d49307eb7f712279f3 + gemfiles/modular/erb/r3/v5.0.gemfile.example: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + gemfiles/modular/erb/r4/v5.0.gemfile.example: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + gemfiles/modular/erb/vHEAD.gemfile.example: ad6f104a49e80e0cf625440e3dc816343fe7e2f037fc4971df75e7bb4305c683 + gemfiles/modular/json/truffleruby_22_3.gemfile.example: 249c12eacbe90f9d0d2e81e7a62c4c7e9102e504ededcda4ecf660cb3bb68be4 + gemfiles/modular/json/truffleruby_23_0.gemfile.example: 66aa010567f7afa1af8244a74c3c88ecaaf84dc87b6a25180691bb480d02ed28 + gemfiles/modular/json/truffleruby_23_1.gemfile.example: '080fcbdaf2bec73cad40832a3d51eebb380af789917b96f493d1460b0dd6361d' + gemfiles/modular/mutex_m/r2.4/v0.1.gemfile.example: '09728bdc10807b3ca9dd3b9f12986acbe8c40ac08ada438bcfd49cd69445c650' + gemfiles/modular/mutex_m/r2/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/r3/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/r4/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/vHEAD.gemfile.example: '08018641c97f894788fa91b462da504ab2237213d18d95404136c393274ae3cb' + gemfiles/modular/optional.gemfile.example: b45eb8ecde2902441c02b2f01d4aa8f79bff75c853ef92555c3201ee798d9e87 + gemfiles/modular/recording/r2.3/recording.gemfile.example: 154da539583c51ca78ff8affa7a7caaf7f354d321b5e748beb64de61ff72f80a + gemfiles/modular/recording/r2.4/recording.gemfile.example: 6d69381eb2f8be681c72e7a5a8b5d6ec6ee586da8ce51b9b39d845d2a87e4ecf + gemfiles/modular/recording/r2.5/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/r3/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/r4/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/vHEAD.gemfile.example: 7480fd116e9671972a2735d1d97050a4fd5754aa7abfab3d115bf9bebbca038c + gemfiles/modular/rspec.gemfile.example: d043f5c9344f6435edb4607c5adaf42c78e7fb6b8b6726007de2bbedefb376c3 + gemfiles/modular/runtime_heads.gemfile.example: f163201999bf68a942b1e5bcea506bfc4b9c59711ff502091eb215d5d5f8f658 + gemfiles/modular/shunted.gemfile.example: a54a86124eff06163497462012704f62a691daa224cebeac605cdd14cffacfbe + gemfiles/modular/stringio/r2.4/v0.0.2.gemfile.example: 6425ebcd70b2e782f4c1d9074f8685c1e93ca7bf371728ef7ebbc8b5ebdf491a + gemfiles/modular/stringio/r2/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/r3/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/r4/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/vHEAD.gemfile.example: e0497ab6dad9667b22725485b781e9d99349a079250eb29cb125d58f01f4a5be + gemfiles/modular/style.gemfile.example: a15db732f566d958c2459ef549ae3877d984df3d205116e714284d1fe4f9b068 + gemfiles/modular/style_local.gemfile.example: '0083605323d23879dc7223f0198e9f1db24a25fa38730c4dbcc71c7a8a4c307f' + gemfiles/modular/templating.gemfile.example: 6cedc39529daa9aac3a4cf13fe31a628b62a4a2428f5c4f8657c5a2fa027bb35 + gemfiles/modular/templating_local.gemfile.example: 16c0b51fd46b86db09268c8485b1d5a528e5f962b593f8ae7521b15209f7d1a5 + gemfiles/modular/webrick/r4/v1.9.gemfile.example: 1ee940ff54d5ca3ce7fcff0d82ee9553386979656b9e220d5be5404d0991d5ea + gemfiles/modular/webrick/vHEAD.gemfile.example: da545f591af987648ffbaba181707480a38dfb375db7d289617986ec2c2ca23b + gemfiles/modular/x_std_libs.gemfile.example: e3917e90717d7f9f4393d847549a78c53de7f6c8de52a7f590b34b515fd6111a + gemfiles/modular/x_std_libs/r2.3/libs.gemfile.example: 379ac2a3698615789e39dc18a961b9c793b2cc594856bb3163524a99fd4ac86f + gemfiles/modular/x_std_libs/r2.4/libs.gemfile.example: ccad8f592943481317c082ce8d340316b9e90a52463c8c1eea5c5109b23e8c3d + gemfiles/modular/x_std_libs/r2.6/libs.gemfile.example: 9af20396f404a32bf76d8999c7fdd112f0282ba331f71100ab093663b2ab5670 + gemfiles/modular/x_std_libs/r2/libs.gemfile.example: e80ec8ad06cb1b31ac982bc25cf7696987fca131aa1001eaefd0bf5cd379c273 + gemfiles/modular/x_std_libs/r3.1/libs.gemfile.example: 38068bd6a0f5d02918eb286af9bdbdf0c7cf7cf026486b9fd157b541b6153d58 + gemfiles/modular/x_std_libs/r3/libs.gemfile.example: 546f8849f4267bb19aa10ff0de40be30957197f229e6887847181ea9127b2650 + gemfiles/modular/x_std_libs/r4/libs.gemfile.example: 8c2582eaa218d216b98c86c933465295c8b4e43f3251ea388b9eaf6e471f8da6 + gemfiles/modular/x_std_libs/vHEAD.gemfile.example: d3133ec4c0638363a7fb025d19be7e95a615fd61c35ddb8d17f2280ee74a7486 + lib/gem/version.rb.example: 15e219ac3a928b5580035f891e415551213175020f1131f6e7ca0ccd55a1b2d6 + mise.toml.example: b2eb06f7daaf0c3916bba155f463e166bd1de218637ba82e636c528c077c8d6d + mise.toml.no-osc.example: 35ec90d3c67b74e0014876dccad14f5883fdad88036f6b0cf5d29ea181e132ac + parsers.toml.example: f0538ae7ad8596be2dc39b3ea663f1164dec21fb0457233c1885097e774aff6f + readme/partials/basic_usage.md.example: adaa8f9de9768d1f29cb15d957404004715e7687db68c29b121d6467db13158a + readme/partials/configuration.md.example: 5ad82bc7eaf05015d31cea9265173718abc1d92729b52e3856c8366aa54184e8 + readme/partials/synopsis.md.example: 2b7383f8261086da0995fbf2c10017b3f162723b32c324ae8c0e1c1a8d1c79ef + shim/.github/workflows/current.yml.example: c2a2a2053f2726276bb8571c8a76a4b97bcce6cd54bdca01cba63d713c3a0e2f + shim/.rspec.example: 0e3a2a1587779efc3eae8fe718a3480272fbdfb3f1f6c2f9c3901f6fd81b2cce + shim/.structuredmerge/kettle-jem.yml.example: 03faae6cfda3947ef8489008b4836aad3ca280e94ddf9d08ef733071d7daa167 + shim/CHANGELOG.md.example: 2c098802b9971c51796e34067d061adbc31fa443df96be8a1fc71fc84c262d0e + shim/Gemfile.example: 9583b19e04d7ab6f5b3ea7ebb0c5d24e6a71ae5d74404a510aa979642248ba34 + shim/README.md.example: 3a2f7211b7f92a1dfae5e523b8e34b051a3d8af942144b05286eca0b3c8f6fbe + shim/Rakefile.example: 572c94da7052083b39b62a6600785419e314a109efd7a3d8c3a96eb77ad34fd1 + shim/gem.gemspec.example: cabca9717af1a18991db1de856900494e2771b044f1d5bfd2ad71b2ed4a1367d + shim/lib/compat_require.rb.example: 94ee85e353a3ca08c8a35c9063d4ff789214ea594c7f803f6cf09d7142f48379 + shim/lib/entrypoint.rb.example: dd57613520daca01d6f6bcaa9b83b00ff74505240dc04b84ceb686df3c0539d7 + shim/lib/version.rb.example: 15e219ac3a928b5580035f891e415551213175020f1131f6e7ca0ccd55a1b2d6 + shim/spec/shim_spec.rb.example: '060013019bf39b8dc267169df83752661d02c7ad890b65a99a1d97137938edfd' + shim/spec/spec_helper.rb.example: 88e2ab0bd8888022a68e856e04f61053e238e54f51b428b386aaebf93ae8ad83 + sig/gem.rbs.example: 47a4f7e524cc6f773875b6c08691ca4d65c2b14618abd5b9b91055ae5b248cec + spec/spec_helper.rb.example: 0c8119bd75b90f3a2403789b68b539fd19952370051297b1807596e201ef4813 +files: + ".simplecov": + recipe: template_source_application_simplecov + action: write + dest_sha256: fb085167c48bbdc76537bc6e133acfbbbcfa47ab99e91b07cd5fdedab77b16d0 + input_fingerprint: 2ae7969f2349deb69417a3c98627352e8b635a5a694950f1d1cefc7def2ea8d0 + template_sources: + - ".simplecov.example" + AGPL-3.0-only.md: + recipe: template_source_application_AGPL_3_0_only_md + action: write + dest_sha256: d8a6cc31abc16b6748c7a21f21611f5a1ec33f67d22ca23d7da1c19b95496bee + input_fingerprint: 99640d2d43000ecde1611e80c0b8a66c73657a4d68ebe1ff780b53b40b850e53 + template_sources: + - AGPL-3.0-only.md.example + Gemfile: + recipe: template_source_application_Gemfile + action: write + dest_sha256: 5d1cf89834fba1648c354b226f69de30a7bf87716d2d6c546dad9fc7225d98fc + input_fingerprint: 90f505c814307a93f6cfeea88104c7e2a6c0669314e9f300818d32997db2e530 + template_sources: + - Gemfile.example + LICENSE.md: + recipe: template_source_application_LICENSE_md + action: write + dest_sha256: f6188bfd474a636d2a526420ebb411250faa447d94c9b9ccee097128ce4101b5 + input_fingerprint: 5ff003976afc22f7a51ee931caa1198d525c80539cb491df17339bc0bbf1b8ca + template_sources: + - LICENSE.md.example + PolyForm-Small-Business-1.0.0.md: + recipe: template_source_application_PolyForm_Small_Business_1_0_0_md + action: write + dest_sha256: 2f81e317d36f83a199c9fa10bcb250775fd90510303eaeb15aac2d8f0c1fc2d6 + input_fingerprint: 80d3d3d914ba2d42bc0dcfd1a26614effa8bab2c3dba0e12fe7cacf5192aaa84 + template_sources: + - PolyForm-Small-Business-1.0.0.md.example + README.md: + recipe: template_source_application_README_md + action: write + dest_sha256: 84fc425e38fde23dd8c572003bc436fdccb882ae9e86d5e96dea1aa74c8ad346 + input_fingerprint: 282b991ee2904de7c00b3be382b2145edff9990e606dfc572ab7d386684d439a + template_sources: + - README.md.example + ast-merge.gemspec: + recipe: template_source_application_ast_merge_gemspec + action: write + dest_sha256: 5895ca035da1503dc71af351dc8771df1e42347a2d41db569538e76ee938a25e + input_fingerprint: 63538190ea4bdf301cc4d03ed6cdd942697c7a28be6c3d526668e8e51b467788 + template_sources: + - gem.gemspec.example + certs/pboling.pem: + recipe: template_source_application_certs_pboling_pem + action: write + dest_sha256: 18956f60643666cc181e2743b3b3691bec08c5326f514f60af54d0cdb9ebc554 + input_fingerprint: eddc042ca38ccfae2cb44c63874df2cfd1a61d320de9833a68f7ca4c104bfb7b + template_sources: + - certs/pboling.pem.example + gemfiles/modular/benchmark/r4/v0.5.gemfile: + recipe: template_source_application_gemfiles_modular_benchmark_r4_v0_5_gemfile + action: write + dest_sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 + input_fingerprint: 44f615815090db169800c5ad8473f3aa4f4622d2388cd3c9d6e99720819aa2a0 + template_sources: + - gemfiles/modular/benchmark/r4/v0.5.gemfile.example + gemfiles/modular/benchmark/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_benchmark_vHEAD_gemfile + action: write + dest_sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 + input_fingerprint: e9399720f165d50d6e681dd8408df53ebc00bf725f0eb73509d5f870e9af5a63 + template_sources: + - gemfiles/modular/benchmark/vHEAD.gemfile.example + gemfiles/modular/cgi/r4/v0.5.gemfile: + recipe: template_source_application_gemfiles_modular_cgi_r4_v0_5_gemfile + action: write + dest_sha256: c2d14a39377a2435419ceaca22a3421ebd899e9cba943df8a90b576a33624870 + input_fingerprint: 9f276230e90a0ab4c30775a54a6592a264086a85b9eaef91d235520fd0a9c1bf + template_sources: + - gemfiles/modular/cgi/r4/v0.5.gemfile.example + gemfiles/modular/cgi/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_cgi_vHEAD_gemfile + action: write + dest_sha256: 9ff3dc789b3279642876c0aad4b0094c1139bb8fbbf36daab804d3b2b3a60b43 + input_fingerprint: ba12bbf5f84c2783e97c38ed945c7549a4d692aea1c9ca58af35b114961d91a0 + template_sources: + - gemfiles/modular/cgi/vHEAD.gemfile.example + gemfiles/modular/coverage.gemfile: + recipe: template_source_application_gemfiles_modular_coverage_gemfile + action: write + dest_sha256: 915fc161ad574fdbc071bc733b69b27e94bd7a4c68cc4f58da267c9a0987f3e8 + input_fingerprint: 8d37486bd081f4c13e041940f5fdd5d3e1fa5675ccee37348ebe12b3ff0e0347 + template_sources: + - gemfiles/modular/coverage.gemfile.example + gemfiles/modular/coverage_local.gemfile: + recipe: template_source_application_gemfiles_modular_coverage_local_gemfile + action: write + dest_sha256: 82977c3246f3ce2fe6d1d5f82927a0e8e4ee7ebc36165f78e9e7d43a9a958f4c + input_fingerprint: 97f645e02b53c265dc90072ee6997dac604a0bafc052fb303d042d5442fdf5ec + template_sources: + - gemfiles/modular/coverage_local.gemfile.example + gemfiles/modular/debug.gemfile: + recipe: template_source_application_gemfiles_modular_debug_gemfile + action: write + dest_sha256: 0a508bfb02e51b75394b43f4f09d98174dac36ead41cba09c1f730671a1f5905 + input_fingerprint: ca781624a40311258c25fdab07a367d444ed05bc8e0262b6935e5a5f850b0aee + template_sources: + - gemfiles/modular/debug.gemfile.example + gemfiles/modular/documentation.gemfile: + recipe: template_source_application_gemfiles_modular_documentation_gemfile + action: write + dest_sha256: e15f51e4d14ad2216b6de16c323787945bd225073d70a78420f4c99c98c1ecd1 + input_fingerprint: cf633081cc0d08dca0b0c985d4a3badcaf3af2ada807e538943626f5f578cdd6 + template_sources: + - gemfiles/modular/documentation.gemfile.example + gemfiles/modular/documentation_local.gemfile: + recipe: template_source_application_gemfiles_modular_documentation_local_gemfile + action: write + dest_sha256: c8fca2e0c23cdd01aee574f72b24bde8996d81d19482cf9d4dbe2ac73cb5064f + input_fingerprint: a60e6729f6574472e42b0312a56cd2f4347ce99a14c9eaa8ddf01fafc7b73800 + template_sources: + - gemfiles/modular/documentation_local.gemfile.example + gemfiles/modular/erb/r2/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r2_v3_0_gemfile + action: write + dest_sha256: 3793e7dc9ef23a7ccd893d48cbba092fd27594c63e65cca011cc658218425670 + input_fingerprint: af39d1c9f234a885eacccdadf4f1f24cac3b4263e847c5cb9b3863821df95922 + template_sources: + - gemfiles/modular/erb/r2/v3.0.gemfile.example + gemfiles/modular/erb/r3/v5.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r3_v5_0_gemfile + action: write + dest_sha256: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + input_fingerprint: 1d6254ff35f89414db4f118c232f7ae6ffe55524b007d9dba8141fbb9cfe5cac + template_sources: + - gemfiles/modular/erb/r3/v5.0.gemfile.example + gemfiles/modular/erb/r4/v5.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r4_v5_0_gemfile + action: write + dest_sha256: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + input_fingerprint: 02fb1dbabb428dd1426754c589eeb468ee41224760bbf8593a38f8d86bb6ed26 + template_sources: + - gemfiles/modular/erb/r4/v5.0.gemfile.example + gemfiles/modular/erb/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_erb_vHEAD_gemfile + action: write + dest_sha256: ad6f104a49e80e0cf625440e3dc816343fe7e2f037fc4971df75e7bb4305c683 + input_fingerprint: 0ce452a36467c52f9b109132818b7a151cd060bd0eb8b1c71b4d198ffcfc1155 + template_sources: + - gemfiles/modular/erb/vHEAD.gemfile.example + gemfiles/modular/json/truffleruby_22_3.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_22_3_gemfile + action: write + dest_sha256: 249c12eacbe90f9d0d2e81e7a62c4c7e9102e504ededcda4ecf660cb3bb68be4 + input_fingerprint: 7d199165565d96189072fa86b14fe298c5dd476143bf2320c33094c35e71996e + template_sources: + - gemfiles/modular/json/truffleruby_22_3.gemfile.example + gemfiles/modular/json/truffleruby_23_0.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_23_0_gemfile + action: write + dest_sha256: 66aa010567f7afa1af8244a74c3c88ecaaf84dc87b6a25180691bb480d02ed28 + input_fingerprint: e7501f5b8fc8c0ae05ec6ed060d7734a59bd2b873a4071eb96d8ac1ec9772421 + template_sources: + - gemfiles/modular/json/truffleruby_23_0.gemfile.example + gemfiles/modular/json/truffleruby_23_1.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_23_1_gemfile + action: write + dest_sha256: '080fcbdaf2bec73cad40832a3d51eebb380af789917b96f493d1460b0dd6361d' + input_fingerprint: 689063384c33ea9d5c5190bb6c78903a57623e1d688cdfd4e80640b7bc4559f2 + template_sources: + - gemfiles/modular/json/truffleruby_23_1.gemfile.example + gemfiles/modular/mutex_m/r2/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r2_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: beda5fd7f094db6454cb627d3aab027369df55797a1681371fe6f814192ea88d + template_sources: + - gemfiles/modular/mutex_m/r2/v0.3.gemfile.example + gemfiles/modular/mutex_m/r3/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r3_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: 30818f43a936a40489c1567b6e66df8f2a37e4fda4bb157a09473a6343a6f2b3 + template_sources: + - gemfiles/modular/mutex_m/r3/v0.3.gemfile.example + gemfiles/modular/mutex_m/r4/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r4_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: 3eb7a2629b1163b8188e211d74ac819748c94e8dd4abdee3151a3eda0cc2c463 + template_sources: + - gemfiles/modular/mutex_m/r4/v0.3.gemfile.example + gemfiles/modular/mutex_m/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_vHEAD_gemfile + action: write + dest_sha256: '08018641c97f894788fa91b462da504ab2237213d18d95404136c393274ae3cb' + input_fingerprint: 007b96eb9444e846ff85f1c1edb0d0a55f01e87831495b2c46d2d866a236351b + template_sources: + - gemfiles/modular/mutex_m/vHEAD.gemfile.example + gemfiles/modular/optional.gemfile: + recipe: template_source_application_gemfiles_modular_optional_gemfile + action: write + dest_sha256: f770e6e9a9dd2bd0f1f132e882d88038b2e21127dce3afe270908c7338c28bfd + input_fingerprint: 595179bb100ace0434fca70dedd23c4f34bed551667c6c1db3d0e6afadf67a54 + template_sources: + - gemfiles/modular/optional.gemfile.example + gemfiles/modular/rspec.gemfile: + recipe: template_source_application_gemfiles_modular_rspec_gemfile + action: write + dest_sha256: d043f5c9344f6435edb4607c5adaf42c78e7fb6b8b6726007de2bbedefb376c3 + input_fingerprint: 7f9d60357f5f9a82084f1beca0e1e5ccf24f128170de6d590c9fc31b3be8603b + template_sources: + - gemfiles/modular/rspec.gemfile.example + gemfiles/modular/runtime_heads.gemfile: + recipe: template_source_application_gemfiles_modular_runtime_heads_gemfile + action: write + dest_sha256: 6ac7158c4a3088190f2a9082f01439eb27eca2172ab3464b15c9cb045aa885e1 + input_fingerprint: 6a22bea41b1eb2e328c18c72af76192c8e0d5137e5ecafad2426a4acc81ff1d8 + template_sources: + - gemfiles/modular/runtime_heads.gemfile.example + gemfiles/modular/stringio/r2/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r2_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: 470a2eb055ae7eb4d75eb091bdd801728c824f3f6d24cebaa76e626f84807198 + template_sources: + - gemfiles/modular/stringio/r2/v3.0.gemfile.example + gemfiles/modular/stringio/r3/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r3_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: 6f0ace1158c60b0b1980bb5286086e2fdb11a69ee0c693ebf79e24c2d05d4357 + template_sources: + - gemfiles/modular/stringio/r3/v3.0.gemfile.example + gemfiles/modular/stringio/r4/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r4_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: eac25857e5f5384d11c88df47b8af653546e0924cbc9dd7806791e8eb348de85 + template_sources: + - gemfiles/modular/stringio/r4/v3.0.gemfile.example + gemfiles/modular/stringio/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_vHEAD_gemfile + action: write + dest_sha256: e0497ab6dad9667b22725485b781e9d99349a079250eb29cb125d58f01f4a5be + input_fingerprint: 0c2f0ed70332a74e1e24dcc72147193a04caa040957c1727e11efd221732de1e + template_sources: + - gemfiles/modular/stringio/vHEAD.gemfile.example + gemfiles/modular/style.gemfile: + recipe: template_source_application_gemfiles_modular_style_gemfile + action: write + dest_sha256: 071066457ce6081cbc03d10d777f741b84019071c78e45c23889f13658a0a4a6 + input_fingerprint: 86cd3422c37e5901511d3730e795890c779cdd2ee4bb02aa8706703e4ca7d655 + template_sources: + - gemfiles/modular/style.gemfile.example + gemfiles/modular/style_local.gemfile: + recipe: template_source_application_gemfiles_modular_style_local_gemfile + action: write + dest_sha256: 0c34da0ba2de08cdf5da1d41ff326b7e517ca86c4207761728d678f5d0336e2b + input_fingerprint: 9ba7db0c7369ec31489f40132722585f3197d7cf62cc8bcac7099d07f71769c8 + template_sources: + - gemfiles/modular/style_local.gemfile.example + gemfiles/modular/templating.gemfile: + recipe: template_source_application_gemfiles_modular_templating_gemfile + action: write + dest_sha256: 6cedc39529daa9aac3a4cf13fe31a628b62a4a2428f5c4f8657c5a2fa027bb35 + input_fingerprint: 9892079cd05bbf54d4e2e8343f4d3dbf31132c7af58cde83b647c614e20a9051 + template_sources: + - gemfiles/modular/templating.gemfile.example + gemfiles/modular/templating_local.gemfile: + recipe: template_source_application_gemfiles_modular_templating_local_gemfile + action: write + dest_sha256: 16bd4c0640b10381ef67de3dd7097034366733c1700863f2f78c7574668b6fb8 + input_fingerprint: 71a85d9f92dacaf02b2338180ee7420bb12d7e1df251de29fc07b9c9bed14166 + template_sources: + - gemfiles/modular/templating_local.gemfile.example + gemfiles/modular/webrick/r4/v1.9.gemfile: + recipe: template_source_application_gemfiles_modular_webrick_r4_v1_9_gemfile + action: write + dest_sha256: 1ee940ff54d5ca3ce7fcff0d82ee9553386979656b9e220d5be5404d0991d5ea + input_fingerprint: d0a074b1d87bc30d3b4f29a03b50c0d2199b295f8f6e87e5ed21cd453a6cf656 + template_sources: + - gemfiles/modular/webrick/r4/v1.9.gemfile.example + gemfiles/modular/webrick/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_webrick_vHEAD_gemfile + action: write + dest_sha256: da545f591af987648ffbaba181707480a38dfb375db7d289617986ec2c2ca23b + input_fingerprint: 4064ac3ff9a09bf12f841b68883318bcc3639cb8dba88dbe46691e55c2eb117a + template_sources: + - gemfiles/modular/webrick/vHEAD.gemfile.example + gemfiles/modular/x_std_libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_gemfile + action: write + dest_sha256: e3917e90717d7f9f4393d847549a78c53de7f6c8de52a7f590b34b515fd6111a + input_fingerprint: ae50a0cf2bdd61b48692f30ee7ce710d04fc0be9d2cfb13839eb873b08da084f + template_sources: + - gemfiles/modular/x_std_libs.gemfile.example + gemfiles/modular/x_std_libs/r2/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r2_libs_gemfile + action: write + dest_sha256: e80ec8ad06cb1b31ac982bc25cf7696987fca131aa1001eaefd0bf5cd379c273 + input_fingerprint: e1add44f8e721a533ad7525932d4b88f0568b3d1970dfe9f9e1df5eb45f9c891 + template_sources: + - gemfiles/modular/x_std_libs/r2/libs.gemfile.example + gemfiles/modular/x_std_libs/r3/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r3_libs_gemfile + action: write + dest_sha256: 546f8849f4267bb19aa10ff0de40be30957197f229e6887847181ea9127b2650 + input_fingerprint: cba487f430c08c71de965e05c1f69460880c3d3e88fc139cbeb858ca58466cd4 + template_sources: + - gemfiles/modular/x_std_libs/r3/libs.gemfile.example + gemfiles/modular/x_std_libs/r4/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r4_libs_gemfile + action: write + dest_sha256: 8c2582eaa218d216b98c86c933465295c8b4e43f3251ea388b9eaf6e471f8da6 + input_fingerprint: 31da88a6668e5acf60a4855ffdff7c3a10a25e6a3b364928390cf4b1f2686218 + template_sources: + - gemfiles/modular/x_std_libs/r4/libs.gemfile.example + gemfiles/modular/x_std_libs/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_vHEAD_gemfile + action: write + dest_sha256: d3133ec4c0638363a7fb025d19be7e95a615fd61c35ddb8d17f2280ee74a7486 + input_fingerprint: 9016f7b0fbcd40235e0eb76a91fcbec72c8a41b516ea1649155e9ba94feb5c3a + template_sources: + - gemfiles/modular/x_std_libs/vHEAD.gemfile.example + lib/ast/merge/version.rb: + recipe: template_source_application_lib_ast_merge_version_rb + action: write + dest_sha256: c93cf9c0088f050f139ed3d76c998b38e2ae1f2ca092348732481c6ec1eecfaf + input_fingerprint: 36ff0f02d3930864591137c6629413804827d0523eae0a8f75c6ae462dadc907 + template_sources: + - lib/gem/version.rb.example + sig/ast/merge.rbs: + recipe: template_source_application_sig_ast_merge_rbs + action: write + dest_sha256: eaedd1be84cb5842d5fc118dcee5e9778be1610eedded83468a7efab08992332 + input_fingerprint: c56c1fbb1cb5e2af902fc752eb86dcf67ec42f6cfe8103b3f369f40fb9244706 + template_sources: + - sig/gem.rbs.example + spec/spec_helper.rb: + recipe: template_source_application_spec_spec_helper_rb + action: write + dest_sha256: d1cb5f6ee25c67b1e0023779770aa16cd468f97547095aa2ba9e37513c78e2cb + input_fingerprint: 95597763819430299f48a27b93dc1124bbb23b94d252009202142d48472293d5 + template_sources: + - spec/spec_helper.rb.example diff --git a/gems/ast-merge/Gemfile b/gems/ast-merge/Gemfile index 92d1177b1..9724f4558 100644 --- a/gems/ast-merge/Gemfile +++ b/gems/ast-merge/Gemfile @@ -19,8 +19,7 @@ git_source(:gitlab) { |repo_name| "https://gitlab.com/#{repo_name}" } gemspec # Local workspace dependency wiring for *_local.gemfile overrides -nomono_requirements = ['~> 1.0', '>= 1.0.8'] -gem 'nomono', *nomono_requirements, require: false # ruby >= 2.2 +gem 'nomono', '~> 1.1', '>= 1.1.0', require: false # ruby >= 3.2.0 # Direct sibling dependencies (env-switched via STRUCTUREDMERGE_DEV) direct_sibling_gems = %w[ @@ -36,8 +35,8 @@ if direct_sibling_gems.any? && ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?) direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV') direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil) + require 'nomono/bundler' begin - require 'nomono/bundler' ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local eval_nomono_gems( @@ -46,8 +45,6 @@ if direct_sibling_gems.any? && path_env: 'STRUCTUREDMERGE_DEV', root: %w[src my structuredmerge] ) - rescue LoadError - warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.' ensure if direct_sibling_templating && !direct_sibling_local if direct_sibling_dev_was_set diff --git a/gems/ast-merge/Gemfile.lock b/gems/ast-merge/Gemfile.lock index 761bc7971..fff5ae06a 100644 --- a/gems/ast-merge/Gemfile.lock +++ b/gems/ast-merge/Gemfile.lock @@ -74,8 +74,8 @@ GEM bundler (>= 1.14) version_gem (~> 1.1, >= 1.1.4) geom2d (0.4.1) - gitmoji-regex (2.0.4) - version_gem (~> 1.1, >= 1.1.13) + gitmoji-regex (2.0.6) + version_gem (~> 1.1, >= 1.1.14) hexapdf (1.9.1) cmdparse (~> 3.0, >= 3.0.3) geom2d (~> 0.4, >= 0.4.1) @@ -88,20 +88,29 @@ GEM rdoc (>= 4.0.0) reline (>= 0.4.2) json (2.21.1) - kettle-dev (2.3.9) + kettle-dev (2.4.5) emoji_regex (>= 15.0) + kettle-gha-pins (~> 0.3, >= 0.3.1) + kettle-ndjson (~> 0.1, >= 0.1.1) kettle-rb (~> 0.1, >= 0.1.2) - kettle-test (~> 2.0, >= 2.0.4) + kettle-test (~> 2.0, >= 2.0.12) + ruby-progressbar (~> 1.13) + tty-progressbar (~> 0.18) + kettle-gha-pins (0.3.1) ruby-progressbar (~> 1.13) + tty-progressbar (~> 0.18) + version_gem (~> 1.1, >= 1.1.14) + kettle-ndjson (0.1.1) + version_gem (~> 1.1, >= 1.1.14) kettle-rb (0.1.5) - kettle-soup-cover (3.0.4) + kettle-soup-cover (3.0.5) kettle-wash (~> 0.1, >= 0.1.0) simplecov (>= 1.0) simplecov-cobertura (>= 4.0) simplecov-console (~> 0.9, >= 0.9.5) simplecov-rcov (~> 0.3, >= 0.3.7) simplecov_lcov_formatter (~> 0.9, >= 0.9.0) - kettle-test (2.0.12) + kettle-test (2.0.15) appraisal2 (~> 3.0, >= 3.0.6) backports (~> 3.0) rspec (~> 3.0) @@ -128,6 +137,8 @@ GEM racc (~> 1.4) nokogiri (1.19.4-arm64-darwin) racc (~> 1.4) + nokogiri (1.19.4-x86_64-darwin) + racc (~> 1.4) nokogiri (1.19.4-x86_64-linux-gnu) racc (~> 1.4) nokogiri (1.19.4-x86_64-linux-musl) @@ -186,11 +197,11 @@ GEM rspec-mocks (3.13.8) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) - rspec-pending_for (0.1.21) + rspec-pending_for (0.1.22) rspec-core (~> 3.0) ruby_engine (~> 2.0) ruby_version (~> 1.0) - rspec-stubbed_env (1.0.6) + rspec-stubbed_env (1.0.8) rspec-support (3.13.7) rspec_junit_formatter (0.6.0) rspec-core (>= 2, < 4, != 2.12.0) @@ -286,7 +297,7 @@ GEM silent_stream (1.0.12) logger (~> 1.2) version_gem (>= 1.1.8, < 3) - simplecov (1.0.2) + simplecov (1.0.3) simplecov-cobertura (4.0.0) rexml simplecov (~> 1.0) @@ -298,7 +309,7 @@ GEM simplecov (>= 0.4.1) simplecov_lcov_formatter (0.9.0) simplecov (>= 0.18) - sorbet-runtime (0.6.13351) + sorbet-runtime (0.6.13363) standard (1.56.0) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.0) @@ -322,9 +333,9 @@ GEM standard-custom (~> 1.0, >= 1.0.2) standard-performance (~> 1.9, >= 1.9.0) version_gem (~> 1.1, >= 1.1.13) - stone_checksums (1.0.6) - version_gem (~> 1.1, >= 1.1.13) + stone_checksums (1.0.7) stringio (3.2.0) + strings-ansi (0.2.0) strscan (3.1.8) terminal-table (4.0.0) unicode-display_width (>= 1.1.1, < 4) @@ -342,20 +353,27 @@ GEM parslet (~> 2.0) tree_sitter_language_pack (>= 1.13.2, < 2.0) version_gem (~> 1.1, >= 1.1.9) - tree_sitter_language_pack (1.13.3-aarch64-linux) + tree_sitter_language_pack (1.13.4-aarch64-linux) sorbet-runtime (~> 0.5) - tree_sitter_language_pack (1.13.3-arm64-darwin) + tree_sitter_language_pack (1.13.4-arm64-darwin) sorbet-runtime (~> 0.5) - tree_sitter_language_pack (1.13.3-x86_64-linux) + tree_sitter_language_pack (1.13.4-x86_64-darwin) + sorbet-runtime (~> 0.5) + tree_sitter_language_pack (1.13.4-x86_64-linux) sorbet-runtime (~> 0.5) tsort (0.2.0) - turbo_tests2 (3.2.0) + tty-cursor (0.7.1) + tty-progressbar (0.18.3) + strings-ansi (~> 0.2) + tty-cursor (~> 0.7) + tty-screen (~> 0.8) + unicode-display_width (>= 1.6, < 3.0) + tty-screen (0.8.2) + turbo_tests2 (3.2.3) parallel_tests (>= 3.3.0, < 6) rspec (>= 3.10) version_gem (~> 1.1, >= 1.1.14) - unicode-display_width (3.2.0) - unicode-emoji (~> 4.1) - unicode-emoji (4.2.0) + unicode-display_width (2.6.0) version_gem (1.1.14) webrick (1.9.2) yaml-converter (0.2.3) @@ -373,6 +391,9 @@ GEM ostruct rainbow yard + yard-lint (1.10.2) + yard (~> 0.9) + zeitwerk (~> 2.6) yard-relative_markdown_links (0.6.0) nokogiri (>= 1.14.3, < 2) yard-timekeeper (0.2.4) @@ -388,7 +409,7 @@ PLATFORMS aarch64-linux-gnu aarch64-linux-musl arm64-darwin - x86_64-linux + x86_64-darwin x86_64-linux-gnu x86_64-linux-musl @@ -405,12 +426,12 @@ DEPENDENCIES gitmoji-regex (~> 2.0, >= 2.0.0) irb (~> 1.17) kettle-dev (~> 2.0, >= 2.2.25) - kettle-soup-cover (~> 3.0, >= 3.0.3) + kettle-soup-cover (~> 3.0, >= 3.0.5) kettle-test (~> 2.0, >= 2.0.9) kramdown (~> 2.5, >= 2.5.2) kramdown-parser-gfm (~> 1.1) mutex_m (~> 0.2) - nomono (~> 1.0, >= 1.0.8) + nomono (~> 1.1, >= 1.1.0) rake (~> 13.0) rbs (>= 3.0) rdoc (~> 6.11) @@ -433,6 +454,7 @@ DEPENDENCIES yard (~> 0.9, >= 0.9.45) yard-fence (~> 0.9, >= 0.9.6) yard-junk (~> 0.1, >= 0.1.0) + yard-lint (~> 1.10, >= 1.10.2) yard-relative_markdown_links (~> 0.6) yard-timekeeper (~> 0.2, >= 0.2.4) yard-yaml (~> 0.2, >= 0.2.3) @@ -447,7 +469,7 @@ CHECKSUMS backports (3.25.3) sha256=94298d32dc3c40ca15633b54e282780b49e2db0c045f602ea1907e4f63a17235 benchmark (0.5.0) sha256=465df122341aedcb81a2a24b4d3bd19b6c67c1530713fd533f3ff034e419236c bigdecimal (4.1.2) sha256=53d217666027eab4280346fba98e7d5b66baaae1b9c3c1c0ffe89d48188a3fbd - bundler (4.0.16) sha256=d6ca5dd440c24f9abce9844cf44cc8e18c6a553de65a47efb4544137af92c47d + bundler (4.0.17) sha256=214e21431b5665dd2f99df8a5511c6b151d7a72e8015c8b38f8b775b61cbb6c1 bundler-audit (0.9.3) sha256=81c8766c71e47d0d28a0f98c7eed028539f21a6ea3cd8f685eb6f42333c9b4e9 cgi (0.5.2) sha256=61ca30298171190fd4fa0d8018e57ada456eae9b7a2b78526debf7f0a0e6f8bb citrus (3.0.2) sha256=4ec2412fc389ad186735f4baee1460f7900a8e130ffe3f216b30d4f9c684f650 @@ -469,15 +491,17 @@ CHECKSUMS erb (6.0.6) sha256=a9b24986700f5bf127c4f297c5403c3ca41b83b0a316c0cd09a096b56e644ae5 gem_bench (2.0.5) sha256=0dc0fb44a5a5eb7b2f5c1c68a5b0164d72007132822c012bac3abe976b199ead geom2d (0.4.1) sha256=ea0998ea90c4f2752e24fe13d85a4f89bee689d151316140ebcc6369bf634ed9 - gitmoji-regex (2.0.4) sha256=01410d3217940bd0e7b2299ec805245afe8d0f06a5d6d38f623d63a63c0ac34f + gitmoji-regex (2.0.6) sha256=d50649caccc8ad1b080f01e869f0909b135206d8b3ece2313ca31a9b0e39f14b hexapdf (1.9.1) sha256=2d1f6a3622e6bc2a70a707d4c3f3fa44f5552ecd9d899f6283abb07398a84884 io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc irb (1.18.0) sha256=de9454a0703a54704b9811a5ef31a60c86949fbf4013fcf244fabc7c775248e3 json (2.21.1) sha256=13a43df75d95641443f5702dff350f237164a9d811ff0f2c2800d4d980220583 - kettle-dev (2.3.9) sha256=03b2f72c6dda4d2c4401ee3c0c96853116c922766e7b5b04224434a49b571bfc + kettle-dev (2.4.5) sha256=3a451940796a671b7adc910db7c3da87899ebec7c5274921ca598345549ae7eb + kettle-gha-pins (0.3.1) sha256=b13a82a403af31880288fe65f85f2a24a93ae4740c0c7cbc15a35044d27aaa51 + kettle-ndjson (0.1.1) sha256=2d84314e8c911d6f560f2736e8f72019df6d811829674788ff33b3bbf518ed66 kettle-rb (0.1.5) sha256=0322a569860c86e70f90d5ebe72353b8720b7054c7efa9f9044857f5c972d29f - kettle-soup-cover (3.0.4) sha256=36d4df472362d2020d16411d7ce26ba2fe2a41fb8be64577ff9b5280acf99d86 - kettle-test (2.0.12) sha256=3a8e5c5f38db03a6f0a8896da6f3576d24e36f53796578c19aafaa2ba5a8ea52 + kettle-soup-cover (3.0.5) sha256=80abb42eb294fa5d3c8632c259a297c554fbc01902714461f3bf99a65190f5d0 + kettle-test (2.0.15) sha256=993b132ffec17fe82cc81c69f876e15d6eb610a4831df08dc01c0cce5c070caa kettle-wash (0.1.1) sha256=ae2e08b64c72c46ceed5ffa197ed859e85352f38ed0412fca2e18ce29b2dc4f9 kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa kramdown-parser-gfm (1.1.0) sha256=fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729 @@ -488,6 +512,7 @@ CHECKSUMS nokogiri (1.19.4-aarch64-linux-gnu) sha256=1269fb644a6de405057a53dd5c762b1209b43ca7424f839454d3dbc677c31a8f nokogiri (1.19.4-aarch64-linux-musl) sha256=35c65b9ce72b3bb03207bdbe7067915019dc18c1b9b59139684bd6690fdd01af nokogiri (1.19.4-arm64-darwin) sha256=a46db9853286e6597b36ebc6953817d15acf3a299583eb3f89fdc6f91dd63527 + nokogiri (1.19.4-x86_64-darwin) sha256=7fd17057d3e1f00e9954a74b3cd76595d3d4a5ef233b7ed9599047c204f70551 nokogiri (1.19.4-x86_64-linux-gnu) sha256=379fae440b28915e3f19d752ce2dcf8465ed2b2fbefd2a7ca0dd497bc981a06a nokogiri (1.19.4-x86_64-linux-musl) sha256=17dfb7c1fa194ae02fbf7c51a7afc8d278045ab3fdacfd86f91d02d7b274470b nomono (1.1.0) sha256=463dd4c79da02a855739a1b5483190d527b7868688be905e84abdb3449b32c88 @@ -517,8 +542,8 @@ CHECKSUMS rspec-core (3.13.6) sha256=a8823c6411667b60a8bca135364351dda34cd55e44ff94c4be4633b37d828b2d rspec-expectations (3.13.5) sha256=33a4d3a1d95060aea4c94e9f237030a8f9eae5615e9bd85718fe3a09e4b58836 rspec-mocks (3.13.8) sha256=086ad3d3d17533f4237643de0b5c42f04b66348c28bf6b9c2d3f4a3b01af1d47 - rspec-pending_for (0.1.21) sha256=c87fda50c20f8faca72d9cfa6a936abffd37860343f14aced95bbb29b8ae96bf - rspec-stubbed_env (1.0.6) sha256=6467a6eb0f72146d443ffb0c5a2a549d8812e59c04fbc81e03cd914ebf1f28dc + rspec-pending_for (0.1.22) sha256=49dc647473f8c8ea4ccc1a33813537dd94b913ef7ec5a8689896101eaacb71cf + rspec-stubbed_env (1.0.8) sha256=b23c4dd5e5d6a0cf0c5b4f6ed3f3678d78e4be9ec247ea9abf0669d20b490535 rspec-support (3.13.7) sha256=0640e5570872aafefd79867901deeeeb40b0c9875a36b983d85f54fb7381c47c rspec_junit_formatter (0.6.0) sha256=40dde674e6ae4e6cc0ff560da25497677e34fefd2338cc467a8972f602b62b15 rubocop (1.88.2) sha256=8def251c90cd955feb4daa3edc0ab56893250c4ce90ef81e6c80c03f9a939bbf @@ -544,19 +569,20 @@ CHECKSUMS ruby_engine (2.0.3) sha256=ca2ae7def8cfcdc2bfb6a186d36d5d59c8b403245dc0256c3802b767fa278aaa ruby_version (1.0.3) sha256=5930f9950746b7e6c973184398ee364ee7440b170fef7922b9f5cdf317f1ccb5 silent_stream (1.0.12) sha256=377c43aa10033fe90c33b39ea8cd97d79f2d1c4856df598efc56f3091f3ae782 - simplecov (1.0.2) sha256=c6459434efe4b948b46477cc2df2faa73ab365f83a33c7c17f81262f4f7f1244 + simplecov (1.0.3) sha256=38ef0514f16ae7562f0d0f4df02610071115103d301b6de7dacbcc000082e39b simplecov-cobertura (4.0.0) sha256=e4fb3159b1ecea545b44f5452a8611305323e78ad23eae8aed35924d072e01ea simplecov-console (0.9.5) sha256=b1108bcfff5f210143e2b8301698c367b01586f20d25a73e95475a5df6fc6ff6 simplecov-rcov (0.3.7) sha256=372f50bf6df6b6350b7d0c840f2f8bdabe021861a43c26877b747c9ac96139fc simplecov_lcov_formatter (0.9.0) sha256=4c1839bb31dcf7a8f7a6474c94ed228aa03b994e9dd5e1965e58b4121b049bed - sorbet-runtime (0.6.13351) sha256=f8fee17c6e3edf835dc6823d26afb9a7c8969c6710d1fabe2fb43f4e0c15c64f + sorbet-runtime (0.6.13363) sha256=f1f0b2e946fb3cd76b9d8e3d85459cdaf7f5466331a400cafcf008e508b6d2c3 standard (1.56.0) sha256=ae2af4d9669589162ac69ed5ef59dcf9f346d4afc81f7e62b84339310dfcb787 standard-custom (1.0.2) sha256=424adc84179a074f1a2a309bb9cf7cd6bfdb2b6541f20c6bf9436c0ba22a652b standard-performance (1.9.0) sha256=49483d31be448292951d80e5e67cdcb576c2502103c7b40aec6f1b6e9c88e3f2 standard-rspec (0.5.0) sha256=64d396524a65af47f5331b423d8cdd313e0267401647bb7892489ca89dad2973 standard-rubocop-lts (2.0.10) sha256=89708a505b7d8b24d2ac399a7520fcb9e764abc2ecb4289b631b5fe0e3b76617 - stone_checksums (1.0.6) sha256=c775f830513d6c6ab26e31d1a5fbecd4c4e39002663d4d9f8fa96e97990b5298 + stone_checksums (1.0.7) sha256=faf7a175da7c4f32777c5292a0128b06eec183b3cc3a0b382529b21800300626 stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1 + strings-ansi (0.2.0) sha256=90262d760ea4a94cc2ae8d58205277a343409c288cbe7c29416b1826bd511c88 strscan (3.1.8) sha256=aae2db611a225559f21ffbb71765c9a4e60fd262534a9ea84f4f11c7f32f679e terminal-table (4.0.0) sha256=f504793203f8251b2ea7c7068333053f0beeea26093ec9962e62ea79f94301d2 thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73 @@ -564,19 +590,23 @@ CHECKSUMS timecop-rspec (1.0.3) sha256=005f14841bb606dcaefb060e321b5388e2e59537742bee8b3a9a9a40e598fab9 token-resolver (2.0.5) sha256=b852f924287ffb58a440856e862b056c8ad97e74b4b2526cee43e0771f40c25c tree_haver (7.1.0) - tree_sitter_language_pack (1.13.3-aarch64-linux) sha256=55ffc7c87868cb45658338363d9eba51b4a8b0259aa88e4de368d2bd1d52fea4 - tree_sitter_language_pack (1.13.3-arm64-darwin) sha256=bc2498db605f212a1dbd2465ed3f65190d7da786f6ed5d30fcf958121aeb4a5c - tree_sitter_language_pack (1.13.3-x86_64-linux) sha256=1ffd045bd236ea54f58c5872ee66121d01033359c1f28f375b7fd4a4b5620cf9 + tree_sitter_language_pack (1.13.4-aarch64-linux) sha256=f7bb95fd59afda1e1b91a7b6ad4df244c585a863e94e4a0f492ef2336a5358b8 + tree_sitter_language_pack (1.13.4-arm64-darwin) sha256=2b48ded1f5feae3de20be1471aaa7c211601ac1c71ca6d4789cf31560a854132 + tree_sitter_language_pack (1.13.4-x86_64-darwin) sha256=8a2460d9029e7610b863d2481e2da0078f87b18bf8668070ccb5ecce71e272d8 + tree_sitter_language_pack (1.13.4-x86_64-linux) sha256=ae3ae718534088b2dc76bd93e7d093f11e8d19188bf47edfcd962df906e1af97 tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f - turbo_tests2 (3.2.0) sha256=8b35421548399d1923567b177970f42671c65695b93cdd134d78fbcbab85dff0 - unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42 - unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f + tty-cursor (0.7.1) sha256=79534185e6a777888d88628b14b6a1fdf5154a603f285f80b1753e1908e0bf48 + tty-progressbar (0.18.3) sha256=6cbb4260e55e74a9180d502143eb6a467d2c8e51bf5f3c9509fb5cacc3d4a5f6 + tty-screen (0.8.2) sha256=c090652115beae764336c28802d633f204fb84da93c6a968aa5d8e319e819b50 + turbo_tests2 (3.2.3) sha256=f77fc0799014c1d7890977e117cf39317bc4544de2c88a55149ed920b4cff942 + unicode-display_width (2.6.0) sha256=12279874bba6d5e4d2728cef814b19197dbb10d7a7837a869bab65da943b7f5a version_gem (1.1.14) sha256=6b7306c7e9416d06067561981ab3444e2cecb844f26cc325ae3c27b44cf85613 webrick (1.9.2) sha256=beb4a15fc474defed24a3bda4ffd88a490d517c9e4e6118c3edce59e45864131 yaml-converter (0.2.3) sha256=d35e69e547610d9e347672cc277fcb7d71dff3c53a942e66f82b1c64022ada72 yard (0.9.45) sha256=52e211493f7cb8a3ebf7e104a25a1e73937a3103092545d34cb88fafebb3dc51 yard-fence (0.9.6) sha256=3d1dbf4e3df462ac78b8bd2e01cf740a2de20168387c929aca31a0bcee490659 yard-junk (0.1.0) sha256=e85fe2ec1afa47313decd333447b53458cb1ed49b510b70015fdc3041a94bcdd + yard-lint (1.10.2) sha256=3e595709d088a8cc827e706a4146b447eb6a907ee375d06c11077369d00717f6 yard-relative_markdown_links (0.6.0) sha256=3e5ffa85cbad9bac70bee5421774b190fb25d3bdf489323a5b3534f647d1a70e yard-timekeeper (0.2.4) sha256=62f8d001d737c6e2ac688e7b37386f958dceb0f6aff9c909575e1bec8d20775a yard-yaml (0.2.3) sha256=fe5fef18819e1cbd05bb8f1b9e1baad6bf70c28125eb75b57bbf6397b0831812 @@ -584,4 +614,4 @@ CHECKSUMS zlib (3.2.3) sha256=5bd316698b32f31a64ab910a8b6c282442ca1626a81bbd6a1674e8522e319c20 BUNDLED WITH - 4.0.16 + 4.0.17 diff --git a/gems/ast-merge/LICENSE.md b/gems/ast-merge/LICENSE.md index 6ad318705..65a770d1f 100644 --- a/gems/ast-merge/LICENSE.md +++ b/gems/ast-merge/LICENSE.md @@ -3,8 +3,8 @@ This project is made available under the following licenses. Choose the option that best fits your use case: -- [AGPL-3.0-only](AGPL-3.0-only.md) -- [PolyForm-Small-Business-1.0.0](PolyForm-Small-Business-1.0.0.md) +- [AGPL-3.0-only](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/AGPL-3.0-only.md) +- [PolyForm-Small-Business-1.0.0](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/PolyForm-Small-Business-1.0.0.md) If none of the above licenses fit your use case, please [contact us](mailto:floss@galtzo.com) to discuss a custom commercial license. diff --git a/gems/ast-merge/README.md b/gems/ast-merge/README.md index eb322157f..e9699315b 100644 --- a/gems/ast-merge/README.md +++ b/gems/ast-merge/README.md @@ -50,25 +50,74 @@ Ast::Merge builds on tree\_haver to provide: - **Region Detection**: `RegionDetectorBase`, `FencedCodeBlockDetector` for text-based analysis - **RSpec Shared Examples**: Test helpers for implementing new merge gems -### Merge Gem Backend Patterns +### Merge Gem Backend and Behavior Patterns Every merge gem in this family must enter parsing through `tree_haver`. Do not add direct parser fallbacks in merge gems. If a requested backend or grammar is unavailable, fail closed with an unsupported feature or parse diagnostic instead of switching to another parser outside `tree_haver`. -The current merge gems fit three backend patterns: - -- **Provider-only merge gems** register a concrete TreeHaver backend and use that backend exclusively. Use this for gems whose purpose is to expose a specific parser provider, such as `prism-merge`, `psych-merge`, `citrus-toml-merge`, and `parslet-toml-merge`. -- **Hybrid provider plus TSLP merge gems** register their provider backend, and may also register a TSLP/tree-sitter grammar mapping for the same language when both surfaces are intended and tested. `rbs-merge` is the model for this category. -- **Substrate mapping merge gems** do not own a parser. They register the format grammar with `TreeHaver::GrammarFinder` and use the normal `TreeHaver.parser_for(:format)` API for analysis and merge behavior. `json-merge`, `toml-merge`, `yaml-merge`, and `ruby-merge` follow this pattern. +Merge gems also form language or format families. Each family has a substrate +gem that owns shared merge behavior for that language or format. Provider gems +register alternate AST backends and delegate family-specific behavior back to the +substrate. This keeps parser differences behind TreeHaver while preserving one +place for the merge semantics that make a format peculiar. + +These are two separate axes: + +- **Behavior role** answers where shared merge semantics live. A substrate gem + owns common behavior for a language or format family. A provider gem exposes a + backend and delegates family behavior to the substrate when one exists. +- **Backend role** answers how parsing is registered. A gem may register a + TSLP/tree-sitter grammar, a native/provider backend, both, or no parser at all + for byte or line oriented merge behavior. + +Current examples: + +- **Substrate with TSLP/tree-sitter registration**: `markdown-merge`, + `yaml-merge`, `ruby-merge`, and `toml-merge` register tree-sitter grammar + paths and host shared family behavior. `json-merge`, `bash-merge`, + `go-merge`, `html-merge`, `rust-merge`, and `typescript-merge` currently use + the same TSLP-backed shape for formats without alternate provider gems. +- **Provider backed by a native or Ruby parser**: `commonmarker-merge`, + `kramdown-merge`, and `markly-merge` provide Markdown backends and share + behavior with `markdown-merge`; `psych-merge` provides a YAML backend and + should share behavior with `yaml-merge`; `prism-merge` provides a Ruby backend + and shares behavior with `ruby-merge`; `citrus-toml-merge` and + `parslet-toml-merge` provide TOML backends and share behavior with + `toml-merge`. +- **Dual-backend single gem**: `rbs-merge` registers the official RBS parser + backend and the tree-sitter RBS grammar in one gem because both surfaces are + intentional and tested there. +- **Kaitai/binary family**: `binary-merge` is the shared substrate for + schema-aware binary merge behavior: byte ranges, preservation reports, unsafe + diagnostics, render policies, and nested dispatch conventions. Concrete + parser gems such as `zip-merge` depend on that substrate, register their + schema parser path, and produce normalized TreeHaver binary report nodes. +- **Synthetic line AST merge gems**: `plain-merge` registers `:text` and + `:plain` line-backed parser paths for normalized block analysis, and + `dotenv-merge` registers `:dotenv` and `:env` parser paths that build dotenv + ownership on the plain line substrate. +- **Thin substrates are still substrates**: `binary-merge` is intentionally thin + while ZIP is the only Kaitai-backed family member. Shared binary behavior + should move there as additional binary schema gems prove common patterns. Backend fallback inside `tree_haver` is allowed when it is explicit TreeHaver backend selection. Backend fallback outside `tree_haver` is not allowed, because it bypasses owner identity, backend diagnostics, parser capability reporting, and shared merge-stack behavior. +Partial document insertion, replacement, and removal belong in `ast-crispr`. +`PartialTemplateMerger` classes should be adapters over structural owners and +source-preserving edit plans, not native object round-trips. A YAML partial merge +must not parse to Ruby Hashes and emit with `Psych.dump`; a Markdown partial +merge must not slice headings with regular expressions; and a tree-sitter-backed +merge must not call the grammar library directly outside TreeHaver. + ### Creating a New Merge Gem Pick the merge-gem shape before writing parser code: -- Use a substrate mapping gem when the format can use an existing TreeHaver grammar/backend. Register the grammar, parse through `TreeHaver.parser_for`, and keep merge behavior in the substrate. -- Use a provider-only gem when the gem exists to expose one concrete parser backend. Register that backend with `TreeHaver.register_language`, then delegate shared language or format behavior back to the substrate gem. -- Use a hybrid provider gem only when both the native provider and TSLP/tree-sitter path are intentional, tested TreeHaver backends. +- Use a substrate gem when the format needs shared behavior across one or more + backends. Register the TSLP/tree-sitter grammar there when that backend is + supported, parse through `TreeHaver.parser_for`, and keep shared merge + behavior in the substrate. +- Use a provider gem when the gem exists to expose one concrete parser backend. Register that backend with `TreeHaver.register_language`, then delegate shared language or format behavior back to the substrate gem. +- Use a dual-backend gem only when both the native provider and TSLP/tree-sitter path are intentional, tested TreeHaver backends in that same gem. Merge gems should not call parser libraries directly during merge analysis. Direct parser calls belong inside TreeHaver backend adapters. @@ -308,7 +357,7 @@ The `Ast::Merge` module is organized into several namespaces, each with detailed |-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Works with MRI Ruby 4 | [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf]| | Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Get help from RubyForum][✉️ruby-forum-img]][✉️ruby-forum] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork] [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor] | -| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on Github.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] | +| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on GitHub.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] | | Documentation | [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![YARD on Galtzo.com][📜docs-head-rd-img]][🚎yard-head] [![Maintainer Blog][🚂maint-blog-img]][🚂maint-blog] [![GitLab Wiki][📜gl-wiki-img]][📜gl-wiki] [![GitHub Wiki][📜gh-wiki-img]][📜gh-wiki] | | Compliance | [![License: AGPL-3.0-only OR PolyForm-Small-Business-1.0.0][📄license-img]][📄license] [![Apache license compatibility: Category X][📄license-compat-img]][📄license-compat] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] | | Style | [![Enforced Code Style Linter][💎rlts-img]][💎rlts] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] [![Compatibility appraised by: appraisal2][💎appraisal2-img]][💎appraisal2] | @@ -500,7 +549,7 @@ See [CHANGELOG.md][📌changelog] for a list of releases. ## 📄 License -The gem is available under the following licenses: [AGPL-3.0-only](AGPL-3.0-only.md), [PolyForm-Small-Business-1.0.0](PolyForm-Small-Business-1.0.0.md). +The gem is available under the following licenses: [AGPL-3.0-only](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/AGPL-3.0-only.md), [PolyForm-Small-Business-1.0.0](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/PolyForm-Small-Business-1.0.0.md). See [LICENSE.md][📄license] for details. If none of the available licenses suit your use case, please [contact us](mailto:floss@galtzo.com) to discuss a custom commercial license. @@ -572,7 +621,7 @@ If none of the available licenses suit your use case, please [contact us](mailto [📜src-gl]: https://gitlab.com/structuredmerge/structuredmerge-ruby/-/tree/main/gems/ast-merge [📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue [📜src-cb]: https://codeberg.org/structuredmerge/structuredmerge-ruby/src/branch/main/gems/ast-merge -[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=Github&logoColor=green +[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=GitHub&logoColor=green [📜src-gh]: https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/ast-merge [📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white [📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white diff --git a/gems/ast-merge/bin/kettle-gha-pins b/gems/ast-merge/bin/kettle-gha-pins new file mode 100755 index 000000000..c743cecac --- /dev/null +++ b/gems/ast-merge/bin/kettle-gha-pins @@ -0,0 +1,16 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# +# This file was generated by Bundler. +# +# The application 'kettle-gha-pins' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) + +require 'rubygems' +require 'bundler/setup' + +load Gem.bin_path('kettle-gha-pins', 'kettle-gha-pins') diff --git a/gems/ast-merge/gemfiles/modular/coverage.gemfile b/gems/ast-merge/gemfiles/modular/coverage.gemfile index b93014b6b..b4c26a504 100644 --- a/gems/ast-merge/gemfiles/modular/coverage.gemfile +++ b/gems/ast-merge/gemfiles/modular/coverage.gemfile @@ -7,7 +7,7 @@ if ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false').zero? # Coverage (remote/released) platform :mri do - gem 'kettle-soup-cover', '~> 3.0', '>= 3.0.3', require: false + gem 'kettle-soup-cover', '~> 3.0', '>= 3.0.5', require: false end else eval_gemfile 'coverage_local.gemfile' diff --git a/gems/ast-merge/gemfiles/modular/coverage_local.gemfile b/gems/ast-merge/gemfiles/modular/coverage_local.gemfile index 316d764dd..1e0aaf180 100644 --- a/gems/ast-merge/gemfiles/modular/coverage_local.gemfile +++ b/gems/ast-merge/gemfiles/modular/coverage_local.gemfile @@ -3,7 +3,7 @@ # Local path overrides for development. # Loaded by the associated non-local gemfile when KETTLE_DEV_DEV != "false". -require "nomono/bundler" +require 'nomono/bundler' local_gems = %w[kettle-dev kettle-test kettle-soup-cover kettle-drift] declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name) @@ -17,7 +17,8 @@ platform :mri do path_env: 'KETTLE_DEV_DEV', vendored_gems_env: 'VENDORED_GEMS', vendor_gem_dir_env: 'VENDOR_GEM_DIR', - debug_env: 'KETTLE_DEV_DEBUG' + debug_env: 'KETTLE_DEV_DEBUG', + root: %w[src my kettle-dev] ) if ENV.fetch('GALTZO_FLOSS_DEV', 'false').casecmp('false') != 0 diff --git a/gems/ast-merge/gemfiles/modular/documentation.gemfile b/gems/ast-merge/gemfiles/modular/documentation.gemfile index 9d4535f12..d0f4d4a76 100644 --- a/gems/ast-merge/gemfiles/modular/documentation.gemfile +++ b/gems/ast-merge/gemfiles/modular/documentation.gemfile @@ -12,6 +12,7 @@ gem 'kramdown-parser-gfm', '~> 1.1', require: false # Ruby >= 2.3 gem 'yaml-converter', '~> 0.2', '>= 0.2.3', require: false # Ruby >= 3.2 gem 'yard', '~> 0.9', '>= 0.9.45', require: false gem 'yard-junk', '~> 0.1', '>= 0.1.0', require: false # Ruby >= 3.1 +gem 'yard-lint', '~> 1.10', '>= 1.10.2', require: false # Ruby >= 3.2 gem 'yard-relative_markdown_links', '~> 0.6', require: false if ENV.fetch('GALTZO_FLOSS_DEV', 'false').casecmp('false').zero? diff --git a/gems/ast-merge/gemfiles/modular/documentation_local.gemfile b/gems/ast-merge/gemfiles/modular/documentation_local.gemfile index 18e1ba3b3..7fcaca00b 100644 --- a/gems/ast-merge/gemfiles/modular/documentation_local.gemfile +++ b/gems/ast-merge/gemfiles/modular/documentation_local.gemfile @@ -3,7 +3,7 @@ # Local path overrides for development. # Loaded by the associated non-local gemfile when GALTZO_FLOSS_DEV != "false". -require "nomono/bundler" +require 'nomono/bundler' local_gems = %w[yard-fence yard-timekeeper yard-yaml] declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name) diff --git a/gems/ast-merge/gemfiles/modular/style_local.gemfile b/gems/ast-merge/gemfiles/modular/style_local.gemfile index 73e4e724b..ae22f905d 100644 --- a/gems/ast-merge/gemfiles/modular/style_local.gemfile +++ b/gems/ast-merge/gemfiles/modular/style_local.gemfile @@ -6,7 +6,7 @@ # Local path overrides for development. # Loaded by the associated non-local gemfile when RUBOCOP_LTS_LOCAL != "false". -require "nomono/bundler" +require 'nomono/bundler' local_gems = %w[rubocop-lts rubocop-lts-rspec rubocop-ruby3_2 standard-rubocop-lts] declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name) diff --git a/gems/ast-merge/gemfiles/modular/templating.gemfile b/gems/ast-merge/gemfiles/modular/templating.gemfile index a672de184..a7e6c1f06 100644 --- a/gems/ast-merge/gemfiles/modular/templating.gemfile +++ b/gems/ast-merge/gemfiles/modular/templating.gemfile @@ -12,7 +12,7 @@ end if kettle_remote # Template/plugin checks for released installs. - gem 'kettle-drift', '~> 1.0', '>= 1.0.6', require: false + gem 'kettle-drift', '~> 1.0', '>= 1.0.7', require: false end # Set STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local development with path-based dependencies. diff --git a/gems/ast-merge/gemfiles/modular/templating_local.gemfile b/gems/ast-merge/gemfiles/modular/templating_local.gemfile index b0c887fb3..23451fe04 100644 --- a/gems/ast-merge/gemfiles/modular/templating_local.gemfile +++ b/gems/ast-merge/gemfiles/modular/templating_local.gemfile @@ -4,7 +4,7 @@ # Loaded by the associated non-local gemfile when STRUCTUREDMERGE_DEV or KETTLE_DEV_DEV # is not "false". -require "nomono/bundler" +require 'nomono/bundler' structuredmerge_local_gems = %w[ tree_haver @@ -65,7 +65,8 @@ platform :mri do path_env: 'KETTLE_DEV_DEV', vendored_gems_env: 'VENDORED_GEMS', vendor_gem_dir_env: 'VENDOR_GEM_DIR', - debug_env: 'KETTLE_DEV_DEBUG' + debug_env: 'KETTLE_DEV_DEBUG', + root: %w[src my kettle-dev] ) end end diff --git a/gems/ast-merge/lib/ast/merge/version.rb b/gems/ast-merge/lib/ast/merge/version.rb index 6e7dc90f7..b30c1b154 100644 --- a/gems/ast-merge/lib/ast/merge/version.rb +++ b/gems/ast-merge/lib/ast/merge/version.rb @@ -2,9 +2,12 @@ module Ast module Merge + # Version namespace for this gem. module Version + # Current gem version. VERSION = '7.1.0' end + # Current gem version exposed at the traditional constant location. VERSION = Version::VERSION # Traditional Constant Location end end diff --git a/gems/ast-merge/spec/ast/merge/version_spec.rb b/gems/ast-merge/spec/ast/merge/version_spec.rb index 1ff3ad683..86cd10c00 100755 --- a/gems/ast-merge/spec/ast/merge/version_spec.rb +++ b/gems/ast-merge/spec/ast/merge/version_spec.rb @@ -1,5 +1,13 @@ # frozen_string_literal: true +require 'anonymous_loader' RSpec.describe Ast::Merge::Version do it_behaves_like 'a Version module', described_class + + it 'executes the version file for coverage without redefining constants' do + path = File.expand_path('../../../lib/ast/merge/version.rb', __dir__) + anonymous_namespace = AnonymousLoader.load(files: path) + + expect(anonymous_namespace::Ast::Merge::Version::VERSION).to eq(described_class::VERSION) + end end diff --git a/gems/ast-template/.structuredmerge/kettle-jem.lock b/gems/ast-template/.structuredmerge/kettle-jem.lock new file mode 100644 index 000000000..4bd3c5ea2 --- /dev/null +++ b/gems/ast-template/.structuredmerge/kettle-jem.lock @@ -0,0 +1,527 @@ +--- +version: 1 +template_state: + version: 7.1.0 + applied_at: '2026-07-26' + changelog_replay: + last_entry_key: kettle-jem-template-20260726-002 + last_entry_date: '2026-07-26' + checksums: + ".aiignore.example": 48a5dfdd93afd1a15fdce39cc28ca9920263f00018b0968ab031fa744521e5ce + ".config/mise/env.sh": aeea5a2ab489ba6e5467ae8de6e386ec8c8fe4ff31a044e69d0cd6a092dd6654 + ".devcontainer/apt-install/devcontainer-feature.json.example": 273a07f9d3926e1b6287c37709a469ee05d724cfedae62ad3b0cd8c09befc9ec + ".devcontainer/apt-install/install.sh.example": b61e020b60ca172bb7b658e63c9cd4342e49bda0531a6b19b36475e515ad20b0 + ".devcontainer/devcontainer.json.example": 4a80d471379b9720cc65cc89543cbbc0a7be87b188a818160296577c4e87606f + ".devcontainer/scripts/setup-tree-sitter.sh.example": c34f48d7bac8561fb780c4c7a81cec5004c3ac0edc11f229799ec9a4e3eccd54 + ".env.local.example": 35cb867e8bacb75252a85c29f78899b36d0d1843511ae1ba1fbc7da863b128b3 + ".envrc.example": b7232f4bae0fb399cc9c9cdc4a5eb694bd69623aeeadcbab18c9990e443040a1 + ".envrc.no-osc.example": b7232f4bae0fb399cc9c9cdc4a5eb694bd69623aeeadcbab18c9990e443040a1 + ".gemrc.example": 77b1c36ae6f91bedf08b99e662a971b02f7e66e0d65267805d068d30ff118aba + ".git-hooks/commit-msg.example": d858575bf70d6175fdd7656e9ba0b41672de3fb49163181efe3fbc9e40306024 + ".git-hooks/commit-subjects-goalie.txt.example": bb1179c8911af8afeb1f9a604b3de789d4a4b33d9d4a7743b3145998c15b0a94 + ".git-hooks/footer-template.erb.txt.example": 70ed3616ee04a4062126f53892cc255e7aa2b66741fe22d6b372f7df99676718 + ".git-hooks/prepare-commit-msg.example": 35266ead46a6385d20eeff7ec64afedef33a2db18d1238b8662a1bc758f05335 + ".github/.codecov.yml.example": d6ef3208a90eca74f79d8ff4e5ae21a915562b075cb17978b1eaadc231dd4e85 + ".github/FUNDING.yml.example": fd27dff7db58f4e8a39c35ccb60e39422517038501a5f2a99ef2aaeea2d1fa5d + ".github/FUNDING.yml.no-osc.example": 8f1a867b1921b3dec1c63f7a7cd629362c1fb1ad0d1052494b48ba746b0fc5c6 + ".github/copilot_instructions.md.example": f5c5791df013e89e170fd436379b14e251d0ff4cb6b330a6d961e80c9071f2d3 + ".github/dependabot.yml.example": db84d1c13f64100d2f48212c022f0d985e9061ca76c36d82e7057fd845ecd528 + ".github/workflows/auto-assign.yml.example": 57b8159a15bf49946506e1b624934feed6a1cc8f71ad68968323c87acac56c67 + ".github/workflows/coverage.yml.example": 524ef90e0fd2ca0b846c464197d8d43cd6a57834303c9526ea0bd277f2beb3e1 + ".github/workflows/current.yml.example": dbc82e7593804c05d2c217d5c02d79d5480b5a0d1e04eea99b7235f35f520216 + ".github/workflows/dep-heads.yml.example": d94122f3246e17774fa015dde8d9a5772a66e54f817d44e62716f6a61d899050 + ".github/workflows/dependency-review.yml.example": a895d52257a7112d796fabf349ced1079bed93e81e3aa9cb088f9af3f44d1e5f + ".github/workflows/discord-notifier.yml.example": f9cc83a87058bd420426444510a1dd1520fd7cc15af50832ad52c25c5766be94 + ".github/workflows/framework-ci.yml.example": 112ef6178fcf115fe9e0a248ec6cb4af748ce89142fd7dba30e9abb6ebdc17be + ".github/workflows/heads.yml.example": aa55cf9bb4ae35fe126384003e8af4b91e685bcf370263b3710bd429f6c44343 + ".github/workflows/jruby-10.0.yml.example": 0eaf6d10c304de606684d420bbd88cfc90fe9d139a56773e011c6abaa6c5fc91 + ".github/workflows/jruby-9.1.yml.example": 9062f9de8843da1f8c4da8f991bbd24f9540c63927deaf311649f3088a672d5b + ".github/workflows/jruby-9.2.yml.example": f330363fc0af7dd0be24c140c919c07737a3168c5647012e34ba0c36634005e5 + ".github/workflows/jruby-9.3.yml.example": 3b26b3a978d0018f01e6d87651936f2e92fcb58d62bcdf11822eca3c2656d303 + ".github/workflows/jruby-9.4.yml.example": a830b92838a09b9316a81745b48ff35bed9461783154fc6d0e52df0d6aa319f3 + ".github/workflows/jruby.yml.example": f10f779cd3be37d2ffa593d9a83ba68a8684bb849ed1c4d9ae41706ff12571e1 + ".github/workflows/license-eye.yml.example": 23db5d6ee9b5382de1f2042642219d65214e09c3f975c418d4dec4d46375036c + ".github/workflows/locked_deps.yml.example": c7eaa20cc7d7de6209e576274e592ffb4838177ae6ab56096b2439d0fa1bc31c + ".github/workflows/opencollective.yml.example": fe7d8d346f9ab055b6779abf62972291460d05275e2c4d191e291e8cd73b0e6b + ".github/workflows/ruby-2.3.yml.example": 90474f1a462edc877983b91dd40d942e82b28262f1afdca74cddcdd52d7e8c26 + ".github/workflows/ruby-2.4.yml.example": fe84af4efef6934d7ff63efa2a4c85994f2ea1887f61b1ab5d30a21365429ec9 + ".github/workflows/ruby-2.5.yml.example": c40db157514168442311191ebc88853dfb36447a90171a73f42d435e92d02f05 + ".github/workflows/ruby-2.6.yml.example": 87bb8537d0047217651a327353df670fed3ea9e4a5350e965ed80af9ce32d9d3 + ".github/workflows/ruby-2.7.yml.example": 5650ec41bc67553457019a772a3343578872749d21268d5e7fb1715ebf4e2351 + ".github/workflows/ruby-3.0.yml.example": f9d7c7dfc6eaea1ca12c92e0b98b4ba8fed5726d26459bb410ab9812a741e5b9 + ".github/workflows/ruby-3.1.yml.example": e44879cd3ea47d00e44e573745d7f95fc1a561a9c1d69d72529d0c07294bd26e + ".github/workflows/ruby-3.2.yml.example": c28b9179778157e6b4807a775968840ff1c6bf2fd847ce1ce694b9a77df42f6e + ".github/workflows/ruby-3.3.yml.example": 033e4f0ed7ded17f5d13fde6674ec9fd555cfe58c11f57f7dc2f1fee21c718b6 + ".github/workflows/ruby-3.4.yml.example": 474a96468f101b8fddac4cecaa0629f28d5ceec0c784329affdc471eb1e3e889 + ".github/workflows/style.yml.example": dea7243a91dc164a172e90b7933de58cdd353d7e5df1beac22cec63125edc086 + ".github/workflows/templating.yml.example": 327b933509e1ade4d53df5756f6407028b479c51847775db494fb9c25e66ce5a + ".github/workflows/truffle.yml.example": 56fa53dc206976c81db7cc3530f4d19d89ea5859c1245492e5a5ecb9304de63e + ".github/workflows/truffleruby-22.3.yml.example": d6773529e6961039b5cc4a145c77623881aa3857d875bbb415ca0f8147166d7a + ".github/workflows/truffleruby-23.0.yml.example": abcd23a18d748528f7558d4ab7bc4830796cb686ca7371f67a8ddaf6d0362d72 + ".github/workflows/truffleruby-23.1.yml.example": 11af8a3f0823ed3ab17e759d81b8a4551eb7af8096ce0b5a9501fd83cada1cd2 + ".github/workflows/truffleruby-24.2.yml.example": 2c4ff82eeaa3bdb19391f04cd2f41b07733986a053d5ac8498176fef5f890e5e + ".github/workflows/truffleruby-25.0.yml.example": 42cdfdcd21c7b3bb1b87c22c2bc7a98135a442742df5f9a45e2b4e03838c1e7f + ".github/workflows/truffleruby-33.0.yml.example": 2a45e428ca13dac56ee75526b80eac477b61697ca06c94680e1eb05d21dbc25a + ".github/workflows/unlocked_deps.yml.example": 15f5ccbe811aa5a8650c2aa69b32f4f6a24d5f8bd3aae2dcbec92cbe3a51f0a7 + ".gitignore.example": 14864a0c88be3f8c122ab3032efeb782ba5e035013231038acf746a400437a3e + ".gitlab-ci.yml.example": ef64afa9855ebb59bbc87446fa9533238d3ce180966ceb19649a7f165715b92b + ".idea/.gitignore.example": b44a5aa16bf9fe5635558af347454b05a76d600084308a9f43d4d0b54789ecab + ".licenserc.yaml.example": 8787fa7bddce911f8ba47bda3eb6ad9786b6650d5d94786723e88773098ed37d + ".opencollective.yml.example": 9ad9b83fe54f0bddac7fb614575585d98f78df0e181ee70a7acd0168d26e3142 + ".qlty/qlty.toml.example": cf3d750d2328f6c057b08b7ce3d7ec00a4056c7f0eedda59af321d6caca03553 + ".rspec.example": 40d3f3ff435b0f9e5863772a95df8725b939c2dc11aead2bca68dcd6d85a9788 + ".rubocop.example": 591e4b45430e85b0dd460cc11c70650912fa2734988420b934109d06a749344f + ".rubocop.yml.example": 47f9a031022db67c964dd76ee2e8dfee21295a1877ca4d6233d3de39d114af73 + ".rubocop_rspec.yml.example": 288ad75e7eb14d87d80fafe6f7272217be5c57547536ee56c780a7d10ac7ec74 + ".simplecov.example": ffc76492effe905cc65797389fc8050fda136652ac078a80303cd084b349ef28 + ".structuredmerge/git-drivers.toml.example": 9d241a44c9edffcdbd3da018fa188a238089c3d1635040924df594a6929a4f97 + ".structuredmerge/kettle-jem.yml.example": 954cfc9e35cd20e46376426675e985bf8a0de19ff5069bf7be24b574837be615 + ".yard-lint.yml.example": 90def46867c9436b4e177c47d91fc8165f4602e335715aecc39f5587ae20b55b + ".yardignore.example": 821f453c609df7d46145d675424b39dfbe6dfdca8edac5f367b85fff48502455 + ".yardopts.example": 6fd6f2701713096a8a9ea095c213bbc68eeef37797c4754d97837e3229a3a5f6 + AGENTS.md.example: aec69512cbe17004660ac0abfabb9ec91a5c51c2cd82c10f30f08886f9bf64a7 + AGPL-3.0-only.md.example: d8a6cc31abc16b6748c7a21f21611f5a1ec33f67d22ca23d7da1c19b95496bee + Appraisal.root.gemfile.example: 8724e3f6faea995be655ac49369bec64a70710112b1f65707fa38f1fd2fd3254 + Appraisals.example: 9cb1abcfb1a0bd6d859ca0705efb874dbe546754c8c71f9f95025ff6817f1471 + Big-Time-Public-License.md.example: b0c02a112c9eee0ed69f05fd8f22277a2f8bc62d447b6cb75d6df560e05bf431 + CHANGELOG.md.example: 73459e50dad34d84db88844c993d975097557bdf5229e101b0d1339de6f98ffc + CHANGELOG.transfer.md: 9c201849117c9d4234724c4599643dd42fdce5f0a673a1abee97b97e556c301b + CITATION.cff.example: e404ea0a7919d78a83d53d80e211d17b9663576aa606583b709795dc023fd75c + CODE_OF_CONDUCT.md.example: f1ad532f1860f73ef774c6b27a26d41f4bc1cb8813034f5957487766ebb0986b + CONTRIBUTING.md.example: 63d339848c615f2c181d6b0565c42e56371eedb66f310d146cb7da297f7bc641 + FUNDING.md.example: 455bbb2b55d934283a2e7c16b59c321116c53310a85a718b7cf8ca44e9e3721e + FUNDING.md.no-osc.example: 05a85d5faf22d5ea5721622d242080447cf318d3277d9d529e438be1c9d5a351 + Gemfile.example: 6b2d72ec8a630cce515b7b528022071b13eee863c3164763df03792a5004345a + IRP.md.example: 85d8887d9b0e77f7fa9835ca5b9be31f586fdc94764ed1819af2a9a7fec98e96 + LICENSE.md.example: 120edf5f23173ebbdb5ad384ffc2e9b97e62aa6d0e61b733c003bd4db1b08276 + MIT.md.example: 365fce2a82f9d258ada9a527accfd5754b406ee9cdd8f8ed86bbec64b8c42ab2 + PolyForm-Noncommercial-1.0.0.md.example: ffcca38841adb694b6f380647e15f17c446a4d1656fed51a1e2041d064c94cc8 + PolyForm-Small-Business-1.0.0.md.example: 2f81e317d36f83a199c9fa10bcb250775fd90510303eaeb15aac2d8f0c1fc2d6 + README.md.example: 452446a44d120df26cde68fbc7aff086fa815769c989b994ebc1432ea927974f + REEK: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 + RUBOCOP.md.example: c09e5533ccc59b70a2efa05c99f66e521137c1053d3c12eb43509cebd5b68b0e + Rakefile.example: 569803e726b07ea26267fec6891367a3096a0dff3c266269a7081d36afe496af + SECURITY.md.example: ee9411aa85f36d88363fdaea7a1baea4362b6ec112cf2688e711b05de1d3144c + bin/setup.example: 0ac35089c95a91d8973fe7a318bf9fd98b9f8e00db92c5d9ca6cd858abb8d41b + certs/pboling.pem.example: 18956f60643666cc181e2743b3b3691bec08c5326f514f60af54d0cdb9ebc554 + gem.gemspec.example: 9989cc8a1cd125586ea807eaed549eaecc044711d31f17dd7bac2a0815b28b1a + gemfiles/modular/benchmark/r4/v0.5.gemfile.example: 5bc3190090ae456df1a8cce28dd47a7fb293495f6d845ec7e53a7a8b50f14ae1 + gemfiles/modular/benchmark/vHEAD.gemfile.example: ca6cd52c55c3082759c6ddc97638970f12d953aec1822470823d316086aa6e25 + gemfiles/modular/cgi/r4/v0.5.gemfile.example: c2d14a39377a2435419ceaca22a3421ebd899e9cba943df8a90b576a33624870 + gemfiles/modular/cgi/vHEAD.gemfile.example: 9ff3dc789b3279642876c0aad4b0094c1139bb8fbbf36daab804d3b2b3a60b43 + gemfiles/modular/coverage.gemfile.example: 915fc161ad574fdbc071bc733b69b27e94bd7a4c68cc4f58da267c9a0987f3e8 + gemfiles/modular/coverage_local.gemfile.example: 928d5f260d7b119c038baa56da9fb78dd524dee613aea33ab72894bbce5c506e + gemfiles/modular/debug.gemfile.example: 0a508bfb02e51b75394b43f4f09d98174dac36ead41cba09c1f730671a1f5905 + gemfiles/modular/documentation.gemfile.example: e15f51e4d14ad2216b6de16c323787945bd225073d70a78420f4c99c98c1ecd1 + gemfiles/modular/documentation_local.gemfile.example: 84a20f5d4b0feb94c2cf2f7a8dce8f682f1483498e41484c2b447a5661fd1870 + gemfiles/modular/erb/r2.3/default.gemfile.example: 9da0d08fb6a299b965c37fe85efcaebd9eb0a82b2ea35fdc157c41bd75431396 + gemfiles/modular/erb/r2.6/v2.2.gemfile.example: '01787cbdf7136c0d75cc7b734c6bb3d2ef6c70d6c1c50e7d0ad2112c0f8ef8e7' + gemfiles/modular/erb/r2/v3.0.gemfile.example: 3793e7dc9ef23a7ccd893d48cbba092fd27594c63e65cca011cc658218425670 + gemfiles/modular/erb/r3.1/v4.0.gemfile.example: bdf71ddcfe5001aab7d71b10a645a785928957ef7bae61d49307eb7f712279f3 + gemfiles/modular/erb/r3/v5.0.gemfile.example: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + gemfiles/modular/erb/r4/v5.0.gemfile.example: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + gemfiles/modular/erb/vHEAD.gemfile.example: ad6f104a49e80e0cf625440e3dc816343fe7e2f037fc4971df75e7bb4305c683 + gemfiles/modular/json/truffleruby_22_3.gemfile.example: 249c12eacbe90f9d0d2e81e7a62c4c7e9102e504ededcda4ecf660cb3bb68be4 + gemfiles/modular/json/truffleruby_23_0.gemfile.example: 66aa010567f7afa1af8244a74c3c88ecaaf84dc87b6a25180691bb480d02ed28 + gemfiles/modular/json/truffleruby_23_1.gemfile.example: '080fcbdaf2bec73cad40832a3d51eebb380af789917b96f493d1460b0dd6361d' + gemfiles/modular/mutex_m/r2.4/v0.1.gemfile.example: '09728bdc10807b3ca9dd3b9f12986acbe8c40ac08ada438bcfd49cd69445c650' + gemfiles/modular/mutex_m/r2/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/r3/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/r4/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/vHEAD.gemfile.example: '08018641c97f894788fa91b462da504ab2237213d18d95404136c393274ae3cb' + gemfiles/modular/optional.gemfile.example: b45eb8ecde2902441c02b2f01d4aa8f79bff75c853ef92555c3201ee798d9e87 + gemfiles/modular/recording/r2.3/recording.gemfile.example: 154da539583c51ca78ff8affa7a7caaf7f354d321b5e748beb64de61ff72f80a + gemfiles/modular/recording/r2.4/recording.gemfile.example: 6d69381eb2f8be681c72e7a5a8b5d6ec6ee586da8ce51b9b39d845d2a87e4ecf + gemfiles/modular/recording/r2.5/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/r3/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/r4/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/vHEAD.gemfile.example: 7480fd116e9671972a2735d1d97050a4fd5754aa7abfab3d115bf9bebbca038c + gemfiles/modular/rspec.gemfile.example: d043f5c9344f6435edb4607c5adaf42c78e7fb6b8b6726007de2bbedefb376c3 + gemfiles/modular/runtime_heads.gemfile.example: f163201999bf68a942b1e5bcea506bfc4b9c59711ff502091eb215d5d5f8f658 + gemfiles/modular/shunted.gemfile.example: a54a86124eff06163497462012704f62a691daa224cebeac605cdd14cffacfbe + gemfiles/modular/stringio/r2.4/v0.0.2.gemfile.example: 6425ebcd70b2e782f4c1d9074f8685c1e93ca7bf371728ef7ebbc8b5ebdf491a + gemfiles/modular/stringio/r2/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/r3/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/r4/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/vHEAD.gemfile.example: e0497ab6dad9667b22725485b781e9d99349a079250eb29cb125d58f01f4a5be + gemfiles/modular/style.gemfile.example: a15db732f566d958c2459ef549ae3877d984df3d205116e714284d1fe4f9b068 + gemfiles/modular/style_local.gemfile.example: '0083605323d23879dc7223f0198e9f1db24a25fa38730c4dbcc71c7a8a4c307f' + gemfiles/modular/templating.gemfile.example: 6cedc39529daa9aac3a4cf13fe31a628b62a4a2428f5c4f8657c5a2fa027bb35 + gemfiles/modular/templating_local.gemfile.example: 16c0b51fd46b86db09268c8485b1d5a528e5f962b593f8ae7521b15209f7d1a5 + gemfiles/modular/webrick/r4/v1.9.gemfile.example: 1ee940ff54d5ca3ce7fcff0d82ee9553386979656b9e220d5be5404d0991d5ea + gemfiles/modular/webrick/vHEAD.gemfile.example: da545f591af987648ffbaba181707480a38dfb375db7d289617986ec2c2ca23b + gemfiles/modular/x_std_libs.gemfile.example: e3917e90717d7f9f4393d847549a78c53de7f6c8de52a7f590b34b515fd6111a + gemfiles/modular/x_std_libs/r2.3/libs.gemfile.example: 379ac2a3698615789e39dc18a961b9c793b2cc594856bb3163524a99fd4ac86f + gemfiles/modular/x_std_libs/r2.4/libs.gemfile.example: ccad8f592943481317c082ce8d340316b9e90a52463c8c1eea5c5109b23e8c3d + gemfiles/modular/x_std_libs/r2.6/libs.gemfile.example: 9af20396f404a32bf76d8999c7fdd112f0282ba331f71100ab093663b2ab5670 + gemfiles/modular/x_std_libs/r2/libs.gemfile.example: e80ec8ad06cb1b31ac982bc25cf7696987fca131aa1001eaefd0bf5cd379c273 + gemfiles/modular/x_std_libs/r3.1/libs.gemfile.example: 38068bd6a0f5d02918eb286af9bdbdf0c7cf7cf026486b9fd157b541b6153d58 + gemfiles/modular/x_std_libs/r3/libs.gemfile.example: 546f8849f4267bb19aa10ff0de40be30957197f229e6887847181ea9127b2650 + gemfiles/modular/x_std_libs/r4/libs.gemfile.example: 8c2582eaa218d216b98c86c933465295c8b4e43f3251ea388b9eaf6e471f8da6 + gemfiles/modular/x_std_libs/vHEAD.gemfile.example: d3133ec4c0638363a7fb025d19be7e95a615fd61c35ddb8d17f2280ee74a7486 + lib/gem/version.rb.example: 15e219ac3a928b5580035f891e415551213175020f1131f6e7ca0ccd55a1b2d6 + mise.toml.example: b2eb06f7daaf0c3916bba155f463e166bd1de218637ba82e636c528c077c8d6d + mise.toml.no-osc.example: 35ec90d3c67b74e0014876dccad14f5883fdad88036f6b0cf5d29ea181e132ac + parsers.toml.example: f0538ae7ad8596be2dc39b3ea663f1164dec21fb0457233c1885097e774aff6f + readme/partials/basic_usage.md.example: adaa8f9de9768d1f29cb15d957404004715e7687db68c29b121d6467db13158a + readme/partials/configuration.md.example: 5ad82bc7eaf05015d31cea9265173718abc1d92729b52e3856c8366aa54184e8 + readme/partials/synopsis.md.example: 2b7383f8261086da0995fbf2c10017b3f162723b32c324ae8c0e1c1a8d1c79ef + shim/.github/workflows/current.yml.example: c2a2a2053f2726276bb8571c8a76a4b97bcce6cd54bdca01cba63d713c3a0e2f + shim/.rspec.example: 0e3a2a1587779efc3eae8fe718a3480272fbdfb3f1f6c2f9c3901f6fd81b2cce + shim/.structuredmerge/kettle-jem.yml.example: 03faae6cfda3947ef8489008b4836aad3ca280e94ddf9d08ef733071d7daa167 + shim/CHANGELOG.md.example: 2c098802b9971c51796e34067d061adbc31fa443df96be8a1fc71fc84c262d0e + shim/Gemfile.example: 9583b19e04d7ab6f5b3ea7ebb0c5d24e6a71ae5d74404a510aa979642248ba34 + shim/README.md.example: 3a2f7211b7f92a1dfae5e523b8e34b051a3d8af942144b05286eca0b3c8f6fbe + shim/Rakefile.example: 572c94da7052083b39b62a6600785419e314a109efd7a3d8c3a96eb77ad34fd1 + shim/gem.gemspec.example: cabca9717af1a18991db1de856900494e2771b044f1d5bfd2ad71b2ed4a1367d + shim/lib/compat_require.rb.example: 94ee85e353a3ca08c8a35c9063d4ff789214ea594c7f803f6cf09d7142f48379 + shim/lib/entrypoint.rb.example: dd57613520daca01d6f6bcaa9b83b00ff74505240dc04b84ceb686df3c0539d7 + shim/lib/version.rb.example: 15e219ac3a928b5580035f891e415551213175020f1131f6e7ca0ccd55a1b2d6 + shim/spec/shim_spec.rb.example: '060013019bf39b8dc267169df83752661d02c7ad890b65a99a1d97137938edfd' + shim/spec/spec_helper.rb.example: 88e2ab0bd8888022a68e856e04f61053e238e54f51b428b386aaebf93ae8ad83 + sig/gem.rbs.example: 47a4f7e524cc6f773875b6c08691ca4d65c2b14618abd5b9b91055ae5b248cec + spec/spec_helper.rb.example: 0c8119bd75b90f3a2403789b68b539fd19952370051297b1807596e201ef4813 +files: + ".simplecov": + recipe: template_source_application_simplecov + action: write + dest_sha256: ece2f518e6ea34c4a4ef2892f1e7787fb211d660ae9e370464abb8f089e4c40a + input_fingerprint: 2e88275c23ac1a407df8e3012c65b5485277294b597feb65875c6572d45a76b7 + template_sources: + - ".simplecov.example" + AGPL-3.0-only.md: + recipe: template_source_application_AGPL_3_0_only_md + action: write + dest_sha256: d8a6cc31abc16b6748c7a21f21611f5a1ec33f67d22ca23d7da1c19b95496bee + input_fingerprint: ba786516f3ba39623690956672310760356600aee6f182d24ee283e0bed69e63 + template_sources: + - AGPL-3.0-only.md.example + Gemfile: + recipe: template_source_application_Gemfile + action: write + dest_sha256: 0be82bf3a81d3b984a2db05a5416400c0a265d77c9acd4a0b6568283b5aa2a2c + input_fingerprint: 7bbd2843777a69b6f5cd1f0fd9226b2e22933a9327bc6a76d0d7e683ec0a4f92 + template_sources: + - Gemfile.example + LICENSE.md: + recipe: template_source_application_LICENSE_md + action: write + dest_sha256: f6188bfd474a636d2a526420ebb411250faa447d94c9b9ccee097128ce4101b5 + input_fingerprint: e0977440414fca3d41a4fcafba442509cec8ff7f6577666a47df854c1e64973d + template_sources: + - LICENSE.md.example + PolyForm-Small-Business-1.0.0.md: + recipe: template_source_application_PolyForm_Small_Business_1_0_0_md + action: write + dest_sha256: 2f81e317d36f83a199c9fa10bcb250775fd90510303eaeb15aac2d8f0c1fc2d6 + input_fingerprint: c55bb74755a3f0967ec49328e9a84128905ec8e3bf796decc58d30e21da229ff + template_sources: + - PolyForm-Small-Business-1.0.0.md.example + README.md: + recipe: template_source_application_README_md + action: write + dest_sha256: 4034bf7113af845aa018c0078893301a31fb56b9b1f71108a7bde06fb2726e86 + input_fingerprint: 301a9c1f760a358f45f0a535b5d27e8b0ea195b25503ece5889b60076674e62d + template_sources: + - README.md.example + ast-template.gemspec: + recipe: template_source_application_ast_template_gemspec + action: write + dest_sha256: 64b7fa73357ace8ddb7c56a097ebf61069deb289f3378d77ff95352779719249 + input_fingerprint: 03a1f65e4b4b5cffcc4a7b110515aa84408de421355bbfc472970636a9c4f137 + template_sources: + - gem.gemspec.example + certs/pboling.pem: + recipe: template_source_application_certs_pboling_pem + action: write + dest_sha256: 18956f60643666cc181e2743b3b3691bec08c5326f514f60af54d0cdb9ebc554 + input_fingerprint: 57fc39b541bcbbdeb34d90cc0b0e1220a8d721c302cc11185588f98095463e93 + template_sources: + - certs/pboling.pem.example + gemfiles/modular/benchmark/r4/v0.5.gemfile: + recipe: template_source_application_gemfiles_modular_benchmark_r4_v0_5_gemfile + action: write + dest_sha256: 5bc3190090ae456df1a8cce28dd47a7fb293495f6d845ec7e53a7a8b50f14ae1 + input_fingerprint: 979e935d0be2172af21fbb3078a62aae0140733c85f74bba22dd76c2ebb17076 + template_sources: + - gemfiles/modular/benchmark/r4/v0.5.gemfile.example + gemfiles/modular/benchmark/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_benchmark_vHEAD_gemfile + action: write + dest_sha256: ca6cd52c55c3082759c6ddc97638970f12d953aec1822470823d316086aa6e25 + input_fingerprint: 9f5464ea2efea6c402a115bd5415d821735cd828af4e94be3285bd09908c9ff2 + template_sources: + - gemfiles/modular/benchmark/vHEAD.gemfile.example + gemfiles/modular/cgi/r4/v0.5.gemfile: + recipe: template_source_application_gemfiles_modular_cgi_r4_v0_5_gemfile + action: write + dest_sha256: c2d14a39377a2435419ceaca22a3421ebd899e9cba943df8a90b576a33624870 + input_fingerprint: bd20ee2b410c4327550cd8896c60779ca7119063307554b0c73525c4891ef6f3 + template_sources: + - gemfiles/modular/cgi/r4/v0.5.gemfile.example + gemfiles/modular/cgi/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_cgi_vHEAD_gemfile + action: write + dest_sha256: 9ff3dc789b3279642876c0aad4b0094c1139bb8fbbf36daab804d3b2b3a60b43 + input_fingerprint: 050f6d9b357f821dc405a9141891d8e97ac4e39ec0e9fe90bf2466bf0c82ef5c + template_sources: + - gemfiles/modular/cgi/vHEAD.gemfile.example + gemfiles/modular/coverage.gemfile: + recipe: template_source_application_gemfiles_modular_coverage_gemfile + action: write + dest_sha256: 915fc161ad574fdbc071bc733b69b27e94bd7a4c68cc4f58da267c9a0987f3e8 + input_fingerprint: 7ff00e6134bdfe51936807f3a293d2410ee1f98e802cb811385ec0975b5134cc + template_sources: + - gemfiles/modular/coverage.gemfile.example + gemfiles/modular/coverage_local.gemfile: + recipe: template_source_application_gemfiles_modular_coverage_local_gemfile + action: write + dest_sha256: 1fba2de954336fdde8ab0e2a0f84f4ecc8d64eecd2fbf304f8d7ae8de8418cfb + input_fingerprint: d90db2dfc789b6db7899306e96be02f05a50f0d69af93b1745c047a4e26feea5 + template_sources: + - gemfiles/modular/coverage_local.gemfile.example + gemfiles/modular/debug.gemfile: + recipe: template_source_application_gemfiles_modular_debug_gemfile + action: write + dest_sha256: 0a508bfb02e51b75394b43f4f09d98174dac36ead41cba09c1f730671a1f5905 + input_fingerprint: 8512e6d68ec7ff6d83bb953119f06fa68846b0c27376745d8fb52c0efa003961 + template_sources: + - gemfiles/modular/debug.gemfile.example + gemfiles/modular/documentation.gemfile: + recipe: template_source_application_gemfiles_modular_documentation_gemfile + action: write + dest_sha256: e15f51e4d14ad2216b6de16c323787945bd225073d70a78420f4c99c98c1ecd1 + input_fingerprint: 58223f862c64ef76ea66bae0e5cc50ae6ca2f3840f111a66cf4480162021a064 + template_sources: + - gemfiles/modular/documentation.gemfile.example + gemfiles/modular/documentation_local.gemfile: + recipe: template_source_application_gemfiles_modular_documentation_local_gemfile + action: write + dest_sha256: 13a4928392ef3ba7e00e54734f0543ea98c4ec782f2fe592cdf81b41ee07fe2a + input_fingerprint: 36f1151870da132a353f648b1a98b7788ab4f64f5262bd16c535106ea847e24a + template_sources: + - gemfiles/modular/documentation_local.gemfile.example + gemfiles/modular/erb/r2/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r2_v3_0_gemfile + action: write + dest_sha256: 3793e7dc9ef23a7ccd893d48cbba092fd27594c63e65cca011cc658218425670 + input_fingerprint: fd9e7e216fa9cc051042c341ad1e693309b2ed0bb1b62edd4e66c731669d609c + template_sources: + - gemfiles/modular/erb/r2/v3.0.gemfile.example + gemfiles/modular/erb/r3/v5.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r3_v5_0_gemfile + action: write + dest_sha256: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + input_fingerprint: 3093a1646b88b783e7319d288135054486589ee5a088729c6c34f8fd489e0e8d + template_sources: + - gemfiles/modular/erb/r3/v5.0.gemfile.example + gemfiles/modular/erb/r4/v5.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r4_v5_0_gemfile + action: write + dest_sha256: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + input_fingerprint: 457f8a541de51ad1bef2bdab8d61f05fb28971746e41804595bcb8eee4071b59 + template_sources: + - gemfiles/modular/erb/r4/v5.0.gemfile.example + gemfiles/modular/erb/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_erb_vHEAD_gemfile + action: write + dest_sha256: ad6f104a49e80e0cf625440e3dc816343fe7e2f037fc4971df75e7bb4305c683 + input_fingerprint: 8e9765747a861dc9c9fbd5acab44742b19b4a74ed9853206982099a50adbdaf5 + template_sources: + - gemfiles/modular/erb/vHEAD.gemfile.example + gemfiles/modular/json/truffleruby_22_3.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_22_3_gemfile + action: write + dest_sha256: 249c12eacbe90f9d0d2e81e7a62c4c7e9102e504ededcda4ecf660cb3bb68be4 + input_fingerprint: 526cfa19563edc0ffc32e1062904d709e711cb43eed501daee464c425fc01c7c + template_sources: + - gemfiles/modular/json/truffleruby_22_3.gemfile.example + gemfiles/modular/json/truffleruby_23_0.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_23_0_gemfile + action: write + dest_sha256: 66aa010567f7afa1af8244a74c3c88ecaaf84dc87b6a25180691bb480d02ed28 + input_fingerprint: c74c4c9428295d491a8aa26a5430ae6b982114c6fbbe83f0ec7a9233d99cc152 + template_sources: + - gemfiles/modular/json/truffleruby_23_0.gemfile.example + gemfiles/modular/json/truffleruby_23_1.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_23_1_gemfile + action: write + dest_sha256: '080fcbdaf2bec73cad40832a3d51eebb380af789917b96f493d1460b0dd6361d' + input_fingerprint: f5bc33ba8d5d1154d4886ceed49879dc7ba4a70c28674975329feba4e8ade0bd + template_sources: + - gemfiles/modular/json/truffleruby_23_1.gemfile.example + gemfiles/modular/mutex_m/r2/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r2_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: 9ec83b99e4881879416215d79f536fbe201f39e8c4e4324ecb9569e31281a320 + template_sources: + - gemfiles/modular/mutex_m/r2/v0.3.gemfile.example + gemfiles/modular/mutex_m/r3/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r3_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: d2d40e16a4f3cf9e2d9151e9a21d7bbf08d885fd606e9fe641b1ac5fd570ab65 + template_sources: + - gemfiles/modular/mutex_m/r3/v0.3.gemfile.example + gemfiles/modular/mutex_m/r4/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r4_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: 3164419b28e1d81df2bc64b6d5d69d9a3f1bc620a5f435c3490f0343638198e3 + template_sources: + - gemfiles/modular/mutex_m/r4/v0.3.gemfile.example + gemfiles/modular/mutex_m/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_vHEAD_gemfile + action: write + dest_sha256: '08018641c97f894788fa91b462da504ab2237213d18d95404136c393274ae3cb' + input_fingerprint: 39883cf3057f5cdcce8f71ad1d5bc70f696194facce285ab60b7b149e2854854 + template_sources: + - gemfiles/modular/mutex_m/vHEAD.gemfile.example + gemfiles/modular/optional.gemfile: + recipe: template_source_application_gemfiles_modular_optional_gemfile + action: write + dest_sha256: f770e6e9a9dd2bd0f1f132e882d88038b2e21127dce3afe270908c7338c28bfd + input_fingerprint: 6f9ff51a309d456ccbd58c653f977d34d5639819e05a9ce730f28838f583be21 + template_sources: + - gemfiles/modular/optional.gemfile.example + gemfiles/modular/rspec.gemfile: + recipe: template_source_application_gemfiles_modular_rspec_gemfile + action: write + dest_sha256: d043f5c9344f6435edb4607c5adaf42c78e7fb6b8b6726007de2bbedefb376c3 + input_fingerprint: 05d41d46178eed344191891721509e22b48a40c443a8d1a7c33410867843289c + template_sources: + - gemfiles/modular/rspec.gemfile.example + gemfiles/modular/runtime_heads.gemfile: + recipe: template_source_application_gemfiles_modular_runtime_heads_gemfile + action: write + dest_sha256: 6ac7158c4a3088190f2a9082f01439eb27eca2172ab3464b15c9cb045aa885e1 + input_fingerprint: f49c714d89baaac41352077487209dbc0b09de9bb08873fb5cae2aaf1b74e281 + template_sources: + - gemfiles/modular/runtime_heads.gemfile.example + gemfiles/modular/stringio/r2/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r2_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: a1d3525ae175ebd9b0427b3915a73bfe7ee82902c9ee10f58a68ca63d249b2c7 + template_sources: + - gemfiles/modular/stringio/r2/v3.0.gemfile.example + gemfiles/modular/stringio/r3/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r3_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: ef3b6f6d4835a94d0bff9b919dec385b00d12d9c415a52f955a70f0ba59502a5 + template_sources: + - gemfiles/modular/stringio/r3/v3.0.gemfile.example + gemfiles/modular/stringio/r4/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r4_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: cd7530a5cbddc92c8362682554321bf24ef410fce4fff4e3e8c69f5032950fb3 + template_sources: + - gemfiles/modular/stringio/r4/v3.0.gemfile.example + gemfiles/modular/stringio/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_vHEAD_gemfile + action: write + dest_sha256: e0497ab6dad9667b22725485b781e9d99349a079250eb29cb125d58f01f4a5be + input_fingerprint: ca6649f9820bb44819da8ecc7421349fe9e3d3207e044758d477aecba46494dc + template_sources: + - gemfiles/modular/stringio/vHEAD.gemfile.example + gemfiles/modular/style.gemfile: + recipe: template_source_application_gemfiles_modular_style_gemfile + action: write + dest_sha256: 071066457ce6081cbc03d10d777f741b84019071c78e45c23889f13658a0a4a6 + input_fingerprint: 3853f3c9e056bf112e8e6e2ef8b6194ab4920196a33deb5dae806b248094e6f7 + template_sources: + - gemfiles/modular/style.gemfile.example + gemfiles/modular/style_local.gemfile: + recipe: template_source_application_gemfiles_modular_style_local_gemfile + action: write + dest_sha256: d887deae21905b1714d2ed1bfedc6af18a83d8f7cb404ca76c81bd88884e8282 + input_fingerprint: 867bbd60e414b85b5fb85925dd80833c80217a0a5253f50125cd7dd7551714ba + template_sources: + - gemfiles/modular/style_local.gemfile.example + gemfiles/modular/templating.gemfile: + recipe: template_source_application_gemfiles_modular_templating_gemfile + action: write + dest_sha256: 6cedc39529daa9aac3a4cf13fe31a628b62a4a2428f5c4f8657c5a2fa027bb35 + input_fingerprint: d632a761975672025da1f9567c4ac7f019d2138a7dfd777f323eba9f3114f47d + template_sources: + - gemfiles/modular/templating.gemfile.example + gemfiles/modular/templating_local.gemfile: + recipe: template_source_application_gemfiles_modular_templating_local_gemfile + action: write + dest_sha256: e49c50d16c9193cfeeb8874446eb79d6f8144f8946176e62ef816fa06b0208f2 + input_fingerprint: 42093d3306c1269aeb1a54e275eab3b129cd50bc11879e477091168ab37f9a8a + template_sources: + - gemfiles/modular/templating_local.gemfile.example + gemfiles/modular/webrick/r4/v1.9.gemfile: + recipe: template_source_application_gemfiles_modular_webrick_r4_v1_9_gemfile + action: write + dest_sha256: 1ee940ff54d5ca3ce7fcff0d82ee9553386979656b9e220d5be5404d0991d5ea + input_fingerprint: ff2fe9d59b7658ac9510ab571b7fd347f5db6d1c88621be175ce0111c66c5070 + template_sources: + - gemfiles/modular/webrick/r4/v1.9.gemfile.example + gemfiles/modular/webrick/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_webrick_vHEAD_gemfile + action: write + dest_sha256: da545f591af987648ffbaba181707480a38dfb375db7d289617986ec2c2ca23b + input_fingerprint: 3e4386c711e0394881cb9f065f18260520cc6d1dc90538582492b3f3d38d9d8c + template_sources: + - gemfiles/modular/webrick/vHEAD.gemfile.example + gemfiles/modular/x_std_libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_gemfile + action: write + dest_sha256: e3917e90717d7f9f4393d847549a78c53de7f6c8de52a7f590b34b515fd6111a + input_fingerprint: 60ee56c5c375d402fdbd148a1be1da31a6b3c55de0e2cf2c9ee7709d5614c81f + template_sources: + - gemfiles/modular/x_std_libs.gemfile.example + gemfiles/modular/x_std_libs/r2/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r2_libs_gemfile + action: write + dest_sha256: e80ec8ad06cb1b31ac982bc25cf7696987fca131aa1001eaefd0bf5cd379c273 + input_fingerprint: 53f63fc6f7adeb6cbb1a931ed0613cbfae39ea8afc7b6995aebc6cf43aaf9143 + template_sources: + - gemfiles/modular/x_std_libs/r2/libs.gemfile.example + gemfiles/modular/x_std_libs/r3/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r3_libs_gemfile + action: write + dest_sha256: 546f8849f4267bb19aa10ff0de40be30957197f229e6887847181ea9127b2650 + input_fingerprint: d550e85efde2f7b6c64da598d3eff64a6624a1884ca6d43d4d459a79752ed98f + template_sources: + - gemfiles/modular/x_std_libs/r3/libs.gemfile.example + gemfiles/modular/x_std_libs/r4/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r4_libs_gemfile + action: write + dest_sha256: 8c2582eaa218d216b98c86c933465295c8b4e43f3251ea388b9eaf6e471f8da6 + input_fingerprint: d7a3f90359594093f8d14f460a684c80609abf6bfa54bdabfce1a93c5f0fb963 + template_sources: + - gemfiles/modular/x_std_libs/r4/libs.gemfile.example + gemfiles/modular/x_std_libs/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_vHEAD_gemfile + action: write + dest_sha256: d3133ec4c0638363a7fb025d19be7e95a615fd61c35ddb8d17f2280ee74a7486 + input_fingerprint: f5acd24390344053dcb9cb65ee678cba9652f4a5082d89074a403baa882606db + template_sources: + - gemfiles/modular/x_std_libs/vHEAD.gemfile.example + lib/ast/template/version.rb: + recipe: template_source_application_lib_ast_template_version_rb + action: write + dest_sha256: bf9274a8238f4b902a632d5fb7f406fa47f0448c6f01216bba156fc0046a5fec + input_fingerprint: 94fec3bd9f10769fcdc52a3feabe5420dbcdc4b7b807337017171d7ff1176f0d + template_sources: + - lib/gem/version.rb.example + sig/ast/template.rbs: + recipe: template_source_application_sig_ast_template_rbs + action: write + dest_sha256: a813080f4a30efb84ed4d249d641f953866d639f9aa9388f36a8451a1d838861 + input_fingerprint: 7d3e405dfbd3fa86133b99256ae170e81989f4b247e1abbc73df7212c309c80b + template_sources: + - sig/gem.rbs.example + spec/spec_helper.rb: + recipe: template_source_application_spec_spec_helper_rb + action: write + dest_sha256: 27a183f4197865f6b724afbc6c959a422b395b8d3623c23ee51cc9c2a529eb01 + input_fingerprint: 3a106ba9c91af9288fde1b53a741f999e8b9c262ce369d7bbd3f532d4f961672 + template_sources: + - spec/spec_helper.rb.example diff --git a/gems/ast-template/Gemfile b/gems/ast-template/Gemfile index 69a634498..d6867af8b 100644 --- a/gems/ast-template/Gemfile +++ b/gems/ast-template/Gemfile @@ -19,8 +19,7 @@ git_source(:gitlab) { |repo_name| "https://gitlab.com/#{repo_name}" } gemspec # Local workspace dependency wiring for *_local.gemfile overrides -nomono_requirements = ['~> 1.0', '>= 1.0.8'] -gem 'nomono', *nomono_requirements, require: false # ruby >= 2.2 +gem 'nomono', '~> 1.1', '>= 1.1.0', require: false # ruby >= 3.2.0 # Direct sibling dependencies (env-switched via STRUCTUREDMERGE_DEV) direct_sibling_gems = %w[ diff --git a/gems/ast-template/Gemfile.lock b/gems/ast-template/Gemfile.lock index 7f7f51bfd..87fc5078b 100644 --- a/gems/ast-template/Gemfile.lock +++ b/gems/ast-template/Gemfile.lock @@ -77,8 +77,8 @@ GEM bundler (>= 1.14) version_gem (~> 1.1, >= 1.1.4) geom2d (0.4.1) - gitmoji-regex (2.0.4) - version_gem (~> 1.1, >= 1.1.13) + gitmoji-regex (2.0.6) + version_gem (~> 1.1, >= 1.1.14) hexapdf (1.9.1) cmdparse (~> 3.0, >= 3.0.3) geom2d (~> 0.4, >= 0.4.1) @@ -91,20 +91,29 @@ GEM rdoc (>= 4.0.0) reline (>= 0.4.2) json (2.21.1) - kettle-dev (2.3.9) + kettle-dev (2.4.5) emoji_regex (>= 15.0) + kettle-gha-pins (~> 0.3, >= 0.3.1) + kettle-ndjson (~> 0.1, >= 0.1.1) kettle-rb (~> 0.1, >= 0.1.2) - kettle-test (~> 2.0, >= 2.0.4) + kettle-test (~> 2.0, >= 2.0.12) ruby-progressbar (~> 1.13) + tty-progressbar (~> 0.18) + kettle-gha-pins (0.3.1) + ruby-progressbar (~> 1.13) + tty-progressbar (~> 0.18) + version_gem (~> 1.1, >= 1.1.14) + kettle-ndjson (0.1.1) + version_gem (~> 1.1, >= 1.1.14) kettle-rb (0.1.5) - kettle-soup-cover (3.0.4) + kettle-soup-cover (3.0.5) kettle-wash (~> 0.1, >= 0.1.0) simplecov (>= 1.0) simplecov-cobertura (>= 4.0) simplecov-console (~> 0.9, >= 0.9.5) simplecov-rcov (~> 0.3, >= 0.3.7) simplecov_lcov_formatter (~> 0.9, >= 0.9.0) - kettle-test (2.0.12) + kettle-test (2.0.15) appraisal2 (~> 3.0, >= 3.0.6) backports (~> 3.0) rspec (~> 3.0) @@ -125,8 +134,18 @@ GEM lint_roller (1.1.0) logger (1.7.0) mutex_m (0.3.0) + nokogiri (1.19.4-aarch64-linux-gnu) + racc (~> 1.4) + nokogiri (1.19.4-aarch64-linux-musl) + racc (~> 1.4) + nokogiri (1.19.4-arm64-darwin) + racc (~> 1.4) + nokogiri (1.19.4-x86_64-darwin) + racc (~> 1.4) nokogiri (1.19.4-x86_64-linux-gnu) racc (~> 1.4) + nokogiri (1.19.4-x86_64-linux-musl) + racc (~> 1.4) nomono (1.1.0) openssl (4.0.2) ostruct (0.6.3) @@ -181,11 +200,11 @@ GEM rspec-mocks (3.13.8) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) - rspec-pending_for (0.1.21) + rspec-pending_for (0.1.22) rspec-core (~> 3.0) ruby_engine (~> 2.0) ruby_version (~> 1.0) - rspec-stubbed_env (1.0.6) + rspec-stubbed_env (1.0.8) rspec-support (3.13.7) rspec_junit_formatter (0.6.0) rspec-core (>= 2, < 4, != 2.12.0) @@ -281,7 +300,7 @@ GEM silent_stream (1.0.12) logger (~> 1.2) version_gem (>= 1.1.8, < 3) - simplecov (1.0.2) + simplecov (1.0.3) simplecov-cobertura (4.0.0) rexml simplecov (~> 1.0) @@ -293,7 +312,7 @@ GEM simplecov (>= 0.4.1) simplecov_lcov_formatter (0.9.0) simplecov (>= 0.18) - sorbet-runtime (0.6.13351) + sorbet-runtime (0.6.13363) standard (1.56.0) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.0) @@ -317,9 +336,9 @@ GEM standard-custom (~> 1.0, >= 1.0.2) standard-performance (~> 1.9, >= 1.9.0) version_gem (~> 1.1, >= 1.1.13) - stone_checksums (1.0.6) - version_gem (~> 1.1, >= 1.1.13) + stone_checksums (1.0.7) stringio (3.2.0) + strings-ansi (0.2.0) strscan (3.1.8) terminal-table (4.0.0) unicode-display_width (>= 1.1.1, < 4) @@ -337,16 +356,27 @@ GEM parslet (~> 2.0) tree_sitter_language_pack (>= 1.13.2, < 2.0) version_gem (~> 1.1, >= 1.1.9) - tree_sitter_language_pack (1.13.3-x86_64-linux) + tree_sitter_language_pack (1.13.4-aarch64-linux) + sorbet-runtime (~> 0.5) + tree_sitter_language_pack (1.13.4-arm64-darwin) + sorbet-runtime (~> 0.5) + tree_sitter_language_pack (1.13.4-x86_64-darwin) + sorbet-runtime (~> 0.5) + tree_sitter_language_pack (1.13.4-x86_64-linux) sorbet-runtime (~> 0.5) tsort (0.2.0) - turbo_tests2 (3.2.0) + tty-cursor (0.7.1) + tty-progressbar (0.18.3) + strings-ansi (~> 0.2) + tty-cursor (~> 0.7) + tty-screen (~> 0.8) + unicode-display_width (>= 1.6, < 3.0) + tty-screen (0.8.2) + turbo_tests2 (3.2.3) parallel_tests (>= 3.3.0, < 6) rspec (>= 3.10) version_gem (~> 1.1, >= 1.1.14) - unicode-display_width (3.2.0) - unicode-emoji (~> 4.1) - unicode-emoji (4.2.0) + unicode-display_width (2.6.0) version_gem (1.1.14) webrick (1.9.2) yaml-converter (0.2.3) @@ -364,6 +394,9 @@ GEM ostruct rainbow yard + yard-lint (1.10.2) + yard (~> 0.9) + zeitwerk (~> 2.6) yard-relative_markdown_links (0.6.0) nokogiri (>= 1.14.3, < 2) yard-timekeeper (0.2.4) @@ -375,8 +408,13 @@ GEM zlib (3.2.3) PLATFORMS - x86_64-linux + aarch64-linux + aarch64-linux-gnu + aarch64-linux-musl + arm64-darwin + x86_64-darwin x86_64-linux-gnu + x86_64-linux-musl DEPENDENCIES addressable (>= 2.8, < 3) @@ -392,12 +430,12 @@ DEPENDENCIES gitmoji-regex (~> 2.0, >= 2.0.0) irb (~> 1.17) kettle-dev (~> 2.0, >= 2.2.25) - kettle-soup-cover (~> 3.0, >= 3.0.3) + kettle-soup-cover (~> 3.0, >= 3.0.5) kettle-test (~> 2.0, >= 2.0.9) kramdown (~> 2.5, >= 2.5.2) kramdown-parser-gfm (~> 1.1) mutex_m (~> 0.2) - nomono (~> 1.0, >= 1.0.8) + nomono (~> 1.1, >= 1.1.0) rake (~> 13.0) rbs (>= 3.0) rdoc (~> 6.11) @@ -420,6 +458,7 @@ DEPENDENCIES yard (~> 0.9, >= 0.9.45) yard-fence (~> 0.9, >= 0.9.6) yard-junk (~> 0.1, >= 0.1.0) + yard-lint (~> 1.10, >= 1.10.2) yard-relative_markdown_links (~> 0.6) yard-timekeeper (~> 0.2, >= 0.2.4) yard-yaml (~> 0.2, >= 0.2.3) @@ -457,15 +496,17 @@ CHECKSUMS erb (6.0.6) sha256=a9b24986700f5bf127c4f297c5403c3ca41b83b0a316c0cd09a096b56e644ae5 gem_bench (2.0.5) sha256=0dc0fb44a5a5eb7b2f5c1c68a5b0164d72007132822c012bac3abe976b199ead geom2d (0.4.1) sha256=ea0998ea90c4f2752e24fe13d85a4f89bee689d151316140ebcc6369bf634ed9 - gitmoji-regex (2.0.4) sha256=01410d3217940bd0e7b2299ec805245afe8d0f06a5d6d38f623d63a63c0ac34f + gitmoji-regex (2.0.6) sha256=d50649caccc8ad1b080f01e869f0909b135206d8b3ece2313ca31a9b0e39f14b hexapdf (1.9.1) sha256=2d1f6a3622e6bc2a70a707d4c3f3fa44f5552ecd9d899f6283abb07398a84884 io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc irb (1.18.0) sha256=de9454a0703a54704b9811a5ef31a60c86949fbf4013fcf244fabc7c775248e3 json (2.21.1) sha256=13a43df75d95641443f5702dff350f237164a9d811ff0f2c2800d4d980220583 - kettle-dev (2.3.9) sha256=03b2f72c6dda4d2c4401ee3c0c96853116c922766e7b5b04224434a49b571bfc + kettle-dev (2.4.5) sha256=3a451940796a671b7adc910db7c3da87899ebec7c5274921ca598345549ae7eb + kettle-gha-pins (0.3.1) sha256=b13a82a403af31880288fe65f85f2a24a93ae4740c0c7cbc15a35044d27aaa51 + kettle-ndjson (0.1.1) sha256=2d84314e8c911d6f560f2736e8f72019df6d811829674788ff33b3bbf518ed66 kettle-rb (0.1.5) sha256=0322a569860c86e70f90d5ebe72353b8720b7054c7efa9f9044857f5c972d29f - kettle-soup-cover (3.0.4) sha256=36d4df472362d2020d16411d7ce26ba2fe2a41fb8be64577ff9b5280acf99d86 - kettle-test (2.0.12) sha256=3a8e5c5f38db03a6f0a8896da6f3576d24e36f53796578c19aafaa2ba5a8ea52 + kettle-soup-cover (3.0.5) sha256=80abb42eb294fa5d3c8632c259a297c554fbc01902714461f3bf99a65190f5d0 + kettle-test (2.0.15) sha256=993b132ffec17fe82cc81c69f876e15d6eb610a4831df08dc01c0cce5c070caa kettle-wash (0.1.1) sha256=ae2e08b64c72c46ceed5ffa197ed859e85352f38ed0412fca2e18ce29b2dc4f9 kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa kramdown-parser-gfm (1.1.0) sha256=fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729 @@ -473,7 +514,12 @@ CHECKSUMS lint_roller (1.1.0) sha256=2c0c845b632a7d172cb849cc90c1bce937a28c5c8ccccb50dfd46a485003cc87 logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203 mutex_m (0.3.0) sha256=cfcb04ac16b69c4813777022fdceda24e9f798e48092a2b817eb4c0a782b0751 + nokogiri (1.19.4-aarch64-linux-gnu) sha256=1269fb644a6de405057a53dd5c762b1209b43ca7424f839454d3dbc677c31a8f + nokogiri (1.19.4-aarch64-linux-musl) sha256=35c65b9ce72b3bb03207bdbe7067915019dc18c1b9b59139684bd6690fdd01af + nokogiri (1.19.4-arm64-darwin) sha256=a46db9853286e6597b36ebc6953817d15acf3a299583eb3f89fdc6f91dd63527 + nokogiri (1.19.4-x86_64-darwin) sha256=7fd17057d3e1f00e9954a74b3cd76595d3d4a5ef233b7ed9599047c204f70551 nokogiri (1.19.4-x86_64-linux-gnu) sha256=379fae440b28915e3f19d752ce2dcf8465ed2b2fbefd2a7ca0dd497bc981a06a + nokogiri (1.19.4-x86_64-linux-musl) sha256=17dfb7c1fa194ae02fbf7c51a7afc8d278045ab3fdacfd86f91d02d7b274470b nomono (1.1.0) sha256=463dd4c79da02a855739a1b5483190d527b7868688be905e84abdb3449b32c88 openssl (4.0.2) sha256=1037ad2868ae58df9ad917891c0c0f9815a1172f6846d4bcdd508e4c2ee747c2 ostruct (0.6.3) sha256=95a2ed4a4bd1d190784e666b47b2d3f078e4a9efda2fccf18f84ddc6538ed912 @@ -501,8 +547,8 @@ CHECKSUMS rspec-core (3.13.6) sha256=a8823c6411667b60a8bca135364351dda34cd55e44ff94c4be4633b37d828b2d rspec-expectations (3.13.5) sha256=33a4d3a1d95060aea4c94e9f237030a8f9eae5615e9bd85718fe3a09e4b58836 rspec-mocks (3.13.8) sha256=086ad3d3d17533f4237643de0b5c42f04b66348c28bf6b9c2d3f4a3b01af1d47 - rspec-pending_for (0.1.21) sha256=c87fda50c20f8faca72d9cfa6a936abffd37860343f14aced95bbb29b8ae96bf - rspec-stubbed_env (1.0.6) sha256=6467a6eb0f72146d443ffb0c5a2a549d8812e59c04fbc81e03cd914ebf1f28dc + rspec-pending_for (0.1.22) sha256=49dc647473f8c8ea4ccc1a33813537dd94b913ef7ec5a8689896101eaacb71cf + rspec-stubbed_env (1.0.8) sha256=b23c4dd5e5d6a0cf0c5b4f6ed3f3678d78e4be9ec247ea9abf0669d20b490535 rspec-support (3.13.7) sha256=0640e5570872aafefd79867901deeeeb40b0c9875a36b983d85f54fb7381c47c rspec_junit_formatter (0.6.0) sha256=40dde674e6ae4e6cc0ff560da25497677e34fefd2338cc467a8972f602b62b15 rubocop (1.88.2) sha256=8def251c90cd955feb4daa3edc0ab56893250c4ce90ef81e6c80c03f9a939bbf @@ -528,37 +574,44 @@ CHECKSUMS ruby_engine (2.0.3) sha256=ca2ae7def8cfcdc2bfb6a186d36d5d59c8b403245dc0256c3802b767fa278aaa ruby_version (1.0.3) sha256=5930f9950746b7e6c973184398ee364ee7440b170fef7922b9f5cdf317f1ccb5 silent_stream (1.0.12) sha256=377c43aa10033fe90c33b39ea8cd97d79f2d1c4856df598efc56f3091f3ae782 - simplecov (1.0.2) sha256=c6459434efe4b948b46477cc2df2faa73ab365f83a33c7c17f81262f4f7f1244 + simplecov (1.0.3) sha256=38ef0514f16ae7562f0d0f4df02610071115103d301b6de7dacbcc000082e39b simplecov-cobertura (4.0.0) sha256=e4fb3159b1ecea545b44f5452a8611305323e78ad23eae8aed35924d072e01ea simplecov-console (0.9.5) sha256=b1108bcfff5f210143e2b8301698c367b01586f20d25a73e95475a5df6fc6ff6 simplecov-rcov (0.3.7) sha256=372f50bf6df6b6350b7d0c840f2f8bdabe021861a43c26877b747c9ac96139fc simplecov_lcov_formatter (0.9.0) sha256=4c1839bb31dcf7a8f7a6474c94ed228aa03b994e9dd5e1965e58b4121b049bed - sorbet-runtime (0.6.13351) sha256=f8fee17c6e3edf835dc6823d26afb9a7c8969c6710d1fabe2fb43f4e0c15c64f + sorbet-runtime (0.6.13363) sha256=f1f0b2e946fb3cd76b9d8e3d85459cdaf7f5466331a400cafcf008e508b6d2c3 standard (1.56.0) sha256=ae2af4d9669589162ac69ed5ef59dcf9f346d4afc81f7e62b84339310dfcb787 standard-custom (1.0.2) sha256=424adc84179a074f1a2a309bb9cf7cd6bfdb2b6541f20c6bf9436c0ba22a652b standard-performance (1.9.0) sha256=49483d31be448292951d80e5e67cdcb576c2502103c7b40aec6f1b6e9c88e3f2 standard-rspec (0.5.0) sha256=64d396524a65af47f5331b423d8cdd313e0267401647bb7892489ca89dad2973 standard-rubocop-lts (2.0.10) sha256=89708a505b7d8b24d2ac399a7520fcb9e764abc2ecb4289b631b5fe0e3b76617 - stone_checksums (1.0.6) sha256=c775f830513d6c6ab26e31d1a5fbecd4c4e39002663d4d9f8fa96e97990b5298 + stone_checksums (1.0.7) sha256=faf7a175da7c4f32777c5292a0128b06eec183b3cc3a0b382529b21800300626 stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1 + strings-ansi (0.2.0) sha256=90262d760ea4a94cc2ae8d58205277a343409c288cbe7c29416b1826bd511c88 strscan (3.1.8) sha256=aae2db611a225559f21ffbb71765c9a4e60fd262534a9ea84f4f11c7f32f679e terminal-table (4.0.0) sha256=f504793203f8251b2ea7c7068333053f0beeea26093ec9962e62ea79f94301d2 thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73 timecop (0.9.11) sha256=41284dc6e5041f2184f781ace766f942108c842f8d8c1386a26e6343decc7542 timecop-rspec (1.0.3) sha256=005f14841bb606dcaefb060e321b5388e2e59537742bee8b3a9a9a40e598fab9 - token-resolver (2.0.5) sha256=b852f924287ffb58a440856e862b056c8ad97e74b4b2526cee43e0771f40c25c + token-resolver (2.0.5) tree_haver (7.1.0) - tree_sitter_language_pack (1.13.3-x86_64-linux) sha256=1ffd045bd236ea54f58c5872ee66121d01033359c1f28f375b7fd4a4b5620cf9 + tree_sitter_language_pack (1.13.4-aarch64-linux) sha256=f7bb95fd59afda1e1b91a7b6ad4df244c585a863e94e4a0f492ef2336a5358b8 + tree_sitter_language_pack (1.13.4-arm64-darwin) sha256=2b48ded1f5feae3de20be1471aaa7c211601ac1c71ca6d4789cf31560a854132 + tree_sitter_language_pack (1.13.4-x86_64-darwin) sha256=8a2460d9029e7610b863d2481e2da0078f87b18bf8668070ccb5ecce71e272d8 + tree_sitter_language_pack (1.13.4-x86_64-linux) sha256=ae3ae718534088b2dc76bd93e7d093f11e8d19188bf47edfcd962df906e1af97 tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f - turbo_tests2 (3.2.0) sha256=8b35421548399d1923567b177970f42671c65695b93cdd134d78fbcbab85dff0 - unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42 - unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f + tty-cursor (0.7.1) sha256=79534185e6a777888d88628b14b6a1fdf5154a603f285f80b1753e1908e0bf48 + tty-progressbar (0.18.3) sha256=6cbb4260e55e74a9180d502143eb6a467d2c8e51bf5f3c9509fb5cacc3d4a5f6 + tty-screen (0.8.2) sha256=c090652115beae764336c28802d633f204fb84da93c6a968aa5d8e319e819b50 + turbo_tests2 (3.2.3) sha256=f77fc0799014c1d7890977e117cf39317bc4544de2c88a55149ed920b4cff942 + unicode-display_width (2.6.0) sha256=12279874bba6d5e4d2728cef814b19197dbb10d7a7837a869bab65da943b7f5a version_gem (1.1.14) sha256=6b7306c7e9416d06067561981ab3444e2cecb844f26cc325ae3c27b44cf85613 webrick (1.9.2) sha256=beb4a15fc474defed24a3bda4ffd88a490d517c9e4e6118c3edce59e45864131 yaml-converter (0.2.3) sha256=d35e69e547610d9e347672cc277fcb7d71dff3c53a942e66f82b1c64022ada72 yard (0.9.45) sha256=52e211493f7cb8a3ebf7e104a25a1e73937a3103092545d34cb88fafebb3dc51 yard-fence (0.9.6) sha256=3d1dbf4e3df462ac78b8bd2e01cf740a2de20168387c929aca31a0bcee490659 yard-junk (0.1.0) sha256=e85fe2ec1afa47313decd333447b53458cb1ed49b510b70015fdc3041a94bcdd + yard-lint (1.10.2) sha256=3e595709d088a8cc827e706a4146b447eb6a907ee375d06c11077369d00717f6 yard-relative_markdown_links (0.6.0) sha256=3e5ffa85cbad9bac70bee5421774b190fb25d3bdf489323a5b3534f647d1a70e yard-timekeeper (0.2.4) sha256=62f8d001d737c6e2ac688e7b37386f958dceb0f6aff9c909575e1bec8d20775a yard-yaml (0.2.3) sha256=fe5fef18819e1cbd05bb8f1b9e1baad6bf70c28125eb75b57bbf6397b0831812 diff --git a/gems/ast-template/bin/kettle-gha-pins b/gems/ast-template/bin/kettle-gha-pins new file mode 100755 index 000000000..c743cecac --- /dev/null +++ b/gems/ast-template/bin/kettle-gha-pins @@ -0,0 +1,16 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# +# This file was generated by Bundler. +# +# The application 'kettle-gha-pins' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) + +require 'rubygems' +require 'bundler/setup' + +load Gem.bin_path('kettle-gha-pins', 'kettle-gha-pins') diff --git a/gems/ast-template/gemfiles/modular/coverage.gemfile b/gems/ast-template/gemfiles/modular/coverage.gemfile index b93014b6b..b4c26a504 100644 --- a/gems/ast-template/gemfiles/modular/coverage.gemfile +++ b/gems/ast-template/gemfiles/modular/coverage.gemfile @@ -7,7 +7,7 @@ if ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false').zero? # Coverage (remote/released) platform :mri do - gem 'kettle-soup-cover', '~> 3.0', '>= 3.0.3', require: false + gem 'kettle-soup-cover', '~> 3.0', '>= 3.0.5', require: false end else eval_gemfile 'coverage_local.gemfile' diff --git a/gems/ast-template/gemfiles/modular/coverage_local.gemfile b/gems/ast-template/gemfiles/modular/coverage_local.gemfile index 0fc7ac539..7962f03ed 100644 --- a/gems/ast-template/gemfiles/modular/coverage_local.gemfile +++ b/gems/ast-template/gemfiles/modular/coverage_local.gemfile @@ -17,7 +17,8 @@ platform :mri do path_env: 'KETTLE_DEV_DEV', vendored_gems_env: 'VENDORED_GEMS', vendor_gem_dir_env: 'VENDOR_GEM_DIR', - debug_env: 'KETTLE_DEV_DEBUG' + debug_env: 'KETTLE_DEV_DEBUG', + root: %w[src my kettle-dev] ) if ENV.fetch('GALTZO_FLOSS_DEV', 'false').casecmp('false') != 0 diff --git a/gems/ast-template/gemfiles/modular/documentation.gemfile b/gems/ast-template/gemfiles/modular/documentation.gemfile index 9d4535f12..d0f4d4a76 100644 --- a/gems/ast-template/gemfiles/modular/documentation.gemfile +++ b/gems/ast-template/gemfiles/modular/documentation.gemfile @@ -12,6 +12,7 @@ gem 'kramdown-parser-gfm', '~> 1.1', require: false # Ruby >= 2.3 gem 'yaml-converter', '~> 0.2', '>= 0.2.3', require: false # Ruby >= 3.2 gem 'yard', '~> 0.9', '>= 0.9.45', require: false gem 'yard-junk', '~> 0.1', '>= 0.1.0', require: false # Ruby >= 3.1 +gem 'yard-lint', '~> 1.10', '>= 1.10.2', require: false # Ruby >= 3.2 gem 'yard-relative_markdown_links', '~> 0.6', require: false if ENV.fetch('GALTZO_FLOSS_DEV', 'false').casecmp('false').zero? diff --git a/gems/ast-template/gemfiles/modular/templating.gemfile b/gems/ast-template/gemfiles/modular/templating.gemfile index a672de184..a7e6c1f06 100644 --- a/gems/ast-template/gemfiles/modular/templating.gemfile +++ b/gems/ast-template/gemfiles/modular/templating.gemfile @@ -12,7 +12,7 @@ end if kettle_remote # Template/plugin checks for released installs. - gem 'kettle-drift', '~> 1.0', '>= 1.0.6', require: false + gem 'kettle-drift', '~> 1.0', '>= 1.0.7', require: false end # Set STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local development with path-based dependencies. diff --git a/gems/ast-template/gemfiles/modular/templating_local.gemfile b/gems/ast-template/gemfiles/modular/templating_local.gemfile index 7ae3fae30..55cf2f7ce 100644 --- a/gems/ast-template/gemfiles/modular/templating_local.gemfile +++ b/gems/ast-template/gemfiles/modular/templating_local.gemfile @@ -65,7 +65,8 @@ platform :mri do path_env: 'KETTLE_DEV_DEV', vendored_gems_env: 'VENDORED_GEMS', vendor_gem_dir_env: 'VENDOR_GEM_DIR', - debug_env: 'KETTLE_DEV_DEBUG' + debug_env: 'KETTLE_DEV_DEBUG', + root: %w[src my kettle-dev] ) end end diff --git a/gems/ast-template/lib/ast/template/version.rb b/gems/ast-template/lib/ast/template/version.rb index 0e1e7cf5d..72c2b235d 100644 --- a/gems/ast-template/lib/ast/template/version.rb +++ b/gems/ast-template/lib/ast/template/version.rb @@ -2,9 +2,12 @@ module Ast module Template + # Version namespace for this gem. module Version + # Current gem version. VERSION = '7.1.0' end + # Current gem version exposed at the traditional constant location. VERSION = Version::VERSION # Traditional Constant Location end end diff --git a/gems/bash-merge/.rubocop_gradual.lock b/gems/bash-merge/.rubocop_gradual.lock index 2c032ec6e..50e9461e7 100644 --- a/gems/bash-merge/.rubocop_gradual.lock +++ b/gems/bash-merge/.rubocop_gradual.lock @@ -8,10 +8,10 @@ [163, 121, 22, "Layout/LineLength: Line is too long. [142/120]", 1367093088], [166, 121, 18, "Layout/LineLength: Line is too long. [138/120]", 3881946477] ], - "bash-merge.gemspec:1539117488": [ - [118, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 2821357214], - [129, 121, 50, "Layout/LineLength: Line is too long. [170/120]", 3888612416], - [130, 121, 29, "Layout/LineLength: Line is too long. [149/120]", 981994949] + "bash-merge.gemspec:575490881": [ + [120, 121, 34, "Layout/LineLength: Line is too long. [154/120]", 4147388508], + [131, 121, 50, "Layout/LineLength: Line is too long. [170/120]", 3888612416], + [132, 121, 29, "Layout/LineLength: Line is too long. [149/120]", 981994949] ], "gemfiles/modular/benchmark/r4/v0.5.gemfile:3644720371": [ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542] diff --git a/gems/bash-merge/.structuredmerge/kettle-jem.lock b/gems/bash-merge/.structuredmerge/kettle-jem.lock new file mode 100644 index 000000000..19326fa20 --- /dev/null +++ b/gems/bash-merge/.structuredmerge/kettle-jem.lock @@ -0,0 +1,527 @@ +--- +version: 1 +template_state: + version: 7.1.0 + applied_at: '2026-07-26' + changelog_replay: + last_entry_key: kettle-jem-template-20260726-002 + last_entry_date: '2026-07-26' + checksums: + ".aiignore.example": 48a5dfdd93afd1a15fdce39cc28ca9920263f00018b0968ab031fa744521e5ce + ".config/mise/env.sh": aeea5a2ab489ba6e5467ae8de6e386ec8c8fe4ff31a044e69d0cd6a092dd6654 + ".devcontainer/apt-install/devcontainer-feature.json.example": 273a07f9d3926e1b6287c37709a469ee05d724cfedae62ad3b0cd8c09befc9ec + ".devcontainer/apt-install/install.sh.example": b61e020b60ca172bb7b658e63c9cd4342e49bda0531a6b19b36475e515ad20b0 + ".devcontainer/devcontainer.json.example": 4a80d471379b9720cc65cc89543cbbc0a7be87b188a818160296577c4e87606f + ".devcontainer/scripts/setup-tree-sitter.sh.example": c34f48d7bac8561fb780c4c7a81cec5004c3ac0edc11f229799ec9a4e3eccd54 + ".env.local.example": 35cb867e8bacb75252a85c29f78899b36d0d1843511ae1ba1fbc7da863b128b3 + ".envrc.example": b7232f4bae0fb399cc9c9cdc4a5eb694bd69623aeeadcbab18c9990e443040a1 + ".envrc.no-osc.example": b7232f4bae0fb399cc9c9cdc4a5eb694bd69623aeeadcbab18c9990e443040a1 + ".gemrc.example": 77b1c36ae6f91bedf08b99e662a971b02f7e66e0d65267805d068d30ff118aba + ".git-hooks/commit-msg.example": d858575bf70d6175fdd7656e9ba0b41672de3fb49163181efe3fbc9e40306024 + ".git-hooks/commit-subjects-goalie.txt.example": bb1179c8911af8afeb1f9a604b3de789d4a4b33d9d4a7743b3145998c15b0a94 + ".git-hooks/footer-template.erb.txt.example": 70ed3616ee04a4062126f53892cc255e7aa2b66741fe22d6b372f7df99676718 + ".git-hooks/prepare-commit-msg.example": 35266ead46a6385d20eeff7ec64afedef33a2db18d1238b8662a1bc758f05335 + ".github/.codecov.yml.example": d6ef3208a90eca74f79d8ff4e5ae21a915562b075cb17978b1eaadc231dd4e85 + ".github/FUNDING.yml.example": fd27dff7db58f4e8a39c35ccb60e39422517038501a5f2a99ef2aaeea2d1fa5d + ".github/FUNDING.yml.no-osc.example": 8f1a867b1921b3dec1c63f7a7cd629362c1fb1ad0d1052494b48ba746b0fc5c6 + ".github/copilot_instructions.md.example": f5c5791df013e89e170fd436379b14e251d0ff4cb6b330a6d961e80c9071f2d3 + ".github/dependabot.yml.example": db84d1c13f64100d2f48212c022f0d985e9061ca76c36d82e7057fd845ecd528 + ".github/workflows/auto-assign.yml.example": 57b8159a15bf49946506e1b624934feed6a1cc8f71ad68968323c87acac56c67 + ".github/workflows/coverage.yml.example": 524ef90e0fd2ca0b846c464197d8d43cd6a57834303c9526ea0bd277f2beb3e1 + ".github/workflows/current.yml.example": dbc82e7593804c05d2c217d5c02d79d5480b5a0d1e04eea99b7235f35f520216 + ".github/workflows/dep-heads.yml.example": d94122f3246e17774fa015dde8d9a5772a66e54f817d44e62716f6a61d899050 + ".github/workflows/dependency-review.yml.example": a895d52257a7112d796fabf349ced1079bed93e81e3aa9cb088f9af3f44d1e5f + ".github/workflows/discord-notifier.yml.example": f9cc83a87058bd420426444510a1dd1520fd7cc15af50832ad52c25c5766be94 + ".github/workflows/framework-ci.yml.example": 112ef6178fcf115fe9e0a248ec6cb4af748ce89142fd7dba30e9abb6ebdc17be + ".github/workflows/heads.yml.example": aa55cf9bb4ae35fe126384003e8af4b91e685bcf370263b3710bd429f6c44343 + ".github/workflows/jruby-10.0.yml.example": 0eaf6d10c304de606684d420bbd88cfc90fe9d139a56773e011c6abaa6c5fc91 + ".github/workflows/jruby-9.1.yml.example": 9062f9de8843da1f8c4da8f991bbd24f9540c63927deaf311649f3088a672d5b + ".github/workflows/jruby-9.2.yml.example": f330363fc0af7dd0be24c140c919c07737a3168c5647012e34ba0c36634005e5 + ".github/workflows/jruby-9.3.yml.example": 3b26b3a978d0018f01e6d87651936f2e92fcb58d62bcdf11822eca3c2656d303 + ".github/workflows/jruby-9.4.yml.example": a830b92838a09b9316a81745b48ff35bed9461783154fc6d0e52df0d6aa319f3 + ".github/workflows/jruby.yml.example": f10f779cd3be37d2ffa593d9a83ba68a8684bb849ed1c4d9ae41706ff12571e1 + ".github/workflows/license-eye.yml.example": 23db5d6ee9b5382de1f2042642219d65214e09c3f975c418d4dec4d46375036c + ".github/workflows/locked_deps.yml.example": c7eaa20cc7d7de6209e576274e592ffb4838177ae6ab56096b2439d0fa1bc31c + ".github/workflows/opencollective.yml.example": fe7d8d346f9ab055b6779abf62972291460d05275e2c4d191e291e8cd73b0e6b + ".github/workflows/ruby-2.3.yml.example": 90474f1a462edc877983b91dd40d942e82b28262f1afdca74cddcdd52d7e8c26 + ".github/workflows/ruby-2.4.yml.example": fe84af4efef6934d7ff63efa2a4c85994f2ea1887f61b1ab5d30a21365429ec9 + ".github/workflows/ruby-2.5.yml.example": c40db157514168442311191ebc88853dfb36447a90171a73f42d435e92d02f05 + ".github/workflows/ruby-2.6.yml.example": 87bb8537d0047217651a327353df670fed3ea9e4a5350e965ed80af9ce32d9d3 + ".github/workflows/ruby-2.7.yml.example": 5650ec41bc67553457019a772a3343578872749d21268d5e7fb1715ebf4e2351 + ".github/workflows/ruby-3.0.yml.example": f9d7c7dfc6eaea1ca12c92e0b98b4ba8fed5726d26459bb410ab9812a741e5b9 + ".github/workflows/ruby-3.1.yml.example": e44879cd3ea47d00e44e573745d7f95fc1a561a9c1d69d72529d0c07294bd26e + ".github/workflows/ruby-3.2.yml.example": c28b9179778157e6b4807a775968840ff1c6bf2fd847ce1ce694b9a77df42f6e + ".github/workflows/ruby-3.3.yml.example": 033e4f0ed7ded17f5d13fde6674ec9fd555cfe58c11f57f7dc2f1fee21c718b6 + ".github/workflows/ruby-3.4.yml.example": 474a96468f101b8fddac4cecaa0629f28d5ceec0c784329affdc471eb1e3e889 + ".github/workflows/style.yml.example": dea7243a91dc164a172e90b7933de58cdd353d7e5df1beac22cec63125edc086 + ".github/workflows/templating.yml.example": 327b933509e1ade4d53df5756f6407028b479c51847775db494fb9c25e66ce5a + ".github/workflows/truffle.yml.example": 56fa53dc206976c81db7cc3530f4d19d89ea5859c1245492e5a5ecb9304de63e + ".github/workflows/truffleruby-22.3.yml.example": d6773529e6961039b5cc4a145c77623881aa3857d875bbb415ca0f8147166d7a + ".github/workflows/truffleruby-23.0.yml.example": abcd23a18d748528f7558d4ab7bc4830796cb686ca7371f67a8ddaf6d0362d72 + ".github/workflows/truffleruby-23.1.yml.example": 11af8a3f0823ed3ab17e759d81b8a4551eb7af8096ce0b5a9501fd83cada1cd2 + ".github/workflows/truffleruby-24.2.yml.example": 2c4ff82eeaa3bdb19391f04cd2f41b07733986a053d5ac8498176fef5f890e5e + ".github/workflows/truffleruby-25.0.yml.example": 42cdfdcd21c7b3bb1b87c22c2bc7a98135a442742df5f9a45e2b4e03838c1e7f + ".github/workflows/truffleruby-33.0.yml.example": 2a45e428ca13dac56ee75526b80eac477b61697ca06c94680e1eb05d21dbc25a + ".github/workflows/unlocked_deps.yml.example": 15f5ccbe811aa5a8650c2aa69b32f4f6a24d5f8bd3aae2dcbec92cbe3a51f0a7 + ".gitignore.example": 14864a0c88be3f8c122ab3032efeb782ba5e035013231038acf746a400437a3e + ".gitlab-ci.yml.example": ef64afa9855ebb59bbc87446fa9533238d3ce180966ceb19649a7f165715b92b + ".idea/.gitignore.example": b44a5aa16bf9fe5635558af347454b05a76d600084308a9f43d4d0b54789ecab + ".licenserc.yaml.example": 8787fa7bddce911f8ba47bda3eb6ad9786b6650d5d94786723e88773098ed37d + ".opencollective.yml.example": 9ad9b83fe54f0bddac7fb614575585d98f78df0e181ee70a7acd0168d26e3142 + ".qlty/qlty.toml.example": cf3d750d2328f6c057b08b7ce3d7ec00a4056c7f0eedda59af321d6caca03553 + ".rspec.example": 40d3f3ff435b0f9e5863772a95df8725b939c2dc11aead2bca68dcd6d85a9788 + ".rubocop.example": 591e4b45430e85b0dd460cc11c70650912fa2734988420b934109d06a749344f + ".rubocop.yml.example": 47f9a031022db67c964dd76ee2e8dfee21295a1877ca4d6233d3de39d114af73 + ".rubocop_rspec.yml.example": 288ad75e7eb14d87d80fafe6f7272217be5c57547536ee56c780a7d10ac7ec74 + ".simplecov.example": ffc76492effe905cc65797389fc8050fda136652ac078a80303cd084b349ef28 + ".structuredmerge/git-drivers.toml.example": 9d241a44c9edffcdbd3da018fa188a238089c3d1635040924df594a6929a4f97 + ".structuredmerge/kettle-jem.yml.example": 954cfc9e35cd20e46376426675e985bf8a0de19ff5069bf7be24b574837be615 + ".yard-lint.yml.example": 90def46867c9436b4e177c47d91fc8165f4602e335715aecc39f5587ae20b55b + ".yardignore.example": 821f453c609df7d46145d675424b39dfbe6dfdca8edac5f367b85fff48502455 + ".yardopts.example": 6fd6f2701713096a8a9ea095c213bbc68eeef37797c4754d97837e3229a3a5f6 + AGENTS.md.example: aec69512cbe17004660ac0abfabb9ec91a5c51c2cd82c10f30f08886f9bf64a7 + AGPL-3.0-only.md.example: d8a6cc31abc16b6748c7a21f21611f5a1ec33f67d22ca23d7da1c19b95496bee + Appraisal.root.gemfile.example: 8724e3f6faea995be655ac49369bec64a70710112b1f65707fa38f1fd2fd3254 + Appraisals.example: 9cb1abcfb1a0bd6d859ca0705efb874dbe546754c8c71f9f95025ff6817f1471 + Big-Time-Public-License.md.example: b0c02a112c9eee0ed69f05fd8f22277a2f8bc62d447b6cb75d6df560e05bf431 + CHANGELOG.md.example: 73459e50dad34d84db88844c993d975097557bdf5229e101b0d1339de6f98ffc + CHANGELOG.transfer.md: 9c201849117c9d4234724c4599643dd42fdce5f0a673a1abee97b97e556c301b + CITATION.cff.example: e404ea0a7919d78a83d53d80e211d17b9663576aa606583b709795dc023fd75c + CODE_OF_CONDUCT.md.example: f1ad532f1860f73ef774c6b27a26d41f4bc1cb8813034f5957487766ebb0986b + CONTRIBUTING.md.example: 63d339848c615f2c181d6b0565c42e56371eedb66f310d146cb7da297f7bc641 + FUNDING.md.example: 455bbb2b55d934283a2e7c16b59c321116c53310a85a718b7cf8ca44e9e3721e + FUNDING.md.no-osc.example: 05a85d5faf22d5ea5721622d242080447cf318d3277d9d529e438be1c9d5a351 + Gemfile.example: 6b2d72ec8a630cce515b7b528022071b13eee863c3164763df03792a5004345a + IRP.md.example: 85d8887d9b0e77f7fa9835ca5b9be31f586fdc94764ed1819af2a9a7fec98e96 + LICENSE.md.example: 120edf5f23173ebbdb5ad384ffc2e9b97e62aa6d0e61b733c003bd4db1b08276 + MIT.md.example: 365fce2a82f9d258ada9a527accfd5754b406ee9cdd8f8ed86bbec64b8c42ab2 + PolyForm-Noncommercial-1.0.0.md.example: ffcca38841adb694b6f380647e15f17c446a4d1656fed51a1e2041d064c94cc8 + PolyForm-Small-Business-1.0.0.md.example: 2f81e317d36f83a199c9fa10bcb250775fd90510303eaeb15aac2d8f0c1fc2d6 + README.md.example: 452446a44d120df26cde68fbc7aff086fa815769c989b994ebc1432ea927974f + REEK: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 + RUBOCOP.md.example: c09e5533ccc59b70a2efa05c99f66e521137c1053d3c12eb43509cebd5b68b0e + Rakefile.example: 569803e726b07ea26267fec6891367a3096a0dff3c266269a7081d36afe496af + SECURITY.md.example: ee9411aa85f36d88363fdaea7a1baea4362b6ec112cf2688e711b05de1d3144c + bin/setup.example: 0ac35089c95a91d8973fe7a318bf9fd98b9f8e00db92c5d9ca6cd858abb8d41b + certs/pboling.pem.example: 18956f60643666cc181e2743b3b3691bec08c5326f514f60af54d0cdb9ebc554 + gem.gemspec.example: 9989cc8a1cd125586ea807eaed549eaecc044711d31f17dd7bac2a0815b28b1a + gemfiles/modular/benchmark/r4/v0.5.gemfile.example: 5bc3190090ae456df1a8cce28dd47a7fb293495f6d845ec7e53a7a8b50f14ae1 + gemfiles/modular/benchmark/vHEAD.gemfile.example: ca6cd52c55c3082759c6ddc97638970f12d953aec1822470823d316086aa6e25 + gemfiles/modular/cgi/r4/v0.5.gemfile.example: c2d14a39377a2435419ceaca22a3421ebd899e9cba943df8a90b576a33624870 + gemfiles/modular/cgi/vHEAD.gemfile.example: 9ff3dc789b3279642876c0aad4b0094c1139bb8fbbf36daab804d3b2b3a60b43 + gemfiles/modular/coverage.gemfile.example: 915fc161ad574fdbc071bc733b69b27e94bd7a4c68cc4f58da267c9a0987f3e8 + gemfiles/modular/coverage_local.gemfile.example: 928d5f260d7b119c038baa56da9fb78dd524dee613aea33ab72894bbce5c506e + gemfiles/modular/debug.gemfile.example: 0a508bfb02e51b75394b43f4f09d98174dac36ead41cba09c1f730671a1f5905 + gemfiles/modular/documentation.gemfile.example: e15f51e4d14ad2216b6de16c323787945bd225073d70a78420f4c99c98c1ecd1 + gemfiles/modular/documentation_local.gemfile.example: 84a20f5d4b0feb94c2cf2f7a8dce8f682f1483498e41484c2b447a5661fd1870 + gemfiles/modular/erb/r2.3/default.gemfile.example: 9da0d08fb6a299b965c37fe85efcaebd9eb0a82b2ea35fdc157c41bd75431396 + gemfiles/modular/erb/r2.6/v2.2.gemfile.example: '01787cbdf7136c0d75cc7b734c6bb3d2ef6c70d6c1c50e7d0ad2112c0f8ef8e7' + gemfiles/modular/erb/r2/v3.0.gemfile.example: 3793e7dc9ef23a7ccd893d48cbba092fd27594c63e65cca011cc658218425670 + gemfiles/modular/erb/r3.1/v4.0.gemfile.example: bdf71ddcfe5001aab7d71b10a645a785928957ef7bae61d49307eb7f712279f3 + gemfiles/modular/erb/r3/v5.0.gemfile.example: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + gemfiles/modular/erb/r4/v5.0.gemfile.example: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + gemfiles/modular/erb/vHEAD.gemfile.example: ad6f104a49e80e0cf625440e3dc816343fe7e2f037fc4971df75e7bb4305c683 + gemfiles/modular/json/truffleruby_22_3.gemfile.example: 249c12eacbe90f9d0d2e81e7a62c4c7e9102e504ededcda4ecf660cb3bb68be4 + gemfiles/modular/json/truffleruby_23_0.gemfile.example: 66aa010567f7afa1af8244a74c3c88ecaaf84dc87b6a25180691bb480d02ed28 + gemfiles/modular/json/truffleruby_23_1.gemfile.example: '080fcbdaf2bec73cad40832a3d51eebb380af789917b96f493d1460b0dd6361d' + gemfiles/modular/mutex_m/r2.4/v0.1.gemfile.example: '09728bdc10807b3ca9dd3b9f12986acbe8c40ac08ada438bcfd49cd69445c650' + gemfiles/modular/mutex_m/r2/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/r3/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/r4/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/vHEAD.gemfile.example: '08018641c97f894788fa91b462da504ab2237213d18d95404136c393274ae3cb' + gemfiles/modular/optional.gemfile.example: b45eb8ecde2902441c02b2f01d4aa8f79bff75c853ef92555c3201ee798d9e87 + gemfiles/modular/recording/r2.3/recording.gemfile.example: 154da539583c51ca78ff8affa7a7caaf7f354d321b5e748beb64de61ff72f80a + gemfiles/modular/recording/r2.4/recording.gemfile.example: 6d69381eb2f8be681c72e7a5a8b5d6ec6ee586da8ce51b9b39d845d2a87e4ecf + gemfiles/modular/recording/r2.5/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/r3/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/r4/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/vHEAD.gemfile.example: 7480fd116e9671972a2735d1d97050a4fd5754aa7abfab3d115bf9bebbca038c + gemfiles/modular/rspec.gemfile.example: d043f5c9344f6435edb4607c5adaf42c78e7fb6b8b6726007de2bbedefb376c3 + gemfiles/modular/runtime_heads.gemfile.example: f163201999bf68a942b1e5bcea506bfc4b9c59711ff502091eb215d5d5f8f658 + gemfiles/modular/shunted.gemfile.example: a54a86124eff06163497462012704f62a691daa224cebeac605cdd14cffacfbe + gemfiles/modular/stringio/r2.4/v0.0.2.gemfile.example: 6425ebcd70b2e782f4c1d9074f8685c1e93ca7bf371728ef7ebbc8b5ebdf491a + gemfiles/modular/stringio/r2/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/r3/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/r4/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/vHEAD.gemfile.example: e0497ab6dad9667b22725485b781e9d99349a079250eb29cb125d58f01f4a5be + gemfiles/modular/style.gemfile.example: a15db732f566d958c2459ef549ae3877d984df3d205116e714284d1fe4f9b068 + gemfiles/modular/style_local.gemfile.example: '0083605323d23879dc7223f0198e9f1db24a25fa38730c4dbcc71c7a8a4c307f' + gemfiles/modular/templating.gemfile.example: 6cedc39529daa9aac3a4cf13fe31a628b62a4a2428f5c4f8657c5a2fa027bb35 + gemfiles/modular/templating_local.gemfile.example: 16c0b51fd46b86db09268c8485b1d5a528e5f962b593f8ae7521b15209f7d1a5 + gemfiles/modular/webrick/r4/v1.9.gemfile.example: 1ee940ff54d5ca3ce7fcff0d82ee9553386979656b9e220d5be5404d0991d5ea + gemfiles/modular/webrick/vHEAD.gemfile.example: da545f591af987648ffbaba181707480a38dfb375db7d289617986ec2c2ca23b + gemfiles/modular/x_std_libs.gemfile.example: e3917e90717d7f9f4393d847549a78c53de7f6c8de52a7f590b34b515fd6111a + gemfiles/modular/x_std_libs/r2.3/libs.gemfile.example: 379ac2a3698615789e39dc18a961b9c793b2cc594856bb3163524a99fd4ac86f + gemfiles/modular/x_std_libs/r2.4/libs.gemfile.example: ccad8f592943481317c082ce8d340316b9e90a52463c8c1eea5c5109b23e8c3d + gemfiles/modular/x_std_libs/r2.6/libs.gemfile.example: 9af20396f404a32bf76d8999c7fdd112f0282ba331f71100ab093663b2ab5670 + gemfiles/modular/x_std_libs/r2/libs.gemfile.example: e80ec8ad06cb1b31ac982bc25cf7696987fca131aa1001eaefd0bf5cd379c273 + gemfiles/modular/x_std_libs/r3.1/libs.gemfile.example: 38068bd6a0f5d02918eb286af9bdbdf0c7cf7cf026486b9fd157b541b6153d58 + gemfiles/modular/x_std_libs/r3/libs.gemfile.example: 546f8849f4267bb19aa10ff0de40be30957197f229e6887847181ea9127b2650 + gemfiles/modular/x_std_libs/r4/libs.gemfile.example: 8c2582eaa218d216b98c86c933465295c8b4e43f3251ea388b9eaf6e471f8da6 + gemfiles/modular/x_std_libs/vHEAD.gemfile.example: d3133ec4c0638363a7fb025d19be7e95a615fd61c35ddb8d17f2280ee74a7486 + lib/gem/version.rb.example: 15e219ac3a928b5580035f891e415551213175020f1131f6e7ca0ccd55a1b2d6 + mise.toml.example: b2eb06f7daaf0c3916bba155f463e166bd1de218637ba82e636c528c077c8d6d + mise.toml.no-osc.example: 35ec90d3c67b74e0014876dccad14f5883fdad88036f6b0cf5d29ea181e132ac + parsers.toml.example: f0538ae7ad8596be2dc39b3ea663f1164dec21fb0457233c1885097e774aff6f + readme/partials/basic_usage.md.example: adaa8f9de9768d1f29cb15d957404004715e7687db68c29b121d6467db13158a + readme/partials/configuration.md.example: 5ad82bc7eaf05015d31cea9265173718abc1d92729b52e3856c8366aa54184e8 + readme/partials/synopsis.md.example: 2b7383f8261086da0995fbf2c10017b3f162723b32c324ae8c0e1c1a8d1c79ef + shim/.github/workflows/current.yml.example: c2a2a2053f2726276bb8571c8a76a4b97bcce6cd54bdca01cba63d713c3a0e2f + shim/.rspec.example: 0e3a2a1587779efc3eae8fe718a3480272fbdfb3f1f6c2f9c3901f6fd81b2cce + shim/.structuredmerge/kettle-jem.yml.example: 03faae6cfda3947ef8489008b4836aad3ca280e94ddf9d08ef733071d7daa167 + shim/CHANGELOG.md.example: 2c098802b9971c51796e34067d061adbc31fa443df96be8a1fc71fc84c262d0e + shim/Gemfile.example: 9583b19e04d7ab6f5b3ea7ebb0c5d24e6a71ae5d74404a510aa979642248ba34 + shim/README.md.example: 3a2f7211b7f92a1dfae5e523b8e34b051a3d8af942144b05286eca0b3c8f6fbe + shim/Rakefile.example: 572c94da7052083b39b62a6600785419e314a109efd7a3d8c3a96eb77ad34fd1 + shim/gem.gemspec.example: cabca9717af1a18991db1de856900494e2771b044f1d5bfd2ad71b2ed4a1367d + shim/lib/compat_require.rb.example: 94ee85e353a3ca08c8a35c9063d4ff789214ea594c7f803f6cf09d7142f48379 + shim/lib/entrypoint.rb.example: dd57613520daca01d6f6bcaa9b83b00ff74505240dc04b84ceb686df3c0539d7 + shim/lib/version.rb.example: 15e219ac3a928b5580035f891e415551213175020f1131f6e7ca0ccd55a1b2d6 + shim/spec/shim_spec.rb.example: '060013019bf39b8dc267169df83752661d02c7ad890b65a99a1d97137938edfd' + shim/spec/spec_helper.rb.example: 88e2ab0bd8888022a68e856e04f61053e238e54f51b428b386aaebf93ae8ad83 + sig/gem.rbs.example: 47a4f7e524cc6f773875b6c08691ca4d65c2b14618abd5b9b91055ae5b248cec + spec/spec_helper.rb.example: 0c8119bd75b90f3a2403789b68b539fd19952370051297b1807596e201ef4813 +files: + ".simplecov": + recipe: template_source_application_simplecov + action: write + dest_sha256: c85adf4d1baa147f6c39da42e6914854c50e5f86d24062790a62713930024031 + input_fingerprint: 17ddac3c7b1db6d6bd43dd449c7fe020fbf33332bafd29d64943634cc89b65f0 + template_sources: + - ".simplecov.example" + AGPL-3.0-only.md: + recipe: template_source_application_AGPL_3_0_only_md + action: write + dest_sha256: d8a6cc31abc16b6748c7a21f21611f5a1ec33f67d22ca23d7da1c19b95496bee + input_fingerprint: c5f76d0ce1602867e944e88bc5b7bad78960f271bf43b542bd6804d08d6ec3db + template_sources: + - AGPL-3.0-only.md.example + Gemfile: + recipe: template_source_application_Gemfile + action: write + dest_sha256: c3e5bea2e6030e3cf1f277c3a066c3d09b03a975d41762ed02b5dbb99efac178 + input_fingerprint: 54fa3bdaad97014ac8d5fd98b4fc363c21b592a811c0b4ca60e02d63924ff14b + template_sources: + - Gemfile.example + LICENSE.md: + recipe: template_source_application_LICENSE_md + action: write + dest_sha256: f6188bfd474a636d2a526420ebb411250faa447d94c9b9ccee097128ce4101b5 + input_fingerprint: 5889b79e8825f6485213250f44993cedfdb4ddb6c0ae562148b1f1c272b4afe8 + template_sources: + - LICENSE.md.example + PolyForm-Small-Business-1.0.0.md: + recipe: template_source_application_PolyForm_Small_Business_1_0_0_md + action: write + dest_sha256: 2f81e317d36f83a199c9fa10bcb250775fd90510303eaeb15aac2d8f0c1fc2d6 + input_fingerprint: b64d0de6e64a316ca42f9285f1d2e2e171161047dcd6c4a34c63eca36234f8f6 + template_sources: + - PolyForm-Small-Business-1.0.0.md.example + README.md: + recipe: template_source_application_README_md + action: write + dest_sha256: c0cb7b767961f51591907e8267e2270a70f140f30ad66826a1a7eb233753522e + input_fingerprint: 3ff0a993fb9c4fae16cb46362127de2e591bcf797eac97a8cf1ffa7a07fd01a0 + template_sources: + - README.md.example + bash-merge.gemspec: + recipe: template_source_application_bash_merge_gemspec + action: write + dest_sha256: d0e8447cc4e81bd6be471c6d6e4ae76be5f97e83beb6f8056fedfc7fb3d39715 + input_fingerprint: 49c8275318ccf65331ec4d8029d779977208fc842c5c0e0beb3a87054ff69a0e + template_sources: + - gem.gemspec.example + certs/pboling.pem: + recipe: template_source_application_certs_pboling_pem + action: write + dest_sha256: 18956f60643666cc181e2743b3b3691bec08c5326f514f60af54d0cdb9ebc554 + input_fingerprint: 5e2694b05582c23ede818c52f3921db9b20b99510a072cb97b900ba5eb0b6ba1 + template_sources: + - certs/pboling.pem.example + gemfiles/modular/benchmark/r4/v0.5.gemfile: + recipe: template_source_application_gemfiles_modular_benchmark_r4_v0_5_gemfile + action: write + dest_sha256: 5bc3190090ae456df1a8cce28dd47a7fb293495f6d845ec7e53a7a8b50f14ae1 + input_fingerprint: 02455fd0f8b95475139ee2f5116b3ffd9ed88675cfaeaf706f102354cfae5def + template_sources: + - gemfiles/modular/benchmark/r4/v0.5.gemfile.example + gemfiles/modular/benchmark/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_benchmark_vHEAD_gemfile + action: write + dest_sha256: ca6cd52c55c3082759c6ddc97638970f12d953aec1822470823d316086aa6e25 + input_fingerprint: ece899a4892294ea7dd509e526c91de6b7f376867f42e09275fce19d11504028 + template_sources: + - gemfiles/modular/benchmark/vHEAD.gemfile.example + gemfiles/modular/cgi/r4/v0.5.gemfile: + recipe: template_source_application_gemfiles_modular_cgi_r4_v0_5_gemfile + action: write + dest_sha256: c2d14a39377a2435419ceaca22a3421ebd899e9cba943df8a90b576a33624870 + input_fingerprint: 146c35a9635b6f7de2462f62d46bdc8237e48a46856259742ee517a42feb82cc + template_sources: + - gemfiles/modular/cgi/r4/v0.5.gemfile.example + gemfiles/modular/cgi/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_cgi_vHEAD_gemfile + action: write + dest_sha256: 9ff3dc789b3279642876c0aad4b0094c1139bb8fbbf36daab804d3b2b3a60b43 + input_fingerprint: 6ca91a036b9e27256345c402167e5e521babde19087c7aaf2a0acdca0c638e82 + template_sources: + - gemfiles/modular/cgi/vHEAD.gemfile.example + gemfiles/modular/coverage.gemfile: + recipe: template_source_application_gemfiles_modular_coverage_gemfile + action: write + dest_sha256: 915fc161ad574fdbc071bc733b69b27e94bd7a4c68cc4f58da267c9a0987f3e8 + input_fingerprint: e450645bbfd318ccc696ea6514abbb5185994fa72a1b9985a683b98791582d2a + template_sources: + - gemfiles/modular/coverage.gemfile.example + gemfiles/modular/coverage_local.gemfile: + recipe: template_source_application_gemfiles_modular_coverage_local_gemfile + action: write + dest_sha256: df600c175cd5a2cf56dd6c371739e17b6bf72d19a6197d72b2f21ea3559e5477 + input_fingerprint: d94d61fdd611cc93f6da24680866b702f435ad661890886d7a69a3368b4f39a9 + template_sources: + - gemfiles/modular/coverage_local.gemfile.example + gemfiles/modular/debug.gemfile: + recipe: template_source_application_gemfiles_modular_debug_gemfile + action: write + dest_sha256: 0a508bfb02e51b75394b43f4f09d98174dac36ead41cba09c1f730671a1f5905 + input_fingerprint: 2121c5fc8c7bfd0570cd7d22fb55d5c5bfb362aef39906182db7e3d3c2d489ae + template_sources: + - gemfiles/modular/debug.gemfile.example + gemfiles/modular/documentation.gemfile: + recipe: template_source_application_gemfiles_modular_documentation_gemfile + action: write + dest_sha256: e15f51e4d14ad2216b6de16c323787945bd225073d70a78420f4c99c98c1ecd1 + input_fingerprint: 8e43ef49f1d4f92449de849773b594060ef43fdf786c906e892a57724fd9c47f + template_sources: + - gemfiles/modular/documentation.gemfile.example + gemfiles/modular/documentation_local.gemfile: + recipe: template_source_application_gemfiles_modular_documentation_local_gemfile + action: write + dest_sha256: f54b4de897503a0fc5f8ca13f45c0fec7828cf665a7a5a840b985280ce776215 + input_fingerprint: 75ebc7e6beb34fd66e0b5d742745564b04d87b12cd7e25648adfce580fbd3810 + template_sources: + - gemfiles/modular/documentation_local.gemfile.example + gemfiles/modular/erb/r2/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r2_v3_0_gemfile + action: write + dest_sha256: 3793e7dc9ef23a7ccd893d48cbba092fd27594c63e65cca011cc658218425670 + input_fingerprint: ad4cdaa09a7e6e949f411fc5cdf244d2a110f8a1d35cd7b197ea0c04a210558c + template_sources: + - gemfiles/modular/erb/r2/v3.0.gemfile.example + gemfiles/modular/erb/r3/v5.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r3_v5_0_gemfile + action: write + dest_sha256: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + input_fingerprint: 242f07dcdab72ce12350f46c1b03ad7ce638500bd2584032d4e97c6873b9b9b8 + template_sources: + - gemfiles/modular/erb/r3/v5.0.gemfile.example + gemfiles/modular/erb/r4/v5.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r4_v5_0_gemfile + action: write + dest_sha256: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + input_fingerprint: 86a02a4534cb781c8a3b7fc3920572afc41456313630eb745462b0995dc74d69 + template_sources: + - gemfiles/modular/erb/r4/v5.0.gemfile.example + gemfiles/modular/erb/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_erb_vHEAD_gemfile + action: write + dest_sha256: ad6f104a49e80e0cf625440e3dc816343fe7e2f037fc4971df75e7bb4305c683 + input_fingerprint: 832f783791d91b8de1164f336e152e85dda4833b06e994b7ea20efeabf569eca + template_sources: + - gemfiles/modular/erb/vHEAD.gemfile.example + gemfiles/modular/json/truffleruby_22_3.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_22_3_gemfile + action: write + dest_sha256: 249c12eacbe90f9d0d2e81e7a62c4c7e9102e504ededcda4ecf660cb3bb68be4 + input_fingerprint: 46f7f9e683928ed83ed86f592cea130323f271ae054dbf97671069fae97d164a + template_sources: + - gemfiles/modular/json/truffleruby_22_3.gemfile.example + gemfiles/modular/json/truffleruby_23_0.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_23_0_gemfile + action: write + dest_sha256: 66aa010567f7afa1af8244a74c3c88ecaaf84dc87b6a25180691bb480d02ed28 + input_fingerprint: 427ad673e60f92764b3b6e152741574172f2ee36119cdea5ebe7f3be946d8bb0 + template_sources: + - gemfiles/modular/json/truffleruby_23_0.gemfile.example + gemfiles/modular/json/truffleruby_23_1.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_23_1_gemfile + action: write + dest_sha256: '080fcbdaf2bec73cad40832a3d51eebb380af789917b96f493d1460b0dd6361d' + input_fingerprint: b1980015ab5753ee75367959d5d98716d17f1d856e4044a49e104dc868b11fe6 + template_sources: + - gemfiles/modular/json/truffleruby_23_1.gemfile.example + gemfiles/modular/mutex_m/r2/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r2_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: d10d3750ec0dcde8a81f7e5221f6f2b38b1daf550681075b8d26bfac34ba92a0 + template_sources: + - gemfiles/modular/mutex_m/r2/v0.3.gemfile.example + gemfiles/modular/mutex_m/r3/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r3_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: c472fa85cb17be60336ea1614e08a43403ea150e55778cb935e09ba9f6263def + template_sources: + - gemfiles/modular/mutex_m/r3/v0.3.gemfile.example + gemfiles/modular/mutex_m/r4/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r4_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: e2516d5416620462f6e23def131f460009888561d38524612be98cc55ad1addb + template_sources: + - gemfiles/modular/mutex_m/r4/v0.3.gemfile.example + gemfiles/modular/mutex_m/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_vHEAD_gemfile + action: write + dest_sha256: '08018641c97f894788fa91b462da504ab2237213d18d95404136c393274ae3cb' + input_fingerprint: 376fd25ea04dec217f9cb0081653d80e20bc9e2b138c129e5add2f656a9826e2 + template_sources: + - gemfiles/modular/mutex_m/vHEAD.gemfile.example + gemfiles/modular/optional.gemfile: + recipe: template_source_application_gemfiles_modular_optional_gemfile + action: write + dest_sha256: f770e6e9a9dd2bd0f1f132e882d88038b2e21127dce3afe270908c7338c28bfd + input_fingerprint: 55ff6e58fe2dbbdaaa6a78066513091e940cf980c94afd21c99366ad621801f1 + template_sources: + - gemfiles/modular/optional.gemfile.example + gemfiles/modular/rspec.gemfile: + recipe: template_source_application_gemfiles_modular_rspec_gemfile + action: write + dest_sha256: d043f5c9344f6435edb4607c5adaf42c78e7fb6b8b6726007de2bbedefb376c3 + input_fingerprint: 8cc88758356f7066cf6ce7f1dcfa2991591ab5e1c5f41199461d500e273e0012 + template_sources: + - gemfiles/modular/rspec.gemfile.example + gemfiles/modular/runtime_heads.gemfile: + recipe: template_source_application_gemfiles_modular_runtime_heads_gemfile + action: write + dest_sha256: 6ac7158c4a3088190f2a9082f01439eb27eca2172ab3464b15c9cb045aa885e1 + input_fingerprint: 5c725b50e0dc4a23e8d99dd11a93bf57a741cb6805dbe5c8fdc4e8cae6948f72 + template_sources: + - gemfiles/modular/runtime_heads.gemfile.example + gemfiles/modular/stringio/r2/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r2_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: 79363d83fca068144b8b74d775d1a5fe4b11c8c5248b4c258a297e7944676742 + template_sources: + - gemfiles/modular/stringio/r2/v3.0.gemfile.example + gemfiles/modular/stringio/r3/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r3_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: eb554757c3dca25b5418d25191706991366e6f4e84b57cd603bfcc35a476c5c6 + template_sources: + - gemfiles/modular/stringio/r3/v3.0.gemfile.example + gemfiles/modular/stringio/r4/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r4_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: 84bb7af9f12c2c959917e4acf15840b24cb6fe1dea5032ef029e498218d8c4b7 + template_sources: + - gemfiles/modular/stringio/r4/v3.0.gemfile.example + gemfiles/modular/stringio/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_vHEAD_gemfile + action: write + dest_sha256: e0497ab6dad9667b22725485b781e9d99349a079250eb29cb125d58f01f4a5be + input_fingerprint: 3c6d23e731ac692bab68f09cc5380274018941cef1d493ccb1ad1cb43cd5342c + template_sources: + - gemfiles/modular/stringio/vHEAD.gemfile.example + gemfiles/modular/style.gemfile: + recipe: template_source_application_gemfiles_modular_style_gemfile + action: write + dest_sha256: 071066457ce6081cbc03d10d777f741b84019071c78e45c23889f13658a0a4a6 + input_fingerprint: c89cdb00237db87bda0509c96941a2dbb7feede01550e0e8024ebe2bba40e1a9 + template_sources: + - gemfiles/modular/style.gemfile.example + gemfiles/modular/style_local.gemfile: + recipe: template_source_application_gemfiles_modular_style_local_gemfile + action: write + dest_sha256: 40aa02505958f8168e47b65af687d019a436343c2c477280c1fbc859a7bee624 + input_fingerprint: 4c623abaee0a61d91ddf13e474bad36130b1947606bf361875124afd140233c3 + template_sources: + - gemfiles/modular/style_local.gemfile.example + gemfiles/modular/templating.gemfile: + recipe: template_source_application_gemfiles_modular_templating_gemfile + action: write + dest_sha256: 6cedc39529daa9aac3a4cf13fe31a628b62a4a2428f5c4f8657c5a2fa027bb35 + input_fingerprint: b7e8890e1a806f6e16a53d7e76f4d7697e042dd7413316c252a97fcb3bd58e42 + template_sources: + - gemfiles/modular/templating.gemfile.example + gemfiles/modular/templating_local.gemfile: + recipe: template_source_application_gemfiles_modular_templating_local_gemfile + action: write + dest_sha256: ac6c3b130a2f692f8760f93d47162e01005338f193343c4b0a9436fa686dc9a5 + input_fingerprint: 0cb84948c7fc0181bf53695afcd6ac0e32245cb044c9fb59a3758798c90ee556 + template_sources: + - gemfiles/modular/templating_local.gemfile.example + gemfiles/modular/webrick/r4/v1.9.gemfile: + recipe: template_source_application_gemfiles_modular_webrick_r4_v1_9_gemfile + action: write + dest_sha256: 1ee940ff54d5ca3ce7fcff0d82ee9553386979656b9e220d5be5404d0991d5ea + input_fingerprint: d83158022e453ee739dde006b5bcc49dbd62ed54a9d727e523d5c05dd576682f + template_sources: + - gemfiles/modular/webrick/r4/v1.9.gemfile.example + gemfiles/modular/webrick/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_webrick_vHEAD_gemfile + action: write + dest_sha256: da545f591af987648ffbaba181707480a38dfb375db7d289617986ec2c2ca23b + input_fingerprint: 50a28cebdbaa36389bf606d71cf7e86f90d9060350de3bbfe59518004b8b2c3d + template_sources: + - gemfiles/modular/webrick/vHEAD.gemfile.example + gemfiles/modular/x_std_libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_gemfile + action: write + dest_sha256: e3917e90717d7f9f4393d847549a78c53de7f6c8de52a7f590b34b515fd6111a + input_fingerprint: 6c2e9cdd970847c55004ee46119c4cd9b6babd61a1be912e66dbbf8051d4314d + template_sources: + - gemfiles/modular/x_std_libs.gemfile.example + gemfiles/modular/x_std_libs/r2/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r2_libs_gemfile + action: write + dest_sha256: e80ec8ad06cb1b31ac982bc25cf7696987fca131aa1001eaefd0bf5cd379c273 + input_fingerprint: 07f0cec0e4ce45a85fb54a53e7ce712a1efe8043e63466f77273156b68b70255 + template_sources: + - gemfiles/modular/x_std_libs/r2/libs.gemfile.example + gemfiles/modular/x_std_libs/r3/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r3_libs_gemfile + action: write + dest_sha256: 546f8849f4267bb19aa10ff0de40be30957197f229e6887847181ea9127b2650 + input_fingerprint: c1a7d694b447788ba508215e36728b0f1dbcb4350b00bf5a396424a074e44b0d + template_sources: + - gemfiles/modular/x_std_libs/r3/libs.gemfile.example + gemfiles/modular/x_std_libs/r4/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r4_libs_gemfile + action: write + dest_sha256: 8c2582eaa218d216b98c86c933465295c8b4e43f3251ea388b9eaf6e471f8da6 + input_fingerprint: 2f6cc81817c995fe97e04da6e9ecbd406b2503ee6a4fb0c893324baccd9b4cd8 + template_sources: + - gemfiles/modular/x_std_libs/r4/libs.gemfile.example + gemfiles/modular/x_std_libs/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_vHEAD_gemfile + action: write + dest_sha256: d3133ec4c0638363a7fb025d19be7e95a615fd61c35ddb8d17f2280ee74a7486 + input_fingerprint: 3ea80feed4d91fadf40da79b37863330e84224fe8828527434d5b03c955267fb + template_sources: + - gemfiles/modular/x_std_libs/vHEAD.gemfile.example + lib/bash/merge/version.rb: + recipe: template_source_application_lib_bash_merge_version_rb + action: write + dest_sha256: 50dd126c1c8679b42a1d00e9ad206156154aa8803cd79d49a211b82a825d0eb5 + input_fingerprint: 3ee7673e52d077ca161354c2d0a82250b78cb6c8f0eb8a533652b833de69d6b0 + template_sources: + - lib/gem/version.rb.example + sig/bash/merge.rbs: + recipe: template_source_application_sig_bash_merge_rbs + action: write + dest_sha256: 4f5bccfd30e8db5390843302e58e20f8a4794549d130aab27bb3e191ea44348d + input_fingerprint: 0b4e80d58d3d6dcb3de42bfd9ab67fbd8e9ffacdd7f5a8ec413c9ce24fa103ce + template_sources: + - sig/gem.rbs.example + spec/spec_helper.rb: + recipe: template_source_application_spec_spec_helper_rb + action: write + dest_sha256: 3fb8571f2c50543575f75c980b00afd90f300cc8781c4210f581504377ff54e0 + input_fingerprint: 85b98235a0c88c9bd2837cfedfd3ae6958c9a1f670b18f4742674efcc913def3 + template_sources: + - spec/spec_helper.rb.example diff --git a/gems/bash-merge/Gemfile b/gems/bash-merge/Gemfile index d63bad96f..ee4139cd4 100644 --- a/gems/bash-merge/Gemfile +++ b/gems/bash-merge/Gemfile @@ -19,8 +19,7 @@ git_source(:gitlab) { |repo_name| "https://gitlab.com/#{repo_name}" } gemspec # Local workspace dependency wiring for *_local.gemfile overrides -nomono_requirements = ['~> 1.0', '>= 1.0.8'] -gem 'nomono', *nomono_requirements, require: false # ruby >= 2.2 +gem 'nomono', '~> 1.1', '>= 1.1.0', require: false # ruby >= 3.2.0 # Direct sibling dependencies (env-switched via STRUCTUREDMERGE_DEV) direct_sibling_gems = %w[ diff --git a/gems/bash-merge/Gemfile.lock b/gems/bash-merge/Gemfile.lock index c08db9d56..4207ef058 100644 --- a/gems/bash-merge/Gemfile.lock +++ b/gems/bash-merge/Gemfile.lock @@ -11,6 +11,8 @@ GEM specs: addressable (2.9.0) public_suffix (>= 2.0.2, < 8.0) + anonymous_loader (0.1.3) + version_gem (~> 1.1, >= 1.1.14) ansi (1.6.0) appraisal2 (3.2.0) bundler (>= 1.17.3) @@ -78,8 +80,8 @@ GEM bundler (>= 1.14) version_gem (~> 1.1, >= 1.1.4) geom2d (0.4.1) - gitmoji-regex (2.0.4) - version_gem (~> 1.1, >= 1.1.13) + gitmoji-regex (2.0.6) + version_gem (~> 1.1, >= 1.1.14) hexapdf (1.9.1) cmdparse (~> 3.0, >= 3.0.3) geom2d (~> 0.4, >= 0.4.1) @@ -92,20 +94,29 @@ GEM rdoc (>= 4.0.0) reline (>= 0.4.2) json (2.21.1) - kettle-dev (2.3.9) + kettle-dev (2.4.5) emoji_regex (>= 15.0) + kettle-gha-pins (~> 0.3, >= 0.3.1) + kettle-ndjson (~> 0.1, >= 0.1.1) kettle-rb (~> 0.1, >= 0.1.2) - kettle-test (~> 2.0, >= 2.0.4) + kettle-test (~> 2.0, >= 2.0.12) ruby-progressbar (~> 1.13) + tty-progressbar (~> 0.18) + kettle-gha-pins (0.3.1) + ruby-progressbar (~> 1.13) + tty-progressbar (~> 0.18) + version_gem (~> 1.1, >= 1.1.14) + kettle-ndjson (0.1.1) + version_gem (~> 1.1, >= 1.1.14) kettle-rb (0.1.5) - kettle-soup-cover (3.0.4) + kettle-soup-cover (3.0.5) kettle-wash (~> 0.1, >= 0.1.0) simplecov (>= 1.0) simplecov-cobertura (>= 4.0) simplecov-console (~> 0.9, >= 0.9.5) simplecov-rcov (~> 0.3, >= 0.3.7) simplecov_lcov_formatter (~> 0.9, >= 0.9.0) - kettle-test (2.0.12) + kettle-test (2.0.15) appraisal2 (~> 3.0, >= 3.0.6) backports (~> 3.0) rspec (~> 3.0) @@ -132,6 +143,8 @@ GEM racc (~> 1.4) nokogiri (1.19.4-arm64-darwin) racc (~> 1.4) + nokogiri (1.19.4-x86_64-darwin) + racc (~> 1.4) nokogiri (1.19.4-x86_64-linux-gnu) racc (~> 1.4) nokogiri (1.19.4-x86_64-linux-musl) @@ -190,11 +203,11 @@ GEM rspec-mocks (3.13.8) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) - rspec-pending_for (0.1.21) + rspec-pending_for (0.1.22) rspec-core (~> 3.0) ruby_engine (~> 2.0) ruby_version (~> 1.0) - rspec-stubbed_env (1.0.6) + rspec-stubbed_env (1.0.8) rspec-support (3.13.7) rspec_junit_formatter (0.6.0) rspec-core (>= 2, < 4, != 2.12.0) @@ -290,7 +303,7 @@ GEM silent_stream (1.0.12) logger (~> 1.2) version_gem (>= 1.1.8, < 3) - simplecov (1.0.2) + simplecov (1.0.3) simplecov-cobertura (4.0.0) rexml simplecov (~> 1.0) @@ -302,7 +315,7 @@ GEM simplecov (>= 0.4.1) simplecov_lcov_formatter (0.9.0) simplecov (>= 0.18) - sorbet-runtime (0.6.13351) + sorbet-runtime (0.6.13363) standard (1.56.0) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.0) @@ -326,9 +339,9 @@ GEM standard-custom (~> 1.0, >= 1.0.2) standard-performance (~> 1.9, >= 1.9.0) version_gem (~> 1.1, >= 1.1.13) - stone_checksums (1.0.6) - version_gem (~> 1.1, >= 1.1.13) + stone_checksums (1.0.7) stringio (3.2.0) + strings-ansi (0.2.0) strscan (3.1.8) terminal-table (4.0.0) unicode-display_width (>= 1.1.1, < 4) @@ -346,20 +359,27 @@ GEM parslet (~> 2.0) tree_sitter_language_pack (>= 1.13.2, < 2.0) version_gem (~> 1.1, >= 1.1.9) - tree_sitter_language_pack (1.13.3-aarch64-linux) + tree_sitter_language_pack (1.13.4-aarch64-linux) sorbet-runtime (~> 0.5) - tree_sitter_language_pack (1.13.3-arm64-darwin) + tree_sitter_language_pack (1.13.4-arm64-darwin) sorbet-runtime (~> 0.5) - tree_sitter_language_pack (1.13.3-x86_64-linux) + tree_sitter_language_pack (1.13.4-x86_64-darwin) + sorbet-runtime (~> 0.5) + tree_sitter_language_pack (1.13.4-x86_64-linux) sorbet-runtime (~> 0.5) tsort (0.2.0) - turbo_tests2 (3.2.0) + tty-cursor (0.7.1) + tty-progressbar (0.18.3) + strings-ansi (~> 0.2) + tty-cursor (~> 0.7) + tty-screen (~> 0.8) + unicode-display_width (>= 1.6, < 3.0) + tty-screen (0.8.2) + turbo_tests2 (3.2.3) parallel_tests (>= 3.3.0, < 6) rspec (>= 3.10) version_gem (~> 1.1, >= 1.1.14) - unicode-display_width (3.2.0) - unicode-emoji (~> 4.1) - unicode-emoji (4.2.0) + unicode-display_width (2.6.0) version_gem (1.1.14) webrick (1.9.2) yaml-converter (0.2.3) @@ -377,6 +397,9 @@ GEM ostruct rainbow yard + yard-lint (1.10.2) + yard (~> 0.9) + zeitwerk (~> 2.6) yard-relative_markdown_links (0.6.0) nokogiri (>= 1.14.3, < 2) yard-timekeeper (0.2.4) @@ -392,12 +415,13 @@ PLATFORMS aarch64-linux-gnu aarch64-linux-musl arm64-darwin - x86_64-linux + x86_64-darwin x86_64-linux-gnu x86_64-linux-musl DEPENDENCIES addressable (>= 2.8, < 3) + anonymous_loader (~> 0.1, >= 0.1.3) appraisal2 (~> 3.2, >= 3.2.0) appraisal2-rubocop (~> 1.0, >= 1.0.0) bash-merge! @@ -407,15 +431,15 @@ DEPENDENCIES debug (>= 1.1) erb (~> 6.0, >= 6.0.6) gem_bench (~> 2.0, >= 2.0.5) - gitmoji-regex (~> 2.0, >= 2.0.4) + gitmoji-regex (~> 2.0, >= 2.0.6) irb (~> 1.17) kettle-dev (~> 2.3, >= 2.3.7) - kettle-soup-cover (~> 3.0, >= 3.0.3) - kettle-test (~> 2.0, >= 2.0.12) + kettle-soup-cover (~> 3.0, >= 3.0.5) + kettle-test (~> 2.0, >= 2.0.15) kramdown (~> 2.5, >= 2.5.2) kramdown-parser-gfm (~> 1.1) mutex_m (~> 0.2) - nomono (~> 1.0, >= 1.0.8) + nomono (~> 1.1, >= 1.1.0) rake (~> 13.0) rbs (>= 3.0) rdoc (~> 6.11) @@ -430,21 +454,23 @@ DEPENDENCIES rubocop-ruby3_2 (~> 3.0, >= 3.0.6) ruby-progressbar (~> 1.13) standard (~> 1.56, >= 1.56.0) - stone_checksums (~> 1.0, >= 1.0.6) + stone_checksums (~> 1.0, >= 1.0.7) stringio (>= 3.0) tree_sitter_language_pack (~> 1.13, >= 1.13.3) - turbo_tests2 (~> 3.2, >= 3.2.0) + turbo_tests2 (~> 3.2, >= 3.2.2) webrick (~> 1.9) yaml-converter (~> 0.2, >= 0.2.3) yard (~> 0.9, >= 0.9.45) yard-fence (~> 0.9, >= 0.9.6) yard-junk (~> 0.1, >= 0.1.0) + yard-lint (~> 1.10, >= 1.10.2) yard-relative_markdown_links (~> 0.6) yard-timekeeper (~> 0.2, >= 0.2.4) yard-yaml (~> 0.2, >= 0.2.3) CHECKSUMS addressable (2.9.0) sha256=7fdf6ac3660f7f4e867a0838be3f6cf722ace541dd97767fa42bc6cfa980c7af + anonymous_loader (0.1.3) sha256=084a18e2439144d955447dc11dfc982f41fcd1583ad32d4d55151325dc44cb55 ansi (1.6.0) sha256=ac9ea0c0ea8d32fb4e271348e609963ac78882f34b73836c2a02b3622e666658 appraisal2 (3.2.0) sha256=ccd0b767ac4060cd7af6d16747459b6990f49c39c7b4fb1f7d1146b1e97c492f appraisal2-rubocop (1.0.0) sha256=b71410fbb014befda5340605a605b7f6f3f012739baf0acc5b4351b592c3258d @@ -476,15 +502,17 @@ CHECKSUMS erb (6.0.6) sha256=a9b24986700f5bf127c4f297c5403c3ca41b83b0a316c0cd09a096b56e644ae5 gem_bench (2.0.5) sha256=0dc0fb44a5a5eb7b2f5c1c68a5b0164d72007132822c012bac3abe976b199ead geom2d (0.4.1) sha256=ea0998ea90c4f2752e24fe13d85a4f89bee689d151316140ebcc6369bf634ed9 - gitmoji-regex (2.0.4) sha256=01410d3217940bd0e7b2299ec805245afe8d0f06a5d6d38f623d63a63c0ac34f + gitmoji-regex (2.0.6) sha256=d50649caccc8ad1b080f01e869f0909b135206d8b3ece2313ca31a9b0e39f14b hexapdf (1.9.1) sha256=2d1f6a3622e6bc2a70a707d4c3f3fa44f5552ecd9d899f6283abb07398a84884 io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc irb (1.18.0) sha256=de9454a0703a54704b9811a5ef31a60c86949fbf4013fcf244fabc7c775248e3 json (2.21.1) sha256=13a43df75d95641443f5702dff350f237164a9d811ff0f2c2800d4d980220583 - kettle-dev (2.3.9) sha256=03b2f72c6dda4d2c4401ee3c0c96853116c922766e7b5b04224434a49b571bfc + kettle-dev (2.4.5) sha256=3a451940796a671b7adc910db7c3da87899ebec7c5274921ca598345549ae7eb + kettle-gha-pins (0.3.1) sha256=b13a82a403af31880288fe65f85f2a24a93ae4740c0c7cbc15a35044d27aaa51 + kettle-ndjson (0.1.1) sha256=2d84314e8c911d6f560f2736e8f72019df6d811829674788ff33b3bbf518ed66 kettle-rb (0.1.5) sha256=0322a569860c86e70f90d5ebe72353b8720b7054c7efa9f9044857f5c972d29f - kettle-soup-cover (3.0.4) sha256=36d4df472362d2020d16411d7ce26ba2fe2a41fb8be64577ff9b5280acf99d86 - kettle-test (2.0.12) sha256=3a8e5c5f38db03a6f0a8896da6f3576d24e36f53796578c19aafaa2ba5a8ea52 + kettle-soup-cover (3.0.5) sha256=80abb42eb294fa5d3c8632c259a297c554fbc01902714461f3bf99a65190f5d0 + kettle-test (2.0.15) sha256=993b132ffec17fe82cc81c69f876e15d6eb610a4831df08dc01c0cce5c070caa kettle-wash (0.1.1) sha256=ae2e08b64c72c46ceed5ffa197ed859e85352f38ed0412fca2e18ce29b2dc4f9 kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa kramdown-parser-gfm (1.1.0) sha256=fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729 @@ -495,6 +523,7 @@ CHECKSUMS nokogiri (1.19.4-aarch64-linux-gnu) sha256=1269fb644a6de405057a53dd5c762b1209b43ca7424f839454d3dbc677c31a8f nokogiri (1.19.4-aarch64-linux-musl) sha256=35c65b9ce72b3bb03207bdbe7067915019dc18c1b9b59139684bd6690fdd01af nokogiri (1.19.4-arm64-darwin) sha256=a46db9853286e6597b36ebc6953817d15acf3a299583eb3f89fdc6f91dd63527 + nokogiri (1.19.4-x86_64-darwin) sha256=7fd17057d3e1f00e9954a74b3cd76595d3d4a5ef233b7ed9599047c204f70551 nokogiri (1.19.4-x86_64-linux-gnu) sha256=379fae440b28915e3f19d752ce2dcf8465ed2b2fbefd2a7ca0dd497bc981a06a nokogiri (1.19.4-x86_64-linux-musl) sha256=17dfb7c1fa194ae02fbf7c51a7afc8d278045ab3fdacfd86f91d02d7b274470b nomono (1.1.0) sha256=463dd4c79da02a855739a1b5483190d527b7868688be905e84abdb3449b32c88 @@ -524,8 +553,8 @@ CHECKSUMS rspec-core (3.13.6) sha256=a8823c6411667b60a8bca135364351dda34cd55e44ff94c4be4633b37d828b2d rspec-expectations (3.13.5) sha256=33a4d3a1d95060aea4c94e9f237030a8f9eae5615e9bd85718fe3a09e4b58836 rspec-mocks (3.13.8) sha256=086ad3d3d17533f4237643de0b5c42f04b66348c28bf6b9c2d3f4a3b01af1d47 - rspec-pending_for (0.1.21) sha256=c87fda50c20f8faca72d9cfa6a936abffd37860343f14aced95bbb29b8ae96bf - rspec-stubbed_env (1.0.6) sha256=6467a6eb0f72146d443ffb0c5a2a549d8812e59c04fbc81e03cd914ebf1f28dc + rspec-pending_for (0.1.22) sha256=49dc647473f8c8ea4ccc1a33813537dd94b913ef7ec5a8689896101eaacb71cf + rspec-stubbed_env (1.0.8) sha256=b23c4dd5e5d6a0cf0c5b4f6ed3f3678d78e4be9ec247ea9abf0669d20b490535 rspec-support (3.13.7) sha256=0640e5570872aafefd79867901deeeeb40b0c9875a36b983d85f54fb7381c47c rspec_junit_formatter (0.6.0) sha256=40dde674e6ae4e6cc0ff560da25497677e34fefd2338cc467a8972f602b62b15 rubocop (1.88.2) sha256=8def251c90cd955feb4daa3edc0ab56893250c4ce90ef81e6c80c03f9a939bbf @@ -551,39 +580,44 @@ CHECKSUMS ruby_engine (2.0.3) sha256=ca2ae7def8cfcdc2bfb6a186d36d5d59c8b403245dc0256c3802b767fa278aaa ruby_version (1.0.3) sha256=5930f9950746b7e6c973184398ee364ee7440b170fef7922b9f5cdf317f1ccb5 silent_stream (1.0.12) sha256=377c43aa10033fe90c33b39ea8cd97d79f2d1c4856df598efc56f3091f3ae782 - simplecov (1.0.2) sha256=c6459434efe4b948b46477cc2df2faa73ab365f83a33c7c17f81262f4f7f1244 + simplecov (1.0.3) sha256=38ef0514f16ae7562f0d0f4df02610071115103d301b6de7dacbcc000082e39b simplecov-cobertura (4.0.0) sha256=e4fb3159b1ecea545b44f5452a8611305323e78ad23eae8aed35924d072e01ea simplecov-console (0.9.5) sha256=b1108bcfff5f210143e2b8301698c367b01586f20d25a73e95475a5df6fc6ff6 simplecov-rcov (0.3.7) sha256=372f50bf6df6b6350b7d0c840f2f8bdabe021861a43c26877b747c9ac96139fc simplecov_lcov_formatter (0.9.0) sha256=4c1839bb31dcf7a8f7a6474c94ed228aa03b994e9dd5e1965e58b4121b049bed - sorbet-runtime (0.6.13351) sha256=f8fee17c6e3edf835dc6823d26afb9a7c8969c6710d1fabe2fb43f4e0c15c64f + sorbet-runtime (0.6.13363) sha256=f1f0b2e946fb3cd76b9d8e3d85459cdaf7f5466331a400cafcf008e508b6d2c3 standard (1.56.0) sha256=ae2af4d9669589162ac69ed5ef59dcf9f346d4afc81f7e62b84339310dfcb787 standard-custom (1.0.2) sha256=424adc84179a074f1a2a309bb9cf7cd6bfdb2b6541f20c6bf9436c0ba22a652b standard-performance (1.9.0) sha256=49483d31be448292951d80e5e67cdcb576c2502103c7b40aec6f1b6e9c88e3f2 standard-rspec (0.5.0) sha256=64d396524a65af47f5331b423d8cdd313e0267401647bb7892489ca89dad2973 standard-rubocop-lts (2.0.10) sha256=89708a505b7d8b24d2ac399a7520fcb9e764abc2ecb4289b631b5fe0e3b76617 - stone_checksums (1.0.6) sha256=c775f830513d6c6ab26e31d1a5fbecd4c4e39002663d4d9f8fa96e97990b5298 + stone_checksums (1.0.7) sha256=faf7a175da7c4f32777c5292a0128b06eec183b3cc3a0b382529b21800300626 stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1 + strings-ansi (0.2.0) sha256=90262d760ea4a94cc2ae8d58205277a343409c288cbe7c29416b1826bd511c88 strscan (3.1.8) sha256=aae2db611a225559f21ffbb71765c9a4e60fd262534a9ea84f4f11c7f32f679e terminal-table (4.0.0) sha256=f504793203f8251b2ea7c7068333053f0beeea26093ec9962e62ea79f94301d2 thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73 timecop (0.9.11) sha256=41284dc6e5041f2184f781ace766f942108c842f8d8c1386a26e6343decc7542 timecop-rspec (1.0.3) sha256=005f14841bb606dcaefb060e321b5388e2e59537742bee8b3a9a9a40e598fab9 - token-resolver (2.0.5) sha256=b852f924287ffb58a440856e862b056c8ad97e74b4b2526cee43e0771f40c25c + token-resolver (2.0.5) tree_haver (7.1.0) - tree_sitter_language_pack (1.13.3-aarch64-linux) sha256=55ffc7c87868cb45658338363d9eba51b4a8b0259aa88e4de368d2bd1d52fea4 - tree_sitter_language_pack (1.13.3-arm64-darwin) sha256=bc2498db605f212a1dbd2465ed3f65190d7da786f6ed5d30fcf958121aeb4a5c - tree_sitter_language_pack (1.13.3-x86_64-linux) sha256=1ffd045bd236ea54f58c5872ee66121d01033359c1f28f375b7fd4a4b5620cf9 + tree_sitter_language_pack (1.13.4-aarch64-linux) sha256=f7bb95fd59afda1e1b91a7b6ad4df244c585a863e94e4a0f492ef2336a5358b8 + tree_sitter_language_pack (1.13.4-arm64-darwin) sha256=2b48ded1f5feae3de20be1471aaa7c211601ac1c71ca6d4789cf31560a854132 + tree_sitter_language_pack (1.13.4-x86_64-darwin) sha256=8a2460d9029e7610b863d2481e2da0078f87b18bf8668070ccb5ecce71e272d8 + tree_sitter_language_pack (1.13.4-x86_64-linux) sha256=ae3ae718534088b2dc76bd93e7d093f11e8d19188bf47edfcd962df906e1af97 tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f - turbo_tests2 (3.2.0) sha256=8b35421548399d1923567b177970f42671c65695b93cdd134d78fbcbab85dff0 - unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42 - unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f + tty-cursor (0.7.1) sha256=79534185e6a777888d88628b14b6a1fdf5154a603f285f80b1753e1908e0bf48 + tty-progressbar (0.18.3) sha256=6cbb4260e55e74a9180d502143eb6a467d2c8e51bf5f3c9509fb5cacc3d4a5f6 + tty-screen (0.8.2) sha256=c090652115beae764336c28802d633f204fb84da93c6a968aa5d8e319e819b50 + turbo_tests2 (3.2.3) sha256=f77fc0799014c1d7890977e117cf39317bc4544de2c88a55149ed920b4cff942 + unicode-display_width (2.6.0) sha256=12279874bba6d5e4d2728cef814b19197dbb10d7a7837a869bab65da943b7f5a version_gem (1.1.14) sha256=6b7306c7e9416d06067561981ab3444e2cecb844f26cc325ae3c27b44cf85613 webrick (1.9.2) sha256=beb4a15fc474defed24a3bda4ffd88a490d517c9e4e6118c3edce59e45864131 yaml-converter (0.2.3) sha256=d35e69e547610d9e347672cc277fcb7d71dff3c53a942e66f82b1c64022ada72 yard (0.9.45) sha256=52e211493f7cb8a3ebf7e104a25a1e73937a3103092545d34cb88fafebb3dc51 yard-fence (0.9.6) sha256=3d1dbf4e3df462ac78b8bd2e01cf740a2de20168387c929aca31a0bcee490659 yard-junk (0.1.0) sha256=e85fe2ec1afa47313decd333447b53458cb1ed49b510b70015fdc3041a94bcdd + yard-lint (1.10.2) sha256=3e595709d088a8cc827e706a4146b447eb6a907ee375d06c11077369d00717f6 yard-relative_markdown_links (0.6.0) sha256=3e5ffa85cbad9bac70bee5421774b190fb25d3bdf489323a5b3534f647d1a70e yard-timekeeper (0.2.4) sha256=62f8d001d737c6e2ac688e7b37386f958dceb0f6aff9c909575e1bec8d20775a yard-yaml (0.2.3) sha256=fe5fef18819e1cbd05bb8f1b9e1baad6bf70c28125eb75b57bbf6397b0831812 diff --git a/gems/bash-merge/bash-merge.gemspec b/gems/bash-merge/bash-merge.gemspec index 86240b5af..183141053 100644 --- a/gems/bash-merge/bash-merge.gemspec +++ b/gems/bash-merge/bash-merge.gemspec @@ -115,18 +115,20 @@ Gem::Specification.new do |spec| spec.add_development_dependency('require_bench', '~> 1.0', '>= 1.0.4') # ruby >= 2.2.0 # Testing - spec.add_development_dependency('appraisal2', '~> 3.2', '>= 3.2.0') # ruby >= 1.8.7, for testing against multiple versions of dependencies - spec.add_development_dependency('kettle-test', '~> 2.0', '>= 2.0.12') # ruby >= 4.0.0 - spec.add_development_dependency('turbo_tests2', '~> 3.2', '>= 3.2.0') # ruby >= 2.4.0, default kettle-test runner + # Loads version files in anonymous namespaces for coverage without constant redefinition warnings. + spec.add_development_dependency('anonymous_loader', '~> 0.1', '>= 0.1.3') # ruby >= 2.2.0 + spec.add_development_dependency('appraisal2', '~> 3.2', '>= 3.2.0') # ruby >= 1.8.7, for testing against multiple versions of dependencies + spec.add_development_dependency('kettle-test', '~> 2.0', '>= 2.0.15') # ruby >= 4.0.0 + spec.add_development_dependency('turbo_tests2', '~> 3.2', '>= 3.2.2') # ruby >= 2.4.0, default kettle-test runner # Releasing spec.add_development_dependency('ruby-progressbar', '~> 1.13') # ruby >= 0 - spec.add_development_dependency('stone_checksums', '~> 1.0', '>= 1.0.6') # ruby >= 2.2.0 + spec.add_development_dependency('stone_checksums', '~> 1.0', '>= 1.0.7') # ruby >= 2.2.0 # Development tasks # The cake is a lie. erb v2.2, the oldest release, was never compatible with Ruby 2.3. # This means we have no choice but to use the erb that shipped with Ruby 2.3 # /opt/hostedtoolcache/Ruby/2.3.8/x64/lib/ruby/gems/2.3.0/gems/erb-2.2.2/lib/erb.rb:670:in `prepare_trim_mode': undefined method `match?' for "-":String (NoMethodError) # spec.add_development_dependency("erb", ">= 2.2") # ruby >= 2.3.0, not SemVer, old rubies get dropped in a patch. - spec.add_development_dependency('gitmoji-regex', '~> 2.0', '>= 2.0.4') # ruby >= 2.4 + spec.add_development_dependency('gitmoji-regex', '~> 2.0', '>= 2.0.6') # ruby >= 2.4 end diff --git a/gems/bash-merge/bin/kettle-gha-pins b/gems/bash-merge/bin/kettle-gha-pins new file mode 100755 index 000000000..c743cecac --- /dev/null +++ b/gems/bash-merge/bin/kettle-gha-pins @@ -0,0 +1,16 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# +# This file was generated by Bundler. +# +# The application 'kettle-gha-pins' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) + +require 'rubygems' +require 'bundler/setup' + +load Gem.bin_path('kettle-gha-pins', 'kettle-gha-pins') diff --git a/gems/bash-merge/gemfiles/modular/coverage.gemfile b/gems/bash-merge/gemfiles/modular/coverage.gemfile index b93014b6b..b4c26a504 100644 --- a/gems/bash-merge/gemfiles/modular/coverage.gemfile +++ b/gems/bash-merge/gemfiles/modular/coverage.gemfile @@ -7,7 +7,7 @@ if ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false').zero? # Coverage (remote/released) platform :mri do - gem 'kettle-soup-cover', '~> 3.0', '>= 3.0.3', require: false + gem 'kettle-soup-cover', '~> 3.0', '>= 3.0.5', require: false end else eval_gemfile 'coverage_local.gemfile' diff --git a/gems/bash-merge/gemfiles/modular/coverage_local.gemfile b/gems/bash-merge/gemfiles/modular/coverage_local.gemfile index e0339ae34..ecfa7a388 100644 --- a/gems/bash-merge/gemfiles/modular/coverage_local.gemfile +++ b/gems/bash-merge/gemfiles/modular/coverage_local.gemfile @@ -17,7 +17,8 @@ platform :mri do path_env: 'KETTLE_DEV_DEV', vendored_gems_env: 'VENDORED_GEMS', vendor_gem_dir_env: 'VENDOR_GEM_DIR', - debug_env: 'KETTLE_DEV_DEBUG' + debug_env: 'KETTLE_DEV_DEBUG', + root: %w[src my kettle-dev] ) if ENV.fetch('GALTZO_FLOSS_DEV', 'false').casecmp('false') != 0 diff --git a/gems/bash-merge/gemfiles/modular/documentation.gemfile b/gems/bash-merge/gemfiles/modular/documentation.gemfile index 9d4535f12..d0f4d4a76 100644 --- a/gems/bash-merge/gemfiles/modular/documentation.gemfile +++ b/gems/bash-merge/gemfiles/modular/documentation.gemfile @@ -12,6 +12,7 @@ gem 'kramdown-parser-gfm', '~> 1.1', require: false # Ruby >= 2.3 gem 'yaml-converter', '~> 0.2', '>= 0.2.3', require: false # Ruby >= 3.2 gem 'yard', '~> 0.9', '>= 0.9.45', require: false gem 'yard-junk', '~> 0.1', '>= 0.1.0', require: false # Ruby >= 3.1 +gem 'yard-lint', '~> 1.10', '>= 1.10.2', require: false # Ruby >= 3.2 gem 'yard-relative_markdown_links', '~> 0.6', require: false if ENV.fetch('GALTZO_FLOSS_DEV', 'false').casecmp('false').zero? diff --git a/gems/bash-merge/gemfiles/modular/templating.gemfile b/gems/bash-merge/gemfiles/modular/templating.gemfile index a672de184..a7e6c1f06 100644 --- a/gems/bash-merge/gemfiles/modular/templating.gemfile +++ b/gems/bash-merge/gemfiles/modular/templating.gemfile @@ -12,7 +12,7 @@ end if kettle_remote # Template/plugin checks for released installs. - gem 'kettle-drift', '~> 1.0', '>= 1.0.6', require: false + gem 'kettle-drift', '~> 1.0', '>= 1.0.7', require: false end # Set STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local development with path-based dependencies. diff --git a/gems/bash-merge/gemfiles/modular/templating_local.gemfile b/gems/bash-merge/gemfiles/modular/templating_local.gemfile index f8ee64dc9..16a6c2236 100644 --- a/gems/bash-merge/gemfiles/modular/templating_local.gemfile +++ b/gems/bash-merge/gemfiles/modular/templating_local.gemfile @@ -65,7 +65,8 @@ platform :mri do path_env: 'KETTLE_DEV_DEV', vendored_gems_env: 'VENDORED_GEMS', vendor_gem_dir_env: 'VENDOR_GEM_DIR', - debug_env: 'KETTLE_DEV_DEBUG' + debug_env: 'KETTLE_DEV_DEBUG', + root: %w[src my kettle-dev] ) end end diff --git a/gems/bash-merge/lib/bash/merge/version.rb b/gems/bash-merge/lib/bash/merge/version.rb index 55b28eb7d..19630999c 100644 --- a/gems/bash-merge/lib/bash/merge/version.rb +++ b/gems/bash-merge/lib/bash/merge/version.rb @@ -2,9 +2,12 @@ module Bash module Merge + # Version namespace for this gem. module Version + # Current gem version. VERSION = '7.1.0' end + # Current gem version exposed at the traditional constant location. VERSION = Version::VERSION # Traditional Constant Location end end diff --git a/gems/bash-merge/spec/bash/merge/version_spec.rb b/gems/bash-merge/spec/bash/merge/version_spec.rb index 06bbc7ebc..2d33ccb53 100644 --- a/gems/bash-merge/spec/bash/merge/version_spec.rb +++ b/gems/bash-merge/spec/bash/merge/version_spec.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true require 'spec_helper' +require 'anonymous_loader' RSpec.describe Bash::Merge::Version do it_behaves_like 'a Version module', described_class @@ -14,4 +15,11 @@ expect(Bash::Merge::VERSION).to match(/\A\d+\.\d+\.\d+/) end end + + it 'executes the version file for coverage without redefining constants' do + path = File.expand_path('../../../lib/bash/merge/version.rb', __dir__) + anonymous_namespace = AnonymousLoader.load(files: path) + + expect(anonymous_namespace::Bash::Merge::Version::VERSION).to eq(described_class::VERSION) + end end diff --git a/gems/binary-merge/.structuredmerge/kettle-jem.lock b/gems/binary-merge/.structuredmerge/kettle-jem.lock new file mode 100644 index 000000000..6665ef1fa --- /dev/null +++ b/gems/binary-merge/.structuredmerge/kettle-jem.lock @@ -0,0 +1,527 @@ +--- +version: 1 +template_state: + version: 7.1.0 + applied_at: '2026-07-26' + changelog_replay: + last_entry_key: kettle-jem-template-20260726-002 + last_entry_date: '2026-07-26' + checksums: + ".aiignore.example": 48a5dfdd93afd1a15fdce39cc28ca9920263f00018b0968ab031fa744521e5ce + ".config/mise/env.sh": aeea5a2ab489ba6e5467ae8de6e386ec8c8fe4ff31a044e69d0cd6a092dd6654 + ".devcontainer/apt-install/devcontainer-feature.json.example": 273a07f9d3926e1b6287c37709a469ee05d724cfedae62ad3b0cd8c09befc9ec + ".devcontainer/apt-install/install.sh.example": b61e020b60ca172bb7b658e63c9cd4342e49bda0531a6b19b36475e515ad20b0 + ".devcontainer/devcontainer.json.example": 4a80d471379b9720cc65cc89543cbbc0a7be87b188a818160296577c4e87606f + ".devcontainer/scripts/setup-tree-sitter.sh.example": c34f48d7bac8561fb780c4c7a81cec5004c3ac0edc11f229799ec9a4e3eccd54 + ".env.local.example": 35cb867e8bacb75252a85c29f78899b36d0d1843511ae1ba1fbc7da863b128b3 + ".envrc.example": b7232f4bae0fb399cc9c9cdc4a5eb694bd69623aeeadcbab18c9990e443040a1 + ".envrc.no-osc.example": b7232f4bae0fb399cc9c9cdc4a5eb694bd69623aeeadcbab18c9990e443040a1 + ".gemrc.example": 77b1c36ae6f91bedf08b99e662a971b02f7e66e0d65267805d068d30ff118aba + ".git-hooks/commit-msg.example": d858575bf70d6175fdd7656e9ba0b41672de3fb49163181efe3fbc9e40306024 + ".git-hooks/commit-subjects-goalie.txt.example": bb1179c8911af8afeb1f9a604b3de789d4a4b33d9d4a7743b3145998c15b0a94 + ".git-hooks/footer-template.erb.txt.example": 70ed3616ee04a4062126f53892cc255e7aa2b66741fe22d6b372f7df99676718 + ".git-hooks/prepare-commit-msg.example": 35266ead46a6385d20eeff7ec64afedef33a2db18d1238b8662a1bc758f05335 + ".github/.codecov.yml.example": d6ef3208a90eca74f79d8ff4e5ae21a915562b075cb17978b1eaadc231dd4e85 + ".github/FUNDING.yml.example": fd27dff7db58f4e8a39c35ccb60e39422517038501a5f2a99ef2aaeea2d1fa5d + ".github/FUNDING.yml.no-osc.example": 8f1a867b1921b3dec1c63f7a7cd629362c1fb1ad0d1052494b48ba746b0fc5c6 + ".github/copilot_instructions.md.example": f5c5791df013e89e170fd436379b14e251d0ff4cb6b330a6d961e80c9071f2d3 + ".github/dependabot.yml.example": db84d1c13f64100d2f48212c022f0d985e9061ca76c36d82e7057fd845ecd528 + ".github/workflows/auto-assign.yml.example": 57b8159a15bf49946506e1b624934feed6a1cc8f71ad68968323c87acac56c67 + ".github/workflows/coverage.yml.example": 524ef90e0fd2ca0b846c464197d8d43cd6a57834303c9526ea0bd277f2beb3e1 + ".github/workflows/current.yml.example": dbc82e7593804c05d2c217d5c02d79d5480b5a0d1e04eea99b7235f35f520216 + ".github/workflows/dep-heads.yml.example": d94122f3246e17774fa015dde8d9a5772a66e54f817d44e62716f6a61d899050 + ".github/workflows/dependency-review.yml.example": a895d52257a7112d796fabf349ced1079bed93e81e3aa9cb088f9af3f44d1e5f + ".github/workflows/discord-notifier.yml.example": f9cc83a87058bd420426444510a1dd1520fd7cc15af50832ad52c25c5766be94 + ".github/workflows/framework-ci.yml.example": 112ef6178fcf115fe9e0a248ec6cb4af748ce89142fd7dba30e9abb6ebdc17be + ".github/workflows/heads.yml.example": aa55cf9bb4ae35fe126384003e8af4b91e685bcf370263b3710bd429f6c44343 + ".github/workflows/jruby-10.0.yml.example": 0eaf6d10c304de606684d420bbd88cfc90fe9d139a56773e011c6abaa6c5fc91 + ".github/workflows/jruby-9.1.yml.example": 9062f9de8843da1f8c4da8f991bbd24f9540c63927deaf311649f3088a672d5b + ".github/workflows/jruby-9.2.yml.example": f330363fc0af7dd0be24c140c919c07737a3168c5647012e34ba0c36634005e5 + ".github/workflows/jruby-9.3.yml.example": 3b26b3a978d0018f01e6d87651936f2e92fcb58d62bcdf11822eca3c2656d303 + ".github/workflows/jruby-9.4.yml.example": a830b92838a09b9316a81745b48ff35bed9461783154fc6d0e52df0d6aa319f3 + ".github/workflows/jruby.yml.example": f10f779cd3be37d2ffa593d9a83ba68a8684bb849ed1c4d9ae41706ff12571e1 + ".github/workflows/license-eye.yml.example": 23db5d6ee9b5382de1f2042642219d65214e09c3f975c418d4dec4d46375036c + ".github/workflows/locked_deps.yml.example": c7eaa20cc7d7de6209e576274e592ffb4838177ae6ab56096b2439d0fa1bc31c + ".github/workflows/opencollective.yml.example": fe7d8d346f9ab055b6779abf62972291460d05275e2c4d191e291e8cd73b0e6b + ".github/workflows/ruby-2.3.yml.example": 90474f1a462edc877983b91dd40d942e82b28262f1afdca74cddcdd52d7e8c26 + ".github/workflows/ruby-2.4.yml.example": fe84af4efef6934d7ff63efa2a4c85994f2ea1887f61b1ab5d30a21365429ec9 + ".github/workflows/ruby-2.5.yml.example": c40db157514168442311191ebc88853dfb36447a90171a73f42d435e92d02f05 + ".github/workflows/ruby-2.6.yml.example": 87bb8537d0047217651a327353df670fed3ea9e4a5350e965ed80af9ce32d9d3 + ".github/workflows/ruby-2.7.yml.example": 5650ec41bc67553457019a772a3343578872749d21268d5e7fb1715ebf4e2351 + ".github/workflows/ruby-3.0.yml.example": f9d7c7dfc6eaea1ca12c92e0b98b4ba8fed5726d26459bb410ab9812a741e5b9 + ".github/workflows/ruby-3.1.yml.example": e44879cd3ea47d00e44e573745d7f95fc1a561a9c1d69d72529d0c07294bd26e + ".github/workflows/ruby-3.2.yml.example": c28b9179778157e6b4807a775968840ff1c6bf2fd847ce1ce694b9a77df42f6e + ".github/workflows/ruby-3.3.yml.example": 033e4f0ed7ded17f5d13fde6674ec9fd555cfe58c11f57f7dc2f1fee21c718b6 + ".github/workflows/ruby-3.4.yml.example": 474a96468f101b8fddac4cecaa0629f28d5ceec0c784329affdc471eb1e3e889 + ".github/workflows/style.yml.example": dea7243a91dc164a172e90b7933de58cdd353d7e5df1beac22cec63125edc086 + ".github/workflows/templating.yml.example": 327b933509e1ade4d53df5756f6407028b479c51847775db494fb9c25e66ce5a + ".github/workflows/truffle.yml.example": 56fa53dc206976c81db7cc3530f4d19d89ea5859c1245492e5a5ecb9304de63e + ".github/workflows/truffleruby-22.3.yml.example": d6773529e6961039b5cc4a145c77623881aa3857d875bbb415ca0f8147166d7a + ".github/workflows/truffleruby-23.0.yml.example": abcd23a18d748528f7558d4ab7bc4830796cb686ca7371f67a8ddaf6d0362d72 + ".github/workflows/truffleruby-23.1.yml.example": 11af8a3f0823ed3ab17e759d81b8a4551eb7af8096ce0b5a9501fd83cada1cd2 + ".github/workflows/truffleruby-24.2.yml.example": 2c4ff82eeaa3bdb19391f04cd2f41b07733986a053d5ac8498176fef5f890e5e + ".github/workflows/truffleruby-25.0.yml.example": 42cdfdcd21c7b3bb1b87c22c2bc7a98135a442742df5f9a45e2b4e03838c1e7f + ".github/workflows/truffleruby-33.0.yml.example": 2a45e428ca13dac56ee75526b80eac477b61697ca06c94680e1eb05d21dbc25a + ".github/workflows/unlocked_deps.yml.example": 15f5ccbe811aa5a8650c2aa69b32f4f6a24d5f8bd3aae2dcbec92cbe3a51f0a7 + ".gitignore.example": 14864a0c88be3f8c122ab3032efeb782ba5e035013231038acf746a400437a3e + ".gitlab-ci.yml.example": ef64afa9855ebb59bbc87446fa9533238d3ce180966ceb19649a7f165715b92b + ".idea/.gitignore.example": b44a5aa16bf9fe5635558af347454b05a76d600084308a9f43d4d0b54789ecab + ".licenserc.yaml.example": 8787fa7bddce911f8ba47bda3eb6ad9786b6650d5d94786723e88773098ed37d + ".opencollective.yml.example": 9ad9b83fe54f0bddac7fb614575585d98f78df0e181ee70a7acd0168d26e3142 + ".qlty/qlty.toml.example": cf3d750d2328f6c057b08b7ce3d7ec00a4056c7f0eedda59af321d6caca03553 + ".rspec.example": 40d3f3ff435b0f9e5863772a95df8725b939c2dc11aead2bca68dcd6d85a9788 + ".rubocop.example": 591e4b45430e85b0dd460cc11c70650912fa2734988420b934109d06a749344f + ".rubocop.yml.example": 47f9a031022db67c964dd76ee2e8dfee21295a1877ca4d6233d3de39d114af73 + ".rubocop_rspec.yml.example": 288ad75e7eb14d87d80fafe6f7272217be5c57547536ee56c780a7d10ac7ec74 + ".simplecov.example": ffc76492effe905cc65797389fc8050fda136652ac078a80303cd084b349ef28 + ".structuredmerge/git-drivers.toml.example": 9d241a44c9edffcdbd3da018fa188a238089c3d1635040924df594a6929a4f97 + ".structuredmerge/kettle-jem.yml.example": 954cfc9e35cd20e46376426675e985bf8a0de19ff5069bf7be24b574837be615 + ".yard-lint.yml.example": 90def46867c9436b4e177c47d91fc8165f4602e335715aecc39f5587ae20b55b + ".yardignore.example": 821f453c609df7d46145d675424b39dfbe6dfdca8edac5f367b85fff48502455 + ".yardopts.example": 6fd6f2701713096a8a9ea095c213bbc68eeef37797c4754d97837e3229a3a5f6 + AGENTS.md.example: aec69512cbe17004660ac0abfabb9ec91a5c51c2cd82c10f30f08886f9bf64a7 + AGPL-3.0-only.md.example: d8a6cc31abc16b6748c7a21f21611f5a1ec33f67d22ca23d7da1c19b95496bee + Appraisal.root.gemfile.example: 8724e3f6faea995be655ac49369bec64a70710112b1f65707fa38f1fd2fd3254 + Appraisals.example: 9cb1abcfb1a0bd6d859ca0705efb874dbe546754c8c71f9f95025ff6817f1471 + Big-Time-Public-License.md.example: b0c02a112c9eee0ed69f05fd8f22277a2f8bc62d447b6cb75d6df560e05bf431 + CHANGELOG.md.example: 73459e50dad34d84db88844c993d975097557bdf5229e101b0d1339de6f98ffc + CHANGELOG.transfer.md: 9c201849117c9d4234724c4599643dd42fdce5f0a673a1abee97b97e556c301b + CITATION.cff.example: e404ea0a7919d78a83d53d80e211d17b9663576aa606583b709795dc023fd75c + CODE_OF_CONDUCT.md.example: f1ad532f1860f73ef774c6b27a26d41f4bc1cb8813034f5957487766ebb0986b + CONTRIBUTING.md.example: 63d339848c615f2c181d6b0565c42e56371eedb66f310d146cb7da297f7bc641 + FUNDING.md.example: 455bbb2b55d934283a2e7c16b59c321116c53310a85a718b7cf8ca44e9e3721e + FUNDING.md.no-osc.example: 05a85d5faf22d5ea5721622d242080447cf318d3277d9d529e438be1c9d5a351 + Gemfile.example: 6b2d72ec8a630cce515b7b528022071b13eee863c3164763df03792a5004345a + IRP.md.example: 85d8887d9b0e77f7fa9835ca5b9be31f586fdc94764ed1819af2a9a7fec98e96 + LICENSE.md.example: 120edf5f23173ebbdb5ad384ffc2e9b97e62aa6d0e61b733c003bd4db1b08276 + MIT.md.example: 365fce2a82f9d258ada9a527accfd5754b406ee9cdd8f8ed86bbec64b8c42ab2 + PolyForm-Noncommercial-1.0.0.md.example: ffcca38841adb694b6f380647e15f17c446a4d1656fed51a1e2041d064c94cc8 + PolyForm-Small-Business-1.0.0.md.example: 2f81e317d36f83a199c9fa10bcb250775fd90510303eaeb15aac2d8f0c1fc2d6 + README.md.example: 452446a44d120df26cde68fbc7aff086fa815769c989b994ebc1432ea927974f + REEK: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 + RUBOCOP.md.example: c09e5533ccc59b70a2efa05c99f66e521137c1053d3c12eb43509cebd5b68b0e + Rakefile.example: 569803e726b07ea26267fec6891367a3096a0dff3c266269a7081d36afe496af + SECURITY.md.example: ee9411aa85f36d88363fdaea7a1baea4362b6ec112cf2688e711b05de1d3144c + bin/setup.example: 0ac35089c95a91d8973fe7a318bf9fd98b9f8e00db92c5d9ca6cd858abb8d41b + certs/pboling.pem.example: 18956f60643666cc181e2743b3b3691bec08c5326f514f60af54d0cdb9ebc554 + gem.gemspec.example: 9989cc8a1cd125586ea807eaed549eaecc044711d31f17dd7bac2a0815b28b1a + gemfiles/modular/benchmark/r4/v0.5.gemfile.example: 5bc3190090ae456df1a8cce28dd47a7fb293495f6d845ec7e53a7a8b50f14ae1 + gemfiles/modular/benchmark/vHEAD.gemfile.example: ca6cd52c55c3082759c6ddc97638970f12d953aec1822470823d316086aa6e25 + gemfiles/modular/cgi/r4/v0.5.gemfile.example: c2d14a39377a2435419ceaca22a3421ebd899e9cba943df8a90b576a33624870 + gemfiles/modular/cgi/vHEAD.gemfile.example: 9ff3dc789b3279642876c0aad4b0094c1139bb8fbbf36daab804d3b2b3a60b43 + gemfiles/modular/coverage.gemfile.example: 915fc161ad574fdbc071bc733b69b27e94bd7a4c68cc4f58da267c9a0987f3e8 + gemfiles/modular/coverage_local.gemfile.example: 928d5f260d7b119c038baa56da9fb78dd524dee613aea33ab72894bbce5c506e + gemfiles/modular/debug.gemfile.example: 0a508bfb02e51b75394b43f4f09d98174dac36ead41cba09c1f730671a1f5905 + gemfiles/modular/documentation.gemfile.example: e15f51e4d14ad2216b6de16c323787945bd225073d70a78420f4c99c98c1ecd1 + gemfiles/modular/documentation_local.gemfile.example: 84a20f5d4b0feb94c2cf2f7a8dce8f682f1483498e41484c2b447a5661fd1870 + gemfiles/modular/erb/r2.3/default.gemfile.example: 9da0d08fb6a299b965c37fe85efcaebd9eb0a82b2ea35fdc157c41bd75431396 + gemfiles/modular/erb/r2.6/v2.2.gemfile.example: '01787cbdf7136c0d75cc7b734c6bb3d2ef6c70d6c1c50e7d0ad2112c0f8ef8e7' + gemfiles/modular/erb/r2/v3.0.gemfile.example: 3793e7dc9ef23a7ccd893d48cbba092fd27594c63e65cca011cc658218425670 + gemfiles/modular/erb/r3.1/v4.0.gemfile.example: bdf71ddcfe5001aab7d71b10a645a785928957ef7bae61d49307eb7f712279f3 + gemfiles/modular/erb/r3/v5.0.gemfile.example: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + gemfiles/modular/erb/r4/v5.0.gemfile.example: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + gemfiles/modular/erb/vHEAD.gemfile.example: ad6f104a49e80e0cf625440e3dc816343fe7e2f037fc4971df75e7bb4305c683 + gemfiles/modular/json/truffleruby_22_3.gemfile.example: 249c12eacbe90f9d0d2e81e7a62c4c7e9102e504ededcda4ecf660cb3bb68be4 + gemfiles/modular/json/truffleruby_23_0.gemfile.example: 66aa010567f7afa1af8244a74c3c88ecaaf84dc87b6a25180691bb480d02ed28 + gemfiles/modular/json/truffleruby_23_1.gemfile.example: '080fcbdaf2bec73cad40832a3d51eebb380af789917b96f493d1460b0dd6361d' + gemfiles/modular/mutex_m/r2.4/v0.1.gemfile.example: '09728bdc10807b3ca9dd3b9f12986acbe8c40ac08ada438bcfd49cd69445c650' + gemfiles/modular/mutex_m/r2/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/r3/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/r4/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/vHEAD.gemfile.example: '08018641c97f894788fa91b462da504ab2237213d18d95404136c393274ae3cb' + gemfiles/modular/optional.gemfile.example: b45eb8ecde2902441c02b2f01d4aa8f79bff75c853ef92555c3201ee798d9e87 + gemfiles/modular/recording/r2.3/recording.gemfile.example: 154da539583c51ca78ff8affa7a7caaf7f354d321b5e748beb64de61ff72f80a + gemfiles/modular/recording/r2.4/recording.gemfile.example: 6d69381eb2f8be681c72e7a5a8b5d6ec6ee586da8ce51b9b39d845d2a87e4ecf + gemfiles/modular/recording/r2.5/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/r3/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/r4/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/vHEAD.gemfile.example: 7480fd116e9671972a2735d1d97050a4fd5754aa7abfab3d115bf9bebbca038c + gemfiles/modular/rspec.gemfile.example: d043f5c9344f6435edb4607c5adaf42c78e7fb6b8b6726007de2bbedefb376c3 + gemfiles/modular/runtime_heads.gemfile.example: f163201999bf68a942b1e5bcea506bfc4b9c59711ff502091eb215d5d5f8f658 + gemfiles/modular/shunted.gemfile.example: a54a86124eff06163497462012704f62a691daa224cebeac605cdd14cffacfbe + gemfiles/modular/stringio/r2.4/v0.0.2.gemfile.example: 6425ebcd70b2e782f4c1d9074f8685c1e93ca7bf371728ef7ebbc8b5ebdf491a + gemfiles/modular/stringio/r2/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/r3/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/r4/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/vHEAD.gemfile.example: e0497ab6dad9667b22725485b781e9d99349a079250eb29cb125d58f01f4a5be + gemfiles/modular/style.gemfile.example: a15db732f566d958c2459ef549ae3877d984df3d205116e714284d1fe4f9b068 + gemfiles/modular/style_local.gemfile.example: '0083605323d23879dc7223f0198e9f1db24a25fa38730c4dbcc71c7a8a4c307f' + gemfiles/modular/templating.gemfile.example: 6cedc39529daa9aac3a4cf13fe31a628b62a4a2428f5c4f8657c5a2fa027bb35 + gemfiles/modular/templating_local.gemfile.example: 16c0b51fd46b86db09268c8485b1d5a528e5f962b593f8ae7521b15209f7d1a5 + gemfiles/modular/webrick/r4/v1.9.gemfile.example: 1ee940ff54d5ca3ce7fcff0d82ee9553386979656b9e220d5be5404d0991d5ea + gemfiles/modular/webrick/vHEAD.gemfile.example: da545f591af987648ffbaba181707480a38dfb375db7d289617986ec2c2ca23b + gemfiles/modular/x_std_libs.gemfile.example: e3917e90717d7f9f4393d847549a78c53de7f6c8de52a7f590b34b515fd6111a + gemfiles/modular/x_std_libs/r2.3/libs.gemfile.example: 379ac2a3698615789e39dc18a961b9c793b2cc594856bb3163524a99fd4ac86f + gemfiles/modular/x_std_libs/r2.4/libs.gemfile.example: ccad8f592943481317c082ce8d340316b9e90a52463c8c1eea5c5109b23e8c3d + gemfiles/modular/x_std_libs/r2.6/libs.gemfile.example: 9af20396f404a32bf76d8999c7fdd112f0282ba331f71100ab093663b2ab5670 + gemfiles/modular/x_std_libs/r2/libs.gemfile.example: e80ec8ad06cb1b31ac982bc25cf7696987fca131aa1001eaefd0bf5cd379c273 + gemfiles/modular/x_std_libs/r3.1/libs.gemfile.example: 38068bd6a0f5d02918eb286af9bdbdf0c7cf7cf026486b9fd157b541b6153d58 + gemfiles/modular/x_std_libs/r3/libs.gemfile.example: 546f8849f4267bb19aa10ff0de40be30957197f229e6887847181ea9127b2650 + gemfiles/modular/x_std_libs/r4/libs.gemfile.example: 8c2582eaa218d216b98c86c933465295c8b4e43f3251ea388b9eaf6e471f8da6 + gemfiles/modular/x_std_libs/vHEAD.gemfile.example: d3133ec4c0638363a7fb025d19be7e95a615fd61c35ddb8d17f2280ee74a7486 + lib/gem/version.rb.example: 15e219ac3a928b5580035f891e415551213175020f1131f6e7ca0ccd55a1b2d6 + mise.toml.example: b2eb06f7daaf0c3916bba155f463e166bd1de218637ba82e636c528c077c8d6d + mise.toml.no-osc.example: 35ec90d3c67b74e0014876dccad14f5883fdad88036f6b0cf5d29ea181e132ac + parsers.toml.example: f0538ae7ad8596be2dc39b3ea663f1164dec21fb0457233c1885097e774aff6f + readme/partials/basic_usage.md.example: adaa8f9de9768d1f29cb15d957404004715e7687db68c29b121d6467db13158a + readme/partials/configuration.md.example: 5ad82bc7eaf05015d31cea9265173718abc1d92729b52e3856c8366aa54184e8 + readme/partials/synopsis.md.example: 2b7383f8261086da0995fbf2c10017b3f162723b32c324ae8c0e1c1a8d1c79ef + shim/.github/workflows/current.yml.example: c2a2a2053f2726276bb8571c8a76a4b97bcce6cd54bdca01cba63d713c3a0e2f + shim/.rspec.example: 0e3a2a1587779efc3eae8fe718a3480272fbdfb3f1f6c2f9c3901f6fd81b2cce + shim/.structuredmerge/kettle-jem.yml.example: 03faae6cfda3947ef8489008b4836aad3ca280e94ddf9d08ef733071d7daa167 + shim/CHANGELOG.md.example: 2c098802b9971c51796e34067d061adbc31fa443df96be8a1fc71fc84c262d0e + shim/Gemfile.example: 9583b19e04d7ab6f5b3ea7ebb0c5d24e6a71ae5d74404a510aa979642248ba34 + shim/README.md.example: 3a2f7211b7f92a1dfae5e523b8e34b051a3d8af942144b05286eca0b3c8f6fbe + shim/Rakefile.example: 572c94da7052083b39b62a6600785419e314a109efd7a3d8c3a96eb77ad34fd1 + shim/gem.gemspec.example: cabca9717af1a18991db1de856900494e2771b044f1d5bfd2ad71b2ed4a1367d + shim/lib/compat_require.rb.example: 94ee85e353a3ca08c8a35c9063d4ff789214ea594c7f803f6cf09d7142f48379 + shim/lib/entrypoint.rb.example: dd57613520daca01d6f6bcaa9b83b00ff74505240dc04b84ceb686df3c0539d7 + shim/lib/version.rb.example: 15e219ac3a928b5580035f891e415551213175020f1131f6e7ca0ccd55a1b2d6 + shim/spec/shim_spec.rb.example: '060013019bf39b8dc267169df83752661d02c7ad890b65a99a1d97137938edfd' + shim/spec/spec_helper.rb.example: 88e2ab0bd8888022a68e856e04f61053e238e54f51b428b386aaebf93ae8ad83 + sig/gem.rbs.example: 47a4f7e524cc6f773875b6c08691ca4d65c2b14618abd5b9b91055ae5b248cec + spec/spec_helper.rb.example: 0c8119bd75b90f3a2403789b68b539fd19952370051297b1807596e201ef4813 +files: + ".simplecov": + recipe: template_source_application_simplecov + action: write + dest_sha256: 033e164d59c86611187b0d92d6d7e388431c37000aab9c6fdfea069817019ee1 + input_fingerprint: 7d30949f775439d8ccb242ecd4d51f0c86a575a3e29389cd44c63f10daef0270 + template_sources: + - ".simplecov.example" + AGPL-3.0-only.md: + recipe: template_source_application_AGPL_3_0_only_md + action: write + dest_sha256: d8a6cc31abc16b6748c7a21f21611f5a1ec33f67d22ca23d7da1c19b95496bee + input_fingerprint: 311c09dec7d3a80fd92f513173c9a67f8cdd939a298038ef444d379ba286d2fa + template_sources: + - AGPL-3.0-only.md.example + Gemfile: + recipe: template_source_application_Gemfile + action: write + dest_sha256: 2e89254e8d67d4d019fdd06abd5eecee3d3bd4785e3421895b211a2811fd9b38 + input_fingerprint: 968b39ed82391242b7e31365f6ed4f0b463db1f5503a1f8e5fd7ff3fbe065cc4 + template_sources: + - Gemfile.example + LICENSE.md: + recipe: template_source_application_LICENSE_md + action: write + dest_sha256: f6188bfd474a636d2a526420ebb411250faa447d94c9b9ccee097128ce4101b5 + input_fingerprint: 5582c8ab9101512be7adf2d3c173ab13434563e0f15f160da1ec2a101c582f45 + template_sources: + - LICENSE.md.example + PolyForm-Small-Business-1.0.0.md: + recipe: template_source_application_PolyForm_Small_Business_1_0_0_md + action: write + dest_sha256: 2f81e317d36f83a199c9fa10bcb250775fd90510303eaeb15aac2d8f0c1fc2d6 + input_fingerprint: 2c1eca5bbf46af2cfbb0d750549bd9ac5934809008d8411235d9c214d01514d5 + template_sources: + - PolyForm-Small-Business-1.0.0.md.example + README.md: + recipe: template_source_application_README_md + action: write + dest_sha256: bf7a153f118f38e7f8d32398455320599f79c6a94f52a03b171eae5733f62eec + input_fingerprint: 2da8fc3a5fde3981203815104886584e40763ad2bf58c0cad3adc2736117cdb1 + template_sources: + - README.md.example + binary-merge.gemspec: + recipe: template_source_application_binary_merge_gemspec + action: write + dest_sha256: 4ec37343cdef08e66ed282bdaadca387ec96d4ffbcc16b27e7a75ea141cfa983 + input_fingerprint: 4c0dd4d7e40b1bea98e82dc890a87b17de0b01e7674ec4ee59bfaedd77962065 + template_sources: + - gem.gemspec.example + certs/pboling.pem: + recipe: template_source_application_certs_pboling_pem + action: write + dest_sha256: 18956f60643666cc181e2743b3b3691bec08c5326f514f60af54d0cdb9ebc554 + input_fingerprint: 267422db1c4669c74246e87454794904d8921c0881cf17d8c92f33d085255ff1 + template_sources: + - certs/pboling.pem.example + gemfiles/modular/benchmark/r4/v0.5.gemfile: + recipe: template_source_application_gemfiles_modular_benchmark_r4_v0_5_gemfile + action: write + dest_sha256: 5bc3190090ae456df1a8cce28dd47a7fb293495f6d845ec7e53a7a8b50f14ae1 + input_fingerprint: d2611bc82d70ba4924ac453d5e087546ebecc4db3f3ce1bdbdb307b1f72868db + template_sources: + - gemfiles/modular/benchmark/r4/v0.5.gemfile.example + gemfiles/modular/benchmark/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_benchmark_vHEAD_gemfile + action: write + dest_sha256: ca6cd52c55c3082759c6ddc97638970f12d953aec1822470823d316086aa6e25 + input_fingerprint: ec3594eecb7447e311facf64b58eb543054a8656e52b05ed3deb7e3fe4025f1d + template_sources: + - gemfiles/modular/benchmark/vHEAD.gemfile.example + gemfiles/modular/cgi/r4/v0.5.gemfile: + recipe: template_source_application_gemfiles_modular_cgi_r4_v0_5_gemfile + action: write + dest_sha256: c2d14a39377a2435419ceaca22a3421ebd899e9cba943df8a90b576a33624870 + input_fingerprint: dc820dc693b7464a531d36ef9c32347b9cbaf66a4dcdca1e186f29ebc3c19b21 + template_sources: + - gemfiles/modular/cgi/r4/v0.5.gemfile.example + gemfiles/modular/cgi/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_cgi_vHEAD_gemfile + action: write + dest_sha256: 9ff3dc789b3279642876c0aad4b0094c1139bb8fbbf36daab804d3b2b3a60b43 + input_fingerprint: 56624e194f58204c24af2a0a45a77de1a5d9dd0535020ff85bf11fcd78281487 + template_sources: + - gemfiles/modular/cgi/vHEAD.gemfile.example + gemfiles/modular/coverage.gemfile: + recipe: template_source_application_gemfiles_modular_coverage_gemfile + action: write + dest_sha256: 915fc161ad574fdbc071bc733b69b27e94bd7a4c68cc4f58da267c9a0987f3e8 + input_fingerprint: 781def3b3471878fb5063ba2a9eb4ab744f31b43b9d074f5e383581a7aac3b07 + template_sources: + - gemfiles/modular/coverage.gemfile.example + gemfiles/modular/coverage_local.gemfile: + recipe: template_source_application_gemfiles_modular_coverage_local_gemfile + action: write + dest_sha256: 11cc5d8a39d7a0d1bc94b60f22be169f8dd77ad715e62bc318619725a57dcca9 + input_fingerprint: 6da431cc8150cce152bb5f76784a075f60df875778eb3611163ed660960157f8 + template_sources: + - gemfiles/modular/coverage_local.gemfile.example + gemfiles/modular/debug.gemfile: + recipe: template_source_application_gemfiles_modular_debug_gemfile + action: write + dest_sha256: 0a508bfb02e51b75394b43f4f09d98174dac36ead41cba09c1f730671a1f5905 + input_fingerprint: a5ad494b89a0da40582d25b44dd877437a15c19ed8aa5788a810208f34372a68 + template_sources: + - gemfiles/modular/debug.gemfile.example + gemfiles/modular/documentation.gemfile: + recipe: template_source_application_gemfiles_modular_documentation_gemfile + action: write + dest_sha256: e15f51e4d14ad2216b6de16c323787945bd225073d70a78420f4c99c98c1ecd1 + input_fingerprint: 2ae13ef8ab9dfc0093bddc2a44dd533f781fcbbe044b3e787b2d21575998bc5f + template_sources: + - gemfiles/modular/documentation.gemfile.example + gemfiles/modular/documentation_local.gemfile: + recipe: template_source_application_gemfiles_modular_documentation_local_gemfile + action: write + dest_sha256: 8b4860222200d1214f01250c562de227d453a82cf038360efb2ecdcc437aab3e + input_fingerprint: aa7601ce61fff559e28a1204e55a375af8cc8c67790c173c0a2730a495ea952e + template_sources: + - gemfiles/modular/documentation_local.gemfile.example + gemfiles/modular/erb/r2/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r2_v3_0_gemfile + action: write + dest_sha256: 3793e7dc9ef23a7ccd893d48cbba092fd27594c63e65cca011cc658218425670 + input_fingerprint: 06d9f96a2bfe7d45171e17a7ac35890772053dbe8bf376f0c40c819e22ed0cab + template_sources: + - gemfiles/modular/erb/r2/v3.0.gemfile.example + gemfiles/modular/erb/r3/v5.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r3_v5_0_gemfile + action: write + dest_sha256: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + input_fingerprint: aeae1eb834e025c940496186f9f6026fdd61a4e69ef93c92788123919a492a32 + template_sources: + - gemfiles/modular/erb/r3/v5.0.gemfile.example + gemfiles/modular/erb/r4/v5.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r4_v5_0_gemfile + action: write + dest_sha256: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + input_fingerprint: 31df563b22863446b531070bb540f872395437e54274079685a709bb93fdd6ff + template_sources: + - gemfiles/modular/erb/r4/v5.0.gemfile.example + gemfiles/modular/erb/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_erb_vHEAD_gemfile + action: write + dest_sha256: ad6f104a49e80e0cf625440e3dc816343fe7e2f037fc4971df75e7bb4305c683 + input_fingerprint: f18011f059ff7ecc7adba3fcaf991411875e107d8fc0ce0117238aa9e766c31f + template_sources: + - gemfiles/modular/erb/vHEAD.gemfile.example + gemfiles/modular/json/truffleruby_22_3.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_22_3_gemfile + action: write + dest_sha256: 249c12eacbe90f9d0d2e81e7a62c4c7e9102e504ededcda4ecf660cb3bb68be4 + input_fingerprint: 29c1b5ccd3c1cac074526265cd0178a4fa8de8a81eb783c29cfc4c4b61776ad2 + template_sources: + - gemfiles/modular/json/truffleruby_22_3.gemfile.example + gemfiles/modular/json/truffleruby_23_0.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_23_0_gemfile + action: write + dest_sha256: 66aa010567f7afa1af8244a74c3c88ecaaf84dc87b6a25180691bb480d02ed28 + input_fingerprint: 4bd71f5c729934e32b461be7b4b4b1250ca11d3b26b8df000b4ef717ba7d213a + template_sources: + - gemfiles/modular/json/truffleruby_23_0.gemfile.example + gemfiles/modular/json/truffleruby_23_1.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_23_1_gemfile + action: write + dest_sha256: '080fcbdaf2bec73cad40832a3d51eebb380af789917b96f493d1460b0dd6361d' + input_fingerprint: 5f6530222296ff8829de9bbcfe4ab3fbaab04c01a36f1481070bae171acbe31c + template_sources: + - gemfiles/modular/json/truffleruby_23_1.gemfile.example + gemfiles/modular/mutex_m/r2/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r2_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: f3daf1932eddde0124a4b7150592d836a2e18c932699368df5af672beb059084 + template_sources: + - gemfiles/modular/mutex_m/r2/v0.3.gemfile.example + gemfiles/modular/mutex_m/r3/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r3_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: 68d7fc00c91ef589d22c2561e1f719c770d737efd549fbdb123c933d46287be3 + template_sources: + - gemfiles/modular/mutex_m/r3/v0.3.gemfile.example + gemfiles/modular/mutex_m/r4/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r4_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: c4596b84c293f668422b301d66ed46643b8b261e3502788dc526b90759a52cd7 + template_sources: + - gemfiles/modular/mutex_m/r4/v0.3.gemfile.example + gemfiles/modular/mutex_m/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_vHEAD_gemfile + action: write + dest_sha256: '08018641c97f894788fa91b462da504ab2237213d18d95404136c393274ae3cb' + input_fingerprint: f1075ae54422df34585f792eabc8851ee4a74583e6d85adf06885ee67b79a29b + template_sources: + - gemfiles/modular/mutex_m/vHEAD.gemfile.example + gemfiles/modular/optional.gemfile: + recipe: template_source_application_gemfiles_modular_optional_gemfile + action: write + dest_sha256: f770e6e9a9dd2bd0f1f132e882d88038b2e21127dce3afe270908c7338c28bfd + input_fingerprint: a2517a250bc607c648456b54bf80e9df2b0714a4afc4628cb256dcf6fce7bc18 + template_sources: + - gemfiles/modular/optional.gemfile.example + gemfiles/modular/rspec.gemfile: + recipe: template_source_application_gemfiles_modular_rspec_gemfile + action: write + dest_sha256: d043f5c9344f6435edb4607c5adaf42c78e7fb6b8b6726007de2bbedefb376c3 + input_fingerprint: a1224f547d29f4f629bd44db4f275be1a9353bd3bf7ac27e5b0a80fca9123a07 + template_sources: + - gemfiles/modular/rspec.gemfile.example + gemfiles/modular/runtime_heads.gemfile: + recipe: template_source_application_gemfiles_modular_runtime_heads_gemfile + action: write + dest_sha256: 6ac7158c4a3088190f2a9082f01439eb27eca2172ab3464b15c9cb045aa885e1 + input_fingerprint: 1dfe73acdd3ea7d5bc3a40fafd52937b8c47cfabcf1756310990de8dc800e16e + template_sources: + - gemfiles/modular/runtime_heads.gemfile.example + gemfiles/modular/stringio/r2/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r2_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: eb7de65809a30c999b6ef87179e18903d19e3f3d21b6cdf19881f2ab6bf8d7f5 + template_sources: + - gemfiles/modular/stringio/r2/v3.0.gemfile.example + gemfiles/modular/stringio/r3/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r3_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: 477044c5cb5d4ad4b6c8f0fb574a5f68d6f1fb51a265aeb9b590182fa4c3f65c + template_sources: + - gemfiles/modular/stringio/r3/v3.0.gemfile.example + gemfiles/modular/stringio/r4/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r4_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: 052b8170af0b7944dfd9c30a6565610fe51454ab5e11cfeb063d589365d692d2 + template_sources: + - gemfiles/modular/stringio/r4/v3.0.gemfile.example + gemfiles/modular/stringio/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_vHEAD_gemfile + action: write + dest_sha256: e0497ab6dad9667b22725485b781e9d99349a079250eb29cb125d58f01f4a5be + input_fingerprint: a4eab49563f107d7e435396523b7ced9324e285f27cbdcc19c6ab07647b5948d + template_sources: + - gemfiles/modular/stringio/vHEAD.gemfile.example + gemfiles/modular/style.gemfile: + recipe: template_source_application_gemfiles_modular_style_gemfile + action: write + dest_sha256: 071066457ce6081cbc03d10d777f741b84019071c78e45c23889f13658a0a4a6 + input_fingerprint: b63947347d5371bfcc6fce20237527dbc8490ee645cc5c8720b2a6bdead368ed + template_sources: + - gemfiles/modular/style.gemfile.example + gemfiles/modular/style_local.gemfile: + recipe: template_source_application_gemfiles_modular_style_local_gemfile + action: write + dest_sha256: c7aea2853946be6c6581b4491957ae92945b0a87384aa33682aeeb8781dc8735 + input_fingerprint: c5a5d3e59c213060cc5c973d1748b39929d9b8954f5370bb64c8c41f2ce2e62a + template_sources: + - gemfiles/modular/style_local.gemfile.example + gemfiles/modular/templating.gemfile: + recipe: template_source_application_gemfiles_modular_templating_gemfile + action: write + dest_sha256: 6cedc39529daa9aac3a4cf13fe31a628b62a4a2428f5c4f8657c5a2fa027bb35 + input_fingerprint: d3b177870df8d296cc2018136e530b99956d71386666cb69d47c91a6839bb627 + template_sources: + - gemfiles/modular/templating.gemfile.example + gemfiles/modular/templating_local.gemfile: + recipe: template_source_application_gemfiles_modular_templating_local_gemfile + action: write + dest_sha256: ab1c123e0257b9b3121fdc2ca4eabf44b9a1f3e208a9802460bfba6f0b181ebe + input_fingerprint: 8f4e24694ba88507bdd02ab1708dc453e5368d06f3600e1cdc3af284b48b60b6 + template_sources: + - gemfiles/modular/templating_local.gemfile.example + gemfiles/modular/webrick/r4/v1.9.gemfile: + recipe: template_source_application_gemfiles_modular_webrick_r4_v1_9_gemfile + action: write + dest_sha256: 1ee940ff54d5ca3ce7fcff0d82ee9553386979656b9e220d5be5404d0991d5ea + input_fingerprint: 88dddae85bb62d98bea8a67e7628995c4662c166270dab52eb55b143a3f360f3 + template_sources: + - gemfiles/modular/webrick/r4/v1.9.gemfile.example + gemfiles/modular/webrick/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_webrick_vHEAD_gemfile + action: write + dest_sha256: da545f591af987648ffbaba181707480a38dfb375db7d289617986ec2c2ca23b + input_fingerprint: 7d01952d14d223c4ac365e4b12e085ac0ffadb9e04f1fadf8fc6bcfce6aa3c54 + template_sources: + - gemfiles/modular/webrick/vHEAD.gemfile.example + gemfiles/modular/x_std_libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_gemfile + action: write + dest_sha256: e3917e90717d7f9f4393d847549a78c53de7f6c8de52a7f590b34b515fd6111a + input_fingerprint: 4641f4d79e497f835f54d758b20efbb46186bd18e583fb83b0176d58f297f315 + template_sources: + - gemfiles/modular/x_std_libs.gemfile.example + gemfiles/modular/x_std_libs/r2/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r2_libs_gemfile + action: write + dest_sha256: e80ec8ad06cb1b31ac982bc25cf7696987fca131aa1001eaefd0bf5cd379c273 + input_fingerprint: 50f5ef32dda69cf70a471842f4546310be7f909175ef70db24a39d7e13c3917c + template_sources: + - gemfiles/modular/x_std_libs/r2/libs.gemfile.example + gemfiles/modular/x_std_libs/r3/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r3_libs_gemfile + action: write + dest_sha256: 546f8849f4267bb19aa10ff0de40be30957197f229e6887847181ea9127b2650 + input_fingerprint: a91838edcc837db62793b1cbd7c1f83d99dc4638e57a91e5be5a0e7bbac90802 + template_sources: + - gemfiles/modular/x_std_libs/r3/libs.gemfile.example + gemfiles/modular/x_std_libs/r4/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r4_libs_gemfile + action: write + dest_sha256: 8c2582eaa218d216b98c86c933465295c8b4e43f3251ea388b9eaf6e471f8da6 + input_fingerprint: b25a1ce98679a3427055d3c82ad8186314b086705f494d84eccc580c4c461021 + template_sources: + - gemfiles/modular/x_std_libs/r4/libs.gemfile.example + gemfiles/modular/x_std_libs/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_vHEAD_gemfile + action: write + dest_sha256: d3133ec4c0638363a7fb025d19be7e95a615fd61c35ddb8d17f2280ee74a7486 + input_fingerprint: 9c368353d0c8f2556b0d6a436beecb20623a617191898807fe526243d8ff2c8f + template_sources: + - gemfiles/modular/x_std_libs/vHEAD.gemfile.example + lib/binary/merge/version.rb: + recipe: template_source_application_lib_binary_merge_version_rb + action: write + dest_sha256: b0ba4b113f98223df3c6333ec955ebad17140108b28eacce14f94b0b24faf792 + input_fingerprint: e779836a8bae8e2c403b4018be4dc447ac334c21a726dbb9bbb68e03d5c9a012 + template_sources: + - lib/gem/version.rb.example + sig/binary/merge.rbs: + recipe: template_source_application_sig_binary_merge_rbs + action: write + dest_sha256: b9bde35a5f01515f901caadab2d57d918b1d49b2cb2d4d77d90cc38d97d15a41 + input_fingerprint: 29c414fdf2d8e63b5c6827615cfca290a7fbabfbb0c5f988269fe078df6af532 + template_sources: + - sig/gem.rbs.example + spec/spec_helper.rb: + recipe: template_source_application_spec_spec_helper_rb + action: write + dest_sha256: 842041eda6c3c5b833b43d5695995be55a03f37127595fe342bc27ee405bf455 + input_fingerprint: 17b55857a6f01d605d29b9b68879494808d426801b7cc4e2a6fc8f44e350a99b + template_sources: + - spec/spec_helper.rb.example diff --git a/gems/binary-merge/Gemfile b/gems/binary-merge/Gemfile index 2b5f7f621..7236c21e2 100644 --- a/gems/binary-merge/Gemfile +++ b/gems/binary-merge/Gemfile @@ -19,8 +19,7 @@ git_source(:gitlab) { |repo_name| "https://gitlab.com/#{repo_name}" } gemspec # Local workspace dependency wiring for *_local.gemfile overrides -nomono_requirements = ['~> 1.0', '>= 1.0.8'] -gem 'nomono', *nomono_requirements, require: false # ruby >= 2.2 +gem 'nomono', '~> 1.1', '>= 1.1.0', require: false # ruby >= 3.2.0 # Direct sibling dependencies (env-switched via STRUCTUREDMERGE_DEV) direct_sibling_gems = %w[ diff --git a/gems/binary-merge/Gemfile.lock b/gems/binary-merge/Gemfile.lock index fbcb3ea41..5632995b9 100644 --- a/gems/binary-merge/Gemfile.lock +++ b/gems/binary-merge/Gemfile.lock @@ -72,8 +72,8 @@ GEM bundler (>= 1.14) version_gem (~> 1.1, >= 1.1.4) geom2d (0.4.1) - gitmoji-regex (2.0.4) - version_gem (~> 1.1, >= 1.1.13) + gitmoji-regex (2.0.6) + version_gem (~> 1.1, >= 1.1.14) hexapdf (1.9.1) cmdparse (~> 3.0, >= 3.0.3) geom2d (~> 0.4, >= 0.4.1) @@ -86,20 +86,29 @@ GEM rdoc (>= 4.0.0) reline (>= 0.4.2) json (2.21.1) - kettle-dev (2.3.9) + kettle-dev (2.4.5) emoji_regex (>= 15.0) + kettle-gha-pins (~> 0.3, >= 0.3.1) + kettle-ndjson (~> 0.1, >= 0.1.1) kettle-rb (~> 0.1, >= 0.1.2) - kettle-test (~> 2.0, >= 2.0.4) + kettle-test (~> 2.0, >= 2.0.12) + ruby-progressbar (~> 1.13) + tty-progressbar (~> 0.18) + kettle-gha-pins (0.3.1) ruby-progressbar (~> 1.13) + tty-progressbar (~> 0.18) + version_gem (~> 1.1, >= 1.1.14) + kettle-ndjson (0.1.1) + version_gem (~> 1.1, >= 1.1.14) kettle-rb (0.1.5) - kettle-soup-cover (3.0.4) + kettle-soup-cover (3.0.5) kettle-wash (~> 0.1, >= 0.1.0) simplecov (>= 1.0) simplecov-cobertura (>= 4.0) simplecov-console (~> 0.9, >= 0.9.5) simplecov-rcov (~> 0.3, >= 0.3.7) simplecov_lcov_formatter (~> 0.9, >= 0.9.0) - kettle-test (2.0.12) + kettle-test (2.0.15) appraisal2 (~> 3.0, >= 3.0.6) backports (~> 3.0) rspec (~> 3.0) @@ -126,6 +135,8 @@ GEM racc (~> 1.4) nokogiri (1.19.4-arm64-darwin) racc (~> 1.4) + nokogiri (1.19.4-x86_64-darwin) + racc (~> 1.4) nokogiri (1.19.4-x86_64-linux-gnu) racc (~> 1.4) nokogiri (1.19.4-x86_64-linux-musl) @@ -184,11 +195,11 @@ GEM rspec-mocks (3.13.8) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) - rspec-pending_for (0.1.21) + rspec-pending_for (0.1.22) rspec-core (~> 3.0) ruby_engine (~> 2.0) ruby_version (~> 1.0) - rspec-stubbed_env (1.0.6) + rspec-stubbed_env (1.0.8) rspec-support (3.13.7) rspec_junit_formatter (0.6.0) rspec-core (>= 2, < 4, != 2.12.0) @@ -284,7 +295,7 @@ GEM silent_stream (1.0.12) logger (~> 1.2) version_gem (>= 1.1.8, < 3) - simplecov (1.0.2) + simplecov (1.0.3) simplecov-cobertura (4.0.0) rexml simplecov (~> 1.0) @@ -296,7 +307,7 @@ GEM simplecov (>= 0.4.1) simplecov_lcov_formatter (0.9.0) simplecov (>= 0.18) - sorbet-runtime (0.6.13351) + sorbet-runtime (0.6.13363) standard (1.56.0) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.0) @@ -320,9 +331,9 @@ GEM standard-custom (~> 1.0, >= 1.0.2) standard-performance (~> 1.9, >= 1.9.0) version_gem (~> 1.1, >= 1.1.13) - stone_checksums (1.0.6) - version_gem (~> 1.1, >= 1.1.13) + stone_checksums (1.0.7) stringio (3.2.0) + strings-ansi (0.2.0) strscan (3.1.8) terminal-table (4.0.0) unicode-display_width (>= 1.1.1, < 4) @@ -337,20 +348,27 @@ GEM parslet (~> 2.0) tree_sitter_language_pack (>= 1.13.2, < 2.0) version_gem (~> 1.1, >= 1.1.9) - tree_sitter_language_pack (1.13.3-aarch64-linux) + tree_sitter_language_pack (1.13.4-aarch64-linux) sorbet-runtime (~> 0.5) - tree_sitter_language_pack (1.13.3-arm64-darwin) + tree_sitter_language_pack (1.13.4-arm64-darwin) sorbet-runtime (~> 0.5) - tree_sitter_language_pack (1.13.3-x86_64-linux) + tree_sitter_language_pack (1.13.4-x86_64-darwin) + sorbet-runtime (~> 0.5) + tree_sitter_language_pack (1.13.4-x86_64-linux) sorbet-runtime (~> 0.5) tsort (0.2.0) - turbo_tests2 (3.2.0) + tty-cursor (0.7.1) + tty-progressbar (0.18.3) + strings-ansi (~> 0.2) + tty-cursor (~> 0.7) + tty-screen (~> 0.8) + unicode-display_width (>= 1.6, < 3.0) + tty-screen (0.8.2) + turbo_tests2 (3.2.3) parallel_tests (>= 3.3.0, < 6) rspec (>= 3.10) version_gem (~> 1.1, >= 1.1.14) - unicode-display_width (3.2.0) - unicode-emoji (~> 4.1) - unicode-emoji (4.2.0) + unicode-display_width (2.6.0) version_gem (1.1.14) webrick (1.9.2) yaml-converter (0.2.3) @@ -368,6 +386,9 @@ GEM ostruct rainbow yard + yard-lint (1.10.2) + yard (~> 0.9) + zeitwerk (~> 2.6) yard-relative_markdown_links (0.6.0) nokogiri (>= 1.14.3, < 2) yard-timekeeper (0.2.4) @@ -383,7 +404,7 @@ PLATFORMS aarch64-linux-gnu aarch64-linux-musl arm64-darwin - x86_64-linux + x86_64-darwin x86_64-linux-gnu x86_64-linux-musl @@ -401,12 +422,12 @@ DEPENDENCIES gitmoji-regex (~> 2.0, >= 2.0.0) irb (~> 1.17) kettle-dev (~> 2.0, >= 2.2.25) - kettle-soup-cover (~> 3.0, >= 3.0.3) + kettle-soup-cover (~> 3.0, >= 3.0.5) kettle-test (~> 2.0, >= 2.0.9) kramdown (~> 2.5, >= 2.5.2) kramdown-parser-gfm (~> 1.1) mutex_m (~> 0.2) - nomono (~> 1.0, >= 1.0.8) + nomono (~> 1.1, >= 1.1.0) rake (~> 13.0) rbs (>= 3.0) rdoc (~> 6.11) @@ -429,6 +450,7 @@ DEPENDENCIES yard (~> 0.9, >= 0.9.45) yard-fence (~> 0.9, >= 0.9.6) yard-junk (~> 0.1, >= 0.1.0) + yard-lint (~> 1.10, >= 1.10.2) yard-relative_markdown_links (~> 0.6) yard-timekeeper (~> 0.2, >= 0.2.4) yard-yaml (~> 0.2, >= 0.2.3) @@ -465,15 +487,17 @@ CHECKSUMS erb (6.0.6) sha256=a9b24986700f5bf127c4f297c5403c3ca41b83b0a316c0cd09a096b56e644ae5 gem_bench (2.0.5) sha256=0dc0fb44a5a5eb7b2f5c1c68a5b0164d72007132822c012bac3abe976b199ead geom2d (0.4.1) sha256=ea0998ea90c4f2752e24fe13d85a4f89bee689d151316140ebcc6369bf634ed9 - gitmoji-regex (2.0.4) sha256=01410d3217940bd0e7b2299ec805245afe8d0f06a5d6d38f623d63a63c0ac34f + gitmoji-regex (2.0.6) sha256=d50649caccc8ad1b080f01e869f0909b135206d8b3ece2313ca31a9b0e39f14b hexapdf (1.9.1) sha256=2d1f6a3622e6bc2a70a707d4c3f3fa44f5552ecd9d899f6283abb07398a84884 io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc irb (1.18.0) sha256=de9454a0703a54704b9811a5ef31a60c86949fbf4013fcf244fabc7c775248e3 json (2.21.1) sha256=13a43df75d95641443f5702dff350f237164a9d811ff0f2c2800d4d980220583 - kettle-dev (2.3.9) sha256=03b2f72c6dda4d2c4401ee3c0c96853116c922766e7b5b04224434a49b571bfc + kettle-dev (2.4.5) sha256=3a451940796a671b7adc910db7c3da87899ebec7c5274921ca598345549ae7eb + kettle-gha-pins (0.3.1) sha256=b13a82a403af31880288fe65f85f2a24a93ae4740c0c7cbc15a35044d27aaa51 + kettle-ndjson (0.1.1) sha256=2d84314e8c911d6f560f2736e8f72019df6d811829674788ff33b3bbf518ed66 kettle-rb (0.1.5) sha256=0322a569860c86e70f90d5ebe72353b8720b7054c7efa9f9044857f5c972d29f - kettle-soup-cover (3.0.4) sha256=36d4df472362d2020d16411d7ce26ba2fe2a41fb8be64577ff9b5280acf99d86 - kettle-test (2.0.12) sha256=3a8e5c5f38db03a6f0a8896da6f3576d24e36f53796578c19aafaa2ba5a8ea52 + kettle-soup-cover (3.0.5) sha256=80abb42eb294fa5d3c8632c259a297c554fbc01902714461f3bf99a65190f5d0 + kettle-test (2.0.15) sha256=993b132ffec17fe82cc81c69f876e15d6eb610a4831df08dc01c0cce5c070caa kettle-wash (0.1.1) sha256=ae2e08b64c72c46ceed5ffa197ed859e85352f38ed0412fca2e18ce29b2dc4f9 kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa kramdown-parser-gfm (1.1.0) sha256=fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729 @@ -484,6 +508,7 @@ CHECKSUMS nokogiri (1.19.4-aarch64-linux-gnu) sha256=1269fb644a6de405057a53dd5c762b1209b43ca7424f839454d3dbc677c31a8f nokogiri (1.19.4-aarch64-linux-musl) sha256=35c65b9ce72b3bb03207bdbe7067915019dc18c1b9b59139684bd6690fdd01af nokogiri (1.19.4-arm64-darwin) sha256=a46db9853286e6597b36ebc6953817d15acf3a299583eb3f89fdc6f91dd63527 + nokogiri (1.19.4-x86_64-darwin) sha256=7fd17057d3e1f00e9954a74b3cd76595d3d4a5ef233b7ed9599047c204f70551 nokogiri (1.19.4-x86_64-linux-gnu) sha256=379fae440b28915e3f19d752ce2dcf8465ed2b2fbefd2a7ca0dd497bc981a06a nokogiri (1.19.4-x86_64-linux-musl) sha256=17dfb7c1fa194ae02fbf7c51a7afc8d278045ab3fdacfd86f91d02d7b274470b nomono (1.1.0) sha256=463dd4c79da02a855739a1b5483190d527b7868688be905e84abdb3449b32c88 @@ -513,8 +538,8 @@ CHECKSUMS rspec-core (3.13.6) sha256=a8823c6411667b60a8bca135364351dda34cd55e44ff94c4be4633b37d828b2d rspec-expectations (3.13.5) sha256=33a4d3a1d95060aea4c94e9f237030a8f9eae5615e9bd85718fe3a09e4b58836 rspec-mocks (3.13.8) sha256=086ad3d3d17533f4237643de0b5c42f04b66348c28bf6b9c2d3f4a3b01af1d47 - rspec-pending_for (0.1.21) sha256=c87fda50c20f8faca72d9cfa6a936abffd37860343f14aced95bbb29b8ae96bf - rspec-stubbed_env (1.0.6) sha256=6467a6eb0f72146d443ffb0c5a2a549d8812e59c04fbc81e03cd914ebf1f28dc + rspec-pending_for (0.1.22) sha256=49dc647473f8c8ea4ccc1a33813537dd94b913ef7ec5a8689896101eaacb71cf + rspec-stubbed_env (1.0.8) sha256=b23c4dd5e5d6a0cf0c5b4f6ed3f3678d78e4be9ec247ea9abf0669d20b490535 rspec-support (3.13.7) sha256=0640e5570872aafefd79867901deeeeb40b0c9875a36b983d85f54fb7381c47c rspec_junit_formatter (0.6.0) sha256=40dde674e6ae4e6cc0ff560da25497677e34fefd2338cc467a8972f602b62b15 rubocop (1.88.2) sha256=8def251c90cd955feb4daa3edc0ab56893250c4ce90ef81e6c80c03f9a939bbf @@ -540,38 +565,43 @@ CHECKSUMS ruby_engine (2.0.3) sha256=ca2ae7def8cfcdc2bfb6a186d36d5d59c8b403245dc0256c3802b767fa278aaa ruby_version (1.0.3) sha256=5930f9950746b7e6c973184398ee364ee7440b170fef7922b9f5cdf317f1ccb5 silent_stream (1.0.12) sha256=377c43aa10033fe90c33b39ea8cd97d79f2d1c4856df598efc56f3091f3ae782 - simplecov (1.0.2) sha256=c6459434efe4b948b46477cc2df2faa73ab365f83a33c7c17f81262f4f7f1244 + simplecov (1.0.3) sha256=38ef0514f16ae7562f0d0f4df02610071115103d301b6de7dacbcc000082e39b simplecov-cobertura (4.0.0) sha256=e4fb3159b1ecea545b44f5452a8611305323e78ad23eae8aed35924d072e01ea simplecov-console (0.9.5) sha256=b1108bcfff5f210143e2b8301698c367b01586f20d25a73e95475a5df6fc6ff6 simplecov-rcov (0.3.7) sha256=372f50bf6df6b6350b7d0c840f2f8bdabe021861a43c26877b747c9ac96139fc simplecov_lcov_formatter (0.9.0) sha256=4c1839bb31dcf7a8f7a6474c94ed228aa03b994e9dd5e1965e58b4121b049bed - sorbet-runtime (0.6.13351) sha256=f8fee17c6e3edf835dc6823d26afb9a7c8969c6710d1fabe2fb43f4e0c15c64f + sorbet-runtime (0.6.13363) sha256=f1f0b2e946fb3cd76b9d8e3d85459cdaf7f5466331a400cafcf008e508b6d2c3 standard (1.56.0) sha256=ae2af4d9669589162ac69ed5ef59dcf9f346d4afc81f7e62b84339310dfcb787 standard-custom (1.0.2) sha256=424adc84179a074f1a2a309bb9cf7cd6bfdb2b6541f20c6bf9436c0ba22a652b standard-performance (1.9.0) sha256=49483d31be448292951d80e5e67cdcb576c2502103c7b40aec6f1b6e9c88e3f2 standard-rspec (0.5.0) sha256=64d396524a65af47f5331b423d8cdd313e0267401647bb7892489ca89dad2973 standard-rubocop-lts (2.0.10) sha256=89708a505b7d8b24d2ac399a7520fcb9e764abc2ecb4289b631b5fe0e3b76617 - stone_checksums (1.0.6) sha256=c775f830513d6c6ab26e31d1a5fbecd4c4e39002663d4d9f8fa96e97990b5298 + stone_checksums (1.0.7) sha256=faf7a175da7c4f32777c5292a0128b06eec183b3cc3a0b382529b21800300626 stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1 + strings-ansi (0.2.0) sha256=90262d760ea4a94cc2ae8d58205277a343409c288cbe7c29416b1826bd511c88 strscan (3.1.8) sha256=aae2db611a225559f21ffbb71765c9a4e60fd262534a9ea84f4f11c7f32f679e terminal-table (4.0.0) sha256=f504793203f8251b2ea7c7068333053f0beeea26093ec9962e62ea79f94301d2 thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73 timecop (0.9.11) sha256=41284dc6e5041f2184f781ace766f942108c842f8d8c1386a26e6343decc7542 timecop-rspec (1.0.3) sha256=005f14841bb606dcaefb060e321b5388e2e59537742bee8b3a9a9a40e598fab9 tree_haver (7.1.0) - tree_sitter_language_pack (1.13.3-aarch64-linux) sha256=55ffc7c87868cb45658338363d9eba51b4a8b0259aa88e4de368d2bd1d52fea4 - tree_sitter_language_pack (1.13.3-arm64-darwin) sha256=bc2498db605f212a1dbd2465ed3f65190d7da786f6ed5d30fcf958121aeb4a5c - tree_sitter_language_pack (1.13.3-x86_64-linux) sha256=1ffd045bd236ea54f58c5872ee66121d01033359c1f28f375b7fd4a4b5620cf9 + tree_sitter_language_pack (1.13.4-aarch64-linux) sha256=f7bb95fd59afda1e1b91a7b6ad4df244c585a863e94e4a0f492ef2336a5358b8 + tree_sitter_language_pack (1.13.4-arm64-darwin) sha256=2b48ded1f5feae3de20be1471aaa7c211601ac1c71ca6d4789cf31560a854132 + tree_sitter_language_pack (1.13.4-x86_64-darwin) sha256=8a2460d9029e7610b863d2481e2da0078f87b18bf8668070ccb5ecce71e272d8 + tree_sitter_language_pack (1.13.4-x86_64-linux) sha256=ae3ae718534088b2dc76bd93e7d093f11e8d19188bf47edfcd962df906e1af97 tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f - turbo_tests2 (3.2.0) sha256=8b35421548399d1923567b177970f42671c65695b93cdd134d78fbcbab85dff0 - unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42 - unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f + tty-cursor (0.7.1) sha256=79534185e6a777888d88628b14b6a1fdf5154a603f285f80b1753e1908e0bf48 + tty-progressbar (0.18.3) sha256=6cbb4260e55e74a9180d502143eb6a467d2c8e51bf5f3c9509fb5cacc3d4a5f6 + tty-screen (0.8.2) sha256=c090652115beae764336c28802d633f204fb84da93c6a968aa5d8e319e819b50 + turbo_tests2 (3.2.3) sha256=f77fc0799014c1d7890977e117cf39317bc4544de2c88a55149ed920b4cff942 + unicode-display_width (2.6.0) sha256=12279874bba6d5e4d2728cef814b19197dbb10d7a7837a869bab65da943b7f5a version_gem (1.1.14) sha256=6b7306c7e9416d06067561981ab3444e2cecb844f26cc325ae3c27b44cf85613 webrick (1.9.2) sha256=beb4a15fc474defed24a3bda4ffd88a490d517c9e4e6118c3edce59e45864131 yaml-converter (0.2.3) sha256=d35e69e547610d9e347672cc277fcb7d71dff3c53a942e66f82b1c64022ada72 yard (0.9.45) sha256=52e211493f7cb8a3ebf7e104a25a1e73937a3103092545d34cb88fafebb3dc51 yard-fence (0.9.6) sha256=3d1dbf4e3df462ac78b8bd2e01cf740a2de20168387c929aca31a0bcee490659 yard-junk (0.1.0) sha256=e85fe2ec1afa47313decd333447b53458cb1ed49b510b70015fdc3041a94bcdd + yard-lint (1.10.2) sha256=3e595709d088a8cc827e706a4146b447eb6a907ee375d06c11077369d00717f6 yard-relative_markdown_links (0.6.0) sha256=3e5ffa85cbad9bac70bee5421774b190fb25d3bdf489323a5b3534f647d1a70e yard-timekeeper (0.2.4) sha256=62f8d001d737c6e2ac688e7b37386f958dceb0f6aff9c909575e1bec8d20775a yard-yaml (0.2.3) sha256=fe5fef18819e1cbd05bb8f1b9e1baad6bf70c28125eb75b57bbf6397b0831812 diff --git a/gems/binary-merge/README.md b/gems/binary-merge/README.md index d4847be52..bfa22ee89 100644 --- a/gems/binary-merge/README.md +++ b/gems/binary-merge/README.md @@ -21,7 +21,11 @@ I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-ta ## 🌻 Synopsis Galtzo FLOSS Logo by Aboling0, CC BY-SA 4.0 ruby-lang Logo, Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5 -`Binary::Merge` provides shared binary-family report helpers. It does not pretend arbitrary bytes are structurally mergeable; instead, it records byte ranges, render policies, preservation decisions, and unsafe mutation diagnostics for callers that understand a binary schema. +`Binary::Merge` is the StructuredMerge substrate for Kaitai-style binary merge +families. It does not pretend arbitrary bytes are structurally mergeable; +instead, it records byte ranges, render policies, preservation decisions, and +unsafe mutation diagnostics for schema-specific parser gems such as +`zip-merge`. ### Key Features @@ -29,6 +33,8 @@ I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-ta - Render policy helpers for schema-aware binary renderers. - Unsafe mutation diagnostics with byte ranges. - Preservation reports for callers that can safely retain raw byte ranges. +- Shared substrate vocabulary for Kaitai-family parser gems such as + `zip-merge`. ## 💡 Info you can shake a stick at @@ -87,9 +93,9 @@ gem install binary-merge ## ⚙️ Configuration -`Binary::Merge` has no global parser configuration. Callers pass schema paths, byte ranges, operations, dispositions, and reasons into the helper methods they need. - -Use this package as a substrate for schema-specific binary families such as `zip-merge`. +`Binary::Merge` has no global parser configuration. Schema-specific parser gems +register their own TreeHaver parser paths and use this package for shared +binary-family reporting and renderer-planning behavior. ## 🔧 Basic Usage diff --git a/gems/binary-merge/REEK b/gems/binary-merge/REEK new file mode 100644 index 000000000..e69de29bb diff --git a/gems/binary-merge/bin/kettle-gha-pins b/gems/binary-merge/bin/kettle-gha-pins new file mode 100755 index 000000000..c743cecac --- /dev/null +++ b/gems/binary-merge/bin/kettle-gha-pins @@ -0,0 +1,16 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# +# This file was generated by Bundler. +# +# The application 'kettle-gha-pins' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) + +require 'rubygems' +require 'bundler/setup' + +load Gem.bin_path('kettle-gha-pins', 'kettle-gha-pins') diff --git a/gems/binary-merge/docs/Binary.html b/gems/binary-merge/docs/Binary.html index 322bc6136..1a3d8dfb7 100644 --- a/gems/binary-merge/docs/Binary.html +++ b/gems/binary-merge/docs/Binary.html @@ -6,7 +6,7 @@ Module: Binary - — Documentation by YARD 0.9.44 + — Documentation by YARD 0.9.45 @@ -110,9 +110,9 @@

Defined Under Namespace

diff --git a/gems/binary-merge/docs/Binary/Merge.html b/gems/binary-merge/docs/Binary/Merge.html index d110f0bb8..22f1cb1a1 100644 --- a/gems/binary-merge/docs/Binary/Merge.html +++ b/gems/binary-merge/docs/Binary/Merge.html @@ -6,7 +6,7 @@ Module: Binary::Merge - — Documentation by YARD 0.9.44 + — Documentation by YARD 0.9.45 @@ -110,7 +110,7 @@

PACKAGE_NAME =
-
"binary-merge"
+
'binary-merge'
VERSION =
@@ -216,7 +216,7 @@

  • - .unsafe_diagnostic(schema_path:, byte_range:, message:, category: "unsafe_binary_mutation") ⇒ Object + .unsafe_diagnostic(schema_path:, byte_range:, message:, category: 'unsafe_binary_mutation') ⇒ Object @@ -274,7 +274,7 @@

    def binary_feature_profile { - family: "binary", + family: 'binary', supported_dialects: [], supported_policies: [] } @@ -377,7 +377,7 @@

    - .unsafe_diagnostic(schema_path:, byte_range:, message:, category: "unsafe_binary_mutation") ⇒ Object + .unsafe_diagnostic(schema_path:, byte_range:, message:, category: 'unsafe_binary_mutation') ⇒ Object @@ -402,9 +402,9 @@

    # File 'lib/binary/merge.rb', line 32
     
    -def unsafe_diagnostic(schema_path:, byte_range:, message:, category: "unsafe_binary_mutation")
    +def unsafe_diagnostic(schema_path:, byte_range:, message:, category: 'unsafe_binary_mutation')
       TreeHaver::BinaryDiagnostic.new(
    -    severity: "error",
    +    severity: 'error',
         category: category,
         message: message,
         schema_path: schema_path,
    @@ -421,9 +421,9 @@ 

  • diff --git a/gems/binary-merge/docs/Binary/Merge/Version.html b/gems/binary-merge/docs/Binary/Merge/Version.html index f4c810f2f..ab1f9b7c0 100644 --- a/gems/binary-merge/docs/Binary/Merge/Version.html +++ b/gems/binary-merge/docs/Binary/Merge/Version.html @@ -6,7 +6,7 @@ Module: Binary::Merge::Version - — Documentation by YARD 0.9.44 + — Documentation by YARD 0.9.45 @@ -98,7 +98,7 @@

    VERSION =
    -
    "7.0.0"
    +
    '7.1.0'
    @@ -114,9 +114,9 @@

    diff --git a/gems/binary-merge/docs/_index.html b/gems/binary-merge/docs/_index.html index 2e20348f6..31e9c67be 100644 --- a/gems/binary-merge/docs/_index.html +++ b/gems/binary-merge/docs/_index.html @@ -4,7 +4,7 @@ - Documentation by YARD 0.9.44 + Documentation by YARD 0.9.45 @@ -54,7 +54,7 @@
    -

    Documentation by YARD 0.9.44

    +

    Documentation by YARD 0.9.45

    Alphabetic Index

    @@ -138,9 +138,9 @@

    Namespace Listing A-Z

    diff --git a/gems/binary-merge/docs/file.AGPL-3.0-only.html b/gems/binary-merge/docs/file.AGPL-3.0-only.html index 8525fdc4f..8e67470a2 100644 --- a/gems/binary-merge/docs/file.AGPL-3.0-only.html +++ b/gems/binary-merge/docs/file.AGPL-3.0-only.html @@ -6,7 +6,7 @@ File: AGPL-3.0-only - — Documentation by YARD 0.9.44 + — Documentation by YARD 0.9.45 @@ -342,9 +342,9 @@
    diff --git a/gems/binary-merge/docs/file.LICENSE.html b/gems/binary-merge/docs/file.LICENSE.html index 3b90b511f..62710c732 100644 --- a/gems/binary-merge/docs/file.LICENSE.html +++ b/gems/binary-merge/docs/file.LICENSE.html @@ -6,7 +6,7 @@ File: LICENSE - — Documentation by YARD 0.9.44 + — Documentation by YARD 0.9.45 @@ -65,21 +65,23 @@ Choose the option that best fits your use case:

    If none of the above licenses fit your use case, please contact us to discuss a custom commercial license.

    -

    Required Notice: Copyright (c) 2026 Peter H. Boling

    + diff --git a/gems/binary-merge/docs/file.PolyForm-Small-Business-1.0.0.html b/gems/binary-merge/docs/file.PolyForm-Small-Business-1.0.0.html index baaf325ec..e87173a57 100644 --- a/gems/binary-merge/docs/file.PolyForm-Small-Business-1.0.0.html +++ b/gems/binary-merge/docs/file.PolyForm-Small-Business-1.0.0.html @@ -6,7 +6,7 @@ File: PolyForm-Small-Business-1.0.0 - — Documentation by YARD 0.9.44 + — Documentation by YARD 0.9.45 @@ -185,9 +185,9 @@

    Definitions

    diff --git a/gems/binary-merge/docs/file.README.html b/gems/binary-merge/docs/file.README.html index e7e82a489..6ea6d06de 100644 --- a/gems/binary-merge/docs/file.README.html +++ b/gems/binary-merge/docs/file.README.html @@ -6,7 +6,7 @@ File: README - — Documentation by YARD 0.9.44 + — Documentation by YARD 0.9.45 @@ -59,7 +59,7 @@
    -

    Galtzo FLOSS Logo by Aboling0, CC BY-SA 4.0 ruby-lang Logo, Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5 structuredmerge Logo by Aboling0, CC BY-SA 4.0

    +

    structuredmerge Logo by Aboling0, CC BY-SA 4.0

    ☯️ Binary::Merge

    @@ -71,18 +71,23 @@

    ☯️ Binary::Merge

    if ci_badges.map(&:color).all? { it == "green"} 👇️ send money so I can do more of this. FLOSS maintenance is now my full-time job.

    -

    Sponsor Me on Github Liberapay Goal Progress Donate on PayPal Buy me a coffee Donate on Polar Donate at ko-fi.com

    +

    Sponsor Me on Github Liberapay Goal Progress Donate on PayPal Buy me a coffee Donate at ko-fi.com

    - 👣 How will this project approach the September 2025 hostile takeover of RubyGems? 🚑️ + 👣 How will this project approach the September 2025 hostile takeover of RubyGems? 🚑️ -I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-takeover-of-rubygems-my-thoughts-5hlo). +

    I’ve summarized my thoughts in this blog post.

    -

    🌻 Synopsis

    +

    🌻 Synopsis Galtzo FLOSS Logo by Aboling0, CC BY-SA 4.0 ruby-lang Logo, Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5 +

    -

    Binary::Merge provides shared binary-family report helpers. It does not pretend arbitrary bytes are structurally mergeable; instead, it records byte ranges, render policies, preservation decisions, and unsafe mutation diagnostics for callers that understand a binary schema.

    +

    Binary::Merge is the StructuredMerge substrate for Kaitai-style binary merge
    +families. It does not pretend arbitrary bytes are structurally mergeable;
    +instead, it records byte ranges, render policies, preservation decisions, and
    +unsafe mutation diagnostics for schema-specific parser gems such as
    +zip-merge.

    Key Features

    @@ -91,6 +96,8 @@

    Key Features

  • Render policy helpers for schema-aware binary renderers.
  • Unsafe mutation diagnostics with byte ranges.
  • Preservation reports for callers that can safely retain raw byte ranges.
  • +
  • Shared substrate vocabulary for Kaitai-family parser gems such as
    +zip-merge.
  • 💡 Info you can shake a stick at

    @@ -107,20 +114,18 @@

    💡 Info you can shake a stick at

    Works with MRI Ruby 4 - -Ruby 4.0 Compat Ruby current Compat - + Ruby current Compat Support & Community -Join Me on Daily.dev's RubyFriends Live Chat on Discord Get help from me on Upwork Get help from me on Codementor +Join Me on Daily.dev's RubyFriends Get help from RubyForum Live Chat on Discord Get help from me on Upwork Get help from me on Codementor Source -Source on GitLab.com Source on CodeBerg.org Source on Github.com The best SHA: dQw4w9WgXcQ! +Source on GitLab.com Source on CodeBerg.org Source on GitHub.com The best SHA: dQw4w9WgXcQ! @@ -165,20 +170,75 @@

    Compatibility

    may be higher than the gem’s runtime compatibility floor when legacy Rubies are
    not practical for the current toolchain.

    - - - - - - - - - - - - - -
    🚚 Amazing test matrix was brought to you by🔎 appraisal2 🔎 and the color 💚 green 💚
    👟 Check it out!github.com/appraisal-rb/appraisal2
    +

    kettle-dev Logo by Aboling0, CC BY-SA 4.0

    + +

    The amazing test matrix is powered by the kettle-dev stack.

    + +
    + How kettle-dev manages complexity in tests + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GemSourceRoleDaily download rank
    appraisal2GitHubmulti-dependency Appraisal matrix generationDaily download rank for appraisal2
    appraisal2-rubocopGitHubRuboCop Appraisal generator integrationDaily download rank for appraisal2-rubocop
    kettle-devGitHubdevelopment, release, and CI workflow toolingDaily download rank for kettle-dev
    kettle-jemGitHubAppraisals & CI workflow templatesDaily download rank for kettle-jem
    kettle-soup-coverGitHubSimpleCov coverage policy and reportingDaily download rank for kettle-soup-cover
    kettle-testGitHubstandard test runner and coverage harnessDaily download rank for kettle-test
    rubocop-ltsGitHubRuby-version-aware lintingDaily download rank for rubocop-lts
    turbo_tests2GitHubparallel test executionDaily download rank for turbo_tests2
    + +

    ✨ Installation

    @@ -194,9 +254,9 @@

    ✨ Installation

    ⚙️ Configuration

    -

    Binary::Merge has no global parser configuration. Callers pass schema paths, byte ranges, operations, dispositions, and reasons into the helper methods they need.

    - -

    Use this package as a substrate for schema-specific binary families such as zip-merge.

    +

    Binary::Merge has no global parser configuration. Schema-specific parser gems
    +register their own TreeHaver parser paths and use this package for shared
    +binary-family reporting and renderer-planning behavior.

    🔧 Basic Usage

    @@ -255,7 +315,7 @@

    📌 Versioning

    📄 License

    -

    The gem is available under the following licenses: AGPL-3.0-only, PolyForm-Small-Business-1.0.0.
    +

    The gem is available under the following licenses: AGPL-3.0-only, PolyForm-Small-Business-1.0.0.
    See LICENSE.md for details.

    If none of the available licenses suit your use case, please contact us to discuss a custom commercial license.

    @@ -263,9 +323,9 @@

    📄 License

    diff --git a/gems/binary-merge/docs/frames.html b/gems/binary-merge/docs/frames.html index 3223dddda..4a6186cad 100644 --- a/gems/binary-merge/docs/frames.html +++ b/gems/binary-merge/docs/frames.html @@ -2,7 +2,7 @@ - Documentation by YARD 0.9.44 + Documentation by YARD 0.9.45 + + + + + + + + + + + + + +
    + + +

    Module: Dotenv::Merge::Backend + + + +

    +
    + + + + + + + + + + + +
    +
    Defined in:
    +
    lib/dotenv/merge/backend.rb +
    +
    + +
    + +

    Defined Under Namespace

    +

    + + + + + Classes: Language, Parser + + +

    + + + + + + + + + +
    + + + +
    + + diff --git a/gems/dotenv-merge/docs/Dotenv/Merge/Backend/Language.html b/gems/dotenv-merge/docs/Dotenv/Merge/Backend/Language.html new file mode 100644 index 000000000..3c4ef44e0 --- /dev/null +++ b/gems/dotenv-merge/docs/Dotenv/Merge/Backend/Language.html @@ -0,0 +1,341 @@ + + + + + + + Class: Dotenv::Merge::Backend::Language + + — Documentation by YARD 0.9.45 + + + + + + + + + + + + + + + + + + + + + +
    + + +

    Class: Dotenv::Merge::Backend::Language + + + +

    +
    + +
    +
    Inherits:
    +
    + TreeHaver::Base::Language + +
      +
    • Object
    • + + + + + +
    + show all + +
    +
    + + + + + + + + + + + +
    +
    Defined in:
    +
    lib/dotenv/merge/backend.rb +
    +
    + +
    + +

    Overview

    +
    +

    TreeHaver language wrapper for dotenv files parsed through the line
    +substrate supplied by plain-merge.

    + + +
    +
    +
    + + +
    + + + + + + + +

    + Class Method Summary + collapse +

    + + + + +

    + Instance Method Summary + collapse +

    + + + + + + +
    +

    Constructor Details

    + +
    +

    + + #initialize(name = :dotenv) ⇒ Language + + + + + +

    +
    +

    Returns a new instance of Language.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +12
    +13
    +14
    +
    +
    # File 'lib/dotenv/merge/backend.rb', line 12
    +
    +def initialize(name = :dotenv)
    +  super(name, backend: :line, options: {})
    +end
    +
    +
    + +
    + + +
    +

    Class Method Details

    + + +
    +

    + + .dotenvObject + + + + + +

    + + + + +
    +
    +
    +
    +16
    +17
    +18
    +
    +
    # File 'lib/dotenv/merge/backend.rb', line 16
    +
    +def self.dotenv
    +  new(:dotenv)
    +end
    +
    +
    + +
    +

    + + .envObject + + + + + +

    + + + + +
    +
    +
    +
    +20
    +21
    +22
    +
    +
    # File 'lib/dotenv/merge/backend.rb', line 20
    +
    +def self.env
    +  new(:env)
    +end
    +
    +
    + +
    + +
    + + + +
    + + diff --git a/gems/dotenv-merge/docs/Dotenv/Merge/Backend/Parser.html b/gems/dotenv-merge/docs/Dotenv/Merge/Backend/Parser.html new file mode 100644 index 000000000..04f6caa77 --- /dev/null +++ b/gems/dotenv-merge/docs/Dotenv/Merge/Backend/Parser.html @@ -0,0 +1,266 @@ + + + + + + + Class: Dotenv::Merge::Backend::Parser + + — Documentation by YARD 0.9.45 + + + + + + + + + + + + + + + + + + + + + +
    + + +

    Class: Dotenv::Merge::Backend::Parser + + + +

    +
    + +
    +
    Inherits:
    +
    + TreeHaver::Base::Parser + +
      +
    • Object
    • + + + + + +
    + show all + +
    +
    + + + + + + + + + + + +
    +
    Defined in:
    +
    lib/dotenv/merge/backend.rb +
    +
    + +
    + +

    Overview

    +
    +

    Parser adapter that exposes Dotenv::Merge::FileAnalysis via
    +TreeHaver.parser_for(:dotenv, backend_type: :line).

    + + +
    +
    +
    + + +
    + + + + + + + +

    + Instance Method Summary + collapse +

    + + + + + + + + +
    +

    Instance Method Details

    + + +
    +

    + + #parse(source) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +28
    +29
    +30
    +31
    +32
    +
    +
    # File 'lib/dotenv/merge/backend.rb', line 28
    +
    +def parse(source)
    +  raise 'Language not set' unless language
    +
    +  attach_line_analysis(Dotenv::Merge::FileAnalysis.new(source), source)
    +end
    +
    +
    + +
    +

    + + #parse_string(_old_tree, source) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +34
    +35
    +36
    +
    +
    # File 'lib/dotenv/merge/backend.rb', line 34
    +
    +def parse_string(_old_tree, source)
    +  parse(source)
    +end
    +
    +
    + +
    + +
    + + + +
    + + diff --git a/gems/dotenv-merge/docs/Dotenv/Merge/CommentTracker.html b/gems/dotenv-merge/docs/Dotenv/Merge/CommentTracker.html index 0eb00435e..d56f09efb 100644 --- a/gems/dotenv-merge/docs/Dotenv/Merge/CommentTracker.html +++ b/gems/dotenv-merge/docs/Dotenv/Merge/CommentTracker.html @@ -6,7 +6,7 @@ Class: Dotenv::Merge::CommentTracker - — Documentation by YARD 0.9.44 + — Documentation by YARD 0.9.45 @@ -290,7 +290,7 @@

    style: :hash_comment, total_comment_count: @comments.size, inline_comment_count: @comments.count { |comment| !comment[:full_line] }, - **options, + **options ) end @@ -303,9 +303,9 @@

    diff --git a/gems/dotenv-merge/docs/Dotenv/Merge/CorruptionDetectedError.html b/gems/dotenv-merge/docs/Dotenv/Merge/CorruptionDetectedError.html index 856b4f3d4..bbd2e0865 100644 --- a/gems/dotenv-merge/docs/Dotenv/Merge/CorruptionDetectedError.html +++ b/gems/dotenv-merge/docs/Dotenv/Merge/CorruptionDetectedError.html @@ -6,7 +6,7 @@ Class: Dotenv::Merge::CorruptionDetectedError - — Documentation by YARD 0.9.44 + — Documentation by YARD 0.9.45 @@ -136,9 +136,9 @@

    Overview

    diff --git a/gems/dotenv-merge/docs/Dotenv/Merge/DebugLogger.html b/gems/dotenv-merge/docs/Dotenv/Merge/DebugLogger.html index cb425ea85..b35c137da 100644 --- a/gems/dotenv-merge/docs/Dotenv/Merge/DebugLogger.html +++ b/gems/dotenv-merge/docs/Dotenv/Merge/DebugLogger.html @@ -6,7 +6,7 @@ Module: Dotenv::Merge::DebugLogger - — Documentation by YARD 0.9.44 + — Documentation by YARD 0.9.45 @@ -139,9 +139,9 @@

    Direct usage

    diff --git a/gems/dotenv-merge/docs/Dotenv/Merge/DestinationParseError.html b/gems/dotenv-merge/docs/Dotenv/Merge/DestinationParseError.html index 82b3ef11e..0ef9c2901 100644 --- a/gems/dotenv-merge/docs/Dotenv/Merge/DestinationParseError.html +++ b/gems/dotenv-merge/docs/Dotenv/Merge/DestinationParseError.html @@ -6,7 +6,7 @@ Class: Dotenv::Merge::DestinationParseError - — Documentation by YARD 0.9.44 + — Documentation by YARD 0.9.45 @@ -164,9 +164,9 @@

    Constructor Details

    diff --git a/gems/dotenv-merge/docs/Dotenv/Merge/EnvLine.html b/gems/dotenv-merge/docs/Dotenv/Merge/EnvLine.html index 66a1f14a0..267d903ee 100644 --- a/gems/dotenv-merge/docs/Dotenv/Merge/EnvLine.html +++ b/gems/dotenv-merge/docs/Dotenv/Merge/EnvLine.html @@ -6,7 +6,7 @@ Class: Dotenv::Merge::EnvLine - — Documentation by YARD 0.9.44 + — Documentation by YARD 0.9.45 @@ -200,7 +200,7 @@

    -
    "export "
    +
    'export '
    @@ -749,7 +749,7 @@

    start_line: line_number, end_line: line_number, start_column: 0, - end_column: @raw.length, + end_column: @raw.length ) super(slice: @raw, location: location) @@ -1696,7 +1696,7 @@

    # File 'lib/dotenv/merge/env_line.rb', line 86
     
     def type
    -  "env_line"
    +  'env_line'
     end
    @@ -1708,9 +1708,9 @@

    diff --git a/gems/dotenv-merge/docs/Dotenv/Merge/Error.html b/gems/dotenv-merge/docs/Dotenv/Merge/Error.html index 624c6b16d..add2f22ed 100644 --- a/gems/dotenv-merge/docs/Dotenv/Merge/Error.html +++ b/gems/dotenv-merge/docs/Dotenv/Merge/Error.html @@ -6,7 +6,7 @@ Class: Dotenv::Merge::Error - — Documentation by YARD 0.9.44 + — Documentation by YARD 0.9.45 @@ -132,9 +132,9 @@

    Direct Known Subclasses

    diff --git a/gems/dotenv-merge/docs/Dotenv/Merge/FileAnalysis.html b/gems/dotenv-merge/docs/Dotenv/Merge/FileAnalysis.html index fdc3486d5..2ee47c7ca 100644 --- a/gems/dotenv-merge/docs/Dotenv/Merge/FileAnalysis.html +++ b/gems/dotenv-merge/docs/Dotenv/Merge/FileAnalysis.html @@ -6,7 +6,7 @@ Class: Dotenv::Merge::FileAnalysis - — Documentation by YARD 0.9.44 + — Documentation by YARD 0.9.45 @@ -183,7 +183,7 @@

    -
    "dotenv-merge"
    +
    'dotenv-merge'
    @@ -514,7 +514,7 @@

  • - #initialize(source, freeze_token: DEFAULT_FREEZE_TOKEN, signature_generator: nil, **options) ⇒ FileAnalysis + #initialize(source, freeze_token: DEFAULT_FREEZE_TOKEN, signature_generator: nil, **_options) ⇒ FileAnalysis @@ -708,7 +708,7 @@

    Constructor Details

    - #initialize(source, freeze_token: DEFAULT_FREEZE_TOKEN, signature_generator: nil, **options) ⇒ FileAnalysis + #initialize(source, freeze_token: DEFAULT_FREEZE_TOKEN, signature_generator: nil, **_options) ⇒ FileAnalysis @@ -825,7 +825,7 @@

    # File 'lib/dotenv/merge/file_analysis.rb', line 40
     
    -def initialize(source, freeze_token: DEFAULT_FREEZE_TOKEN, signature_generator: nil, **options)
    +def initialize(source, freeze_token: DEFAULT_FREEZE_TOKEN, signature_generator: nil, **_options)
       @source = source
       @freeze_token = freeze_token
       @signature_generator = signature_generator
    @@ -840,13 +840,13 @@ 

    # Extract and integrate freeze blocks @statements = extract_and_integrate_statements - DebugLogger.debug("FileAnalysis initialized", { - signature_generator: signature_generator ? "custom" : "default", - lines_count: @lines.size, - statements_count: @statements.size, - freeze_blocks: freeze_blocks.size, - assignments: assignment_lines.size, - }) + DebugLogger.debug('FileAnalysis initialized', { + signature_generator: signature_generator ? 'custom' : 'default', + lines_count: @lines.size, + statements_count: @statements.size, + freeze_blocks: freeze_blocks.size, + assignments: assignment_lines.size + }) end

    @@ -1117,7 +1117,7 @@

    shared_comment_attachment_for( owner, tracker_attachment: comment_augmenter(**options).attachment_for(owner), - **options, + **options ) end @@ -1265,7 +1265,7 @@

    def comment_augmenter(owners: nil, **options) comment_tracker.augment( owners: owners || comment_augmenter_default_owners, - **options, + **options ) end @@ -1555,7 +1555,7 @@

    comment_tracker.comment_region_for_range( range, kind: kind, - full_line_only: full_line_only, + full_line_only: full_line_only ) end @@ -1619,7 +1619,7 @@

    @comment_support_style ||= shared_comment_support_style( source: :dotenv_source, style: :hash_comment, - read_strategy: :source_augmented_portable_write, + read_strategy: :source_augmented_portable_write ) end @@ -2134,9 +2134,9 @@

    diff --git a/gems/dotenv-merge/docs/Dotenv/Merge/FreezeNode.html b/gems/dotenv-merge/docs/Dotenv/Merge/FreezeNode.html index 841848118..f2dc46fb7 100644 --- a/gems/dotenv-merge/docs/Dotenv/Merge/FreezeNode.html +++ b/gems/dotenv-merge/docs/Dotenv/Merge/FreezeNode.html @@ -6,7 +6,7 @@ Class: Dotenv::Merge::FreezeNode - — Documentation by YARD 0.9.44 + — Documentation by YARD 0.9.45 @@ -657,7 +657,7 @@

    # File 'lib/dotenv/merge/freeze_node.rb', line 45
     
     def signature
    -  [:FreezeNode, content.gsub(/\s+/, " ").strip]
    +  [:FreezeNode, content.gsub(/\s+/, ' ').strip]
     end
    @@ -669,9 +669,9 @@

    diff --git a/gems/dotenv-merge/docs/Dotenv/Merge/MergeResult.html b/gems/dotenv-merge/docs/Dotenv/Merge/MergeResult.html index ad2624664..43ac44eee 100644 --- a/gems/dotenv-merge/docs/Dotenv/Merge/MergeResult.html +++ b/gems/dotenv-merge/docs/Dotenv/Merge/MergeResult.html @@ -6,7 +6,7 @@ Class: Dotenv::Merge::MergeResult - — Documentation by YARD 0.9.44 + — Documentation by YARD 0.9.45 @@ -634,7 +634,7 @@

    source: :destination, start_line: freeze_node.start_line, end_line: freeze_node.end_line, - lines: lines.length, + lines: lines.length } end @@ -721,7 +721,7 @@

    lines = extract_lines(statement) @lines.concat(lines) - @decisions << {decision: decision, source: :destination, index: index, lines: lines.length} + @decisions << { decision: decision, source: :destination, index: index, lines: lines.length } end @@ -807,7 +807,7 @@

    lines = extract_lines(statement) @lines.concat(lines) - @decisions << {decision: decision, source: :template, index: index, lines: lines.length} + @decisions << { decision: decision, source: :template, index: index, lines: lines.length } end @@ -883,7 +883,7 @@

    def add_raw(lines, decision:) @lines.concat(lines) - @decisions << {decision: decision, source: :raw, lines: lines.length} + @decisions << { decision: decision, source: :raw, lines: lines.length } end @@ -1002,7 +1002,7 @@

    { total_decisions: @decisions.length, total_lines: @lines.length, - by_decision: counts, + by_decision: counts } end @@ -1065,7 +1065,7 @@

    # File 'lib/dotenv/merge/merge_result.rb', line 95
     
     def to_s
    -  return "" if @lines.empty?
    +  return '' if @lines.empty?
     
       # Join with newlines and ensure file ends with newline
       result = @lines.join("\n")
    @@ -1082,9 +1082,9 @@ 

    diff --git a/gems/dotenv-merge/docs/Dotenv/Merge/ParseError.html b/gems/dotenv-merge/docs/Dotenv/Merge/ParseError.html index 65bae31a2..0b14351bc 100644 --- a/gems/dotenv-merge/docs/Dotenv/Merge/ParseError.html +++ b/gems/dotenv-merge/docs/Dotenv/Merge/ParseError.html @@ -6,7 +6,7 @@ Class: Dotenv::Merge::ParseError - — Documentation by YARD 0.9.44 + — Documentation by YARD 0.9.45 @@ -263,12 +263,12 @@

     
     
    -33
     34
    -35
    +35 +36

    -
    # File 'lib/dotenv/merge.rb', line 33
    +      
    # File 'lib/dotenv/merge.rb', line 34
     
     def initialize(message = nil, content: nil, errors: [])
       super(message, errors: errors, content: content)
    @@ -284,9 +284,9 @@ 

    diff --git a/gems/dotenv-merge/docs/Dotenv/Merge/SmartMerger.html b/gems/dotenv-merge/docs/Dotenv/Merge/SmartMerger.html index 27c233cb5..4b24d8ec4 100644 --- a/gems/dotenv-merge/docs/Dotenv/Merge/SmartMerger.html +++ b/gems/dotenv-merge/docs/Dotenv/Merge/SmartMerger.html @@ -6,7 +6,7 @@ Class: Dotenv::Merge::SmartMerger - — Documentation by YARD 0.9.44 + — Documentation by YARD 0.9.45 @@ -93,7 +93,7 @@
    Includes:
    -
    Ast::Merge::TrailingGroups::DestIterate
    +
    Ast::Merge::CommentLayoutEmissionSupport, Ast::Merge::TrailingGroups::DestIterate
    @@ -233,6 +233,7 @@

    +

    Constructor Details

    @@ -485,7 +486,6 @@

     
     
    -52
     53
     54
     55
    @@ -517,10 +517,11 @@ 

    81 82 83 -84

    +84 +85

    -
    # File 'lib/dotenv/merge/smart_merger.rb', line 52
    +      
    # File 'lib/dotenv/merge/smart_merger.rb', line 53
     
     def initialize(
       template_content,
    @@ -592,12 +593,12 @@ 

     
     
    -30
     31
    -32
    +32 +33

    -
    # File 'lib/dotenv/merge/smart_merger.rb', line 30
    +      
    # File 'lib/dotenv/merge/smart_merger.rb', line 31
     
     def corruption_handling
       @corruption_handling
    @@ -613,9 +614,9 @@ 

    diff --git a/gems/dotenv-merge/docs/Dotenv/Merge/TemplateParseError.html b/gems/dotenv-merge/docs/Dotenv/Merge/TemplateParseError.html index 5b906fade..bdba26039 100644 --- a/gems/dotenv-merge/docs/Dotenv/Merge/TemplateParseError.html +++ b/gems/dotenv-merge/docs/Dotenv/Merge/TemplateParseError.html @@ -6,7 +6,7 @@ Class: Dotenv::Merge::TemplateParseError - — Documentation by YARD 0.9.44 + — Documentation by YARD 0.9.45 @@ -164,9 +164,9 @@

    Constructor Details

    diff --git a/gems/dotenv-merge/docs/Dotenv/Merge/Version.html b/gems/dotenv-merge/docs/Dotenv/Merge/Version.html index dab890d39..b16e70a21 100644 --- a/gems/dotenv-merge/docs/Dotenv/Merge/Version.html +++ b/gems/dotenv-merge/docs/Dotenv/Merge/Version.html @@ -6,7 +6,7 @@ Module: Dotenv::Merge::Version - — Documentation by YARD 0.9.44 + — Documentation by YARD 0.9.45 @@ -98,7 +98,7 @@

    VERSION =
    -
    "7.0.0"
    +
    '7.1.0'
    @@ -114,9 +114,9 @@

    diff --git a/gems/dotenv-merge/docs/_index.html b/gems/dotenv-merge/docs/_index.html index 45899c285..ca61dbdde 100644 --- a/gems/dotenv-merge/docs/_index.html +++ b/gems/dotenv-merge/docs/_index.html @@ -4,7 +4,7 @@ - Documentation by YARD 0.9.44 + Documentation by YARD 0.9.45 @@ -54,7 +54,7 @@
    -

    Documentation by YARD 0.9.44

    +

    Documentation by YARD 0.9.45

    Alphabetic Index

    @@ -87,6 +87,21 @@

    Namespace Listing A-Z

    +
      +
    • B
    • +
        + +
      • + Backend + + (Dotenv::Merge) + +
      • + +
      +
    + +
    • C
      • @@ -180,6 +195,21 @@

        Namespace Listing A-Z

      +
        +
      • L
      • +
          + +
        • + Language + + (Dotenv::Merge::Backend) + +
        • + +
        +
      + +
      • M
        • @@ -202,6 +232,9 @@

          Namespace Listing A-Z

        + + +
        • P
          • @@ -213,6 +246,13 @@

            Namespace Listing A-Z

            +
          • + Parser + + (Dotenv::Merge::Backend) + +
          • +
        @@ -232,9 +272,6 @@

        Namespace Listing A-Z

      - - -
      • T
        • @@ -273,9 +310,9 @@

          Namespace Listing A-Z

    diff --git a/gems/dotenv-merge/docs/class_list.html b/gems/dotenv-merge/docs/class_list.html index 87b71099b..2353f9d14 100644 --- a/gems/dotenv-merge/docs/class_list.html +++ b/gems/dotenv-merge/docs/class_list.html @@ -46,7 +46,7 @@

    Class List

    diff --git a/gems/dotenv-merge/docs/file.AGPL-3.0-only.html b/gems/dotenv-merge/docs/file.AGPL-3.0-only.html index 548c5a00c..a8d273694 100644 --- a/gems/dotenv-merge/docs/file.AGPL-3.0-only.html +++ b/gems/dotenv-merge/docs/file.AGPL-3.0-only.html @@ -6,7 +6,7 @@ File: AGPL-3.0-only - — Documentation by YARD 0.9.44 + — Documentation by YARD 0.9.45 @@ -342,9 +342,9 @@ diff --git a/gems/dotenv-merge/docs/file.LICENSE.html b/gems/dotenv-merge/docs/file.LICENSE.html index 73b2da652..a45fc04df 100644 --- a/gems/dotenv-merge/docs/file.LICENSE.html +++ b/gems/dotenv-merge/docs/file.LICENSE.html @@ -6,7 +6,7 @@ File: LICENSE - — Documentation by YARD 0.9.44 + — Documentation by YARD 0.9.45 @@ -65,21 +65,23 @@ Choose the option that best fits your use case:

    If none of the above licenses fit your use case, please contact us to discuss a custom commercial license.

    -

    Required Notice: Copyright (c) 2026 Peter H. Boling

    +
      +
    • Required Notice: Copyright (c) 2026 Peter H. Boling
    • +
    diff --git a/gems/dotenv-merge/docs/file.PolyForm-Small-Business-1.0.0.html b/gems/dotenv-merge/docs/file.PolyForm-Small-Business-1.0.0.html index b6022592c..a43f39455 100644 --- a/gems/dotenv-merge/docs/file.PolyForm-Small-Business-1.0.0.html +++ b/gems/dotenv-merge/docs/file.PolyForm-Small-Business-1.0.0.html @@ -6,7 +6,7 @@ File: PolyForm-Small-Business-1.0.0 - — Documentation by YARD 0.9.44 + — Documentation by YARD 0.9.45 @@ -185,9 +185,9 @@

    Definitions

    diff --git a/gems/dotenv-merge/docs/file.README.html b/gems/dotenv-merge/docs/file.README.html index cf525e65b..3418f7ebe 100644 --- a/gems/dotenv-merge/docs/file.README.html +++ b/gems/dotenv-merge/docs/file.README.html @@ -6,7 +6,7 @@ File: README - — Documentation by YARD 0.9.44 + — Documentation by YARD 0.9.45 @@ -59,7 +59,7 @@
    -

    Galtzo FLOSS Logo by Aboling0, CC BY-SA 4.0 ruby-lang Logo, Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5 structuredmerge Logo by Aboling0, CC BY-SA 4.0

    +

    structuredmerge Logo by Aboling0, CC BY-SA 4.0

    ☯️ Dotenv::Merge

    @@ -71,18 +71,19 @@

    ☯️ Dotenv::Merge

    if ci_badges.map(&:color).all? { it == "green"} 👇️ send money so I can do more of this. FLOSS maintenance is now my full-time job.

    -

    Sponsor Me on Github Liberapay Goal Progress Donate on PayPal Buy me a coffee Donate on Polar Donate at ko-fi.com

    +

    Sponsor Me on Github Liberapay Goal Progress Donate on PayPal Buy me a coffee Donate at ko-fi.com

    - 👣 How will this project approach the September 2025 hostile takeover of RubyGems? 🚑️ + 👣 How will this project approach the September 2025 hostile takeover of RubyGems? 🚑️ -I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-takeover-of-rubygems-my-thoughts-5hlo). +

    I’ve summarized my thoughts in this blog post.

    -

    🌻 Synopsis

    +

    🌻 Synopsis Galtzo FLOSS Logo by Aboling0, CC BY-SA 4.0 ruby-lang Logo, Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5 +

    -

    Dotenv::Merge intelligently merges two versions of a dotenv (.env) file. It is built on ast-merge and tree_haver, and keeps dotenv-specific ownership rules separate from the parser/backend substrate.

    +

    Dotenv::Merge intelligently merges two versions of a dotenv (.env) file. It is built on ast-merge, plain-merge, and tree_haver. Its parser enters through TreeHaver.parser_for(:dotenv, backend_type: :line) and builds dotenv-specific ownership rules on the shared plain line substrate.

    Key Features

    @@ -100,6 +101,9 @@

    Key Features

  • StructuredMerge Native: Depends on ast-merge and tree_haver, matching the rest of the Ruby merge family
  • +Line Backend: Registers :dotenv and :env parser paths through
    +TreeHaver.parser_for and carries the underlying plain line analysis.
  • +
  • Customizable:
    • @@ -192,20 +196,18 @@

      💡 Info you can shake a stick at

      Works with MRI Ruby 4 - -Ruby 4.0 Compat Ruby current Compat - + Ruby current Compat Support & Community -Join Me on Daily.dev's RubyFriends Live Chat on Discord Get help from me on Upwork Get help from me on Codementor +Join Me on Daily.dev's RubyFriends Get help from RubyForum Live Chat on Discord Get help from me on Upwork Get help from me on Codementor Source -Source on GitLab.com Source on CodeBerg.org Source on Github.com The best SHA: dQw4w9WgXcQ! +Source on GitLab.com Source on CodeBerg.org Source on GitHub.com The best SHA: dQw4w9WgXcQ! @@ -250,20 +252,75 @@

      Compatibility

      may be higher than the gem’s runtime compatibility floor when legacy Rubies are
      not practical for the current toolchain.

      - - - - - - - - - - - - - -
      🚚 Amazing test matrix was brought to you by🔎 appraisal2 🔎 and the color 💚 green 💚
      👟 Check it out!github.com/appraisal-rb/appraisal2
      +

      kettle-dev Logo by Aboling0, CC BY-SA 4.0

      + +

      The amazing test matrix is powered by the kettle-dev stack.

      + +
      + How kettle-dev manages complexity in tests + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      GemSourceRoleDaily download rank
      appraisal2GitHubmulti-dependency Appraisal matrix generationDaily download rank for appraisal2
      appraisal2-rubocopGitHubRuboCop Appraisal generator integrationDaily download rank for appraisal2-rubocop
      kettle-devGitHubdevelopment, release, and CI workflow toolingDaily download rank for kettle-dev
      kettle-jemGitHubAppraisals & CI workflow templatesDaily download rank for kettle-jem
      kettle-soup-coverGitHubSimpleCov coverage policy and reportingDaily download rank for kettle-soup-cover
      kettle-testGitHubstandard test runner and coverage harnessDaily download rank for kettle-test
      rubocop-ltsGitHubRuby-version-aware lintingDaily download rank for rubocop-lts
      turbo_tests2GitHubparallel test executionDaily download rank for turbo_tests2
      + +

      ✨ Installation

      @@ -427,7 +484,7 @@

      📌 Versioning

      📄 License

      -

      The gem is available under the following licenses: AGPL-3.0-only, PolyForm-Small-Business-1.0.0.
      +

      The gem is available under the following licenses: AGPL-3.0-only, PolyForm-Small-Business-1.0.0.
      See LICENSE.md for details.

      If none of the available licenses suit your use case, please contact us to discuss a custom commercial license.

      @@ -435,9 +492,9 @@

      📄 License

  • diff --git a/gems/dotenv-merge/docs/frames.html b/gems/dotenv-merge/docs/frames.html index 3223dddda..4a6186cad 100644 --- a/gems/dotenv-merge/docs/frames.html +++ b/gems/dotenv-merge/docs/frames.html @@ -2,7 +2,7 @@ - Documentation by YARD 0.9.44 + Documentation by YARD 0.9.45 + + + + + + + + + + + + + +
    + + +

    Class: Kettle::Jem::EventRecorder + + + +

    +
    + +
    +
    Inherits:
    +
    + Object + +
      +
    • Object
    • + + + +
    + show all + +
    +
    + + + + + + + + + + + +
    +
    Defined in:
    +
    lib/kettle/jem.rb +
    +
    + +
    + + + + + +

    Instance Attribute Summary collapse

    +
      + +
    • + + + #phase_timings ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute phase_timings.

      +
      + +
    • + + +
    + + + + + +

    + Instance Method Summary + collapse +

    + + + + + +
    +

    Constructor Details

    + +
    +

    + + #initialize(stream, phase_timings) ⇒ EventRecorder + + + + + +

    +
    +

    Returns a new instance of EventRecorder.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +4330
    +4331
    +4332
    +4333
    +
    +
    # File 'lib/kettle/jem.rb', line 4330
    +
    +def initialize(stream, phase_timings)
    +  @stream = stream
    +  @phase_timings = phase_timings
    +end
    +
    +
    + +
    + +
    +

    Instance Attribute Details

    + + + +
    +

    + + #phase_timingsObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute phase_timings.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +4335
    +4336
    +4337
    +
    +
    # File 'lib/kettle/jem.rb', line 4335
    +
    +def phase_timings
    +  @phase_timings
    +end
    +
    +
    + +
    + + +
    +

    Instance Method Details

    + + +
    +

    + + #emit(payload) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +4337
    +4338
    +4339
    +
    +
    # File 'lib/kettle/jem.rb', line 4337
    +
    +def emit(payload)
    +  @stream.emit(payload) if @stream
    +end
    +
    +
    + +
    +

    + + #record_phase_timing(payload) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +4341
    +4342
    +4343
    +
    +
    # File 'lib/kettle/jem.rb', line 4341
    +
    +def record_phase_timing(payload)
    +  @phase_timings << payload.compact
    +end
    +
    +
    + +
    + +
    + + + +
    + + diff --git a/gems/kettle-jem/docs/Kettle/Jem/EventStream.html b/gems/kettle-jem/docs/Kettle/Jem/EventStream.html index 259e43ca0..2822a71b0 100644 --- a/gems/kettle-jem/docs/Kettle/Jem/EventStream.html +++ b/gems/kettle-jem/docs/Kettle/Jem/EventStream.html @@ -197,13 +197,13 @@

     
     
    -3628
    -3629
    -3630
    -3631
    +4316 +4317 +4318 +4319

    -
    # File 'lib/kettle/jem.rb', line 3628
    +      
    # File 'lib/kettle/jem.rb', line 4316
     
     def initialize(io, types:)
       @io = io
    @@ -236,15 +236,15 @@ 

     
     
    -3633
    -3634
    -3635
    -3636
    -3637
    -3638
    +4321 +4322 +4323 +4324 +4325 +4326

    -
    # File 'lib/kettle/jem.rb', line 3633
    +      
    # File 'lib/kettle/jem.rb', line 4321
     
     def emit(payload)
       return unless @types.include?(payload.fetch(:type).to_s)
    @@ -262,7 +262,7 @@ 

    diff --git a/gems/kettle-jem/docs/Kettle/Jem/FileWorkUnit.html b/gems/kettle-jem/docs/Kettle/Jem/FileWorkUnit.html new file mode 100644 index 000000000..e021b7b7a --- /dev/null +++ b/gems/kettle-jem/docs/Kettle/Jem/FileWorkUnit.html @@ -0,0 +1,443 @@ + + + + + + + Class: Kettle::Jem::FileWorkUnit + + — Documentation by YARD 0.9.45 + + + + + + + + + + + + + + + + + + + + + +
    + + +

    Class: Kettle::Jem::FileWorkUnit + + + +

    +
    + +
    +
    Inherits:
    +
    + Object + +
      +
    • Object
    • + + + +
    + show all + +
    +
    + + + + + + + + + + + +
    +
    Defined in:
    +
    lib/kettle/jem.rb +
    +
    + +
    + + + + + +

    Instance Attribute Summary collapse

    +
      + +
    • + + + #operations ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute operations.

      +
      + +
    • + + +
    • + + + #relative_path ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute relative_path.

      +
      + +
    • + + +
    + + + + + +

    + Instance Method Summary + collapse +

    + + + + + +
    +

    Constructor Details

    + +
    +

    + + #initialize(relative_path:, operations:) ⇒ FileWorkUnit + + + + + +

    +
    +

    Returns a new instance of FileWorkUnit.

    + + +
    +
    +
    + +

    Raises:

    +
      + +
    • + + + (ArgumentError) + + + +
    • + +
    + +
    + + + + +
    +
    +
    +
    +1679
    +1680
    +1681
    +1682
    +1683
    +1684
    +1685
    +1686
    +1687
    +1688
    +1689
    +
    +
    # File 'lib/kettle/jem.rb', line 1679
    +
    +def initialize(relative_path:, operations:)
    +  @relative_path = relative_path.to_s
    +  @operations = Array(operations)
    +  raise ArgumentError, "File work unit requires at least one operation" if @operations.empty?
    +
    +  mismatched_paths = @operations.reject { |operation| operation.relative_path == @relative_path }
    +  return if mismatched_paths.empty?
    +
    +  paths = mismatched_paths.map(&:relative_path).uniq.join(", ")
    +  raise ArgumentError, "File work unit #{relative_path.inspect} cannot include operations for #{paths}"
    +end
    +
    +
    + +
    + +
    +

    Instance Attribute Details

    + + + +
    +

    + + #operationsObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute operations.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +1677
    +1678
    +1679
    +
    +
    # File 'lib/kettle/jem.rb', line 1677
    +
    +def operations
    +  @operations
    +end
    +
    +
    + + + +
    +

    + + #relative_pathObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute relative_path.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +1677
    +1678
    +1679
    +
    +
    # File 'lib/kettle/jem.rb', line 1677
    +
    +def relative_path
    +  @relative_path
    +end
    +
    +
    + +
    + + +
    +

    Instance Method Details

    + + +
    +

    + + #outcomeObject + + + + + +

    + + + + +
    +
    +
    +
    +1691
    +1692
    +1693
    +
    +
    # File 'lib/kettle/jem.rb', line 1691
    +
    +def outcome
    +  operations.last
    +end
    +
    +
    + +
    + +
    + + + +
    + + diff --git a/gems/kettle-jem/docs/Kettle/Jem/GemSpecReader.html b/gems/kettle-jem/docs/Kettle/Jem/GemSpecReader.html index 17be50780..152d814ad 100644 --- a/gems/kettle-jem/docs/Kettle/Jem/GemSpecReader.html +++ b/gems/kettle-jem/docs/Kettle/Jem/GemSpecReader.html @@ -204,12 +204,12 @@

     
     
    -1129
    -1130
    -1131
    +1209 +1210 +1211

    -
    # File 'lib/kettle/jem.rb', line 1129
    +      
    # File 'lib/kettle/jem.rb', line 1209
     
     def clear_cache!
       CACHE.mutex.synchronize { CACHE.entries.clear }
    @@ -234,24 +234,24 @@ 

     
     
    -1113
    -1114
    -1115
    -1116
    -1117
    -1118
    -1119
    -1120
    -1121
    -1122
    -1123
    -1124
    -1125
    -1126
    -1127
    +1193 +1194 +1195 +1196 +1197 +1198 +1199 +1200 +1201 +1202 +1203 +1204 +1205 +1206 +1207

    -
    # File 'lib/kettle/jem.rb', line 1113
    +      
    # File 'lib/kettle/jem.rb', line 1193
     
     def load(root)
       cache_key = File.expand_path(root.to_s)
    @@ -278,7 +278,7 @@ 

    diff --git a/gems/kettle-jem/docs/Kettle/Jem/PluginContext.html b/gems/kettle-jem/docs/Kettle/Jem/PluginContext.html index c291fb984..d37d2163d 100644 --- a/gems/kettle-jem/docs/Kettle/Jem/PluginContext.html +++ b/gems/kettle-jem/docs/Kettle/Jem/PluginContext.html @@ -459,21 +459,21 @@

     
     
    -1508
    -1509
    -1510
    -1511
    -1512
    -1513
    -1514
    -1515
    -1516
    -1517
    -1518
    -1519
    +1589 +1590 +1591 +1592 +1593 +1594 +1595 +1596 +1597 +1598 +1599 +1600

    -
    # File 'lib/kettle/jem.rb', line 1508
    +      
    # File 'lib/kettle/jem.rb', line 1589
     
     def initialize(project_root:, mode:, facts:, recipe_pack:, recipe_reports:, changed_files:, diagnostics:, phase_reports: [])
       @project_root = project_root
    @@ -524,12 +524,12 @@ 

     
     
    -1497
    -1498
    -1499
    +1578 +1579 +1580

    -
    # File 'lib/kettle/jem.rb', line 1497
    +      
    # File 'lib/kettle/jem.rb', line 1578
     
     def changed_files
       @changed_files
    @@ -566,12 +566,12 @@ 

     
     
    -1497
    -1498
    -1499
    +1578 +1579 +1580

    -
    # File 'lib/kettle/jem.rb', line 1497
    +      
    # File 'lib/kettle/jem.rb', line 1578
     
     def diagnostics
       @diagnostics
    @@ -608,12 +608,12 @@ 

     
     
    -1497
    -1498
    -1499
    +1578 +1579 +1580

    -
    # File 'lib/kettle/jem.rb', line 1497
    +      
    # File 'lib/kettle/jem.rb', line 1578
     
     def facts
       @facts
    @@ -650,12 +650,12 @@ 

     
     
    -1497
    -1498
    -1499
    +1578 +1579 +1580

    -
    # File 'lib/kettle/jem.rb', line 1497
    +      
    # File 'lib/kettle/jem.rb', line 1578
     
     def helpers
       @helpers
    @@ -692,12 +692,12 @@ 

     
     
    -1497
    -1498
    -1499
    +1578 +1579 +1580

    -
    # File 'lib/kettle/jem.rb', line 1497
    +      
    # File 'lib/kettle/jem.rb', line 1578
     
     def mode
       @mode
    @@ -734,12 +734,12 @@ 

     
     
    -1497
    -1498
    -1499
    +1578 +1579 +1580

    -
    # File 'lib/kettle/jem.rb', line 1497
    +      
    # File 'lib/kettle/jem.rb', line 1578
     
     def out
       @out
    @@ -776,12 +776,12 @@ 

     
     
    -1497
    -1498
    -1499
    +1578 +1579 +1580

    -
    # File 'lib/kettle/jem.rb', line 1497
    +      
    # File 'lib/kettle/jem.rb', line 1578
     
     def phase_reports
       @phase_reports
    @@ -818,12 +818,12 @@ 

     
     
    -1497
    -1498
    -1499
    +1578 +1579 +1580

    -
    # File 'lib/kettle/jem.rb', line 1497
    +      
    # File 'lib/kettle/jem.rb', line 1578
     
     def project_root
       @project_root
    @@ -860,12 +860,12 @@ 

     
     
    -1497
    -1498
    -1499
    +1578 +1579 +1580

    -
    # File 'lib/kettle/jem.rb', line 1497
    +      
    # File 'lib/kettle/jem.rb', line 1578
     
     def recipe_pack
       @recipe_pack
    @@ -902,12 +902,12 @@ 

     
     
    -1497
    -1498
    -1499
    +1578 +1579 +1580

    -
    # File 'lib/kettle/jem.rb', line 1497
    +      
    # File 'lib/kettle/jem.rb', line 1578
     
     def recipe_reports
       @recipe_reports
    @@ -923,7 +923,7 @@ 

    diff --git a/gems/kettle-jem/docs/Kettle/Jem/PluginHelpers.html b/gems/kettle-jem/docs/Kettle/Jem/PluginHelpers.html index 64557fd61..31f7338a4 100644 --- a/gems/kettle-jem/docs/Kettle/Jem/PluginHelpers.html +++ b/gems/kettle-jem/docs/Kettle/Jem/PluginHelpers.html @@ -197,14 +197,14 @@

     
     
    -1523
    -1524
    -1525
    -1526
    -1527
    +1604 +1605 +1606 +1607 +1608

    -
    # File 'lib/kettle/jem.rb', line 1523
    +      
    # File 'lib/kettle/jem.rb', line 1604
     
     def initialize(project_root:, changed_files:, diagnostics:)
       @project_root = project_root
    @@ -238,19 +238,19 @@ 

     
     
    -1529
    -1530
    -1531
    -1532
    -1533
    -1534
    -1535
    -1536
    -1537
    -1538
    +1610 +1611 +1612 +1613 +1614 +1615 +1616 +1617 +1618 +1619

    -
    # File 'lib/kettle/jem.rb', line 1529
    +      
    # File 'lib/kettle/jem.rb', line 1610
     
     def record_template_result(path, action)
       relative_path = relative_project_path(path)
    @@ -272,7 +272,7 @@ 

    diff --git a/gems/kettle-jem/docs/Kettle/Jem/PluginLoader.html b/gems/kettle-jem/docs/Kettle/Jem/PluginLoader.html index bc4041f38..0f68954de 100644 --- a/gems/kettle-jem/docs/Kettle/Jem/PluginLoader.html +++ b/gems/kettle-jem/docs/Kettle/Jem/PluginLoader.html @@ -280,12 +280,12 @@

     
     
    -1491
    -1492
    -1493
    +1572 +1573 +1574

    -
    # File 'lib/kettle/jem.rb', line 1491
    +      
    # File 'lib/kettle/jem.rb', line 1572
     
     def camelize(value)
       value.to_s.split("_").map(&:capitalize).join
    @@ -310,15 +310,15 @@ 

     
     
    -1454
    -1455
    -1456
    -1457
    -1458
    -1459
    +1534 +1535 +1536 +1537 +1538 +1539

    -
    # File 'lib/kettle/jem.rb', line 1454
    +      
    # File 'lib/kettle/jem.rb', line 1534
     
     def load!(plugin_names:)
       names = normalize_plugin_names(plugin_names)
    @@ -346,26 +346,28 @@ 

     
     
    -1461
    -1462
    -1463
    -1464
    -1465
    -1466
    -1467
    -1468
    -1469
    -1470
    -1471
    -1472
    -1473
    -1474
    +1541 +1542 +1543 +1544 +1545 +1546 +1547 +1548 +1549 +1550 +1551 +1552 +1553 +1554 +1555

    -
    # File 'lib/kettle/jem.rb', line 1461
    +      
    # File 'lib/kettle/jem.rb', line 1541
     
     def load_plugin!(plugin_name, registry:)
    -  require(plugin_require_path(plugin_name))
    +  # Plugins are apply-time main-Ractor extensions; workers receive reports, not plugin callbacks.
    +  require(plugin_require_path(plugin_name))
       handle = plugin_handle(plugin_name)
       unless handle.respond_to?(REGISTRATION_METHOD)
         raise Error, "Plugin #{plugin_name.inspect} does not implement #{REGISTRATION_METHOD}."
    @@ -398,12 +400,12 @@ 

     
     
    -1476
    -1477
    -1478
    +1557 +1558 +1559

    -
    # File 'lib/kettle/jem.rb', line 1476
    +      
    # File 'lib/kettle/jem.rb', line 1557
     
     def normalize_plugin_names(plugin_names)
       Array(plugin_names).flatten.map { |name| name.to_s.strip }.reject(&:empty?).uniq
    @@ -428,15 +430,15 @@ 

     
     
    -1484
    -1485
    -1486
    -1487
    -1488
    -1489
    +1565 +1566 +1567 +1568 +1569 +1570

    -
    # File 'lib/kettle/jem.rb', line 1484
    +      
    # File 'lib/kettle/jem.rb', line 1565
     
     def plugin_handle(plugin_name)
       constant_name = plugin_name.to_s.split("-").map { |part| camelize(part) }.join("::")
    @@ -464,12 +466,12 @@ 

     
     
    -1480
    -1481
    -1482
    +1561 +1562 +1563

    -
    # File 'lib/kettle/jem.rb', line 1480
    +      
    # File 'lib/kettle/jem.rb', line 1561
     
     def plugin_require_path(plugin_name)
       plugin_name.to_s.tr("-", "/")
    @@ -484,7 +486,7 @@ 

    diff --git a/gems/kettle-jem/docs/Kettle/Jem/PluginOutput.html b/gems/kettle-jem/docs/Kettle/Jem/PluginOutput.html index 9275783f6..d71ca96e4 100644 --- a/gems/kettle-jem/docs/Kettle/Jem/PluginOutput.html +++ b/gems/kettle-jem/docs/Kettle/Jem/PluginOutput.html @@ -220,12 +220,12 @@

     
     
    -1561
    -1562
    -1563
    +1642 +1643 +1644

    -
    # File 'lib/kettle/jem.rb', line 1561
    +      
    # File 'lib/kettle/jem.rb', line 1642
     
     def initialize(diagnostics:)
       @diagnostics = diagnostics
    @@ -257,12 +257,12 @@ 

     
     
    -1565
    -1566
    -1567
    +1646 +1647 +1648

    -
    # File 'lib/kettle/jem.rb', line 1565
    +      
    # File 'lib/kettle/jem.rb', line 1646
     
     def report_detail(message)
       @diagnostics << {kind: "plugin_detail", message: message.to_s}
    @@ -287,12 +287,12 @@ 

     
     
    -1569
    -1570
    -1571
    +1650 +1651 +1652

    -
    # File 'lib/kettle/jem.rb', line 1569
    +      
    # File 'lib/kettle/jem.rb', line 1650
     
     def warning(message)
       @diagnostics << {kind: "plugin_warning", message: message.to_s}
    @@ -307,7 +307,7 @@ 

    diff --git a/gems/kettle-jem/docs/Kettle/Jem/PluginRegistrar.html b/gems/kettle-jem/docs/Kettle/Jem/PluginRegistrar.html index ba3e36dca..2d4d8253d 100644 --- a/gems/kettle-jem/docs/Kettle/Jem/PluginRegistrar.html +++ b/gems/kettle-jem/docs/Kettle/Jem/PluginRegistrar.html @@ -276,13 +276,13 @@

     
     
    -1431
    -1432
    -1433
    -1434
    +1511 +1512 +1513 +1514

    -
    # File 'lib/kettle/jem.rb', line 1431
    +      
    # File 'lib/kettle/jem.rb', line 1511
     
     def initialize(plugin_name:, registry:)
       @plugin_name = plugin_name.to_s
    @@ -325,12 +325,12 @@ 

     
     
    -1429
    -1430
    -1431
    +1509 +1510 +1511

    -
    # File 'lib/kettle/jem.rb', line 1429
    +      
    # File 'lib/kettle/jem.rb', line 1509
     
     def plugin_name
       @plugin_name
    @@ -362,12 +362,12 @@ 

     
     
    -1444
    -1445
    -1446
    +1524 +1525 +1526

    -
    # File 'lib/kettle/jem.rb', line 1444
    +      
    # File 'lib/kettle/jem.rb', line 1524
     
     def after_phase(phase, &block)
       on_phase(phase, timing: :after, &block)
    @@ -392,12 +392,12 @@ 

     
     
    -1440
    -1441
    -1442
    +1520 +1521 +1522

    -
    # File 'lib/kettle/jem.rb', line 1440
    +      
    # File 'lib/kettle/jem.rb', line 1520
     
     def before_phase(phase, &block)
       on_phase(phase, timing: :before, &block)
    @@ -422,12 +422,12 @@ 

     
     
    -1436
    -1437
    -1438
    +1516 +1517 +1518

    -
    # File 'lib/kettle/jem.rb', line 1436
    +      
    # File 'lib/kettle/jem.rb', line 1516
     
     def on_phase(phase, timing: :after, &block)
       @registry.register(plugin_name: plugin_name, phase: phase, timing: timing, &block)
    @@ -442,7 +442,7 @@ 

    diff --git a/gems/kettle-jem/docs/Kettle/Jem/PluginRegistry.html b/gems/kettle-jem/docs/Kettle/Jem/PluginRegistry.html index 1b70040a2..f9bd3c4cf 100644 --- a/gems/kettle-jem/docs/Kettle/Jem/PluginRegistry.html +++ b/gems/kettle-jem/docs/Kettle/Jem/PluginRegistry.html @@ -386,15 +386,15 @@

     
     
    -1371
    -1372
    -1373
    -1374
    -1375
    -1376
    +1451 +1452 +1453 +1454 +1455 +1456

    -
    # File 'lib/kettle/jem.rb', line 1371
    +      
    # File 'lib/kettle/jem.rb', line 1451
     
     def initialize(configured_plugins: [], loaded_plugins: [])
       @hooks = []
    @@ -439,12 +439,12 @@ 

     
     
    -1369
    -1370
    -1371
    +1449 +1450 +1451

    -
    # File 'lib/kettle/jem.rb', line 1369
    +      
    # File 'lib/kettle/jem.rb', line 1449
     
     def configured_plugins
       @configured_plugins
    @@ -481,12 +481,12 @@ 

     
     
    -1369
    -1370
    -1371
    +1449 +1450 +1451

    -
    # File 'lib/kettle/jem.rb', line 1369
    +      
    # File 'lib/kettle/jem.rb', line 1449
     
     def hooks
       @hooks
    @@ -523,12 +523,12 @@ 

     
     
    -1369
    -1370
    -1371
    +1449 +1450 +1451

    -
    # File 'lib/kettle/jem.rb', line 1369
    +      
    # File 'lib/kettle/jem.rb', line 1449
     
     def load_errors
       @load_errors
    @@ -565,12 +565,12 @@ 

     
     
    -1369
    -1370
    -1371
    +1449 +1450 +1451

    -
    # File 'lib/kettle/jem.rb', line 1369
    +      
    # File 'lib/kettle/jem.rb', line 1449
     
     def loaded_plugins
       @loaded_plugins
    @@ -625,12 +625,12 @@ 

     
     
    -1403
    -1404
    -1405
    +1483 +1484 +1485

    -
    # File 'lib/kettle/jem.rb', line 1403
    +      
    # File 'lib/kettle/jem.rb', line 1483
     
     def empty?
       @hooks.empty?
    @@ -678,19 +678,19 @@ 

     
     
    -1378
    -1379
    -1380
    -1381
    -1382
    -1383
    -1384
    -1385
    -1386
    -1387
    +1458 +1459 +1460 +1461 +1462 +1463 +1464 +1465 +1466 +1467

    -
    # File 'lib/kettle/jem.rb', line 1378
    +      
    # File 'lib/kettle/jem.rb', line 1458
     
     def register(plugin_name:, phase:, timing:, &callback)
       raise ArgumentError, "Plugin callbacks require a block" unless callback
    @@ -722,22 +722,22 @@ 

     
     
    -1389
    -1390
    -1391
    -1392
    -1393
    -1394
    -1395
    -1396
    -1397
    -1398
    -1399
    -1400
    -1401
    +1469 +1470 +1471 +1472 +1473 +1474 +1475 +1476 +1477 +1478 +1479 +1480 +1481

    -
    # File 'lib/kettle/jem.rb', line 1389
    +      
    # File 'lib/kettle/jem.rb', line 1469
     
     def run(timing:, phase:, context:, actor:, phase_stats:)
       normalized_phase = normalize_phase(phase)
    @@ -762,7 +762,7 @@ 

    diff --git a/gems/kettle-jem/docs/Kettle/Jem/PluginRegistry/Hook.html b/gems/kettle-jem/docs/Kettle/Jem/PluginRegistry/Hook.html index 064072d72..18e99de53 100644 --- a/gems/kettle-jem/docs/Kettle/Jem/PluginRegistry/Hook.html +++ b/gems/kettle-jem/docs/Kettle/Jem/PluginRegistry/Hook.html @@ -269,12 +269,12 @@

     
     
    -1366
    -1367
    -1368
    +1446 +1447 +1448

    -
    # File 'lib/kettle/jem.rb', line 1366
    +      
    # File 'lib/kettle/jem.rb', line 1446
     
     def callback
       @callback
    @@ -328,12 +328,12 @@ 

     
     
    -1366
    -1367
    -1368
    +1446 +1447 +1448

    -
    # File 'lib/kettle/jem.rb', line 1366
    +      
    # File 'lib/kettle/jem.rb', line 1446
     
     def phase
       @phase
    @@ -387,12 +387,12 @@ 

     
     
    -1366
    -1367
    -1368
    +1446 +1447 +1448

    -
    # File 'lib/kettle/jem.rb', line 1366
    +      
    # File 'lib/kettle/jem.rb', line 1446
     
     def plugin_name
       @plugin_name
    @@ -446,12 +446,12 @@ 

     
     
    -1366
    -1367
    -1368
    +1446 +1447 +1448

    -
    # File 'lib/kettle/jem.rb', line 1366
    +      
    # File 'lib/kettle/jem.rb', line 1446
     
     def timing
       @timing
    @@ -467,7 +467,7 @@ 

    diff --git a/gems/kettle-jem/docs/Kettle/Jem/ReadmePostProcessor.html b/gems/kettle-jem/docs/Kettle/Jem/ReadmePostProcessor.html index 3147d5c5f..8d84a6d1f 100644 --- a/gems/kettle-jem/docs/Kettle/Jem/ReadmePostProcessor.html +++ b/gems/kettle-jem/docs/Kettle/Jem/ReadmePostProcessor.html @@ -124,7 +124,7 @@

    ENGINE_ROW_PATTERNS =
    -
    {
    +        
    Ractor.make_shareable({
       "jruby" => {
         row_prefix: "| Works with JRuby",
         badge_prefixes: %w[💎jruby-],
    @@ -135,7 +135,7 @@ 

    badge_prefixes: %w[💎truby-], ref_prefixes: [/\A🚎truby-/, /\A🚎\d+-t-/] }.freeze -}.freeze

    +})
    VERSIONED_ENGINE_COMPATIBILITY_BADGES = @@ -385,6 +385,29 @@

    +
    +
    + +

  • + + +
  • + + + .markdown_structural_owners(content, *owner_scopes) ⇒ Object + + + + + + + + + + + + +
    @@ -807,22 +830,22 @@

    -756 -757 -758 -759 -760 -761 -762 -763 -764 -765 -766 -767 -768 +825 +826 +827 +828 +829 +830 +831 +832 +833 +834 +835 +836 +837 -
    # File 'lib/kettle/jem.rb', line 756
    +      
    # File 'lib/kettle/jem.rb', line 825
     
     def add_supported_versioned_engine_badges(content, min_ruby, workflow_paths)
       existing_workflows = Array(workflow_paths).map { |path| path.to_s.delete_prefix("./") }.to_set
    @@ -857,21 +880,21 @@ 

     
     
    -792
    -793
    -794
    -795
    -796
    -797
    -798
    -799
    -800
    -801
    -802
    -803
    +861 +862 +863 +864 +865 +866 +867 +868 +869 +870 +871 +872

    -
    # File 'lib/kettle/jem.rb', line 792
    +      
    # File 'lib/kettle/jem.rb', line 861
     
     def add_versioned_engine_badge_definitions(content, badge)
       processed = ensure_markdown_link_definition(content, badge.fetch(:badge_definition))
    @@ -905,25 +928,25 @@ 

     
     
    -775
    -776
    -777
    -778
    -779
    -780
    -781
    -782
    -783
    -784
    -785
    -786
    -787
    -788
    -789
    -790
    +844 +845 +846 +847 +848 +849 +850 +851 +852 +853 +854 +855 +856 +857 +858 +859

    -
    # File 'lib/kettle/jem.rb', line 775
    +      
    # File 'lib/kettle/jem.rb', line 844
     
     def add_versioned_engine_badge_to_row(content, badge)
       lines = content.lines
    @@ -961,18 +984,18 @@ 

     
     
    -831
    -832
    -833
    -834
    -835
    -836
    -837
    -838
    -839
    +900 +901 +902 +903 +904 +905 +906 +907 +908

    -
    # File 'lib/kettle/jem.rb', line 831
    +      
    # File 'lib/kettle/jem.rb', line 900
     
     def compatibility_badge_min_mri(label)
       if (match = label.match(/\A💎ruby-(?<version>\d+\.\d+)i\z/))
    @@ -1026,13 +1049,13 @@ 

     
     
    -924
    -925
    -926
    -927
    +1005 +1006 +1007 +1008

    -
    # File 'lib/kettle/jem.rb', line 924
    +      
    # File 'lib/kettle/jem.rb', line 1005
     
     def compatibility_row?(line)
       text = line.to_s.lstrip
    @@ -1058,29 +1081,27 @@ 
    -
    # File 'lib/kettle/jem.rb', line 929
    +      
    # File 'lib/kettle/jem.rb', line 1010
     
     def delete_markdown_link_definitions(content, labels)
       Kettle::Jem.ensure_runtime_dependencies!
    -  labels.uniq.reduce(content.to_s) do |processed, label|
    -    Ast::Crispr::Delete.call(
    -      content: processed,
    -      target: Ast::Crispr::Markdown::Markly::Selectors.link_definition(label: label, limit: {at_least: 0}),
    -      source_label: "README.md"
    -    ).updated_content
    +  targets = labels.uniq.map do |label|
    +    Ast::Crispr::Markdown::Markly::Selectors.link_definition(label: label, limit: {at_least: 0})
       end
    +  return content if targets.empty?
    +
    +  Ast::Crispr::DeleteBatch.call(content: content.to_s, targets: targets, source_label: "README.md").updated_content
     end
    @@ -1102,16 +1123,16 @@
    -
    # File 'lib/kettle/jem.rb', line 805
    +      
    # File 'lib/kettle/jem.rb', line 874
     
     def ensure_markdown_link_definition(content, definition)
       label = definition[/\A(\[[^\]]+\]):/, 1]
    @@ -1140,16 +1161,16 @@ 

     
     
    -908
    -909
    -910
    -911
    -912
    -913
    -914
    +979 +980 +981 +982 +983 +984 +985

    -
    # File 'lib/kettle/jem.rb', line 908
    +      
    # File 'lib/kettle/jem.rb', line 979
     
     def markdown_inline_reference_owners(content)
       Kettle::Jem.ensure_runtime_dependencies!
    @@ -1178,16 +1199,16 @@ 
    -
    # File 'lib/kettle/jem.rb', line 900
    +      
    # File 'lib/kettle/jem.rb', line 971
     
     def markdown_link_definition_owners(content)
       Kettle::Jem.ensure_runtime_dependencies!
    @@ -1199,6 +1220,48 @@ 
    -
    # File 'lib/kettle/jem.rb', line 916
    +      
    # File 'lib/kettle/jem.rb', line 987
     
     def markdown_table_row_owners(content)
       Kettle::Jem.ensure_runtime_dependencies!
    @@ -1254,18 +1317,18 @@ 

     
     
    -869
    -870
    -871
    -872
    -873
    -874
    -875
    -876
    -877
    +938 +939 +940 +941 +942 +943 +944 +945 +946

    -
    # File 'lib/kettle/jem.rb', line 869
    +      
    # File 'lib/kettle/jem.rb', line 938
     
     def normalize_compatibility_badge_cell(cell)
       cell.to_s
    @@ -1296,27 +1359,27 @@ 

     
     
    -850
    -851
    -852
    -853
    -854
    -855
    -856
    -857
    -858
    -859
    -860
    -861
    -862
    -863
    -864
    -865
    -866
    -867
    +919 +920 +921 +922 +923 +924 +925 +926 +927 +928 +929 +930 +931 +932 +933 +934 +935 +936

    -
    # File 'lib/kettle/jem.rb', line 850
    +      
    # File 'lib/kettle/jem.rb', line 919
     
     def normalize_compatibility_rows(content)
       lines = content.lines
    @@ -1356,22 +1419,22 @@ 

     
     
    -689
    -690
    -691
    -692
    -693
    -694
    -695
    -696
    -697
    -698
    -699
    -700
    -701
    +758 +759 +760 +761 +762 +763 +764 +765 +766 +767 +768 +769 +770

    -
    # File 'lib/kettle/jem.rb', line 689
    +      
    # File 'lib/kettle/jem.rb', line 758
     
     def process(content:, min_ruby:, engines: nil, workflow_paths: nil)
       Kettle::Jem.ensure_runtime_dependencies!
    @@ -1406,23 +1469,25 @@ 

    -889 -890 -891 -892 -893 -894 -895 -896 -897 -898

    +959 +960 +961 +962 +963 +964 +965 +966 +967 +968 +969
    -
    # File 'lib/kettle/jem.rb', line 889
    +      
    # File 'lib/kettle/jem.rb', line 959
     
     def prune_orphaned_workflow_inline_references(content)
    -  defined_labels = markdown_link_definition_owners(content).map { |owner| owner.label.to_s }.to_set
    -  orphaned_labels = markdown_inline_reference_owners(content).flat_map(&:labels).map(&:to_s).uniq.select do |label|
    +  owners = markdown_structural_owners(content, :link_definitions, :inline_references)
    +  defined_labels = owners.fetch(:link_definitions).map { |owner| owner.label.to_s }.to_set
    +  orphaned_labels = owners.fetch(:inline_references).flat_map(&:labels).map(&:to_s).uniq.select do |label|
         label.start_with?("🚎") && !defined_labels.include?(label)
       end
       processed = orphaned_labels.reduce(content.to_s) do |memo, label|
    @@ -1450,23 +1515,25 @@ 

    -879 -880 -881 -882 -883 -884 -885 -886 -887

    +948 +949 +950 +951 +952 +953 +954 +955 +956 +957
    -
    # File 'lib/kettle/jem.rb', line 879
    +      
    # File 'lib/kettle/jem.rb', line 948
     
     def prune_unused_compatibility_reference_definitions(content)
    -  referenced_labels = markdown_inline_reference_owners(content).flat_map(&:labels).to_h { |label| [label, true] }
    +  owners = markdown_structural_owners(content, :inline_references, :link_definitions)
    +  referenced_labels = owners.fetch(:inline_references).flat_map(&:labels).to_h { |label| [label, true] }
     
    -  labels = markdown_link_definition_owners(content).filter_map do |owner|
    +  labels = owners.fetch(:link_definitions).filter_map do |owner|
         label = owner.label.to_s
         label if COMPATIBILITY_REFERENCE_LABEL_RE.match?(label) && !referenced_labels[label]
       end
    @@ -1492,12 +1559,12 @@ 

     
     
    -846
    -847
    -848
    +915 +916 +917

    -
    # File 'lib/kettle/jem.rb', line 846
    +      
    # File 'lib/kettle/jem.rb', line 915
     
     def remove_badge_occurrences(content, label)
       remove_markdown_inline_references(content, label)
    @@ -1522,34 +1589,34 @@ 

     
     
    -703
    -704
    -705
    -706
    -707
    -708
    -709
    -710
    -711
    -712
    -713
    -714
    -715
    -716
    -717
    -718
    -719
    -720
    -721
    -722
    -723
    -724
    -725
    -726
    -727
    +772 +773 +774 +775 +776 +777 +778 +779 +780 +781 +782 +783 +784 +785 +786 +787 +788 +789 +790 +791 +792 +793 +794 +795 +796

    -
    # File 'lib/kettle/jem.rb', line 703
    +      
    # File 'lib/kettle/jem.rb', line 772
     
     def remove_disabled_engine_content(content, engines)
       enabled = Array(engines).map { |engine| engine.to_s.strip.downcase }
    @@ -1596,19 +1663,19 @@ 

    -820 -821 -822 -823 -824 -825 -826 -827 -828 -829

    +889 +890 +891 +892 +893 +894 +895 +896 +897 +898
    -
    # File 'lib/kettle/jem.rb', line 820
    +      
    # File 'lib/kettle/jem.rb', line 889
     
     def remove_incompatible_compatibility_badges(content, min_ruby)
       markdown_inline_reference_owners(content).flat_map(&:labels).uniq.each do |label|
    @@ -1640,30 +1707,30 @@ 

     
     
    -940
    -941
    -942
    -943
    -944
    -945
    -946
    -947
    -948
    -949
    -950
    -951
    -952
    -953
    -954
    -955
    -956
    -957
    -958
    -959
    -960
    +1020 +1021 +1022 +1023 +1024 +1025 +1026 +1027 +1028 +1029 +1030 +1031 +1032 +1033 +1034 +1035 +1036 +1037 +1038 +1039 +1040

    -
    # File 'lib/kettle/jem.rb', line 940
    +      
    # File 'lib/kettle/jem.rb', line 1020
     
     def remove_markdown_inline_references(content, label)
       lines = content.to_s.lines
    @@ -1706,16 +1773,16 @@ 

     
     
    -962
    -963
    -964
    -965
    -966
    -967
    -968
    +1042 +1043 +1044 +1045 +1046 +1047 +1048

    -
    # File 'lib/kettle/jem.rb', line 962
    +      
    # File 'lib/kettle/jem.rb', line 1042
     
     def remove_markdown_table_rows(content)
       lines = content.to_s.lines
    @@ -1744,19 +1811,19 @@ 

     
     
    -729
    -730
    -731
    -732
    -733
    -734
    -735
    -736
    -737
    -738
    +798 +799 +800 +801 +802 +803 +804 +805 +806 +807

    -
    # File 'lib/kettle/jem.rb', line 729
    +      
    # File 'lib/kettle/jem.rb', line 798
     
     def remove_missing_workflow_badges(content, workflow_paths)
       existing = Array(workflow_paths).map { |path| path.to_s.delete_prefix("./") }.to_set
    @@ -1788,12 +1855,12 @@ 

     
     
    -752
    -753
    -754
    +821 +822 +823

    -
    # File 'lib/kettle/jem.rb', line 752
    +      
    # File 'lib/kettle/jem.rb', line 821
     
     def remove_workflow_badge_occurrences(content, workflow_label)
       remove_markdown_inline_references(content, workflow_label)
    @@ -1818,13 +1885,13 @@ 

     
     
    -841
    -842
    -843
    -844
    +910 +911 +912 +913

    -
    # File 'lib/kettle/jem.rb', line 841
    +      
    # File 'lib/kettle/jem.rb', line 910
     
     def ruby_minor_version(version)
       segments = version.segments
    @@ -1873,13 +1940,13 @@ 

     
     
    -770
    -771
    -772
    -773
    +839 +840 +841 +842

    -
    # File 'lib/kettle/jem.rb', line 770
    +      
    # File 'lib/kettle/jem.rb', line 839
     
     def versioned_engine_badge_compatible?(badge, min_ruby)
       badge_min_mri = ENGINE_COMPATIBILITY_MRI_VERSION.dig(badge.fetch(:engine), badge.fetch(:version))
    @@ -1905,15 +1972,15 @@ 

     
     
    -813
    -814
    -815
    -816
    -817
    -818
    +882 +883 +884 +885 +886 +887

    -
    # File 'lib/kettle/jem.rb', line 813
    +      
    # File 'lib/kettle/jem.rb', line 882
     
     def workflow_definition_base_url(content)
       markdown_link_definition_owners(content).filter_map do |owner|
    @@ -1941,23 +2008,23 @@ 

     
     
    -740
    -741
    -742
    -743
    -744
    -745
    -746
    -747
    -748
    -749
    -750
    +809 +810 +811 +812 +813 +814 +815 +816 +817 +818 +819

    -
    # File 'lib/kettle/jem.rb', line 740
    +      
    # File 'lib/kettle/jem.rb', line 809
     
     def workflow_references(content)
    -  markdown_link_definition_owners(content).each_with_object({}) do |owner, references|
    +  markdown_structural_owners(content, :link_definitions).fetch(:link_definitions).each_with_object({}) do |owner, references|
         workflow = URI(owner.url.to_s).path.to_s.split("/actions/workflows/", 2).last
         next unless workflow
         workflow = workflow.split("/", 2).first
    @@ -1977,7 +2044,7 @@ 

    diff --git a/gems/kettle-jem/docs/Kettle/Jem/RubyGemsResolver.html b/gems/kettle-jem/docs/Kettle/Jem/RubyGemsResolver.html index ec6b612f3..417c44550 100644 --- a/gems/kettle-jem/docs/Kettle/Jem/RubyGemsResolver.html +++ b/gems/kettle-jem/docs/Kettle/Jem/RubyGemsResolver.html @@ -389,15 +389,15 @@

     
     
    -977
    -978
    -979
    -980
    -981
    -982
    +1057 +1058 +1059 +1060 +1061 +1062

    -
    # File 'lib/kettle/jem.rb', line 977
    +      
    # File 'lib/kettle/jem.rb', line 1057
     
     def initialize(cache: {}, http_get: nil, v1_api_base: RUBYGEMS_V1_API_BASE, v2_api_base: RUBYGEMS_V2_API_BASE)
       @cache = cache
    @@ -442,12 +442,12 @@ 

     
     
    -975
    -976
    -977
    +1055 +1056 +1057

    -
    # File 'lib/kettle/jem.rb', line 975
    +      
    # File 'lib/kettle/jem.rb', line 1055
     
     def cache
       @cache
    @@ -479,19 +479,19 @@ 

     
     
    -1053
    -1054
    -1055
    -1056
    -1057
    -1058
    -1059
    -1060
    -1061
    -1062
    +1133 +1134 +1135 +1136 +1137 +1138 +1139 +1140 +1141 +1142

    -
    # File 'lib/kettle/jem.rb', line 1053
    +      
    # File 'lib/kettle/jem.rb', line 1133
     
     def fetch_gem_info(gem_name, version)
       cache_key = "info:#{gem_name}:#{version}"
    @@ -546,19 +546,19 @@ 

     
     
    -1042
    -1043
    -1044
    -1045
    -1046
    -1047
    -1048
    -1049
    -1050
    -1051
    +1122 +1123 +1124 +1125 +1126 +1127 +1128 +1129 +1130 +1131

    -
    # File 'lib/kettle/jem.rb', line 1042
    +      
    # File 'lib/kettle/jem.rb', line 1122
     
     def fetch_versions(gem_name)
       cache_key = "versions:#{gem_name}"
    @@ -590,13 +590,13 @@ 

     
     
    -1019
    -1020
    -1021
    -1022
    +1099 +1100 +1101 +1102

    -
    # File 'lib/kettle/jem.rb', line 1019
    +      
    # File 'lib/kettle/jem.rb', line 1099
     
     def min_ruby_version(gem_name, version)
       entry = fetch_versions(gem_name).find { |candidate| candidate["number"].to_s == version.to_s }
    @@ -622,26 +622,26 @@ 

     
     
    -1024
    -1025
    -1026
    -1027
    -1028
    -1029
    -1030
    -1031
    -1032
    -1033
    -1034
    -1035
    -1036
    -1037
    -1038
    -1039
    -1040
    +1104 +1105 +1106 +1107 +1108 +1109 +1110 +1111 +1112 +1113 +1114 +1115 +1116 +1117 +1118 +1119 +1120

    -
    # File 'lib/kettle/jem.rb', line 1024
    +      
    # File 'lib/kettle/jem.rb', line 1104
     
     def minor_versions_by_major(gem_name, requirements: nil)
       versions(gem_name, requirements: requirements).each_with_object({}) do |entry, grouped|
    @@ -680,23 +680,23 @@ 

     
     
    -1064
    -1065
    -1066
    -1067
    -1068
    -1069
    -1070
    -1071
    -1072
    -1073
    -1074
    -1075
    -1076
    -1077
    +1144 +1145 +1146 +1147 +1148 +1149 +1150 +1151 +1152 +1153 +1154 +1155 +1156 +1157

    -
    # File 'lib/kettle/jem.rb', line 1064
    +      
    # File 'lib/kettle/jem.rb', line 1144
     
     def parse_min_ruby(requirement)
       return if requirement.to_s.strip.empty?
    @@ -732,26 +732,26 @@ 

     
     
    -1001
    -1002
    -1003
    -1004
    -1005
    -1006
    -1007
    -1008
    -1009
    -1010
    -1011
    -1012
    -1013
    -1014
    -1015
    -1016
    -1017
    +1081 +1082 +1083 +1084 +1085 +1086 +1087 +1088 +1089 +1090 +1091 +1092 +1093 +1094 +1095 +1096 +1097

    -
    # File 'lib/kettle/jem.rb', line 1001
    +      
    # File 'lib/kettle/jem.rb', line 1081
     
     def version_info(gem_name, version)
       data = fetch_gem_info(gem_name, version)
    @@ -790,25 +790,25 @@ 

     
     
    -984
    -985
    -986
    -987
    -988
    -989
    -990
    -991
    -992
    -993
    -994
    -995
    -996
    -997
    -998
    -999
    +1064 +1065 +1066 +1067 +1068 +1069 +1070 +1071 +1072 +1073 +1074 +1075 +1076 +1077 +1078 +1079

    -
    # File 'lib/kettle/jem.rb', line 984
    +      
    # File 'lib/kettle/jem.rb', line 1064
     
     def versions(gem_name, include_prerelease: false, requirements: nil)
       requirement = normalize_requirements(requirements)
    @@ -836,7 +836,7 @@ 

    diff --git a/gems/kettle-jem/docs/Kettle/Jem/SelfTest.html b/gems/kettle-jem/docs/Kettle/Jem/SelfTest.html index 42f227bd7..17f54b185 100644 --- a/gems/kettle-jem/docs/Kettle/Jem/SelfTest.html +++ b/gems/kettle-jem/docs/Kettle/Jem/SelfTest.html @@ -108,7 +108,7 @@

    Defined Under Namespace

    diff --git a/gems/kettle-jem/docs/Kettle/Jem/SelfTest/Manifest.html b/gems/kettle-jem/docs/Kettle/Jem/SelfTest/Manifest.html index 31b2f25e2..e0eca4834 100644 --- a/gems/kettle-jem/docs/Kettle/Jem/SelfTest/Manifest.html +++ b/gems/kettle-jem/docs/Kettle/Jem/SelfTest/Manifest.html @@ -172,27 +172,27 @@

     
     
    -1957
    -1958
    -1959
    -1960
    -1961
    -1962
    -1963
    -1964
    -1965
    -1966
    -1967
    -1968
    -1969
    -1970
    -1971
    -1972
    -1973
    -1974
    +2128 +2129 +2130 +2131 +2132 +2133 +2134 +2135 +2136 +2137 +2138 +2139 +2140 +2141 +2142 +2143 +2144 +2145

    -
    # File 'lib/kettle/jem.rb', line 1957
    +      
    # File 'lib/kettle/jem.rb', line 2128
     
     def compare(before, after)
       all_keys = (before.keys | after.keys).sort
    @@ -232,25 +232,25 @@ 

     
     
    -1940
    -1941
    -1942
    -1943
    -1944
    -1945
    -1946
    -1947
    -1948
    -1949
    -1950
    -1951
    -1952
    -1953
    -1954
    -1955
    +2111 +2112 +2113 +2114 +2115 +2116 +2117 +2118 +2119 +2120 +2121 +2122 +2123 +2124 +2125 +2126

    -
    # File 'lib/kettle/jem.rb', line 1940
    +      
    # File 'lib/kettle/jem.rb', line 2111
     
     def generate(dir)
       result = {}
    @@ -278,7 +278,7 @@ 

    diff --git a/gems/kettle-jem/docs/Kettle/Jem/SelfTest/Reporter.html b/gems/kettle-jem/docs/Kettle/Jem/SelfTest/Reporter.html index 29857e77d..bfee31f36 100644 --- a/gems/kettle-jem/docs/Kettle/Jem/SelfTest/Reporter.html +++ b/gems/kettle-jem/docs/Kettle/Jem/SelfTest/Reporter.html @@ -218,25 +218,25 @@

     
     
    -2041
    -2042
    -2043
    -2044
    -2045
    -2046
    -2047
    -2048
    -2049
    -2050
    -2051
    -2052
    -2053
    -2054
    -2055
    -2056
    +2212 +2213 +2214 +2215 +2216 +2217 +2218 +2219 +2220 +2221 +2222 +2223 +2224 +2225 +2226 +2227

    -
    # File 'lib/kettle/jem.rb', line 2041
    +      
    # File 'lib/kettle/jem.rb', line 2212
     
     def append_self_test_table(lines, title, paths, status = nil)
       return if paths.empty?
    @@ -274,24 +274,24 @@ 

     
     
    -2058
    -2059
    -2060
    -2061
    -2062
    -2063
    -2064
    -2065
    -2066
    -2067
    -2068
    -2069
    -2070
    -2071
    -2072
    +2229 +2230 +2231 +2232 +2233 +2234 +2235 +2236 +2237 +2238 +2239 +2240 +2241 +2242 +2243

    -
    # File 'lib/kettle/jem.rb', line 2058
    +      
    # File 'lib/kettle/jem.rb', line 2229
     
     def append_skipped_files(lines, skipped)
       return if skipped.empty?
    @@ -328,21 +328,21 @@ 

     
     
    -1980
    -1981
    -1982
    -1983
    -1984
    -1985
    -1986
    -1987
    -1988
    -1989
    -1990
    -1991
    +2151 +2152 +2153 +2154 +2155 +2156 +2157 +2158 +2159 +2160 +2161 +2162

    -
    # File 'lib/kettle/jem.rb', line 1980
    +      
    # File 'lib/kettle/jem.rb', line 2151
     
     def diff(file_a, file_b)
       a = File.exist?(file_a.to_s) ? file_a.to_s : File::NULL
    @@ -376,56 +376,56 @@ 

     
     
    -1993
    -1994
    -1995
    -1996
    -1997
    -1998
    -1999
    -2000
    -2001
    -2002
    -2003
    -2004
    -2005
    -2006
    -2007
    -2008
    -2009
    -2010
    -2011
    -2012
    -2013
    -2014
    -2015
    -2016
    -2017
    -2018
    -2019
    -2020
    -2021
    -2022
    -2023
    -2024
    -2025
    -2026
    -2027
    -2028
    -2029
    -2030
    -2031
    -2032
    -2033
    -2034
    -2035
    -2036
    -2037
    -2038
    -2039
    +2164 +2165 +2166 +2167 +2168 +2169 +2170 +2171 +2172 +2173 +2174 +2175 +2176 +2177 +2178 +2179 +2180 +2181 +2182 +2183 +2184 +2185 +2186 +2187 +2188 +2189 +2190 +2191 +2192 +2193 +2194 +2195 +2196 +2197 +2198 +2199 +2200 +2201 +2202 +2203 +2204 +2205 +2206 +2207 +2208 +2209 +2210

    -
    # File 'lib/kettle/jem.rb', line 1993
    +      
    # File 'lib/kettle/jem.rb', line 2164
     
     def summary(comparison, output_dir:, templating_environment: nil, diff_count: nil, now: Time.now)
       matched = comparison.fetch(:matched, [])
    @@ -484,7 +484,7 @@ 

    diff --git a/gems/kettle-jem/docs/Kettle/Jem/Tasks.html b/gems/kettle-jem/docs/Kettle/Jem/Tasks.html index 4968e455e..8bf766bcf 100644 --- a/gems/kettle-jem/docs/Kettle/Jem/Tasks.html +++ b/gems/kettle-jem/docs/Kettle/Jem/Tasks.html @@ -110,7 +110,7 @@

    Defined Under Namespace

    diff --git a/gems/kettle-jem/docs/Kettle/Jem/Tasks/InstallTask.html b/gems/kettle-jem/docs/Kettle/Jem/Tasks/InstallTask.html index da9b6115b..5c7b0c8d6 100644 --- a/gems/kettle-jem/docs/Kettle/Jem/Tasks/InstallTask.html +++ b/gems/kettle-jem/docs/Kettle/Jem/Tasks/InstallTask.html @@ -98,7 +98,7 @@

    CURATED_BINSTUB_GEMS =
    -
    %w[appraisal2 rake rbs rspec-core yard kettle-dev kettle-test kettle-soup-cover stone_checksums].freeze
    +
    %w[appraisal2 rake rbs rspec-core yard kettle-dev kettle-test kettle-soup-cover kettle-gha-pins stone_checksums].freeze
    CURATED_BINSTUB_DISCRETE_EXECUTABLES = @@ -111,7 +111,7 @@

    DEFAULT_GIT_DRIVER_DEFINITIONS =
    -
    [
    +        
    Ractor.make_shareable([
       {
         language: "ruby",
         pattern: "*.rb",
    @@ -136,21 +136,21 @@ 

    diff_command: "smorg-rs diff-driver", merge_command: "smorg-rs merge-driver %O %A %B %P" } -].freeze

    +])
    GIT_DRIVER_LANGUAGE_REGISTRY =
    -
    DEFAULT_GIT_DRIVER_DEFINITIONS.to_h { |definition| [definition.fetch(:language), definition] }.freeze
    +
    Ractor.make_shareable(DEFAULT_GIT_DRIVER_DEFINITIONS.to_h { |definition| [definition.fetch(:language), definition] })
    BUILTIN_GIT_DIFF_ATTRIBUTES =
    -
    [
    +        
    Ractor.make_shareable([
       {path: ".gitattributes", pattern: "*.rb", attributes: {"diff" => "ruby"}},
       {path: ".gitattributes", pattern: "*.go", attributes: {"diff" => "golang"}},
       {path: ".gitattributes", pattern: "*.rs", attributes: {"diff" => "rust"}}
    -].freeze
    +])
    @@ -301,6 +301,29 @@

    +
    +
    + +

  • + + +
  • + + + .bundle_env_fingerprint(env) ⇒ Object + + + + + + + + + + + + +
    @@ -393,6 +416,29 @@

    +
    +
    + +

  • + + +
  • + + + .bundler_command_env(project_root, env) ⇒ Object + + + + + + + + + + + + +
    @@ -669,6 +715,29 @@

    +
    +
    + +

  • + + +
  • + + + .distinct_bundle_install_step(project_root, env:, setup_env:) ⇒ Object + + + + + + + + + + + + +
    @@ -738,6 +807,29 @@

    +
    +
    + +

  • + + +
  • + + + .execute_bootstrap_commit_step(step, project_root:, env:, quiet:, command_runner:) ⇒ Object + + + + + + + + + + + + +
    @@ -876,6 +968,29 @@

    +
    +
    + +

  • + + +
  • + + + .execute_unlocked_ready_commands_step(step, project_root:, env:, quiet:, command_runner:) ⇒ Object + + + + + + + + + + + + +
    @@ -1543,6 +1658,29 @@

    +
    +
    + +

  • + + +
  • + + + .ignored_bundle_env_key?(key) ⇒ Boolean + + + + + + + + + + + + +
    @@ -2081,7 +2219,7 @@

  • - .rake_task_available?(project_root, task_name) ⇒ Boolean + .rake_task_available?(project_root, task_name, env: nil) ⇒ Boolean @@ -2334,7 +2472,7 @@

  • - .rubocop_gradual_autocorrect_step(project_root) ⇒ Object + .rubocop_gradual_autocorrect_step(project_root, env: nil, run_options: {}) ⇒ Object @@ -2486,6 +2624,29 @@

    +
    +
    + +

  • + + +
  • + + + .run_distinct_bundle_install_step(project_root, env:, setup_env:, run_options:, command_runner:) ⇒ Object + + + + + + + + + + + + +
    @@ -2509,6 +2670,29 @@

    +
    +
    + +

  • + + +
  • + + + .same_bundle_env?(left, right) ⇒ Boolean + + + + + + + + + + + + +
    @@ -2862,31 +3046,31 @@

    -783 -784 -785 -786 -787 -788 -789 -790 -791 -792 -793 -794 -795 -796 -797 -798 -799 -800 -801 -802 -803 -804 +833 +834 +835 +836 +837 +838 +839 +840 +841 +842 +843 +844 +845 +846 +847 +848 +849 +850 +851 +852 +853 +854 -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 783
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 833
     
     def apply_direct_sibling_lockfile_env!(project_root, command_env)
       gemspec_path = Dir.glob(File.join(project_root.to_s, "*.gemspec")).min
    @@ -2930,23 +3114,23 @@ 

     
     
    -1032
    -1033
    -1034
    -1035
    -1036
    -1037
    -1038
    -1039
    -1040
    -1041
    -1042
    -1043
    -1044
    -1045
    +1106 +1107 +1108 +1109 +1110 +1111 +1112 +1113 +1114 +1115 +1116 +1117 +1118 +1119

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1032
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1106
     
     def apply_kettle_family_local_install_env!(command_env)
       return unless command_env.fetch("K_JEM_TEMPLATING", "false").casecmp("true").zero?
    @@ -2982,14 +3166,14 @@ 

     
     
    -1586
    -1587
    -1588
    -1589
    -1590
    +1664 +1665 +1666 +1667 +1668

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1586
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1664
     
     def bin_setup_command(project_root, quiet:)
       command = [File.join("bin", "setup")]
    @@ -3016,22 +3200,22 @@ 

     
     
    -926
    -927
    -928
    -929
    -930
    -931
    -932
    -933
    -934
    -935
    -936
    -937
    -938
    - - -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 926
    +976
    +977
    +978
    +979
    +980
    +981
    +982
    +983
    +984
    +985
    +986
    +987
    +988
    + + +
    # File 'lib/kettle/jem/tasks/install_task.rb', line 976
     
     def binstub_files(bin_dir)
       return [] unless File.directory?(bin_dir)
    @@ -3066,46 +3250,46 @@ 

     
     
    -1498
    -1499
    -1500
    -1501
    -1502
    -1503
    -1504
    -1505
    -1506
    -1507
    -1508
    -1509
    -1510
    -1511
    -1512
    -1513
    -1514
    -1515
    -1516
    -1517
    -1518
    -1519
    -1520
    -1521
    -1522
    -1523
    -1524
    -1525
    -1526
    -1527
    -1528
    -1529
    -1530
    -1531
    -1532
    -1533
    -1534
    +1573 +1574 +1575 +1576 +1577 +1578 +1579 +1580 +1581 +1582 +1583 +1584 +1585 +1586 +1587 +1588 +1589 +1590 +1591 +1592 +1593 +1594 +1595 +1596 +1597 +1598 +1599 +1600 +1601 +1602 +1603 +1604 +1605 +1606 +1607 +1608 +1609

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1498
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1573
     
     def bootstrap_commit_step(project_root, run_options:)
       if Kettle::Jem::DecisionPolicy.value_to_boolean((run_options || {})[:skip_commit])
    @@ -3164,12 +3348,12 @@ 

     
     
    -613
    -614
    -615
    +623 +624 +625

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 613
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 623
     
     def bundle_binstubs_command(project_root = Dir.pwd, env: ENV)
       %w[bundle binstubs] + curated_binstub_gems_in_bundle(project_root, env: env)
    @@ -3177,6 +3361,36 @@ 

    + + +
    +

    + + .bundle_env_fingerprint(env) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +1098
    +1099
    +1100
    +
    +
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1098
    +
    +def bundle_env_fingerprint(env)
    +  env.to_h.transform_values { |value| value.nil? ? nil : value.to_s }.reject { |key, _value| ignored_bundle_env_key?(key) }
    +end
    +
    @@ -3217,15 +3431,15 @@

     
     
    -625
    -626
    -627
    -628
    -629
    -630
    +635 +636 +637 +638 +639 +640

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 625
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 635
     
     def bundle_includes_gem?(project_root, gem_name, env: ENV)
       stdout, _stderr, status = Open3.capture3(env.to_h, "bundle", "list", "--name-only", chdir: project_root.to_s)
    @@ -3253,19 +3467,19 @@ 

     
     
    -1566
    -1567
    -1568
    -1569
    -1570
    -1571
    -1572
    -1573
    -1574
    -1575
    +1644 +1645 +1646 +1647 +1648 +1649 +1650 +1651 +1652 +1653

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1566
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1644
     
     def bundled_handoff_command(run_options)
       [
    @@ -3297,43 +3511,43 @@ 

     
     
    -1463
    -1464
    -1465
    -1466
    -1467
    -1468
    -1469
    -1470
    -1471
    -1472
    -1473
    -1474
    -1475
    -1476
    -1477
    -1478
    -1479
    -1480
    -1481
    -1482
    -1483
    -1484
    -1485
    -1486
    -1487
    -1488
    -1489
    -1490
    -1491
    -1492
    -1493
    -1494
    -1495
    -1496
    +1538 +1539 +1540 +1541 +1542 +1543 +1544 +1545 +1546 +1547 +1548 +1549 +1550 +1551 +1552 +1553 +1554 +1555 +1556 +1557 +1558 +1559 +1560 +1561 +1562 +1563 +1564 +1565 +1566 +1567 +1568 +1569 +1570 +1571

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1463
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1538
     
     def bundled_handoff_step(project_root:, env:, run_options:)
       if Kettle::Jem::DecisionPolicy.value_to_boolean((run_options || {})[:bootstrap_mode])
    @@ -3389,24 +3603,24 @@ 

     
     
    -954
    -955
    -956
    -957
    -958
    -959
    -960
    -961
    -962
    -963
    -964
    -965
    -966
    -967
    -968
    +1004 +1005 +1006 +1007 +1008 +1009 +1010 +1011 +1012 +1013 +1014 +1015 +1016 +1017 +1018

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 954
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1004
     
     def bundler_binstub_gem_name(path)
       content = File.read(path)
    @@ -3426,6 +3640,48 @@ 

    + + +
    +

    + + .bundler_command_env(project_root, env) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +1084
    +1085
    +1086
    +1087
    +1088
    +1089
    +1090
    +1091
    +1092
    +
    +
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1084
    +
    +def bundler_command_env(project_root, env)
    +  command_env = (env || {}).to_h.dup
    +  strip_inherited_bundler_activation!(command_env)
    +  gemfile = File.join(project_root.to_s, "Gemfile")
    +  command_env["BUNDLE_GEMFILE"] = gemfile if File.file?(gemfile)
    +  command_env["K_JEM_TEMPLATING"] = "false" unless command_env.key?("K_JEM_TEMPLATING")
    +  apply_kettle_family_local_install_env!(command_env)
    +  command_env
    +end
    +
    @@ -3466,14 +3722,14 @@

     
     
    -948
    -949
    -950
    -951
    -952
    +998 +999 +1000 +1001 +1002

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 948
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 998
     
     def bundler_generated_binstub?(path)
       File.read(path, 512).include?("This file was generated by Bundler")
    @@ -3500,8 +3756,6 @@ 

     
     
    -272
    -273
     274
     275
     276
    @@ -3515,10 +3769,12 @@ 

    284 285 286 -287

    +287 +288 +289

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 272
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 274
     
     def cleanup_legacy_ruby_version_files(project_root)
       return nil unless File.file?(File.join(project_root.to_s, "mise.toml"))
    @@ -3579,14 +3835,14 @@ 

     
     
    -80
     81
     82
     83
    -84
    +84 +85

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 80
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 81
     
     def config_bootstrap_changed?(report)
       report.fetch(:recipe_reports, []).any? do |recipe_report|
    @@ -3613,8 +3869,6 @@ 

     
     
    -367
    -368
     369
     370
     371
    @@ -3625,10 +3879,12 @@ 

    376 377 378 -379

    +379 +380 +381

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 367
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 369
     
     def configured_project_grapheme(project_root, env)
       env_value = (env || {})["KJ_PROJECT_EMOJI"].to_s.strip
    @@ -3663,27 +3919,27 @@ 

     
     
    -1434
    -1435
    -1436
    -1437
    -1438
    -1439
    -1440
    -1441
    -1442
    -1443
    -1444
    -1445
    -1446
    -1447
    -1448
    -1449
    - - -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1434
    -
    -def conflicting_git_attribute_diagnostics(content, updates, managed_block:)
    +1509
    +1510
    +1511
    +1512
    +1513
    +1514
    +1515
    +1516
    +1517
    +1518
    +1519
    +1520
    +1521
    +1522
    +1523
    +1524
    + + +
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1509
    +
    +def conflicting_git_attribute_diagnostics(content, updates, managed_block:)
       lines = remove_git_attribute_managed_block(content, managed_block: managed_block).fetch(:lines)
       updates.filter_map do |update|
         conflict = lines.find { |line| git_attribute_line_conflicts?(line, update) }
    @@ -3742,16 +3998,16 @@ 

     
     
    -940
    -941
    -942
    -943
    -944
    -945
    -946
    +990 +991 +992 +993 +994 +995 +996

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 940
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 990
     
     def curated_binstub?(path)
       basename = File.basename(path)
    @@ -3780,16 +4036,16 @@ 

     
     
    -617
    -618
    -619
    -620
    -621
    -622
    -623
    +627 +628 +629 +630 +631 +632 +633

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 617
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 627
     
     def curated_binstub_gems_in_bundle(project_root = Dir.pwd, env: ENV)
       stdout, _stderr, status = Open3.capture3(env.to_h, "bundle", "list", "--name-only", chdir: project_root.to_s)
    @@ -3818,15 +4074,15 @@ 

     
     
    -756
    -757
    -758
    -759
    -760
    -761
    +806 +807 +808 +809 +810 +811

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 756
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 806
     
     def current_git_branch(path)
       stdout, _stderr, status = Open3.capture3("git", "-C", path.to_s, "branch", "--show-current")
    @@ -3877,15 +4133,15 @@ 

     
     
    -448
    -449
     450
     451
     452
    -453
    +453 +454 +455

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 448
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 450
     
     def decorative_grapheme?(grapheme)
       value = grapheme.to_s
    @@ -3913,18 +4169,18 @@ 

     
     
    -1312
    -1313
    -1314
    -1315
    -1316
    -1317
    -1318
    -1319
    -1320
    +1387 +1388 +1389 +1390 +1391 +1392 +1393 +1394 +1395

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1312
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1387
     
     def default_git_driver_global_commands
       DEFAULT_GIT_DRIVER_DEFINITIONS.flat_map do |definition|
    @@ -3955,15 +4211,15 @@ 

     
     
    -153
     154
     155
     156
     157
    -158
    +158 +159

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 153
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 154
     
     def development_dependency_names(content)
       Kettle::Jem.gemspec_dependency_records(content)
    @@ -4014,15 +4270,15 @@ 

     
     
    -1427
    -1428
    -1429
    -1430
    -1431
    -1432
    +1502 +1503 +1504 +1505 +1506 +1507

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1427
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1502
     
     def dirty_git_attribute_managed_block?(content, managed_block)
       start_line = git_attribute_block_start(managed_block)
    @@ -4033,6 +4289,66 @@ 

    + + +
    +

    + + .distinct_bundle_install_step(project_root, env:, setup_env:) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +672
    +673
    +674
    +675
    +676
    +677
    +678
    +679
    +680
    +681
    +682
    +683
    +684
    +685
    +686
    +687
    +688
    +689
    +
    +
    # File 'lib/kettle/jem/tasks/install_task.rb', line 672
    +
    +def distinct_bundle_install_step(project_root, env:, setup_env:)
    +  bundle_env = bundler_command_env(project_root, env)
    +  if same_bundle_env?(bundle_env, setup_env)
    +    return {
    +      name: "bundle_install_requested_env",
    +      status: "skipped",
    +      reason: "same_as_setup_bundle_env"
    +    }
    +  end
    +
    +  {
    +    name: "bundle_install_requested_env",
    +    command: %w[bundle install],
    +    status: "ready",
    +    env: bundle_env,
    +    reason: "distinct_bundle_env"
    +  }
    +end
    +
    @@ -4050,8 +4366,6 @@

     
     
    -212
    -213
     214
     215
     216
    @@ -4062,10 +4376,12 @@ 

    221 222 223 -224

    +224 +225 +226

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 212
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 214
     
     def ensure_bin_setup_executable(project_root)
       path = File.join(project_root, "bin", "setup")
    @@ -4100,27 +4416,27 @@ 

     
     
    -888
    -889
    -890
    -891
    -892
    -893
    -894
    -895
    -896
    -897
    -898
    -899
    -900
    -901
    -902
    -903
    -904
    -905
    +938 +939 +940 +941 +942 +943 +944 +945 +946 +947 +948 +949 +950 +951 +952 +953 +954 +955

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 888
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 938
     
     def ensure_curated_binstubs_executable(project_root)
       bin_dir = File.join(project_root.to_s, "bin")
    @@ -4160,8 +4476,6 @@ 

     
     
    -556
    -557
     558
     559
     560
    @@ -4186,10 +4500,12 @@ 

    579 580 581 -582

    +582 +583 +584

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 556
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 558
     
     def ensure_env_local_gitignore(project_root)
       return nil unless File.file?(File.join(project_root.to_s, ".env.local.example"))
    @@ -4221,6 +4537,74 @@ 

    + + +
    +

    + + .execute_bootstrap_commit_step(step, project_root:, env:, quiet:, command_runner:) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +1726
    +1727
    +1728
    +1729
    +1730
    +1731
    +1732
    +1733
    +1734
    +1735
    +1736
    +1737
    +1738
    +1739
    +1740
    +1741
    +1742
    +1743
    +1744
    +1745
    +1746
    +1747
    +
    +
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1726
    +
    +def execute_bootstrap_commit_step(step, project_root:, env:, quiet:, command_runner:)
    +  lock_path = env.fetch("KETTLE_JEM_GIT_COMMIT_LOCK", nil).to_s
    +  if lock_path.empty?
    +    return execute_unlocked_ready_commands_step(
    +      step,
    +      project_root: project_root,
    +      env: env,
    +      quiet: quiet,
    +      command_runner: command_runner
    +    )
    +  end
    +
    +  FileUtils.mkdir_p(File.dirname(lock_path))
    +  File.open(lock_path, File::RDWR | File::CREAT, 0o644) do |lock|
    +    lock.flock(File::LOCK_EX)
    +    execute_unlocked_ready_commands_step(step, project_root: project_root, env: env, quiet: quiet, command_runner: command_runner).merge(
    +      git_commit_lock: lock_path
    +    )
    +  ensure
    +    lock&.flock(File::LOCK_UN)
    +  end
    +end
    +
    @@ -4261,29 +4645,29 @@

     
     
    -1731
    -1732
    -1733
    -1734
    -1735
    -1736
    -1737
    -1738
    -1739
    -1740
    -1741
    -1742
    -1743
    -1744
    -1745
    -1746
    -1747
    -1748
    -1749
    -1750
    - - -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1731
    +1853
    +1854
    +1855
    +1856
    +1857
    +1858
    +1859
    +1860
    +1861
    +1862
    +1863
    +1864
    +1865
    +1866
    +1867
    +1868
    +1869
    +1870
    +1871
    +1872
    + + +
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1853
     
     def execute_git_drivers_check_step(step, project_root:, env:, quiet:, command_runner:)
       missing = []
    @@ -4325,58 +4709,58 @@ 

     
     
    -1682
    -1683
    -1684
    -1685
    -1686
    -1687
    -1688
    -1689
    -1690
    -1691
    -1692
    -1693
    -1694
    -1695
    -1696
    -1697
    -1698
    -1699
    -1700
    -1701
    -1702
    -1703
    -1704
    -1705
    -1706
    -1707
    -1708
    -1709
    -1710
    -1711
    -1712
    -1713
    -1714
    -1715
    -1716
    -1717
    -1718
    -1719
    -1720
    -1721
    -1722
    -1723
    -1724
    -1725
    -1726
    -1727
    -1728
    -1729
    - - -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1682
    -
    +1804
    +1805
    +1806
    +1807
    +1808
    +1809
    +1810
    +1811
    +1812
    +1813
    +1814
    +1815
    +1816
    +1817
    +1818
    +1819
    +1820
    +1821
    +1822
    +1823
    +1824
    +1825
    +1826
    +1827
    +1828
    +1829
    +1830
    +1831
    +1832
    +1833
    +1834
    +1835
    +1836
    +1837
    +1838
    +1839
    +1840
    +1841
    +1842
    +1843
    +1844
    +1845
    +1846
    +1847
    +1848
    +1849
    +1850
    +1851
    + + +
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1804
    +
     def execute_git_drivers_step(step, project_root:, env:, quiet:, command_runner:)
       return step unless step.fetch(:status) == "ready"
     
    @@ -4445,26 +4829,29 @@ 

     
     
    -1664
    -1665
    -1666
    -1667
    -1668
    -1669
    -1670
    -1671
    -1672
    -1673
    -1674
    -1675
    -1676
    -1677
    -1678
    -1679
    -1680
    +1783 +1784 +1785 +1786 +1787 +1788 +1789 +1790 +1791 +1792 +1793 +1794 +1795 +1796 +1797 +1798 +1799 +1800 +1801 +1802

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1664
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1783
     
     def execute_hook_templates_step(step, project_root:, env:, quiet:, command_runner:)
       return step unless step.fetch(:status) == "ready"
    @@ -4473,13 +4860,16 @@ 

    path = File.join(project_root.to_s, relative_path) FileUtils.chmod(0o755, path) if File.file?(path) end + started_at = Process.clock_gettime(Process::CLOCK_MONOTONIC) result = command_runner.call(step.fetch(:command), chdir: project_root, env: env, quiet: quiet) + duration_ms = ((Process.clock_gettime(Process::CLOCK_MONOTONIC) - started_at) * 1000.0).round(3) unless result.fetch(:success) raise Kettle::Jem::Error, "hook_templates failed: #{step.fetch(:command).join(" ")}\n#{result[:stderr]}" end step.merge( status: "succeeded", exitstatus: result[:exitstatus], + duration_ms: duration_ms, reason: "executed" ) end

    @@ -4503,43 +4893,45 @@

     
     
    -984
    -985
    -986
    -987
    -988
    -989
    -990
    -991
    -992
    -993
    -994
    -995
    -996
    -997
    -998
    -999
    -1000
    -1001
    -1002
    -1003
    -1004
    -1005
    -1006
    -1007
    -1008
    -1009
    -1010
    -1011
    -1012
    -1013
    -1014
    -1015
    -1016
    -1017
    +1034 +1035 +1036 +1037 +1038 +1039 +1040 +1041 +1042 +1043 +1044 +1045 +1046 +1047 +1048 +1049 +1050 +1051 +1052 +1053 +1054 +1055 +1056 +1057 +1058 +1059 +1060 +1061 +1062 +1063 +1064 +1065 +1066 +1067 +1068 +1069

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 984
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1034
     
     def execute_orchestration_steps(install_steps, project_root:, env:, run_options:, command_runner:, event_phase: "install")
       quiet = Kettle::Jem::DecisionPolicy.value_to_boolean(run_options[:quiet])
    @@ -4560,6 +4952,8 @@ 

    execute_ready_command_step(step, project_root: project_root, env: env, quiet: quiet, command_runner: command_runner) when "rubocop_lts_local_branch" execute_ready_command_step(step, project_root: project_root, env: env, quiet: quiet, command_runner: command_runner) + when "bundle_install_requested_env" + execute_ready_command_step(step, project_root: project_root, env: env, quiet: quiet, command_runner: command_runner) when "rubocop_gradual_autocorrect" execute_ready_command_step(step, project_root: project_root, env: env, quiet: quiet, command_runner: command_runner) when "hook_templates" @@ -4618,34 +5012,40 @@

     
     
    -1616
    -1617
    -1618
    -1619
    -1620
    -1621
    -1622
    -1623
    -1624
    -1625
    -1626
    -1627
    -1628
    -1629
    -1630
    +1697 +1698 +1699 +1700 +1701 +1702 +1703 +1704 +1705 +1706 +1707 +1708 +1709 +1710 +1711 +1712 +1713 +1714

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1616
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1697
     
     def execute_ready_command_step(step, project_root:, env:, quiet:, command_runner:)
       return step unless step.fetch(:status) == "ready"
     
       command_env = step.fetch(:env, env)
    +  started_at = Process.clock_gettime(Process::CLOCK_MONOTONIC)
       result = command_runner.call(step.fetch(:command), chdir: project_root, env: command_env, quiet: quiet)
    +  duration_ms = ((Process.clock_gettime(Process::CLOCK_MONOTONIC) - started_at) * 1000.0).round(3)
       if result.fetch(:success)
         return step.merge(
           status: "succeeded",
           exitstatus: result[:exitstatus],
    +      duration_ms: duration_ms,
           reason: "executed"
         )
       end
    @@ -4672,44 +5072,86 @@ 

     
     
    -1632
    -1633
    -1634
    -1635
    -1636
    -1637
    -1638
    -1639
    -1640
    -1641
    -1642
    -1643
    -1644
    -1645
    -1646
    -1647
    -1648
    -1649
    -1650
    -1651
    -1652
    -1653
    -1654
    -1655
    -1656
    -1657
    -1658
    -1659
    -1660
    -1661
    -1662
    +1716 +1717 +1718 +1719 +1720 +1721 +1722 +1723 +1724

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1632
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1716
     
     def execute_ready_commands_step(step, project_root:, env:, quiet:, command_runner:)
       return step unless step.fetch(:status) == "ready"
     
    +  if step.fetch(:name) == "bootstrap_commit"
    +    return execute_bootstrap_commit_step(step, project_root: project_root, env: env, quiet: quiet, command_runner: command_runner)
    +  end
    +
    +  execute_unlocked_ready_commands_step(step, project_root: project_root, env: env, quiet: quiet, command_runner: command_runner)
    +end
    + + + +

    + +
    +

    + + .execute_unlocked_ready_commands_step(step, project_root:, env:, quiet:, command_runner:) ⇒ Object + + + + + +

    + + +
    +
    +
    +
    +1749
    +1750
    +1751
    +1752
    +1753
    +1754
    +1755
    +1756
    +1757
    +1758
    +1759
    +1760
    +1761
    +1762
    +1763
    +1764
    +1765
    +1766
    +1767
    +1768
    +1769
    +1770
    +1771
    +1772
    +1773
    +1774
    +1775
    +1776
    +1777
    +1778
    +1779
    +1780
    +1781
    +
    +
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1749
    +
    +def execute_unlocked_ready_commands_step(step, project_root:, env:, quiet:, command_runner:)
       if step.fetch(:name) == "bootstrap_commit"
         dirty_entries = git_output(project_root, "status", "--porcelain").lines.map(&:chomp).reject(&:empty?)
         if dirty_entries.empty?
    @@ -4723,18 +5165,22 @@ 

    command_env = step.fetch(:env, env) results = step.fetch(:commands).map do |command| + started_at = Process.clock_gettime(Process::CLOCK_MONOTONIC) result = command_runner.call(command, chdir: project_root, env: command_env, quiet: quiet) + duration_ms = ((Process.clock_gettime(Process::CLOCK_MONOTONIC) - started_at) * 1000.0).round(3) unless result.fetch(:success) raise Kettle::Jem::Error, "#{step.fetch(:name)} failed: #{command.join(" ")}\n#{result[:stderr]}" end { command: command, - exitstatus: result[:exitstatus] + exitstatus: result[:exitstatus], + duration_ms: duration_ms } end step.merge( status: "succeeded", command_results: results, + duration_ms: results.sum { |result| result.fetch(:duration_ms, 0).to_f }.round(3), reason: "executed" ) end

    @@ -4758,12 +5204,12 @@

     
     
    -444
    -445
    -446
    +446 +447 +448

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 444
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 446
     
     def first_grapheme(text)
       text.to_s.strip[/\A\X/u].to_s
    @@ -4788,7 +5234,6 @@ 

     
     
    -68
     69
     70
     71
    @@ -4798,10 +5243,11 @@ 

    75 76 77 -78

    +78 +79

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 68
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 69
     
     def followup_apply_after_config_bootstrap(project_root, env:, run_options:, report:)
       return report unless config_bootstrap_changed?(report)
    @@ -4834,7 +5280,6 @@ 

     
     
    -133
     134
     135
     136
    @@ -4852,10 +5297,11 @@ 

    148 149 150 -151

    +151 +152

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 133
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 134
     
     def gemspec_dependency_sync_step(report)
       gemspec_report = report.fetch(:recipe_reports, []).find do |recipe_report|
    @@ -4896,8 +5342,6 @@ 

    -405 -406 407 408 409 @@ -4911,10 +5355,12 @@

    # File 'lib/kettle/jem/tasks/install_task.rb', line 405 +
    # File 'lib/kettle/jem/tasks/install_task.rb', line 407
     
     def gemspec_grapheme_assignment_replacements(content, grapheme)
       Kettle::Jem.ruby_call_records(content, nil).filter_map do |call|
    @@ -4952,15 +5398,15 @@ 

     
     
    -549
    -550
     551
     552
     553
    -554
    +554 +555 +556

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 549
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 551
     
     def gemspec_name(content, gemspec_path)
       Kettle::Jem.gemspec_assignment_records(content, receiver: "spec")
    @@ -4988,12 +5434,12 @@ 

     
     
    -1802
    -1803
    -1804
    +1924 +1925 +1926

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1802
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1924
     
     def git_attribute_block_end(managed_block)
       "# <</#{managed_block}>>"
    @@ -5018,12 +5464,12 @@ 

     
     
    -1798
    -1799
    -1800
    +1920 +1921 +1922

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1798
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1920
     
     def git_attribute_block_start(managed_block)
       "# <<#{managed_block}>> do not edit below this line"
    @@ -5071,20 +5517,20 @@ 

     
     
    -1451
    -1452
    -1453
    -1454
    -1455
    -1456
    -1457
    -1458
    -1459
    -1460
    -1461
    +1526 +1527 +1528 +1529 +1530 +1531 +1532 +1533 +1534 +1535 +1536

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1451
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1526
     
     def git_attribute_line_conflicts?(line, update)
       parts = line.to_s.strip.split
    @@ -5117,27 +5563,27 @@ 

     
     
    -1408
    -1409
    -1410
    -1411
    -1412
    -1413
    -1414
    -1415
    -1416
    -1417
    -1418
    -1419
    -1420
    -1421
    -1422
    -1423
    -1424
    -1425
    +1483 +1484 +1485 +1486 +1487 +1488 +1489 +1490 +1491 +1492 +1493 +1494 +1495 +1496 +1497 +1498 +1499 +1500

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1408
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1483
     
     def git_driver_attribute_diagnostics(project_root, updates, managed_block:)
       path = File.join(project_root.to_s, ".gitattributes")
    @@ -5177,15 +5623,15 @@ 

     
     
    -1401
    -1402
    -1403
    -1404
    -1405
    -1406
    +1476 +1477 +1478 +1479 +1480 +1481

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1401
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1476
     
     def git_driver_attribute_reason(diagnostics, dry_run:, ready:)
       return "git_driver_attribute_conflict" if diagnostics.any? { |diagnostic| diagnostic.fetch(:key) == "conflicting_attributes" }
    @@ -5213,14 +5659,14 @@ 

     
     
    -1395
    -1396
    -1397
    -1398
    -1399
    +1470 +1471 +1472 +1473 +1474

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1395
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1470
     
     def git_driver_attribute_status(diagnostics, dry_run:)
       return "blocked" if diagnostics.any? { |diagnostic| diagnostic.fetch(:blocking, false) }
    @@ -5247,19 +5693,19 @@ 

     
     
    -1286
    -1287
    -1288
    -1289
    -1290
    -1291
    -1292
    -1293
    -1294
    -1295
    +1361 +1362 +1363 +1364 +1365 +1366 +1367 +1368 +1369 +1370

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1286
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1361
     
     def git_driver_attribute_updates(manifest, profile)
       profile_hash = git_driver_manifest_profile(manifest, profile)
    @@ -5291,17 +5737,17 @@ 

     
     
    -1277
    -1278
    -1279
    -1280
    -1281
    -1282
    -1283
    -1284
    +1352 +1353 +1354 +1355 +1356 +1357 +1358 +1359

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1277
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1352
     
     def git_driver_forge_warning_diagnostic
       {
    @@ -5331,17 +5777,17 @@ 

     
     
    -1297
    -1298
    -1299
    -1300
    -1301
    -1302
    -1303
    -1304
    +1372 +1373 +1374 +1375 +1376 +1377 +1378 +1379

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1297
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1372
     
     def git_driver_global_commands(manifest = nil, profile = "semantic-diff")
       profile_hash = git_driver_manifest_profile(manifest, profile)
    @@ -5371,14 +5817,14 @@ 

     
     
    -1332
    -1333
    -1334
    -1335
    -1336
    +1407 +1408 +1409 +1410 +1411

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1332
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1407
     
     def git_driver_global_config_checks(manifest = nil, profile = "semantic-diff")
       git_driver_global_commands(manifest, profile).map do |command|
    @@ -5405,18 +5851,18 @@ 

     
     
    -1322
    -1323
    -1324
    -1325
    -1326
    -1327
    -1328
    -1329
    -1330
    +1397 +1398 +1399 +1400 +1401 +1402 +1403 +1404 +1405

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1322
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1397
     
     def git_driver_global_unset_commands
       DEFAULT_GIT_DRIVER_DEFINITIONS.flat_map do |definition|
    @@ -5447,14 +5893,14 @@ 

     
     
    -1306
    -1307
    -1308
    -1309
    -1310
    +1381 +1382 +1383 +1384 +1385

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1306
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1381
     
     def git_driver_local_commands(manifest = nil, profile = "semantic-diff")
       git_driver_global_commands(manifest, profile).map do |command|
    @@ -5481,14 +5927,14 @@ 

     
     
    -1338
    -1339
    -1340
    -1341
    -1342
    +1413 +1414 +1415 +1416 +1417

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1338
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1413
     
     def git_driver_local_config_checks(manifest = nil, profile = "semantic-diff")
       git_driver_local_commands(manifest, profile).map do |command|
    @@ -5515,19 +5961,19 @@ 

     
     
    -1344
    -1345
    -1346
    -1347
    -1348
    -1349
    -1350
    -1351
    -1352
    -1353
    +1419 +1420 +1421 +1422 +1423 +1424 +1425 +1426 +1427 +1428

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1344
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1419
     
     def git_driver_manifest(project_root)
       path = File.join(project_root.to_s, ".structuredmerge", "git-drivers.toml")
    @@ -5559,14 +6005,14 @@ 

     
     
    -1355
    -1356
    -1357
    -1358
    -1359
    +1430 +1431 +1432 +1433 +1434

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1355
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1430
     
     def git_driver_manifest_profile(manifest, profile)
       return nil unless manifest
    @@ -5593,81 +6039,6 @@ 

     
     
    -1157
    -1158
    -1159
    -1160
    -1161
    -1162
    -1163
    -1164
    -1165
    -1166
    -1167
    -1168
    -1169
    -1170
    -1171
    -1172
    -1173
    -1174
    -1175
    -1176
    -1177
    -1178
    -1179
    -1180
    -1181
    -1182
    -1183
    -1184
    -1185
    -1186
    -1187
    -1188
    -1189
    -1190
    -1191
    -1192
    -1193
    -1194
    -1195
    -1196
    -1197
    -1198
    -1199
    -1200
    -1201
    -1202
    -1203
    -1204
    -1205
    -1206
    -1207
    -1208
    -1209
    -1210
    -1211
    -1212
    -1213
    -1214
    -1215
    -1216
    -1217
    -1218
    -1219
    -1220
    -1221
    -1222
    -1223
    -1224
    -1225
    -1226
    -1227
    -1228
    -1229
    -1230
    -1231
     1232
     1233
     1234
    @@ -5687,10 +6058,85 @@ 

    1248 1249 1250 -1251

    +1251 +1252 +1253 +1254 +1255 +1256 +1257 +1258 +1259 +1260 +1261 +1262 +1263 +1264 +1265 +1266 +1267 +1268 +1269 +1270 +1271 +1272 +1273 +1274 +1275 +1276 +1277 +1278 +1279 +1280 +1281 +1282 +1283 +1284 +1285 +1286 +1287 +1288 +1289 +1290 +1291 +1292 +1293 +1294 +1295 +1296 +1297 +1298 +1299 +1300 +1301 +1302 +1303 +1304 +1305 +1306 +1307 +1308 +1309 +1310 +1311 +1312 +1313 +1314 +1315 +1316 +1317 +1318 +1319 +1320 +1321 +1322 +1323 +1324 +1325 +1326

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1157
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1232
     
     def git_drivers_step(project_root, run_options)
       mode = normalize_git_drivers_mode((run_options || {})[:git_drivers])
    @@ -5807,13 +6253,13 @@ 

     
     
    -1541
    -1542
    -1543
    -1544
    +1616 +1617 +1618 +1619

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1541
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1616
     
     def git_output(project_root, *args)
       stdout, _stderr, status = Open3.capture3("git", "-C", project_root.to_s, *args)
    @@ -5862,13 +6308,13 @@ 

     
     
    -1536
    -1537
    -1538
    -1539
    +1611 +1612 +1613 +1614

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1536
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1611
     
     def git_success?(project_root, *args)
       _stdout, _stderr, status = Open3.capture3("git", "-C", project_root.to_s, *args)
    @@ -5894,13 +6340,13 @@ 

     
     
    -970
    -971
    -972
    -973
    +1020 +1021 +1022 +1023

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 970
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1020
     
     def git_toplevel(project_root)
       stdout, _stderr, status = Open3.capture3("git", "-C", project_root.to_s, "rev-parse", "--show-toplevel")
    @@ -5926,16 +6372,16 @@ 

     
     
    -523
    -524
     525
     526
     527
     528
    -529
    +529 +530 +531

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 523
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 525
     
     def github_org_from_env(env)
       %w[FORGE_ORG KJ_GH_USER GITHUB_ORG].each do |key|
    @@ -5964,8 +6410,6 @@ 

     
     
    -531
    -532
     533
     534
     535
    @@ -5980,10 +6424,12 @@ 

    544 545 546 -547

    +547 +548 +549

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 531
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 533
     
     def github_org_from_origin(project_root)
       stdout, _stderr, status = Open3.capture3("git", "-C", project_root.to_s, "remote", "get-url", "origin")
    @@ -6022,17 +6468,17 @@ 

     
     
    -324
    -325
     326
     327
     328
     329
     330
    -331
    +331 +332 +333

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 324
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 326
     
     def github_workflow_paths(project_root)
       workflow_root = File.join(project_root.to_s, ".github", "workflows")
    @@ -6062,34 +6508,40 @@ 

     
     
    -1546
    -1547
    -1548
    -1549
    -1550
    -1551
    -1552
    -1553
    -1554
    -1555
    -1556
    -1557
    -1558
    -1559
    -1560
    -1561
    -1562
    -1563
    -1564
    +1621 +1622 +1623 +1624 +1625 +1626 +1627 +1628 +1629 +1630 +1631 +1632 +1633 +1634 +1635 +1636 +1637 +1638 +1639 +1640 +1641 +1642

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1546
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1621
     
     def handoff_argv(run_options)
       options = run_options || {}
       argv = []
       argv << "--accept-config" if Kettle::Jem::DecisionPolicy.value_to_boolean(options[:accept_config])
       argv << "--skip-commit" if Kettle::Jem::DecisionPolicy.value_to_boolean(options[:skip_commit])
    +  argv << "--skip-drift-check" if Kettle::Jem::DecisionPolicy.value_to_boolean(options[:skip_drift_check])
    +  argv << "--skip-rubocop-gradual" if Kettle::Jem::DecisionPolicy.value_to_boolean(options[:skip_rubocop_gradual])
    +  argv << "--skip-binstubs" if Kettle::Jem::DecisionPolicy.value_to_boolean(options[:skip_binstubs])
       argv << "--quiet" if Kettle::Jem::DecisionPolicy.value_to_boolean(options[:quiet])
       argv << "--verbose" if Kettle::Jem::DecisionPolicy.value_to_boolean(options[:verbose])
       argv << "--force" if Kettle::Jem::DecisionPolicy.value_to_boolean(options[:force])
    @@ -6124,47 +6576,47 @@ 

     
     
    -1074
    -1075
    -1076
    -1077
    -1078
    -1079
    -1080
    -1081
    -1082
    -1083
    -1084
    -1085
    -1086
    -1087
    -1088
    -1089
    -1090
    -1091
    -1092
    -1093
    -1094
    -1095
    -1096
    -1097
    -1098
    -1099
    -1100
    -1101
    -1102
    -1103
    -1104
    -1105
    -1106
    -1107
    -1108
    -1109
    -1110
    -1111
    +1149 +1150 +1151 +1152 +1153 +1154 +1155 +1156 +1157 +1158 +1159 +1160 +1161 +1162 +1163 +1164 +1165 +1166 +1167 +1168 +1169 +1170 +1171 +1172 +1173 +1174 +1175 +1176 +1177 +1178 +1179 +1180 +1181 +1182 +1183 +1184 +1185 +1186

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1074
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1149
     
     def hook_templates_step(project_root, run_options)
       mode = normalize_hook_templates_mode((run_options || {})[:hook_templates])
    @@ -6207,6 +6659,59 @@ 

    +
    + +
    +

    + + .ignored_bundle_env_key?(key) ⇒ Boolean + + + + + +

    +
    + + + +
    +
    +
    + +

    Returns:

    +
      + +
    • + + + (Boolean) + + + +
    • + +
    + +
    + + + + +
    +
    +
    +
    +1102
    +1103
    +1104
    +
    +
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1102
    +
    +def ignored_bundle_env_key?(key)
    +  key.to_s.match?(/\A(?:BUNDLE_BIN_PATH|BUNDLE_LOCKFILE|BUNDLER_SETUP|BUNDLER_VERSION|RUBYLIB|RUBYOPT)\z/)
    +end
    +
    @@ -6224,7 +6729,6 @@

     
     
    -165
     166
     167
     168
    @@ -6258,10 +6762,12 @@ 

    196 197 198 -199

    +199 +200 +201

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 165
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 166
     
     def install_phase_reports(install_steps)
       phases = {
    @@ -6277,13 +6783,14 @@ 

    env_local_gitignore hook_templates git_drivers + rubocop_lts_local_branch + bundle_install_requested_env bin_setup_executable bin_setup bundle_binstubs curated_binstubs_executable bundle_binstub_pruning bundle_binstub_location_validation - rubocop_lts_local_branch rubocop_gradual_autocorrect bundle_lock_normalization ], @@ -6318,15 +6825,15 @@

     
     
    -64
     65
    -66
    +66 +67

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 64
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 65
     
     def install_run_options(env, run_options)
    -  Kettle::Jem::Tasks::TemplateTask.env_run_options(env || {}).merge(run_options || {})
    +  Kettle::Jem::Tasks::TemplateTask.templating_run_options(env || {}, run_options || {})
     end
    @@ -6348,8 +6855,6 @@

     
     
    -201
    -202
     203
     204
     205
    @@ -6357,10 +6862,12 @@ 

    207 208 209 -210

    +210 +211 +212

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 201
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 203
     
     def install_step_summary(install_steps)
       statuses = install_steps.each_with_object(Hash.new(0)) do |step, counts|
    @@ -6392,7 +6899,6 @@ 

     
     
    -97
     98
     99
     100
    @@ -6426,10 +6932,11 @@ 

    128 129 130 -131

    +131 +132

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 97
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 98
     
     def kettle_config_migration_step(project_root)
       canonical_relative = Kettle::Jem::KETTLE_CONFIG_PATH
    @@ -6486,15 +6993,15 @@ 

     
     
    -1057
    -1058
    -1059
    -1060
    -1061
    -1062
    +1131 +1132 +1133 +1134 +1135 +1136

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1057
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1131
     
     def kettle_family_dependency_root(marker)
       Array(marker["local_dependencies"]).map(&:to_s).each do |path|
    @@ -6522,18 +7029,18 @@ 

     
     
    -1047
    -1048
    -1049
    -1050
    -1051
    -1052
    -1053
    -1054
    -1055
    +1121 +1122 +1123 +1124 +1125 +1126 +1127 +1128 +1129

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1047
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1121
     
     def kettle_family_local_install_marker(command_env)
       path = command_env["KETTLE_FAMILY_LOCAL_INSTALL_MARKER"].to_s
    @@ -6564,13 +7071,13 @@ 

     
     
    -1581
    -1582
    -1583
    -1584
    +1659 +1660 +1661 +1662

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1581
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1659
     
     def list_arg(flag, value)
       values = Array(value).flat_map { |entry| entry.to_s.split(",") }.map(&:strip).reject(&:empty?)
    @@ -6619,8 +7126,6 @@ 

     
     
    -509
    -510
     511
     512
     513
    @@ -6631,10 +7136,12 @@ 

    518 519 520 -521

    +521 +522 +523

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 509
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 511
     
     def literal_github_homepage?(assigned)
       value = assigned.to_s.strip
    @@ -6692,12 +7199,12 @@ 

     
     
    -1064
    -1065
    -1066
    +1138 +1139 +1140

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1064
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1138
     
     def local_env_disabled?(value)
       value.to_s.empty? || value.to_s.casecmp("false").zero?
    @@ -6722,12 +7229,12 @@ 

     
     
    -658
    -659
    -660
    +668 +669 +670

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 658
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 668
     
     def lockfile_normalization_command
       %w[bundle update]
    @@ -6752,7 +7259,6 @@ 

     
     
    -86
     87
     88
     89
    @@ -6761,10 +7267,11 @@ 

    92 93 94 -95

    +95 +96

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 86
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 87
     
     def merge_apply_reports(initial, followup)
       merged = followup.merge(
    @@ -6819,17 +7326,17 @@ 

     
     
    -253
    -254
     255
     256
     257
     258
     259
    -260
    +260 +261 +262

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 253
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 255
     
     def mise_installed?(env)
       path = (env || {})["PATH"].to_s
    @@ -6859,8 +7366,6 @@ 

     
     
    -226
    -227
     228
     229
     230
    @@ -6884,10 +7389,12 @@ 

    248 249 250 -251

    +251 +252 +253

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 226
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 228
     
     def mise_trust_step(project_root, report, env:)
       mise_report = report.fetch(:recipe_reports, []).find do |recipe_report|
    @@ -6935,28 +7442,28 @@ 

     
     
    -763
    -764
    -765
    -766
    -767
    -768
    -769
    -770
    -771
    -772
    -773
    -774
    -775
    -776
    -777
    -778
    -779
    -780
    -781
    +813 +814 +815 +816 +817 +818 +819 +820 +821 +822 +823 +824 +825 +826 +827 +828 +829 +830 +831

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 763
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 813
     
     def normal_lockfile_env(project_root, env)
       command_env = (env || {}).to_h.dup
    @@ -6997,13 +7504,13 @@ 

     
     
    -400
    -401
     402
    -403
    +403 +404 +405

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 400
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 402
     
     def normalize_gemspec_grapheme(content, grapheme)
       replacements = gemspec_grapheme_assignment_replacements(content, grapheme)
    @@ -7029,22 +7536,22 @@ 

     
     
    -1253
    -1254
    -1255
    -1256
    -1257
    -1258
    -1259
    -1260
    -1261
    -1262
    -1263
    -1264
    -1265
    +1328 +1329 +1330 +1331 +1332 +1333 +1334 +1335 +1336 +1337 +1338 +1339 +1340

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1253
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1328
     
     def normalize_git_drivers_mode(value)
       normalized = value.to_s.strip.downcase.tr("_", "-")
    @@ -7079,18 +7586,18 @@ 

     
     
    -1113
    -1114
    -1115
    -1116
    -1117
    -1118
    -1119
    -1120
    -1121
    +1188 +1189 +1190 +1191 +1192 +1193 +1194 +1195 +1196

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1113
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1188
     
     def normalize_hook_templates_mode(value)
       normalized = value.to_s.strip.downcase
    @@ -7121,16 +7628,6 @@ 

     
     
    -632
    -633
    -634
    -635
    -636
    -637
    -638
    -639
    -640
    -641
     642
     643
     644
    @@ -7145,10 +7642,20 @@ 

    653 654 655 -656

    +656 +657 +658 +659 +660 +661 +662 +663 +664 +665 +666

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 632
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 642
     
     def normalize_lockfile_step(project_root, env:, run_options: {})
       if Kettle::Jem::DecisionPolicy.value_to_boolean((run_options || {})[:skip_lock_normalization])
    @@ -7195,8 +7702,6 @@ 

     
     
    -389
    -390
     391
     392
     393
    @@ -7204,10 +7709,12 @@ 

    395 396 397 -398

    +398 +399 +400

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 389
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 391
     
     def normalize_readme_h1_grapheme(content, grapheme)
       lines = content.to_s.split("\n", -1)
    @@ -7239,18 +7746,18 @@ 

     
     
    -262
    -263
     264
     265
     266
     267
     268
     269
    -270
    +270 +271 +272

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 262
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 264
     
     def post_template_project_fix_steps(project_root, report, env:)
       [
    @@ -7281,27 +7788,27 @@ 

     
     
    -907
    -908
    -909
    -910
    -911
    -912
    -913
    -914
    -915
    -916
    -917
    -918
    -919
    -920
    -921
    -922
    -923
    -924
    +957 +958 +959 +960 +961 +962 +963 +964 +965 +966 +967 +968 +969 +970 +971 +972 +973 +974

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 907
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 957
     
     def prune_unwanted_bundler_binstubs(project_root)
       bin_dir = File.join(project_root.to_s, "bin")
    @@ -7341,20 +7848,20 @@ 

     
     
    -1819
    -1820
    -1821
    -1822
    -1823
    -1824
    -1825
    -1826
    -1827
    -1828
    -1829
    +1941 +1942 +1943 +1944 +1945 +1946 +1947 +1948 +1949 +1950 +1951

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1819
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1941
     
     def quiet_command(command, quiet:)
       argv = command.map(&:to_s)
    @@ -7387,20 +7894,20 @@ 

     
     
    -1831
    -1832
    -1833
    -1834
    -1835
    -1836
    -1837
    -1838
    -1839
    -1840
    -1841
    +1953 +1954 +1955 +1956 +1957 +1958 +1959 +1960 +1961 +1962 +1963

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1831
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1953
     
     def quiet_command_env(env)
       (env || {}).to_h.merge(
    @@ -7421,7 +7928,7 @@ 

    - .rake_task_available?(project_root, task_name) ⇒ Boolean + .rake_task_available?(project_root, task_name, env: nil) ⇒ Boolean @@ -7456,18 +7963,18 @@

     
     
    -692
    -693
    -694
    -695
    -696
    -697
    +742 +743 +744 +745 +746 +747

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 692
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 742
     
    -def rake_task_available?(project_root, task_name)
    -  stdout, _stderr, status = Open3.capture3("bin/rake", "--tasks", chdir: project_root.to_s)
    +def rake_task_available?(project_root, task_name, env: nil)
    +  stdout, _stderr, status = Open3.capture3((env || {}).to_h, "bin/rake", "--tasks", chdir: project_root.to_s)
       status.success? && stdout.lines.any? { |line| line.include?(task_name.to_s) }
     rescue Errno::EACCES, Errno::ENOENT
       false
    @@ -7492,16 +7999,16 @@ 

     
     
    -381
    -382
     383
     384
     385
     386
    -387
    +387 +388 +389

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 381
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 383
     
     def readme_h1_grapheme(content)
       h1 = Kettle::Jem.markdown_heading_owners(content, source_label: "README.md").find { |owner| owner.level == 1 }
    @@ -7530,17 +8037,17 @@ 

     
     
    -975
    -976
    -977
    -978
    -979
    -980
    -981
    -982
    +1025 +1026 +1027 +1028 +1029 +1030 +1031 +1032

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 975
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1025
     
     def relative_or_absolute_path(path, project_root)
       expanded_path = File.expand_path(path.to_s)
    @@ -7570,29 +8077,29 @@ 

     
     
    -1772
    -1773
    -1774
    -1775
    -1776
    -1777
    -1778
    -1779
    -1780
    -1781
    -1782
    -1783
    -1784
    -1785
    -1786
    -1787
    -1788
    -1789
    -1790
    -1791
    - - -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1772
    +1894
    +1895
    +1896
    +1897
    +1898
    +1899
    +1900
    +1901
    +1902
    +1903
    +1904
    +1905
    +1906
    +1907
    +1908
    +1909
    +1910
    +1911
    +1912
    +1913
    + + +
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1894
     
     def remove_git_attribute_managed_block(content, managed_block:)
       start_line = git_attribute_block_start(managed_block)
    @@ -7634,13 +8141,13 @@ 

     
     
    -1793
    -1794
    -1795
    -1796
    +1915 +1916 +1917 +1918

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1793
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1915
     
     def render_git_attribute_line(update)
       attributes = update.fetch(:attributes).map { |key, value| "#{key}=#{value}" }.join(" ")
    @@ -7666,17 +8173,17 @@ 

     
     
    -1763
    -1764
    -1765
    -1766
    -1767
    -1768
    -1769
    -1770
    +1885 +1886 +1887 +1888 +1889 +1890 +1891 +1892

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1763
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1885
     
     def render_git_attributes(content, updates, managed_block:)
       unmanaged_lines = remove_git_attribute_managed_block(content, managed_block: managed_block).fetch(:lines)
    @@ -7706,19 +8213,19 @@ 

     
     
    -1752
    -1753
    -1754
    -1755
    -1756
    -1757
    -1758
    -1759
    -1760
    -1761
    +1874 +1875 +1876 +1877 +1878 +1879 +1880 +1881 +1882 +1883

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1752
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1874
     
     def render_git_driver_include_config(config_entries)
       lines = ["# Generated by kettle-jem; do not commit this file."]
    @@ -7750,8 +8257,6 @@ 

     
     
    -455
    -456
     457
     458
     459
    @@ -7802,10 +8307,12 @@ 

    504 505 506 -507

    +507 +508 +509

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 455
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 457
     
     def repair_gemspec_homepage(project_root, env)
       gemspec_path = Dir.glob(File.join(project_root.to_s, "*.gemspec")).min
    @@ -7880,14 +8387,14 @@ 

     
     
    -427
    -428
     429
     430
    -431
    +431 +432 +433

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 427
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 429
     
     def replace_character_ranges(content, replacements)
       replacements.sort_by(&:first).reverse.reduce(content.to_s) do |updated, (start_character_offset, end_character_offset, replacement)|
    @@ -7914,40 +8421,40 @@ 

     
     
    -836
    -837
    -838
    -839
    -840
    -841
    -842
    -843
    -844
    -845
    -846
    -847
    -848
    -849
    -850
    -851
    -852
    -853
    -854
    -855
    -856
    -857
    -858
    -859
    -860
    -861
    -862
    -863
    -864
    -865
    -866
    +886 +887 +888 +889 +890 +891 +892 +893 +894 +895 +896 +897 +898 +899 +900 +901 +902 +903 +904 +905 +906 +907 +908 +909 +910 +911 +912 +913 +914 +915 +916

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 836
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 886
     
     def rewrite_yard_binstub(project_root)
       yard_binstub = File.join(project_root.to_s, "bin", "yard")
    @@ -8000,12 +8507,12 @@ 

     
     
    -688
    -689
    -690
    +738 +739 +740

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 688
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 738
     
     def rubocop_gradual_autocorrect_command
       ["sh", "-c", "rm -f .rubocop_gradual.lock && bin/rake rubocop_gradual:autocorrect"]
    @@ -8018,7 +8525,7 @@ 

    - .rubocop_gradual_autocorrect_step(project_root) ⇒ Object + .rubocop_gradual_autocorrect_step(project_root, env: nil, run_options: {}) ⇒ Object @@ -8030,36 +8537,52 @@

     
     
    -662
    -663
    -664
    -665
    -666
    -667
    -668
    -669
    -670
    -671
    -672
    -673
    -674
    -675
    -676
    -677
    -678
    -679
    -680
    -681
    -682
    -683
    -684
    -685
    -686
    +704 +705 +706 +707 +708 +709 +710 +711 +712 +713 +714 +715 +716 +717 +718 +719 +720 +721 +722 +723 +724 +725 +726 +727 +728 +729 +730 +731 +732 +733 +734 +735 +736

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 662
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 704
    +
    +def rubocop_gradual_autocorrect_step(project_root, env: nil, run_options: {})
    +  if Kettle::Jem::DecisionPolicy.value_to_boolean((run_options || {})[:skip_rubocop_gradual])
    +    return {
    +      name: "rubocop_gradual_autocorrect",
    +      status: "skipped",
    +      reason: "skip_rubocop_gradual"
    +    }
    +  end
     
    -def rubocop_gradual_autocorrect_step(project_root)
       rakefile = File.join(project_root.to_s, "Rakefile")
       bin_rake = File.join(project_root.to_s, "bin", "rake")
       unless File.file?(rakefile) && File.file?(bin_rake)
    @@ -8069,7 +8592,7 @@ 

    reason: "missing_rake_entrypoint" } end - unless rake_task_available?(project_root, "rubocop_gradual:autocorrect") + unless rake_task_available?(project_root, "rubocop_gradual:autocorrect", env: env) return { name: "rubocop_gradual_autocorrect", status: "skipped", @@ -8104,50 +8627,50 @@

     
     
    -699
    -700
    -701
    -702
    -703
    -704
    -705
    -706
    -707
    -708
    -709
    -710
    -711
    -712
    -713
    -714
    -715
    -716
    -717
    -718
    -719
    -720
    -721
    -722
    -723
    -724
    -725
    -726
    -727
    -728
    -729
    -730
    -731
    -732
    -733
    -734
    -735
    -736
    -737
    -738
    -739
    +749 +750 +751 +752 +753 +754 +755 +756 +757 +758 +759 +760 +761 +762 +763 +764 +765 +766 +767 +768 +769 +770 +771 +772 +773 +774 +775 +776 +777 +778 +779 +780 +781 +782 +783 +784 +785 +786 +787 +788 +789

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 699
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 749
     
     def rubocop_lts_local_branch_step(report, env:, project_root: nil)
       local_root = rubocop_lts_local_root(env)
    @@ -8210,17 +8733,17 @@ 

     
     
    -747
    -748
    -749
    -750
    -751
    -752
    -753
    -754
    +797 +798 +799 +800 +801 +802 +803 +804

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 747
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 797
     
     def rubocop_lts_local_root(env)
       value = (env || {})["RUBOCOP_LTS_LOCAL"].to_s.strip
    @@ -8250,13 +8773,13 @@ 

     
     
    -422
    -423
     424
    -425
    +425 +426 +427

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 422
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 424
     
     def ruby_string_literal_content(value, quote)
       escaped = value.to_s.gsub("\\", "\\\\\\\\")
    @@ -8321,7 +8844,8 @@ 

    59 60 61 -62

    +62 +63
    # File 'lib/kettle/jem/tasks/install_task.rb', line 23
    @@ -8345,8 +8869,9 @@ 

    setup_env = setup_command_env(project_root, env) rubocop_lts_branch_step = rubocop_lts_local_branch_step(report, env: setup_env, project_root: project_root) install_steps << rubocop_lts_branch_step if rubocop_lts_branch_step + install_steps << run_distinct_bundle_install_step(project_root, env: env, setup_env: setup_env, run_options: effective_run_options, command_runner: command_runner) install_steps.concat(run_bundle_setup_commands(project_root, env: setup_env, run_options: effective_run_options, command_runner: command_runner)) - install_steps << rubocop_gradual_autocorrect_step(project_root) + install_steps << rubocop_gradual_autocorrect_step(project_root, env: setup_env, run_options: effective_run_options) install_steps << normalize_lockfile_step(project_root, env: setup_env, run_options: effective_run_options) install_steps << bundled_handoff_step(project_root: project_root, env: env, run_options: effective_run_options) install_steps << bootstrap_commit_step(project_root, run_options: effective_run_options) @@ -8386,8 +8911,6 @@

     
     
    -584
    -585
     586
     587
     588
    @@ -8413,10 +8936,20 @@ 

    608 609 610 -611

    +611 +612 +613 +614 +615 +616 +617 +618 +619 +620 +621

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 584
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 586
     
     def run_bundle_setup_commands(project_root, env:, run_options:, command_runner:)
       quiet = Kettle::Jem::DecisionPolicy.value_to_boolean(run_options[:quiet])
    @@ -8428,7 +8961,15 @@ 

    env: env, quiet: quiet, command_runner: command_runner - ), + ) + ] + steps << if Kettle::Jem::DecisionPolicy.value_to_boolean((run_options || {})[:skip_binstubs]) + { + name: "bundle_binstubs", + status: "skipped", + reason: "skip_binstubs" + } + else run_command_step( "bundle_binstubs", bundle_binstubs_command(project_root, env: env), @@ -8437,7 +8978,7 @@

    quiet: quiet, command_runner: command_runner ) - ] + end if steps.any? { |step| step.fetch(:name) == "bundle_binstubs" && step.fetch(:status) == "succeeded" } steps << rewrite_yard_binstub(project_root) steps << prune_unwanted_bundler_binstubs(project_root) @@ -8489,55 +9030,109 @@

     
     
    -1592
    -1593
    -1594
    -1595
    -1596
    -1597
    -1598
    -1599
    -1600
    -1601
    -1602
    -1603
    -1604
    -1605
    -1606
    -1607
    -1608
    -1609
    -1610
    -1611
    -1612
    -1613
    -1614
    +1670 +1671 +1672 +1673 +1674 +1675 +1676 +1677 +1678 +1679 +1680 +1681 +1682 +1683 +1684 +1685 +1686 +1687 +1688 +1689 +1690 +1691 +1692 +1693 +1694 +1695

    + + +
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1670
    +
    +def run_command_step(name, command, project_root:, env:, quiet:, command_runner:)
    +  if command.first == File.join("bin", "setup") && !File.exist?(File.join(project_root, "bin", "setup"))
    +    return {
    +      name: name,
    +      command: command,
    +      status: "skipped",
    +      reason: "missing bin/setup"
    +    }
    +  end
    +
    +  started_at = Process.clock_gettime(Process::CLOCK_MONOTONIC)
    +  result = command_runner.call(command, chdir: project_root, env: env, quiet: quiet)
    +  duration_ms = ((Process.clock_gettime(Process::CLOCK_MONOTONIC) - started_at) * 1000.0).round(3)
    +  success = result.fetch(:success)
    +  if success
    +    return {
    +      name: name,
    +      command: command,
    +      status: "succeeded",
    +      exitstatus: result[:exitstatus],
    +      duration_ms: duration_ms
    +    }
    +  end
    +
    +  raise Kettle::Jem::Error, "#{name} failed: #{command.join(" ")}\n#{result[:stderr]}"
    +end
    + + + + + +
    +

    + + .run_distinct_bundle_install_step(project_root, env:, setup_env:, run_options:, command_runner:) ⇒ Object + + + + + +

    + + @@ -8559,21 +9154,21 @@

     
     
    -1806
    -1807
    -1808
    -1809
    -1810
    -1811
    -1812
    -1813
    -1814
    -1815
    -1816
    -1817
    +1928 +1929 +1930 +1931 +1932 +1933 +1934 +1935 +1936 +1937 +1938 +1939

    +
    +
    +
    +691
    +692
    +693
    +694
    +695
    +696
    +697
    +698
    +699
    +700
    +701
    +702
    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1592
    -
    -def run_command_step(name, command, project_root:, env:, quiet:, command_runner:)
    -  if command.first == File.join("bin", "setup") && !File.exist?(File.join(project_root, "bin", "setup"))
    -    return {
    -      name: name,
    -      command: command,
    -      status: "skipped",
    -      reason: "missing bin/setup"
    -    }
    -  end
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 691
     
    -  result = command_runner.call(command, chdir: project_root, env: env, quiet: quiet)
    -  success = result.fetch(:success)
    -  if success
    -    return {
    -      name: name,
    -      command: command,
    -      status: "succeeded",
    -      exitstatus: result[:exitstatus]
    -    }
    -  end
    +def run_distinct_bundle_install_step(project_root, env:, setup_env:, run_options:, command_runner:)
    +  step = distinct_bundle_install_step(project_root, env: env, setup_env: setup_env)
    +  return step unless step.fetch(:status) == "ready"
     
    -  raise Kettle::Jem::Error, "#{name} failed: #{command.join(" ")}\n#{result[:stderr]}"
    +  execute_ready_command_step(
    +    step,
    +    project_root: project_root,
    +    env: setup_env,
    +    quiet: Kettle::Jem::DecisionPolicy.value_to_boolean(run_options[:quiet]),
    +    command_runner: command_runner
    +  )
     end
    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1806
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1928
     
     def run_system_command(command, chdir:, env:, quiet:)
       command_env = quiet ? quiet_command_env(env) : (env || {})
    @@ -8590,6 +9185,59 @@ 

    +
    + +
    +

    + + .same_bundle_env?(left, right) ⇒ Boolean + + + + + +

    +
    + + + +
    +
    +
    + +

    Returns:

    +
      + +
    • + + + (Boolean) + + + +
    • + +
    + +
    + + + + +
    +
    +
    +
    +1094
    +1095
    +1096
    +
    +
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1094
    +
    +def same_bundle_env?(left, right)
    +  bundle_env_fingerprint(left) == bundle_env_fingerprint(right)
    +end
    +
    @@ -8630,14 +9278,14 @@

     
     
    -741
    -742
    -743
    -744
    -745
    +791 +792 +793 +794 +795

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 741
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 791
     
     def same_path?(left, right)
       File.realpath(left.to_s) == File.realpath(right.to_s)
    @@ -8664,18 +9312,18 @@ 

     
     
    -1267
    -1268
    -1269
    -1270
    -1271
    -1272
    -1273
    -1274
    -1275
    +1342 +1343 +1344 +1345 +1346 +1347 +1348 +1349 +1350

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1267
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1342
     
     def semantic_git_driver_attribute_updates
       GIT_DRIVER_LANGUAGE_REGISTRY.values.map do |definition|
    @@ -8706,21 +9354,21 @@ 

     
     
    -1019
    -1020
    -1021
    -1022
    -1023
    -1024
    -1025
    -1026
    -1027
    -1028
    -1029
    -1030
    +1071 +1072 +1073 +1074 +1075 +1076 +1077 +1078 +1079 +1080 +1081 +1082

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1019
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1071
     
     def setup_command_env(project_root, env)
       command_env = (env || {}).to_h.dup
    @@ -8754,18 +9402,20 @@ 

     
     
    -1068
    -1069
    -1070
    -1071
    -1072
    +1142 +1143 +1144 +1145 +1146 +1147

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1068
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1142
     
     def strip_inherited_bundler_activation!(command_env)
       (ENV.keys + command_env.keys).grep(/\ABUNDLE_/).each { |key| command_env[key] = nil }
       (ENV.keys + command_env.keys).grep(/\ABUNDLER_/).each { |key| command_env[key] = nil }
    +  (ENV.keys + command_env.keys).grep(/\AGIT_CONFIG_(?:COUNT|KEY_\d+|VALUE_\d+)\z/).each { |key| command_env[key] = nil }
       %w[RUBYLIB RUBYOPT].each { |key| command_env[key] = nil }
     end
    @@ -8788,8 +9438,6 @@

     
     
    -433
    -434
     435
     436
     437
    @@ -8797,10 +9445,12 @@ 

    439 440 441 -442

    +442 +443 +444

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 433
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 435
     
     def strip_leading_decorative_graphemes(text)
       remaining = text.to_s.sub(/\A\s+/, "")
    @@ -8832,8 +9482,6 @@ 

     
     
    -333
    -334
     335
     336
     337
    @@ -8864,10 +9512,12 @@ 

    362 363 364 -365

    +365 +366 +367

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 333
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 335
     
     def sync_readme_gemspec_grapheme(project_root, env)
       readme_path = File.join(project_root.to_s, "README.md")
    @@ -8922,8 +9572,6 @@ 

     
     
    -289
    -290
     291
     292
     293
    @@ -8955,10 +9603,12 @@ 

    319 320 321 -322

    +322 +323 +324

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 289
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 291
     
     def trim_readme_compatibility_badges(project_root, report)
       readme_path = File.join(project_root.to_s, "README.md")
    @@ -9037,12 +9687,12 @@ 

     
     
    -1391
    -1392
    -1393
    +1466 +1467 +1468

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1391
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1466
     
     def unsafe_git_driver_command_value?(value)
       value.include?("$(") || value.include?("${") || value.include?("`")
    @@ -9067,38 +9717,38 @@ 

     
     
    -806
    -807
    -808
    -809
    -810
    -811
    -812
    -813
    -814
    -815
    -816
    -817
    -818
    -819
    -820
    -821
    -822
    -823
    -824
    -825
    -826
    -827
    -828
    -829
    -830
    -831
    -832
    -833
    -834
    +856 +857 +858 +859 +860 +861 +862 +863 +864 +865 +866 +867 +868 +869 +870 +871 +872 +873 +874 +875 +876 +877 +878 +879 +880 +881 +882 +883 +884

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 806
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 856
     
     def validate_bundle_binstub_location(project_root)
       destination_bin = File.join(project_root.to_s, "bin")
    @@ -9172,20 +9822,20 @@ 

     
     
    -1361
    -1362
    -1363
    -1364
    -1365
    -1366
    -1367
    -1368
    -1369
    -1370
    -1371
    +1436 +1437 +1438 +1439 +1440 +1441 +1442 +1443 +1444 +1445 +1446

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1361
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1436
     
     def validate_git_driver_manifest!(manifest)
       raise Kettle::Jem::Error, "Invalid .structuredmerge/git-drivers.toml: root must be a mapping" unless manifest.is_a?(Hash)
    @@ -9241,26 +9891,26 @@ 

     
     
    -1373
    -1374
    -1375
    -1376
    -1377
    -1378
    -1379
    -1380
    -1381
    -1382
    -1383
    -1384
    -1385
    -1386
    -1387
    -1388
    -1389
    +1448 +1449 +1450 +1451 +1452 +1453 +1454 +1455 +1456 +1457 +1458 +1459 +1460 +1461 +1462 +1463 +1464

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1373
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1448
     
     def validate_git_driver_profile!(profile_name, profile)
       raise Kettle::Jem::Error, "Invalid .structuredmerge/git-drivers.toml: profile name is required" if profile_name.to_s.empty?
    @@ -9299,12 +9949,12 @@ 

     
     
    -1577
    -1578
    -1579
    +1655 +1656 +1657

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1577
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 1655
     
     def value_arg(flag, value)
       value.to_s.strip.empty? ? [] : [flag, value.to_s]
    @@ -9329,13 +9979,13 @@ 

     
     
    -160
     161
     162
    -163
    +163 +164

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 160
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 161
     
     def version_gem_bootstrap_step(project_root, report)
       report.fetch(:post_apply_steps, []).find { |step| step.fetch(:name, nil) == "version_gem_bootstrap" } ||
    @@ -9361,28 +10011,28 @@ 

     
     
    -868
    -869
    -870
    -871
    -872
    -873
    -874
    -875
    -876
    -877
    -878
    -879
    -880
    -881
    -882
    -883
    -884
    -885
    -886
    +918 +919 +920 +921 +922 +923 +924 +925 +926 +927 +928 +929 +930 +931 +932 +933 +934 +935 +936

    -
    # File 'lib/kettle/jem/tasks/install_task.rb', line 868
    +      
    # File 'lib/kettle/jem/tasks/install_task.rb', line 918
     
     def yard_binstub_rake_handoff_content
       <<~RUBY
    @@ -9413,7 +10063,7 @@ 

    diff --git a/gems/kettle-jem/docs/Kettle/Jem/Tasks/PrepareTask.html b/gems/kettle-jem/docs/Kettle/Jem/Tasks/PrepareTask.html index 43ac51029..66ed72fea 100644 --- a/gems/kettle-jem/docs/Kettle/Jem/Tasks/PrepareTask.html +++ b/gems/kettle-jem/docs/Kettle/Jem/Tasks/PrepareTask.html @@ -136,6 +136,29 @@

  • + .bundle_install_after_bootstrap_step(project_root:, setup_env:, quiet:, command_runner:, events:, bootstrap_command:) ⇒ Object + + + + + + + + + + + + + +
    +
    + +
  • + + +
  • + + .bundle_update_templating_bootstrap_command(project_root = Dir.pwd) ⇒ Object @@ -196,6 +219,52 @@

    +
    +
    + +

  • + + +
  • + + + .templating_bootstrap_command(project_root = Dir.pwd) ⇒ Object + + + + + + + + + + + + + +
    +
    + +
  • + + +
  • + + + .templating_bootstrap_step_name(project_root = Dir.pwd) ⇒ Object + + + + + + + + + + + + +
    @@ -213,7 +282,81 @@

    Class Method Details

    -

    +

    + + .bundle_install_after_bootstrap_step(project_root:, setup_env:, quiet:, command_runner:, events:, bootstrap_command:) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +94
    +95
    +96
    +97
    +98
    +99
    +100
    +101
    +102
    +103
    +104
    +105
    +106
    +107
    +108
    +109
    +110
    +111
    +112
    +113
    +114
    +115
    +116
    +117
    +118
    +
    +
    # File 'lib/kettle/jem/tasks/prepare_task.rb', line 94
    +
    +def bundle_install_after_bootstrap_step(project_root:, setup_env:, quiet:, command_runner:, events:, bootstrap_command:)
    +  if bootstrap_command == %w[bundle install]
    +    return {
    +      name: "bundle_install",
    +      command: %w[bundle install],
    +      status: "skipped",
    +      reason: "already_ran_as_templating_bootstrap"
    +    }
    +  end
    +
    +  Kettle::Jem.emit_step_event(
    +    events,
    +    "command_step",
    +    {name: "bundle_install", status: "started", command: %w[bundle install]},
    +    phase: "prepare"
    +  )
    +  Kettle::Jem::Tasks::InstallTask.run_command_step(
    +    "bundle_install",
    +    %w[bundle install],
    +    project_root: project_root,
    +    env: setup_env,
    +    quiet: quiet,
    +    command_runner: command_runner
    +  )
    +end
    +
    +
    + +
    +

    .bundle_update_templating_bootstrap_command(project_root = Dir.pwd) ⇒ Object @@ -227,12 +370,12 @@

    -82 -83 -84

  • +78 +79 +80
    -
    # File 'lib/kettle/jem/tasks/prepare_task.rb', line 82
    +      
    # File 'lib/kettle/jem/tasks/prepare_task.rb', line 78
     
     def bundle_update_templating_bootstrap_command(project_root = Dir.pwd)
       %w[bundle update] + CRITICAL_TEMPLATING_GEMS + locked_templating_gems(project_root)
    @@ -257,16 +400,16 @@ 

     
     
    -86
    -87
    -88
    -89
    -90
    -91
    -92
    +120 +121 +122 +123 +124 +125 +126

    -
    # File 'lib/kettle/jem/tasks/prepare_task.rb', line 86
    +      
    # File 'lib/kettle/jem/tasks/prepare_task.rb', line 120
     
     def locked_templating_gems(project_root)
       lock_path = File.join(project_root.to_s, "Gemfile.lock")
    @@ -350,11 +493,7 @@ 

    73 74 75 -76 -77 -78 -79 -80

    +76
    # File 'lib/kettle/jem/tasks/prepare_task.rb', line 21
    @@ -368,46 +507,42 @@ 

    report = Kettle::Jem.apply_project(project_root, env: env, run_options: prepare_run_options) setup_env = Kettle::Jem::Tasks::InstallTask.setup_command_env(project_root, env) events = Kettle::Jem.event_stream_from_options(effective_run_options) + bootstrap_name = templating_bootstrap_step_name(project_root) + bootstrap_command = templating_bootstrap_command(project_root) Kettle::Jem.emit_step_event( events, "command_step", - {name: "bundle_update_templating_bootstrap", status: "started", command: bundle_update_templating_bootstrap_command(project_root)}, + {name: bootstrap_name, status: "started", command: bootstrap_command}, phase: "prepare" ) - update_step = Kettle::Jem::Tasks::InstallTask.run_command_step( - "bundle_update_templating_bootstrap", - bundle_update_templating_bootstrap_command(project_root), + bootstrap_step = Kettle::Jem::Tasks::InstallTask.run_command_step( + bootstrap_name, + bootstrap_command, project_root: project_root, env: setup_env, quiet: Kettle::Jem::DecisionPolicy.value_to_boolean(effective_run_options[:quiet]), command_runner: command_runner ) - Kettle::Jem.emit_step_event(events, "command_step", update_step, phase: "prepare") - Kettle::Jem.emit_step_event( - events, - "command_step", - {name: "bundle_install", status: "started", command: %w[bundle install]}, - phase: "prepare" - ) - bundle_step = Kettle::Jem::Tasks::InstallTask.run_command_step( - "bundle_install", - %w[bundle install], + Kettle::Jem.emit_step_event(events, "command_step", bootstrap_step, phase: "prepare") + bundle_step = bundle_install_after_bootstrap_step( project_root: project_root, - env: setup_env, + setup_env: setup_env, quiet: Kettle::Jem::DecisionPolicy.value_to_boolean(effective_run_options[:quiet]), - command_runner: command_runner + command_runner: command_runner, + events: events, + bootstrap_command: bootstrap_command ) Kettle::Jem.emit_step_event(events, "command_step", bundle_step, phase: "prepare") final_report = report.merge( mode: "prepare", - prepared: update_step.fetch(:status) == "succeeded" && - bundle_step.fetch(:status) == "succeeded", + prepared: bootstrap_step.fetch(:status) == "succeeded" && + %w[skipped succeeded].include?(bundle_step.fetch(:status)), prepare_only: PREPARE_ONLY_PATHS, - prepare_steps: [update_step, bundle_step], + prepare_steps: [bootstrap_step, bundle_step], changed_files: ( report.fetch(:changed_files, []) + - update_step.fetch(:changed_files, []) + + bootstrap_step.fetch(:changed_files, []) + bundle_step.fetch(:changed_files, []) ).uniq.sort, diagnostics: report.fetch(:diagnostics, []) + [{ @@ -422,6 +557,74 @@

    + + +
    +

    + + .templating_bootstrap_command(project_root = Dir.pwd) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +82
    +83
    +84
    +85
    +86
    +
    +
    # File 'lib/kettle/jem/tasks/prepare_task.rb', line 82
    +
    +def templating_bootstrap_command(project_root = Dir.pwd)
    +  return %w[bundle install] unless File.file?(File.join(project_root.to_s, "Gemfile.lock"))
    +
    +  bundle_update_templating_bootstrap_command(project_root)
    +end
    +
    +
    + +
    +

    + + .templating_bootstrap_step_name(project_root = Dir.pwd) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +88
    +89
    +90
    +91
    +92
    +
    +
    # File 'lib/kettle/jem/tasks/prepare_task.rb', line 88
    +
    +def templating_bootstrap_step_name(project_root = Dir.pwd)
    +  return "bundle_install_templating_bootstrap" unless File.file?(File.join(project_root.to_s, "Gemfile.lock"))
    +
    +  "bundle_update_templating_bootstrap"
    +end
    +
    @@ -429,7 +632,7 @@

    diff --git a/gems/kettle-jem/docs/Kettle/Jem/Tasks/SelfTestTask.html b/gems/kettle-jem/docs/Kettle/Jem/Tasks/SelfTestTask.html index 8006ab2ab..9b15b3611 100644 --- a/gems/kettle-jem/docs/Kettle/Jem/Tasks/SelfTestTask.html +++ b/gems/kettle-jem/docs/Kettle/Jem/Tasks/SelfTestTask.html @@ -496,6 +496,8 @@

     
     
    +240
    +241
     242
     243
     244
    @@ -506,12 +508,10 @@ 

    249 250 251 -252 -253 -254

    +252

    -
    # File 'lib/kettle/jem/tasks/self_test_task.rb', line 242
    +      
    # File 'lib/kettle/jem/tasks/self_test_task.rb', line 240
     
     def append_drift_summary(summary, drift)
       return summary unless drift
    @@ -667,17 +667,13 @@ 

    235 236 237 -238 -239 -240

    +238
    # File 'lib/kettle/jem/tasks/self_test_task.rb', line 211
     
     def drift_report(after_dir:, template_root:)
    -  begin
    -    require "kettle/drift"
    -  rescue LoadError
    +  unless defined?(Kettle::Drift)
         return {
           available: false,
           reason: "kettle-drift is not available"
    @@ -1332,7 +1328,7 @@ 

    diff --git a/gems/kettle-jem/docs/Kettle/Jem/Tasks/TemplateTask.html b/gems/kettle-jem/docs/Kettle/Jem/Tasks/TemplateTask.html index cad840c7b..d2829d7ce 100644 --- a/gems/kettle-jem/docs/Kettle/Jem/Tasks/TemplateTask.html +++ b/gems/kettle-jem/docs/Kettle/Jem/Tasks/TemplateTask.html @@ -104,6 +104,29 @@

  • + .default_thread_worker_count ⇒ Object + + + + + + + + + + + + + +
    +
    + +
  • + + +
  • + + .env_run_options(env) ⇒ Object @@ -173,7 +196,30 @@

  • - .run(project_root: Dir.pwd, env: ENV, run_options: env_run_options(env), command_runner: Kettle::Jem::Tasks::InstallTask.method(:run_system_command)) ⇒ Object + .run(project_root: Dir.pwd, env: ENV, run_options: nil, command_runner: Kettle::Jem::Tasks::InstallTask.method(:run_system_command)) ⇒ Object + + + + + + + + + + + + + +
    +
    + +
  • + + +
  • + + + .templating_run_options(env, run_options) ⇒ Object @@ -210,6 +256,29 @@

    +
    +
    + +

  • + + +
  • + + + .worker_or_strategy_option_provided?(env, run_options) ⇒ Boolean + + + + + + + + + + + + +
    @@ -227,7 +296,37 @@

    Class Method Details

    -

    +

    + + .default_thread_worker_countObject + + + + + +

    + + + + +
    +
    +
    +
    +77
    +78
    +79
    +
    +
    # File 'lib/kettle/jem/tasks/template_task.rb', line 77
    +
    +def default_thread_worker_count
    +  [1, Etc.nprocessors / 2].max
    +end
    +
    +
    + +
    +

    .env_run_options(env) ⇒ Object @@ -241,30 +340,33 @@

     
     
    -37
    -38
    -39
    -40
    -41
    -42
    -43
    -44
    -45
    -46
    -47
    -48
    -49
    -50
    -51
     52
     53
     54
     55
     56
    -57
    +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75

  • -
    # File 'lib/kettle/jem/tasks/template_task.rb', line 37
    +      
    # File 'lib/kettle/jem/tasks/template_task.rb', line 52
     
     def env_run_options(env)
       {
    @@ -280,6 +382,9 @@ 

    template_profile: env["KETTLE_JEM_TEMPLATE_PROFILE"], dry_run: truthy?(env["KETTLE_JEM_DRY_RUN"]), skip_commit: truthy?(env["KETTLE_JEM_SKIP_COMMIT"]), + skip_drift_check: truthy?(env["KETTLE_JEM_SKIP_DRIFT_CHECK"]), + skip_rubocop_gradual: truthy?(env["KETTLE_JEM_SKIP_RUBOCOP_GRADUAL"]), + skip_binstubs: truthy?(env["KETTLE_JEM_SKIP_BINSTUBS"]), skip_lock_normalization: truthy?(env["KETTLE_JEM_SKIP_LOCK_NORMALIZATION"]), accept_config: truthy?(env["KETTLE_JEM_ACCEPT_CONFIG"]), bootstrap_mode: truthy?(env["KETTLE_JEM_BOOTSTRAP_MODE"]), @@ -330,12 +435,12 @@

     
     
    -63
    -64
    -65
    +110 +111 +112

    -
    # File 'lib/kettle/jem/tasks/template_task.rb', line 63
    +      
    # File 'lib/kettle/jem/tasks/template_task.rb', line 110
     
     def falsey?(value)
       Kettle::Jem::DecisionPolicy.falsey?(value)
    @@ -383,14 +488,14 @@ 

     
     
    -67
    -68
    -69
    -70
    -71
    +114 +115 +116 +117 +118

    -
    # File 'lib/kettle/jem/tasks/template_task.rb', line 67
    +      
    # File 'lib/kettle/jem/tasks/template_task.rb', line 114
     
     def monorepo_root_profile?(project_root, env, run_options)
       profile = (run_options || {})[:template_profile] || (run_options || {})["template_profile"] || (env || {})["KETTLE_JEM_TEMPLATE_PROFILE"]
    @@ -405,7 +510,7 @@ 

    - .run(project_root: Dir.pwd, env: ENV, run_options: env_run_options(env), command_runner: Kettle::Jem::Tasks::InstallTask.method(:run_system_command)) ⇒ Object + .run(project_root: Dir.pwd, env: ENV, run_options: nil, command_runner: Kettle::Jem::Tasks::InstallTask.method(:run_system_command)) ⇒ Object @@ -417,8 +522,6 @@

     
     
    -9
    -10
     11
     12
     13
    @@ -443,13 +546,17 @@ 

    32 33 34 -35

    +35 +36 +37 +38

    -
    # File 'lib/kettle/jem/tasks/template_task.rb', line 9
    +      
    # File 'lib/kettle/jem/tasks/template_task.rb', line 11
     
    -def run(project_root: Dir.pwd, env: ENV, run_options: env_run_options(env), command_runner: Kettle::Jem::Tasks::InstallTask.method(:run_system_command))
    -  report = if Dir.glob(File.join(project_root.to_s, "*.gemspec")).empty? && !monorepo_root_profile?(project_root, env, run_options)
    +def run(project_root: Dir.pwd, env: ENV, run_options: nil, command_runner: Kettle::Jem::Tasks::InstallTask.method(:run_system_command))
    +  effective_run_options = templating_run_options(env, run_options)
    +  report = if Dir.glob(File.join(project_root.to_s, "*.gemspec")).empty? && !monorepo_root_profile?(project_root, env, effective_run_options)
         {
           mode: "apply",
           changed_files: [],
    @@ -457,27 +564,73 @@ 

    recipe_reports: [] } else - Kettle::Jem.apply_project(project_root, env: env, run_options: run_options) + Kettle::Jem.apply_project(project_root, env: env, run_options: effective_run_options) end setup_env = Kettle::Jem::Tasks::InstallTask.setup_command_env(project_root, env) - hook_step = Kettle::Jem::Tasks::InstallTask.hook_templates_step(project_root, run_options) - git_drivers_step = Kettle::Jem::Tasks::InstallTask.git_drivers_step(project_root, run_options) - lock_step = Kettle::Jem::Tasks::InstallTask.normalize_lockfile_step(project_root, env: setup_env, run_options: run_options) + hook_step = Kettle::Jem::Tasks::InstallTask.hook_templates_step(project_root, effective_run_options) + git_drivers_step = Kettle::Jem::Tasks::InstallTask.git_drivers_step(project_root, effective_run_options) + lock_step = Kettle::Jem::Tasks::InstallTask.normalize_lockfile_step(project_root, env: setup_env, run_options: effective_run_options) template_steps = Kettle::Jem::Tasks::InstallTask.execute_orchestration_steps( [hook_step, git_drivers_step, lock_step], project_root: project_root, env: setup_env, - run_options: run_options, + run_options: effective_run_options, command_runner: command_runner, event_phase: "template" ) final_report = report.merge(mode: "template", template_steps: template_steps) - Kettle::Jem.emit_summary_event(Kettle::Jem.event_stream_from_options(run_options), final_report) + Kettle::Jem.emit_summary_event(Kettle::Jem.event_stream_from_options(effective_run_options), final_report) final_report end

    + + +
    +

    + + .templating_run_options(env, run_options) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +
    +
    # File 'lib/kettle/jem/tasks/template_task.rb', line 40
    +
    +def templating_run_options(env, run_options)
    +  options = env_run_options(env || {}).merge(run_options || {})
    +  return options if worker_or_strategy_option_provided?(env || {}, options)
    +
    +  workers = default_thread_worker_count
    +  options.merge(
    +    recipe_planning_strategy: "classified",
    +    recipe_planning_thread_workers: workers,
    +    file_work_thread_workers: workers
    +  )
    +end
    +
    @@ -518,12 +671,12 @@

     
     
    -59
    -60
    -61
    +106 +107 +108

    -
    # File 'lib/kettle/jem/tasks/template_task.rb', line 59
    +      
    # File 'lib/kettle/jem/tasks/template_task.rb', line 106
     
     def truthy?(value)
       Kettle::Jem::DecisionPolicy.truthy?(value)
    @@ -531,6 +684,101 @@ 

    + + +
    +

    + + .worker_or_strategy_option_provided?(env, run_options) ⇒ Boolean + + + + + +

    +
    + + + +
    +
    +
    + +

    Returns:

    +
      + +
    • + + + (Boolean) + + + +
    • + +
    + +
    + + + + +
    +
    +
    +
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +89
    +90
    +91
    +92
    +93
    +94
    +95
    +96
    +97
    +98
    +99
    +100
    +101
    +102
    +103
    +104
    +
    +
    # File 'lib/kettle/jem/tasks/template_task.rb', line 81
    +
    +def worker_or_strategy_option_provided?(env, run_options)
    +  option_keys = %i[
    +    ractor_workers
    +    recipe_planning_workers
    +    thread_workers
    +    recipe_planning_thread_workers
    +    ractor_file_workers
    +    file_work_workers
    +    thread_file_workers
    +    file_work_thread_workers
    +    recipe_planning_strategy
    +  ]
    +  string_option_keys = option_keys.map(&:to_s)
    +  env_keys = %w[
    +    KETTLE_JEM_RACTOR_WORKERS
    +    KETTLE_JEM_THREAD_WORKERS
    +    KETTLE_JEM_RACTOR_FILE_WORKERS
    +    KETTLE_JEM_THREAD_FILE_WORKERS
    +    KETTLE_JEM_RECIPE_PLANNING_STRATEGY
    +  ]
    +  option_keys.any? { |key| run_options.key?(key) } ||
    +    string_option_keys.any? { |key| run_options.key?(key) } ||
    +    env_keys.any? { |key| env.key?(key) && !env[key].to_s.strip.empty? }
    +end
    +
    @@ -538,7 +786,7 @@

    diff --git a/gems/kettle-jem/docs/Kettle/Jem/TemplateChecksums.html b/gems/kettle-jem/docs/Kettle/Jem/TemplateChecksums.html index c77f483fd..e4993eb7d 100644 --- a/gems/kettle-jem/docs/Kettle/Jem/TemplateChecksums.html +++ b/gems/kettle-jem/docs/Kettle/Jem/TemplateChecksums.html @@ -110,6 +110,26 @@

    "version"
    +
    APPLIED_AT_SUBKEY = + +
    +
    "applied_at"
    + +
    CHANGELOG_REPLAY_SUBKEY = + +
    +
    "changelog_replay"
    + +
    LAST_ENTRY_KEY_SUBKEY = + +
    +
    "last_entry_key"
    + +
    LAST_ENTRY_DATE_SUBKEY = + +
    +
    "last_entry_date"
    + @@ -130,7 +150,53 @@

  • - .build_yaml_block(checksums:, version: nil) ⇒ Object + .build_yaml_block(checksums:, version: nil, applied_at: nil, changelog_replay: nil) ⇒ Object + + + + + + + + + + + + + +
    +
    + +
  • + + +
  • + + + .build_yaml_state(checksums:, version: nil, applied_at: nil, changelog_replay: nil) ⇒ Object + + + + + + + + + + + + + +
    +
    + +
  • + + +
  • + + + .build_yaml_state_lines(checksums:, version: nil, applied_at: nil, changelog_replay: nil) ⇒ Object @@ -236,6 +302,29 @@

    +
    +
    + +

  • + + +
  • + + + .load_state(config_path:) ⇒ Object + + + + + + + + + + + + +
    @@ -268,7 +357,7 @@

  • - .replace_top_level_yaml_block(content, key, replacement) ⇒ Object + .merge_yaml_state(content, state_block) ⇒ Object @@ -314,7 +403,30 @@

  • - .write_to_config(config_path:, checksums:, version: nil) ⇒ Object + .write_to_config(config_path:, checksums:, version: nil, applied_at: nil, changelog_replay: nil) ⇒ Object + + + + + + + + + + + + + +
    +
    + +
  • + + +
  • + + + .yaml_state_node_range(content) ⇒ Object @@ -347,7 +459,7 @@

    Class Method Details

    - .build_yaml_block(checksums:, version: nil) ⇒ Object + .build_yaml_block(checksums:, version: nil, applied_at: nil, changelog_replay: nil) ⇒ Object @@ -359,29 +471,119 @@

     
     
    -1638
    -1639
    -1640
    -1641
    -1642
    -1643
    -1644
    -1645
    -1646
    -1647
    +1773 +1774 +1775 +1776 +1777 +1778

  • -
    # File 'lib/kettle/jem.rb', line 1638
    +      
    # File 'lib/kettle/jem.rb', line 1773
     
    -def build_yaml_block(checksums:, version: nil)
    +def build_yaml_block(checksums:, version: nil, applied_at: nil, changelog_replay: nil)
       lines = [YAML_KEY]
       lines[0] = "#{lines[0]}:"
    -  lines << "  #{VERSION_SUBKEY}: #{version.to_s.dump}" if version
    -  lines << "  #{CHECKSUMS_SUBKEY}:"
    +  lines.concat(build_yaml_state_lines(checksums: checksums, version: version, applied_at: applied_at, changelog_replay: changelog_replay).map { |line| "  #{line}" })
    +  lines.join("\n")
    +end
    + + + + + +
    +

    + + .build_yaml_state(checksums:, version: nil, applied_at: nil, changelog_replay: nil) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +1780
    +1781
    +1782
    +1783
    +1784
    +1785
    +1786
    +1787
    +
    +
    # File 'lib/kettle/jem.rb', line 1780
    +
    +def build_yaml_state(checksums:, version: nil, applied_at: nil, changelog_replay: nil)
    +  build_yaml_state_lines(
    +    checksums: checksums,
    +    version: version,
    +    applied_at: applied_at,
    +    changelog_replay: changelog_replay
    +  ).join("\n")
    +end
    +
    +
    + +
    +

    + + .build_yaml_state_lines(checksums:, version: nil, applied_at: nil, changelog_replay: nil) ⇒ Object + + + + + +

    + + + @@ -403,20 +605,20 @@

     
     
    -1581
    -1582
    -1583
    -1584
    -1585
    -1586
    -1587
    -1588
    -1589
    -1590
    -1591
    +1707 +1708 +1709 +1710 +1711 +1712 +1713 +1714 +1715 +1716 +1717

    +
    +
    +
    +1789
    +1790
    +1791
    +1792
    +1793
    +1794
    +1795
    +1796
    +1797
    +1798
    +1799
    +1800
    +1801
    +1802
    +1803
    +1804
    +1805
    +
    +
    # File 'lib/kettle/jem.rb', line 1789
    +
    +def build_yaml_state_lines(checksums:, version: nil, applied_at: nil, changelog_replay: nil)
    +  lines = []
    +  lines << "#{VERSION_SUBKEY}: #{version.to_s.dump}" if version
    +  lines << "#{APPLIED_AT_SUBKEY}: #{applied_at.to_s.dump}" if applied_at
    +  if changelog_replay.is_a?(Hash) && !changelog_replay.empty?
    +    lines << "#{CHANGELOG_REPLAY_SUBKEY}:"
    +    last_entry_key = changelog_replay[LAST_ENTRY_KEY_SUBKEY] || changelog_replay[:last_entry_key]
    +     = changelog_replay[LAST_ENTRY_DATE_SUBKEY] || changelog_replay[:last_entry_date]
    +    lines << "  #{LAST_ENTRY_KEY_SUBKEY}: #{last_entry_key.to_s.dump}" if last_entry_key
    +    lines << "  #{LAST_ENTRY_DATE_SUBKEY}: #{.to_s.dump}" if 
    +  end
    +  lines << "#{CHECKSUMS_SUBKEY}:"
       checksums.sort.each do |path, sha|
    -    lines << "    #{path.dump}: #{sha.dump}"
    +    lines << "  #{path.dump}: #{sha.dump}"
       end
    -  lines.join("\n")
    +  lines
     end
    -
    # File 'lib/kettle/jem.rb', line 1581
    +      
    # File 'lib/kettle/jem.rb', line 1707
     
     def compute(template_root:)
       root = template_root.to_s.chomp("/")
    @@ -449,16 +651,16 @@ 

     
     
    -1630
    -1631
    -1632
    -1633
    -1634
    -1635
    -1636
    +1765 +1766 +1767 +1768 +1769 +1770 +1771

    -
    # File 'lib/kettle/jem.rb', line 1630
    +      
    # File 'lib/kettle/jem.rb', line 1765
     
     def detail_lines(diff)
       [
    @@ -487,19 +689,19 @@ 

     
     
    -1604
    -1605
    -1606
    -1607
    -1608
    -1609
    -1610
    -1611
    -1612
    -1613
    +1739 +1740 +1741 +1742 +1743 +1744 +1745 +1746 +1747 +1748

    -
    # File 'lib/kettle/jem.rb', line 1604
    +      
    # File 'lib/kettle/jem.rb', line 1739
     
     def diff(current:, stored:)
       current_keys = current.keys.to_set
    @@ -531,12 +733,12 @@ 

     
     
    -1615
    -1616
    -1617
    +1750 +1751 +1752

    -
    # File 'lib/kettle/jem.rb', line 1615
    +      
    # File 'lib/kettle/jem.rb', line 1750
     
     def diff_count(diff)
       diff.fetch(:added, []).size + diff.fetch(:changed, []).size + diff.fetch(:removed, []).size
    @@ -544,6 +746,48 @@ 

    +
    + +
    +

    + + .load_state(config_path:) ⇒ Object + + + + + +

    + + + + +
    +
    +
    +
    +1729
    +1730
    +1731
    +1732
    +1733
    +1734
    +1735
    +1736
    +1737
    +
    +
    # File 'lib/kettle/jem.rb', line 1729
    +
    +def load_state(config_path:)
    +  return {} unless File.exist?(config_path.to_s)
    +
    +  data = YAML.safe_load_file(config_path.to_s, permitted_classes: [], aliases: false)
    +  entry = data.is_a?(Hash) ? data[YAML_KEY] : nil
    +  entry.is_a?(Hash) ? entry : {}
    +rescue
    +  {}
    +end
    +
    @@ -561,25 +805,23 @@

     
     
    -1593
    -1594
    -1595
    -1596
    -1597
    -1598
    -1599
    -1600
    -1601
    -1602
    +1719 +1720 +1721 +1722 +1723 +1724 +1725 +1726 +1727

    -
    # File 'lib/kettle/jem.rb', line 1593
    +      
    # File 'lib/kettle/jem.rb', line 1719
     
     def load_stored(config_path:)
       return {} unless File.exist?(config_path.to_s)
     
    -  data = YAML.safe_load_file(config_path.to_s, permitted_classes: [], aliases: false)
    -  entry = data.is_a?(Hash) ? data[YAML_KEY] : nil
    +  entry = load_state(config_path: config_path)
       stored = entry.is_a?(Hash) ? entry[CHECKSUMS_SUBKEY] : nil
       stored.is_a?(Hash) ? stored : {}
     rescue
    @@ -591,9 +833,9 @@ 

    -

    +

    - .replace_top_level_yaml_block(content, key, replacement) ⇒ Object + .merge_yaml_state(content, state_block) ⇒ Object @@ -605,49 +847,23 @@

     
     
    -1659
    -1660
    -1661
    -1662
    -1663
    -1664
    -1665
    -1666
    -1667
    -1668
    -1669
    -1670
    -1671
    -1672
    -1673
    -1674
    -1675
    -1676
    -1677
    -1678
    +1821 +1822 +1823 +1824 +1825 +1826 +1827

    -
    # File 'lib/kettle/jem.rb', line 1659
    +      
    # File 'lib/kettle/jem.rb', line 1821
     
    -def replace_top_level_yaml_block(content, key, replacement)
    -  lines = content.to_s.lines
    -  document = Psych.parse_stream(content.to_s).children.first
    -  root = document&.root
    -  return content unless root.is_a?(Psych::Nodes::Mapping)
    -
    -  pairs = root.children.each_slice(2).to_a
    -  pairs.each_with_index do |(key_node, value_node), index|
    -    next unless key_node.is_a?(Psych::Nodes::Scalar) && key_node.value.to_s == key.to_s
    -
    -    next_key = pairs[index + 1]&.first
    -    end_line = next_key&.start_line || value_node.end_line
    -    end_line += 1 if end_line <= key_node.start_line
    -    return [*lines[0...key_node.start_line], replacement, *lines[end_line..].to_a].join
    -  end
    +def merge_yaml_state(content, state_block)
    +  range = yaml_state_node_range(content)
    +  return "#{content.to_s.rstrip}\n\n#{state_block}\n" unless range
     
    -  content
    -rescue Psych::Exception
    -  content
    +  lines = content.to_s.lines
    +  [*lines[0...range.begin], "#{state_block}\n", *lines[range.end..].to_a].join
     end
    @@ -669,19 +885,19 @@

     
     
    -1619
    -1620
    -1621
    -1622
    -1623
    -1624
    -1625
    -1626
    -1627
    -1628
    +1754 +1755 +1756 +1757 +1758 +1759 +1760 +1761 +1762 +1763

    -
    # File 'lib/kettle/jem.rb', line 1619
    +      
    # File 'lib/kettle/jem.rb', line 1754
     
     def summary(diff)
       count = diff_count(diff)
    @@ -701,7 +917,7 @@ 

    - .write_to_config(config_path:, checksums:, version: nil) ⇒ Object + .write_to_config(config_path:, checksums:, version: nil, applied_at: nil, changelog_replay: nil) ⇒ Object @@ -713,31 +929,128 @@

     
     
    -1649
    -1650
    -1651
    -1652
    -1653
    -1654
    -1655
    -1656
    -1657
    +1807 +1808 +1809 +1810 +1811 +1812 +1813 +1814 +1815 +1816 +1817 +1818 +1819

    -
    # File 'lib/kettle/jem.rb', line 1649
    +      
    # File 'lib/kettle/jem.rb', line 1807
     
    -def write_to_config(config_path:, checksums:, version: nil)
    +def write_to_config(config_path:, checksums:, version: nil, applied_at: nil, changelog_replay: nil)
       return unless File.exist?(config_path.to_s)
     
       content = File.read(config_path.to_s)
    -  new_block = build_yaml_block(checksums: checksums, version: version)
    -  updated = replace_top_level_yaml_block(content, YAML_KEY, "#{new_block}\n")
    -  updated = "#{content.rstrip}\n\n#{new_block}\n" if updated == content
    +  state = build_yaml_state(
    +    checksums: checksums,
    +    version: version,
    +    applied_at: applied_at,
    +    changelog_replay: changelog_replay
    +  )
    +  updated = merge_yaml_state(content, "#{YAML_KEY}:\n#{state.lines.map { |line| "  #{line}" }.join}")
       File.write(config_path.to_s, updated)
     end
    + + +
    +

    + + .yaml_state_node_range(content) ⇒ Object + + + + + +

    +
    + + + +
    +
    +
    + +

    Raises:

    +
      + +
    • + + + (Error) + + + +
    • + +
    + +
    + + + + +
    +
    +
    +
    +1829
    +1830
    +1831
    +1832
    +1833
    +1834
    +1835
    +1836
    +1837
    +1838
    +1839
    +1840
    +1841
    +1842
    +1843
    +1844
    +1845
    +1846
    +1847
    +1848
    +1849
    +
    +
    # File 'lib/kettle/jem.rb', line 1829
    +
    +def yaml_state_node_range(content)
    +  require "yaml/merge"
    +
    +  analysis = Yaml::Merge::FileAnalysis.new(content.to_s)
    +  raise Error, "could not parse kettle-jem config as YAML" unless analysis.valid?
    +
    +  body = analysis.documents.first&.body_node
    +  return unless body&.mapping?
    +
    +  pairs = body.mapping_pairs
    +  pairs.each_with_index do |pair, index|
    +    next unless pair.key_name == YAML_KEY
    +
    +    start_index = pair.start_line.to_i - 1
    +    next_pair = pairs[index + 1]
    +    end_index = next_pair ? next_pair.start_line.to_i - 1 : [pair.end_line.to_i - 1, content.to_s.lines.length].min
    +    return start_index...end_index
    +  end
    +
    +  nil
    +end
    +
    @@ -745,7 +1058,7 @@

    diff --git a/gems/kettle-jem/docs/Kettle/Jem/TemplatingReport.html b/gems/kettle-jem/docs/Kettle/Jem/TemplatingReport.html index 6a4952f06..5a0db6606 100644 --- a/gems/kettle-jem/docs/Kettle/Jem/TemplatingReport.html +++ b/gems/kettle-jem/docs/Kettle/Jem/TemplatingReport.html @@ -531,19 +531,19 @@

     
     
    -1707
    -1708
    -1709
    -1710
    -1711
    -1712
    -1713
    -1714
    -1715
    -1716
    +1878 +1879 +1880 +1881 +1882 +1883 +1884 +1885 +1886 +1887

    -
    # File 'lib/kettle/jem.rb', line 1707
    +      
    # File 'lib/kettle/jem.rb', line 1878
     
     def build_entry(name, spec, workspace_root:)
       path = spec&.full_gem_path.to_s
    @@ -575,14 +575,14 @@ 

     
     
    -1740
    -1741
    -1742
    -1743
    -1744
    +1911 +1912 +1913 +1914 +1915

    -
    # File 'lib/kettle/jem.rb', line 1740
    +      
    # File 'lib/kettle/jem.rb', line 1911
     
     def canonical_path(path)
       File.realpath(path)
    @@ -609,29 +609,29 @@ 

     
     
    -1746
    -1747
    -1748
    -1749
    -1750
    -1751
    -1752
    -1753
    -1754
    -1755
    -1756
    -1757
    -1758
    -1759
    -1760
    -1761
    -1762
    -1763
    -1764
    -1765
    +1917 +1918 +1919 +1920 +1921 +1922 +1923 +1924 +1925 +1926 +1927 +1928 +1929 +1930 +1931 +1932 +1933 +1934 +1935 +1936

    -
    # File 'lib/kettle/jem.rb', line 1746
    +      
    # File 'lib/kettle/jem.rb', line 1917
     
     def console_lines(snapshot: nil, project_root: nil)
       snapshot ||= self.snapshot
    @@ -673,22 +673,22 @@ 

     
     
    -1718
    -1719
    -1720
    -1721
    -1722
    -1723
    -1724
    -1725
    -1726
    -1727
    -1728
    -1729
    -1730
    +1889 +1890 +1891 +1892 +1893 +1894 +1895 +1896 +1897 +1898 +1899 +1900 +1901

    -
    # File 'lib/kettle/jem.rb', line 1718
    +      
    # File 'lib/kettle/jem.rb', line 1889
     
     def default_workspace_root
       env_root = ENV["KETTLE_DEV_DEV"].to_s.strip
    @@ -746,16 +746,16 @@ 

     
     
    -1732
    -1733
    -1734
    -1735
    -1736
    -1737
    -1738
    +1903 +1904 +1905 +1906 +1907 +1908 +1909

    -
    # File 'lib/kettle/jem.rb', line 1732
    +      
    # File 'lib/kettle/jem.rb', line 1903
     
     def local_path?(path, workspace_root: default_workspace_root)
       return false if workspace_root.to_s.strip.empty?
    @@ -784,18 +784,18 @@ 

     
     
    -1876
    -1877
    -1878
    -1879
    -1880
    -1881
    -1882
    -1883
    -1884
    +2047 +2048 +2049 +2050 +2051 +2052 +2053 +2054 +2055

    -
    # File 'lib/kettle/jem.rb', line 1876
    +      
    # File 'lib/kettle/jem.rb', line 2047
     
     def local_warning_section(warning)
       <<~MARKDOWN.chomp
    @@ -826,30 +826,30 @@ 

     
     
    -1886
    -1887
    -1888
    -1889
    -1890
    -1891
    -1892
    -1893
    -1894
    -1895
    -1896
    -1897
    -1898
    -1899
    -1900
    -1901
    -1902
    -1903
    -1904
    -1905
    -1906
    +2057 +2058 +2059 +2060 +2061 +2062 +2063 +2064 +2065 +2066 +2067 +2068 +2069 +2070 +2071 +2072 +2073 +2074 +2075 +2076 +2077

    -
    # File 'lib/kettle/jem.rb', line 1886
    +      
    # File 'lib/kettle/jem.rb', line 2057
     
     def local_workspace_warning(snapshot:, project_root:)
       return if project_root.to_s.strip.empty?
    @@ -892,18 +892,18 @@ 

     
     
    -1866
    -1867
    -1868
    -1869
    -1870
    -1871
    -1872
    -1873
    -1874
    +2037 +2038 +2039 +2040 +2041 +2042 +2043 +2044 +2045

    -
    # File 'lib/kettle/jem.rb', line 1866
    +      
    # File 'lib/kettle/jem.rb', line 2037
     
     def local_workspace_warning_lines(snapshot:, project_root:)
       warning = local_workspace_warning(snapshot: snapshot, project_root: project_root)
    @@ -934,30 +934,30 @@ 

     
     
    -1767
    -1768
    -1769
    -1770
    -1771
    -1772
    -1773
    -1774
    -1775
    -1776
    -1777
    -1778
    -1779
    -1780
    -1781
    -1782
    -1783
    -1784
    -1785
    -1786
    -1787
    +1938 +1939 +1940 +1941 +1942 +1943 +1944 +1945 +1946 +1947 +1948 +1949 +1950 +1951 +1952 +1953 +1954 +1955 +1956 +1957 +1958

    -
    # File 'lib/kettle/jem.rb', line 1767
    +      
    # File 'lib/kettle/jem.rb', line 1938
     
     def markdown_section(snapshot: nil)
       snapshot ||= self.snapshot
    @@ -1000,49 +1000,49 @@ 

     
     
    -1789
    -1790
    -1791
    -1792
    -1793
    -1794
    -1795
    -1796
    -1797
    -1798
    -1799
    -1800
    -1801
    -1802
    -1803
    -1804
    -1805
    -1806
    -1807
    -1808
    -1809
    -1810
    -1811
    -1812
    -1813
    -1814
    -1815
    -1816
    -1817
    -1818
    -1819
    -1820
    -1821
    -1822
    -1823
    -1824
    -1825
    -1826
    -1827
    -1828
    +1960 +1961 +1962 +1963 +1964 +1965 +1966 +1967 +1968 +1969 +1970 +1971 +1972 +1973 +1974 +1975 +1976 +1977 +1978 +1979 +1980 +1981 +1982 +1983 +1984 +1985 +1986 +1987 +1988 +1989 +1990 +1991 +1992 +1993 +1994 +1995 +1996 +1997 +1998 +1999

    -
    # File 'lib/kettle/jem.rb', line 1789
    +      
    # File 'lib/kettle/jem.rb', line 1960
     
     def render_markdown(project_root:, output_dir: nil, snapshot: nil, run_started_at: Time.now, finished_at: nil,
       status: nil, warnings: [], error: nil, template_diff: nil, template_commit_sha: nil)
    @@ -1104,14 +1104,14 @@ 

     
     
    -1830
    -1831
    -1832
    -1833
    -1834
    +2001 +2002 +2003 +2004 +2005

    -
    # File 'lib/kettle/jem.rb', line 1830
    +      
    # File 'lib/kettle/jem.rb', line 2001
     
     def report_path(project_root:, output_dir: nil, run_started_at: Time.now, pid: Process.pid)
       target_root = output_dir || project_root
    @@ -1138,15 +1138,15 @@ 

     
     
    -1908
    -1909
    -1910
    -1911
    -1912
    -1913
    +2079 +2080 +2081 +2082 +2083 +2084

    -
    # File 'lib/kettle/jem.rb', line 1908
    +      
    # File 'lib/kettle/jem.rb', line 2079
     
     def sibling_workspace_root(project_root)
       candidate = canonical_path(File.expand_path("..", project_root))
    @@ -1174,16 +1174,16 @@ 

     
     
    -1699
    -1700
    -1701
    -1702
    -1703
    -1704
    -1705
    +1870 +1871 +1872 +1873 +1874 +1875 +1876

    -
    # File 'lib/kettle/jem.rb', line 1699
    +      
    # File 'lib/kettle/jem.rb', line 1870
     
     def snapshot(loaded_specs: Gem.loaded_specs, workspace_root: default_workspace_root)
       {
    @@ -1212,15 +1212,15 @@ 

     
     
    -1859
    -1860
    -1861
    -1862
    -1863
    -1864
    +2030 +2031 +2032 +2033 +2034 +2035

    -
    # File 'lib/kettle/jem.rb', line 1859
    +      
    # File 'lib/kettle/jem.rb', line 2030
     
     def source_label(entry)
       return "not loaded" unless entry[:loaded]
    @@ -1248,28 +1248,28 @@ 

     
     
    -1915
    -1916
    -1917
    -1918
    -1919
    -1920
    -1921
    -1922
    -1923
    -1924
    -1925
    -1926
    -1927
    -1928
    -1929
    -1930
    -1931
    -1932
    -1933
    +2086 +2087 +2088 +2089 +2090 +2091 +2092 +2093 +2094 +2095 +2096 +2097 +2098 +2099 +2100 +2101 +2102 +2103 +2104

    -
    # File 'lib/kettle/jem.rb', line 1915
    +      
    # File 'lib/kettle/jem.rb', line 2086
     
     def template_diff_section(diff)
       lines = ["## Template File Changes", ""]
    @@ -1310,31 +1310,31 @@ 

     
     
    -1836
    -1837
    -1838
    -1839
    -1840
    -1841
    -1842
    -1843
    -1844
    -1845
    -1846
    -1847
    -1848
    -1849
    -1850
    -1851
    -1852
    -1853
    -1854
    -1855
    -1856
    -1857
    +2007 +2008 +2009 +2010 +2011 +2012 +2013 +2014 +2015 +2016 +2017 +2018 +2019 +2020 +2021 +2022 +2023 +2024 +2025 +2026 +2027 +2028

    -
    # File 'lib/kettle/jem.rb', line 1836
    +      
    # File 'lib/kettle/jem.rb', line 2007
     
     def write(project_root:, output_dir: nil, snapshot: nil, report_path: nil, run_started_at: Time.now,
       finished_at: nil, status: nil, warnings: [], error: nil, template_diff: nil, template_commit_sha: nil)
    @@ -1368,7 +1368,7 @@ 

    diff --git a/gems/kettle-jem/docs/Kettle/Jem/Version.html b/gems/kettle-jem/docs/Kettle/Jem/Version.html index 0a97635a4..3f0f3e641 100644 --- a/gems/kettle-jem/docs/Kettle/Jem/Version.html +++ b/gems/kettle-jem/docs/Kettle/Jem/Version.html @@ -114,7 +114,7 @@

    diff --git a/gems/kettle-jem/docs/Kettle/Jem/WriteIntent.html b/gems/kettle-jem/docs/Kettle/Jem/WriteIntent.html new file mode 100644 index 000000000..6ffc46cfe --- /dev/null +++ b/gems/kettle-jem/docs/Kettle/Jem/WriteIntent.html @@ -0,0 +1,803 @@ + + + + + + + Class: Kettle::Jem::WriteIntent + + — Documentation by YARD 0.9.45 + + + + + + + + + + + + + + + + + + + + + +
    + + +

    Class: Kettle::Jem::WriteIntent + + + +

    +
    + +
    +
    Inherits:
    +
    + Object + +
      +
    • Object
    • + + + +
    + show all + +
    +
    + + + + + + + + + + + +
    +
    Defined in:
    +
    lib/kettle/jem.rb +
    +
    + +
    + + + + + +

    Instance Attribute Summary collapse

    +
      + +
    • + + + #absolute_path ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute absolute_path.

      +
      + +
    • + + +
    • + + + #action ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute action.

      +
      + +
    • + + +
    • + + + #content ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute content.

      +
      + +
    • + + +
    • + + + #metadata ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute metadata.

      +
      + +
    • + + +
    • + + + #recipe_name ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute recipe_name.

      +
      + +
    • + + +
    • + + + #relative_path ⇒ Object + + + + + + + + + readonly + + + + + + + + + +

      Returns the value of attribute relative_path.

      +
      + +
    • + + +
    + + + + + +

    + Instance Method Summary + collapse +

    + + + + + +
    +

    Constructor Details

    + +
    +

    + + #initialize(relative_path:, absolute_path:, action:, content: nil, recipe_name: nil, metadata: {}) ⇒ WriteIntent + + + + + +

    +
    +

    Returns a new instance of WriteIntent.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +1658
    +1659
    +1660
    +1661
    +1662
    +1663
    +1664
    +1665
    +
    +
    # File 'lib/kettle/jem.rb', line 1658
    +
    +def initialize(relative_path:, absolute_path:, action:, content: nil, recipe_name: nil, metadata: {})
    +  @relative_path = relative_path.to_s
    +  @absolute_path = absolute_path.to_s
    +  @action = action.to_sym
    +  @content = content
    +  @recipe_name = recipe_name
    +  @metadata =  || {}
    +end
    +
    +
    + +
    + +
    +

    Instance Attribute Details

    + + + +
    +

    + + #absolute_pathObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute absolute_path.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +1656
    +1657
    +1658
    +
    +
    # File 'lib/kettle/jem.rb', line 1656
    +
    +def absolute_path
    +  @absolute_path
    +end
    +
    +
    + + + +
    +

    + + #actionObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute action.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +1656
    +1657
    +1658
    +
    +
    # File 'lib/kettle/jem.rb', line 1656
    +
    +def action
    +  @action
    +end
    +
    +
    + + + +
    +

    + + #contentObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute content.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +1656
    +1657
    +1658
    +
    +
    # File 'lib/kettle/jem.rb', line 1656
    +
    +def content
    +  @content
    +end
    +
    +
    + + + +
    +

    + + #metadataObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute metadata.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +1656
    +1657
    +1658
    +
    +
    # File 'lib/kettle/jem.rb', line 1656
    +
    +def 
    +  @metadata
    +end
    +
    +
    + + + +
    +

    + + #recipe_nameObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute recipe_name.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +1656
    +1657
    +1658
    +
    +
    # File 'lib/kettle/jem.rb', line 1656
    +
    +def recipe_name
    +  @recipe_name
    +end
    +
    +
    + + + +
    +

    + + #relative_pathObject (readonly) + + + + + +

    +
    +

    Returns the value of attribute relative_path.

    + + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +1656
    +1657
    +1658
    +
    +
    # File 'lib/kettle/jem.rb', line 1656
    +
    +def relative_path
    +  @relative_path
    +end
    +
    +
    + +
    + + +
    +

    Instance Method Details

    + + +
    +

    + + #delete?Boolean + + + + + +

    +
    + + + +
    +
    +
    + +

    Returns:

    +
      + +
    • + + + (Boolean) + + + +
    • + +
    + +
    + + + + +
    +
    +
    +
    +1667
    +1668
    +1669
    +
    +
    # File 'lib/kettle/jem.rb', line 1667
    +
    +def delete?
    +  action == :delete
    +end
    +
    +
    + +
    +

    + + #write?Boolean + + + + + +

    +
    + + + +
    +
    +
    + +

    Returns:

    +
      + +
    • + + + (Boolean) + + + +
    • + +
    + +
    + + + + +
    +
    +
    +
    +1671
    +1672
    +1673
    +
    +
    # File 'lib/kettle/jem.rb', line 1671
    +
    +def write?
    +  action == :write
    +end
    +
    +
    + +
    + +
    + + + +
    + + diff --git a/gems/kettle-jem/docs/_index.html b/gems/kettle-jem/docs/_index.html index 0f22ab506..39b0429c4 100644 --- a/gems/kettle-jem/docs/_index.html +++ b/gems/kettle-jem/docs/_index.html @@ -162,8 +162,16 @@

    Namespace Listing A-Z

  • + + + + +
      +
    • F
    • + + + +
      • J
        • @@ -233,9 +244,6 @@

          Namespace Listing A-Z

        - - -
        • K
          • @@ -422,6 +430,24 @@

            Namespace Listing A-Z

        + + + + + + @@ -431,7 +457,7 @@

        Namespace Listing A-Z

        diff --git a/gems/kettle-jem/docs/class_list.html b/gems/kettle-jem/docs/class_list.html index 49a73561d..4ebba4091 100644 --- a/gems/kettle-jem/docs/class_list.html +++ b/gems/kettle-jem/docs/class_list.html @@ -46,7 +46,7 @@

        Class List

        diff --git a/gems/kettle-jem/docs/file.AGENTS.html b/gems/kettle-jem/docs/file.AGENTS.html index 0ae40a514..382b3752c 100644 --- a/gems/kettle-jem/docs/file.AGENTS.html +++ b/gems/kettle-jem/docs/file.AGENTS.html @@ -410,7 +410,7 @@

        🚫 Common Pitfalls

        diff --git a/gems/kettle-jem/docs/file.AGPL-3.0-only.html b/gems/kettle-jem/docs/file.AGPL-3.0-only.html index 8f20e7144..adca8cd1d 100644 --- a/gems/kettle-jem/docs/file.AGPL-3.0-only.html +++ b/gems/kettle-jem/docs/file.AGPL-3.0-only.html @@ -342,7 +342,7 @@ diff --git a/gems/kettle-jem/docs/file.CHANGELOG.html b/gems/kettle-jem/docs/file.CHANGELOG.html index 554926d49..d6bf0f39e 100644 --- a/gems/kettle-jem/docs/file.CHANGELOG.html +++ b/gems/kettle-jem/docs/file.CHANGELOG.html @@ -72,28 +72,44 @@

        Unreleased

        -

        Fixed

        - -
          -
        • -kettle-jem’s default development bundle now pins
          -tree_sitter_language_pack to the StructuredMerge fork branch that exposes
          -the Ruby parser API, while still allowing templating runs to override it with
          -VENDORED_GEMS.
        • -
        • Gemspec templating now deletes empty generated development-dependency comment
          -sections through Prism-backed CRISPR structural edits, preventing blank-line
          -churn before the closing Gem::Specification end.
        • -
        • Fixed the kettle-jem package manifest so runtime template assets are
          -included even when the gemspec is loaded from the monorepo root.
        • -
        • Generated local templating Gemfiles can now route
          -tree_sitter_language_pack through nomono’s VENDORED_GEMS /
          -VENDOR_GEM_DIR support instead of using a one-off inferred local path.
        • -
        -

        Added

        • +kettle-jem now uses the shared kettle-ndjson event toolkit for NDJSON
          +progress stream filtering, emission, recording, and phase timing.
        • +
        • Changelog replay now records a cursor in the managed kettle-jem config
          +state so first-time templated projects receive only an initial templating
          +changelog entry, while previously templated projects replay only missed
          +template-impacting entries.
        • +
        • Curated Bundler binstub generation now includes kettle-gha-pins when it is
          +present in the destination bundle.
        • +
        • Templating plan reports now include per-recipe duration metadata, template
          +planning deduplicates destination and template-source file reads, and runtime
          +loading is reduced to explicit main-Ractor extension points. A disabled
          +classified planning strategy now identifies worker-safe recipes, can opt into
          +experimental Ractor workers with KETTLE_JEM_RACTOR_WORKERS, records
          +execution counters, and preserves sequential report parity in preparation for
          +Ractor-based recipe planning.
        • +
        • Added a benchmarks/ harness that templates a reset Bundler gem skeleton and
          +compares classified planning and phase-gated file work with and without
          +opt-in Ractor workers. The harness now defaults KJ_MIN_RUBY to 1.8.7 so
          +benchmark runs exercise legacy workflow and gemfile generation through the
          +supported one-shot template --accept-config flow, prints progress while
          +long benchmark matrices run, records planning and file-worker execution
          +counters for both Ractors and threads, and records the latest benchmark
          +outcome in a committed results README.
        • +
        • Apply now routes recipe report mutations through explicit write intents and
          +phase-gated per-file work units, preparing the file-processing path for
          +opt-in KETTLE_JEM_RACTOR_FILE_WORKERS execution without changing phase gates
          +or final filesystem outcomes.
        • +
        • The former monolithic thin-slice spec has been split into behavior-named
          +integration, system, and end-to-end specs so the project test harness can
          +parallelize templating coverage more effectively.
        • +
        • Generated README Support & Community rows now include a RubyForum help badge.
        • +
        • Generated READMEs can now render template-managed corporate sponsor logos
          +from readme.corporate_sponsors config or family-provided sponsorship data.
        • +
        • kettle-jem now supports --events for newline-delimited JSON progress
          events, including named event type filters via comma-separated
          --events=TYPE,... values, phase events, per-recipe template progress,
          @@ -103,9 +119,9 @@

          Added

          per-workflow keys so kettle-test / turbo_tests2 can reuse timing data
          across MRI, JRuby, TruffleRuby, coverage, heads, dep-heads, and framework
          matrix runs.
        • -
        • Generated dep-heads workflows now document why TruffleRuby runs directly from
          -gemfiles/dep_heads.gemfile, making that generated Appraisal file required
          -checked-in output for the workflow.
        • +
        • Generated dep-heads workflows now document why every engine job runs directly
          +from gemfiles/dep_heads.gemfile, making that generated Appraisal file
          +required checked-in output for the workflow.
        • JRuby 9.2 workflow templates now use the legacy-engine bundle install path
          instead of ruby/setup-ruby bundler caching so old Bundler does not fail
          setup against gem servers without the full legacy index.
        • @@ -113,6 +129,9 @@

          Added

          collection entries with template package entries so project-specific
          packaged files are not lost when the template rewrites the generated gemspec
          structure. +
        • Main Gemfile templating now removes repeated direct sibling execution blocks
          +left behind by older nomono bootstrap output when applying the simplified
          +require "nomono/bundler" loader.
        • Gemspec templating now restores additional legacy Prism policy behavior for
          destination-only metadata fields, Bundler git ls-files package declarations,
          and empty development-dependency section cleanup after runtime dependency
          @@ -120,8 +139,12 @@

          Added

        • Added the repo-local bin/kettle-jem-workflow-pins maintenance script to
          update the GitHub Actions SHA pin index used by generated workflow templates
          via kettle-gha-sha-pins.
        • -
        • Generated local Gemfile templates now document why nomono is explicitly
          -activated before requiring nomono/bundler.
        • +
        • Generated local Gemfile templates now use a simple require "nomono/bundler"
          +loader, with a provider-relative loader for nomono itself, instead of
          +emitting runtime lockfile parsing or explicit gem activation ceremony.
        • +
        • Generated root Gemfiles now declare nomono with a plain dependency line
          +requiring nomono 1.1.0 or newer, and retemplating removes the older
          +nomono_requirements helper block.
        • Added the repo-local bin/kettle-jem-deps-floor maintenance script to scan
          dependency-bearing kettle-jem templates and update their dependency floors.
        • @@ -154,6 +177,65 @@

          Added

          Changed

            +
          • The kettle-jem executable now prints a standard startup header on normal
            +runs while preserving version-only output for version, -v, and
            +--version.
          • +
          • +kettle-jem-deps-floor --write now commits its managed dependency floor
            +updates by default, with --no-commit available for callers that need the
            +previous uncommitted write behavior.
          • +
          • +kettle-jem-deps-floor now labels text reports with dry-run/write mode and
            +prints the exact --write hint when stale floors are found in dry-run mode.
          • +
          • +kettle-jem-deps-floor --write now stages dependency floor updates correctly
            +when kettle-jem is nested below a monorepo Git worktree root.
          • +
          • +kettle-jem-workflow-pins now labels text reports with dry-run/write mode
            +and prints the exact --write hint when stale workflow pins are found in
            +dry-run mode.
          • +
          • +kettle-jem-workflow-pins --write now commits managed workflow pin updates
            +by default, with --no-commit available for uncommitted writes.
          • +
          • +kettle-jem-workflow-pins now detects and updates stale version comments
            +when a pinned GitHub Action SHA is already current.
          • +
          • Generated Kettle local Gemfiles now resolve KETTLE_DEV_DEV=true to the
            +kettle-dev workspace family root instead of sibling directories directly
            +under ~/src/my.
          • +
          • Runtime dependency metadata now requires kettle-gha-pins 0.3.1 or newer.
          • +
          • +bin/kettle-jem-workflow-pins now calls the shared kettle-gha-pins API
            +directly for cache, GitHub ref resolution, and upgrade planning instead of
            +shelling out to kettle-gha-sha-pins.
          • +
          • Templating now reuses static, shareable regexes and small lookup lists in the
            +recipe dispatch and template-policy paths instead of reallocating them during
            +each recipe execution.
          • +
          • Opt-in recipe-planning Ractor mode now batches worker-safe recipes across a
            +bounded chunked worker pool instead of spawning one Ractor per recipe, and it
            +keeps parser/merge paths with known unshareable dependency state on the main
            +Ractor.
          • +
          • Templating can now opt into thread-backed recipe planning and file work with
            +KETTLE_JEM_THREAD_WORKERS and KETTLE_JEM_THREAD_FILE_WORKERS, providing a
            +benchmarkable alternative to main-thread and Ractor execution.
          • +
          • Templating now supports benchmark-oriented skip controls for external
            +post-template work: --skip-drift-check, --skip-rubocop-gradual, and
            +--skip-binstubs, with matching KETTLE_JEM_SKIP_* environment variables.
          • +
          • Templating reports now persist phase duration metadata, install command steps
            +record elapsed duration, and benchmark summaries show recipe-phase time apart
            +from external command time.
          • +
          • The benchmark harness now supports KETTLE_JEM_BENCHMARK_MODE=raw-template
            +to compare scoped raw TemplateTask runs separately from the default
            +install-orchestrated one-shot template flow.
          • +
          • The benchmark harness now defaults worker counts to 1,min(4,n/2),min(8,n/2),n
            +instead of only min(2,n), giving higher-core machines a useful default
            +scaling matrix while keeping low-core hosts bounded.
          • +
          • Benchmark summaries now show each variant’s median percentage delta against
            +baseline-main immediately after the variant name.
          • +
          • +

            README recipe reports now include sub-step timing metadata, and benchmark
            +results summarize the baseline README timing breakdown.

            +
          • Generated gemspec templates now require kettle-dev >= 2.3.7.
          • kettle-jem now requires kettle-rb >= 0.1.4.
          • Refreshed generated GitHub Actions workflow pins for ruby/setup-ruby and
            @@ -239,17 +321,81 @@

            Changed

          • kettle-jem-template-20260716-001 - Shim gemspec manifests now include
            LICENSE.md instead of nonexistent LICENSE.txt.
          • -
          • kettle-jem-template-20260716-002 - Generated gemspec manifests now ship fewer
            -repository-only files by default to reduce downstream distro packaging churn.
          • +
          • +

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

            +
          • +
          • kettle-jem-template-20260720-001 - Generated READMEs can now render
            +template-managed corporate sponsor logos from project or family config.
          • +
          • kettle-jem-template-20260720-002 - Generated development Gemfiles now use the
            +released tree_sitter_language_pack gem 1.13.3 or newer by default.
          • +
          • kettle-jem-template-20260720-003 - Generated StructuredMerge Git diff driver
            +config now uses the installed smorg-rb Ruby driver name.
          • +
          • kettle-jem-template-20260720-004 - Generated multi-engine workflow files now
            +omit JRuby and TruffleRuby jobs when project config declares MRI-only engines.
          • +
          • kettle-jem-template-20260720-005 - Generated README Support & Community rows
            +now include a RubyForum help badge.

          Deprecated

          Removed

          -

          Fixed

          +

          Fixed

            +
          • The kettle-jem executable now uses normal require loading and suppresses
            +its startup header for --json / --events machine-readable output.
          • +
          • Generated MRI 2.4 through 2.7 workflows now bypass ruby/setup-ruby
            +Bundler caching and run an explicit bundle install, avoiding bundle lock
            +failures against gem.coop’s missing legacy specs index.
          • +
          • Main Gemfile templating now removes duplicate eval_gemfile declarations
            +for the same modular dependency file, avoiding duplicate Bundler dependency
            +warnings after repeated templating.
          • +
          • Generated templating workflows now update the root nomono bootstrap
            +dependency before enabling K_JEM_TEMPLATING, so cold CI runners can install
            +nomono before local templating gemfiles require its Bundler DSL.
          • +
          • Local Gemfile templating now removes obsolete nomono activation ceremony from
            +existing destination files while retaining the simple
            +require "nomono/bundler" loader.
          • +
          • Bootstrap commit execution now honors KETTLE_JEM_GIT_COMMIT_LOCK by locking
            +around the dirty recheck, git add, and git commit sequence for monorepo
            +family templating.
          • +
          • Generated license summaries now link split license detail files to the
            +repository blob/main copy instead of packaging-relative files that are
            +intentionally excluded from gem manifests.
          • +
          • Generated root Gemfiles no longer duplicate the
            +tree_sitter_language_pack declaration that belongs to the templating
            +modular Gemfile.
          • +
          • Generated README source badges now use GitHub’s canonical capitalization.
          • +
          • Generated nomono local Gemfiles now use the normal require "nomono/bundler"
            +loader instead of a nomono-specific require_relative path.
          • +
          • Install orchestration now bundles each distinct Bundler environment it will
            +execute under, and probes RuboCop Gradual tasks with the same environment used
            +for the eventual command.
          • +
          • Bundler child commands now strip inherited command-line Git configuration, so
            +parent safe.bareRepository=explicit settings do not break Bundler Git source
            +caches during templating.
          • +
          • Generated semantic diff Git driver configuration now consistently uses the
            +installed smorg-rb executable and Git diff driver name for Ruby diffs.
          • +
          • Generated multi-engine workflow files, including heads.yml and
            +dep-heads.yml, now omit JRuby and TruffleRuby jobs when the project config
            +declares an MRI-only engines list.
          • +
          • +kettle-jem’s generated development Gemfiles now depend on released
            +tree_sitter_language_pack 1.13.2 or newer by default, while still
            +allowing templating runs to switch to a local source with
            +VENDORED_GEMS=tree_sitter_language_pack / VENDOR_GEM_DIR.
          • +
          • Gemspec templating now deletes empty generated development-dependency comment
            +sections through Prism-backed CRISPR structural edits, preventing blank-line
            +churn before the closing Gem::Specification end.
          • +
          • Fixed the kettle-jem package manifest so runtime template assets are
            +included even when the gemspec is loaded from the monorepo root.
          • +
          • +

            Generated local templating Gemfiles can now route
            +tree_sitter_language_pack through nomono’s VENDORED_GEMS /
            +VENDOR_GEM_DIR support instead of using a one-off inferred local path.

            +
          • Templating setup now respects explicit STRUCTUREDMERGE_DEV=false and
            KETTLE_DEV_DEV=false values when reading the kettle-family local install
            marker, preventing prepare-mode bundle updates from re-enabling stale local
            @@ -275,9 +421,10 @@

            Fixed

            sig/<entrypoint>/**/*.rbs content into the package-level signature and
            removes the nested files, including when the package-level signature is
            managed by a template entry.
          • -
          • Generated dep-heads workflows now run current TruffleRuby directly from the
            +
          • Generated dep-heads workflows now run every engine job directly from the
            generated gemfiles/dep_heads.gemfile, avoiding Appraisal.root.gemfile
            -bootstrap failures with TruffleRuby’s bundled RubyGems/Bundler and gem.coop.
          • +bootstrap failures with RubyGems/Bundler and gem.coop before the dep-heads
            +appraisal is selected.
          • Packaged Rakefile templating now merges destination Rakefiles by default
            instead of replacing them wholesale, preserving project-specific rake tasks
            such as release or adapter test helpers.
          • @@ -983,7 +1130,7 @@

            Added

            diff --git a/gems/kettle-jem/docs/file.CODE_OF_CONDUCT.html b/gems/kettle-jem/docs/file.CODE_OF_CONDUCT.html index b62cd772d..53ff1800c 100644 --- a/gems/kettle-jem/docs/file.CODE_OF_CONDUCT.html +++ b/gems/kettle-jem/docs/file.CODE_OF_CONDUCT.html @@ -193,7 +193,7 @@

            Attribution

            diff --git a/gems/kettle-jem/docs/file.CONTRIBUTING.html b/gems/kettle-jem/docs/file.CONTRIBUTING.html index 0b586f32e..d16d3df58 100644 --- a/gems/kettle-jem/docs/file.CONTRIBUTING.html +++ b/gems/kettle-jem/docs/file.CONTRIBUTING.html @@ -376,7 +376,7 @@

            Manual process

            diff --git a/gems/kettle-jem/docs/file.FUNDING.html b/gems/kettle-jem/docs/file.FUNDING.html index 3ba9c344b..e18c498f5 100644 --- a/gems/kettle-jem/docs/file.FUNDING.html +++ b/gems/kettle-jem/docs/file.FUNDING.html @@ -101,7 +101,7 @@

            Another Way to Support Open diff --git a/gems/kettle-jem/docs/file.IRP.html b/gems/kettle-jem/docs/file.IRP.html index 752242a14..74f411e49 100644 --- a/gems/kettle-jem/docs/file.IRP.html +++ b/gems/kettle-jem/docs/file.IRP.html @@ -98,7 +98,7 @@

            Follow-up

            diff --git a/gems/kettle-jem/docs/file.LICENSE.html b/gems/kettle-jem/docs/file.LICENSE.html index e76e70211..f1352d1e2 100644 --- a/gems/kettle-jem/docs/file.LICENSE.html +++ b/gems/kettle-jem/docs/file.LICENSE.html @@ -65,8 +65,8 @@ Choose the option that best fits your use case:

            If none of the above licenses fit your use case, please contact us to discuss a custom commercial license.

            @@ -79,7 +79,7 @@ diff --git a/gems/kettle-jem/docs/file.PolyForm-Small-Business-1.0.0.html b/gems/kettle-jem/docs/file.PolyForm-Small-Business-1.0.0.html index 2069edc65..f7aadba19 100644 --- a/gems/kettle-jem/docs/file.PolyForm-Small-Business-1.0.0.html +++ b/gems/kettle-jem/docs/file.PolyForm-Small-Business-1.0.0.html @@ -185,7 +185,7 @@

            Definitions

            diff --git a/gems/kettle-jem/docs/file.README.html b/gems/kettle-jem/docs/file.README.html index 02c30f4bd..200c2cb8d 100644 --- a/gems/kettle-jem/docs/file.README.html +++ b/gems/kettle-jem/docs/file.README.html @@ -135,13 +135,13 @@

            💡 Info you can shake a stick at

            Support & Community -Join Me on Daily.dev's RubyFriends Live Chat on Discord Get help from me on Upwork Get help from me on Codementor +Join Me on Daily.dev's RubyFriends Get help from RubyForum Live Chat on Discord Get help from me on Upwork Get help from me on Codementor Source -Source on GitLab.com Source on CodeBerg.org Source on Github.com The best SHA: dQw4w9WgXcQ! +Source on GitLab.com Source on CodeBerg.org Source on GitHub.com The best SHA: dQw4w9WgXcQ! @@ -255,6 +255,8 @@

            Compatibility

            This gem is part of the StructuredMerge Ruby package family. The implementation inventory, layering model, and backend notes live in the root package-family guide. Shared behavior is defined by the StructuredMerge fixtures and implemented by the Go, Ruby, Rust, and TypeScript repositories.

            +

            Merge analysis must enter parsing through tree_haver. Parser-specific gems register concrete TreeHaver backends; substrate gems register grammar mappings and keep shared format or language merge behavior in one place. Missing backends fail closed instead of falling back to direct parser-library calls.

            +

            Federated DVCS

            @@ -1106,7 +1108,7 @@

            📌 Versioning

            📄 License

            -

            The gem is available under the following licenses: AGPL-3.0-only, PolyForm-Small-Business-1.0.0.
            +

            The gem is available under the following licenses: AGPL-3.0-only, PolyForm-Small-Business-1.0.0.
            See LICENSE.md for details.

            If none of the available licenses suit your use case, please contact us to discuss a custom commercial license.

            @@ -1160,7 +1162,7 @@

            Please give the project a star ⭐ ♥ diff --git a/gems/kettle-jem/docs/file.RRRRrb-Matrix.html b/gems/kettle-jem/docs/file.RRRRrb-Matrix.html index 4e2a1b5d8..569128600 100644 --- a/gems/kettle-jem/docs/file.RRRRrb-Matrix.html +++ b/gems/kettle-jem/docs/file.RRRRrb-Matrix.html @@ -411,7 +411,7 @@

            Support & Funding Info

            diff --git a/gems/kettle-jem/docs/file.RUBOCOP.html b/gems/kettle-jem/docs/file.RUBOCOP.html index f338cfca2..7929124a9 100644 --- a/gems/kettle-jem/docs/file.RUBOCOP.html +++ b/gems/kettle-jem/docs/file.RUBOCOP.html @@ -166,7 +166,7 @@

            Benefits of rubocop_gradual

            diff --git a/gems/kettle-jem/docs/file.SECURITY.html b/gems/kettle-jem/docs/file.SECURITY.html index cbcda8f97..e1ce29694 100644 --- a/gems/kettle-jem/docs/file.SECURITY.html +++ b/gems/kettle-jem/docs/file.SECURITY.html @@ -93,7 +93,7 @@

            Additional Support

            diff --git a/gems/kettle-jem/docs/index.html b/gems/kettle-jem/docs/index.html index f27fa192a..7920ebfee 100644 --- a/gems/kettle-jem/docs/index.html +++ b/gems/kettle-jem/docs/index.html @@ -135,13 +135,13 @@

            💡 Info you can shake a stick at

            Support & Community -Join Me on Daily.dev's RubyFriends Live Chat on Discord Get help from me on Upwork Get help from me on Codementor +Join Me on Daily.dev's RubyFriends Get help from RubyForum Live Chat on Discord Get help from me on Upwork Get help from me on Codementor Source -Source on GitLab.com Source on CodeBerg.org Source on Github.com The best SHA: dQw4w9WgXcQ! +Source on GitLab.com Source on CodeBerg.org Source on GitHub.com The best SHA: dQw4w9WgXcQ! @@ -255,6 +255,8 @@

            Compatibility

            This gem is part of the StructuredMerge Ruby package family. The implementation inventory, layering model, and backend notes live in the root package-family guide. Shared behavior is defined by the StructuredMerge fixtures and implemented by the Go, Ruby, Rust, and TypeScript repositories.

            +

            Merge analysis must enter parsing through tree_haver. Parser-specific gems register concrete TreeHaver backends; substrate gems register grammar mappings and keep shared format or language merge behavior in one place. Missing backends fail closed instead of falling back to direct parser-library calls.

            +

            Federated DVCS

            @@ -1106,7 +1108,7 @@

            📌 Versioning

            📄 License

            -

            The gem is available under the following licenses: AGPL-3.0-only, PolyForm-Small-Business-1.0.0.
            +

            The gem is available under the following licenses: AGPL-3.0-only, PolyForm-Small-Business-1.0.0.
            See LICENSE.md for details.

            If none of the available licenses suit your use case, please contact us to discuss a custom commercial license.

            @@ -1160,7 +1162,7 @@

            Please give the project a star ⭐ ♥ diff --git a/gems/kettle-jem/docs/method_list.html b/gems/kettle-jem/docs/method_list.html index 7c7c6095a..762ed8aca 100644 --- a/gems/kettle-jem/docs/method_list.html +++ b/gems/kettle-jem/docs/method_list.html @@ -48,6 +48,14 @@

            Method List

          • +
            + #absolute_path + Kettle::Jem::WriteIntent +
            +
          • + + +
          • #accept? Kettle::Jem::DecisionPolicy @@ -55,6 +63,14 @@

            Method List

          • +
          • +
            + #action + Kettle::Jem::WriteIntent +
            +
          • + +
          • active_license_basenames @@ -919,6 +935,22 @@

            Method List

          • +
          • +
            + build_yaml_state + Kettle::Jem::TemplateChecksums +
            +
          • + + +
          • +
            + build_yaml_state_lines + Kettle::Jem::TemplateChecksums +
            +
          • + +
          • bundle_binstubs_command @@ -928,6 +960,14 @@

            Method List

          • +
            + bundle_env_fingerprint + Kettle::Jem::Tasks::InstallTask +
            +
          • + + +
          • bundle_includes_gem? Kettle::Jem::Tasks::InstallTask @@ -935,6 +975,14 @@

            Method List

          • +
          • +
            + bundle_install_after_bootstrap_step + Kettle::Jem::Tasks::PrepareTask +
            +
          • + +
          • bundle_update_templating_bootstrap_command @@ -969,13 +1017,21 @@

            Method List

          • - bundler_generated_binstub? + bundler_command_env Kettle::Jem::Tasks::InstallTask
          • +
            + bundler_generated_binstub? + Kettle::Jem::Tasks::InstallTask +
            +
          • + + +
          • #cache Kettle::Jem::RubyGemsResolver @@ -983,7 +1039,7 @@

            Method List

          • -
          • +
          • #callback Kettle::Jem::PluginRegistry::Hook @@ -991,7 +1047,7 @@

            Method List

          • -
          • +
          • camelize Kettle::Jem::PluginLoader @@ -999,7 +1055,7 @@

            Method List

          • -
          • +
          • canonical_path Kettle::Jem::TemplatingReport @@ -1007,7 +1063,7 @@

            Method List

          • -
          • +
          • canonical_path Kettle::Jem::CLI @@ -1015,7 +1071,7 @@

            Method List

          • -
          • +
          • #category Kettle::Jem::DecisionEvaluation @@ -1023,7 +1079,7 @@

            Method List

          • -
          • +
          • #changed_files Kettle::Jem::PluginContext @@ -1031,7 +1087,7 @@

            Method List

          • -
          • +
          • changed_files_from_recipe_reports Kettle::Jem @@ -1039,7 +1095,7 @@

            Method List

          • -
          • +
          • changelog_bullet_line? Kettle::Jem @@ -1047,7 +1103,7 @@

            Method List

          • -
          • +
          • changelog_coverage_kloc Kettle::Jem @@ -1055,7 +1111,7 @@

            Method List

          • -
          • +
          • changelog_template_header Kettle::Jem @@ -1063,7 +1119,7 @@

            Method List

          • -
          • +
          • changelog_transfer_entries Kettle::Jem @@ -1071,7 +1127,23 @@

            Method List

          • +
          • + +
          • + +
          • +
            + changelog_transfer_facts + Kettle::Jem +
            +
          • + + +
          • changelog_transfer_key Kettle::Jem @@ -1079,6 +1151,14 @@

            Method List

          • +
          • +
            + changelog_transfer_key_date + Kettle::Jem +
            +
          • + +
          • changelog_transfer_keys @@ -1257,13 +1337,85 @@

            Method List

          • - compact_hash + commit_file_outcome + Kettle::Jem +
            +
          • + + +
          • +
            + commit_file_work_unit + Kettle::Jem +
            +
          • + + +
          • +
            + commit_file_work_unit_payload + Kettle::Jem +
            +
          • + + +
          • +
            + commit_file_work_units + Kettle::Jem +
            +
          • + + +
          • +
            + commit_file_work_units_ractor + Kettle::Jem +
            +
          • + + +
          • +
            + commit_file_work_units_thread + Kettle::Jem +
            +
          • + + +
          • +
            + commit_filesystem_outcome + Kettle::Jem +
            +
          • + + +
          • + +
          • + + +
          • +
            + commit_write_intent Kettle::Jem
          • +
            + compact_hash + Kettle::Jem +
            +
          • + + +
          • compare Kettle::Jem::SelfTest::Manifest @@ -1271,7 +1423,7 @@

            Method List

          • -
          • +
          • compatibility_badge_min_mri Kettle::Jem::ReadmePostProcessor @@ -1279,7 +1431,7 @@

            Method List

          • -
          • +
          • compatibility_row? Kettle::Jem::ReadmePostProcessor @@ -1287,7 +1439,7 @@

            Method List

          • -
          • +
          • compute Kettle::Jem::TemplateChecksums @@ -1295,7 +1447,7 @@

            Method List

          • -
          • +
          • concrete_github_url Kettle::Jem @@ -1303,7 +1455,7 @@

            Method List

          • -
          • +
          • config_bootstrap_changed? Kettle::Jem::Tasks::InstallTask @@ -1311,7 +1463,7 @@

            Method List

          • -
          • +
          • config_min_ruby Kettle::Jem @@ -1319,7 +1471,7 @@

            Method List

          • -
          • +
          • config_test_min_ruby Kettle::Jem @@ -1327,7 +1479,7 @@

            Method List

          • -
          • +
          • configured_disabled_integrations Kettle::Jem @@ -1335,7 +1487,7 @@

            Method List

          • -
          • +
          • #configured_plugins Kettle::Jem::PluginRegistry @@ -1343,7 +1495,7 @@

            Method List

          • -
          • +
          • configured_project_grapheme Kettle::Jem::Tasks::InstallTask @@ -1351,7 +1503,7 @@

            Method List

          • -
          • +
          • configured_readme_top_logo_entries Kettle::Jem @@ -1359,7 +1511,7 @@

            Method List

          • -
          • +
          • conflicting_git_attribute_diagnostics Kettle::Jem::Tasks::InstallTask @@ -1367,7 +1519,7 @@

            Method List

          • -
          • +
          • console_lines Kettle::Jem::TemplatingReport @@ -1375,6 +1527,14 @@

            Method List

          • +
          • +
            + #content + Kettle::Jem::WriteIntent +
            +
          • + +
          • content_recipe_execution_report @@ -1607,6 +1767,22 @@

            Method List

          • +
          • + +
          • + + +
          • + +
          • + +
          • deduplicate_readme_top_logo_entries @@ -1696,6 +1872,14 @@

            Method List

          • +
            + default_thread_worker_count + Kettle::Jem::Tasks::TemplateTask +
            +
          • + + +
          • default_workspace_root Kettle::Jem::TemplatingReport @@ -1703,6 +1887,14 @@

            Method List

          • +
          • +
            + #delete? + Kettle::Jem::WriteIntent +
            +
          • + +
          • delete_file_recipe? @@ -1737,13 +1929,21 @@

            Method List

          • +
            + delete_project_file + Kettle::Jem +
            +
          • + + +
          • delete_rakefile_scaffold Kettle::Jem @@ -1751,6 +1951,14 @@

            Method List

          • +
          • + +
          • + +
          • detail_lines @@ -1911,6 +2119,22 @@

            Method List

          • +
          • +
            + distinct_bundle_install_step + Kettle::Jem::Tasks::InstallTask +
            +
          • + + +
          • +
            + distribute_file_work_units + Kettle::Jem +
            +
          • + +
          • dotenv_merge_options @@ -1937,8 +2161,8 @@

            Method List

          • - #emit - Kettle::Jem::EventStream + duration_ms_since + Kettle::Jem
          • @@ -2241,7 +2465,7 @@

            Method List

          • @@ -2249,7 +2473,7 @@

            Method List

          • - execute_git_drivers_step + execute_git_drivers_check_step Kettle::Jem::Tasks::InstallTask
          • @@ -2257,7 +2481,7 @@

            Method List

          • - execute_hook_templates_step + execute_git_drivers_step Kettle::Jem::Tasks::InstallTask
          • @@ -2265,7 +2489,7 @@

            Method List

          • - execute_orchestration_steps + execute_hook_templates_step Kettle::Jem::Tasks::InstallTask
          • @@ -2273,21 +2497,45 @@

            Method List

          • - execute_ready_command_step - Kettle::Jem::Tasks::InstallTask + execute_indexed_recipe_reports + Kettle::Jem
          • +
          • + + +
          • +
            + execute_orchestration_steps + Kettle::Jem::Tasks::InstallTask +
            +
          • + + +
          • +
            + execute_ready_command_step Kettle::Jem::Tasks::InstallTask
          • +
            + execute_ready_commands_step + Kettle::Jem::Tasks::InstallTask +
            +
          • + + +
          • execute_recipe Kettle::Jem @@ -2295,7 +2543,55 @@

            Method List

          • +
          • +
            + execute_recipe_reports + Kettle::Jem +
            +
          • + + +
          • + +
          • + + +
          • + +
          • + +
          • +
            + execute_timed_recipe + Kettle::Jem +
            +
          • + + +
          • +
            + execute_unlocked_ready_commands_step + Kettle::Jem::Tasks::InstallTask +
            +
          • + + +
          • + +
          • + + +
          • existing_entrypoint_version_namespace Kettle::Jem @@ -2303,6 +2599,14 @@

            Method List

          • +
          • + +
          • + +
          • existing_version_file_value @@ -2441,7 +2745,7 @@

            Method List

          • @@ -2449,7 +2753,7 @@

            Method List

          • @@ -2457,7 +2761,7 @@

            Method List

          • @@ -2465,7 +2769,7 @@

            Method List

          • @@ -2473,7 +2777,7 @@

            Method List

          • @@ -2481,7 +2785,7 @@

            Method List

          • @@ -2489,13 +2793,69 @@

            Method List

          • +
            + filter_recipe_pack + Kettle::Jem +
            +
          • + + +
          • + +
          • + + +
          • + +
          • + + +
          • + +
          • + + +
          • +
            + finalize_rubocop_config + Kettle::Jem +
            +
          • + + +
          • + +
          • + + +
          • +
            + first_grapheme + Kettle::Jem +
            +
          • + + +
          • first_grapheme Kettle::Jem::Tasks::InstallTask @@ -2503,7 +2863,7 @@

            Method List

          • -
          • +
          • followup_apply_after_config_bootstrap Kettle::Jem::Tasks::InstallTask @@ -2511,7 +2871,7 @@

            Method List

          • -
          • +
          • forge_facts Kettle::Jem @@ -2519,7 +2879,7 @@

            Method List

          • -
          • +
          • forge_template_tokens Kettle::Jem @@ -2527,7 +2887,7 @@

            Method List

          • -
          • +
          • forge_user_value Kettle::Jem @@ -2535,7 +2895,7 @@

            Method List

          • -
          • +
          • format_copyright_years Kettle::Jem @@ -2543,7 +2903,7 @@

            Method List

          • -
          • +
          • framework_gemfile_path Kettle::Jem @@ -2551,7 +2911,7 @@

            Method List

          • -
          • +
          • framework_matrix_appraisal_block Kettle::Jem @@ -2559,7 +2919,7 @@

            Method List

          • -
          • +
          • framework_matrix_appraisal_dependency_gemfiles Kettle::Jem @@ -2567,7 +2927,7 @@

            Method List

          • -
          • +
          • framework_matrix_appraisal_env_by_name Kettle::Jem @@ -2575,7 +2935,7 @@

            Method List

          • -
          • +
          • framework_matrix_appraisal_gemfile_path Kettle::Jem @@ -2583,7 +2943,7 @@

            Method List

          • -
          • +
          • framework_matrix_appraisal_gemfiles Kettle::Jem @@ -2591,7 +2951,7 @@

            Method List

          • -
          • +
          • framework_matrix_appraisal_name Kettle::Jem @@ -2599,7 +2959,7 @@

            Method List

          • -
          • +
          • framework_matrix_env Kettle::Jem @@ -2607,7 +2967,7 @@

            Method List

          • -
          • +
          • framework_matrix_replaced_appraisal_names Kettle::Jem @@ -2615,7 +2975,7 @@

            Method List

          • -
          • +
          • framework_matrix_version_entry Kettle::Jem @@ -2623,7 +2983,7 @@

            Method List

          • -
          • +
          • framework_matrix_workflow_enabled? Kettle::Jem @@ -2631,7 +2991,7 @@

            Method List

          • -
          • +
          • freeze_marker_blocks Kettle::Jem @@ -2639,7 +2999,7 @@

            Method List

          • -
          • +
          • from_env Kettle::Jem::DecisionPolicy @@ -2647,7 +3007,7 @@

            Method List

          • -
          • +
          • funding_platform_token_facts Kettle::Jem @@ -2655,7 +3015,7 @@

            Method List

          • -
          • +
          • funding_platform_token_value Kettle::Jem @@ -2663,7 +3023,7 @@

            Method List

          • -
          • +
          • funding_template_tokens Kettle::Jem @@ -2671,7 +3031,7 @@

            Method List

          • -
          • +
          • funding_urls Kettle::Jem @@ -2679,7 +3039,7 @@

            Method List

          • -
          • +
          • gem_major_token Kettle::Jem @@ -2687,7 +3047,7 @@

            Method List

          • -
          • +
          • gemfile_comment_line? Kettle::Jem @@ -2695,7 +3055,7 @@

            Method List

          • -
          • +
          • gemfile_conditional_node? Kettle::Jem @@ -2703,7 +3063,7 @@

            Method List

          • -
          • +
          • gemfile_declares_gem? Kettle::Jem @@ -2711,7 +3071,7 @@

            Method List

          • -
          • +
          • gemfile_dependency_insertion_line Kettle::Jem @@ -2719,7 +3079,7 @@

            Method List

          • -
          • +
          • gemfile_dependency_names Kettle::Jem @@ -2727,7 +3087,7 @@

            Method List

          • -
          • +
          • gemfile_dependency_statement? Kettle::Jem @@ -2735,7 +3095,7 @@

            Method List

          • -
          • +
          • gemfile_eval_bucket_entries Kettle::Jem @@ -2743,7 +3103,7 @@

            Method List

          • -
          • +
          • gemfile_eval_comment_start_line Kettle::Jem @@ -2751,7 +3111,7 @@

            Method List

          • -
          • +
          • gemfile_eval_paths Kettle::Jem @@ -2759,7 +3119,7 @@

            Method List

          • -
          • +
          • gemfile_gem_call_records Kettle::Jem @@ -2767,7 +3127,7 @@

            Method List

          • -
          • +
          • gemfile_nomono_dependency_names Kettle::Jem @@ -2775,7 +3135,7 @@

            Method List

          • -
          • +
          • gemfile_paragraphs Kettle::Jem @@ -2783,7 +3143,7 @@

            Method List

          • -
          • +
          • gemfile_percent_w_names Kettle::Jem @@ -2791,7 +3151,7 @@

            Method List

          • -
          • +
          • gemfile_policy_operations Kettle::Jem @@ -2799,7 +3159,7 @@

            Method List

          • -
          • +
          • gemfile_workspace_override_node? Kettle::Jem @@ -2807,7 +3167,7 @@

            Method List

          • -
          • +
          • gemspec_assignment_field Kettle::Jem @@ -2815,7 +3175,7 @@

            Method List

          • -
          • +
          • gemspec_assignment_records Kettle::Jem @@ -2823,7 +3183,7 @@

            Method List

          • -
          • +
          • gemspec_assignment_value Kettle::Jem @@ -2831,7 +3191,7 @@

            Method List

          • -
          • +
          • gemspec_block_param Kettle::Jem @@ -2839,7 +3199,7 @@

            Method List

          • -
          • +
          • gemspec_dependency_call_kind Kettle::Jem @@ -2847,7 +3207,7 @@

            Method List

          • -
          • +
          • gemspec_dependency_from_record Kettle::Jem @@ -2855,7 +3215,7 @@

            Method List

          • -
          • +
          • gemspec_dependency_line_index Kettle::Jem @@ -2863,7 +3223,7 @@

            Method List

          • -
          • +
          • gemspec_dependency_line_key Kettle::Jem @@ -2871,7 +3231,7 @@

            Method List

          • -
          • +
          • gemspec_dependency_minimum_requirement_replacement Kettle::Jem @@ -2879,7 +3239,7 @@

            Method List

          • -
          • +
          • gemspec_dependency_names Kettle::Jem @@ -2887,7 +3247,7 @@

            Method List

          • -
          • +
          • gemspec_dependency_record_key Kettle::Jem @@ -2895,7 +3255,7 @@

            Method List

          • -
          • +
          • gemspec_dependency_record_version Kettle::Jem @@ -2903,7 +3263,7 @@

            Method List

          • -
          • +
          • gemspec_dependency_records Kettle::Jem @@ -2911,7 +3271,7 @@

            Method List

          • -
          • +
          • gemspec_dependency_requirements_satisfy_floor? Kettle::Jem @@ -2919,7 +3279,7 @@

            Method List

          • -
          • +
          • gemspec_dependency_section_heading_comment? Kettle::Jem @@ -2927,7 +3287,7 @@

            Method List

          • -
          • +
          • gemspec_dependency_sort_key Kettle::Jem @@ -2935,7 +3295,7 @@

            Method List

          • -
          • +
          • gemspec_dependency_source_newer? Kettle::Jem @@ -2943,7 +3303,7 @@

            Method List

          • -
          • +
          • gemspec_dependency_sync_step Kettle::Jem::Tasks::InstallTask @@ -2951,7 +3311,7 @@

            Method List

          • -
          • +
          • gemspec_end_line Kettle::Jem @@ -2959,7 +3319,7 @@

            Method List

          • -
          • +
          • gemspec_field_receiver_and_name Kettle::Jem @@ -2967,7 +3327,7 @@

            Method List

          • -
          • +
          • gemspec_files_array_collection_source Kettle::Jem @@ -2975,7 +3335,7 @@

            Method List

          • -
          • +
          • gemspec_files_child_collection_record Kettle::Jem @@ -2983,7 +3343,7 @@

            Method List

          • -
          • +
          • gemspec_files_collection_body_source Kettle::Jem @@ -2991,7 +3351,7 @@

            Method List

          • -
          • +
          • gemspec_files_collection_element_nodes Kettle::Jem @@ -2999,7 +3359,7 @@

            Method List

          • -
          • +
          • gemspec_files_collection_entry_key Kettle::Jem @@ -3007,7 +3367,7 @@

            Method List

          • -
          • +
          • gemspec_files_collection_entry_node? Kettle::Jem @@ -3015,7 +3375,7 @@

            Method List

          • -
          • +
          • gemspec_files_collection_group_source Kettle::Jem @@ -3023,7 +3383,7 @@

            Method List

          • -
          • +
          • gemspec_files_collection_groups Kettle::Jem @@ -3031,7 +3391,7 @@

            Method List

          • -
          • +
          • gemspec_files_collection_has_nonliteral_entries? Kettle::Jem @@ -3039,7 +3399,7 @@

            Method List

          • -
          • +
          • gemspec_files_collection_has_package_metadata_splat? Kettle::Jem @@ -3047,7 +3407,7 @@

            Method List

          • -
          • +
          • gemspec_files_collection_kind Kettle::Jem @@ -3055,7 +3415,7 @@

            Method List

          • -
          • +
          • gemspec_files_collection_needs_concat? Kettle::Jem @@ -3063,7 +3423,7 @@

            Method List

          • -
          • +
          • gemspec_files_collection_parts Kettle::Jem @@ -3071,7 +3431,7 @@

            Method List

          • -
          • +
          • gemspec_files_concat_call_node? Kettle::Jem @@ -3079,7 +3439,7 @@

            Method List

          • -
          • +
          • gemspec_files_concat_collection_parts Kettle::Jem @@ -3087,7 +3447,7 @@

            Method List

          • -
          • +
          • gemspec_files_concat_collection_source Kettle::Jem @@ -3095,7 +3455,7 @@

            Method List

          • -
          • +
          • gemspec_files_dir_call_node? Kettle::Jem @@ -3103,7 +3463,7 @@

            Method List

          • -
          • +
          • gemspec_files_dir_collection_source Kettle::Jem @@ -3111,7 +3471,7 @@

            Method List

          • -
          • +
          • gemspec_files_group_collection_kind Kettle::Jem @@ -3119,7 +3479,7 @@

            Method List

          • -
          • +
          • gemspec_files_single_collection_parts Kettle::Jem @@ -3127,7 +3487,7 @@

            Method List

          • -
          • +
          • gemspec_files_splat_expression_key Kettle::Jem @@ -3135,7 +3495,7 @@

            Method List

          • -
          • +
          • gemspec_freeze_block_structurally_managed? Kettle::Jem @@ -3143,7 +3503,7 @@

            Method List

          • -
          • +
          • gemspec_grapheme_assignment_replacements Kettle::Jem::Tasks::InstallTask @@ -3151,7 +3511,7 @@

            Method List

          • -
          • +
          • gemspec_legacy_version_loader_block Kettle::Jem @@ -3159,7 +3519,7 @@

            Method List

          • -
          • +
          • gemspec_legacy_version_loader_preamble_line_range Kettle::Jem @@ -3167,7 +3527,7 @@

            Method List

          • -
          • +
          • gemspec_modern_version_loader_expression Kettle::Jem @@ -3175,7 +3535,7 @@

            Method List

          • -
          • +
          • gemspec_name Kettle::Jem::Tasks::InstallTask @@ -3183,7 +3543,7 @@

            Method List

          • -
          • +
          • gemspec_new_call Kettle::Jem @@ -3191,7 +3551,7 @@

            Method List

          • -
          • +
          • gemspec_package_file_includes_token Kettle::Jem @@ -3199,7 +3559,7 @@

            Method List

          • -
          • +
          • gemspec_path_declares_gem? Kettle::Jem @@ -3207,7 +3567,7 @@

            Method List

          • -
          • +
          • gemspec_policy_operations Kettle::Jem @@ -3215,7 +3575,7 @@

            Method List

          • -
          • +
          • gemspec_preserved_assignment_fields Kettle::Jem @@ -3223,7 +3583,7 @@

            Method List

          • -
          • +
          • gemspec_preserved_assignments Kettle::Jem @@ -3231,7 +3591,7 @@

            Method List

          • -
          • +
          • gemspec_project_emoji Kettle::Jem @@ -3239,7 +3599,7 @@

            Method List

          • -
          • +
          • gemspec_root_license_files_token Kettle::Jem @@ -3247,7 +3607,7 @@

            Method List

          • -
          • +
          • gemspec_runtime_dependency_names Kettle::Jem @@ -3255,7 +3615,7 @@

            Method List

          • -
          • +
          • gemspec_runtime_floor_token Kettle::Jem @@ -3263,7 +3623,7 @@

            Method List

          • -
          • +
          • gemspec_self_dependency_names Kettle::Jem @@ -3271,7 +3631,7 @@

            Method List

          • -
          • +
          • gemspec_template_facts Kettle::Jem @@ -3279,7 +3639,7 @@

            Method List

          • -
          • +
          • gemspec_template_tokens Kettle::Jem @@ -3287,7 +3647,7 @@

            Method List

          • -
          • +
          • gemspec_top_level_gem_version_node Kettle::Jem @@ -3295,7 +3655,7 @@

            Method List

          • -
          • +
          • gemspec_version_loader_policy_operation Kettle::Jem @@ -3303,7 +3663,7 @@

            Method List

          • -
          • +
          • generate Kettle::Jem::SelfTest::Manifest @@ -3311,7 +3671,7 @@

            Method List

          • -
          • +
          • generated_blocks_facts Kettle::Jem @@ -3319,7 +3679,7 @@

            Method List

          • -
          • +
          • generated_gemspec_metadata_file_group? Kettle::Jem @@ -3327,7 +3687,7 @@

            Method List

          • -
          • +
          • generated_kettle_config_without_templates? Kettle::Jem @@ -3335,7 +3695,7 @@

            Method List

          • -
          • +
          • generated_or_obsolete_github_workflow? Kettle::Jem @@ -3343,7 +3703,7 @@

            Method List

          • -
          • +
          • generated_runtime_artifact? Kettle::Jem::Tasks::SelfTestTask @@ -3351,7 +3711,7 @@

            Method List

          • -
          • +
          • generated_version_tree_source_url? Kettle::Jem @@ -3359,7 +3719,7 @@

            Method List

          • -
          • +
          • generic_bundler_gemspec_files_assignment? Kettle::Jem @@ -3367,7 +3727,7 @@

            Method List

          • -
          • +
          • generic_bundler_gemspec_files_command? Kettle::Jem @@ -3375,7 +3735,7 @@

            Method List

          • -
          • +
          • git_attribute_block_end Kettle::Jem::Tasks::InstallTask @@ -3383,7 +3743,7 @@

            Method List

          • -
          • +
          • git_attribute_block_start Kettle::Jem::Tasks::InstallTask @@ -3391,7 +3751,7 @@

            Method List

          • -
          • +
          • git_attribute_line_conflicts? Kettle::Jem::Tasks::InstallTask @@ -3399,7 +3759,7 @@

            Method List

          • -
          • +
          • git_capture Kettle::Jem @@ -3407,7 +3767,7 @@

            Method List

          • -
          • +
          • git_copyright_lines Kettle::Jem @@ -3415,7 +3775,7 @@

            Method List

          • -
          • +
          • git_driver_attribute_diagnostics Kettle::Jem::Tasks::InstallTask @@ -3423,7 +3783,7 @@

            Method List

          • -
          • +
          • git_driver_attribute_reason Kettle::Jem::Tasks::InstallTask @@ -3431,7 +3791,7 @@

            Method List

          • -
          • +
          • git_driver_attribute_status Kettle::Jem::Tasks::InstallTask @@ -3439,7 +3799,7 @@

            Method List

          • -
          • +
          • git_driver_attribute_updates Kettle::Jem::Tasks::InstallTask @@ -3447,7 +3807,7 @@

            Method List

          • -
          • +
          • git_driver_forge_warning_diagnostic Kettle::Jem::Tasks::InstallTask @@ -3455,7 +3815,7 @@

            Method List

          • -
          • +
          • git_driver_global_commands Kettle::Jem::Tasks::InstallTask @@ -3463,7 +3823,7 @@

            Method List

          • -
          • +
          • git_driver_global_config_checks Kettle::Jem::Tasks::InstallTask @@ -3471,7 +3831,7 @@

            Method List

          • -
          • +
          • git_driver_global_unset_commands Kettle::Jem::Tasks::InstallTask @@ -3479,7 +3839,7 @@

            Method List

          • -
          • +
          • git_driver_local_commands Kettle::Jem::Tasks::InstallTask @@ -3487,7 +3847,7 @@

            Method List

          • -
          • +
          • git_driver_local_config_checks Kettle::Jem::Tasks::InstallTask @@ -3495,7 +3855,7 @@

            Method List

          • -
          • +
          • git_driver_manifest Kettle::Jem::Tasks::InstallTask @@ -3503,7 +3863,7 @@

            Method List

          • -
          • +
          • git_driver_manifest_profile Kettle::Jem::Tasks::InstallTask @@ -3511,7 +3871,7 @@

            Method List

          • -
          • +
          • git_drivers_step Kettle::Jem::Tasks::InstallTask @@ -3519,7 +3879,7 @@

            Method List

          • -
          • +
          • git_hooks_executable_step Kettle::Jem @@ -3527,7 +3887,7 @@

            Method List

          • -
          • +
          • git_output Kettle::Jem @@ -3535,7 +3895,7 @@

            Method List

          • -
          • +
          • git_output Kettle::Jem::Tasks::InstallTask @@ -3543,7 +3903,7 @@

            Method List

          • -
          • +
          • git_preflight_report Kettle::Jem @@ -3551,7 +3911,7 @@

            Method List

          • -
          • +
          • git_remote_source_url Kettle::Jem @@ -3559,7 +3919,7 @@

            Method List

          • -
          • +
          • git_success? Kettle::Jem @@ -3567,7 +3927,7 @@

            Method List

          • -
          • +
          • git_success? Kettle::Jem::Tasks::InstallTask @@ -3575,7 +3935,7 @@

            Method List

          • -
          • +
          • git_toplevel Kettle::Jem::Tasks::InstallTask @@ -3583,7 +3943,7 @@

            Method List

          • -
          • +
          • git_version_file_value Kettle::Jem @@ -3591,7 +3951,7 @@

            Method List

          • -
          • +
          • git_worktree_prefix Kettle::Jem @@ -3599,7 +3959,7 @@

            Method List

          • -
          • +
          • git_worktree_root Kettle::Jem @@ -3607,7 +3967,7 @@

            Method List

          • -
          • +
          • github_actions_coverage_config Kettle::Jem @@ -3615,7 +3975,7 @@

            Method List

          • -
          • +
          • github_actions_coverage_enabled? Kettle::Jem @@ -3623,7 +3983,7 @@

            Method List

          • -
          • +
          • github_actions_coverage_steps Kettle::Jem @@ -3631,7 +3991,7 @@

            Method List

          • -
          • +
          • github_actions_custom_workflows Kettle::Jem @@ -3639,7 +3999,7 @@

            Method List

          • -
          • +
          • github_actions_exec_cmd Kettle::Jem @@ -3647,7 +4007,7 @@

            Method List

          • -
          • +
          • github_actions_framework_matrix Kettle::Jem @@ -3655,7 +4015,7 @@

            Method List

          • -
          • +
          • github_actions_obsolete_workflows Kettle::Jem @@ -3663,7 +4023,7 @@

            Method List

          • -
          • +
          • github_actions_pin_sync_step Kettle::Jem @@ -3671,7 +4031,7 @@

            Method List

          • -
          • +
          • github_actions_push_branches Kettle::Jem @@ -3679,7 +4039,7 @@

            Method List

          • -
          • +
          • github_actions_push_branches_yaml Kettle::Jem @@ -3687,7 +4047,7 @@

            Method List

          • -
          • +
          • github_actions_rspec_status_cache_step Kettle::Jem @@ -3695,7 +4055,7 @@

            Method List

          • -
          • +
          • github_actions_ruby_versions Kettle::Jem @@ -3703,7 +4063,7 @@

            Method List

          • -
          • +
          • github_actions_setup_ruby_steps Kettle::Jem @@ -3711,7 +4071,7 @@

            Method List

          • -
          • +
          • github_actions_standard_appraisal_gemfiles Kettle::Jem @@ -3719,7 +4079,7 @@

            Method List

          • -
          • +
          • github_actions_step_pins Kettle::Jem @@ -3727,7 +4087,7 @@

            Method List

          • -
          • +
          • github_funding_platform_urls Kettle::Jem @@ -3735,7 +4095,7 @@

            Method List

          • -
          • +
          • github_funding_urls Kettle::Jem @@ -3743,7 +4103,7 @@

            Method List

          • -
          • +
          • github_org_from_env Kettle::Jem::Tasks::InstallTask @@ -3751,7 +4111,7 @@

            Method List

          • -
          • +
          • github_org_from_origin Kettle::Jem::Tasks::InstallTask @@ -3759,7 +4119,7 @@

            Method List

          • -
          • +
          • github_org_from_url Kettle::Jem @@ -3767,7 +4127,7 @@

            Method List

          • -
          • +
          • github_workflow_action_pin_key Kettle::Jem @@ -3775,7 +4135,7 @@

            Method List

          • -
          • +
          • github_workflow_action_pin_line_record Kettle::Jem @@ -3783,7 +4143,7 @@

            Method List

          • -
          • +
          • github_workflow_action_pin_records Kettle::Jem @@ -3791,7 +4151,7 @@

            Method List

          • -
          • +
          • github_workflow_paths Kettle::Jem::Tasks::InstallTask @@ -3799,7 +4159,7 @@

            Method List

          • -
          • +
          • github_workflow_template_pin_warnings Kettle::Jem @@ -3807,7 +4167,7 @@

            Method List

          • -
          • +
          • github_workflow_template_recipe? Kettle::Jem @@ -3815,7 +4175,7 @@

            Method List

          • -
          • +
          • github_workflows_include? Kettle::Jem @@ -3823,7 +4183,7 @@

            Method List

          • -
          • +
          • gitlab_repo_url Kettle::Jem @@ -3831,7 +4191,7 @@

            Method List

          • -
          • +
          • guard_main_gemfile_runtime_workspace_overrides Kettle::Jem @@ -3839,7 +4199,7 @@

            Method List

          • -
          • +
          • handoff_argv Kettle::Jem::Tasks::InstallTask @@ -3847,7 +4207,7 @@

            Method List

          • -
          • +
          • #helpers Kettle::Jem::PluginContext @@ -3855,7 +4215,7 @@

            Method List

          • -
          • +
          • hook_templates_step Kettle::Jem::Tasks::InstallTask @@ -3863,7 +4223,7 @@

            Method List

          • -
          • +
          • #hooks Kettle::Jem::PluginRegistry @@ -3871,7 +4231,7 @@

            Method List

          • -
          • +
          • html_attribute_escape Kettle::Jem @@ -3879,7 +4239,7 @@

            Method List

          • -
          • +
          • http_url? Kettle::Jem @@ -3887,7 +4247,7 @@

            Method List

          • -
          • +
          • #id Kettle::Jem::DecisionEvaluation @@ -3895,6 +4255,14 @@

            Method List

          • +
          • +
            + ignored_bundle_env_key? + Kettle::Jem::Tasks::InstallTask +
            +
          • + +
          • ignored_selftest_artifact? @@ -4001,13 +4369,21 @@

            Method List

          • - #initialize - Kettle::Jem::EventStream + #initialize + Kettle::Jem::WriteIntent
          • +
            + #initialize + Kettle::Jem::FileWorkUnit +
            +
          • + + +
          • inject_appraisal_gemfiles Kettle::Jem @@ -4015,7 +4391,7 @@

            Method List

          • -
          • +
          • inject_framework_matrix_workflow_env Kettle::Jem @@ -4023,7 +4399,7 @@

            Method List

          • -
          • +
          • inject_main_gemfile_recording_eval Kettle::Jem @@ -4031,7 +4407,7 @@

            Method List

          • -
          • +
          • inject_standard_appraisal_gemfiles Kettle::Jem @@ -4039,7 +4415,7 @@

            Method List

          • -
          • +
          • #input_source Kettle::Jem::DecisionPolicy @@ -4047,7 +4423,7 @@

            Method List

          • -
          • +
          • insert_after_line_sequence Kettle::Jem @@ -4055,7 +4431,7 @@

            Method List

          • -
          • +
          • insert_gemfile_dependency_blocks Kettle::Jem @@ -4063,7 +4439,7 @@

            Method List

          • -
          • +
          • insert_lines_after Kettle::Jem @@ -4071,7 +4447,7 @@

            Method List

          • -
          • +
          • insert_lines_before Kettle::Jem @@ -4079,7 +4455,7 @@

            Method List

          • -
          • +
          • insert_missing_development_gemspec_dependency_lines Kettle::Jem @@ -4087,7 +4463,7 @@

            Method List

          • -
          • +
          • insert_missing_gemspec_assignment_sources Kettle::Jem @@ -4095,7 +4471,7 @@

            Method List

          • -
          • +
          • insert_missing_gemspec_files_assignment Kettle::Jem @@ -4103,7 +4479,7 @@

            Method List

          • -
          • +
          • insert_missing_runtime_gemspec_dependency_lines Kettle::Jem @@ -4111,7 +4487,7 @@

            Method List

          • -
          • +
          • insert_yaml_scalar_after_path Kettle::Jem @@ -4119,7 +4495,7 @@

            Method List

          • -
          • +
          • install_phase_reports Kettle::Jem::Tasks::InstallTask @@ -4127,7 +4503,7 @@

            Method List

          • -
          • +
          • install_run_options Kettle::Jem::Tasks::InstallTask @@ -4135,7 +4511,7 @@

            Method List

          • -
          • +
          • install_step_summary Kettle::Jem::Tasks::InstallTask @@ -4143,7 +4519,7 @@

            Method List

          • -
          • +
          • install_tasks Kettle::Jem @@ -4151,7 +4527,7 @@

            Method List

          • -
          • +
          • integration_license_spdx Kettle::Jem @@ -4159,7 +4535,7 @@

            Method List

          • -
          • +
          • #interactive? Kettle::Jem::DecisionPolicy @@ -4167,7 +4543,7 @@

            Method List

          • -
          • +
          • json_merge_options Kettle::Jem @@ -4175,7 +4551,7 @@

            Method List

          • -
          • +
          • kettle_config_bootstrap_facts Kettle::Jem @@ -4183,7 +4559,7 @@

            Method List

          • -
          • +
          • kettle_config_bootstrap_recipe Kettle::Jem @@ -4191,7 +4567,7 @@

            Method List

          • -
          • +
          • kettle_config_file_override_lines Kettle::Jem @@ -4199,6 +4575,14 @@

            Method List

          • +
          • +
            + kettle_config_internal_value + Kettle::Jem +
            +
          • + +
          • kettle_config_migration_step @@ -4265,13 +4649,21 @@

            Method List

          • + +
          • + + +
          • large_business_license_cell Kettle::Jem @@ -4279,6 +4671,14 @@

            Method List

          • +
          • + +
          • + +
          • leading_space_count @@ -4393,7 +4793,7 @@

            Method List

          • @@ -4401,7 +4801,7 @@

            Method List

          • @@ -4409,13 +4809,21 @@

            Method List

          • + +
          • + + +
          • license_eye_flags Kettle::Jem @@ -4423,9 +4831,17 @@

            Method List

          • +
          • +
            + license_eye_mode + Kettle::Jem +
            +
          • + +
          • @@ -4433,7 +4849,7 @@

            Method List

          • @@ -4441,7 +4857,7 @@

            Method List

          • @@ -4449,7 +4865,7 @@

            Method List

          • - license_facts + license_link Kettle::Jem
          • @@ -4457,7 +4873,7 @@

            Method List

          • @@ -4465,7 +4881,7 @@

            Method List

          • @@ -4553,13 +4969,21 @@

            Method List

          • - load_stored + load_state Kettle::Jem::TemplateChecksums
          • +
            + load_stored + Kettle::Jem::TemplateChecksums +
            +
          • + + +
          • #loaded_plugins Kettle::Jem::PluginRegistry @@ -4567,7 +4991,7 @@

            Method List

          • -
          • +
          • local_env_disabled? Kettle::Jem::Tasks::InstallTask @@ -4575,9 +4999,17 @@

            Method List

          • +
          • +
            + local_gemfile_nomono_bootstrap + Kettle::Jem +
            +
          • + +
          • @@ -4585,7 +5017,7 @@

            Method List

          • @@ -4593,7 +5025,7 @@

            Method List

          • @@ -4601,7 +5033,7 @@

            Method List

          • @@ -4609,13 +5041,21 @@

            Method List

          • + +
          • + + +
          • local_path? Kettle::Jem::TemplatingReport @@ -4623,7 +5063,7 @@

            Method List

          • -
          • +
          • local_warning_section Kettle::Jem::TemplatingReport @@ -4631,7 +5071,7 @@

            Method List

          • -
          • +
          • local_workspace_warning Kettle::Jem::TemplatingReport @@ -4639,7 +5079,7 @@

            Method List

          • -
          • +
          • local_workspace_warning_lines Kettle::Jem::TemplatingReport @@ -4647,7 +5087,7 @@

            Method List

          • -
          • +
          • locked_templating_gems Kettle::Jem::Tasks::PrepareTask @@ -4655,7 +5095,7 @@

            Method List

          • -
          • +
          • lockfile_normalization_command Kettle::Jem::Tasks::InstallTask @@ -4663,7 +5103,7 @@

            Method List

          • -
          • +
          • main_gemfile_after_gemspec_line Kettle::Jem @@ -4671,7 +5111,7 @@

            Method List

          • -
          • +
          • main_gemfile_direct_sibling_block Kettle::Jem @@ -4679,7 +5119,7 @@

            Method List

          • -
          • +
          • main_gemfile_direct_sibling_records Kettle::Jem @@ -4687,7 +5127,7 @@

            Method List

          • -
          • +
          • main_gemfile_first_eval_gemfile_line Kettle::Jem @@ -4695,7 +5135,7 @@

            Method List

          • -
          • +
          • main_gemfile_nomono_bootstrap Kettle::Jem @@ -4703,7 +5143,7 @@

            Method List

          • -
          • +
          • main_gemfile_nomono_bootstrap_source Kettle::Jem @@ -4711,7 +5151,7 @@

            Method List

          • -
          • +
          • main_gemfile_nomono_requirement_records Kettle::Jem @@ -4719,7 +5159,7 @@

            Method List

          • -
          • +
          • main_gemfile_recording_eval_path Kettle::Jem @@ -4727,7 +5167,7 @@

            Method List

          • -
          • +
          • main_gemfile_recording_insertion_index Kettle::Jem @@ -4735,7 +5175,7 @@

            Method List

          • -
          • +
          • main_gemfile_templating_eval_line Kettle::Jem @@ -4743,7 +5183,7 @@

            Method List

          • -
          • +
          • managed_license_template_basename Kettle::Jem @@ -4751,7 +5191,7 @@

            Method List

          • -
          • +
          • markdown_heading_has_preserved_readme_ancestor? Kettle::Jem @@ -4759,7 +5199,7 @@

            Method List

          • -
          • +
          • markdown_heading_owners Kettle::Jem @@ -4767,7 +5207,7 @@

            Method List

          • -
          • +
          • markdown_inline_reference_owners Kettle::Jem::ReadmePostProcessor @@ -4775,7 +5215,7 @@

            Method List

          • -
          • +
          • markdown_link_definition_owners Kettle::Jem::ReadmePostProcessor @@ -4783,7 +5223,7 @@

            Method List

          • -
          • +
          • markdown_link_definition_source Kettle::Jem @@ -4791,7 +5231,7 @@

            Method List

          • -
          • +
          • markdown_link_reference_definition_line? Kettle::Jem @@ -4799,7 +5239,7 @@

            Method List

          • -
          • +
          • markdown_managed_block Kettle::Jem @@ -4807,7 +5247,7 @@

            Method List

          • -
          • +
          • markdown_section Kettle::Jem::TemplatingReport @@ -4815,7 +5255,7 @@

            Method List

          • -
          • +
          • markdown_sections Kettle::Jem @@ -4823,7 +5263,7 @@

            Method List

          • -
          • +
          • markdown_source_lines Kettle::Jem @@ -4831,6 +5271,14 @@

            Method List

          • +
          • +
            + markdown_structural_owners + Kettle::Jem::ReadmePostProcessor +
            +
          • + +
          • markdown_table_row_owners @@ -5015,6 +5463,22 @@

            Method List

          • +
          • +
            + merge_yaml_state + Kettle::Jem::TemplateChecksums +
            +
          • + + +
          • +
            + #metadata + Kettle::Jem::WriteIntent +
            +
          • + +
          • metadata_value @@ -5088,6 +5552,14 @@

            Method List

          • +
            + mkdir_p_core + Kettle::Jem +
            +
          • + + +
          • #mode Kettle::Jem::DecisionPolicy @@ -5095,7 +5567,7 @@

            Method List

          • -
          • +
          • #mode Kettle::Jem::PluginContext @@ -5103,7 +5575,7 @@

            Method List

          • -
          • +
          • monorepo_root_file_strategy Kettle::Jem @@ -5111,7 +5583,7 @@

            Method List

          • -
          • +
          • monorepo_root_gemfile_dependency_lines Kettle::Jem @@ -5119,7 +5591,7 @@

            Method List

          • -
          • +
          • monorepo_root_gemfile_dependency_sync_step Kettle::Jem @@ -5127,7 +5599,7 @@

            Method List

          • -
          • +
          • monorepo_root_profile? Kettle::Jem::Tasks::TemplateTask @@ -5135,7 +5607,7 @@

            Method List

          • -
          • +
          • monorepo_root_template_profile? Kettle::Jem @@ -5143,7 +5615,7 @@

            Method List

          • -
          • +
          • monorepo_subgem_kettle_config_profile_sync_step Kettle::Jem @@ -5151,7 +5623,7 @@

            Method List

          • -
          • +
          • monorepo_subgem_template_entries Kettle::Jem @@ -5159,7 +5631,7 @@

            Method List

          • -
          • +
          • monorepo_subgem_template_entries_for_profile Kettle::Jem @@ -5167,7 +5639,7 @@

            Method List

          • -
          • +
          • monorepo_subgem_template_profile? Kettle::Jem @@ -5175,7 +5647,7 @@

            Method List

          • -
          • +
          • monorepo_subgem_template_profile_value? Kettle::Jem @@ -5183,7 +5655,7 @@

            Method List

          • -
          • +
          • monorepo_template_profile? Kettle::Jem @@ -5191,6 +5663,14 @@

            Method List

          • +
          • +
            + monotonic_time + Kettle::Jem +
            +
          • + +
          • namespace_descendant? @@ -5217,13 +5697,21 @@

            Method List

          • + +
          • + + +
          • #non_interactive? Kettle::Jem::DecisionPolicy @@ -5231,7 +5719,7 @@

            Method List

          • -
          • +
          • non_mit_licenses? Kettle::Jem @@ -5239,7 +5727,7 @@

            Method List

          • -
          • +
          • normal_lockfile_env Kettle::Jem::Tasks::InstallTask @@ -5247,7 +5735,7 @@

            Method List

          • -
          • +
          • normalize_changelog Kettle::Jem @@ -5255,7 +5743,7 @@

            Method List

          • -
          • +
          • normalize_command Kettle::Jem::CLI @@ -5263,7 +5751,7 @@

            Method List

          • -
          • +
          • normalize_compatibility_badge_cell Kettle::Jem::ReadmePostProcessor @@ -5271,7 +5759,7 @@

            Method List

          • -
          • +
          • normalize_compatibility_rows Kettle::Jem::ReadmePostProcessor @@ -5279,7 +5767,7 @@

            Method List

          • -
          • +
          • normalize_conditional_body_indentation Kettle::Jem @@ -5287,7 +5775,7 @@

            Method List

          • -
          • +
          • normalize_eval_gemfile_ruby_bucket Kettle::Jem @@ -5295,7 +5783,7 @@

            Method List

          • -
          • +
          • normalize_gemspec_dependency_version_requirements Kettle::Jem @@ -5303,7 +5791,7 @@

            Method List

          • -
          • +
          • normalize_gemspec_grapheme Kettle::Jem::Tasks::InstallTask @@ -5311,7 +5799,7 @@

            Method List

          • -
          • +
          • normalize_gemspec_project_emoji Kettle::Jem @@ -5319,7 +5807,7 @@

            Method List

          • -
          • +
          • normalize_gemspec_receiver Kettle::Jem @@ -5327,7 +5815,7 @@

            Method List

          • -
          • +
          • normalize_generated_image_url Kettle::Jem @@ -5335,7 +5823,7 @@

            Method List

          • -
          • +
          • normalize_generated_rakefile Kettle::Jem @@ -5343,7 +5831,7 @@

            Method List

          • -
          • +
          • normalize_git_drivers_mode Kettle::Jem::Tasks::InstallTask @@ -5351,7 +5839,7 @@

            Method List

          • -
          • +
          • normalize_git_source_url Kettle::Jem @@ -5359,7 +5847,7 @@

            Method List

          • -
          • +
          • normalize_github_actions_exec_cmd Kettle::Jem @@ -5367,7 +5855,7 @@

            Method List

          • -
          • +
          • normalize_hook_templates_mode Kettle::Jem::Tasks::InstallTask @@ -5375,7 +5863,7 @@

            Method List

          • -
          • +
          • normalize_integration_name Kettle::Jem @@ -5383,7 +5871,7 @@

            Method List

          • -
          • +
          • normalize_kettle_jem_config Kettle::Jem @@ -5391,7 +5879,7 @@

            Method List

          • -
          • +
          • normalize_list_option Kettle::Jem @@ -5399,6 +5887,14 @@

            Method List

          • +
          • + +
          • + +
          • normalize_lockfile_step @@ -5409,7 +5905,7 @@

            Method List

          • @@ -5447,6 +5943,22 @@

            Method List

            +
          • + +
          • + + +
          • + +
          • + +
          • normalize_readme_h1_grapheme @@ -5561,15 +6073,47 @@

            Method List

          • - #on_phase - Kettle::Jem::PluginRegistrar + obsolete_local_gemfile_nomono_activation_records + Kettle::Jem +
            +
          • + + +
          • + +
          • + + +
          • + +
          • + + +
          • +
            + #on_phase + Kettle::Jem::PluginRegistrar +
            +
          • + + +
          • +
            + opencollective_disabled? + Kettle::Jem
          • @@ -5577,7 +6121,7 @@

            Method List

          • @@ -5585,7 +6129,7 @@

            Method List

          • @@ -5593,7 +6137,7 @@

            Method List

          • @@ -5601,7 +6145,7 @@

            Method List

          • @@ -5609,7 +6153,7 @@

            Method List

          • @@ -5617,7 +6161,7 @@

            Method List

          • @@ -5625,7 +6169,7 @@

            Method List

          • @@ -5633,7 +6177,7 @@

            Method List

          • @@ -5641,7 +6185,7 @@

            Method List

          • @@ -5649,8 +6193,8 @@

            Method List

          • - opencollective_policy - Kettle::Jem + #operations + Kettle::Jem::FileWorkUnit
          • @@ -5672,6 +6216,14 @@

            Method List

          • +
            + #outcome + Kettle::Jem::FileWorkUnit +
            +
          • + + +
          • outdent_line Kettle::Jem @@ -5679,7 +6231,7 @@

            Method List

          • -
          • +
          • outdent_source Kettle::Jem @@ -5687,7 +6239,7 @@

            Method List

          • -
          • +
          • package_runtime_dependency_names Kettle::Jem @@ -5695,7 +6247,7 @@

            Method List

          • -
          • +
          • packaged_gemfile_template_ruby_floor Kettle::Jem @@ -5703,7 +6255,7 @@

            Method List

          • -
          • +
          • packaged_template_root Kettle::Jem @@ -5711,7 +6263,7 @@

            Method List

          • -
          • +
          • paired_modular_gemfile_path Kettle::Jem @@ -5719,7 +6271,7 @@

            Method List

          • -
          • +
          • paperclip_ref Kettle::Jem @@ -5727,7 +6279,7 @@

            Method List

          • -
          • +
          • parse_blame_porcelain Kettle::Jem @@ -5735,7 +6287,7 @@

            Method List

          • -
          • +
          • parse_event_types Kettle::Jem @@ -5743,7 +6295,7 @@

            Method List

          • -
          • +
          • #parse_min_ruby Kettle::Jem::RubyGemsResolver @@ -5751,7 +6303,7 @@

            Method List

          • -
          • +
          • parse_options Kettle::Jem::CLI @@ -5759,7 +6311,7 @@

            Method List

          • -
          • +
          • parse_prompt_answers Kettle::Jem::DecisionPolicy @@ -5767,7 +6319,7 @@

            Method List

          • -
          • +
          • #phase Kettle::Jem::PluginRegistry::Hook @@ -5775,7 +6327,7 @@

            Method List

          • -
          • +
          • phase_for_recipe Kettle::Jem @@ -5783,7 +6335,7 @@

            Method List

          • -
          • +
          • #phase_reports Kettle::Jem::PluginContext @@ -5791,7 +6343,7 @@

            Method List

          • -
          • +
          • phase_reports_for Kettle::Jem @@ -5799,7 +6351,7 @@

            Method List

          • -
          • +
          • plan_project Kettle::Jem @@ -5807,7 +6359,7 @@

            Method List

          • -
          • +
          • plan_readme_style Kettle::Jem @@ -5815,7 +6367,7 @@

            Method List

          • -
          • +
          • plugin_handle Kettle::Jem::PluginLoader @@ -5823,7 +6375,7 @@

            Method List

          • -
          • +
          • plugin_lifecycle_diagnostic Kettle::Jem @@ -5831,7 +6383,7 @@

            Method List

          • -
          • +
          • #plugin_name Kettle::Jem::PluginRegistry::Hook @@ -5839,7 +6391,7 @@

            Method List

          • -
          • +
          • #plugin_name Kettle::Jem::PluginRegistrar @@ -5847,7 +6399,7 @@

            Method List

          • -
          • +
          • plugin_names_from_config Kettle::Jem @@ -5855,7 +6407,7 @@

            Method List

          • -
          • +
          • plugin_registry_for_project Kettle::Jem @@ -5863,7 +6415,7 @@

            Method List

          • -
          • +
          • plugin_require_path Kettle::Jem::PluginLoader @@ -5871,7 +6423,7 @@

            Method List

          • -
          • +
          • polyform_licenses? Kettle::Jem @@ -5879,7 +6431,7 @@

            Method List

          • -
          • +
          • post_apply_steps Kettle::Jem @@ -5887,7 +6439,7 @@

            Method List

          • -
          • +
          • post_template_project_fix_steps Kettle::Jem::Tasks::InstallTask @@ -5895,7 +6447,7 @@

            Method List

          • -
          • +
          • postprocess_readme_content Kettle::Jem @@ -5903,6 +6455,14 @@

            Method List

          • +
          • + +
          • + +
          • preferred_template_source @@ -6281,7 +6841,7 @@

            Method List

          • @@ -6289,7 +6849,7 @@

            Method List

          • @@ -6297,7 +6857,7 @@

            Method List

          • @@ -6305,13 +6865,21 @@

            Method List

          • + +
          • + + +
          • prune_orphaned_workflow_inline_references Kettle::Jem::ReadmePostProcessor @@ -6319,7 +6887,7 @@

            Method List

          • -
          • +
          • prune_readme_integration_badges Kettle::Jem @@ -6327,7 +6895,7 @@

            Method List

          • -
          • +
          • prune_unused_compatibility_reference_definitions Kettle::Jem::ReadmePostProcessor @@ -6335,7 +6903,7 @@

            Method List

          • -
          • +
          • prune_unused_readme_logo_link_definitions Kettle::Jem @@ -6343,7 +6911,7 @@

            Method List

          • -
          • +
          • prune_unwanted_bundler_binstubs Kettle::Jem::Tasks::InstallTask @@ -6351,7 +6919,7 @@

            Method List

          • -
          • +
          • prune_workflow_matrix_item? Kettle::Jem @@ -6359,7 +6927,7 @@

            Method List

          • -
          • +
          • quality_config_path? Kettle::Jem @@ -6367,7 +6935,7 @@

            Method List

          • -
          • +
          • quiet_command Kettle::Jem::Tasks::InstallTask @@ -6375,7 +6943,7 @@

            Method List

          • -
          • +
          • quiet_command_env Kettle::Jem::Tasks::InstallTask @@ -6383,14 +6951,6 @@

            Method List

          • -
          • -
            - quiet_gemspec_reader_load - Kettle::Jem -
            -
          • - -
          • rake_task_available? @@ -6505,7 +7065,135 @@

            Method List

          • +
          • + + +
          • +
            + readme_config_hash + Kettle::Jem +
            +
          • + + +
          • +
            + readme_copyright_notice + Kettle::Jem +
            +
          • + + +
          • + +
          • + + +
          • +
            + readme_corporate_sponsors + Kettle::Jem +
            +
          • + + +
          • + +
          • + + +
          • +
            + readme_corporate_sponsors_row + Kettle::Jem +
            +
          • + + +
          • +
            + readme_default_logo_width + Kettle::Jem +
            +
          • + + +
          • + +
          • + + +
          • +
            + readme_dev_test_stack_table + Kettle::Jem +
            +
          • + + +
          • +
            + readme_disabled_integrations + Kettle::Jem +
            +
          • + + +
          • + +
          • + + +
          • + +
          • + + +
          • +
            + readme_floss_funding_enabled? + Kettle::Jem +
            +
          • + + +
          • +
            + readme_fossa_project + Kettle::Jem +
            +
          • + + +
          • +
            + readme_fossa_template_tokens + Kettle::Jem +
            +
          • + + +
          • +
          • @@ -6513,15 +7201,15 @@

            Method List

          • - readme_copyright_notice - Kettle::Jem + readme_h1_grapheme + Kettle::Jem::Tasks::InstallTask
          • @@ -6529,7 +7217,7 @@

            Method List

          • @@ -6537,7 +7225,7 @@

            Method List

          • @@ -6545,7 +7233,7 @@

            Method List

          • @@ -6553,7 +7241,7 @@

            Method List

          • @@ -6561,7 +7249,7 @@

            Method List

          • @@ -6569,7 +7257,7 @@

            Method List

          • @@ -6577,7 +7265,7 @@

            Method List

          • @@ -6585,7 +7273,7 @@

            Method List

          • @@ -6593,7 +7281,7 @@

            Method List

          • @@ -6601,15 +7289,15 @@

            Method List

          • - readme_h1_grapheme - Kettle::Jem::Tasks::InstallTask + readme_logo_facts + Kettle::Jem
          • @@ -6617,7 +7305,7 @@

            Method List

          • @@ -6625,7 +7313,7 @@

            Method List

          • @@ -6633,7 +7321,7 @@

            Method List

          • @@ -6641,7 +7329,7 @@

            Method List

          • @@ -6649,7 +7337,7 @@

            Method List

          • @@ -6657,7 +7345,7 @@

            Method List

          • @@ -6665,7 +7353,7 @@

            Method List

          • @@ -6673,7 +7361,7 @@

            Method List

          • @@ -6681,7 +7369,7 @@

            Method List

          • @@ -6689,7 +7377,7 @@

            Method List

          • @@ -6697,7 +7385,7 @@

            Method List

          • @@ -6705,7 +7393,7 @@

            Method List

          • @@ -6713,7 +7401,7 @@

            Method List

          • @@ -6721,7 +7409,7 @@

            Method List

          • @@ -6729,7 +7417,7 @@

            Method List

          • @@ -6737,7 +7425,7 @@

            Method List

          • @@ -6745,7 +7433,7 @@

            Method List

          • @@ -6753,7 +7441,7 @@

            Method List

          • @@ -6761,7 +7449,7 @@

            Method List

          • @@ -6769,7 +7457,7 @@

            Method List

          • @@ -6777,7 +7465,7 @@

            Method List

          • @@ -6785,7 +7473,7 @@

            Method List

          • @@ -6793,7 +7481,7 @@

            Method List

          • @@ -6801,7 +7489,7 @@

            Method List

          • @@ -6809,7 +7497,7 @@

            Method List

          • @@ -6817,7 +7505,7 @@

            Method List

          • @@ -6825,7 +7513,7 @@

            Method List

          • @@ -6833,7 +7521,7 @@

            Method List

          • @@ -6841,7 +7529,7 @@

            Method List

          • @@ -6849,7 +7537,7 @@

            Method List

          • @@ -6857,7 +7545,7 @@

            Method List

          • @@ -6865,7 +7553,7 @@

            Method List

          • @@ -6873,7 +7561,7 @@

            Method List

          • @@ -6881,7 +7569,7 @@

            Method List

          • @@ -6889,23 +7577,23 @@

            Method List

          • - readme_top_logo_refs - Kettle::Jem + #recipe_name + Kettle::Jem::WriteIntent
          • - readme_top_logo_row - Kettle::Jem + #recipe_pack + Kettle::Jem::PluginContext
          • @@ -6913,7 +7601,7 @@

            Method List

          • @@ -6921,7 +7609,7 @@

            Method List

          • @@ -6929,7 +7617,7 @@

            Method List

          • @@ -6937,7 +7625,7 @@

            Method List

          • @@ -6945,7 +7633,7 @@

            Method List

          • @@ -6953,15 +7641,15 @@

            Method List

          • - recipe_default_action - Kettle::Jem + #recipe_reports + Kettle::Jem::PluginContext
          • - recipe_entry + recipe_run_stats Kettle::Jem
          • @@ -6969,7 +7657,7 @@

            Method List

          • @@ -6977,15 +7665,15 @@

            Method List

          • - #recipe_pack - Kettle::Jem::PluginContext + recipe_runtime_context + Kettle::Jem
          • @@ -6993,7 +7681,7 @@

            Method List

          • @@ -7001,7 +7689,7 @@

            Method List

          • @@ -7009,15 +7697,15 @@

            Method List

          • - #recipe_reports - Kettle::Jem::PluginContext + record_phase_timing + Kettle::Jem
          • @@ -7025,15 +7713,15 @@

            Method List

          • - recipe_run_stats_summary - Kettle::Jem + #record_template_result + Kettle::Jem::PluginHelpers
          • @@ -7041,47 +7729,47 @@

            Method List

          • - recipe_template_content - Kettle::Jem + #register + Kettle::Jem::PluginRegistry
          • - #record_template_result - Kettle::Jem::PluginHelpers + relative_or_absolute_path + Kettle::Jem::Tasks::InstallTask
          • - redundant_templating_guard_wrapper_node? - Kettle::Jem + #relative_path + Kettle::Jem::WriteIntent
          • - #register - Kettle::Jem::PluginRegistry + #relative_path + Kettle::Jem::FileWorkUnit
          • - relative_or_absolute_path - Kettle::Jem::Tasks::InstallTask + remove_badge_occurrences + Kettle::Jem::ReadmePostProcessor
          • - remove_badge_occurrences + remove_disabled_engine_content Kettle::Jem::ReadmePostProcessor
          • @@ -7089,15 +7777,15 @@

            Method List

          • - remove_disabled_engine_content - Kettle::Jem::ReadmePostProcessor + remove_duplicate_gemspec_assignments + Kettle::Jem
          • @@ -7105,7 +7793,7 @@

            Method List

          • @@ -7113,7 +7801,7 @@

            Method List

          • @@ -7121,7 +7809,7 @@

            Method List

          • @@ -7129,7 +7817,7 @@

            Method List

          • @@ -7137,7 +7825,7 @@

            Method List

          • @@ -7145,7 +7833,7 @@

            Method List

          • @@ -7153,7 +7841,7 @@

            Method List

          • @@ -7161,7 +7849,7 @@

            Method List

          • @@ -7169,7 +7857,7 @@

            Method List

          • @@ -7177,7 +7865,7 @@

            Method List

          • @@ -7185,7 +7873,7 @@

            Method List

          • @@ -7193,7 +7881,7 @@

            Method List

          • @@ -7201,24 +7889,24 @@

            Method List

          • - remove_git_attribute_managed_block - Kettle::Jem::Tasks::InstallTask + remove_incompatible_compatibility_badges + Kettle::Jem::ReadmePostProcessor
          • - remove_incompatible_compatibility_badges - Kettle::Jem::ReadmePostProcessor + remove_line_ranges + Kettle::Jem
          • @@ -7248,6 +7936,14 @@

            Method List

          • + +
          • + + +
          • remove_obsolete_simplecov_keep_destination_config Kettle::Jem @@ -7255,6 +7951,14 @@

            Method List

          • +
          • + +
          • + +
          • remove_readme_badge_and_refs @@ -7553,15 +8257,15 @@

            Method List

          • - replace_top_level_yaml_block - Kettle::Jem::TemplateChecksums + replace_yaml_node_lines + Kettle::Jem
          • @@ -7569,7 +8273,7 @@

            Method List

          • @@ -7577,7 +8281,7 @@

            Method List

          • @@ -7585,31 +8289,31 @@

            Method List

          • - replacement_for_supported_gemspec_files_assignment - Kettle::Jem + #report_detail + Kettle::Jem::PluginOutput
          • - #report_detail - Kettle::Jem::PluginOutput + report_path + Kettle::Jem::TemplatingReport
          • - report_path - Kettle::Jem::TemplatingReport + report_with_duration + Kettle::Jem
          • @@ -7617,7 +8321,7 @@

            Method List

          • @@ -7625,7 +8329,7 @@

            Method List

          • @@ -7633,7 +8337,7 @@

            Method List

          • @@ -7641,7 +8345,7 @@

            Method List

          • @@ -7649,7 +8353,7 @@

            Method List

          • @@ -7657,13 +8361,21 @@

            Method List

          • +
            + repository_root_url + Kettle::Jem +
            +
          • + + +
          • repository_topology_for Kettle::Jem @@ -7671,7 +8383,7 @@

            Method List

          • -
          • +
          • #require_clean Kettle::Jem::DecisionPolicy @@ -7679,7 +8391,7 @@

            Method List

          • -
          • +
          • required_ruby_version_rubocop_disable Kettle::Jem @@ -7687,7 +8399,7 @@

            Method List

          • -
          • +
          • #resolve Kettle::Jem::DecisionPolicy @@ -7695,7 +8407,7 @@

            Method List

          • -
          • +
          • resolve_template_tokens Kettle::Jem @@ -7703,7 +8415,7 @@

            Method List

          • -
          • +
          • resolve_uncommitted_author! Kettle::Jem @@ -7711,7 +8423,7 @@

            Method List

          • -
          • +
          • resolved_licenses Kettle::Jem @@ -7719,7 +8431,7 @@

            Method List

          • -
          • +
          • retired_gemspec_development_dependency_key? Kettle::Jem @@ -7727,7 +8439,7 @@

            Method List

          • -
          • +
          • rewrite_gemspec_version_loader Kettle::Jem @@ -7735,7 +8447,7 @@

            Method List

          • -
          • +
          • rewrite_markdown_reference_links Kettle::Jem @@ -7743,7 +8455,7 @@

            Method List

          • -
          • +
          • rewrite_yard_binstub Kettle::Jem::Tasks::InstallTask @@ -7751,7 +8463,7 @@

            Method List

          • -
          • +
          • rubocop_gradual_autocorrect_command Kettle::Jem::Tasks::InstallTask @@ -7759,7 +8471,7 @@

            Method List

          • -
          • +
          • rubocop_gradual_autocorrect_step Kettle::Jem::Tasks::InstallTask @@ -7767,7 +8479,7 @@

            Method List

          • -
          • +
          • rubocop_lts_local_branch_step Kettle::Jem::Tasks::InstallTask @@ -7775,7 +8487,7 @@

            Method List

          • -
          • +
          • rubocop_lts_local_root Kettle::Jem::Tasks::InstallTask @@ -7783,7 +8495,7 @@

            Method List

          • -
          • +
          • rubocop_target_ruby_token Kettle::Jem @@ -7791,7 +8503,7 @@

            Method List

          • -
          • +
          • rubocop_template_tokens Kettle::Jem @@ -7799,7 +8511,7 @@

            Method List

          • -
          • +
          • rubocop_tokens_for Kettle::Jem @@ -7807,7 +8519,7 @@

            Method List

          • -
          • +
          • ruby_appraisal_name_version Kettle::Jem @@ -7815,7 +8527,7 @@

            Method List

          • -
          • +
          • ruby_appraisal_names_below Kettle::Jem @@ -7823,7 +8535,7 @@

            Method List

          • -
          • +
          • ruby_array_literal Kettle::Jem @@ -7831,7 +8543,7 @@

            Method List

          • -
          • +
          • ruby_bucket_path_segment? Kettle::Jem @@ -7839,7 +8551,7 @@

            Method List

          • -
          • +
          • ruby_call_records Kettle::Jem @@ -7847,7 +8559,7 @@

            Method List

          • -
          • +
          • ruby_constant_path_segments Kettle::Jem @@ -7855,7 +8567,7 @@

            Method List

          • -
          • +
          • ruby_double_quoted_string_body Kettle::Jem @@ -7863,7 +8575,7 @@

            Method List

          • -
          • +
          • ruby_engines_config Kettle::Jem @@ -7871,7 +8583,7 @@

            Method List

          • -
          • +
          • ruby_entrypoint_module_namespace Kettle::Jem @@ -7879,7 +8591,7 @@

            Method List

          • -
          • +
          • ruby_entrypoint_module_namespace_for Kettle::Jem @@ -7887,7 +8599,7 @@

            Method List

          • -
          • +
          • ruby_first_simple_quoted_string_node Kettle::Jem @@ -7895,7 +8607,7 @@

            Method List

          • -
          • +
          • ruby_first_string_argument Kettle::Jem @@ -7903,7 +8615,7 @@

            Method List

          • -
          • +
          • ruby_keyword_argument_node Kettle::Jem @@ -7911,7 +8623,7 @@

            Method List

          • -
          • +
          • ruby_keyword_string_argument Kettle::Jem @@ -7919,7 +8631,7 @@

            Method List

          • -
          • +
          • ruby_local_word_array_assignments Kettle::Jem @@ -7927,7 +8639,7 @@

            Method List

          • -
          • +
          • ruby_merge_options Kettle::Jem @@ -7935,7 +8647,7 @@

            Method List

          • -
          • +
          • ruby_method_move_policy Kettle::Jem @@ -7943,7 +8655,7 @@

            Method List

          • -
          • +
          • ruby_minor_version Kettle::Jem::ReadmePostProcessor @@ -7951,7 +8663,7 @@

            Method List

          • -
          • +
          • ruby_multiline_word_array_source Kettle::Jem @@ -7959,7 +8671,7 @@

            Method List

          • -
          • +
          • ruby_node_source_end_line Kettle::Jem @@ -7967,7 +8679,7 @@

            Method List

          • -
          • +
          • ruby_project_version_constant_path? Kettle::Jem @@ -7975,7 +8687,7 @@

            Method List

          • -
          • +
          • ruby_project_version_embedded_statements? Kettle::Jem @@ -7983,7 +8695,7 @@

            Method List

          • -
          • +
          • ruby_project_version_interpolated_string_source Kettle::Jem @@ -7991,7 +8703,7 @@

            Method List

          • -
          • +
          • ruby_require_aliases Kettle::Jem @@ -7999,7 +8711,7 @@

            Method List

          • -
          • +
          • ruby_require_call? Kettle::Jem @@ -8007,7 +8719,7 @@

            Method List

          • -
          • +
          • ruby_simple_quoted_string_node? Kettle::Jem @@ -8015,7 +8727,7 @@

            Method List

          • -
          • +
          • ruby_static_interpolated_string_value Kettle::Jem @@ -8023,7 +8735,7 @@

            Method List

          • -
          • +
          • ruby_static_string_array_value Kettle::Jem @@ -8031,7 +8743,7 @@

            Method List

          • -
          • +
          • ruby_static_string_call_value Kettle::Jem @@ -8039,7 +8751,7 @@

            Method List

          • -
          • +
          • ruby_static_string_value Kettle::Jem @@ -8047,7 +8759,7 @@

            Method List

          • -
          • +
          • ruby_string_argument Kettle::Jem @@ -8055,7 +8767,7 @@

            Method List

          • -
          • +
          • ruby_string_argument_at Kettle::Jem @@ -8063,7 +8775,7 @@

            Method List

          • -
          • +
          • ruby_string_arguments Kettle::Jem @@ -8071,7 +8783,7 @@

            Method List

          • -
          • +
          • ruby_string_literal_content Kettle::Jem::Tasks::InstallTask @@ -8079,7 +8791,7 @@

            Method List

          • -
          • +
          • ruby_style_facts Kettle::Jem @@ -8087,7 +8799,7 @@

            Method List

          • -
          • +
          • ruby_style_template_tokens Kettle::Jem @@ -8095,7 +8807,7 @@

            Method List

          • -
          • +
          • ruby_template_policy_report Kettle::Jem @@ -8103,7 +8815,7 @@

            Method List

          • -
          • +
          • ruby_top_level_require? Kettle::Jem @@ -8111,7 +8823,7 @@

            Method List

          • -
          • +
          • ruby_top_level_require_records Kettle::Jem @@ -8119,7 +8831,7 @@

            Method List

          • -
          • +
          • ruby_version_class_eval_namespaces Kettle::Jem @@ -8127,7 +8839,7 @@

            Method List

          • -
          • +
          • ruby_version_constant_value Kettle::Jem @@ -8135,7 +8847,7 @@

            Method List

          • -
          • +
          • ruby_version_module_namespace Kettle::Jem @@ -8143,7 +8855,7 @@

            Method List

          • -
          • +
          • ruby_version_module_namespace_for Kettle::Jem @@ -8151,7 +8863,7 @@

            Method List

          • -
          • +
          • ruby_word_array_names Kettle::Jem @@ -8159,7 +8871,7 @@

            Method List

          • -
          • +
          • ruby_word_array_node? Kettle::Jem @@ -8167,7 +8879,7 @@

            Method List

          • -
          • +
          • ruby_word_array_nodes Kettle::Jem @@ -8175,7 +8887,7 @@

            Method List

          • -
          • +
          • ruby_word_array_records Kettle::Jem @@ -8183,7 +8895,7 @@

            Method List

          • -
          • +
          • #run Kettle::Jem::PluginRegistry @@ -8191,7 +8903,7 @@

            Method List

          • -
          • +
          • run Kettle::Jem::CLI @@ -8199,7 +8911,7 @@

            Method List

          • -
          • +
          • run Kettle::Jem::Tasks::InstallTask @@ -8207,7 +8919,7 @@

            Method List

          • -
          • +
          • run Kettle::Jem::Tasks::PrepareTask @@ -8215,7 +8927,7 @@

            Method List

          • -
          • +
          • run Kettle::Jem::Tasks::TemplateTask @@ -8223,7 +8935,7 @@

            Method List

          • -
          • +
          • run Kettle::Jem::Tasks::SelfTestTask @@ -8231,7 +8943,7 @@

            Method List

          • -
          • +
          • run_apply_phases Kettle::Jem @@ -8239,7 +8951,7 @@

            Method List

          • -
          • +
          • run_bundle_setup_commands Kettle::Jem::Tasks::InstallTask @@ -8247,7 +8959,7 @@

            Method List

          • -
          • +
          • run_command_step Kettle::Jem::Tasks::InstallTask @@ -8255,6 +8967,14 @@

            Method List

          • +
          • +
            + run_distinct_bundle_install_step + Kettle::Jem::Tasks::InstallTask +
            +
          • + +
          • run_system_command @@ -8289,13 +9009,21 @@

            Method List

          • - same_path? + same_bundle_env? Kettle::Jem::Tasks::InstallTask
          • +
            + same_path? + Kettle::Jem::Tasks::InstallTask +
            +
          • + + +
          • scoped_template_run? Kettle::Jem::CLI @@ -8303,7 +9031,7 @@

            Method List

          • -
          • +
          • score_and_divergence Kettle::Jem::Tasks::SelfTestTask @@ -8311,7 +9039,7 @@

            Method List

          • -
          • +
          • security_supported_version_token Kettle::Jem @@ -8319,7 +9047,7 @@

            Method List

          • -
          • +
          • #selected_action Kettle::Jem::DecisionEvaluation @@ -8327,7 +9055,7 @@

            Method List

          • -
          • +
          • selected_template_path? Kettle::Jem @@ -8335,7 +9063,7 @@

            Method List

          • -
          • +
          • selftest_threshold Kettle::Jem::Tasks::SelfTestTask @@ -8343,7 +9071,7 @@

            Method List

          • -
          • +
          • semantic_git_driver_attribute_updates Kettle::Jem::Tasks::InstallTask @@ -8351,7 +9079,7 @@

            Method List

          • -
          • +
          • semantic_readme_heading Kettle::Jem @@ -8359,7 +9087,7 @@

            Method List

          • -
          • +
          • set_template_file_strategy! Kettle::Jem @@ -8367,7 +9095,7 @@

            Method List

          • -
          • +
          • setup_command_env Kettle::Jem::Tasks::InstallTask @@ -8375,7 +9103,7 @@

            Method List

          • -
          • +
          • setup_execution_context Kettle::Jem @@ -8383,7 +9111,7 @@

            Method List

          • -
          • +
          • setup_guidance_diagnostic Kettle::Jem @@ -8391,7 +9119,7 @@

            Method List

          • -
          • +
          • setup_project Kettle::Jem @@ -8399,7 +9127,7 @@

            Method List

          • -
          • +
          • #severity Kettle::Jem::DecisionEvaluation @@ -8407,7 +9135,7 @@

            Method List

          • -
          • +
          • shield_token Kettle::Jem @@ -8415,7 +9143,7 @@

            Method List

          • -
          • +
          • shim_facts Kettle::Jem @@ -8423,7 +9151,7 @@

            Method List

          • -
          • +
          • shim_profile_cleanups Kettle::Jem @@ -8431,7 +9159,7 @@

            Method List

          • -
          • +
          • shim_replacement_namespace Kettle::Jem @@ -8439,7 +9167,7 @@

            Method List

          • -
          • +
          • shim_template_entries Kettle::Jem @@ -8447,7 +9175,7 @@

            Method List

          • -
          • +
          • shim_template_entries_for_config Kettle::Jem @@ -8455,7 +9183,7 @@

            Method List

          • -
          • +
          • shim_template_profile? Kettle::Jem @@ -8463,7 +9191,7 @@

            Method List

          • -
          • +
          • shim_template_tokens Kettle::Jem @@ -8471,7 +9199,7 @@

            Method List

          • -
          • +
          • shim_version_file_content Kettle::Jem @@ -8479,7 +9207,7 @@

            Method List

          • -
          • +
          • shunted_dependency_has_floor_compatible_version? Kettle::Jem @@ -8487,7 +9215,7 @@

            Method List

          • -
          • +
          • shunted_dependency_has_modular_override? Kettle::Jem @@ -8495,7 +9223,7 @@

            Method List

          • -
          • +
          • shunted_effective_floor Kettle::Jem @@ -8503,7 +9231,7 @@

            Method List

          • -
          • +
          • shunted_gemfile_block Kettle::Jem @@ -8511,7 +9239,7 @@

            Method List

          • -
          • +
          • shunted_gemfile_managed_block Kettle::Jem @@ -8519,7 +9247,7 @@

            Method List

          • -
          • +
          • sibling_workspace_root Kettle::Jem::TemplatingReport @@ -8527,6 +9255,14 @@

            Method List

          • +
          • +
            + simplecov_bootstrap_call_node? + Kettle::Jem +
            +
          • + +
          • simplecov_config_require_call_node? @@ -8593,7 +9329,7 @@

            Method List

          • @@ -8601,7 +9337,7 @@

            Method List

          • @@ -8609,7 +9345,7 @@

            Method List

          • @@ -8617,7 +9353,7 @@

            Method List

          • @@ -8625,7 +9361,7 @@

            Method List

          • @@ -8633,7 +9369,7 @@

            Method List

          • @@ -8641,7 +9377,7 @@

            Method List

          • @@ -8649,7 +9385,7 @@

            Method List

          • @@ -8657,7 +9393,7 @@

            Method List

          • @@ -8665,7 +9401,7 @@

            Method List

          • @@ -8673,13 +9409,21 @@

            Method List

          • + +
          • + + +
          • snapshot Kettle::Jem::TemplatingReport @@ -8687,7 +9431,7 @@

            Method List

          • -
          • +
          • snapshot_changed_files Kettle::Jem @@ -8695,7 +9439,7 @@

            Method List

          • -
          • +
          • social_facts Kettle::Jem @@ -8703,7 +9447,7 @@

            Method List

          • -
          • +
          • social_template_tokens Kettle::Jem @@ -8711,7 +9455,7 @@

            Method List

          • -
          • +
          • social_token_value Kettle::Jem @@ -8719,7 +9463,7 @@

            Method List

          • -
          • +
          • sort_runtime_gemspec_dependency_lines Kettle::Jem @@ -8727,7 +9471,7 @@

            Method List

          • -
          • +
          • #source Kettle::Jem::DecisionEvaluation @@ -8735,7 +9479,7 @@

            Method List

          • -
          • +
          • source_blob_url Kettle::Jem @@ -8743,7 +9487,7 @@

            Method List

          • -
          • +
          • source_label Kettle::Jem::TemplatingReport @@ -8751,7 +9495,7 @@

            Method List

          • -
          • +
          • source_tree_url Kettle::Jem @@ -8759,7 +9503,7 @@

            Method List

          • -
          • +
          • spdx_basename Kettle::Jem @@ -8767,7 +9511,7 @@

            Method List

          • -
          • +
          • spdx_from_basename Kettle::Jem @@ -8775,7 +9519,7 @@

            Method List

          • -
          • +
          • spec_helper_simplecov_do_cov_bootstrap_source Kettle::Jem @@ -8783,7 +9527,7 @@

            Method List

          • -
          • +
          • stale_generated_gemspec_files_group? Kettle::Jem @@ -8791,7 +9535,7 @@

            Method List

          • -
          • +
          • stale_generated_gemspec_splat_key? Kettle::Jem @@ -8799,7 +9543,7 @@

            Method List

          • -
          • +
          • stale_github_workflow_template_pin_records Kettle::Jem @@ -8807,7 +9551,7 @@

            Method List

          • -
          • +
          • stale_versioned_engine_workflow? Kettle::Jem @@ -8815,7 +9559,7 @@

            Method List

          • -
          • +
          • standard_test_appraisal_names Kettle::Jem @@ -8823,7 +9567,7 @@

            Method List

          • -
          • +
          • static_gemspec_metadata_assignment Kettle::Jem @@ -8831,7 +9575,7 @@

            Method List

          • -
          • +
          • static_gemspec_metadata_key_assigned? Kettle::Jem @@ -8839,7 +9583,7 @@

            Method List

          • -
          • +
          • static_project_gemspec_metadata Kettle::Jem @@ -8847,7 +9591,7 @@

            Method List

          • -
          • +
          • step_event_mark Kettle::Jem @@ -8855,7 +9599,7 @@

            Method List

          • -
          • +
          • step_report_metadata Kettle::Jem @@ -8863,7 +9607,7 @@

            Method List

          • -
          • +
          • stringify_template_tokens Kettle::Jem @@ -8871,7 +9615,7 @@

            Method List

          • -
          • +
          • strip_inherited_bundler_activation! Kettle::Jem::Tasks::InstallTask @@ -8879,7 +9623,7 @@

            Method List

          • -
          • +
          • strip_leading_decorative_graphemes Kettle::Jem @@ -8887,7 +9631,7 @@

            Method List

          • -
          • +
          • strip_leading_decorative_graphemes Kettle::Jem::Tasks::InstallTask @@ -8895,7 +9639,7 @@

            Method List

          • -
          • +
          • strip_orphaned_rake_task_requires Kettle::Jem @@ -8903,7 +9647,7 @@

            Method List

          • -
          • +
          • strip_readme_heading_adornment Kettle::Jem @@ -8911,7 +9655,7 @@

            Method List

          • -
          • +
          • summary Kettle::Jem::TemplateChecksums @@ -8919,7 +9663,7 @@

            Method List

          • -
          • +
          • summary Kettle::Jem::SelfTest::Reporter @@ -8927,7 +9671,7 @@

            Method List

          • -
          • +
          • symbolize_keys Kettle::Jem::DecisionPolicy @@ -8935,7 +9679,7 @@

            Method List

          • -
          • +
          • sync_kettle_config_documentation_comments Kettle::Jem @@ -8943,7 +9687,7 @@

            Method List

          • -
          • +
          • sync_kettle_config_env_overrides Kettle::Jem @@ -8951,7 +9695,7 @@

            Method List

          • -
          • +
          • sync_kettle_config_gemspec_strategy_lines! Kettle::Jem @@ -8959,7 +9703,7 @@

            Method List

          • -
          • +
          • sync_kettle_config_internal_values Kettle::Jem @@ -8967,7 +9711,7 @@

            Method List

          • -
          • +
          • sync_kettle_config_monorepo_subgem_profile Kettle::Jem @@ -8975,7 +9719,7 @@

            Method List

          • -
          • +
          • sync_readme_gemspec_grapheme Kettle::Jem::Tasks::InstallTask @@ -8983,7 +9727,7 @@

            Method List

          • -
          • +
          • sync_readme_top_logos_documentation_comment Kettle::Jem @@ -8991,7 +9735,7 @@

            Method List

          • -
          • +
          • synchronize_github_actions_ci Kettle::Jem @@ -8999,7 +9743,7 @@

            Method List

          • -
          • +
          • synchronize_github_actions_coverage_ci Kettle::Jem @@ -9007,7 +9751,7 @@

            Method List

          • -
          • +
          • synchronize_github_actions_framework_ci Kettle::Jem @@ -9015,7 +9759,7 @@

            Method List

          • -
          • +
          • synchronize_github_actions_framework_gemfile Kettle::Jem @@ -9023,7 +9767,7 @@

            Method List

          • -
          • +
          • synchronize_github_actions_workflow_snippets Kettle::Jem @@ -9031,7 +9775,7 @@

            Method List

          • -
          • +
          • synchronize_github_funding_yml Kettle::Jem @@ -9039,7 +9783,7 @@

            Method List

          • -
          • +
          • synchronize_managed_block Kettle::Jem @@ -9047,7 +9791,7 @@

            Method List

          • -
          • +
          • synchronize_readme Kettle::Jem @@ -9055,7 +9799,7 @@

            Method List

          • -
          • +
          • template_activation_config Kettle::Jem @@ -9063,7 +9807,7 @@

            Method List

          • -
          • +
          • template_diff_section Kettle::Jem::TemplatingReport @@ -9071,7 +9815,7 @@

            Method List

          • -
          • +
          • template_entries Kettle::Jem @@ -9079,7 +9823,7 @@

            Method List

          • -
          • +
          • template_entry_apply? Kettle::Jem @@ -9087,7 +9831,7 @@

            Method List

          • -
          • +
          • template_entry_paths Kettle::Jem @@ -9095,7 +9839,7 @@

            Method List

          • -
          • +
          • template_file_strategy_config Kettle::Jem @@ -9103,7 +9847,7 @@

            Method List

          • -
          • +
          • template_file_type Kettle::Jem @@ -9111,7 +9855,7 @@

            Method List

          • -
          • +
          • template_inventory_entries Kettle::Jem @@ -9119,7 +9863,7 @@

            Method List

          • -
          • +
          • template_inventory_target_path Kettle::Jem @@ -9127,7 +9871,7 @@

            Method List

          • -
          • +
          • template_keep_destination_path? Kettle::Jem @@ -9135,7 +9879,7 @@

            Method List

          • -
          • +
          • template_legacy_destination_cleanups Kettle::Jem @@ -9143,7 +9887,7 @@

            Method List

          • -
          • +
          • template_manifest Kettle::Jem @@ -9151,7 +9895,7 @@

            Method List

          • -
          • +
          • template_obsolete_license_cleanups Kettle::Jem @@ -9159,7 +9903,7 @@

            Method List

          • -
          • +
          • template_pattern_strategy_config Kettle::Jem @@ -9167,7 +9911,7 @@

            Method List

          • -
          • +
          • template_root Kettle::Jem @@ -9175,7 +9919,7 @@

            Method List

          • -
          • +
          • template_root_path Kettle::Jem @@ -9183,7 +9927,7 @@

            Method List

          • -
          • +
          • template_runtime_config Kettle::Jem @@ -9191,7 +9935,7 @@

            Method List

          • -
          • +
          • template_selection_for Kettle::Jem @@ -9199,6 +9943,14 @@

            Method List

          • +
          • + +
          • + +
          • template_source_display_path @@ -9263,6 +10015,22 @@

            Method List

          • +
          • +
            + templating_bootstrap_command + Kettle::Jem::Tasks::PrepareTask +
            +
          • + + +
          • +
            + templating_bootstrap_step_name + Kettle::Jem::Tasks::PrepareTask +
            +
          • + +
          • templating_guard_records @@ -9271,6 +10039,22 @@

            Method List

          • +
          • +
            + templating_run_options + Kettle::Jem::Tasks::TemplateTask +
            +
          • + + +
          • +
            + timed_recipe_report + Kettle::Jem +
            +
          • + +
          • #timing @@ -9688,6 +10472,46 @@

            Method List

          • +
            + with_readme_timing + Kettle::Jem +
            +
          • + + +
          • +
            + with_readme_timing_context + Kettle::Jem +
            +
          • + + +
          • +
            + worker_or_strategy_option_provided? + Kettle::Jem::Tasks::TemplateTask +
            +
          • + + +
          • +
            + worker_safe_recipe? + Kettle::Jem +
            +
          • + + +
          • +
            + worker_safe_recipe_payload + Kettle::Jem +
            +
          • + + +
          • workflow_definition_base_url Kettle::Jem::ReadmePostProcessor @@ -9695,7 +10519,7 @@

            Method List

          • -
          • +
          • workflow_job_env_existing_keys Kettle::Jem @@ -9703,7 +10527,7 @@

            Method List

          • -
          • +
          • workflow_matrix_env_indent Kettle::Jem @@ -9711,7 +10535,7 @@

            Method List

          • -
          • +
          • workflow_matrix_env_insert_index Kettle::Jem @@ -9719,7 +10543,7 @@

            Method List

          • -
          • +
          • workflow_recipe_slug Kettle::Jem @@ -9727,7 +10551,7 @@

            Method List

          • -
          • +
          • workflow_references Kettle::Jem::ReadmePostProcessor @@ -9735,7 +10559,7 @@

            Method List

          • -
          • +
          • wrap_ruby_namespace Kettle::Jem @@ -9743,7 +10567,7 @@

            Method List

          • -
          • +
          • write Kettle::Jem::TemplatingReport @@ -9751,6 +10575,14 @@

            Method List

          • +
          • +
            + #write? + Kettle::Jem::WriteIntent +
            +
          • + +
          • write_consolidated_version_signature @@ -9775,6 +10607,22 @@

            Method List

          • +
          • + +
          • + + +
          • +
            + write_intents_for_phase + Kettle::Jem +
            +
          • + +
          • write_report @@ -9857,7 +10705,7 @@

            Method List

          • @@ -9865,7 +10713,7 @@

            Method List

          • @@ -9873,7 +10721,7 @@

            Method List

          • @@ -9881,7 +10729,7 @@

            Method List

          • @@ -9889,7 +10737,7 @@

            Method List

          • @@ -9897,13 +10745,21 @@

            Method List

          • +
            + yaml_scalar_path_entries + Kettle::Jem +
            +
          • + + +
          • yaml_scalar_sequence_at_path Kettle::Jem @@ -9911,6 +10767,14 @@

            Method List

          • +
          • +
            + yaml_state_node_range + Kettle::Jem::TemplateChecksums +
            +
          • + +
          • yaml_top_level_key_lines diff --git a/gems/kettle-jem/docs/top-level-namespace.html b/gems/kettle-jem/docs/top-level-namespace.html index a0264fc3f..eaf63ce13 100644 --- a/gems/kettle-jem/docs/top-level-namespace.html +++ b/gems/kettle-jem/docs/top-level-namespace.html @@ -102,7 +102,7 @@

            Defined Under Namespace

            diff --git a/gems/kettle-jem/exe/kettle-jem b/gems/kettle-jem/exe/kettle-jem index c112fd07d..1197af653 100755 --- a/gems/kettle-jem/exe/kettle-jem +++ b/gems/kettle-jem/exe/kettle-jem @@ -1,6 +1,20 @@ #!/usr/bin/env ruby # frozen_string_literal: true -require_relative "../lib/kettle-jem" +script_basename = File.basename(__FILE__) +repo_lib = File.expand_path("../lib", __dir__) +$LOAD_PATH.unshift(repo_lib) if File.directory?(repo_lib) && !$LOAD_PATH.include?(repo_lib) + +require "kettle/jem/version" + +if ARGV.first == "version" || ARGV.any? { |arg| arg == "-v" || arg == "--version" } + puts Kettle::Jem::Version::VERSION + exit(0) +end + +require "kettle-jem" + +machine_output = ARGV.any? { |arg| arg == "--json" || arg.start_with?("--events") } +puts "== #{script_basename} v#{Kettle::Jem::Version::VERSION} ==" if ARGV.include?("--verbose") && !machine_output exit(Kettle::Jem::CLI.run(ARGV, env: ENV, out: $stdout, err: $stderr)) diff --git a/gems/kettle-jem/gemfiles/modular/coverage.gemfile b/gems/kettle-jem/gemfiles/modular/coverage.gemfile index 52d737872..8c3394dcf 100644 --- a/gems/kettle-jem/gemfiles/modular/coverage.gemfile +++ b/gems/kettle-jem/gemfiles/modular/coverage.gemfile @@ -7,7 +7,7 @@ if ENV.fetch("KETTLE_DEV_DEV", "false").casecmp("false").zero? # Coverage (remote/released) platform :mri do - gem "kettle-soup-cover", "~> 3.0", ">= 3.0.3", require: false + gem "kettle-soup-cover", "~> 3.0", ">= 3.0.5", require: false end else eval_gemfile "coverage_local.gemfile" diff --git a/gems/kettle-jem/gemfiles/modular/coverage_local.gemfile b/gems/kettle-jem/gemfiles/modular/coverage_local.gemfile index 82f4fd823..6c5613b96 100644 --- a/gems/kettle-jem/gemfiles/modular/coverage_local.gemfile +++ b/gems/kettle-jem/gemfiles/modular/coverage_local.gemfile @@ -17,7 +17,8 @@ platform :mri do path_env: "KETTLE_DEV_DEV", vendored_gems_env: "VENDORED_GEMS", vendor_gem_dir_env: "VENDOR_GEM_DIR", - debug_env: "KETTLE_DEV_DEBUG" + debug_env: "KETTLE_DEV_DEBUG", + root: ["src", "my", "kettle-dev"] ) if ENV.fetch("GALTZO_FLOSS_DEV", "false").casecmp("false") != 0 diff --git a/gems/kettle-jem/gemfiles/modular/documentation.gemfile b/gems/kettle-jem/gemfiles/modular/documentation.gemfile index d8215416e..33ac70262 100644 --- a/gems/kettle-jem/gemfiles/modular/documentation.gemfile +++ b/gems/kettle-jem/gemfiles/modular/documentation.gemfile @@ -12,6 +12,7 @@ gem "kramdown-parser-gfm", "~> 1.1", require: false # Ruby >= 2.3 gem "yaml-converter", "~> 0.2", ">= 0.2.3", require: false # Ruby >= 3.2 gem "yard", "~> 0.9", ">= 0.9.45", require: false gem "yard-junk", "~> 0.1", ">= 0.1.0", require: false # Ruby >= 3.1 +gem "yard-lint", "~> 1.10", ">= 1.10.2", require: false # Ruby >= 3.2 gem "yard-relative_markdown_links", "~> 0.6", require: false if ENV.fetch("GALTZO_FLOSS_DEV", "false").casecmp("false").zero? diff --git a/gems/kettle-jem/gemfiles/modular/templating.gemfile b/gems/kettle-jem/gemfiles/modular/templating.gemfile index d5b61b88e..e60661a46 100644 --- a/gems/kettle-jem/gemfiles/modular/templating.gemfile +++ b/gems/kettle-jem/gemfiles/modular/templating.gemfile @@ -10,7 +10,7 @@ end if kettle_remote # Template/plugin checks for released installs. - gem "kettle-drift", "~> 1.0", ">= 1.0.6", require: false + gem "kettle-drift", "~> 1.0", ">= 1.0.7", require: false end # Set STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local development with path-based dependencies. diff --git a/gems/kettle-jem/gemfiles/modular/templating_local.gemfile b/gems/kettle-jem/gemfiles/modular/templating_local.gemfile index fb4125eb0..321314a0c 100644 --- a/gems/kettle-jem/gemfiles/modular/templating_local.gemfile +++ b/gems/kettle-jem/gemfiles/modular/templating_local.gemfile @@ -65,7 +65,8 @@ platform :mri do path_env: "KETTLE_DEV_DEV", vendored_gems_env: "VENDORED_GEMS", vendor_gem_dir_env: "VENDOR_GEM_DIR", - debug_env: "KETTLE_DEV_DEBUG" + debug_env: "KETTLE_DEV_DEBUG", + root: ["src", "my", "kettle-dev"] ) end end diff --git a/gems/kettle-jem/kettle-jem.gemspec b/gems/kettle-jem/kettle-jem.gemspec index f378e6c7d..bf6100719 100644 --- a/gems/kettle-jem/kettle-jem.gemspec +++ b/gems/kettle-jem/kettle-jem.gemspec @@ -96,10 +96,13 @@ Gem::Specification.new do |spec| spec.add_dependency("dotenv-merge", "= #{spec.version}") # ruby >= 4.0.0 spec.add_dependency("json-merge", "= #{spec.version}") # ruby >= 4.0.0 spec.add_dependency("kettle-dev", "~> 2.3", ">= 2.3.5") # ruby >= 2.3.0 + spec.add_dependency("kettle-gha-pins", "~> 0.3", ">= 0.3.1") # ruby >= 2.4.0 + spec.add_dependency("kettle-ndjson", "~> 0.1", ">= 0.1.1") # ruby >= 2.4.0 spec.add_dependency("kettle-rb", "~> 0.1", ">= 0.1.4") # ruby >= 1.8.7 spec.add_dependency("kramdown-merge", "= #{spec.version}") # ruby >= 4.0.0 spec.add_dependency("markdown-merge", "= #{spec.version}") # ruby >= 4.0.0 spec.add_dependency("markly-merge", "= #{spec.version}") # ruby >= 4.0.0 + spec.add_dependency("parslet", "~> 2.0") # ruby >= 2.6.0 spec.add_dependency("prism-merge", "= #{spec.version}") # ruby >= 4.0.0 spec.add_dependency("psych-merge", "= #{spec.version}") # ruby >= 4.0.0 spec.add_dependency("rbs", ">= 3.10") # ruby >= 3.1.0 @@ -134,18 +137,20 @@ Gem::Specification.new do |spec| spec.add_development_dependency("require_bench", "~> 1.0", ">= 1.0.4") # ruby >= 2.2.0 # Testing + # Loads version files in anonymous namespaces for coverage without constant redefinition warnings. + spec.add_development_dependency("anonymous_loader", "~> 0.1", ">= 0.1.3") # ruby >= 2.2.0 spec.add_development_dependency("appraisal2", "~> 3.2", ">= 3.2.0") # ruby >= 1.8.7, for testing against multiple versions of dependencies - spec.add_development_dependency("kettle-test", "~> 2.0", ">= 2.0.12") # ruby >= 4.0.0 - spec.add_development_dependency("turbo_tests2", "~> 3.2", ">= 3.2.0") # ruby >= 2.4.0, default kettle-test runner + spec.add_development_dependency("kettle-test", "~> 2.0", ">= 2.0.15") # ruby >= 4.0.0 + spec.add_development_dependency("turbo_tests2", "~> 3.2", ">= 3.2.2") # ruby >= 2.4.0, default kettle-test runner # Releasing spec.add_development_dependency("ruby-progressbar", "~> 1.13") # ruby >= 0 - spec.add_development_dependency("stone_checksums", "~> 1.0", ">= 1.0.6") # ruby >= 2.2.0 + spec.add_development_dependency("stone_checksums", "~> 1.0", ">= 1.0.7") # ruby >= 2.2.0 # Development tasks # The cake is a lie. erb v2.2, the oldest release, was never compatible with Ruby 2.3. # This means we have no choice but to use the erb that shipped with Ruby 2.3 # /opt/hostedtoolcache/Ruby/2.3.8/x64/lib/ruby/gems/2.3.0/gems/erb-2.2.2/lib/erb.rb:670:in `prepare_trim_mode': undefined method `match?' for "-":String (NoMethodError) # spec.add_development_dependency("erb", ">= 2.2") # ruby >= 2.3.0, not SemVer, old rubies get dropped in a patch. - spec.add_development_dependency("gitmoji-regex", "~> 2.0", ">= 2.0.4") # ruby >= 2.4 + spec.add_development_dependency("gitmoji-regex", "~> 2.0", ">= 2.0.6") # ruby >= 2.4 end diff --git a/gems/kettle-jem/lib/kettle/jem.rb b/gems/kettle-jem/lib/kettle/jem.rb index 48da0ab50..9f0162602 100644 --- a/gems/kettle-jem/lib/kettle/jem.rb +++ b/gems/kettle-jem/lib/kettle/jem.rb @@ -7,6 +7,7 @@ require "json" require "net/http" require "open3" +require "parslet" require "rbconfig" require "time" require "uri" @@ -14,6 +15,8 @@ require "token/resolver" require "yaml" require "ast/merge" +require "ast/crispr/markdown/markly" +require "kettle/ndjson" require "rbs" require "kettle/dev" require "kettle/rb/compat_matrix" @@ -33,6 +36,8 @@ class Error < StandardError; end CONTENT_RECIPE_TRANSPORT_VERSION = Ast::Merge::STRUCTURED_EDIT_TRANSPORT_VERSION KETTLE_CONFIG_PATH = ".structuredmerge/kettle-jem.yml" LEGACY_KETTLE_CONFIG_PATH = ".kettle-jem.yml" + KETTLE_LOCK_PATH = ".structuredmerge/kettle-jem.lock" + LEGACY_KETTLE_LOCK_PATH = ".kettle-jem.lock" MANAGED_BLOCK_OPEN = "# <> do not edit below this line" MANAGED_BLOCK_CLOSE = "# <>" GEMSPEC_DEPENDENCY_MINIMUM_REQUIREMENTS = { @@ -133,9 +138,11 @@ class Error < StandardError; end "Rakefile", ".rspec", ".simplecov", + ".yard-lint.yml", ".yardignore", ".yardopts", "bin/setup", + "spec/README.md", "spec/spec_helper.rb" ] + PACKAGED_MODULAR_GEMFILE_TEMPLATE_ENTRIES ).freeze @@ -173,6 +180,7 @@ class Error < StandardError; end "Appraisals", "Guardfile", ".simplecov", + ".yard-lint.yml", ".yardignore", ".yardopts", ".github/FUNDING.yml", @@ -380,6 +388,12 @@ class Error < StandardError; end CHANGELOG_TRANSFER_KEY_SEPARATOR = /\s+-\s+/ CHANGELOG_TRANSFER_KEY_PATTERN = /\Akettle-jem-template-\d{8}-\d{3}\z/ CHANGELOG_TRANSFER_KEY_SCAN_PATTERN = /\bkettle-jem-template-\d{8}-\d{3}\b/ + CHANGELOG_INITIAL_TEMPLATE_KEY = "kettle-jem-template-initial" + CHANGELOG_INITIAL_TEMPLATE_ENTRY = { + key: CHANGELOG_INITIAL_TEMPLATE_KEY, + section: "### Added", + lines: ["- #{CHANGELOG_INITIAL_TEMPLATE_KEY} - Initial templating by kettle-jem."] + }.freeze README_KLOC_BADGE_PATTERN = /(\[🧮kloc-img\]:\s*https?:\/\/img\.shields\.io\/badge\/KLOC-)(\d+(?:\.\d+)?)(-[^\s]*)/ CHANGELOG_COVERAGE_KLOC_PATTERN = /-\s*COVERAGE:\s*.+--\s*\d+\/(\d+)\s+lines/i RUBY_TEMPLATE_BASENAMES = %w[Gemfile Rakefile Appraisals Appraisal.root.gemfile .simplecov].freeze @@ -404,6 +418,7 @@ class Error < StandardError; end KJ|LICENSE_EYE:MODE KJ|LICENSE_EYE:PRIMARY_SPDX KJ|LOCAL_GEMFILE_NOMONO_BOOTSTRAP + KJ|MAIN_GEMFILE_KETTLE_FAMILY_GEM KJ|MAIN_GEMFILE_DIRECT_SIBLING_BLOCK KJ|MAIN_GEMFILE_NOMONO_BOOTSTRAP KJ|MIN_DIVERGENCE_THRESHOLD @@ -689,6 +704,18 @@ def normalize_severity(value) end end + class TransferChangelogLineParser < Parslet::Parser + rule(:space) { match('\s') } + rule(:digit) { match("[0-9]") } + rule(:date) { digit.repeat(8, 8).as(:date) } + rule(:sequence) { digit.repeat(3, 3).as(:sequence) } + rule(:key) { (str("kettle-jem-template-") >> date >> str("-") >> sequence).as(:key) } + rule(:separator) { space.repeat(1) >> str("-") >> space.repeat(1) } + rule(:message) { any.repeat(1).as(:message) } + rule(:entry) { key >> separator >> message >> any.absent? } + root(:entry) + end + module ReadmePostProcessor module_function @@ -1687,10 +1714,70 @@ def outcome end end + class ChecksumMode + VALID_TOKENS = %w[dest template ignore-dest ignore-template off].freeze + DEFAULT = "template,ignore-dest" + + attr_reader :tokens + + def self.parse(value) + new(value) + end + + def initialize(value) + raw_tokens = value.to_s.strip.empty? ? DEFAULT.split(",") : value.to_s.split(",") + normalized = raw_tokens.map { |token| token.to_s.strip.downcase }.reject(&:empty?) + normalized = DEFAULT.split(",") if normalized.empty? + unknown = normalized - VALID_TOKENS + raise ArgumentError, "unknown --checksums mode(s): #{unknown.join(", ")}" unless unknown.empty? + + if normalized.include?("off") + raise ArgumentError, "--checksums=off cannot be combined with other checksum modes" if normalized.length > 1 + + @tokens = ["off"] + return + end + + normalized << "template" if normalized.include?("dest") && !normalized.include?("ignore-template") && !normalized.include?("template") + normalized << "ignore-dest" if normalized.include?("template") && !normalized.include?("dest") && !normalized.include?("ignore-dest") + if normalized.include?("dest") && normalized.include?("ignore-dest") + raise ArgumentError, "--checksums cannot combine dest and ignore-dest" + end + if normalized.include?("template") && normalized.include?("ignore-template") + raise ArgumentError, "--checksums cannot combine template and ignore-template" + end + if normalized.include?("ignore-dest") && normalized.include?("ignore-template") + raise ArgumentError, "--checksums=ignore-dest,ignore-template is equivalent to off; use --checksums=off" + end + + @tokens = normalized.uniq + end + + def off? + tokens.include?("off") + end + + def check_template? + !off? && tokens.include?("template") + end + + def check_destination? + !off? && tokens.include?("dest") + end + + def to_s + tokens.join(",") + end + end + module TemplateChecksums YAML_KEY = "kettle-jem" CHECKSUMS_SUBKEY = "checksums" VERSION_SUBKEY = "version" + APPLIED_AT_SUBKEY = "applied_at" + CHANGELOG_REPLAY_SUBKEY = "changelog_replay" + LAST_ENTRY_KEY_SUBKEY = "last_entry_key" + LAST_ENTRY_DATE_SUBKEY = "last_entry_date" module_function @@ -1709,14 +1796,36 @@ def compute(template_root:) def load_stored(config_path:) return {} unless File.exist?(config_path.to_s) - data = YAML.safe_load_file(config_path.to_s, permitted_classes: [], aliases: false) - entry = data.is_a?(Hash) ? data[YAML_KEY] : nil + entry = load_state(config_path: config_path) stored = entry.is_a?(Hash) ? entry[CHECKSUMS_SUBKEY] : nil stored.is_a?(Hash) ? stored : {} rescue {} end + def load_state(config_path:) + return {} unless File.exist?(config_path.to_s) + + data = YAML.safe_load_file(config_path.to_s, permitted_classes: [], aliases: false) + entry = data.is_a?(Hash) ? data[YAML_KEY] : nil + entry.is_a?(Hash) ? entry : {} + rescue + {} + end + + def remove_from_config(config_path:) + return false unless File.exist?(config_path.to_s) + + content = File.read(config_path.to_s) + range = yaml_state_node_range(content) + return false unless range + + lines = content.to_s.lines + updated = [*lines[0...range.begin], *lines[range.end..].to_a].join + File.write(config_path.to_s, updated.gsub(/\n{3,}/, "\n\n")) + true + end + def diff(current:, stored:) current_keys = current.keys.to_set stored_keys = stored.keys.to_set @@ -1751,46 +1860,163 @@ def detail_lines(diff) ] end - def build_yaml_block(checksums:, version: nil) + def build_yaml_block(checksums:, version: nil, applied_at: nil, changelog_replay: nil) lines = [YAML_KEY] lines[0] = "#{lines[0]}:" - lines << " #{VERSION_SUBKEY}: #{version.to_s.dump}" if version - lines << " #{CHECKSUMS_SUBKEY}:" + lines.concat(build_yaml_state_lines(checksums: checksums, version: version, applied_at: applied_at, changelog_replay: changelog_replay).map { |line| " #{line}" }) + lines.join("\n") + end + + def build_yaml_state(checksums:, version: nil, applied_at: nil, changelog_replay: nil) + build_yaml_state_lines( + checksums: checksums, + version: version, + applied_at: applied_at, + changelog_replay: changelog_replay + ).join("\n") + end + + def build_yaml_state_lines(checksums:, version: nil, applied_at: nil, changelog_replay: nil) + lines = [] + lines << "#{VERSION_SUBKEY}: #{version.to_s.dump}" if version + lines << "#{APPLIED_AT_SUBKEY}: #{applied_at.to_s.dump}" if applied_at + if changelog_replay.is_a?(Hash) && !changelog_replay.empty? + lines << "#{CHANGELOG_REPLAY_SUBKEY}:" + last_entry_key = changelog_replay[LAST_ENTRY_KEY_SUBKEY] || changelog_replay[:last_entry_key] + last_entry_date = changelog_replay[LAST_ENTRY_DATE_SUBKEY] || changelog_replay[:last_entry_date] + lines << " #{LAST_ENTRY_KEY_SUBKEY}: #{last_entry_key.to_s.dump}" if last_entry_key + lines << " #{LAST_ENTRY_DATE_SUBKEY}: #{last_entry_date.to_s.dump}" if last_entry_date + end + lines << "#{CHECKSUMS_SUBKEY}:" checksums.sort.each do |path, sha| - lines << " #{path.dump}: #{sha.dump}" + lines << " #{path.dump}: #{sha.dump}" end - lines.join("\n") + lines end - def write_to_config(config_path:, checksums:, version: nil) + def write_to_config(config_path:, checksums:, version: nil, applied_at: nil, changelog_replay: nil) return unless File.exist?(config_path.to_s) content = File.read(config_path.to_s) - new_block = build_yaml_block(checksums: checksums, version: version) - updated = replace_top_level_yaml_block(content, YAML_KEY, "#{new_block}\n") - updated = "#{content.rstrip}\n\n#{new_block}\n" if updated == content + state = build_yaml_state( + checksums: checksums, + version: version, + applied_at: applied_at, + changelog_replay: changelog_replay + ) + updated = merge_yaml_state(content, "#{YAML_KEY}:\n#{state.lines.map { |line| " #{line}" }.join}") File.write(config_path.to_s, updated) end - def replace_top_level_yaml_block(content, key, replacement) + def merge_yaml_state(content, state_block) + range = yaml_state_node_range(content) + return "#{content.to_s.rstrip}\n\n#{state_block}\n" unless range + lines = content.to_s.lines - document = Psych.parse_stream(content.to_s).children.first - root = document&.root - return content unless root.is_a?(Psych::Nodes::Mapping) + [*lines[0...range.begin], "#{state_block}\n", *lines[range.end..].to_a].join + end - pairs = root.children.each_slice(2).to_a - pairs.each_with_index do |(key_node, value_node), index| - next unless key_node.is_a?(Psych::Nodes::Scalar) && key_node.value.to_s == key.to_s + def yaml_state_node_range(content) + require "yaml/merge" + + analysis = Yaml::Merge::FileAnalysis.new(content.to_s) + raise Error, "could not parse kettle-jem config as YAML" unless analysis.valid? - next_key = pairs[index + 1]&.first - end_line = next_key&.start_line || value_node.end_line - end_line += 1 if end_line <= key_node.start_line - return [*lines[0...key_node.start_line], replacement, *lines[end_line..].to_a].join + body = analysis.documents.first&.body_node + return unless body&.mapping? + + pairs = body.mapping_pairs + pairs.each_with_index do |pair, index| + next unless pair.key_name == YAML_KEY + + start_index = pair.start_line.to_i - 1 + next_pair = pairs[index + 1] + end_index = next_pair ? next_pair.start_line.to_i - 1 : [pair.end_line.to_i - 1, content.to_s.lines.length].min + return start_index...end_index end - content - rescue Psych::Exception - content + nil + end + end + + module TemplateLock + VERSION = 1 + TEMPLATE_STATE_KEY = "template_state" + FILES_KEY = "files" + + module_function + + def path(project_root) + File.join(project_root.to_s, KETTLE_LOCK_PATH) + end + + def legacy_path(project_root) + File.join(project_root.to_s, LEGACY_KETTLE_LOCK_PATH) + end + + def load(project_root:, config_path: nil) + lock_path = path(project_root) + legacy_lock_path = legacy_path(project_root) + lock = if File.exist?(lock_path) + data = YAML.safe_load_file(lock_path, permitted_classes: [], aliases: false) + data.is_a?(Hash) ? data : {} + elsif File.exist?(legacy_lock_path) + data = YAML.safe_load_file(legacy_lock_path, permitted_classes: [], aliases: false) + data.is_a?(Hash) ? data : {} + else + {} + end + legacy = config_path ? TemplateChecksums.load_state(config_path: config_path) : {} + merge_legacy(lock, legacy) + rescue + {} + end + + def merge_legacy(lock, legacy) + return lock unless legacy.is_a?(Hash) && !legacy.empty? + + merged = lock.dup + state = (merged[TEMPLATE_STATE_KEY].is_a?(Hash) ? merged[TEMPLATE_STATE_KEY].dup : {}) + state["version"] ||= legacy[TemplateChecksums::VERSION_SUBKEY] + state["applied_at"] ||= legacy[TemplateChecksums::APPLIED_AT_SUBKEY] + state["changelog_replay"] ||= legacy[TemplateChecksums::CHANGELOG_REPLAY_SUBKEY] if legacy[TemplateChecksums::CHANGELOG_REPLAY_SUBKEY] + state["checksums"] ||= legacy[TemplateChecksums::CHECKSUMS_SUBKEY] if legacy[TemplateChecksums::CHECKSUMS_SUBKEY] + merged["version"] ||= VERSION + merged[TEMPLATE_STATE_KEY] = state unless state.empty? + merged[FILES_KEY] ||= {} + merged + end + + def write(project_root:, lock:) + lock_path = path(project_root) + FileUtils.mkdir_p(File.dirname(lock_path)) + File.write(lock_path, "#{YAML.dump(lock)}") + end + + def remove_legacy(project_root) + legacy_lock_path = legacy_path(project_root) + return false unless File.exist?(legacy_lock_path) + + File.delete(legacy_lock_path) + true + end + + def files(lock) + value = lock.is_a?(Hash) ? lock[FILES_KEY] : nil + value.is_a?(Hash) ? value : {} + end + + def file_record(lock, relative_path) + record = files(lock)[relative_path.to_s] + record.is_a?(Hash) ? record : {} + end + + def build_lock(template_state:, file_records:) + { + "version" => VERSION, + TEMPLATE_STATE_KEY => template_state, + FILES_KEY => file_records.sort.to_h + } end end @@ -3201,8 +3427,8 @@ def discover_facts(project_root, env: ENV, run_options: {}) ) facts[:readme_style] = readme_style unless readme_style.empty? facts[:ruby_style] = ruby_style_facts(project_root) - changelog_transfers = changelog_transfer_entries(PACKAGED_TEMPLATE_ROOT) - facts[:changelog] = {transfer_entries: changelog_transfers} unless changelog_transfers.empty? + changelog = changelog_transfer_facts(project_root, changelog_transfer_entries(PACKAGED_TEMPLATE_ROOT)) + facts[:changelog] = changelog unless changelog.empty? gemspec_facts = gemspec_template_facts(kettle_config) facts[:gemspec] = gemspec_facts unless gemspec_facts.empty? template_tokens = template_tokens(facts, funding) @@ -3528,6 +3754,7 @@ def plan_project(project_root, env: ENV, run_options: {}) with_event_phase(events, "runtime_dependencies") { ensure_runtime_dependencies! } with_event_phase(events, "preflight") { preflight_project!(project_root) } template_selection = with_event_phase(events, "template_selection") { template_selection_for(env, run_options) } + checksum_mode = with_event_phase(events, "checksum_mode") { checksum_mode_for(env, run_options) } decision_policy = with_event_phase(events, "decision_policy") { decision_policy_for(env, run_options) } git_preflight = with_event_phase(events, "git_preflight") do git_preflight_report(project_root, template_selection: template_selection) @@ -3561,6 +3788,10 @@ def plan_project(project_root, env: ENV, run_options: {}) stats: recipe_planning_execution ) end + template_lock = with_event_phase(events, "template_lock") { template_lock_state(project_root) } + recipe_reports = with_event_phase(events, "checksum_skip") do + apply_checksum_skips(project_root, recipe_reports, checksum_mode: checksum_mode, template_lock: template_lock) + end plugin_registry = with_event_phase(events, "plugins") { plugin_registry_for_project(project_root) } changed_files = changed_files_from_recipe_reports(recipe_reports) diagnostics = recipe_reports.flat_map { |report| report[:diagnostics] } @@ -3592,6 +3823,8 @@ def plan_project(project_root, env: ENV, run_options: {}) recipe_planning_thread_workers: recipe_planning_thread_workers, recipe_planning_execution: recipe_planning_execution, decision_policy: decision_policy.to_h, + checksum_mode: checksum_mode.to_s, + template_lock: template_lock, template_selection: template_selection, git_preflight: git_preflight, decision_evaluations: decision_evaluations, @@ -3616,6 +3849,137 @@ def changed_files_from_recipe_reports(recipe_reports) latest_by_path.values.filter_map { |report| report[:relative_path] if report[:changed] }.uniq.sort end + def checksum_mode_for(env, run_options) + raw = (run_options || {})[:checksums] || + (run_options || {})["checksums"] || + (env || {})["KETTLE_JEM_CHECKSUMS"] + ChecksumMode.parse(raw) + end + + def template_lock_state(project_root) + TemplateLock.load(project_root: project_root, config_path: kettle_jem_config_path(project_root)) + end + + def apply_checksum_skips(project_root, recipe_reports, checksum_mode:, template_lock:) + return recipe_reports if checksum_mode.off? + + recipe_reports.map do |report| + next report unless checksum_skip_report?(project_root, report, checksum_mode: checksum_mode, template_lock: template_lock) + + skipped = deep_dup(report) + skipped[:changed] = false + skipped[:checksum_skipped] = true + skipped[:metadata] = deep_dup(skipped.fetch(:metadata, {})).merge( + checksum_skip: { + mode: checksum_mode.to_s, + reason: "lock_match" + } + ) + skipped + end + end + + def checksum_skip_report?(project_root, report, checksum_mode:, template_lock:) + return false unless report[:changed] + return false unless checksum_cache_safe_report?(report) + + relative_path = report.fetch(:relative_path).to_s + record = TemplateLock.file_record(template_lock, relative_path) + return false if record.empty? + + if checksum_mode.check_template? + expected = record["input_fingerprint"].to_s + return false if expected.empty? + return false unless expected == template_input_fingerprint(project_root, report) + end + if checksum_mode.check_destination? + expected = record["dest_sha256"].to_s + return false if expected.empty? + return false unless expected == destination_file_sha256(project_root, relative_path).to_s + end + true + end + + def checksum_cache_safe_report?(report) + metadata = report.fetch(:metadata, {}) + preference = metadata[:template_source_preference] || metadata["template_source_preference"] + return false unless preference.is_a?(Hash) + return false if report.dig(:metadata, :delete_file) || report.dig(:metadata, "delete_file") + + primitive = report.dig(:request_envelope, :request, :recipe_name).to_s + primitive == "supplied_template_source_application" + end + + def template_input_fingerprint(project_root, report) + Digest::SHA256.hexdigest(JSON.generate(template_input_fingerprint_payload(project_root, report))) + end + + def template_input_fingerprint_payload(project_root, report) + metadata = report.fetch(:metadata, {}) + preference = metadata[:template_source_preference] || metadata["template_source_preference"] || {} + tokens = stringify_keys_for_json(metadata[:template_tokens] || metadata["template_tokens"] || {}) + source_path = template_source_absolute_path(project_root, preference) + # This payload is the per-destination "template checksum" used by + # --checksums=template. It intentionally includes the selected template + # source SHA, recipe identity/version, resolved token digest, and + # kettle-jem implementation SHA. The coarse template_state.checksums + # inventory records whole-template-tree drift, but it is not consulted + # for skip decisions because unrelated template files should not force a + # destination file to retemplate. + { + kettle_jem_version: VERSION, + kettle_jem_implementation_sha256: Digest::SHA256.file(__FILE__).hexdigest, + recipe_name: report[:recipe_name].to_s, + request_recipe_name: report.dig(:request_envelope, :request, :recipe_name).to_s, + recipe_version: report.dig(:request_envelope, :request, :recipe_version).to_s, + relative_path: report.fetch(:relative_path).to_s, + template_source: template_source_lock_path(preference), + template_source_sha256: (source_path && File.file?(source_path)) ? Digest::SHA256.file(source_path).hexdigest : "", + template_source_preference: stringify_keys_for_json(preference), + template_token_keys: tokens.keys.sort, + template_tokens_sha256: Digest::SHA256.hexdigest(JSON.generate(tokens)) + } + end + + def template_source_absolute_path(project_root, preference) + return unless preference.is_a?(Hash) + + root = preference[:source_root_path] || preference["source_root_path"] || project_root + relative = preference[:source_relative_path] || preference["source_relative_path"] || + preference[:selected_source] || preference["selected_source"] + return if relative.to_s.empty? + + File.join(root.to_s, relative.to_s) + end + + def template_source_lock_path(preference) + return "" unless preference.is_a?(Hash) + + (preference[:source_relative_path] || preference["source_relative_path"] || + preference[:selected_source] || preference["selected_source"]).to_s + end + + def destination_file_sha256(project_root, relative_path) + path = File.join(project_root.to_s, relative_path.to_s) + return unless File.file?(path) + + Digest::SHA256.file(path).hexdigest + end + + def stringify_keys_for_json(value) + case value + when Hash + value.keys.map(&:to_s).sort.to_h do |key| + raw_value = value.key?(key) ? value[key] : value[key.to_sym] + [key, stringify_keys_for_json(raw_value)] + end + when Array + value.map { |entry| stringify_keys_for_json(entry) } + else + value + end + end + def recipe_planning_strategy_for(env, run_options) value = (run_options || {})[:recipe_planning_strategy] || (run_options || {})["recipe_planning_strategy"] || @@ -4023,7 +4387,7 @@ def apply_project(project_root, env: ENV, run_options: {}) emit_step_events(events, "post_apply_step", report.fetch(:post_apply_steps), phase: "post_apply") end report[:changed_files] = (report.fetch(:changed_files, []) + report.fetch(:post_apply_steps).flat_map do |step| - step.fetch(:changed_files, []) + reported_post_apply_changed_files(step) end).uniq.sort report[:duplicate_drift] = with_event_phase(events, "duplicate_drift") do if DecisionPolicy.value_to_boolean((run_options || {})[:skip_drift_check]) @@ -4046,20 +4410,22 @@ def apply_project(project_root, env: ENV, run_options: {}) end def event_stream(io, types: nil) - EventStream.new(io, types: parse_event_types(types)) + Kettle::Ndjson.event_stream( + io, + types: types, + event_types: EVENT_TYPES, + aliases: EVENT_TYPE_ALIASES + ) end def parse_event_types(types) - tokens = Array(types).flat_map { |value| value.to_s.split(",") }.map(&:strip).reject(&:empty?) - tokens = ["default"] if tokens.empty? - expanded = tokens.flat_map do |token| - normalized = token.tr("-", "_") - EVENT_TYPE_ALIASES.fetch(normalized, normalized) - end.uniq - unknown = expanded - EVENT_TYPES - raise ArgumentError, "Unknown event type(s): #{unknown.join(", ")}. Supported event types: #{EVENT_TYPES.join(", ")}" unless unknown.empty? - - expanded + Kettle::Ndjson.normalize_event_types( + Array(types).join(","), + event_types: EVENT_TYPES, + aliases: EVENT_TYPE_ALIASES + ) + rescue Kettle::Ndjson::UnknownEventTypeError => error + raise ArgumentError, "#{error.message}. Supported event types: #{EVENT_TYPES.join(", ")}" end def event_stream_from_options(run_options) @@ -4069,7 +4435,7 @@ def event_stream_from_options(run_options) stream = options[:event_stream] || options["event_stream"] phase_timings = options[:phase_timings] ||= [] - recorder = EventRecorder.new(stream.respond_to?(:emit) ? stream : nil, phase_timings) + recorder = Kettle::Ndjson.event_recorder(stream.respond_to?(:emit) ? stream : nil, phase_timings: phase_timings) options[:event_recorder] = recorder if options.respond_to?(:[]=) recorder end @@ -4098,20 +4464,11 @@ def with_event_phase(events, phase, payload = {}) end def record_phase_timing(events, phase, status:, duration_ms:, payload:) - return unless events.respond_to?(:record_phase_timing) - - events.record_phase_timing( - payload.merge( - phase: phase.to_s, - status: status, - duration_ms: duration_ms - ) - ) + Kettle::Ndjson.record_phase_timing(events, phase, status: status, duration_ms: duration_ms, payload: payload) end def emit_phase_event(events, phase, status:, **payload) - event_type = (status == "started") ? "phase_start" : "phase_finish" - emit_event(events, event_type, payload.merge(phase: phase.to_s, status: status)) + Kettle::Ndjson.emit_phase_event(events, phase, status: status, **payload) end def emit_recipe_event(events, report, index:, total:) @@ -4233,6 +4590,12 @@ def event_payload_value(payload, key) payload.fetch(key, payload.fetch(key.to_s, nil)) end + def reported_post_apply_changed_files(step) + return [] if event_payload_value(step, :metadata_only) + + Array(event_payload_value(step, :changed_files) || []) + end + def emit_summary_event(events, report) emit_event( events, @@ -4247,40 +4610,7 @@ def emit_summary_event(events, report) end def emit_event(events, type, payload = {}) - return unless events - - events.emit(payload.merge(type: type, event_version: 1)) - end - - class EventStream - def initialize(io, types:) - @io = io - @types = types - end - - def emit(payload) - return unless @types.include?(payload.fetch(:type).to_s) - - @io.puts(JSON.generate(payload.compact)) - @io.flush if @io.respond_to?(:flush) - end - end - - class EventRecorder - def initialize(stream, phase_timings) - @stream = stream - @phase_timings = phase_timings - end - - attr_reader :phase_timings - - def emit(payload) - @stream.emit(payload) if @stream - end - - def record_phase_timing(payload) - @phase_timings << payload.compact - end + Kettle::Ndjson.emit_event(events, type, payload) end def snapshot_changed_files(project_root, changed_files) @@ -4304,11 +4634,12 @@ def actual_changed_files_after_apply(project_root, changed_files, before_apply_f def post_apply_steps(project_root, report) [ - template_version_gem_bootstrap_step(project_root, report), + *[template_version_gem_bootstrap_step(project_root, report)].flatten, monorepo_root_gemfile_dependency_sync_step(project_root, report), git_hooks_executable_step(project_root), github_actions_pin_sync_step(project_root), - monorepo_subgem_kettle_config_profile_sync_step(project_root, report) + monorepo_subgem_kettle_config_profile_sync_step(project_root, report), + kettle_jem_state_sync_step(project_root, report) ].compact end @@ -4373,6 +4704,98 @@ def monorepo_subgem_kettle_config_profile_sync_step(project_root, report) } end + def kettle_jem_state_sync_step(project_root, report) + config_path = kettle_jem_config_path(project_root) + return unless File.file?(config_path) + + relative_config_path = config_path.delete_prefix("#{project_root}/") + lock_path = TemplateLock.path(project_root) + relative_lock_path = lock_path.delete_prefix("#{project_root}/") + legacy_lock_path = TemplateLock.legacy_path(project_root) + relative_legacy_lock_path = legacy_lock_path.delete_prefix("#{project_root}/") + legacy_lock_existed = File.exist?(legacy_lock_path) + before_config = File.read(config_path) + before_lock = File.exist?(lock_path) ? File.read(lock_path) : nil + latest_replay = report.dig(:facts, :changelog, :latest_transfer_entry) + existing_state = TemplateLock.load(project_root: project_root, config_path: config_path) + existing_replay = existing_state.dig(TemplateLock::TEMPLATE_STATE_KEY, TemplateChecksums::CHANGELOG_REPLAY_SUBKEY) + changelog_replay = if latest_replay + { + TemplateChecksums::LAST_ENTRY_KEY_SUBKEY => latest_replay.fetch(:key), + TemplateChecksums::LAST_ENTRY_DATE_SUBKEY => changelog_transfer_key_date(latest_replay.fetch(:key)) + } + elsif existing_replay.is_a?(Hash) + existing_replay + end + template_state = { + "version" => VERSION, + "applied_at" => Time.now.utc.strftime("%Y-%m-%d"), + TemplateChecksums::CHANGELOG_REPLAY_SUBKEY => changelog_replay, + TemplateChecksums::CHECKSUMS_SUBKEY => TemplateChecksums.compute( + template_root: template_root_path(project_root, config: kettle_jem_config(project_root)) + ) + }.compact + file_records = checksum_file_records(project_root, report, existing_state) + TemplateLock.write( + project_root: project_root, + lock: TemplateLock.build_lock(template_state: template_state, file_records: file_records) + ) + TemplateLock.remove_legacy(project_root) + TemplateChecksums.remove_from_config(config_path: config_path) + after_config = File.read(config_path) + after_lock = File.read(lock_path) + if after_config != before_config + config_report = report.fetch(:recipe_reports, []).find { |entry| entry.fetch(:relative_path, nil) == relative_config_path } + config_report[:final_content] = after_config if config_report + config_report&.dig(:report_envelope, :report)&.[]=(:final_content, after_config) + end + changed_files = [] + changed_files << relative_config_path if after_config != before_config + changed_files << relative_lock_path if after_lock != before_lock + changed_files << relative_legacy_lock_path if legacy_lock_existed + { + name: "kettle_jem_state_sync", + path: relative_lock_path, + status: changed_files.empty? ? "already_current" : "applied", + changed_files: changed_files, + metadata_only: true + } + end + + def checksum_file_records(project_root, report, existing_state) + existing_records = TemplateLock.files(existing_state) + report.fetch(:recipe_reports, []).each_with_object(existing_records.dup) do |recipe_report, records| + next unless checksum_cache_safe_report?(recipe_report) + + relative_path = recipe_report.fetch(:relative_path).to_s + existing = records[relative_path].is_a?(Hash) ? records[relative_path].dup : {} + if recipe_report[:checksum_skipped] + records[relative_path] = existing.merge( + "recipe" => recipe_report[:recipe_name].to_s, + "input_fingerprint" => template_input_fingerprint(project_root, recipe_report), + "template_sources" => [template_source_lock_path( + recipe_report.dig(:metadata, :template_source_preference) || + recipe_report.dig(:metadata, "template_source_preference") || + {} + )].reject(&:empty?) + ) + next + end + + records[relative_path] = { + "recipe" => recipe_report[:recipe_name].to_s, + "action" => recipe_report.dig(:metadata, :delete_file) ? "delete" : "write", + "dest_sha256" => destination_file_sha256(project_root, relative_path), + "input_fingerprint" => template_input_fingerprint(project_root, recipe_report), + "template_sources" => [template_source_lock_path( + recipe_report.dig(:metadata, :template_source_preference) || + recipe_report.dig(:metadata, "template_source_preference") || + {} + )].reject(&:empty?) + }.compact + end + end + def sync_kettle_config_monorepo_subgem_profile(content, gemspec_path, profile) normalized_profile = normalize_template_profile(profile) entries = monorepo_subgem_template_entries(gemspec_path, normalized_profile) @@ -4477,14 +4900,15 @@ def monorepo_root_gemfile_dependency_lines [ {name: "appraisal2", source: %(gem "appraisal2", "~> 3.2", ">= 3.2.0"\n)}, {name: "bundler-audit", source: %(gem "bundler-audit", "~> 0.9.3"\n)}, - {name: "kettle-dev", source: %(gem "kettle-dev", "~> 2.3", ">= 2.3.9"\n)}, - {name: "kettle-drift", source: %(gem "kettle-drift", "~> 1.0", ">= 1.0.6"\n)}, + {name: "kettle-dev", source: %(gem "kettle-dev", "~> 2.5", ">= 2.5.0"\n)}, + {name: "kettle-drift", source: %(gem "kettle-drift", "~> 1.0", ">= 1.0.7"\n)}, + {name: "kettle-family", source: %(gem "kettle-family", "~> 1.2", ">= 1.2.0"\n)}, {name: "kettle-jem", source: %(gem "kettle-jem", "~> 7.0", ">= 7.0.0"\n)}, - {name: "kettle-test", source: %(gem "kettle-test", "~> 2.0", ">= 2.0.12"\n)}, + {name: "kettle-test", source: %(gem "kettle-test", "~> 2.0", ">= 2.0.15"\n)}, {name: "rake", source: %(gem "rake", "~> 13.0"\n)}, {name: "rspec", source: %(gem "rspec", "~> 3.0"\n)}, - {name: "stone_checksums", source: %(gem "stone_checksums", "~> 1.0", ">= 1.0.6"\n)}, - {name: "turbo_tests2", source: %(gem "turbo_tests2", "~> 3.2", ">= 3.2.0"\n)} + {name: "stone_checksums", source: %(gem "stone_checksums", "~> 1.0", ">= 1.0.7"\n)}, + {name: "turbo_tests2", source: %(gem "turbo_tests2", "~> 3.2", ">= 3.2.3"\n)} ].freeze end @@ -4526,7 +4950,10 @@ def template_version_gem_bootstrap_step(project_root, report) entrypoint_require = facts.dig(:rubygems, :entrypoint_require).to_s entrypoint_require = facts.dig(:package, :name).to_s.tr("-", "/") if entrypoint_require.empty? unless project_gemspec_declares_version_gem?(project_root) - return legacy_rbs_consolidation_step(project_root, facts, entrypoint_require: entrypoint_require) + return [ + version_gem_cleanup_step(project_root, facts, cleanup_entrypoint: false), + legacy_rbs_consolidation_step(project_root, facts, entrypoint_require: entrypoint_require) + ].compact end return version_gem_cleanup_step(project_root, facts) unless version_gem_runtime_compatible?(facts) @@ -4562,23 +4989,28 @@ def legacy_rbs_consolidation_step(project_root, facts, entrypoint_require:) } end - def version_gem_cleanup_step(project_root, facts) + def version_gem_cleanup_step(project_root, facts, cleanup_entrypoint: true) package_name = facts.dig(:package, :name).to_s return {name: "version_gem_cleanup", status: "unavailable", reason: "missing_package_facts"} if package_name.empty? entrypoint_require = facts.dig(:rubygems, :entrypoint_require).to_s entrypoint_require = package_name.tr("-", "/") if entrypoint_require.empty? entrypoint_path = File.join("lib", "#{entrypoint_require}.rb") + version_spec_path = File.join("spec", entrypoint_require, "version_spec.rb") + changed_files = [] current = read_project_file(project_root, entrypoint_path) - return {name: "version_gem_cleanup", status: "already_current", changed_files: []} if current.empty? - - cleaned = version_gem_free_entrypoint_content(current, entrypoint_require: entrypoint_require) - changed = write_if_changed(project_root, entrypoint_path, cleaned) + if cleanup_entrypoint && !current.empty? + cleaned = version_gem_free_entrypoint_content(current, entrypoint_require: entrypoint_require) + changed_files << write_if_changed(project_root, entrypoint_path, cleaned) + end + changed_files << cleanup_version_gem_version_spec(project_root, version_spec_path) + changed_files.compact! { name: "version_gem_cleanup", - status: changed ? "applied" : "already_current", - changed_files: changed ? [changed] : [], - entrypoint_path: entrypoint_path + status: changed_files.empty? ? "already_current" : "applied", + changed_files: changed_files, + entrypoint_path: entrypoint_path, + version_spec_path: version_spec_path } end @@ -5025,32 +5457,165 @@ def build_changelog_unreleased_section(heading, items) lines end + def changelog_transfer_facts(project_root, entries) + all_entries = Array(entries) + latest = latest_changelog_transfer_entry(all_entries) + lock = TemplateLock.load(project_root: project_root, config_path: kettle_jem_config_path(project_root)) + state = lock[TemplateLock::TEMPLATE_STATE_KEY] + state = state.is_a?(Hash) ? state : {} + replay = state[TemplateChecksums::CHANGELOG_REPLAY_SUBKEY] + replay = replay.is_a?(Hash) ? replay : {} + last_key = replay[TemplateChecksums::LAST_ENTRY_KEY_SUBKEY].to_s + applied_keys = changelog_transfer_applied_keys(project_root) + selected_entries = if state.empty? + [CHANGELOG_INITIAL_TEMPLATE_ENTRY] + elsif !last_key.empty? + all_entries.select do |entry| + key = entry.fetch(:key).to_s + key > last_key || !applied_keys.include?(key) + end + else + all_entries + end + + { + transfer_entries: selected_entries, + latest_transfer_entry: latest, + first_template: state.empty? + }.compact + end + + def transfer_changelog_lag(last_entry_key = nil, verbose: false) + all_entries = changelog_transfer_entries(PACKAGED_TEMPLATE_ROOT) + latest = latest_changelog_transfer_entry(all_entries) + missing = if last_entry_key.to_s.empty? + all_entries + else + changelog_transfer_entries_after(all_entries, last_entry_key) + end + result = { + last_entry_key: last_entry_key.to_s.empty? ? nil : last_entry_key.to_s, + latest_entry_key: latest&.fetch(:key), + missing_count: missing.size + }.compact + result[:missing_entries] = missing if verbose + result + end + + def transfer_changelog_entries + changelog_transfer_entries(PACKAGED_TEMPLATE_ROOT) + end + + def latest_changelog_transfer_entry(entries) + Array(entries).last + end + + def changelog_transfer_applied_keys(project_root) + path = File.join(project_root.to_s, "CHANGELOG.md") + return Set.new unless File.file?(path) + + changelog_transfer_keys(File.read(path)) + end + + def changelog_transfer_entries_after(entries, key) + all_entries = Array(entries) + index = all_entries.index { |entry| entry.fetch(:key).to_s == key.to_s } + return all_entries if index.nil? + + all_entries[(index + 1)..].to_a + end + + def changelog_transfer_key_date(key) + parsed = parse_changelog_transfer_key(key) + return nil unless parsed + + date = parsed.fetch(:date) + "#{date[0, 4]}-#{date[4, 2]}-#{date[6, 2]}" + end + def changelog_transfer_entries(template_root) path = File.join(template_root, TRANSFER_CHANGELOG_TEMPLATE_PATH) return [] unless File.file?(path) - lines = markdown_source_lines(File.read(path)) - entries = [] - index = 0 - while index < lines.length - line = lines.fetch(index) - unless changelog_bullet_line?(line) - index += 1 - next + content = File.read(path) + context = Ast::Crispr::Markdown::Markly.document_context(content: content, source_label: path) + sections = context.structural_owners(owner_scope: :heading_sections).select do |owner| + owner.level == 2 && changelog_transfer_section_map.key?(owner.heading_text.to_s.strip) + end + list_items = context.structural_owners(owner_scope: :list_items) + ordered_sections = sections.sort_by { |section| section.location.start_line } + entries = ordered_sections.each_with_index.flat_map do |section, index| + heading = changelog_transfer_section_map.fetch(section.heading_text.to_s.strip) + next_section = ordered_sections[index + 1] + section_end_line = next_section ? next_section.location.start_line - 1 : section.location.end_line + list_items.filter_map do |item| + next unless item.depth == 1 + next unless item.location.start_line > section.location.start_line + next unless item.location.end_line <= section_end_line + + payload = changelog_transfer_list_item_payload(item.source) + parsed = parse_changelog_transfer_line(payload) + { + key: parsed.fetch(:key), + section: heading, + lines: item.source.lines.map { |line| line.chomp.rstrip } + } end + end + validate_changelog_transfer_entries!(entries, path) + entries.sort_by { |entry| entry.fetch(:key).to_s } + end - item_lines, index = collect_changelog_list_item(lines, index) - key = changelog_transfer_key(item_lines.first) - next unless key + def changelog_transfer_section_map + CHANGELOG_STANDARD_HEADINGS.to_h do |heading| + [heading.delete_prefix("### ").strip, heading] + end + end - entries << {key: key, lines: item_lines} + def changelog_transfer_line_parser + @changelog_transfer_line_parser ||= TransferChangelogLineParser.new + end + + def changelog_transfer_list_item_payload(source) + stripped = source.to_s.lines.first.to_s.lstrip.chomp + %w[- *].each do |marker| + prefix = "#{marker} " + return stripped.delete_prefix(prefix) if stripped.start_with?(prefix) end - entries + + stripped + end + + def parse_changelog_transfer_line(payload) + parsed = changelog_transfer_line_parser.parse(payload.to_s) + key_data = parsed.fetch(:key) + date = key_data.fetch(:date).to_s + sequence = key_data.fetch(:sequence).to_s + { + key: "kettle-jem-template-#{date}-#{sequence}", + date: date, + sequence: sequence, + message: parsed.fetch(:message).to_s + } + end + + def parse_changelog_transfer_key(key) + parse_changelog_transfer_line("#{key} - placeholder") + rescue Parslet::ParseFailed + nil + end + + def validate_changelog_transfer_entries!(entries, path) + keys = entries.map { |entry| entry.fetch(:key).to_s } + duplicates = keys.tally.select { |_key, count| count > 1 }.keys + raise Error, "Duplicate transfer changelog key(s) in #{path}: #{duplicates.join(", ")}" if duplicates.any? end def changelog_transfer_key(line) - key = line.to_s.lstrip.delete_prefix("- ").delete_prefix("* ").split(CHANGELOG_TRANSFER_KEY_SEPARATOR, 2).first.to_s - key.match?(CHANGELOG_TRANSFER_KEY_PATTERN) ? key : nil + payload = changelog_transfer_list_item_payload(line) + parse_changelog_transfer_line(payload)&.fetch(:key) + rescue Parslet::ParseFailed + nil end def apply_changelog_transfer_entries(content, entries) @@ -5060,6 +5625,7 @@ def apply_changelog_transfer_entries(content, entries) return ensure_trailing_newline(content) if transfer_entries.empty? normalized = normalize_changelog(content, {}) + normalized = refresh_existing_changelog_transfer_entries(normalized, transfer_entries) existing_keys = changelog_transfer_keys(normalized) missing = transfer_entries.reject { |entry| existing_keys.include?(entry.fetch(:key)) } return ensure_trailing_newline(normalized) if missing.empty? @@ -5071,11 +5637,14 @@ def apply_changelog_transfer_entries(content, entries) destination_end = changelog_unreleased_end_index(lines, unreleased) destination_body = lines[(unreleased + 1)...destination_end] || [] items = changelog_unreleased_items(destination_body) - items["### Changed"] ||= [] - items["### Changed"].pop while items["### Changed"].any? && items["### Changed"].last.to_s.strip.empty? - items["### Changed"] << "" if items["### Changed"].any? - missing.each do |entry| - items["### Changed"].concat(Array(entry.fetch(:lines)).map(&:rstrip)) + missing.group_by { |entry| entry.fetch(:section, "### Changed") }.each do |section, section_entries| + section = CHANGELOG_STANDARD_HEADINGS.include?(section) ? section : "### Changed" + items[section] ||= [] + items[section].pop while items[section].any? && items[section].last.to_s.strip.empty? + items[section] << "" if items[section].any? + section_entries.each do |entry| + items[section].concat(Array(entry.fetch(:lines)).map(&:rstrip)) + end end merged_lines = lines[0...unreleased] + @@ -5084,6 +5653,105 @@ def apply_changelog_transfer_entries(content, entries) ensure_trailing_newline(merged_lines.join("\n").gsub(/\n{3,}/, "\n\n")) end + def refresh_existing_changelog_transfer_entries(content, entries) + entry_by_key = entries.to_h { |entry| [entry.fetch(:key).to_s, entry] } + lines = markdown_source_lines(content) + found = {} + removals = changelog_existing_transfer_occurrences(content).filter_map do |occurrence| + key = occurrence.fetch(:key).to_s + next unless entry_by_key.key?(key) + + found[key] = occurrence.fetch(:release_heading) + (occurrence.fetch(:start_line)..occurrence.fetch(:end_line)) + end + return content if found.empty? + + cleaned = lines.each_with_index.reject do |_line, index| + line_number = index + 1 + removals.any? { |range| range.cover?(line_number) } + end.map(&:first) + grouped_entries = found.each_with_object({}) do |(key, heading), grouped| + grouped[heading] ||= [] + grouped[heading] << entry_by_key.fetch(key) + end + grouped_entries.reduce(cleaned) do |current_lines, (heading, heading_entries)| + insert_changelog_transfer_entries_in_release(current_lines, heading, heading_entries) + end.join("\n").then { |text| ensure_trailing_newline(text.gsub(/\n{3,}/, "\n\n")) } + end + + def changelog_existing_transfer_occurrences(content) + context = Ast::Crispr::Markdown::Markly.document_context(content: content, source_label: "CHANGELOG.md") + release_sections = context.structural_owners(owner_scope: :heading_sections) + .select { |owner| owner.level == 2 } + .sort_by { |owner| owner.location.start_line } + list_items = context.structural_owners(owner_scope: :list_items) + list_items.filter_map do |item| + next unless item.depth == 1 + + key = changelog_transfer_key(item.source) + next unless key + + release = changelog_release_section_for_item(release_sections, item) + next unless release + + { + key: key, + release_heading: "## #{release.heading_text}", + start_line: item.location.start_line, + end_line: item.location.end_line + } + end + end + + def changelog_release_section_for_item(release_sections, item) + release_sections.each_with_index.find do |section, index| + next_section = release_sections[index + 1] + section_end_line = next_section ? next_section.location.start_line - 1 : section.location.end_line + item.location.start_line > section.location.start_line && + item.location.end_line <= section_end_line + end&.first + end + + def insert_changelog_transfer_entries_in_release(lines, heading, entries) + heading_index = lines.index { |line| line.to_s == heading.to_s } + heading_index = changelog_unreleased_line_index(lines) if heading_index.nil? + return lines if heading_index.nil? + + release_end = changelog_unreleased_end_index(lines, heading_index) + release_body = lines[(heading_index + 1)...release_end] || [] + release_preamble = changelog_section_preamble(release_body) + items = changelog_unreleased_items(release_body) + entries.group_by { |entry| entry.fetch(:section, "### Changed") }.each do |section, section_entries| + section = CHANGELOG_STANDARD_HEADINGS.include?(section) ? section : "### Changed" + items[section] ||= [] + items[section].pop while items[section].any? && items[section].last.to_s.strip.empty? + items[section] << "" if items[section].any? + section_entries.each do |entry| + items[section].concat(Array(entry.fetch(:lines)).map(&:rstrip)) + end + end + + lines[0...heading_index] + + build_changelog_section(lines.fetch(heading_index), release_preamble, items) + + lines[release_end..].to_a + end + + def changelog_section_preamble(body_lines) + body_lines.take_while { |line| !line.to_s.start_with?("### ") }.map(&:rstrip) + end + + def build_changelog_section(heading, preamble, items) + lines = [heading.rstrip, ""] + preamble_lines = Array(preamble).map(&:rstrip) + preamble_lines.pop while preamble_lines.any? && preamble_lines.last.to_s.strip.empty? + if preamble_lines.any? + lines.concat(preamble_lines) + lines << "" + end + section_lines = build_changelog_unreleased_section(heading, items) + lines.concat(section_lines.drop(2)) + end + def changelog_transfer_keys(content) content.to_s.scan(CHANGELOG_TRANSFER_KEY_SCAN_PATTERN).to_set end @@ -5102,7 +5770,7 @@ def collect_changelog_list_item(lines, start_index) while index < lines.length current = lines.fetch(index).to_s current_indent = current.length - current.lstrip.length - break if !in_fence && current.start_with?("### ") + break if !in_fence && changelog_heading_line?(current) break if !in_fence && changelog_bullet_line?(current) && current_indent <= base_indent if current.lstrip.start_with?("```") @@ -5120,6 +5788,12 @@ def collect_changelog_list_item(lines, start_index) [item_lines, index] end + def changelog_heading_line?(line) + stripped = line.to_s.lstrip + marker, text = stripped.split(" ", 2) + !text.to_s.empty? && marker.to_s.each_char.all? { |char| char == "#" } + end + def changelog_unreleased_heading?(heading_text) text = heading_text.to_s.strip text = text[1...-1] if text.start_with?("[") && text.end_with?("]") @@ -6264,6 +6938,7 @@ def merge_config_template_source(recipe, template_content, destination_content, output = finalize_github_workflow_template(prune_github_workflow_matrix_by_min_ruby(output, facts), facts) if github_workflow_template_recipe?(recipe) output = normalize_simplecov_template_source(output) if recipe.fetch(:target_path).to_s == ".simplecov" + output = normalize_spec_helper_simplecov_template_source(output) if recipe.fetch(:target_path).to_s == "spec/spec_helper.rb" return output end @@ -6287,9 +6962,11 @@ def finalize_gemfile_template_source(recipe, content, destination_content, facts output = remove_stale_main_gemfile_direct_sibling_block(output, template_content) output = deduplicate_main_gemfile_direct_sibling_blocks(output) output = ensure_main_gemfile_nomono_bootstrap(output, template_content) - output = normalize_main_gemfile_nomono_requirements(output) + output = normalize_main_gemfile_nomono_declaration(output) + output = deduplicate_main_gemfile_eval_gemfiles(output) output = guard_main_gemfile_runtime_workspace_overrides(output) end + output = normalize_local_gemfile_nomono_bootstrap(output) if local_gemfile_template_recipe?(recipe) return output if recipe.dig(:template_preference, :strategy).to_s == "accept_template" return output unless local_gemfile_template_recipe?(recipe) @@ -6389,12 +7066,11 @@ def ensure_main_gemfile_nomono_bootstrap(content, template_content) def main_gemfile_nomono_bootstrap_source(template_content) records = main_gemfile_nomono_requirement_records(template_content) - assignment = records.fetch(:assignments).first call = records.fetch(:calls).first - return "" unless assignment && call + return "" unless call lines = template_content.to_s.lines - start_line = assignment.fetch(:start_line) + start_line = call.fetch(:start_line) previous = lines[start_line - 2].to_s start_line -= 1 if previous.strip.start_with?("# Local workspace dependency wiring") lines[(start_line - 1)..(call.fetch(:end_line) - 1)].join.rstrip + "\n\n" @@ -6416,11 +7092,45 @@ def main_gemfile_after_gemspec_line(content) ruby_call_records(content, :gemspec).map { |call| ruby_node_source_end_line(call) + 1 }.min end - def normalize_main_gemfile_nomono_requirements(content) + def deduplicate_main_gemfile_eval_gemfiles(content) + records = ruby_call_records(content, :eval_gemfile).filter_map do |call| + path = ruby_string_argument(call) + next unless path + + { + path: path, + start_line: gemfile_eval_comment_start_line(content.to_s.lines, call.location.start_line), + end_line: ruby_node_source_end_line(call) + } + end + return content if records.length <= 1 + + seen = Set.new + duplicate_records = [] + records.reverse_each do |record| + path = record.fetch(:path) + if seen.include?(path) + duplicate_records << record + else + seen.add(path) + end + end + return content if duplicate_records.empty? + + duplicate_records.sort_by { |record| -record.fetch(:start_line) }.reduce(content.to_s) do |output, record| + replace_source_range_lines( + output, + record.fetch(:start_line), + expand_line_range_through_following_blanks(output, record.fetch(:end_line)), + "" + ) + end + end + + def normalize_main_gemfile_nomono_declaration(content) records = main_gemfile_nomono_requirement_records(content) - return content if records.fetch(:calls).empty? || records.fetch(:assignments).empty? + return content if records.fetch(:calls).empty? - assignment_source = records.fetch(:assignments).first.fetch(:source).strip output = records.fetch(:assignments).sort_by { |record| -record.fetch(:start_line) }.reduce(content.to_s) do |memo, record| replace_source_range_lines( memo, @@ -6429,13 +7139,11 @@ def normalize_main_gemfile_nomono_requirements(content) "" ) end - call = main_gemfile_nomono_requirement_records(output).fetch(:calls).first - return output unless call + main_gemfile_nomono_requirement_records(output).fetch(:calls).sort_by { |record| -record.fetch(:start_line) }.reduce(output) do |memo, record| + next memo unless record.fetch(:source).include?("*nomono_requirements") - lines = output.lines - insert_at = call.fetch(:start_line) - 1 - lines.insert(insert_at, "#{assignment_source}\n") - ensure_trailing_newline(lines.join.gsub(/\n{3,}/, "\n\n")) + replace_source_range_lines(memo, record.fetch(:start_line), record.fetch(:end_line), "#{nomono_gemfile_declaration}\n") + end end def main_gemfile_nomono_requirement_records(content) @@ -6454,7 +7162,8 @@ def main_gemfile_nomono_requirement_records(content) { start_line: call.location.start_line, - end_line: ruby_node_source_end_line(call) + end_line: ruby_node_source_end_line(call), + source: call.location.slice } end {assignments: assignments, calls: calls.sort_by { |record| record.fetch(:start_line) }} @@ -6928,6 +7637,69 @@ def local_gemfile_template_recipe?(recipe) recipe.fetch(:target_path).to_s.end_with?("_local.gemfile") end + def normalize_local_gemfile_nomono_bootstrap(content) + output = remove_obsolete_local_gemfile_nomono_activation(content) + return output if ruby_call_records(output, :require).any? { |call| ruby_string_argument(call) == "nomono/bundler" } + + insertion = %(require "nomono/bundler"\n\n) + if (record = local_gems_assignment_record(output)) + insert_lines_before(output, record.fetch(:start_line), insertion) + else + ensure_trailing_newline([output.to_s.rstrip, insertion.rstrip].reject(&:empty?).join("\n\n")) + end + end + + def remove_obsolete_local_gemfile_nomono_activation(content) + records = obsolete_local_gemfile_nomono_activation_records(content) + return content if records.empty? + + records.sort_by { |record| -record.fetch(:start_line) }.reduce(content.to_s) do |output, record| + replace_source_range_lines( + output, + record.fetch(:start_line), + expand_line_range_through_following_blanks(output, record.fetch(:end_line)), + "" + ) + end + end + + def obsolete_local_gemfile_nomono_activation_records(content) + result = prism_parse_success(content) + body = result&.value&.statements&.body || [] + assignments = body.select do |node| + node.is_a?(::Prism::LocalVariableWriteNode) && node.name == :nomono_activation_requirements + end + return [] if assignments.empty? + + lines = content.to_s.lines + assignments.filter_map do |assignment| + kernel_gem_call = body.find do |node| + local_gemfile_nomono_kernel_activation_call?(node) && + node.location.start_line > assignment.location.start_line + end + next unless kernel_gem_call + + { + start_line: preceding_comment_block_start_line(lines, assignment.location.start_line), + end_line: ruby_node_source_end_line(kernel_gem_call) + } + end + end + + def local_gemfile_nomono_kernel_activation_call?(node) + node.is_a?(::Prism::CallNode) && + node.name == :send && + node.receiver&.slice == "Kernel" && + node.arguments&.arguments&.[](0)&.location&.slice == ":gem" && + ruby_string_argument_at(node, 1) == "nomono" + end + + def preceding_comment_block_start_line(lines, line_number) + line = line_number + line -= 1 while line > 1 && lines[line - 2].to_s.strip.start_with?("#") + line + end + def merge_local_gem_overrides(content, destination_content, facts:, template_content: nil) template_gems = local_gems_assignment(content) template_gems = local_gems_assignment(template_content) if template_gems.empty? @@ -11111,6 +11883,7 @@ def quality_config_path?(path) .reek.yml .standard.yml .simplecov + .yard-lint.yml .yardopts Rakefile ].include?(path) @@ -11508,7 +12281,9 @@ def shim_replacement_namespace(replacement_require) def shim_version_file_content(namespace:, replacement_namespace:, replacement_require:) body = [ + "# Version namespace delegated to the replacement gem.", "Version = #{replacement_namespace}::Version unless const_defined?(:Version, false)", + "# Current gem version delegated to the replacement gem.", "VERSION = #{replacement_namespace}::VERSION unless const_defined?(:VERSION, false)" ] @@ -11887,6 +12662,7 @@ def project_runtime_facts( kettle_dev_gem: "kettle-dev", kettle_dev_local_gems: kettle_dev_local_gems(config), local_gemfile_nomono_bootstrap: local_gemfile_nomono_bootstrap(package_name), + main_gemfile_kettle_family_gem: main_gemfile_kettle_family_gem(package_name), main_gemfile_nomono_bootstrap: main_gemfile_nomono_bootstrap(package_name), package_name: package_name.to_s, yard_host: yard_host, @@ -12183,6 +12959,7 @@ def project_runtime_template_tokens(project_runtime) "KJ|KETTLE_DEV_GEM" => project_runtime[:kettle_dev_gem].to_s, "KJ|KETTLE_DEV_LOCAL_GEMS" => project_runtime[:kettle_dev_local_gems].to_s, "KJ|LOCAL_GEMFILE_NOMONO_BOOTSTRAP" => project_runtime[:local_gemfile_nomono_bootstrap].to_s, + "KJ|MAIN_GEMFILE_KETTLE_FAMILY_GEM" => project_runtime[:main_gemfile_kettle_family_gem].to_s, "KJ|MAIN_GEMFILE_NOMONO_BOOTSTRAP" => project_runtime[:main_gemfile_nomono_bootstrap].to_s, "KJ|MAIN_GEMFILE_DIRECT_SIBLING_BLOCK" => project_runtime[:main_gemfile_direct_sibling_block].to_s, "KJ|PACKAGE_NAME" => project_runtime[:package_name].to_s, @@ -12199,22 +12976,31 @@ def project_yard_host(config, env, package_name:, author_domain:) end def kettle_dev_local_gems(config) - gems = %w[kettle-dev kettle-test kettle-soup-cover] + gems = %w[kettle-dev kettle-family kettle-test kettle-soup-cover] plugin_names = PluginLoader.normalize_plugin_names(plugin_names_from_config(config)) gems.concat(plugin_names.select { |plugin_name| plugin_name.start_with?("kettle-") }) gems.uniq.join(" ") end + def main_gemfile_kettle_family_gem(package_name) + return "" if package_name.to_s == "kettle-family" + + %(gem "kettle-family", "~> 1.2", ">= 1.2.0"\n) + end + def main_gemfile_nomono_bootstrap(package_name) return "" if package_name.to_s == "nomono" <<~RUBY.rstrip # Local workspace dependency wiring for *_local.gemfile overrides - nomono_requirements = ["~> 1.0", ">= 1.0.8"] - gem "nomono", *nomono_requirements, require: false # ruby >= 2.2 + #{nomono_gemfile_declaration} RUBY end + def nomono_gemfile_declaration + %(gem "nomono", "~> 1.1", ">= 1.1.0", require: false # ruby >= 3.2.0) + end + def local_gemfile_nomono_bootstrap(_package_name) %(require "nomono/bundler") end @@ -12279,7 +13065,13 @@ def version_gem_bootstrap_step_for_paths(project_root, facts, manage_version_fil version_gem_bootstrap_entrypoint_content(current_entrypoint, namespace: namespace, entrypoint_require: entrypoint_require) end changes << write_if_changed(project_root, entrypoint_path, entrypoint_content) - changes << normalize_non_default_version_gem_version_spec(project_root, version_spec_path, entrypoint_require) if non_default_version_gem + changes << normalize_version_gem_version_spec( + project_root, + version_spec_path, + entrypoint_require, + namespace, + ensure_version_gem_require: non_default_version_gem + ) if manage_signature_file || !legacy_signature_paths.empty? changes.concat( write_consolidated_version_signature( @@ -12334,16 +13126,78 @@ def namespace_descendant?(namespace, parent) namespace.start_with?("#{parent}::") end - def normalize_non_default_version_gem_version_spec(project_root, version_spec_path, entrypoint_require) + def normalize_version_gem_version_spec(project_root, version_spec_path, entrypoint_require, namespace, ensure_version_gem_require:) current = read_project_file(project_root, version_spec_path) return if current.empty? require_path = File.join(entrypoint_require.to_s, "version_gem") - return if ruby_top_level_require?(current, "require", require_path) + requirements = [] + requirements << %(require "anonymous_loader"\n) unless ruby_top_level_require?(current, "require", "anonymous_loader") + if ensure_version_gem_require && !ruby_top_level_require?(current, "require", require_path) + requirements << %(require "#{require_path}"\n) + end - lines = current.lines - lines.insert(version_spec_require_insertion_index(current), %(require "#{require_path}"\n)) - write_if_changed(project_root, version_spec_path, collapse_excess_blank_lines(lines.join)) + updated = current + if requirements.any? + lines = updated.lines + lines.insert(version_spec_require_insertion_index(updated), *requirements) + updated = lines.join + end + updated = normalize_version_spec_anonymous_loader_example( + updated, + version_spec_path: version_spec_path, + entrypoint_require: entrypoint_require, + namespace: namespace + ) + write_if_changed(project_root, version_spec_path, collapse_excess_blank_lines(updated)) + end + + def cleanup_version_gem_version_spec(project_root, version_spec_path) + current = read_project_file(project_root, version_spec_path) + return if current.empty? || !managed_version_gem_version_spec?(current) + + delete_project_file(project_root, version_spec_path) + end + + def managed_version_gem_version_spec?(content) + content.to_s.include?('it_behaves_like "a Version module"') || + version_spec_anonymous_loader_call?(content) + end + + def normalize_version_spec_anonymous_loader_example(content, version_spec_path:, entrypoint_require:, namespace:) + return content if version_spec_anonymous_loader_call?(content) + + describe_call = version_spec_rspec_describe_call(content) + return content unless describe_call&.block + + version_path = version_spec_relative_version_path(version_spec_path, entrypoint_require) + clean_namespace = namespace.to_s.start_with?("::") ? namespace.to_s[2..] : namespace.to_s + example = <<~RUBY + + it "executes the version file for coverage without redefining constants" do + path = File.expand_path("#{version_path}", __dir__) + anonymous_namespace = AnonymousLoader.load(files: path) + + expect(anonymous_namespace::#{clean_namespace}::Version::VERSION).to eq(described_class::VERSION) + end + RUBY + + insert_lines_before(content, describe_call.block.closing_loc.start_line, example) + end + + def version_spec_anonymous_loader_call?(content) + ruby_call_records(content, :load).any? { |call| call.receiver&.slice == "AnonymousLoader" } + end + + def version_spec_rspec_describe_call(content) + top_level_ruby_call_records(content, :describe).find do |call| + call.receiver&.slice == "RSpec" && call.block + end + end + + def version_spec_relative_version_path(version_spec_path, entrypoint_require) + spec_depth = File.dirname(version_spec_path.to_s).split(File::SEPARATOR).reject(&:empty?).length + "#{"../" * spec_depth}lib/#{entrypoint_require}/version.rb" end def legacy_rbs_signature_paths(project_root, entrypoint_require) @@ -12417,9 +13271,12 @@ def version_spec_require_insertion_index(content) def version_gem_version_file_content(existing_version:, namespace:, version:) resolved_version = existing_version.to_s.empty? ? version.to_s : existing_version.to_s body = [ + "# Version namespace for this gem.", "module Version", + " # Current gem version.", " VERSION = #{resolved_version.dump}", "end", + "# Current gem version exposed at the traditional constant location.", "VERSION = Version::VERSION # Traditional Constant Location" ] @@ -15363,17 +16220,18 @@ def synchronize_github_actions_framework_ci(content, facts) def github_actions_setup_ruby_steps(indent:) yaml = <<~YAML - name: Setup Ruby & RubyGems - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: "${{ matrix.ruby }}" rubygems: "${{ matrix.rubygems }}" bundler: "${{ matrix.bundler }}" - bundler-cache: ${{ matrix.ruby != 'truffleruby-25.0' && matrix.ruby != 'jruby-9.2' && matrix.ruby != 'jruby-9.3' }} + bundler-cache: ${{ matrix.ruby != 'ruby-2.4' && matrix.ruby != 'ruby-2.5' && matrix.ruby != 'ruby-2.6' && matrix.ruby != 'ruby-2.7' && matrix.ruby != 'truffleruby-25.0' && matrix.ruby != 'jruby-9.2' && matrix.ruby != 'jruby-9.3' }} - name: Bundle install for legacy Ruby engine - if: ${{ matrix.ruby == 'truffleruby-25.0' || matrix.ruby == 'jruby-9.2' || matrix.ruby == 'jruby-9.3' }} + if: ${{ matrix.ruby == 'ruby-2.4' || matrix.ruby == 'ruby-2.5' || matrix.ruby == 'ruby-2.6' || matrix.ruby == 'ruby-2.7' || matrix.ruby == 'truffleruby-25.0' || matrix.ruby == 'jruby-9.2' || matrix.ruby == 'jruby-9.3' }} run: | bundle config set --local path "${RUNNER_TEMP}/bundle" + bundle config set --local mirror.https://gem.coop https://rubygems.org bundle install --jobs 1 YAML yaml.lines.map { |line| line.strip.empty? ? line : "#{indent}#{line}" }.join.rstrip @@ -15474,7 +16332,7 @@ def synchronize_github_actions_coverage_ci(content, facts) " uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1", "", " - name: Setup Ruby & RubyGems", - " uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0", + " uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0", " with:", " ruby-version: \"${{ matrix.ruby }}\"", " rubygems: \"${{ matrix.rubygems }}\"", @@ -15611,7 +16469,8 @@ def github_actions_coverage_steps(disabled_integrations: []) github-token: ${{ secrets.GITHUB_TOKEN }} file: coverage/lcov.info format: lcov - continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }} + fail-on-error: false + continue-on-error: true YAML end @@ -15624,8 +16483,8 @@ def github_actions_coverage_steps(disabled_integrations: []) oidc: true files: coverage/lcov.info format: lcov - skip-errors: false - continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }} + skip-errors: true + continue-on-error: true YAML end @@ -15633,13 +16492,14 @@ def github_actions_coverage_steps(disabled_integrations: []) steps << <<~YAML - name: Upload coverage to CodeCov if: ${{ !env.ACT }} - uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7 + uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0 with: use_oidc: true disable_search: true fail_ci_if_error: false files: coverage/lcov.info,coverage/coverage.xml verbose: true + continue-on-error: true YAML end @@ -15912,18 +16772,18 @@ def github_actions_step_pins { "actions/checkout" => "actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1", "actions/cache" => "actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0", - "ruby/setup-ruby" => "ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0", + "ruby/setup-ruby" => "ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0", "coverallsapp/github-action" => "coverallsapp/github-action@5cbfd81b66ca5d10c19b062c04de0199c215fb6e # v2.3.7", "qltysh/qlty-action/coverage" => "qltysh/qlty-action/coverage@08a0a862c159eae9b9003081da6663d96efef637 # v2.3.0", - "codecov/codecov-action" => "codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7", + "codecov/codecov-action" => "codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0", "irongut/CodeCoverageSummary" => "irongut/CodeCoverageSummary@51cc3a756ddcd398d447c044c02cb6aa83fdae95 # v1.3.0", "marocchino/sticky-pull-request-comment" => "marocchino/sticky-pull-request-comment@5770ad5eb8f42dd2c4f34da00c94c5381e49af88 # v3.0.5", "actions/upload-artifact" => "actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1", "amancevice/setup-code-climate" => "amancevice/setup-code-climate@0daf2985a225e8ac15975b4d233010e94d65b76a # v2", "actions/dependency-review-action" => "actions/dependency-review-action@a1d282b36b6f3519aa1f3fc636f609c47dddb294 # v5.0.0", - "github/codeql-action/init" => "github/codeql-action/init@e0647621c2984b5ed2f768cb892365bf2a616ad1 # v4.37.2", - "github/codeql-action/autobuild" => "github/codeql-action/autobuild@e0647621c2984b5ed2f768cb892365bf2a616ad1 # v4.37.2", - "github/codeql-action/analyze" => "github/codeql-action/analyze@e0647621c2984b5ed2f768cb892365bf2a616ad1 # v4.37.2", + "github/codeql-action/init" => "github/codeql-action/init@e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81 # v4.37.3", + "github/codeql-action/autobuild" => "github/codeql-action/autobuild@e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81 # v4.37.3", + "github/codeql-action/analyze" => "github/codeql-action/analyze@e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81 # v4.37.3", "pozil/auto-assign-issue" => "pozil/auto-assign-issue@af6beea6bdf1e8eb373f061c5bc168681fc6d011 # v4.0.1", "apache/skywalking-eyes/dependency" => "apache/skywalking-eyes/dependency@61275cc80d0798a405cb070f7d3a8aaf7cf2c2c1 # v0.8.0", "sarisia/actions-status-discord" => "sarisia/actions-status-discord@eb045afee445dc055c18d3d90bd0f244fd062708 # v1.16.0" diff --git a/gems/kettle-jem/lib/kettle/jem/cli.rb b/gems/kettle-jem/lib/kettle/jem/cli.rb index c4e062c9b..6b4fcf200 100644 --- a/gems/kettle-jem/lib/kettle/jem/cli.rb +++ b/gems/kettle-jem/lib/kettle/jem/cli.rb @@ -149,6 +149,12 @@ def parse_options(args) opts.on("--skip-binstubs", "Skip post-template curated Bundler binstub generation.") do options[:run_options][:skip_binstubs] = true end + opts.on("--checksums VALUE", "Set checksum skip mode: template, dest, ignore-template, ignore-dest, or off.") do |value| + options[:run_options][:checksums] = value + end + opts.on("--ignore-checksums", "Alias for --checksums off.") do + options[:run_options][:checksums] = "off" + end opts.on("--accept-config", "Accept first-run template config bootstrap.") do options[:run_options][:accept_config] = true end diff --git a/gems/kettle-jem/lib/kettle/jem/tasks/install_task.rb b/gems/kettle-jem/lib/kettle/jem/tasks/install_task.rb index 3341c781d..f8ae735c8 100644 --- a/gems/kettle-jem/lib/kettle/jem/tasks/install_task.rb +++ b/gems/kettle-jem/lib/kettle/jem/tasks/install_task.rb @@ -14,11 +14,14 @@ module Tasks module InstallTask module_function - CURATED_BINSTUB_GEMS = %w[appraisal2 rake rbs rspec-core yard kettle-dev kettle-test kettle-soup-cover stone_checksums].freeze + CURATED_BINSTUB_GEMS = %w[appraisal2 rake rbs rspec-core yard kettle-dev kettle-test kettle-soup-cover kettle-gha-pins stone_checksums].freeze CURATED_BINSTUB_DISCRETE_EXECUTABLES = %w[ kettle-drift yard ].freeze + GIT_OPERATION_LOCK_ENV_KEYS = %w[KETTLE_JEM_GIT_LOCK KETTLE_JEM_GIT_COMMIT_LOCK].freeze + GIT_OPERATION_LOCK_RETRY_ATTEMPTS = 5 + GIT_OPERATION_LOCK_RETRY_SLEEP_SECONDS = 0.25 def run(project_root: Dir.pwd, env: ENV, run_options: {}, command_runner: method(:run_system_command)) effective_run_options = install_run_options(env, run_options) @@ -28,8 +31,7 @@ def run(project_root: Dir.pwd, env: ENV, run_options: {}, command_runner: method install_steps = [] install_steps << config_migration_step if config_migration_step install_steps << gemspec_dependency_sync_step(report) - version_step = version_gem_bootstrap_step(project_root, report) - install_steps << version_step if version_step + install_steps.concat(version_gem_bootstrap_steps(project_root, report)) mise_step = mise_trust_step(project_root, report, env: env) install_steps << mise_step if mise_step install_steps.concat(post_template_project_fix_steps(project_root, report, env: env)) @@ -158,9 +160,13 @@ def development_dependency_names(content) .uniq end - def version_gem_bootstrap_step(project_root, report) - report.fetch(:post_apply_steps, []).find { |step| step.fetch(:name, nil) == "version_gem_bootstrap" } || - Kettle::Jem.template_version_gem_bootstrap_step(project_root, report) + def version_gem_bootstrap_steps(project_root, report) + existing = report.fetch(:post_apply_steps, []).select do |step| + %w[version_gem_bootstrap version_gem_cleanup legacy_rbs_consolidation].include?(step.fetch(:name, nil)) + end + return existing unless existing.empty? + + [Kettle::Jem.template_version_gem_bootstrap_step(project_root, report)].flatten.compact end def install_phase_reports(install_steps) @@ -169,6 +175,8 @@ def install_phase_reports(install_steps) "post_template" => %w[ kettle_config_migration version_gem_bootstrap + version_gem_cleanup + legacy_rbs_consolidation mise_trust legacy_ruby_version_file_cleanup readme_compatibility_badges @@ -523,7 +531,7 @@ def literal_github_homepage?(assigned) end def github_org_from_env(env) - %w[FORGE_ORG KJ_GH_USER GITHUB_ORG].each do |key| + %w[FORGE_ORG KJ_GH_ORG GITHUB_ORG].each do |key| value = (env || {})[key].to_s.strip return value unless value.empty? || Kettle::Jem::DecisionPolicy.falsey?(value) end @@ -1632,6 +1640,7 @@ def handoff_argv(run_options) argv << "--accept" if Kettle::Jem::DecisionPolicy.value_to_boolean(options[:accept]) argv << "--interactive" if Kettle::Jem::DecisionPolicy.value_to_boolean(options[:interactive]) argv << "--dry-run" if Kettle::Jem::DecisionPolicy.value_to_boolean(options[:dry_run]) + argv.concat(value_arg("--checksums", options[:checksums])) argv.concat(value_arg("--failure-mode", options[:failure_mode])) argv.concat(value_arg("--allowed", options[:allowed])) argv.concat(value_arg("--hook-templates", options[:hook_templates])) @@ -1698,24 +1707,40 @@ def execute_ready_command_step(step, project_root:, env:, quiet:, command_runner return step unless step.fetch(:status) == "ready" command_env = step.fetch(:env, env) - started_at = Process.clock_gettime(Process::CLOCK_MONOTONIC) - result = command_runner.call(step.fetch(:command), chdir: project_root, env: command_env, quiet: quiet) - duration_ms = ((Process.clock_gettime(Process::CLOCK_MONOTONIC) - started_at) * 1000.0).round(3) - if result.fetch(:success) - return step.merge( - status: "succeeded", - exitstatus: result[:exitstatus], - duration_ms: duration_ms, - reason: "executed" - ) + result = run_ready_step_command(step.fetch(:name), step.fetch(:command), project_root: project_root, env: command_env, quiet: quiet, command_runner: command_runner) + step.merge( + status: "succeeded", + exitstatus: result[:exitstatus], + duration_ms: result.fetch(:duration_ms), + reason: "executed" + ).tap do |report| + report[:attempts] = result.fetch(:attempts) if result.fetch(:attempts) > 1 end - - raise Kettle::Jem::Error, "#{step.fetch(:name)} failed: #{step.fetch(:command).join(" ")}\n#{result[:stderr]}" end def execute_ready_commands_step(step, project_root:, env:, quiet:, command_runner:) return step unless step.fetch(:status) == "ready" + if step.fetch(:name) == "bootstrap_commit" + return execute_bootstrap_commit_step(step, project_root: project_root, env: env, quiet: quiet, command_runner: command_runner) + end + + execute_unlocked_ready_commands_step(step, project_root: project_root, env: env, quiet: quiet, command_runner: command_runner) + end + + def execute_bootstrap_commit_step(step, project_root:, env:, quiet:, command_runner:) + with_git_operation_lock(env, metadata_key: :git_commit_lock) do + execute_unlocked_ready_commands_step( + step, + project_root: project_root, + env: env, + quiet: quiet, + command_runner: command_runner + ) + end + end + + def execute_unlocked_ready_commands_step(step, project_root:, env:, quiet:, command_runner:) if step.fetch(:name) == "bootstrap_commit" dirty_entries = git_output(project_root, "status", "--porcelain").lines.map(&:chomp).reject(&:empty?) if dirty_entries.empty? @@ -1729,17 +1754,14 @@ def execute_ready_commands_step(step, project_root:, env:, quiet:, command_runne command_env = step.fetch(:env, env) results = step.fetch(:commands).map do |command| - started_at = Process.clock_gettime(Process::CLOCK_MONOTONIC) - result = command_runner.call(command, chdir: project_root, env: command_env, quiet: quiet) - duration_ms = ((Process.clock_gettime(Process::CLOCK_MONOTONIC) - started_at) * 1000.0).round(3) - unless result.fetch(:success) - raise Kettle::Jem::Error, "#{step.fetch(:name)} failed: #{command.join(" ")}\n#{result[:stderr]}" - end + result = run_ready_step_command(step.fetch(:name), command, project_root: project_root, env: command_env, quiet: quiet, command_runner: command_runner) { command: command, exitstatus: result[:exitstatus], - duration_ms: duration_ms - } + duration_ms: result.fetch(:duration_ms) + }.tap do |report| + report[:attempts] = result.fetch(:attempts) if result.fetch(:attempts) > 1 + end end step.merge( status: "succeeded", @@ -1749,6 +1771,66 @@ def execute_ready_commands_step(step, project_root:, env:, quiet:, command_runne ) end + def run_ready_step_command(step_name, command, project_root:, env:, quiet:, command_runner:) + attempts = git_operation_step_name?(step_name) ? GIT_OPERATION_LOCK_RETRY_ATTEMPTS : 1 + attempt = 0 + last_result = nil + last_duration_ms = 0.0 + loop do + attempt += 1 + started_at = Process.clock_gettime(Process::CLOCK_MONOTONIC) + last_result = command_runner.call(command, chdir: project_root, env: env, quiet: quiet) + last_duration_ms = ((Process.clock_gettime(Process::CLOCK_MONOTONIC) - started_at) * 1000.0).round(3) + if last_result.fetch(:success) + return { + success: true, + exitstatus: last_result[:exitstatus], + duration_ms: last_duration_ms, + attempts: attempt + } + end + + break unless attempt < attempts && git_lock_conflict?(last_result[:stderr]) + + sleep(GIT_OPERATION_LOCK_RETRY_SLEEP_SECONDS * attempt) + end + + raise Kettle::Jem::Error, "#{step_name} failed: #{command.join(" ")}\n#{last_result[:stderr]}" + end + + def git_operation_step_name?(step_name) + %w[bootstrap_commit git_drivers].include?(step_name.to_s) + end + + def git_lock_conflict?(stderr) + text = stderr.to_s + text.include?("could not lock config file") || + text.include?("config.lock") || + text.include?("index.lock") || + text.include?("Unable to create") && text.include?(".lock") + end + + def git_operation_lock_path(env) + GIT_OPERATION_LOCK_ENV_KEYS.each do |key| + value = env.fetch(key, nil).to_s + return value unless value.empty? + end + nil + end + + def with_git_operation_lock(env, metadata_key:) + lock_path = git_operation_lock_path(env || {}) + return yield if lock_path.to_s.empty? + + FileUtils.mkdir_p(File.dirname(lock_path)) + File.open(lock_path, File::RDWR | File::CREAT, 0o644) do |lock| + lock.flock(File::LOCK_EX) + yield.merge(metadata_key => lock_path) + ensure + lock&.flock(File::LOCK_UN) + end + end + def execute_hook_templates_step(step, project_root:, env:, quiet:, command_runner:) return step unless step.fetch(:status) == "ready" @@ -1777,6 +1859,12 @@ def execute_git_drivers_step(step, project_root:, env:, quiet:, command_runner:) return execute_git_drivers_check_step(step, project_root: project_root, env: env, quiet: quiet, command_runner: command_runner) end + with_git_operation_lock(env, metadata_key: :git_lock) do + execute_unlocked_git_drivers_step(step, project_root: project_root, env: env, quiet: quiet, command_runner: command_runner) + end + end + + def execute_unlocked_git_drivers_step(step, project_root:, env:, quiet:, command_runner:) changed_files = [] if step.fetch(:mode) == "include-file" include_path = File.join(project_root.to_s, step.fetch(:include_file)) diff --git a/gems/kettle-jem/lib/kettle/jem/tasks/prepare_task.rb b/gems/kettle-jem/lib/kettle/jem/tasks/prepare_task.rb index ba2422e33..040a0703c 100644 --- a/gems/kettle-jem/lib/kettle/jem/tasks/prepare_task.rb +++ b/gems/kettle-jem/lib/kettle/jem/tasks/prepare_task.rb @@ -27,46 +27,42 @@ def run(project_root: Dir.pwd, env: ENV, run_options: {}, command_runner: Kettle report = Kettle::Jem.apply_project(project_root, env: env, run_options: prepare_run_options) setup_env = Kettle::Jem::Tasks::InstallTask.setup_command_env(project_root, env) events = Kettle::Jem.event_stream_from_options(effective_run_options) + bootstrap_name = templating_bootstrap_step_name(project_root) + bootstrap_command = templating_bootstrap_command(project_root) Kettle::Jem.emit_step_event( events, "command_step", - {name: "bundle_update_templating_bootstrap", status: "started", command: bundle_update_templating_bootstrap_command(project_root)}, + {name: bootstrap_name, status: "started", command: bootstrap_command}, phase: "prepare" ) - update_step = Kettle::Jem::Tasks::InstallTask.run_command_step( - "bundle_update_templating_bootstrap", - bundle_update_templating_bootstrap_command(project_root), + bootstrap_step = Kettle::Jem::Tasks::InstallTask.run_command_step( + bootstrap_name, + bootstrap_command, project_root: project_root, env: setup_env, quiet: Kettle::Jem::DecisionPolicy.value_to_boolean(effective_run_options[:quiet]), command_runner: command_runner ) - Kettle::Jem.emit_step_event(events, "command_step", update_step, phase: "prepare") - Kettle::Jem.emit_step_event( - events, - "command_step", - {name: "bundle_install", status: "started", command: %w[bundle install]}, - phase: "prepare" - ) - bundle_step = Kettle::Jem::Tasks::InstallTask.run_command_step( - "bundle_install", - %w[bundle install], + Kettle::Jem.emit_step_event(events, "command_step", bootstrap_step, phase: "prepare") + bundle_step = bundle_install_after_bootstrap_step( project_root: project_root, - env: setup_env, + setup_env: setup_env, quiet: Kettle::Jem::DecisionPolicy.value_to_boolean(effective_run_options[:quiet]), - command_runner: command_runner + command_runner: command_runner, + events: events, + bootstrap_command: bootstrap_command ) Kettle::Jem.emit_step_event(events, "command_step", bundle_step, phase: "prepare") final_report = report.merge( mode: "prepare", - prepared: update_step.fetch(:status) == "succeeded" && - bundle_step.fetch(:status) == "succeeded", + prepared: bootstrap_step.fetch(:status) == "succeeded" && + %w[skipped succeeded].include?(bundle_step.fetch(:status)), prepare_only: PREPARE_ONLY_PATHS, - prepare_steps: [update_step, bundle_step], + prepare_steps: [bootstrap_step, bundle_step], changed_files: ( report.fetch(:changed_files, []) + - update_step.fetch(:changed_files, []) + + bootstrap_step.fetch(:changed_files, []) + bundle_step.fetch(:changed_files, []) ).uniq.sort, diagnostics: report.fetch(:diagnostics, []) + [{ @@ -83,6 +79,44 @@ def bundle_update_templating_bootstrap_command(project_root = Dir.pwd) %w[bundle update] + CRITICAL_TEMPLATING_GEMS + locked_templating_gems(project_root) end + def templating_bootstrap_command(project_root = Dir.pwd) + return %w[bundle install] unless File.file?(File.join(project_root.to_s, "Gemfile.lock")) + + bundle_update_templating_bootstrap_command(project_root) + end + + def templating_bootstrap_step_name(project_root = Dir.pwd) + return "bundle_install_templating_bootstrap" unless File.file?(File.join(project_root.to_s, "Gemfile.lock")) + + "bundle_update_templating_bootstrap" + end + + def bundle_install_after_bootstrap_step(project_root:, setup_env:, quiet:, command_runner:, events:, bootstrap_command:) + if bootstrap_command == %w[bundle install] + return { + name: "bundle_install", + command: %w[bundle install], + status: "skipped", + reason: "already_ran_as_templating_bootstrap" + } + end + + Kettle::Jem.emit_step_event( + events, + "command_step", + {name: "bundle_install", status: "started", command: %w[bundle install]}, + phase: "prepare" + ) + Kettle::Jem::Tasks::InstallTask.run_command_step( + "bundle_install", + %w[bundle install], + project_root: project_root, + env: setup_env, + quiet: quiet, + command_runner: command_runner + ) + end + def locked_templating_gems(project_root) lock_path = File.join(project_root.to_s, "Gemfile.lock") return [] unless File.file?(lock_path) diff --git a/gems/kettle-jem/lib/kettle/jem/tasks/template_task.rb b/gems/kettle-jem/lib/kettle/jem/tasks/template_task.rb index b5ef1b4a6..39834dca8 100644 --- a/gems/kettle-jem/lib/kettle/jem/tasks/template_task.rb +++ b/gems/kettle-jem/lib/kettle/jem/tasks/template_task.rb @@ -67,6 +67,7 @@ def env_run_options(env) skip_rubocop_gradual: truthy?(env["KETTLE_JEM_SKIP_RUBOCOP_GRADUAL"]), skip_binstubs: truthy?(env["KETTLE_JEM_SKIP_BINSTUBS"]), skip_lock_normalization: truthy?(env["KETTLE_JEM_SKIP_LOCK_NORMALIZATION"]), + checksums: env["KETTLE_JEM_CHECKSUMS"], accept_config: truthy?(env["KETTLE_JEM_ACCEPT_CONFIG"]), bootstrap_mode: truthy?(env["KETTLE_JEM_BOOTSTRAP_MODE"]), quiet: truthy?(env["KETTLE_JEM_QUIET"]), diff --git a/gems/kettle-jem/lib/kettle/jem/templates/.env.local.example b/gems/kettle-jem/lib/kettle/jem/templates/.env.local.example index 11087df5a..07dccee9b 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/.env.local.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/.env.local.example @@ -35,6 +35,11 @@ GITLAB_TOKEN="" # Used by `apply_common_replacements` during templating. # Set these to your own values. Blank/unset values leave the token unresolved. +# ── Forge Repository Owner ──────────────────────────────────────────────────── +# Used for scaffolded repository URLs before a forge origin remote exists. +# FORGE_ORG= +# KJ_GH_ORG= + # ── Forge Users ──────────────────────────────────────────────────────────────── # KJ_GH_USER= # KJ_GL_USER= diff --git a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/coverage.yml.example b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/coverage.yml.example index 3b7594794..8a77d6947 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/coverage.yml.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/coverage.yml.example @@ -59,7 +59,7 @@ jobs: persist-credentials: false - name: Setup Ruby & RubyGems - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: "${{ matrix.ruby }}" rubygems: "${{ matrix.rubygems }}" diff --git a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/current.yml.example b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/current.yml.example index 39d3282c1..a15300f33 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/current.yml.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/current.yml.example @@ -50,7 +50,7 @@ jobs: persist-credentials: false - name: Setup Ruby & RubyGems - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: ${{ matrix.ruby }} rubygems: ${{ matrix.rubygems }} diff --git a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/dep-heads.yml.example b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/dep-heads.yml.example index bd4371685..559320065 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/dep-heads.yml.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/dep-heads.yml.example @@ -61,7 +61,7 @@ jobs: - name: Setup Ruby & RubyGems if: ${{ !env.ACT }} - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: ${{ matrix.ruby }} rubygems: ${{ matrix.rubygems }} @@ -83,7 +83,7 @@ jobs: run: bundle exec ${{ matrix.exec_cmd }} truffleruby: - if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'truffleruby/'))" + if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'truffleruby/') || startsWith(github.head_ref, 'feature/release'))" name: Specs truffleruby@dep-heads runs-on: ubuntu-latest continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }} @@ -115,7 +115,7 @@ jobs: - name: Setup Ruby & RubyGems if: ${{ !env.ACT }} - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: ${{ matrix.ruby }} rubygems: ${{ matrix.rubygems }} @@ -137,7 +137,7 @@ jobs: run: bundle exec ${{ matrix.exec_cmd }} jruby: - if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'jruby/'))" + if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'jruby/') || startsWith(github.head_ref, 'feature/release'))" name: Specs jruby@dep-heads runs-on: ubuntu-latest continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }} @@ -170,7 +170,7 @@ jobs: - name: Setup Ruby & RubyGems if: ${{ !env.ACT }} - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: ${{ matrix.ruby }} rubygems: ${{ matrix.rubygems }} diff --git a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/framework-ci.yml.example b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/framework-ci.yml.example index 331a26fad..63ed8a729 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/framework-ci.yml.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/framework-ci.yml.example @@ -58,7 +58,7 @@ jobs: persist-credentials: false - name: Setup Ruby & RubyGems - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: "${{ matrix.ruby }}" rubygems: "${{ matrix.rubygems }}" diff --git a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/heads.yml.example b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/heads.yml.example index 7d97c5699..3de5507d4 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/heads.yml.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/heads.yml.example @@ -54,7 +54,7 @@ jobs: - name: Setup Ruby & RubyGems if: ${{ !env.ACT }} - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: ${{ matrix.ruby }} rubygems: ${{ matrix.rubygems }} @@ -90,7 +90,7 @@ jobs: run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }} truffleruby: - if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'truffleruby/'))" + if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'truffleruby/') || startsWith(github.head_ref, 'feature/release'))" name: Specs truffleruby-head@head runs-on: ubuntu-latest continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }} @@ -115,7 +115,7 @@ jobs: - name: Setup Ruby & RubyGems if: ${{ !env.ACT }} - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: ${{ matrix.ruby }} rubygems: ${{ matrix.rubygems }} @@ -148,7 +148,7 @@ jobs: run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }} jruby: - if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'jruby/'))" + if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'jruby/') || startsWith(github.head_ref, 'feature/release'))" name: Specs jruby-head@head runs-on: ubuntu-latest continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }} @@ -173,7 +173,7 @@ jobs: - name: Setup Ruby & RubyGems if: ${{ !env.ACT }} - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: ${{ matrix.ruby }} rubygems: ${{ matrix.rubygems }} diff --git a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/jruby-10.0.yml.example b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/jruby-10.0.yml.example index dca305274..d844af61a 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/jruby-10.0.yml.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/jruby-10.0.yml.example @@ -27,7 +27,7 @@ concurrency: jobs: test: - if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'jruby/'))" + if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'jruby/') || startsWith(github.head_ref, 'feature/release'))" name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }} runs-on: ubuntu-latest continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }} @@ -53,7 +53,7 @@ jobs: - name: Setup Ruby & RubyGems if: ${{ !env.ACT }} - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: ${{ matrix.ruby }} rubygems: ${{ matrix.rubygems }} diff --git a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/jruby-9.1.yml.example b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/jruby-9.1.yml.example index f613a0be9..b148c1ed0 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/jruby-9.1.yml.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/jruby-9.1.yml.example @@ -27,7 +27,7 @@ concurrency: jobs: test: - if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'jruby/'))" + if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'jruby/') || startsWith(github.head_ref, 'feature/release'))" name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }} runs-on: ubuntu-22.04 continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }} @@ -52,7 +52,7 @@ jobs: - name: Setup Ruby & RubyGems if: ${{ !env.ACT }} - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: ${{ matrix.ruby }} rubygems: ${{ matrix.rubygems }} diff --git a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/jruby-9.2.yml.example b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/jruby-9.2.yml.example index 87d82c376..5cd23456d 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/jruby-9.2.yml.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/jruby-9.2.yml.example @@ -27,7 +27,7 @@ concurrency: jobs: test: - if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'jruby/'))" + if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'jruby/') || startsWith(github.head_ref, 'feature/release'))" name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }} runs-on: ubuntu-22.04 continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }} @@ -52,7 +52,7 @@ jobs: - name: Setup Ruby & RubyGems if: ${{ !env.ACT }} - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: ${{ matrix.ruby }} rubygems: ${{ matrix.rubygems }} @@ -63,6 +63,7 @@ jobs: if: ${{ !env.ACT }} run: | bundle config set --local path "${RUNNER_TEMP}/bundle" + bundle config set --local mirror.https://gem.coop https://rubygems.org bundle install --jobs 1 - name: "[Attempt 1] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}" diff --git a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/jruby-9.3.yml.example b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/jruby-9.3.yml.example index b5e2508da..c1c14ac00 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/jruby-9.3.yml.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/jruby-9.3.yml.example @@ -27,7 +27,7 @@ concurrency: jobs: test: - if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'jruby/'))" + if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'jruby/') || startsWith(github.head_ref, 'feature/release'))" name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }} runs-on: ubuntu-22.04 continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }} @@ -52,7 +52,7 @@ jobs: - name: Setup Ruby & RubyGems if: ${{ !env.ACT }} - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: ${{ matrix.ruby }} rubygems: ${{ matrix.rubygems }} @@ -63,6 +63,7 @@ jobs: if: ${{ !env.ACT }} run: | bundle config set --local path "${RUNNER_TEMP}/bundle" + bundle config set --local mirror.https://gem.coop https://rubygems.org bundle install --jobs 1 - name: "[Attempt 1] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}" diff --git a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/jruby-9.4.yml.example b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/jruby-9.4.yml.example index 34120eacd..d8c79fcbf 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/jruby-9.4.yml.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/jruby-9.4.yml.example @@ -27,7 +27,7 @@ concurrency: jobs: test: - if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'jruby/'))" + if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'jruby/') || startsWith(github.head_ref, 'feature/release'))" name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }} runs-on: ubuntu-22.04 continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }} @@ -52,7 +52,7 @@ jobs: - name: Setup Ruby & RubyGems if: ${{ !env.ACT }} - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: ${{ matrix.ruby }} rubygems: ${{ matrix.rubygems }} diff --git a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/jruby.yml.example b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/jruby.yml.example index 725dec84e..e56f42e85 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/jruby.yml.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/jruby.yml.example @@ -27,7 +27,7 @@ concurrency: jobs: test: - if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'jruby/'))" + if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'jruby/') || startsWith(github.head_ref, 'feature/release'))" name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }} runs-on: ubuntu-latest continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }} @@ -53,7 +53,7 @@ jobs: - name: Setup Ruby & RubyGems if: ${{ !env.ACT }} - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: ${{ matrix.ruby }} rubygems: ${{ matrix.rubygems }} diff --git a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/locked_deps.yml.example b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/locked_deps.yml.example index 6ab882686..6720cd57f 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/locked_deps.yml.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/locked_deps.yml.example @@ -76,7 +76,7 @@ jobs: persist-credentials: false - name: Setup Ruby & RubyGems - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: ${{ matrix.ruby }} rubygems: ${{ matrix.rubygems }} diff --git a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/opencollective.yml.example b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/opencollective.yml.example index 5b5c3649f..4683f77a7 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/opencollective.yml.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/opencollective.yml.example @@ -20,7 +20,7 @@ jobs: with: persist-credentials: false - name: Setup Ruby & RubyGems - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: ruby rubygems: default diff --git a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-2.3.yml.example b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-2.3.yml.example index 8267f9ca7..d35052b28 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-2.3.yml.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-2.3.yml.example @@ -47,7 +47,7 @@ jobs: persist-credentials: false - name: Setup Ruby & RubyGems - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: ${{ matrix.ruby }} rubygems: ${{ matrix.rubygems }} diff --git a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-2.4.yml.example b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-2.4.yml.example index 2606a5874..fcd5b569b 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-2.4.yml.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-2.4.yml.example @@ -47,12 +47,18 @@ jobs: persist-credentials: false - name: Setup Ruby & RubyGems - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: ${{ matrix.ruby }} rubygems: ${{ matrix.rubygems }} bundler: ${{ matrix.bundler }} - bundler-cache: true + bundler-cache: false + + - name: Bundle install for Ruby 2.4 + run: | + bundle config set --local path "${RUNNER_TEMP}/bundle" + bundle config set --local mirror.https://gem.coop https://rubygems.org + bundle install --jobs 1 - name: "[Attempt 1] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}" id: bundleAppraisalAttempt1 diff --git a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-2.5.yml.example b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-2.5.yml.example index 08297930d..8c4679991 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-2.5.yml.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-2.5.yml.example @@ -47,12 +47,18 @@ jobs: persist-credentials: false - name: Setup Ruby & RubyGems - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: ${{ matrix.ruby }} rubygems: ${{ matrix.rubygems }} bundler: ${{ matrix.bundler }} - bundler-cache: true + bundler-cache: false + + - name: Bundle install for Ruby 2.5 + run: | + bundle config set --local path "${RUNNER_TEMP}/bundle" + bundle config set --local mirror.https://gem.coop https://rubygems.org + bundle install --jobs 1 - name: "[Attempt 1] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}" id: bundleAppraisalAttempt1 diff --git a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-2.6.yml.example b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-2.6.yml.example index 185626441..fd8d50ef4 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-2.6.yml.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-2.6.yml.example @@ -47,12 +47,18 @@ jobs: persist-credentials: false - name: Setup Ruby & RubyGems - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: ${{ matrix.ruby }} rubygems: ${{ matrix.rubygems }} bundler: ${{ matrix.bundler }} - bundler-cache: true + bundler-cache: false + + - name: Bundle install for Ruby 2.6 + run: | + bundle config set --local path "${RUNNER_TEMP}/bundle" + bundle config set --local mirror.https://gem.coop https://rubygems.org + bundle install --jobs 1 - name: "[Attempt 1] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}" id: bundleAppraisalAttempt1 diff --git a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-2.7.yml.example b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-2.7.yml.example index b31b79527..7e5be4e1e 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-2.7.yml.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-2.7.yml.example @@ -47,12 +47,18 @@ jobs: persist-credentials: false - name: Setup Ruby & RubyGems - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: ${{ matrix.ruby }} rubygems: ${{ matrix.rubygems }} bundler: ${{ matrix.bundler }} - bundler-cache: true + bundler-cache: false + + - name: Bundle install for Ruby 2.7 + run: | + bundle config set --local path "${RUNNER_TEMP}/bundle" + bundle config set --local mirror.https://gem.coop https://rubygems.org + bundle install --jobs 1 - name: "[Attempt 1] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}" id: bundleAppraisalAttempt1 diff --git a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-3.0.yml.example b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-3.0.yml.example index e300916f8..e6f21aec2 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-3.0.yml.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-3.0.yml.example @@ -50,7 +50,7 @@ jobs: persist-credentials: false - name: Setup Ruby & RubyGems - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: ${{ matrix.ruby }} rubygems: ${{ matrix.rubygems }} diff --git a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-3.1.yml.example b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-3.1.yml.example index 53f056455..34d211144 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-3.1.yml.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-3.1.yml.example @@ -50,7 +50,7 @@ jobs: persist-credentials: false - name: Setup Ruby & RubyGems - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: ${{ matrix.ruby }} rubygems: ${{ matrix.rubygems }} diff --git a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-3.2.yml.example b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-3.2.yml.example index baed04b86..b0610c301 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-3.2.yml.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-3.2.yml.example @@ -47,7 +47,7 @@ jobs: persist-credentials: false - name: Setup Ruby & RubyGems - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: ${{ matrix.ruby }} rubygems: ${{ matrix.rubygems }} diff --git a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-3.3.yml.example b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-3.3.yml.example index a541e189a..a2b1246ac 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-3.3.yml.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-3.3.yml.example @@ -47,7 +47,7 @@ jobs: persist-credentials: false - name: Setup Ruby & RubyGems - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: ${{ matrix.ruby }} rubygems: ${{ matrix.rubygems }} diff --git a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-3.4.yml.example b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-3.4.yml.example index 120a3b5a9..dbcfc8238 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-3.4.yml.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/ruby-3.4.yml.example @@ -47,7 +47,7 @@ jobs: persist-credentials: false - name: Setup Ruby & RubyGems - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: ${{ matrix.ruby }} rubygems: ${{ matrix.rubygems }} diff --git a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/style.yml.example b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/style.yml.example index ec079a197..ca24109d8 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/style.yml.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/style.yml.example @@ -47,7 +47,7 @@ jobs: persist-credentials: false - name: Setup Ruby & RubyGems - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: ${{ matrix.ruby }} rubygems: ${{ matrix.rubygems }} diff --git a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/templating.yml.example b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/templating.yml.example index 56f319ab3..17952eafd 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/templating.yml.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/templating.yml.example @@ -51,7 +51,7 @@ jobs: persist-credentials: false - name: Setup Ruby & RubyGems - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: ${{ matrix.ruby }} rubygems: ${{ matrix.rubygems }} @@ -61,7 +61,6 @@ jobs: - name: Update templating bootstrap dependencies env: BUNDLE_GEMFILE: ${{ github.workspace }}/Gemfile - K_JEM_TEMPLATING: "true" run: bundle update nomono - name: "[Attempt 1] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}" diff --git a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/truffle.yml.example b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/truffle.yml.example index f7ea40ccd..04514709d 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/truffle.yml.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/truffle.yml.example @@ -27,7 +27,7 @@ concurrency: jobs: test: - if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'truffleruby/'))" + if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'truffleruby/') || startsWith(github.head_ref, 'feature/release'))" name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }} runs-on: ubuntu-latest continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }} @@ -53,7 +53,7 @@ jobs: - name: Setup Ruby & RubyGems if: ${{ !env.ACT }} - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: ${{ matrix.ruby }} rubygems: ${{ matrix.rubygems }} diff --git a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/truffleruby-22.3.yml.example b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/truffleruby-22.3.yml.example index 4c4d4f904..1325ac6b8 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/truffleruby-22.3.yml.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/truffleruby-22.3.yml.example @@ -27,7 +27,7 @@ concurrency: jobs: test: - if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'truffleruby/'))" + if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'truffleruby/') || startsWith(github.head_ref, 'feature/release'))" name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }} runs-on: ubuntu-22.04 continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }} @@ -54,7 +54,7 @@ jobs: - name: Setup Ruby & RubyGems if: ${{ !env.ACT }} - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: ${{ matrix.ruby }} rubygems: ${{ matrix.rubygems }} diff --git a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/truffleruby-23.0.yml.example b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/truffleruby-23.0.yml.example index 343a810e9..7cb196ff3 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/truffleruby-23.0.yml.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/truffleruby-23.0.yml.example @@ -27,7 +27,7 @@ concurrency: jobs: test: - if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'truffleruby/'))" + if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'truffleruby/') || startsWith(github.head_ref, 'feature/release'))" name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }} runs-on: ubuntu-22.04 continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }} @@ -54,7 +54,7 @@ jobs: - name: Setup Ruby & RubyGems if: ${{ !env.ACT }} - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: ${{ matrix.ruby }} rubygems: ${{ matrix.rubygems }} diff --git a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/truffleruby-23.1.yml.example b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/truffleruby-23.1.yml.example index 8dabfefef..9c166f1ed 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/truffleruby-23.1.yml.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/truffleruby-23.1.yml.example @@ -27,7 +27,7 @@ concurrency: jobs: test: - if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'truffleruby/'))" + if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'truffleruby/') || startsWith(github.head_ref, 'feature/release'))" name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }} runs-on: ubuntu-22.04 continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }} @@ -54,7 +54,7 @@ jobs: - name: Setup Ruby & RubyGems if: ${{ !env.ACT }} - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: ${{ matrix.ruby }} rubygems: ${{ matrix.rubygems }} diff --git a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/truffleruby-24.2.yml.example b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/truffleruby-24.2.yml.example index 1114650c4..c7abb9045 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/truffleruby-24.2.yml.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/truffleruby-24.2.yml.example @@ -27,7 +27,7 @@ concurrency: jobs: test: - if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'truffleruby/'))" + if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'truffleruby/') || startsWith(github.head_ref, 'feature/release'))" name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }} runs-on: ubuntu-22.04 continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }} @@ -53,7 +53,7 @@ jobs: - name: Setup Ruby & RubyGems if: ${{ !env.ACT }} - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: ${{ matrix.ruby }} rubygems: ${{ matrix.rubygems }} diff --git a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/truffleruby-25.0.yml.example b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/truffleruby-25.0.yml.example index 6bed99d69..79e6c61a2 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/truffleruby-25.0.yml.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/truffleruby-25.0.yml.example @@ -27,7 +27,7 @@ concurrency: jobs: test: - if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'truffleruby/'))" + if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'truffleruby/') || startsWith(github.head_ref, 'feature/release'))" name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }} runs-on: ubuntu-22.04 continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }} @@ -53,7 +53,7 @@ jobs: - name: Setup Ruby & RubyGems if: ${{ !env.ACT }} - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: ${{ matrix.ruby }} rubygems: ${{ matrix.rubygems }} @@ -64,6 +64,7 @@ jobs: if: ${{ !env.ACT }} run: | bundle config set --local path "${RUNNER_TEMP}/bundle" + bundle config set --local mirror.https://gem.coop https://rubygems.org bundle install --jobs 1 - name: "[Attempt 1] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}" diff --git a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/truffleruby-33.0.yml.example b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/truffleruby-33.0.yml.example index 60ec2a130..d45ae0e8c 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/truffleruby-33.0.yml.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/truffleruby-33.0.yml.example @@ -27,7 +27,7 @@ concurrency: jobs: test: - if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'truffleruby/'))" + if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'truffleruby/') || startsWith(github.head_ref, 'feature/release'))" name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }} runs-on: ubuntu-22.04 continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }} @@ -53,7 +53,7 @@ jobs: - name: Setup Ruby & RubyGems if: ${{ !env.ACT }} - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: ${{ matrix.ruby }} rubygems: ${{ matrix.rubygems }} diff --git a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/unlocked_deps.yml.example b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/unlocked_deps.yml.example index 5cb3b4b8c..9c198b5f2 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/unlocked_deps.yml.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/.github/workflows/unlocked_deps.yml.example @@ -67,7 +67,7 @@ jobs: persist-credentials: false - name: Setup Ruby & RubyGems - uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0 + uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 with: ruby-version: ${{ matrix.ruby }} rubygems: ${{ matrix.rubygems }} diff --git a/gems/kettle-jem/lib/kettle/jem/templates/.yard-lint.yml.example b/gems/kettle-jem/lib/kettle/jem/templates/.yard-lint.yml.example new file mode 100644 index 000000000..d3d833c89 --- /dev/null +++ b/gems/kettle-jem/lib/kettle/jem/templates/.yard-lint.yml.example @@ -0,0 +1,54 @@ +--- +AllValidators: + YardOptions: + - --private + - --protected + Exclude: + - .git/**/* + - coverage/**/* + - docs/**/* + - gemfiles/**/* + - node_modules/**/* + - pkg/**/* + - spec/**/* + - test/**/* + - tmp/**/* + - vendor/**/* + + FailOnSeverity: error +Documentation/LineLength: + Enabled: true + Severity: warning + MaxLength: 100 + +Documentation/TextSubstitution: + Enabled: true + Severity: warning + Substitutions: + "\u2013": "-" + "\u2014": "-" + +Documentation/UnderfilledLines: + Enabled: true + Severity: warning + MaxLength: 100 + +Tags/ExampleSyntax: + Enabled: true + Severity: error + +Tags/Order: + Enabled: true + Severity: warning + EnforcedOrder: + - param + - option + - yield + - yieldparam + - yieldreturn + - return + - raise + - see + - example + - note + - todo diff --git a/gems/kettle-jem/lib/kettle/jem/templates/CHANGELOG.transfer.md b/gems/kettle-jem/lib/kettle/jem/templates/CHANGELOG.transfer.md index 5b8be11bd..70bbcd39f 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/CHANGELOG.transfer.md +++ b/gems/kettle-jem/lib/kettle/jem/templates/CHANGELOG.transfer.md @@ -1,16 +1,39 @@ # kettle-jem Transferable Changelog -- kettle-jem-template-20260716-001 - Shim gemspec manifests now include - `LICENSE.md` instead of nonexistent `LICENSE.txt`. -- kettle-jem-template-20260716-002 - Generated gemspec manifests now ship fewer - repository-only files by default to reduce downstream distro packaging churn. -- kettle-jem-template-20260720-001 - Generated READMEs can now render - template-managed corporate sponsor logos from project or family config. -- kettle-jem-template-20260720-002 - Generated development Gemfiles now use the - released `tree_sitter_language_pack` gem 1.13.3 or newer by default. -- kettle-jem-template-20260720-003 - Generated StructuredMerge Git diff driver - config now uses the installed `smorg-rb` Ruby driver name. -- kettle-jem-template-20260720-004 - Generated multi-engine workflow files now - omit JRuby and TruffleRuby jobs when project config declares MRI-only engines. -- kettle-jem-template-20260720-005 - Generated README Support & Community rows - now include a RubyForum help badge. +## Added + +- kettle-jem-template-20260720-001 - READMEs can now display configured + corporate sponsor logos. +- kettle-jem-template-20260720-005 - README Support & Community links now + include RubyForum. +- kettle-jem-template-20260726-001 - Projects now include YARD lint + configuration and documentation dependencies so documentation issues fail + before generated docs are refreshed. +- kettle-jem-template-20260727-001 - Spec harness documentation now lists the + RSpec helpers provided by `kettle-test`. + +## Changed + +- kettle-jem-template-20260716-002 - Gemspecs now ship fewer repository-only + files, reducing package noise for downstream packagers. +- kettle-jem-template-20260720-002 - Development Gemfiles now use the released + `tree_sitter_language_pack` gem 1.13.3 or newer by default. +- kettle-jem-template-20260725-002 - Version specs now use `anonymous_loader` to + cover `version.rb` without redefining constants, or are removed when version + specs are not managed for the project. + +## Fixed + +- kettle-jem-template-20260716-001 - Shim gems now package `LICENSE.md` instead + of a missing `LICENSE.txt` file. +- kettle-jem-template-20260720-003 - StructuredMerge Git diff driver config now + uses the installed `smorg-rb` driver command. +- kettle-jem-template-20260720-004 - MRI-only projects now omit JRuby and + TruffleRuby workflow jobs. +- kettle-jem-template-20260725-001 - Release pull request branches beginning + with `feature/release` now run JRuby and TruffleRuby workflows. +- kettle-jem-template-20260726-002 - Generated version files now document their + version namespace and constants, reducing warning-only YARD lint output. +- kettle-jem-template-20260726-003 - Coverage upload steps now treat Coveralls, + QLTY, and Codecov as optional, so provider outages do not fail CI when local + coverage thresholds still pass. diff --git a/gems/kettle-jem/lib/kettle/jem/templates/Gemfile.example b/gems/kettle-jem/lib/kettle/jem/templates/Gemfile.example index b1f4e6245..bfaea48d7 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/Gemfile.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/Gemfile.example @@ -18,6 +18,8 @@ git_source(:gitlab) { |repo_name| "https://gitlab.com/#{repo_name}" } # Include dependencies from {KJ|GEM_NAME}.gemspec gemspec +{KJ|MAIN_GEMFILE_KETTLE_FAMILY_GEM} + {KJ|MAIN_GEMFILE_NOMONO_BOOTSTRAP} {KJ|MAIN_GEMFILE_DIRECT_SIBLING_BLOCK} diff --git a/gems/kettle-jem/lib/kettle/jem/templates/Rakefile.example b/gems/kettle-jem/lib/kettle/jem/templates/Rakefile.example index 8ac5ef3ff..38d768e41 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/Rakefile.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/Rakefile.example @@ -51,6 +51,7 @@ # rake spec # Run RSpec code examples # rake test # Run tests # rake yard # Generate YARD Documentation +# rake yard:lint # Lint YARD Documentation # # simplecov:disable diff --git a/gems/kettle-jem/lib/kettle/jem/templates/gem.gemspec.example b/gems/kettle-jem/lib/kettle/jem/templates/gem.gemspec.example index 4d8572857..7ffe3bb25 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/gem.gemspec.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/gem.gemspec.example @@ -124,13 +124,15 @@ Gem::Specification.new do |spec| spec.add_development_dependency("require_bench", "~> 1.0", ">= 1.0.4") # ruby >= 2.2.0 # Testing + # Loads version files in anonymous namespaces for coverage without constant redefinition warnings. + spec.add_development_dependency("anonymous_loader", "~> 0.1", ">= 0.1.3") # ruby >= 2.2.0 spec.add_development_dependency("appraisal2", "~> 3.2", ">= 3.2.0") # ruby >= 1.8.7, for testing against multiple versions of dependencies - spec.add_development_dependency("kettle-test", "~> 2.0", ">= 2.0.12") # ruby >= {KJ|MIN_TEST_RUBY} - spec.add_development_dependency("turbo_tests2", "~> 3.2", ">= 3.2.0") # ruby >= 2.4.0, default kettle-test runner + spec.add_development_dependency("kettle-test", "~> 2.0", ">= 2.0.15") # ruby >= {KJ|MIN_TEST_RUBY} + spec.add_development_dependency("turbo_tests2", "~> 3.2", ">= 3.2.3") # ruby >= 2.4.0, default kettle-test runner # Releasing spec.add_development_dependency("ruby-progressbar", "~> 1.13") # ruby >= 0 - spec.add_development_dependency("stone_checksums", "~> 1.0", ">= 1.0.6") # ruby >= 2.2.0 + spec.add_development_dependency("stone_checksums", "~> 1.0", ">= 1.0.7") # ruby >= 2.2.0 # Git integration (optional) # The 'git' gem is optional; {KJ|GEM_NAME} falls back to shelling out to `git` if it is not present. @@ -142,7 +144,7 @@ Gem::Specification.new do |spec| # This means we have no choice but to use the erb that shipped with Ruby 2.3 # /opt/hostedtoolcache/Ruby/2.3.8/x64/lib/ruby/gems/2.3.0/gems/erb-2.2.2/lib/erb.rb:670:in `prepare_trim_mode': undefined method `match?' for "-":String (NoMethodError) # spec.add_development_dependency("erb", ">= 2.2") # ruby >= 2.3.0, not SemVer, old rubies get dropped in a patch. - spec.add_development_dependency("gitmoji-regex", "~> 2.0", ">= 2.0.4") # ruby >= 2.4 + spec.add_development_dependency("gitmoji-regex", "~> 2.0", ">= 2.0.6") # ruby >= 2.4 # HTTP recording for deterministic specs # In Ruby 3.5 (HEAD) the CGI library has been pared down, so we also need to depend on gem "cgi" for ruby@head diff --git a/gems/kettle-jem/lib/kettle/jem/templates/gemfiles/modular/coverage.gemfile.example b/gems/kettle-jem/lib/kettle/jem/templates/gemfiles/modular/coverage.gemfile.example index 52d737872..8c3394dcf 100755 --- a/gems/kettle-jem/lib/kettle/jem/templates/gemfiles/modular/coverage.gemfile.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/gemfiles/modular/coverage.gemfile.example @@ -7,7 +7,7 @@ if ENV.fetch("KETTLE_DEV_DEV", "false").casecmp("false").zero? # Coverage (remote/released) platform :mri do - gem "kettle-soup-cover", "~> 3.0", ">= 3.0.3", require: false + gem "kettle-soup-cover", "~> 3.0", ">= 3.0.5", require: false end else eval_gemfile "coverage_local.gemfile" diff --git a/gems/kettle-jem/lib/kettle/jem/templates/gemfiles/modular/coverage_local.gemfile.example b/gems/kettle-jem/lib/kettle/jem/templates/gemfiles/modular/coverage_local.gemfile.example index 406aec148..270af67dc 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/gemfiles/modular/coverage_local.gemfile.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/gemfiles/modular/coverage_local.gemfile.example @@ -17,7 +17,8 @@ platform :mri do path_env: "KETTLE_DEV_DEV", vendored_gems_env: "VENDORED_GEMS", vendor_gem_dir_env: "VENDOR_GEM_DIR", - debug_env: "KETTLE_DEV_DEBUG" + debug_env: "KETTLE_DEV_DEBUG", + root: ["src", "my", "kettle-dev"] ) if ENV.fetch("GALTZO_FLOSS_DEV", "false").casecmp("false") != 0 diff --git a/gems/kettle-jem/lib/kettle/jem/templates/gemfiles/modular/documentation.gemfile.example b/gems/kettle-jem/lib/kettle/jem/templates/gemfiles/modular/documentation.gemfile.example index d8215416e..33ac70262 100755 --- a/gems/kettle-jem/lib/kettle/jem/templates/gemfiles/modular/documentation.gemfile.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/gemfiles/modular/documentation.gemfile.example @@ -12,6 +12,7 @@ gem "kramdown-parser-gfm", "~> 1.1", require: false # Ruby >= 2.3 gem "yaml-converter", "~> 0.2", ">= 0.2.3", require: false # Ruby >= 3.2 gem "yard", "~> 0.9", ">= 0.9.45", require: false gem "yard-junk", "~> 0.1", ">= 0.1.0", require: false # Ruby >= 3.1 +gem "yard-lint", "~> 1.10", ">= 1.10.2", require: false # Ruby >= 3.2 gem "yard-relative_markdown_links", "~> 0.6", require: false if ENV.fetch("GALTZO_FLOSS_DEV", "false").casecmp("false").zero? diff --git a/gems/kettle-jem/lib/kettle/jem/templates/gemfiles/modular/templating.gemfile.example b/gems/kettle-jem/lib/kettle/jem/templates/gemfiles/modular/templating.gemfile.example index 47138ffbb..a3169a528 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/gemfiles/modular/templating.gemfile.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/gemfiles/modular/templating.gemfile.example @@ -5,14 +5,14 @@ kettle_remote = ENV.fetch("KETTLE_DEV_DEV", "false").casecmp("false").zero? if structuredmerge_remote # Parser dependencies for released installs. - gem "tree_sitter_language_pack", "~> 1.13", ">= 1.13.3" + gem "tree_sitter_language_pack", "~> 1.13", ">= 1.13.4" # Merge recipes for released installs. gem "kettle-jem", ">= 7.0" end if kettle_remote # Template/plugin checks for released installs. - gem "kettle-drift", "~> 1.0", ">= 1.0.6", require: false + gem "kettle-drift", "~> 1.0", ">= 1.0.7", require: false end # Set STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local development with path-based dependencies. diff --git a/gems/kettle-jem/lib/kettle/jem/templates/gemfiles/modular/templating_local.gemfile.example b/gems/kettle-jem/lib/kettle/jem/templates/gemfiles/modular/templating_local.gemfile.example index e3c20ea94..f612ffe92 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/gemfiles/modular/templating_local.gemfile.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/gemfiles/modular/templating_local.gemfile.example @@ -65,7 +65,8 @@ platform :mri do path_env: "KETTLE_DEV_DEV", vendored_gems_env: "VENDORED_GEMS", vendor_gem_dir_env: "VENDOR_GEM_DIR", - debug_env: "KETTLE_DEV_DEBUG" + debug_env: "KETTLE_DEV_DEBUG", + root: ["src", "my", "kettle-dev"] ) end end diff --git a/gems/kettle-jem/lib/kettle/jem/templates/shim/Gemfile.example b/gems/kettle-jem/lib/kettle/jem/templates/shim/Gemfile.example index 86c12b7b0..61955ee25 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/shim/Gemfile.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/shim/Gemfile.example @@ -6,7 +6,7 @@ shimmed_gem_path = ENV["KETTLE_JEM_SHIMMED_GEM_PATH"].to_s gem "{KJ|SHIMMED_GEM_NAME}", path: shimmed_gem_path unless shimmed_gem_path.empty? # Local workspace dependency wiring for templating_local.gemfile overrides. -gem "nomono", "~> 1.0", ">= 1.0.8", require: false # ruby >= 2.2 +gem "nomono", "~> 1.1", ">= 1.1.0", require: false # ruby >= 3.2.0 # Templating (env-switched: STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local paths) eval_gemfile "gemfiles/modular/templating.gemfile" if ENV.fetch("K_JEM_TEMPLATING", "false").casecmp("true").zero? diff --git a/gems/kettle-jem/lib/kettle/jem/templates/shim/gem.gemspec.example b/gems/kettle-jem/lib/kettle/jem/templates/shim/gem.gemspec.example index 32b5e317a..546ce8dbe 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/shim/gem.gemspec.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/shim/gem.gemspec.example @@ -35,10 +35,10 @@ Gem::Specification.new do |spec| spec.add_development_dependency "rake", "~> 13.0" # Testing - spec.add_development_dependency("kettle-test", "~> 2.0", ">= 2.0.12") # ruby >= {KJ|MIN_TEST_RUBY} + spec.add_development_dependency("kettle-test", "~> 2.0", ">= 2.0.15") # ruby >= {KJ|MIN_TEST_RUBY} spec.add_development_dependency "rspec", "~> 3.12" # Releasing spec.add_development_dependency("ruby-progressbar", "~> 1.13") # ruby >= 0 - spec.add_development_dependency("stone_checksums", "~> 1.0", ">= 1.0.6") # ruby >= 2.2.0 + spec.add_development_dependency("stone_checksums", "~> 1.0", ">= 1.0.7") # ruby >= 2.2.0 end diff --git a/gems/kettle-jem/lib/kettle/jem/templates/spec/README.md.example b/gems/kettle-jem/lib/kettle/jem/templates/spec/README.md.example new file mode 100644 index 000000000..83a47df17 --- /dev/null +++ b/gems/kettle-jem/lib/kettle/jem/templates/spec/README.md.example @@ -0,0 +1,28 @@ +# Specs + +This project uses `kettle-test` as its RSpec harness. The generated +`spec/spec_helper.rb` requires `kettle/test/rspec`, which installs the shared +test configuration and helper APIs used throughout the suite. + +## Harness Helpers + +These helpers are available in specs after `spec/spec_helper.rb` loads: + +- `stub_env("NAME" => "value")` temporarily sets environment variables and + restores them after the example. +- `hide_env("NAME")` temporarily removes environment variables and restores + them after the example. +- `block_is_expected` supports expectation syntax for blocks. +- `:check_output` disables default stream silencing for examples that need to + assert output. +- `:freeze` and `:travel` metadata integrate with Timecop for example-level + time control. +- `:skip_global_travel` opts an example out of global time travel. +- `pending_for` marks examples pending for selected runtimes or dependency + versions. +- `include_context "with rake", "task_name"` is available when `rake` was + loaded before `kettle/test/rspec`. + +Prefer these helpers over ad hoc ENV mutation, direct Timecop setup, or direct +stdout/stderr plumbing. They keep specs isolated across parallel workers and +make local runs match CI behavior. diff --git a/gems/kettle-jem/lib/kettle/jem/templates/spec/spec_helper.rb.example b/gems/kettle-jem/lib/kettle/jem/templates/spec/spec_helper.rb.example index 75f9ec13b..ac4796aba 100644 --- a/gems/kettle-jem/lib/kettle/jem/templates/spec/spec_helper.rb.example +++ b/gems/kettle-jem/lib/kettle/jem/templates/spec/spec_helper.rb.example @@ -21,6 +21,7 @@ end # External RSpec & related config require "kettle/test/rspec" +# `kettle/test/rspec` installs harness helpers documented in spec/README.md. # This library require "{KJ|ENTRYPOINT_REQUIRE}" diff --git a/gems/kettle-jem/lib/kettle/jem/version.rb b/gems/kettle-jem/lib/kettle/jem/version.rb index cab640039..0c32a73ec 100644 --- a/gems/kettle-jem/lib/kettle/jem/version.rb +++ b/gems/kettle-jem/lib/kettle/jem/version.rb @@ -2,9 +2,12 @@ module Kettle module Jem + # Version namespace for this gem. module Version + # Current gem version. VERSION = "7.1.0" end + # Current gem version exposed at the traditional constant location. VERSION = Version::VERSION # Traditional Constant Location end end diff --git a/gems/kettle-jem/spec/bin/kettle_jem_deps_floor_spec.rb b/gems/kettle-jem/spec/bin/kettle_jem_deps_floor_spec.rb index 62cf9445f..171189453 100644 --- a/gems/kettle-jem/spec/bin/kettle_jem_deps_floor_spec.rb +++ b/gems/kettle-jem/spec/bin/kettle_jem_deps_floor_spec.rb @@ -1,5 +1,8 @@ # frozen_string_literal: true +require "open3" +require "stringio" + load File.expand_path("../../bin/kettle-jem-deps-floor", __dir__) RSpec.describe KettleJemDepsFloor do @@ -94,12 +97,45 @@ def read_file(relative_path) File.read(File.join(project_root, relative_path)) end + def init_git_repository + run_git("init", project_root) + run_git("-C", project_root, "config", "user.name", "Spec User") + run_git("-C", project_root, "config", "user.email", "spec@example.com") + run_git("-C", project_root, "add", ".") + run_git("-C", project_root, "commit", "-m", "initial") + end + + def run_git(*args) + _stdout, stderr, status = Open3.capture3("git", *args) + raise stderr unless status.success? + end + + def git_status + stdout, _stderr, status = Open3.capture3("git", "-C", project_root, "status", "--short") + raise "git status failed" unless status.success? + + stdout + end + + def git_subject + stdout, _stderr, status = Open3.capture3("git", "-C", project_root, "log", "-1", "--format=%s") + raise "git log failed" unless status.success? + + stdout.chomp + end + it "defaults the project root to the gem root relative to the bin script" do options = described_class.parse_options([]) expect(options.fetch(:project_root)).to eq(File.expand_path("../..", __dir__)) end + it "allows dependency floor writes to opt out of default commits" do + options = described_class.parse_options(%w[--write --no-commit]) + + expect(options).to include(write: true, commit: false) + end + it "reports patch updates without writing files" do result = described_class.new(project_root: project_root, resolver: resolver, options: {upgrade: "patch"}).run @@ -125,10 +161,25 @@ def read_file(relative_path) expect(read_file("template/valid.gemfile.example")).to include('gem "example_dep", "~> 1.2", ">= 1.2.3"') end + it "prints dry-run mode and a write hint when stale floors are found" do + out = StringIO.new + err = StringIO.new + allow(described_class).to receive(:new) + .and_return(described_class.new(project_root: project_root, resolver: resolver, options: {upgrade: "patch"})) + + status = described_class.run(%w[--upgrade patch], out: out, err: err) + + expect(status).to eq(0) + expect(out.string).to include("deps-floor: mode=dry-run upgrade=patch") + expect(out.string).to include("hint: rerun with --write --upgrade patch") + expect(err.string).to eq("") + end + it "updates parseable Ruby and tokenized template files when writing" do result = described_class.new(project_root: project_root, resolver: resolver, options: {write: true, upgrade: "minor"}).run expect(result[:updates]).to eq(6) + expect(result[:commit]).to include(status: "unavailable", reason: "not_git_repository") expect(read_file("lib/embedded.rb")).to include('{name: "embedded_dep", source: %(gem "embedded_dep", "~> 4.5", ">= 4.5.7"\\n)}') expect(read_file("lib/embedded.rb")).to include('nomono_requirements = ["~> 1.0", ">= 1.0.9"]') expect(read_file("template/valid.gemfile.example")).to include('gem "example_dep", "~> 1.3", ">= 1.3.0"') @@ -140,6 +191,71 @@ def read_file(relative_path) expect(read_file("template/documentation.gemfile.example")).to include('gem "yard-timekeeper", "~> 0.2", ">= 0.2.4", require: false') end + it "commits written updates by default inside git repositories" do + init_git_repository + + result = described_class.new(project_root: project_root, resolver: resolver, options: {write: true, upgrade: "minor"}).run + + expect(result[:commit]).to include(status: "committed") + expect(result[:commit].fetch(:files)).to include( + "lib/embedded.rb", + "template/documentation.gemfile.example", + "template/tokenized.gemspec.example", + "template/valid.gemfile.example" + ) + expect(git_status).to eq("") + expect(git_subject).to eq("⬆️ Raise kettle-jem dependency floors") + end + + it "commits written updates from a project nested below the git worktree root" do + monorepo_root = Dir.mktmpdir + nested_project_root = File.join(monorepo_root, "gems", "kettle-jem") + FileUtils.mkdir_p(nested_project_root) + begin + described_class::SOURCE_GLOBS.each do |pattern| + source = File.join(project_root, pattern) + next unless File.file?(source) + + destination = File.join(nested_project_root, pattern) + FileUtils.mkdir_p(File.dirname(destination)) + FileUtils.cp(source, destination) + end + run_git("init", monorepo_root) + run_git("-C", monorepo_root, "config", "user.name", "Spec User") + run_git("-C", monorepo_root, "config", "user.email", "spec@example.com") + run_git("-C", monorepo_root, "add", ".") + run_git("-C", monorepo_root, "commit", "-m", "initial") + + result = described_class.new(project_root: nested_project_root, resolver: resolver, options: {write: true, upgrade: "minor"}).run + stdout, _stderr, status = Open3.capture3("git", "-C", monorepo_root, "status", "--short") + + expect(result[:commit]).to include(status: "committed") + expect(result[:commit].fetch(:files)).to include("lib/embedded.rb") + expect(stdout).to eq("") + expect(status).to be_success + ensure + FileUtils.rm_rf(monorepo_root) + end + end + + it "leaves written updates uncommitted when commit is disabled" do + init_git_repository + + result = described_class.new(project_root: project_root, resolver: resolver, options: {write: true, commit: false, upgrade: "minor"}).run + + expect(result[:commit]).to be_nil + expect(git_status).to include(" M lib/embedded.rb") + end + + it "refuses to commit when target files were already dirty before writing" do + init_git_repository + write_file("template/valid.gemfile.example", "#{read_file("template/valid.gemfile.example")}\n# local edit\n") + + expect { + described_class.new(project_root: project_root, resolver: resolver, options: {write: true, upgrade: "minor"}).run + }.to raise_error(RuntimeError, /target files were already dirty/) + end + it "allows the caller to select major updates" do result = described_class.new(project_root: project_root, resolver: resolver, options: {write: true, upgrade: "major"}).run diff --git a/gems/kettle-jem/spec/bin/kettle_jem_workflow_pins_spec.rb b/gems/kettle-jem/spec/bin/kettle_jem_workflow_pins_spec.rb index bedfa70ff..650ed8110 100644 --- a/gems/kettle-jem/spec/bin/kettle_jem_workflow_pins_spec.rb +++ b/gems/kettle-jem/spec/bin/kettle_jem_workflow_pins_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require "psych" +require "stringio" load File.expand_path("../../bin/kettle-jem-workflow-pins", __dir__) @@ -12,6 +12,24 @@ let(:new_pin) { "actions/checkout@#{new_sha} # v1.0.1" } let(:pin_index_path) { File.join(project_root, "lib", "kettle", "jem.rb") } let(:workflow_path) { File.join(project_root, "lib", "kettle", "jem", "templates", ".github", "workflows", "ci.yml.example") } + let(:env) { {"GITHUB_TOKEN" => "token"} } + let(:client) { instance_double(Kettle::Gha::Pins::GitHubClient) } + let(:resolver_plan) do + { + is_outdated: true, + current_version: "1.0.0", + latest_outdated: { + sha: new_sha, + version: "1.0.1" + }, + reason: Kettle::Gha::Pins::UPGRADE_REASON, + updates: { + sha: new_sha, + version: "1.0.1", + reason: Kettle::Gha::Pins::UPGRADE_REASON + } + } + end before do FileUtils.mkdir_p(File.dirname(pin_index_path)) @@ -19,49 +37,137 @@ File.write(pin_index_path, %(def github_actions_step_pins\n {"actions/checkout" => "#{old_pin}"}\nend\n)) File.write(workflow_path, "steps:\n - uses: #{old_pin}\n") allow(Kettle::Jem).to receive(:github_actions_step_pins).and_return({"actions/checkout" => old_pin}) - allow(Open3).to receive(:capture3) do |_env, *command, chdir:| - root_arg = command.fetch(command.index("--root") + 1) - synthetic_workflow = File.read(File.join(root_arg, "action-pin-index.yml")) - - expect(chdir).to eq(project_root) - expect(command).not_to include("--cache-path") - expect(command.fetch(command.index("--upgrade") + 1)).to eq("major") - expect { Psych.parse_stream(synthetic_workflow) }.not_to raise_error - expect(synthetic_workflow).to include(" - name: actions/checkout\n") - - [ - JSON.generate( - "planned_changes" => [ - { - "action" => "actions/checkout", - "new_ref" => new_sha, - "new_version" => "1.0.1" - } - ], - "outdated_pins" => [] - ), - "", - instance_double(Process::Status, success?: true, exitstatus: 0) - ] - end + allow(Kettle::Gha::Pins::GitHubClient).to receive(:new).and_return(client) + allow(Kettle::Gha::Pins).to receive(:resolve_action_plan).and_return(resolver_plan) end after do FileUtils.rm_rf(project_root) end + def init_git_repository(root = project_root) + run_git("init", root) + run_git("-C", root, "config", "user.name", "Spec User") + run_git("-C", root, "config", "user.email", "spec@example.com") + run_git("-C", root, "add", ".") + run_git("-C", root, "commit", "-m", "initial") + end + + def run_git(*args) + _stdout, stderr, status = Open3.capture3("git", *args) + raise stderr unless status.success? + end + + def git_status(root = project_root) + stdout, _stderr, status = Open3.capture3("git", "-C", root, "status", "--short") + raise "git status failed" unless status.success? + + stdout + end + + def git_subject(root = project_root) + stdout, _stderr, status = Open3.capture3("git", "-C", root, "log", "-1", "--format=%s") + raise "git log failed" unless status.success? + + stdout.chomp + end + it "defaults the project root to the gem root relative to the bin script" do options = described_class.parse_options([]) expect(options.fetch(:project_root)).to eq(File.expand_path("../..", __dir__)) end + it "allows workflow pin writes to opt out of default commits" do + options = described_class.parse_options(%w[--write --no-commit]) + + expect(options).to include(write: true, commit: false) + end + it "updates the pin index and workflow examples by action key" do - result = described_class.new(project_root: project_root, options: {write: true}).run + result = described_class.new(project_root: project_root, env: env, options: {write: true}).run expect(result[:updated_actions]).to eq(["actions/checkout"]) expect(File.read(pin_index_path)).to include(new_pin) expect(File.read(workflow_path)).to include("uses: #{new_pin}") + expect(Kettle::Gha::Pins).to have_received(:resolve_action_plan).with( + cache: {}, + client: client, + repo_ref: "actions/checkout", + old_ref: old_sha, + upgrade_level: "major" + ) + end + + it "prints dry-run mode and a write hint when stale pins are found" do + out = StringIO.new + err = StringIO.new + allow(described_class).to receive(:new) + .and_return(described_class.new(project_root: project_root, env: env, options: {upgrade: "patch"})) + + status = described_class.run(%w[--upgrade patch], env: env, out: out, err: err) + + expect(status).to eq(0) + expect(out.string).to include("workflow-pins: mode=dry-run upgrade=patch") + expect(out.string).to include("workflow-pins: 1 update") + expect(out.string).to include("hint: rerun with --write --upgrade patch") + expect(err.string).to eq("") + end + + it "commits written updates by default inside git repositories" do + init_git_repository + + result = described_class.new(project_root: project_root, env: env, options: {write: true}).run + + expect(result[:commit]).to include(status: "committed") + expect(result[:commit].fetch(:files)).to include( + "lib/kettle/jem.rb", + "lib/kettle/jem/templates/.github/workflows/ci.yml.example" + ) + expect(git_status).to eq("") + expect(git_subject).to eq("📌 Update kettle-jem workflow pins") + end + + it "leaves written updates uncommitted when commit is disabled" do + init_git_repository + + result = described_class.new(project_root: project_root, env: env, options: {write: true, commit: false}).run + + expect(result[:commit]).to be_nil + expect(git_status).to include(" M lib/kettle/jem.rb") + expect(git_status).to include(" M lib/kettle/jem/templates/.github/workflows/ci.yml.example") + end + + it "refuses to commit when target files were already dirty before writing" do + init_git_repository + File.write(workflow_path, "#{File.read(workflow_path)}# local edit\n") + + expect { + described_class.new(project_root: project_root, env: env, options: {write: true}).run + }.to raise_error(RuntimeError, /target files were already dirty/) + end + + it "commits written updates from a project nested below the git worktree root" do + monorepo_root = Dir.mktmpdir + nested_project_root = File.join(monorepo_root, "gems", "kettle-jem") + nested_pin_index_path = File.join(nested_project_root, "lib", "kettle", "jem.rb") + nested_workflow_path = File.join(nested_project_root, "lib", "kettle", "jem", "templates", ".github", "workflows", "ci.yml.example") + begin + FileUtils.mkdir_p(File.dirname(nested_pin_index_path)) + FileUtils.mkdir_p(File.dirname(nested_workflow_path)) + FileUtils.cp(pin_index_path, nested_pin_index_path) + FileUtils.cp(workflow_path, nested_workflow_path) + init_git_repository(monorepo_root) + + result = described_class.new(project_root: nested_project_root, env: env, options: {write: true}).run + + expect(result[:commit]).to include(status: "committed") + expect(result[:commit].fetch(:files)).to include("lib/kettle/jem.rb") + expect(git_status(monorepo_root)).to eq("") + expect(git_subject(monorepo_root)).to eq("📌 Update kettle-jem workflow pins") + ensure + FileUtils.rm_rf(monorepo_root) + end end it "preserves Ruby source delimiters around pins when writing updates" do @@ -80,7 +186,7 @@ def github_actions_step_pins end RUBY - result = described_class.new(project_root: project_root, options: {write: true}).run + result = described_class.new(project_root: project_root, env: env, options: {write: true}).run updated = File.read(pin_index_path) expect(result[:updated_actions]).to eq(["actions/checkout"]) @@ -88,7 +194,7 @@ def github_actions_step_pins expect(updated).to include(%("actions/checkout" => "#{new_pin}")) end - it "updates sub-action pins when kettle-gha-sha-pins reports the parent action repository" do + it "updates sub-action pins through the parent action repository" do sub_action = "github/codeql-action/init" old_sub_pin = "#{sub_action}@#{old_sha} # v4.36.0" new_sub_pin = "#{sub_action}@#{new_sha} # v4.36.2" @@ -96,27 +202,61 @@ def github_actions_step_pins allow(Kettle::Jem).to receive(:github_actions_step_pins).and_return({sub_action => old_sub_pin}) File.write(pin_index_path, %(def github_actions_step_pins\n {"#{sub_action}" => "#{old_sub_pin}"}\nend\n)) File.write(workflow_path, "steps:\n - uses: #{old_sub_pin}\n") - allow(Open3).to receive(:capture3).and_return([ - JSON.generate( - "planned_changes" => [ - { - "action" => "github/codeql-action", - "old_value" => "#{sub_action}@#{old_sha}", - "new_ref" => new_sha, - "new_version" => "4.36.2" - } - ], - "outdated_pins" => [] - ), - "", - instance_double(Process::Status, success?: true, exitstatus: 0) - ]) - - result = described_class.new(project_root: project_root, options: {write: true}).run + allow(Kettle::Gha::Pins).to receive(:resolve_action_plan).and_return( + resolver_plan.merge( + current_version: "4.36.0", + latest_outdated: {sha: new_sha, version: "4.36.2"}, + updates: { + sha: new_sha, + version: "4.36.2", + reason: Kettle::Gha::Pins::UPGRADE_REASON + } + ) + ) + + result = described_class.new(project_root: project_root, env: env, options: {write: true}).run expect(result[:updated_actions]).to eq([sub_action]) expect(File.read(pin_index_path)).to include(new_sub_pin) expect(File.read(workflow_path)).to include("uses: #{new_sub_pin}") + expect(Kettle::Gha::Pins).to have_received(:resolve_action_plan).with( + cache: {}, + client: client, + repo_ref: "github/codeql-action", + old_ref: old_sha, + upgrade_level: "major" + ) + end + + it "updates stale version comments when the pinned SHA is already current" do + old_comment_pin = "codecov/codecov-action@#{old_sha} # v7" + new_comment_pin = "codecov/codecov-action@#{old_sha} # v7.0.0" + allow(Kettle::Jem).to receive(:github_actions_step_pins).and_return({"codecov/codecov-action" => old_comment_pin}) + File.write(pin_index_path, %(def github_actions_step_pins\n {"codecov/codecov-action" => "#{old_comment_pin}"}\nend\n)) + File.write(workflow_path, "steps:\n - uses: #{old_comment_pin}\n") + allow(Kettle::Gha::Pins).to receive(:resolve_action_plan).and_return( + { + is_outdated: false, + current_version: "7.0.0", + latest_outdated: nil, + reason: nil, + updates: nil + } + ) + + result = described_class.new(project_root: project_root, env: env, options: {write: true, commit: false}).run + + expect(result[:updated_actions]).to eq(["codecov/codecov-action"]) + expect(result[:planned_changes]).to include( + hash_including( + "action" => "codecov/codecov-action", + "old_version" => "7", + "new_version" => "7.0.0", + "reason" => "update_version_comment" + ) + ) + expect(File.read(pin_index_path)).to include(new_comment_pin) + expect(File.read(workflow_path)).to include("uses: #{new_comment_pin}") end it "fails check mode when template sources drift from the canonical pin index" do @@ -126,14 +266,12 @@ def github_actions_step_pins allow(Kettle::Jem).to receive(:github_actions_step_pins).and_return({"actions/checkout" => canonical_pin}) File.write(pin_index_path, %(def github_actions_step_pins\n {"actions/checkout" => "#{canonical_pin}"}\nend\n)) File.write(workflow_path, "steps:\n - uses: #{stale_pin}\n") - allow(Open3).to receive(:capture3).and_return([ - JSON.generate("planned_changes" => [], "outdated_pins" => []), - "", - instance_double(Process::Status, success?: true, exitstatus: 0) - ]) + allow(Kettle::Gha::Pins).to receive(:resolve_action_plan).and_return( + {is_outdated: false, current_version: nil, latest_outdated: nil, reason: nil, updates: nil} + ) expect { - described_class.new(project_root: project_root, options: {check: true}).run + described_class.new(project_root: project_root, env: env, options: {check: true}).run }.to raise_error(RuntimeError, /GitHub Actions pins are stale/) end @@ -144,28 +282,26 @@ def github_actions_step_pins allow(Kettle::Jem).to receive(:github_actions_step_pins).and_return({"actions/checkout" => canonical_pin}) File.write(pin_index_path, %(def github_actions_step_pins\n {"actions/checkout" => "#{canonical_pin}"}\nend\n)) File.write(workflow_path, "steps:\n - uses: #{stale_pin}\n") - allow(Open3).to receive(:capture3).and_return([ - JSON.generate("planned_changes" => [], "outdated_pins" => []), - "", - instance_double(Process::Status, success?: true, exitstatus: 0) - ]) + allow(Kettle::Gha::Pins).to receive(:resolve_action_plan).and_return( + {is_outdated: false, current_version: nil, latest_outdated: nil, reason: nil, updates: nil} + ) - result = described_class.new(project_root: project_root, options: {write: true}).run + result = described_class.new(project_root: project_root, env: env, options: {write: true}).run expect(result[:updated_actions]).to eq(["actions/checkout"]) expect(File.read(pin_index_path)).to include(canonical_pin) expect(File.read(workflow_path)).to include("uses: #{canonical_pin}") end - it "includes stdout diagnostics when kettle-gha-sha-pins fails without stderr" do - allow(Open3).to receive(:capture3).and_return([ - JSON.generate("errors" => [{"error" => "yaml_parse_error"}]), - "", - instance_double(Process::Status, success?: false, exitstatus: 2) - ]) + it "uses gh auth token as a fallback when token env vars are absent" do + allow(Open3).to receive(:capture3).with({}, "gh", "auth", "token", chdir: project_root).and_return( + ["gh-token\n", "", instance_double(Process::Status, success?: true)] + ) - expect { - described_class.new(project_root: project_root).run - }.to raise_error(RuntimeError, /kettle-gha-sha-pins failed with exit 2: .*yaml_parse_error/m) + described_class.new(project_root: project_root, env: {}).run + + expect(Kettle::Gha::Pins::GitHubClient).to have_received(:new).with( + hash_including(token: "gh-token", user_agent: "kettle-jem-workflow-pins") + ) end end diff --git a/gems/kettle-jem/spec/cli_spec.rb b/gems/kettle-jem/spec/cli_spec.rb index ad2298577..8877804e7 100644 --- a/gems/kettle-jem/spec/cli_spec.rb +++ b/gems/kettle-jem/spec/cli_spec.rb @@ -314,6 +314,31 @@ def tmp_root end end + it "accepts checksum modes with space, equals, and ignore alias forms" do + allow(Kettle::Jem).to receive(:plan_project) do |_root, env:, run_options:| + { + mode: "plan", + env: env, + run_options: run_options, + checksum_mode: Kettle::Jem::ChecksumMode.parse(run_options[:checksums]).to_s + } + end + + space_status, space_out, space_err = run_cli(["plan", "--json", "--checksums", "dest,template"]) + equals_status, equals_out, equals_err = run_cli(["plan", "--json", "--checksums=dest,ignore-template"]) + ignore_status, ignore_out, ignore_err = run_cli(["plan", "--json", "--ignore-checksums"]) + + expect(space_status).to eq(0) + expect(space_err).to eq("") + expect(JSON.parse(space_out).fetch("checksum_mode")).to eq("dest,template") + expect(equals_status).to eq(0) + expect(equals_err).to eq("") + expect(JSON.parse(equals_out).fetch("checksum_mode")).to eq("dest,ignore-template") + expect(ignore_status).to eq(0) + expect(ignore_err).to eq("") + expect(JSON.parse(ignore_out).fetch("checksum_mode")).to eq("off") + end + it "aliases bare template to the full install task" do Dir.mktmpdir("kettle-jem-cli", tmp_root) do |root| allow(Kettle::Jem::Tasks::InstallTask).to receive(:run).and_return( diff --git a/gems/kettle-jem/spec/fixtures/kettle_family_interleaved_changelog.md b/gems/kettle-jem/spec/fixtures/kettle_family_interleaved_changelog.md new file mode 100644 index 000000000..6046ccdac --- /dev/null +++ b/gems/kettle-jem/spec/fixtures/kettle_family_interleaved_changelog.md @@ -0,0 +1,161 @@ +# Changelog + +[![SemVer 2.0.0][semver-img]][semver] [![Keep-A-Changelog 1.0.0][keep-changelog-img]][keep-changelog] + +All notable changes to this project will be documented in this file. + +## [Unreleased] + +### Added + +### Changed + +- The `kettle-family` executable startup header is now shown only when + `--verbose` is passed; `-v` and `--version` still print just the executable + version and exit. + +### Deprecated + +### Removed + +### Fixed + +### Security + +## [1.1.9] - 2026-07-25 + +- TAG: [v1.1.9][1.1.9t] +- COVERAGE: 95.23% -- 3197/3357 lines in 25 files +- BRANCH COVERAGE: 77.20% -- 1192/1544 branches in 25 files +- 28.16% documented + +### Added + +- `kettle-family state` now marks mismatched GitHub release tags and reports + kettle-jem transfer changelog replay lag in a `T📰` column. + +### Changed + +- Bare `kettle-family bump` now defaults to `--only bump`, and bare + `kettle-family release` now defaults to `--only pending`. + +- kettle-jem-template-20260725-002 - Generated gemspec templates now include + `anonymous_loader` as a development dependency, and version specs use it to + execute generated `version.rb` files for coverage without redefining package + constants. Managed version specs are removed when `version_gem` is disabled + or incompatible with the project's runtime Ruby floor. + +### Fixed + +- Monorepo templating now passes a shared Git operation lock to `kettle-jem`, + allowing template workers to serialize repo-wide Git config/index mutations + instead of only bootstrap commits. + +## [1.1.6] - 2026-07-25 + +- TAG: [v1.1.6][1.1.6t] +- COVERAGE: 95.19% -- 3084/3240 lines in 25 files +- BRANCH COVERAGE: 76.80% -- 1132/1474 branches in 25 files +- 28.68% documented + +### Fixed + +- Release summaries now count only members that reached a release terminal + phase as succeeded, so dependency-floor side effects do not appear as + published gems after an earlier failure. + +### Changed + +- kettle-jem-template-20260725-001 - Generated JRuby and TruffleRuby workflow + files now run when pull request head branches start with `feature/release`, + so release CI monitoring does not report intentionally skipped engine + workflows as failures. + +## [1.1.5] - 2026-07-25 + +- TAG: [v1.1.5][1.1.5t] +- COVERAGE: 94.64% -- 3021/3192 lines in 25 files +- BRANCH COVERAGE: 76.45% -- 1110/1452 branches in 25 files +- 28.68% documented + +### Added + +- Release orchestration now passes `--events` through to `kettle-release` and + maps release NDJSON events into the family progress display. + +### Changed + +- kettle-jem-template-initial - Initial templating by kettle-jem. + +### Fixed + +- Failed release command reports now summarize release NDJSON diagnostics and + final status instead of dumping the raw event stream into the human report. + +## [1.0.2] - 2026-07-21 + +- TAG: [v1.0.2][1.0.2t] +- COVERAGE: 95.51% -- 2637/2761 lines in 23 files +- BRANCH COVERAGE: 77.98% -- 928/1190 branches in 23 files +- 28.63% documented + +### Added + +- `kettle-family template` now passes family-level `readme.corporate_sponsors` + config into member `kettle-jem` runs for template-managed README sponsor logos. +- `kettle-family state` is now an alias for `kettle-family release-state`. + +### Changed + +- `kettle-family release-state` now reports the checked-out branch and displays + release distance as local/remote ahead and behind counts. +- kettle-jem-template-20260720-001 - Generated READMEs can now render + template-managed corporate sponsor logos from project or family config. +- kettle-jem-template-20260720-002 - Generated development Gemfiles now use the + released `tree_sitter_language_pack` gem 1.13.3 or newer by default. +- kettle-jem-template-20260720-003 - Generated StructuredMerge Git diff driver + config now uses the installed `smorg-rb` Ruby driver name. +- kettle-jem-template-20260720-004 - Generated multi-engine workflow files now + omit JRuby and TruffleRuby jobs when project config declares MRI-only engines. +- kettle-jem-template-20260720-005 - Generated README Support & Community rows + now include a RubyForum help badge. + +### Fixed + +- Default member discovery now excludes benchmark fixture gemspecs so benchmark + projects are not treated as install/template/release family members. +- Generated HEAD and runtime dependency HEAD CI workflows no longer include + JRuby or TruffleRuby jobs for this MRI-only gem. + +## [1.0.0] - 2026-07-17 + +- TAG: [v1.0.0][1.0.0t] +- COVERAGE: 95.22% -- 2370/2489 lines in 23 files +- BRANCH COVERAGE: 76.87% -- 801/1042 branches in 23 files +- 29.29% documented + +### Added + +- `kettle-family release` now accepts `--ci-workflows` and forwards the + comma-separated workflow subset to member `kettle-release` runs. + +### Changed + +- Promoted the gems that provide built-in `kettle-family` workflow commands to + runtime dependencies: `kettle-dev` for release/changelog/SHA-pin/version + tooling and `kettle-test` for test runs. + +- kettle-jem-template-20260716-001 - Shim gemspec manifests now include + `LICENSE.md` instead of nonexistent `LICENSE.txt`. +- kettle-jem-template-20260716-002 - Generated gemspec manifests now ship fewer + repository-only files by default to reduce downstream distro packaging churn. + +### Fixed + +- Root-mode family changelog release commands now pass the configured family + name to `kettle-changelog`, allowing shared root changelogs to run from + repositories that do not have a root gemspec. + +[semver]: https://semver.org/spec/v2.0.0.html +[semver-img]: https://img.shields.io/badge/semver-2.0.0-FFDD67.svg?style=flat +[keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-FFDD67.svg?style=flat diff --git a/gems/kettle-jem/spec/fixtures/thin_slice.json b/gems/kettle-jem/spec/fixtures/thin_slice.json index 3dca47b53..85dd6310f 100644 --- a/gems/kettle-jem/spec/fixtures/thin_slice.json +++ b/gems/kettle-jem/spec/fixtures/thin_slice.json @@ -143,7 +143,7 @@ "files": { ".github/FUNDING.yml": "github: [example]\nopen_collective: example\ncustom:\n - https://example.test/fund\n\ntidelift: rubygems/example\n", ".github/workflows/ancient.yml": null, - ".github/workflows/custom-ci.yml": "name: Custom CI\nenv:\n K_SOUP_COV_DO: true\n\npermissions:\n contents: read\n\non:\n push:\n branches: [main]\n\nconcurrency:\n group: \"${{ github.workflow }}-${{ github.ref }}\"\n cancel-in-progress: true\n\njobs:\n test:\n runs-on: ubuntu-latest\n strategy:\n matrix:\n ruby: [\"3.2\", \"3.3\"]\n steps:\n - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0\n - uses: ruby/setup-ruby@12fd324f1d0b43274fdc8130f6980590a667c455 # v1.312.0\n with:\n ruby-version: \"${{ matrix.ruby }}\"\n - name: Upload coverage to Coveralls\n if: ${{ !env.ACT }}\n uses: coverallsapp/github-action@648a8eb78e6d50909eff900e4ec85cab4524a45b # v2.3.6\n with:\n github-token: ${{ secrets.GITHUB_TOKEN }}\n file: coverage/lcov.info\n format: lcov\n continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}\n\n - name: Upload coverage to QLTY\n if: ${{ !env.ACT }}\n uses: qltysh/qlty-action/coverage@fd52dc852530a708d68c3b7342f8d33d1df4cd55 # v2.2.1\n with:\n oidc: true\n files: coverage/lcov.info\n format: lcov\n skip-errors: false\n continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}\n\n - name: Upload coverage to CodeCov\n if: ${{ !env.ACT }}\n uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0\n with:\n use_oidc: true\n disable_search: true\n fail_ci_if_error: false\n files: coverage/lcov.info,coverage/coverage.xml\n verbose: true\n\n - name: Code Coverage Summary Report\n if: ${{ !env.ACT && github.event_name == 'pull_request' }}\n uses: irongut/CodeCoverageSummary@51cc3a756ddcd398d447c044c02cb6aa83fdae95 # v1.3.0\n with:\n filename: ./coverage/coverage.xml\n badge: true\n fail_below_min: true\n format: markdown\n hide_branch_rate: false\n hide_complexity: true\n indicators: true\n output: both\n thresholds: '${{ env.K_SOUP_COV_MIN_LINE }} ${{ env.K_SOUP_COV_MIN_BRANCH }}'\n continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}\n\n - name: Add Coverage PR Comment\n uses: marocchino/sticky-pull-request-comment@0ea0beb66eb9baf113663a64ec522f60e49231c0 # v3.0.4\n if: ${{ !env.ACT && github.event_name == 'pull_request' }}\n with:\n recreate: true\n path: code-coverage-results.md\n continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}\n", + ".github/workflows/custom-ci.yml": "name: Custom CI\nenv:\n K_SOUP_COV_DO: true\n\npermissions:\n contents: read\n\non:\n push:\n branches: [main]\n\nconcurrency:\n group: \"${{ github.workflow }}-${{ github.ref }}\"\n cancel-in-progress: true\n\njobs:\n test:\n runs-on: ubuntu-latest\n strategy:\n matrix:\n ruby: [\"3.2\", \"3.3\"]\n steps:\n - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0\n - uses: ruby/setup-ruby@12fd324f1d0b43274fdc8130f6980590a667c455 # v1.312.0\n with:\n ruby-version: \"${{ matrix.ruby }}\"\n - name: Upload coverage to Coveralls\n if: ${{ !env.ACT }}\n uses: coverallsapp/github-action@648a8eb78e6d50909eff900e4ec85cab4524a45b # v2.3.6\n with:\n github-token: ${{ secrets.GITHUB_TOKEN }}\n file: coverage/lcov.info\n format: lcov\n fail-on-error: false\n continue-on-error: true\n\n - name: Upload coverage to QLTY\n if: ${{ !env.ACT }}\n uses: qltysh/qlty-action/coverage@fd52dc852530a708d68c3b7342f8d33d1df4cd55 # v2.2.1\n with:\n oidc: true\n files: coverage/lcov.info\n format: lcov\n skip-errors: true\n continue-on-error: true\n\n - name: Upload coverage to CodeCov\n if: ${{ !env.ACT }}\n uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0\n with:\n use_oidc: true\n disable_search: true\n fail_ci_if_error: false\n files: coverage/lcov.info,coverage/coverage.xml\n verbose: true\n continue-on-error: true\n\n - name: Code Coverage Summary Report\n if: ${{ !env.ACT && github.event_name == 'pull_request' }}\n uses: irongut/CodeCoverageSummary@51cc3a756ddcd398d447c044c02cb6aa83fdae95 # v1.3.0\n with:\n filename: ./coverage/coverage.xml\n badge: true\n fail_below_min: true\n format: markdown\n hide_branch_rate: false\n hide_complexity: true\n indicators: true\n output: both\n thresholds: '${{ env.K_SOUP_COV_MIN_LINE }} ${{ env.K_SOUP_COV_MIN_BRANCH }}'\n continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}\n\n - name: Add Coverage PR Comment\n uses: marocchino/sticky-pull-request-comment@0ea0beb66eb9baf113663a64ec522f60e49231c0 # v3.0.4\n if: ${{ !env.ACT && github.event_name == 'pull_request' }}\n with:\n recreate: true\n path: code-coverage-results.md\n continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}\n", "README.md": "# Old Name\n\nExisting intro.\n\n\n| Field | Value |\n|---|---|\n| Package | example |\n| Description | Example gem for kettle-jem |\n| Homepage | https://example.test |\n| Source | https://github.com/example/example |\n| License | MIT |\n| Funding | https://example.test/fund, https://github.com/sponsors/example, https://opencollective.com/example, https://tidelift.com/funding/github/rubygems/example |\n\n", "CHANGELOG.md": "# Changelog\n\n## [Unreleased]\n\n### Added\n\n### Changed\n\n### Deprecated\n\n### Removed\n\n### Fixed\n\n### Security\n\n## [0.1.0] - 2026-01-01\n\n- Initial release.\n", "Rakefile": "# frozen_string_literal: true\n\n# Keep custom task.\ntask :custom do\n puts \"custom\"\nend\n", diff --git a/gems/kettle-jem/spec/integration/appraisal_helper_and_token_spec.rb b/gems/kettle-jem/spec/integration/appraisal_helper_and_token_spec.rb index f3e314e74..f3d4dc812 100644 --- a/gems/kettle-jem/spec/integration/appraisal_helper_and_token_spec.rb +++ b/gems/kettle-jem/spec/integration/appraisal_helper_and_token_spec.rb @@ -1098,6 +1098,9 @@ def min_ruby_version(gem_name, version) expect(upload_steps).to include("Upload coverage to Coveralls") expect(upload_steps).to include("Upload coverage to QLTY") expect(upload_steps).to include("Upload coverage to CodeCov") + expect(upload_steps).to include("fail-on-error: false") + expect(upload_steps).to include("skip-errors: true") + expect(upload_steps.scan("continue-on-error: true").length).to be >= 3 template_paths = described_class.template_source_preferences(root, config).map { |preference| preference.fetch(:target_path) } expect(template_paths).to include(".github/.codecov.yml", ".qlty/qlty.toml") diff --git a/gems/kettle-jem/spec/integration/appraisals_and_gemfile_template_spec.rb b/gems/kettle-jem/spec/integration/appraisals_and_gemfile_template_spec.rb index fa6fcebb5..9c38cce52 100644 --- a/gems/kettle-jem/spec/integration/appraisals_and_gemfile_template_spec.rb +++ b/gems/kettle-jem/spec/integration/appraisals_and_gemfile_template_spec.rb @@ -594,11 +594,11 @@ end end - it "serializes legacy engine setup-ruby workaround in generated CI workflows" do + it "serializes legacy Ruby setup-ruby workaround in generated CI workflows" do ci = { default_branch: "main", exec_cmd: "kettle-test", - ruby_versions: ["truffleruby-25.0", "jruby-9.2", "jruby-9.3"] + ruby_versions: ["ruby-2.7", "truffleruby-25.0", "jruby-9.2", "jruby-9.3"] } workflows = [ described_class.send(:synchronize_github_actions_ci, "", {package: {name: "example"}, ci: ci}), @@ -640,12 +640,22 @@ expect(workflows + [coverage_workflow]).not_to include(include(' - "r*_*-*-v*"')) expect(preserved_workflows).to all(include(' - "r*_*-*-v*"')) - expect(workflows).to all(include("bundler-cache: ${{ matrix.ruby != 'truffleruby-25.0' && matrix.ruby != 'jruby-9.2' && matrix.ruby != 'jruby-9.3' }}")) + expect(workflows).to all(include("bundler-cache: ${{ matrix.ruby != 'ruby-2.4' && matrix.ruby != 'ruby-2.5' && matrix.ruby != 'ruby-2.6' && matrix.ruby != 'ruby-2.7' && matrix.ruby != 'truffleruby-25.0' && matrix.ruby != 'jruby-9.2' && matrix.ruby != 'jruby-9.3' }}")) expect(workflows).to all(include(" - name: Bundle install for legacy Ruby engine")) - expect(workflows).to all(include(" if: ${{ matrix.ruby == 'truffleruby-25.0' || matrix.ruby == 'jruby-9.2' || matrix.ruby == 'jruby-9.3' }}")) + expect(workflows).to all(include(" if: ${{ matrix.ruby == 'ruby-2.4' || matrix.ruby == 'ruby-2.5' || matrix.ruby == 'ruby-2.6' || matrix.ruby == 'ruby-2.7' || matrix.ruby == 'truffleruby-25.0' || matrix.ruby == 'jruby-9.2' || matrix.ruby == 'jruby-9.3' }}")) expect(workflows).to all(include(' bundle config set --local path "${RUNNER_TEMP}/bundle"')) + expect(workflows).to all(include(" bundle config set --local mirror.https://gem.coop https://rubygems.org")) expect(workflows).to all(include(" bundle install --jobs 1")) + %w[2.4 2.5 2.6 2.7].each do |version| + packaged_workflow = File.read(project_root.join("lib/kettle/jem/templates/.github/workflows/ruby-#{version}.yml.example")) + expect(packaged_workflow).to include("bundler-cache: false") + expect(packaged_workflow).to include(" - name: Bundle install for Ruby #{version}") + expect(packaged_workflow).to include(' bundle config set --local path "${RUNNER_TEMP}/bundle"') + expect(packaged_workflow).to include(" bundle config set --local mirror.https://gem.coop https://rubygems.org") + expect(packaged_workflow).to include(" bundle install --jobs 1") + end + packaged_rubocop = File.read(project_root.join("lib/kettle/jem/templates/.rubocop.yml.example")) expect(packaged_rubocop).to include(' - "**/vendor/**/*"') @@ -653,18 +663,21 @@ expect(packaged_workflow).to include("bundler-cache: false") expect(packaged_workflow).to include(" - name: Bundle install for TruffleRuby 25.0") expect(packaged_workflow).to include(' bundle config set --local path "${RUNNER_TEMP}/bundle"') + expect(packaged_workflow).to include(" bundle config set --local mirror.https://gem.coop https://rubygems.org") expect(packaged_workflow).to include(" bundle install --jobs 1") packaged_workflow = File.read(project_root.join("lib/kettle/jem/templates/.github/workflows/jruby-9.2.yml.example")) expect(packaged_workflow).to include("bundler-cache: false") expect(packaged_workflow).to include(" - name: Bundle install for JRuby 9.2") expect(packaged_workflow).to include(' bundle config set --local path "${RUNNER_TEMP}/bundle"') + expect(packaged_workflow).to include(" bundle config set --local mirror.https://gem.coop https://rubygems.org") expect(packaged_workflow).to include(" bundle install --jobs 1") packaged_workflow = File.read(project_root.join("lib/kettle/jem/templates/.github/workflows/jruby-9.3.yml.example")) expect(packaged_workflow).to include("bundler-cache: false") expect(packaged_workflow).to include(" - name: Bundle install for JRuby 9.3") expect(packaged_workflow).to include(' bundle config set --local path "${RUNNER_TEMP}/bundle"') + expect(packaged_workflow).to include(" bundle config set --local mirror.https://gem.coop https://rubygems.org") expect(packaged_workflow).to include(" bundle install --jobs 1") end @@ -703,8 +716,10 @@ expect(current_workflow).to include("rspec-status-current-${{matrix.ruby}}-${{matrix.appraisal}}-") expect(jruby_workflow).to include("rspec-status-jruby-${{matrix.ruby}}-${{matrix.appraisal}}-") expect(jruby_workflow).to include("startsWith(github.head_ref, 'jruby/')") + expect(jruby_workflow).to include("startsWith(github.head_ref, 'feature/release')") expect(truffleruby_workflow).to include("rspec-status-truffleruby-25.0-${{matrix.ruby}}-${{matrix.appraisal}}-") expect(truffleruby_workflow).to include("startsWith(github.head_ref, 'truffleruby/')") + expect(truffleruby_workflow).to include("startsWith(github.head_ref, 'feature/release')") expect(framework_workflow).to include( "rspec-status-framework-ci-${{matrix.ruby}}-${{matrix.framework_version}}-${{matrix.gemfile}}-" ) @@ -809,6 +824,63 @@ end end + it "removes duplicate main Gemfile eval_gemfile declarations for the same path" do + tmp_root = File.expand_path("../tmp", __dir__) + FileUtils.mkdir_p(tmp_root) + Dir.mktmpdir("kettle-jem-main-gemfile-duplicate-eval-gemfile", tmp_root) do |root| + write_tree(root, { + "example.gemspec" => <<~RUBY, + Gem::Specification.new do |spec| + spec.name = "example" + spec.summary = "Example" + spec.required_ruby_version = ">= 3.0" + end + RUBY + ".kettle-jem.yml" => <<~YAML, + templates: + root: template + apply: true + entries: + - Gemfile + YAML + "Gemfile" => <<~RUBY, + # frozen_string_literal: true + + source "https://gem.coop" + + # Modular sibling dependencies + eval_gemfile "gemfiles/modular/coverage.gemfile" + + # Debugging + eval_gemfile "gemfiles/modular/debug.gemfile" + + # Code Coverage + eval_gemfile "gemfiles/modular/coverage.gemfile" + RUBY + "template/Gemfile.example" => <<~RUBY + # frozen_string_literal: true + + source "https://gem.coop" + + # Debugging + eval_gemfile "gemfiles/modular/debug.gemfile" + + # Code Coverage + eval_gemfile "gemfiles/modular/coverage.gemfile" + RUBY + }) + + apply = described_class.apply_project(root, env: {}) + report = apply.fetch(:recipe_reports).find { |candidate| candidate.fetch(:relative_path) == "Gemfile" } + content = report.fetch(:final_content) + + expect(content.scan('eval_gemfile "gemfiles/modular/coverage.gemfile"').size).to eq(1) + expect(content).not_to include("# Modular sibling dependencies") + expect(content).to include("# Code Coverage") + expect(File.read(File.join(root, "Gemfile"))).to eq(content) + end + end + it "repairs missing main Gemfile recording evals from configured Appraisals" do tmp_root = File.expand_path("../tmp", __dir__) FileUtils.mkdir_p(tmp_root) @@ -998,11 +1070,30 @@ ) tokens = described_class.send(:project_runtime_template_tokens, runtime) - expect(tokens.fetch("KJ|KETTLE_DEV_LOCAL_GEMS")).to eq("kettle-dev kettle-test kettle-soup-cover kettle-drift") + expect(tokens.fetch("KJ|KETTLE_DEV_LOCAL_GEMS")).to eq("kettle-dev kettle-family kettle-test kettle-soup-cover kettle-drift") + expect(tokens.fetch("KJ|MAIN_GEMFILE_KETTLE_FAMILY_GEM")).to include('gem "kettle-family"') expect(tokens.fetch("KJ|MAIN_GEMFILE_NOMONO_BOOTSTRAP")).to include('gem "nomono"') expect(tokens.fetch("KJ|PACKAGE_NAME")).to eq("example") end + it "omits kettle-family from its own main Gemfile dependency token" do + runtime = described_class.send( + :project_runtime_facts, + {}, + {}, + package_name: "kettle-family", + source_url: "https://github.com/kettle-dev/kettle-family", + author_domain: "example.test", + min_ruby: ">= 3.2", + test_min_ruby: Gem::Version.new("3.2"), + version: "1.2.0" + ) + tokens = described_class.send(:project_runtime_template_tokens, runtime) + + expect(tokens.fetch("KJ|KETTLE_DEV_LOCAL_GEMS")).to include("kettle-family") + expect(tokens.fetch("KJ|MAIN_GEMFILE_KETTLE_FAMILY_GEM")).to eq("") + end + it "exposes package summary and description tokens for generated metadata" do tokens = described_class.send( :template_tokens, @@ -1070,6 +1161,7 @@ expect(content.index('require "kettle/soup/cover/config"')).to be < content.index("SimpleCov.start") expect(content).to include("SimpleCov.start") expect(content).to include('require "kettle/test/rspec"') + expect(content).to include("installs harness helpers documented in spec/README.md") expect(content.scan('require "example/custom"').size).to eq(1) end end @@ -1132,6 +1224,7 @@ expect(content.index('require "kettle/soup/cover/config"')).to be < content.index("SimpleCov.start") expect(content).to include("SimpleCov.start") expect(content.scan('require "kettle/test/rspec"').size).to eq(1) + expect(content).to include("installs harness helpers documented in spec/README.md") expect(content.scan('require "example-gem"').size).to eq(1) expect(content).not_to include('require "example/gem"') expect(content).not_to include("require \"kettle/test/rspec\"\n\n\n# Internal ENV config") @@ -1143,6 +1236,58 @@ end end + it "adds the kettle-test helper documentation comment when merging an existing spec helper" do + tmp_root = File.expand_path("../tmp", __dir__) + FileUtils.mkdir_p(tmp_root) + + Dir.mktmpdir("kettle-jem-spec-helper-helper-doc-merge", tmp_root) do |root| + write_tree(root, { + "example.gemspec" => <<~RUBY, + Gem::Specification.new do |spec| + spec.name = "example" + spec.summary = "Example gem" + spec.required_ruby_version = ">= 3.2" + end + RUBY + ".kettle-jem.yml" => <<~YAML, + project_emoji: 🧪 + rubygems: + entrypoint_require: "example" + templates: + root: packaged + apply: true + entries: + - spec/spec_helper.rb + YAML + "spec/spec_helper.rb" => <<~RUBY + # frozen_string_literal: true + + # External RSpec & related config + require "kettle/test/rspec" + + require "example" + + RSpec.configure do |config| + config.disable_monkey_patching! + end + RUBY + }) + + apply = described_class.apply_project(root, env: {}, run_options: {skip_commit: true}) + report = apply.fetch(:recipe_reports).find do |candidate| + candidate.fetch(:relative_path) == "spec/spec_helper.rb" + end + content = report.fetch(:final_content) + + expect(report.fetch(:changed)).to be(true) + expect(content).to include(<<~RUBY) + require "kettle/test/rspec" + # `kettle/test/rspec` installs harness helpers documented in spec/README.md. + RUBY + expect(File.read(File.join(root, "spec", "spec_helper.rb"))).to eq(content) + end + end + it "treats packaged local Gemfiles as template-owned by default" do tmp_root = File.expand_path("../tmp", __dir__) FileUtils.mkdir_p(tmp_root) @@ -1191,6 +1336,73 @@ end end + it "removes obsolete nomono activation ceremony from merged local Gemfiles" do + tmp_root = File.expand_path("../tmp", __dir__) + FileUtils.mkdir_p(tmp_root) + Dir.mktmpdir("kettle-jem-local-gemfile-nomono-loader-cleanup", tmp_root) do |root| + write_tree(root, { + "example.gemspec" => <<~RUBY, + Gem::Specification.new do |spec| + spec.name = "example" + spec.summary = "Example" + end + RUBY + ".kettle-jem.yml" => <<~YAML, + files: + gemfiles/modular/coverage_local.gemfile: + strategy: merge + templates: + root: packaged + apply: true + entries: + - gemfiles/modular/coverage_local.gemfile + YAML + "gemfiles/modular/coverage_local.gemfile" => <<~RUBY + # frozen_string_literal: true + + # Local path overrides for development. + # Loaded by the associated non-local gemfile when KETTLE_DEV_DEV != "false". + + # Bootstrapping nomono here cannot rely on a plain `gem "nomono", ...` line. + # Bundler records that dependency during Gemfile evaluation, but it does not + # activate that exact version before the immediate `require "nomono/bundler"`. + nomono_activation_requirements = ["~> 1.0", ">= 1.0.8"] + nomono_lockfile = File.expand_path("../../Gemfile.lock", __dir__) + if File.file?(nomono_lockfile) + nomono_locked_spec = Bundler::LockfileParser + .new(Bundler.read_file(nomono_lockfile)) + .specs + .find { |spec| spec.name == "nomono" } + nomono_locked = nomono_locked_spec && + Gem::Requirement.new(nomono_activation_requirements).satisfied_by?(nomono_locked_spec.version) + if nomono_locked + nomono_activation_requirements = ["= \#{nomono_locked_spec.version}"] + end + end + Kernel.send(:gem, "nomono", *nomono_activation_requirements) + require "nomono/bundler" + + local_gems = %w[ + custom-local + ] + RUBY + }) + + plan = described_class.plan_project(root, env: {}) + report = plan.fetch(:recipe_reports).find do |candidate| + candidate.fetch(:relative_path) == "gemfiles/modular/coverage_local.gemfile" + end + content = report.fetch(:final_content) + + expect(content.scan('require "nomono/bundler"').size).to eq(1) + expect(content).not_to include("nomono_activation_requirements") + expect(content).not_to include("nomono_lockfile") + expect(content).not_to include("Bundler::LockfileParser") + expect(content).not_to include('Kernel.send(:gem, "nomono"') + expect(content).to include('root: ["src", "my", "kettle-dev"]') + end + end + it "loads nomono's own local Gemfiles from the local source tree" do tmp_root = File.expand_path("../tmp", __dir__) FileUtils.mkdir_p(tmp_root) @@ -1222,6 +1434,7 @@ expect(content).not_to include("nomono_activation_requirements") expect(content).not_to include("nomono_lockfile") expect(content).not_to include("Bundler::LockfileParser") + expect(content).to include('root: ["src", "my", "kettle-dev"]') end end @@ -1284,8 +1497,8 @@ end content = report.fetch(:final_content) - expect(content).to include('nomono_requirements = ["~> 1.0", ">= 1.0.8"]') - expect(content).to include('gem "nomono", *nomono_requirements, require: false') + expect(content).to include('gem "nomono", "~> 1.1", ">= 1.1.0", require: false') + expect(content).not_to include("nomono_requirements") expect(content.index('gem "nomono"')).to be < content.index('eval_gemfile "gemfiles/modular/templating.gemfile"') expect(File.read(File.join(root, "Gemfile"))).to eq(content) end @@ -1314,7 +1527,7 @@ apply = described_class.apply_project(root, env: {}) content = apply.fetch(:recipe_reports).find { |candidate| candidate.fetch(:relative_path) == "Gemfile" }.fetch(:final_content) - expect(content).not_to include('gem "nomono", *nomono_requirements') + expect(content).not_to include('gem "nomono"') expect(content).not_to include("nomono_requirements =") expect(File.read(File.join(root, "Gemfile"))).to eq(content) end @@ -1353,8 +1566,8 @@ gemfile = File.read(File.join(root, "Gemfile")) expect(apply.fetch(:changed_files)).to include("Gemfile") - expect(gemfile).to include('nomono_requirements = ["~> 1.0", ">= 1.0.8"]') - expect(gemfile).to include('gem "nomono", *nomono_requirements, require: false') + expect(gemfile).to include('gem "nomono", "~> 1.1", ">= 1.1.0", require: false') + expect(gemfile).not_to include("nomono_requirements") expect(gemfile.index('gem "nomono"')).to be < gemfile.index('eval_gemfile "gemfiles/modular/templating.gemfile"') end end @@ -1513,6 +1726,12 @@ end end + it "keeps YARD linting in the documentation modular Gemfile" do + content = File.read(File.join(described_class::PACKAGED_TEMPLATE_ROOT, "gemfiles", "modular", "documentation.gemfile.example")) + + expect(content).to include('gem "yard-lint", "~> 1.10", ">= 1.10.2", require: false') + end + it "generates shunted.gemfile entries from resolved development dependency Ruby floors" do tmp_root = File.expand_path("../tmp", __dir__) FileUtils.mkdir_p(tmp_root) diff --git a/gems/kettle-jem/spec/integration/config_metadata_template_spec.rb b/gems/kettle-jem/spec/integration/config_metadata_template_spec.rb index 35766541a..a63e58a94 100644 --- a/gems/kettle-jem/spec/integration/config_metadata_template_spec.rb +++ b/gems/kettle-jem/spec/integration/config_metadata_template_spec.rb @@ -184,13 +184,15 @@ expect(config.fetch("yard_host")).to eq("docs.env.test") expect(config.fetch("homepage_uri")).to eq("https://homepage.env.test") expect(config.dig("rubygems", "min_ruby")).to eq("1.8.7") - expect(config.dig("kettle-jem", "version")).to eq(Kettle::Jem::Version::VERSION) + expect(config).not_to have_key("kettle-jem") expect(config.dig("tokens", "forge", "gh_user")).to eq("env-user") + lock = YAML.safe_load_file(File.join(root, Kettle::Jem::KETTLE_LOCK_PATH)) + expect(lock.dig("template_state", "version")).to eq(Kettle::Jem::Version::VERSION) expect(report.fetch(:final_content)).to include("min_divergence_threshold: 12 # ENV override: KJ_MIN_DIVERGENCE_THRESHOLD") expect(report.fetch(:final_content)).to include('yard_host: "docs.env.test" # ENV override: KJ_YARD_HOST') expect(report.fetch(:final_content)).to include('homepage_uri: "https://homepage.env.test" # ENV override: KJ_HOMEPAGE_URI') expect(report.fetch(:final_content)).to include('min_ruby: "1.8.7" # ENV override: KJ_MIN_RUBY') - expect(report.fetch(:final_content)).to include(%(version: "#{Kettle::Jem::Version::VERSION}")) + expect(report.fetch(:final_content)).not_to include("kettle-jem:") expect(report.fetch(:final_content)).to include('gh_user: "env-user" # GitHub username only. ENV: KJ_GH_USER') expect(File.read(File.join(root, described_class::KETTLE_CONFIG_PATH))).to eq(report.fetch(:final_content)) end @@ -1439,14 +1441,193 @@ described_class::TemplateChecksums.write_to_config( config_path: File.join(root, ".kettle-jem.yml"), checksums: current, - version: "1.2.3" + version: "1.2.3", + applied_at: "2026-07-24", + changelog_replay: { + "last_entry_key" => "kettle-jem-template-20260720-005", + "last_entry_date" => "2026-07-20" + } ) rewritten = YAML.safe_load_file(File.join(root, ".kettle-jem.yml")) expect(rewritten.fetch("kettle-jem").fetch("version")).to eq("1.2.3") + expect(rewritten.fetch("kettle-jem").fetch("applied_at")).to eq("2026-07-24") + expect(rewritten.fetch("kettle-jem").fetch("changelog_replay")).to eq( + "last_entry_key" => "kettle-jem-template-20260720-005", + "last_entry_date" => "2026-07-20" + ) expect(rewritten.fetch("kettle-jem").fetch("checksums")).to eq(current) end end + it "migrates legacy config checksum state into a kettle-jem lockfile" do + tmp_root = File.expand_path("../tmp", __dir__) + FileUtils.mkdir_p(tmp_root) + Dir.mktmpdir("kettle-jem-checksum-lock-migration", tmp_root) do |root| + write_tree(root, { + "example.gemspec" => <<~RUBY, + Gem::Specification.new do |spec| + spec.name = "example" + spec.summary = "Example" + end + RUBY + "template/config.yml.example" => "name: template\n", + ".kettle-jem.yml" => <<~YAML + templates: + root: template + apply: true + entries: + - source: config.yml.example + target: config.yml + files: + config.yml: + strategy: accept_template + + kettle-jem: + version: "0.1.0" + applied_at: "2026-07-01" + checksums: + "config.yml.example": "old" + YAML + }) + + apply = described_class.apply_project(root, env: {}, run_options: {accept: true, skip_drift_check: true}) + lock = YAML.safe_load_file(File.join(root, Kettle::Jem::KETTLE_LOCK_PATH)) + config = YAML.safe_load_file(File.join(root, ".kettle-jem.yml")) + + expect(apply.fetch(:post_apply_steps).find { |step| step.fetch(:name) == "kettle_jem_state_sync" }).to include( + changed_files: include(Kettle::Jem::KETTLE_LOCK_PATH, ".kettle-jem.yml") + ) + expect(config).not_to have_key("kettle-jem") + expect(lock.fetch("template_state").fetch("checksums")).to include("config.yml.example") + expect(lock.fetch("files").fetch("config.yml")).to include("input_fingerprint", "dest_sha256") + end + end + + it "moves a legacy root kettle-jem lockfile into the structuredmerge directory" do + tmp_root = File.expand_path("../tmp", __dir__) + FileUtils.mkdir_p(tmp_root) + Dir.mktmpdir("kettle-jem-root-lock-migration", tmp_root) do |root| + write_tree(root, { + "example.gemspec" => <<~RUBY, + Gem::Specification.new do |spec| + spec.name = "example" + spec.summary = "Example" + end + RUBY + "template/config.yml.example" => "name: template\n", + ".kettle-jem.lock" => <<~YAML, + --- + version: 1 + template_state: + version: 7.1.0 + changelog_replay: + last_entry_key: kettle-jem-template-20260720-001 + checksums: + config.yml.example: old + files: {} + YAML + ".kettle-jem.yml" => <<~YAML + templates: + root: template + apply: true + entries: + - source: config.yml.example + target: config.yml + files: + config.yml: + strategy: accept_template + YAML + }) + + apply = described_class.apply_project(root, env: {}, run_options: {accept: true, skip_drift_check: true}) + lock = YAML.safe_load_file(File.join(root, Kettle::Jem::KETTLE_LOCK_PATH)) + + expect(File).not_to exist(File.join(root, Kettle::Jem::LEGACY_KETTLE_LOCK_PATH)) + expect(lock.fetch("template_state")).to include("changelog_replay", "checksums") + expect(apply.fetch(:post_apply_steps).find { |step| step.fetch(:name) == "kettle_jem_state_sync" }).to include( + changed_files: include(Kettle::Jem::KETTLE_LOCK_PATH, Kettle::Jem::LEGACY_KETTLE_LOCK_PATH) + ) + end + end + + it "skips unchanged template inputs by default but honors destination checksum mode" do + tmp_root = File.expand_path("../tmp", __dir__) + FileUtils.mkdir_p(tmp_root) + Dir.mktmpdir("kettle-jem-checksum-skip", tmp_root) do |root| + write_tree(root, { + "example.gemspec" => <<~RUBY, + Gem::Specification.new do |spec| + spec.name = "example" + spec.summary = "Example" + end + RUBY + "template/config.yml.example" => "name: template\n", + ".kettle-jem.yml" => <<~YAML + templates: + root: template + apply: true + entries: + - source: config.yml.example + target: config.yml + files: + config.yml: + strategy: accept_template + YAML + }) + + described_class.apply_project(root, env: {}, run_options: {accept: true, skip_drift_check: true}) + File.write(File.join(root, "config.yml"), "name: local\n") + + default_apply = described_class.apply_project(root, env: {}, run_options: {accept: true, skip_drift_check: true}) + default_report = default_apply.fetch(:recipe_reports).find { |report| report.fetch(:relative_path) == "config.yml" } + + expect(default_report.fetch(:checksum_skipped)).to be(true) + expect(File.read(File.join(root, "config.yml"))).to eq("name: local\n") + + dest_apply = described_class.apply_project(root, env: {}, run_options: {accept: true, skip_drift_check: true, checksums: "dest,template"}) + dest_report = dest_apply.fetch(:recipe_reports).find { |report| report.fetch(:relative_path) == "config.yml" } + + expect(dest_report).not_to include(:checksum_skipped) + expect(File.read(File.join(root, "config.yml"))).to eq("name: template\n") + end + end + + it "does not write template token values to the checksum lockfile" do + tmp_root = File.expand_path("../tmp", __dir__) + FileUtils.mkdir_p(tmp_root) + Dir.mktmpdir("kettle-jem-checksum-token-redaction", tmp_root) do |root| + write_tree(root, { + "example.gemspec" => <<~RUBY, + Gem::Specification.new do |spec| + spec.name = "example" + spec.summary = "Example" + end + RUBY + "template/config.yml.example" => "freeze: {KJ|FREEZE_TOKEN}\n", + ".kettle-jem.yml" => <<~YAML + defaults: + freeze_token: "ghp_sensitive-example-value" + templates: + root: template + apply: true + entries: + - source: config.yml.example + target: config.yml + files: + config.yml: + strategy: accept_template + YAML + }) + + described_class.apply_project(root, env: {}, run_options: {accept: true, skip_drift_check: true}) + lock_content = File.read(File.join(root, Kettle::Jem::KETTLE_LOCK_PATH)) + + expect(lock_content).to include("input_fingerprint") + expect(lock_content).not_to include("ghp_sensitive-example-value") + expect(lock_content).not_to include("freeze: ghp_sensitive-example-value") + end + end + it "reports duplicate drift during template apply runs" do tmp_root = File.expand_path("../tmp", __dir__) FileUtils.mkdir_p(tmp_root) @@ -2050,7 +2231,8 @@ def register_kettle_jem_plugin(registrar) expect(direct_block).to include( 'direct_sibling_templating = ENV.fetch("K_JEM_TEMPLATING", "false").casecmp("true").zero?' ) - expect(gemfile).to include('nomono_requirements = ["~> 1.0", ">= 1.0.8"]') + expect(gemfile).to include('gem "nomono", "~> 1.1", ">= 1.1.0", require: false') + expect(gemfile).not_to include("nomono_requirements") expect(direct_block).to include('require "nomono/bundler"') expect(direct_block).not_to include("nomono_activation_requirements") expect(direct_block).not_to include("nomono_lockfile") @@ -2109,8 +2291,7 @@ def register_kettle_jem_plugin(registrar) gemspec - nomono_requirements = ["~> 1.0", ">= 1.0.8"] - gem "nomono", *nomono_requirements, require: false + gem "nomono", "~> 1.1", ">= 1.1.0", require: false # Direct sibling dependencies (env-switched via RUBYTHEMS_DEV) direct_sibling_gems = %w[ @@ -2212,8 +2393,7 @@ def register_kettle_jem_plugin(registrar) gemspec - nomono_requirements = ["~> 1.0", ">= 1.0.8"] - gem "nomono", *nomono_requirements, require: false + gem "nomono", "~> 1.1", ">= 1.1.0", require: false # Direct sibling dependencies (env-switched via RUBYTHEMS_DEV) direct_sibling_gems = %w[ @@ -2310,8 +2490,7 @@ def register_kettle_jem_plugin(registrar) gemspec - nomono_requirements = ["~> 1.0", ">= 1.0.8"] - gem "nomono", *nomono_requirements, require: false + gem "nomono", "~> 1.1", ">= 1.1.0", require: false # Direct sibling dependencies (env-switched via RUBY_OPENID_DEV) direct_sibling_gems = %w[ @@ -2360,7 +2539,7 @@ def register_kettle_jem_plugin(registrar) end end - it "keeps the nomono requirements assignment before an existing nomono gem call" do + it "replaces legacy nomono requirements assignments with a plain dependency declaration" do tmp_root = File.expand_path("../tmp", __dir__) FileUtils.mkdir_p(tmp_root) Dir.mktmpdir("kettle-jem-main-gemfile-nomono-order", tmp_root) do |root| @@ -2379,6 +2558,7 @@ def register_kettle_jem_plugin(registrar) source "https://gem.coop" # Local workspace dependency wiring for *_local.gemfile overrides + nomono_requirements = ["~> 1.0", ">= 1.0.8"] gem "nomono", *nomono_requirements, require: false # ruby >= 2.2 gem "progress_bar" @@ -2392,8 +2572,6 @@ def register_kettle_jem_plugin(registrar) ) gemspec - - nomono_requirements = ["~> 1.0", ">= 1.0.8"] RUBY ".kettle-jem.yml" => <<~YAML project_emoji: "💎" @@ -2411,12 +2589,10 @@ def register_kettle_jem_plugin(registrar) run_options: {accept: true, force: true, skip_commit: true} ) gemfile = File.read(File.join(root, "Gemfile")) - requirement_line = gemfile.lines.index { |line| line.include?("nomono_requirements =") } - gem_line = gemfile.lines.index { |line| line.include?('gem "nomono", *nomono_requirements') } - expect(requirement_line).not_to be_nil - expect(gem_line).not_to be_nil - expect(requirement_line).to be < gem_line + expect(gemfile).to include('gem "nomono", "~> 1.1", ">= 1.1.0", require: false') + expect(gemfile).not_to include("nomono_requirements") + expect(gemfile).not_to include('gem "nomono", *nomono_requirements') end end diff --git a/gems/kettle-jem/spec/integration/gemspec_template_spec.rb b/gems/kettle-jem/spec/integration/gemspec_template_spec.rb index 33ac0bddc..44e1fa0c9 100644 --- a/gems/kettle-jem/spec/integration/gemspec_template_spec.rb +++ b/gems/kettle-jem/spec/integration/gemspec_template_spec.rb @@ -524,6 +524,13 @@ module Version VERSION = Version::VERSION # Traditional Constant Location end RUBY + "spec/legacy/version_spec.rb" => <<~RUBY, + # frozen_string_literal: true + + RSpec.describe Legacy::Version do + it_behaves_like "a Version module", described_class + end + RUBY "gemfiles/modular/runtime_heads.gemfile" => <<~RUBY, # frozen_string_literal: true @@ -574,13 +581,14 @@ module Version entrypoint_content = File.read(File.join(root, "lib", "legacy.rb")) version_content = File.read(File.join(root, "lib", "legacy", "version.rb")) runtime_heads_content = File.read(File.join(root, "gemfiles", "modular", "runtime_heads.gemfile")) + version_spec_path = File.join(root, "spec", "legacy", "version_spec.rb") expect(gemspec_content).not_to include("version_gem") expect(gemspec_content).to include('spec.required_ruby_version = ">= 1.8.7" # rubocop:disable Gemspec/RequiredRubyVersion') expect(apply.fetch(:post_apply_steps)).to include(hash_including( name: "version_gem_cleanup", status: "applied", - changed_files: ["lib/legacy.rb"] + changed_files: contain_exactly("lib/legacy.rb", "spec/legacy/version_spec.rb") )) expect(entrypoint_content).not_to include("version_gem") expect(entrypoint_content).not_to include("VersionGem") @@ -589,6 +597,7 @@ module Version expect(version_content).to include("module Version") expect(version_content).to include('VERSION = "0.1.0"') expect(version_content).to include("VERSION = Version::VERSION # Traditional Constant Location") + expect(File).not_to exist(version_spec_path) expect(runtime_heads_content).not_to include("version_gem") expect(runtime_heads_content).to include('eval_gemfile("x_std_libs/vHEAD.gemfile")') expect(File.read(File.join(root, "legacy.gemspec"))).to eq(gemspec_content) diff --git a/gems/kettle-jem/spec/integration/github_workflow_template_spec.rb b/gems/kettle-jem/spec/integration/github_workflow_template_spec.rb index b855d4eee..4a6cc4b30 100644 --- a/gems/kettle-jem/spec/integration/github_workflow_template_spec.rb +++ b/gems/kettle-jem/spec/integration/github_workflow_template_spec.rb @@ -479,7 +479,7 @@ end end - it "preserves newer destination GitHub Action SHA pins when accepting workflow templates" do + it "normalizes stale destination GitHub Action SHA pins when accepting workflow templates" do tmp_root = File.expand_path("../tmp", __dir__) FileUtils.mkdir_p(tmp_root) Dir.mktmpdir("kettle-jem-workflow-action-pin-preserve-slice", tmp_root) do |root| @@ -509,7 +509,7 @@ jobs: test: steps: - - uses: actions/checkout@#{newer_checkout_sha} # v7.0.0 + - uses: actions/checkout@#{newer_checkout_sha} # v9.0.0 - uses: ruby/setup-ruby@#{destination_setup_ruby_sha} # v1.0.0 YAML "template/.github/workflows/current.yml.example" => <<~YAML @@ -529,22 +529,13 @@ content = report.fetch(:final_content) expect(report.dig(:metadata, :template_source_preference)).to include(strategy: "accept_template") - expect(content).to include("actions/checkout@#{newer_checkout_sha} # v7.0.0") + expect_pinned_action(content, "actions/checkout") + expect(content).not_to include("actions/checkout@#{newer_checkout_sha} # v9.0.0") expect(content).not_to include("actions/checkout@#{template_checkout_sha} # v7.0.0") expect_pinned_action(content, "ruby/setup-ruby") expect(content).not_to include("ruby/setup-ruby@v1") - expect(report.dig(:metadata, :stale_github_workflow_template_pins)).to contain_exactly( - include( - path: ".github/workflows/current.yml", - action: "actions/checkout", - version: "v7.0.0", - preserved_sha: newer_checkout_sha, - template_sha: template_checkout_sha - ) - ) - expect(plan.fetch(:warnings)).to contain_exactly( - include("GitHub Actions template pins appear stale for .github/workflows/current.yml") - ) + expect(report.dig(:metadata, :stale_github_workflow_template_pins)).to be_nil + expect(plan.fetch(:warnings)).to be_empty end end @@ -1141,8 +1132,10 @@ expect(workflow).to include("- name: Update templating bootstrap dependencies") expect(workflow).to include("BUNDLE_GEMFILE: ${{ github.workspace }}/Gemfile") - expect(workflow).to include("K_JEM_TEMPLATING: \"true\"") expect(workflow).to include("run: bundle update nomono") expect(workflow.index("Update templating bootstrap dependencies")).to be < workflow.index("[Attempt 1] Appraisal") + + bootstrap_step = workflow[/ - name: Update templating bootstrap dependencies.*?(?=^ - name:)/m] + expect(bootstrap_step).not_to include("K_JEM_TEMPLATING") end end diff --git a/gems/kettle-jem/spec/integration/readme_changelog_template_spec.rb b/gems/kettle-jem/spec/integration/readme_changelog_template_spec.rb index f6a2d12cd..e04ab0fae 100644 --- a/gems/kettle-jem/spec/integration/readme_changelog_template_spec.rb +++ b/gems/kettle-jem/spec/integration/readme_changelog_template_spec.rb @@ -223,6 +223,12 @@ apply: false entries: - README.md + kettle-jem: + version: "7.0.0" + changelog_replay: + last_entry_key: "kettle-jem-template-20260715-999" + last_entry_date: "2026-07-15" + checksums: {} YAML "CHANGELOG.md" => <<~MARKDOWN # Changelog @@ -235,8 +241,8 @@ ### Changed - - kettle-jem-template-20260716-001 - Shim gemspec manifests now include - `LICENSE.md` instead of nonexistent `LICENSE.txt`. + - kettle-jem-template-20260716-001 - Shim gems now package `LICENSE.md` instead + of a missing `LICENSE.txt` file. ### Fixed @@ -254,6 +260,153 @@ end end + it "replays transfer entries when stored replay state claims entries absent from the changelog" do + tmp_root = File.expand_path("../tmp", __dir__) + FileUtils.mkdir_p(tmp_root) + Dir.mktmpdir("kettle-jem-changelog-replay-state-drift-slice", tmp_root) do |root| + write_tree(root, { + "example.gemspec" => <<~RUBY, + Gem::Specification.new do |spec| + spec.name = "example" + spec.summary = "Example gem" + spec.homepage = "https://github.com/structuredmerge/example" + spec.licenses = ["MIT"] + spec.required_ruby_version = ">= 3.2" + end + RUBY + ".kettle-jem.yml" => <<~YAML, + templates: + root: packaged + apply: false + entries: + - README.md + kettle-jem: + version: "7.1.0" + changelog_replay: + last_entry_key: "kettle-jem-template-20260725-001" + last_entry_date: "2026-07-25" + checksums: {} + YAML + "CHANGELOG.md" => <<~MARKDOWN + # Changelog + + ## [Unreleased] + + ### Added + + ### Changed + + - Project-authored item. + + ### Deprecated + + ### Removed + + ### Fixed + + ### Security + MARKDOWN + }) + + plan = described_class.plan_project(root, env: {}) + report = plan[:recipe_reports].find { |candidate| candidate.fetch(:recipe_name) == "changelog_unreleased" } + changelog = report.fetch(:final_content) + + expect(changelog).to include("- Project-authored item.") + expect(changelog).to include("kettle-jem-template-20260716-001") + expect(changelog).to include("kettle-jem-template-20260725-001") + expect(changelog).not_to include("kettle-jem-template-initial") + end + end + + it "uses migrated lockfile replay state for transfer changelog selection" do + tmp_root = File.expand_path("../tmp", __dir__) + FileUtils.mkdir_p(tmp_root) + Dir.mktmpdir("kettle-jem-changelog-lock-replay-state-slice", tmp_root) do |root| + write_tree(root, { + ".kettle-jem.yml" => <<~YAML, + templates: + root: packaged + apply: false + entries: + - README.md + YAML + Kettle::Jem::KETTLE_LOCK_PATH => <<~YAML, + --- + version: 1 + template_state: + version: 7.1.0 + changelog_replay: + last_entry_key: kettle-jem-template-20260720-001 + last_entry_date: '2026-07-20' + checksums: + README.md.example: old + files: {} + YAML + "CHANGELOG.md" => <<~MARKDOWN + # Changelog + + ## [Unreleased] + + ### Added + + - kettle-jem-template-20260720-001 - Already applied. + MARKDOWN + }) + entries = [ + {key: "kettle-jem-template-20260720-001", section: "Added", lines: ["Already applied."]}, + {key: "kettle-jem-template-20260721-001", section: "Fixed", lines: ["Later fix."]} + ] + + facts = described_class.send(:changelog_transfer_facts, root, entries) + + expect(facts.fetch(:first_template)).to be(false) + expect(facts.fetch(:transfer_entries).map { |entry| entry.fetch(:key) }).to eq(["kettle-jem-template-20260721-001"]) + end + end + + it "adds only the initial templating changelog entry when no replay state exists" do + tmp_root = File.expand_path("../tmp", __dir__) + FileUtils.mkdir_p(tmp_root) + Dir.mktmpdir("kettle-jem-changelog-initial-template-slice", tmp_root) do |root| + write_tree(root, { + "example.gemspec" => <<~RUBY, + Gem::Specification.new do |spec| + spec.name = "example" + spec.summary = "Example gem" + spec.homepage = "https://github.com/structuredmerge/example" + spec.licenses = ["MIT"] + spec.required_ruby_version = ">= 3.2" + end + RUBY + ".kettle-jem.yml" => <<~YAML, + templates: + root: packaged + apply: false + entries: + - README.md + YAML + "CHANGELOG.md" => <<~MARKDOWN + # Changelog + + ## [Unreleased] + + ### Added + + - Project-authored item. + MARKDOWN + }) + + plan = described_class.plan_project(root, env: {}) + report = plan[:recipe_reports].find { |candidate| candidate.fetch(:recipe_name) == "changelog_unreleased" } + changelog = report.fetch(:final_content) + + expect(changelog).to include("- kettle-jem-template-initial - Initial templating by kettle-jem.") + expect(changelog).not_to include("kettle-jem-template-20260716-001") + expect(changelog).to include("- Project-authored item.") + end + end + it "applies multiple missed transferable changelog entries without duplicating existing keys" do changelog = <<~MARKDOWN # Changelog @@ -267,10 +420,12 @@ entries = [ { key: "kettle-jem-template-20260716-001", + section: "### Changed", lines: ["- kettle-jem-template-20260716-001 - Already applied."] }, { key: "kettle-jem-template-20260716-002", + section: "### Fixed", lines: [ "- kettle-jem-template-20260716-002 - First missed transfer.", " Continued detail." @@ -278,6 +433,7 @@ }, { key: "kettle-jem-template-20260716-003", + section: "### Security", lines: ["- kettle-jem-template-20260716-003 - Second missed transfer."] } ] @@ -285,10 +441,178 @@ result = described_class.send(:apply_changelog_transfer_entries, changelog, entries) expect(result.scan("kettle-jem-template-20260716-001").size).to eq(1) + expect(result).to include("### Fixed\n\n- kettle-jem-template-20260716-002") + expect(result).to include("### Security\n\n- kettle-jem-template-20260716-003") expect(result).to include("- kettle-jem-template-20260716-002 - First missed transfer.\n Continued detail.") expect(result).to include("- kettle-jem-template-20260716-003 - Second missed transfer.") end + it "corrects stale transfer changelog entries inside released sections by stable ID" do + changelog = <<~MARKDOWN + # Changelog + + ## [Unreleased] + + ### Added + + ### Changed + + ### Deprecated + + ### Removed + + ### Fixed + + ### Security + + ## [1.0.7] - 2026-07-25 + + - TAG: [v1.0.7][1.0.7t] + - COVERAGE: 100.00% -- 129/129 lines in 8 files + - BRANCH COVERAGE: 100.00% -- 42/42 branches in 8 files + - 54.17% documented + + ### Changed + + - Project-authored changed entry. + + - kettle-jem-template-20260716-001 - Shim gemspec manifests now include + `LICENSE.md` instead of nonexistent `LICENSE.txt`. + - kettle-jem-template-20260720-001 - Generated READMEs can now render + template-managed corporate sponsor logos from project or family config. + - kettle-jem-template-20260725-001 - Generated JRuby and TruffleRuby workflow + files now run when pull request head branches start with `feature/release`, + so release CI monitoring does not report intentionally skipped engine + workflows as failures. + + ### Fixed + + - Project-authored fixed entry. + + ## [1.0.6] - 2026-07-11 + + - TAG: [v1.0.6][1.0.6t] + + ### Changed + + - Prior release entry. + MARKDOWN + entries = [ + { + key: "kettle-jem-template-20260716-001", + section: "### Fixed", + lines: [ + "- kettle-jem-template-20260716-001 - Shim gems now package `LICENSE.md` instead", + " of a missing `LICENSE.txt` file." + ] + }, + { + key: "kettle-jem-template-20260720-001", + section: "### Added", + lines: [ + "- kettle-jem-template-20260720-001 - READMEs can now display configured", + " corporate sponsor logos." + ] + }, + { + key: "kettle-jem-template-20260725-001", + section: "### Fixed", + lines: [ + "- kettle-jem-template-20260725-001 - Release pull request branches beginning", + " with `feature/release` now run JRuby and TruffleRuby workflows." + ] + } + ] + + result = described_class.send(:apply_changelog_transfer_entries, changelog, entries) + + expect(result.scan("kettle-jem-template-20260716-001").size).to eq(1) + expect(result.scan("kettle-jem-template-20260720-001").size).to eq(1) + expect(result.scan("kettle-jem-template-20260725-001").size).to eq(1) + expect(result).to include("## [1.0.7] - 2026-07-25") + expect(result).to include("- TAG: [v1.0.7][1.0.7t]") + expect(result).to include("- Project-authored changed entry.") + expect(result).to include("- Project-authored fixed entry.") + expect(result).to include("### Added\n\n- kettle-jem-template-20260720-001 - READMEs can now display configured") + expect(result).to include("### Fixed\n\n- Project-authored fixed entry.\n\n- kettle-jem-template-20260716-001") + expect(result).to include("- kettle-jem-template-20260725-001 - Release pull request branches beginning") + expect(result).not_to include("Shim gemspec manifests now include") + expect(result).not_to include("Generated READMEs can now render") + expect(result).not_to include("so release CI monitoring does not report") + expect(result).to include("## [1.0.6] - 2026-07-11") + expect(result).to include("- Prior release entry.") + end + + it "corrects interleaved transfer changelog entries across multiple released sections" do + changelog = File.read(project_root.join("spec/fixtures/kettle_family_interleaved_changelog.md")) + entries = described_class.transfer_changelog_entries + + result = described_class.send(:apply_changelog_transfer_entries, changelog, entries) + + entries.each do |entry| + expect(result.scan(entry.fetch(:key)).size).to eq(1) + expect(result).to include(entry.fetch(:lines).join("\n")) + end + expect(result).to include("## [1.1.9] - 2026-07-25") + expect(result).to include("- TAG: [v1.1.9][1.1.9t]") + expect(result).to include("## [1.1.6] - 2026-07-25") + expect(result).to include("## [1.0.2] - 2026-07-21") + expect(result).to include("## [1.0.0] - 2026-07-17") + expect(result).to include("- `kettle-family state` now marks mismatched GitHub release tags") + expect(result).to include("- Bare `kettle-family bump` now defaults to `--only bump`") + expect(result).to include("- Release summaries now count only members that reached a release terminal") + expect(result).to include("- `kettle-family template` now passes family-level `readme.corporate_sponsors`") + expect(result).to include("- Promoted the gems that provide built-in `kettle-family` workflow commands") + expect(result).not_to include("Generated gemspec templates now include") + expect(result).not_to include("Generated JRuby and TruffleRuby workflow") + expect(result).not_to include("Generated READMEs can now render") + expect(result).not_to include("Generated StructuredMerge Git diff driver") + expect(result).not_to include("Generated multi-engine workflow files") + expect(result).not_to include("Shim gemspec manifests now include") + end + + it "parses sectioned transferable changelog entries through Markdown owners" do + path = File.join(described_class::PACKAGED_TEMPLATE_ROOT, described_class::TRANSFER_CHANGELOG_TEMPLATE_PATH) + content = File.read(path) + context = Ast::Crispr::Markdown::Markly.document_context(content: content, source_label: path) + sections = context.structural_owners(owner_scope: :heading_sections).select do |owner| + owner.level == 2 && described_class.send(:changelog_transfer_section_map).key?(owner.heading_text.to_s.strip) + end + entries = described_class.transfer_changelog_entries + + expect(sections.map { |section| section.heading_text.to_s.strip }.uniq.size).to be > 1 + expect(entries).not_to be_empty + expect(entries.map { |entry| entry.fetch(:section) }.uniq.size).to be > 1 + expect(entries.map { |entry| entry.fetch(:key) }).to eq(entries.map { |entry| entry.fetch(:key) }.sort) + entries.each do |entry| + expect(entry.fetch(:key)).to match(/\Akettle-jem-template-\d{8}-\d{3}\z/) + expect(described_class::CHANGELOG_STANDARD_HEADINGS).to include(entry.fetch(:section)) + expect(entry.fetch(:lines).join("\n")).to include(entry.fetch(:key)) + end + end + + it "reports transfer changelog lag from a stored replay cursor" do + entries = described_class.transfer_changelog_entries + cursor = entries.fetch(-2).fetch(:key) + latest = entries.last.fetch(:key) + expected_missing = entries.last(1) + lag = described_class.transfer_changelog_lag(cursor, verbose: true) + + expect(lag.fetch(:last_entry_key)).to eq(cursor) + expect(lag.fetch(:latest_entry_key)).to eq(latest) + expect(lag.fetch(:missing_count)).to eq(expected_missing.size) + expect(lag.fetch(:missing_entries)).to eq(expected_missing) + end + + it "reports every transfer changelog entry as missing when no replay cursor exists" do + entries = described_class.transfer_changelog_entries + lag = described_class.transfer_changelog_lag + + expect(lag.fetch(:last_entry_key, nil)).to be_nil + expect(lag.fetch(:latest_entry_key)).to eq(entries.last.fetch(:key)) + expect(lag.fetch(:missing_count)).to eq(entries.size) + end + it "keeps the real CHANGELOG template in canonical Unreleased form" do template = File.read(project_root.join("lib/kettle/jem/templates/CHANGELOG.md.example")) diff --git a/gems/kettle-jem/spec/integration/shim_profile_spec.rb b/gems/kettle-jem/spec/integration/shim_profile_spec.rb index b29a13516..07c8b9f2f 100644 --- a/gems/kettle-jem/spec/integration/shim_profile_spec.rb +++ b/gems/kettle-jem/spec/integration/shim_profile_spec.rb @@ -105,8 +105,11 @@ expect(generated[:Gemfile]).not_to include("git:") expect_gem_dependency_declared(generated[:"gemfiles/modular/templating.gemfile"], "kettle-jem") expect(generated[:"gemfiles/modular/templating_local.gemfile"]).to include(%(structuredmerge_local_gems = %w[)) + expect(generated[:"gemfiles/modular/templating_local.gemfile"]).to include('root: ["src", "my", "kettle-dev"]') expect(generated[:"legacy-shim.gemspec"]).not_to include("old-implementation") expect(generated[:"lib/legacy/shim.rb"]).to include(%(require "legacy-shim2")) + expect(generated[:"lib/legacy/shim/version.rb"]).to include("# Version namespace delegated to the replacement gem.") + expect(generated[:"lib/legacy/shim/version.rb"]).to include("# Current gem version delegated to the replacement gem.") expect(generated[:"lib/legacy/strategies/shim.rb"]).to include(%(require "legacy/shim")) expect(generated[:"spec/shim_spec.rb"]).to include(%(require("legacy-shim2"))) expect(generated[:"README.md"]).to include("compatibility shim for `legacy-shim2`") diff --git a/gems/kettle-jem/spec/integration/structural_merge_template_spec.rb b/gems/kettle-jem/spec/integration/structural_merge_template_spec.rb index 6c7a49300..273801e22 100644 --- a/gems/kettle-jem/spec/integration/structural_merge_template_spec.rb +++ b/gems/kettle-jem/spec/integration/structural_merge_template_spec.rb @@ -467,7 +467,7 @@ module Version expect(signature).to include("module Version") expect(signature).to include("VERSION: String") expect(commands).to include( - %w[bundle binstubs appraisal2 rake rbs rspec-core yard kettle-dev kettle-test kettle-soup-cover stone_checksums], + %w[bundle binstubs appraisal2 rake rbs rspec-core yard kettle-dev kettle-test kettle-soup-cover kettle-gha-pins stone_checksums], kettle_jem_handoff_command("--skip-commit", "--only", "example-gem.gemspec") ) end diff --git a/gems/kettle-jem/spec/integration/template_bootstrap_spec.rb b/gems/kettle-jem/spec/integration/template_bootstrap_spec.rb index 9f0ccb8b7..92ec3dd54 100644 --- a/gems/kettle-jem/spec/integration/template_bootstrap_spec.rb +++ b/gems/kettle-jem/spec/integration/template_bootstrap_spec.rb @@ -75,7 +75,13 @@ expect(bootstrap_report.fetch(:final_content)).to include("# tokens - values for {KJ|...} placeholders used across template files") described_class.apply_project(root, env: {"KJ_MIN_DIVERGENCE_THRESHOLD" => "7"}) - expect(File.read(File.join(root, ".structuredmerge/kettle-jem.yml"))).to eq(bootstrap_report.fetch(:final_content)) + applied_config = File.read(File.join(root, ".structuredmerge/kettle-jem.yml")) + expect(applied_config).to start_with(bootstrap_report.fetch(:final_content).rstrip) + expect(YAML.safe_load(applied_config)).not_to have_key("kettle-jem") + expect(YAML.safe_load_file(File.join(root, described_class::KETTLE_LOCK_PATH)).fetch("template_state")).to include( + "version" => described_class::VERSION, + "checksums" => a_kind_of(Hash) + ) end end @@ -440,7 +446,8 @@ expect(apply.fetch(:changed_files)).to include("Gemfile") expect(apply.fetch(:changed_files)).not_to include("tree_haver.gemspec") expect(File).not_to exist(File.join(root, ".github")) - expect(File.read(File.join(root, "Gemfile"))).to include('gem "nomono", *nomono_requirements, require: false') + expect(File.read(File.join(root, "Gemfile"))).to include('gem "nomono", "~> 1.1", ">= 1.1.0", require: false') + expect(File.read(File.join(root, "Gemfile"))).to include('gem "kettle-family", "~> 1.2", ">= 1.2.0"') expect(File).not_to exist(File.join(root, "Rakefile")) end end @@ -475,22 +482,33 @@ "Rakefile", ".rspec", ".simplecov", + ".yard-lint.yml", ".yardopts", ".yardignore", "bin/setup", + "spec/README.md", "spec/spec_helper.rb", "gemfiles/modular/documentation.gemfile" ) expect(config_yaml.dig("files", "tree_haver.gemspec", "strategy")).to eq("merge") apply = described_class.apply_project(root, env: {}, run_options: {accept: true, skip_commit: true}) - expect(apply.fetch(:changed_files)).to include("Gemfile", ".yardopts", ".yardignore", "bin/setup") + expect(apply.fetch(:changed_files)).to include("Gemfile", ".yard-lint.yml", ".yardopts", ".yardignore", "bin/setup", "spec/README.md") expect(File).to exist(File.join(root, "Rakefile")) expect(File).to exist(File.join(root, "Gemfile")) + expect(File.read(File.join(root, "spec", "README.md"))).to include("stub_env") + expect(File.read(File.join(root, "spec", "README.md"))).to include("include_context \"with rake\"") + expect(File).to exist(File.join(root, ".yard-lint.yml")) + yard_lint_config = YAML.safe_load_file(File.join(root, ".yard-lint.yml")) + expect(yard_lint_config.dig("AllValidators", "FailOnSeverity")).to eq("error") + expect(yard_lint_config.dig("Tags/Order", "EnforcedOrder")).to include("param", "return") + expect(yard_lint_config).not_to have_key("FailOnSeverity") + expect(yard_lint_config.fetch("Tags/Order")).not_to have_key("Order") expect(File).to exist(File.join(root, ".yardopts")) + expect(File.read(File.join(root, "gemfiles", "modular", "documentation.gemfile"))).to include('gem "yard-lint"') updated_config = YAML.safe_load_file(File.join(root, ".structuredmerge", "kettle-jem.yml")) expect(updated_config.dig("templates", "profile")).to eq("monorepo-subgem-release") - expect(updated_config.dig("templates", "entries")).to include("Rakefile", ".yardopts") + expect(updated_config.dig("templates", "entries")).to include("Rakefile", ".yard-lint.yml", ".yardopts") end end @@ -526,6 +544,9 @@ version_rb = File.read(File.join(root, "lib", "example", "gem", "version.rb")) expect(version_rb).to include("module Example") expect(version_rb).to include("module Gem") + expect(version_rb).to include("# Version namespace for this gem.") + expect(version_rb).to include("# Current gem version.") + expect(version_rb).to include("# Current gem version exposed at the traditional constant location.") expect(version_rb).to include('VERSION = "1.2.3"') expect(version_rb).not_to end_with("\n\n") version_rbs = File.read(File.join(root, "sig", "example", "gem.rbs")) @@ -575,6 +596,9 @@ module Gem version_rb = File.read(File.join(root, "lib", "example", "gem", "version.rb")) expect(version_rb).to include("# frozen_string_literal: true") expect(version_rb).to include("module Version") + expect(version_rb).to include("# Version namespace for this gem.") + expect(version_rb).to include("# Current gem version.") + expect(version_rb).to include("# Current gem version exposed at the traditional constant location.") expect(version_rb).to include('VERSION = "1.2.3"') expect(version_rb).to include("VERSION = Version::VERSION # Traditional Constant Location") expect(version_rb).not_to include("module Gem\n VERSION") @@ -902,8 +926,10 @@ module Version expect(gemfile).to include('gemspec path: "gems/kettle-jem"') expect(gemfile).not_to include('gem "kettle-jem", "~> 7.0"') expect_gem_dependency_declared(gemfile, "kettle-dev") + expect_gem_dependency_declared(gemfile, "kettle-family") expect_gem_dependency_declared(gemfile, "kettle-test") expect(gemfile.lines.count { |line| line.start_with?('gem "kettle-dev"') }).to eq(1) + expect(gemfile.lines.count { |line| line.start_with?('gem "kettle-family"') }).to eq(1) expect(gemfile.lines.count { |line| line.start_with?('gem "kettle-test"') }).to eq(1) expect_gem_dependency_declared(gemfile, "turbo_tests2") expect(rakefile).to include('require "kettle/dev"') @@ -959,6 +985,7 @@ module Version expect(report.fetch(:changed_files)).to include("Gemfile") expect_gem_dependency_declared(gemfile, "kettle-dev") + expect_gem_dependency_declared(gemfile, "kettle-family") expect_gem_dependency_declared(gemfile, "kettle-test") expect_gem_dependency_declared(gemfile, "turbo_tests2") end diff --git a/gems/kettle-jem/spec/kettle/jem/tasks/prepare_task_spec.rb b/gems/kettle-jem/spec/kettle/jem/tasks/prepare_task_spec.rb index 255c89177..7f1a1d21c 100644 --- a/gems/kettle-jem/spec/kettle/jem/tasks/prepare_task_spec.rb +++ b/gems/kettle-jem/spec/kettle/jem/tasks/prepare_task_spec.rb @@ -8,6 +8,11 @@ def tmp_root it "updates critical templating gems after applying the dependency bootstrap payload" do Dir.mktmpdir("kettle-jem-prepare", tmp_root) do |root| File.write(File.join(root, "Gemfile"), "source \"https://gem.coop\"\n") + File.write(File.join(root, "Gemfile.lock"), <<~LOCK) + GEM + specs: + nomono (1.0.8) + LOCK command_runner = double("command_runner") setup_env = {"BUNDLE_GEMFILE" => File.join(root, "Gemfile")} update_step = { @@ -76,6 +81,61 @@ def tmp_root end end + it "installs once for cold-start projects without a lockfile" do + Dir.mktmpdir("kettle-jem-prepare", tmp_root) do |root| + File.write(File.join(root, "Gemfile"), "source \"https://gem.coop\"\n") + command_runner = double("command_runner") + setup_env = {"BUNDLE_GEMFILE" => File.join(root, "Gemfile")} + bootstrap_step = { + name: "bundle_install_templating_bootstrap", + status: "succeeded", + changed_files: ["Gemfile.lock"] + } + + allow(Kettle::Jem).to receive(:apply_project).and_return( + mode: "apply", + changed_files: ["Gemfile"], + diagnostics: [] + ) + allow(Kettle::Jem::Tasks::InstallTask).to receive_messages( + setup_command_env: setup_env + ) + allow(Kettle::Jem::Tasks::InstallTask).to receive(:run_command_step) + .with( + "bundle_install_templating_bootstrap", + %w[bundle install], + project_root: root, + env: setup_env, + quiet: false, + command_runner: command_runner + ) + .and_return(bootstrap_step) + + result = described_class.run( + project_root: root, + env: {"K_JEM_TEMPLATING" => "true"}, + run_options: {force: true}, + command_runner: command_runner + ) + + expect(result).to include( + mode: "prepare", + prepared: true, + prepare_only: described_class::PREPARE_ONLY_PATHS + ) + expect(result.fetch(:prepare_steps)).to eq([ + bootstrap_step, + { + name: "bundle_install", + command: %w[bundle install], + status: "skipped", + reason: "already_ran_as_templating_bootstrap" + } + ]) + expect(Kettle::Jem::Tasks::InstallTask).to have_received(:run_command_step).once + end + end + it "updates lockfile-safe templating bootstrap gems before the full template run" do Dir.mktmpdir("kettle-jem-prepare", tmp_root) do |root| File.write(File.join(root, "Gemfile.lock"), <<~LOCK) @@ -105,11 +165,10 @@ def tmp_root end end - it "keeps the cold-start update command minimal when no lockfile exists" do + it "uses bundle install as the cold-start bootstrap command when no lockfile exists" do Dir.mktmpdir("kettle-jem-prepare", tmp_root) do |root| - expect(described_class.bundle_update_templating_bootstrap_command(root)).to eq( - %w[bundle update nomono] - ) + expect(described_class.templating_bootstrap_command(root)).to eq(%w[bundle install]) + expect(described_class.templating_bootstrap_step_name(root)).to eq("bundle_install_templating_bootstrap") end end diff --git a/gems/kettle-jem/spec/system/install_orchestration_spec.rb b/gems/kettle-jem/spec/system/install_orchestration_spec.rb index a9c0c99e5..8097d6896 100644 --- a/gems/kettle-jem/spec/system/install_orchestration_spec.rb +++ b/gems/kettle-jem/spec/system/install_orchestration_spec.rb @@ -301,7 +301,7 @@ it "runs install as active apply plus local post-template checks" do tmp_root = File.expand_path("../tmp", __dir__) FileUtils.mkdir_p(tmp_root) - curated_binstubs = %w[bundle binstubs appraisal2 rake rbs rspec-core yard kettle-dev kettle-test kettle-soup-cover stone_checksums] + curated_binstubs = %w[bundle binstubs appraisal2 rake rbs rspec-core yard kettle-dev kettle-test kettle-soup-cover kettle-gha-pins stone_checksums] Dir.mktmpdir("kettle-jem-install-post-template-slice", tmp_root) do |root| write_tree(root, { "example.gemspec" => <<~RUBY, @@ -476,6 +476,40 @@ ) expect(git_ready.fetch(:install_steps).find { |step| step.fetch(:name) == "bootstrap_commit" }.fetch(:dirty_entries)).not_to be_empty + Dir.mktmpdir("kettle-jem-locked-bootstrap", tmp_root) do |locked_root| + expect(system("git", "init", locked_root, out: File::NULL, err: File::NULL)).to be(true) + File.write(File.join(locked_root, "tracked.txt"), "changed\n") + lock_path = File.join(locked_root, ".git", "kettle-family-template-commit.lock") + lock_observations = [] + locked_runner = lambda do |command, chdir:, env:, quiet:| + commands << {command: command, chdir: chdir, env: env, quiet: quiet} + File.open(lock_path, File::RDWR | File::CREAT, 0o644) do |lock| + locked = !lock.flock(File::LOCK_EX | File::LOCK_NB) + lock_observations << locked if command.first == "git" + end + {success: true, exitstatus: 0, stdout: "", stderr: ""} + end + + locked_step = Kettle::Jem::Tasks::InstallTask.send( + :execute_ready_commands_step, + { + name: "bootstrap_commit", + status: "ready", + dirty_entries: ["?? tracked.txt"], + commands: [%w[git add -A], ["git", "commit", "-m", "locked"]] + }, + project_root: locked_root, + env: {"KETTLE_JEM_GIT_COMMIT_LOCK" => lock_path}, + quiet: false, + command_runner: locked_runner + ) + expect(locked_step).to include( + status: "succeeded", + git_commit_lock: lock_path + ) + expect(lock_observations).to all(be(true)) + end + Dir.mktmpdir("kettle-jem-clean-bootstrap", tmp_root) do |clean_root| expect(system("git", "init", clean_root, out: File::NULL, err: File::NULL)).to be(true) stale_commit_step = Kettle::Jem::Tasks::InstallTask.send( @@ -612,7 +646,7 @@ it "applies full templates after accepting a newly bootstrapped config before bundled handoff" do tmp_root = File.expand_path("../tmp", __dir__) FileUtils.mkdir_p(tmp_root) - curated_binstubs = %w[bundle binstubs appraisal2 rake rbs rspec-core yard kettle-dev kettle-test kettle-soup-cover stone_checksums] + curated_binstubs = %w[bundle binstubs appraisal2 rake rbs rspec-core yard kettle-dev kettle-test kettle-soup-cover kettle-gha-pins stone_checksums] Dir.mktmpdir("kettle-jem-install-bootstrap-followup", tmp_root) do |root| write_tree(root, { "Gemfile" => <<~RUBY, @@ -737,7 +771,7 @@ allow(Open3).to receive(:capture3).and_return(["", "", status]) expect(Kettle::Jem::Tasks::InstallTask.bundle_binstubs_command).to eq( - %w[bundle binstubs appraisal2 rake rbs rspec-core yard kettle-dev kettle-test kettle-soup-cover stone_checksums] + %w[bundle binstubs appraisal2 rake rbs rspec-core yard kettle-dev kettle-test kettle-soup-cover kettle-gha-pins stone_checksums] ) end @@ -1615,6 +1649,60 @@ end end + it "serializes local semantic Git driver setup with the shared Git operation lock" do + tmp_root = File.expand_path("../tmp", __dir__) + FileUtils.mkdir_p(tmp_root) + Dir.mktmpdir("kettle-jem-git-driver-lock", tmp_root) do |root| + lock_path = File.join(root, ".git", "kettle-family-template-git.lock") + step = Kettle::Jem::Tasks::InstallTask.git_drivers_step(root, {}) + command_runner = lambda do |_command, **| + {success: true, exitstatus: 0, stdout: "", stderr: ""} + end + + result = Kettle::Jem::Tasks::InstallTask.execute_orchestration_steps( + [step], + project_root: root, + env: {"KETTLE_JEM_GIT_LOCK" => lock_path}, + run_options: {}, + command_runner: command_runner + ).first + + expect(result).to include( + status: "succeeded", + git_lock: lock_path + ) + end + end + + it "retries local semantic Git driver setup after transient Git lock conflicts" do + tmp_root = File.expand_path("../tmp", __dir__) + FileUtils.mkdir_p(tmp_root) + Dir.mktmpdir("kettle-jem-git-driver-lock-retry", tmp_root) do |root| + step = Kettle::Jem::Tasks::InstallTask.git_drivers_step(root, {}) + calls = 0 + allow(Kettle::Jem::Tasks::InstallTask).to receive(:sleep) + command_runner = lambda do |_command, **| + calls += 1 + if calls == 1 + {success: false, exitstatus: 1, stdout: "", stderr: "error: could not lock config file .git/config: File exists"} + else + {success: true, exitstatus: 0, stdout: "", stderr: ""} + end + end + + result = Kettle::Jem::Tasks::InstallTask.execute_orchestration_steps( + [step], + project_root: root, + env: {}, + run_options: {}, + command_runner: command_runner + ).first + + expect(result).to include(status: "succeeded") + expect(result.fetch(:command_results).first).to include(attempts: 2) + end + end + it "reports conflicting unmanaged .gitattributes entries" do tmp_root = File.expand_path("../tmp", __dir__) FileUtils.mkdir_p(tmp_root) @@ -2096,7 +2184,11 @@ install = Kettle::Jem::Tasks::InstallTask.run( project_root: root, - env: {"FORGE_ORG" => "example-org"}, + env: { + "FORGE_ORG" => "example-org", + "KJ_GH_ORG" => "ignored-gh-org", + "KJ_GH_USER" => "personal-user" + }, run_options: {only: "README.md", skip_commit: true}, command_runner: command_runner ) @@ -2155,4 +2247,41 @@ ) end end + + it "keeps maintainer GitHub user separate from scaffold repository owner" do + tmp_root = File.expand_path("../tmp", __dir__) + FileUtils.mkdir_p(tmp_root) + Dir.mktmpdir("kettle-jem-install-gh-org", tmp_root) do |root| + write_tree(root, { + "example.gemspec" => <<~RUBY + Gem::Specification.new do |spec| + spec.name = "example" + spec.summary = "Example gem" + spec.description = "Example description" + spec.authors = ["Jane Q Public"] + spec.email = ["jane@example.test"] + spec.homepage = "https://example.test" + end + RUBY + }) + command_runner = lambda do |_command, **| + {success: true, exitstatus: 0, stdout: "", stderr: ""} + end + + install = Kettle::Jem::Tasks::InstallTask.run( + project_root: root, + env: {"KJ_GH_USER" => "personal-user"}, + run_options: {skip_commit: true}, + command_runner: command_runner + ) + + expect(install.fetch(:install_steps)).to include(hash_including( + name: "gemspec_homepage_literal", + path: "example.gemspec", + status: "skipped", + reason: "missing_github_org" + )) + expect(File.read(File.join(root, "example.gemspec"))).to include('spec.homepage = "https://example.test"') + end + end end diff --git a/gems/kettle-jem/spec/template_version_gem_bootstrap_spec.rb b/gems/kettle-jem/spec/template_version_gem_bootstrap_spec.rb index 81e84c40b..ed715660a 100644 --- a/gems/kettle-jem/spec/template_version_gem_bootstrap_spec.rb +++ b/gems/kettle-jem/spec/template_version_gem_bootstrap_spec.rb @@ -234,6 +234,118 @@ module Version end end + it "normalizes existing version specs to load version files anonymously for coverage" do + tmp_root = File.join(__dir__, "tmp") + FileUtils.mkdir_p(tmp_root) + Dir.mktmpdir("kettle-jem-version-gem-version-spec", tmp_root) do |root| + write_file(root, "kettle-family.gemspec", <<~RUBY) + Gem::Specification.new do |spec| + spec.name = "kettle-family" + spec.version = "1.1.7" + spec.summary = "Kettle family" + spec.required_ruby_version = ">= 3.2" + spec.add_dependency("version_gem", "~> 1.1", ">= 1.1.14") + end + RUBY + write_file(root, "lib/kettle/family.rb", <<~RUBY) + # frozen_string_literal: true + + require "version_gem" + require_relative "family/version" + + module Kettle + module Family + end + end + + Kettle::Family::Version.class_eval do + extend VersionGem::Basic + end + RUBY + write_file(root, "spec/kettle/family/version_spec.rb", <<~RUBY) + # frozen_string_literal: true + + RSpec.describe Kettle::Family::Version do + it_behaves_like "a Version module", described_class + end + RUBY + + result = described_class.apply_project(root, env: {}, run_options: {accept: true, skip_commit: true}) + + expect(result.fetch(:post_apply_steps)).to include( + include( + name: "version_gem_bootstrap", + status: "applied", + changed_files: include("lib/kettle/family/version.rb", "spec/kettle/family/version_spec.rb") + ) + ) + version_spec = File.read(File.join(root, "spec/kettle/family/version_spec.rb")) + expect(version_spec).to include('require "anonymous_loader"') + expect(version_spec).to include('path = File.expand_path("../../../lib/kettle/family/version.rb", __dir__)') + expect(version_spec).to include("anonymous_namespace = AnonymousLoader.load(files: path)") + expect(version_spec).to include( + "expect(anonymous_namespace::Kettle::Family::Version::VERSION).to eq(described_class::VERSION)" + ) + expect(version_spec).not_to include("load path") + end + end + + it "removes managed version specs when version_gem is not declared" do + tmp_root = File.join(__dir__, "tmp") + FileUtils.mkdir_p(tmp_root) + Dir.mktmpdir("kettle-jem-version-gem-spec-disabled", tmp_root) do |root| + write_file(root, "plain-gem.gemspec", <<~RUBY) + Gem::Specification.new do |spec| + spec.name = "plain-gem" + spec.version = "1.0.0" + spec.summary = "Plain gem" + spec.required_ruby_version = ">= 3.2" + end + RUBY + write_file(root, "lib/plain/gem.rb", <<~RUBY) + # frozen_string_literal: true + + require_relative "gem/version" + + module Plain + module Gem + end + end + RUBY + write_file(root, "spec/plain/gem/version_spec.rb", <<~RUBY) + # frozen_string_literal: true + + RSpec.describe Plain::Gem::Version do + it_behaves_like "a Version module", described_class + end + RUBY + write_file(root, "spec/plain/gem/custom_version_spec.rb", <<~RUBY) + # frozen_string_literal: true + + RSpec.describe Plain::Gem::Version do + it "keeps custom checks" do + expect(described_class.name).to end_with("Version") + end + end + RUBY + + result = described_class.apply_project(root, env: {}, run_options: {accept: true, skip_commit: true}) + + expect(result.fetch(:post_apply_steps)).to include( + include( + name: "version_gem_cleanup", + status: "applied", + changed_files: ["spec/plain/gem/version_spec.rb"] + ) + ) + expect(File).not_to exist(File.join(root, "spec/plain/gem/version_spec.rb")) + expect(File).to exist(File.join(root, "spec/plain/gem/custom_version_spec.rb")) + entrypoint = File.read(File.join(root, "lib/plain/gem.rb")) + expect(entrypoint).to include('require_relative "gem/version"') + expect(entrypoint).not_to include("VersionGem") + end + end + it "preserves non-default version_gem loading when a dedicated version_gem entrypoint exists" do tmp_root = File.join(__dir__, "tmp") FileUtils.mkdir_p(tmp_root) @@ -311,8 +423,14 @@ module Version expect(gemspec).not_to include("version_gem") expect(File.read(File.join(root, "lib/nomono/version_gem.rb"))).to eq(dedicated_entrypoint) version_spec = File.read(File.join(root, "spec/nomono/version_spec.rb")) + expect(version_spec).to include('require "anonymous_loader"') expect(version_spec).to include('require "nomono/version_gem"') expect(version_spec).to include("RSpec.describe Nomono::Version do") + expect(version_spec).to include('path = File.expand_path("../../lib/nomono/version.rb", __dir__)') + expect(version_spec).to include("anonymous_namespace = AnonymousLoader.load(files: path)") + expect(version_spec).to include( + "expect(anonymous_namespace::Nomono::Version::VERSION).to eq(described_class::VERSION)" + ) end end end diff --git a/gems/kramdown-merge/.structuredmerge/kettle-jem.lock b/gems/kramdown-merge/.structuredmerge/kettle-jem.lock new file mode 100644 index 000000000..46fc06dad --- /dev/null +++ b/gems/kramdown-merge/.structuredmerge/kettle-jem.lock @@ -0,0 +1,527 @@ +--- +version: 1 +template_state: + version: 7.1.0 + applied_at: '2026-07-26' + changelog_replay: + last_entry_key: kettle-jem-template-20260726-002 + last_entry_date: '2026-07-26' + checksums: + ".aiignore.example": 48a5dfdd93afd1a15fdce39cc28ca9920263f00018b0968ab031fa744521e5ce + ".config/mise/env.sh": aeea5a2ab489ba6e5467ae8de6e386ec8c8fe4ff31a044e69d0cd6a092dd6654 + ".devcontainer/apt-install/devcontainer-feature.json.example": 273a07f9d3926e1b6287c37709a469ee05d724cfedae62ad3b0cd8c09befc9ec + ".devcontainer/apt-install/install.sh.example": b61e020b60ca172bb7b658e63c9cd4342e49bda0531a6b19b36475e515ad20b0 + ".devcontainer/devcontainer.json.example": 4a80d471379b9720cc65cc89543cbbc0a7be87b188a818160296577c4e87606f + ".devcontainer/scripts/setup-tree-sitter.sh.example": c34f48d7bac8561fb780c4c7a81cec5004c3ac0edc11f229799ec9a4e3eccd54 + ".env.local.example": 35cb867e8bacb75252a85c29f78899b36d0d1843511ae1ba1fbc7da863b128b3 + ".envrc.example": b7232f4bae0fb399cc9c9cdc4a5eb694bd69623aeeadcbab18c9990e443040a1 + ".envrc.no-osc.example": b7232f4bae0fb399cc9c9cdc4a5eb694bd69623aeeadcbab18c9990e443040a1 + ".gemrc.example": 77b1c36ae6f91bedf08b99e662a971b02f7e66e0d65267805d068d30ff118aba + ".git-hooks/commit-msg.example": d858575bf70d6175fdd7656e9ba0b41672de3fb49163181efe3fbc9e40306024 + ".git-hooks/commit-subjects-goalie.txt.example": bb1179c8911af8afeb1f9a604b3de789d4a4b33d9d4a7743b3145998c15b0a94 + ".git-hooks/footer-template.erb.txt.example": 70ed3616ee04a4062126f53892cc255e7aa2b66741fe22d6b372f7df99676718 + ".git-hooks/prepare-commit-msg.example": 35266ead46a6385d20eeff7ec64afedef33a2db18d1238b8662a1bc758f05335 + ".github/.codecov.yml.example": d6ef3208a90eca74f79d8ff4e5ae21a915562b075cb17978b1eaadc231dd4e85 + ".github/FUNDING.yml.example": fd27dff7db58f4e8a39c35ccb60e39422517038501a5f2a99ef2aaeea2d1fa5d + ".github/FUNDING.yml.no-osc.example": 8f1a867b1921b3dec1c63f7a7cd629362c1fb1ad0d1052494b48ba746b0fc5c6 + ".github/copilot_instructions.md.example": f5c5791df013e89e170fd436379b14e251d0ff4cb6b330a6d961e80c9071f2d3 + ".github/dependabot.yml.example": db84d1c13f64100d2f48212c022f0d985e9061ca76c36d82e7057fd845ecd528 + ".github/workflows/auto-assign.yml.example": 57b8159a15bf49946506e1b624934feed6a1cc8f71ad68968323c87acac56c67 + ".github/workflows/coverage.yml.example": 524ef90e0fd2ca0b846c464197d8d43cd6a57834303c9526ea0bd277f2beb3e1 + ".github/workflows/current.yml.example": dbc82e7593804c05d2c217d5c02d79d5480b5a0d1e04eea99b7235f35f520216 + ".github/workflows/dep-heads.yml.example": d94122f3246e17774fa015dde8d9a5772a66e54f817d44e62716f6a61d899050 + ".github/workflows/dependency-review.yml.example": a895d52257a7112d796fabf349ced1079bed93e81e3aa9cb088f9af3f44d1e5f + ".github/workflows/discord-notifier.yml.example": f9cc83a87058bd420426444510a1dd1520fd7cc15af50832ad52c25c5766be94 + ".github/workflows/framework-ci.yml.example": 112ef6178fcf115fe9e0a248ec6cb4af748ce89142fd7dba30e9abb6ebdc17be + ".github/workflows/heads.yml.example": aa55cf9bb4ae35fe126384003e8af4b91e685bcf370263b3710bd429f6c44343 + ".github/workflows/jruby-10.0.yml.example": 0eaf6d10c304de606684d420bbd88cfc90fe9d139a56773e011c6abaa6c5fc91 + ".github/workflows/jruby-9.1.yml.example": 9062f9de8843da1f8c4da8f991bbd24f9540c63927deaf311649f3088a672d5b + ".github/workflows/jruby-9.2.yml.example": f330363fc0af7dd0be24c140c919c07737a3168c5647012e34ba0c36634005e5 + ".github/workflows/jruby-9.3.yml.example": 3b26b3a978d0018f01e6d87651936f2e92fcb58d62bcdf11822eca3c2656d303 + ".github/workflows/jruby-9.4.yml.example": a830b92838a09b9316a81745b48ff35bed9461783154fc6d0e52df0d6aa319f3 + ".github/workflows/jruby.yml.example": f10f779cd3be37d2ffa593d9a83ba68a8684bb849ed1c4d9ae41706ff12571e1 + ".github/workflows/license-eye.yml.example": 23db5d6ee9b5382de1f2042642219d65214e09c3f975c418d4dec4d46375036c + ".github/workflows/locked_deps.yml.example": c7eaa20cc7d7de6209e576274e592ffb4838177ae6ab56096b2439d0fa1bc31c + ".github/workflows/opencollective.yml.example": fe7d8d346f9ab055b6779abf62972291460d05275e2c4d191e291e8cd73b0e6b + ".github/workflows/ruby-2.3.yml.example": 90474f1a462edc877983b91dd40d942e82b28262f1afdca74cddcdd52d7e8c26 + ".github/workflows/ruby-2.4.yml.example": fe84af4efef6934d7ff63efa2a4c85994f2ea1887f61b1ab5d30a21365429ec9 + ".github/workflows/ruby-2.5.yml.example": c40db157514168442311191ebc88853dfb36447a90171a73f42d435e92d02f05 + ".github/workflows/ruby-2.6.yml.example": 87bb8537d0047217651a327353df670fed3ea9e4a5350e965ed80af9ce32d9d3 + ".github/workflows/ruby-2.7.yml.example": 5650ec41bc67553457019a772a3343578872749d21268d5e7fb1715ebf4e2351 + ".github/workflows/ruby-3.0.yml.example": f9d7c7dfc6eaea1ca12c92e0b98b4ba8fed5726d26459bb410ab9812a741e5b9 + ".github/workflows/ruby-3.1.yml.example": e44879cd3ea47d00e44e573745d7f95fc1a561a9c1d69d72529d0c07294bd26e + ".github/workflows/ruby-3.2.yml.example": c28b9179778157e6b4807a775968840ff1c6bf2fd847ce1ce694b9a77df42f6e + ".github/workflows/ruby-3.3.yml.example": 033e4f0ed7ded17f5d13fde6674ec9fd555cfe58c11f57f7dc2f1fee21c718b6 + ".github/workflows/ruby-3.4.yml.example": 474a96468f101b8fddac4cecaa0629f28d5ceec0c784329affdc471eb1e3e889 + ".github/workflows/style.yml.example": dea7243a91dc164a172e90b7933de58cdd353d7e5df1beac22cec63125edc086 + ".github/workflows/templating.yml.example": 327b933509e1ade4d53df5756f6407028b479c51847775db494fb9c25e66ce5a + ".github/workflows/truffle.yml.example": 56fa53dc206976c81db7cc3530f4d19d89ea5859c1245492e5a5ecb9304de63e + ".github/workflows/truffleruby-22.3.yml.example": d6773529e6961039b5cc4a145c77623881aa3857d875bbb415ca0f8147166d7a + ".github/workflows/truffleruby-23.0.yml.example": abcd23a18d748528f7558d4ab7bc4830796cb686ca7371f67a8ddaf6d0362d72 + ".github/workflows/truffleruby-23.1.yml.example": 11af8a3f0823ed3ab17e759d81b8a4551eb7af8096ce0b5a9501fd83cada1cd2 + ".github/workflows/truffleruby-24.2.yml.example": 2c4ff82eeaa3bdb19391f04cd2f41b07733986a053d5ac8498176fef5f890e5e + ".github/workflows/truffleruby-25.0.yml.example": 42cdfdcd21c7b3bb1b87c22c2bc7a98135a442742df5f9a45e2b4e03838c1e7f + ".github/workflows/truffleruby-33.0.yml.example": 2a45e428ca13dac56ee75526b80eac477b61697ca06c94680e1eb05d21dbc25a + ".github/workflows/unlocked_deps.yml.example": 15f5ccbe811aa5a8650c2aa69b32f4f6a24d5f8bd3aae2dcbec92cbe3a51f0a7 + ".gitignore.example": 14864a0c88be3f8c122ab3032efeb782ba5e035013231038acf746a400437a3e + ".gitlab-ci.yml.example": ef64afa9855ebb59bbc87446fa9533238d3ce180966ceb19649a7f165715b92b + ".idea/.gitignore.example": b44a5aa16bf9fe5635558af347454b05a76d600084308a9f43d4d0b54789ecab + ".licenserc.yaml.example": 8787fa7bddce911f8ba47bda3eb6ad9786b6650d5d94786723e88773098ed37d + ".opencollective.yml.example": 9ad9b83fe54f0bddac7fb614575585d98f78df0e181ee70a7acd0168d26e3142 + ".qlty/qlty.toml.example": cf3d750d2328f6c057b08b7ce3d7ec00a4056c7f0eedda59af321d6caca03553 + ".rspec.example": 40d3f3ff435b0f9e5863772a95df8725b939c2dc11aead2bca68dcd6d85a9788 + ".rubocop.example": 591e4b45430e85b0dd460cc11c70650912fa2734988420b934109d06a749344f + ".rubocop.yml.example": 47f9a031022db67c964dd76ee2e8dfee21295a1877ca4d6233d3de39d114af73 + ".rubocop_rspec.yml.example": 288ad75e7eb14d87d80fafe6f7272217be5c57547536ee56c780a7d10ac7ec74 + ".simplecov.example": ffc76492effe905cc65797389fc8050fda136652ac078a80303cd084b349ef28 + ".structuredmerge/git-drivers.toml.example": 9d241a44c9edffcdbd3da018fa188a238089c3d1635040924df594a6929a4f97 + ".structuredmerge/kettle-jem.yml.example": 954cfc9e35cd20e46376426675e985bf8a0de19ff5069bf7be24b574837be615 + ".yard-lint.yml.example": 90def46867c9436b4e177c47d91fc8165f4602e335715aecc39f5587ae20b55b + ".yardignore.example": 821f453c609df7d46145d675424b39dfbe6dfdca8edac5f367b85fff48502455 + ".yardopts.example": 6fd6f2701713096a8a9ea095c213bbc68eeef37797c4754d97837e3229a3a5f6 + AGENTS.md.example: aec69512cbe17004660ac0abfabb9ec91a5c51c2cd82c10f30f08886f9bf64a7 + AGPL-3.0-only.md.example: d8a6cc31abc16b6748c7a21f21611f5a1ec33f67d22ca23d7da1c19b95496bee + Appraisal.root.gemfile.example: 8724e3f6faea995be655ac49369bec64a70710112b1f65707fa38f1fd2fd3254 + Appraisals.example: 9cb1abcfb1a0bd6d859ca0705efb874dbe546754c8c71f9f95025ff6817f1471 + Big-Time-Public-License.md.example: b0c02a112c9eee0ed69f05fd8f22277a2f8bc62d447b6cb75d6df560e05bf431 + CHANGELOG.md.example: 73459e50dad34d84db88844c993d975097557bdf5229e101b0d1339de6f98ffc + CHANGELOG.transfer.md: 9c201849117c9d4234724c4599643dd42fdce5f0a673a1abee97b97e556c301b + CITATION.cff.example: e404ea0a7919d78a83d53d80e211d17b9663576aa606583b709795dc023fd75c + CODE_OF_CONDUCT.md.example: f1ad532f1860f73ef774c6b27a26d41f4bc1cb8813034f5957487766ebb0986b + CONTRIBUTING.md.example: 63d339848c615f2c181d6b0565c42e56371eedb66f310d146cb7da297f7bc641 + FUNDING.md.example: 455bbb2b55d934283a2e7c16b59c321116c53310a85a718b7cf8ca44e9e3721e + FUNDING.md.no-osc.example: 05a85d5faf22d5ea5721622d242080447cf318d3277d9d529e438be1c9d5a351 + Gemfile.example: 6b2d72ec8a630cce515b7b528022071b13eee863c3164763df03792a5004345a + IRP.md.example: 85d8887d9b0e77f7fa9835ca5b9be31f586fdc94764ed1819af2a9a7fec98e96 + LICENSE.md.example: 120edf5f23173ebbdb5ad384ffc2e9b97e62aa6d0e61b733c003bd4db1b08276 + MIT.md.example: 365fce2a82f9d258ada9a527accfd5754b406ee9cdd8f8ed86bbec64b8c42ab2 + PolyForm-Noncommercial-1.0.0.md.example: ffcca38841adb694b6f380647e15f17c446a4d1656fed51a1e2041d064c94cc8 + PolyForm-Small-Business-1.0.0.md.example: 2f81e317d36f83a199c9fa10bcb250775fd90510303eaeb15aac2d8f0c1fc2d6 + README.md.example: 452446a44d120df26cde68fbc7aff086fa815769c989b994ebc1432ea927974f + REEK: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 + RUBOCOP.md.example: c09e5533ccc59b70a2efa05c99f66e521137c1053d3c12eb43509cebd5b68b0e + Rakefile.example: 569803e726b07ea26267fec6891367a3096a0dff3c266269a7081d36afe496af + SECURITY.md.example: ee9411aa85f36d88363fdaea7a1baea4362b6ec112cf2688e711b05de1d3144c + bin/setup.example: 0ac35089c95a91d8973fe7a318bf9fd98b9f8e00db92c5d9ca6cd858abb8d41b + certs/pboling.pem.example: 18956f60643666cc181e2743b3b3691bec08c5326f514f60af54d0cdb9ebc554 + gem.gemspec.example: 9989cc8a1cd125586ea807eaed549eaecc044711d31f17dd7bac2a0815b28b1a + gemfiles/modular/benchmark/r4/v0.5.gemfile.example: 5bc3190090ae456df1a8cce28dd47a7fb293495f6d845ec7e53a7a8b50f14ae1 + gemfiles/modular/benchmark/vHEAD.gemfile.example: ca6cd52c55c3082759c6ddc97638970f12d953aec1822470823d316086aa6e25 + gemfiles/modular/cgi/r4/v0.5.gemfile.example: c2d14a39377a2435419ceaca22a3421ebd899e9cba943df8a90b576a33624870 + gemfiles/modular/cgi/vHEAD.gemfile.example: 9ff3dc789b3279642876c0aad4b0094c1139bb8fbbf36daab804d3b2b3a60b43 + gemfiles/modular/coverage.gemfile.example: 915fc161ad574fdbc071bc733b69b27e94bd7a4c68cc4f58da267c9a0987f3e8 + gemfiles/modular/coverage_local.gemfile.example: 928d5f260d7b119c038baa56da9fb78dd524dee613aea33ab72894bbce5c506e + gemfiles/modular/debug.gemfile.example: 0a508bfb02e51b75394b43f4f09d98174dac36ead41cba09c1f730671a1f5905 + gemfiles/modular/documentation.gemfile.example: e15f51e4d14ad2216b6de16c323787945bd225073d70a78420f4c99c98c1ecd1 + gemfiles/modular/documentation_local.gemfile.example: 84a20f5d4b0feb94c2cf2f7a8dce8f682f1483498e41484c2b447a5661fd1870 + gemfiles/modular/erb/r2.3/default.gemfile.example: 9da0d08fb6a299b965c37fe85efcaebd9eb0a82b2ea35fdc157c41bd75431396 + gemfiles/modular/erb/r2.6/v2.2.gemfile.example: '01787cbdf7136c0d75cc7b734c6bb3d2ef6c70d6c1c50e7d0ad2112c0f8ef8e7' + gemfiles/modular/erb/r2/v3.0.gemfile.example: 3793e7dc9ef23a7ccd893d48cbba092fd27594c63e65cca011cc658218425670 + gemfiles/modular/erb/r3.1/v4.0.gemfile.example: bdf71ddcfe5001aab7d71b10a645a785928957ef7bae61d49307eb7f712279f3 + gemfiles/modular/erb/r3/v5.0.gemfile.example: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + gemfiles/modular/erb/r4/v5.0.gemfile.example: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + gemfiles/modular/erb/vHEAD.gemfile.example: ad6f104a49e80e0cf625440e3dc816343fe7e2f037fc4971df75e7bb4305c683 + gemfiles/modular/json/truffleruby_22_3.gemfile.example: 249c12eacbe90f9d0d2e81e7a62c4c7e9102e504ededcda4ecf660cb3bb68be4 + gemfiles/modular/json/truffleruby_23_0.gemfile.example: 66aa010567f7afa1af8244a74c3c88ecaaf84dc87b6a25180691bb480d02ed28 + gemfiles/modular/json/truffleruby_23_1.gemfile.example: '080fcbdaf2bec73cad40832a3d51eebb380af789917b96f493d1460b0dd6361d' + gemfiles/modular/mutex_m/r2.4/v0.1.gemfile.example: '09728bdc10807b3ca9dd3b9f12986acbe8c40ac08ada438bcfd49cd69445c650' + gemfiles/modular/mutex_m/r2/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/r3/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/r4/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/vHEAD.gemfile.example: '08018641c97f894788fa91b462da504ab2237213d18d95404136c393274ae3cb' + gemfiles/modular/optional.gemfile.example: b45eb8ecde2902441c02b2f01d4aa8f79bff75c853ef92555c3201ee798d9e87 + gemfiles/modular/recording/r2.3/recording.gemfile.example: 154da539583c51ca78ff8affa7a7caaf7f354d321b5e748beb64de61ff72f80a + gemfiles/modular/recording/r2.4/recording.gemfile.example: 6d69381eb2f8be681c72e7a5a8b5d6ec6ee586da8ce51b9b39d845d2a87e4ecf + gemfiles/modular/recording/r2.5/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/r3/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/r4/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/vHEAD.gemfile.example: 7480fd116e9671972a2735d1d97050a4fd5754aa7abfab3d115bf9bebbca038c + gemfiles/modular/rspec.gemfile.example: d043f5c9344f6435edb4607c5adaf42c78e7fb6b8b6726007de2bbedefb376c3 + gemfiles/modular/runtime_heads.gemfile.example: f163201999bf68a942b1e5bcea506bfc4b9c59711ff502091eb215d5d5f8f658 + gemfiles/modular/shunted.gemfile.example: a54a86124eff06163497462012704f62a691daa224cebeac605cdd14cffacfbe + gemfiles/modular/stringio/r2.4/v0.0.2.gemfile.example: 6425ebcd70b2e782f4c1d9074f8685c1e93ca7bf371728ef7ebbc8b5ebdf491a + gemfiles/modular/stringio/r2/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/r3/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/r4/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/vHEAD.gemfile.example: e0497ab6dad9667b22725485b781e9d99349a079250eb29cb125d58f01f4a5be + gemfiles/modular/style.gemfile.example: a15db732f566d958c2459ef549ae3877d984df3d205116e714284d1fe4f9b068 + gemfiles/modular/style_local.gemfile.example: '0083605323d23879dc7223f0198e9f1db24a25fa38730c4dbcc71c7a8a4c307f' + gemfiles/modular/templating.gemfile.example: 6cedc39529daa9aac3a4cf13fe31a628b62a4a2428f5c4f8657c5a2fa027bb35 + gemfiles/modular/templating_local.gemfile.example: 16c0b51fd46b86db09268c8485b1d5a528e5f962b593f8ae7521b15209f7d1a5 + gemfiles/modular/webrick/r4/v1.9.gemfile.example: 1ee940ff54d5ca3ce7fcff0d82ee9553386979656b9e220d5be5404d0991d5ea + gemfiles/modular/webrick/vHEAD.gemfile.example: da545f591af987648ffbaba181707480a38dfb375db7d289617986ec2c2ca23b + gemfiles/modular/x_std_libs.gemfile.example: e3917e90717d7f9f4393d847549a78c53de7f6c8de52a7f590b34b515fd6111a + gemfiles/modular/x_std_libs/r2.3/libs.gemfile.example: 379ac2a3698615789e39dc18a961b9c793b2cc594856bb3163524a99fd4ac86f + gemfiles/modular/x_std_libs/r2.4/libs.gemfile.example: ccad8f592943481317c082ce8d340316b9e90a52463c8c1eea5c5109b23e8c3d + gemfiles/modular/x_std_libs/r2.6/libs.gemfile.example: 9af20396f404a32bf76d8999c7fdd112f0282ba331f71100ab093663b2ab5670 + gemfiles/modular/x_std_libs/r2/libs.gemfile.example: e80ec8ad06cb1b31ac982bc25cf7696987fca131aa1001eaefd0bf5cd379c273 + gemfiles/modular/x_std_libs/r3.1/libs.gemfile.example: 38068bd6a0f5d02918eb286af9bdbdf0c7cf7cf026486b9fd157b541b6153d58 + gemfiles/modular/x_std_libs/r3/libs.gemfile.example: 546f8849f4267bb19aa10ff0de40be30957197f229e6887847181ea9127b2650 + gemfiles/modular/x_std_libs/r4/libs.gemfile.example: 8c2582eaa218d216b98c86c933465295c8b4e43f3251ea388b9eaf6e471f8da6 + gemfiles/modular/x_std_libs/vHEAD.gemfile.example: d3133ec4c0638363a7fb025d19be7e95a615fd61c35ddb8d17f2280ee74a7486 + lib/gem/version.rb.example: 15e219ac3a928b5580035f891e415551213175020f1131f6e7ca0ccd55a1b2d6 + mise.toml.example: b2eb06f7daaf0c3916bba155f463e166bd1de218637ba82e636c528c077c8d6d + mise.toml.no-osc.example: 35ec90d3c67b74e0014876dccad14f5883fdad88036f6b0cf5d29ea181e132ac + parsers.toml.example: f0538ae7ad8596be2dc39b3ea663f1164dec21fb0457233c1885097e774aff6f + readme/partials/basic_usage.md.example: adaa8f9de9768d1f29cb15d957404004715e7687db68c29b121d6467db13158a + readme/partials/configuration.md.example: 5ad82bc7eaf05015d31cea9265173718abc1d92729b52e3856c8366aa54184e8 + readme/partials/synopsis.md.example: 2b7383f8261086da0995fbf2c10017b3f162723b32c324ae8c0e1c1a8d1c79ef + shim/.github/workflows/current.yml.example: c2a2a2053f2726276bb8571c8a76a4b97bcce6cd54bdca01cba63d713c3a0e2f + shim/.rspec.example: 0e3a2a1587779efc3eae8fe718a3480272fbdfb3f1f6c2f9c3901f6fd81b2cce + shim/.structuredmerge/kettle-jem.yml.example: 03faae6cfda3947ef8489008b4836aad3ca280e94ddf9d08ef733071d7daa167 + shim/CHANGELOG.md.example: 2c098802b9971c51796e34067d061adbc31fa443df96be8a1fc71fc84c262d0e + shim/Gemfile.example: 9583b19e04d7ab6f5b3ea7ebb0c5d24e6a71ae5d74404a510aa979642248ba34 + shim/README.md.example: 3a2f7211b7f92a1dfae5e523b8e34b051a3d8af942144b05286eca0b3c8f6fbe + shim/Rakefile.example: 572c94da7052083b39b62a6600785419e314a109efd7a3d8c3a96eb77ad34fd1 + shim/gem.gemspec.example: cabca9717af1a18991db1de856900494e2771b044f1d5bfd2ad71b2ed4a1367d + shim/lib/compat_require.rb.example: 94ee85e353a3ca08c8a35c9063d4ff789214ea594c7f803f6cf09d7142f48379 + shim/lib/entrypoint.rb.example: dd57613520daca01d6f6bcaa9b83b00ff74505240dc04b84ceb686df3c0539d7 + shim/lib/version.rb.example: 15e219ac3a928b5580035f891e415551213175020f1131f6e7ca0ccd55a1b2d6 + shim/spec/shim_spec.rb.example: '060013019bf39b8dc267169df83752661d02c7ad890b65a99a1d97137938edfd' + shim/spec/spec_helper.rb.example: 88e2ab0bd8888022a68e856e04f61053e238e54f51b428b386aaebf93ae8ad83 + sig/gem.rbs.example: 47a4f7e524cc6f773875b6c08691ca4d65c2b14618abd5b9b91055ae5b248cec + spec/spec_helper.rb.example: 0c8119bd75b90f3a2403789b68b539fd19952370051297b1807596e201ef4813 +files: + ".simplecov": + recipe: template_source_application_simplecov + action: write + dest_sha256: fea3539c6357ae25a93f1f7f7fe1e7ba7b16c4781ae74d7b2e7d03629811849c + input_fingerprint: a8aa253c3bf1274ea3fc20beed666808c33094efc313f34f118a680707a0ac3e + template_sources: + - ".simplecov.example" + AGPL-3.0-only.md: + recipe: template_source_application_AGPL_3_0_only_md + action: write + dest_sha256: d8a6cc31abc16b6748c7a21f21611f5a1ec33f67d22ca23d7da1c19b95496bee + input_fingerprint: da26cb951158461f346cc75745c8f51ede41b34146159c6d9dffc233bafdd073 + template_sources: + - AGPL-3.0-only.md.example + Gemfile: + recipe: template_source_application_Gemfile + action: write + dest_sha256: 6ef74302b710e0bdab886da14082e16af8e062e22d4782af144df82ba088ade7 + input_fingerprint: 389a8a7dd61cd776b7eaa701cad0dea6922b2f002c4fb51ab0b14e2d39b5a5b2 + template_sources: + - Gemfile.example + LICENSE.md: + recipe: template_source_application_LICENSE_md + action: write + dest_sha256: f6188bfd474a636d2a526420ebb411250faa447d94c9b9ccee097128ce4101b5 + input_fingerprint: e8acdcd202bb8001be356b0f97b111f0994a3d697543bd2e1a07707d8167e2cf + template_sources: + - LICENSE.md.example + PolyForm-Small-Business-1.0.0.md: + recipe: template_source_application_PolyForm_Small_Business_1_0_0_md + action: write + dest_sha256: 2f81e317d36f83a199c9fa10bcb250775fd90510303eaeb15aac2d8f0c1fc2d6 + input_fingerprint: c301685af8995dbae5e9b3cb4984e719fe985adc0e625c3b6702b1fa984dbb4a + template_sources: + - PolyForm-Small-Business-1.0.0.md.example + README.md: + recipe: template_source_application_README_md + action: write + dest_sha256: 6aedf9d22d8dacad507c11370dfffc9202123326d5ca52d03454e12e0f248127 + input_fingerprint: 1f801750ba795c7f45e79a4e1f382227fee57da6cc6a0a7c7f74daabfaae110e + template_sources: + - README.md.example + certs/pboling.pem: + recipe: template_source_application_certs_pboling_pem + action: write + dest_sha256: 18956f60643666cc181e2743b3b3691bec08c5326f514f60af54d0cdb9ebc554 + input_fingerprint: f84ba018771c298bbe32071cd0319a33b3e82d3dd9c25f14577958e0f4aa0f9c + template_sources: + - certs/pboling.pem.example + gemfiles/modular/benchmark/r4/v0.5.gemfile: + recipe: template_source_application_gemfiles_modular_benchmark_r4_v0_5_gemfile + action: write + dest_sha256: 5bc3190090ae456df1a8cce28dd47a7fb293495f6d845ec7e53a7a8b50f14ae1 + input_fingerprint: 87693c9f2b661c663f4cb767020006e656e450e2686f87f611bc3651aa8b83d7 + template_sources: + - gemfiles/modular/benchmark/r4/v0.5.gemfile.example + gemfiles/modular/benchmark/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_benchmark_vHEAD_gemfile + action: write + dest_sha256: ca6cd52c55c3082759c6ddc97638970f12d953aec1822470823d316086aa6e25 + input_fingerprint: 3e8230d6eec35ad8ee82208e8f57442b5ffc98f4e0dad3e2bfdb6c572b78eb39 + template_sources: + - gemfiles/modular/benchmark/vHEAD.gemfile.example + gemfiles/modular/cgi/r4/v0.5.gemfile: + recipe: template_source_application_gemfiles_modular_cgi_r4_v0_5_gemfile + action: write + dest_sha256: c2d14a39377a2435419ceaca22a3421ebd899e9cba943df8a90b576a33624870 + input_fingerprint: ee1a134bc649faf8655fb7705b9bb9cd0ad12f46b351a596be91285998ed56ee + template_sources: + - gemfiles/modular/cgi/r4/v0.5.gemfile.example + gemfiles/modular/cgi/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_cgi_vHEAD_gemfile + action: write + dest_sha256: 9ff3dc789b3279642876c0aad4b0094c1139bb8fbbf36daab804d3b2b3a60b43 + input_fingerprint: 822ae70a2d1da32a4f1774c44934370c205b8221b69923116b67c4b2b1dab671 + template_sources: + - gemfiles/modular/cgi/vHEAD.gemfile.example + gemfiles/modular/coverage.gemfile: + recipe: template_source_application_gemfiles_modular_coverage_gemfile + action: write + dest_sha256: 915fc161ad574fdbc071bc733b69b27e94bd7a4c68cc4f58da267c9a0987f3e8 + input_fingerprint: 44f56d7a5d1d0407166fdeca5a36fe68b36abb524839056cb0b53188c33cb3b0 + template_sources: + - gemfiles/modular/coverage.gemfile.example + gemfiles/modular/coverage_local.gemfile: + recipe: template_source_application_gemfiles_modular_coverage_local_gemfile + action: write + dest_sha256: 57dd8caa41bfb1bab151da2e8d98c99dd7aa839242ce24bc5d978ae6dcc6a3b9 + input_fingerprint: 050c5fdecb11c53ecf4d94706ca0640330d6f08c23f3a7a89bbcdccad48ad32b + template_sources: + - gemfiles/modular/coverage_local.gemfile.example + gemfiles/modular/debug.gemfile: + recipe: template_source_application_gemfiles_modular_debug_gemfile + action: write + dest_sha256: 0a508bfb02e51b75394b43f4f09d98174dac36ead41cba09c1f730671a1f5905 + input_fingerprint: eb662fb7c668c05e28b794fe6cf0d113d24488ec696e0acfc4bb01ecb03cdd21 + template_sources: + - gemfiles/modular/debug.gemfile.example + gemfiles/modular/documentation.gemfile: + recipe: template_source_application_gemfiles_modular_documentation_gemfile + action: write + dest_sha256: 9fb5bc380bfaeb4459b48632d08059fca16c08695aba4a1c3050d6660c15324e + input_fingerprint: c25c8f29d278ff3ad069d97d3908611c3be6dde4793fcc4cb60aa3c9548c8ad3 + template_sources: + - gemfiles/modular/documentation.gemfile.example + gemfiles/modular/documentation_local.gemfile: + recipe: template_source_application_gemfiles_modular_documentation_local_gemfile + action: write + dest_sha256: 50fbfb98d32fafc8ad6c3adc17da175492933ce7711c4cf75a6a0598e53359a8 + input_fingerprint: 10bf6b9d081db0aefc2bbde6bc04d6b9e578ad0acac26774f1d5ec4126a124dc + template_sources: + - gemfiles/modular/documentation_local.gemfile.example + gemfiles/modular/erb/r2/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r2_v3_0_gemfile + action: write + dest_sha256: 3793e7dc9ef23a7ccd893d48cbba092fd27594c63e65cca011cc658218425670 + input_fingerprint: d0ddb62acfafa7c280ca51ee3b37042f432a1910ec58a57a47da4ee320e56f31 + template_sources: + - gemfiles/modular/erb/r2/v3.0.gemfile.example + gemfiles/modular/erb/r3/v5.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r3_v5_0_gemfile + action: write + dest_sha256: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + input_fingerprint: 196cf290c78280723367236de2d8daad5ef3e1cad9342b5122ca3889b314573f + template_sources: + - gemfiles/modular/erb/r3/v5.0.gemfile.example + gemfiles/modular/erb/r4/v5.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r4_v5_0_gemfile + action: write + dest_sha256: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + input_fingerprint: 7fdda44056778908235d8d3477522ee1ab1994563fbe14eefcff737a57d731c4 + template_sources: + - gemfiles/modular/erb/r4/v5.0.gemfile.example + gemfiles/modular/erb/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_erb_vHEAD_gemfile + action: write + dest_sha256: ad6f104a49e80e0cf625440e3dc816343fe7e2f037fc4971df75e7bb4305c683 + input_fingerprint: 848bb5d816cb314655f21f69aee40ae0a37c63f5ee60ece0f696f1161bba07ab + template_sources: + - gemfiles/modular/erb/vHEAD.gemfile.example + gemfiles/modular/json/truffleruby_22_3.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_22_3_gemfile + action: write + dest_sha256: 249c12eacbe90f9d0d2e81e7a62c4c7e9102e504ededcda4ecf660cb3bb68be4 + input_fingerprint: 8da61a439633d2a8970b97186c8644d9ea3cdc975a664a951692c00af7bbff4b + template_sources: + - gemfiles/modular/json/truffleruby_22_3.gemfile.example + gemfiles/modular/json/truffleruby_23_0.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_23_0_gemfile + action: write + dest_sha256: 66aa010567f7afa1af8244a74c3c88ecaaf84dc87b6a25180691bb480d02ed28 + input_fingerprint: 93f54e54ccae720476d9db2365122eabb6208ae6d26790c7d5554e3d8ad4f984 + template_sources: + - gemfiles/modular/json/truffleruby_23_0.gemfile.example + gemfiles/modular/json/truffleruby_23_1.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_23_1_gemfile + action: write + dest_sha256: '080fcbdaf2bec73cad40832a3d51eebb380af789917b96f493d1460b0dd6361d' + input_fingerprint: ab9e0b07ef569d0970299f33cfd6d96e78117099b92a77385acfce1f5366d139 + template_sources: + - gemfiles/modular/json/truffleruby_23_1.gemfile.example + gemfiles/modular/mutex_m/r2/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r2_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: 9a04d6ba5af80973962d23ff5a26c96a7d2f90b441b5b14d488a872c7a0b3092 + template_sources: + - gemfiles/modular/mutex_m/r2/v0.3.gemfile.example + gemfiles/modular/mutex_m/r3/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r3_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: 8c13b956cda89d03b67191477718359d15e5bacc1af4a42078339e76e87671c2 + template_sources: + - gemfiles/modular/mutex_m/r3/v0.3.gemfile.example + gemfiles/modular/mutex_m/r4/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r4_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: 48a4abc16098b3a9d09265ce01eb0d85adc8919ee2d74d25d8abb8fb0ac070e1 + template_sources: + - gemfiles/modular/mutex_m/r4/v0.3.gemfile.example + gemfiles/modular/mutex_m/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_vHEAD_gemfile + action: write + dest_sha256: '08018641c97f894788fa91b462da504ab2237213d18d95404136c393274ae3cb' + input_fingerprint: 496e6b7f4ddcf260e09a6e8c3cf0adc1eca335b35295a885298bd1ca98e6189a + template_sources: + - gemfiles/modular/mutex_m/vHEAD.gemfile.example + gemfiles/modular/optional.gemfile: + recipe: template_source_application_gemfiles_modular_optional_gemfile + action: write + dest_sha256: f770e6e9a9dd2bd0f1f132e882d88038b2e21127dce3afe270908c7338c28bfd + input_fingerprint: 42605209e925684ef8348641a4c22402d3be43ed2b23fb801d4855bb90849bea + template_sources: + - gemfiles/modular/optional.gemfile.example + gemfiles/modular/rspec.gemfile: + recipe: template_source_application_gemfiles_modular_rspec_gemfile + action: write + dest_sha256: d043f5c9344f6435edb4607c5adaf42c78e7fb6b8b6726007de2bbedefb376c3 + input_fingerprint: 567f56c43e58cee32adcf9bf5b55f0bb9666ea52cd9f134a82f444e5b571ae5e + template_sources: + - gemfiles/modular/rspec.gemfile.example + gemfiles/modular/runtime_heads.gemfile: + recipe: template_source_application_gemfiles_modular_runtime_heads_gemfile + action: write + dest_sha256: 6ac7158c4a3088190f2a9082f01439eb27eca2172ab3464b15c9cb045aa885e1 + input_fingerprint: c7b4e365c25b51e9906155e073571db12b236185ed89d007c0a0eec12dbf6c56 + template_sources: + - gemfiles/modular/runtime_heads.gemfile.example + gemfiles/modular/stringio/r2/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r2_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: 356e823907302302b552c7b87cf0bbfc67e358f357d3af94736a0c5b42679e3a + template_sources: + - gemfiles/modular/stringio/r2/v3.0.gemfile.example + gemfiles/modular/stringio/r3/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r3_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: 1f596f79fb6eea6c4491ebeb2cd53e6cc557a08886e965df60fee82e3a33ffb5 + template_sources: + - gemfiles/modular/stringio/r3/v3.0.gemfile.example + gemfiles/modular/stringio/r4/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r4_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: ddc1e56885cb4b085b0ae52c8b632d4905b7a86b3cd728578d88b7d2b35bfff6 + template_sources: + - gemfiles/modular/stringio/r4/v3.0.gemfile.example + gemfiles/modular/stringio/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_vHEAD_gemfile + action: write + dest_sha256: e0497ab6dad9667b22725485b781e9d99349a079250eb29cb125d58f01f4a5be + input_fingerprint: 3e1c99a8d5608d2d3550b6b43f4e814423a151f63da47ccc68f4edbe558bc331 + template_sources: + - gemfiles/modular/stringio/vHEAD.gemfile.example + gemfiles/modular/style.gemfile: + recipe: template_source_application_gemfiles_modular_style_gemfile + action: write + dest_sha256: 071066457ce6081cbc03d10d777f741b84019071c78e45c23889f13658a0a4a6 + input_fingerprint: 8fdcc72c1ef510ff8cd9745106adde8b4a1ad4ac917298ac0423c7a4a70e6100 + template_sources: + - gemfiles/modular/style.gemfile.example + gemfiles/modular/style_local.gemfile: + recipe: template_source_application_gemfiles_modular_style_local_gemfile + action: write + dest_sha256: 888d9d090b445f83ff09bf2b3063f9aa41ea06ca543a1c0e85760f06f49d3684 + input_fingerprint: f5c0eaef8825d0ec59fbe4fd69218f20a86debc454b4d2a1a035720f1bb207b8 + template_sources: + - gemfiles/modular/style_local.gemfile.example + gemfiles/modular/templating.gemfile: + recipe: template_source_application_gemfiles_modular_templating_gemfile + action: write + dest_sha256: 6cedc39529daa9aac3a4cf13fe31a628b62a4a2428f5c4f8657c5a2fa027bb35 + input_fingerprint: 48d2fad8f8c7a04b2f2c129e932154bfb3dd31e4bdbdfd628116911cbe791277 + template_sources: + - gemfiles/modular/templating.gemfile.example + gemfiles/modular/templating_local.gemfile: + recipe: template_source_application_gemfiles_modular_templating_local_gemfile + action: write + dest_sha256: 978749df86ceaeea76efe5f5b6e0acbb4184aff8daa759b5c8cf395f257d5fbb + input_fingerprint: 05265ef6add45dc267d43ec37bac1f9c78a95183462cc0bf7c159f4aaa51d4eb + template_sources: + - gemfiles/modular/templating_local.gemfile.example + gemfiles/modular/webrick/r4/v1.9.gemfile: + recipe: template_source_application_gemfiles_modular_webrick_r4_v1_9_gemfile + action: write + dest_sha256: 1ee940ff54d5ca3ce7fcff0d82ee9553386979656b9e220d5be5404d0991d5ea + input_fingerprint: 82d0c281d7cab05f3c359e14be77faab612ea24cf69a876b055a6bfea49ce78b + template_sources: + - gemfiles/modular/webrick/r4/v1.9.gemfile.example + gemfiles/modular/webrick/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_webrick_vHEAD_gemfile + action: write + dest_sha256: da545f591af987648ffbaba181707480a38dfb375db7d289617986ec2c2ca23b + input_fingerprint: 980f24dff6ed759e95269265bce70ec60e83a36bc5dde664ab31f3e17435e94f + template_sources: + - gemfiles/modular/webrick/vHEAD.gemfile.example + gemfiles/modular/x_std_libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_gemfile + action: write + dest_sha256: e3917e90717d7f9f4393d847549a78c53de7f6c8de52a7f590b34b515fd6111a + input_fingerprint: 9b0ad542abd6b98f6679422c2a2988a9a7717f005f173b40425562974ed80e54 + template_sources: + - gemfiles/modular/x_std_libs.gemfile.example + gemfiles/modular/x_std_libs/r2/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r2_libs_gemfile + action: write + dest_sha256: e80ec8ad06cb1b31ac982bc25cf7696987fca131aa1001eaefd0bf5cd379c273 + input_fingerprint: db4b11a924a3b2484e4a4c0aa3eeb09d59968a63f671928e64891f22b555c294 + template_sources: + - gemfiles/modular/x_std_libs/r2/libs.gemfile.example + gemfiles/modular/x_std_libs/r3/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r3_libs_gemfile + action: write + dest_sha256: 546f8849f4267bb19aa10ff0de40be30957197f229e6887847181ea9127b2650 + input_fingerprint: 65e9f8d6d80ceb0aafc42efe8eed5b8118883c560885d0fc13a46309f996043a + template_sources: + - gemfiles/modular/x_std_libs/r3/libs.gemfile.example + gemfiles/modular/x_std_libs/r4/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r4_libs_gemfile + action: write + dest_sha256: 8c2582eaa218d216b98c86c933465295c8b4e43f3251ea388b9eaf6e471f8da6 + input_fingerprint: 5c7a8d19cdc08060d4c799c7009a13dbb585acae39061e3fff48269a63b80c55 + template_sources: + - gemfiles/modular/x_std_libs/r4/libs.gemfile.example + gemfiles/modular/x_std_libs/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_vHEAD_gemfile + action: write + dest_sha256: d3133ec4c0638363a7fb025d19be7e95a615fd61c35ddb8d17f2280ee74a7486 + input_fingerprint: 454fc60d5d920b9f56e2a5a44545f8c96c18be4b5d581636e9b6bc147e39a03e + template_sources: + - gemfiles/modular/x_std_libs/vHEAD.gemfile.example + kramdown-merge.gemspec: + recipe: template_source_application_kramdown_merge_gemspec + action: write + dest_sha256: 33713e983af464d5f03cfc2cef0a301ff6b7afda99204dac20ac84685844348c + input_fingerprint: 84b09c56365c72bf4aeda485700e2b7263ee74e64bd67aeb0c223e33295752bf + template_sources: + - gem.gemspec.example + lib/kramdown/merge/version.rb: + recipe: template_source_application_lib_kramdown_merge_version_rb + action: write + dest_sha256: 148577396599b01b5dd98929ed62ce51e97869926863bf71683413cfab8e57af + input_fingerprint: '058171ab90325c4be28f263405f26b2f927da7633b2f85786c3288cd831bb8c8' + template_sources: + - lib/gem/version.rb.example + sig/kramdown/merge.rbs: + recipe: template_source_application_sig_kramdown_merge_rbs + action: write + dest_sha256: 6725bbdd39f6fb3d2e0bd216e6988073344977c1321c6e18b61b8db5c3127e34 + input_fingerprint: d2c2d7bee8ec9f1d4b9a1501659adcc83342acffae17da2f6c06a71e59c83072 + template_sources: + - sig/gem.rbs.example + spec/spec_helper.rb: + recipe: template_source_application_spec_spec_helper_rb + action: write + dest_sha256: 1404e02d0943a46f5cf81b41240229473691ee16cd6007e20c3a7e5e68c1f25e + input_fingerprint: ec7765741457ebfb9df904587c602caba7c5394b03f5173b59363f804b709128 + template_sources: + - spec/spec_helper.rb.example diff --git a/gems/kramdown-merge/Gemfile b/gems/kramdown-merge/Gemfile index 62d555711..6b3a97897 100644 --- a/gems/kramdown-merge/Gemfile +++ b/gems/kramdown-merge/Gemfile @@ -19,8 +19,7 @@ git_source(:gitlab) { |repo_name| "https://gitlab.com/#{repo_name}" } gemspec # Local workspace dependency wiring for *_local.gemfile overrides -nomono_requirements = ['~> 1.0', '>= 1.0.8'] -gem 'nomono', *nomono_requirements, require: false # ruby >= 2.2 +gem 'nomono', '~> 1.1', '>= 1.1.0', require: false # ruby >= 3.2.0 # Direct sibling dependencies (env-switched via STRUCTUREDMERGE_DEV) direct_sibling_gems = %w[ diff --git a/gems/kramdown-merge/Gemfile.lock b/gems/kramdown-merge/Gemfile.lock index 2781d57a7..c2100dfef 100644 --- a/gems/kramdown-merge/Gemfile.lock +++ b/gems/kramdown-merge/Gemfile.lock @@ -78,8 +78,8 @@ GEM bundler (>= 1.14) version_gem (~> 1.1, >= 1.1.4) geom2d (0.4.1) - gitmoji-regex (2.0.4) - version_gem (~> 1.1, >= 1.1.13) + gitmoji-regex (2.0.6) + version_gem (~> 1.1, >= 1.1.14) hexapdf (1.9.1) cmdparse (~> 3.0, >= 3.0.3) geom2d (~> 0.4, >= 0.4.1) @@ -92,20 +92,29 @@ GEM rdoc (>= 4.0.0) reline (>= 0.4.2) json (2.21.1) - kettle-dev (2.3.9) + kettle-dev (2.4.5) emoji_regex (>= 15.0) + kettle-gha-pins (~> 0.3, >= 0.3.1) + kettle-ndjson (~> 0.1, >= 0.1.1) kettle-rb (~> 0.1, >= 0.1.2) - kettle-test (~> 2.0, >= 2.0.4) + kettle-test (~> 2.0, >= 2.0.12) ruby-progressbar (~> 1.13) + tty-progressbar (~> 0.18) + kettle-gha-pins (0.3.1) + ruby-progressbar (~> 1.13) + tty-progressbar (~> 0.18) + version_gem (~> 1.1, >= 1.1.14) + kettle-ndjson (0.1.1) + version_gem (~> 1.1, >= 1.1.14) kettle-rb (0.1.5) - kettle-soup-cover (3.0.4) + kettle-soup-cover (3.0.5) kettle-wash (~> 0.1, >= 0.1.0) simplecov (>= 1.0) simplecov-cobertura (>= 4.0) simplecov-console (~> 0.9, >= 0.9.5) simplecov-rcov (~> 0.3, >= 0.3.7) simplecov_lcov_formatter (~> 0.9, >= 0.9.0) - kettle-test (2.0.12) + kettle-test (2.0.15) appraisal2 (~> 3.0, >= 3.0.6) backports (~> 3.0) rspec (~> 3.0) @@ -130,8 +139,18 @@ GEM tree_haver (= 7.1.0) version_gem (~> 1.1, >= 1.1.9) mutex_m (0.3.0) + nokogiri (1.19.4-aarch64-linux-gnu) + racc (~> 1.4) + nokogiri (1.19.4-aarch64-linux-musl) + racc (~> 1.4) + nokogiri (1.19.4-arm64-darwin) + racc (~> 1.4) + nokogiri (1.19.4-x86_64-darwin) + racc (~> 1.4) nokogiri (1.19.4-x86_64-linux-gnu) racc (~> 1.4) + nokogiri (1.19.4-x86_64-linux-musl) + racc (~> 1.4) nomono (1.1.0) openssl (4.0.2) ostruct (0.6.3) @@ -186,11 +205,11 @@ GEM rspec-mocks (3.13.8) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) - rspec-pending_for (0.1.21) + rspec-pending_for (0.1.22) rspec-core (~> 3.0) ruby_engine (~> 2.0) ruby_version (~> 1.0) - rspec-stubbed_env (1.0.6) + rspec-stubbed_env (1.0.8) rspec-support (3.13.7) rspec_junit_formatter (0.6.0) rspec-core (>= 2, < 4, != 2.12.0) @@ -286,7 +305,7 @@ GEM silent_stream (1.0.12) logger (~> 1.2) version_gem (>= 1.1.8, < 3) - simplecov (1.0.2) + simplecov (1.0.3) simplecov-cobertura (4.0.0) rexml simplecov (~> 1.0) @@ -298,7 +317,7 @@ GEM simplecov (>= 0.4.1) simplecov_lcov_formatter (0.9.0) simplecov (>= 0.18) - sorbet-runtime (0.6.13351) + sorbet-runtime (0.6.13363) standard (1.56.0) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.0) @@ -322,9 +341,9 @@ GEM standard-custom (~> 1.0, >= 1.0.2) standard-performance (~> 1.9, >= 1.9.0) version_gem (~> 1.1, >= 1.1.13) - stone_checksums (1.0.6) - version_gem (~> 1.1, >= 1.1.13) + stone_checksums (1.0.7) stringio (3.2.0) + strings-ansi (0.2.0) strscan (3.1.8) terminal-table (4.0.0) unicode-display_width (>= 1.1.1, < 4) @@ -342,16 +361,27 @@ GEM parslet (~> 2.0) tree_sitter_language_pack (>= 1.13.2, < 2.0) version_gem (~> 1.1, >= 1.1.9) - tree_sitter_language_pack (1.13.3-x86_64-linux) + tree_sitter_language_pack (1.13.4-aarch64-linux) + sorbet-runtime (~> 0.5) + tree_sitter_language_pack (1.13.4-arm64-darwin) + sorbet-runtime (~> 0.5) + tree_sitter_language_pack (1.13.4-x86_64-darwin) + sorbet-runtime (~> 0.5) + tree_sitter_language_pack (1.13.4-x86_64-linux) sorbet-runtime (~> 0.5) tsort (0.2.0) - turbo_tests2 (3.2.0) + tty-cursor (0.7.1) + tty-progressbar (0.18.3) + strings-ansi (~> 0.2) + tty-cursor (~> 0.7) + tty-screen (~> 0.8) + unicode-display_width (>= 1.6, < 3.0) + tty-screen (0.8.2) + turbo_tests2 (3.2.3) parallel_tests (>= 3.3.0, < 6) rspec (>= 3.10) version_gem (~> 1.1, >= 1.1.14) - unicode-display_width (3.2.0) - unicode-emoji (~> 4.1) - unicode-emoji (4.2.0) + unicode-display_width (2.6.0) version_gem (1.1.14) webrick (1.9.2) yaml-converter (0.2.3) @@ -369,6 +399,9 @@ GEM ostruct rainbow yard + yard-lint (1.10.2) + yard (~> 0.9) + zeitwerk (~> 2.6) yard-relative_markdown_links (0.6.0) nokogiri (>= 1.14.3, < 2) yard-timekeeper (0.2.4) @@ -380,8 +413,13 @@ GEM zlib (3.2.3) PLATFORMS - x86_64-linux + aarch64-linux + aarch64-linux-gnu + aarch64-linux-musl + arm64-darwin + x86_64-darwin x86_64-linux-gnu + x86_64-linux-musl DEPENDENCIES addressable (>= 2.8, < 3) @@ -396,12 +434,12 @@ DEPENDENCIES gitmoji-regex (~> 2.0, >= 2.0.0) irb (~> 1.17) kettle-dev (~> 2.0, >= 2.2.25) - kettle-soup-cover (~> 3.0, >= 3.0.3) + kettle-soup-cover (~> 3.0, >= 3.0.5) kettle-test (~> 2.0, >= 2.0.9) kramdown-merge! kramdown-parser-gfm (~> 1.1) mutex_m (~> 0.2) - nomono (~> 1.0, >= 1.0.8) + nomono (~> 1.1, >= 1.1.0) rake (~> 13.0) rbs (>= 3.0) rdoc (~> 6.11) @@ -424,6 +462,7 @@ DEPENDENCIES yard (~> 0.9, >= 0.9.45) yard-fence (~> 0.9, >= 0.9.6) yard-junk (~> 0.1, >= 0.1.0) + yard-lint (~> 1.10, >= 1.10.2) yard-relative_markdown_links (~> 0.6) yard-timekeeper (~> 0.2, >= 0.2.4) yard-yaml (~> 0.2, >= 0.2.3) @@ -460,15 +499,17 @@ CHECKSUMS erb (6.0.6) sha256=a9b24986700f5bf127c4f297c5403c3ca41b83b0a316c0cd09a096b56e644ae5 gem_bench (2.0.5) sha256=0dc0fb44a5a5eb7b2f5c1c68a5b0164d72007132822c012bac3abe976b199ead geom2d (0.4.1) sha256=ea0998ea90c4f2752e24fe13d85a4f89bee689d151316140ebcc6369bf634ed9 - gitmoji-regex (2.0.4) sha256=01410d3217940bd0e7b2299ec805245afe8d0f06a5d6d38f623d63a63c0ac34f + gitmoji-regex (2.0.6) sha256=d50649caccc8ad1b080f01e869f0909b135206d8b3ece2313ca31a9b0e39f14b hexapdf (1.9.1) sha256=2d1f6a3622e6bc2a70a707d4c3f3fa44f5552ecd9d899f6283abb07398a84884 io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc irb (1.18.0) sha256=de9454a0703a54704b9811a5ef31a60c86949fbf4013fcf244fabc7c775248e3 json (2.21.1) sha256=13a43df75d95641443f5702dff350f237164a9d811ff0f2c2800d4d980220583 - kettle-dev (2.3.9) sha256=03b2f72c6dda4d2c4401ee3c0c96853116c922766e7b5b04224434a49b571bfc + kettle-dev (2.4.5) sha256=3a451940796a671b7adc910db7c3da87899ebec7c5274921ca598345549ae7eb + kettle-gha-pins (0.3.1) sha256=b13a82a403af31880288fe65f85f2a24a93ae4740c0c7cbc15a35044d27aaa51 + kettle-ndjson (0.1.1) sha256=2d84314e8c911d6f560f2736e8f72019df6d811829674788ff33b3bbf518ed66 kettle-rb (0.1.5) sha256=0322a569860c86e70f90d5ebe72353b8720b7054c7efa9f9044857f5c972d29f - kettle-soup-cover (3.0.4) sha256=36d4df472362d2020d16411d7ce26ba2fe2a41fb8be64577ff9b5280acf99d86 - kettle-test (2.0.12) sha256=3a8e5c5f38db03a6f0a8896da6f3576d24e36f53796578c19aafaa2ba5a8ea52 + kettle-soup-cover (3.0.5) sha256=80abb42eb294fa5d3c8632c259a297c554fbc01902714461f3bf99a65190f5d0 + kettle-test (2.0.15) sha256=993b132ffec17fe82cc81c69f876e15d6eb610a4831df08dc01c0cce5c070caa kettle-wash (0.1.1) sha256=ae2e08b64c72c46ceed5ffa197ed859e85352f38ed0412fca2e18ce29b2dc4f9 kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa kramdown-merge (7.1.0) @@ -478,7 +519,12 @@ CHECKSUMS logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203 markdown-merge (7.1.0) mutex_m (0.3.0) sha256=cfcb04ac16b69c4813777022fdceda24e9f798e48092a2b817eb4c0a782b0751 + nokogiri (1.19.4-aarch64-linux-gnu) sha256=1269fb644a6de405057a53dd5c762b1209b43ca7424f839454d3dbc677c31a8f + nokogiri (1.19.4-aarch64-linux-musl) sha256=35c65b9ce72b3bb03207bdbe7067915019dc18c1b9b59139684bd6690fdd01af + nokogiri (1.19.4-arm64-darwin) sha256=a46db9853286e6597b36ebc6953817d15acf3a299583eb3f89fdc6f91dd63527 + nokogiri (1.19.4-x86_64-darwin) sha256=7fd17057d3e1f00e9954a74b3cd76595d3d4a5ef233b7ed9599047c204f70551 nokogiri (1.19.4-x86_64-linux-gnu) sha256=379fae440b28915e3f19d752ce2dcf8465ed2b2fbefd2a7ca0dd497bc981a06a + nokogiri (1.19.4-x86_64-linux-musl) sha256=17dfb7c1fa194ae02fbf7c51a7afc8d278045ab3fdacfd86f91d02d7b274470b nomono (1.1.0) sha256=463dd4c79da02a855739a1b5483190d527b7868688be905e84abdb3449b32c88 openssl (4.0.2) sha256=1037ad2868ae58df9ad917891c0c0f9815a1172f6846d4bcdd508e4c2ee747c2 ostruct (0.6.3) sha256=95a2ed4a4bd1d190784e666b47b2d3f078e4a9efda2fccf18f84ddc6538ed912 @@ -506,8 +552,8 @@ CHECKSUMS rspec-core (3.13.6) sha256=a8823c6411667b60a8bca135364351dda34cd55e44ff94c4be4633b37d828b2d rspec-expectations (3.13.5) sha256=33a4d3a1d95060aea4c94e9f237030a8f9eae5615e9bd85718fe3a09e4b58836 rspec-mocks (3.13.8) sha256=086ad3d3d17533f4237643de0b5c42f04b66348c28bf6b9c2d3f4a3b01af1d47 - rspec-pending_for (0.1.21) sha256=c87fda50c20f8faca72d9cfa6a936abffd37860343f14aced95bbb29b8ae96bf - rspec-stubbed_env (1.0.6) sha256=6467a6eb0f72146d443ffb0c5a2a549d8812e59c04fbc81e03cd914ebf1f28dc + rspec-pending_for (0.1.22) sha256=49dc647473f8c8ea4ccc1a33813537dd94b913ef7ec5a8689896101eaacb71cf + rspec-stubbed_env (1.0.8) sha256=b23c4dd5e5d6a0cf0c5b4f6ed3f3678d78e4be9ec247ea9abf0669d20b490535 rspec-support (3.13.7) sha256=0640e5570872aafefd79867901deeeeb40b0c9875a36b983d85f54fb7381c47c rspec_junit_formatter (0.6.0) sha256=40dde674e6ae4e6cc0ff560da25497677e34fefd2338cc467a8972f602b62b15 rubocop (1.88.2) sha256=8def251c90cd955feb4daa3edc0ab56893250c4ce90ef81e6c80c03f9a939bbf @@ -533,37 +579,44 @@ CHECKSUMS ruby_engine (2.0.3) sha256=ca2ae7def8cfcdc2bfb6a186d36d5d59c8b403245dc0256c3802b767fa278aaa ruby_version (1.0.3) sha256=5930f9950746b7e6c973184398ee364ee7440b170fef7922b9f5cdf317f1ccb5 silent_stream (1.0.12) sha256=377c43aa10033fe90c33b39ea8cd97d79f2d1c4856df598efc56f3091f3ae782 - simplecov (1.0.2) sha256=c6459434efe4b948b46477cc2df2faa73ab365f83a33c7c17f81262f4f7f1244 + simplecov (1.0.3) sha256=38ef0514f16ae7562f0d0f4df02610071115103d301b6de7dacbcc000082e39b simplecov-cobertura (4.0.0) sha256=e4fb3159b1ecea545b44f5452a8611305323e78ad23eae8aed35924d072e01ea simplecov-console (0.9.5) sha256=b1108bcfff5f210143e2b8301698c367b01586f20d25a73e95475a5df6fc6ff6 simplecov-rcov (0.3.7) sha256=372f50bf6df6b6350b7d0c840f2f8bdabe021861a43c26877b747c9ac96139fc simplecov_lcov_formatter (0.9.0) sha256=4c1839bb31dcf7a8f7a6474c94ed228aa03b994e9dd5e1965e58b4121b049bed - sorbet-runtime (0.6.13351) sha256=f8fee17c6e3edf835dc6823d26afb9a7c8969c6710d1fabe2fb43f4e0c15c64f + sorbet-runtime (0.6.13363) sha256=f1f0b2e946fb3cd76b9d8e3d85459cdaf7f5466331a400cafcf008e508b6d2c3 standard (1.56.0) sha256=ae2af4d9669589162ac69ed5ef59dcf9f346d4afc81f7e62b84339310dfcb787 standard-custom (1.0.2) sha256=424adc84179a074f1a2a309bb9cf7cd6bfdb2b6541f20c6bf9436c0ba22a652b standard-performance (1.9.0) sha256=49483d31be448292951d80e5e67cdcb576c2502103c7b40aec6f1b6e9c88e3f2 standard-rspec (0.5.0) sha256=64d396524a65af47f5331b423d8cdd313e0267401647bb7892489ca89dad2973 standard-rubocop-lts (2.0.10) sha256=89708a505b7d8b24d2ac399a7520fcb9e764abc2ecb4289b631b5fe0e3b76617 - stone_checksums (1.0.6) sha256=c775f830513d6c6ab26e31d1a5fbecd4c4e39002663d4d9f8fa96e97990b5298 + stone_checksums (1.0.7) sha256=faf7a175da7c4f32777c5292a0128b06eec183b3cc3a0b382529b21800300626 stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1 + strings-ansi (0.2.0) sha256=90262d760ea4a94cc2ae8d58205277a343409c288cbe7c29416b1826bd511c88 strscan (3.1.8) sha256=aae2db611a225559f21ffbb71765c9a4e60fd262534a9ea84f4f11c7f32f679e terminal-table (4.0.0) sha256=f504793203f8251b2ea7c7068333053f0beeea26093ec9962e62ea79f94301d2 thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73 timecop (0.9.11) sha256=41284dc6e5041f2184f781ace766f942108c842f8d8c1386a26e6343decc7542 timecop-rspec (1.0.3) sha256=005f14841bb606dcaefb060e321b5388e2e59537742bee8b3a9a9a40e598fab9 - token-resolver (2.0.5) sha256=b852f924287ffb58a440856e862b056c8ad97e74b4b2526cee43e0771f40c25c + token-resolver (2.0.5) tree_haver (7.1.0) - tree_sitter_language_pack (1.13.3-x86_64-linux) sha256=1ffd045bd236ea54f58c5872ee66121d01033359c1f28f375b7fd4a4b5620cf9 + tree_sitter_language_pack (1.13.4-aarch64-linux) sha256=f7bb95fd59afda1e1b91a7b6ad4df244c585a863e94e4a0f492ef2336a5358b8 + tree_sitter_language_pack (1.13.4-arm64-darwin) sha256=2b48ded1f5feae3de20be1471aaa7c211601ac1c71ca6d4789cf31560a854132 + tree_sitter_language_pack (1.13.4-x86_64-darwin) sha256=8a2460d9029e7610b863d2481e2da0078f87b18bf8668070ccb5ecce71e272d8 + tree_sitter_language_pack (1.13.4-x86_64-linux) sha256=ae3ae718534088b2dc76bd93e7d093f11e8d19188bf47edfcd962df906e1af97 tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f - turbo_tests2 (3.2.0) sha256=8b35421548399d1923567b177970f42671c65695b93cdd134d78fbcbab85dff0 - unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42 - unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f + tty-cursor (0.7.1) sha256=79534185e6a777888d88628b14b6a1fdf5154a603f285f80b1753e1908e0bf48 + tty-progressbar (0.18.3) sha256=6cbb4260e55e74a9180d502143eb6a467d2c8e51bf5f3c9509fb5cacc3d4a5f6 + tty-screen (0.8.2) sha256=c090652115beae764336c28802d633f204fb84da93c6a968aa5d8e319e819b50 + turbo_tests2 (3.2.3) sha256=f77fc0799014c1d7890977e117cf39317bc4544de2c88a55149ed920b4cff942 + unicode-display_width (2.6.0) sha256=12279874bba6d5e4d2728cef814b19197dbb10d7a7837a869bab65da943b7f5a version_gem (1.1.14) sha256=6b7306c7e9416d06067561981ab3444e2cecb844f26cc325ae3c27b44cf85613 webrick (1.9.2) sha256=beb4a15fc474defed24a3bda4ffd88a490d517c9e4e6118c3edce59e45864131 yaml-converter (0.2.3) sha256=d35e69e547610d9e347672cc277fcb7d71dff3c53a942e66f82b1c64022ada72 yard (0.9.45) sha256=52e211493f7cb8a3ebf7e104a25a1e73937a3103092545d34cb88fafebb3dc51 yard-fence (0.9.6) sha256=3d1dbf4e3df462ac78b8bd2e01cf740a2de20168387c929aca31a0bcee490659 yard-junk (0.1.0) sha256=e85fe2ec1afa47313decd333447b53458cb1ed49b510b70015fdc3041a94bcdd + yard-lint (1.10.2) sha256=3e595709d088a8cc827e706a4146b447eb6a907ee375d06c11077369d00717f6 yard-relative_markdown_links (0.6.0) sha256=3e5ffa85cbad9bac70bee5421774b190fb25d3bdf489323a5b3534f647d1a70e yard-timekeeper (0.2.4) sha256=62f8d001d737c6e2ac688e7b37386f958dceb0f6aff9c909575e1bec8d20775a yard-yaml (0.2.3) sha256=fe5fef18819e1cbd05bb8f1b9e1baad6bf70c28125eb75b57bbf6397b0831812 diff --git a/gems/kramdown-merge/bin/kettle-gha-pins b/gems/kramdown-merge/bin/kettle-gha-pins new file mode 100755 index 000000000..c743cecac --- /dev/null +++ b/gems/kramdown-merge/bin/kettle-gha-pins @@ -0,0 +1,16 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# +# This file was generated by Bundler. +# +# The application 'kettle-gha-pins' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) + +require 'rubygems' +require 'bundler/setup' + +load Gem.bin_path('kettle-gha-pins', 'kettle-gha-pins') diff --git a/gems/kramdown-merge/gemfiles/modular/coverage.gemfile b/gems/kramdown-merge/gemfiles/modular/coverage.gemfile index b93014b6b..b4c26a504 100644 --- a/gems/kramdown-merge/gemfiles/modular/coverage.gemfile +++ b/gems/kramdown-merge/gemfiles/modular/coverage.gemfile @@ -7,7 +7,7 @@ if ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false').zero? # Coverage (remote/released) platform :mri do - gem 'kettle-soup-cover', '~> 3.0', '>= 3.0.3', require: false + gem 'kettle-soup-cover', '~> 3.0', '>= 3.0.5', require: false end else eval_gemfile 'coverage_local.gemfile' diff --git a/gems/kramdown-merge/gemfiles/modular/coverage_local.gemfile b/gems/kramdown-merge/gemfiles/modular/coverage_local.gemfile index e920f9e96..e3a3667ef 100644 --- a/gems/kramdown-merge/gemfiles/modular/coverage_local.gemfile +++ b/gems/kramdown-merge/gemfiles/modular/coverage_local.gemfile @@ -17,7 +17,8 @@ platform :mri do path_env: 'KETTLE_DEV_DEV', vendored_gems_env: 'VENDORED_GEMS', vendor_gem_dir_env: 'VENDOR_GEM_DIR', - debug_env: 'KETTLE_DEV_DEBUG' + debug_env: 'KETTLE_DEV_DEBUG', + root: %w[src my kettle-dev] ) if ENV.fetch('GALTZO_FLOSS_DEV', 'false').casecmp('false') != 0 diff --git a/gems/kramdown-merge/gemfiles/modular/documentation.gemfile b/gems/kramdown-merge/gemfiles/modular/documentation.gemfile index f9bcfbf4a..775ec0452 100644 --- a/gems/kramdown-merge/gemfiles/modular/documentation.gemfile +++ b/gems/kramdown-merge/gemfiles/modular/documentation.gemfile @@ -10,6 +10,7 @@ gem 'kramdown-parser-gfm', '~> 1.1', require: false # Ruby >= 2.3 gem 'yaml-converter', '~> 0.2', '>= 0.2.3', require: false # Ruby >= 3.2 gem 'yard', '~> 0.9', '>= 0.9.45', require: false gem 'yard-junk', '~> 0.1', '>= 0.1.0', require: false # Ruby >= 3.1 +gem 'yard-lint', '~> 1.10', '>= 1.10.2', require: false # Ruby >= 3.2 gem 'yard-relative_markdown_links', '~> 0.6', require: false if ENV.fetch('GALTZO_FLOSS_DEV', 'false').casecmp('false').zero? diff --git a/gems/kramdown-merge/gemfiles/modular/templating.gemfile b/gems/kramdown-merge/gemfiles/modular/templating.gemfile index a672de184..a7e6c1f06 100644 --- a/gems/kramdown-merge/gemfiles/modular/templating.gemfile +++ b/gems/kramdown-merge/gemfiles/modular/templating.gemfile @@ -12,7 +12,7 @@ end if kettle_remote # Template/plugin checks for released installs. - gem 'kettle-drift', '~> 1.0', '>= 1.0.6', require: false + gem 'kettle-drift', '~> 1.0', '>= 1.0.7', require: false end # Set STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local development with path-based dependencies. diff --git a/gems/kramdown-merge/gemfiles/modular/templating_local.gemfile b/gems/kramdown-merge/gemfiles/modular/templating_local.gemfile index ef37efbbf..e45ee6ee1 100644 --- a/gems/kramdown-merge/gemfiles/modular/templating_local.gemfile +++ b/gems/kramdown-merge/gemfiles/modular/templating_local.gemfile @@ -65,7 +65,8 @@ platform :mri do path_env: 'KETTLE_DEV_DEV', vendored_gems_env: 'VENDORED_GEMS', vendor_gem_dir_env: 'VENDOR_GEM_DIR', - debug_env: 'KETTLE_DEV_DEBUG' + debug_env: 'KETTLE_DEV_DEBUG', + root: %w[src my kettle-dev] ) end end diff --git a/gems/kramdown-merge/lib/kramdown/merge/version.rb b/gems/kramdown-merge/lib/kramdown/merge/version.rb index feddb4113..0cd0ec5f1 100644 --- a/gems/kramdown-merge/lib/kramdown/merge/version.rb +++ b/gems/kramdown-merge/lib/kramdown/merge/version.rb @@ -2,9 +2,12 @@ module Kramdown module Merge + # Version namespace for this gem. module Version + # Current gem version. VERSION = '7.1.0' end + # Current gem version exposed at the traditional constant location. VERSION = Version::VERSION # Traditional Constant Location end end diff --git a/gems/markdown-merge/.rubocop_gradual.lock b/gems/markdown-merge/.rubocop_gradual.lock index 170b2e9af..ef74e1117 100644 --- a/gems/markdown-merge/.rubocop_gradual.lock +++ b/gems/markdown-merge/.rubocop_gradual.lock @@ -274,30 +274,33 @@ [466, 7, 879, "Metrics/MethodLength: Method has too many lines. [21/10]", 1144304252], [466, 7, 879, "Metrics/PerceivedComplexity: Perceived complexity for `first_list_item_anchor` is too high. [10/8]", 1144304252] ], - "lib/markdown/merge/file_analysis.rb:4222490806": [ - [41, 5, 21729, "Metrics/ClassLength: Class has too many lines. [414/100]", 3545476722], - [185, 7, 2960, "Metrics/AbcSize: Assignment Branch Condition size for `compute_parser_signature` is too high. [<13, 36, 18> 42.3/17]", 1002271909], - [185, 7, 2960, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `compute_parser_signature` is too high. [17/7]", 1002271909], - [185, 7, 2960, "Metrics/MethodLength: Method has too many lines. [42/10]", 1002271909], - [185, 7, 2960, "Metrics/PerceivedComplexity: Perceived complexity for `compute_parser_signature` is too high. [11/8]", 1002271909], - [292, 7, 640, "Metrics/AbcSize: Assignment Branch Condition size for `heading_section_owners` is too high. [<5, 16, 3> 17.03/17]", 2368833202], - [292, 7, 640, "Metrics/MethodLength: Method has too many lines. [14/10]", 2368833202], - [311, 7, 763, "Metrics/AbcSize: Assignment Branch Condition size for `link_definition_owners` is too high. [<2, 19, 7> 20.35/17]", 2205544068], - [311, 7, 763, "Metrics/MethodLength: Method has too many lines. [16/10]", 2205544068], - [348, 7, 1577, "Metrics/AbcSize: Assignment Branch Condition size for `table_row_owners` is too high. [<16, 43, 17> 48.93/17]", 363370243], - [348, 7, 1577, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `table_row_owners` is too high. [16/7]", 363370243], - [348, 7, 1577, "Metrics/MethodLength: Method has too many lines. [34/10]", 363370243], - [348, 7, 1577, "Metrics/PerceivedComplexity: Perceived complexity for `table_row_owners` is too high. [16/8]", 363370243], - [408, 7, 689, "Metrics/MethodLength: Method has too many lines. [14/10]", 590050144], - [448, 7, 546, "Metrics/MethodLength: Method has too many lines. [18/10]", 1600631533], - [471, 7, 653, "Metrics/MethodLength: Method has too many lines. [15/10]", 4205564731], - [492, 7, 897, "Metrics/AbcSize: Assignment Branch Condition size for `inline_link_reference_at` is too high. [<6, 17, 11> 21.12/17]", 1855615733], - [492, 7, 897, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `inline_link_reference_at` is too high. [8/7]", 1855615733], - [492, 7, 897, "Metrics/MethodLength: Method has too many lines. [19/10]", 1855615733], - [517, 33, 83, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [7/5]", 2884863618], - [530, 7, 348, "Metrics/MethodLength: Method has too many lines. [13/10]", 3731533636], - [559, 7, 777, "Metrics/MethodLength: Method has too many lines. [14/10]", 1287754637], - [597, 7, 558, "Metrics/MethodLength: Method has too many lines. [15/10]", 3417342515] + "lib/markdown/merge/file_analysis.rb:1302776577": [ + [41, 5, 23354, "Metrics/ClassLength: Class has too many lines. [449/100]", 355564451], + [186, 7, 2960, "Metrics/AbcSize: Assignment Branch Condition size for `compute_parser_signature` is too high. [<13, 36, 18> 42.3/17]", 1002271909], + [186, 7, 2960, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `compute_parser_signature` is too high. [17/7]", 1002271909], + [186, 7, 2960, "Metrics/MethodLength: Method has too many lines. [42/10]", 1002271909], + [186, 7, 2960, "Metrics/PerceivedComplexity: Perceived complexity for `compute_parser_signature` is too high. [11/8]", 1002271909], + [293, 7, 640, "Metrics/AbcSize: Assignment Branch Condition size for `heading_section_owners` is too high. [<5, 16, 3> 17.03/17]", 2368833202], + [293, 7, 640, "Metrics/MethodLength: Method has too many lines. [14/10]", 2368833202], + [312, 7, 763, "Metrics/AbcSize: Assignment Branch Condition size for `link_definition_owners` is too high. [<2, 19, 7> 20.35/17]", 2205544068], + [312, 7, 763, "Metrics/MethodLength: Method has too many lines. [16/10]", 2205544068], + [346, 9, 11, "Style/MultilineBlockChain: Avoid multi-line chains of blocks.", 848344986], + [355, 7, 1577, "Metrics/AbcSize: Assignment Branch Condition size for `table_row_owners` is too high. [<16, 43, 17> 48.93/17]", 363370243], + [355, 7, 1577, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `table_row_owners` is too high. [16/7]", 363370243], + [355, 7, 1577, "Metrics/MethodLength: Method has too many lines. [34/10]", 363370243], + [355, 7, 1577, "Metrics/PerceivedComplexity: Perceived complexity for `table_row_owners` is too high. [16/8]", 363370243], + [405, 7, 984, "Metrics/AbcSize: Assignment Branch Condition size for `collect_list_item_owners` is too high. [<6, 21, 7> 22.93/17]", 682727979], + [405, 7, 984, "Metrics/MethodLength: Method has too many lines. [21/10]", 682727979], + [449, 7, 689, "Metrics/MethodLength: Method has too many lines. [14/10]", 590050144], + [489, 7, 546, "Metrics/MethodLength: Method has too many lines. [18/10]", 1600631533], + [512, 7, 653, "Metrics/MethodLength: Method has too many lines. [15/10]", 4205564731], + [533, 7, 897, "Metrics/AbcSize: Assignment Branch Condition size for `inline_link_reference_at` is too high. [<6, 17, 11> 21.12/17]", 1855615733], + [533, 7, 897, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `inline_link_reference_at` is too high. [8/7]", 1855615733], + [533, 7, 897, "Metrics/MethodLength: Method has too many lines. [19/10]", 1855615733], + [558, 33, 83, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [7/5]", 2884863618], + [571, 7, 348, "Metrics/MethodLength: Method has too many lines. [13/10]", 3731533636], + [600, 7, 777, "Metrics/MethodLength: Method has too many lines. [14/10]", 1287754637], + [638, 7, 558, "Metrics/MethodLength: Method has too many lines. [15/10]", 3417342515] ], "lib/markdown/merge/file_analysis_base.rb:678024820": [ [37, 5, 26494, "Metrics/ClassLength: Class has too many lines. [405/100]", 2769422452], @@ -633,8 +636,8 @@ [144, 121, 29, "Layout/LineLength: Line is too long. [149/120]", 981994949], [151, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 4229808912] ], - "spec/fixtures_integration_spec.rb:762722167": [ - [3, 1, 17188, "Metrics/BlockLength: Block has too many lines. [403/25]", 3093659447], + "spec/fixtures_integration_spec.rb:406947146": [ + [3, 1, 17791, "Metrics/BlockLength: Block has too many lines. [417/25]", 1929420501], [41, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 180560828] ] } diff --git a/gems/markdown-merge/.structuredmerge/kettle-jem.lock b/gems/markdown-merge/.structuredmerge/kettle-jem.lock new file mode 100644 index 000000000..2d1287bdf --- /dev/null +++ b/gems/markdown-merge/.structuredmerge/kettle-jem.lock @@ -0,0 +1,527 @@ +--- +version: 1 +template_state: + version: 7.1.0 + applied_at: '2026-07-26' + changelog_replay: + last_entry_key: kettle-jem-template-20260726-002 + last_entry_date: '2026-07-26' + checksums: + ".aiignore.example": 48a5dfdd93afd1a15fdce39cc28ca9920263f00018b0968ab031fa744521e5ce + ".config/mise/env.sh": aeea5a2ab489ba6e5467ae8de6e386ec8c8fe4ff31a044e69d0cd6a092dd6654 + ".devcontainer/apt-install/devcontainer-feature.json.example": 273a07f9d3926e1b6287c37709a469ee05d724cfedae62ad3b0cd8c09befc9ec + ".devcontainer/apt-install/install.sh.example": b61e020b60ca172bb7b658e63c9cd4342e49bda0531a6b19b36475e515ad20b0 + ".devcontainer/devcontainer.json.example": 4a80d471379b9720cc65cc89543cbbc0a7be87b188a818160296577c4e87606f + ".devcontainer/scripts/setup-tree-sitter.sh.example": c34f48d7bac8561fb780c4c7a81cec5004c3ac0edc11f229799ec9a4e3eccd54 + ".env.local.example": 35cb867e8bacb75252a85c29f78899b36d0d1843511ae1ba1fbc7da863b128b3 + ".envrc.example": b7232f4bae0fb399cc9c9cdc4a5eb694bd69623aeeadcbab18c9990e443040a1 + ".envrc.no-osc.example": b7232f4bae0fb399cc9c9cdc4a5eb694bd69623aeeadcbab18c9990e443040a1 + ".gemrc.example": 77b1c36ae6f91bedf08b99e662a971b02f7e66e0d65267805d068d30ff118aba + ".git-hooks/commit-msg.example": d858575bf70d6175fdd7656e9ba0b41672de3fb49163181efe3fbc9e40306024 + ".git-hooks/commit-subjects-goalie.txt.example": bb1179c8911af8afeb1f9a604b3de789d4a4b33d9d4a7743b3145998c15b0a94 + ".git-hooks/footer-template.erb.txt.example": 70ed3616ee04a4062126f53892cc255e7aa2b66741fe22d6b372f7df99676718 + ".git-hooks/prepare-commit-msg.example": 35266ead46a6385d20eeff7ec64afedef33a2db18d1238b8662a1bc758f05335 + ".github/.codecov.yml.example": d6ef3208a90eca74f79d8ff4e5ae21a915562b075cb17978b1eaadc231dd4e85 + ".github/FUNDING.yml.example": fd27dff7db58f4e8a39c35ccb60e39422517038501a5f2a99ef2aaeea2d1fa5d + ".github/FUNDING.yml.no-osc.example": 8f1a867b1921b3dec1c63f7a7cd629362c1fb1ad0d1052494b48ba746b0fc5c6 + ".github/copilot_instructions.md.example": f5c5791df013e89e170fd436379b14e251d0ff4cb6b330a6d961e80c9071f2d3 + ".github/dependabot.yml.example": db84d1c13f64100d2f48212c022f0d985e9061ca76c36d82e7057fd845ecd528 + ".github/workflows/auto-assign.yml.example": 57b8159a15bf49946506e1b624934feed6a1cc8f71ad68968323c87acac56c67 + ".github/workflows/coverage.yml.example": 524ef90e0fd2ca0b846c464197d8d43cd6a57834303c9526ea0bd277f2beb3e1 + ".github/workflows/current.yml.example": dbc82e7593804c05d2c217d5c02d79d5480b5a0d1e04eea99b7235f35f520216 + ".github/workflows/dep-heads.yml.example": d94122f3246e17774fa015dde8d9a5772a66e54f817d44e62716f6a61d899050 + ".github/workflows/dependency-review.yml.example": a895d52257a7112d796fabf349ced1079bed93e81e3aa9cb088f9af3f44d1e5f + ".github/workflows/discord-notifier.yml.example": f9cc83a87058bd420426444510a1dd1520fd7cc15af50832ad52c25c5766be94 + ".github/workflows/framework-ci.yml.example": 112ef6178fcf115fe9e0a248ec6cb4af748ce89142fd7dba30e9abb6ebdc17be + ".github/workflows/heads.yml.example": aa55cf9bb4ae35fe126384003e8af4b91e685bcf370263b3710bd429f6c44343 + ".github/workflows/jruby-10.0.yml.example": 0eaf6d10c304de606684d420bbd88cfc90fe9d139a56773e011c6abaa6c5fc91 + ".github/workflows/jruby-9.1.yml.example": 9062f9de8843da1f8c4da8f991bbd24f9540c63927deaf311649f3088a672d5b + ".github/workflows/jruby-9.2.yml.example": f330363fc0af7dd0be24c140c919c07737a3168c5647012e34ba0c36634005e5 + ".github/workflows/jruby-9.3.yml.example": 3b26b3a978d0018f01e6d87651936f2e92fcb58d62bcdf11822eca3c2656d303 + ".github/workflows/jruby-9.4.yml.example": a830b92838a09b9316a81745b48ff35bed9461783154fc6d0e52df0d6aa319f3 + ".github/workflows/jruby.yml.example": f10f779cd3be37d2ffa593d9a83ba68a8684bb849ed1c4d9ae41706ff12571e1 + ".github/workflows/license-eye.yml.example": 23db5d6ee9b5382de1f2042642219d65214e09c3f975c418d4dec4d46375036c + ".github/workflows/locked_deps.yml.example": c7eaa20cc7d7de6209e576274e592ffb4838177ae6ab56096b2439d0fa1bc31c + ".github/workflows/opencollective.yml.example": fe7d8d346f9ab055b6779abf62972291460d05275e2c4d191e291e8cd73b0e6b + ".github/workflows/ruby-2.3.yml.example": 90474f1a462edc877983b91dd40d942e82b28262f1afdca74cddcdd52d7e8c26 + ".github/workflows/ruby-2.4.yml.example": fe84af4efef6934d7ff63efa2a4c85994f2ea1887f61b1ab5d30a21365429ec9 + ".github/workflows/ruby-2.5.yml.example": c40db157514168442311191ebc88853dfb36447a90171a73f42d435e92d02f05 + ".github/workflows/ruby-2.6.yml.example": 87bb8537d0047217651a327353df670fed3ea9e4a5350e965ed80af9ce32d9d3 + ".github/workflows/ruby-2.7.yml.example": 5650ec41bc67553457019a772a3343578872749d21268d5e7fb1715ebf4e2351 + ".github/workflows/ruby-3.0.yml.example": f9d7c7dfc6eaea1ca12c92e0b98b4ba8fed5726d26459bb410ab9812a741e5b9 + ".github/workflows/ruby-3.1.yml.example": e44879cd3ea47d00e44e573745d7f95fc1a561a9c1d69d72529d0c07294bd26e + ".github/workflows/ruby-3.2.yml.example": c28b9179778157e6b4807a775968840ff1c6bf2fd847ce1ce694b9a77df42f6e + ".github/workflows/ruby-3.3.yml.example": 033e4f0ed7ded17f5d13fde6674ec9fd555cfe58c11f57f7dc2f1fee21c718b6 + ".github/workflows/ruby-3.4.yml.example": 474a96468f101b8fddac4cecaa0629f28d5ceec0c784329affdc471eb1e3e889 + ".github/workflows/style.yml.example": dea7243a91dc164a172e90b7933de58cdd353d7e5df1beac22cec63125edc086 + ".github/workflows/templating.yml.example": 327b933509e1ade4d53df5756f6407028b479c51847775db494fb9c25e66ce5a + ".github/workflows/truffle.yml.example": 56fa53dc206976c81db7cc3530f4d19d89ea5859c1245492e5a5ecb9304de63e + ".github/workflows/truffleruby-22.3.yml.example": d6773529e6961039b5cc4a145c77623881aa3857d875bbb415ca0f8147166d7a + ".github/workflows/truffleruby-23.0.yml.example": abcd23a18d748528f7558d4ab7bc4830796cb686ca7371f67a8ddaf6d0362d72 + ".github/workflows/truffleruby-23.1.yml.example": 11af8a3f0823ed3ab17e759d81b8a4551eb7af8096ce0b5a9501fd83cada1cd2 + ".github/workflows/truffleruby-24.2.yml.example": 2c4ff82eeaa3bdb19391f04cd2f41b07733986a053d5ac8498176fef5f890e5e + ".github/workflows/truffleruby-25.0.yml.example": 42cdfdcd21c7b3bb1b87c22c2bc7a98135a442742df5f9a45e2b4e03838c1e7f + ".github/workflows/truffleruby-33.0.yml.example": 2a45e428ca13dac56ee75526b80eac477b61697ca06c94680e1eb05d21dbc25a + ".github/workflows/unlocked_deps.yml.example": 15f5ccbe811aa5a8650c2aa69b32f4f6a24d5f8bd3aae2dcbec92cbe3a51f0a7 + ".gitignore.example": 14864a0c88be3f8c122ab3032efeb782ba5e035013231038acf746a400437a3e + ".gitlab-ci.yml.example": ef64afa9855ebb59bbc87446fa9533238d3ce180966ceb19649a7f165715b92b + ".idea/.gitignore.example": b44a5aa16bf9fe5635558af347454b05a76d600084308a9f43d4d0b54789ecab + ".licenserc.yaml.example": 8787fa7bddce911f8ba47bda3eb6ad9786b6650d5d94786723e88773098ed37d + ".opencollective.yml.example": 9ad9b83fe54f0bddac7fb614575585d98f78df0e181ee70a7acd0168d26e3142 + ".qlty/qlty.toml.example": cf3d750d2328f6c057b08b7ce3d7ec00a4056c7f0eedda59af321d6caca03553 + ".rspec.example": 40d3f3ff435b0f9e5863772a95df8725b939c2dc11aead2bca68dcd6d85a9788 + ".rubocop.example": 591e4b45430e85b0dd460cc11c70650912fa2734988420b934109d06a749344f + ".rubocop.yml.example": 47f9a031022db67c964dd76ee2e8dfee21295a1877ca4d6233d3de39d114af73 + ".rubocop_rspec.yml.example": 288ad75e7eb14d87d80fafe6f7272217be5c57547536ee56c780a7d10ac7ec74 + ".simplecov.example": ffc76492effe905cc65797389fc8050fda136652ac078a80303cd084b349ef28 + ".structuredmerge/git-drivers.toml.example": 9d241a44c9edffcdbd3da018fa188a238089c3d1635040924df594a6929a4f97 + ".structuredmerge/kettle-jem.yml.example": 954cfc9e35cd20e46376426675e985bf8a0de19ff5069bf7be24b574837be615 + ".yard-lint.yml.example": 90def46867c9436b4e177c47d91fc8165f4602e335715aecc39f5587ae20b55b + ".yardignore.example": 821f453c609df7d46145d675424b39dfbe6dfdca8edac5f367b85fff48502455 + ".yardopts.example": 6fd6f2701713096a8a9ea095c213bbc68eeef37797c4754d97837e3229a3a5f6 + AGENTS.md.example: aec69512cbe17004660ac0abfabb9ec91a5c51c2cd82c10f30f08886f9bf64a7 + AGPL-3.0-only.md.example: d8a6cc31abc16b6748c7a21f21611f5a1ec33f67d22ca23d7da1c19b95496bee + Appraisal.root.gemfile.example: 8724e3f6faea995be655ac49369bec64a70710112b1f65707fa38f1fd2fd3254 + Appraisals.example: 9cb1abcfb1a0bd6d859ca0705efb874dbe546754c8c71f9f95025ff6817f1471 + Big-Time-Public-License.md.example: b0c02a112c9eee0ed69f05fd8f22277a2f8bc62d447b6cb75d6df560e05bf431 + CHANGELOG.md.example: 73459e50dad34d84db88844c993d975097557bdf5229e101b0d1339de6f98ffc + CHANGELOG.transfer.md: 9c201849117c9d4234724c4599643dd42fdce5f0a673a1abee97b97e556c301b + CITATION.cff.example: e404ea0a7919d78a83d53d80e211d17b9663576aa606583b709795dc023fd75c + CODE_OF_CONDUCT.md.example: f1ad532f1860f73ef774c6b27a26d41f4bc1cb8813034f5957487766ebb0986b + CONTRIBUTING.md.example: 63d339848c615f2c181d6b0565c42e56371eedb66f310d146cb7da297f7bc641 + FUNDING.md.example: 455bbb2b55d934283a2e7c16b59c321116c53310a85a718b7cf8ca44e9e3721e + FUNDING.md.no-osc.example: 05a85d5faf22d5ea5721622d242080447cf318d3277d9d529e438be1c9d5a351 + Gemfile.example: 6b2d72ec8a630cce515b7b528022071b13eee863c3164763df03792a5004345a + IRP.md.example: 85d8887d9b0e77f7fa9835ca5b9be31f586fdc94764ed1819af2a9a7fec98e96 + LICENSE.md.example: 120edf5f23173ebbdb5ad384ffc2e9b97e62aa6d0e61b733c003bd4db1b08276 + MIT.md.example: 365fce2a82f9d258ada9a527accfd5754b406ee9cdd8f8ed86bbec64b8c42ab2 + PolyForm-Noncommercial-1.0.0.md.example: ffcca38841adb694b6f380647e15f17c446a4d1656fed51a1e2041d064c94cc8 + PolyForm-Small-Business-1.0.0.md.example: 2f81e317d36f83a199c9fa10bcb250775fd90510303eaeb15aac2d8f0c1fc2d6 + README.md.example: 452446a44d120df26cde68fbc7aff086fa815769c989b994ebc1432ea927974f + REEK: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 + RUBOCOP.md.example: c09e5533ccc59b70a2efa05c99f66e521137c1053d3c12eb43509cebd5b68b0e + Rakefile.example: 569803e726b07ea26267fec6891367a3096a0dff3c266269a7081d36afe496af + SECURITY.md.example: ee9411aa85f36d88363fdaea7a1baea4362b6ec112cf2688e711b05de1d3144c + bin/setup.example: 0ac35089c95a91d8973fe7a318bf9fd98b9f8e00db92c5d9ca6cd858abb8d41b + certs/pboling.pem.example: 18956f60643666cc181e2743b3b3691bec08c5326f514f60af54d0cdb9ebc554 + gem.gemspec.example: 9989cc8a1cd125586ea807eaed549eaecc044711d31f17dd7bac2a0815b28b1a + gemfiles/modular/benchmark/r4/v0.5.gemfile.example: 5bc3190090ae456df1a8cce28dd47a7fb293495f6d845ec7e53a7a8b50f14ae1 + gemfiles/modular/benchmark/vHEAD.gemfile.example: ca6cd52c55c3082759c6ddc97638970f12d953aec1822470823d316086aa6e25 + gemfiles/modular/cgi/r4/v0.5.gemfile.example: c2d14a39377a2435419ceaca22a3421ebd899e9cba943df8a90b576a33624870 + gemfiles/modular/cgi/vHEAD.gemfile.example: 9ff3dc789b3279642876c0aad4b0094c1139bb8fbbf36daab804d3b2b3a60b43 + gemfiles/modular/coverage.gemfile.example: 915fc161ad574fdbc071bc733b69b27e94bd7a4c68cc4f58da267c9a0987f3e8 + gemfiles/modular/coverage_local.gemfile.example: 928d5f260d7b119c038baa56da9fb78dd524dee613aea33ab72894bbce5c506e + gemfiles/modular/debug.gemfile.example: 0a508bfb02e51b75394b43f4f09d98174dac36ead41cba09c1f730671a1f5905 + gemfiles/modular/documentation.gemfile.example: e15f51e4d14ad2216b6de16c323787945bd225073d70a78420f4c99c98c1ecd1 + gemfiles/modular/documentation_local.gemfile.example: 84a20f5d4b0feb94c2cf2f7a8dce8f682f1483498e41484c2b447a5661fd1870 + gemfiles/modular/erb/r2.3/default.gemfile.example: 9da0d08fb6a299b965c37fe85efcaebd9eb0a82b2ea35fdc157c41bd75431396 + gemfiles/modular/erb/r2.6/v2.2.gemfile.example: '01787cbdf7136c0d75cc7b734c6bb3d2ef6c70d6c1c50e7d0ad2112c0f8ef8e7' + gemfiles/modular/erb/r2/v3.0.gemfile.example: 3793e7dc9ef23a7ccd893d48cbba092fd27594c63e65cca011cc658218425670 + gemfiles/modular/erb/r3.1/v4.0.gemfile.example: bdf71ddcfe5001aab7d71b10a645a785928957ef7bae61d49307eb7f712279f3 + gemfiles/modular/erb/r3/v5.0.gemfile.example: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + gemfiles/modular/erb/r4/v5.0.gemfile.example: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + gemfiles/modular/erb/vHEAD.gemfile.example: ad6f104a49e80e0cf625440e3dc816343fe7e2f037fc4971df75e7bb4305c683 + gemfiles/modular/json/truffleruby_22_3.gemfile.example: 249c12eacbe90f9d0d2e81e7a62c4c7e9102e504ededcda4ecf660cb3bb68be4 + gemfiles/modular/json/truffleruby_23_0.gemfile.example: 66aa010567f7afa1af8244a74c3c88ecaaf84dc87b6a25180691bb480d02ed28 + gemfiles/modular/json/truffleruby_23_1.gemfile.example: '080fcbdaf2bec73cad40832a3d51eebb380af789917b96f493d1460b0dd6361d' + gemfiles/modular/mutex_m/r2.4/v0.1.gemfile.example: '09728bdc10807b3ca9dd3b9f12986acbe8c40ac08ada438bcfd49cd69445c650' + gemfiles/modular/mutex_m/r2/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/r3/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/r4/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/vHEAD.gemfile.example: '08018641c97f894788fa91b462da504ab2237213d18d95404136c393274ae3cb' + gemfiles/modular/optional.gemfile.example: b45eb8ecde2902441c02b2f01d4aa8f79bff75c853ef92555c3201ee798d9e87 + gemfiles/modular/recording/r2.3/recording.gemfile.example: 154da539583c51ca78ff8affa7a7caaf7f354d321b5e748beb64de61ff72f80a + gemfiles/modular/recording/r2.4/recording.gemfile.example: 6d69381eb2f8be681c72e7a5a8b5d6ec6ee586da8ce51b9b39d845d2a87e4ecf + gemfiles/modular/recording/r2.5/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/r3/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/r4/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/vHEAD.gemfile.example: 7480fd116e9671972a2735d1d97050a4fd5754aa7abfab3d115bf9bebbca038c + gemfiles/modular/rspec.gemfile.example: d043f5c9344f6435edb4607c5adaf42c78e7fb6b8b6726007de2bbedefb376c3 + gemfiles/modular/runtime_heads.gemfile.example: f163201999bf68a942b1e5bcea506bfc4b9c59711ff502091eb215d5d5f8f658 + gemfiles/modular/shunted.gemfile.example: a54a86124eff06163497462012704f62a691daa224cebeac605cdd14cffacfbe + gemfiles/modular/stringio/r2.4/v0.0.2.gemfile.example: 6425ebcd70b2e782f4c1d9074f8685c1e93ca7bf371728ef7ebbc8b5ebdf491a + gemfiles/modular/stringio/r2/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/r3/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/r4/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/vHEAD.gemfile.example: e0497ab6dad9667b22725485b781e9d99349a079250eb29cb125d58f01f4a5be + gemfiles/modular/style.gemfile.example: a15db732f566d958c2459ef549ae3877d984df3d205116e714284d1fe4f9b068 + gemfiles/modular/style_local.gemfile.example: '0083605323d23879dc7223f0198e9f1db24a25fa38730c4dbcc71c7a8a4c307f' + gemfiles/modular/templating.gemfile.example: 6cedc39529daa9aac3a4cf13fe31a628b62a4a2428f5c4f8657c5a2fa027bb35 + gemfiles/modular/templating_local.gemfile.example: 16c0b51fd46b86db09268c8485b1d5a528e5f962b593f8ae7521b15209f7d1a5 + gemfiles/modular/webrick/r4/v1.9.gemfile.example: 1ee940ff54d5ca3ce7fcff0d82ee9553386979656b9e220d5be5404d0991d5ea + gemfiles/modular/webrick/vHEAD.gemfile.example: da545f591af987648ffbaba181707480a38dfb375db7d289617986ec2c2ca23b + gemfiles/modular/x_std_libs.gemfile.example: e3917e90717d7f9f4393d847549a78c53de7f6c8de52a7f590b34b515fd6111a + gemfiles/modular/x_std_libs/r2.3/libs.gemfile.example: 379ac2a3698615789e39dc18a961b9c793b2cc594856bb3163524a99fd4ac86f + gemfiles/modular/x_std_libs/r2.4/libs.gemfile.example: ccad8f592943481317c082ce8d340316b9e90a52463c8c1eea5c5109b23e8c3d + gemfiles/modular/x_std_libs/r2.6/libs.gemfile.example: 9af20396f404a32bf76d8999c7fdd112f0282ba331f71100ab093663b2ab5670 + gemfiles/modular/x_std_libs/r2/libs.gemfile.example: e80ec8ad06cb1b31ac982bc25cf7696987fca131aa1001eaefd0bf5cd379c273 + gemfiles/modular/x_std_libs/r3.1/libs.gemfile.example: 38068bd6a0f5d02918eb286af9bdbdf0c7cf7cf026486b9fd157b541b6153d58 + gemfiles/modular/x_std_libs/r3/libs.gemfile.example: 546f8849f4267bb19aa10ff0de40be30957197f229e6887847181ea9127b2650 + gemfiles/modular/x_std_libs/r4/libs.gemfile.example: 8c2582eaa218d216b98c86c933465295c8b4e43f3251ea388b9eaf6e471f8da6 + gemfiles/modular/x_std_libs/vHEAD.gemfile.example: d3133ec4c0638363a7fb025d19be7e95a615fd61c35ddb8d17f2280ee74a7486 + lib/gem/version.rb.example: 15e219ac3a928b5580035f891e415551213175020f1131f6e7ca0ccd55a1b2d6 + mise.toml.example: b2eb06f7daaf0c3916bba155f463e166bd1de218637ba82e636c528c077c8d6d + mise.toml.no-osc.example: 35ec90d3c67b74e0014876dccad14f5883fdad88036f6b0cf5d29ea181e132ac + parsers.toml.example: f0538ae7ad8596be2dc39b3ea663f1164dec21fb0457233c1885097e774aff6f + readme/partials/basic_usage.md.example: adaa8f9de9768d1f29cb15d957404004715e7687db68c29b121d6467db13158a + readme/partials/configuration.md.example: 5ad82bc7eaf05015d31cea9265173718abc1d92729b52e3856c8366aa54184e8 + readme/partials/synopsis.md.example: 2b7383f8261086da0995fbf2c10017b3f162723b32c324ae8c0e1c1a8d1c79ef + shim/.github/workflows/current.yml.example: c2a2a2053f2726276bb8571c8a76a4b97bcce6cd54bdca01cba63d713c3a0e2f + shim/.rspec.example: 0e3a2a1587779efc3eae8fe718a3480272fbdfb3f1f6c2f9c3901f6fd81b2cce + shim/.structuredmerge/kettle-jem.yml.example: 03faae6cfda3947ef8489008b4836aad3ca280e94ddf9d08ef733071d7daa167 + shim/CHANGELOG.md.example: 2c098802b9971c51796e34067d061adbc31fa443df96be8a1fc71fc84c262d0e + shim/Gemfile.example: 9583b19e04d7ab6f5b3ea7ebb0c5d24e6a71ae5d74404a510aa979642248ba34 + shim/README.md.example: 3a2f7211b7f92a1dfae5e523b8e34b051a3d8af942144b05286eca0b3c8f6fbe + shim/Rakefile.example: 572c94da7052083b39b62a6600785419e314a109efd7a3d8c3a96eb77ad34fd1 + shim/gem.gemspec.example: cabca9717af1a18991db1de856900494e2771b044f1d5bfd2ad71b2ed4a1367d + shim/lib/compat_require.rb.example: 94ee85e353a3ca08c8a35c9063d4ff789214ea594c7f803f6cf09d7142f48379 + shim/lib/entrypoint.rb.example: dd57613520daca01d6f6bcaa9b83b00ff74505240dc04b84ceb686df3c0539d7 + shim/lib/version.rb.example: 15e219ac3a928b5580035f891e415551213175020f1131f6e7ca0ccd55a1b2d6 + shim/spec/shim_spec.rb.example: '060013019bf39b8dc267169df83752661d02c7ad890b65a99a1d97137938edfd' + shim/spec/spec_helper.rb.example: 88e2ab0bd8888022a68e856e04f61053e238e54f51b428b386aaebf93ae8ad83 + sig/gem.rbs.example: 47a4f7e524cc6f773875b6c08691ca4d65c2b14618abd5b9b91055ae5b248cec + spec/spec_helper.rb.example: 0c8119bd75b90f3a2403789b68b539fd19952370051297b1807596e201ef4813 +files: + ".simplecov": + recipe: template_source_application_simplecov + action: write + dest_sha256: 700d21748d6c44033c53865a514fe1524014b0f2f5ff3ccb6141e62739db1fd3 + input_fingerprint: f79c2d76e2838d630ec27f1aa72c4a34f9f65e8089ff44890dc11bd9cfba53ed + template_sources: + - ".simplecov.example" + AGPL-3.0-only.md: + recipe: template_source_application_AGPL_3_0_only_md + action: write + dest_sha256: d8a6cc31abc16b6748c7a21f21611f5a1ec33f67d22ca23d7da1c19b95496bee + input_fingerprint: 7af1ca878637c40a8f5525a4dee5814195f7b75702699ecb0cb2a7b92898ce02 + template_sources: + - AGPL-3.0-only.md.example + Gemfile: + recipe: template_source_application_Gemfile + action: write + dest_sha256: '054519e790f396d5e7153e2c7ce5908df5ef560104eaf8750f151de77bbd80dc' + input_fingerprint: 5210bf897381264e2ec436d63b68db29f42889364f918f01fe963bc765dcbbab + template_sources: + - Gemfile.example + LICENSE.md: + recipe: template_source_application_LICENSE_md + action: write + dest_sha256: f6188bfd474a636d2a526420ebb411250faa447d94c9b9ccee097128ce4101b5 + input_fingerprint: f6a8952fc088bd596a76106a9cf1a1d48d12990e6e72b32761f520a32ad4f7cc + template_sources: + - LICENSE.md.example + PolyForm-Small-Business-1.0.0.md: + recipe: template_source_application_PolyForm_Small_Business_1_0_0_md + action: write + dest_sha256: 2f81e317d36f83a199c9fa10bcb250775fd90510303eaeb15aac2d8f0c1fc2d6 + input_fingerprint: 3a3ec263bed149315b8c57768e963b77f0a7d16b2c273e3423d17a301de94c00 + template_sources: + - PolyForm-Small-Business-1.0.0.md.example + README.md: + recipe: template_source_application_README_md + action: write + dest_sha256: bab4fa6af316cc4b5d6444b1b72fbc44bc12621daf512484a0c82bcadd603d3d + input_fingerprint: 6a7cb661d85e4b67c16b416e9ff3871d7ad0f960704471132f0fdccca652398a + template_sources: + - README.md.example + certs/pboling.pem: + recipe: template_source_application_certs_pboling_pem + action: write + dest_sha256: 18956f60643666cc181e2743b3b3691bec08c5326f514f60af54d0cdb9ebc554 + input_fingerprint: d2e8576eb1040b75af6b7a2461bf684156ac6b75e429cdcfcb20dfd86220f355 + template_sources: + - certs/pboling.pem.example + gemfiles/modular/benchmark/r4/v0.5.gemfile: + recipe: template_source_application_gemfiles_modular_benchmark_r4_v0_5_gemfile + action: write + dest_sha256: 5bc3190090ae456df1a8cce28dd47a7fb293495f6d845ec7e53a7a8b50f14ae1 + input_fingerprint: b018cb89208e771c92004ec0775997c5b519956a82592b843e97e112c4eefca9 + template_sources: + - gemfiles/modular/benchmark/r4/v0.5.gemfile.example + gemfiles/modular/benchmark/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_benchmark_vHEAD_gemfile + action: write + dest_sha256: ca6cd52c55c3082759c6ddc97638970f12d953aec1822470823d316086aa6e25 + input_fingerprint: c2cb43f13f81b156f72de0406c414b0821c27c54cf70ea40e75b8d21182548d6 + template_sources: + - gemfiles/modular/benchmark/vHEAD.gemfile.example + gemfiles/modular/cgi/r4/v0.5.gemfile: + recipe: template_source_application_gemfiles_modular_cgi_r4_v0_5_gemfile + action: write + dest_sha256: c2d14a39377a2435419ceaca22a3421ebd899e9cba943df8a90b576a33624870 + input_fingerprint: 32be96309ea87d194bc33b0f4e9c879377680ad08da48469e16e770ddc697c7d + template_sources: + - gemfiles/modular/cgi/r4/v0.5.gemfile.example + gemfiles/modular/cgi/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_cgi_vHEAD_gemfile + action: write + dest_sha256: 9ff3dc789b3279642876c0aad4b0094c1139bb8fbbf36daab804d3b2b3a60b43 + input_fingerprint: b2639dbf65ae62336a8aee27692b9fef9e1c97530d1c94e3481e414a9c0de4af + template_sources: + - gemfiles/modular/cgi/vHEAD.gemfile.example + gemfiles/modular/coverage.gemfile: + recipe: template_source_application_gemfiles_modular_coverage_gemfile + action: write + dest_sha256: 915fc161ad574fdbc071bc733b69b27e94bd7a4c68cc4f58da267c9a0987f3e8 + input_fingerprint: bd3060680d6be4d2006828a6f118c1cfabfb6d86d521b9d6fe9ebbd823314a5a + template_sources: + - gemfiles/modular/coverage.gemfile.example + gemfiles/modular/coverage_local.gemfile: + recipe: template_source_application_gemfiles_modular_coverage_local_gemfile + action: write + dest_sha256: 85421eb7cc03ed8a71f8925ce3eace05f4f7ce18149a1143067e332b2baf3c2a + input_fingerprint: 7539c272e8d50a202e0a9e5cd40fa38dc441a92a1359adf56a5fbe3620e802cf + template_sources: + - gemfiles/modular/coverage_local.gemfile.example + gemfiles/modular/debug.gemfile: + recipe: template_source_application_gemfiles_modular_debug_gemfile + action: write + dest_sha256: 0a508bfb02e51b75394b43f4f09d98174dac36ead41cba09c1f730671a1f5905 + input_fingerprint: 529d71f70628de35f1ca42934334a70913589a3b94fa9b2ef8ca2b3195966d7f + template_sources: + - gemfiles/modular/debug.gemfile.example + gemfiles/modular/documentation.gemfile: + recipe: template_source_application_gemfiles_modular_documentation_gemfile + action: write + dest_sha256: e15f51e4d14ad2216b6de16c323787945bd225073d70a78420f4c99c98c1ecd1 + input_fingerprint: 2f9a6d47c186cb71d874c18af2a43ec8989a62ebdf7c81599d5960db37abbefa + template_sources: + - gemfiles/modular/documentation.gemfile.example + gemfiles/modular/documentation_local.gemfile: + recipe: template_source_application_gemfiles_modular_documentation_local_gemfile + action: write + dest_sha256: 92cf6450bdd03563a7b9e1315186d8a1bc836b27bdc1b68292fc928dc6377384 + input_fingerprint: d5075ed8de8eae63cabaaad8245de2a8deb874d909e02ba5b3a23dc8aa77c4eb + template_sources: + - gemfiles/modular/documentation_local.gemfile.example + gemfiles/modular/erb/r2/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r2_v3_0_gemfile + action: write + dest_sha256: 3793e7dc9ef23a7ccd893d48cbba092fd27594c63e65cca011cc658218425670 + input_fingerprint: 195a5a3ea4cc212689076fda916d5b0497fdb3254db070e72f6ea7c7a629db1c + template_sources: + - gemfiles/modular/erb/r2/v3.0.gemfile.example + gemfiles/modular/erb/r3/v5.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r3_v5_0_gemfile + action: write + dest_sha256: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + input_fingerprint: 9b7deacef7336dd9eb3619b0c2d5a4dde0e6a07b7adc9487162d6f31e27afd21 + template_sources: + - gemfiles/modular/erb/r3/v5.0.gemfile.example + gemfiles/modular/erb/r4/v5.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r4_v5_0_gemfile + action: write + dest_sha256: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + input_fingerprint: b6808ed2032429ad6d77cc6d5992c95bab98fab1b0349736dac05415b090dc7b + template_sources: + - gemfiles/modular/erb/r4/v5.0.gemfile.example + gemfiles/modular/erb/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_erb_vHEAD_gemfile + action: write + dest_sha256: ad6f104a49e80e0cf625440e3dc816343fe7e2f037fc4971df75e7bb4305c683 + input_fingerprint: 73fb833be0fa1f717c5064b52b59013ee0691fe92640a5fd2a8a9a836299d2d1 + template_sources: + - gemfiles/modular/erb/vHEAD.gemfile.example + gemfiles/modular/json/truffleruby_22_3.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_22_3_gemfile + action: write + dest_sha256: 249c12eacbe90f9d0d2e81e7a62c4c7e9102e504ededcda4ecf660cb3bb68be4 + input_fingerprint: 5365edaccb7fa9292eeb12ff81cee1e2b4322b30fff10b01c5dbb9cb49106ade + template_sources: + - gemfiles/modular/json/truffleruby_22_3.gemfile.example + gemfiles/modular/json/truffleruby_23_0.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_23_0_gemfile + action: write + dest_sha256: 66aa010567f7afa1af8244a74c3c88ecaaf84dc87b6a25180691bb480d02ed28 + input_fingerprint: b3119b7cb4dc9c0a34634edcf3239f4737c11d4938342bf22a952e461c22622a + template_sources: + - gemfiles/modular/json/truffleruby_23_0.gemfile.example + gemfiles/modular/json/truffleruby_23_1.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_23_1_gemfile + action: write + dest_sha256: '080fcbdaf2bec73cad40832a3d51eebb380af789917b96f493d1460b0dd6361d' + input_fingerprint: cd3377fc941688133ff92493e53391b7865052be08de50271f47e2cf8f657716 + template_sources: + - gemfiles/modular/json/truffleruby_23_1.gemfile.example + gemfiles/modular/mutex_m/r2/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r2_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: bb2c7eef30fc519c7637181917dbdcb6317fc308603f516454291b91026e2325 + template_sources: + - gemfiles/modular/mutex_m/r2/v0.3.gemfile.example + gemfiles/modular/mutex_m/r3/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r3_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: 92b06ac40701a7e2b3a19df032d00df0dd35abc0a4de6194eb7ec92e3951ead8 + template_sources: + - gemfiles/modular/mutex_m/r3/v0.3.gemfile.example + gemfiles/modular/mutex_m/r4/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r4_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: f588f42a255debafa7548170e122a94276ea53063f7027c8cd186c6ec450fc88 + template_sources: + - gemfiles/modular/mutex_m/r4/v0.3.gemfile.example + gemfiles/modular/mutex_m/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_vHEAD_gemfile + action: write + dest_sha256: '08018641c97f894788fa91b462da504ab2237213d18d95404136c393274ae3cb' + input_fingerprint: 6374f0e76afd7c2146054afabda1e5c8bc28c699fd16a664fec6c4e6903f4ef3 + template_sources: + - gemfiles/modular/mutex_m/vHEAD.gemfile.example + gemfiles/modular/optional.gemfile: + recipe: template_source_application_gemfiles_modular_optional_gemfile + action: write + dest_sha256: f770e6e9a9dd2bd0f1f132e882d88038b2e21127dce3afe270908c7338c28bfd + input_fingerprint: 7c7d7b3548e20274daaea879f17912f3304b3f67545e58ec008396a7e27c2035 + template_sources: + - gemfiles/modular/optional.gemfile.example + gemfiles/modular/rspec.gemfile: + recipe: template_source_application_gemfiles_modular_rspec_gemfile + action: write + dest_sha256: d043f5c9344f6435edb4607c5adaf42c78e7fb6b8b6726007de2bbedefb376c3 + input_fingerprint: e3f9beae609610f2f5338fa186da83f245eaec879fa0bee14dc50c97fe97a579 + template_sources: + - gemfiles/modular/rspec.gemfile.example + gemfiles/modular/runtime_heads.gemfile: + recipe: template_source_application_gemfiles_modular_runtime_heads_gemfile + action: write + dest_sha256: 6ac7158c4a3088190f2a9082f01439eb27eca2172ab3464b15c9cb045aa885e1 + input_fingerprint: c97461d519986a0707a167e5535347b3be6b3b45a07f489f6850e53c75e2fc1d + template_sources: + - gemfiles/modular/runtime_heads.gemfile.example + gemfiles/modular/stringio/r2/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r2_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: 714b7bfb7c95ef8529411fffa477554c0faf86b09ebbd02640b6c614a8bd83ae + template_sources: + - gemfiles/modular/stringio/r2/v3.0.gemfile.example + gemfiles/modular/stringio/r3/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r3_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: b8edce0b484d2a8c1307fb52622323ef3bdebd934f426a0d1aeea12b26af23a1 + template_sources: + - gemfiles/modular/stringio/r3/v3.0.gemfile.example + gemfiles/modular/stringio/r4/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r4_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: 11a90950a77bad91fe2624e9c28a3bacce38c1333c6656163a58805f4aac0c83 + template_sources: + - gemfiles/modular/stringio/r4/v3.0.gemfile.example + gemfiles/modular/stringio/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_vHEAD_gemfile + action: write + dest_sha256: e0497ab6dad9667b22725485b781e9d99349a079250eb29cb125d58f01f4a5be + input_fingerprint: f491e89af240e82c7bdc6f9a561c32c69722bb30a54cb4cf3816387e6456ea61 + template_sources: + - gemfiles/modular/stringio/vHEAD.gemfile.example + gemfiles/modular/style.gemfile: + recipe: template_source_application_gemfiles_modular_style_gemfile + action: write + dest_sha256: 071066457ce6081cbc03d10d777f741b84019071c78e45c23889f13658a0a4a6 + input_fingerprint: 3f6c7acca4deb6e38aff6d1b508e0f89f75f390df5e3bb2aae3961641a49c51e + template_sources: + - gemfiles/modular/style.gemfile.example + gemfiles/modular/style_local.gemfile: + recipe: template_source_application_gemfiles_modular_style_local_gemfile + action: write + dest_sha256: 4c441fc0fc7adeb65c604d693bf685944f14efa2a57b97a443950ce4c42288e0 + input_fingerprint: 645a2b8b69e209a955f80440e094ba3c0565d9f14a5af56f8c8512ec4ba70e36 + template_sources: + - gemfiles/modular/style_local.gemfile.example + gemfiles/modular/templating.gemfile: + recipe: template_source_application_gemfiles_modular_templating_gemfile + action: write + dest_sha256: 6cedc39529daa9aac3a4cf13fe31a628b62a4a2428f5c4f8657c5a2fa027bb35 + input_fingerprint: fe223f26a63b1bf7e33d229bb98f10613b96329d0560d47ae80fe97e612e1482 + template_sources: + - gemfiles/modular/templating.gemfile.example + gemfiles/modular/templating_local.gemfile: + recipe: template_source_application_gemfiles_modular_templating_local_gemfile + action: write + dest_sha256: 308a7b3e03f21b94dabf7f63cfb0af2bccbf39b70c78e4771ff770e671213667 + input_fingerprint: ef0f333edbe9a37d6daf1fb784eccbadb7f83b2576f85d825f0c44153842bd03 + template_sources: + - gemfiles/modular/templating_local.gemfile.example + gemfiles/modular/webrick/r4/v1.9.gemfile: + recipe: template_source_application_gemfiles_modular_webrick_r4_v1_9_gemfile + action: write + dest_sha256: 1ee940ff54d5ca3ce7fcff0d82ee9553386979656b9e220d5be5404d0991d5ea + input_fingerprint: eaa70b7ce84731e5dfc930d56e7d6db2f1bbfb505c47f87c3ffcd059c13ee9b3 + template_sources: + - gemfiles/modular/webrick/r4/v1.9.gemfile.example + gemfiles/modular/webrick/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_webrick_vHEAD_gemfile + action: write + dest_sha256: da545f591af987648ffbaba181707480a38dfb375db7d289617986ec2c2ca23b + input_fingerprint: 04551f60301ba0d478bb5b6c1b3ce5c93d372ff7e820a3c6a367009e38e33d6d + template_sources: + - gemfiles/modular/webrick/vHEAD.gemfile.example + gemfiles/modular/x_std_libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_gemfile + action: write + dest_sha256: e3917e90717d7f9f4393d847549a78c53de7f6c8de52a7f590b34b515fd6111a + input_fingerprint: 7a99ac3def81834aa596822f7ad26993499cc3b6cac14e3fe9402dada99ad14e + template_sources: + - gemfiles/modular/x_std_libs.gemfile.example + gemfiles/modular/x_std_libs/r2/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r2_libs_gemfile + action: write + dest_sha256: e80ec8ad06cb1b31ac982bc25cf7696987fca131aa1001eaefd0bf5cd379c273 + input_fingerprint: a6d616f5638815ad89d2525c941f881df12bc3a680ff0562cb7cbde90a6abb0c + template_sources: + - gemfiles/modular/x_std_libs/r2/libs.gemfile.example + gemfiles/modular/x_std_libs/r3/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r3_libs_gemfile + action: write + dest_sha256: 546f8849f4267bb19aa10ff0de40be30957197f229e6887847181ea9127b2650 + input_fingerprint: 6ed7e415c675fb43dd0b9ac91253750afbba1d6f2ebec17fbf4e52ac22f391c5 + template_sources: + - gemfiles/modular/x_std_libs/r3/libs.gemfile.example + gemfiles/modular/x_std_libs/r4/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r4_libs_gemfile + action: write + dest_sha256: 8c2582eaa218d216b98c86c933465295c8b4e43f3251ea388b9eaf6e471f8da6 + input_fingerprint: e43052bf8403955c7f3f9573b020196e2d9ec17a35c1613c6822bf184f93aacb + template_sources: + - gemfiles/modular/x_std_libs/r4/libs.gemfile.example + gemfiles/modular/x_std_libs/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_vHEAD_gemfile + action: write + dest_sha256: d3133ec4c0638363a7fb025d19be7e95a615fd61c35ddb8d17f2280ee74a7486 + input_fingerprint: 594e2588b9456f3caf0e4cbf82bc8f986e7747c7a14b192a6f9137b9a7a4c8bf + template_sources: + - gemfiles/modular/x_std_libs/vHEAD.gemfile.example + lib/markdown/merge/version.rb: + recipe: template_source_application_lib_markdown_merge_version_rb + action: write + dest_sha256: 7bba553f1954c57c0228db7a0e9e831d0b68f926bb057d7c46ecbb17daf9f43a + input_fingerprint: e4386c9a1e075b1860e20e251490416d3246e52990f5352ac052638ab4fa790c + template_sources: + - lib/gem/version.rb.example + markdown-merge.gemspec: + recipe: template_source_application_markdown_merge_gemspec + action: write + dest_sha256: d1b9a76a43106cdec5fdff775307928ed679cb16527e965c34e2d3cb00193ab1 + input_fingerprint: 74480cf0e6ed070ec8dc63f12310c07fdab2915d0d8c07d105250b86a4928c6d + template_sources: + - gem.gemspec.example + sig/markdown/merge.rbs: + recipe: template_source_application_sig_markdown_merge_rbs + action: write + dest_sha256: 3b21d79ffc05ef7dab6814bcb013485d73f86d6a7289fcd0bb7a8bc7d207b3d9 + input_fingerprint: a657917fe35a7e7a511cbb6787966c1172c30a5a4961adcdc062b8b3b28ecc07 + template_sources: + - sig/gem.rbs.example + spec/spec_helper.rb: + recipe: template_source_application_spec_spec_helper_rb + action: write + dest_sha256: 1775cece818c7a9aeeb9694353c3d6d1b5f4314900dedec21863696b5e141f61 + input_fingerprint: 6758f0aef034a009298aaac59cde325caa67fa831924dc7702e0a4bb05e41f41 + template_sources: + - spec/spec_helper.rb.example diff --git a/gems/markdown-merge/Gemfile b/gems/markdown-merge/Gemfile index c6607b593..06faad3ae 100644 --- a/gems/markdown-merge/Gemfile +++ b/gems/markdown-merge/Gemfile @@ -19,8 +19,7 @@ git_source(:gitlab) { |repo_name| "https://gitlab.com/#{repo_name}" } gemspec # Local workspace dependency wiring for *_local.gemfile overrides -nomono_requirements = ['~> 1.0', '>= 1.0.8'] -gem 'nomono', *nomono_requirements, require: false # ruby >= 2.2 +gem 'nomono', '~> 1.1', '>= 1.1.0', require: false # ruby >= 3.2.0 # Direct sibling dependencies (env-switched via STRUCTUREDMERGE_DEV) direct_sibling_gems = %w[ diff --git a/gems/markdown-merge/Gemfile.lock b/gems/markdown-merge/Gemfile.lock index be5288d90..04c0d43de 100644 --- a/gems/markdown-merge/Gemfile.lock +++ b/gems/markdown-merge/Gemfile.lock @@ -78,8 +78,8 @@ GEM bundler (>= 1.14) version_gem (~> 1.1, >= 1.1.4) geom2d (0.4.1) - gitmoji-regex (2.0.4) - version_gem (~> 1.1, >= 1.1.13) + gitmoji-regex (2.0.6) + version_gem (~> 1.1, >= 1.1.14) hexapdf (1.9.1) cmdparse (~> 3.0, >= 3.0.3) geom2d (~> 0.4, >= 0.4.1) @@ -92,20 +92,29 @@ GEM rdoc (>= 4.0.0) reline (>= 0.4.2) json (2.21.1) - kettle-dev (2.3.9) + kettle-dev (2.4.5) emoji_regex (>= 15.0) + kettle-gha-pins (~> 0.3, >= 0.3.1) + kettle-ndjson (~> 0.1, >= 0.1.1) kettle-rb (~> 0.1, >= 0.1.2) - kettle-test (~> 2.0, >= 2.0.4) + kettle-test (~> 2.0, >= 2.0.12) + ruby-progressbar (~> 1.13) + tty-progressbar (~> 0.18) + kettle-gha-pins (0.3.1) ruby-progressbar (~> 1.13) + tty-progressbar (~> 0.18) + version_gem (~> 1.1, >= 1.1.14) + kettle-ndjson (0.1.1) + version_gem (~> 1.1, >= 1.1.14) kettle-rb (0.1.5) - kettle-soup-cover (3.0.4) + kettle-soup-cover (3.0.5) kettle-wash (~> 0.1, >= 0.1.0) simplecov (>= 1.0) simplecov-cobertura (>= 4.0) simplecov-console (~> 0.9, >= 0.9.5) simplecov-rcov (~> 0.3, >= 0.3.7) simplecov_lcov_formatter (~> 0.9, >= 0.9.0) - kettle-test (2.0.12) + kettle-test (2.0.15) appraisal2 (~> 3.0, >= 3.0.6) backports (~> 3.0) rspec (~> 3.0) @@ -132,6 +141,8 @@ GEM racc (~> 1.4) nokogiri (1.19.4-arm64-darwin) racc (~> 1.4) + nokogiri (1.19.4-x86_64-darwin) + racc (~> 1.4) nokogiri (1.19.4-x86_64-linux-gnu) racc (~> 1.4) nokogiri (1.19.4-x86_64-linux-musl) @@ -190,11 +201,11 @@ GEM rspec-mocks (3.13.8) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) - rspec-pending_for (0.1.21) + rspec-pending_for (0.1.22) rspec-core (~> 3.0) ruby_engine (~> 2.0) ruby_version (~> 1.0) - rspec-stubbed_env (1.0.6) + rspec-stubbed_env (1.0.8) rspec-support (3.13.7) rspec_junit_formatter (0.6.0) rspec-core (>= 2, < 4, != 2.12.0) @@ -290,7 +301,7 @@ GEM silent_stream (1.0.12) logger (~> 1.2) version_gem (>= 1.1.8, < 3) - simplecov (1.0.2) + simplecov (1.0.3) simplecov-cobertura (4.0.0) rexml simplecov (~> 1.0) @@ -302,7 +313,7 @@ GEM simplecov (>= 0.4.1) simplecov_lcov_formatter (0.9.0) simplecov (>= 0.18) - sorbet-runtime (0.6.13351) + sorbet-runtime (0.6.13363) standard (1.56.0) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.0) @@ -326,9 +337,9 @@ GEM standard-custom (~> 1.0, >= 1.0.2) standard-performance (~> 1.9, >= 1.9.0) version_gem (~> 1.1, >= 1.1.13) - stone_checksums (1.0.6) - version_gem (~> 1.1, >= 1.1.13) + stone_checksums (1.0.7) stringio (3.2.0) + strings-ansi (0.2.0) strscan (3.1.8) terminal-table (4.0.0) unicode-display_width (>= 1.1.1, < 4) @@ -346,20 +357,27 @@ GEM parslet (~> 2.0) tree_sitter_language_pack (>= 1.13.2, < 2.0) version_gem (~> 1.1, >= 1.1.9) - tree_sitter_language_pack (1.13.3-aarch64-linux) + tree_sitter_language_pack (1.13.4-aarch64-linux) sorbet-runtime (~> 0.5) - tree_sitter_language_pack (1.13.3-arm64-darwin) + tree_sitter_language_pack (1.13.4-arm64-darwin) sorbet-runtime (~> 0.5) - tree_sitter_language_pack (1.13.3-x86_64-linux) + tree_sitter_language_pack (1.13.4-x86_64-darwin) + sorbet-runtime (~> 0.5) + tree_sitter_language_pack (1.13.4-x86_64-linux) sorbet-runtime (~> 0.5) tsort (0.2.0) - turbo_tests2 (3.2.0) + tty-cursor (0.7.1) + tty-progressbar (0.18.3) + strings-ansi (~> 0.2) + tty-cursor (~> 0.7) + tty-screen (~> 0.8) + unicode-display_width (>= 1.6, < 3.0) + tty-screen (0.8.2) + turbo_tests2 (3.2.3) parallel_tests (>= 3.3.0, < 6) rspec (>= 3.10) version_gem (~> 1.1, >= 1.1.14) - unicode-display_width (3.2.0) - unicode-emoji (~> 4.1) - unicode-emoji (4.2.0) + unicode-display_width (2.6.0) version_gem (1.1.14) webrick (1.9.2) yaml-converter (0.2.3) @@ -377,6 +395,9 @@ GEM ostruct rainbow yard + yard-lint (1.10.2) + yard (~> 0.9) + zeitwerk (~> 2.6) yard-relative_markdown_links (0.6.0) nokogiri (>= 1.14.3, < 2) yard-timekeeper (0.2.4) @@ -392,7 +413,7 @@ PLATFORMS aarch64-linux-gnu aarch64-linux-musl arm64-darwin - x86_64-linux + x86_64-darwin x86_64-linux-gnu x86_64-linux-musl @@ -409,13 +430,13 @@ DEPENDENCIES gitmoji-regex (~> 2.0, >= 2.0.0) irb (~> 1.17) kettle-dev (~> 2.0, >= 2.2.25) - kettle-soup-cover (~> 3.0, >= 3.0.3) + kettle-soup-cover (~> 3.0, >= 3.0.5) kettle-test (~> 2.0, >= 2.0.9) kramdown (~> 2.5, >= 2.5.2) kramdown-parser-gfm (~> 1.1) markdown-merge! mutex_m (~> 0.2) - nomono (~> 1.0, >= 1.0.8) + nomono (~> 1.1, >= 1.1.0) rake (~> 13.0) rbs (>= 3.0) rdoc (~> 6.11) @@ -438,6 +459,7 @@ DEPENDENCIES yard (~> 0.9, >= 0.9.45) yard-fence (~> 0.9, >= 0.9.6) yard-junk (~> 0.1, >= 0.1.0) + yard-lint (~> 1.10, >= 1.10.2) yard-relative_markdown_links (~> 0.6) yard-timekeeper (~> 0.2, >= 0.2.4) yard-yaml (~> 0.2, >= 0.2.3) @@ -474,15 +496,17 @@ CHECKSUMS erb (6.0.6) sha256=a9b24986700f5bf127c4f297c5403c3ca41b83b0a316c0cd09a096b56e644ae5 gem_bench (2.0.5) sha256=0dc0fb44a5a5eb7b2f5c1c68a5b0164d72007132822c012bac3abe976b199ead geom2d (0.4.1) sha256=ea0998ea90c4f2752e24fe13d85a4f89bee689d151316140ebcc6369bf634ed9 - gitmoji-regex (2.0.4) sha256=01410d3217940bd0e7b2299ec805245afe8d0f06a5d6d38f623d63a63c0ac34f + gitmoji-regex (2.0.6) sha256=d50649caccc8ad1b080f01e869f0909b135206d8b3ece2313ca31a9b0e39f14b hexapdf (1.9.1) sha256=2d1f6a3622e6bc2a70a707d4c3f3fa44f5552ecd9d899f6283abb07398a84884 io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc irb (1.18.0) sha256=de9454a0703a54704b9811a5ef31a60c86949fbf4013fcf244fabc7c775248e3 json (2.21.1) sha256=13a43df75d95641443f5702dff350f237164a9d811ff0f2c2800d4d980220583 - kettle-dev (2.3.9) sha256=03b2f72c6dda4d2c4401ee3c0c96853116c922766e7b5b04224434a49b571bfc + kettle-dev (2.4.5) sha256=3a451940796a671b7adc910db7c3da87899ebec7c5274921ca598345549ae7eb + kettle-gha-pins (0.3.1) sha256=b13a82a403af31880288fe65f85f2a24a93ae4740c0c7cbc15a35044d27aaa51 + kettle-ndjson (0.1.1) sha256=2d84314e8c911d6f560f2736e8f72019df6d811829674788ff33b3bbf518ed66 kettle-rb (0.1.5) sha256=0322a569860c86e70f90d5ebe72353b8720b7054c7efa9f9044857f5c972d29f - kettle-soup-cover (3.0.4) sha256=36d4df472362d2020d16411d7ce26ba2fe2a41fb8be64577ff9b5280acf99d86 - kettle-test (2.0.12) sha256=3a8e5c5f38db03a6f0a8896da6f3576d24e36f53796578c19aafaa2ba5a8ea52 + kettle-soup-cover (3.0.5) sha256=80abb42eb294fa5d3c8632c259a297c554fbc01902714461f3bf99a65190f5d0 + kettle-test (2.0.15) sha256=993b132ffec17fe82cc81c69f876e15d6eb610a4831df08dc01c0cce5c070caa kettle-wash (0.1.1) sha256=ae2e08b64c72c46ceed5ffa197ed859e85352f38ed0412fca2e18ce29b2dc4f9 kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa kramdown-parser-gfm (1.1.0) sha256=fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729 @@ -494,6 +518,7 @@ CHECKSUMS nokogiri (1.19.4-aarch64-linux-gnu) sha256=1269fb644a6de405057a53dd5c762b1209b43ca7424f839454d3dbc677c31a8f nokogiri (1.19.4-aarch64-linux-musl) sha256=35c65b9ce72b3bb03207bdbe7067915019dc18c1b9b59139684bd6690fdd01af nokogiri (1.19.4-arm64-darwin) sha256=a46db9853286e6597b36ebc6953817d15acf3a299583eb3f89fdc6f91dd63527 + nokogiri (1.19.4-x86_64-darwin) sha256=7fd17057d3e1f00e9954a74b3cd76595d3d4a5ef233b7ed9599047c204f70551 nokogiri (1.19.4-x86_64-linux-gnu) sha256=379fae440b28915e3f19d752ce2dcf8465ed2b2fbefd2a7ca0dd497bc981a06a nokogiri (1.19.4-x86_64-linux-musl) sha256=17dfb7c1fa194ae02fbf7c51a7afc8d278045ab3fdacfd86f91d02d7b274470b nomono (1.1.0) sha256=463dd4c79da02a855739a1b5483190d527b7868688be905e84abdb3449b32c88 @@ -523,8 +548,8 @@ CHECKSUMS rspec-core (3.13.6) sha256=a8823c6411667b60a8bca135364351dda34cd55e44ff94c4be4633b37d828b2d rspec-expectations (3.13.5) sha256=33a4d3a1d95060aea4c94e9f237030a8f9eae5615e9bd85718fe3a09e4b58836 rspec-mocks (3.13.8) sha256=086ad3d3d17533f4237643de0b5c42f04b66348c28bf6b9c2d3f4a3b01af1d47 - rspec-pending_for (0.1.21) sha256=c87fda50c20f8faca72d9cfa6a936abffd37860343f14aced95bbb29b8ae96bf - rspec-stubbed_env (1.0.6) sha256=6467a6eb0f72146d443ffb0c5a2a549d8812e59c04fbc81e03cd914ebf1f28dc + rspec-pending_for (0.1.22) sha256=49dc647473f8c8ea4ccc1a33813537dd94b913ef7ec5a8689896101eaacb71cf + rspec-stubbed_env (1.0.8) sha256=b23c4dd5e5d6a0cf0c5b4f6ed3f3678d78e4be9ec247ea9abf0669d20b490535 rspec-support (3.13.7) sha256=0640e5570872aafefd79867901deeeeb40b0c9875a36b983d85f54fb7381c47c rspec_junit_formatter (0.6.0) sha256=40dde674e6ae4e6cc0ff560da25497677e34fefd2338cc467a8972f602b62b15 rubocop (1.88.2) sha256=8def251c90cd955feb4daa3edc0ab56893250c4ce90ef81e6c80c03f9a939bbf @@ -550,39 +575,44 @@ CHECKSUMS ruby_engine (2.0.3) sha256=ca2ae7def8cfcdc2bfb6a186d36d5d59c8b403245dc0256c3802b767fa278aaa ruby_version (1.0.3) sha256=5930f9950746b7e6c973184398ee364ee7440b170fef7922b9f5cdf317f1ccb5 silent_stream (1.0.12) sha256=377c43aa10033fe90c33b39ea8cd97d79f2d1c4856df598efc56f3091f3ae782 - simplecov (1.0.2) sha256=c6459434efe4b948b46477cc2df2faa73ab365f83a33c7c17f81262f4f7f1244 + simplecov (1.0.3) sha256=38ef0514f16ae7562f0d0f4df02610071115103d301b6de7dacbcc000082e39b simplecov-cobertura (4.0.0) sha256=e4fb3159b1ecea545b44f5452a8611305323e78ad23eae8aed35924d072e01ea simplecov-console (0.9.5) sha256=b1108bcfff5f210143e2b8301698c367b01586f20d25a73e95475a5df6fc6ff6 simplecov-rcov (0.3.7) sha256=372f50bf6df6b6350b7d0c840f2f8bdabe021861a43c26877b747c9ac96139fc simplecov_lcov_formatter (0.9.0) sha256=4c1839bb31dcf7a8f7a6474c94ed228aa03b994e9dd5e1965e58b4121b049bed - sorbet-runtime (0.6.13351) sha256=f8fee17c6e3edf835dc6823d26afb9a7c8969c6710d1fabe2fb43f4e0c15c64f + sorbet-runtime (0.6.13363) sha256=f1f0b2e946fb3cd76b9d8e3d85459cdaf7f5466331a400cafcf008e508b6d2c3 standard (1.56.0) sha256=ae2af4d9669589162ac69ed5ef59dcf9f346d4afc81f7e62b84339310dfcb787 standard-custom (1.0.2) sha256=424adc84179a074f1a2a309bb9cf7cd6bfdb2b6541f20c6bf9436c0ba22a652b standard-performance (1.9.0) sha256=49483d31be448292951d80e5e67cdcb576c2502103c7b40aec6f1b6e9c88e3f2 standard-rspec (0.5.0) sha256=64d396524a65af47f5331b423d8cdd313e0267401647bb7892489ca89dad2973 standard-rubocop-lts (2.0.10) sha256=89708a505b7d8b24d2ac399a7520fcb9e764abc2ecb4289b631b5fe0e3b76617 - stone_checksums (1.0.6) sha256=c775f830513d6c6ab26e31d1a5fbecd4c4e39002663d4d9f8fa96e97990b5298 + stone_checksums (1.0.7) sha256=faf7a175da7c4f32777c5292a0128b06eec183b3cc3a0b382529b21800300626 stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1 + strings-ansi (0.2.0) sha256=90262d760ea4a94cc2ae8d58205277a343409c288cbe7c29416b1826bd511c88 strscan (3.1.8) sha256=aae2db611a225559f21ffbb71765c9a4e60fd262534a9ea84f4f11c7f32f679e terminal-table (4.0.0) sha256=f504793203f8251b2ea7c7068333053f0beeea26093ec9962e62ea79f94301d2 thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73 timecop (0.9.11) sha256=41284dc6e5041f2184f781ace766f942108c842f8d8c1386a26e6343decc7542 timecop-rspec (1.0.3) sha256=005f14841bb606dcaefb060e321b5388e2e59537742bee8b3a9a9a40e598fab9 - token-resolver (2.0.5) sha256=b852f924287ffb58a440856e862b056c8ad97e74b4b2526cee43e0771f40c25c + token-resolver (2.0.5) tree_haver (7.1.0) - tree_sitter_language_pack (1.13.3-aarch64-linux) sha256=55ffc7c87868cb45658338363d9eba51b4a8b0259aa88e4de368d2bd1d52fea4 - tree_sitter_language_pack (1.13.3-arm64-darwin) sha256=bc2498db605f212a1dbd2465ed3f65190d7da786f6ed5d30fcf958121aeb4a5c - tree_sitter_language_pack (1.13.3-x86_64-linux) sha256=1ffd045bd236ea54f58c5872ee66121d01033359c1f28f375b7fd4a4b5620cf9 + tree_sitter_language_pack (1.13.4-aarch64-linux) sha256=f7bb95fd59afda1e1b91a7b6ad4df244c585a863e94e4a0f492ef2336a5358b8 + tree_sitter_language_pack (1.13.4-arm64-darwin) sha256=2b48ded1f5feae3de20be1471aaa7c211601ac1c71ca6d4789cf31560a854132 + tree_sitter_language_pack (1.13.4-x86_64-darwin) sha256=8a2460d9029e7610b863d2481e2da0078f87b18bf8668070ccb5ecce71e272d8 + tree_sitter_language_pack (1.13.4-x86_64-linux) sha256=ae3ae718534088b2dc76bd93e7d093f11e8d19188bf47edfcd962df906e1af97 tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f - turbo_tests2 (3.2.0) sha256=8b35421548399d1923567b177970f42671c65695b93cdd134d78fbcbab85dff0 - unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42 - unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f + tty-cursor (0.7.1) sha256=79534185e6a777888d88628b14b6a1fdf5154a603f285f80b1753e1908e0bf48 + tty-progressbar (0.18.3) sha256=6cbb4260e55e74a9180d502143eb6a467d2c8e51bf5f3c9509fb5cacc3d4a5f6 + tty-screen (0.8.2) sha256=c090652115beae764336c28802d633f204fb84da93c6a968aa5d8e319e819b50 + turbo_tests2 (3.2.3) sha256=f77fc0799014c1d7890977e117cf39317bc4544de2c88a55149ed920b4cff942 + unicode-display_width (2.6.0) sha256=12279874bba6d5e4d2728cef814b19197dbb10d7a7837a869bab65da943b7f5a version_gem (1.1.14) sha256=6b7306c7e9416d06067561981ab3444e2cecb844f26cc325ae3c27b44cf85613 webrick (1.9.2) sha256=beb4a15fc474defed24a3bda4ffd88a490d517c9e4e6118c3edce59e45864131 yaml-converter (0.2.3) sha256=d35e69e547610d9e347672cc277fcb7d71dff3c53a942e66f82b1c64022ada72 yard (0.9.45) sha256=52e211493f7cb8a3ebf7e104a25a1e73937a3103092545d34cb88fafebb3dc51 yard-fence (0.9.6) sha256=3d1dbf4e3df462ac78b8bd2e01cf740a2de20168387c929aca31a0bcee490659 yard-junk (0.1.0) sha256=e85fe2ec1afa47313decd333447b53458cb1ed49b510b70015fdc3041a94bcdd + yard-lint (1.10.2) sha256=3e595709d088a8cc827e706a4146b447eb6a907ee375d06c11077369d00717f6 yard-relative_markdown_links (0.6.0) sha256=3e5ffa85cbad9bac70bee5421774b190fb25d3bdf489323a5b3534f647d1a70e yard-timekeeper (0.2.4) sha256=62f8d001d737c6e2ac688e7b37386f958dceb0f6aff9c909575e1bec8d20775a yard-yaml (0.2.3) sha256=fe5fef18819e1cbd05bb8f1b9e1baad6bf70c28125eb75b57bbf6397b0831812 diff --git a/gems/markdown-merge/bin/kettle-gha-pins b/gems/markdown-merge/bin/kettle-gha-pins new file mode 100755 index 000000000..c743cecac --- /dev/null +++ b/gems/markdown-merge/bin/kettle-gha-pins @@ -0,0 +1,16 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# +# This file was generated by Bundler. +# +# The application 'kettle-gha-pins' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) + +require 'rubygems' +require 'bundler/setup' + +load Gem.bin_path('kettle-gha-pins', 'kettle-gha-pins') diff --git a/gems/markdown-merge/gemfiles/modular/coverage.gemfile b/gems/markdown-merge/gemfiles/modular/coverage.gemfile index b93014b6b..b4c26a504 100644 --- a/gems/markdown-merge/gemfiles/modular/coverage.gemfile +++ b/gems/markdown-merge/gemfiles/modular/coverage.gemfile @@ -7,7 +7,7 @@ if ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false').zero? # Coverage (remote/released) platform :mri do - gem 'kettle-soup-cover', '~> 3.0', '>= 3.0.3', require: false + gem 'kettle-soup-cover', '~> 3.0', '>= 3.0.5', require: false end else eval_gemfile 'coverage_local.gemfile' diff --git a/gems/markdown-merge/gemfiles/modular/coverage_local.gemfile b/gems/markdown-merge/gemfiles/modular/coverage_local.gemfile index b467b75c0..24c04f65c 100644 --- a/gems/markdown-merge/gemfiles/modular/coverage_local.gemfile +++ b/gems/markdown-merge/gemfiles/modular/coverage_local.gemfile @@ -17,7 +17,8 @@ platform :mri do path_env: 'KETTLE_DEV_DEV', vendored_gems_env: 'VENDORED_GEMS', vendor_gem_dir_env: 'VENDOR_GEM_DIR', - debug_env: 'KETTLE_DEV_DEBUG' + debug_env: 'KETTLE_DEV_DEBUG', + root: %w[src my kettle-dev] ) if ENV.fetch('GALTZO_FLOSS_DEV', 'false').casecmp('false') != 0 diff --git a/gems/markdown-merge/gemfiles/modular/documentation.gemfile b/gems/markdown-merge/gemfiles/modular/documentation.gemfile index 9d4535f12..d0f4d4a76 100644 --- a/gems/markdown-merge/gemfiles/modular/documentation.gemfile +++ b/gems/markdown-merge/gemfiles/modular/documentation.gemfile @@ -12,6 +12,7 @@ gem 'kramdown-parser-gfm', '~> 1.1', require: false # Ruby >= 2.3 gem 'yaml-converter', '~> 0.2', '>= 0.2.3', require: false # Ruby >= 3.2 gem 'yard', '~> 0.9', '>= 0.9.45', require: false gem 'yard-junk', '~> 0.1', '>= 0.1.0', require: false # Ruby >= 3.1 +gem 'yard-lint', '~> 1.10', '>= 1.10.2', require: false # Ruby >= 3.2 gem 'yard-relative_markdown_links', '~> 0.6', require: false if ENV.fetch('GALTZO_FLOSS_DEV', 'false').casecmp('false').zero? diff --git a/gems/markdown-merge/gemfiles/modular/templating.gemfile b/gems/markdown-merge/gemfiles/modular/templating.gemfile index a672de184..a7e6c1f06 100644 --- a/gems/markdown-merge/gemfiles/modular/templating.gemfile +++ b/gems/markdown-merge/gemfiles/modular/templating.gemfile @@ -12,7 +12,7 @@ end if kettle_remote # Template/plugin checks for released installs. - gem 'kettle-drift', '~> 1.0', '>= 1.0.6', require: false + gem 'kettle-drift', '~> 1.0', '>= 1.0.7', require: false end # Set STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local development with path-based dependencies. diff --git a/gems/markdown-merge/gemfiles/modular/templating_local.gemfile b/gems/markdown-merge/gemfiles/modular/templating_local.gemfile index d02dd57cb..e1793a2cb 100644 --- a/gems/markdown-merge/gemfiles/modular/templating_local.gemfile +++ b/gems/markdown-merge/gemfiles/modular/templating_local.gemfile @@ -65,7 +65,8 @@ platform :mri do path_env: 'KETTLE_DEV_DEV', vendored_gems_env: 'VENDORED_GEMS', vendor_gem_dir_env: 'VENDOR_GEM_DIR', - debug_env: 'KETTLE_DEV_DEBUG' + debug_env: 'KETTLE_DEV_DEBUG', + root: %w[src my kettle-dev] ) end end diff --git a/gems/markdown-merge/lib/markdown/merge/file_analysis.rb b/gems/markdown-merge/lib/markdown/merge/file_analysis.rb index d86cea23a..684841a71 100644 --- a/gems/markdown-merge/lib/markdown/merge/file_analysis.rb +++ b/gems/markdown-merge/lib/markdown/merge/file_analysis.rb @@ -71,6 +71,7 @@ def default_freeze_node_class HeadingSectionOwner = Struct.new(:location, :heading_text, :heading_source, :level, :base, keyword_init: true) LinkDefinitionOwner = Struct.new(:location, :label, :url, :title, :source, keyword_init: true) HtmlCommentOwner = Struct.new(:location, :text, :source, keyword_init: true) + ListItemOwner = Struct.new(:location, :source, :text, :depth, :marker, keyword_init: true) InlineReferenceOwner = Struct.new( :location, :line, @@ -339,6 +340,12 @@ def html_comment_owners end end + def list_item_owners + Array(statements).flat_map do |statement| + collect_list_item_owners(unwrap_markdown_statement(statement), depth: 0) + end.sort_by { |owner| [owner.location.start_line, owner.location.end_line] } + end + def inline_reference_owners source.to_s.lines.each_with_index.flat_map do |line, index| inline_references_for_line(line.chomp, index + 1) @@ -395,6 +402,40 @@ def loose_table_row_line?(line) stripped.include?(' |') || stripped.include?('| ') end + def collect_list_item_owners(node, depth:) + return [] unless node.respond_to?(:type) + + canonical_type = NodeTypeNormalizer.canonical_type(node.type, @backend) + next_depth = %i[list].include?(canonical_type) ? depth + 1 : depth + owners = [] + if canonical_type == :list_item + position = node.source_position if node.respond_to?(:source_position) + if position + source_text = source_range(position[:start_line], position[:end_line]) + owners << ListItemOwner.new( + location: Location.new(start_line: position[:start_line], end_line: position[:end_line]), + source: source_text, + text: source_text, + depth: depth, + marker: list_item_marker(source_text) + ) + end + end + + Array(node.children).each do |child| + owners.concat(collect_list_item_owners(child, depth: next_depth)) + end + owners + end + + def list_item_marker(source_text) + stripped = source_text.to_s.lines.first.to_s.lstrip + return stripped[0, 2].strip if stripped.start_with?('- ', '* ') + + marker = stripped.split(' ', 2).first.to_s + marker.end_with?('.') ? marker : nil + end + def heading_statement?(statement) merge_type = if statement.respond_to?(:merge_type) statement.merge_type diff --git a/gems/markdown-merge/lib/markdown/merge/version.rb b/gems/markdown-merge/lib/markdown/merge/version.rb index c8ba076ae..3375afd23 100644 --- a/gems/markdown-merge/lib/markdown/merge/version.rb +++ b/gems/markdown-merge/lib/markdown/merge/version.rb @@ -2,9 +2,12 @@ module Markdown module Merge + # Version namespace for this gem. module Version + # Current gem version. VERSION = '7.1.0' end + # Current gem version exposed at the traditional constant location. VERSION = Version::VERSION # Traditional Constant Location end end diff --git a/gems/markdown-merge/spec/fixtures_integration_spec.rb b/gems/markdown-merge/spec/fixtures_integration_spec.rb index 5015f0b30..5a48a8f81 100644 --- a/gems/markdown-merge/spec/fixtures_integration_spec.rb +++ b/gems/markdown-merge/spec/fixtures_integration_spec.rb @@ -101,6 +101,27 @@ def json_ready(value) ) end + it 'exposes Markdown list items with source spans' do + source = <<~MARKDOWN + # Title + + ## Changed + + - First item + continuation + - Nested item + - Second item + MARKDOWN + + analysis = Markdown::Merge::FileAnalysis.new(source) + owners = analysis.list_item_owners + + expect(owners.map(&:text)).to include(a_string_including('First item'), a_string_including('Nested item')) + expect(owners.map(&:depth)).to include(1, 2) + expect(owners.first.source).to include("- First item\n continuation") + expect(owners.first.location.start_line).to eq(5) + end + it 'conforms to the slice-721 Markdown provider parity fixture for the TSLP backend' do fixture = read_json( fixtures_root.join( diff --git a/gems/markly-merge/.structuredmerge/kettle-jem.lock b/gems/markly-merge/.structuredmerge/kettle-jem.lock new file mode 100644 index 000000000..65dd642dc --- /dev/null +++ b/gems/markly-merge/.structuredmerge/kettle-jem.lock @@ -0,0 +1,527 @@ +--- +version: 1 +template_state: + version: 7.1.0 + applied_at: '2026-07-26' + changelog_replay: + last_entry_key: kettle-jem-template-20260726-002 + last_entry_date: '2026-07-26' + checksums: + ".aiignore.example": 48a5dfdd93afd1a15fdce39cc28ca9920263f00018b0968ab031fa744521e5ce + ".config/mise/env.sh": aeea5a2ab489ba6e5467ae8de6e386ec8c8fe4ff31a044e69d0cd6a092dd6654 + ".devcontainer/apt-install/devcontainer-feature.json.example": 273a07f9d3926e1b6287c37709a469ee05d724cfedae62ad3b0cd8c09befc9ec + ".devcontainer/apt-install/install.sh.example": b61e020b60ca172bb7b658e63c9cd4342e49bda0531a6b19b36475e515ad20b0 + ".devcontainer/devcontainer.json.example": 4a80d471379b9720cc65cc89543cbbc0a7be87b188a818160296577c4e87606f + ".devcontainer/scripts/setup-tree-sitter.sh.example": c34f48d7bac8561fb780c4c7a81cec5004c3ac0edc11f229799ec9a4e3eccd54 + ".env.local.example": 35cb867e8bacb75252a85c29f78899b36d0d1843511ae1ba1fbc7da863b128b3 + ".envrc.example": b7232f4bae0fb399cc9c9cdc4a5eb694bd69623aeeadcbab18c9990e443040a1 + ".envrc.no-osc.example": b7232f4bae0fb399cc9c9cdc4a5eb694bd69623aeeadcbab18c9990e443040a1 + ".gemrc.example": 77b1c36ae6f91bedf08b99e662a971b02f7e66e0d65267805d068d30ff118aba + ".git-hooks/commit-msg.example": d858575bf70d6175fdd7656e9ba0b41672de3fb49163181efe3fbc9e40306024 + ".git-hooks/commit-subjects-goalie.txt.example": bb1179c8911af8afeb1f9a604b3de789d4a4b33d9d4a7743b3145998c15b0a94 + ".git-hooks/footer-template.erb.txt.example": 70ed3616ee04a4062126f53892cc255e7aa2b66741fe22d6b372f7df99676718 + ".git-hooks/prepare-commit-msg.example": 35266ead46a6385d20eeff7ec64afedef33a2db18d1238b8662a1bc758f05335 + ".github/.codecov.yml.example": d6ef3208a90eca74f79d8ff4e5ae21a915562b075cb17978b1eaadc231dd4e85 + ".github/FUNDING.yml.example": fd27dff7db58f4e8a39c35ccb60e39422517038501a5f2a99ef2aaeea2d1fa5d + ".github/FUNDING.yml.no-osc.example": 8f1a867b1921b3dec1c63f7a7cd629362c1fb1ad0d1052494b48ba746b0fc5c6 + ".github/copilot_instructions.md.example": f5c5791df013e89e170fd436379b14e251d0ff4cb6b330a6d961e80c9071f2d3 + ".github/dependabot.yml.example": db84d1c13f64100d2f48212c022f0d985e9061ca76c36d82e7057fd845ecd528 + ".github/workflows/auto-assign.yml.example": 57b8159a15bf49946506e1b624934feed6a1cc8f71ad68968323c87acac56c67 + ".github/workflows/coverage.yml.example": 524ef90e0fd2ca0b846c464197d8d43cd6a57834303c9526ea0bd277f2beb3e1 + ".github/workflows/current.yml.example": dbc82e7593804c05d2c217d5c02d79d5480b5a0d1e04eea99b7235f35f520216 + ".github/workflows/dep-heads.yml.example": d94122f3246e17774fa015dde8d9a5772a66e54f817d44e62716f6a61d899050 + ".github/workflows/dependency-review.yml.example": a895d52257a7112d796fabf349ced1079bed93e81e3aa9cb088f9af3f44d1e5f + ".github/workflows/discord-notifier.yml.example": f9cc83a87058bd420426444510a1dd1520fd7cc15af50832ad52c25c5766be94 + ".github/workflows/framework-ci.yml.example": 112ef6178fcf115fe9e0a248ec6cb4af748ce89142fd7dba30e9abb6ebdc17be + ".github/workflows/heads.yml.example": aa55cf9bb4ae35fe126384003e8af4b91e685bcf370263b3710bd429f6c44343 + ".github/workflows/jruby-10.0.yml.example": 0eaf6d10c304de606684d420bbd88cfc90fe9d139a56773e011c6abaa6c5fc91 + ".github/workflows/jruby-9.1.yml.example": 9062f9de8843da1f8c4da8f991bbd24f9540c63927deaf311649f3088a672d5b + ".github/workflows/jruby-9.2.yml.example": f330363fc0af7dd0be24c140c919c07737a3168c5647012e34ba0c36634005e5 + ".github/workflows/jruby-9.3.yml.example": 3b26b3a978d0018f01e6d87651936f2e92fcb58d62bcdf11822eca3c2656d303 + ".github/workflows/jruby-9.4.yml.example": a830b92838a09b9316a81745b48ff35bed9461783154fc6d0e52df0d6aa319f3 + ".github/workflows/jruby.yml.example": f10f779cd3be37d2ffa593d9a83ba68a8684bb849ed1c4d9ae41706ff12571e1 + ".github/workflows/license-eye.yml.example": 23db5d6ee9b5382de1f2042642219d65214e09c3f975c418d4dec4d46375036c + ".github/workflows/locked_deps.yml.example": c7eaa20cc7d7de6209e576274e592ffb4838177ae6ab56096b2439d0fa1bc31c + ".github/workflows/opencollective.yml.example": fe7d8d346f9ab055b6779abf62972291460d05275e2c4d191e291e8cd73b0e6b + ".github/workflows/ruby-2.3.yml.example": 90474f1a462edc877983b91dd40d942e82b28262f1afdca74cddcdd52d7e8c26 + ".github/workflows/ruby-2.4.yml.example": fe84af4efef6934d7ff63efa2a4c85994f2ea1887f61b1ab5d30a21365429ec9 + ".github/workflows/ruby-2.5.yml.example": c40db157514168442311191ebc88853dfb36447a90171a73f42d435e92d02f05 + ".github/workflows/ruby-2.6.yml.example": 87bb8537d0047217651a327353df670fed3ea9e4a5350e965ed80af9ce32d9d3 + ".github/workflows/ruby-2.7.yml.example": 5650ec41bc67553457019a772a3343578872749d21268d5e7fb1715ebf4e2351 + ".github/workflows/ruby-3.0.yml.example": f9d7c7dfc6eaea1ca12c92e0b98b4ba8fed5726d26459bb410ab9812a741e5b9 + ".github/workflows/ruby-3.1.yml.example": e44879cd3ea47d00e44e573745d7f95fc1a561a9c1d69d72529d0c07294bd26e + ".github/workflows/ruby-3.2.yml.example": c28b9179778157e6b4807a775968840ff1c6bf2fd847ce1ce694b9a77df42f6e + ".github/workflows/ruby-3.3.yml.example": 033e4f0ed7ded17f5d13fde6674ec9fd555cfe58c11f57f7dc2f1fee21c718b6 + ".github/workflows/ruby-3.4.yml.example": 474a96468f101b8fddac4cecaa0629f28d5ceec0c784329affdc471eb1e3e889 + ".github/workflows/style.yml.example": dea7243a91dc164a172e90b7933de58cdd353d7e5df1beac22cec63125edc086 + ".github/workflows/templating.yml.example": 327b933509e1ade4d53df5756f6407028b479c51847775db494fb9c25e66ce5a + ".github/workflows/truffle.yml.example": 56fa53dc206976c81db7cc3530f4d19d89ea5859c1245492e5a5ecb9304de63e + ".github/workflows/truffleruby-22.3.yml.example": d6773529e6961039b5cc4a145c77623881aa3857d875bbb415ca0f8147166d7a + ".github/workflows/truffleruby-23.0.yml.example": abcd23a18d748528f7558d4ab7bc4830796cb686ca7371f67a8ddaf6d0362d72 + ".github/workflows/truffleruby-23.1.yml.example": 11af8a3f0823ed3ab17e759d81b8a4551eb7af8096ce0b5a9501fd83cada1cd2 + ".github/workflows/truffleruby-24.2.yml.example": 2c4ff82eeaa3bdb19391f04cd2f41b07733986a053d5ac8498176fef5f890e5e + ".github/workflows/truffleruby-25.0.yml.example": 42cdfdcd21c7b3bb1b87c22c2bc7a98135a442742df5f9a45e2b4e03838c1e7f + ".github/workflows/truffleruby-33.0.yml.example": 2a45e428ca13dac56ee75526b80eac477b61697ca06c94680e1eb05d21dbc25a + ".github/workflows/unlocked_deps.yml.example": 15f5ccbe811aa5a8650c2aa69b32f4f6a24d5f8bd3aae2dcbec92cbe3a51f0a7 + ".gitignore.example": 14864a0c88be3f8c122ab3032efeb782ba5e035013231038acf746a400437a3e + ".gitlab-ci.yml.example": ef64afa9855ebb59bbc87446fa9533238d3ce180966ceb19649a7f165715b92b + ".idea/.gitignore.example": b44a5aa16bf9fe5635558af347454b05a76d600084308a9f43d4d0b54789ecab + ".licenserc.yaml.example": 8787fa7bddce911f8ba47bda3eb6ad9786b6650d5d94786723e88773098ed37d + ".opencollective.yml.example": 9ad9b83fe54f0bddac7fb614575585d98f78df0e181ee70a7acd0168d26e3142 + ".qlty/qlty.toml.example": cf3d750d2328f6c057b08b7ce3d7ec00a4056c7f0eedda59af321d6caca03553 + ".rspec.example": 40d3f3ff435b0f9e5863772a95df8725b939c2dc11aead2bca68dcd6d85a9788 + ".rubocop.example": 591e4b45430e85b0dd460cc11c70650912fa2734988420b934109d06a749344f + ".rubocop.yml.example": 47f9a031022db67c964dd76ee2e8dfee21295a1877ca4d6233d3de39d114af73 + ".rubocop_rspec.yml.example": 288ad75e7eb14d87d80fafe6f7272217be5c57547536ee56c780a7d10ac7ec74 + ".simplecov.example": ffc76492effe905cc65797389fc8050fda136652ac078a80303cd084b349ef28 + ".structuredmerge/git-drivers.toml.example": 9d241a44c9edffcdbd3da018fa188a238089c3d1635040924df594a6929a4f97 + ".structuredmerge/kettle-jem.yml.example": 954cfc9e35cd20e46376426675e985bf8a0de19ff5069bf7be24b574837be615 + ".yard-lint.yml.example": 90def46867c9436b4e177c47d91fc8165f4602e335715aecc39f5587ae20b55b + ".yardignore.example": 821f453c609df7d46145d675424b39dfbe6dfdca8edac5f367b85fff48502455 + ".yardopts.example": 6fd6f2701713096a8a9ea095c213bbc68eeef37797c4754d97837e3229a3a5f6 + AGENTS.md.example: aec69512cbe17004660ac0abfabb9ec91a5c51c2cd82c10f30f08886f9bf64a7 + AGPL-3.0-only.md.example: d8a6cc31abc16b6748c7a21f21611f5a1ec33f67d22ca23d7da1c19b95496bee + Appraisal.root.gemfile.example: 8724e3f6faea995be655ac49369bec64a70710112b1f65707fa38f1fd2fd3254 + Appraisals.example: 9cb1abcfb1a0bd6d859ca0705efb874dbe546754c8c71f9f95025ff6817f1471 + Big-Time-Public-License.md.example: b0c02a112c9eee0ed69f05fd8f22277a2f8bc62d447b6cb75d6df560e05bf431 + CHANGELOG.md.example: 73459e50dad34d84db88844c993d975097557bdf5229e101b0d1339de6f98ffc + CHANGELOG.transfer.md: 9c201849117c9d4234724c4599643dd42fdce5f0a673a1abee97b97e556c301b + CITATION.cff.example: e404ea0a7919d78a83d53d80e211d17b9663576aa606583b709795dc023fd75c + CODE_OF_CONDUCT.md.example: f1ad532f1860f73ef774c6b27a26d41f4bc1cb8813034f5957487766ebb0986b + CONTRIBUTING.md.example: 63d339848c615f2c181d6b0565c42e56371eedb66f310d146cb7da297f7bc641 + FUNDING.md.example: 455bbb2b55d934283a2e7c16b59c321116c53310a85a718b7cf8ca44e9e3721e + FUNDING.md.no-osc.example: 05a85d5faf22d5ea5721622d242080447cf318d3277d9d529e438be1c9d5a351 + Gemfile.example: 6b2d72ec8a630cce515b7b528022071b13eee863c3164763df03792a5004345a + IRP.md.example: 85d8887d9b0e77f7fa9835ca5b9be31f586fdc94764ed1819af2a9a7fec98e96 + LICENSE.md.example: 120edf5f23173ebbdb5ad384ffc2e9b97e62aa6d0e61b733c003bd4db1b08276 + MIT.md.example: 365fce2a82f9d258ada9a527accfd5754b406ee9cdd8f8ed86bbec64b8c42ab2 + PolyForm-Noncommercial-1.0.0.md.example: ffcca38841adb694b6f380647e15f17c446a4d1656fed51a1e2041d064c94cc8 + PolyForm-Small-Business-1.0.0.md.example: 2f81e317d36f83a199c9fa10bcb250775fd90510303eaeb15aac2d8f0c1fc2d6 + README.md.example: 452446a44d120df26cde68fbc7aff086fa815769c989b994ebc1432ea927974f + REEK: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 + RUBOCOP.md.example: c09e5533ccc59b70a2efa05c99f66e521137c1053d3c12eb43509cebd5b68b0e + Rakefile.example: 569803e726b07ea26267fec6891367a3096a0dff3c266269a7081d36afe496af + SECURITY.md.example: ee9411aa85f36d88363fdaea7a1baea4362b6ec112cf2688e711b05de1d3144c + bin/setup.example: 0ac35089c95a91d8973fe7a318bf9fd98b9f8e00db92c5d9ca6cd858abb8d41b + certs/pboling.pem.example: 18956f60643666cc181e2743b3b3691bec08c5326f514f60af54d0cdb9ebc554 + gem.gemspec.example: 9989cc8a1cd125586ea807eaed549eaecc044711d31f17dd7bac2a0815b28b1a + gemfiles/modular/benchmark/r4/v0.5.gemfile.example: 5bc3190090ae456df1a8cce28dd47a7fb293495f6d845ec7e53a7a8b50f14ae1 + gemfiles/modular/benchmark/vHEAD.gemfile.example: ca6cd52c55c3082759c6ddc97638970f12d953aec1822470823d316086aa6e25 + gemfiles/modular/cgi/r4/v0.5.gemfile.example: c2d14a39377a2435419ceaca22a3421ebd899e9cba943df8a90b576a33624870 + gemfiles/modular/cgi/vHEAD.gemfile.example: 9ff3dc789b3279642876c0aad4b0094c1139bb8fbbf36daab804d3b2b3a60b43 + gemfiles/modular/coverage.gemfile.example: 915fc161ad574fdbc071bc733b69b27e94bd7a4c68cc4f58da267c9a0987f3e8 + gemfiles/modular/coverage_local.gemfile.example: 928d5f260d7b119c038baa56da9fb78dd524dee613aea33ab72894bbce5c506e + gemfiles/modular/debug.gemfile.example: 0a508bfb02e51b75394b43f4f09d98174dac36ead41cba09c1f730671a1f5905 + gemfiles/modular/documentation.gemfile.example: e15f51e4d14ad2216b6de16c323787945bd225073d70a78420f4c99c98c1ecd1 + gemfiles/modular/documentation_local.gemfile.example: 84a20f5d4b0feb94c2cf2f7a8dce8f682f1483498e41484c2b447a5661fd1870 + gemfiles/modular/erb/r2.3/default.gemfile.example: 9da0d08fb6a299b965c37fe85efcaebd9eb0a82b2ea35fdc157c41bd75431396 + gemfiles/modular/erb/r2.6/v2.2.gemfile.example: '01787cbdf7136c0d75cc7b734c6bb3d2ef6c70d6c1c50e7d0ad2112c0f8ef8e7' + gemfiles/modular/erb/r2/v3.0.gemfile.example: 3793e7dc9ef23a7ccd893d48cbba092fd27594c63e65cca011cc658218425670 + gemfiles/modular/erb/r3.1/v4.0.gemfile.example: bdf71ddcfe5001aab7d71b10a645a785928957ef7bae61d49307eb7f712279f3 + gemfiles/modular/erb/r3/v5.0.gemfile.example: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + gemfiles/modular/erb/r4/v5.0.gemfile.example: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + gemfiles/modular/erb/vHEAD.gemfile.example: ad6f104a49e80e0cf625440e3dc816343fe7e2f037fc4971df75e7bb4305c683 + gemfiles/modular/json/truffleruby_22_3.gemfile.example: 249c12eacbe90f9d0d2e81e7a62c4c7e9102e504ededcda4ecf660cb3bb68be4 + gemfiles/modular/json/truffleruby_23_0.gemfile.example: 66aa010567f7afa1af8244a74c3c88ecaaf84dc87b6a25180691bb480d02ed28 + gemfiles/modular/json/truffleruby_23_1.gemfile.example: '080fcbdaf2bec73cad40832a3d51eebb380af789917b96f493d1460b0dd6361d' + gemfiles/modular/mutex_m/r2.4/v0.1.gemfile.example: '09728bdc10807b3ca9dd3b9f12986acbe8c40ac08ada438bcfd49cd69445c650' + gemfiles/modular/mutex_m/r2/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/r3/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/r4/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/vHEAD.gemfile.example: '08018641c97f894788fa91b462da504ab2237213d18d95404136c393274ae3cb' + gemfiles/modular/optional.gemfile.example: b45eb8ecde2902441c02b2f01d4aa8f79bff75c853ef92555c3201ee798d9e87 + gemfiles/modular/recording/r2.3/recording.gemfile.example: 154da539583c51ca78ff8affa7a7caaf7f354d321b5e748beb64de61ff72f80a + gemfiles/modular/recording/r2.4/recording.gemfile.example: 6d69381eb2f8be681c72e7a5a8b5d6ec6ee586da8ce51b9b39d845d2a87e4ecf + gemfiles/modular/recording/r2.5/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/r3/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/r4/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/vHEAD.gemfile.example: 7480fd116e9671972a2735d1d97050a4fd5754aa7abfab3d115bf9bebbca038c + gemfiles/modular/rspec.gemfile.example: d043f5c9344f6435edb4607c5adaf42c78e7fb6b8b6726007de2bbedefb376c3 + gemfiles/modular/runtime_heads.gemfile.example: f163201999bf68a942b1e5bcea506bfc4b9c59711ff502091eb215d5d5f8f658 + gemfiles/modular/shunted.gemfile.example: a54a86124eff06163497462012704f62a691daa224cebeac605cdd14cffacfbe + gemfiles/modular/stringio/r2.4/v0.0.2.gemfile.example: 6425ebcd70b2e782f4c1d9074f8685c1e93ca7bf371728ef7ebbc8b5ebdf491a + gemfiles/modular/stringio/r2/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/r3/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/r4/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/vHEAD.gemfile.example: e0497ab6dad9667b22725485b781e9d99349a079250eb29cb125d58f01f4a5be + gemfiles/modular/style.gemfile.example: a15db732f566d958c2459ef549ae3877d984df3d205116e714284d1fe4f9b068 + gemfiles/modular/style_local.gemfile.example: '0083605323d23879dc7223f0198e9f1db24a25fa38730c4dbcc71c7a8a4c307f' + gemfiles/modular/templating.gemfile.example: 6cedc39529daa9aac3a4cf13fe31a628b62a4a2428f5c4f8657c5a2fa027bb35 + gemfiles/modular/templating_local.gemfile.example: 16c0b51fd46b86db09268c8485b1d5a528e5f962b593f8ae7521b15209f7d1a5 + gemfiles/modular/webrick/r4/v1.9.gemfile.example: 1ee940ff54d5ca3ce7fcff0d82ee9553386979656b9e220d5be5404d0991d5ea + gemfiles/modular/webrick/vHEAD.gemfile.example: da545f591af987648ffbaba181707480a38dfb375db7d289617986ec2c2ca23b + gemfiles/modular/x_std_libs.gemfile.example: e3917e90717d7f9f4393d847549a78c53de7f6c8de52a7f590b34b515fd6111a + gemfiles/modular/x_std_libs/r2.3/libs.gemfile.example: 379ac2a3698615789e39dc18a961b9c793b2cc594856bb3163524a99fd4ac86f + gemfiles/modular/x_std_libs/r2.4/libs.gemfile.example: ccad8f592943481317c082ce8d340316b9e90a52463c8c1eea5c5109b23e8c3d + gemfiles/modular/x_std_libs/r2.6/libs.gemfile.example: 9af20396f404a32bf76d8999c7fdd112f0282ba331f71100ab093663b2ab5670 + gemfiles/modular/x_std_libs/r2/libs.gemfile.example: e80ec8ad06cb1b31ac982bc25cf7696987fca131aa1001eaefd0bf5cd379c273 + gemfiles/modular/x_std_libs/r3.1/libs.gemfile.example: 38068bd6a0f5d02918eb286af9bdbdf0c7cf7cf026486b9fd157b541b6153d58 + gemfiles/modular/x_std_libs/r3/libs.gemfile.example: 546f8849f4267bb19aa10ff0de40be30957197f229e6887847181ea9127b2650 + gemfiles/modular/x_std_libs/r4/libs.gemfile.example: 8c2582eaa218d216b98c86c933465295c8b4e43f3251ea388b9eaf6e471f8da6 + gemfiles/modular/x_std_libs/vHEAD.gemfile.example: d3133ec4c0638363a7fb025d19be7e95a615fd61c35ddb8d17f2280ee74a7486 + lib/gem/version.rb.example: 15e219ac3a928b5580035f891e415551213175020f1131f6e7ca0ccd55a1b2d6 + mise.toml.example: b2eb06f7daaf0c3916bba155f463e166bd1de218637ba82e636c528c077c8d6d + mise.toml.no-osc.example: 35ec90d3c67b74e0014876dccad14f5883fdad88036f6b0cf5d29ea181e132ac + parsers.toml.example: f0538ae7ad8596be2dc39b3ea663f1164dec21fb0457233c1885097e774aff6f + readme/partials/basic_usage.md.example: adaa8f9de9768d1f29cb15d957404004715e7687db68c29b121d6467db13158a + readme/partials/configuration.md.example: 5ad82bc7eaf05015d31cea9265173718abc1d92729b52e3856c8366aa54184e8 + readme/partials/synopsis.md.example: 2b7383f8261086da0995fbf2c10017b3f162723b32c324ae8c0e1c1a8d1c79ef + shim/.github/workflows/current.yml.example: c2a2a2053f2726276bb8571c8a76a4b97bcce6cd54bdca01cba63d713c3a0e2f + shim/.rspec.example: 0e3a2a1587779efc3eae8fe718a3480272fbdfb3f1f6c2f9c3901f6fd81b2cce + shim/.structuredmerge/kettle-jem.yml.example: 03faae6cfda3947ef8489008b4836aad3ca280e94ddf9d08ef733071d7daa167 + shim/CHANGELOG.md.example: 2c098802b9971c51796e34067d061adbc31fa443df96be8a1fc71fc84c262d0e + shim/Gemfile.example: 9583b19e04d7ab6f5b3ea7ebb0c5d24e6a71ae5d74404a510aa979642248ba34 + shim/README.md.example: 3a2f7211b7f92a1dfae5e523b8e34b051a3d8af942144b05286eca0b3c8f6fbe + shim/Rakefile.example: 572c94da7052083b39b62a6600785419e314a109efd7a3d8c3a96eb77ad34fd1 + shim/gem.gemspec.example: cabca9717af1a18991db1de856900494e2771b044f1d5bfd2ad71b2ed4a1367d + shim/lib/compat_require.rb.example: 94ee85e353a3ca08c8a35c9063d4ff789214ea594c7f803f6cf09d7142f48379 + shim/lib/entrypoint.rb.example: dd57613520daca01d6f6bcaa9b83b00ff74505240dc04b84ceb686df3c0539d7 + shim/lib/version.rb.example: 15e219ac3a928b5580035f891e415551213175020f1131f6e7ca0ccd55a1b2d6 + shim/spec/shim_spec.rb.example: '060013019bf39b8dc267169df83752661d02c7ad890b65a99a1d97137938edfd' + shim/spec/spec_helper.rb.example: 88e2ab0bd8888022a68e856e04f61053e238e54f51b428b386aaebf93ae8ad83 + sig/gem.rbs.example: 47a4f7e524cc6f773875b6c08691ca4d65c2b14618abd5b9b91055ae5b248cec + spec/spec_helper.rb.example: 0c8119bd75b90f3a2403789b68b539fd19952370051297b1807596e201ef4813 +files: + ".simplecov": + recipe: template_source_application_simplecov + action: write + dest_sha256: c8f4b89c3ab9c3e735712fe6979903daac5c928a2fcd68989ce29e2f221563a8 + input_fingerprint: 3bd225378f9fa0706b620c8d044a03089fad4234411c10aee5292b182506e1b1 + template_sources: + - ".simplecov.example" + AGPL-3.0-only.md: + recipe: template_source_application_AGPL_3_0_only_md + action: write + dest_sha256: d8a6cc31abc16b6748c7a21f21611f5a1ec33f67d22ca23d7da1c19b95496bee + input_fingerprint: 56687bed6fd525ae2984dec8817c18bc0737e12d97a80d89e502194e10f82b9a + template_sources: + - AGPL-3.0-only.md.example + Gemfile: + recipe: template_source_application_Gemfile + action: write + dest_sha256: 077bb56132a19233be6dc5a6a1f24a98c0c4d891010bcda8b12d4cbe88f58522 + input_fingerprint: c77f244b9e5b8c6af591a5325ef333dcd4b68848001584a16d4ced6f17601a51 + template_sources: + - Gemfile.example + LICENSE.md: + recipe: template_source_application_LICENSE_md + action: write + dest_sha256: f6188bfd474a636d2a526420ebb411250faa447d94c9b9ccee097128ce4101b5 + input_fingerprint: 68805501814a8c77477d1a883267905d1f9aa4bda695436798e10ded65891a52 + template_sources: + - LICENSE.md.example + PolyForm-Small-Business-1.0.0.md: + recipe: template_source_application_PolyForm_Small_Business_1_0_0_md + action: write + dest_sha256: 2f81e317d36f83a199c9fa10bcb250775fd90510303eaeb15aac2d8f0c1fc2d6 + input_fingerprint: ed94d080e4ea44cc8b633e1cbdcc68f195a901378c9c7a0f950bffbcee59e8b4 + template_sources: + - PolyForm-Small-Business-1.0.0.md.example + README.md: + recipe: template_source_application_README_md + action: write + dest_sha256: 8021ba802f2eef20a084636339e65feb2d68d1d115d00e7ed9e8306427298b6b + input_fingerprint: 60a4ecc508671501bb5a7a6493f7ff2c13764a9b936a4ea1e0e7e1e9ecc578ff + template_sources: + - README.md.example + certs/pboling.pem: + recipe: template_source_application_certs_pboling_pem + action: write + dest_sha256: 18956f60643666cc181e2743b3b3691bec08c5326f514f60af54d0cdb9ebc554 + input_fingerprint: 522c5df0ce9104372dceb35563f8d0ddc76858d8d710084889af06c73a645117 + template_sources: + - certs/pboling.pem.example + gemfiles/modular/benchmark/r4/v0.5.gemfile: + recipe: template_source_application_gemfiles_modular_benchmark_r4_v0_5_gemfile + action: write + dest_sha256: 5bc3190090ae456df1a8cce28dd47a7fb293495f6d845ec7e53a7a8b50f14ae1 + input_fingerprint: f49510e531da1ea73a3a6059a4f4783e215de3cd0502eb7b89efab252389b14b + template_sources: + - gemfiles/modular/benchmark/r4/v0.5.gemfile.example + gemfiles/modular/benchmark/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_benchmark_vHEAD_gemfile + action: write + dest_sha256: ca6cd52c55c3082759c6ddc97638970f12d953aec1822470823d316086aa6e25 + input_fingerprint: 9df1ff9a2465066935ba58eb455654ae9da8cb99f797125834ad4ab6294f3369 + template_sources: + - gemfiles/modular/benchmark/vHEAD.gemfile.example + gemfiles/modular/cgi/r4/v0.5.gemfile: + recipe: template_source_application_gemfiles_modular_cgi_r4_v0_5_gemfile + action: write + dest_sha256: c2d14a39377a2435419ceaca22a3421ebd899e9cba943df8a90b576a33624870 + input_fingerprint: a3d78285e681dba0b7cbe0d5ed6ded9cb0339fb618dbf957ae32cec458b7b9e6 + template_sources: + - gemfiles/modular/cgi/r4/v0.5.gemfile.example + gemfiles/modular/cgi/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_cgi_vHEAD_gemfile + action: write + dest_sha256: 9ff3dc789b3279642876c0aad4b0094c1139bb8fbbf36daab804d3b2b3a60b43 + input_fingerprint: 5a3cfb59f7cdb06989093f86274787e5fae7e15f81975493c2cb6ac45c25b210 + template_sources: + - gemfiles/modular/cgi/vHEAD.gemfile.example + gemfiles/modular/coverage.gemfile: + recipe: template_source_application_gemfiles_modular_coverage_gemfile + action: write + dest_sha256: 915fc161ad574fdbc071bc733b69b27e94bd7a4c68cc4f58da267c9a0987f3e8 + input_fingerprint: 6d4f0b9bf1e413ddfc037032d8b4592ec9e1e7dd6a37b999dcd64bcea7f626c4 + template_sources: + - gemfiles/modular/coverage.gemfile.example + gemfiles/modular/coverage_local.gemfile: + recipe: template_source_application_gemfiles_modular_coverage_local_gemfile + action: write + dest_sha256: 8000eb82fe3e90b2b1c73a4848c98f9c8b141755c37f58f518b8eca15988066d + input_fingerprint: ae7937aaa0dad70a17967c6319a4dcef543934c43af80fd93bc4b870af888307 + template_sources: + - gemfiles/modular/coverage_local.gemfile.example + gemfiles/modular/debug.gemfile: + recipe: template_source_application_gemfiles_modular_debug_gemfile + action: write + dest_sha256: 0a508bfb02e51b75394b43f4f09d98174dac36ead41cba09c1f730671a1f5905 + input_fingerprint: ed37fc36b3006651020c82fb5c8ad7d17fefe20d040250eae22a9cebf2a7f410 + template_sources: + - gemfiles/modular/debug.gemfile.example + gemfiles/modular/documentation.gemfile: + recipe: template_source_application_gemfiles_modular_documentation_gemfile + action: write + dest_sha256: e15f51e4d14ad2216b6de16c323787945bd225073d70a78420f4c99c98c1ecd1 + input_fingerprint: a8fc059f58afce99a108239c0a934e3d17ebee12e642b0079a78c22162c95633 + template_sources: + - gemfiles/modular/documentation.gemfile.example + gemfiles/modular/documentation_local.gemfile: + recipe: template_source_application_gemfiles_modular_documentation_local_gemfile + action: write + dest_sha256: 3f87999bfeb5e2db5a9f2754811ab69752435a2921349ac9460908339f6f91fd + input_fingerprint: ab8564612b027add732f918e445c5d41916e4af173f1293163a19dd2cf988ba9 + template_sources: + - gemfiles/modular/documentation_local.gemfile.example + gemfiles/modular/erb/r2/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r2_v3_0_gemfile + action: write + dest_sha256: 3793e7dc9ef23a7ccd893d48cbba092fd27594c63e65cca011cc658218425670 + input_fingerprint: 856ff11420ead4f24c52ca2aa69a0090cc4ff98b6c27f8557fc4bddbf6569738 + template_sources: + - gemfiles/modular/erb/r2/v3.0.gemfile.example + gemfiles/modular/erb/r3/v5.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r3_v5_0_gemfile + action: write + dest_sha256: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + input_fingerprint: 2a27d062564a43cee3eb46f7fcdf9efe67aad7b8ca613f6f9a7e5d7bb65ea2d3 + template_sources: + - gemfiles/modular/erb/r3/v5.0.gemfile.example + gemfiles/modular/erb/r4/v5.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r4_v5_0_gemfile + action: write + dest_sha256: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + input_fingerprint: 7948bc6d445fcacc25842f12b117139a03993e267d954f8c2e1d6272ddc67ea4 + template_sources: + - gemfiles/modular/erb/r4/v5.0.gemfile.example + gemfiles/modular/erb/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_erb_vHEAD_gemfile + action: write + dest_sha256: ad6f104a49e80e0cf625440e3dc816343fe7e2f037fc4971df75e7bb4305c683 + input_fingerprint: 762fde2a8e29866e41f51668f5bdfcf8e46d0df1dac38b3ab574db90d4259c74 + template_sources: + - gemfiles/modular/erb/vHEAD.gemfile.example + gemfiles/modular/json/truffleruby_22_3.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_22_3_gemfile + action: write + dest_sha256: 249c12eacbe90f9d0d2e81e7a62c4c7e9102e504ededcda4ecf660cb3bb68be4 + input_fingerprint: 0d8ba8fb89ce424c8ee9fab61b11bd144cf487fe01428216eb8d1e203d1bbd46 + template_sources: + - gemfiles/modular/json/truffleruby_22_3.gemfile.example + gemfiles/modular/json/truffleruby_23_0.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_23_0_gemfile + action: write + dest_sha256: 66aa010567f7afa1af8244a74c3c88ecaaf84dc87b6a25180691bb480d02ed28 + input_fingerprint: aad71a9282c76b24740e1d1bdae703fdcdf2b282fee025f0ebfc6a481c7980ae + template_sources: + - gemfiles/modular/json/truffleruby_23_0.gemfile.example + gemfiles/modular/json/truffleruby_23_1.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_23_1_gemfile + action: write + dest_sha256: '080fcbdaf2bec73cad40832a3d51eebb380af789917b96f493d1460b0dd6361d' + input_fingerprint: 0f39b05fb2ad04266a13606d04c38765245e646f7804cde4bbe49955779f9c24 + template_sources: + - gemfiles/modular/json/truffleruby_23_1.gemfile.example + gemfiles/modular/mutex_m/r2/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r2_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: 509d6695c5959e55ac98766651e4075245765d70ac7ae764ad313ae22166e134 + template_sources: + - gemfiles/modular/mutex_m/r2/v0.3.gemfile.example + gemfiles/modular/mutex_m/r3/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r3_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: 8beebf43306fb79bd2333dd4542e9251e079c858062f443b61107dc4902d9592 + template_sources: + - gemfiles/modular/mutex_m/r3/v0.3.gemfile.example + gemfiles/modular/mutex_m/r4/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r4_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: d6ecefc8dd8c985e37c8c3e52c6118132bc00f3e8d892b28b6241828d9b50415 + template_sources: + - gemfiles/modular/mutex_m/r4/v0.3.gemfile.example + gemfiles/modular/mutex_m/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_vHEAD_gemfile + action: write + dest_sha256: '08018641c97f894788fa91b462da504ab2237213d18d95404136c393274ae3cb' + input_fingerprint: 7c50a0a730fc66d08aee7cf9cc4bdf0b3f17d5c8fed457c4f954fb6b0a9296c8 + template_sources: + - gemfiles/modular/mutex_m/vHEAD.gemfile.example + gemfiles/modular/optional.gemfile: + recipe: template_source_application_gemfiles_modular_optional_gemfile + action: write + dest_sha256: f770e6e9a9dd2bd0f1f132e882d88038b2e21127dce3afe270908c7338c28bfd + input_fingerprint: 883f02c8c2196cd87d252c9a453966293de59e3fe765fcfbfb54f6eccc156590 + template_sources: + - gemfiles/modular/optional.gemfile.example + gemfiles/modular/rspec.gemfile: + recipe: template_source_application_gemfiles_modular_rspec_gemfile + action: write + dest_sha256: d043f5c9344f6435edb4607c5adaf42c78e7fb6b8b6726007de2bbedefb376c3 + input_fingerprint: d3535b144589fb6ec8d391e6cea8351a998038e07e66ad909cf73776843056c6 + template_sources: + - gemfiles/modular/rspec.gemfile.example + gemfiles/modular/runtime_heads.gemfile: + recipe: template_source_application_gemfiles_modular_runtime_heads_gemfile + action: write + dest_sha256: 6ac7158c4a3088190f2a9082f01439eb27eca2172ab3464b15c9cb045aa885e1 + input_fingerprint: f4534f4c2b810cc26f872b3e80c15e3ed7f34e1b8e24512f4bacf6b90afa025d + template_sources: + - gemfiles/modular/runtime_heads.gemfile.example + gemfiles/modular/stringio/r2/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r2_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: 24d672a64fc19d619025c03ebcd81a078db636edd0472a34924bfca8ba0979ca + template_sources: + - gemfiles/modular/stringio/r2/v3.0.gemfile.example + gemfiles/modular/stringio/r3/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r3_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: 92daf3d23061f0e96773ccaf496d5369f3df2769dc1bc995215f4f059e2e6a76 + template_sources: + - gemfiles/modular/stringio/r3/v3.0.gemfile.example + gemfiles/modular/stringio/r4/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r4_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: 7d9239b217362096e89bc3f7d99c415a3a2e2d29c014c976305f75a298752d30 + template_sources: + - gemfiles/modular/stringio/r4/v3.0.gemfile.example + gemfiles/modular/stringio/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_vHEAD_gemfile + action: write + dest_sha256: e0497ab6dad9667b22725485b781e9d99349a079250eb29cb125d58f01f4a5be + input_fingerprint: 2925293eee156f54c771f08707453c36e1125d9999a38c485ea242b98a855b97 + template_sources: + - gemfiles/modular/stringio/vHEAD.gemfile.example + gemfiles/modular/style.gemfile: + recipe: template_source_application_gemfiles_modular_style_gemfile + action: write + dest_sha256: 071066457ce6081cbc03d10d777f741b84019071c78e45c23889f13658a0a4a6 + input_fingerprint: 5733676dd5a4b06314d5eb65e528edf9e75d6d1ccb704b5c3cf01907a5b11d7e + template_sources: + - gemfiles/modular/style.gemfile.example + gemfiles/modular/style_local.gemfile: + recipe: template_source_application_gemfiles_modular_style_local_gemfile + action: write + dest_sha256: 560e546f604a676873897cc4084cf94e8bb5a35c0a5d87ede81317ff802cb5d7 + input_fingerprint: c054aaa85275f4349b4a785082b2c68794abc87631e8e139662375b4c549a6bb + template_sources: + - gemfiles/modular/style_local.gemfile.example + gemfiles/modular/templating.gemfile: + recipe: template_source_application_gemfiles_modular_templating_gemfile + action: write + dest_sha256: 6cedc39529daa9aac3a4cf13fe31a628b62a4a2428f5c4f8657c5a2fa027bb35 + input_fingerprint: a512c4d03138d16d836d0e82568f8eea5270a8f6c1b05f391f6bd42c1738ad31 + template_sources: + - gemfiles/modular/templating.gemfile.example + gemfiles/modular/templating_local.gemfile: + recipe: template_source_application_gemfiles_modular_templating_local_gemfile + action: write + dest_sha256: 7c825e91dfc55d089be048823ca6bd0a1654e6b28b2eb5d70a6109d99b0e7888 + input_fingerprint: 4e37940468439b5c2f777b2cfbdf8cf8c8eaab6f834982853250d777bae7a215 + template_sources: + - gemfiles/modular/templating_local.gemfile.example + gemfiles/modular/webrick/r4/v1.9.gemfile: + recipe: template_source_application_gemfiles_modular_webrick_r4_v1_9_gemfile + action: write + dest_sha256: 1ee940ff54d5ca3ce7fcff0d82ee9553386979656b9e220d5be5404d0991d5ea + input_fingerprint: ff9f6d2b8e6b896777a70c6b8a00a9a9e7e7d0ec2fe2435924d2fdaa6400351b + template_sources: + - gemfiles/modular/webrick/r4/v1.9.gemfile.example + gemfiles/modular/webrick/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_webrick_vHEAD_gemfile + action: write + dest_sha256: da545f591af987648ffbaba181707480a38dfb375db7d289617986ec2c2ca23b + input_fingerprint: 4fbd6f6758d1113869295f1420c1661d7e7360768d491fc5e79b4c70b5307047 + template_sources: + - gemfiles/modular/webrick/vHEAD.gemfile.example + gemfiles/modular/x_std_libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_gemfile + action: write + dest_sha256: e3917e90717d7f9f4393d847549a78c53de7f6c8de52a7f590b34b515fd6111a + input_fingerprint: 3cd79fbf35953d661a72e20a860e8da5cfe0c9906fa54c181be033a4a82d3046 + template_sources: + - gemfiles/modular/x_std_libs.gemfile.example + gemfiles/modular/x_std_libs/r2/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r2_libs_gemfile + action: write + dest_sha256: e80ec8ad06cb1b31ac982bc25cf7696987fca131aa1001eaefd0bf5cd379c273 + input_fingerprint: 1a0e1f405cd6c263f2de0d488459889c7c830475a02182b5ddfeb4c6284c93a0 + template_sources: + - gemfiles/modular/x_std_libs/r2/libs.gemfile.example + gemfiles/modular/x_std_libs/r3/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r3_libs_gemfile + action: write + dest_sha256: 546f8849f4267bb19aa10ff0de40be30957197f229e6887847181ea9127b2650 + input_fingerprint: a8889176bbfab0c078d3c8e0223d5bec6f44811c442261b5c12dff58a416b558 + template_sources: + - gemfiles/modular/x_std_libs/r3/libs.gemfile.example + gemfiles/modular/x_std_libs/r4/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r4_libs_gemfile + action: write + dest_sha256: 8c2582eaa218d216b98c86c933465295c8b4e43f3251ea388b9eaf6e471f8da6 + input_fingerprint: 8db2f07736bbfa32f79c1f53f08f57a79051b625157107122c42cc3ebefaaddd + template_sources: + - gemfiles/modular/x_std_libs/r4/libs.gemfile.example + gemfiles/modular/x_std_libs/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_vHEAD_gemfile + action: write + dest_sha256: d3133ec4c0638363a7fb025d19be7e95a615fd61c35ddb8d17f2280ee74a7486 + input_fingerprint: 00d45308cd01707022d85b294ff85f608f570aeb501ca631bd58ba36f838d482 + template_sources: + - gemfiles/modular/x_std_libs/vHEAD.gemfile.example + lib/markly/merge/version.rb: + recipe: template_source_application_lib_markly_merge_version_rb + action: write + dest_sha256: '049ed2a90effd28598495d36766f308d600161118784208bc246a7e8fc08cea2' + input_fingerprint: 75f496811763c8b73491f1ddd1196f65ec196ee93562484d1d2d9f8c54c34c04 + template_sources: + - lib/gem/version.rb.example + markly-merge.gemspec: + recipe: template_source_application_markly_merge_gemspec + action: write + dest_sha256: 70e3aac7b6374473ca5bb5024ac0728f51ad3c074a3ef46e048094f4157f5474 + input_fingerprint: 35805f0377ba0e694c7a498a110b37b5db81a5fff3e321f20209b0a7a717c1fe + template_sources: + - gem.gemspec.example + sig/markly/merge.rbs: + recipe: template_source_application_sig_markly_merge_rbs + action: write + dest_sha256: c1263846cfd5e8c80e49b4bee75dcc86a9a1ae381a960d8e2025acffd5a93375 + input_fingerprint: '0870392d11b5a638fb6e26aa47a3bc93cd7aa21c27b1f1758498a8c09aff4dbb' + template_sources: + - sig/gem.rbs.example + spec/spec_helper.rb: + recipe: template_source_application_spec_spec_helper_rb + action: write + dest_sha256: 2ce56ee3cc2ea7bef1a39fbc7b6e5bb8e9678c0f94934d24e9e0d3b377304705 + input_fingerprint: 654abcc797596145c91fadcfc788d1c382c24d76b20758114312f623e068064a + template_sources: + - spec/spec_helper.rb.example diff --git a/gems/markly-merge/Gemfile b/gems/markly-merge/Gemfile index 65eaacb36..38bc720e3 100644 --- a/gems/markly-merge/Gemfile +++ b/gems/markly-merge/Gemfile @@ -19,8 +19,7 @@ git_source(:gitlab) { |repo_name| "https://gitlab.com/#{repo_name}" } gemspec # Local workspace dependency wiring for *_local.gemfile overrides -nomono_requirements = ['~> 1.0', '>= 1.0.8'] -gem 'nomono', *nomono_requirements, require: false # ruby >= 2.2 +gem 'nomono', '~> 1.1', '>= 1.1.0', require: false # ruby >= 3.2.0 # Direct sibling dependencies (env-switched via STRUCTUREDMERGE_DEV) direct_sibling_gems = %w[ diff --git a/gems/markly-merge/Gemfile.lock b/gems/markly-merge/Gemfile.lock index 3f21a3906..f15f4a4be 100644 --- a/gems/markly-merge/Gemfile.lock +++ b/gems/markly-merge/Gemfile.lock @@ -78,8 +78,8 @@ GEM bundler (>= 1.14) version_gem (~> 1.1, >= 1.1.4) geom2d (0.4.1) - gitmoji-regex (2.0.4) - version_gem (~> 1.1, >= 1.1.13) + gitmoji-regex (2.0.6) + version_gem (~> 1.1, >= 1.1.14) hexapdf (1.9.1) cmdparse (~> 3.0, >= 3.0.3) geom2d (~> 0.4, >= 0.4.1) @@ -92,20 +92,29 @@ GEM rdoc (>= 4.0.0) reline (>= 0.4.2) json (2.21.1) - kettle-dev (2.3.9) + kettle-dev (2.4.5) emoji_regex (>= 15.0) + kettle-gha-pins (~> 0.3, >= 0.3.1) + kettle-ndjson (~> 0.1, >= 0.1.1) kettle-rb (~> 0.1, >= 0.1.2) - kettle-test (~> 2.0, >= 2.0.4) + kettle-test (~> 2.0, >= 2.0.12) ruby-progressbar (~> 1.13) + tty-progressbar (~> 0.18) + kettle-gha-pins (0.3.1) + ruby-progressbar (~> 1.13) + tty-progressbar (~> 0.18) + version_gem (~> 1.1, >= 1.1.14) + kettle-ndjson (0.1.1) + version_gem (~> 1.1, >= 1.1.14) kettle-rb (0.1.5) - kettle-soup-cover (3.0.4) + kettle-soup-cover (3.0.5) kettle-wash (~> 0.1, >= 0.1.0) simplecov (>= 1.0) simplecov-cobertura (>= 4.0) simplecov-console (~> 0.9, >= 0.9.5) simplecov-rcov (~> 0.3, >= 0.3.7) simplecov_lcov_formatter (~> 0.9, >= 0.9.0) - kettle-test (2.0.12) + kettle-test (2.0.15) appraisal2 (~> 3.0, >= 3.0.6) backports (~> 3.0) rspec (~> 3.0) @@ -131,8 +140,18 @@ GEM version_gem (~> 1.1, >= 1.1.9) markly (0.16.0) mutex_m (0.3.0) + nokogiri (1.19.4-aarch64-linux-gnu) + racc (~> 1.4) + nokogiri (1.19.4-aarch64-linux-musl) + racc (~> 1.4) + nokogiri (1.19.4-arm64-darwin) + racc (~> 1.4) + nokogiri (1.19.4-x86_64-darwin) + racc (~> 1.4) nokogiri (1.19.4-x86_64-linux-gnu) racc (~> 1.4) + nokogiri (1.19.4-x86_64-linux-musl) + racc (~> 1.4) nomono (1.1.0) openssl (4.0.2) ostruct (0.6.3) @@ -187,11 +206,11 @@ GEM rspec-mocks (3.13.8) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) - rspec-pending_for (0.1.21) + rspec-pending_for (0.1.22) rspec-core (~> 3.0) ruby_engine (~> 2.0) ruby_version (~> 1.0) - rspec-stubbed_env (1.0.6) + rspec-stubbed_env (1.0.8) rspec-support (3.13.7) rspec_junit_formatter (0.6.0) rspec-core (>= 2, < 4, != 2.12.0) @@ -287,7 +306,7 @@ GEM silent_stream (1.0.12) logger (~> 1.2) version_gem (>= 1.1.8, < 3) - simplecov (1.0.2) + simplecov (1.0.3) simplecov-cobertura (4.0.0) rexml simplecov (~> 1.0) @@ -299,7 +318,7 @@ GEM simplecov (>= 0.4.1) simplecov_lcov_formatter (0.9.0) simplecov (>= 0.18) - sorbet-runtime (0.6.13351) + sorbet-runtime (0.6.13363) standard (1.56.0) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.0) @@ -323,9 +342,9 @@ GEM standard-custom (~> 1.0, >= 1.0.2) standard-performance (~> 1.9, >= 1.9.0) version_gem (~> 1.1, >= 1.1.13) - stone_checksums (1.0.6) - version_gem (~> 1.1, >= 1.1.13) + stone_checksums (1.0.7) stringio (3.2.0) + strings-ansi (0.2.0) strscan (3.1.8) terminal-table (4.0.0) unicode-display_width (>= 1.1.1, < 4) @@ -343,16 +362,27 @@ GEM parslet (~> 2.0) tree_sitter_language_pack (>= 1.13.2, < 2.0) version_gem (~> 1.1, >= 1.1.9) - tree_sitter_language_pack (1.13.3-x86_64-linux) + tree_sitter_language_pack (1.13.4-aarch64-linux) + sorbet-runtime (~> 0.5) + tree_sitter_language_pack (1.13.4-arm64-darwin) + sorbet-runtime (~> 0.5) + tree_sitter_language_pack (1.13.4-x86_64-darwin) + sorbet-runtime (~> 0.5) + tree_sitter_language_pack (1.13.4-x86_64-linux) sorbet-runtime (~> 0.5) tsort (0.2.0) - turbo_tests2 (3.2.0) + tty-cursor (0.7.1) + tty-progressbar (0.18.3) + strings-ansi (~> 0.2) + tty-cursor (~> 0.7) + tty-screen (~> 0.8) + unicode-display_width (>= 1.6, < 3.0) + tty-screen (0.8.2) + turbo_tests2 (3.2.3) parallel_tests (>= 3.3.0, < 6) rspec (>= 3.10) version_gem (~> 1.1, >= 1.1.14) - unicode-display_width (3.2.0) - unicode-emoji (~> 4.1) - unicode-emoji (4.2.0) + unicode-display_width (2.6.0) version_gem (1.1.14) webrick (1.9.2) yaml-converter (0.2.3) @@ -370,6 +400,9 @@ GEM ostruct rainbow yard + yard-lint (1.10.2) + yard (~> 0.9) + zeitwerk (~> 2.6) yard-relative_markdown_links (0.6.0) nokogiri (>= 1.14.3, < 2) yard-timekeeper (0.2.4) @@ -381,8 +414,13 @@ GEM zlib (3.2.3) PLATFORMS - x86_64-linux + aarch64-linux + aarch64-linux-gnu + aarch64-linux-musl + arm64-darwin + x86_64-darwin x86_64-linux-gnu + x86_64-linux-musl DEPENDENCIES addressable (>= 2.8, < 3) @@ -397,13 +435,13 @@ DEPENDENCIES gitmoji-regex (~> 2.0, >= 2.0.0) irb (~> 1.17) kettle-dev (~> 2.0, >= 2.2.25) - kettle-soup-cover (~> 3.0, >= 3.0.3) + kettle-soup-cover (~> 3.0, >= 3.0.5) kettle-test (~> 2.0, >= 2.0.9) kramdown (~> 2.5, >= 2.5.2) kramdown-parser-gfm (~> 1.1) markly-merge! mutex_m (~> 0.2) - nomono (~> 1.0, >= 1.0.8) + nomono (~> 1.1, >= 1.1.0) rake (~> 13.0) rbs (>= 3.0) rdoc (~> 6.11) @@ -426,6 +464,7 @@ DEPENDENCIES yard (~> 0.9, >= 0.9.45) yard-fence (~> 0.9, >= 0.9.6) yard-junk (~> 0.1, >= 0.1.0) + yard-lint (~> 1.10, >= 1.10.2) yard-relative_markdown_links (~> 0.6) yard-timekeeper (~> 0.2, >= 0.2.4) yard-yaml (~> 0.2, >= 0.2.3) @@ -462,15 +501,17 @@ CHECKSUMS erb (6.0.6) sha256=a9b24986700f5bf127c4f297c5403c3ca41b83b0a316c0cd09a096b56e644ae5 gem_bench (2.0.5) sha256=0dc0fb44a5a5eb7b2f5c1c68a5b0164d72007132822c012bac3abe976b199ead geom2d (0.4.1) sha256=ea0998ea90c4f2752e24fe13d85a4f89bee689d151316140ebcc6369bf634ed9 - gitmoji-regex (2.0.4) sha256=01410d3217940bd0e7b2299ec805245afe8d0f06a5d6d38f623d63a63c0ac34f + gitmoji-regex (2.0.6) sha256=d50649caccc8ad1b080f01e869f0909b135206d8b3ece2313ca31a9b0e39f14b hexapdf (1.9.1) sha256=2d1f6a3622e6bc2a70a707d4c3f3fa44f5552ecd9d899f6283abb07398a84884 io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc irb (1.18.0) sha256=de9454a0703a54704b9811a5ef31a60c86949fbf4013fcf244fabc7c775248e3 json (2.21.1) sha256=13a43df75d95641443f5702dff350f237164a9d811ff0f2c2800d4d980220583 - kettle-dev (2.3.9) sha256=03b2f72c6dda4d2c4401ee3c0c96853116c922766e7b5b04224434a49b571bfc + kettle-dev (2.4.5) sha256=3a451940796a671b7adc910db7c3da87899ebec7c5274921ca598345549ae7eb + kettle-gha-pins (0.3.1) sha256=b13a82a403af31880288fe65f85f2a24a93ae4740c0c7cbc15a35044d27aaa51 + kettle-ndjson (0.1.1) sha256=2d84314e8c911d6f560f2736e8f72019df6d811829674788ff33b3bbf518ed66 kettle-rb (0.1.5) sha256=0322a569860c86e70f90d5ebe72353b8720b7054c7efa9f9044857f5c972d29f - kettle-soup-cover (3.0.4) sha256=36d4df472362d2020d16411d7ce26ba2fe2a41fb8be64577ff9b5280acf99d86 - kettle-test (2.0.12) sha256=3a8e5c5f38db03a6f0a8896da6f3576d24e36f53796578c19aafaa2ba5a8ea52 + kettle-soup-cover (3.0.5) sha256=80abb42eb294fa5d3c8632c259a297c554fbc01902714461f3bf99a65190f5d0 + kettle-test (2.0.15) sha256=993b132ffec17fe82cc81c69f876e15d6eb610a4831df08dc01c0cce5c070caa kettle-wash (0.1.1) sha256=ae2e08b64c72c46ceed5ffa197ed859e85352f38ed0412fca2e18ce29b2dc4f9 kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa kramdown-parser-gfm (1.1.0) sha256=fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729 @@ -481,7 +522,12 @@ CHECKSUMS markly (0.16.0) sha256=6f70d79e385b1efc9e171f74c81628826259039fe6c778e03c3924c71dac5511 markly-merge (7.1.0) mutex_m (0.3.0) sha256=cfcb04ac16b69c4813777022fdceda24e9f798e48092a2b817eb4c0a782b0751 + nokogiri (1.19.4-aarch64-linux-gnu) sha256=1269fb644a6de405057a53dd5c762b1209b43ca7424f839454d3dbc677c31a8f + nokogiri (1.19.4-aarch64-linux-musl) sha256=35c65b9ce72b3bb03207bdbe7067915019dc18c1b9b59139684bd6690fdd01af + nokogiri (1.19.4-arm64-darwin) sha256=a46db9853286e6597b36ebc6953817d15acf3a299583eb3f89fdc6f91dd63527 + nokogiri (1.19.4-x86_64-darwin) sha256=7fd17057d3e1f00e9954a74b3cd76595d3d4a5ef233b7ed9599047c204f70551 nokogiri (1.19.4-x86_64-linux-gnu) sha256=379fae440b28915e3f19d752ce2dcf8465ed2b2fbefd2a7ca0dd497bc981a06a + nokogiri (1.19.4-x86_64-linux-musl) sha256=17dfb7c1fa194ae02fbf7c51a7afc8d278045ab3fdacfd86f91d02d7b274470b nomono (1.1.0) sha256=463dd4c79da02a855739a1b5483190d527b7868688be905e84abdb3449b32c88 openssl (4.0.2) sha256=1037ad2868ae58df9ad917891c0c0f9815a1172f6846d4bcdd508e4c2ee747c2 ostruct (0.6.3) sha256=95a2ed4a4bd1d190784e666b47b2d3f078e4a9efda2fccf18f84ddc6538ed912 @@ -509,8 +555,8 @@ CHECKSUMS rspec-core (3.13.6) sha256=a8823c6411667b60a8bca135364351dda34cd55e44ff94c4be4633b37d828b2d rspec-expectations (3.13.5) sha256=33a4d3a1d95060aea4c94e9f237030a8f9eae5615e9bd85718fe3a09e4b58836 rspec-mocks (3.13.8) sha256=086ad3d3d17533f4237643de0b5c42f04b66348c28bf6b9c2d3f4a3b01af1d47 - rspec-pending_for (0.1.21) sha256=c87fda50c20f8faca72d9cfa6a936abffd37860343f14aced95bbb29b8ae96bf - rspec-stubbed_env (1.0.6) sha256=6467a6eb0f72146d443ffb0c5a2a549d8812e59c04fbc81e03cd914ebf1f28dc + rspec-pending_for (0.1.22) sha256=49dc647473f8c8ea4ccc1a33813537dd94b913ef7ec5a8689896101eaacb71cf + rspec-stubbed_env (1.0.8) sha256=b23c4dd5e5d6a0cf0c5b4f6ed3f3678d78e4be9ec247ea9abf0669d20b490535 rspec-support (3.13.7) sha256=0640e5570872aafefd79867901deeeeb40b0c9875a36b983d85f54fb7381c47c rspec_junit_formatter (0.6.0) sha256=40dde674e6ae4e6cc0ff560da25497677e34fefd2338cc467a8972f602b62b15 rubocop (1.88.2) sha256=8def251c90cd955feb4daa3edc0ab56893250c4ce90ef81e6c80c03f9a939bbf @@ -536,37 +582,44 @@ CHECKSUMS ruby_engine (2.0.3) sha256=ca2ae7def8cfcdc2bfb6a186d36d5d59c8b403245dc0256c3802b767fa278aaa ruby_version (1.0.3) sha256=5930f9950746b7e6c973184398ee364ee7440b170fef7922b9f5cdf317f1ccb5 silent_stream (1.0.12) sha256=377c43aa10033fe90c33b39ea8cd97d79f2d1c4856df598efc56f3091f3ae782 - simplecov (1.0.2) sha256=c6459434efe4b948b46477cc2df2faa73ab365f83a33c7c17f81262f4f7f1244 + simplecov (1.0.3) sha256=38ef0514f16ae7562f0d0f4df02610071115103d301b6de7dacbcc000082e39b simplecov-cobertura (4.0.0) sha256=e4fb3159b1ecea545b44f5452a8611305323e78ad23eae8aed35924d072e01ea simplecov-console (0.9.5) sha256=b1108bcfff5f210143e2b8301698c367b01586f20d25a73e95475a5df6fc6ff6 simplecov-rcov (0.3.7) sha256=372f50bf6df6b6350b7d0c840f2f8bdabe021861a43c26877b747c9ac96139fc simplecov_lcov_formatter (0.9.0) sha256=4c1839bb31dcf7a8f7a6474c94ed228aa03b994e9dd5e1965e58b4121b049bed - sorbet-runtime (0.6.13351) sha256=f8fee17c6e3edf835dc6823d26afb9a7c8969c6710d1fabe2fb43f4e0c15c64f + sorbet-runtime (0.6.13363) sha256=f1f0b2e946fb3cd76b9d8e3d85459cdaf7f5466331a400cafcf008e508b6d2c3 standard (1.56.0) sha256=ae2af4d9669589162ac69ed5ef59dcf9f346d4afc81f7e62b84339310dfcb787 standard-custom (1.0.2) sha256=424adc84179a074f1a2a309bb9cf7cd6bfdb2b6541f20c6bf9436c0ba22a652b standard-performance (1.9.0) sha256=49483d31be448292951d80e5e67cdcb576c2502103c7b40aec6f1b6e9c88e3f2 standard-rspec (0.5.0) sha256=64d396524a65af47f5331b423d8cdd313e0267401647bb7892489ca89dad2973 standard-rubocop-lts (2.0.10) sha256=89708a505b7d8b24d2ac399a7520fcb9e764abc2ecb4289b631b5fe0e3b76617 - stone_checksums (1.0.6) sha256=c775f830513d6c6ab26e31d1a5fbecd4c4e39002663d4d9f8fa96e97990b5298 + stone_checksums (1.0.7) sha256=faf7a175da7c4f32777c5292a0128b06eec183b3cc3a0b382529b21800300626 stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1 + strings-ansi (0.2.0) sha256=90262d760ea4a94cc2ae8d58205277a343409c288cbe7c29416b1826bd511c88 strscan (3.1.8) sha256=aae2db611a225559f21ffbb71765c9a4e60fd262534a9ea84f4f11c7f32f679e terminal-table (4.0.0) sha256=f504793203f8251b2ea7c7068333053f0beeea26093ec9962e62ea79f94301d2 thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73 timecop (0.9.11) sha256=41284dc6e5041f2184f781ace766f942108c842f8d8c1386a26e6343decc7542 timecop-rspec (1.0.3) sha256=005f14841bb606dcaefb060e321b5388e2e59537742bee8b3a9a9a40e598fab9 - token-resolver (2.0.5) sha256=b852f924287ffb58a440856e862b056c8ad97e74b4b2526cee43e0771f40c25c + token-resolver (2.0.5) tree_haver (7.1.0) - tree_sitter_language_pack (1.13.3-x86_64-linux) sha256=1ffd045bd236ea54f58c5872ee66121d01033359c1f28f375b7fd4a4b5620cf9 + tree_sitter_language_pack (1.13.4-aarch64-linux) sha256=f7bb95fd59afda1e1b91a7b6ad4df244c585a863e94e4a0f492ef2336a5358b8 + tree_sitter_language_pack (1.13.4-arm64-darwin) sha256=2b48ded1f5feae3de20be1471aaa7c211601ac1c71ca6d4789cf31560a854132 + tree_sitter_language_pack (1.13.4-x86_64-darwin) sha256=8a2460d9029e7610b863d2481e2da0078f87b18bf8668070ccb5ecce71e272d8 + tree_sitter_language_pack (1.13.4-x86_64-linux) sha256=ae3ae718534088b2dc76bd93e7d093f11e8d19188bf47edfcd962df906e1af97 tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f - turbo_tests2 (3.2.0) sha256=8b35421548399d1923567b177970f42671c65695b93cdd134d78fbcbab85dff0 - unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42 - unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f + tty-cursor (0.7.1) sha256=79534185e6a777888d88628b14b6a1fdf5154a603f285f80b1753e1908e0bf48 + tty-progressbar (0.18.3) sha256=6cbb4260e55e74a9180d502143eb6a467d2c8e51bf5f3c9509fb5cacc3d4a5f6 + tty-screen (0.8.2) sha256=c090652115beae764336c28802d633f204fb84da93c6a968aa5d8e319e819b50 + turbo_tests2 (3.2.3) sha256=f77fc0799014c1d7890977e117cf39317bc4544de2c88a55149ed920b4cff942 + unicode-display_width (2.6.0) sha256=12279874bba6d5e4d2728cef814b19197dbb10d7a7837a869bab65da943b7f5a version_gem (1.1.14) sha256=6b7306c7e9416d06067561981ab3444e2cecb844f26cc325ae3c27b44cf85613 webrick (1.9.2) sha256=beb4a15fc474defed24a3bda4ffd88a490d517c9e4e6118c3edce59e45864131 yaml-converter (0.2.3) sha256=d35e69e547610d9e347672cc277fcb7d71dff3c53a942e66f82b1c64022ada72 yard (0.9.45) sha256=52e211493f7cb8a3ebf7e104a25a1e73937a3103092545d34cb88fafebb3dc51 yard-fence (0.9.6) sha256=3d1dbf4e3df462ac78b8bd2e01cf740a2de20168387c929aca31a0bcee490659 yard-junk (0.1.0) sha256=e85fe2ec1afa47313decd333447b53458cb1ed49b510b70015fdc3041a94bcdd + yard-lint (1.10.2) sha256=3e595709d088a8cc827e706a4146b447eb6a907ee375d06c11077369d00717f6 yard-relative_markdown_links (0.6.0) sha256=3e5ffa85cbad9bac70bee5421774b190fb25d3bdf489323a5b3534f647d1a70e yard-timekeeper (0.2.4) sha256=62f8d001d737c6e2ac688e7b37386f958dceb0f6aff9c909575e1bec8d20775a yard-yaml (0.2.3) sha256=fe5fef18819e1cbd05bb8f1b9e1baad6bf70c28125eb75b57bbf6397b0831812 diff --git a/gems/markly-merge/bin/kettle-gha-pins b/gems/markly-merge/bin/kettle-gha-pins new file mode 100755 index 000000000..c743cecac --- /dev/null +++ b/gems/markly-merge/bin/kettle-gha-pins @@ -0,0 +1,16 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# +# This file was generated by Bundler. +# +# The application 'kettle-gha-pins' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) + +require 'rubygems' +require 'bundler/setup' + +load Gem.bin_path('kettle-gha-pins', 'kettle-gha-pins') diff --git a/gems/markly-merge/gemfiles/modular/coverage.gemfile b/gems/markly-merge/gemfiles/modular/coverage.gemfile index b93014b6b..b4c26a504 100644 --- a/gems/markly-merge/gemfiles/modular/coverage.gemfile +++ b/gems/markly-merge/gemfiles/modular/coverage.gemfile @@ -7,7 +7,7 @@ if ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false').zero? # Coverage (remote/released) platform :mri do - gem 'kettle-soup-cover', '~> 3.0', '>= 3.0.3', require: false + gem 'kettle-soup-cover', '~> 3.0', '>= 3.0.5', require: false end else eval_gemfile 'coverage_local.gemfile' diff --git a/gems/markly-merge/gemfiles/modular/coverage_local.gemfile b/gems/markly-merge/gemfiles/modular/coverage_local.gemfile index 7def4540e..298c8afd7 100644 --- a/gems/markly-merge/gemfiles/modular/coverage_local.gemfile +++ b/gems/markly-merge/gemfiles/modular/coverage_local.gemfile @@ -17,7 +17,8 @@ platform :mri do path_env: 'KETTLE_DEV_DEV', vendored_gems_env: 'VENDORED_GEMS', vendor_gem_dir_env: 'VENDOR_GEM_DIR', - debug_env: 'KETTLE_DEV_DEBUG' + debug_env: 'KETTLE_DEV_DEBUG', + root: %w[src my kettle-dev] ) if ENV.fetch('GALTZO_FLOSS_DEV', 'false').casecmp('false') != 0 diff --git a/gems/markly-merge/gemfiles/modular/documentation.gemfile b/gems/markly-merge/gemfiles/modular/documentation.gemfile index 9d4535f12..d0f4d4a76 100644 --- a/gems/markly-merge/gemfiles/modular/documentation.gemfile +++ b/gems/markly-merge/gemfiles/modular/documentation.gemfile @@ -12,6 +12,7 @@ gem 'kramdown-parser-gfm', '~> 1.1', require: false # Ruby >= 2.3 gem 'yaml-converter', '~> 0.2', '>= 0.2.3', require: false # Ruby >= 3.2 gem 'yard', '~> 0.9', '>= 0.9.45', require: false gem 'yard-junk', '~> 0.1', '>= 0.1.0', require: false # Ruby >= 3.1 +gem 'yard-lint', '~> 1.10', '>= 1.10.2', require: false # Ruby >= 3.2 gem 'yard-relative_markdown_links', '~> 0.6', require: false if ENV.fetch('GALTZO_FLOSS_DEV', 'false').casecmp('false').zero? diff --git a/gems/markly-merge/gemfiles/modular/templating.gemfile b/gems/markly-merge/gemfiles/modular/templating.gemfile index a672de184..a7e6c1f06 100644 --- a/gems/markly-merge/gemfiles/modular/templating.gemfile +++ b/gems/markly-merge/gemfiles/modular/templating.gemfile @@ -12,7 +12,7 @@ end if kettle_remote # Template/plugin checks for released installs. - gem 'kettle-drift', '~> 1.0', '>= 1.0.6', require: false + gem 'kettle-drift', '~> 1.0', '>= 1.0.7', require: false end # Set STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local development with path-based dependencies. diff --git a/gems/markly-merge/gemfiles/modular/templating_local.gemfile b/gems/markly-merge/gemfiles/modular/templating_local.gemfile index 40d3affae..743c3d41d 100644 --- a/gems/markly-merge/gemfiles/modular/templating_local.gemfile +++ b/gems/markly-merge/gemfiles/modular/templating_local.gemfile @@ -65,7 +65,8 @@ platform :mri do path_env: 'KETTLE_DEV_DEV', vendored_gems_env: 'VENDORED_GEMS', vendor_gem_dir_env: 'VENDOR_GEM_DIR', - debug_env: 'KETTLE_DEV_DEBUG' + debug_env: 'KETTLE_DEV_DEBUG', + root: %w[src my kettle-dev] ) end end diff --git a/gems/markly-merge/lib/markly/merge/version.rb b/gems/markly-merge/lib/markly/merge/version.rb index 3bfd8e9b0..9c7d0cf52 100644 --- a/gems/markly-merge/lib/markly/merge/version.rb +++ b/gems/markly-merge/lib/markly/merge/version.rb @@ -2,9 +2,12 @@ module Markly module Merge + # Version namespace for this gem. module Version + # Current gem version. VERSION = '7.1.0' end + # Current gem version exposed at the traditional constant location. VERSION = Version::VERSION # Traditional Constant Location end end diff --git a/gems/parslet-toml-merge/.structuredmerge/kettle-jem.lock b/gems/parslet-toml-merge/.structuredmerge/kettle-jem.lock new file mode 100644 index 000000000..758472a71 --- /dev/null +++ b/gems/parslet-toml-merge/.structuredmerge/kettle-jem.lock @@ -0,0 +1,527 @@ +--- +version: 1 +template_state: + version: 7.1.0 + applied_at: '2026-07-26' + changelog_replay: + last_entry_key: kettle-jem-template-20260726-002 + last_entry_date: '2026-07-26' + checksums: + ".aiignore.example": 48a5dfdd93afd1a15fdce39cc28ca9920263f00018b0968ab031fa744521e5ce + ".config/mise/env.sh": aeea5a2ab489ba6e5467ae8de6e386ec8c8fe4ff31a044e69d0cd6a092dd6654 + ".devcontainer/apt-install/devcontainer-feature.json.example": 273a07f9d3926e1b6287c37709a469ee05d724cfedae62ad3b0cd8c09befc9ec + ".devcontainer/apt-install/install.sh.example": b61e020b60ca172bb7b658e63c9cd4342e49bda0531a6b19b36475e515ad20b0 + ".devcontainer/devcontainer.json.example": 4a80d471379b9720cc65cc89543cbbc0a7be87b188a818160296577c4e87606f + ".devcontainer/scripts/setup-tree-sitter.sh.example": c34f48d7bac8561fb780c4c7a81cec5004c3ac0edc11f229799ec9a4e3eccd54 + ".env.local.example": 35cb867e8bacb75252a85c29f78899b36d0d1843511ae1ba1fbc7da863b128b3 + ".envrc.example": b7232f4bae0fb399cc9c9cdc4a5eb694bd69623aeeadcbab18c9990e443040a1 + ".envrc.no-osc.example": b7232f4bae0fb399cc9c9cdc4a5eb694bd69623aeeadcbab18c9990e443040a1 + ".gemrc.example": 77b1c36ae6f91bedf08b99e662a971b02f7e66e0d65267805d068d30ff118aba + ".git-hooks/commit-msg.example": d858575bf70d6175fdd7656e9ba0b41672de3fb49163181efe3fbc9e40306024 + ".git-hooks/commit-subjects-goalie.txt.example": bb1179c8911af8afeb1f9a604b3de789d4a4b33d9d4a7743b3145998c15b0a94 + ".git-hooks/footer-template.erb.txt.example": 70ed3616ee04a4062126f53892cc255e7aa2b66741fe22d6b372f7df99676718 + ".git-hooks/prepare-commit-msg.example": 35266ead46a6385d20eeff7ec64afedef33a2db18d1238b8662a1bc758f05335 + ".github/.codecov.yml.example": d6ef3208a90eca74f79d8ff4e5ae21a915562b075cb17978b1eaadc231dd4e85 + ".github/FUNDING.yml.example": fd27dff7db58f4e8a39c35ccb60e39422517038501a5f2a99ef2aaeea2d1fa5d + ".github/FUNDING.yml.no-osc.example": 8f1a867b1921b3dec1c63f7a7cd629362c1fb1ad0d1052494b48ba746b0fc5c6 + ".github/copilot_instructions.md.example": f5c5791df013e89e170fd436379b14e251d0ff4cb6b330a6d961e80c9071f2d3 + ".github/dependabot.yml.example": db84d1c13f64100d2f48212c022f0d985e9061ca76c36d82e7057fd845ecd528 + ".github/workflows/auto-assign.yml.example": 57b8159a15bf49946506e1b624934feed6a1cc8f71ad68968323c87acac56c67 + ".github/workflows/coverage.yml.example": 524ef90e0fd2ca0b846c464197d8d43cd6a57834303c9526ea0bd277f2beb3e1 + ".github/workflows/current.yml.example": dbc82e7593804c05d2c217d5c02d79d5480b5a0d1e04eea99b7235f35f520216 + ".github/workflows/dep-heads.yml.example": d94122f3246e17774fa015dde8d9a5772a66e54f817d44e62716f6a61d899050 + ".github/workflows/dependency-review.yml.example": a895d52257a7112d796fabf349ced1079bed93e81e3aa9cb088f9af3f44d1e5f + ".github/workflows/discord-notifier.yml.example": f9cc83a87058bd420426444510a1dd1520fd7cc15af50832ad52c25c5766be94 + ".github/workflows/framework-ci.yml.example": 112ef6178fcf115fe9e0a248ec6cb4af748ce89142fd7dba30e9abb6ebdc17be + ".github/workflows/heads.yml.example": aa55cf9bb4ae35fe126384003e8af4b91e685bcf370263b3710bd429f6c44343 + ".github/workflows/jruby-10.0.yml.example": 0eaf6d10c304de606684d420bbd88cfc90fe9d139a56773e011c6abaa6c5fc91 + ".github/workflows/jruby-9.1.yml.example": 9062f9de8843da1f8c4da8f991bbd24f9540c63927deaf311649f3088a672d5b + ".github/workflows/jruby-9.2.yml.example": f330363fc0af7dd0be24c140c919c07737a3168c5647012e34ba0c36634005e5 + ".github/workflows/jruby-9.3.yml.example": 3b26b3a978d0018f01e6d87651936f2e92fcb58d62bcdf11822eca3c2656d303 + ".github/workflows/jruby-9.4.yml.example": a830b92838a09b9316a81745b48ff35bed9461783154fc6d0e52df0d6aa319f3 + ".github/workflows/jruby.yml.example": f10f779cd3be37d2ffa593d9a83ba68a8684bb849ed1c4d9ae41706ff12571e1 + ".github/workflows/license-eye.yml.example": 23db5d6ee9b5382de1f2042642219d65214e09c3f975c418d4dec4d46375036c + ".github/workflows/locked_deps.yml.example": c7eaa20cc7d7de6209e576274e592ffb4838177ae6ab56096b2439d0fa1bc31c + ".github/workflows/opencollective.yml.example": fe7d8d346f9ab055b6779abf62972291460d05275e2c4d191e291e8cd73b0e6b + ".github/workflows/ruby-2.3.yml.example": 90474f1a462edc877983b91dd40d942e82b28262f1afdca74cddcdd52d7e8c26 + ".github/workflows/ruby-2.4.yml.example": fe84af4efef6934d7ff63efa2a4c85994f2ea1887f61b1ab5d30a21365429ec9 + ".github/workflows/ruby-2.5.yml.example": c40db157514168442311191ebc88853dfb36447a90171a73f42d435e92d02f05 + ".github/workflows/ruby-2.6.yml.example": 87bb8537d0047217651a327353df670fed3ea9e4a5350e965ed80af9ce32d9d3 + ".github/workflows/ruby-2.7.yml.example": 5650ec41bc67553457019a772a3343578872749d21268d5e7fb1715ebf4e2351 + ".github/workflows/ruby-3.0.yml.example": f9d7c7dfc6eaea1ca12c92e0b98b4ba8fed5726d26459bb410ab9812a741e5b9 + ".github/workflows/ruby-3.1.yml.example": e44879cd3ea47d00e44e573745d7f95fc1a561a9c1d69d72529d0c07294bd26e + ".github/workflows/ruby-3.2.yml.example": c28b9179778157e6b4807a775968840ff1c6bf2fd847ce1ce694b9a77df42f6e + ".github/workflows/ruby-3.3.yml.example": 033e4f0ed7ded17f5d13fde6674ec9fd555cfe58c11f57f7dc2f1fee21c718b6 + ".github/workflows/ruby-3.4.yml.example": 474a96468f101b8fddac4cecaa0629f28d5ceec0c784329affdc471eb1e3e889 + ".github/workflows/style.yml.example": dea7243a91dc164a172e90b7933de58cdd353d7e5df1beac22cec63125edc086 + ".github/workflows/templating.yml.example": 327b933509e1ade4d53df5756f6407028b479c51847775db494fb9c25e66ce5a + ".github/workflows/truffle.yml.example": 56fa53dc206976c81db7cc3530f4d19d89ea5859c1245492e5a5ecb9304de63e + ".github/workflows/truffleruby-22.3.yml.example": d6773529e6961039b5cc4a145c77623881aa3857d875bbb415ca0f8147166d7a + ".github/workflows/truffleruby-23.0.yml.example": abcd23a18d748528f7558d4ab7bc4830796cb686ca7371f67a8ddaf6d0362d72 + ".github/workflows/truffleruby-23.1.yml.example": 11af8a3f0823ed3ab17e759d81b8a4551eb7af8096ce0b5a9501fd83cada1cd2 + ".github/workflows/truffleruby-24.2.yml.example": 2c4ff82eeaa3bdb19391f04cd2f41b07733986a053d5ac8498176fef5f890e5e + ".github/workflows/truffleruby-25.0.yml.example": 42cdfdcd21c7b3bb1b87c22c2bc7a98135a442742df5f9a45e2b4e03838c1e7f + ".github/workflows/truffleruby-33.0.yml.example": 2a45e428ca13dac56ee75526b80eac477b61697ca06c94680e1eb05d21dbc25a + ".github/workflows/unlocked_deps.yml.example": 15f5ccbe811aa5a8650c2aa69b32f4f6a24d5f8bd3aae2dcbec92cbe3a51f0a7 + ".gitignore.example": 14864a0c88be3f8c122ab3032efeb782ba5e035013231038acf746a400437a3e + ".gitlab-ci.yml.example": ef64afa9855ebb59bbc87446fa9533238d3ce180966ceb19649a7f165715b92b + ".idea/.gitignore.example": b44a5aa16bf9fe5635558af347454b05a76d600084308a9f43d4d0b54789ecab + ".licenserc.yaml.example": 8787fa7bddce911f8ba47bda3eb6ad9786b6650d5d94786723e88773098ed37d + ".opencollective.yml.example": 9ad9b83fe54f0bddac7fb614575585d98f78df0e181ee70a7acd0168d26e3142 + ".qlty/qlty.toml.example": cf3d750d2328f6c057b08b7ce3d7ec00a4056c7f0eedda59af321d6caca03553 + ".rspec.example": 40d3f3ff435b0f9e5863772a95df8725b939c2dc11aead2bca68dcd6d85a9788 + ".rubocop.example": 591e4b45430e85b0dd460cc11c70650912fa2734988420b934109d06a749344f + ".rubocop.yml.example": 47f9a031022db67c964dd76ee2e8dfee21295a1877ca4d6233d3de39d114af73 + ".rubocop_rspec.yml.example": 288ad75e7eb14d87d80fafe6f7272217be5c57547536ee56c780a7d10ac7ec74 + ".simplecov.example": ffc76492effe905cc65797389fc8050fda136652ac078a80303cd084b349ef28 + ".structuredmerge/git-drivers.toml.example": 9d241a44c9edffcdbd3da018fa188a238089c3d1635040924df594a6929a4f97 + ".structuredmerge/kettle-jem.yml.example": 954cfc9e35cd20e46376426675e985bf8a0de19ff5069bf7be24b574837be615 + ".yard-lint.yml.example": 90def46867c9436b4e177c47d91fc8165f4602e335715aecc39f5587ae20b55b + ".yardignore.example": 821f453c609df7d46145d675424b39dfbe6dfdca8edac5f367b85fff48502455 + ".yardopts.example": 6fd6f2701713096a8a9ea095c213bbc68eeef37797c4754d97837e3229a3a5f6 + AGENTS.md.example: aec69512cbe17004660ac0abfabb9ec91a5c51c2cd82c10f30f08886f9bf64a7 + AGPL-3.0-only.md.example: d8a6cc31abc16b6748c7a21f21611f5a1ec33f67d22ca23d7da1c19b95496bee + Appraisal.root.gemfile.example: 8724e3f6faea995be655ac49369bec64a70710112b1f65707fa38f1fd2fd3254 + Appraisals.example: 9cb1abcfb1a0bd6d859ca0705efb874dbe546754c8c71f9f95025ff6817f1471 + Big-Time-Public-License.md.example: b0c02a112c9eee0ed69f05fd8f22277a2f8bc62d447b6cb75d6df560e05bf431 + CHANGELOG.md.example: 73459e50dad34d84db88844c993d975097557bdf5229e101b0d1339de6f98ffc + CHANGELOG.transfer.md: 9c201849117c9d4234724c4599643dd42fdce5f0a673a1abee97b97e556c301b + CITATION.cff.example: e404ea0a7919d78a83d53d80e211d17b9663576aa606583b709795dc023fd75c + CODE_OF_CONDUCT.md.example: f1ad532f1860f73ef774c6b27a26d41f4bc1cb8813034f5957487766ebb0986b + CONTRIBUTING.md.example: 63d339848c615f2c181d6b0565c42e56371eedb66f310d146cb7da297f7bc641 + FUNDING.md.example: 455bbb2b55d934283a2e7c16b59c321116c53310a85a718b7cf8ca44e9e3721e + FUNDING.md.no-osc.example: 05a85d5faf22d5ea5721622d242080447cf318d3277d9d529e438be1c9d5a351 + Gemfile.example: 6b2d72ec8a630cce515b7b528022071b13eee863c3164763df03792a5004345a + IRP.md.example: 85d8887d9b0e77f7fa9835ca5b9be31f586fdc94764ed1819af2a9a7fec98e96 + LICENSE.md.example: 120edf5f23173ebbdb5ad384ffc2e9b97e62aa6d0e61b733c003bd4db1b08276 + MIT.md.example: 365fce2a82f9d258ada9a527accfd5754b406ee9cdd8f8ed86bbec64b8c42ab2 + PolyForm-Noncommercial-1.0.0.md.example: ffcca38841adb694b6f380647e15f17c446a4d1656fed51a1e2041d064c94cc8 + PolyForm-Small-Business-1.0.0.md.example: 2f81e317d36f83a199c9fa10bcb250775fd90510303eaeb15aac2d8f0c1fc2d6 + README.md.example: 452446a44d120df26cde68fbc7aff086fa815769c989b994ebc1432ea927974f + REEK: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 + RUBOCOP.md.example: c09e5533ccc59b70a2efa05c99f66e521137c1053d3c12eb43509cebd5b68b0e + Rakefile.example: 569803e726b07ea26267fec6891367a3096a0dff3c266269a7081d36afe496af + SECURITY.md.example: ee9411aa85f36d88363fdaea7a1baea4362b6ec112cf2688e711b05de1d3144c + bin/setup.example: 0ac35089c95a91d8973fe7a318bf9fd98b9f8e00db92c5d9ca6cd858abb8d41b + certs/pboling.pem.example: 18956f60643666cc181e2743b3b3691bec08c5326f514f60af54d0cdb9ebc554 + gem.gemspec.example: 9989cc8a1cd125586ea807eaed549eaecc044711d31f17dd7bac2a0815b28b1a + gemfiles/modular/benchmark/r4/v0.5.gemfile.example: 5bc3190090ae456df1a8cce28dd47a7fb293495f6d845ec7e53a7a8b50f14ae1 + gemfiles/modular/benchmark/vHEAD.gemfile.example: ca6cd52c55c3082759c6ddc97638970f12d953aec1822470823d316086aa6e25 + gemfiles/modular/cgi/r4/v0.5.gemfile.example: c2d14a39377a2435419ceaca22a3421ebd899e9cba943df8a90b576a33624870 + gemfiles/modular/cgi/vHEAD.gemfile.example: 9ff3dc789b3279642876c0aad4b0094c1139bb8fbbf36daab804d3b2b3a60b43 + gemfiles/modular/coverage.gemfile.example: 915fc161ad574fdbc071bc733b69b27e94bd7a4c68cc4f58da267c9a0987f3e8 + gemfiles/modular/coverage_local.gemfile.example: 928d5f260d7b119c038baa56da9fb78dd524dee613aea33ab72894bbce5c506e + gemfiles/modular/debug.gemfile.example: 0a508bfb02e51b75394b43f4f09d98174dac36ead41cba09c1f730671a1f5905 + gemfiles/modular/documentation.gemfile.example: e15f51e4d14ad2216b6de16c323787945bd225073d70a78420f4c99c98c1ecd1 + gemfiles/modular/documentation_local.gemfile.example: 84a20f5d4b0feb94c2cf2f7a8dce8f682f1483498e41484c2b447a5661fd1870 + gemfiles/modular/erb/r2.3/default.gemfile.example: 9da0d08fb6a299b965c37fe85efcaebd9eb0a82b2ea35fdc157c41bd75431396 + gemfiles/modular/erb/r2.6/v2.2.gemfile.example: '01787cbdf7136c0d75cc7b734c6bb3d2ef6c70d6c1c50e7d0ad2112c0f8ef8e7' + gemfiles/modular/erb/r2/v3.0.gemfile.example: 3793e7dc9ef23a7ccd893d48cbba092fd27594c63e65cca011cc658218425670 + gemfiles/modular/erb/r3.1/v4.0.gemfile.example: bdf71ddcfe5001aab7d71b10a645a785928957ef7bae61d49307eb7f712279f3 + gemfiles/modular/erb/r3/v5.0.gemfile.example: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + gemfiles/modular/erb/r4/v5.0.gemfile.example: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + gemfiles/modular/erb/vHEAD.gemfile.example: ad6f104a49e80e0cf625440e3dc816343fe7e2f037fc4971df75e7bb4305c683 + gemfiles/modular/json/truffleruby_22_3.gemfile.example: 249c12eacbe90f9d0d2e81e7a62c4c7e9102e504ededcda4ecf660cb3bb68be4 + gemfiles/modular/json/truffleruby_23_0.gemfile.example: 66aa010567f7afa1af8244a74c3c88ecaaf84dc87b6a25180691bb480d02ed28 + gemfiles/modular/json/truffleruby_23_1.gemfile.example: '080fcbdaf2bec73cad40832a3d51eebb380af789917b96f493d1460b0dd6361d' + gemfiles/modular/mutex_m/r2.4/v0.1.gemfile.example: '09728bdc10807b3ca9dd3b9f12986acbe8c40ac08ada438bcfd49cd69445c650' + gemfiles/modular/mutex_m/r2/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/r3/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/r4/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/vHEAD.gemfile.example: '08018641c97f894788fa91b462da504ab2237213d18d95404136c393274ae3cb' + gemfiles/modular/optional.gemfile.example: b45eb8ecde2902441c02b2f01d4aa8f79bff75c853ef92555c3201ee798d9e87 + gemfiles/modular/recording/r2.3/recording.gemfile.example: 154da539583c51ca78ff8affa7a7caaf7f354d321b5e748beb64de61ff72f80a + gemfiles/modular/recording/r2.4/recording.gemfile.example: 6d69381eb2f8be681c72e7a5a8b5d6ec6ee586da8ce51b9b39d845d2a87e4ecf + gemfiles/modular/recording/r2.5/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/r3/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/r4/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/vHEAD.gemfile.example: 7480fd116e9671972a2735d1d97050a4fd5754aa7abfab3d115bf9bebbca038c + gemfiles/modular/rspec.gemfile.example: d043f5c9344f6435edb4607c5adaf42c78e7fb6b8b6726007de2bbedefb376c3 + gemfiles/modular/runtime_heads.gemfile.example: f163201999bf68a942b1e5bcea506bfc4b9c59711ff502091eb215d5d5f8f658 + gemfiles/modular/shunted.gemfile.example: a54a86124eff06163497462012704f62a691daa224cebeac605cdd14cffacfbe + gemfiles/modular/stringio/r2.4/v0.0.2.gemfile.example: 6425ebcd70b2e782f4c1d9074f8685c1e93ca7bf371728ef7ebbc8b5ebdf491a + gemfiles/modular/stringio/r2/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/r3/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/r4/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/vHEAD.gemfile.example: e0497ab6dad9667b22725485b781e9d99349a079250eb29cb125d58f01f4a5be + gemfiles/modular/style.gemfile.example: a15db732f566d958c2459ef549ae3877d984df3d205116e714284d1fe4f9b068 + gemfiles/modular/style_local.gemfile.example: '0083605323d23879dc7223f0198e9f1db24a25fa38730c4dbcc71c7a8a4c307f' + gemfiles/modular/templating.gemfile.example: 6cedc39529daa9aac3a4cf13fe31a628b62a4a2428f5c4f8657c5a2fa027bb35 + gemfiles/modular/templating_local.gemfile.example: 16c0b51fd46b86db09268c8485b1d5a528e5f962b593f8ae7521b15209f7d1a5 + gemfiles/modular/webrick/r4/v1.9.gemfile.example: 1ee940ff54d5ca3ce7fcff0d82ee9553386979656b9e220d5be5404d0991d5ea + gemfiles/modular/webrick/vHEAD.gemfile.example: da545f591af987648ffbaba181707480a38dfb375db7d289617986ec2c2ca23b + gemfiles/modular/x_std_libs.gemfile.example: e3917e90717d7f9f4393d847549a78c53de7f6c8de52a7f590b34b515fd6111a + gemfiles/modular/x_std_libs/r2.3/libs.gemfile.example: 379ac2a3698615789e39dc18a961b9c793b2cc594856bb3163524a99fd4ac86f + gemfiles/modular/x_std_libs/r2.4/libs.gemfile.example: ccad8f592943481317c082ce8d340316b9e90a52463c8c1eea5c5109b23e8c3d + gemfiles/modular/x_std_libs/r2.6/libs.gemfile.example: 9af20396f404a32bf76d8999c7fdd112f0282ba331f71100ab093663b2ab5670 + gemfiles/modular/x_std_libs/r2/libs.gemfile.example: e80ec8ad06cb1b31ac982bc25cf7696987fca131aa1001eaefd0bf5cd379c273 + gemfiles/modular/x_std_libs/r3.1/libs.gemfile.example: 38068bd6a0f5d02918eb286af9bdbdf0c7cf7cf026486b9fd157b541b6153d58 + gemfiles/modular/x_std_libs/r3/libs.gemfile.example: 546f8849f4267bb19aa10ff0de40be30957197f229e6887847181ea9127b2650 + gemfiles/modular/x_std_libs/r4/libs.gemfile.example: 8c2582eaa218d216b98c86c933465295c8b4e43f3251ea388b9eaf6e471f8da6 + gemfiles/modular/x_std_libs/vHEAD.gemfile.example: d3133ec4c0638363a7fb025d19be7e95a615fd61c35ddb8d17f2280ee74a7486 + lib/gem/version.rb.example: 15e219ac3a928b5580035f891e415551213175020f1131f6e7ca0ccd55a1b2d6 + mise.toml.example: b2eb06f7daaf0c3916bba155f463e166bd1de218637ba82e636c528c077c8d6d + mise.toml.no-osc.example: 35ec90d3c67b74e0014876dccad14f5883fdad88036f6b0cf5d29ea181e132ac + parsers.toml.example: f0538ae7ad8596be2dc39b3ea663f1164dec21fb0457233c1885097e774aff6f + readme/partials/basic_usage.md.example: adaa8f9de9768d1f29cb15d957404004715e7687db68c29b121d6467db13158a + readme/partials/configuration.md.example: 5ad82bc7eaf05015d31cea9265173718abc1d92729b52e3856c8366aa54184e8 + readme/partials/synopsis.md.example: 2b7383f8261086da0995fbf2c10017b3f162723b32c324ae8c0e1c1a8d1c79ef + shim/.github/workflows/current.yml.example: c2a2a2053f2726276bb8571c8a76a4b97bcce6cd54bdca01cba63d713c3a0e2f + shim/.rspec.example: 0e3a2a1587779efc3eae8fe718a3480272fbdfb3f1f6c2f9c3901f6fd81b2cce + shim/.structuredmerge/kettle-jem.yml.example: 03faae6cfda3947ef8489008b4836aad3ca280e94ddf9d08ef733071d7daa167 + shim/CHANGELOG.md.example: 2c098802b9971c51796e34067d061adbc31fa443df96be8a1fc71fc84c262d0e + shim/Gemfile.example: 9583b19e04d7ab6f5b3ea7ebb0c5d24e6a71ae5d74404a510aa979642248ba34 + shim/README.md.example: 3a2f7211b7f92a1dfae5e523b8e34b051a3d8af942144b05286eca0b3c8f6fbe + shim/Rakefile.example: 572c94da7052083b39b62a6600785419e314a109efd7a3d8c3a96eb77ad34fd1 + shim/gem.gemspec.example: cabca9717af1a18991db1de856900494e2771b044f1d5bfd2ad71b2ed4a1367d + shim/lib/compat_require.rb.example: 94ee85e353a3ca08c8a35c9063d4ff789214ea594c7f803f6cf09d7142f48379 + shim/lib/entrypoint.rb.example: dd57613520daca01d6f6bcaa9b83b00ff74505240dc04b84ceb686df3c0539d7 + shim/lib/version.rb.example: 15e219ac3a928b5580035f891e415551213175020f1131f6e7ca0ccd55a1b2d6 + shim/spec/shim_spec.rb.example: '060013019bf39b8dc267169df83752661d02c7ad890b65a99a1d97137938edfd' + shim/spec/spec_helper.rb.example: 88e2ab0bd8888022a68e856e04f61053e238e54f51b428b386aaebf93ae8ad83 + sig/gem.rbs.example: 47a4f7e524cc6f773875b6c08691ca4d65c2b14618abd5b9b91055ae5b248cec + spec/spec_helper.rb.example: 0c8119bd75b90f3a2403789b68b539fd19952370051297b1807596e201ef4813 +files: + ".simplecov": + recipe: template_source_application_simplecov + action: write + dest_sha256: dc2a72905392626eb688c426ff1b4300ff7cd72659075137b0a245a2d74c643d + input_fingerprint: 66fe3230ecb93997a1890510daedf6f4ef8a377c7342ebd72e9508781b133bd2 + template_sources: + - ".simplecov.example" + AGPL-3.0-only.md: + recipe: template_source_application_AGPL_3_0_only_md + action: write + dest_sha256: d8a6cc31abc16b6748c7a21f21611f5a1ec33f67d22ca23d7da1c19b95496bee + input_fingerprint: 00023bd79abdcb847b1be3114004dfadca61321cd666fb20ce35779ad135ef57 + template_sources: + - AGPL-3.0-only.md.example + Gemfile: + recipe: template_source_application_Gemfile + action: write + dest_sha256: eb0490fd1650911db6c542e5e8b1f1966d77cbf28f1e6eb3c4944055d71a5bf2 + input_fingerprint: fb143a82bffbf00b766ea72bcf102a7970e5f771f441cfb4c80b95f81bef57d8 + template_sources: + - Gemfile.example + LICENSE.md: + recipe: template_source_application_LICENSE_md + action: write + dest_sha256: f6188bfd474a636d2a526420ebb411250faa447d94c9b9ccee097128ce4101b5 + input_fingerprint: 66eff8ad71478e20601b472751bb1ea7b700b4bcfe25ed279f1d56eae1e704f2 + template_sources: + - LICENSE.md.example + PolyForm-Small-Business-1.0.0.md: + recipe: template_source_application_PolyForm_Small_Business_1_0_0_md + action: write + dest_sha256: 2f81e317d36f83a199c9fa10bcb250775fd90510303eaeb15aac2d8f0c1fc2d6 + input_fingerprint: cf825bc22db3d2f574ce135cabd1521ae5a7c8dff4c37c68ed4c4777aaee8445 + template_sources: + - PolyForm-Small-Business-1.0.0.md.example + README.md: + recipe: template_source_application_README_md + action: write + dest_sha256: 6ddeb32b32a329e5e164ccf3c87890fc9ec68837654548f0e5eb0980c72f83ed + input_fingerprint: 121c3c23210957d22e3c92efe2dba7df4672ec40e267908ed6c5353a938707e0 + template_sources: + - README.md.example + certs/pboling.pem: + recipe: template_source_application_certs_pboling_pem + action: write + dest_sha256: 18956f60643666cc181e2743b3b3691bec08c5326f514f60af54d0cdb9ebc554 + input_fingerprint: d88ce4d966a4bf6eb97889cef74e876b1b6c980a38b7051d64a91a83e7d280bc + template_sources: + - certs/pboling.pem.example + gemfiles/modular/benchmark/r4/v0.5.gemfile: + recipe: template_source_application_gemfiles_modular_benchmark_r4_v0_5_gemfile + action: write + dest_sha256: 5bc3190090ae456df1a8cce28dd47a7fb293495f6d845ec7e53a7a8b50f14ae1 + input_fingerprint: 363c459671173ad704fa8eff2bf05a68e093040f4f6511c9df68d2f5cad7a188 + template_sources: + - gemfiles/modular/benchmark/r4/v0.5.gemfile.example + gemfiles/modular/benchmark/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_benchmark_vHEAD_gemfile + action: write + dest_sha256: ca6cd52c55c3082759c6ddc97638970f12d953aec1822470823d316086aa6e25 + input_fingerprint: 9580f7020ea0e7f6b5d55a39fc3a8d00f808664fb7e87a779bd82e585c76c0cd + template_sources: + - gemfiles/modular/benchmark/vHEAD.gemfile.example + gemfiles/modular/cgi/r4/v0.5.gemfile: + recipe: template_source_application_gemfiles_modular_cgi_r4_v0_5_gemfile + action: write + dest_sha256: c2d14a39377a2435419ceaca22a3421ebd899e9cba943df8a90b576a33624870 + input_fingerprint: 1d471d2ef958e088d322a29264f4b2fe65238d0690a3a68a23c147e85cf1e516 + template_sources: + - gemfiles/modular/cgi/r4/v0.5.gemfile.example + gemfiles/modular/cgi/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_cgi_vHEAD_gemfile + action: write + dest_sha256: 9ff3dc789b3279642876c0aad4b0094c1139bb8fbbf36daab804d3b2b3a60b43 + input_fingerprint: f76c3096516d7ca4ec97042fcaad95b89c7af0d5a73292c52d65e9e8883eb671 + template_sources: + - gemfiles/modular/cgi/vHEAD.gemfile.example + gemfiles/modular/coverage.gemfile: + recipe: template_source_application_gemfiles_modular_coverage_gemfile + action: write + dest_sha256: 915fc161ad574fdbc071bc733b69b27e94bd7a4c68cc4f58da267c9a0987f3e8 + input_fingerprint: cae5436284de2a5da30f8c55914b8509bded377a85d9d59818c06d4c452fd551 + template_sources: + - gemfiles/modular/coverage.gemfile.example + gemfiles/modular/coverage_local.gemfile: + recipe: template_source_application_gemfiles_modular_coverage_local_gemfile + action: write + dest_sha256: 156cb6c75bc86a1b3c88ba519ad507dba1c9e98704eceb25449541ffa9e18baa + input_fingerprint: 9145fd536cc166ca6e6f61a7e06d757132b4315b14bc8c02a5c6c9cc439eb834 + template_sources: + - gemfiles/modular/coverage_local.gemfile.example + gemfiles/modular/debug.gemfile: + recipe: template_source_application_gemfiles_modular_debug_gemfile + action: write + dest_sha256: 0a508bfb02e51b75394b43f4f09d98174dac36ead41cba09c1f730671a1f5905 + input_fingerprint: 78dd08ac1ff9a3951779fc36566338e69971358e678fab496f5276537a2d3a2c + template_sources: + - gemfiles/modular/debug.gemfile.example + gemfiles/modular/documentation.gemfile: + recipe: template_source_application_gemfiles_modular_documentation_gemfile + action: write + dest_sha256: e15f51e4d14ad2216b6de16c323787945bd225073d70a78420f4c99c98c1ecd1 + input_fingerprint: 35ec4b398661c1462010022594ddc0827a8ea9e22e6e92a1b3f791934079980e + template_sources: + - gemfiles/modular/documentation.gemfile.example + gemfiles/modular/documentation_local.gemfile: + recipe: template_source_application_gemfiles_modular_documentation_local_gemfile + action: write + dest_sha256: 9568f14fd58e52c1a758ed51678c53aa4d4d08df0fdade99c85df7b3fda29708 + input_fingerprint: 013b974d3873283a3b159ad14b6fee8c9e6057e4035c11f2df113eb591187332 + template_sources: + - gemfiles/modular/documentation_local.gemfile.example + gemfiles/modular/erb/r2/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r2_v3_0_gemfile + action: write + dest_sha256: 3793e7dc9ef23a7ccd893d48cbba092fd27594c63e65cca011cc658218425670 + input_fingerprint: c94abdf7034ab125015f959f7bdadf5d1d160ee69210e2757e13453caee5eec1 + template_sources: + - gemfiles/modular/erb/r2/v3.0.gemfile.example + gemfiles/modular/erb/r3/v5.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r3_v5_0_gemfile + action: write + dest_sha256: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + input_fingerprint: 9c621834118e4a09498a6098c9fc2197f41ef7b1c701df2071237f8fff84aece + template_sources: + - gemfiles/modular/erb/r3/v5.0.gemfile.example + gemfiles/modular/erb/r4/v5.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r4_v5_0_gemfile + action: write + dest_sha256: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + input_fingerprint: b8d4bfebf4f5eb43d6b8e7f4796815357c699e2b0a391ae4b38efe8ede83fd90 + template_sources: + - gemfiles/modular/erb/r4/v5.0.gemfile.example + gemfiles/modular/erb/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_erb_vHEAD_gemfile + action: write + dest_sha256: ad6f104a49e80e0cf625440e3dc816343fe7e2f037fc4971df75e7bb4305c683 + input_fingerprint: 7a6718674a1538ff3a4eb1f5d22f0e843885f0fa119b1b71e9087b1a1521785a + template_sources: + - gemfiles/modular/erb/vHEAD.gemfile.example + gemfiles/modular/json/truffleruby_22_3.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_22_3_gemfile + action: write + dest_sha256: 249c12eacbe90f9d0d2e81e7a62c4c7e9102e504ededcda4ecf660cb3bb68be4 + input_fingerprint: 4b169c87620dd96c1652adc334be2653c0021f80a400212a926b5ffc71500e6a + template_sources: + - gemfiles/modular/json/truffleruby_22_3.gemfile.example + gemfiles/modular/json/truffleruby_23_0.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_23_0_gemfile + action: write + dest_sha256: 66aa010567f7afa1af8244a74c3c88ecaaf84dc87b6a25180691bb480d02ed28 + input_fingerprint: 9a0102c105395922a96a8e375cc781a538be68002bc2110f986759963d786f72 + template_sources: + - gemfiles/modular/json/truffleruby_23_0.gemfile.example + gemfiles/modular/json/truffleruby_23_1.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_23_1_gemfile + action: write + dest_sha256: '080fcbdaf2bec73cad40832a3d51eebb380af789917b96f493d1460b0dd6361d' + input_fingerprint: e9caf9418b65ab5de324dbc38717a09da838df28d47a4aa828cd2f02f3e62f18 + template_sources: + - gemfiles/modular/json/truffleruby_23_1.gemfile.example + gemfiles/modular/mutex_m/r2/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r2_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: 6f64c44722b191330abbcb0b4a653af3a12d2a44d2b869c2d59c9baea0f83701 + template_sources: + - gemfiles/modular/mutex_m/r2/v0.3.gemfile.example + gemfiles/modular/mutex_m/r3/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r3_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: 626cf34cd4ba2cf7080130fd7a84f7df9815e561b16bec0c55dfb0592083e888 + template_sources: + - gemfiles/modular/mutex_m/r3/v0.3.gemfile.example + gemfiles/modular/mutex_m/r4/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r4_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: 3e2be0734c0e603415e83afd7ce27e64364c43f2591571903087dbb96155977f + template_sources: + - gemfiles/modular/mutex_m/r4/v0.3.gemfile.example + gemfiles/modular/mutex_m/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_vHEAD_gemfile + action: write + dest_sha256: '08018641c97f894788fa91b462da504ab2237213d18d95404136c393274ae3cb' + input_fingerprint: 55bae1a011ec1fe06270d74e216cfef2ad304d3e531e126249767ce549b58256 + template_sources: + - gemfiles/modular/mutex_m/vHEAD.gemfile.example + gemfiles/modular/optional.gemfile: + recipe: template_source_application_gemfiles_modular_optional_gemfile + action: write + dest_sha256: f770e6e9a9dd2bd0f1f132e882d88038b2e21127dce3afe270908c7338c28bfd + input_fingerprint: f1812e2ddf85773871cd26a28c852e46768710359248b6876eb53df08ea0916f + template_sources: + - gemfiles/modular/optional.gemfile.example + gemfiles/modular/rspec.gemfile: + recipe: template_source_application_gemfiles_modular_rspec_gemfile + action: write + dest_sha256: d043f5c9344f6435edb4607c5adaf42c78e7fb6b8b6726007de2bbedefb376c3 + input_fingerprint: a58ee84e7763516dc4de24a992ce8530886cc4afa36b98c38b809c5f838ee39a + template_sources: + - gemfiles/modular/rspec.gemfile.example + gemfiles/modular/runtime_heads.gemfile: + recipe: template_source_application_gemfiles_modular_runtime_heads_gemfile + action: write + dest_sha256: 6ac7158c4a3088190f2a9082f01439eb27eca2172ab3464b15c9cb045aa885e1 + input_fingerprint: 568676924d79c5de6aeff8bd199cf04551d074b22b0c7248555420f9c678b487 + template_sources: + - gemfiles/modular/runtime_heads.gemfile.example + gemfiles/modular/stringio/r2/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r2_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: 97a2ab4a12e878a4344757df74ea4a812247a76a13789b1a43ce4fae2bb96898 + template_sources: + - gemfiles/modular/stringio/r2/v3.0.gemfile.example + gemfiles/modular/stringio/r3/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r3_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: a796902cf2081900114ff44c3b5a883910549e67c0e6f63946e841c591953a65 + template_sources: + - gemfiles/modular/stringio/r3/v3.0.gemfile.example + gemfiles/modular/stringio/r4/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r4_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: 4fe0a28043f4f32d091ad1a9e00bdd0a16189f72e6fdcb2cae19fbe6de45a9e3 + template_sources: + - gemfiles/modular/stringio/r4/v3.0.gemfile.example + gemfiles/modular/stringio/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_vHEAD_gemfile + action: write + dest_sha256: e0497ab6dad9667b22725485b781e9d99349a079250eb29cb125d58f01f4a5be + input_fingerprint: 9296594ea84bc7ce47e67c119e0c7d26370c7170af1bd18db429ea0e544e65c2 + template_sources: + - gemfiles/modular/stringio/vHEAD.gemfile.example + gemfiles/modular/style.gemfile: + recipe: template_source_application_gemfiles_modular_style_gemfile + action: write + dest_sha256: 071066457ce6081cbc03d10d777f741b84019071c78e45c23889f13658a0a4a6 + input_fingerprint: 3631dc44a0c3ed4880b2846924884e94ada758b79510c65e084c580dfcfdc613 + template_sources: + - gemfiles/modular/style.gemfile.example + gemfiles/modular/style_local.gemfile: + recipe: template_source_application_gemfiles_modular_style_local_gemfile + action: write + dest_sha256: 50fe8cc354860567f0bb757623b8a0fdcc43db2dc49d20fc598779bc5af02e7f + input_fingerprint: 82905ddb5b34b85575a06f19619ce0303db278b849cf0ad09f407c1033a42a61 + template_sources: + - gemfiles/modular/style_local.gemfile.example + gemfiles/modular/templating.gemfile: + recipe: template_source_application_gemfiles_modular_templating_gemfile + action: write + dest_sha256: 6cedc39529daa9aac3a4cf13fe31a628b62a4a2428f5c4f8657c5a2fa027bb35 + input_fingerprint: c2b57f008babdf5096c89ed7403a77b8095794f61f05e53bf5f71fb21898223e + template_sources: + - gemfiles/modular/templating.gemfile.example + gemfiles/modular/templating_local.gemfile: + recipe: template_source_application_gemfiles_modular_templating_local_gemfile + action: write + dest_sha256: 04cf2bec5b61d70bbf0decf52e2df836ad2366cb9d97b02f4987dc8e74720891 + input_fingerprint: b94ff7aace159ba04364099ec64da82ff6a09aa18663c2de37b6d6e1ce0e6faf + template_sources: + - gemfiles/modular/templating_local.gemfile.example + gemfiles/modular/webrick/r4/v1.9.gemfile: + recipe: template_source_application_gemfiles_modular_webrick_r4_v1_9_gemfile + action: write + dest_sha256: 1ee940ff54d5ca3ce7fcff0d82ee9553386979656b9e220d5be5404d0991d5ea + input_fingerprint: 366e33f8ca36cc70e9e21a66325727601100e9443e6ac2e153fbfe561b55a37b + template_sources: + - gemfiles/modular/webrick/r4/v1.9.gemfile.example + gemfiles/modular/webrick/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_webrick_vHEAD_gemfile + action: write + dest_sha256: da545f591af987648ffbaba181707480a38dfb375db7d289617986ec2c2ca23b + input_fingerprint: d3f05045ae03bb9b3724514aa7e20d2d2af7d4043a245cf946097a5c4245b90f + template_sources: + - gemfiles/modular/webrick/vHEAD.gemfile.example + gemfiles/modular/x_std_libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_gemfile + action: write + dest_sha256: e3917e90717d7f9f4393d847549a78c53de7f6c8de52a7f590b34b515fd6111a + input_fingerprint: 56f7c83896b2e143e7c70411f46d91ef414f4de4cc91a14177941904a7c358f4 + template_sources: + - gemfiles/modular/x_std_libs.gemfile.example + gemfiles/modular/x_std_libs/r2/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r2_libs_gemfile + action: write + dest_sha256: e80ec8ad06cb1b31ac982bc25cf7696987fca131aa1001eaefd0bf5cd379c273 + input_fingerprint: 15eede15803d9bf9cfbd49efcf46c9572da4ade1ddfae52d9489ad887c414e35 + template_sources: + - gemfiles/modular/x_std_libs/r2/libs.gemfile.example + gemfiles/modular/x_std_libs/r3/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r3_libs_gemfile + action: write + dest_sha256: 546f8849f4267bb19aa10ff0de40be30957197f229e6887847181ea9127b2650 + input_fingerprint: b8d798effa3a2d17ddcdd019e969aa1e89a751f9eeed0d7b06d7989a09e4f663 + template_sources: + - gemfiles/modular/x_std_libs/r3/libs.gemfile.example + gemfiles/modular/x_std_libs/r4/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r4_libs_gemfile + action: write + dest_sha256: 8c2582eaa218d216b98c86c933465295c8b4e43f3251ea388b9eaf6e471f8da6 + input_fingerprint: 0c019dc68dbd176b796fa3bb0b199f303fd73353c1a3eae4b5e8032297b7c884 + template_sources: + - gemfiles/modular/x_std_libs/r4/libs.gemfile.example + gemfiles/modular/x_std_libs/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_vHEAD_gemfile + action: write + dest_sha256: d3133ec4c0638363a7fb025d19be7e95a615fd61c35ddb8d17f2280ee74a7486 + input_fingerprint: ad7a04f2ba0833bf2ebc32b5c8e56c166b9ee4972b79526b9727d6d42cd5a531 + template_sources: + - gemfiles/modular/x_std_libs/vHEAD.gemfile.example + lib/parslet/toml/merge/version.rb: + recipe: template_source_application_lib_parslet_toml_merge_version_rb + action: write + dest_sha256: 41d30394b4502287b1fab3f27d92a149bc97906b224c1007afc550a4a5d31758 + input_fingerprint: 35f2221455c7ca9f9192a4857016bf0c28c9935b4d6e7a3ed0102881f8101c6c + template_sources: + - lib/gem/version.rb.example + parslet-toml-merge.gemspec: + recipe: template_source_application_parslet_toml_merge_gemspec + action: write + dest_sha256: 564bb1bc4b6e637ff639fba3f7d471ed244d7c58d0d314be6585283ee679420b + input_fingerprint: e5a078227e4a6cb1f2bdcfda31963e8315aa80c5ec0fe98fd41d9cee74c21c8f + template_sources: + - gem.gemspec.example + sig/parslet/toml/merge.rbs: + recipe: template_source_application_sig_parslet_toml_merge_rbs + action: write + dest_sha256: b2b36ee52b4d67247046690cb9b0ffe6cf1d21fd152ce5b0a895a6c7fa03585c + input_fingerprint: cdd3f696a21644fdcd8df029dd25fb4e05cbef4fd2ea8c6076440fc7285881fb + template_sources: + - sig/gem.rbs.example + spec/spec_helper.rb: + recipe: template_source_application_spec_spec_helper_rb + action: write + dest_sha256: efda8feb271d7b9ed3373bd54031057afdf21be350f81c9095453c3bc49880c8 + input_fingerprint: 60484d1135c3aaa5951110bc4fb1d1b84c4efa5fe23e9919b7b29cd977cef0bd + template_sources: + - spec/spec_helper.rb.example diff --git a/gems/parslet-toml-merge/Gemfile b/gems/parslet-toml-merge/Gemfile index ad685dc89..b644fef32 100644 --- a/gems/parslet-toml-merge/Gemfile +++ b/gems/parslet-toml-merge/Gemfile @@ -19,8 +19,7 @@ git_source(:gitlab) { |repo_name| "https://gitlab.com/#{repo_name}" } gemspec # Local workspace dependency wiring for *_local.gemfile overrides -nomono_requirements = ['~> 1.0', '>= 1.0.8'] -gem 'nomono', *nomono_requirements, require: false # ruby >= 2.2 +gem 'nomono', '~> 1.1', '>= 1.1.0', require: false # ruby >= 3.2.0 # Direct sibling dependencies (env-switched via STRUCTUREDMERGE_DEV) direct_sibling_gems = %w[ diff --git a/gems/parslet-toml-merge/Gemfile.lock b/gems/parslet-toml-merge/Gemfile.lock index 01057dbb9..72cb59669 100644 --- a/gems/parslet-toml-merge/Gemfile.lock +++ b/gems/parslet-toml-merge/Gemfile.lock @@ -78,8 +78,8 @@ GEM bundler (>= 1.14) version_gem (~> 1.1, >= 1.1.4) geom2d (0.4.1) - gitmoji-regex (2.0.4) - version_gem (~> 1.1, >= 1.1.13) + gitmoji-regex (2.0.6) + version_gem (~> 1.1, >= 1.1.14) hexapdf (1.9.1) cmdparse (~> 3.0, >= 3.0.3) geom2d (~> 0.4, >= 0.4.1) @@ -92,20 +92,29 @@ GEM rdoc (>= 4.0.0) reline (>= 0.4.2) json (2.21.1) - kettle-dev (2.3.9) + kettle-dev (2.4.5) emoji_regex (>= 15.0) + kettle-gha-pins (~> 0.3, >= 0.3.1) + kettle-ndjson (~> 0.1, >= 0.1.1) kettle-rb (~> 0.1, >= 0.1.2) - kettle-test (~> 2.0, >= 2.0.4) + kettle-test (~> 2.0, >= 2.0.12) ruby-progressbar (~> 1.13) + tty-progressbar (~> 0.18) + kettle-gha-pins (0.3.1) + ruby-progressbar (~> 1.13) + tty-progressbar (~> 0.18) + version_gem (~> 1.1, >= 1.1.14) + kettle-ndjson (0.1.1) + version_gem (~> 1.1, >= 1.1.14) kettle-rb (0.1.5) - kettle-soup-cover (3.0.4) + kettle-soup-cover (3.0.5) kettle-wash (~> 0.1, >= 0.1.0) simplecov (>= 1.0) simplecov-cobertura (>= 4.0) simplecov-console (~> 0.9, >= 0.9.5) simplecov-rcov (~> 0.3, >= 0.3.7) simplecov_lcov_formatter (~> 0.9, >= 0.9.0) - kettle-test (2.0.12) + kettle-test (2.0.15) appraisal2 (~> 3.0, >= 3.0.6) backports (~> 3.0) rspec (~> 3.0) @@ -182,11 +191,11 @@ GEM rspec-mocks (3.13.8) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) - rspec-pending_for (0.1.21) + rspec-pending_for (0.1.22) rspec-core (~> 3.0) ruby_engine (~> 2.0) ruby_version (~> 1.0) - rspec-stubbed_env (1.0.6) + rspec-stubbed_env (1.0.8) rspec-support (3.13.7) rspec_junit_formatter (0.6.0) rspec-core (>= 2, < 4, != 2.12.0) @@ -282,7 +291,7 @@ GEM silent_stream (1.0.12) logger (~> 1.2) version_gem (>= 1.1.8, < 3) - simplecov (1.0.2) + simplecov (1.0.3) simplecov-cobertura (4.0.0) rexml simplecov (~> 1.0) @@ -294,7 +303,7 @@ GEM simplecov (>= 0.4.1) simplecov_lcov_formatter (0.9.0) simplecov (>= 0.18) - sorbet-runtime (0.6.13351) + sorbet-runtime (0.6.13363) standard (1.56.0) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.0) @@ -318,9 +327,9 @@ GEM standard-custom (~> 1.0, >= 1.0.2) standard-performance (~> 1.9, >= 1.9.0) version_gem (~> 1.1, >= 1.1.13) - stone_checksums (1.0.6) - version_gem (~> 1.1, >= 1.1.13) + stone_checksums (1.0.7) stringio (3.2.0) + strings-ansi (0.2.0) strscan (3.1.8) terminal-table (4.0.0) unicode-display_width (>= 1.1.1, < 4) @@ -344,16 +353,21 @@ GEM parslet (~> 2.0) tree_sitter_language_pack (>= 1.13.2, < 2.0) version_gem (~> 1.1, >= 1.1.9) - tree_sitter_language_pack (1.13.3-x86_64-linux) + tree_sitter_language_pack (1.13.4-x86_64-linux) sorbet-runtime (~> 0.5) tsort (0.2.0) - turbo_tests2 (3.2.0) + tty-cursor (0.7.1) + tty-progressbar (0.18.3) + strings-ansi (~> 0.2) + tty-cursor (~> 0.7) + tty-screen (~> 0.8) + unicode-display_width (>= 1.6, < 3.0) + tty-screen (0.8.2) + turbo_tests2 (3.2.3) parallel_tests (>= 3.3.0, < 6) rspec (>= 3.10) version_gem (~> 1.1, >= 1.1.14) - unicode-display_width (3.2.0) - unicode-emoji (~> 4.1) - unicode-emoji (4.2.0) + unicode-display_width (2.6.0) version_gem (1.1.14) webrick (1.9.2) yaml-converter (0.2.3) @@ -371,6 +385,9 @@ GEM ostruct rainbow yard + yard-lint (1.10.2) + yard (~> 0.9) + zeitwerk (~> 2.6) yard-relative_markdown_links (0.6.0) nokogiri (>= 1.14.3, < 2) yard-timekeeper (0.2.4) @@ -383,7 +400,6 @@ GEM PLATFORMS x86_64-linux - x86_64-linux-gnu DEPENDENCIES addressable (>= 2.8, < 3) @@ -398,12 +414,12 @@ DEPENDENCIES gitmoji-regex (~> 2.0, >= 2.0.0) irb (~> 1.17) kettle-dev (~> 2.0, >= 2.2.25) - kettle-soup-cover (~> 3.0, >= 3.0.3) + kettle-soup-cover (~> 3.0, >= 3.0.5) kettle-test (~> 2.0, >= 2.0.9) kramdown (~> 2.5, >= 2.5.2) kramdown-parser-gfm (~> 1.1) mutex_m (~> 0.2) - nomono (~> 1.0, >= 1.0.8) + nomono (~> 1.1, >= 1.1.0) parslet-toml-merge! rake (~> 13.0) rbs (>= 3.0) @@ -427,6 +443,7 @@ DEPENDENCIES yard (~> 0.9, >= 0.9.45) yard-fence (~> 0.9, >= 0.9.6) yard-junk (~> 0.1, >= 0.1.0) + yard-lint (~> 1.10, >= 1.10.2) yard-relative_markdown_links (~> 0.6) yard-timekeeper (~> 0.2, >= 0.2.4) yard-yaml (~> 0.2, >= 0.2.3) @@ -463,15 +480,17 @@ CHECKSUMS erb (6.0.6) sha256=a9b24986700f5bf127c4f297c5403c3ca41b83b0a316c0cd09a096b56e644ae5 gem_bench (2.0.5) sha256=0dc0fb44a5a5eb7b2f5c1c68a5b0164d72007132822c012bac3abe976b199ead geom2d (0.4.1) sha256=ea0998ea90c4f2752e24fe13d85a4f89bee689d151316140ebcc6369bf634ed9 - gitmoji-regex (2.0.4) sha256=01410d3217940bd0e7b2299ec805245afe8d0f06a5d6d38f623d63a63c0ac34f + gitmoji-regex (2.0.6) sha256=d50649caccc8ad1b080f01e869f0909b135206d8b3ece2313ca31a9b0e39f14b hexapdf (1.9.1) sha256=2d1f6a3622e6bc2a70a707d4c3f3fa44f5552ecd9d899f6283abb07398a84884 io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc irb (1.18.0) sha256=de9454a0703a54704b9811a5ef31a60c86949fbf4013fcf244fabc7c775248e3 json (2.21.1) sha256=13a43df75d95641443f5702dff350f237164a9d811ff0f2c2800d4d980220583 - kettle-dev (2.3.9) sha256=03b2f72c6dda4d2c4401ee3c0c96853116c922766e7b5b04224434a49b571bfc + kettle-dev (2.4.5) sha256=3a451940796a671b7adc910db7c3da87899ebec7c5274921ca598345549ae7eb + kettle-gha-pins (0.3.1) sha256=b13a82a403af31880288fe65f85f2a24a93ae4740c0c7cbc15a35044d27aaa51 + kettle-ndjson (0.1.1) sha256=2d84314e8c911d6f560f2736e8f72019df6d811829674788ff33b3bbf518ed66 kettle-rb (0.1.5) sha256=0322a569860c86e70f90d5ebe72353b8720b7054c7efa9f9044857f5c972d29f - kettle-soup-cover (3.0.4) sha256=36d4df472362d2020d16411d7ce26ba2fe2a41fb8be64577ff9b5280acf99d86 - kettle-test (2.0.12) sha256=3a8e5c5f38db03a6f0a8896da6f3576d24e36f53796578c19aafaa2ba5a8ea52 + kettle-soup-cover (3.0.5) sha256=80abb42eb294fa5d3c8632c259a297c554fbc01902714461f3bf99a65190f5d0 + kettle-test (2.0.15) sha256=993b132ffec17fe82cc81c69f876e15d6eb610a4831df08dc01c0cce5c070caa kettle-wash (0.1.1) sha256=ae2e08b64c72c46ceed5ffa197ed859e85352f38ed0412fca2e18ce29b2dc4f9 kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa kramdown-parser-gfm (1.1.0) sha256=fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729 @@ -508,8 +527,8 @@ CHECKSUMS rspec-core (3.13.6) sha256=a8823c6411667b60a8bca135364351dda34cd55e44ff94c4be4633b37d828b2d rspec-expectations (3.13.5) sha256=33a4d3a1d95060aea4c94e9f237030a8f9eae5615e9bd85718fe3a09e4b58836 rspec-mocks (3.13.8) sha256=086ad3d3d17533f4237643de0b5c42f04b66348c28bf6b9c2d3f4a3b01af1d47 - rspec-pending_for (0.1.21) sha256=c87fda50c20f8faca72d9cfa6a936abffd37860343f14aced95bbb29b8ae96bf - rspec-stubbed_env (1.0.6) sha256=6467a6eb0f72146d443ffb0c5a2a549d8812e59c04fbc81e03cd914ebf1f28dc + rspec-pending_for (0.1.22) sha256=49dc647473f8c8ea4ccc1a33813537dd94b913ef7ec5a8689896101eaacb71cf + rspec-stubbed_env (1.0.8) sha256=b23c4dd5e5d6a0cf0c5b4f6ed3f3678d78e4be9ec247ea9abf0669d20b490535 rspec-support (3.13.7) sha256=0640e5570872aafefd79867901deeeeb40b0c9875a36b983d85f54fb7381c47c rspec_junit_formatter (0.6.0) sha256=40dde674e6ae4e6cc0ff560da25497677e34fefd2338cc467a8972f602b62b15 rubocop (1.88.2) sha256=8def251c90cd955feb4daa3edc0ab56893250c4ce90ef81e6c80c03f9a939bbf @@ -535,39 +554,43 @@ CHECKSUMS ruby_engine (2.0.3) sha256=ca2ae7def8cfcdc2bfb6a186d36d5d59c8b403245dc0256c3802b767fa278aaa ruby_version (1.0.3) sha256=5930f9950746b7e6c973184398ee364ee7440b170fef7922b9f5cdf317f1ccb5 silent_stream (1.0.12) sha256=377c43aa10033fe90c33b39ea8cd97d79f2d1c4856df598efc56f3091f3ae782 - simplecov (1.0.2) sha256=c6459434efe4b948b46477cc2df2faa73ab365f83a33c7c17f81262f4f7f1244 + simplecov (1.0.3) sha256=38ef0514f16ae7562f0d0f4df02610071115103d301b6de7dacbcc000082e39b simplecov-cobertura (4.0.0) sha256=e4fb3159b1ecea545b44f5452a8611305323e78ad23eae8aed35924d072e01ea simplecov-console (0.9.5) sha256=b1108bcfff5f210143e2b8301698c367b01586f20d25a73e95475a5df6fc6ff6 simplecov-rcov (0.3.7) sha256=372f50bf6df6b6350b7d0c840f2f8bdabe021861a43c26877b747c9ac96139fc simplecov_lcov_formatter (0.9.0) sha256=4c1839bb31dcf7a8f7a6474c94ed228aa03b994e9dd5e1965e58b4121b049bed - sorbet-runtime (0.6.13351) sha256=f8fee17c6e3edf835dc6823d26afb9a7c8969c6710d1fabe2fb43f4e0c15c64f + sorbet-runtime (0.6.13363) sha256=f1f0b2e946fb3cd76b9d8e3d85459cdaf7f5466331a400cafcf008e508b6d2c3 standard (1.56.0) sha256=ae2af4d9669589162ac69ed5ef59dcf9f346d4afc81f7e62b84339310dfcb787 standard-custom (1.0.2) sha256=424adc84179a074f1a2a309bb9cf7cd6bfdb2b6541f20c6bf9436c0ba22a652b standard-performance (1.9.0) sha256=49483d31be448292951d80e5e67cdcb576c2502103c7b40aec6f1b6e9c88e3f2 standard-rspec (0.5.0) sha256=64d396524a65af47f5331b423d8cdd313e0267401647bb7892489ca89dad2973 standard-rubocop-lts (2.0.10) sha256=89708a505b7d8b24d2ac399a7520fcb9e764abc2ecb4289b631b5fe0e3b76617 - stone_checksums (1.0.6) sha256=c775f830513d6c6ab26e31d1a5fbecd4c4e39002663d4d9f8fa96e97990b5298 + stone_checksums (1.0.7) sha256=faf7a175da7c4f32777c5292a0128b06eec183b3cc3a0b382529b21800300626 stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1 + strings-ansi (0.2.0) sha256=90262d760ea4a94cc2ae8d58205277a343409c288cbe7c29416b1826bd511c88 strscan (3.1.8) sha256=aae2db611a225559f21ffbb71765c9a4e60fd262534a9ea84f4f11c7f32f679e terminal-table (4.0.0) sha256=f504793203f8251b2ea7c7068333053f0beeea26093ec9962e62ea79f94301d2 thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73 timecop (0.9.11) sha256=41284dc6e5041f2184f781ace766f942108c842f8d8c1386a26e6343decc7542 timecop-rspec (1.0.3) sha256=005f14841bb606dcaefb060e321b5388e2e59537742bee8b3a9a9a40e598fab9 - token-resolver (2.0.5) sha256=b852f924287ffb58a440856e862b056c8ad97e74b4b2526cee43e0771f40c25c + token-resolver (2.0.5) toml (0.3.0) sha256=0a91d0f76a9036e84e44f95693b12f58d358c1df3ac8e3b5271f2056ecc6e4b9 toml-merge (7.1.0) tree_haver (7.1.0) - tree_sitter_language_pack (1.13.3-x86_64-linux) sha256=1ffd045bd236ea54f58c5872ee66121d01033359c1f28f375b7fd4a4b5620cf9 + tree_sitter_language_pack (1.13.4-x86_64-linux) sha256=ae3ae718534088b2dc76bd93e7d093f11e8d19188bf47edfcd962df906e1af97 tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f - turbo_tests2 (3.2.0) sha256=8b35421548399d1923567b177970f42671c65695b93cdd134d78fbcbab85dff0 - unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42 - unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f + tty-cursor (0.7.1) sha256=79534185e6a777888d88628b14b6a1fdf5154a603f285f80b1753e1908e0bf48 + tty-progressbar (0.18.3) sha256=6cbb4260e55e74a9180d502143eb6a467d2c8e51bf5f3c9509fb5cacc3d4a5f6 + tty-screen (0.8.2) sha256=c090652115beae764336c28802d633f204fb84da93c6a968aa5d8e319e819b50 + turbo_tests2 (3.2.3) sha256=f77fc0799014c1d7890977e117cf39317bc4544de2c88a55149ed920b4cff942 + unicode-display_width (2.6.0) sha256=12279874bba6d5e4d2728cef814b19197dbb10d7a7837a869bab65da943b7f5a version_gem (1.1.14) sha256=6b7306c7e9416d06067561981ab3444e2cecb844f26cc325ae3c27b44cf85613 webrick (1.9.2) sha256=beb4a15fc474defed24a3bda4ffd88a490d517c9e4e6118c3edce59e45864131 yaml-converter (0.2.3) sha256=d35e69e547610d9e347672cc277fcb7d71dff3c53a942e66f82b1c64022ada72 yard (0.9.45) sha256=52e211493f7cb8a3ebf7e104a25a1e73937a3103092545d34cb88fafebb3dc51 yard-fence (0.9.6) sha256=3d1dbf4e3df462ac78b8bd2e01cf740a2de20168387c929aca31a0bcee490659 yard-junk (0.1.0) sha256=e85fe2ec1afa47313decd333447b53458cb1ed49b510b70015fdc3041a94bcdd + yard-lint (1.10.2) sha256=3e595709d088a8cc827e706a4146b447eb6a907ee375d06c11077369d00717f6 yard-relative_markdown_links (0.6.0) sha256=3e5ffa85cbad9bac70bee5421774b190fb25d3bdf489323a5b3534f647d1a70e yard-timekeeper (0.2.4) sha256=62f8d001d737c6e2ac688e7b37386f958dceb0f6aff9c909575e1bec8d20775a yard-yaml (0.2.3) sha256=fe5fef18819e1cbd05bb8f1b9e1baad6bf70c28125eb75b57bbf6397b0831812 diff --git a/gems/parslet-toml-merge/bin/kettle-gha-pins b/gems/parslet-toml-merge/bin/kettle-gha-pins new file mode 100755 index 000000000..c743cecac --- /dev/null +++ b/gems/parslet-toml-merge/bin/kettle-gha-pins @@ -0,0 +1,16 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# +# This file was generated by Bundler. +# +# The application 'kettle-gha-pins' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) + +require 'rubygems' +require 'bundler/setup' + +load Gem.bin_path('kettle-gha-pins', 'kettle-gha-pins') diff --git a/gems/parslet-toml-merge/gemfiles/modular/coverage.gemfile b/gems/parslet-toml-merge/gemfiles/modular/coverage.gemfile index b93014b6b..b4c26a504 100644 --- a/gems/parslet-toml-merge/gemfiles/modular/coverage.gemfile +++ b/gems/parslet-toml-merge/gemfiles/modular/coverage.gemfile @@ -7,7 +7,7 @@ if ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false').zero? # Coverage (remote/released) platform :mri do - gem 'kettle-soup-cover', '~> 3.0', '>= 3.0.3', require: false + gem 'kettle-soup-cover', '~> 3.0', '>= 3.0.5', require: false end else eval_gemfile 'coverage_local.gemfile' diff --git a/gems/parslet-toml-merge/gemfiles/modular/coverage_local.gemfile b/gems/parslet-toml-merge/gemfiles/modular/coverage_local.gemfile index ab0127ea0..fcf7458a4 100644 --- a/gems/parslet-toml-merge/gemfiles/modular/coverage_local.gemfile +++ b/gems/parslet-toml-merge/gemfiles/modular/coverage_local.gemfile @@ -17,7 +17,8 @@ platform :mri do path_env: 'KETTLE_DEV_DEV', vendored_gems_env: 'VENDORED_GEMS', vendor_gem_dir_env: 'VENDOR_GEM_DIR', - debug_env: 'KETTLE_DEV_DEBUG' + debug_env: 'KETTLE_DEV_DEBUG', + root: %w[src my kettle-dev] ) if ENV.fetch('GALTZO_FLOSS_DEV', 'false').casecmp('false') != 0 diff --git a/gems/parslet-toml-merge/gemfiles/modular/documentation.gemfile b/gems/parslet-toml-merge/gemfiles/modular/documentation.gemfile index 9d4535f12..d0f4d4a76 100644 --- a/gems/parslet-toml-merge/gemfiles/modular/documentation.gemfile +++ b/gems/parslet-toml-merge/gemfiles/modular/documentation.gemfile @@ -12,6 +12,7 @@ gem 'kramdown-parser-gfm', '~> 1.1', require: false # Ruby >= 2.3 gem 'yaml-converter', '~> 0.2', '>= 0.2.3', require: false # Ruby >= 3.2 gem 'yard', '~> 0.9', '>= 0.9.45', require: false gem 'yard-junk', '~> 0.1', '>= 0.1.0', require: false # Ruby >= 3.1 +gem 'yard-lint', '~> 1.10', '>= 1.10.2', require: false # Ruby >= 3.2 gem 'yard-relative_markdown_links', '~> 0.6', require: false if ENV.fetch('GALTZO_FLOSS_DEV', 'false').casecmp('false').zero? diff --git a/gems/parslet-toml-merge/gemfiles/modular/templating.gemfile b/gems/parslet-toml-merge/gemfiles/modular/templating.gemfile index a672de184..a7e6c1f06 100644 --- a/gems/parslet-toml-merge/gemfiles/modular/templating.gemfile +++ b/gems/parslet-toml-merge/gemfiles/modular/templating.gemfile @@ -12,7 +12,7 @@ end if kettle_remote # Template/plugin checks for released installs. - gem 'kettle-drift', '~> 1.0', '>= 1.0.6', require: false + gem 'kettle-drift', '~> 1.0', '>= 1.0.7', require: false end # Set STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local development with path-based dependencies. diff --git a/gems/parslet-toml-merge/gemfiles/modular/templating_local.gemfile b/gems/parslet-toml-merge/gemfiles/modular/templating_local.gemfile index 496c9d4a2..3bd5da872 100644 --- a/gems/parslet-toml-merge/gemfiles/modular/templating_local.gemfile +++ b/gems/parslet-toml-merge/gemfiles/modular/templating_local.gemfile @@ -65,7 +65,8 @@ platform :mri do path_env: 'KETTLE_DEV_DEV', vendored_gems_env: 'VENDORED_GEMS', vendor_gem_dir_env: 'VENDOR_GEM_DIR', - debug_env: 'KETTLE_DEV_DEBUG' + debug_env: 'KETTLE_DEV_DEBUG', + root: %w[src my kettle-dev] ) end end diff --git a/gems/parslet-toml-merge/lib/parslet/toml/merge/version.rb b/gems/parslet-toml-merge/lib/parslet/toml/merge/version.rb index 12a67dfd9..4e75dc231 100644 --- a/gems/parslet-toml-merge/lib/parslet/toml/merge/version.rb +++ b/gems/parslet-toml-merge/lib/parslet/toml/merge/version.rb @@ -3,9 +3,12 @@ module Parslet module Toml module Merge + # Version namespace for this gem. module Version + # Current gem version. VERSION = '7.1.0' end + # Current gem version exposed at the traditional constant location. VERSION = Version::VERSION # Traditional Constant Location end end diff --git a/gems/plain-merge/.rubocop_gradual.lock b/gems/plain-merge/.rubocop_gradual.lock index 53de6396a..aef48899a 100644 --- a/gems/plain-merge/.rubocop_gradual.lock +++ b/gems/plain-merge/.rubocop_gradual.lock @@ -90,7 +90,7 @@ "lib/plain-merge.rb:619298015": [ [1, 1, 0, "Naming/FileName: The name of this source file (`plain-merge.rb`) should use snake_case.", 5381] ], - "lib/plain/merge.rb:3584995729": [ + "lib/plain/merge.rb:2262513937": [ [9, 3, 12, "Style/Documentation: Missing top-level documentation comment for `module Plain::Merge`.", 2866359175], [9, 3, 7932, "Metrics/ModuleLength: Module has too many lines. [211/100]", 719656966], [42, 5, 645, "Metrics/MethodLength: Method has too many lines. [21/10]", 3773389417], @@ -114,7 +114,7 @@ [144, 121, 29, "Layout/LineLength: Line is too long. [149/120]", 981994949], [151, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 4229808912] ], - "spec/fixtures_integration_spec.rb:922433761": [ + "spec/fixtures_integration_spec.rb:465637347": [ [3, 1, 3550, "Metrics/BlockLength: Block has too many lines. [77/25]", 4225834063] ] } diff --git a/gems/plain-merge/.structuredmerge/kettle-jem.lock b/gems/plain-merge/.structuredmerge/kettle-jem.lock new file mode 100644 index 000000000..128d7a3bd --- /dev/null +++ b/gems/plain-merge/.structuredmerge/kettle-jem.lock @@ -0,0 +1,527 @@ +--- +version: 1 +template_state: + version: 7.1.0 + applied_at: '2026-07-26' + changelog_replay: + last_entry_key: kettle-jem-template-20260726-002 + last_entry_date: '2026-07-26' + checksums: + ".aiignore.example": 48a5dfdd93afd1a15fdce39cc28ca9920263f00018b0968ab031fa744521e5ce + ".config/mise/env.sh": aeea5a2ab489ba6e5467ae8de6e386ec8c8fe4ff31a044e69d0cd6a092dd6654 + ".devcontainer/apt-install/devcontainer-feature.json.example": 273a07f9d3926e1b6287c37709a469ee05d724cfedae62ad3b0cd8c09befc9ec + ".devcontainer/apt-install/install.sh.example": b61e020b60ca172bb7b658e63c9cd4342e49bda0531a6b19b36475e515ad20b0 + ".devcontainer/devcontainer.json.example": 4a80d471379b9720cc65cc89543cbbc0a7be87b188a818160296577c4e87606f + ".devcontainer/scripts/setup-tree-sitter.sh.example": c34f48d7bac8561fb780c4c7a81cec5004c3ac0edc11f229799ec9a4e3eccd54 + ".env.local.example": 35cb867e8bacb75252a85c29f78899b36d0d1843511ae1ba1fbc7da863b128b3 + ".envrc.example": b7232f4bae0fb399cc9c9cdc4a5eb694bd69623aeeadcbab18c9990e443040a1 + ".envrc.no-osc.example": b7232f4bae0fb399cc9c9cdc4a5eb694bd69623aeeadcbab18c9990e443040a1 + ".gemrc.example": 77b1c36ae6f91bedf08b99e662a971b02f7e66e0d65267805d068d30ff118aba + ".git-hooks/commit-msg.example": d858575bf70d6175fdd7656e9ba0b41672de3fb49163181efe3fbc9e40306024 + ".git-hooks/commit-subjects-goalie.txt.example": bb1179c8911af8afeb1f9a604b3de789d4a4b33d9d4a7743b3145998c15b0a94 + ".git-hooks/footer-template.erb.txt.example": 70ed3616ee04a4062126f53892cc255e7aa2b66741fe22d6b372f7df99676718 + ".git-hooks/prepare-commit-msg.example": 35266ead46a6385d20eeff7ec64afedef33a2db18d1238b8662a1bc758f05335 + ".github/.codecov.yml.example": d6ef3208a90eca74f79d8ff4e5ae21a915562b075cb17978b1eaadc231dd4e85 + ".github/FUNDING.yml.example": fd27dff7db58f4e8a39c35ccb60e39422517038501a5f2a99ef2aaeea2d1fa5d + ".github/FUNDING.yml.no-osc.example": 8f1a867b1921b3dec1c63f7a7cd629362c1fb1ad0d1052494b48ba746b0fc5c6 + ".github/copilot_instructions.md.example": f5c5791df013e89e170fd436379b14e251d0ff4cb6b330a6d961e80c9071f2d3 + ".github/dependabot.yml.example": db84d1c13f64100d2f48212c022f0d985e9061ca76c36d82e7057fd845ecd528 + ".github/workflows/auto-assign.yml.example": 57b8159a15bf49946506e1b624934feed6a1cc8f71ad68968323c87acac56c67 + ".github/workflows/coverage.yml.example": 524ef90e0fd2ca0b846c464197d8d43cd6a57834303c9526ea0bd277f2beb3e1 + ".github/workflows/current.yml.example": dbc82e7593804c05d2c217d5c02d79d5480b5a0d1e04eea99b7235f35f520216 + ".github/workflows/dep-heads.yml.example": d94122f3246e17774fa015dde8d9a5772a66e54f817d44e62716f6a61d899050 + ".github/workflows/dependency-review.yml.example": a895d52257a7112d796fabf349ced1079bed93e81e3aa9cb088f9af3f44d1e5f + ".github/workflows/discord-notifier.yml.example": f9cc83a87058bd420426444510a1dd1520fd7cc15af50832ad52c25c5766be94 + ".github/workflows/framework-ci.yml.example": 112ef6178fcf115fe9e0a248ec6cb4af748ce89142fd7dba30e9abb6ebdc17be + ".github/workflows/heads.yml.example": aa55cf9bb4ae35fe126384003e8af4b91e685bcf370263b3710bd429f6c44343 + ".github/workflows/jruby-10.0.yml.example": 0eaf6d10c304de606684d420bbd88cfc90fe9d139a56773e011c6abaa6c5fc91 + ".github/workflows/jruby-9.1.yml.example": 9062f9de8843da1f8c4da8f991bbd24f9540c63927deaf311649f3088a672d5b + ".github/workflows/jruby-9.2.yml.example": f330363fc0af7dd0be24c140c919c07737a3168c5647012e34ba0c36634005e5 + ".github/workflows/jruby-9.3.yml.example": 3b26b3a978d0018f01e6d87651936f2e92fcb58d62bcdf11822eca3c2656d303 + ".github/workflows/jruby-9.4.yml.example": a830b92838a09b9316a81745b48ff35bed9461783154fc6d0e52df0d6aa319f3 + ".github/workflows/jruby.yml.example": f10f779cd3be37d2ffa593d9a83ba68a8684bb849ed1c4d9ae41706ff12571e1 + ".github/workflows/license-eye.yml.example": 23db5d6ee9b5382de1f2042642219d65214e09c3f975c418d4dec4d46375036c + ".github/workflows/locked_deps.yml.example": c7eaa20cc7d7de6209e576274e592ffb4838177ae6ab56096b2439d0fa1bc31c + ".github/workflows/opencollective.yml.example": fe7d8d346f9ab055b6779abf62972291460d05275e2c4d191e291e8cd73b0e6b + ".github/workflows/ruby-2.3.yml.example": 90474f1a462edc877983b91dd40d942e82b28262f1afdca74cddcdd52d7e8c26 + ".github/workflows/ruby-2.4.yml.example": fe84af4efef6934d7ff63efa2a4c85994f2ea1887f61b1ab5d30a21365429ec9 + ".github/workflows/ruby-2.5.yml.example": c40db157514168442311191ebc88853dfb36447a90171a73f42d435e92d02f05 + ".github/workflows/ruby-2.6.yml.example": 87bb8537d0047217651a327353df670fed3ea9e4a5350e965ed80af9ce32d9d3 + ".github/workflows/ruby-2.7.yml.example": 5650ec41bc67553457019a772a3343578872749d21268d5e7fb1715ebf4e2351 + ".github/workflows/ruby-3.0.yml.example": f9d7c7dfc6eaea1ca12c92e0b98b4ba8fed5726d26459bb410ab9812a741e5b9 + ".github/workflows/ruby-3.1.yml.example": e44879cd3ea47d00e44e573745d7f95fc1a561a9c1d69d72529d0c07294bd26e + ".github/workflows/ruby-3.2.yml.example": c28b9179778157e6b4807a775968840ff1c6bf2fd847ce1ce694b9a77df42f6e + ".github/workflows/ruby-3.3.yml.example": 033e4f0ed7ded17f5d13fde6674ec9fd555cfe58c11f57f7dc2f1fee21c718b6 + ".github/workflows/ruby-3.4.yml.example": 474a96468f101b8fddac4cecaa0629f28d5ceec0c784329affdc471eb1e3e889 + ".github/workflows/style.yml.example": dea7243a91dc164a172e90b7933de58cdd353d7e5df1beac22cec63125edc086 + ".github/workflows/templating.yml.example": 327b933509e1ade4d53df5756f6407028b479c51847775db494fb9c25e66ce5a + ".github/workflows/truffle.yml.example": 56fa53dc206976c81db7cc3530f4d19d89ea5859c1245492e5a5ecb9304de63e + ".github/workflows/truffleruby-22.3.yml.example": d6773529e6961039b5cc4a145c77623881aa3857d875bbb415ca0f8147166d7a + ".github/workflows/truffleruby-23.0.yml.example": abcd23a18d748528f7558d4ab7bc4830796cb686ca7371f67a8ddaf6d0362d72 + ".github/workflows/truffleruby-23.1.yml.example": 11af8a3f0823ed3ab17e759d81b8a4551eb7af8096ce0b5a9501fd83cada1cd2 + ".github/workflows/truffleruby-24.2.yml.example": 2c4ff82eeaa3bdb19391f04cd2f41b07733986a053d5ac8498176fef5f890e5e + ".github/workflows/truffleruby-25.0.yml.example": 42cdfdcd21c7b3bb1b87c22c2bc7a98135a442742df5f9a45e2b4e03838c1e7f + ".github/workflows/truffleruby-33.0.yml.example": 2a45e428ca13dac56ee75526b80eac477b61697ca06c94680e1eb05d21dbc25a + ".github/workflows/unlocked_deps.yml.example": 15f5ccbe811aa5a8650c2aa69b32f4f6a24d5f8bd3aae2dcbec92cbe3a51f0a7 + ".gitignore.example": 14864a0c88be3f8c122ab3032efeb782ba5e035013231038acf746a400437a3e + ".gitlab-ci.yml.example": ef64afa9855ebb59bbc87446fa9533238d3ce180966ceb19649a7f165715b92b + ".idea/.gitignore.example": b44a5aa16bf9fe5635558af347454b05a76d600084308a9f43d4d0b54789ecab + ".licenserc.yaml.example": 8787fa7bddce911f8ba47bda3eb6ad9786b6650d5d94786723e88773098ed37d + ".opencollective.yml.example": 9ad9b83fe54f0bddac7fb614575585d98f78df0e181ee70a7acd0168d26e3142 + ".qlty/qlty.toml.example": cf3d750d2328f6c057b08b7ce3d7ec00a4056c7f0eedda59af321d6caca03553 + ".rspec.example": 40d3f3ff435b0f9e5863772a95df8725b939c2dc11aead2bca68dcd6d85a9788 + ".rubocop.example": 591e4b45430e85b0dd460cc11c70650912fa2734988420b934109d06a749344f + ".rubocop.yml.example": 47f9a031022db67c964dd76ee2e8dfee21295a1877ca4d6233d3de39d114af73 + ".rubocop_rspec.yml.example": 288ad75e7eb14d87d80fafe6f7272217be5c57547536ee56c780a7d10ac7ec74 + ".simplecov.example": ffc76492effe905cc65797389fc8050fda136652ac078a80303cd084b349ef28 + ".structuredmerge/git-drivers.toml.example": 9d241a44c9edffcdbd3da018fa188a238089c3d1635040924df594a6929a4f97 + ".structuredmerge/kettle-jem.yml.example": 954cfc9e35cd20e46376426675e985bf8a0de19ff5069bf7be24b574837be615 + ".yard-lint.yml.example": 90def46867c9436b4e177c47d91fc8165f4602e335715aecc39f5587ae20b55b + ".yardignore.example": 821f453c609df7d46145d675424b39dfbe6dfdca8edac5f367b85fff48502455 + ".yardopts.example": 6fd6f2701713096a8a9ea095c213bbc68eeef37797c4754d97837e3229a3a5f6 + AGENTS.md.example: aec69512cbe17004660ac0abfabb9ec91a5c51c2cd82c10f30f08886f9bf64a7 + AGPL-3.0-only.md.example: d8a6cc31abc16b6748c7a21f21611f5a1ec33f67d22ca23d7da1c19b95496bee + Appraisal.root.gemfile.example: 8724e3f6faea995be655ac49369bec64a70710112b1f65707fa38f1fd2fd3254 + Appraisals.example: 9cb1abcfb1a0bd6d859ca0705efb874dbe546754c8c71f9f95025ff6817f1471 + Big-Time-Public-License.md.example: b0c02a112c9eee0ed69f05fd8f22277a2f8bc62d447b6cb75d6df560e05bf431 + CHANGELOG.md.example: 73459e50dad34d84db88844c993d975097557bdf5229e101b0d1339de6f98ffc + CHANGELOG.transfer.md: 9c201849117c9d4234724c4599643dd42fdce5f0a673a1abee97b97e556c301b + CITATION.cff.example: e404ea0a7919d78a83d53d80e211d17b9663576aa606583b709795dc023fd75c + CODE_OF_CONDUCT.md.example: f1ad532f1860f73ef774c6b27a26d41f4bc1cb8813034f5957487766ebb0986b + CONTRIBUTING.md.example: 63d339848c615f2c181d6b0565c42e56371eedb66f310d146cb7da297f7bc641 + FUNDING.md.example: 455bbb2b55d934283a2e7c16b59c321116c53310a85a718b7cf8ca44e9e3721e + FUNDING.md.no-osc.example: 05a85d5faf22d5ea5721622d242080447cf318d3277d9d529e438be1c9d5a351 + Gemfile.example: 6b2d72ec8a630cce515b7b528022071b13eee863c3164763df03792a5004345a + IRP.md.example: 85d8887d9b0e77f7fa9835ca5b9be31f586fdc94764ed1819af2a9a7fec98e96 + LICENSE.md.example: 120edf5f23173ebbdb5ad384ffc2e9b97e62aa6d0e61b733c003bd4db1b08276 + MIT.md.example: 365fce2a82f9d258ada9a527accfd5754b406ee9cdd8f8ed86bbec64b8c42ab2 + PolyForm-Noncommercial-1.0.0.md.example: ffcca38841adb694b6f380647e15f17c446a4d1656fed51a1e2041d064c94cc8 + PolyForm-Small-Business-1.0.0.md.example: 2f81e317d36f83a199c9fa10bcb250775fd90510303eaeb15aac2d8f0c1fc2d6 + README.md.example: 452446a44d120df26cde68fbc7aff086fa815769c989b994ebc1432ea927974f + REEK: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 + RUBOCOP.md.example: c09e5533ccc59b70a2efa05c99f66e521137c1053d3c12eb43509cebd5b68b0e + Rakefile.example: 569803e726b07ea26267fec6891367a3096a0dff3c266269a7081d36afe496af + SECURITY.md.example: ee9411aa85f36d88363fdaea7a1baea4362b6ec112cf2688e711b05de1d3144c + bin/setup.example: 0ac35089c95a91d8973fe7a318bf9fd98b9f8e00db92c5d9ca6cd858abb8d41b + certs/pboling.pem.example: 18956f60643666cc181e2743b3b3691bec08c5326f514f60af54d0cdb9ebc554 + gem.gemspec.example: 9989cc8a1cd125586ea807eaed549eaecc044711d31f17dd7bac2a0815b28b1a + gemfiles/modular/benchmark/r4/v0.5.gemfile.example: 5bc3190090ae456df1a8cce28dd47a7fb293495f6d845ec7e53a7a8b50f14ae1 + gemfiles/modular/benchmark/vHEAD.gemfile.example: ca6cd52c55c3082759c6ddc97638970f12d953aec1822470823d316086aa6e25 + gemfiles/modular/cgi/r4/v0.5.gemfile.example: c2d14a39377a2435419ceaca22a3421ebd899e9cba943df8a90b576a33624870 + gemfiles/modular/cgi/vHEAD.gemfile.example: 9ff3dc789b3279642876c0aad4b0094c1139bb8fbbf36daab804d3b2b3a60b43 + gemfiles/modular/coverage.gemfile.example: 915fc161ad574fdbc071bc733b69b27e94bd7a4c68cc4f58da267c9a0987f3e8 + gemfiles/modular/coverage_local.gemfile.example: 928d5f260d7b119c038baa56da9fb78dd524dee613aea33ab72894bbce5c506e + gemfiles/modular/debug.gemfile.example: 0a508bfb02e51b75394b43f4f09d98174dac36ead41cba09c1f730671a1f5905 + gemfiles/modular/documentation.gemfile.example: e15f51e4d14ad2216b6de16c323787945bd225073d70a78420f4c99c98c1ecd1 + gemfiles/modular/documentation_local.gemfile.example: 84a20f5d4b0feb94c2cf2f7a8dce8f682f1483498e41484c2b447a5661fd1870 + gemfiles/modular/erb/r2.3/default.gemfile.example: 9da0d08fb6a299b965c37fe85efcaebd9eb0a82b2ea35fdc157c41bd75431396 + gemfiles/modular/erb/r2.6/v2.2.gemfile.example: '01787cbdf7136c0d75cc7b734c6bb3d2ef6c70d6c1c50e7d0ad2112c0f8ef8e7' + gemfiles/modular/erb/r2/v3.0.gemfile.example: 3793e7dc9ef23a7ccd893d48cbba092fd27594c63e65cca011cc658218425670 + gemfiles/modular/erb/r3.1/v4.0.gemfile.example: bdf71ddcfe5001aab7d71b10a645a785928957ef7bae61d49307eb7f712279f3 + gemfiles/modular/erb/r3/v5.0.gemfile.example: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + gemfiles/modular/erb/r4/v5.0.gemfile.example: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + gemfiles/modular/erb/vHEAD.gemfile.example: ad6f104a49e80e0cf625440e3dc816343fe7e2f037fc4971df75e7bb4305c683 + gemfiles/modular/json/truffleruby_22_3.gemfile.example: 249c12eacbe90f9d0d2e81e7a62c4c7e9102e504ededcda4ecf660cb3bb68be4 + gemfiles/modular/json/truffleruby_23_0.gemfile.example: 66aa010567f7afa1af8244a74c3c88ecaaf84dc87b6a25180691bb480d02ed28 + gemfiles/modular/json/truffleruby_23_1.gemfile.example: '080fcbdaf2bec73cad40832a3d51eebb380af789917b96f493d1460b0dd6361d' + gemfiles/modular/mutex_m/r2.4/v0.1.gemfile.example: '09728bdc10807b3ca9dd3b9f12986acbe8c40ac08ada438bcfd49cd69445c650' + gemfiles/modular/mutex_m/r2/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/r3/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/r4/v0.3.gemfile.example: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + gemfiles/modular/mutex_m/vHEAD.gemfile.example: '08018641c97f894788fa91b462da504ab2237213d18d95404136c393274ae3cb' + gemfiles/modular/optional.gemfile.example: b45eb8ecde2902441c02b2f01d4aa8f79bff75c853ef92555c3201ee798d9e87 + gemfiles/modular/recording/r2.3/recording.gemfile.example: 154da539583c51ca78ff8affa7a7caaf7f354d321b5e748beb64de61ff72f80a + gemfiles/modular/recording/r2.4/recording.gemfile.example: 6d69381eb2f8be681c72e7a5a8b5d6ec6ee586da8ce51b9b39d845d2a87e4ecf + gemfiles/modular/recording/r2.5/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/r3/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/r4/recording.gemfile.example: c0ca8bbf47c34e144be90d96526f894af60cf062f2aecfa861492104170548d9 + gemfiles/modular/recording/vHEAD.gemfile.example: 7480fd116e9671972a2735d1d97050a4fd5754aa7abfab3d115bf9bebbca038c + gemfiles/modular/rspec.gemfile.example: d043f5c9344f6435edb4607c5adaf42c78e7fb6b8b6726007de2bbedefb376c3 + gemfiles/modular/runtime_heads.gemfile.example: f163201999bf68a942b1e5bcea506bfc4b9c59711ff502091eb215d5d5f8f658 + gemfiles/modular/shunted.gemfile.example: a54a86124eff06163497462012704f62a691daa224cebeac605cdd14cffacfbe + gemfiles/modular/stringio/r2.4/v0.0.2.gemfile.example: 6425ebcd70b2e782f4c1d9074f8685c1e93ca7bf371728ef7ebbc8b5ebdf491a + gemfiles/modular/stringio/r2/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/r3/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/r4/v3.0.gemfile.example: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + gemfiles/modular/stringio/vHEAD.gemfile.example: e0497ab6dad9667b22725485b781e9d99349a079250eb29cb125d58f01f4a5be + gemfiles/modular/style.gemfile.example: a15db732f566d958c2459ef549ae3877d984df3d205116e714284d1fe4f9b068 + gemfiles/modular/style_local.gemfile.example: '0083605323d23879dc7223f0198e9f1db24a25fa38730c4dbcc71c7a8a4c307f' + gemfiles/modular/templating.gemfile.example: 6cedc39529daa9aac3a4cf13fe31a628b62a4a2428f5c4f8657c5a2fa027bb35 + gemfiles/modular/templating_local.gemfile.example: 16c0b51fd46b86db09268c8485b1d5a528e5f962b593f8ae7521b15209f7d1a5 + gemfiles/modular/webrick/r4/v1.9.gemfile.example: 1ee940ff54d5ca3ce7fcff0d82ee9553386979656b9e220d5be5404d0991d5ea + gemfiles/modular/webrick/vHEAD.gemfile.example: da545f591af987648ffbaba181707480a38dfb375db7d289617986ec2c2ca23b + gemfiles/modular/x_std_libs.gemfile.example: e3917e90717d7f9f4393d847549a78c53de7f6c8de52a7f590b34b515fd6111a + gemfiles/modular/x_std_libs/r2.3/libs.gemfile.example: 379ac2a3698615789e39dc18a961b9c793b2cc594856bb3163524a99fd4ac86f + gemfiles/modular/x_std_libs/r2.4/libs.gemfile.example: ccad8f592943481317c082ce8d340316b9e90a52463c8c1eea5c5109b23e8c3d + gemfiles/modular/x_std_libs/r2.6/libs.gemfile.example: 9af20396f404a32bf76d8999c7fdd112f0282ba331f71100ab093663b2ab5670 + gemfiles/modular/x_std_libs/r2/libs.gemfile.example: e80ec8ad06cb1b31ac982bc25cf7696987fca131aa1001eaefd0bf5cd379c273 + gemfiles/modular/x_std_libs/r3.1/libs.gemfile.example: 38068bd6a0f5d02918eb286af9bdbdf0c7cf7cf026486b9fd157b541b6153d58 + gemfiles/modular/x_std_libs/r3/libs.gemfile.example: 546f8849f4267bb19aa10ff0de40be30957197f229e6887847181ea9127b2650 + gemfiles/modular/x_std_libs/r4/libs.gemfile.example: 8c2582eaa218d216b98c86c933465295c8b4e43f3251ea388b9eaf6e471f8da6 + gemfiles/modular/x_std_libs/vHEAD.gemfile.example: d3133ec4c0638363a7fb025d19be7e95a615fd61c35ddb8d17f2280ee74a7486 + lib/gem/version.rb.example: 15e219ac3a928b5580035f891e415551213175020f1131f6e7ca0ccd55a1b2d6 + mise.toml.example: b2eb06f7daaf0c3916bba155f463e166bd1de218637ba82e636c528c077c8d6d + mise.toml.no-osc.example: 35ec90d3c67b74e0014876dccad14f5883fdad88036f6b0cf5d29ea181e132ac + parsers.toml.example: f0538ae7ad8596be2dc39b3ea663f1164dec21fb0457233c1885097e774aff6f + readme/partials/basic_usage.md.example: adaa8f9de9768d1f29cb15d957404004715e7687db68c29b121d6467db13158a + readme/partials/configuration.md.example: 5ad82bc7eaf05015d31cea9265173718abc1d92729b52e3856c8366aa54184e8 + readme/partials/synopsis.md.example: 2b7383f8261086da0995fbf2c10017b3f162723b32c324ae8c0e1c1a8d1c79ef + shim/.github/workflows/current.yml.example: c2a2a2053f2726276bb8571c8a76a4b97bcce6cd54bdca01cba63d713c3a0e2f + shim/.rspec.example: 0e3a2a1587779efc3eae8fe718a3480272fbdfb3f1f6c2f9c3901f6fd81b2cce + shim/.structuredmerge/kettle-jem.yml.example: 03faae6cfda3947ef8489008b4836aad3ca280e94ddf9d08ef733071d7daa167 + shim/CHANGELOG.md.example: 2c098802b9971c51796e34067d061adbc31fa443df96be8a1fc71fc84c262d0e + shim/Gemfile.example: 9583b19e04d7ab6f5b3ea7ebb0c5d24e6a71ae5d74404a510aa979642248ba34 + shim/README.md.example: 3a2f7211b7f92a1dfae5e523b8e34b051a3d8af942144b05286eca0b3c8f6fbe + shim/Rakefile.example: 572c94da7052083b39b62a6600785419e314a109efd7a3d8c3a96eb77ad34fd1 + shim/gem.gemspec.example: cabca9717af1a18991db1de856900494e2771b044f1d5bfd2ad71b2ed4a1367d + shim/lib/compat_require.rb.example: 94ee85e353a3ca08c8a35c9063d4ff789214ea594c7f803f6cf09d7142f48379 + shim/lib/entrypoint.rb.example: dd57613520daca01d6f6bcaa9b83b00ff74505240dc04b84ceb686df3c0539d7 + shim/lib/version.rb.example: 15e219ac3a928b5580035f891e415551213175020f1131f6e7ca0ccd55a1b2d6 + shim/spec/shim_spec.rb.example: '060013019bf39b8dc267169df83752661d02c7ad890b65a99a1d97137938edfd' + shim/spec/spec_helper.rb.example: 88e2ab0bd8888022a68e856e04f61053e238e54f51b428b386aaebf93ae8ad83 + sig/gem.rbs.example: 47a4f7e524cc6f773875b6c08691ca4d65c2b14618abd5b9b91055ae5b248cec + spec/spec_helper.rb.example: 0c8119bd75b90f3a2403789b68b539fd19952370051297b1807596e201ef4813 +files: + ".simplecov": + recipe: template_source_application_simplecov + action: write + dest_sha256: 432dd84837d9d4c3721435496f99e05eb5c770216c0f0890ea89d91514f88379 + input_fingerprint: 258397045e2e177a8b64bc6582f7eb0b70e5793dc0d8317f9cdf800a2dff9108 + template_sources: + - ".simplecov.example" + AGPL-3.0-only.md: + recipe: template_source_application_AGPL_3_0_only_md + action: write + dest_sha256: d8a6cc31abc16b6748c7a21f21611f5a1ec33f67d22ca23d7da1c19b95496bee + input_fingerprint: e068b3e323e710849eb215ef07350db00332f0cf63b1537c81a6532788247ffc + template_sources: + - AGPL-3.0-only.md.example + Gemfile: + recipe: template_source_application_Gemfile + action: write + dest_sha256: c572e4cfce205229848dc986cecafe680aa242424583301aacba2161c1ef5c33 + input_fingerprint: 8c51fe61822644962bbf42a1ff0620e2df940135c46194997086b35fbfce267a + template_sources: + - Gemfile.example + LICENSE.md: + recipe: template_source_application_LICENSE_md + action: write + dest_sha256: f6188bfd474a636d2a526420ebb411250faa447d94c9b9ccee097128ce4101b5 + input_fingerprint: 94626054b9093f1616c084584f568d8967f5c3869aeca09472fb78de9a27d85b + template_sources: + - LICENSE.md.example + PolyForm-Small-Business-1.0.0.md: + recipe: template_source_application_PolyForm_Small_Business_1_0_0_md + action: write + dest_sha256: 2f81e317d36f83a199c9fa10bcb250775fd90510303eaeb15aac2d8f0c1fc2d6 + input_fingerprint: a01d66b548af13e86bb5799b11b23daaf5903b77e53aff2b9265fdc837d7ff7c + template_sources: + - PolyForm-Small-Business-1.0.0.md.example + README.md: + recipe: template_source_application_README_md + action: write + dest_sha256: 240baa70fd4fd9ef1511b1ea5b2bff32e3cd842fd4cb5394e78ba08661279796 + input_fingerprint: 83658ba5a9c5b3d3c35f62875ffafe0b3bbf424fc3c7473140ba6760719ea9dd + template_sources: + - README.md.example + certs/pboling.pem: + recipe: template_source_application_certs_pboling_pem + action: write + dest_sha256: 18956f60643666cc181e2743b3b3691bec08c5326f514f60af54d0cdb9ebc554 + input_fingerprint: f67f5119b3203625a0a6a6948a9811f716d0c91c3226bf526782555b746d268b + template_sources: + - certs/pboling.pem.example + gemfiles/modular/benchmark/r4/v0.5.gemfile: + recipe: template_source_application_gemfiles_modular_benchmark_r4_v0_5_gemfile + action: write + dest_sha256: 5bc3190090ae456df1a8cce28dd47a7fb293495f6d845ec7e53a7a8b50f14ae1 + input_fingerprint: 0052c867d95c92a0361b3e23b770a5a1374127e62b117316bc1fcef49fc78000 + template_sources: + - gemfiles/modular/benchmark/r4/v0.5.gemfile.example + gemfiles/modular/benchmark/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_benchmark_vHEAD_gemfile + action: write + dest_sha256: ca6cd52c55c3082759c6ddc97638970f12d953aec1822470823d316086aa6e25 + input_fingerprint: a5119e17976d637bdc380505fc7c643f292776f27d903db8031b94e10bcaedf5 + template_sources: + - gemfiles/modular/benchmark/vHEAD.gemfile.example + gemfiles/modular/cgi/r4/v0.5.gemfile: + recipe: template_source_application_gemfiles_modular_cgi_r4_v0_5_gemfile + action: write + dest_sha256: c2d14a39377a2435419ceaca22a3421ebd899e9cba943df8a90b576a33624870 + input_fingerprint: c73074e82ae12666b35150c9181b838cd961844bc01497b1f541a997a84d82ee + template_sources: + - gemfiles/modular/cgi/r4/v0.5.gemfile.example + gemfiles/modular/cgi/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_cgi_vHEAD_gemfile + action: write + dest_sha256: 9ff3dc789b3279642876c0aad4b0094c1139bb8fbbf36daab804d3b2b3a60b43 + input_fingerprint: bf2b6d614a81bcd405d06424be1f76fe9a197b030be31f8e7be8eb6489556478 + template_sources: + - gemfiles/modular/cgi/vHEAD.gemfile.example + gemfiles/modular/coverage.gemfile: + recipe: template_source_application_gemfiles_modular_coverage_gemfile + action: write + dest_sha256: 915fc161ad574fdbc071bc733b69b27e94bd7a4c68cc4f58da267c9a0987f3e8 + input_fingerprint: 1517ae92367f4be636003520e8150fadcd5937659a02de8c9809994fccb9fc29 + template_sources: + - gemfiles/modular/coverage.gemfile.example + gemfiles/modular/coverage_local.gemfile: + recipe: template_source_application_gemfiles_modular_coverage_local_gemfile + action: write + dest_sha256: b2ab3e027f52c5c56eb178100b59edb48ecfaf9ff5596681a972dfe037cdb4fc + input_fingerprint: ae585f4742eebe5ecc8f84efd0344b0ca71b62e5ce1ae72bbe531e9df7abe9da + template_sources: + - gemfiles/modular/coverage_local.gemfile.example + gemfiles/modular/debug.gemfile: + recipe: template_source_application_gemfiles_modular_debug_gemfile + action: write + dest_sha256: 0a508bfb02e51b75394b43f4f09d98174dac36ead41cba09c1f730671a1f5905 + input_fingerprint: 061a3d3ef300c05d31f208fbba1d0ec2b86d6537d23e822bbf7637c98941fe80 + template_sources: + - gemfiles/modular/debug.gemfile.example + gemfiles/modular/documentation.gemfile: + recipe: template_source_application_gemfiles_modular_documentation_gemfile + action: write + dest_sha256: e15f51e4d14ad2216b6de16c323787945bd225073d70a78420f4c99c98c1ecd1 + input_fingerprint: 8e2db76a836594e19341485efe2e2564d5a180d9cdf887741fd21d3916da5822 + template_sources: + - gemfiles/modular/documentation.gemfile.example + gemfiles/modular/documentation_local.gemfile: + recipe: template_source_application_gemfiles_modular_documentation_local_gemfile + action: write + dest_sha256: 022e5b4acf6ead8c17c836a6969cca78280e0bdd470397bddc5653958d160efc + input_fingerprint: e98feb33763dedadb4a39b77f05e05c95676a166dbbf7e9a2452cd63cd01c4b1 + template_sources: + - gemfiles/modular/documentation_local.gemfile.example + gemfiles/modular/erb/r2/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r2_v3_0_gemfile + action: write + dest_sha256: 3793e7dc9ef23a7ccd893d48cbba092fd27594c63e65cca011cc658218425670 + input_fingerprint: a58e733d65456282ce2c181c7719d797af85120a470b351756f53b186d1a61b8 + template_sources: + - gemfiles/modular/erb/r2/v3.0.gemfile.example + gemfiles/modular/erb/r3/v5.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r3_v5_0_gemfile + action: write + dest_sha256: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + input_fingerprint: 0c8e38322e0a166d30b1b241b7e2524ebc43578dd1196b041dd9fe59c0364dc5 + template_sources: + - gemfiles/modular/erb/r3/v5.0.gemfile.example + gemfiles/modular/erb/r4/v5.0.gemfile: + recipe: template_source_application_gemfiles_modular_erb_r4_v5_0_gemfile + action: write + dest_sha256: 5cab50a56db5a2c1bfe6023bc5490e662649deaa7cee278553d63dc9186adb2b + input_fingerprint: 1a0451fc834267581a45a800c7a024acb684c2ad86556d846ada62db28ac08a9 + template_sources: + - gemfiles/modular/erb/r4/v5.0.gemfile.example + gemfiles/modular/erb/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_erb_vHEAD_gemfile + action: write + dest_sha256: ad6f104a49e80e0cf625440e3dc816343fe7e2f037fc4971df75e7bb4305c683 + input_fingerprint: 5944e24118a1dbae84c98ae9289fd6ebc62e42a2b91a8a7feb2a3ad4c10f7bad + template_sources: + - gemfiles/modular/erb/vHEAD.gemfile.example + gemfiles/modular/json/truffleruby_22_3.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_22_3_gemfile + action: write + dest_sha256: 249c12eacbe90f9d0d2e81e7a62c4c7e9102e504ededcda4ecf660cb3bb68be4 + input_fingerprint: 89ad59f4ae63dbd83e9617a4974b23af12a20eee52ac87d4718be0d0dfbf5252 + template_sources: + - gemfiles/modular/json/truffleruby_22_3.gemfile.example + gemfiles/modular/json/truffleruby_23_0.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_23_0_gemfile + action: write + dest_sha256: 66aa010567f7afa1af8244a74c3c88ecaaf84dc87b6a25180691bb480d02ed28 + input_fingerprint: 465e3bc6418730e766be3be43516412eb72c6b6535f50b24890131617f5690e6 + template_sources: + - gemfiles/modular/json/truffleruby_23_0.gemfile.example + gemfiles/modular/json/truffleruby_23_1.gemfile: + recipe: template_source_application_gemfiles_modular_json_truffleruby_23_1_gemfile + action: write + dest_sha256: '080fcbdaf2bec73cad40832a3d51eebb380af789917b96f493d1460b0dd6361d' + input_fingerprint: 0b8334dcd8ac8ca62b2646434d82bf24c7ab064b77d908f6f92036843fe23316 + template_sources: + - gemfiles/modular/json/truffleruby_23_1.gemfile.example + gemfiles/modular/mutex_m/r2/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r2_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: 0a34df10cb90c8c578b23ff46ed32c71760121e5992e008571bd07c704afa1f3 + template_sources: + - gemfiles/modular/mutex_m/r2/v0.3.gemfile.example + gemfiles/modular/mutex_m/r3/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r3_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: bd802f3c34cb3c4344e7fa51bf6e4a8aad6027c979b4fdcef72567731fe6c904 + template_sources: + - gemfiles/modular/mutex_m/r3/v0.3.gemfile.example + gemfiles/modular/mutex_m/r4/v0.3.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_r4_v0_3_gemfile + action: write + dest_sha256: 887eaaff14e1f1d24087a82ec117450559eab9552260a132caf56f21e4c681e1 + input_fingerprint: ea2d10b76a9c790710d8a980d29fc14023e0b9b63e9ecba987a4a4e1a595605f + template_sources: + - gemfiles/modular/mutex_m/r4/v0.3.gemfile.example + gemfiles/modular/mutex_m/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_mutex_m_vHEAD_gemfile + action: write + dest_sha256: '08018641c97f894788fa91b462da504ab2237213d18d95404136c393274ae3cb' + input_fingerprint: 78ad43ac65bd8f2787332aa45a8c53dfdf31a2303dae7c0bed5b8249d9fd873a + template_sources: + - gemfiles/modular/mutex_m/vHEAD.gemfile.example + gemfiles/modular/optional.gemfile: + recipe: template_source_application_gemfiles_modular_optional_gemfile + action: write + dest_sha256: f770e6e9a9dd2bd0f1f132e882d88038b2e21127dce3afe270908c7338c28bfd + input_fingerprint: 3461edfc55a69cda2fad15a00ebfd1bc77badf689843709786640fae2531072e + template_sources: + - gemfiles/modular/optional.gemfile.example + gemfiles/modular/rspec.gemfile: + recipe: template_source_application_gemfiles_modular_rspec_gemfile + action: write + dest_sha256: d043f5c9344f6435edb4607c5adaf42c78e7fb6b8b6726007de2bbedefb376c3 + input_fingerprint: 7bace962f028810db10b1d10dc0389673cfc4feb4ae3fc35951ad2fc545384ad + template_sources: + - gemfiles/modular/rspec.gemfile.example + gemfiles/modular/runtime_heads.gemfile: + recipe: template_source_application_gemfiles_modular_runtime_heads_gemfile + action: write + dest_sha256: 6ac7158c4a3088190f2a9082f01439eb27eca2172ab3464b15c9cb045aa885e1 + input_fingerprint: f9b6b9d59f0058d2d65ca9ec27dc2f18bcfa75a80501b73e40386f2a9b59a859 + template_sources: + - gemfiles/modular/runtime_heads.gemfile.example + gemfiles/modular/stringio/r2/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r2_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: dcbbebf8ee80ee29740afea4eff04e36c54f400a3363fc4a76bf0cc726aba655 + template_sources: + - gemfiles/modular/stringio/r2/v3.0.gemfile.example + gemfiles/modular/stringio/r3/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r3_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: fb9bc0b97a76fef41d04b79b5b0bb51216e08e597be8626b8cfbb4931c5defc1 + template_sources: + - gemfiles/modular/stringio/r3/v3.0.gemfile.example + gemfiles/modular/stringio/r4/v3.0.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_r4_v3_0_gemfile + action: write + dest_sha256: 6a21546445b166b784f5dc0458d9f9acc506f3b6fcc1931daa5c62821da90d6c + input_fingerprint: 459f870f9ebf4e2768cddfd5d900112fdc51ec432c6c298dd81a87fdfc9e04db + template_sources: + - gemfiles/modular/stringio/r4/v3.0.gemfile.example + gemfiles/modular/stringio/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_stringio_vHEAD_gemfile + action: write + dest_sha256: e0497ab6dad9667b22725485b781e9d99349a079250eb29cb125d58f01f4a5be + input_fingerprint: 7a84cf90526341156a964e1725ddc149851c8f6eb6f9ae00cc7c6ad04b830938 + template_sources: + - gemfiles/modular/stringio/vHEAD.gemfile.example + gemfiles/modular/style.gemfile: + recipe: template_source_application_gemfiles_modular_style_gemfile + action: write + dest_sha256: 071066457ce6081cbc03d10d777f741b84019071c78e45c23889f13658a0a4a6 + input_fingerprint: 41edb54cdbb29e273e3d9950d2d649c77e8d23ab1a6fae2a243dadb57dec04e4 + template_sources: + - gemfiles/modular/style.gemfile.example + gemfiles/modular/style_local.gemfile: + recipe: template_source_application_gemfiles_modular_style_local_gemfile + action: write + dest_sha256: 2e23ce90768dbb9a2455c19fa337fa1d86bd8a51d725c7485911e63a7f9d3d29 + input_fingerprint: 8f477cd45e549fb9167b26a8b3a17caabbd63bbf33dec786012dafbde37384f3 + template_sources: + - gemfiles/modular/style_local.gemfile.example + gemfiles/modular/templating.gemfile: + recipe: template_source_application_gemfiles_modular_templating_gemfile + action: write + dest_sha256: 6cedc39529daa9aac3a4cf13fe31a628b62a4a2428f5c4f8657c5a2fa027bb35 + input_fingerprint: 6c15c0ee78f0d69247bea92c5b65ea941ee3469d0b72202b08418fa913fdec20 + template_sources: + - gemfiles/modular/templating.gemfile.example + gemfiles/modular/templating_local.gemfile: + recipe: template_source_application_gemfiles_modular_templating_local_gemfile + action: write + dest_sha256: 24a9e6da8430eb02b547d848fbac3866560572e66660ce6214f1165233d04910 + input_fingerprint: 2b1dcb01334ae5279ab15e8bd91b26e96d9dcf289c7881bc7effb0aee811ad48 + template_sources: + - gemfiles/modular/templating_local.gemfile.example + gemfiles/modular/webrick/r4/v1.9.gemfile: + recipe: template_source_application_gemfiles_modular_webrick_r4_v1_9_gemfile + action: write + dest_sha256: 1ee940ff54d5ca3ce7fcff0d82ee9553386979656b9e220d5be5404d0991d5ea + input_fingerprint: 1ddfd7332d0330de5027fcd254dc71fe5af6db1758e9388cb542203ce33e9507 + template_sources: + - gemfiles/modular/webrick/r4/v1.9.gemfile.example + gemfiles/modular/webrick/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_webrick_vHEAD_gemfile + action: write + dest_sha256: da545f591af987648ffbaba181707480a38dfb375db7d289617986ec2c2ca23b + input_fingerprint: 2da9ea4ae42019d504566e25e25ff3266a25b4c3c7af52165f9fa2f8dcb74ba5 + template_sources: + - gemfiles/modular/webrick/vHEAD.gemfile.example + gemfiles/modular/x_std_libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_gemfile + action: write + dest_sha256: e3917e90717d7f9f4393d847549a78c53de7f6c8de52a7f590b34b515fd6111a + input_fingerprint: 7975cdc8edbd5090111f79a7737517a96570149345cfa0b153e8f56e12fa3fd5 + template_sources: + - gemfiles/modular/x_std_libs.gemfile.example + gemfiles/modular/x_std_libs/r2/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r2_libs_gemfile + action: write + dest_sha256: e80ec8ad06cb1b31ac982bc25cf7696987fca131aa1001eaefd0bf5cd379c273 + input_fingerprint: 4416bb034774764ada988565a1b01ea886185da9a6ff7dc9faa2d4a848043ec0 + template_sources: + - gemfiles/modular/x_std_libs/r2/libs.gemfile.example + gemfiles/modular/x_std_libs/r3/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r3_libs_gemfile + action: write + dest_sha256: 546f8849f4267bb19aa10ff0de40be30957197f229e6887847181ea9127b2650 + input_fingerprint: de6d9bcc0409ef4cda4bae3860245a9b38cc0f2cfd5801bb9564236a717e0dad + template_sources: + - gemfiles/modular/x_std_libs/r3/libs.gemfile.example + gemfiles/modular/x_std_libs/r4/libs.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_r4_libs_gemfile + action: write + dest_sha256: 8c2582eaa218d216b98c86c933465295c8b4e43f3251ea388b9eaf6e471f8da6 + input_fingerprint: 5021fb3bbb8bf2c4a0f96e16f807622fcd4b6d91d977f239869ab6755f9a76e4 + template_sources: + - gemfiles/modular/x_std_libs/r4/libs.gemfile.example + gemfiles/modular/x_std_libs/vHEAD.gemfile: + recipe: template_source_application_gemfiles_modular_x_std_libs_vHEAD_gemfile + action: write + dest_sha256: d3133ec4c0638363a7fb025d19be7e95a615fd61c35ddb8d17f2280ee74a7486 + input_fingerprint: 836eab0a0f891767d516d4e36ac38663cb573c27680d2cea04cc8af8f3fd8bf0 + template_sources: + - gemfiles/modular/x_std_libs/vHEAD.gemfile.example + lib/plain/merge/version.rb: + recipe: template_source_application_lib_plain_merge_version_rb + action: write + dest_sha256: 53246b305120d39e65898682a2081e790a21f3ebd34e3bd224db7023ff70e10a + input_fingerprint: 9e4d6fd3b57fbecaa7bd042d8c1e0a369fa684bed27f0236d08ebc745c7c7760 + template_sources: + - lib/gem/version.rb.example + plain-merge.gemspec: + recipe: template_source_application_plain_merge_gemspec + action: write + dest_sha256: 78882bc2bad3b66d35dda1d901da1880f69cdf902bf5f2666335bf8fa93507a0 + input_fingerprint: 16578f8e0a54521d760afa399ef13ffa34786be0d4015dd76c7e0d30c2a24b6c + template_sources: + - gem.gemspec.example + sig/plain/merge.rbs: + recipe: template_source_application_sig_plain_merge_rbs + action: write + dest_sha256: 64e58f33bc376f48319c548069ae89bf661a7f9e82265603e2a6840356a927ba + input_fingerprint: c9d11e85932c355372a7052ef01233c67c7afcf353b8b87680825aa3ebb67176 + template_sources: + - sig/gem.rbs.example + spec/spec_helper.rb: + recipe: template_source_application_spec_spec_helper_rb + action: write + dest_sha256: 29092a9a9a3c95a582b394caa251d4118aa5472e0d3f0d0340b5713424da56c9 + input_fingerprint: 3ae5bb0f7db5b63944ed599df1d8fbc3d86eaaefa0fd53b8edc04fadac4fba72 + template_sources: + - spec/spec_helper.rb.example diff --git a/gems/plain-merge/Gemfile b/gems/plain-merge/Gemfile index 316dcca89..d136e057a 100644 --- a/gems/plain-merge/Gemfile +++ b/gems/plain-merge/Gemfile @@ -19,8 +19,7 @@ git_source(:gitlab) { |repo_name| "https://gitlab.com/#{repo_name}" } gemspec # Local workspace dependency wiring for *_local.gemfile overrides -nomono_requirements = ['~> 1.0', '>= 1.0.8'] -gem 'nomono', *nomono_requirements, require: false # ruby >= 2.2 +gem 'nomono', '~> 1.1', '>= 1.1.0', require: false # ruby >= 3.2.0 # Direct sibling dependencies (env-switched via STRUCTUREDMERGE_DEV) direct_sibling_gems = %w[ diff --git a/gems/plain-merge/Gemfile.lock b/gems/plain-merge/Gemfile.lock index 55a73656c..433489e4e 100644 --- a/gems/plain-merge/Gemfile.lock +++ b/gems/plain-merge/Gemfile.lock @@ -78,8 +78,8 @@ GEM bundler (>= 1.14) version_gem (~> 1.1, >= 1.1.4) geom2d (0.4.1) - gitmoji-regex (2.0.4) - version_gem (~> 1.1, >= 1.1.13) + gitmoji-regex (2.0.6) + version_gem (~> 1.1, >= 1.1.14) hexapdf (1.9.1) cmdparse (~> 3.0, >= 3.0.3) geom2d (~> 0.4, >= 0.4.1) @@ -92,20 +92,29 @@ GEM rdoc (>= 4.0.0) reline (>= 0.4.2) json (2.21.1) - kettle-dev (2.3.9) + kettle-dev (2.4.5) emoji_regex (>= 15.0) + kettle-gha-pins (~> 0.3, >= 0.3.1) + kettle-ndjson (~> 0.1, >= 0.1.1) kettle-rb (~> 0.1, >= 0.1.2) - kettle-test (~> 2.0, >= 2.0.4) + kettle-test (~> 2.0, >= 2.0.12) + ruby-progressbar (~> 1.13) + tty-progressbar (~> 0.18) + kettle-gha-pins (0.3.1) ruby-progressbar (~> 1.13) + tty-progressbar (~> 0.18) + version_gem (~> 1.1, >= 1.1.14) + kettle-ndjson (0.1.1) + version_gem (~> 1.1, >= 1.1.14) kettle-rb (0.1.5) - kettle-soup-cover (3.0.4) + kettle-soup-cover (3.0.5) kettle-wash (~> 0.1, >= 0.1.0) simplecov (>= 1.0) simplecov-cobertura (>= 4.0) simplecov-console (~> 0.9, >= 0.9.5) simplecov-rcov (~> 0.3, >= 0.3.7) simplecov_lcov_formatter (~> 0.9, >= 0.9.0) - kettle-test (2.0.12) + kettle-test (2.0.15) appraisal2 (~> 3.0, >= 3.0.6) backports (~> 3.0) rspec (~> 3.0) @@ -132,6 +141,8 @@ GEM racc (~> 1.4) nokogiri (1.19.4-arm64-darwin) racc (~> 1.4) + nokogiri (1.19.4-x86_64-darwin) + racc (~> 1.4) nokogiri (1.19.4-x86_64-linux-gnu) racc (~> 1.4) nokogiri (1.19.4-x86_64-linux-musl) @@ -190,11 +201,11 @@ GEM rspec-mocks (3.13.8) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) - rspec-pending_for (0.1.21) + rspec-pending_for (0.1.22) rspec-core (~> 3.0) ruby_engine (~> 2.0) ruby_version (~> 1.0) - rspec-stubbed_env (1.0.6) + rspec-stubbed_env (1.0.8) rspec-support (3.13.7) rspec_junit_formatter (0.6.0) rspec-core (>= 2, < 4, != 2.12.0) @@ -290,7 +301,7 @@ GEM silent_stream (1.0.12) logger (~> 1.2) version_gem (>= 1.1.8, < 3) - simplecov (1.0.2) + simplecov (1.0.3) simplecov-cobertura (4.0.0) rexml simplecov (~> 1.0) @@ -302,7 +313,7 @@ GEM simplecov (>= 0.4.1) simplecov_lcov_formatter (0.9.0) simplecov (>= 0.18) - sorbet-runtime (0.6.13351) + sorbet-runtime (0.6.13363) standard (1.56.0) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.0) @@ -326,9 +337,9 @@ GEM standard-custom (~> 1.0, >= 1.0.2) standard-performance (~> 1.9, >= 1.9.0) version_gem (~> 1.1, >= 1.1.13) - stone_checksums (1.0.6) - version_gem (~> 1.1, >= 1.1.13) + stone_checksums (1.0.7) stringio (3.2.0) + strings-ansi (0.2.0) strscan (3.1.8) terminal-table (4.0.0) unicode-display_width (>= 1.1.1, < 4) @@ -346,20 +357,27 @@ GEM parslet (~> 2.0) tree_sitter_language_pack (>= 1.13.2, < 2.0) version_gem (~> 1.1, >= 1.1.9) - tree_sitter_language_pack (1.13.3-aarch64-linux) + tree_sitter_language_pack (1.13.4-aarch64-linux) sorbet-runtime (~> 0.5) - tree_sitter_language_pack (1.13.3-arm64-darwin) + tree_sitter_language_pack (1.13.4-arm64-darwin) sorbet-runtime (~> 0.5) - tree_sitter_language_pack (1.13.3-x86_64-linux) + tree_sitter_language_pack (1.13.4-x86_64-darwin) + sorbet-runtime (~> 0.5) + tree_sitter_language_pack (1.13.4-x86_64-linux) sorbet-runtime (~> 0.5) tsort (0.2.0) - turbo_tests2 (3.2.0) + tty-cursor (0.7.1) + tty-progressbar (0.18.3) + strings-ansi (~> 0.2) + tty-cursor (~> 0.7) + tty-screen (~> 0.8) + unicode-display_width (>= 1.6, < 3.0) + tty-screen (0.8.2) + turbo_tests2 (3.2.3) parallel_tests (>= 3.3.0, < 6) rspec (>= 3.10) version_gem (~> 1.1, >= 1.1.14) - unicode-display_width (3.2.0) - unicode-emoji (~> 4.1) - unicode-emoji (4.2.0) + unicode-display_width (2.6.0) version_gem (1.1.14) webrick (1.9.2) yaml-converter (0.2.3) @@ -377,6 +395,9 @@ GEM ostruct rainbow yard + yard-lint (1.10.2) + yard (~> 0.9) + zeitwerk (~> 2.6) yard-relative_markdown_links (0.6.0) nokogiri (>= 1.14.3, < 2) yard-timekeeper (0.2.4) @@ -392,7 +413,7 @@ PLATFORMS aarch64-linux-gnu aarch64-linux-musl arm64-darwin - x86_64-linux + x86_64-darwin x86_64-linux-gnu x86_64-linux-musl @@ -409,12 +430,12 @@ DEPENDENCIES gitmoji-regex (~> 2.0, >= 2.0.0) irb (~> 1.17) kettle-dev (~> 2.0, >= 2.2.25) - kettle-soup-cover (~> 3.0, >= 3.0.3) + kettle-soup-cover (~> 3.0, >= 3.0.5) kettle-test (~> 2.0, >= 2.0.9) kramdown (~> 2.5, >= 2.5.2) kramdown-parser-gfm (~> 1.1) mutex_m (~> 0.2) - nomono (~> 1.0, >= 1.0.8) + nomono (~> 1.1, >= 1.1.0) plain-merge! rake (~> 13.0) rbs (>= 3.0) @@ -438,6 +459,7 @@ DEPENDENCIES yard (~> 0.9, >= 0.9.45) yard-fence (~> 0.9, >= 0.9.6) yard-junk (~> 0.1, >= 0.1.0) + yard-lint (~> 1.10, >= 1.10.2) yard-relative_markdown_links (~> 0.6) yard-timekeeper (~> 0.2, >= 0.2.4) yard-yaml (~> 0.2, >= 0.2.3) @@ -474,15 +496,17 @@ CHECKSUMS erb (6.0.6) sha256=a9b24986700f5bf127c4f297c5403c3ca41b83b0a316c0cd09a096b56e644ae5 gem_bench (2.0.5) sha256=0dc0fb44a5a5eb7b2f5c1c68a5b0164d72007132822c012bac3abe976b199ead geom2d (0.4.1) sha256=ea0998ea90c4f2752e24fe13d85a4f89bee689d151316140ebcc6369bf634ed9 - gitmoji-regex (2.0.4) sha256=01410d3217940bd0e7b2299ec805245afe8d0f06a5d6d38f623d63a63c0ac34f + gitmoji-regex (2.0.6) sha256=d50649caccc8ad1b080f01e869f0909b135206d8b3ece2313ca31a9b0e39f14b hexapdf (1.9.1) sha256=2d1f6a3622e6bc2a70a707d4c3f3fa44f5552ecd9d899f6283abb07398a84884 io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc irb (1.18.0) sha256=de9454a0703a54704b9811a5ef31a60c86949fbf4013fcf244fabc7c775248e3 json (2.21.1) sha256=13a43df75d95641443f5702dff350f237164a9d811ff0f2c2800d4d980220583 - kettle-dev (2.3.9) sha256=03b2f72c6dda4d2c4401ee3c0c96853116c922766e7b5b04224434a49b571bfc + kettle-dev (2.4.5) sha256=3a451940796a671b7adc910db7c3da87899ebec7c5274921ca598345549ae7eb + kettle-gha-pins (0.3.1) sha256=b13a82a403af31880288fe65f85f2a24a93ae4740c0c7cbc15a35044d27aaa51 + kettle-ndjson (0.1.1) sha256=2d84314e8c911d6f560f2736e8f72019df6d811829674788ff33b3bbf518ed66 kettle-rb (0.1.5) sha256=0322a569860c86e70f90d5ebe72353b8720b7054c7efa9f9044857f5c972d29f - kettle-soup-cover (3.0.4) sha256=36d4df472362d2020d16411d7ce26ba2fe2a41fb8be64577ff9b5280acf99d86 - kettle-test (2.0.12) sha256=3a8e5c5f38db03a6f0a8896da6f3576d24e36f53796578c19aafaa2ba5a8ea52 + kettle-soup-cover (3.0.5) sha256=80abb42eb294fa5d3c8632c259a297c554fbc01902714461f3bf99a65190f5d0 + kettle-test (2.0.15) sha256=993b132ffec17fe82cc81c69f876e15d6eb610a4831df08dc01c0cce5c070caa kettle-wash (0.1.1) sha256=ae2e08b64c72c46ceed5ffa197ed859e85352f38ed0412fca2e18ce29b2dc4f9 kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa kramdown-parser-gfm (1.1.0) sha256=fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729 @@ -493,6 +517,7 @@ CHECKSUMS nokogiri (1.19.4-aarch64-linux-gnu) sha256=1269fb644a6de405057a53dd5c762b1209b43ca7424f839454d3dbc677c31a8f nokogiri (1.19.4-aarch64-linux-musl) sha256=35c65b9ce72b3bb03207bdbe7067915019dc18c1b9b59139684bd6690fdd01af nokogiri (1.19.4-arm64-darwin) sha256=a46db9853286e6597b36ebc6953817d15acf3a299583eb3f89fdc6f91dd63527 + nokogiri (1.19.4-x86_64-darwin) sha256=7fd17057d3e1f00e9954a74b3cd76595d3d4a5ef233b7ed9599047c204f70551 nokogiri (1.19.4-x86_64-linux-gnu) sha256=379fae440b28915e3f19d752ce2dcf8465ed2b2fbefd2a7ca0dd497bc981a06a nokogiri (1.19.4-x86_64-linux-musl) sha256=17dfb7c1fa194ae02fbf7c51a7afc8d278045ab3fdacfd86f91d02d7b274470b nomono (1.1.0) sha256=463dd4c79da02a855739a1b5483190d527b7868688be905e84abdb3449b32c88 @@ -523,8 +548,8 @@ CHECKSUMS rspec-core (3.13.6) sha256=a8823c6411667b60a8bca135364351dda34cd55e44ff94c4be4633b37d828b2d rspec-expectations (3.13.5) sha256=33a4d3a1d95060aea4c94e9f237030a8f9eae5615e9bd85718fe3a09e4b58836 rspec-mocks (3.13.8) sha256=086ad3d3d17533f4237643de0b5c42f04b66348c28bf6b9c2d3f4a3b01af1d47 - rspec-pending_for (0.1.21) sha256=c87fda50c20f8faca72d9cfa6a936abffd37860343f14aced95bbb29b8ae96bf - rspec-stubbed_env (1.0.6) sha256=6467a6eb0f72146d443ffb0c5a2a549d8812e59c04fbc81e03cd914ebf1f28dc + rspec-pending_for (0.1.22) sha256=49dc647473f8c8ea4ccc1a33813537dd94b913ef7ec5a8689896101eaacb71cf + rspec-stubbed_env (1.0.8) sha256=b23c4dd5e5d6a0cf0c5b4f6ed3f3678d78e4be9ec247ea9abf0669d20b490535 rspec-support (3.13.7) sha256=0640e5570872aafefd79867901deeeeb40b0c9875a36b983d85f54fb7381c47c rspec_junit_formatter (0.6.0) sha256=40dde674e6ae4e6cc0ff560da25497677e34fefd2338cc467a8972f602b62b15 rubocop (1.88.2) sha256=8def251c90cd955feb4daa3edc0ab56893250c4ce90ef81e6c80c03f9a939bbf @@ -550,39 +575,44 @@ CHECKSUMS ruby_engine (2.0.3) sha256=ca2ae7def8cfcdc2bfb6a186d36d5d59c8b403245dc0256c3802b767fa278aaa ruby_version (1.0.3) sha256=5930f9950746b7e6c973184398ee364ee7440b170fef7922b9f5cdf317f1ccb5 silent_stream (1.0.12) sha256=377c43aa10033fe90c33b39ea8cd97d79f2d1c4856df598efc56f3091f3ae782 - simplecov (1.0.2) sha256=c6459434efe4b948b46477cc2df2faa73ab365f83a33c7c17f81262f4f7f1244 + simplecov (1.0.3) sha256=38ef0514f16ae7562f0d0f4df02610071115103d301b6de7dacbcc000082e39b simplecov-cobertura (4.0.0) sha256=e4fb3159b1ecea545b44f5452a8611305323e78ad23eae8aed35924d072e01ea simplecov-console (0.9.5) sha256=b1108bcfff5f210143e2b8301698c367b01586f20d25a73e95475a5df6fc6ff6 simplecov-rcov (0.3.7) sha256=372f50bf6df6b6350b7d0c840f2f8bdabe021861a43c26877b747c9ac96139fc simplecov_lcov_formatter (0.9.0) sha256=4c1839bb31dcf7a8f7a6474c94ed228aa03b994e9dd5e1965e58b4121b049bed - sorbet-runtime (0.6.13351) sha256=f8fee17c6e3edf835dc6823d26afb9a7c8969c6710d1fabe2fb43f4e0c15c64f + sorbet-runtime (0.6.13363) sha256=f1f0b2e946fb3cd76b9d8e3d85459cdaf7f5466331a400cafcf008e508b6d2c3 standard (1.56.0) sha256=ae2af4d9669589162ac69ed5ef59dcf9f346d4afc81f7e62b84339310dfcb787 standard-custom (1.0.2) sha256=424adc84179a074f1a2a309bb9cf7cd6bfdb2b6541f20c6bf9436c0ba22a652b standard-performance (1.9.0) sha256=49483d31be448292951d80e5e67cdcb576c2502103c7b40aec6f1b6e9c88e3f2 standard-rspec (0.5.0) sha256=64d396524a65af47f5331b423d8cdd313e0267401647bb7892489ca89dad2973 standard-rubocop-lts (2.0.10) sha256=89708a505b7d8b24d2ac399a7520fcb9e764abc2ecb4289b631b5fe0e3b76617 - stone_checksums (1.0.6) sha256=c775f830513d6c6ab26e31d1a5fbecd4c4e39002663d4d9f8fa96e97990b5298 + stone_checksums (1.0.7) sha256=faf7a175da7c4f32777c5292a0128b06eec183b3cc3a0b382529b21800300626 stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1 + strings-ansi (0.2.0) sha256=90262d760ea4a94cc2ae8d58205277a343409c288cbe7c29416b1826bd511c88 strscan (3.1.8) sha256=aae2db611a225559f21ffbb71765c9a4e60fd262534a9ea84f4f11c7f32f679e terminal-table (4.0.0) sha256=f504793203f8251b2ea7c7068333053f0beeea26093ec9962e62ea79f94301d2 thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73 timecop (0.9.11) sha256=41284dc6e5041f2184f781ace766f942108c842f8d8c1386a26e6343decc7542 timecop-rspec (1.0.3) sha256=005f14841bb606dcaefb060e321b5388e2e59537742bee8b3a9a9a40e598fab9 - token-resolver (2.0.5) sha256=b852f924287ffb58a440856e862b056c8ad97e74b4b2526cee43e0771f40c25c + token-resolver (2.0.5) tree_haver (7.1.0) - tree_sitter_language_pack (1.13.3-aarch64-linux) sha256=55ffc7c87868cb45658338363d9eba51b4a8b0259aa88e4de368d2bd1d52fea4 - tree_sitter_language_pack (1.13.3-arm64-darwin) sha256=bc2498db605f212a1dbd2465ed3f65190d7da786f6ed5d30fcf958121aeb4a5c - tree_sitter_language_pack (1.13.3-x86_64-linux) sha256=1ffd045bd236ea54f58c5872ee66121d01033359c1f28f375b7fd4a4b5620cf9 + tree_sitter_language_pack (1.13.4-aarch64-linux) sha256=f7bb95fd59afda1e1b91a7b6ad4df244c585a863e94e4a0f492ef2336a5358b8 + tree_sitter_language_pack (1.13.4-arm64-darwin) sha256=2b48ded1f5feae3de20be1471aaa7c211601ac1c71ca6d4789cf31560a854132 + tree_sitter_language_pack (1.13.4-x86_64-darwin) sha256=8a2460d9029e7610b863d2481e2da0078f87b18bf8668070ccb5ecce71e272d8 + tree_sitter_language_pack (1.13.4-x86_64-linux) sha256=ae3ae718534088b2dc76bd93e7d093f11e8d19188bf47edfcd962df906e1af97 tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f - turbo_tests2 (3.2.0) sha256=8b35421548399d1923567b177970f42671c65695b93cdd134d78fbcbab85dff0 - unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42 - unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f + tty-cursor (0.7.1) sha256=79534185e6a777888d88628b14b6a1fdf5154a603f285f80b1753e1908e0bf48 + tty-progressbar (0.18.3) sha256=6cbb4260e55e74a9180d502143eb6a467d2c8e51bf5f3c9509fb5cacc3d4a5f6 + tty-screen (0.8.2) sha256=c090652115beae764336c28802d633f204fb84da93c6a968aa5d8e319e819b50 + turbo_tests2 (3.2.3) sha256=f77fc0799014c1d7890977e117cf39317bc4544de2c88a55149ed920b4cff942 + unicode-display_width (2.6.0) sha256=12279874bba6d5e4d2728cef814b19197dbb10d7a7837a869bab65da943b7f5a version_gem (1.1.14) sha256=6b7306c7e9416d06067561981ab3444e2cecb844f26cc325ae3c27b44cf85613 webrick (1.9.2) sha256=beb4a15fc474defed24a3bda4ffd88a490d517c9e4e6118c3edce59e45864131 yaml-converter (0.2.3) sha256=d35e69e547610d9e347672cc277fcb7d71dff3c53a942e66f82b1c64022ada72 yard (0.9.45) sha256=52e211493f7cb8a3ebf7e104a25a1e73937a3103092545d34cb88fafebb3dc51 yard-fence (0.9.6) sha256=3d1dbf4e3df462ac78b8bd2e01cf740a2de20168387c929aca31a0bcee490659 yard-junk (0.1.0) sha256=e85fe2ec1afa47313decd333447b53458cb1ed49b510b70015fdc3041a94bcdd + yard-lint (1.10.2) sha256=3e595709d088a8cc827e706a4146b447eb6a907ee375d06c11077369d00717f6 yard-relative_markdown_links (0.6.0) sha256=3e5ffa85cbad9bac70bee5421774b190fb25d3bdf489323a5b3534f647d1a70e yard-timekeeper (0.2.4) sha256=62f8d001d737c6e2ac688e7b37386f958dceb0f6aff9c909575e1bec8d20775a yard-yaml (0.2.3) sha256=fe5fef18819e1cbd05bb8f1b9e1baad6bf70c28125eb75b57bbf6397b0831812 diff --git a/gems/plain-merge/README.md b/gems/plain-merge/README.md index 705faed2c..3c6584aba 100644 --- a/gems/plain-merge/README.md +++ b/gems/plain-merge/README.md @@ -22,6 +22,10 @@ I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-ta ## 🌻 Synopsis Galtzo FLOSS Logo by Aboling0, CC BY-SA 4.0 ruby-lang Logo, Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5 `Plain::Merge` provides text-family fallback behavior for content without a richer parser. It normalizes paragraphs into blocks, compares block similarity, and reports whether two text bodies are close enough for a safe fallback decision. +It also registers the StructuredMerge line substrate with `tree_haver`, so +callers can enter plain text analysis through +`TreeHaver.parser_for(:text, backend_type: :line)` or +`TreeHaver.parser_for(:plain, backend_type: :line)`. ### Key Features @@ -29,6 +33,8 @@ I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-ta - Jaccard similarity scoring. - Configurable text-refinement threshold and weights. - Module-level `merge_text` API for fallback integrations. +- `TreeHaver.parser_for` registration for `:text` and `:plain` through the + `:line` backend. ## 💡 Info you can shake a stick at diff --git a/gems/plain-merge/REEK b/gems/plain-merge/REEK new file mode 100644 index 000000000..e69de29bb diff --git a/gems/plain-merge/bin/kettle-gha-pins b/gems/plain-merge/bin/kettle-gha-pins new file mode 100755 index 000000000..c743cecac --- /dev/null +++ b/gems/plain-merge/bin/kettle-gha-pins @@ -0,0 +1,16 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# +# This file was generated by Bundler. +# +# The application 'kettle-gha-pins' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) + +require 'rubygems' +require 'bundler/setup' + +load Gem.bin_path('kettle-gha-pins', 'kettle-gha-pins') diff --git a/gems/plain-merge/docs/Plain.html b/gems/plain-merge/docs/Plain.html index 2559f7c83..3a344b9ad 100644 --- a/gems/plain-merge/docs/Plain.html +++ b/gems/plain-merge/docs/Plain.html @@ -6,7 +6,7 @@ Module: Plain - — Documentation by YARD 0.9.44 + — Documentation by YARD 0.9.45 @@ -81,7 +81,7 @@
            Defined in:
            lib/plain/merge.rb,
            - lib/plain/merge/version.rb
            + lib/plain/merge/backend.rb,
            lib/plain/merge/version.rb
            @@ -110,9 +110,9 @@

            Defined Under Namespace

            diff --git a/gems/plain-merge/docs/Plain/Merge.html b/gems/plain-merge/docs/Plain/Merge.html index 87e378582..6ac86b5af 100644 --- a/gems/plain-merge/docs/Plain/Merge.html +++ b/gems/plain-merge/docs/Plain/Merge.html @@ -6,7 +6,7 @@ Module: Plain::Merge - — Documentation by YARD 0.9.44 + — Documentation by YARD 0.9.45 @@ -80,19 +80,29 @@
            Defined in:
            -
            lib/plain/merge.rb,
            - lib/plain/merge/version.rb
            +
            lib/plain/merge/backend.rb,
            + lib/plain/merge.rb,
            lib/plain/merge/version.rb
            -

            Defined Under Namespace

            +

            Overview

            +
            +

            StructuredMerge plain text fallback behavior.

            + + +
            +
            +
            + + +

            Defined Under Namespace

            - Modules: Version + Modules: Backend, Version @@ -110,7 +120,7 @@

            PACKAGE_NAME =
            -
            "plain-merge"
            +
            'plain-merge'
            DEFAULT_TEXT_REFINEMENT_THRESHOLD = @@ -126,6 +136,11 @@

            position: 0.15 }.freeze +
            BACKEND_REFERENCE = + +
            +
            TreeHaver::BackendReference.new(id: 'plain-line', family: 'line')
            +
            VERSION =
            @@ -290,6 +305,52 @@

            +
            +
            + +

          • + + +
          • + + + .register_backend! ⇒ Object + + + + + + + + + + + + + +
            +
            + +
          • + + +
          • + + + .register_language!(language_name) ⇒ Object + + + + + + + + + + + + +
            @@ -441,7 +502,7 @@

            end { - kind: "text", + kind: 'text', normalized_source: normalized_source, blocks: blocks } @@ -589,7 +650,7 @@

            matched << { template_index: template_index, destination_index: destination_index, - phase: "exact", + phase: 'exact', score: 1.0 } end @@ -621,7 +682,7 @@

            matched << { template_index: best_template_index, destination_index: destination_index, - phase: "refined", + phase: 'refined', score: best_score } end @@ -732,7 +793,7 @@

            .gsub(/\r\n?/, "\n") .strip .split(/\n\s*\n+/) - .map { |block| block.strip.gsub(/\s+/, " ") } + .map { |block| block.strip.gsub(/\s+/, ' ') } .reject(&:empty?) .join("\n\n") end @@ -767,12 +828,14 @@

            186 187 188 -189 +189 +190
            # File 'lib/plain/merge.rb', line 178
             
            -def refined_text_similarity(template_block, destination_block, template_total, destination_total, weights = DEFAULT_TEXT_REFINEMENT_WEIGHTS)
            +def refined_text_similarity(template_block, destination_block, template_total, destination_total,
            +                            weights = DEFAULT_TEXT_REFINEMENT_WEIGHTS)
               content = string_similarity(template_block[:normalized], destination_block[:normalized])
               length = length_similarity(template_block[:normalized], destination_block[:normalized])
               position = position_similarity(
            @@ -787,6 +850,86 @@ 

            + + +
            +

            + + .register_backend!Object + + + + + +

            + + + + +
            +
            +
            +
            +40
            +41
            +42
            +43
            +44
            +45
            +46
            +
            +
            # File 'lib/plain/merge/backend.rb', line 40
            +
            +def self.register_backend!
            +  TreeHaver::BackendRegistry.register(BACKEND_REFERENCE)
            +  %i[text plain].each do |language_name|
            +    register_language!(language_name)
            +  end
            +  nil
            +end
            +
            +
            + +
            +

            + + .register_language!(language_name) ⇒ Object + + + + + +

            + + + + +
            +
            +
            +
            +48
            +49
            +50
            +51
            +52
            +53
            +54
            +55
            +56
            +
            +
            # File 'lib/plain/merge/backend.rb', line 48
            +
            +def self.register_language!(language_name)
            +  TreeHaver.register_language(
            +    language_name,
            +    backend_module: Backend,
            +    backend_type: :line,
            +    gem_name: 'plain-merge',
            +    contract: :line
            +  )
            +end
            +
            @@ -875,7 +1018,7 @@

            def text_feature_profile { - family: "text", + family: 'text', supported_dialects: [], supported_policies: [] } @@ -908,7 +1051,7 @@

            # File 'lib/plain/merge.rb', line 28
             
             def text_parse_request(source)
            -  TreeHaver::ParserRequest.new(source: source, language: "text")
            +  TreeHaver::ParserRequest.new(source: source, language: 'text')
             end
            @@ -920,9 +1063,9 @@

            diff --git a/gems/plain-merge/docs/Plain/Merge/Backend.html b/gems/plain-merge/docs/Plain/Merge/Backend.html new file mode 100644 index 000000000..fc01b9cdd --- /dev/null +++ b/gems/plain-merge/docs/Plain/Merge/Backend.html @@ -0,0 +1,118 @@ + + + + + + + Module: Plain::Merge::Backend + + — Documentation by YARD 0.9.45 + + + + + + + + + + + + + + + + + + + + + +
            + + +

            Module: Plain::Merge::Backend + + + +

            +
            + + + + + + + + + + + +
            +
            Defined in:
            +
            lib/plain/merge/backend.rb +
            +
            + +
            + +

            Defined Under Namespace

            +

            + + + + + Classes: Language, Parser + + +

            + + + + + + + + + +
            + + + +
            + + diff --git a/gems/plain-merge/docs/Plain/Merge/Backend/Language.html b/gems/plain-merge/docs/Plain/Merge/Backend/Language.html new file mode 100644 index 000000000..a9f372ee0 --- /dev/null +++ b/gems/plain-merge/docs/Plain/Merge/Backend/Language.html @@ -0,0 +1,341 @@ + + + + + + + Class: Plain::Merge::Backend::Language + + — Documentation by YARD 0.9.45 + + + + + + + + + + + + + + + + + + + + + +
            + + +

            Class: Plain::Merge::Backend::Language + + + +

            +
            + +
            +
            Inherits:
            +
            + TreeHaver::Base::Language + +
              +
            • Object
            • + + + + + +
            + show all + +
            +
            + + + + + + + + + + + +
            +
            Defined in:
            +
            lib/plain/merge/backend.rb +
            +
            + +
            + +

            Overview

            +
            +

            TreeHaver language wrapper for plain text parsed into normalized line
            +and paragraph/block ownership data.

            + + +
            +
            +
            + + +
            + + + + + + + +

            + Class Method Summary + collapse +

            + + + + +

            + Instance Method Summary + collapse +

            + + + + + + +
            +

            Constructor Details

            + +
            +

            + + #initialize(name = :text) ⇒ Language + + + + + +

            +
            +

            Returns a new instance of Language.

            + + +
            +
            +
            + + +
            + + + + +
            +
            +
            +
            +12
            +13
            +14
            +
            +
            # File 'lib/plain/merge/backend.rb', line 12
            +
            +def initialize(name = :text)
            +  super(name, backend: :line, options: {})
            +end
            +
            +
            + +
            + + +
            +

            Class Method Details

            + + +
            +

            + + .plainObject + + + + + +

            + + + + +
            +
            +
            +
            +20
            +21
            +22
            +
            +
            # File 'lib/plain/merge/backend.rb', line 20
            +
            +def self.plain
            +  new(:plain)
            +end
            +
            +
            + +
            +

            + + .textObject + + + + + +

            + + + + +
            +
            +
            +
            +16
            +17
            +18
            +
            +
            # File 'lib/plain/merge/backend.rb', line 16
            +
            +def self.text
            +  new(:text)
            +end
            +
            +
            + +
            + +
            + + + +
            + + diff --git a/gems/plain-merge/docs/Plain/Merge/Backend/Parser.html b/gems/plain-merge/docs/Plain/Merge/Backend/Parser.html new file mode 100644 index 000000000..db59c7c12 --- /dev/null +++ b/gems/plain-merge/docs/Plain/Merge/Backend/Parser.html @@ -0,0 +1,266 @@ + + + + + + + Class: Plain::Merge::Backend::Parser + + — Documentation by YARD 0.9.45 + + + + + + + + + + + + + + + + + + + + + +
            + + +

            Class: Plain::Merge::Backend::Parser + + + +

            +
            + +
            +
            Inherits:
            +
            + TreeHaver::Base::Parser + +
              +
            • Object
            • + + + + + +
            + show all + +
            +
            + + + + + + + + + + + +
            +
            Defined in:
            +
            lib/plain/merge/backend.rb +
            +
            + +
            + +

            Overview

            +
            +

            Parser adapter that exposes plain text analysis through TreeHaver’s
            +normalized backend registry.

            + + +
            +
            +
            + + +
            + + + + + + + +

            + Instance Method Summary + collapse +

            + + + + + + + + +
            +

            Instance Method Details

            + + +
            +

            + + #parse(source) ⇒ Object + + + + + +

            + + + + +
            +
            +
            +
            +28
            +29
            +30
            +31
            +32
            +
            +
            # File 'lib/plain/merge/backend.rb', line 28
            +
            +def parse(source)
            +  raise 'Language not set' unless language
            +
            +  Plain::Merge.analyze_text(source)
            +end
            +
            +
            + +
            +

            + + #parse_string(_old_tree, source) ⇒ Object + + + + + +

            + + + + +
            +
            +
            +
            +34
            +35
            +36
            +
            +
            # File 'lib/plain/merge/backend.rb', line 34
            +
            +def parse_string(_old_tree, source)
            +  parse(source)
            +end
            +
            +
            + +
            + +
            + + + +
            + + diff --git a/gems/plain-merge/docs/Plain/Merge/Version.html b/gems/plain-merge/docs/Plain/Merge/Version.html index 6abe48e3f..3f2735747 100644 --- a/gems/plain-merge/docs/Plain/Merge/Version.html +++ b/gems/plain-merge/docs/Plain/Merge/Version.html @@ -6,7 +6,7 @@ Module: Plain::Merge::Version - — Documentation by YARD 0.9.44 + — Documentation by YARD 0.9.45 @@ -98,7 +98,7 @@

            VERSION =
            -
            "7.0.0"
            +
            '7.1.0'
            @@ -114,9 +114,9 @@

            diff --git a/gems/plain-merge/docs/_index.html b/gems/plain-merge/docs/_index.html index 6129412a6..803d8198f 100644 --- a/gems/plain-merge/docs/_index.html +++ b/gems/plain-merge/docs/_index.html @@ -4,7 +4,7 @@ - Documentation by YARD 0.9.44 + Documentation by YARD 0.9.45 @@ -54,7 +54,7 @@
            -

            Documentation by YARD 0.9.44

            +

            Documentation by YARD 0.9.45

            Alphabetic Index

            @@ -87,6 +87,36 @@

            Namespace Listing A-Z

            +
              +
            • B
            • +
                + +
              • + Backend + + (Plain::Merge) + +
              • + +
              +
            + + +
              +
            • L
            • +
                + +
              • + Language + + (Plain::Merge::Backend) + +
              • + +
              +
            + +
            • M
              • @@ -106,6 +136,13 @@

                Namespace Listing A-Z

              • P
                • +
                • + Parser + + (Plain::Merge::Backend) + +
                • +
                • Plain @@ -138,9 +175,9 @@

                  Namespace Listing A-Z

            diff --git a/gems/plain-merge/docs/class_list.html b/gems/plain-merge/docs/class_list.html index 71a9d4d26..89dd83816 100644 --- a/gems/plain-merge/docs/class_list.html +++ b/gems/plain-merge/docs/class_list.html @@ -46,7 +46,7 @@

            Class List

            diff --git a/gems/plain-merge/docs/file.AGPL-3.0-only.html b/gems/plain-merge/docs/file.AGPL-3.0-only.html index 238158703..be553133f 100644 --- a/gems/plain-merge/docs/file.AGPL-3.0-only.html +++ b/gems/plain-merge/docs/file.AGPL-3.0-only.html @@ -6,7 +6,7 @@ File: AGPL-3.0-only - — Documentation by YARD 0.9.44 + — Documentation by YARD 0.9.45 @@ -342,9 +342,9 @@ diff --git a/gems/plain-merge/docs/file.LICENSE.html b/gems/plain-merge/docs/file.LICENSE.html index 64dce0ea7..80a86238a 100644 --- a/gems/plain-merge/docs/file.LICENSE.html +++ b/gems/plain-merge/docs/file.LICENSE.html @@ -6,7 +6,7 @@ File: LICENSE - — Documentation by YARD 0.9.44 + — Documentation by YARD 0.9.45 @@ -65,21 +65,23 @@ Choose the option that best fits your use case:

            If none of the above licenses fit your use case, please contact us to discuss a custom commercial license.

            -

            Required Notice: Copyright (c) 2026 Peter H. Boling

            +
              +
            • Required Notice: Copyright (c) 2026 Peter H. Boling
            • +
            diff --git a/gems/plain-merge/docs/file.PolyForm-Small-Business-1.0.0.html b/gems/plain-merge/docs/file.PolyForm-Small-Business-1.0.0.html index f1bda0847..8c4778386 100644 --- a/gems/plain-merge/docs/file.PolyForm-Small-Business-1.0.0.html +++ b/gems/plain-merge/docs/file.PolyForm-Small-Business-1.0.0.html @@ -6,7 +6,7 @@ File: PolyForm-Small-Business-1.0.0 - — Documentation by YARD 0.9.44 + — Documentation by YARD 0.9.45 @@ -185,9 +185,9 @@

            Definitions

            diff --git a/gems/plain-merge/docs/file.README.html b/gems/plain-merge/docs/file.README.html index e3edd6b8a..07471478b 100644 --- a/gems/plain-merge/docs/file.README.html +++ b/gems/plain-merge/docs/file.README.html @@ -6,7 +6,7 @@ File: README - — Documentation by YARD 0.9.44 + — Documentation by YARD 0.9.45 @@ -59,7 +59,7 @@
            -

            Galtzo FLOSS Logo by Aboling0, CC BY-SA 4.0 ruby-lang Logo, Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5 structuredmerge Logo by Aboling0, CC BY-SA 4.0

            +

            structuredmerge Logo by Aboling0, CC BY-SA 4.0

            ☯️ Plain::Merge

            @@ -71,18 +71,23 @@

            ☯️ Plain::Merge

            if ci_badges.map(&:color).all? { it == "green"} 👇️ send money so I can do more of this. FLOSS maintenance is now my full-time job.

            -

            Sponsor Me on Github Liberapay Goal Progress Donate on PayPal Buy me a coffee Donate on Polar Donate at ko-fi.com

            +

            Sponsor Me on Github Liberapay Goal Progress Donate on PayPal Buy me a coffee Donate at ko-fi.com

            - 👣 How will this project approach the September 2025 hostile takeover of RubyGems? 🚑️ + 👣 How will this project approach the September 2025 hostile takeover of RubyGems? 🚑️ -I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-takeover-of-rubygems-my-thoughts-5hlo). +

            I’ve summarized my thoughts in this blog post.

            -

            🌻 Synopsis

            +

            🌻 Synopsis Galtzo FLOSS Logo by Aboling0, CC BY-SA 4.0 ruby-lang Logo, Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5 +

            -

            Plain::Merge provides text-family fallback behavior for content without a richer parser. It normalizes paragraphs into blocks, compares block similarity, and reports whether two text bodies are close enough for a safe fallback decision.

            +

            Plain::Merge provides text-family fallback behavior for content without a richer parser. It normalizes paragraphs into blocks, compares block similarity, and reports whether two text bodies are close enough for a safe fallback decision.
            +It also registers the StructuredMerge line substrate with tree_haver, so
            +callers can enter plain text analysis through
            +TreeHaver.parser_for(:text, backend_type: :line) or
            +TreeHaver.parser_for(:plain, backend_type: :line).

            Key Features

            @@ -91,6 +96,9 @@

            Key Features

          • Jaccard similarity scoring.
          • Configurable text-refinement threshold and weights.
          • Module-level merge_text API for fallback integrations.
          • +
          • +TreeHaver.parser_for registration for :text and :plain through the
            +:line backend.

          💡 Info you can shake a stick at

          @@ -107,20 +115,18 @@

          💡 Info you can shake a stick at

          Works with MRI Ruby 4 - -Ruby 4.0 Compat Ruby current Compat - + Ruby current Compat Support & Community -Join Me on Daily.dev's RubyFriends Live Chat on Discord Get help from me on Upwork Get help from me on Codementor +Join Me on Daily.dev's RubyFriends Get help from RubyForum Live Chat on Discord Get help from me on Upwork Get help from me on Codementor Source -Source on GitLab.com Source on CodeBerg.org Source on Github.com The best SHA: dQw4w9WgXcQ! +Source on GitLab.com Source on CodeBerg.org Source on GitHub.com The best SHA: dQw4w9WgXcQ! @@ -165,20 +171,75 @@

          Compatibility

          may be higher than the gem’s runtime compatibility floor when legacy Rubies are
          not practical for the current toolchain.

          - - - - - - - - - - - - - -
          🚚 Amazing test matrix was brought to you by🔎 appraisal2 🔎 and the color 💚 green 💚
          👟 Check it out!github.com/appraisal-rb/appraisal2
          +

          kettle-dev Logo by Aboling0, CC BY-SA 4.0

          + +

          The amazing test matrix is powered by the kettle-dev stack.

          + +
          + How kettle-dev manages complexity in tests + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          GemSourceRoleDaily download rank
          appraisal2GitHubmulti-dependency Appraisal matrix generationDaily download rank for appraisal2
          appraisal2-rubocopGitHubRuboCop Appraisal generator integrationDaily download rank for appraisal2-rubocop
          kettle-devGitHubdevelopment, release, and CI workflow toolingDaily download rank for kettle-dev
          kettle-jemGitHubAppraisals & CI workflow templatesDaily download rank for kettle-jem
          kettle-soup-coverGitHubSimpleCov coverage policy and reportingDaily download rank for kettle-soup-cover
          kettle-testGitHubstandard test runner and coverage harnessDaily download rank for kettle-test
          rubocop-ltsGitHubRuby-version-aware lintingDaily download rank for rubocop-lts
          turbo_tests2GitHubparallel test executionDaily download rank for turbo_tests2
          + +

          ✨ Installation

          @@ -254,7 +315,7 @@

          📌 Versioning

          📄 License

          -

          The gem is available under the following licenses: AGPL-3.0-only, PolyForm-Small-Business-1.0.0.
          +

          The gem is available under the following licenses: AGPL-3.0-only, PolyForm-Small-Business-1.0.0.
          See LICENSE.md for details.

          If none of the available licenses suit your use case, please contact us to discuss a custom commercial license.

          @@ -262,9 +323,9 @@

          📄 License

          diff --git a/gems/plain-merge/docs/frames.html b/gems/plain-merge/docs/frames.html index 3223dddda..4a6186cad 100644 --- a/gems/plain-merge/docs/frames.html +++ b/gems/plain-merge/docs/frames.html @@ -2,7 +2,7 @@ - Documentation by YARD 0.9.44 + Documentation by YARD 0.9.45 + + + + + + + + + + + + + +
          + + +

          Module: Zip::Merge::Backend + + + +

          +
          + + + + + + + + + + + +
          +
          Defined in:
          +
          lib/zip/merge/backend.rb +
          +
          + +
          + +

          Defined Under Namespace

          +

          + + + + + Classes: Language, Parser + + +

          + + + + + + + + + +
          + + + +
          + + diff --git a/gems/zip-merge/docs/Zip/Merge/Backend/Language.html b/gems/zip-merge/docs/Zip/Merge/Backend/Language.html new file mode 100644 index 000000000..436d70a9d --- /dev/null +++ b/gems/zip-merge/docs/Zip/Merge/Backend/Language.html @@ -0,0 +1,288 @@ + + + + + + + Class: Zip::Merge::Backend::Language + + — Documentation by YARD 0.9.45 + + + + + + + + + + + + + + + + + + + + + +
          + + +

          Class: Zip::Merge::Backend::Language + + + +

          +
          + +
          +
          Inherits:
          +
          + TreeHaver::Base::Language + +
            +
          • Object
          • + + + + + +
          + show all + +
          +
          + + + + + + + + + + + +
          +
          Defined in:
          +
          lib/zip/merge/backend.rb +
          +
          + +
          + +

          Overview

          +
          +

          TreeHaver language wrapper for ZIP archives parsed through Kaitai-style
          +binary AST inventory.

          + + +
          +
          +
          + + +
          + + + + + + + +

          + Class Method Summary + collapse +

          + + + + +

          + Instance Method Summary + collapse +

          + + + + + + +
          +

          Constructor Details

          + +
          +

          + + #initialize(name = :zip) ⇒ Language + + + + + +

          +
          +

          Returns a new instance of Language.

          + + +
          +
          +
          + + +
          + + + + +
          +
          +
          +
          +12
          +13
          +14
          +
          +
          # File 'lib/zip/merge/backend.rb', line 12
          +
          +def initialize(name = :zip)
          +  super(name, backend: :kaitai, options: {})
          +end
          +
          +
          + +
          + + +
          +

          Class Method Details

          + + +
          +

          + + .zipObject + + + + + +

          + + + + +
          +
          +
          +
          +16
          +17
          +18
          +
          +
          # File 'lib/zip/merge/backend.rb', line 16
          +
          +def self.zip
          +  new(:zip)
          +end
          +
          +
          + +
          + +
          + + + +
          + + diff --git a/gems/zip-merge/docs/Zip/Merge/Backend/Parser.html b/gems/zip-merge/docs/Zip/Merge/Backend/Parser.html new file mode 100644 index 000000000..678bd1cb4 --- /dev/null +++ b/gems/zip-merge/docs/Zip/Merge/Backend/Parser.html @@ -0,0 +1,266 @@ + + + + + + + Class: Zip::Merge::Backend::Parser + + — Documentation by YARD 0.9.45 + + + + + + + + + + + + + + + + + + + + + +
          + + +

          Class: Zip::Merge::Backend::Parser + + + +

          +
          + +
          +
          Inherits:
          +
          + TreeHaver::Base::Parser + +
            +
          • Object
          • + + + + + +
          + show all + +
          +
          + + + + + + + + + + + +
          +
          Defined in:
          +
          lib/zip/merge/backend.rb +
          +
          + +
          + +

          Overview

          +
          +

          Parser adapter that exposes the ZIP inventory as the TreeHaver
          +parser_for(:zip) Kaitai backend surface.

          + + +
          +
          +
          + + +
          + + + + + + + +

          + Instance Method Summary + collapse +

          + + + + + + + + +
          +

          Instance Method Details

          + + +
          +

          + + #parse(source) ⇒ Object + + + + + +

          + + + + +
          +
          +
          +
          +24
          +25
          +26
          +27
          +28
          +
          +
          # File 'lib/zip/merge/backend.rb', line 24
          +
          +def parse(source)
          +  raise 'Language not set' unless language
          +
          +  Zip::Merge.parse_zip_inventory(source)
          +end
          +
          +
          + +
          +

          + + #parse_string(_old_tree, source) ⇒ Object + + + + + +

          + + + + +
          +
          +
          +
          +30
          +31
          +32
          +
          +
          # File 'lib/zip/merge/backend.rb', line 30
          +
          +def parse_string(_old_tree, source)
          +  parse(source)
          +end
          +
          +
          + +
          + +
          + + + +
          + + diff --git a/gems/zip-merge/docs/Zip/Merge/Version.html b/gems/zip-merge/docs/Zip/Merge/Version.html index 06444f4f0..374012eaf 100644 --- a/gems/zip-merge/docs/Zip/Merge/Version.html +++ b/gems/zip-merge/docs/Zip/Merge/Version.html @@ -6,7 +6,7 @@ Module: Zip::Merge::Version - — Documentation by YARD 0.9.44 + — Documentation by YARD 0.9.45 @@ -98,7 +98,7 @@

          VERSION =
          -
          "7.0.0"
          +
          '7.1.0'
          @@ -114,9 +114,9 @@

          diff --git a/gems/zip-merge/docs/_index.html b/gems/zip-merge/docs/_index.html index 67a386e51..e053dee90 100644 --- a/gems/zip-merge/docs/_index.html +++ b/gems/zip-merge/docs/_index.html @@ -4,7 +4,7 @@ - Documentation by YARD 0.9.44 + Documentation by YARD 0.9.45 @@ -54,7 +54,7 @@
          -

          Documentation by YARD 0.9.44

          +

          Documentation by YARD 0.9.45

          Alphabetic Index

          @@ -87,6 +87,36 @@

          Namespace Listing A-Z

          +
            +
          • B
          • +
              + +
            • + Backend + + (Zip::Merge) + +
            • + +
            +
          + + +
            +
          • L
          • +
              + +
            • + Language + + (Zip::Merge::Backend) + +
            • + +
            +
          + +
          • M
            • @@ -102,6 +132,21 @@

              Namespace Listing A-Z

            +
              +
            • P
            • +
                + +
              • + Parser + + (Zip::Merge::Backend) + +
              • + +
              +
            + +
            • V
              • @@ -138,9 +183,9 @@

                Namespace Listing A-Z

          diff --git a/gems/zip-merge/docs/class_list.html b/gems/zip-merge/docs/class_list.html index fdc13ec92..ed77f3873 100644 --- a/gems/zip-merge/docs/class_list.html +++ b/gems/zip-merge/docs/class_list.html @@ -46,7 +46,7 @@

          Class List

          diff --git a/gems/zip-merge/docs/file.AGPL-3.0-only.html b/gems/zip-merge/docs/file.AGPL-3.0-only.html index 6d388b26d..1779e70ed 100644 --- a/gems/zip-merge/docs/file.AGPL-3.0-only.html +++ b/gems/zip-merge/docs/file.AGPL-3.0-only.html @@ -6,7 +6,7 @@ File: AGPL-3.0-only - — Documentation by YARD 0.9.44 + — Documentation by YARD 0.9.45 @@ -342,9 +342,9 @@ diff --git a/gems/zip-merge/docs/file.LICENSE.html b/gems/zip-merge/docs/file.LICENSE.html index db5139faf..d47886de9 100644 --- a/gems/zip-merge/docs/file.LICENSE.html +++ b/gems/zip-merge/docs/file.LICENSE.html @@ -6,7 +6,7 @@ File: LICENSE - — Documentation by YARD 0.9.44 + — Documentation by YARD 0.9.45 @@ -65,21 +65,23 @@ Choose the option that best fits your use case:

          If none of the above licenses fit your use case, please contact us to discuss a custom commercial license.

          -

          Required Notice: Copyright (c) 2026 Peter H. Boling

          +
            +
          • Required Notice: Copyright (c) 2026 Peter H. Boling
          • +
          diff --git a/gems/zip-merge/docs/file.PolyForm-Small-Business-1.0.0.html b/gems/zip-merge/docs/file.PolyForm-Small-Business-1.0.0.html index 9c8ab93b1..8a96ef64d 100644 --- a/gems/zip-merge/docs/file.PolyForm-Small-Business-1.0.0.html +++ b/gems/zip-merge/docs/file.PolyForm-Small-Business-1.0.0.html @@ -6,7 +6,7 @@ File: PolyForm-Small-Business-1.0.0 - — Documentation by YARD 0.9.44 + — Documentation by YARD 0.9.45 @@ -185,9 +185,9 @@

          Definitions

          diff --git a/gems/zip-merge/docs/file.README.html b/gems/zip-merge/docs/file.README.html index 8dcf9b369..3c5e98a8f 100644 --- a/gems/zip-merge/docs/file.README.html +++ b/gems/zip-merge/docs/file.README.html @@ -6,7 +6,7 @@ File: README - — Documentation by YARD 0.9.44 + — Documentation by YARD 0.9.45 @@ -59,7 +59,7 @@
          -

          Galtzo FLOSS Logo by Aboling0, CC BY-SA 4.0 ruby-lang Logo, Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5 structuredmerge Logo by Aboling0, CC BY-SA 4.0

          +

          structuredmerge Logo by Aboling0, CC BY-SA 4.0

          ☯️ Zip::Merge

          @@ -71,23 +71,34 @@

          ☯️ Zip::Merge

          if ci_badges.map(&:color).all? { it == "green"} 👇️ send money so I can do more of this. FLOSS maintenance is now my full-time job.

          -

          Sponsor Me on Github Liberapay Goal Progress Donate on PayPal Buy me a coffee Donate on Polar Donate at ko-fi.com

          +

          Sponsor Me on Github Liberapay Goal Progress Donate on PayPal Buy me a coffee Donate at ko-fi.com

          - 👣 How will this project approach the September 2025 hostile takeover of RubyGems? 🚑️ + 👣 How will this project approach the September 2025 hostile takeover of RubyGems? 🚑️ -I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-takeover-of-rubygems-my-thoughts-5hlo). +

          I’ve summarized my thoughts in this blog post.

          -

          🌻 Synopsis

          +

          🌻 Synopsis Galtzo FLOSS Logo by Aboling0, CC BY-SA 4.0 ruby-lang Logo, Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5 +

          -

          Zip::Merge plans ZIP archive merges by member path and raw byte ranges. It identifies safe preservation cases, unsafe entries, members that need structured nested merges, and archive metadata that must be rewritten by a renderer.

          +

          Zip::Merge plans ZIP archive merges by member path and raw byte ranges. It is
          +a Kaitai-family binary AST integration in the StructuredMerge stack: ZIP
          +inventories are represented with TreeHaver ZIP report nodes, and analysis enters
          +through a parser_for(:zip) Kaitai path. It depends on binary-merge for the
          +shared binary-family substrate: preservation reports, unsafe diagnostics,
          +byte-range ownership, and renderer planning vocabulary.
          +It identifies safe preservation cases, unsafe entries, members that need
          +structured nested merges, and archive metadata that must be rewritten by a
          +renderer.

          Key Features

          • Central directory and local header inventory parsing.
          • +
          • Kaitai-family binary AST reporting through TreeHaver ZIP structures.
          • +
          • Shared binary-family report and diagnostic helpers from binary-merge.
          • Member decisions for preserve, add, delete, rewrite, delegate, and reject operations.
          • Nested family dispatch for structured archive members.
          • Raw-preserving renderer for safe unchanged members.
          • @@ -108,20 +119,18 @@

            💡 Info you can shake a stick at

            Works with MRI Ruby 4 - -Ruby 4.0 Compat Ruby current Compat - + Ruby current Compat Support & Community -Join Me on Daily.dev's RubyFriends Live Chat on Discord Get help from me on Upwork Get help from me on Codementor +Join Me on Daily.dev's RubyFriends Get help from RubyForum Live Chat on Discord Get help from me on Upwork Get help from me on Codementor Source -Source on GitLab.com Source on CodeBerg.org Source on Github.com The best SHA: dQw4w9WgXcQ! +Source on GitLab.com Source on CodeBerg.org Source on GitHub.com The best SHA: dQw4w9WgXcQ! @@ -166,20 +175,75 @@

            Compatibility

            may be higher than the gem’s runtime compatibility floor when legacy Rubies are
            not practical for the current toolchain.

            - - - - - - - - - - - - - -
            🚚 Amazing test matrix was brought to you by🔎 appraisal2 🔎 and the color 💚 green 💚
            👟 Check it out!github.com/appraisal-rb/appraisal2
            +

            kettle-dev Logo by Aboling0, CC BY-SA 4.0

            + +

            The amazing test matrix is powered by the kettle-dev stack.

            + +
            + How kettle-dev manages complexity in tests + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
            GemSourceRoleDaily download rank
            appraisal2GitHubmulti-dependency Appraisal matrix generationDaily download rank for appraisal2
            appraisal2-rubocopGitHubRuboCop Appraisal generator integrationDaily download rank for appraisal2-rubocop
            kettle-devGitHubdevelopment, release, and CI workflow toolingDaily download rank for kettle-dev
            kettle-jemGitHubAppraisals & CI workflow templatesDaily download rank for kettle-jem
            kettle-soup-coverGitHubSimpleCov coverage policy and reportingDaily download rank for kettle-soup-cover
            kettle-testGitHubstandard test runner and coverage harnessDaily download rank for kettle-test
            rubocop-ltsGitHubRuby-version-aware lintingDaily download rank for rubocop-lts
            turbo_tests2GitHubparallel test executionDaily download rank for turbo_tests2
            + +

            ✨ Installation

            @@ -209,9 +273,10 @@

            🔧 Basic Usage

            require "zip/merge"
             
            -ancestor = Zip::Merge.parse_zip_inventory(File.binread("base.zip"))
            -current = Zip::Merge.parse_zip_inventory(File.binread("ours.zip"))
            -incoming = Zip::Merge.parse_zip_inventory(File.binread("theirs.zip"))
            +zip_parser = TreeHaver.parser_for(:zip, backend_type: :kaitai)
            +ancestor = zip_parser.parse(File.binread("base.zip"))
            +current = zip_parser.parse(File.binread("ours.zip"))
            +incoming = zip_parser.parse(File.binread("theirs.zip"))
             
             plan = Zip::Merge.plan_zip_merge(ancestor, current, incoming)
             plan.member_decisions.each do |decision|
            @@ -262,7 +327,7 @@ 

            📌 Versioning

            📄 License

            -

            The gem is available under the following licenses: AGPL-3.0-only, PolyForm-Small-Business-1.0.0.
            +

            The gem is available under the following licenses: AGPL-3.0-only, PolyForm-Small-Business-1.0.0.
            See LICENSE.md for details.

            If none of the available licenses suit your use case, please contact us to discuss a custom commercial license.

            @@ -270,9 +335,9 @@

            📄 License

          diff --git a/gems/zip-merge/docs/frames.html b/gems/zip-merge/docs/frames.html index 3223dddda..4a6186cad 100644 --- a/gems/zip-merge/docs/frames.html +++ b/gems/zip-merge/docs/frames.html @@ -2,7 +2,7 @@ - Documentation by YARD 0.9.44 + Documentation by YARD 0.9.45