git 5.0.0.beta.2 → 5.0.0.beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (270) hide show
  1. checksums.yaml +4 -4
  2. data/.dockerignore +27 -0
  3. data/.github/copilot-instructions.md +3 -8
  4. data/.github/hooks/bin-setup-on-worktree.json +11 -0
  5. data/.github/hooks/run-bin-setup-once.sh +14 -0
  6. data/.github/skills/breaking-change-analysis/SKILL.md +6 -9
  7. data/.github/skills/ci-cd-troubleshooting/SKILL.md +2 -2
  8. data/.github/skills/command-implementation/REFERENCE.md +34 -33
  9. data/.github/skills/command-implementation/SKILL.md +5 -4
  10. data/.github/skills/command-test-conventions/SKILL.md +13 -9
  11. data/.github/skills/command-yard-documentation/SKILL.md +14 -6
  12. data/.github/skills/development-workflow/SKILL.md +20 -14
  13. data/.github/skills/facade-implementation/REFERENCE.md +19 -22
  14. data/.github/skills/facade-implementation/SKILL.md +0 -5
  15. data/.github/skills/facade-test-conventions/SKILL.md +4 -7
  16. data/.github/skills/facade-yard-documentation/SKILL.md +8 -2
  17. data/.github/skills/make-skill-template/SKILL.md +53 -3
  18. data/.github/skills/pr-readiness-review/SKILL.md +22 -2
  19. data/.github/skills/project-context/SKILL.md +16 -23
  20. data/.github/skills/pull-request-review/SKILL.md +2 -2
  21. data/.github/skills/rebase/SKILL.md +148 -0
  22. data/.github/skills/refactor-command-to-commandlineresult/SKILL.md +1 -1
  23. data/.github/skills/resolve-feedback/SKILL.md +288 -0
  24. data/.github/skills/review-arguments-dsl/CHECKLIST.md +3 -3
  25. data/.github/skills/reviewing-skills/SKILL.md +28 -3
  26. data/.github/skills/test-debugging/SKILL.md +20 -19
  27. data/.github/skills/yard-documentation/SKILL.md +671 -483
  28. data/.github/skills/yard-documentation/element-rules.md +162 -0
  29. data/.github/skills-deprecated/README.md +21 -0
  30. data/.github/{skills → skills-deprecated}/extract-command-from-lib/SKILL.md +9 -9
  31. data/.github/{skills → skills-deprecated}/extract-facade-from-base-lib/SKILL.md +12 -12
  32. data/.github/workflows/continuous_integration.yml +3 -2
  33. data/.rubocop.yml +7 -39
  34. data/.yard-lint.yml +75 -0
  35. data/CONTRIBUTING.md +186 -174
  36. data/Gemfile +17 -0
  37. data/README.md +86 -23
  38. data/Rakefile +3 -21
  39. data/UPGRADING.md +219 -70
  40. data/docker/test/Dockerfile +32 -0
  41. data/docker/test/docker-compose.yml +0 -0
  42. data/git.gemspec +3 -4
  43. data/lib/git/author.rb +20 -1
  44. data/lib/git/branch.rb +26 -6
  45. data/lib/git/branch_delete_failure.rb +3 -0
  46. data/lib/git/branch_delete_result.rb +6 -3
  47. data/lib/git/branch_info.rb +6 -6
  48. data/lib/git/command_line/base.rb +6 -13
  49. data/lib/git/command_line/capturing.rb +67 -10
  50. data/lib/git/command_line/result.rb +0 -8
  51. data/lib/git/command_line/streaming.rb +45 -5
  52. data/lib/git/command_line.rb +4 -3
  53. data/lib/git/commands/add.rb +61 -53
  54. data/lib/git/commands/am/abort.rb +2 -2
  55. data/lib/git/commands/am/apply.rb +109 -98
  56. data/lib/git/commands/am/continue.rb +2 -2
  57. data/lib/git/commands/am/quit.rb +2 -2
  58. data/lib/git/commands/am/retry.rb +4 -2
  59. data/lib/git/commands/am/show_current_patch.rb +1 -1
  60. data/lib/git/commands/am/skip.rb +2 -2
  61. data/lib/git/commands/am.rb +2 -2
  62. data/lib/git/commands/apply.rb +7 -2
  63. data/lib/git/commands/archive/list_formats.rb +3 -3
  64. data/lib/git/commands/archive.rb +7 -2
  65. data/lib/git/commands/arguments.rb +1370 -359
  66. data/lib/git/commands/base.rb +111 -13
  67. data/lib/git/commands/branch/copy.rb +29 -21
  68. data/lib/git/commands/branch/create.rb +72 -68
  69. data/lib/git/commands/branch/delete.rb +25 -17
  70. data/lib/git/commands/branch/list.rb +76 -60
  71. data/lib/git/commands/branch/move.rb +29 -21
  72. data/lib/git/commands/branch/set_upstream.rb +8 -8
  73. data/lib/git/commands/branch/show_current.rb +3 -3
  74. data/lib/git/commands/branch/unset_upstream.rb +4 -8
  75. data/lib/git/commands/branch.rb +2 -2
  76. data/lib/git/commands/cat_file/batch.rb +36 -20
  77. data/lib/git/commands/cat_file/filtered.rb +12 -12
  78. data/lib/git/commands/cat_file/raw.rb +13 -13
  79. data/lib/git/commands/cat_file.rb +4 -4
  80. data/lib/git/commands/checkout/branch.rb +7 -5
  81. data/lib/git/commands/checkout/files.rb +5 -4
  82. data/lib/git/commands/checkout.rb +4 -4
  83. data/lib/git/commands/checkout_index.rb +5 -4
  84. data/lib/git/commands/clean.rb +6 -4
  85. data/lib/git/commands/clone.rb +5 -4
  86. data/lib/git/commands/commit.rb +5 -4
  87. data/lib/git/commands/commit_tree.rb +5 -4
  88. data/lib/git/commands/config_option_syntax/add.rb +7 -4
  89. data/lib/git/commands/config_option_syntax/get.rb +9 -5
  90. data/lib/git/commands/config_option_syntax/get_all.rb +7 -4
  91. data/lib/git/commands/config_option_syntax/get_color.rb +8 -4
  92. data/lib/git/commands/config_option_syntax/get_color_bool.rb +7 -4
  93. data/lib/git/commands/config_option_syntax/get_regexp.rb +8 -4
  94. data/lib/git/commands/config_option_syntax/get_urlmatch.rb +8 -4
  95. data/lib/git/commands/config_option_syntax/list.rb +8 -4
  96. data/lib/git/commands/config_option_syntax/remove_section.rb +7 -2
  97. data/lib/git/commands/config_option_syntax/rename_section.rb +7 -2
  98. data/lib/git/commands/config_option_syntax/replace_all.rb +7 -2
  99. data/lib/git/commands/config_option_syntax/set.rb +7 -2
  100. data/lib/git/commands/config_option_syntax/unset.rb +7 -4
  101. data/lib/git/commands/config_option_syntax/unset_all.rb +7 -2
  102. data/lib/git/commands/describe.rb +5 -4
  103. data/lib/git/commands/diff.rb +13 -12
  104. data/lib/git/commands/diff_files.rb +7 -6
  105. data/lib/git/commands/diff_index.rb +10 -7
  106. data/lib/git/commands/fetch.rb +6 -4
  107. data/lib/git/commands/fsck.rb +6 -4
  108. data/lib/git/commands/gc.rb +6 -4
  109. data/lib/git/commands/grep.rb +6 -5
  110. data/lib/git/commands/init.rb +6 -4
  111. data/lib/git/commands/log.rb +287 -285
  112. data/lib/git/commands/ls_files.rb +69 -65
  113. data/lib/git/commands/ls_remote.rb +62 -56
  114. data/lib/git/commands/ls_tree.rb +50 -46
  115. data/lib/git/commands/maintenance/register.rb +25 -23
  116. data/lib/git/commands/maintenance/run.rb +7 -2
  117. data/lib/git/commands/maintenance/start.rb +7 -2
  118. data/lib/git/commands/maintenance/stop.rb +7 -2
  119. data/lib/git/commands/maintenance/unregister.rb +7 -2
  120. data/lib/git/commands/merge/abort.rb +2 -2
  121. data/lib/git/commands/merge/continue.rb +2 -2
  122. data/lib/git/commands/merge/quit.rb +2 -2
  123. data/lib/git/commands/merge/start.rb +7 -2
  124. data/lib/git/commands/merge.rb +2 -2
  125. data/lib/git/commands/merge_base.rb +7 -2
  126. data/lib/git/commands/mv.rb +7 -2
  127. data/lib/git/commands/name_rev.rb +7 -2
  128. data/lib/git/commands/pull.rb +7 -2
  129. data/lib/git/commands/push.rb +7 -2
  130. data/lib/git/commands/read_tree.rb +7 -2
  131. data/lib/git/commands/remote/add.rb +7 -2
  132. data/lib/git/commands/remote/get_url.rb +4 -2
  133. data/lib/git/commands/remote/list.rb +4 -2
  134. data/lib/git/commands/remote/prune.rb +4 -2
  135. data/lib/git/commands/remote/remove.rb +4 -2
  136. data/lib/git/commands/remote/rename.rb +4 -2
  137. data/lib/git/commands/remote/set_branches.rb +9 -2
  138. data/lib/git/commands/remote/set_head.rb +12 -5
  139. data/lib/git/commands/remote/set_url.rb +9 -2
  140. data/lib/git/commands/remote/set_url_add.rb +11 -2
  141. data/lib/git/commands/remote/set_url_delete.rb +9 -2
  142. data/lib/git/commands/remote/show.rb +18 -12
  143. data/lib/git/commands/remote/update.rb +19 -12
  144. data/lib/git/commands/remote.rb +2 -2
  145. data/lib/git/commands/repack.rb +67 -63
  146. data/lib/git/commands/reset.rb +51 -44
  147. data/lib/git/commands/rev_parse.rb +135 -128
  148. data/lib/git/commands/revert/abort.rb +2 -2
  149. data/lib/git/commands/revert/continue.rb +7 -2
  150. data/lib/git/commands/revert/quit.rb +2 -2
  151. data/lib/git/commands/revert/skip.rb +2 -2
  152. data/lib/git/commands/revert/start.rb +7 -2
  153. data/lib/git/commands/revert.rb +2 -2
  154. data/lib/git/commands/rm.rb +35 -36
  155. data/lib/git/commands/show.rb +1 -1
  156. data/lib/git/commands/show_ref/exclude_existing.rb +3 -4
  157. data/lib/git/commands/show_ref/exists.rb +15 -13
  158. data/lib/git/commands/show_ref/list.rb +39 -35
  159. data/lib/git/commands/show_ref/verify.rb +29 -27
  160. data/lib/git/commands/show_ref.rb +4 -4
  161. data/lib/git/commands/stash/apply.rb +31 -25
  162. data/lib/git/commands/stash/branch.rb +10 -8
  163. data/lib/git/commands/stash/clear.rb +7 -5
  164. data/lib/git/commands/stash/create.rb +10 -8
  165. data/lib/git/commands/stash/drop.rb +15 -9
  166. data/lib/git/commands/stash/list.rb +9 -5
  167. data/lib/git/commands/stash/pop.rb +21 -12
  168. data/lib/git/commands/stash/push.rb +20 -11
  169. data/lib/git/commands/stash/show.rb +21 -12
  170. data/lib/git/commands/stash/store.rb +19 -10
  171. data/lib/git/commands/stash.rb +2 -2
  172. data/lib/git/commands/status.rb +7 -2
  173. data/lib/git/commands/symbolic_ref/delete.rb +18 -14
  174. data/lib/git/commands/symbolic_ref/read.rb +24 -20
  175. data/lib/git/commands/symbolic_ref/update.rb +20 -17
  176. data/lib/git/commands/symbolic_ref.rb +4 -4
  177. data/lib/git/commands/tag/create.rb +45 -42
  178. data/lib/git/commands/tag/delete.rb +5 -3
  179. data/lib/git/commands/tag/list.rb +47 -44
  180. data/lib/git/commands/tag/verify.rb +12 -12
  181. data/lib/git/commands/tag.rb +2 -2
  182. data/lib/git/commands/update_ref/batch.rb +6 -1
  183. data/lib/git/commands/update_ref/delete.rb +19 -21
  184. data/lib/git/commands/update_ref/update.rb +22 -25
  185. data/lib/git/commands/update_ref.rb +4 -4
  186. data/lib/git/commands/version.rb +14 -11
  187. data/lib/git/commands/worktree/add.rb +50 -51
  188. data/lib/git/commands/worktree/list.rb +17 -17
  189. data/lib/git/commands/worktree/lock.rb +12 -12
  190. data/lib/git/commands/worktree/move.rb +16 -16
  191. data/lib/git/commands/worktree/prune.rb +2 -2
  192. data/lib/git/commands/worktree/remove.rb +2 -2
  193. data/lib/git/commands/worktree/repair.rb +2 -2
  194. data/lib/git/commands/worktree/unlock.rb +2 -2
  195. data/lib/git/commands/write_tree.rb +2 -2
  196. data/lib/git/commands.rb +4 -3
  197. data/lib/git/config.rb +47 -1
  198. data/lib/git/configuring.rb +89 -15
  199. data/lib/git/detached_head_info.rb +4 -1
  200. data/lib/git/diff.rb +2 -5
  201. data/lib/git/diff_file_numstat_info.rb +3 -1
  202. data/lib/git/diff_file_patch_info.rb +3 -1
  203. data/lib/git/diff_file_raw_info.rb +3 -1
  204. data/lib/git/diff_info.rb +8 -15
  205. data/lib/git/diff_path_status.rb +16 -3
  206. data/lib/git/diff_result.rb +3 -1
  207. data/lib/git/diff_stats.rb +15 -0
  208. data/lib/git/dirstat_info.rb +24 -8
  209. data/lib/git/encoding_utils.rb +32 -1
  210. data/lib/git/errors.rb +19 -9
  211. data/lib/git/escaped_path.rb +55 -3
  212. data/lib/git/execution_context/repository.rb +15 -0
  213. data/lib/git/execution_context.rb +76 -74
  214. data/lib/git/file_ref.rb +6 -3
  215. data/lib/git/fsck_object.rb +8 -0
  216. data/lib/git/fsck_result.rb +26 -15
  217. data/lib/git/log.rb +152 -5
  218. data/lib/git/object.rb +284 -8
  219. data/lib/git/parsers/branch.rb +18 -0
  220. data/lib/git/parsers/cat_file.rb +2 -2
  221. data/lib/git/parsers/diff.rb +213 -5
  222. data/lib/git/parsers/fsck.rb +11 -0
  223. data/lib/git/parsers/ls_remote.rb +1 -1
  224. data/lib/git/parsers/stash.rb +51 -0
  225. data/lib/git/parsers/tag.rb +38 -0
  226. data/lib/git/remote.rb +34 -2
  227. data/lib/git/repository/branching.rb +23 -21
  228. data/lib/git/repository/committing.rb +46 -6
  229. data/lib/git/repository/context_helpers.rb +45 -16
  230. data/lib/git/repository/diffing.rb +32 -23
  231. data/lib/git/repository/factories.rb +153 -28
  232. data/lib/git/repository/inspecting.rb +1 -1
  233. data/lib/git/repository/logging.rb +169 -30
  234. data/lib/git/repository/maintenance.rb +1 -1
  235. data/lib/git/repository/merging.rb +3 -3
  236. data/lib/git/repository/object_operations.rb +108 -14
  237. data/lib/git/repository/remote_operations.rb +150 -171
  238. data/lib/git/repository/shared_private.rb +7 -5
  239. data/lib/git/repository/staging.rb +36 -12
  240. data/lib/git/repository/stashing.rb +16 -16
  241. data/lib/git/repository/status_operations.rb +1 -1
  242. data/lib/git/repository/worktree_operations.rb +1 -1
  243. data/lib/git/repository.rb +287 -6
  244. data/lib/git/stash.rb +16 -21
  245. data/lib/git/stash_info.rb +4 -4
  246. data/lib/git/stashes.rb +20 -26
  247. data/lib/git/status.rb +25 -13
  248. data/lib/git/tag_delete_failure.rb +3 -0
  249. data/lib/git/tag_delete_result.rb +6 -3
  250. data/lib/git/tag_info.rb +1 -0
  251. data/lib/git/url.rb +12 -5
  252. data/lib/git/version.rb +6 -4
  253. data/lib/git/version_constraint.rb +4 -0
  254. data/lib/git.rb +400 -314
  255. data/redesign/3_architecture_implementation.md +81 -30
  256. data/redesign/Phase 4 - Step A.md +6 -0
  257. data/redesign/Phase 4 - Step B.md +921 -0
  258. data/redesign/Phase 4 - Step C.md +833 -0
  259. data/redesign/c1a-public-api-scope.tsv +256 -0
  260. data/redesign/phase-4-step-b-test-audit.tsv +485 -0
  261. data/tasks/yard.rake +24 -17
  262. metadata +24 -58
  263. data/commitlint.test +0 -4
  264. data/lib/git/args_builder.rb +0 -103
  265. data/lib/git/command_line_result.rb +0 -8
  266. data/lib/git/deprecation.rb +0 -9
  267. data/lib/git/repository/configuring.rb +0 -351
  268. data/tasks/test.rake +0 -25
  269. /data/.github/{skills → skills-deprecated}/extract-facade-from-base-lib/KEYWORD_ARG_REMEDIATION.md +0 -0
  270. /data/.github/{skills → skills-deprecated}/review-backward-compatibility/SKILL.md +0 -0
