kettle-family 1.2.85 → 1.2.86

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 91a1c4bf31a3387bf5e7170148accfe48611ebe4596466384e2ac34a228a0a07
4
- data.tar.gz: ac8fc14eae4354a6dc774158a60c4bd522cc0db9ed530b775f310e2c37eb5650
3
+ metadata.gz: 21a652aea8226a4e77e30eec15208ab8337acb1c588828c2513d74b73d83186b
4
+ data.tar.gz: fe8cefdd96d256b3a0c08db1eab5ff75c03a2afe7f70d1a8ca3778d9b1609444
5
5
  SHA512:
6
- metadata.gz: 2495673c5566c9233553c229ac8e8b2973037a563fb97d29c22dc87852cb67811720768bfc290ffa78ac125eafb655614e857f42779f7441b8d6d5ba080bfe6d
7
- data.tar.gz: 3909f42f4f582bd05fe26997963b9778c81afbd129775c9df77d7d229ffffb5a181fccce7a6f46caff377f819b15feb922009e849b75a1815ae94ac5d47e1f2d
6
+ metadata.gz: 491966653b36eb913a447b028de8f68dc7bf3f9e8291bea3205d95083d7d7173fe310eb8f81f456793a7f4f86650229ac2b940ef6f29bb0a7620c949c6444dbd
7
+ data.tar.gz: 98e477f02f7d1d7dbfd142108430061d11061e215702544cb304e0a126403ec2fc15aa41f89b0431436cfe6b0c53c1dcc7eb60239805d8a0d4c384bd2558985d
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -30,6 +30,21 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [1.2.86] - 2026-09-06
34
+
35
+ - TAG: [v1.2.86][1.2.86t]
36
+ - COVERAGE: 93.09% -- 5805/6236 lines in 34 files
37
+ - BRANCH COVERAGE: 76.16% -- 2354/3091 branches in 34 files
38
+ - 31.88% documented
39
+
40
+ ### Fixed
41
+
42
+ - Recover template lockfiles in the configured local dependency graph instead of release normalization mode.
43
+
44
+ - Use the templating dependency graph during initial template lockfile preparation.
45
+
46
+ - Define execution profiles and add real Bundler compatibility scenarios for template and release lockfile isolation.
47
+
33
48
  ## [1.2.85] - 2026-09-06
34
49
 
35
50
  - TAG: [v1.2.85][1.2.85t]
@@ -2523,7 +2538,9 @@ Please file a bug if you notice a violation of semantic versioning.
2523
2538
  - Fixed CI load failures on engines without compatible `pty` support by falling back to Open3 for interactive release commands.
2524
2539
  - Fixed Ruby 3.2 version-bump support by loading Prism lazily and wiring the Prism gem only for MRI versions that need it.
2525
2540
 
