@hominis/fireforge 0.46.0 → 0.46.2

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 (606) hide show
  1. package/CHANGELOG.md +381 -498
  2. package/dist/bin/fireforge.d.ts +1 -1
  3. package/dist/bin/fireforge.js +17 -17
  4. package/dist/build-info.json +4 -4
  5. package/dist/src/cli-usage-error.d.ts +9 -9
  6. package/dist/src/cli-usage-error.js +12 -12
  7. package/dist/src/cli.d.ts +3 -2
  8. package/dist/src/cli.js +29 -28
  9. package/dist/src/commands/bootstrap-checks.js +2 -1
  10. package/dist/src/commands/bootstrap.js +2 -2
  11. package/dist/src/commands/build.js +12 -11
  12. package/dist/src/commands/config.js +9 -9
  13. package/dist/src/commands/destructive-decision.d.ts +4 -4
  14. package/dist/src/commands/destructive-decision.js +4 -4
  15. package/dist/src/commands/discard.js +5 -5
  16. package/dist/src/commands/doctor-check-core.d.ts +4 -4
  17. package/dist/src/commands/doctor-external-toolchains.js +2 -2
  18. package/dist/src/commands/doctor-furnace-config-sync.d.ts +2 -2
  19. package/dist/src/commands/doctor-furnace-config-sync.js +20 -20
  20. package/dist/src/commands/doctor-furnace-jar.d.ts +1 -1
  21. package/dist/src/commands/doctor-furnace-jar.js +1 -1
  22. package/dist/src/commands/doctor-furnace.js +22 -22
  23. package/dist/src/commands/doctor-orphaned-harness.d.ts +10 -11
  24. package/dist/src/commands/doctor-orphaned-harness.js +10 -11
  25. package/dist/src/commands/doctor-patch-manifest.d.ts +2 -1
  26. package/dist/src/commands/doctor-patch-manifest.js +7 -6
  27. package/dist/src/commands/doctor-post-rebase-audit.js +2 -2
  28. package/dist/src/commands/doctor-source-pin.d.ts +12 -12
  29. package/dist/src/commands/doctor-source-pin.js +14 -14
  30. package/dist/src/commands/doctor-working-tree.d.ts +3 -3
  31. package/dist/src/commands/doctor-working-tree.js +3 -3
  32. package/dist/src/commands/doctor.d.ts +2 -2
  33. package/dist/src/commands/doctor.js +9 -9
  34. package/dist/src/commands/download.js +15 -13
  35. package/dist/src/commands/export-all.js +8 -8
  36. package/dist/src/commands/export-flow.d.ts +5 -5
  37. package/dist/src/commands/export-flow.js +14 -14
  38. package/dist/src/commands/export-placement-conflicts.d.ts +3 -3
  39. package/dist/src/commands/export-placement-conflicts.js +9 -9
  40. package/dist/src/commands/export-placement-gate.d.ts +2 -2
  41. package/dist/src/commands/export-placement-gate.js +5 -5
  42. package/dist/src/commands/export-placement-policy.d.ts +1 -1
  43. package/dist/src/commands/export-placement-policy.js +1 -1
  44. package/dist/src/commands/export-shared.d.ts +10 -10
  45. package/dist/src/commands/export-shared.js +13 -13
  46. package/dist/src/commands/export.js +4 -4
  47. package/dist/src/commands/furnace/apply.js +16 -16
  48. package/dist/src/commands/furnace/chrome-doc-remove.d.ts +1 -1
  49. package/dist/src/commands/furnace/chrome-doc-remove.js +1 -1
  50. package/dist/src/commands/furnace/chrome-doc-templates.d.ts +14 -14
  51. package/dist/src/commands/furnace/chrome-doc-templates.js +17 -17
  52. package/dist/src/commands/furnace/chrome-doc-tests.d.ts +2 -2
  53. package/dist/src/commands/furnace/chrome-doc-tests.js +4 -4
  54. package/dist/src/commands/furnace/chrome-doc.d.ts +8 -8
  55. package/dist/src/commands/furnace/chrome-doc.js +18 -18
  56. package/dist/src/commands/furnace/create-browser-test.d.ts +1 -1
  57. package/dist/src/commands/furnace/create-browser-test.js +4 -4
  58. package/dist/src/commands/furnace/create-dry-run.d.ts +4 -4
  59. package/dist/src/commands/furnace/create-dry-run.js +4 -4
  60. package/dist/src/commands/furnace/create-features.d.ts +2 -2
  61. package/dist/src/commands/furnace/create-features.js +2 -2
  62. package/dist/src/commands/furnace/create-mochikit.d.ts +4 -4
  63. package/dist/src/commands/furnace/create-mochikit.js +7 -7
  64. package/dist/src/commands/furnace/create-templates.d.ts +14 -14
  65. package/dist/src/commands/furnace/create-templates.js +18 -18
  66. package/dist/src/commands/furnace/create-xpcshell.d.ts +5 -5
  67. package/dist/src/commands/furnace/create-xpcshell.js +8 -8
  68. package/dist/src/commands/furnace/create.d.ts +1 -1
  69. package/dist/src/commands/furnace/create.js +10 -10
  70. package/dist/src/commands/furnace/deploy.js +4 -4
  71. package/dist/src/commands/furnace/diff.js +7 -7
  72. package/dist/src/commands/furnace/index.js +1 -1
  73. package/dist/src/commands/furnace/init.js +15 -15
  74. package/dist/src/commands/furnace/list.js +2 -2
  75. package/dist/src/commands/furnace/override.d.ts +1 -1
  76. package/dist/src/commands/furnace/override.js +15 -15
  77. package/dist/src/commands/furnace/preview.js +17 -17
  78. package/dist/src/commands/furnace/refresh.js +6 -6
  79. package/dist/src/commands/furnace/remove-mutations.d.ts +3 -3
  80. package/dist/src/commands/furnace/remove-mutations.js +19 -18
  81. package/dist/src/commands/furnace/remove-state.d.ts +1 -1
  82. package/dist/src/commands/furnace/remove-state.js +1 -1
  83. package/dist/src/commands/furnace/remove.js +2 -2
  84. package/dist/src/commands/furnace/rename-browser-test.js +9 -8
  85. package/dist/src/commands/furnace/rename-xpcshell.d.ts +2 -2
  86. package/dist/src/commands/furnace/rename-xpcshell.js +3 -3
  87. package/dist/src/commands/furnace/rename.js +9 -9
  88. package/dist/src/commands/furnace/scan.js +3 -3
  89. package/dist/src/commands/furnace/status.js +7 -7
  90. package/dist/src/commands/furnace/sync.js +6 -6
  91. package/dist/src/commands/furnace/test-file-name.d.ts +2 -2
  92. package/dist/src/commands/furnace/test-file-name.js +2 -2
  93. package/dist/src/commands/furnace/validate.js +11 -12
  94. package/dist/src/commands/import.js +20 -20
  95. package/dist/src/commands/lint-per-patch.js +8 -8
  96. package/dist/src/commands/lint-per-run-checkjs.d.ts +12 -13
  97. package/dist/src/commands/lint-per-run-checkjs.js +14 -15
  98. package/dist/src/commands/lint-report.d.ts +3 -3
  99. package/dist/src/commands/lint-report.js +4 -4
  100. package/dist/src/commands/lint.d.ts +3 -3
  101. package/dist/src/commands/lint.js +35 -35
  102. package/dist/src/commands/manifest.d.ts +4 -4
  103. package/dist/src/commands/package.js +2 -2
  104. package/dist/src/commands/patch/compact.d.ts +2 -2
  105. package/dist/src/commands/patch/compact.js +8 -8
  106. package/dist/src/commands/patch/delete.d.ts +1 -1
  107. package/dist/src/commands/patch/delete.js +8 -8
  108. package/dist/src/commands/patch/lint-ignore.d.ts +3 -4
  109. package/dist/src/commands/patch/lint-ignore.js +14 -15
  110. package/dist/src/commands/patch/move-files-create.d.ts +2 -2
  111. package/dist/src/commands/patch/move-files-create.js +5 -5
  112. package/dist/src/commands/patch/move-files-into.d.ts +2 -2
  113. package/dist/src/commands/patch/move-files-into.js +3 -3
  114. package/dist/src/commands/patch/move-files.js +1 -1
  115. package/dist/src/commands/patch/patch-context.d.ts +1 -1
  116. package/dist/src/commands/patch/rename.d.ts +4 -4
  117. package/dist/src/commands/patch/rename.js +8 -8
  118. package/dist/src/commands/patch/reorder.js +10 -10
  119. package/dist/src/commands/patch/split-plan.d.ts +3 -3
  120. package/dist/src/commands/patch/split-plan.js +6 -5
  121. package/dist/src/commands/patch/split.d.ts +2 -2
  122. package/dist/src/commands/patch/split.js +5 -5
  123. package/dist/src/commands/patch/staged-dependency-validate.d.ts +1 -1
  124. package/dist/src/commands/patch/staged-dependency-validate.js +3 -3
  125. package/dist/src/commands/patch/staged-dependency.d.ts +1 -1
  126. package/dist/src/commands/patch/staged-dependency.js +6 -6
  127. package/dist/src/commands/patch/tier.d.ts +2 -2
  128. package/dist/src/commands/patch/tier.js +5 -5
  129. package/dist/src/commands/patch-rename-map.d.ts +1 -1
  130. package/dist/src/commands/patch-rename-map.js +1 -1
  131. package/dist/src/commands/pending-resolution.d.ts +5 -5
  132. package/dist/src/commands/pending-resolution.js +5 -5
  133. package/dist/src/commands/re-export-adjacent.d.ts +3 -3
  134. package/dist/src/commands/re-export-adjacent.js +8 -8
  135. package/dist/src/commands/re-export-bulk-scan.d.ts +3 -3
  136. package/dist/src/commands/re-export-bulk-scan.js +17 -17
  137. package/dist/src/commands/re-export-drift.d.ts +10 -10
  138. package/dist/src/commands/re-export-drift.js +29 -29
  139. package/dist/src/commands/re-export-files.js +14 -15
  140. package/dist/src/commands/re-export-lint.d.ts +26 -26
  141. package/dist/src/commands/re-export-lint.js +27 -27
  142. package/dist/src/commands/re-export-options.d.ts +1 -1
  143. package/dist/src/commands/re-export-options.js +1 -1
  144. package/dist/src/commands/re-export-register.d.ts +1 -1
  145. package/dist/src/commands/re-export-register.js +1 -1
  146. package/dist/src/commands/re-export-scan.d.ts +1 -1
  147. package/dist/src/commands/re-export-scan.js +7 -7
  148. package/dist/src/commands/re-export-single.d.ts +1 -1
  149. package/dist/src/commands/re-export-single.js +20 -20
  150. package/dist/src/commands/re-export.js +7 -6
  151. package/dist/src/commands/rebase/abort.js +6 -6
  152. package/dist/src/commands/rebase/continue.js +8 -7
  153. package/dist/src/commands/rebase/index.d.ts +1 -1
  154. package/dist/src/commands/rebase/index.js +3 -3
  155. package/dist/src/commands/rebase/patch-loop.js +18 -17
  156. package/dist/src/commands/register.js +5 -5
  157. package/dist/src/commands/reset.js +1 -1
  158. package/dist/src/commands/resolve.d.ts +2 -2
  159. package/dist/src/commands/resolve.js +3 -3
  160. package/dist/src/commands/run.js +26 -26
  161. package/dist/src/commands/setup-support.js +4 -4
  162. package/dist/src/commands/setup.js +1 -1
  163. package/dist/src/commands/source.js +1 -1
  164. package/dist/src/commands/status-check.d.ts +3 -3
  165. package/dist/src/commands/status-check.js +4 -4
  166. package/dist/src/commands/status-json.d.ts +14 -13
  167. package/dist/src/commands/status-json.js +9 -8
  168. package/dist/src/commands/status-output.d.ts +3 -3
  169. package/dist/src/commands/status-output.js +3 -3
  170. package/dist/src/commands/status-ownership.d.ts +3 -3
  171. package/dist/src/commands/status-ownership.js +3 -3
  172. package/dist/src/commands/status.js +22 -22
  173. package/dist/src/commands/test-build-phase.d.ts +1 -1
  174. package/dist/src/commands/test-build-phase.js +17 -17
  175. package/dist/src/commands/test-diagnose.d.ts +1 -1
  176. package/dist/src/commands/test-diagnose.js +20 -20
  177. package/dist/src/commands/test-modes.d.ts +2 -2
  178. package/dist/src/commands/test-modes.js +4 -4
  179. package/dist/src/commands/test-run.d.ts +11 -11
  180. package/dist/src/commands/test-run.js +15 -15
  181. package/dist/src/commands/test-stale-gate.d.ts +12 -12
  182. package/dist/src/commands/test-stale-gate.js +13 -13
  183. package/dist/src/commands/test-verdict.d.ts +6 -6
  184. package/dist/src/commands/test-verdict.js +11 -11
  185. package/dist/src/commands/test.d.ts +3 -3
  186. package/dist/src/commands/test.js +36 -36
  187. package/dist/src/commands/token-coverage.js +3 -3
  188. package/dist/src/commands/token-list.js +5 -5
  189. package/dist/src/commands/token.js +9 -9
  190. package/dist/src/commands/tree.js +19 -19
  191. package/dist/src/commands/typecheck.d.ts +6 -6
  192. package/dist/src/commands/typecheck.js +7 -7
  193. package/dist/src/commands/verify.d.ts +3 -3
  194. package/dist/src/commands/verify.js +10 -10
  195. package/dist/src/commands/watch.js +11 -11
  196. package/dist/src/commands/wire.js +13 -13
  197. package/dist/src/core/ast-utils.d.ts +7 -7
  198. package/dist/src/core/ast-utils.js +8 -8
  199. package/dist/src/core/branding.d.ts +5 -5
  200. package/dist/src/core/branding.js +3 -3
  201. package/dist/src/core/browser-wire.d.ts +1 -1
  202. package/dist/src/core/browser-wire.js +4 -4
  203. package/dist/src/core/build-audit-platform.d.ts +6 -6
  204. package/dist/src/core/build-audit-platform.js +26 -26
  205. package/dist/src/core/build-audit-registration.d.ts +5 -5
  206. package/dist/src/core/build-audit-registration.js +7 -7
  207. package/dist/src/core/build-audit-resolve.d.ts +5 -5
  208. package/dist/src/core/build-audit-resolve.js +6 -6
  209. package/dist/src/core/build-audit-skip.d.ts +8 -8
  210. package/dist/src/core/build-audit-skip.js +12 -12
  211. package/dist/src/core/build-audit-transforms.d.ts +2 -2
  212. package/dist/src/core/build-audit-transforms.js +3 -3
  213. package/dist/src/core/build-audit.d.ts +8 -8
  214. package/dist/src/core/build-audit.js +39 -37
  215. package/dist/src/core/build-baseline-types.d.ts +19 -18
  216. package/dist/src/core/build-baseline-types.js +1 -1
  217. package/dist/src/core/build-baseline.d.ts +8 -8
  218. package/dist/src/core/build-baseline.js +14 -14
  219. package/dist/src/core/build-jar-escalation.d.ts +8 -8
  220. package/dist/src/core/build-jar-escalation.js +15 -15
  221. package/dist/src/core/build-overwrite-guard.d.ts +4 -4
  222. package/dist/src/core/build-overwrite-guard.js +13 -13
  223. package/dist/src/core/build-prepare.d.ts +4 -4
  224. package/dist/src/core/build-prepare.js +16 -15
  225. package/dist/src/core/config-mutate.js +4 -4
  226. package/dist/src/core/config-state.js +2 -2
  227. package/dist/src/core/config-validate-build-audit.js +3 -3
  228. package/dist/src/core/config-validate-file-size.d.ts +1 -1
  229. package/dist/src/core/config-validate-file-size.js +2 -2
  230. package/dist/src/core/config-validate.js +8 -9
  231. package/dist/src/core/config.d.ts +10 -10
  232. package/dist/src/core/config.js +10 -10
  233. package/dist/src/core/coverage-extend.d.ts +16 -16
  234. package/dist/src/core/coverage-extend.js +16 -16
  235. package/dist/src/core/destructive.d.ts +14 -14
  236. package/dist/src/core/destructive.js +9 -9
  237. package/dist/src/core/diff-hunks.d.ts +2 -2
  238. package/dist/src/core/diff-hunks.js +7 -7
  239. package/dist/src/core/discard-baseline.d.ts +10 -10
  240. package/dist/src/core/discard-baseline.js +15 -16
  241. package/dist/src/core/display-state.d.ts +11 -11
  242. package/dist/src/core/display-state.js +12 -12
  243. package/dist/src/core/engine-changes.d.ts +2 -2
  244. package/dist/src/core/engine-changes.js +2 -2
  245. package/dist/src/core/engine-precondition.d.ts +4 -4
  246. package/dist/src/core/engine-precondition.js +2 -2
  247. package/dist/src/core/engine-session-lock.d.ts +18 -18
  248. package/dist/src/core/engine-session-lock.js +37 -37
  249. package/dist/src/core/export-moved-code-shape.d.ts +7 -7
  250. package/dist/src/core/export-moved-code-shape.js +8 -8
  251. package/dist/src/core/file-lock-owner.d.ts +11 -11
  252. package/dist/src/core/file-lock-owner.js +18 -18
  253. package/dist/src/core/file-lock.d.ts +12 -12
  254. package/dist/src/core/file-lock.js +52 -39
  255. package/dist/src/core/firefox-cache.d.ts +1 -1
  256. package/dist/src/core/firefox-cache.js +10 -10
  257. package/dist/src/core/firefox-download.d.ts +3 -3
  258. package/dist/src/core/firefox-download.js +6 -6
  259. package/dist/src/core/firefox-extract.d.ts +2 -2
  260. package/dist/src/core/firefox-extract.js +13 -13
  261. package/dist/src/core/firefox.d.ts +5 -5
  262. package/dist/src/core/firefox.js +8 -8
  263. package/dist/src/core/furnace-apply-dry-run.js +1 -1
  264. package/dist/src/core/furnace-apply-ftl.d.ts +5 -5
  265. package/dist/src/core/furnace-apply-ftl.js +8 -8
  266. package/dist/src/core/furnace-apply-helpers.d.ts +9 -9
  267. package/dist/src/core/furnace-apply-helpers.js +21 -21
  268. package/dist/src/core/furnace-apply-output.js +1 -1
  269. package/dist/src/core/furnace-apply-overwrite-warn.d.ts +9 -9
  270. package/dist/src/core/furnace-apply-overwrite-warn.js +9 -9
  271. package/dist/src/core/furnace-apply-undeploy-actions.d.ts +1 -1
  272. package/dist/src/core/furnace-apply-undeploy-actions.js +1 -1
  273. package/dist/src/core/furnace-apply.d.ts +3 -3
  274. package/dist/src/core/furnace-apply.js +22 -21
  275. package/dist/src/core/furnace-checksum-utils.d.ts +5 -5
  276. package/dist/src/core/furnace-checksum-utils.js +5 -5
  277. package/dist/src/core/furnace-config-custom.d.ts +1 -1
  278. package/dist/src/core/furnace-config-custom.js +2 -2
  279. package/dist/src/core/furnace-config-order.js +1 -1
  280. package/dist/src/core/furnace-config-tokens.d.ts +3 -3
  281. package/dist/src/core/furnace-config-tokens.js +3 -3
  282. package/dist/src/core/furnace-config-validate.js +2 -2
  283. package/dist/src/core/furnace-config.d.ts +4 -4
  284. package/dist/src/core/furnace-config.js +18 -18
  285. package/dist/src/core/furnace-constants.d.ts +6 -6
  286. package/dist/src/core/furnace-constants.js +6 -6
  287. package/dist/src/core/furnace-css-fragments.d.ts +6 -6
  288. package/dist/src/core/furnace-css-fragments.js +11 -11
  289. package/dist/src/core/furnace-dir-entry.d.ts +1 -1
  290. package/dist/src/core/furnace-dir-entry.js +1 -1
  291. package/dist/src/core/furnace-jsconfig.d.ts +7 -7
  292. package/dist/src/core/furnace-jsconfig.js +22 -20
  293. package/dist/src/core/furnace-operation.d.ts +21 -20
  294. package/dist/src/core/furnace-operation.js +36 -34
  295. package/dist/src/core/furnace-precondition.d.ts +10 -10
  296. package/dist/src/core/furnace-precondition.js +8 -8
  297. package/dist/src/core/furnace-refresh.js +2 -2
  298. package/dist/src/core/furnace-registration-ast.d.ts +2 -2
  299. package/dist/src/core/furnace-registration-ast.js +9 -9
  300. package/dist/src/core/furnace-registration-remove.d.ts +4 -4
  301. package/dist/src/core/furnace-registration-remove.js +6 -6
  302. package/dist/src/core/furnace-registration-validate.d.ts +2 -2
  303. package/dist/src/core/furnace-registration-validate.js +2 -2
  304. package/dist/src/core/furnace-registration.d.ts +5 -5
  305. package/dist/src/core/furnace-registration.js +7 -7
  306. package/dist/src/core/furnace-rollback.d.ts +1 -1
  307. package/dist/src/core/furnace-rollback.js +5 -5
  308. package/dist/src/core/furnace-stale-export.d.ts +17 -16
  309. package/dist/src/core/furnace-stale-export.js +16 -15
  310. package/dist/src/core/furnace-staleness.d.ts +2 -2
  311. package/dist/src/core/furnace-staleness.js +2 -2
  312. package/dist/src/core/furnace-state-persist.d.ts +10 -10
  313. package/dist/src/core/furnace-state-persist.js +10 -10
  314. package/dist/src/core/furnace-step-errors.d.ts +6 -6
  315. package/dist/src/core/furnace-step-errors.js +6 -6
  316. package/dist/src/core/furnace-validate-accessibility.js +14 -14
  317. package/dist/src/core/furnace-validate-compatibility.js +9 -9
  318. package/dist/src/core/furnace-validate-registration.d.ts +2 -2
  319. package/dist/src/core/furnace-validate-registration.js +13 -13
  320. package/dist/src/core/furnace-validate-structure.d.ts +1 -1
  321. package/dist/src/core/furnace-validate-structure.js +4 -4
  322. package/dist/src/core/furnace-validate.js +9 -9
  323. package/dist/src/core/furnace-version-drift.d.ts +5 -5
  324. package/dist/src/core/furnace-version-drift.js +5 -5
  325. package/dist/src/core/git-base.d.ts +4 -4
  326. package/dist/src/core/git-base.js +9 -9
  327. package/dist/src/core/git-diff-new-file.d.ts +4 -4
  328. package/dist/src/core/git-diff-new-file.js +8 -8
  329. package/dist/src/core/git-diff.d.ts +4 -4
  330. package/dist/src/core/git-diff.js +35 -34
  331. package/dist/src/core/git-file-ops.d.ts +6 -6
  332. package/dist/src/core/git-file-ops.js +7 -7
  333. package/dist/src/core/git-readonly-index.d.ts +12 -12
  334. package/dist/src/core/git-readonly-index.js +12 -12
  335. package/dist/src/core/git-status.d.ts +4 -4
  336. package/dist/src/core/git-status.js +4 -4
  337. package/dist/src/core/git.d.ts +3 -3
  338. package/dist/src/core/git.js +14 -14
  339. package/dist/src/core/harness-orphans.d.ts +17 -17
  340. package/dist/src/core/harness-orphans.js +20 -20
  341. package/dist/src/core/history-log.d.ts +3 -3
  342. package/dist/src/core/history-log.js +3 -3
  343. package/dist/src/core/license-headers.d.ts +19 -18
  344. package/dist/src/core/license-headers.js +29 -28
  345. package/dist/src/core/mach-build-artifacts.d.ts +21 -21
  346. package/dist/src/core/mach-build-artifacts.js +23 -23
  347. package/dist/src/core/mach-error-hints.d.ts +5 -5
  348. package/dist/src/core/mach-error-hints.js +13 -13
  349. package/dist/src/core/mach-known-noise-filter.d.ts +41 -38
  350. package/dist/src/core/mach-known-noise-filter.js +53 -50
  351. package/dist/src/core/mach-mozconfig.d.ts +6 -6
  352. package/dist/src/core/mach-mozconfig.js +15 -15
  353. package/dist/src/core/mach-python.d.ts +2 -1
  354. package/dist/src/core/mach-python.js +4 -3
  355. package/dist/src/core/mach-resource-shim.d.ts +12 -12
  356. package/dist/src/core/mach-resource-shim.js +20 -20
  357. package/dist/src/core/mach.d.ts +23 -23
  358. package/dist/src/core/mach.js +36 -36
  359. package/dist/src/core/marionette-port.d.ts +15 -13
  360. package/dist/src/core/marionette-port.js +34 -31
  361. package/dist/src/core/marionette-preflight.d.ts +6 -6
  362. package/dist/src/core/marionette-preflight.js +23 -23
  363. package/dist/src/core/markdown-table.d.ts +9 -9
  364. package/dist/src/core/markdown-table.js +14 -14
  365. package/dist/src/core/mochitest-server-port.d.ts +8 -8
  366. package/dist/src/core/mochitest-server-port.js +14 -14
  367. package/dist/src/core/module-resolution-preflight.d.ts +8 -8
  368. package/dist/src/core/module-resolution-preflight.js +11 -11
  369. package/dist/src/core/moz-manifest-helpers.d.ts +7 -7
  370. package/dist/src/core/moz-manifest-helpers.js +7 -7
  371. package/dist/src/core/moz-manifest-register.d.ts +1 -1
  372. package/dist/src/core/moz-manifest-register.js +2 -2
  373. package/dist/src/core/moz-manifest-rules.js +11 -11
  374. package/dist/src/core/moz-manifest-tokenizers.js +1 -1
  375. package/dist/src/core/ownership-table.d.ts +5 -5
  376. package/dist/src/core/ownership-table.js +7 -7
  377. package/dist/src/core/parser-fallback.d.ts +3 -3
  378. package/dist/src/core/parser-fallback.js +3 -3
  379. package/dist/src/core/patch-apply-fuzz.d.ts +5 -5
  380. package/dist/src/core/patch-apply-fuzz.js +9 -9
  381. package/dist/src/core/patch-apply.d.ts +9 -9
  382. package/dist/src/core/patch-apply.js +30 -30
  383. package/dist/src/core/patch-export-update.d.ts +4 -4
  384. package/dist/src/core/patch-export-update.js +3 -3
  385. package/dist/src/core/patch-export.d.ts +10 -10
  386. package/dist/src/core/patch-export.js +13 -13
  387. package/dist/src/core/patch-identifier-suggest.d.ts +1 -1
  388. package/dist/src/core/patch-identifier-suggest.js +4 -4
  389. package/dist/src/core/patch-lint-binary.d.ts +7 -7
  390. package/dist/src/core/patch-lint-cache.d.ts +2 -2
  391. package/dist/src/core/patch-lint-cache.js +13 -13
  392. package/dist/src/core/patch-lint-checkjs.d.ts +26 -26
  393. package/dist/src/core/patch-lint-checkjs.js +42 -41
  394. package/dist/src/core/patch-lint-chrome-jsdoc.d.ts +8 -9
  395. package/dist/src/core/patch-lint-chrome-jsdoc.js +10 -11
  396. package/dist/src/core/patch-lint-creators.d.ts +3 -3
  397. package/dist/src/core/patch-lint-creators.js +3 -3
  398. package/dist/src/core/patch-lint-cross.d.ts +13 -13
  399. package/dist/src/core/patch-lint-cross.js +21 -21
  400. package/dist/src/core/patch-lint-css.d.ts +1 -1
  401. package/dist/src/core/patch-lint-css.js +5 -5
  402. package/dist/src/core/patch-lint-diff-tag.d.ts +5 -5
  403. package/dist/src/core/patch-lint-diff-tag.js +5 -5
  404. package/dist/src/core/patch-lint-diff.d.ts +4 -4
  405. package/dist/src/core/patch-lint-diff.js +4 -4
  406. package/dist/src/core/patch-lint-file-size.d.ts +3 -3
  407. package/dist/src/core/patch-lint-file-size.js +3 -3
  408. package/dist/src/core/patch-lint-forward-registration.d.ts +4 -4
  409. package/dist/src/core/patch-lint-forward-registration.js +12 -12
  410. package/dist/src/core/patch-lint-jsdoc.d.ts +2 -2
  411. package/dist/src/core/patch-lint-jsdoc.js +11 -11
  412. package/dist/src/core/patch-lint-module-registration.d.ts +1 -1
  413. package/dist/src/core/patch-lint-module-registration.js +1 -1
  414. package/dist/src/core/patch-lint-mozbuild.d.ts +1 -1
  415. package/dist/src/core/patch-lint-mozbuild.js +10 -10
  416. package/dist/src/core/patch-lint-observer.d.ts +3 -3
  417. package/dist/src/core/patch-lint-observer.js +7 -7
  418. package/dist/src/core/patch-lint-ownership.d.ts +6 -6
  419. package/dist/src/core/patch-lint-ownership.js +6 -6
  420. package/dist/src/core/patch-lint-prettier.d.ts +6 -6
  421. package/dist/src/core/patch-lint-prettier.js +6 -6
  422. package/dist/src/core/patch-lint-queue-types.d.ts +1 -1
  423. package/dist/src/core/patch-lint-queue-types.js +1 -1
  424. package/dist/src/core/patch-lint-staged-registration.d.ts +2 -2
  425. package/dist/src/core/patch-lint-staged-registration.js +6 -6
  426. package/dist/src/core/patch-lint-unmanaged-companion.d.ts +23 -23
  427. package/dist/src/core/patch-lint-unmanaged-companion.js +26 -26
  428. package/dist/src/core/patch-lint.d.ts +27 -26
  429. package/dist/src/core/patch-lint.js +48 -46
  430. package/dist/src/core/patch-lock.d.ts +1 -1
  431. package/dist/src/core/patch-lock.js +8 -8
  432. package/dist/src/core/patch-manifest-consistency.d.ts +7 -7
  433. package/dist/src/core/patch-manifest-consistency.js +16 -17
  434. package/dist/src/core/patch-manifest-files-affected.d.ts +1 -1
  435. package/dist/src/core/patch-manifest-files-affected.js +3 -3
  436. package/dist/src/core/patch-manifest-io.d.ts +14 -14
  437. package/dist/src/core/patch-manifest-io.js +27 -27
  438. package/dist/src/core/patch-manifest-query.d.ts +1 -1
  439. package/dist/src/core/patch-manifest-query.js +4 -4
  440. package/dist/src/core/patch-manifest-resolve.d.ts +5 -5
  441. package/dist/src/core/patch-manifest-resolve.js +7 -7
  442. package/dist/src/core/patch-manifest-validate.js +3 -3
  443. package/dist/src/core/patch-manifest.d.ts +2 -2
  444. package/dist/src/core/patch-manifest.js +2 -2
  445. package/dist/src/core/patch-parse.d.ts +14 -14
  446. package/dist/src/core/patch-parse.js +16 -16
  447. package/dist/src/core/patch-registration-refs.d.ts +4 -4
  448. package/dist/src/core/patch-registration-refs.js +7 -7
  449. package/dist/src/core/patch-transform.d.ts +8 -8
  450. package/dist/src/core/patch-transform.js +13 -13
  451. package/dist/src/core/process-cpu-time.d.ts +1 -1
  452. package/dist/src/core/process-cpu-time.js +5 -5
  453. package/dist/src/core/rebase-session.d.ts +7 -7
  454. package/dist/src/core/rebase-session.js +8 -8
  455. package/dist/src/core/register-result.d.ts +1 -1
  456. package/dist/src/core/register-result.js +1 -1
  457. package/dist/src/core/register-scaffold.d.ts +2 -2
  458. package/dist/src/core/register-scaffold.js +3 -3
  459. package/dist/src/core/register-shared-css.d.ts +3 -3
  460. package/dist/src/core/register-shared-css.js +4 -4
  461. package/dist/src/core/register-xpcshell-test.d.ts +2 -2
  462. package/dist/src/core/register-xpcshell-test.js +2 -2
  463. package/dist/src/core/run-log-redact.d.ts +12 -12
  464. package/dist/src/core/run-log-redact.js +16 -16
  465. package/dist/src/core/run-log.d.ts +9 -9
  466. package/dist/src/core/run-log.js +14 -14
  467. package/dist/src/core/shared-ftl.d.ts +2 -2
  468. package/dist/src/core/shared-ftl.js +6 -6
  469. package/dist/src/core/signal-critical.d.ts +2 -2
  470. package/dist/src/core/signal-critical.js +2 -2
  471. package/dist/src/core/smoke-patterns.d.ts +5 -5
  472. package/dist/src/core/smoke-patterns.js +9 -9
  473. package/dist/src/core/state-file.d.ts +3 -3
  474. package/dist/src/core/status-binary.d.ts +8 -8
  475. package/dist/src/core/status-binary.js +12 -12
  476. package/dist/src/core/status-classify.d.ts +17 -17
  477. package/dist/src/core/status-classify.js +11 -11
  478. package/dist/src/core/test-changed-prefs.d.ts +12 -12
  479. package/dist/src/core/test-changed-prefs.js +15 -15
  480. package/dist/src/core/test-harness-crash.d.ts +39 -39
  481. package/dist/src/core/test-harness-crash.js +67 -67
  482. package/dist/src/core/test-harness-output.d.ts +7 -7
  483. package/dist/src/core/test-harness-output.js +7 -7
  484. package/dist/src/core/test-harness-verdict-notes.d.ts +13 -14
  485. package/dist/src/core/test-harness-verdict-notes.js +4 -4
  486. package/dist/src/core/test-path-scope.d.ts +8 -8
  487. package/dist/src/core/test-path-scope.js +11 -11
  488. package/dist/src/core/test-stale-check.d.ts +22 -21
  489. package/dist/src/core/test-stale-check.js +29 -28
  490. package/dist/src/core/test-stale-symlink.d.ts +1 -1
  491. package/dist/src/core/test-stale-symlink.js +1 -1
  492. package/dist/src/core/test-stall-triage.d.ts +9 -9
  493. package/dist/src/core/test-stall-triage.js +22 -22
  494. package/dist/src/core/token-category.d.ts +4 -4
  495. package/dist/src/core/token-category.js +13 -12
  496. package/dist/src/core/token-coverage.js +4 -5
  497. package/dist/src/core/token-dark-mode.d.ts +17 -9
  498. package/dist/src/core/token-dark-mode.js +41 -28
  499. package/dist/src/core/token-docs.d.ts +1 -1
  500. package/dist/src/core/token-inventory.d.ts +6 -6
  501. package/dist/src/core/token-inventory.js +7 -7
  502. package/dist/src/core/token-manager.d.ts +3 -3
  503. package/dist/src/core/token-manager.js +21 -21
  504. package/dist/src/core/token-scaffold.d.ts +4 -4
  505. package/dist/src/core/token-scaffold.js +4 -4
  506. package/dist/src/core/token-variant.d.ts +14 -14
  507. package/dist/src/core/token-variant.js +32 -32
  508. package/dist/src/core/toolchain-preflight.d.ts +15 -15
  509. package/dist/src/core/toolchain-preflight.js +22 -22
  510. package/dist/src/core/tree-cow.d.ts +3 -3
  511. package/dist/src/core/tree-cow.js +6 -6
  512. package/dist/src/core/tree-guard.d.ts +3 -3
  513. package/dist/src/core/tree-guard.js +23 -23
  514. package/dist/src/core/tree-store.d.ts +15 -15
  515. package/dist/src/core/tree-store.js +35 -33
  516. package/dist/src/core/typecheck-shim.d.ts +16 -15
  517. package/dist/src/core/typecheck-shim.js +26 -25
  518. package/dist/src/core/typecheck.d.ts +12 -12
  519. package/dist/src/core/typecheck.js +31 -31
  520. package/dist/src/core/wire-destroy.d.ts +2 -2
  521. package/dist/src/core/wire-destroy.js +5 -5
  522. package/dist/src/core/wire-dom-fragment.d.ts +3 -3
  523. package/dist/src/core/wire-dom-fragment.js +6 -6
  524. package/dist/src/core/wire-init.d.ts +2 -2
  525. package/dist/src/core/wire-init.js +7 -7
  526. package/dist/src/core/wire-subscript.d.ts +1 -1
  527. package/dist/src/core/wire-subscript.js +3 -3
  528. package/dist/src/core/wire-utils.d.ts +9 -9
  529. package/dist/src/core/wire-utils.js +11 -11
  530. package/dist/src/core/xpcshell-appdir.d.ts +20 -20
  531. package/dist/src/core/xpcshell-appdir.js +26 -26
  532. package/dist/src/core/xpcshell-profile-dir.d.ts +3 -3
  533. package/dist/src/core/xpcshell-profile-dir.js +7 -7
  534. package/dist/src/errors/base.d.ts +22 -21
  535. package/dist/src/errors/base.js +22 -21
  536. package/dist/src/errors/build.d.ts +6 -6
  537. package/dist/src/errors/build.js +6 -6
  538. package/dist/src/errors/codes.d.ts +10 -10
  539. package/dist/src/errors/codes.js +10 -10
  540. package/dist/src/errors/furnace.d.ts +2 -2
  541. package/dist/src/errors/git.d.ts +1 -1
  542. package/dist/src/errors/git.js +1 -1
  543. package/dist/src/errors/patch.d.ts +3 -3
  544. package/dist/src/errors/patch.js +3 -3
  545. package/dist/src/errors/rebase.d.ts +1 -1
  546. package/dist/src/errors/rebase.js +1 -1
  547. package/dist/src/errors/run.d.ts +1 -1
  548. package/dist/src/errors/run.js +1 -1
  549. package/dist/src/index.d.ts +4 -4
  550. package/dist/src/index.js +4 -4
  551. package/dist/src/types/commands/options.d.ts +86 -85
  552. package/dist/src/types/commands/patches.d.ts +19 -19
  553. package/dist/src/types/commands/project.d.ts +3 -3
  554. package/dist/src/types/config.d.ts +24 -23
  555. package/dist/src/types/furnace.d.ts +17 -17
  556. package/dist/src/types/json.d.ts +3 -3
  557. package/dist/src/types/json.js +2 -2
  558. package/dist/src/types/typecheck.d.ts +3 -3
  559. package/dist/src/utils/assert.d.ts +1 -1
  560. package/dist/src/utils/assert.js +6 -6
  561. package/dist/src/utils/build-info.d.ts +5 -5
  562. package/dist/src/utils/build-info.js +6 -6
  563. package/dist/src/utils/child-env.d.ts +5 -5
  564. package/dist/src/utils/child-env.js +5 -5
  565. package/dist/src/utils/concurrency.d.ts +2 -2
  566. package/dist/src/utils/concurrency.js +2 -2
  567. package/dist/src/utils/elapsed.js +1 -1
  568. package/dist/src/utils/errors.d.ts +8 -8
  569. package/dist/src/utils/errors.js +8 -8
  570. package/dist/src/utils/fs.d.ts +1 -1
  571. package/dist/src/utils/fs.js +8 -8
  572. package/dist/src/utils/line-dispatch.d.ts +3 -3
  573. package/dist/src/utils/line-dispatch.js +5 -5
  574. package/dist/src/utils/logger.d.ts +4 -4
  575. package/dist/src/utils/logger.js +11 -11
  576. package/dist/src/utils/machine-output.js +2 -2
  577. package/dist/src/utils/options.d.ts +13 -13
  578. package/dist/src/utils/options.js +20 -20
  579. package/dist/src/utils/package-root.js +2 -2
  580. package/dist/src/utils/paths.d.ts +4 -4
  581. package/dist/src/utils/paths.js +4 -4
  582. package/dist/src/utils/process-group.d.ts +8 -8
  583. package/dist/src/utils/process-group.js +19 -19
  584. package/dist/src/utils/process.d.ts +34 -33
  585. package/dist/src/utils/process.js +20 -19
  586. package/dist/src/utils/ps-duration.d.ts +4 -4
  587. package/dist/src/utils/ps-duration.js +6 -6
  588. package/dist/src/utils/regex.d.ts +4 -4
  589. package/dist/src/utils/regex.js +7 -7
  590. package/dist/src/utils/sleep.d.ts +7 -7
  591. package/dist/src/utils/sleep.js +7 -7
  592. package/dist/src/utils/stdio-drain.d.ts +7 -7
  593. package/dist/src/utils/stdio-drain.js +8 -8
  594. package/dist/src/utils/validation.d.ts +11 -12
  595. package/dist/src/utils/validation.js +20 -21
  596. package/docs/README.md +2 -2
  597. package/docs/configuration.md +120 -114
  598. package/docs/exit-codes.md +63 -58
  599. package/docs/furnace.md +20 -19
  600. package/docs/lifecycle-invariants.md +412 -251
  601. package/docs/machine-output.md +33 -32
  602. package/docs/patch-workflow.md +48 -45
  603. package/docs/run-logs.md +62 -58
  604. package/docs/testing.md +101 -101
  605. package/docs/verification-trees.md +23 -22
  606. package/package.json +2 -2