@@ -9,7 +9,7 @@ risk and allows for a gradual, controlled migration to the new architecture.
9
9
  - [Facade Modules Completed](#facade-modules-completed)
10
10
  - [Facade module naming convention](#facade-module-naming-convention)
11
11
  - [Next Task](#next-task)
12
- - [D2 / Phase 4 is the remaining redesign step](#d2--phase-4-is-the-remaining-redesign-step)
12
+ - [Phase 4 complete architectural redesign is done 🎉](#phase-4-complete--architectural-redesign-is-done-)
13
13
  - [Phase 3 Overview](#phase-3-overview)
14
14
  - [Workstream A — Fill facade coverage gaps](#workstream-a--fill-facade-coverage-gaps)
15
15
  - [Workstream B — C0: Redirect `Git::Base` factory methods to `facade_repository`](#workstream-b--c0-redirect-gitbase-factory-methods-to-facade_repository)
@@ -44,8 +44,8 @@ risk and allows for a gradual, controlled migration to the new architecture.
44
44
  | Phase 1 | ✅ Complete | Foundation and scaffolding | 5% | 100% |
45
45
  | Phase 2 | ✅ Complete | Migrating commands (all checklist items done) | 40% | 100% |
46
46
  | Phase 3 | ✅ Complete | Refactoring public interface — see [Facade Modules Completed](#facade-modules-completed) and [Facade coverage checklist](#facade-coverage-checklist) | 45% | 100% |
47
- | Phase 4 | 🔲 Not Started | Final cleanup and release | 10% | 0% |
48
- | **TOTAL** | -- | -- | **100%** | **90%** |
47
+ | Phase 4 | Complete | Final cleanup and release — Steps A, B, and C all complete | 10% | 100% |
48
+ | **TOTAL** | **Complete** | -- | **100%** | **100%** |
49
49
 
50
50
  ### Facade Modules Completed
51
51
 
@@ -85,20 +85,50 @@ such as `Branch`, `Diff`, `Log`, `Object`, `Remote`, `Status`, `Worktree`, etc.
85
85
 
86
86
  ### Next Task
87
87
 
88
- #### D2 / Phase 4 is the remaining redesign step
89
-
90
- F1 and F2 are both ✅ complete. All Phase 4 prerequisites are now satisfied, and
91
- the remaining unchecked redesign item is D2.
92
-
93
- Phase 4 (final cleanup and release deleting `Git::Base`/`Git::Lib`) can now begin.
94
- The first cleanup PR should remove the `base_object` / `from_base` bridge in the
95
- same releasable change that deletes or retires `Git::Base`.
96
- The following are also required and are already complete:
88
+ #### Phase 4 complete architectural redesign is done 🎉
89
+
90
+ Phase 4 **Step A Remove old code** is ✅ complete. The atomic removal landed in
91
+ [PR #1456](https://github.com/ruby-git/ruby-git/pull/1456) (commit `c1c53999`),
92
+ which deleted `Git::Base` and `Git::Lib`, removed the `base_object` / `from_base`
93
+ bridge from `Git::ExecutionContext::Repository`, and dropped the legacy `require`
94
+ lines from `lib/git.rb`. This also satisfies the long-standing **D2** redesign
95
+ item. The only remaining `Git::Base` / `Git::Lib` strings in `lib/` are YARD/comment
96
+ references to historical 4.x behavior, which the Step A done-criteria explicitly
97
+ allow.
98
+
99
+ Phase 4 **Step B — Finalize test suite** is ✅ complete. All 159 PORT rows (after dedup) were ported
100
+ to RSpec (batches U1–U21), `tests/` and the Test::Unit tooling were removed (W3), the
101
+ `extract-*` skills were deprecated (W4a), Test::Unit documentation references were
102
+ removed (W4b), the full quality gate was verified green (W5 — 5668 unit + 893
103
+ integration examples, 0 failures), and stale `Git::Base`/`Git::Lib` references were
104
+ removed from active Copilot skills (W6 — [PR #1509](https://github.com/ruby-git/ruby-git/pull/1509)).
105
+
106
+ Phase 4 **Step C — Update documentation** is ✅ complete. C1a–C1d (YARD audit and
107
+ coverage gate), C2a–C2b (`UPGRADING.md` and `README.md`), and C3 (documentation
108
+ completeness verification) are all done. Final state: all unit and integration examples
109
+ pass, 0 failures; 100.00% documented; `yard:lint` no offenses; gem builds.
110
+ One gap found and fixed during C3b: `Git::Status` was missing a class-level
111
+ `@example` (added in this PR).
112
+
113
+ All Phase 4 steps are now complete:
114
+
115
+ | Step | Status | Summary |
116
+ | ---- | ------ | ------- |
117
+ | A — Remove old code | ✅ Complete | `Git::Base`/`Git::Lib` and the bridge deleted ([PR #1456](https://github.com/ruby-git/ruby-git/pull/1456)) |
118
+ | B — Finalize test suite | ✅ Complete | W2 ✅ (all 159 PORT rows ported and merged after dedup, batches U1–U21); W3 ✅ (removed `tests/` and Test::Unit tooling); W4a ✅ (deprecated `extract-*` skills); W4b ✅ (removed Test::Unit doc references); W5 ✅ (gate green: 5668 unit + 893 integration, 0 failures); W6 ✅ (removed stale `Git::Base`/`Git::Lib` skill refs, [PR #1509](https://github.com/ruby-git/ruby-git/pull/1509)) |
119
+ | C — Update documentation | ✅ Complete | C1a–C1d ✅ (YARD audit + coverage gate); C2a ✅ (`UPGRADING.md`); C2b ✅ (`README.md`); C3 ✅ (docs verification: CI green, spot-check passed, links valid) |
120
+
121
+ The architectural redesign is now **fully complete**. The codebase is ready for the
122
+ v5.0.0 release process (see the
123
+ [release-management](../.github/skills/release-management/SKILL.md) skill).
124
+
125
+ The following earlier prerequisites are all ✅ complete:
97
126
 
98
127
  | Step | Status |
99
128
  | ---- | ------ |
100
129
  | C1c-2: public-API parity audit and remediation sweep | ✅ |
101
130
  | E: block-based helper/path-context methods migrated | ✅ |
131
+ | D2: remove the `base_object` / `from_base` bridge | ✅ |
102
132
 
103
133
  Steps C1d-1, C1d-2, and C1d-3 are ✅ complete (see their detail sections below for full specs).
104
134
 
@@ -120,10 +150,10 @@ All 9 domain-object migrations are ✅ complete:
120
150
  | `Git::Branches` | [PR #1356](https://github.com/ruby-git/ruby-git/pull/1356), [PR #1357](https://github.com/ruby-git/ruby-git/pull/1357), [PR #1358](https://github.com/ruby-git/ruby-git/pull/1358), [PR #1359](https://github.com/ruby-git/ruby-git/pull/1359) |
121
151
  | `Git::Worktree` + `Git::Worktrees` | — |
122
152
 
123
- The work was organized into six workstreams (A–F). All workstreams that are
124
- prerequisites for C1d are now ✅ complete. F1 and F2 are both complete F2
125
- moved the remaining `Git` module utility methods off `Git::Lib`. Phase 4 is
126
- ready to proceed.
153
+ The work was organized into six workstreams (A–F). All workstreams are ✅ complete.
154
+ F1 and F2 are both ✅ complete F2 moved the remaining `Git` module utility methods
155
+ off `Git::Lib`. Phase 4 Steps A, B, and C are all ✅ complete (see
156
+ [Next Task](#next-task)).
127
157
 
128
158
  **Sequencing** (see [Phase 3 dependency order](#phase-3-dependency-order) for the
129
159
  reasoning behind each edge):
@@ -1538,35 +1568,56 @@ release.*
1538
1568
 
1539
1569
  ```mermaid
1540
1570
  graph LR
1541
- A --> B
1542
- B --> C
1571
+ A["A ✅ Remove old code"] --> B["B ✅ Finalize test suite"]
1572
+ B --> C["C 🚧 Update documentation"]
1543
1573
  ```
1544
1574
 
1545
1575
  #### Step A — Remove old code
1546
1576
 
1577
+ **Status: ✅ Complete.** Completed in [PR #1456](https://github.com/ruby-git/ruby-git/pull/1456)
1578
+ (commit `c1c53999`).
1579
+
1547
1580
  - Delete `attr_reader :base_object`, remove `base_object:` from `#initialize`, and remove or convert `from_base`.
1548
1581
  - Delete the `Git::Lib` class entirely.
1549
1582
  - Delete the `Git::Base` class file.
1550
1583
  - Remove any other dead code that was part of the old implementation.
1551
1584
 
1552
- **Done when**: `lib/git/lib.rb` and `lib/git/base.rb` are deleted; `Git::ExecutionContext::Repository` no longer accepts or exposes `base_object`; no references to `Git::Lib` or `Git::Base` remain in `lib/`.
1585
+ **Done when**: `lib/git/lib.rb` and `lib/git/base.rb` are deleted; `Git::ExecutionContext::Repository` no longer accepts or exposes `base_object`; no runtime references to `Git::Lib` or `Git::Base` remain in `lib/` (YARD/comment references to historical 4.x behavior are allowed). ✅ Met — the only surviving `Git::Lib`/`Git::Base` strings in `lib/` are such doc/comment references.
1553
1586
 
1554
1587
  **Planning tip**: Before generating a deletion plan, audit all remaining callers of `Git::Lib`, `Git::Base`, and `from_base` across `lib/` and `spec/`. The bridge removal and `Git::Base` deletion must land atomically in the same PR — plan for a single large deletion commit rather than incremental removals.
1555
1588
 
1556
1589
  #### Step B — Finalize test suite
1557
1590
 
1558
- - Convert any remaining, relevant Test::Unit tests to RSpec.
1559
- - Remove the `test-unit` dependency from the `Gemfile`.
1560
- - Ensure the RSpec suite has comprehensive coverage for the new architecture.
1591
+ **Status: Complete.**
1561
1592
 
1562
- **Done when**: The `tests/` directory is empty or removed; `test-unit` is no longer
1563
- in `Gemfile`; RSpec is the sole test framework.
1593
+ All 159 PORT rows (after dedup) from the W1/W1.5 audit were ported to RSpec across batches U1–U21
1594
+ (W2). The `tests/` directory and all Test::Unit tooling were removed (W3). The
1595
+ `extract-*` skills were deprecated (W4a). All Test::Unit documentation references
1596
+ were removed (W4b). The full quality gate was verified green (W5): 5668 unit examples
1597
+ + 893 integration examples, 0 failures; RuboCop clean; YARD 83.6% (threshold 75%);
1598
+ gem build successful. W6 (remove stale `Git::Base`/`Git::Lib` skill references from
1599
+ active skills) is complete — both plan ([PR #1506](https://github.com/ruby-git/ruby-git/pull/1506)) and execution ([PR #1509](https://github.com/ruby-git/ruby-git/pull/1509)) have merged.
1564
1600
 
1565
- #### Step C Update documentation
1601
+ See the detailed execution plan in
1602
+ [Phase 4 - Step B.md](Phase%204%20-%20Step%20B.md).
1566
1603
 
1567
- - Thoroughly document the new public API (`Git`, `Git::Repository`, etc.).
1568
- - Mark all internal classes (`ExecutionContext`, `Commands`, `*Path`) with `@api private` in the YARD documentation.
1569
- - Update the `README.md` and create a `UPGRADING.md` guide explaining the breaking changes for v5.0.0.
1604
+ #### Step C Update documentation
1570
1605
 
1571
- **Done when**: `yard stats` reports no missing docs on public API; `UPGRADING.md`
1572
- covers all breaking changes; `README.md` reflects the new entry points.
1606
+ **Status: 🚧 Partial.** See detailed execution plan in
1607
+ [Phase 4 - Step C.md](Phase%204%20-%20Step%20C.md).
1608
+
1609
+ - ✅ Thoroughly document the new public API (`Git`, `Git::Repository`, etc.) and all
1610
+ of `lib/` — **done**: every file passes `yard-lint` (which replaced the retired
1611
+ `yardstick` tooling) with no offenses.
1612
+ - Set correct `@api` tags across `lib/` (including flipping the `Git::Repository::*`
1613
+ topic modules to `@api private`).
1614
+ - Update the `README.md` and expand the existing `UPGRADING.md` guide explaining the
1615
+ breaking changes for v5.0.0.
1616
+
1617
+ **Done when**: the criteria in the Step C execution plan
1618
+ ([Phase 4 - Step C.md](Phase%204%20-%20Step%20C.md) → "Done-When Criteria") are all
1619
+ met. In brief: documentation coverage is complete and enforced by `yard-lint`
1620
+ (`.yard-lint.yml`; `rake yard:lint` passes with no offenses) — already done — the
1621
+ `@api`-visibility tags are correct, `UPGRADING.md` covers all breaking changes,
1622
+ `README.md` reflects the new entry points, and the full CI pipeline is green. This
1623
+ tracker defers to the Step C plan as the single source of truth to avoid drift.
@@ -1,5 +1,11 @@
1
1
  # Phase 4 / Step A — Remove Old Code: Execution Plan
2
2
 
3
+ > **✅ Status: Complete.** All PRs in this plan (1a–1d, 2a–2c, 3a–3d, and the
4
+ > atomic removal PR 4) have merged. The final removal landed in
5
+ > [PR #1456](https://github.com/ruby-git/ruby-git/pull/1456) (commit `c1c53999`),
6
+ > deleting `Git::Base`, `Git::Lib`, and the `base_object` / `from_base` bridge.
7
+ > This document is retained as a historical record of how Step A was executed.
8
+
3
9
  ## Goal
4
10
 
5
11
  Delete `Git::Base`, `Git::Lib`, and the `from_base`/`base_object` bridge in a