2526
- [Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.85...HEAD
2541
+ [Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.86...HEAD
2542
+ [1.2.86]: https://github.com/kettle-dev/kettle-family/compare/v1.2.85...v1.2.86
2543
+ [1.2.86t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.86
2527
2544
  [1.2.85]: https://github.com/kettle-dev/kettle-family/compare/v1.2.84...v1.2.85
2528
2545
  [1.2.85t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.85
2529
2546
  [1.2.84]: https://github.com/kettle-dev/kettle-family/compare/v1.2.83...v1.2.84
data/README.md CHANGED
@@ -799,9 +799,13 @@ kettle-family template --execute \
799
799
 
800
800
  ### Template Bootstrap Environment
801
801
 
802
+ The complete path-gem, lockfile, install, platform, and mutation policy is
803
+ defined in [Execution Profiles](EXECUTION_PROFILES.md). The rules below are
804
+ the template-local portion of that policy.
805
+
802
806
  Before invoking `kettle-jem`, `kettle-family template` may refresh `nomono` so
803
- the member Gemfile can activate its generated local dependency wiring. That
804
- bootstrap uses the same development dependency graph as template preparation:
807
+ the member Gemfile can activate its generated local dependency wiring. Both
808
+ bootstrap and lockfile preparation use the same development dependency graph:
805
809
 
806
810
  - `K_JEM_TEMPLATING=true` is enforced. It selects the templating Gemfile graph
807
811
  and activates generated local sibling closures. It is not a release-lockfile
@@ -820,6 +824,11 @@ bootstrap uses the same development dependency graph as template preparation:
820
824
  Release lockfile normalization is a separate operation with its own local-path
821
825
  policy; it must not be inferred from template bootstrap settings.
822
826
 
827
+ If template lockfile preparation needs a recovery update, that retry also uses
828
+ the template dependency graph. It must not invoke release-lockfile reset logic:
829
+ release normalization intentionally disables local paths, while template
830
+ recovery needs configured sibling paths to resolve unreleased family versions.
831
+
823
832
  ## 🔐 Security
824
833
 
825
834
  See [SECURITY.md][🔐security].
@@ -1072,7 +1081,7 @@ Thanks for RTFM. ☺️
1072
1081
  [📌gitmoji]: https://gitmoji.dev
1073
1082
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
1074
1083
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
1075
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-6.215-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
1084
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-6.236-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
1076
1085
  [🔐security]: https://github.com/kettle-dev/kettle-family/blob/main/SECURITY.md
1077
1086
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
1078
1087
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Kettle
4
+ module Family
5
+ # The execution context is a compatibility boundary, not a collection of
6
+ # incidental ENV assignments. Each workflow command selects one profile so
7
+ # path-gem, lockfile, install, and mutation rules remain reviewable.
8
+ class ExecutionProfile
9
+ Definition = Struct.new(
10
+ :name,
11
+ :path_gem_policy,
12
+ :lockfile_role,
13
+ :install_location,
14
+ :host_platform_policy,
15
+ :allowed_mutations
16
+ ) do
17
+ def local_path_gems?
18
+ path_gem_policy != :registry_only
19
+ end
20
+
21
+ def canonical_lockfile?
22
+ lockfile_role == :canonical
23
+ end
24
+ end
25
+
26
+ DEFINITIONS = {
27
+ development_local: Definition.new(
28
+ name: :development_local,
29
+ path_gem_policy: :configured_siblings,
30
+ lockfile_role: :canonical,
31
+ install_location: :member,
32
+ host_platform_policy: :active_platform_must_resolve,
33
+ allowed_mutations: %i[development_lockfiles source test]
34
+ ),
35
+ template_local: Definition.new(
36
+ name: :template_local,
37
+ path_gem_policy: :configured_siblings,
38
+ lockfile_role: :canonical,
39
+ install_location: :member,
40
+ host_platform_policy: :active_platform_must_resolve,
41
+ allowed_mutations: %i[template development_lockfiles generated]
42
+ ),
43
+ release_registry: Definition.new(
44
+ name: :release_registry,
45
+ path_gem_policy: :registry_only,
46
+ lockfile_role: :canonical,
47
+ install_location: :disposable,
48
+ host_platform_policy: :active_platform_must_resolve,
49
+ allowed_mutations: %i[canonical_release_lockfiles]
50
+ ),
51
+ release_monorepo: Definition.new(
52
+ name: :release_monorepo,
53
+ path_gem_policy: :configured_release_wave,
54
+ lockfile_role: :canonical,
55
+ install_location: :disposable,
56
+ host_platform_policy: :active_platform_must_resolve,
57
+ allowed_mutations: %i[canonical_release_lockfiles configured_wave_paths]
58
+ ),
59
+ release_recovery: Definition.new(
60
+ name: :release_recovery,
61
+ path_gem_policy: :configured_release_wave,
62
+ lockfile_role: :canonical,
63
+ install_location: :disposable,
64
+ host_platform_policy: :active_platform_must_resolve,
65
+ allowed_mutations: %i[canonical_release_lockfiles configured_wave_paths]
66
+ )
67
+ }.each_value(&:freeze).freeze
68
+
69
+ def self.fetch(name)
70
+ DEFINITIONS.fetch(name.to_sym)
71
+ rescue KeyError
72
+ raise ArgumentError, "unknown execution profile: #{name.inspect}"
73
+ end
74
+ end
75
+ end
76
+ end
@@ -5,7 +5,7 @@ module Kettle
5
5
  # Version namespace for this gem.
6
6
  module Version
7
7
  # Current gem version.
8
- VERSION = "1.2.85"
8
+ VERSION = "1.2.86"
9
9
  end
10
10
  # Current gem version exposed at the traditional constant location.
11
11
  VERSION = Version::VERSION # Traditional Constant Location
@@ -833,8 +833,6 @@ module Kettle
833
833
  # available only for an explicit, known optional-dependency constraint
834
834
  # conflict; it is not a general solution for local-path resolution.
835
835
  env["KETTLE_DEV_SKIP_CHANGELOG_DEPENDENCY"] = template_bootstrap_changelog_dependency_setting
836
- env["K_JEM_TEMPLATING"] = "true"
837
- env["BUNDLE_DISABLE_CHECKSUM_VALIDATION"] = "true"
838
836
  env
839
837
  end
840
838
 
@@ -4386,13 +4384,13 @@ module Kettle
4386
4384
  end
4387
4385
 
4388
4386
  def recover_template_lockfiles(member:, runner:, memo:, phase:)
4389
- reset_gemfile_lock(
4387
+ result = runner.call(
4390
4388
  member: member,
4391
- runner: runner,
4392
- memo: memo,
4393
4389
  phase: phase,
4394
- env: template_lockfile_recovery_env(member)
4390
+ command: normalize_lockfiles_command(member: member, phase: "prepare_lockfiles"),
4391
+ env: template_lockfile_recovery_env
4395
4392
  )
4393
+ memo << result
4396
4394
  return unless memo.last&.ok?
4397
4395
 
4398
4396
  commit_normalized_lockfiles(
@@ -4417,15 +4415,11 @@ module Kettle
4417
4415
  [result.stdout, result.stderr].join("\n").match?(/Unknown switches? .*--add-checksums/)
4418
4416
  end
4419
4417
 
4420
- def template_lockfile_recovery_env(member)
4421
- env = release_lockfile_env(member).merge(workflow_env)
4422
- ENV.each do |key, value|
4423
- env[key] = value if key.end_with?("_DEV", "_LOCAL") && local_path_env_requested?(key)
4424
- end
4425
- env.merge!(env_overrides)
4426
- env["K_JEM_TEMPLATING"] = "false"
4427
- env["BUNDLE_DISABLE_CHECKSUM_VALIDATION"] = "true"
4428
- env
4418
+ def template_lockfile_recovery_env(_member = nil)
4419
+ # A failed template preparation can be caused by an unreleased sibling
4420
+ # version. Recover in the template graph, not the release graph, so
4421
+ # Bundler uses the configured monorepo paths.
4422
+ execution_profile(template_execution_profile, workflow_env)
4429
4423
  end
4430
4424
 
4431
4425
  def normalize_lockfiles_command(member:, phase:, skip_checksum_option: false)
@@ -4631,7 +4625,37 @@ module Kettle
4631
4625
  # Templating is development work. It must resolve the configured
4632
4626
  # family graph exactly as template application does; release-only
4633
4627
  # lockfile cleanup owns disabling local path sources.
4634
- workflow_env
4628
+ execution_profile(template_execution_profile, workflow_env)
4629
+ end
4630
+
4631
+ def template_execution_profile
4632
+ ExecutionProfile.fetch(:template_local)
4633
+ end
4634
+
4635
+ def release_lockfile_execution_profile
4636
+ return ExecutionProfile.fetch(:release_recovery) if release_recovery?
4637
+ return ExecutionProfile.fetch(:release_monorepo) if preserve_monorepo_template_context?
4638
+
4639
+ ExecutionProfile.fetch(:release_registry)
4640
+ end
4641
+
4642
+ def release_recovery?
4643
+ !start_step.nil? || !skip_steps.to_s.empty? || fast_recovery || skip_ci
4644
+ end
4645
+
4646
+ def execution_profile(profile, env)
4647
+ profile = ExecutionProfile.fetch(profile) unless profile.is_a?(ExecutionProfile::Definition)
4648
+ env = env.dup
4649
+ case profile.name
4650
+ when :template_local
4651
+ env["K_JEM_TEMPLATING"] = "true"
4652
+ env["BUNDLE_DISABLE_CHECKSUM_VALIDATION"] = "true"
4653
+ when :release_registry, :release_monorepo, :release_recovery
4654
+ # Release profiles deliberately leave Bundler mutation decisions to
4655
+ # kettle-dev. The profile selection controls which local-path
4656
+ # overrides this workflow contributes below.
4657
+ end
4658
+ env
4635
4659
  end
4636
4660
 
4637
4661
  def local_path_env_requested?(name)
@@ -4685,10 +4709,13 @@ module Kettle
4685
4709
  end
4686
4710
 
4687
4711
  def release_lockfile_env(member = nil)
4688
- base_release_env
4712
+ execution_profile(
4713
+ release_lockfile_execution_profile,
4714
+ base_release_env
4689
4715
  .merge(release_lockfile_bundler_env_resets)
4690
4716
  .merge(env_overrides)
4691
4717
  .merge(release_lockfile_local_path_env_overrides(member))
4718
+ )
4692
4719
  end
4693
4720
 
4694
4721
  def release_lockfile_bundler_env_resets
data/lib/kettle/family.rb CHANGED
@@ -21,6 +21,7 @@ require_relative "family/nomono_bootstrap"
21
21
  require_relative "family/debugger_bootstrap"
22
22
  require_relative "family/appraisal_bootstrap"
23
23
  require_relative "family/release_waves"
24
+ require_relative "family/execution_profile"
24
25
  require_relative "family/workflow"
25
26
  require_relative "family/discovery"
26
27
  require_relative "family/orderer"
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kettle-family
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.85
4
+ version: 1.2.86
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -91,7 +91,7 @@ dependencies:
91
91
  requirements:
92
92
  - - ">="
93
93
  - !ruby/object:Gem::Version
94
- version: 3.0.30
94
+ version: 3.0.31
95
95
  - - "<"
96
96
  - !ruby/object:Gem::Version
97
97
  version: 4.0.0
@@ -101,7 +101,7 @@ dependencies:
101
101
  requirements:
102
102
  - - ">="
103
103
  - !ruby/object:Gem::Version
104
- version: 3.0.30
104
+ version: 3.0.31
105
105
  - - "<"
106
106
  - !ruby/object:Gem::Version
107
107
  version: 4.0.0
@@ -414,6 +414,7 @@ files:
414
414
  - lib/kettle/family/debugger_bootstrap.rb
415
415
  - lib/kettle/family/dependency_floor.rb
416
416
  - lib/kettle/family/discovery.rb
417
+ - lib/kettle/family/execution_profile.rb
417
418
  - lib/kettle/family/git_status.rb
418
419
  - lib/kettle/family/local_install.rb
419
420
  - lib/kettle/family/member.rb
@@ -441,10 +442,10 @@ licenses:
441
442
  - AGPL-3.0-only
442
443
  metadata:
443
444
  homepage_uri: https://kettle-family.galtzo.com
444
- source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.2.85
445
- changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.85/CHANGELOG.md
445
+ source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.2.86
446
+ changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.86/CHANGELOG.md
446
447
  bug_tracker_uri: https://github.com/kettle-dev/kettle-family/issues
447
- documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.2.85
448
+ documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.2.86
448
449
  funding_uri: https://github.com/sponsors/pboling
449
450
  wiki_uri: https://github.com/kettle-dev/kettle-family/wiki
450
451
  news_uri: https://www.railsbling.com/tags/kettle-family
metadata.gz.sig CHANGED
Binary file