@@ -6,7 +6,7 @@ import { buildPatchClaims } from './status-classify.js';
6
6
  *
7
7
  * Populated from three sources:
8
8
  *
9
- * 1. Every path in every patch's `filesAffected` — so managed paths show up
9
+ * 1. Every path in every patch's `filesAffected`, so managed paths show up
10
10
  * even when they are not currently modified on disk.
11
11
  * 2. Any worktree status entries not claimed by any patch (flagged as
12
12
  * `unmanaged`).
@@ -21,11 +21,11 @@ import { buildPatchClaims } from './status-classify.js';
21
21
  * `conflictReason` so the output can disambiguate.
22
22
  *
23
23
  * @param manifestPatches - Manifest rows, each with its `filesAffected`
24
- * @param worktreeFiles - Raw worktree status entries; untracked and modified
24
+ * @param worktreeFiles - Raw worktree status entries. Untracked and modified
25
25
  * both acceptable
26
26
  * @param newFileCreatorsByPath - Map produced by
27
- * {@link import('../core/patch-lint.js').collectNewFileCreatorsByPath};
28
- * paths with a `.length > 1` owner list become duplicate-create conflicts
27
+ * {@link import('../core/patch-lint.js').collectNewFileCreatorsByPath}.
28
+ * Paths with a `.length > 1` owner list become duplicate-create conflicts
29
29
  */
