kettle-family 1.2.94 → 1.2.95

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: 60682b3f2d2f1017624cc67b428ff954b71f03eca4fdb6034cbe229183cba970
4
- data.tar.gz: ea873857902fa44d2b2051e6449f21d84515139f005e1a9c148dfedf5062ce2f
3
+ metadata.gz: 9b482c620e7f5e341caead6b52476cc8dc26e56c5d0ecde281ca27f7aaacc3e3
4
+ data.tar.gz: 78c5c14ec0d5a90a34341650d010216e241fb4927983dff9507b66d9e9ccaf6d
5
5
  SHA512:
6
- metadata.gz: a14c847688ce762dbf03be0229b1c5ac0da23d3892e2e803467b8dc6efe73df4ede2b43d64a6ffedbccaf38f11da162bfad6bbf574a44b29739dafe8b8d70cba
7
- data.tar.gz: 8ad7d29e783dace84ef807339b81907fe9e6e7c7f35ee60c4ac95b412a0972983c6eb7d9e8dad708801b270eda6ee0bb87d8759a22e3d4e29d6f254d4bfa6ff3
6
+ metadata.gz: 61ab40f1165dc584b786cf9e5f72005390aa786bcc2f6d0b1f4e9c172d566d8efd310625bac5a218312b221e5f8577071d699dc0eadaa6b1260cdb7ac4444736
7
+ data.tar.gz: f4097829a8ca4127f0a2a6dc4f53ea84886d14e68c9df2ec82db9319904482ba9d6f2339d087596b048419d7c63707462f5c38e45e8bf475149e295fc4479868
checksums.yaml.gz.sig CHANGED
@@ -1,6 +1,3 @@
1
- y;�"Ĕs$�5�U[G*W8M�}q?�x���eI��ݞaWf��<.�ePF��`���9@�
2
- A��~ON��3��1��ݎ��[�#z
3
- �Ѫ�N�#Fa΃��[�D�Ͽ���ҷHj��鼊c�/���{��������ʇ��p��
4
- �{���>pp�L۹F|�^ҡ8��QS" ����ch�m<�=Pn�P�qK
5
- I�j��97���H ��f�V*�<�zۗ��H�>���f�.���rFi�c�e��6� ����MM�?�s��c������|���l}���� �"���q1K�����j/Cx�8<0F�3$��6��"ā���{�md�Kǩ֫�¡!�8lr;
6
- ��ƿ�H4cXKXF5�[;@�v@Oz�
1
+ A(�#�-]Zf��(��ȯ�7ֺJ2Qf
2
+ �Mx'{UM:�F�롄�>�����q�!b�w��2ɤ8#+e*d>#�`NǚB��z��6�8|r�^@����߰���7���G������?�5*݆��.�s9� �y���D��eJ^�N�h����!O]k 2ǯ8�/y T5�}Ϥ�'x�hHg�0�wHE$�~���h�Ť��a���I��W9u�.^J3���%-�YJ�ӓ�����>0����K36���4p
3
+ ����U1?ɔo(S�FC�
data/CHANGELOG.md CHANGED
@@ -30,6 +30,17 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [1.2.95] - 2026-09-07
34
+
35
+ - TAG: [v1.2.95][1.2.95t]
36
+ - COVERAGE: 93.49% -- 6199/6631 lines in 35 files
37
+ - BRANCH COVERAGE: 78.03% -- 2515/3223 branches in 35 files
38
+ - 32.58% documented
39
+
40
+ ### Fixed
41
+
42
+ - Run release-target branch worktrees through the full template bootstrap workflow before member preparation.
43
+
33
44
  ## [1.2.94] - 2026-09-07
34
45
 
35
46
  - TAG: [v1.2.94][1.2.94t]
@@ -2640,7 +2651,9 @@ Please file a bug if you notice a violation of semantic versioning.
2640
2651
  - Fixed CI load failures on engines without compatible `pty` support by falling back to Open3 for interactive release commands.
2641
2652
  - Fixed Ruby 3.2 version-bump support by loading Prism lazily and wiring the Prism gem only for MRI versions that need it.
2642
2653
 
2643
- [Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.94...HEAD
2654
+ [Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.95...HEAD
2655
+ [1.2.95]: https://github.com/kettle-dev/kettle-family/compare/v1.2.94...v1.2.95
2656
+ [1.2.95t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.95
2644
2657
  [1.2.94]: https://github.com/kettle-dev/kettle-family/compare/v1.2.93...v1.2.94
2645
2658
  [1.2.94t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.94
2646
2659
  [1.2.93]: https://github.com/kettle-dev/kettle-family/compare/v1.2.92...v1.2.93
data/README.md CHANGED
@@ -902,6 +902,23 @@ the template dependency graph. It must not invoke release-lockfile reset logic:
902
902
  release normalization intentionally disables local paths, while template
903
903
  recovery needs configured sibling paths to resolve unreleased family versions.
904
904
 
905
+ ### Branch Worktree Equivalence
906
+
907
+ A release-target branch worktree is a separate checkout of the same template
908
+ member, not a reduced template workflow. Before its member template body runs,
909
+ it executes the same debugger, Appraisal, and Nomono bootstrap boundary as an
910
+ ordinary member. It then executes the same lockfile preparation, dependency
911
+ preparation and recovery, `kettle-jem` invocation, lockfile normalization, and
912
+ template commit path with the same `template_local` environment.
913
+
914
+ Only checkout mechanics differ: Family creates and trusts the linked worktree,
915
+ rebases that target branch on its own upstream when one exists, attaches the
916
+ branch name to the results, and removes the worktree after completion. These
917
+ steps are necessary because each target has a distinct Git ref and an absolute
918
+ `mise` configuration path. They do not change the dependency graph or omit a
919
+ template phase. Regression specs assert that branch worktrees call the shared
920
+ bootstrap boundary and cannot start a member template body when it fails.
921
+
905
922
  ## 🔐 Security
906
923
 
907
924
  See [SECURITY.md][🔐security].
@@ -1154,7 +1171,7 @@ Thanks for RTFM. ☺️
1154
1171
  [📌gitmoji]: https://gitmoji.dev
1155
1172
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
1156
1173
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
1157
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-6.613-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
1174
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-6.631-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
1158
1175
  [🔐security]: https://github.com/kettle-dev/kettle-family/blob/main/SECURITY.md
1159
1176
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
1160
1177
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
@@ -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.94"
8
+ VERSION = "1.2.95"
9
9
  end
10
10
  # Current gem version exposed at the traditional constant location.
11
11
  VERSION = Version::VERSION # Traditional Constant Location
@@ -932,14 +932,8 @@ module Kettle
932
932
  end
933
933
 
934
934
  def template_member_workflow_results(workflow_members)
935
- debugger_results = template_debugger_bootstrap_results(workflow_members)
936
- return debugger_results unless debugger_results.all?(&:ok?)
937
-
938
- appraisal_results = template_appraisal_bootstrap_results(workflow_members)
939
- return debugger_results + appraisal_results unless appraisal_results.all?(&:ok?)
940
-
941
- bootstrap_results = template_bootstrap_dependency_results(workflow_members)
942
- return debugger_results + appraisal_results + bootstrap_results unless bootstrap_results.all?(&:ok?)
935
+ bootstrap_results = template_member_bootstrap_results(workflow_members)
936
+ return bootstrap_results unless bootstrap_results.all?(&:ok?)
943
937
 
944
938
  template_progress = start_template_progress(workflow_members)
945
939
  results = template_dependency_waves(workflow_members).each_with_object([]) do |wave, memo|
@@ -948,7 +942,22 @@ module Kettle
948
942
  break memo unless wave_results.all?(&:ok?)
949
943
  end
950
944
  emit_template_progress_summary(results, progress: template_progress)
951
- debugger_results + appraisal_results + bootstrap_results + results
945
+ bootstrap_results + results
946
+ end
947
+
948
+ # This is the common preparation boundary for every template member,
949
+ # regardless of whether it runs in its primary checkout, a monorepo
950
+ # worktree, or a release-target branch worktree. Keep branch mechanics
951
+ # outside this method so they cannot silently omit a bootstrap phase.
952
+ def template_member_bootstrap_results(workflow_members)
953
+ debugger_results = template_debugger_bootstrap_results(workflow_members)
954
+ return debugger_results unless debugger_results.all?(&:ok?)
955
+
956
+ appraisal_results = template_appraisal_bootstrap_results(workflow_members)
957
+ return debugger_results + appraisal_results unless appraisal_results.all?(&:ok?)
958
+
959
+ bootstrap_results = template_bootstrap_dependency_results(workflow_members)
960
+ debugger_results + appraisal_results + bootstrap_results
952
961
  end
953
962
 
954
963
  def template_debugger_bootstrap_results(workflow_members)
@@ -1650,6 +1659,17 @@ module Kettle
1650
1659
  end
1651
1660
 
1652
1661
  def template_branch_worktree_entries_results(entries)
1662
+ results = template_branch_worktree_sync_results(entries)
1663
+ return results unless results.all?(&:ok?)
1664
+
1665
+ # A branch worktree is a different checkout, not a different template
1666
+ # profile. Run the exact same member bootstrap boundary used by normal
1667
+ # members before any branch begins its member template body.
1668
+ bootstrap_results = template_member_bootstrap_results(entries.map { |entry| entry.fetch(:member) })
1669
+ tag_template_worktree_results(bootstrap_results, entries)
1670
+ results.concat(bootstrap_results)
1671
+ return results unless bootstrap_results.all?(&:ok?)
1672
+
1653
1673
  wave_jobs = template_jobs(entries)
1654
1674
  queue = Queue.new
1655
1675
  entries.each_with_index { |entry, index| queue << [index, entry] }
@@ -1671,23 +1691,41 @@ module Kettle
1671
1691
  end
1672
1692
  end
1673
1693
  end.each(&:join)
1674
- ordered_results.compact.flatten
1694
+ results + ordered_results.compact.flatten
1675
1695
  end
1676
1696
 
1677
1697
  def template_branch_worktree_entry_results(entry, wave_jobs: 1)
1678
1698
  member = entry.fetch(:member)
1679
1699
  branch = entry.fetch(:branch)
1680
- runner = command_runner
1681
- results = []
1682
- if git_upstream_for(member)
1683
- results << runner.call(member: member, phase: "template_branch_sync", command: ["git", "rebase", "@{upstream}"])
1684
- end
1685
- results.concat(template_results_for_member(member, wave_jobs: wave_jobs)) if results.all?(&:ok?)
1700
+ # Bootstrap and upstream synchronization are deliberately performed
1701
+ # for the complete branch set before workers start. The member body is
1702
+ # the same method normal template waves invoke.
1703
+ results = template_results_for_member(member, wave_jobs: wave_jobs)
1686
1704
  tag_branch_results(results, branch)
1687
1705
  emit_template_event_line(member, results.all?(&:ok?) ? "." : "F", "branch #{branch}")
1688
1706
  results
1689
1707
  end
1690
1708
 
1709
+ def template_branch_worktree_sync_results(entries)
1710
+ runner = command_runner
1711
+ entries.filter_map do |entry|
1712
+ member = entry.fetch(:member)
1713
+ upstream = git_upstream_for(member)
1714
+ next unless upstream
1715
+
1716
+ result = runner.call(member: member, phase: "template_branch_sync", command: ["git", "rebase", "@{upstream}"])
1717
+ result.branch = entry.fetch(:branch)
1718
+ result
1719
+ end
1720
+ end
1721
+
1722
+ def tag_template_worktree_results(results, entries)
1723
+ branches_by_root = entries.to_h { |entry| [File.expand_path(entry.fetch(:member).root), entry.fetch(:branch)] }
1724
+ results.each do |result|
1725
+ result.branch = branches_by_root[File.expand_path(result.workdir)] if result.workdir
1726
+ end
1727
+ end
1728
+
1691
1729
  def template_branch_worktree_cleanup_results(entries, runner:, control_member:)
1692
1730
  entries.filter_map do |entry|
1693
1731
  worktree_root = entry[:worktree_root]
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.94
4
+ version: 1.2.95
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.31
94
+ version: 3.0.32
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.31
104
+ version: 3.0.32
105
105
  - - "<"
106
106
  - !ruby/object:Gem::Version
107
107
  version: 4.0.0
@@ -443,10 +443,10 @@ licenses:
443
443
  - AGPL-3.0-only
444
444
  metadata:
445
445
  homepage_uri: https://kettle-family.galtzo.com
446
- source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.2.94
447
- changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.94/CHANGELOG.md
446
+ source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.2.95
447
+ changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.95/CHANGELOG.md
448
448
  bug_tracker_uri: https://github.com/kettle-dev/kettle-family/issues
449
- documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.2.94
449
+ documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.2.95
450
450
  funding_uri: https://github.com/sponsors/pboling
451
451
  wiki_uri: https://github.com/kettle-dev/kettle-family/wiki
452
452
  news_uri: https://www.railsbling.com/tags/kettle-family
metadata.gz.sig CHANGED
Binary file