@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
@@ -1,15 +1,15 @@
1
1
  // SPDX-License-Identifier: EUPL-1.2
2
2
  /**
3
- * `fireforge patch rename <name>` — relabels a patch's filename, manifest
3
+ * `fireforge patch rename <name>`: relabels a patch's filename, manifest
4
4
  * `name`, and (optionally) `description` without rewriting the `.patch` file
5
5
  * body.
6
6
  *
7
7
  * Companion to `re-export --files <subset>`. Re-export shrinks the body and
8
8
  * `filesAffected` but leaves the patch's identity describing the pre-shrink
9
9
  * scope. The only alternative for that drift is `delete` + re-export, which
10
- * briefly removes the patch from the queue — any forward-import dependent
11
- * then refuses the re-export until the deleted patch's siblings are
12
- * rewritten.
10
+ * briefly removes the patch from the queue, and any forward-import
11
+ * dependent then refuses the re-export until the deleted patch's siblings
12
+ * are rewritten.
13
13
  *
14
14
  * The filename rename and the manifest mutation happen under the patch
15
15
  * directory lock so concurrent exports cannot allocate the new filename, and
@@ -54,7 +54,7 @@ function splitPatchFilename(filename) {
54
54
  * renames the `.patch` file on disk (when applicable), writes the
55
55
  * updated manifest, and appends a history entry. Filesystem rename
56
56
  * happens before the manifest save so an interrupted run never leaves
57
- * the manifest pointing at a missing file; a manifest-save failure
57
+ * the manifest pointing at a missing file. A manifest-save failure
58
58
  * rolls the filesystem rename back.
59
59
  */