30
30
  export function buildOwnershipTable(manifestPatches, worktreeFiles, newFileCreatorsByPath, classifications = new Map()) {
31
31
  const ownersByPath = buildPatchClaims(manifestPatches);
@@ -57,7 +57,7 @@ export function buildOwnershipTable(manifestPatches, worktreeFiles, newFileCreat
57
57
  const duplicateOwners = duplicateCreateByPath.get(path);
58
58
  const isFilesAffectedConflict = owners.length > 1;
59
59
  const isDuplicateCreateConflict = duplicateOwners !== undefined;
60
- // Prefer the filesAffected reason when both apply — it's the older
60
+ // Prefer the filesAffected reason when both apply: it's the older
61
61
  // source of drift and the operator will usually want to fix the
62
62
  // manifest rows even when the bodies also duplicate-create.
63
63
  const conflictReason = isFilesAffectedConflict
@@ -105,7 +105,7 @@ export function buildOwnershipTable(manifestPatches, worktreeFiles, newFileCreat
105
105
  * `files-affected` drift (two manifest rows claiming the same path) from
106
106
  * `duplicate-create` drift (two patches both hitting `/dev/null → b/path`
107
107
  * in their bodies) so the operator can tell at a glance which fix
108
- * applies — the former wants `re-export --files`, the latter wants
108
+ * applies. The former wants `re-export --files`, the latter wants
109
109
  * `patch delete`.
110
110
  */
111
111
  function renderConflictCell(row) {
@@ -134,7 +134,7 @@ function renderStateCell(row) {
134
134
  /**
135
135
  * Renders the ownership table as a GitHub-flavored Markdown pipe table.
136
136
  * Using markdown-table's own serializer would require a seed document to
137
- * graft onto, which is overkill for ad-hoc status output; the rendering
137
+ * graft onto, which is overkill for ad-hoc status output. The rendering
138
138
  * here is trivial enough to inline.
139
139
  */
140
140
  export function renderOwnershipTable(rows) {
@@ -14,8 +14,8 @@ export declare function consumeParserFallbackEvents(): ParserFallbackEvent[];
14
14
  *
15
15
  * Rethrows internal-invariant `GeneralError`s ("Unexpected empty …array"):
16
16
  * those are programming bugs, and retrying the legacy scanner cannot fix a
17
- * broken invariant — it just buries the stack. Everything else still falls
18
- * back, which is load-bearing: the AST path raises a raw acorn SyntaxError
17
+ * broken invariant, it just buries the stack. Everything else still falls
18
+ * back, which matters: the AST path raises a raw acorn SyntaxError
19
19
  * on chrome sources acorn cannot parse (preprocessor directives), and
20
20
  * BuildError when the file's shape is unexpected. Both are exactly what the
21
21
  * legacy scanner is here to handle.
@@ -43,7 +43,7 @@ export interface ParserResult<T> {
43
43
  * @param primary - The modern parser implementation
44
44
  * @param fallback - The legacy fallback implementation
45
45
  * @param context - File/context name used in the warning message
46
- * @param rethrowIf - Optional predicate; if it returns true for the caught
46
+ * @param rethrowIf - Optional predicate. If it returns true for the caught
47
47
  * error the error is re-thrown instead of falling back (useful for
48
48
  * domain-specific errors that should not be swallowed).
49
49
  */
@@ -19,8 +19,8 @@ export function consumeParserFallbackEvents() {
19
19
  *
20
20
  * Rethrows internal-invariant `GeneralError`s ("Unexpected empty …array"):
21
21
  * those are programming bugs, and retrying the legacy scanner cannot fix a
22
- * broken invariant — it just buries the stack. Everything else still falls
23
- * back, which is load-bearing: the AST path raises a raw acorn SyntaxError
22
+ * broken invariant, it just buries the stack. Everything else still falls
23
+ * back, which matters: the AST path raises a raw acorn SyntaxError
24
24
  * on chrome sources acorn cannot parse (preprocessor directives), and
25
25
  * BuildError when the file's shape is unexpected. Both are exactly what the
26
26
  * legacy scanner is here to handle.
@@ -42,7 +42,7 @@ export function isInternalInvariantFailure(error) {
42
42
  * @param primary - The modern parser implementation
43
43
  * @param fallback - The legacy fallback implementation
44
44
  * @param context - File/context name used in the warning message
45
- * @param rethrowIf - Optional predicate; if it returns true for the caught
45
+ * @param rethrowIf - Optional predicate. If it returns true for the caught
46
46
  * error the error is re-thrown instead of falling back (useful for
47
47
  * domain-specific errors that should not be swallowed).
48
48
  */
@@ -3,17 +3,17 @@
3
3
  *
4
4
  * Tries an exact `git apply` first, then retries with git's real
5
5
  * drift-tolerance knob: `-C<n>` (reduced context matching). `git apply` has
6
- * NO `--fuzz` option — that flag belongs to GNU `patch(1)`, and passing it
6
+ * no `--fuzz` option. That flag belongs to GNU `patch(1)`, and passing it
7
7
  * makes git exit 129 with a usage error that an escalation loop will happily
8
8
  * swallow, so every "fuzzy" attempt silently fails and patches that would
9
9
  * have applied with context drift are reported as hard conflicts. If all
10
10
  * context-reduction levels fail, falls through to `git apply --reject` so
11
11
  * the user gets `.rej` files for manual resolution.
12
12
  *
13
- * Semantics note: GNU fuzz *fuzzily matches* context; `-C<n>` *ignores*
13
+ * Semantics note: GNU fuzz *fuzzily matches* context. `-C<n>` *ignores*
14
14
  * outer context lines instead. Step k maps to `-C(3-k)` (git's default
15
15
  * context width is 3), so the final step `-C0` matches on line positions and
16
- * -/+ content alone — the rough analogue of GNU `--fuzz=3` on a 3-context
16
+ * -/+ content alone, the rough analogue of GNU `--fuzz=3` on a 3-context
17
17
  * patch.
18
18
  */
19
19
  export interface FuzzyApplyResult {
@@ -38,8 +38,8 @@ export interface FuzzyApplyResult {
38
38
  * @param maxFuzz - Maximum context-reduction steps to try (default 3,
39
39
  * 0 = exact only). Values above 3 are capped: git cannot reduce below
40
40
  * `-C0`.
41
- * @throws InvalidArgumentError when `maxFuzz` is not a non-negative integer —
42
- * a NaN or negative value would silently skip every apply attempt
41
+ * @throws InvalidArgumentError when `maxFuzz` is not a non-negative integer.
42
+ * A NaN or negative value would silently skip every apply attempt
43
43
  * (including the exact-match one) and fall straight through to `--reject`
44
44
  */
45
45
  export declare function applyPatchWithFuzz(patchPath: string, engineDir: string, maxFuzz?: number): Promise<FuzzyApplyResult>;
@@ -4,24 +4,24 @@
4
4
  *
5
5
  * Tries an exact `git apply` first, then retries with git's real
6
6
  * drift-tolerance knob: `-C<n>` (reduced context matching). `git apply` has
7
- * NO `--fuzz` option — that flag belongs to GNU `patch(1)`, and passing it
7
+ * no `--fuzz` option. That flag belongs to GNU `patch(1)`, and passing it
8
8
  * makes git exit 129 with a usage error that an escalation loop will happily
9
9
  * swallow, so every "fuzzy" attempt silently fails and patches that would
10
10
  * have applied with context drift are reported as hard conflicts. If all
11
11
  * context-reduction levels fail, falls through to `git apply --reject` so
12
12
  * the user gets `.rej` files for manual resolution.
13
13
  *
14
- * Semantics note: GNU fuzz *fuzzily matches* context; `-C<n>` *ignores*
14
+ * Semantics note: GNU fuzz *fuzzily matches* context. `-C<n>` *ignores*
15
15
  * outer context lines instead. Step k maps to `-C(3-k)` (git's default
16
16
  * context width is 3), so the final step `-C0` matches on line positions and
17
- * -/+ content alone — the rough analogue of GNU `--fuzz=3` on a 3-context
17
+ * -/+ content alone, the rough analogue of GNU `--fuzz=3` on a 3-context
18
18
  * patch.
19
19
  */
20
20
  import { InvalidArgumentError } from '../errors/base.js';
21
21
  import { verbose } from '../utils/logger.js';
22
22
  import { exec } from '../utils/process.js';
23
23
  import { ensureGit } from './git-base.js';
24
- /** Git's default diff context width — the ceiling for reduction steps. */
24
+ /** Git's default diff context width, the ceiling for reduction steps. */
25
25
  const GIT_DEFAULT_CONTEXT = 3;
26
26
  // ── Implementation ──
27
27
  /**
@@ -36,8 +36,8 @@ const GIT_DEFAULT_CONTEXT = 3;
36
36
  * @param maxFuzz - Maximum context-reduction steps to try (default 3,
37
37
  * 0 = exact only). Values above 3 are capped: git cannot reduce below
38
38
  * `-C0`.
39
- * @throws InvalidArgumentError when `maxFuzz` is not a non-negative integer —
40
- * a NaN or negative value would silently skip every apply attempt
39
+ * @throws InvalidArgumentError when `maxFuzz` is not a non-negative integer.
40
+ * A NaN or negative value would silently skip every apply attempt
41
41
  * (including the exact-match one) and fall straight through to `--reject`
42
42
  */
43
43
  export async function applyPatchWithFuzz(patchPath, engineDir, maxFuzz = 3) {
@@ -63,7 +63,7 @@ export async function applyPatchWithFuzz(patchPath, engineDir, maxFuzz = 3) {
63
63
  }
64
64
  return { success: true, fuzzFactor: step };
65
65
  }
66
- // Unlikely: --check passed but apply failed; fall through to next step
66
+ // Unlikely: --check passed but apply failed. Fall through to next step
67
67
  verbose(`git apply -C${GIT_DEFAULT_CONTEXT - step} --check passed but apply failed: ${apply.stderr.trim()}`);
68
68
  }
69
69
  }
@@ -88,8 +88,8 @@ export async function applyPatchWithFuzz(patchPath, engineDir, maxFuzz = 3) {
88
88
  * Rejected hunk #1.
89
89
  *
90
90
  * The reject file is `<file>.rej` next to the target. Matching GNU
91
- * `patch(1)`'s "saving rejects to file X.rej" phrasing instead — which git
92
- * never prints — leaves `rejectFiles` always empty and the
91
+ * `patch(1)`'s "saving rejects to file X.rej" phrasing instead, which git
92
+ * never prints, leaves `rejectFiles` always empty and the
93
93
  * conflict-summary ".rej files created" hint never fires.
94
94
  */
95
95
  function extractRejectFiles(stderr) {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Patch orchestration — coordinates patch discovery, application, and validation.
2
+ * Patch orchestration. Coordinates patch discovery, application, and validation.
3
3
  * Pure parsing, content transformation, and lock management are in separate modules.
4
4
  */
5
5
  import type { ImportSummary, PatchInfo, PatchMetadata } from '../types/commands/index.js';
@@ -27,14 +27,14 @@ export interface ApplyPatchesOptions {
27
27
  * The identifier is one of three shapes and the three shapes must stay
28
28
  * disjoint so the operator can reason about which patch they picked:
29
29
  *
30
- * 1. **Exact filename** — `005-foo.patch`. Matches only that filename.
31
- * 2. **Filename without extension** — `005-foo`. Matches `005-foo.patch`.
32
- * 3. **Bare numeric ordinal** — `5` or `005`. Matches the patch whose
30
+ * 1. Exact filename, `005-foo.patch`. Matches only that filename.
31
+ * 2. Filename without extension, `005-foo`. Matches `005-foo.patch`.
32
+ * 3. Bare numeric ordinal, `5` or `005`. Matches the patch whose
33
33
  * order prefix parses to the same integer (so `5` and `005` both match
34
34
  * `005-foo.patch`, and `05` matches too because parseInt normalizes
35
35
  * leading zeros).
36
36
  *
37
- * A purely-numeric identifier is treated **only** as an ordinal: it does not
37
+ * A purely-numeric identifier is treated only as an ordinal: it does not
38
38
  * also match a filename that happens to literally equal the digits. That
39
39
  * would require a patch literally named `5` or `005`, which would collide
40
40
  * with the filename prefix anyway.
@@ -66,10 +66,10 @@ export interface PatchedContentContext {
66
66
  }
67
67
  /**
68
68
  * Builds a batched patched-content context that loads the manifest and
69
- * discovers patch files ONCE for many lookups, and memoizes each patch body
69
+ * discovers patch files once for many lookups, and memoizes each patch body
70
70
  * read across the batch. A per-call helper re-runs `loadPatchesManifest` +
71
- * `discoverPatches` and re-reads every affecting patch body for every file —
72
- * O(dirtyFiles × patches) redundant IO when classifying a broad engine edit
73
- * session during `status` or `import`.
71
+ * `discoverPatches` and re-reads every affecting patch body for every file,
72
+ * which is O(dirtyFiles × patches) redundant IO when classifying a broad
73
+ * engine edit session during `status` or `import`.
74
74
  */
75
75
  export declare function createPatchedContentContext(patchesDir: string, engineDir: string): Promise<PatchedContentContext>;
@@ -1,6 +1,6 @@
1
1
  // SPDX-License-Identifier: EUPL-1.2
2
2
  /**
3
- * Patch orchestration — coordinates patch discovery, application, and validation.
3
+ * Patch orchestration. Coordinates patch discovery, application, and validation.
4
4
  * Pure parsing, content transformation, and lock management are in separate modules.
5
5
  */
6
6
  import { lstat, readFile, readlink, realpath, rm } from 'node:fs/promises';
@@ -27,7 +27,7 @@ export { extractAffectedFiles } from './patch-parse.js';
27
27
  * @param patch - Patch info
28
28
  * @param engineDir - Path to the engine directory
29
29
  * @param protectedFiles - Files touched by patches already applied in the
30
- * current run; the idempotent-recovery reset must not wipe them (see
30
+ * current run. The idempotent-recovery reset must not wipe them (see
31
31
  * applyPatchIdempotent). Overlapping queues (`--allow-overlap`) share files
32
32
  * between patches, and resetting a shared file to HEAD during a later
33
33
  * patch's recovery silently discards the earlier patch's changes.
@@ -58,7 +58,7 @@ async function applySinglePatch(patch, engineDir, protectedFiles) {
58
58
  // losslessly where a utf-8 decode of a binary file does not.
59
59
  const savedContents = new Map();
60
60
  // New-file sections keyed by target, so the binary discrimination below
61
- // reads the ALREADY-parsed section instead of re-scanning the body per
61
+ // reads the already-parsed section instead of re-scanning the body per
62
62
  // file.
63
63
  const newFileSections = new Map(parseDiffSections(patchContent)
64
64
  .filter((section) => section.isNewFile)
@@ -73,14 +73,14 @@ async function applySinglePatch(patch, engineDir, protectedFiles) {
73
73
  savedContents.set(file, await readFile(targetPath));
74
74
  const section = newFileSections.get(file);
75
75
  if (section?.isBinary === true) {
76
- // A binary new file cannot be resolved by writing extracted text —
77
- // the payload is base85, whose alphabet includes '+'. It does not
78
- // need to be: `git apply` decodes a `GIT binary patch` itself. So
79
- // the resolution is to REMOVE the blocking file and let the retry
80
- // below create it from the payload, which is exactly what the
81
- // text branch achieves by overwriting.
76
+ // A binary new file cannot be resolved by writing extracted
77
+ // text, because the payload is base85, whose alphabet includes
78
+ // '+'. It does not need to be: `git apply` decodes a `GIT binary
79
+ // patch` itself. So the resolution is to remove the blocking file
80
+ // and let the retry below create it from the payload, which is
81
+ // exactly what the text branch achieves by overwriting.
82
82
  if (!section.hasBinaryDelta) {
83
- // `Binary files … differ` records THAT the bytes changed and
83
+ // `Binary files … differ` records that the bytes changed and
84
84
  // carries none of them, so nothing can recreate the file. Fail
85
85
  // honestly rather than deleting a file we cannot put back.
86
86
  throw new PatchError(`Cannot resolve the new-file conflict for ${file}: the patch's binary section ` +
@@ -97,8 +97,8 @@ async function applySinglePatch(patch, engineDir, protectedFiles) {
97
97
  }
98
98
  }
99
99
  catch (extractError) {
100
- // Resolution threw for a LATER target after earlier targets were
101
- // already overwritten or removed — restore them before reporting
100
+ // Resolution threw for a later target after earlier targets were
101
+ // already overwritten or removed. Restore them before reporting
102
102
  // failure, instead of letting the exception skip the restore loop
103
103
  // entirely and crash the whole import.
104
104
  for (const [file, originalContent] of savedContents) {
@@ -111,7 +111,7 @@ async function applySinglePatch(patch, engineDir, protectedFiles) {
111
111
  await applyPatchIdempotent(patch.path, engineDir, {
112
112
  ...(protectedFiles ? { protectedFiles } : {}),
113
113
  });
114
- // Keep the originals: rollbackPatches needs them if a LATER patch
114
+ // Keep the originals: rollbackPatches needs them if a later patch
115
115
  // fails, since reverse-applying this new-file patch deletes the
116
116
  // target and would otherwise permanently discard the pre-existing
117
117
  // content (recoverable from git only if it was tracked at HEAD).
@@ -161,8 +161,8 @@ async function rollbackPatches(results, engineDir) {
161
161
  catch (rollbackError) {
162
162
  verbose(`Failed to roll back ${result.patch.filename}: ${toError(rollbackError).message}`);
163
163
  }
164
- // Reversing an auto-resolved new-file patch deletes the target; put
165
- // back the pre-existing content the auto-resolve overwrote.
164
+ // Reversing an auto-resolved new-file patch deletes the target, so
165
+ // put back the pre-existing content the auto-resolve overwrote.
166
166
  if (result.autoResolvedOriginals) {
167
167
  for (const [file, originalContent] of result.autoResolvedOriginals) {
168
168
  try {
@@ -179,7 +179,7 @@ async function rollbackPatches(results, engineDir) {
179
179
  async function validatePatchTargets(patch, affectedFiles, engineDir) {
180
180
  // realpath the engine root once so containment is checked against the
181
181
  // physical tree (the root itself may sit behind a symlink, e.g. /tmp on
182
- // macOS). An unresolvable engine dir skips the symlink checks — a missing
182
+ // macOS). An unresolvable engine dir skips the symlink checks. A missing
183
183
  // engine surfaces through `git apply --check` with a better message.
184
184
  const engineRoot = engineDir ? await realpath(engineDir).catch(() => null) : null;
185
185
  for (const file of affectedFiles) {
@@ -206,7 +206,7 @@ async function validatePatchTargets(patch, affectedFiles, engineDir) {
206
206
  * - Dangling symlink: `realpath` rejects it, but a write through the link
207
207
  * would still be created at the link target, so the target is resolved
208
208
  * against the link's (real) parent directory. The link target is taken
209
- * textually — a loop or nested dangling link fails at apply time anyway.
209
+ * textually. A loop or nested dangling link fails at apply time anyway.
210
210
  * - Not-yet-existing file: resolved against the nearest existing ancestor's
211
211
  * real path. Components below that ancestor do not exist, so they cannot
212
212
  * be symlinks and are appended verbatim.
@@ -240,14 +240,14 @@ async function resolvePatchWriteDestination(targetPath) {
240
240
  * The identifier is one of three shapes and the three shapes must stay
241
241
  * disjoint so the operator can reason about which patch they picked:
242
242
  *
243
- * 1. **Exact filename** — `005-foo.patch`. Matches only that filename.
244
- * 2. **Filename without extension** — `005-foo`. Matches `005-foo.patch`.
245
- * 3. **Bare numeric ordinal** — `5` or `005`. Matches the patch whose
243
+ * 1. Exact filename, `005-foo.patch`. Matches only that filename.
244
+ * 2. Filename without extension, `005-foo`. Matches `005-foo.patch`.
245
+ * 3. Bare numeric ordinal, `5` or `005`. Matches the patch whose
246
246
  * order prefix parses to the same integer (so `5` and `005` both match
247
247
  * `005-foo.patch`, and `05` matches too because parseInt normalizes
248
248
  * leading zeros).
249
249
  *
250
- * A purely-numeric identifier is treated **only** as an ordinal: it does not
250
+ * A purely-numeric identifier is treated only as an ordinal: it does not
251
251
  * also match a filename that happens to literally equal the digits. That
252
252
  * would require a patch literally named `5` or `005`, which would collide
253
253
  * with the filename prefix anyway.
@@ -280,9 +280,9 @@ export async function applyPatchesWithContinue(patchesDir, engineDir, options =
280
280
  const patches = await discoverPatches(patchesDir);
281
281
  // Resolve the --until stop index up front so callers get an immediate
282
282
  // error on an unknown identifier instead of a silent no-op. Detect
283
- // ambiguity (two patches matching the same needle — should never happen
284
- // in a well-formed manifest but surfaces queue corruption loudly
285
- // instead of silently picking the first match).
283
+ // ambiguity (two patches matching the same needle). That should never
284
+ // happen in a well-formed manifest, but it surfaces queue corruption
285
+ // loudly instead of silently picking the first match.
286
286
  let stopIndex = patches.length - 1;
287
287
  if (untilFilename !== undefined) {
288
288
  const matchingIndexes = [];
@@ -314,8 +314,8 @@ export async function applyPatchesWithContinue(patchesDir, engineDir, options =
314
314
  if (!patch)
315
315
  continue;
316
316
  if (i > stopIndex) {
317
- // Patches beyond the --until cutoff are intentionally skipped. They
318
- // are not failures — record them in `skipped` so the summary still
317
+ // Patches beyond the --until cutoff are skipped on purpose. They
318
+ // are not failures. Record them in `skipped` so the summary still
319
319
  // reflects what the full queue contained.
320
320
  skipped.push(patch);
321
321
  continue;
@@ -358,11 +358,11 @@ export async function applyPatchesWithContinue(patchesDir, engineDir, options =
358
358
  }
359
359
  /**
360
360
  * Builds a batched patched-content context that loads the manifest and
361
- * discovers patch files ONCE for many lookups, and memoizes each patch body
361
+ * discovers patch files once for many lookups, and memoizes each patch body
362
362
  * read across the batch. A per-call helper re-runs `loadPatchesManifest` +
363
- * `discoverPatches` and re-reads every affecting patch body for every file —
364
- * O(dirtyFiles × patches) redundant IO when classifying a broad engine edit
365
- * session during `status` or `import`.
363
+ * `discoverPatches` and re-reads every affecting patch body for every file,
364
+ * which is O(dirtyFiles × patches) redundant IO when classifying a broad
365
+ * engine edit session during `status` or `import`.
366
366
  */
367
367
  export async function createPatchedContentContext(patchesDir, engineDir) {
368
368
  const manifest = await loadPatchesManifest(patchesDir);
@@ -18,7 +18,7 @@ export interface UpdatePatchAndMetadataOptions {
18
18
  patchesDir: string;
19
19
  /** Patch file to rewrite. */
20
20
  filename: string;
21
- /** New patch body; an identical body skips the write. */
21
+ /** New patch body. An identical body skips the write. */
22
22
  newContent: string;
23
23
  /** Manifest-row fields to merge into the patch's metadata. */
24
24
  updates: Partial<PatchMetadata>;
@@ -36,11 +36,11 @@ export interface UpdatePatchAndMetadataOptions {
36
36
  *
37
37
  * The body write is skipped when the normalized new content is byte-identical
38
38
  * to what is already on disk. A bulk `re-export --all` refreshes every patch
39
- * in the queue, including ones the working tree never touched; rewriting an
39
+ * in the queue, including ones the working tree never touched. Rewriting an
40
40
  * unchanged body churns its mtime and reports "Re-exported" for a patch
41
41
  * nothing happened to, which is exactly the noise that hides a real
42
- * unexpected rewrite in `git status`. Metadata still moves either way — only
43
- * the redundant byte-for-byte write is elided.
42
+ * unexpected rewrite in `git status`. Metadata still moves either way, and
43
+ * only the redundant byte-for-byte write is elided.
44
44
  *
45
45
  * @param options - See {@link UpdatePatchAndMetadataOptions}
46
46
  * @returns True when the patch body on disk changed, false when it was
@@ -14,11 +14,11 @@ import { buildProjectedManifest, enforcePatchPolicy } from './patch-policy.js';
14
14
  *
15
15
  * The body write is skipped when the normalized new content is byte-identical
16
16
  * to what is already on disk. A bulk `re-export --all` refreshes every patch
17
- * in the queue, including ones the working tree never touched; rewriting an
17
+ * in the queue, including ones the working tree never touched. Rewriting an
18
18
  * unchanged body churns its mtime and reports "Re-exported" for a patch
19
19
  * nothing happened to, which is exactly the noise that hides a real
20
- * unexpected rewrite in `git status`. Metadata still moves either way — only
21
- * the redundant byte-for-byte write is elided.
20
+ * unexpected rewrite in `git status`. Metadata still moves either way, and
21
+ * only the redundant byte-for-byte write is elided.
22
22
  *
23
23
  * @param options - See {@link UpdatePatchAndMetadataOptions}
24
24
  * @returns True when the patch body on disk changed, false when it was
@@ -7,7 +7,7 @@ export { mutatePatchMetadata, updatePatchMetadata } from './patch-export-metadat
7
7
  export { updatePatchAndMetadata } from './patch-export-update.js';
8
8
  /**
9
9
  * Projects the planning subset out of a wider export input (commit input,
10
- * dry-run preview input) — the fields `planExport` /
10
+ * dry-run preview input): the fields `planExport` /
11
11
  * `computeExportPlanUnderLock` read. Optional fields are copied only when
12
12
  * present so the plan input never carries explicit `undefined` keys, which
13
13
  * would otherwise leak into the written metadata via spread. The commit
@@ -33,7 +33,7 @@ export declare function getNextPatchNumber(patchesDir: string): Promise<string>;
33
33
  export declare function sanitizeName(name: string): string;
34
34
  /**
35
35
  * Strips a leading `NNN-<category>-` prefix from a sanitized name slug.
36
- * Operators frequently pass the DESIRED FILENAME stem to `--name`
36
+ * Operators frequently pass the desired filename stem to `--name`
37
37
  * (`--name 203-ui-foo --category ui`), which would otherwise double-prefix
38
38
  * into `203-ui-203-ui-foo.patch`. The filename builders prepend the order
39
39
  * and category themselves, so a matching prefix in the name is always
@@ -45,7 +45,7 @@ export declare function stripRedundantCategoryPrefix(sanitizedName: string, cate
45
45
  * Sanitizes a patch name and drops redundant category/full-stem prefixes.
46
46
  *
47
47
  * A single trailing `.patch` extension is stripped before sanitisation:
48
- * operators frequently pass a full patch FILENAME where a name is expected
48
+ * operators frequently pass a full patch filename where a name is expected
49
49
  * (`move-files <from> 348-ui-foo.patch --create`, `rename --to foo.patch`),
50
50
  * and slugging the extension produces double-suffixed `...-patch.patch`
51
51
  * files. A name that deliberately ends in a literal `-patch` slug segment
@@ -115,7 +115,7 @@ export declare function updatePatch(patchPath: string, newContent: string): Prom
115
115
  * Dry-run and the real write both go through {@link computeExportPlanUnderLock}
116
116
  * so their filename allocation, supersede detection, and projected
117
117
  * post-write manifest cannot drift. `planExport` exposes the rich coverage
118
- * form for preview rendering; {@link commitExportedPatch} consumes the bare
118
+ * form for preview rendering. {@link commitExportedPatch} consumes the bare
119
119
  * `PatchInfo[]` form of the same underlying data.
120
120
  */
121
121
  export interface ExportPlan {
@@ -145,13 +145,13 @@ export interface PlanExportInput {
145
145
  /**
146
146
  * Optional `PatchMetadata.tier` opt-in carried from the CLI flag.
147
147
  * Only `"branding"` is currently recognised. When provided the field
148
- * is written into the new patch's metadata; when absent the field
148
+ * is written into the new patch's metadata. When absent the field
149
149
  * stays unset and tier resolution falls back to auto-detection.
150
150
  */
151
151
  tier?: 'branding';
152
152
  /**
153
153
  * Optional `PatchMetadata.lintIgnore` carried from the CLI flag.
154
- * Empty arrays are treated as "field absent" — the validator only
154
+ * Empty arrays are treated as "field absent": the validator only
155
155
  * preserves the field when it has at least one entry.
156
156
  */
157
157
  lintIgnore?: string[];
@@ -159,16 +159,16 @@ export interface PlanExportInput {
159
159
  config?: FireForgeConfig;
160
160
  }
161
161
  /**
162
- * Read-only planning function — computes everything a real export would
162
+ * Read-only planning function. Computes everything a real export would
163
163
  * do without writing anything to disk. Takes the patch directory lock
164
164
  * briefly, runs {@link computeExportPlanUnderLock}, releases the lock,
165
165
  * and returns the plan for preview rendering.
166
166
  *
167
167
  * Shares {@link computeExportPlanUnderLock} with {@link commitExportedPatch}
168
168
  * so the dry-run preview cannot drift from the real write. The real write
169
- * path does NOT reuse a prior plan object (another export may have landed
170
- * between dry-run and commit, which would stale the filename allocation);
171
- * it re-runs the same helper under a fresh lock. The guarantee is "same
169
+ * path does not reuse a prior plan object (another export may have landed
170
+ * between dry-run and commit, which would stale the filename allocation).
171
+ * It re-runs the same helper under a fresh lock. The guarantee is "same
172
172
  * code, possibly different data," not "same plan object."
173
173
  */
174
174
  export declare function planExport(input: PlanExportInput): Promise<ExportPlan>;
@@ -14,7 +14,7 @@ export { mutatePatchMetadata, updatePatchMetadata } from './patch-export-metadat
14
14
  export { updatePatchAndMetadata } from './patch-export-update.js';
15
15
  /**
16
16
  * Projects the planning subset out of a wider export input (commit input,
17
- * dry-run preview input) — the fields `planExport` /
17
+ * dry-run preview input): the fields `planExport` /
18
18
  * `computeExportPlanUnderLock` read. Optional fields are copied only when
19
19
  * present so the plan input never carries explicit `undefined` keys, which
20
20
  * would otherwise leak into the written metadata via spread. The commit
@@ -71,7 +71,7 @@ export function sanitizeName(name) {
71
71
  }
72
72
  /**
73
73
  * Strips a leading `NNN-<category>-` prefix from a sanitized name slug.
74
- * Operators frequently pass the DESIRED FILENAME stem to `--name`
74
+ * Operators frequently pass the desired filename stem to `--name`
75
75
  * (`--name 203-ui-foo --category ui`), which would otherwise double-prefix
76
76
  * into `203-ui-203-ui-foo.patch`. The filename builders prepend the order
77
77
  * and category themselves, so a matching prefix in the name is always
@@ -100,7 +100,7 @@ export function stripRedundantCategoryPrefix(sanitizedName, category) {
100
100
  * Sanitizes a patch name and drops redundant category/full-stem prefixes.
101
101
  *
102
102
  * A single trailing `.patch` extension is stripped before sanitisation:
103
- * operators frequently pass a full patch FILENAME where a name is expected
103
+ * operators frequently pass a full patch filename where a name is expected
104
104
  * (`move-files <from> 348-ui-foo.patch --create`, `rename --to foo.patch`),
105
105
  * and slugging the extension produces double-suffixed `...-patch.patch`
106
106
  * files. A name that deliberately ends in a literal `-patch` slug segment
@@ -153,7 +153,7 @@ export async function commitExportedPatch(input) {
153
153
  // Patch bodies are written byte-for-byte as git produced them, including the
154
154
  // single-space rendering of a blank context line.
155
155
  //
156
- // Do NOT add a whitespace-trimming pass here or at any other write site.
156
+ // Do not add a whitespace-trimming pass here or at any other write site.
157
157
  // Stripping marker lines whose payload is pure whitespace (`/^[ +-]\s+$/` →
158
158
  // bare marker) corrupts real content: Firefox sources contain whitespace-only
159
159
  // lines, so a ` `/`-` line whose payload was two spaces no longer matches the
@@ -220,16 +220,16 @@ export async function updatePatch(patchPath, newContent) {
220
220
  await writeText(patchPath, newContent);
221
221
  }
222
222
  /**
223
- * Internal planning helper. Does NOT take the patch directory lock — the
224
- * caller must already hold it — because the two public entry points
223
+ * Internal planning helper. It does not take the patch directory lock (the
224
+ * caller must already hold it), because the two public entry points
225
225
  * ({@link planExport} and {@link commitExportedPatch}) each take their own
226
226
  * lock for the full operation. Sharing this single pure computation is how
227
- * dry-run previews and real writes stay in lockstep by construction
228
- * instead of by parallel implementations that can drift.
227
+ * dry-run previews and real writes stay in lockstep, instead of relying on
228
+ * parallel implementations that can drift.
229
229
  */
230
230
  async function computeExportPlanUnderLock(input) {
231
231
  // ForWrite: a corrupt manifest read as null here would produce a
232
- // manifestAfter containing ONLY the new patch — committing that plan
232
+ // manifestAfter containing only the new patch. Committing that plan
233
233
  // wipes the queue metadata, and the rollback path would then delete
234
234
  // patches.json entirely because manifestBefore looked absent.
235
235
  const manifestBefore = await loadPatchesManifestForWrite(input.patchesDir);
@@ -280,16 +280,16 @@ async function computeExportPlanUnderLock(input) {
280
280
  };
281
281
  }
282
282
  /**
283
- * Read-only planning function — computes everything a real export would
283
+ * Read-only planning function. Computes everything a real export would
284
284
  * do without writing anything to disk. Takes the patch directory lock
285
285
  * briefly, runs {@link computeExportPlanUnderLock}, releases the lock,
286
286
  * and returns the plan for preview rendering.
287
287
  *
288
288
  * Shares {@link computeExportPlanUnderLock} with {@link commitExportedPatch}
289
289
  * so the dry-run preview cannot drift from the real write. The real write
290
- * path does NOT reuse a prior plan object (another export may have landed
291
- * between dry-run and commit, which would stale the filename allocation);
292
- * it re-runs the same helper under a fresh lock. The guarantee is "same
290
+ * path does not reuse a prior plan object (another export may have landed
291
+ * between dry-run and commit, which would stale the filename allocation).
292
+ * It re-runs the same helper under a fresh lock. The guarantee is "same
293
293
  * code, possibly different data," not "same plan object."
294
294
  */
295
295
  export async function planExport(input) {
@@ -15,6 +15,6 @@ import type { PatchMetadata } from '../types/commands/index.js';
15
15
  * Formats the user-facing "patch not found" error message used by
16
16
  * `patch delete`, `patch reorder`, `patch tier`, and
17
17
  * `patch lint-ignore`. Returns a single string suitable for the
18
- * `InvalidArgumentError` body — never the full queue enumeration.
18
+ * `InvalidArgumentError` body, never the full queue enumeration.
19
19
  */
20
20
  export declare function formatPatchNotFoundError(identifier: string, patches: readonly PatchMetadata[]): string;
@@ -22,7 +22,7 @@ const MIN_PREFIX_MATCH_LENGTH = 4;
22
22
  const SUGGESTION_LIMIT = 3;
23
23
  /**
24
24
  * Computes the Levenshtein edit distance between two strings. Used by
25
- * `formatPatchNotFoundError` to rank candidate identifiers; the small
25
+ * `formatPatchNotFoundError` to rank candidate identifiers. The small
26
26
  * upper bound on input lengths (filenames, ordinals, names) makes the
27
27
  * O(m*n) implementation trivially fast.
28
28
  */
@@ -87,13 +87,13 @@ function rankSuggestions(identifier, candidates) {
87
87
  return candidates
88
88
  .map((candidate) => {
89
89
  const lower = candidate.toLowerCase();
90
- // Prefix relation in EITHER direction is a stronger signal than edit
90
+ // Prefix relation in either direction is a stronger signal than edit
91
91
  // distance and is not bounded by it: a partial ordinal or an
92
92
  // abbreviated slug ("ui-foo" for "002-ui-foo.patch") is many edits away
93
93
  // from the full identifier yet is obviously the intended target.
94
94
  // `lower.startsWith(needle)`: the operator typed an abbreviation of a
95
95
  // real identifier. The reverse relation is only meaningful when the
96
- // candidate is substantial — otherwise the single-character ordinal
96
+ // candidate is substantial. Otherwise the single-character ordinal
97
97
  // "9" would "match" every input starting with a 9.
98
98
  const prefixMatch = needle.length >= MIN_PREFIX_MATCH_LENGTH &&
99
99
  (lower.startsWith(needle) ||
@@ -115,7 +115,7 @@ function rankSuggestions(identifier, candidates) {
115
115
  * Formats the user-facing "patch not found" error message used by
116
116
  * `patch delete`, `patch reorder`, `patch tier`, and
117
117
  * `patch lint-ignore`. Returns a single string suitable for the
118
- * `InvalidArgumentError` body — never the full queue enumeration.
118
+ * `InvalidArgumentError` body, never the full queue enumeration.
119
119
  */
120
120
  export function formatPatchNotFoundError(identifier, patches) {
121
121
  const accepted = collectAcceptedIdentifiers(patches);