@hominis/fireforge 0.46.0 → 0.46.1

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 +9 -9
  498. package/dist/src/core/token-dark-mode.js +11 -11
  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
@@ -3,7 +3,7 @@ import { type RollbackJournal } from './furnace-rollback.js';
3
3
  /**
4
4
  * The signal names the lifecycle wrapper knows how to react to. Spelled out
5
5
  * as a literal union (rather than `NodeJS.Signals`) so the public type
6
- * surface does not depend on the NodeJS global namespace — consumers of
6
+ * surface does not depend on the NodeJS global namespace. Consumers of
7
7
  * FireForge's published scoped npm package may compile against tsconfigs
8
8
  * that omit `@types/node`.
9
9
  */
@@ -36,9 +36,9 @@ export interface FurnaceOperationContext {
36
36
  * Bodies that catch-and-restore on their own (the `furnace/*` command
37
37
  * bodies, `furnace-apply`) call this from their catch block after the
38
38
  * restore, then re-throw. Without it the wrapper would restore the same
39
- * journal again on the way out — harmless for the file writes, which are
40
- * rename-based and converge, but it would race a second `pendingRepair`
41
- * write against the state-file lock.
39
+ * journal again on the way out. That is harmless for the file writes,
40
+ * which are rename-based and converge, but it would race a second
41
+ * `pendingRepair` write against the state-file lock.
42
42
  */
43
43
  markRolledBack(): void;
44
44
  }