60
60
  async function commitRenameUnderLock(input) {
@@ -102,7 +102,7 @@ async function commitRenameUnderLock(input) {
102
102
  ...(descriptionChanging ? { description: newDescription ?? '' } : {}),
103
103
  };
104
104
  // Staged-dependency owners on other patches reference the old
105
- // filename; remap them so forward-import declarations survive the
105
+ // filename. Remap them so forward-import declarations survive the
106
106
  // rename instead of dangling.
107
107
  const ownerLookup = (old) => old === target.filename ? newFilename : undefined;
108
108
  fresh.patches = fresh.patches.map((p) => rewriteStagedDependencyOwners(p, ownerLookup));
@@ -182,7 +182,7 @@ function resolveRenamePlan(target, options, config) {
182
182
  if (newSlug === '') {
183
183
  throw new InvalidArgumentError('--to must contain at least one alphanumeric character after sanitisation.', 'patch rename');
184
184
  }
185
- // Preserve the ordinal's zero-padding width; a wider order simply
185
+ // Preserve the ordinal's zero-padding width. A wider order simply
186
186
  // prints unpadded-longer.
187
187
  const newOrdinalStr = options.order !== undefined
188
188
  ? String(options.order).padStart(split.ordinalStr.length, '0')
@@ -203,7 +203,7 @@ function resolveRenamePlan(target, options, config) {
203
203
  }
204
204
  /**
205
205
  * Pre-flight refusals: order collision (with a pointer to the verb that
206
- * renumbers siblings — `--order` means "this exact unused sparse slot",
206
+ * renumbers siblings, and `--order` means "this exact unused sparse slot",
207
207
  * mirroring `export --order`), projected cross-patch lint on an order
208
208
  * change (forward imports resolve by queue position), and the
209
209
  * filename collision. The authoritative collision checks run again inside
@@ -41,10 +41,10 @@ export function rebuildFilenameForOrder(existing, newOrder) {
41
41
  * blocks the destination slot is renumbered, so intentional gaps left by
42
42
  * prior `patch delete` calls survive the reorder.
43
43
  *
44
- * Algorithm: remove target from the sorted list, then cascade: if any
45
- * patch sits at the destination order, bump it to order+1; if that
46
- * collides with the next patch, bump that one too; continue until a free
47
- * slot is reached. The direction is symmetric — moving a patch earlier
44
+ * Algorithm: remove target from the sorted list, then cascade. If any
45
+ * patch sits at the destination order, bump it to order+1. If that
46
+ * collides with the next patch, bump that one too. Continue until a free
47
+ * slot is reached. The direction is symmetric: moving a patch earlier
48
48
  * and moving it later both reduce to "find a free slot at destination by
49
49
  * shifting the contiguous conflicting run upward".
50
50
  */
@@ -62,7 +62,7 @@ function computeRenameMap(manifestPatches, target, destinationOrder) {
62
62
  if (clampedDest === target.order)
63
63
  return renames;
64
64
  // Build a mutable order-for-each map so cascading bumps compose. Keys are
65
- // filenames; values start as current order and get rewritten as bumps
65
+ // filenames. Values start as current order and get rewritten as bumps
66
66
  // propagate. Only patches whose value changes end up in the rename map.
67
67
  const currentOrder = new Map();
68
68
  for (const patch of withoutTarget)
@@ -70,7 +70,7 @@ function computeRenameMap(manifestPatches, target, destinationOrder) {
70
70
  // Cascade from the destination: while any surviving patch occupies the
71
71
  // slot we want, bump it to slot+1 and advance. Patches are processed in
72
72
  // ascending order so each bump's collision (if any) is with the immediate
73
- // successor in the sort — no back-tracking needed.
73
+ // successor in the sort, so no back-tracking is needed.
74
74
  let slot = clampedDest;
75
75
  for (const patch of withoutTarget) {
76
76
  const order = currentOrder.get(patch.filename);
@@ -109,7 +109,7 @@ export function projectReorder(base, renameMap) {
109
109
  const ownerLookup = (oldFilename) => renameMap.get(oldFilename)?.newFilename;
110
110
  const projectedEntries = base.entries.map((entry) => {
111
111
  // Project staged-dependency owner references through the rename map on
112
- // every entry — owners point at *other* patches' filenames, so a
112
+ // every entry. Owners point at other patches' filenames, so a
113
113
  // projection that skips non-renamed entries would lint against stale
114
114
  // owners and report false forward-import regressions.
115
115
  const metadata = entry.metadata
@@ -152,7 +152,7 @@ function resolveDestination(target, manifestPatches, options) {
152
152
  throw new InvalidArgumentError(`--before anchor "${options.before}" not found.`, '--before');
153
153
  }
154
154
  // Reject self-reference. `--before <target>` resolves to the target's
155
- // current order, so computeRenameMap would take its no-op branch — but
155
+ // current order, so computeRenameMap would take its no-op branch, but
156
156
  // that masks a user-facing typo or scripted mistake instead of
157
157
  // surfacing it. The symmetric `--after` case is worse (mutates the
158
158
  // queue), so both reject for consistency.
@@ -275,7 +275,7 @@ export async function patchReorderCommand(projectRoot, identifier, options = {})
275
275
  return;
276
276
  }
277
277
  // Project the reorder through cross-patch lint. Forward-import violations
278
- // that are introduced *by* the reorder become hard refusals.
278
+ // that the reorder itself introduces become hard refusals.
279
279
  const baseCtx = await buildPatchQueueContext(paths.patches);
280
280
  const projected = projectReorder(baseCtx, renameMap);
281
281
  const projectedIssues = lintPatchQueue(projected);
@@ -317,7 +317,7 @@ export async function patchReorderCommand(projectRoot, identifier, options = {})
317
317
  if (!proceedAfterDecision(decision, 'Reorder cancelled'))
318
318
  return;
319
319
  // The history entry is built inside commitReorderPlan (still under the
320
- // lock) from the *final* rename map, not the pre-confirmation one, so
320
+ // lock) from the final rename map rather than the pre-confirmation one, so
321
321
  // the destinationOrder and renames mirror what actually landed on disk.
322
322
  const buildHistoryEntry = (finalRenameMap) => {
323
323
  const finalEntries = getSortedRenameEntries(finalRenameMap);
@@ -3,7 +3,7 @@
3
3
  * construction from the worktree, staged-dependency owner-rewrite
4
4
  * discovery, cross-patch lint projection, and policy-manifest projection.
5
5
  * Split out of `split.ts` to keep both files within the per-file line
6
- * budget; consumed only by the split command.
6
+ * budget. It is consumed only by the split command.
7
7
  */
8
8
  import { type ConflictReport } from '../../core/destructive.js';
9
9
  import type { PatchQueueContext } from '../../core/patch-lint-cross.js';
@@ -33,7 +33,7 @@ export interface SplitPlan {
33
33
  /**
34
34
  * Staged forward-import declarations the split introduces, keyed by the
35
35
  * importing patch's post-rename filename. These are the new forward edges
36
- * from existing patches into the freshly-created patch (owner known); they
36
+ * from existing patches into the freshly-created patch (owner known). They
37
37
  * are injected into the projected lint so dry-run matches the real gate,
38
38
  * and persisted on commit so the real per-patch gate stays clean.
39
39
  */
@@ -82,7 +82,7 @@ export declare function projectSplitManifest(manifest: {
82
82
  */
83
83
  export declare function buildNewPatchMetadata(plan: SplitPlan, config: FireForgeConfig): PatchMetadata;
84
84
  /**
85
- * Renders the operator-facing summary lines for a planned split — the text
85
+ * Renders the operator-facing summary lines for a planned split: the text
86
86
  * shown by `--dry-run` and by the destructive-operation confirmation prompt.
87
87
  */
88
88
  export declare function buildSplitSummary(plan: SplitPlan): string[];
@@ -4,7 +4,7 @@
4
4
  * construction from the worktree, staged-dependency owner-rewrite
5
5
  * discovery, cross-patch lint projection, and policy-manifest projection.
6
6
  * Split out of `split.ts` to keep both files within the per-file line
7
- * budget; consumed only by the split command.
7
+ * budget. It is consumed only by the split command.
8
8
  */
9
9
  import { join } from 'node:path';
10
10
  import {} from '../../core/destructive.js';
@@ -111,11 +111,12 @@ function buildProjectedSplitEntries(baseCtx, plan) {
111
111
  /**
112
112
  * Computes the staged forward-import declarations the split introduces:
113
113
  * forward edges from existing patches into the freshly-created patch (its
114
- * `creates` files are the moved files; the owner is the new patch, so it is
115
- * known). Keyed by the importing patch's projected (post-rename) filename.
114
+ * `creates` files are the moved files, and the owner is the new patch, so
115
+ * it is known). Keyed by the importing patch's projected (post-rename)
116
+ * filename.
116
117
  *
117
118
  * These edges did not exist before the split (importer and imported file
118
- * lived in the same patch), so they have no declaration yet — without this
119
+ * lived in the same patch), so they have no declaration yet. Without this
119
120
  * the projected lint flags them while the real per-patch gate would resolve
120
121
  * them once declared. Auto-declaring keeps the two in lock-step and lets a
121
122
  * sound split read as sound.
@@ -233,7 +234,7 @@ export function buildNewPatchMetadata(plan, config) {
233
234
  };
234
235
  }
235
236
  /**
236
- * Renders the operator-facing summary lines for a planned split — the text
237
+ * Renders the operator-facing summary lines for a planned split: the text
237
238
  * shown by `--dry-run` and by the destructive-operation confirmation prompt.
238
239
  */
239
240
  export function buildSplitSummary(plan) {
@@ -1,11 +1,11 @@
1
1
  /**
2
- * `fireforge patch split <source> --files <p...> --name <n>` — moves files
2
+ * `fireforge patch split <source> --files <p...> --name <n>` moves files
3
3
  * out of an existing patch into a brand-new patch as one transaction.
4
4
  *
5
5
  * Splitting a patch whose files have inbound forward-imports otherwise
6
6
  * requires a precise manual order: re-point each staged-dependency owner at
7
7
  * a not-yet-created patch, shrink the source via
8
- * `re-export --files --allow-shrink`, then `export --order` — any other
8
+ * `re-export --files --allow-shrink`, then `export --order`. Any other
9
9
  * order refuses or needs `--force-unsafe`. Split performs the shrink, the
10
10
  * new-patch creation, and the dependent owner rewrites under one
11
11
  * patch-directory lock with rollback, validating only the final projection.
@@ -1,12 +1,12 @@
1
1
  // SPDX-License-Identifier: EUPL-1.2
2
2
  /**
3
- * `fireforge patch split <source> --files <p...> --name <n>` — moves files
3
+ * `fireforge patch split <source> --files <p...> --name <n>` moves files
4
4
  * out of an existing patch into a brand-new patch as one transaction.
5
5
  *
6
6
  * Splitting a patch whose files have inbound forward-imports otherwise
7
7
  * requires a precise manual order: re-point each staged-dependency owner at
8
8
  * a not-yet-created patch, shrink the source via
9
- * `re-export --files --allow-shrink`, then `export --order` — any other
9
+ * `re-export --files --allow-shrink`, then `export --order`. Any other
10
10
  * order refuses or needs `--force-unsafe`. Split performs the shrink, the
11
11
  * new-patch creation, and the dependent owner rewrites under one
12
12
  * patch-directory lock with rollback, validating only the final projection.
@@ -111,7 +111,7 @@ export async function commitPatchSplit(patchesDir, plan, newMetadata, options, c
111
111
  }, `patch split committed`);
112
112
  }
113
113
  catch (error) {
114
- // Reverse-order rollback; each step warns on its own failure so the
114
+ // Reverse-order rollback. Each step warns on its own failure so the
115
115
  // original error stays visible.
116
116
  if (sourceRewritten) {
117
117
  try {
@@ -160,7 +160,7 @@ export async function commitPatchSplit(patchesDir, plan, newMetadata, options, c
160
160
  */
161
161
  export async function patchSplitCommand(projectRoot, sourceId, options) {
162
162
  intro(options.dryRun ? 'FireForge patch split (dry run)' : 'FireForge patch split');
163
- // Refuse a prompt-less run BEFORE the diff/lint work, not after it.
163
+ // Refuse a prompt-less run before doing the diff/lint work.
164
164
  assertConfirmationAvailable('patch split', options);
165
165
  const paths = getProjectPaths(projectRoot);
166
166
  const config = await loadConfig(projectRoot);
@@ -193,7 +193,7 @@ export async function patchSplitCommand(projectRoot, sourceId, options) {
193
193
  (options.order === undefined && options.before === undefined ? source.filename : undefined),
194
194
  });
195
195
  const placement = await resolvePlacementPlan(paths.patches, placementOptions, category, options.name, config);
196
- // The filename slug pipeline strips redundant category prefixes; the
196
+ // The filename slug pipeline strips redundant category prefixes. The
197
197
  // manifest display name must agree with the bare-slug naming policy,
198
198
  // exactly as `export --name` already does.
199
199
  const displayName = normalizePatchDisplayName(options.name, category);
@@ -7,7 +7,7 @@ interface StagedDependencyShape {
7
7
  }
8
8
  /**
9
9
  * Validates the `--add` declaration fields against the loaded queue.
10
- * Throws on a clear flag mixup; warns (only) when `--owner` is
10
+ * Throws on a clear flag mixup. Warns (only) when `--owner` is
11
11
  * well-formed but absent from the queue, because the owner may
12
12
  * legitimately be exported moments later and renumbering rewrites owners.
13
13
  */
@@ -2,8 +2,8 @@
2
2
  /**
3
3
  * Shape validation for `patch staged-dependency --add`.
4
4
  *
5
- * `--creates`/`--file` take engine-relative FILE paths and `--owner` takes a
6
- * patch FILENAME. Accepting all three as arbitrary strings lets a
5
+ * `--creates`/`--file` take engine-relative file paths, while `--owner`
6
+ * takes a patch filename. Accepting all three as arbitrary strings lets a
7
7
  * `--creates <patch-name>` mixup produce a declaration nothing can ever
8
8
  * discharge, surfacing only later as a `staged-dependency-unused` warning.
9
9
  * Refusals here fire only on a clear patch-name shape (slash-free values
@@ -28,7 +28,7 @@ function refusePatchShapedPath(flag, value, role, queuePatches) {
28
28
  }
29
29
  /**
30
30
  * Validates the `--add` declaration fields against the loaded queue.
31
- * Throws on a clear flag mixup; warns (only) when `--owner` is
31
+ * Throws on a clear flag mixup. Warns (only) when `--owner` is
32
32
  * well-formed but absent from the queue, because the owner may
33
33
  * legitimately be exported moments later and renumbering rewrites owners.
34
34
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * `fireforge patch staged-dependency <name>` — edits
2
+ * `fireforge patch staged-dependency <name>` edits
3
3
  * PatchMetadata.stagedDependencies without rewriting the .patch body.
4
4
  */
5
5
  import { Command } from 'commander';
@@ -1,6 +1,6 @@
1
1
  // SPDX-License-Identifier: EUPL-1.2
2
2
  /**
3
- * `fireforge patch staged-dependency <name>` — edits
3
+ * `fireforge patch staged-dependency <name>` edits
4
4
  * PatchMetadata.stagedDependencies without rewriting the .patch body.
5
5
  */
6
6
  import { Command } from 'commander';
@@ -85,7 +85,7 @@ function requireRegistrationOptions(options) {
85
85
  /**
86
86
  * Resolves the `--remove` target for forward-imports:
87
87
  * `--file` + `--specifier` suffice when they identify at most one staged
88
- * entry — `--creates` is inferred from a unique match, an ambiguous match
88
+ * entry. `--creates` is inferred from a unique match, an ambiguous match
89
89
  * refuses with the candidate list, and no match falls through to the
90
90
  * honest "no staged forward-import matched" summary.
91
91
  */
@@ -217,7 +217,7 @@ export async function patchStagedDependencyCommand(projectRoot, identifier, opti
217
217
  intro(isDryRun ? 'FireForge patch staged-dependency (dry run)' : 'FireForge patch staged-dependency');
218
218
  const mode = modeFromOptions(options);
219
219
  const kind = kindFromOptions(options);
220
- // The patch queue loads BEFORE the declaration fields resolve so
220
+ // The patch queue loads before the declaration fields resolve so
221
221
  // `--remove` can infer `--creates` from the target patch's staged
222
222
  // entries.
223
223
  const { paths, manifest } = await requirePatchQueue(projectRoot);
@@ -232,9 +232,9 @@ export async function patchStagedDependencyCommand(projectRoot, identifier, opti
232
232
  : mode === 'add'
233
233
  ? requireRegistrationOptions(options)
234
234
  : resolveRegistrationRemovalTarget(options, targetPatch.stagedDependencies);
235
- // Shape-check --add declarations against the loaded queue:
236
- // a patch-name-shaped --creates/--file is refused HERE instead of
237
- // surfacing later as an undischargeable staged-dependency-unused.
235
+ // Shape-check --add declarations against the loaded queue: a
236
+ // patch-name-shaped --creates/--file is refused now instead of surfacing
237
+ // later as an undischargeable staged-dependency-unused.
238
238
  if (mode === 'add') {
239
239
  const added = importDependency ?? registrationDependency;
240
240
  if (added !== undefined) {
@@ -1,9 +1,9 @@
1
1
  /**
2
- * `fireforge patch tier <name>` — sets or clears `PatchMetadata.tier` on a
2
+ * `fireforge patch tier <name>` sets or clears `PatchMetadata.tier` on a
3
3
  * single patch without rewriting the `.patch` file body.
4
4
  *
5
5
  * Companion to `fireforge re-export <name> --tier <tier>`. Re-export is the
6
- * right tool when the patch body itself needs regenerating; this subcommand
6
+ * right tool when the patch body itself needs regenerating. This subcommand
7
7
  * covers the metadata-only adjustment, where the operator has discovered
8
8
  * (from a `lint --per-patch` warning, say) that the threshold-tier override
9
9
  * should be set but the patch body is already correct. Avoiding the
@@ -1,10 +1,10 @@
1
1
  // SPDX-License-Identifier: EUPL-1.2
2
2
  /**
3
- * `fireforge patch tier <name>` — sets or clears `PatchMetadata.tier` on a
3
+ * `fireforge patch tier <name>` sets or clears `PatchMetadata.tier` on a
4
4
  * single patch without rewriting the `.patch` file body.
5
5
  *
6
6
  * Companion to `fireforge re-export <name> --tier <tier>`. Re-export is the
7
- * right tool when the patch body itself needs regenerating; this subcommand
7
+ * right tool when the patch body itself needs regenerating. This subcommand
8
8
  * covers the metadata-only adjustment, where the operator has discovered
9
9
  * (from a `lint --per-patch` warning, say) that the threshold-tier override
10
10
  * should be set but the patch body is already correct. Avoiding the
@@ -35,8 +35,8 @@ export async function patchTierCommand(projectRoot, identifier, options = {}) {
35
35
  const isDryRun = options.dryRun === true;
36
36
  intro(isDryRun ? 'FireForge patch tier (dry run)' : 'FireForge patch tier');
37
37
  // Mode mutex: a single invocation either sets or clears the tier.
38
- // Combining both is ambiguous — the operator's intent is not obvious
39
- // and silently picking one would mask the typo.
38
+ // Combining both is ambiguous: the operator's intent is not obvious and
39
+ // silently picking one would mask the typo.
40
40
  const setting = options.tier !== undefined;
41
41
  const clearing = options.clear === true;
42
42
  if (setting && clearing) {
@@ -75,7 +75,7 @@ export async function patchTierCommand(projectRoot, identifier, options = {}) {
75
75
  if (!proceedAfterDecision(decision, 'Cancelled — no changes made'))
76
76
  return;
77
77
  // Single write under the patch directory lock (delegated inside
78
- // updatePatchMetadata). Setting routes through `updates`; clearing
78
+ // updatePatchMetadata). Setting routes through `updates`. Clearing
79
79
  // routes through `unsetFields` so TypeScript's exact optional types
80
80
  // do not have to carry an explicit `undefined` on the `tier` field.
81
81
  if (after !== undefined) {
@@ -2,7 +2,7 @@
2
2
  * Structural equality for patch rename maps, shared by the placement-mode
3
3
  * export preview/commit check (`export-flow.ts`) and `patch reorder`'s
4
4
  * under-lock drift check. Both previously carried a byte-identical copy of
5
- * the sorted-entries comparison; one helper keeps the two commit gates from
5
+ * the sorted-entries comparison. One helper keeps the two commit gates from
6
6
  * drifting.
7
7
  */
8
8
  import type { PatchRenameEntry } from '../core/patch-manifest.js';
@@ -3,7 +3,7 @@
3
3
  * Structural equality for patch rename maps, shared by the placement-mode
4
4
  * export preview/commit check (`export-flow.ts`) and `patch reorder`'s
5
5
  * under-lock drift check. Both previously carried a byte-identical copy of
6
- * the sorted-entries comparison; one helper keeps the two commit gates from
6
+ * the sorted-entries comparison. One helper keeps the two commit gates from
7
7
  * drifting.
8
8
  */
9
9
  /**
@@ -3,11 +3,11 @@
3
3
  *
4
4
  * Five commands (`doctor --clear-resolution`, `resolve`, `rebase --continue`,
5
5
  * `rebase --abort`, and the rebase patch loop) had each copied the same
6
- * spread-then-`delete` updater. Routing the clear through `updateState` rather
7
- * than a load/modify/save pair is the load-bearing part: the updater runs
8
- * inside the state-file lock against the freshest on-disk state, so a
9
- * concurrent write to an unrelated key (`buildMode`, `baseCommit`) is not
10
- * clobbered by a stale reload. Copies of that reasoning drift; one does not.
6
+ * spread-then-`delete` updater. The clear routes through `updateState` instead
7
+ * of a load/modify/save pair so the updater runs inside the state-file lock
8
+ * against the freshest on-disk state: a concurrent write to an unrelated key
9
+ * (`buildMode`, `baseCommit`) is then not clobbered by a stale reload. Keeping
10
+ * it in one place stops the copies from drifting apart.
11
11
  *
12
12
  * A no-op when nothing is pending, so callers need no guard of their own.
13
13
  * @param projectRoot - Project root holding `.fireforge/state.json`.
@@ -5,11 +5,11 @@ import { updateState } from '../core/config.js';
5
5
  *
6
6
  * Five commands (`doctor --clear-resolution`, `resolve`, `rebase --continue`,
7
7
  * `rebase --abort`, and the rebase patch loop) had each copied the same
8
- * spread-then-`delete` updater. Routing the clear through `updateState` rather
9
- * than a load/modify/save pair is the load-bearing part: the updater runs
10
- * inside the state-file lock against the freshest on-disk state, so a
11
- * concurrent write to an unrelated key (`buildMode`, `baseCommit`) is not
12
- * clobbered by a stale reload. Copies of that reasoning drift; one does not.
8
+ * spread-then-`delete` updater. The clear routes through `updateState` instead
9
+ * of a load/modify/save pair so the updater runs inside the state-file lock
10
+ * against the freshest on-disk state: a concurrent write to an unrelated key
11
+ * (`buildMode`, `baseCommit`) is then not clobbered by a stale reload. Keeping
12
+ * it in one place stops the copies from drifting apart.
13
13
  *
14
14
  * A no-op when nothing is pending, so callers need no guard of their own.
15
15
  * @param projectRoot - Project root holding `.fireforge/state.json`.
@@ -20,7 +20,7 @@ export interface AdjacentUnmanagedContext {
20
20
  approvedSeen: Set<string>;
21
21
  /**
22
22
  * Offenders collected across the loop. `files` stays the bare paths that
23
- * downstream consumers already read; `anchored` carries the same entries
23
+ * downstream consumers already read. `anchored` carries the same entries
24
24
  * with the owned directory that made each one adjacent, so the run-level
25
25
  * refusal can name the anchor without re-deriving it.
26
26
  */
@@ -36,7 +36,7 @@ export declare function findMissingFiles(engineDir: string, files: readonly stri
36
36
  * One unmanaged file and the owned directory that made it adjacent.
37
37
  *
38
38
  * The anchor is what an unattended run could not previously recover: the
39
- * notice named the offending file and the patch, but not WHICH of the
39
+ * notice named the offending file and the patch, but not which of the
40
40
  * patch's owned locations the file sits beside, so triaging a refusal on a
41
41
  * patch that owns files in several directories meant re-deriving the
42
42
  * adjacency by hand from the manifest.
@@ -51,7 +51,7 @@ export interface AdjacentUnmanagedFile {
51
51
  * Emits the scan-less advisory for one patch: missing manifest files and
52
52
  * unmanaged files adjacent to the patch's ownership. When
53
53
  * `--refuse-adjacent-unmanaged` is set and any unmanaged adjacent file
54
- * exists, records the patch into `ctx.refusals` and returns true — the
54
+ * exists, records the patch into `ctx.refusals` and returns true. The
55
55
  * caller then skips the write for this patch and converts the collection
56
56
  * into one run-level non-zero refusal after the loop.
57
57
  */
@@ -6,12 +6,12 @@
6
6
  * brand-new file an author just created beside a patch's owned files is
7
7
  * silently left out of the refreshed body. This module detects such adjacent
8
8
  * files, filters out tool-managed paths (branding, furnace) so the notice
9
- * names only genuinely unmanaged candidates, and — under
10
- * `--refuse-adjacent-unmanaged` — lets the caller turn the notice into a
9
+ * names only genuinely unmanaged candidates, and, under
10
+ * `--refuse-adjacent-unmanaged`, lets the caller turn the notice into a
11
11
  * non-zero refusal.
12
12
  *
13
- * Split out of re-export.ts to keep that file inside the max-lines budget;
14
- * exports helpers consumed by re-export.ts, no registrar.
13
+ * Split out of re-export.ts to keep that file inside the max-lines budget.
14
+ * Exports helpers consumed by re-export.ts, no registrar.
15
15
  */
16
16
  import { dirname, join } from 'node:path';
17
17
  import { isBrandingManagedPath } from '../core/branding.js';
@@ -30,7 +30,7 @@ export async function findMissingFiles(engineDir, files) {
30
30
  }
31
31
  function isToolManagedPath(file, isNewFile, ctx) {
32
32
  // Mirrors status-classify: a generated branding path is tool-managed
33
- // outright; a brand-new unowned file under the branding root is still a
33
+ // outright. A brand-new unowned file under the branding root is still a
34
34
  // patch candidate (the Assets.car precedent) and must stay listed.
35
35
  if (isBrandingManagedPath(file, ctx.binaryName) &&
36
36
  (!isNewFile || isGeneratedBrandingPath(file, ctx.binaryName))) {
@@ -72,8 +72,8 @@ async function findAdjacentUnmanagedFiles(args) {
72
72
  /**
73
73
  * Splits the candidates into the ones that refuse and the ones a
74
74
  * `--expect-unmanaged` carve-out admits. Approved paths are recorded as seen
75
- * so an unused carve-out can be reported, and are RETURNED rather than
76
- * dropped: an exception nobody can see is how a carve-out quietly widens.
75
+ * so an unused carve-out can be reported, and are returned rather than
76
+ * dropped, so the exception stays visible instead of quietly widening.
77
77
  */
78
78
  function partitionApproved(files, ctx) {
79
79
  const refusing = [];
@@ -97,7 +97,7 @@ function describeAnchored(entry) {
97
97
  * Emits the scan-less advisory for one patch: missing manifest files and
98
98
  * unmanaged files adjacent to the patch's ownership. When
99
99
  * `--refuse-adjacent-unmanaged` is set and any unmanaged adjacent file
100
- * exists, records the patch into `ctx.refusals` and returns true — the
100
+ * exists, records the patch into `ctx.refusals` and returns true. The
101
101
  * caller then skips the write for this patch and converts the collection
102
102
  * into one run-level non-zero refusal after the loop.
103
103
  */
@@ -7,9 +7,9 @@ export declare function loadScanFilesAssignments(manifestPath: string, manifest:
7
7
  * a dry-run changed anything it promised only to inspect. That turns a
8
8
  * "dry-run reverted a just-written export" incident into a hard, named
9
9
  * failure instead of silent data loss discovered only when a later gate
10
- * fails. The post-fingerprint runs whether `operation` resolves or rejects —
11
- * a dry-run that mutates state and THEN fails is exactly the case where a
12
- * rollback defect must not go unreported; a rejection with a purity
10
+ * fails. The post-fingerprint runs whether `operation` resolves or rejects,
11
+ * because a dry-run that mutates state and then fails is exactly the case
12
+ * where a rollback defect must not go unreported. A rejection with a purity
13
13
  * violation surfaces the violation with the original error as `cause`.
14
14
  * No-op outside dry-run.
15
15
  */
@@ -54,7 +54,7 @@ export async function loadScanFilesAssignments(manifestPath, manifest) {
54
54
  for (const assignment of parsed.assignments) {
55
55
  const patch = resolvePatchIdentifier(assignment.patch, manifest.patches);
56
56
  if (!patch) {
57
- // Suggest, never dump.
57
+ // Suggest close matches instead of dumping the whole queue.
58
58
  throw new InvalidArgumentError(`--scan-files: ${formatPatchNotFoundError(assignment.patch, manifest.patches)}`, '--scan-files');
59
59
  }
60
60
  const patchFiles = filesByPatch.get(patch.filename) ?? new Set();
@@ -75,23 +75,23 @@ export async function loadScanFilesAssignments(manifestPath, manifest) {
75
75
  * Fingerprints every piece of state a `re-export --dry-run` promises not to
76
76
  * disturb: the engine's commit + working-tree status (via the same
77
77
  * generation token `fireforge test` uses) and the byte content of every
78
- * regular file under `patches/` — ALL of them, not just the selected
79
- * patches, because a dry-run of patch B can revert a just-written export of
80
- * patch A.
78
+ * regular file under `patches/`. That covers all of them, not just the
79
+ * selected patches, because a dry-run of patch B can revert a just-written
80
+ * export of patch A.
81
81
  *
82
- * A missing patches directory (ENOENT/ENOTDIR) fingerprints as empty — there
83
- * is nothing there to protect — but any other listing failure (EACCES, EIO,
82
+ * A missing patches directory (ENOENT/ENOTDIR) fingerprints as empty, since
83
+ * there is nothing there to protect. Any other listing failure (EACCES, EIO,
84
84
  * …) throws: an unreadable directory is not evidence it is empty, and
85
85
  * treating it as such lets the guard silently vouch for state it never saw.
86
86
  * The same rule covers an unmeasurable engine generation and an unreadable
87
- * individual patch file; a before-pass failure aborts the dry run before it
87
+ * individual patch file. A before-pass failure aborts the dry run before it
88
88
  * starts, since a guard that measured nothing cannot vouch for anything.
89
89
  */
90
90
  async function fingerprintDryRunState(engineDir, patchesDir) {
91
91
  const fingerprint = new Map();
92
92
  const generation = await snapshotEngineGeneration(engineDir);
93
93
  if (isUnavailableGenerationToken(generation)) {
94
- // A failed probe measured nothing — hashing the failure token would let
94
+ // A failed probe measured nothing. Hashing the failure token would let
95
95
  // two identical failures compare "unchanged" (vouching for unmeasured
96
96
  // state) and two differing messages report a spurious violation.
97
97
  throw new GeneralError(`[dry-run] cannot fingerprint the engine working tree for the purity guard: ` +
@@ -107,9 +107,9 @@ async function fingerprintDryRunState(engineDir, patchesDir) {
107
107
  .sort();
108
108
  }
109
109
  catch (error) {
110
- // No patches directory — nothing there to protect; the same condition on
111
- // the post-run pass produces the same empty set, and a directory that
112
- // appears mid-dry-run correctly reports as a violation. Any OTHER failure
110
+ // No patches directory, so nothing there to protect. The same condition
111
+ // on the post-run pass produces the same empty set, and a directory that
112
+ // appears mid-dry-run correctly reports as a violation. Any other failure
113
113
  // must not read as "empty": the guard would be vouching for state it
114
114
  // never saw.
115
115
  const code = getNodeErrorCode(error);
@@ -125,7 +125,7 @@ async function fingerprintDryRunState(engineDir, patchesDir) {
125
125
  }
126
126
  catch (error) {
127
127
  // A file that vanished between the listing and the read is omitted, so
128
- // a dry run that DELETED a patch artifact reports as the violation it
128
+ // a dry run that deleted a patch artifact reports as the violation it
129
129
  // is (key present before, absent after) instead of hiding behind a
130
130
  // fingerprinting error. Every other failure fails closed: a constant
131
131
  // placeholder would make unreadable-before equal unreadable-after even
@@ -155,9 +155,9 @@ async function fingerprintDryRunState(engineDir, patchesDir) {
155
155
  * a dry-run changed anything it promised only to inspect. That turns a
156
156
  * "dry-run reverted a just-written export" incident into a hard, named
157
157
  * failure instead of silent data loss discovered only when a later gate
158
- * fails. The post-fingerprint runs whether `operation` resolves or rejects —
159
- * a dry-run that mutates state and THEN fails is exactly the case where a
160
- * rollback defect must not go unreported; a rejection with a purity
158
+ * fails. The post-fingerprint runs whether `operation` resolves or rejects,
159
+ * because a dry-run that mutates state and then fails is exactly the case
160
+ * where a rollback defect must not go unreported. A rejection with a purity
161
161
  * violation surfaces the violation with the original error as `cause`.
162
162
  * No-op outside dry-run.
163
163
  */
@@ -181,9 +181,9 @@ export async function withDryRunPurityGuard(engineDir, patchesDir, isDryRun, ope
181
181
  }
182
182
  catch (fingerprintError) {
183
183
  // The post-run fingerprint failing must not swallow the dry run's own
184
- // failure — an operation that mutated state, broke it, AND made it
184
+ // failure: an operation that mutated state, broke it, and made it
185
185
  // unreadable is exactly the case where both facts matter. The combined
186
- // message carries both; the operation error stays the `cause`.
186
+ // message carries both. The operation error stays the `cause`.
187
187
  if (failed) {
188
188
  throw new GeneralError(`[dry-run] this dry run failed (${toError(operationError).message}), and its purity could ` +
189
189
  `not be verified afterwards: ${toError(fingerprintError).message}. Inspect engine/ and ` +