@@ -49,7 +49,7 @@ export interface RunFurnaceMutationOptions {
49
49
  * Used by dry-run paths where no engine mutation occurs.
50
50
  *
51
51
  * Note: a dry-run can overlap with a real mutation because it does not
52
- * acquire the lock. This is safe because dry-runs only read; however, a
52
+ * acquire the lock. This is safe because dry-runs only read. However, a
53
53
  * dry-run that starts before a real mutation and finishes after it may
54
54
  * observe partially-written engine state. Accept this trade-off so that
55
55
  * concurrent dry-runs never block each other or a real apply.
@@ -58,11 +58,11 @@ export interface RunFurnaceMutationOptions {
58
58
  /**
59
59
  * Override the default 30 s furnace-lock timeout.
60
60
  *
61
- * Set from the caller's resolved `--wait-lock` budget, so ONE flag governs
61
+ * Set from the caller's resolved `--wait-lock` budget, so one flag governs
62
62
  * both locks a furnace mutation takes. Before that it was declared and
63
63
  * never passed: `furnace deploy --wait-lock 1800` waited 1800 s for the
64
64
  * engine session lock and then met `.fireforge/furnace.lock` with a fixed
65
- * 30 s, which is the worst shape a budget can have — it pays the whole
65
+ * 30 s, which is the worst shape a budget can have: it pays the whole
66
66
  * wait and still refuses. When absent, {@link sessionWaitLockMs} supplies
67
67
  * the session-wide budget so the twelve furnace mutators that declare no
68
68
  * flag are covered too.
@@ -78,7 +78,7 @@ export interface RunFurnaceMutationOptions {
78
78
  /**
79
79
  * Converts a resolved `--wait-lock` budget in seconds into the
80
80
  * {@link RunFurnaceMutationOptions} slice that applies it to the furnace
81
- * lock. Undefined in, empty out — so the caller can spread it
81
+ * lock. Undefined in, empty out, so the caller can spread it
82
82
  * unconditionally without assigning `undefined` under
83
83
  * `exactOptionalPropertyTypes`.
84
84
  *
@@ -94,7 +94,7 @@ export declare function waitLockMutationOptions(waitLockSeconds: number | undefi
94
94
  * Returns true while a signal-driven rollback is in progress. The bin entry
95
95
  * point uses this as a re-entrancy guard so a user mashing Ctrl+C cannot
96
96
  * trigger a second rollback that races the first. Exposed for the bin shim
97
- * (and the test suite); production callers should not need it.
97
+ * (and the test suite). Production callers should not need it.
98
98
  */
99
99
  export declare function isSignalRollbackInFlight(): boolean;
100
100
  /**
@@ -105,7 +105,7 @@ export declare function isSignalRollbackInFlight(): boolean;
105
105
  export declare function rollbackActiveOperationsForSignal(signal: FurnaceShutdownSignal): Promise<void>;
106
106
  /**
107
107
  * Resolves the path of the lock directory used to serialize furnace mutations
108
- * for a given project root. Exposed for tests; production callers should not
108
+ * for a given project root. Exposed for tests. Production callers should not
109
109
  * touch this directly.
110
110
  */
111
111
  export declare function getFurnaceLockPath(root: string): string;
@@ -119,10 +119,10 @@ export declare function getFurnaceLockPath(root: string): string;
119
119
  * restructure control flow through the engine's rollback path for a
120
120
  * cosmetic gain.
121
121
  *
122
- * The ordering is the part worth centralising: `markRolledBack()` MUST run
122
+ * The ordering is the part worth centralising: `markRolledBack()` must run
123
123
  * before the restore, so a restore that itself fails does not leave the
124
- * lifecycle wrapper replaying the same journal on the way out. And the
125
- * ORIGINAL error is rethrown unless the rollback is what failed — the
124
+ * lifecycle wrapper replaying the same journal on the way out. The
125
+ * original error is rethrown unless the rollback is what failed: the
126
126
  * operator needs to know what went wrong, and separately whether the engine
127
127
  * could be put back.
128
128
  *
@@ -130,7 +130,7 @@ export declare function getFurnaceLockPath(root: string): string;
130
130
  * @param journal - Rollback journal this body populated
131
131
  * @param error - The error the body threw
132
132
  * @param options - Project root, pending-repair tag, and message fragments
133
- * @returns Never — always throws
133
+ * @returns Never, because it always throws
134
134
  */
135
135
  export declare function completeJournalRollback(ctx: FurnaceOperationContext, journal: RollbackJournal, error: unknown, options: {
136
136
  projectRoot: string;
@@ -144,11 +144,11 @@ export declare function completeJournalRollback(ctx: FurnaceOperationContext, jo
144
144
  * Forcibly removes the furnace lock directory for every active operation.
145
145
  *
146
146
  * The bin-layer signal handler calls `process.exit` after rollback, which
147
- * short-circuits Node's normal unwinding — `withFileLock`'s `finally { rm
148
- * }` never runs, so the lock directory survives the process. The next
147
+ * short-circuits Node's normal unwinding, so `withFileLock`'s `finally { rm
148
+ * }` never runs and the lock directory survives the process. The next
149
149
  * FireForge command then has to either wait out the staleness window or
150
150
  * have the operator remove the lock manually. This sweeper runs inside
151
- * the signal-handler pipeline BEFORE `process.exit`, so the lock is gone
151
+ * the signal-handler pipeline before `process.exit`, so the lock is gone
152
152
  * by the time the next command starts.
153
153
  *
154
154
  * Errors are logged and swallowed: we do not want a slow I/O failure at
@@ -161,7 +161,7 @@ export declare function forceReleaseFurnaceLocksForActiveOperations(): Promise<v
161
161
  * Runs a furnace-mutating body under the apply-wide lock and registers it
162
162
  * with the process-wide SIGINT/SIGTERM rollback pathway. The lock prevents
163
163
  * two `furnace apply`/`deploy`/`create`/etc. runs from racing on the engine
164
- * working copy; the CLI entrypoint's global signal handlers consult this
164
+ * working copy. The CLI entrypoint's global signal handlers consult this
165
165
  * registry and invoke rollback (writing a `pendingRepair` marker when needed)
166
166
  * if the user hits Ctrl+C mid-run.
167
167
  *
@@ -169,7 +169,7 @@ export declare function forceReleaseFurnaceLocksForActiveOperations(): Promise<v
169
169
  * the lock entirely (concurrent dry-runs are safe and shouldn't block each
170
170
  * other).
171
171
  *
172
- * The body receives a {@link FurnaceOperationContext}; it must call
172
+ * The body receives a {@link FurnaceOperationContext}. It must call
173
173
  * `ctx.registerJournal(journal)` once it has constructed its rollback journal.
174
174
  * Bodies that don't manage a journal directly (e.g. apply, which delegates to
175
175
  * `applyAllComponents`) can pass an internal callback through.
@@ -189,6 +189,7 @@ export declare function recordFurnaceRollbackFailure(root: string, operation: Fu
189
189
  * cases that exercise the signal pathway. Not exported from the package
190
190
  * entry point.
191
191
  *
192
- * @internal Exported only so tests can reach it; not part of the public surface.
192
+ * @internal Exported only so tests can reach it. Not part of the public
193
+ * surface.
193
194
  */
194
195
  export declare function __resetFurnaceOperationStateForTests(): void;
@@ -14,7 +14,7 @@ const FURNACE_LOCK_FILENAME = 'furnace.lock';
14
14
  /**
15
15
  * Converts a resolved `--wait-lock` budget in seconds into the
16
16
  * {@link RunFurnaceMutationOptions} slice that applies it to the furnace
17
- * lock. Undefined in, empty out — so the caller can spread it
17
+ * lock. Undefined in, empty out, so the caller can spread it
18
18
  * unconditionally without assigning `undefined` under
19
19
  * `exactOptionalPropertyTypes`.
20
20
  *
@@ -33,7 +33,7 @@ export function waitLockMutationOptions(waitLockSeconds) {
33
33
  * already has it.
34
34
  *
35
35
  * Must stay synchronous and must be called before the caller's first
36
- * await — that is what makes the claim atomic against the signal handler.
36
+ * await. That is what makes the claim atomic against the signal handler.
37
37
  *
38
38
  * @param operation - The in-flight operation to claim
39
39
  * @returns True when the caller now owns the rollback
@@ -52,7 +52,7 @@ let signalRollbackInFlight = false;
52
52
  * Returns true while a signal-driven rollback is in progress. The bin entry
53
53
  * point uses this as a re-entrancy guard so a user mashing Ctrl+C cannot
54
54
  * trigger a second rollback that races the first. Exposed for the bin shim
55
- * (and the test suite); production callers should not need it.
55
+ * (and the test suite). Production callers should not need it.
56
56
  */
57
57
  export function isSignalRollbackInFlight() {
58
58
  return signalRollbackInFlight;
@@ -60,7 +60,7 @@ export function isSignalRollbackInFlight() {
60
60
  /**
61
61
  * Rolls back every in-flight furnace operation and writes a pendingRepair
62
62
  * marker for each. The bin entry point installs SIGINT/SIGTERM handlers that
63
- * call this and then exit; calling it directly from inside the library would
63
+ * call this and then exit. Calling it directly from inside the library would
64
64
  * violate the "process.exit only in bin" invariant. The function is also
65
65
  * exposed under this name so the test suite can exercise the teardown path
66
66
  * without going through `process.emit` / `process.exit`.
@@ -91,8 +91,9 @@ export async function rollbackActiveOperationsForSignal(signal) {
91
91
  // Snapshot the active operations so we don't race with `runFurnaceMutation`
92
92
  // clearing slots during normal completion. Filter completed bodies so a
93
93
  // body sitting in its finally-block cleanup window is not counted as live
94
- // work — this would mis-trigger the rollback banner for plain `fireforge
95
- // run` (which never registers a mutation but can receive SIGTERM).
94
+ // work. Counting it would mis-trigger the rollback banner for plain
95
+ // `fireforge run` (which never registers a mutation but can receive
96
+ // SIGTERM).
96
97
  const snapshot = [...activeOperations.values()].filter((op) => !op.completed);
97
98
  if (snapshot.length === 0) {
98
99
  // Nothing to roll back. Stay silent so commands that never mutated (run,
@@ -124,9 +125,9 @@ export async function rollbackActiveOperationsForSignal(signal) {
124
125
  }
125
126
  }
126
127
  if (!op.journal) {
127
- // The body had not yet handed us a journal — nothing to roll back. We
128
- // still write a marker because the body may have started mutating the
129
- // engine before reaching the registerJournal call.
128
+ // The body had not yet handed us a journal, so there is nothing to
129
+ // roll back. We still write a marker because the body may have started
130
+ // mutating the engine before reaching the registerJournal call.
130
131
  const cleanupSuffix = cleanupErrors.length > 0 ? `; cleanup errors: ${cleanupErrors.join('; ')}` : '';
131
132
  await persistPendingRepair(op.root, op.kind, `interrupted by ${signal} before any state was captured${cleanupSuffix}`).catch((error) => {
132
133
  warn(`Could not persist pending-repair marker: ${toError(error).message}`);
@@ -190,7 +191,7 @@ async function rollbackOperationForThrow(operation) {
190
191
  }
191
192
  if (!operation.journal) {
192
193
  // Nothing was captured, so there is nothing to restore. Unlike the signal
193
- // path we do NOT write a pendingRepair marker here: a body that threw
194
+ // path we do not write a pendingRepair marker here: a body that threw
194
195
  // before registering a journal is overwhelmingly a refusal raised during
195
196
  // pre-flight (a validation failure, a missing file), and marking the root
196
197
  // as needing repair would block every later furnace mutation behind a
@@ -243,7 +244,7 @@ async function persistPendingRepair(root, operation, reason) {
243
244
  }
244
245
  /**
245
246
  * Resolves the path of the lock directory used to serialize furnace mutations
246
- * for a given project root. Exposed for tests; production callers should not
247
+ * for a given project root. Exposed for tests. Production callers should not
247
248
  * touch this directly.
248
249
  */
249
250
  export function getFurnaceLockPath(root) {
@@ -259,10 +260,10 @@ export function getFurnaceLockPath(root) {
259
260
  * restructure control flow through the engine's rollback path for a
260
261
  * cosmetic gain.
261
262
  *
262
- * The ordering is the part worth centralising: `markRolledBack()` MUST run
263
+ * The ordering is the part worth centralising: `markRolledBack()` must run
263
264
  * before the restore, so a restore that itself fails does not leave the
264
- * lifecycle wrapper replaying the same journal on the way out. And the
265
- * ORIGINAL error is rethrown unless the rollback is what failed — the
265
+ * lifecycle wrapper replaying the same journal on the way out. The
266
+ * original error is rethrown unless the rollback is what failed: the
266
267
  * operator needs to know what went wrong, and separately whether the engine
267
268
  * could be put back.
268
269
  *
@@ -270,7 +271,7 @@ export function getFurnaceLockPath(root) {
270
271
  * @param journal - Rollback journal this body populated
271
272
  * @param error - The error the body threw
272
273
  * @param options - Project root, pending-repair tag, and message fragments
273
- * @returns Never — always throws
274
+ * @returns Never, because it always throws
274
275
  */
275
276
  export async function completeJournalRollback(ctx, journal, error, options) {
276
277
  // This body owns its rollback end to end, so tell the lifecycle wrapper
@@ -289,11 +290,11 @@ export async function completeJournalRollback(ctx, journal, error, options) {
289
290
  * Forcibly removes the furnace lock directory for every active operation.
290
291
  *
291
292
  * The bin-layer signal handler calls `process.exit` after rollback, which
292
- * short-circuits Node's normal unwinding — `withFileLock`'s `finally { rm
293
- * }` never runs, so the lock directory survives the process. The next
293
+ * short-circuits Node's normal unwinding, so `withFileLock`'s `finally { rm
294
+ * }` never runs and the lock directory survives the process. The next
294
295
  * FireForge command then has to either wait out the staleness window or
295
296
  * have the operator remove the lock manually. This sweeper runs inside
296
- * the signal-handler pipeline BEFORE `process.exit`, so the lock is gone
297
+ * the signal-handler pipeline before `process.exit`, so the lock is gone
297
298
  * by the time the next command starts.
298
299
  *
299
300
  * Errors are logged and swallowed: we do not want a slow I/O failure at
@@ -305,9 +306,9 @@ export async function forceReleaseFurnaceLocksForActiveOperations() {
305
306
  const paths = new Set([...activeOperations.values()].map((op) => getFurnaceLockPath(op.root)));
306
307
  for (const lockPath of paths) {
307
308
  // Ownership-checked, like every other release path. The bare `rm` this
308
- // replaced would delete a lock a DIFFERENT process had acquired in the
309
- // window between our operation dying and this sweep running — the exact
310
- // race `releaseLock`'s PID verification was added to close, reopened
309
+ // replaced would delete a lock a different process had acquired in the
310
+ // window between our operation dying and this sweep running. That is the
311
+ // exact race `releaseLock`'s PID verification was added to close, reopened
311
312
  // here because the sweeper has no acquisition token to check.
312
313
  const removed = await releaseLockIfOwned(lockPath);
313
314
  verbose(removed
@@ -319,7 +320,7 @@ export async function forceReleaseFurnaceLocksForActiveOperations() {
319
320
  * Runs a furnace-mutating body under the apply-wide lock and registers it
320
321
  * with the process-wide SIGINT/SIGTERM rollback pathway. The lock prevents
321
322
  * two `furnace apply`/`deploy`/`create`/etc. runs from racing on the engine
322
- * working copy; the CLI entrypoint's global signal handlers consult this
323
+ * working copy. The CLI entrypoint's global signal handlers consult this
323
324
  * registry and invoke rollback (writing a `pendingRepair` marker when needed)
324
325
  * if the user hits Ctrl+C mid-run.
325
326
  *
@@ -327,7 +328,7 @@ export async function forceReleaseFurnaceLocksForActiveOperations() {
327
328
  * the lock entirely (concurrent dry-runs are safe and shouldn't block each
328
329
  * other).
329
330
  *
330
- * The body receives a {@link FurnaceOperationContext}; it must call
331
+ * The body receives a {@link FurnaceOperationContext}. It must call
331
332
  * `ctx.registerJournal(journal)` once it has constructed its rollback journal.
332
333
  * Bodies that don't manage a journal directly (e.g. apply, which delegates to
333
334
  * `applyAllComponents`) can pass an internal callback through.
@@ -356,10 +357,10 @@ export async function runFurnaceMutation(root, kind, body, options = {}) {
356
357
  const token = nextOperationToken++;
357
358
  const operation = { root, kind, cleanups: [] };
358
359
  const lockPath = getFurnaceLockPath(root);
359
- // An explicit budget wins; otherwise the session-wide one applies. Naming
360
- // the lock in the refusal is load-bearing: a mutation takes two, and a
361
- // message that says only "timed out" sends the operator to raise a budget
362
- // that was already large enough for the OTHER lock.
360
+ // An explicit budget wins. Otherwise the session-wide one applies. Naming
361
+ // the lock in the refusal matters: a mutation takes two, and a message
362
+ // that says only "timed out" sends the operator to raise a budget that
363
+ // was already large enough for the other lock.
363
364
  const timeoutMs = options.lockTimeoutMs ?? sessionWaitLockMs();
364
365
  const lockOptions = {
365
366
  ...(timeoutMs !== undefined ? { timeoutMs } : {}),
@@ -374,10 +375,10 @@ export async function runFurnaceMutation(root, kind, body, options = {}) {
374
375
  return withFileLock(lockPath, async () => {
375
376
  // Everything the body does from here is serialized only by the furnace
376
377
  // lock, so confirm we are actually inside it before registering as a
377
- // live mutation. The owner record is deliberately best-effort in
378
- // `withFileLock` (a live holder can legitimately have no readable PID),
379
- // so the PID half only tightens the check when a record is present —
380
- // asserting on its existence would fire on a lock we really do hold.
378
+ // live mutation. The owner record is best-effort in `withFileLock`
379
+ // (a live holder can legitimately have no readable PID), so the PID
380
+ // half only tightens the check when a record is present. Asserting on
381
+ // its existence would fire on a lock we really do hold.
381
382
  const lockStatus = await readLockStatus(lockPath);
382
383
  assert(lockStatus.held, 'furnace lock held before the mutation body runs');
383
384
  assert(lockStatus.holder === undefined || lockStatus.holder.pid === process.pid, () => `furnace lock is owned by this process ` +
@@ -401,8 +402,8 @@ export async function runFurnaceMutation(root, kind, body, options = {}) {
401
402
  // so it gets the same treatment. A bare finally here would
402
403
  // deregister the operation and mark it completed, removing it from
403
404
  // the signal handler's view too, so a body that threw outside its
404
- // own catch — notably anywhere in `applyAllComponents` outside its
405
- // two per-component try blocks — would leave the checkout torn with
405
+ // own catch (notably anywhere in `applyAllComponents` outside its
406
+ // two per-component try blocks) would leave the checkout torn with
406
407
  // no marker.
407
408
  //
408
409
  // This runs inside the withFileLock callback, so the furnace lock is
@@ -433,7 +434,8 @@ export async function recordFurnaceRollbackFailure(root, operation, reason) {
433
434
  * cases that exercise the signal pathway. Not exported from the package
434
435
  * entry point.
435
436
  *
436
- * @internal Exported only so tests can reach it; not part of the public surface.
437
+ * @internal Exported only so tests can reach it. Not part of the public
438
+ * surface.
437
439
  */
438
440
  export function __resetFurnaceOperationStateForTests() {
439
441
  activeOperations.clear();
@@ -3,14 +3,14 @@
3
3
  * `furnace.json` exists.
4
4
  *
5
5
  * Kept separate from the `GeneralError` ladder in `engine-precondition.ts`
6
- * because the error CLASS is load-bearing here, not cosmetic: `FurnaceError`
7
- * carries its own `userMessage` and exit code 9, so a helper raising
8
- * `GeneralError` would silently change both.
6
+ * because the error class matters here and is not merely cosmetic:
7
+ * `FurnaceError` carries its own `userMessage` and exit code 9, so a helper
8
+ * raising `GeneralError` would silently change both.
9
9
  *
10
- * Deliberately NOT routed through this helper — each informs rather than
11
- * refuses, and each says so at its own site: `furnace list`,
12
- * `furnace status`, `furnace init`, and `verify`. `furnace validate`
13
- * refusing is the intended line between inspecting and validating.
10
+ * Four sites are not routed through this helper: `furnace list`,
11
+ * `furnace status`, `furnace init`, and `verify`. Each informs rather than
12
+ * refuses, and each says so at its own site. `furnace validate` refusing is
13
+ * the intended line between inspecting and validating.
14
14
  */
15
15
  import type { FurnaceConfig } from '../types/furnace.js';
16
16
  import type { ProjectPaths } from '../types/index.js';
@@ -18,8 +18,8 @@ import type { ProjectPaths } from '../types/index.js';
18
18
  export interface FurnacePreconditionOptions {
19
19
  /**
20
20
  * Appended to the engine-missing refusal, e.g.
21
- * `' to scaffold a chrome-doc.'`. The base message ends WITHOUT
22
- * punctuation so the suffix reads as one sentence; callers passing nothing
21
+ * `' to scaffold a chrome-doc.'`. The base message ends without
22
+ * punctuation so the suffix reads as one sentence. Callers passing nothing
23
23
  * get a plain full stop.
24
24
  */
25
25
  engineMissingSuffix?: string;
@@ -48,7 +48,7 @@ export declare function assertFurnaceEngineReady(projectRoot: string, options?:
48
48
  paths: ProjectPaths;
49
49
  }>;
50
50
  /**
51
- * Asserts the full Furnace ladder — engine checkout, then `furnace.json` —
51
+ * Asserts the full Furnace ladder (engine checkout, then `furnace.json`)
52
52
  * and returns the loaded config so callers do not read it a second time.
53
53
  *
54
54
  * @param projectRoot - Project root directory
@@ -4,14 +4,14 @@
4
4
  * `furnace.json` exists.
5
5
  *
6
6
  * Kept separate from the `GeneralError` ladder in `engine-precondition.ts`
7
- * because the error CLASS is load-bearing here, not cosmetic: `FurnaceError`
8
- * carries its own `userMessage` and exit code 9, so a helper raising
9
- * `GeneralError` would silently change both.
7
+ * because the error class matters here and is not merely cosmetic:
8
+ * `FurnaceError` carries its own `userMessage` and exit code 9, so a helper
9
+ * raising `GeneralError` would silently change both.
10
10
  *
11
- * Deliberately NOT routed through this helper — each informs rather than
12
- * refuses, and each says so at its own site: `furnace list`,
13
- * `furnace status`, `furnace init`, and `verify`. `furnace validate`
14
- * refusing is the intended line between inspecting and validating.
11
+ * Four sites are not routed through this helper: `furnace list`,
12
+ * `furnace status`, `furnace init`, and `verify`. Each informs rather than
13
+ * refuses, and each says so at its own site. `furnace validate` refusing is
14
+ * the intended line between inspecting and validating.
15
15
  */
16
16
  import { FurnaceError } from '../errors/furnace.js';
17
17
  import { pathExists } from '../utils/fs.js';
@@ -47,7 +47,7 @@ export async function assertFurnaceEngineReady(projectRoot, options = {}) {
47
47
  return { paths };
48
48
  }
49
49
  /**
50
- * Asserts the full Furnace ladder — engine checkout, then `furnace.json` —
50
+ * Asserts the full Furnace ladder (engine checkout, then `furnace.json`)
51
51
  * and returns the loaded config so callers do not read it a second time.
52
52
  *
53
53
  * @param projectRoot - Project root directory
@@ -90,12 +90,12 @@ export async function refreshOverrideFile(options) {
90
90
  const oursContent = await readText(overridePath);
91
91
  const baseContent = await getFileContentAtRef(engineDir, engineRelPath, baseCommit);
92
92
  if (baseContent === null) {
93
- // File didn't exist at baseCommit — this is a new file introduced by the override
93
+ // File didn't exist at baseCommit: this is a new file introduced by the override
94
94
  return { fileName, status: 'new-file' };
95
95
  }
96
96
  const theirsContent = await getFileContentAtRef(engineDir, engineRelPath, 'HEAD');
97
97
  if (theirsContent === null) {
98
- // File was removed upstream — no merge needed, keep the override as-is
98
+ // File was removed upstream, so no merge is needed. Keep the override as-is
99
99
  return { fileName, status: 'unchanged' };
100
100
  }
101
101
  // If upstream hasn't changed, nothing to merge
@@ -12,7 +12,7 @@
12
12
  *
13
13
  * Matches any of:
14
14
  * 1. `setElementCreationCallback("tag"` / `setElementCreationCallback('tag'`
15
- * 2. Single-line array entry: `["tag", "..."]` — column 0 only, comments allowed after
15
+ * 2. Single-line array entry: `["tag", "..."]` (column 0 only, comments allowed after)
16
16
  * 3. Multi-line array entry: `"tag",` on its own line, optional trailing `//` comment
17
17
  */
18
18
  export declare function isTagAlreadyRegistered(content: string, tagName: string): boolean;
@@ -38,7 +38,7 @@ export interface RegistrationWriteOptions {
38
38
  * ```
39
39
  *
40
40
  * New entries are inserted in alphabetical order relative to existing entries.
41
- * This operation is idempotent — if the tag is already registered the file is
41
+ * This operation is idempotent: if the tag is already registered the file is
42
42
  * left unchanged.
43
43
  *
44
44
  * @param engineDir - Path to the Firefox engine source root
@@ -23,7 +23,7 @@ import { validateRegistrationPlacement, validateTagName } from './furnace-regist
23
23
  *
24
24
  * Matches any of:
25
25
  * 1. `setElementCreationCallback("tag"` / `setElementCreationCallback('tag'`
26
- * 2. Single-line array entry: `["tag", "..."]` — column 0 only, comments allowed after
26
+ * 2. Single-line array entry: `["tag", "..."]` (column 0 only, comments allowed after)
27
27
  * 3. Multi-line array entry: `"tag",` on its own line, optional trailing `//` comment
28
28
  */
29
29
  export function isTagAlreadyRegistered(content, tagName) {
@@ -234,8 +234,8 @@ function addRegistrationAST(content, tagName, modulePath, isESModule, markerComm
234
234
  * fails. Finds the last existing `["tag", "path"],` line in the appropriate
235
235
  * block and inserts the new entry after it in alphabetical order.
236
236
  *
237
- * This is intentionally less precise than the AST approach — it does not
238
- * validate indentation or multi-line format — but it is robust against
237
+ * This is intentionally less precise than the AST approach (it does not
238
+ * validate indentation or multi-line format), but it is robust against
239
239
  * upstream syntax changes that break the parser.
240
240
  */
241
241
  function addRegistrationRegexFallback(content, tagName, modulePath, isESModule, markerComment) {
@@ -297,7 +297,7 @@ function hasRecognizableRegistrationLoop(content) {
297
297
  * ```
298
298
  *
299
299
  * New entries are inserted in alphabetical order relative to existing entries.
300
- * This operation is idempotent — if the tag is already registered the file is
300
+ * This operation is idempotent: if the tag is already registered the file is
301
301
  * left unchanged.
302
302
  *
303
303
  * @param engineDir - Path to the Firefox engine source root
@@ -312,13 +312,13 @@ export async function addCustomElementRegistration(engineDir, tagName, modulePat
312
312
  const content = await readText(filePath);
313
313
  // Idempotency: check column-0 of each array entry rather than a literal
314
314
  // substring match. A previous apply may have written this entry with
315
- // trailing marker comments (see `options.markerComment`); matching on the
315
+ // trailing marker comments (see `options.markerComment`). Matching on the
316
316
  // full line would then miss it and insert a duplicate on re-apply, which
317
317
  // throws NotSupportedError at every window-load.
318
318
  if (isTagAlreadyRegistered(content, tagName)) {
319
319
  return;
320
320
  }
321
- // Validate upfront — tag name errors must not fall through to the regex fallback.
321
+ // Validate upfront. Tag name errors must not fall through to the regex fallback.
322
322
  validateTagName(tagName);
323
323
  const isESModule = modulePath.endsWith('.mjs');
324
324
  // Cheap pre-flight: the AST walker assumes the file contains at least one
@@ -326,7 +326,7 @@ export async function addCustomElementRegistration(engineDir, tagName, modulePat
326
326
  // right-hand side, and (for ESM tags) at least one such loop inside a
327
327
  // `document.addEventListener("DOMContentLoaded", ...)` block. If either
328
328
  // assumption is violated the AST path errors with a confusing
329
- // "Could not find DOMContentLoaded block" message — fail fast here with
329
+ // "Could not find DOMContentLoaded block" message, so fail fast here with
330
330
  // actionable guidance instead.
331
331
  if (!hasRecognizableRegistrationLoop(content)) {
332
332
  throw new FurnaceError(`${CUSTOM_ELEMENTS_JS} does not contain a recognizable registration loop; refusing to mutate. ` +
@@ -342,7 +342,7 @@ export async function addCustomElementRegistration(engineDir, tagName, modulePat
342
342
  }
343
343
  catch (error) {
344
344
  if (error instanceof FurnaceError) {
345
- // AST structural errors (missing DOMContentLoaded block, etc.) — try regex fallback
345
+ // AST structural errors (missing DOMContentLoaded block, etc.): try regex fallback
346
346
  warn(`AST-based registration failed for ${tagName}: ${error.message}. ` +
347
347
  'Falling back to regex-based insertion. Please report this so the AST parser can be updated.');
348
348
  try {
@@ -396,7 +396,7 @@ export async function validateCustomElementRegistration(engineDir, tagName, modu
396
396
  addRegistrationAST(content, tagName, modulePath, isESModule);
397
397
  }
398
398
  catch {
399
- // Validation only — if AST fails, try regex to see if the entry could be placed
399
+ // Validation only: if AST fails, try regex to see if the entry could be placed
400
400
  addRegistrationRegexFallback(content, tagName, modulePath, isESModule);
401
401
  }
402
402
  }
@@ -4,8 +4,8 @@
4
4
  * Uses the same AST parser as the add path (`furnace-registration-ast.ts`) to
5
5
  * locate and delete registration entries. A line-by-line scan with a bounded
6
6
  * bracket match only works against Firefox's stock formatting and fails
7
- * silently on a hand-reformatted customElements.js; AST-based bracket
8
- * matching is format-agnostic by construction.
7
+ * silently on a hand-reformatted customElements.js. AST-based bracket
8
+ * matching does not depend on the file's formatting.
9
9
  *
10
10
  * Contract:
11
11
  * - Idempotent: if the tag is not registered, the file is left unchanged.
@@ -23,10 +23,10 @@
23
23
  /**
24
24
  * Removes a custom element registration from customElements.js.
25
25
  *
26
- * This operation is idempotent — if the tag is not registered or the file
26
+ * This operation is idempotent: if the tag is not registered or the file
27
27
  * does not exist, nothing happens. If the file exists but cannot be parsed,
28
28
  * the file is left unchanged rather than fall back to a line-based
29
- * heuristic; a corrupted customElements.js is a doctor problem, not
29
+ * heuristic. A corrupted customElements.js is a doctor problem, not
30
30
  * something `furnace remove` should "helpfully" edit around.
31
31
  *
32
32
  * @param engineDir - Path to the Firefox engine source root
@@ -5,8 +5,8 @@
5
5
  * Uses the same AST parser as the add path (`furnace-registration-ast.ts`) to
6
6
  * locate and delete registration entries. A line-by-line scan with a bounded
7
7
  * bracket match only works against Firefox's stock formatting and fails
8
- * silently on a hand-reformatted customElements.js; AST-based bracket
9
- * matching is format-agnostic by construction.
8
+ * silently on a hand-reformatted customElements.js. AST-based bracket
9
+ * matching does not depend on the file's formatting.
10
10
  *
11
11
  * Contract:
12
12
  * - Idempotent: if the tag is not registered, the file is left unchanged.
@@ -49,7 +49,7 @@ function expandRemovalRange(content, start, end) {
49
49
  }
50
50
  // Consume a trailing inline comment up to end-of-line so we do not leave
51
51
  // the comment marooned on its own line. A leading inline comment is left
52
- // alone — it may belong to the next entry.
52
+ // alone, because it may belong to the next entry.
53
53
  while (expandedEnd < content.length &&
54
54
  (content[expandedEnd] === ' ' || content[expandedEnd] === '\t')) {
55
55
  expandedEnd++;
@@ -88,7 +88,7 @@ function expandRemovalRange(content, start, end) {
88
88
  }
89
89
  /**
90
90
  * Returns true if `node` represents a `[tag, module]` entry inside a
91
- * registration array — i.e. an `ArrayExpression` whose first element is a
91
+ * registration array, i.e. an `ArrayExpression` whose first element is a
92
92
  * string literal equal to `tagName`. Callers still have to verify the
93
93
  * parent is the outer registration array so we do not accidentally delete
94
94
  * an arbitrary user-owned `["moz-card", ...]` literal elsewhere in the file.
@@ -176,10 +176,10 @@ function collectRemovalRanges(ast, content, tagName) {
176
176
  /**
177
177
  * Removes a custom element registration from customElements.js.
178
178
  *
179
- * This operation is idempotent — if the tag is not registered or the file
179
+ * This operation is idempotent: if the tag is not registered or the file
180
180
  * does not exist, nothing happens. If the file exists but cannot be parsed,
181
181
  * the file is left unchanged rather than fall back to a line-based
182
- * heuristic; a corrupted customElements.js is a doctor problem, not
182
+ * heuristic. A corrupted customElements.js is a doctor problem, not
183
183
  * something `furnace remove` should "helpfully" edit around.
184
184
  *
185
185
  * @param engineDir - Path to the Firefox engine source root
@@ -25,8 +25,8 @@ export declare function validateTagName(tagName: string): void;
25
25
  * Returns why `tagName` is invalid, or `undefined` when it is fine.
26
26
  *
27
27
  * The message-returning half of {@link validateTagName}, for callers that
28
- * must not throw — specifically clack `validate` callbacks, which expect a
29
- * returned string and re-prompt on it. Passing the THROWING form to one
28
+ * must not throw, specifically clack `validate` callbacks, which expect a
29
+ * returned string and re-prompt on it. Passing the throwing form to one
30
30
  * makes an invalid tag name escape clack's validation loop as a
31
31
  * `FurnaceError`, killing the prompt instead of showing the rule inline.
32
32
  *
@@ -33,8 +33,8 @@ export function validateTagName(tagName) {
33
33
  * Returns why `tagName` is invalid, or `undefined` when it is fine.
34
34
  *
35
35
  * The message-returning half of {@link validateTagName}, for callers that
36
- * must not throw — specifically clack `validate` callbacks, which expect a
37
- * returned string and re-prompt on it. Passing the THROWING form to one
36
+ * must not throw, specifically clack `validate` callbacks, which expect a
37
+ * returned string and re-prompt on it. Passing the throwing form to one
38
38
  * makes an invalid tag name escape clack's validation loop as a
39
39
  * `FurnaceError`, killing the prompt instead of showing the rule inline.
40
40
  *