@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
@@ -39,16 +39,16 @@ function hasFtlFileExtension(value) {
39
39
  /**
40
40
  * Validates an FTL base path before writing it to furnace.json.
41
41
  * Rejects:
42
- * - empty values and null bytes;
43
- * - absolute paths (POSIX or Windows-drive) that escape the engine;
44
- * - `..` segments that escape the engine;
42
+ * - empty values and null bytes
43
+ * - absolute paths (POSIX or Windows-drive) that escape the engine
44
+ * - `..` segments that escape the engine
45
45
  * - file-shaped values ending in `.ftl` / `.properties` / `.dtd`
46
- * (these are locale resources, not directories — the operator
47
- * almost certainly meant to name the parent directory).
46
+ * (these are locale resources, not directories, so the operator
47
+ * almost certainly meant to name the parent directory)
48
48
  *
49
49
  * When {@link engineDir} is provided and exists on disk, the resolved
50
- * `engine/${value}` path is probed: if it exists but is not a
51
- * directory, the same file-shape error fires; if it does not exist yet,
50
+ * `engine/${value}` path is probed. If it exists but is not a
51
+ * directory, the same file-shape error fires. If it does not exist yet,
52
52
  * a non-blocking warning is logged (a fresh project that has not
53
53
  * `fireforge download`-ed yet is the legitimate pre-existence case).
54
54
  */
@@ -87,16 +87,16 @@ async function validateFtlBasePath(value, engineDir) {
87
87
  }
88
88
  catch (error) {
89
89
  // FurnaceError (from the `isDirectory()` branch above) is a real
90
- // shape failure — re-throw so the operator sees it.
90
+ // shape failure, so re-throw and let the operator see it.
91
91
  if (error instanceof FurnaceError)
92
92
  throw error;
93
93
  // ENOENT is expected on a fresh project before `fireforge
94
- // download` has populated engine/; only warn.
94
+ // download` has populated engine/. Only warn.
95
95
  const code = getNodeErrorCode(error);
96
96
  if (code === 'ENOENT') {
97
97
  warn(`ftlBasePath "${value}" does not yet exist at ${resolved}. This is fine if you have not run "fireforge download" yet; rerun "fireforge furnace init --force" after the engine is extracted to re-validate.`);
98
98
  }
99
- // Any other stat error is also best-effort ignored here — a
99
+ // Any other stat error is also ignored here as best-effort: a
100
100
  // permission issue or malformed engine checkout will surface on
101
101
  // the next command that actually reads the FTL tree.
102
102
  }
@@ -116,7 +116,7 @@ export async function furnaceInitCommand(projectRoot, options = {}) {
116
116
  const paths = getProjectPaths(projectRoot);
117
117
  // Seed the default furnace config with a tokenPrefix derived from
118
118
  // fireforge.json's binaryName so `token coverage` sees real tokens on the
119
- // very first run — without the prefix default, a fresh init → token add →
119
+ // very first run. Without the prefix default, a fresh init → token add →
120
120
  // coverage sequence reports `0 tokens / N unknown` because the scan has
121
121
  // nothing to key off. Loading fireforge.json here is best-effort: a
122
122
  // project without one (mid-setup) falls through to the prefix-less
@@ -197,8 +197,8 @@ export async function furnaceInitCommand(projectRoot, options = {}) {
197
197
  * Scaffolds the default tokens CSS file under the engine and registers
198
198
  * its path in `fireforge.json`'s `patchLint.rawColorAllowlist`. Both
199
199
  * operations are skipped silently when the engine directory does not
200
- * yet exist (a fresh project that hasn't `fireforge download`ed yet);
201
- * the scaffold is re-driven on the next `furnace init --force`.
200
+ * yet exist (a fresh project that hasn't `fireforge download`ed yet).
201
+ * The scaffold is re-driven on the next `furnace init --force`.
202
202
  *
203
203
  * Returns the scaffolded path when the file was actually created, so
204
204
  * the init command can surface it in the summary note.
@@ -258,12 +258,12 @@ async function scaffoldTokensCss(projectRoot) {
258
258
  // is owned end-to-end by tooling. Scaffolding and allowlisting it without
259
259
  // registering leaves the very next `fireforge status` correctly flagging
260
260
  // it as unmanaged + unregistered while `furnace deploy --dry-run` reports
261
- // nothing to deploy — a documented init command turning a clean project
261
+ // nothing to deploy, a documented init command turning a clean project
262
262
  // unclean. The CSS lives at the canonical
263
263
  // `browser/themes/shared/<binaryName>-tokens.css` path the shared-CSS rule
264
264
  // already targets, so it gets the same
265
265
  // `skin/classic/browser/<name>.css (../shared/<name>.css)` entry as any
266
- // other shared CSS. Idempotent — `furnace init --force` against a
266
+ // other shared CSS. It is idempotent: `furnace init --force` against a
267
267
  // registered tree is a no-op.
268
268
  try {
269
269
  const fileBase = `${forgeConfig.binaryName}-tokens.css`;
@@ -22,8 +22,8 @@ async function getHealthIndicator(componentDir, type, name, appliedChecksums) {
22
22
  }
23
23
  catch {
24
24
  // A race with `furnace remove`, filesystem permission change, or a
25
- // transient IO failure must not crash the entire `list -v` output —
26
- // render a degraded state so the rest of the table still shows.
25
+ // transient IO failure must not crash the entire `list -v` output, so
26
+ // render a degraded state and the rest of the table still shows.
27
27
  return formatErrorText('unavailable');
28
28
  }
29
29
  }
@@ -8,7 +8,7 @@ import type { FurnaceOverrideOptions } from '../../types/commands/index.js';
8
8
  export declare function furnaceOverrideCommand(projectRoot: string, name?: string, options?: FurnaceOverrideOptions): Promise<void>;
9
9
  /**
10
10
  * Creates multiple overrides in a single invocation. Each component is validated
11
- * and created sequentially; failures on one component do not block the rest.
11
+ * and created sequentially. Failures on one component do not block the rest.
12
12
  * @param projectRoot - Root directory of the project
13
13
  * @param names - Component tag names to override
14
14
  * @param options - CLI options applied to all overrides
@@ -79,7 +79,7 @@ async function copyOverrideFiles(options) {
79
79
  * override entry. Re-reads the current on-disk furnace.json inside the
80
80
  * operation lock and splices the new entry onto the fresh state, so two
81
81
  * concurrent `furnace override` commands cannot race their read-modify-write
82
- * cycles into a single surviving entry — otherwise both report success and
82
+ * cycles into a single surviving entry. Otherwise both report success and
83
83
  * furnace.json keeps only the second writer's.
84
84
  */
85
85
  async function saveOverrideConfig(options) {
@@ -96,8 +96,8 @@ async function saveOverrideConfig(options) {
96
96
  await writeJson(overrideJsonPath, overrideJson);
97
97
  // Re-read the current furnace.json inside the lock. The outer caller
98
98
  // loaded a snapshot before entering `runFurnaceMutation`, but another
99
- // furnace mutation (override / init / sync) may have landed in between
100
- // — writing back the stale snapshot would drop that concurrent write.
99
+ // furnace mutation (override / init / sync) may have landed in between,
100
+ // and writing back the stale snapshot would drop that concurrent write.
101
101
  const freshConfig = await loadAuthoringFurnaceConfig(projectRoot);
102
102
  freshConfig.overrides[componentName] = {
103
103
  type: overrideType,
@@ -164,11 +164,11 @@ async function performOverrideMutations(args) {
164
164
  }
165
165
  /**
166
166
  * Throws if `componentName` is already classified as something `override`
167
- * cannot coexist with. A stock-bucket entry is NOT a hard conflict — the
168
- * whole point of `override` is to fork a component out of the stock bucket
169
- * into the overrides bucket, and requiring manual `furnace.json` surgery
170
- * first was a pure footgun. `promoteStockToOverrideIfNeeded` handles the
171
- * transition in-memory; this guard only rejects the other two cases where
167
+ * cannot coexist with. A stock-bucket entry is not a hard conflict:
168
+ * `override` exists to fork a component out of the stock bucket into the
169
+ * overrides bucket, and requiring manual `furnace.json` surgery first was
170
+ * a footgun. `promoteStockToOverrideIfNeeded` handles the
171
+ * transition in-memory. This guard only rejects the other two cases where
172
172
  * a rename actually contradicts existing state.
173
173
  */
174
174
  function assertNoComponentCollision(config, componentName) {
@@ -185,7 +185,7 @@ function assertNoComponentCollision(config, componentName) {
185
185
  * the subsequent `writeFurnaceConfig` inside the mutation phase persists
186
186
  * the stock → override promotion atomically alongside the new override
187
187
  * entry. Returns true when a promotion happened so the caller can emit a
188
- * one-line note; false when the component was not stock.
188
+ * one-line note. Returns false when the component was not stock.
189
189
  */
190
190
  function promoteStockToOverrideIfNeeded(config, componentName) {
191
191
  const index = config.stock.indexOf(componentName);
@@ -203,9 +203,9 @@ function promoteStockToOverrideIfNeeded(config, componentName) {
203
203
  export async function furnaceOverrideCommand(projectRoot, name, options = {}) {
204
204
  const isInteractive = stdioIsInteractive();
205
205
  intro('Furnace Override');
206
- // --- Validate config-independent inputs BEFORE auto-creating furnace.json
206
+ // --- Validate config-independent inputs before auto-creating furnace.json
207
207
  // so a failed authoring command never strands a fresh config in the
208
- // project root. CLI-supplied name is checked here; the engine directory
208
+ // project root. CLI-supplied name is checked here. The engine directory
209
209
  // and component-resolution checks below also have no config dependency.
210
210
  const paths = getProjectPaths(projectRoot);
211
211
  if (name !== undefined && !CUSTOM_ELEMENT_TAG_PATTERN.test(name)) {
@@ -226,7 +226,7 @@ export async function furnaceOverrideCommand(projectRoot, name, options = {}) {
226
226
  // --- Resolve component name ---
227
227
  let componentName = name;
228
228
  if (!componentName) {
229
- // Interactive prompt path; non-interactive missing-name was rejected above.
229
+ // Interactive prompt path. Non-interactive missing-name was rejected above.
230
230
  const allComponents = await scanWidgetsDirectory(paths.engine, ftlDir);
231
231
  const available = allComponents.filter((c) => !(c.tagName in config.overrides));
232
232
  if (available.length === 0) {
@@ -336,7 +336,7 @@ export async function furnaceOverrideCommand(projectRoot, name, options = {}) {
336
336
  }
337
337
  /**
338
338
  * Creates multiple overrides in a single invocation. Each component is validated
339
- * and created sequentially; failures on one component do not block the rest.
339
+ * and created sequentially. Failures on one component do not block the rest.
340
340
  * @param projectRoot - Root directory of the project
341
341
  * @param names - Component tag names to override
342
342
  * @param options - CLI options applied to all overrides
@@ -362,8 +362,8 @@ export async function furnaceBatchOverrideCommand(projectRoot, names, options =
362
362
  const state = await loadState(projectRoot);
363
363
  // Check for duplicates and pre-existing classifications across every
364
364
  // bucket in furnace.json. A stock-bucket entry is promoted in-memory
365
- // here (see `promoteStockToOverrideIfNeeded`) rather than rejected —
366
- // the operator's intent is to fork that specific stock component. The
365
+ // here (see `promoteStockToOverrideIfNeeded`) rather than rejected,
366
+ // since the operator's intent is to fork that specific stock component. The
367
367
  // collision guard still rejects name conflicts that would double-
368
368
  // classify a tag in a way `writeFurnaceConfig` cannot safely produce
369
369
  // (two overrides, or an override + custom).
@@ -13,8 +13,8 @@ import { toError } from '../../utils/errors.js';
13
13
  import { pathExists } from '../../utils/fs.js';
14
14
  import { info, intro, outro, spinner, warn } from '../../utils/logger.js';
15
15
  /**
16
- * Runs the two teardown steps — `cleanStories` and the rollback-journal
17
- * restore — independently, collecting whatever errors either step throws.
16
+ * Runs the two teardown steps (`cleanStories` and the rollback-journal
17
+ * restore) independently, collecting whatever errors either step throws.
18
18
  * Both steps must run regardless of the other's outcome, because each
19
19
  * operates on a different part of engine state and skipping one leaves
20
20
  * the engine in a worse position than a single-step failure.
@@ -72,10 +72,10 @@ function reportPreviewStagingFailures(stageResult) {
72
72
  }
73
73
  /**
74
74
  * Filenames emitted by the Firefox build backend (not by Storybook's npm
75
- * package set) — their absence means `mach build` has not produced its
75
+ * package set). Their absence means `mach build` has not produced its
76
76
  * post-configure artifacts, which is a different failure mode from a missing
77
77
  * Storybook workspace dependency tree. A
78
- * `FileNotFoundError: [...] chrome-map.json` AFTER a successful Storybook
78
+ * `FileNotFoundError: [...] chrome-map.json` after a successful Storybook
79
79
  * `npm install` is the case a dep-focused heuristic misdiagnoses, sending
80
80
  * the operator back to `--install`. The pattern list is narrow on purpose so
81
81
  * the backend-rebuild hint only fires when it is confident.
@@ -101,7 +101,7 @@ export function buildStorybookFailureMessage(output, installRequested) {
101
101
  ? 'Try running "python3 ./mach storybook upgrade" manually in the engine directory.'
102
102
  : 'Run "fireforge furnace preview --install" to bootstrap Storybook dependencies, or run "python3 ./mach storybook upgrade" manually in engine/.';
103
103
  const hasFileNotFoundSignal = /(ENOENT|No such file or directory|FileNotFoundError)/i.test(output);
104
- // Check backend-artifact signal first — a missing chrome-map.json looks
104
+ // Check the backend-artifact signal first: a missing chrome-map.json looks
105
105
  // like any other "No such file" error to a naïve regex, but the fix is
106
106
  // to rerun `fireforge build`, not to reinstall Storybook dependencies.
107
107
  if (hasFileNotFoundSignal && BACKEND_ARTIFACT_PATTERNS.some((p) => p.test(output))) {
@@ -122,7 +122,7 @@ export function buildStorybookFailureMessage(output, installRequested) {
122
122
  * Preflights the Firefox build + toolchain prerequisites `mach storybook`
123
123
  * quietly assumes. Without it, preview stages components and launches a
124
124
  * ~1000-package `mach storybook upgrade` npm install before the backend
125
- * surfaces a "missing chrome-map.json" / Cargo-config failure; this refuses
125
+ * surfaces a "missing chrome-map.json" / Cargo-config failure. This refuses
126
126
  * fast and leaves the workspace untouched.
127
127
  *
128
128
  * @param engineDir - Resolved engine directory
@@ -143,7 +143,7 @@ async function assertPreviewPrerequisites(engineDir) {
143
143
  // follow the remediation instruction ("run bootstrap then rerun preview")
144
144
  // hit the same refusal on the retry, because `fireforge bootstrap` alone
145
145
  // produces only `.in`. Either name is sufficient to prove the Rust
146
- // toolchain is registered; the stronger `hasBuildArtifacts` check above
146
+ // toolchain is registered. The stronger `hasBuildArtifacts` check above
147
147
  // already guards against a completely un-configured tree.
148
148
  const cargoConfigPath = join(engineDir, '.cargo', 'config.toml');
149
149
  const cargoConfigInPath = join(engineDir, '.cargo', 'config.toml.in');
@@ -158,10 +158,10 @@ async function assertPreviewPrerequisites(engineDir) {
158
158
  /**
159
159
  * Emits a framing banner when the Storybook workspace has not yet had its npm
160
160
  * dependencies installed. `mach storybook` drives the install internally and
161
- * prints ELSPROBLEMS / UNMET DEPENDENCY lines verbatim; without this banner
161
+ * prints ELSPROBLEMS / UNMET DEPENDENCY lines verbatim. Without this banner
162
162
  * operators reliably read the npm output as a failure.
163
163
  *
164
- * Skipped when `--install` was explicitly requested — that path already runs
164
+ * Skipped when `--install` was explicitly requested, since that path runs
165
165
  * `mach storybook upgrade` before the preview launches, so the npm output
166
166
  * for the subsequent `mach storybook` invocation is a no-op.
167
167
  */
@@ -177,9 +177,9 @@ async function announceStorybookFirstRunIfNeeded(engineDir, installRequested) {
177
177
  /**
178
178
  * Surfaces an explicit success banner after a clean mach-storybook
179
179
  * exit so the operator's scrollback visually terminates the npm noise
180
- * from the first-run install. Only fires on expected exit codes — non-
181
- * zero cases fall through to the existing
182
- * `buildStorybookFailureMessage` classification.
180
+ * from the first-run install. Only fires on expected exit codes. Non-zero
181
+ * cases fall through to the existing `buildStorybookFailureMessage`
182
+ * classification.
183
183
  */
184
184
  function announceStorybookCleanExitIfApplicable(exitCode) {
185
185
  if (exitCode === 0 || exitCode === 130 || exitCode === 143) {
@@ -212,9 +212,9 @@ export async function furnacePreviewCommand(projectRoot, options = {}) {
212
212
  await assertPreviewPrerequisites(paths.engine);
213
213
  let previewResult;
214
214
  // True once we are about to (or have) written to engine/.../stories/furnace.
215
- // Intentionally set BEFORE `syncStories` is awaited so a mid-sync failure
216
- // still triggers `cleanStories` during teardown. `cleanStories` is a
217
- // full-directory wipe, so it is correct to run against partial state —
215
+ // Set before `syncStories` is awaited so a mid-sync failure still
216
+ // triggers `cleanStories` during teardown. `cleanStories` is a
217
+ // full-directory wipe, so it is correct to run against partial state,
218
218
  // including state with zero files, where it is a cheap no-op.
219
219
  let storiesCleanupRequired = false;
220
220
  let previewJournal;
@@ -264,7 +264,7 @@ export async function furnacePreviewCommand(projectRoot, options = {}) {
264
264
  stageSpinner.stop(`Staged ${stageResult.applied.length} component${stageResult.applied.length === 1 ? '' : 's'} for preview`);
265
265
  }
266
266
  // Sync story files. Set the cleanup flag before the await so a partial
267
- // write failure still triggers the teardown wipe — `syncStories` writes
267
+ // write failure still triggers the teardown wipe. `syncStories` writes
268
268
  // files incrementally with no internal cleanup of its own.
269
269
  const syncSpinner = spinner('Syncing component stories...');
270
270
  storiesCleanupRequired = true;
@@ -299,7 +299,7 @@ export async function furnacePreviewCommand(projectRoot, options = {}) {
299
299
  // cleanStories must not prevent the journal restore, and vice versa.
300
300
  // Running teardown in a `finally` that calls
301
301
  // `restoreRollbackJournalOrThrow` throws synchronously, bypassing the
302
- // primary error and skipping downstream handling — the engine is left
302
+ // primary error and skipping downstream handling, so the engine is left
303
303
  // with staged files and the user gets a teardown message with no
304
304
  // guidance. Both failures are collected instead and, if anything went
305
305
  // wrong, a `pendingRepair` marker is persisted for `fireforge doctor` to
@@ -90,8 +90,8 @@ async function refreshSingleOverride(projectRoot, name, options = {}) {
90
90
  }
91
91
  return { results: [], currentVersion };
92
92
  }
93
- // Prefer the per-override baseCommit (survives download --force); fall back
94
- // to the project-wide value for overrides created before this field existed.
93
+ // Prefer the per-override baseCommit (survives download --force). Fall
94
+ // back to the project-wide value for overrides created before this field existed.
95
95
  const baseCommit = overrideConfig.baseCommit ?? state.baseCommit;
96
96
  if (!baseCommit) {
97
97
  throw new FurnaceError('Cannot refresh: baseCommit not found. Re-run "fireforge download" to establish a baseline, ' +
@@ -153,7 +153,7 @@ async function refreshSingleOverride(projectRoot, name, options = {}) {
153
153
  return fileResults;
154
154
  }
155
155
  catch (error) {
156
- // A dry run wrote nothing, so there is no journal to restore — it
156
+ // A dry run wrote nothing, so there is no journal to restore. It
157
157
  // rethrows without touching the lifecycle wrapper.
158
158
  if (!dryRun) {
159
159
  return await completeJournalRollback(ctx, journal, error, {
@@ -171,7 +171,7 @@ async function refreshSingleOverride(projectRoot, name, options = {}) {
171
171
  /**
172
172
  * Refreshes every override sequentially, tallying merged/conflict/
173
173
  * unchanged file counts. Per-override errors are expected (warned and
174
- * recorded as failures) and do not abort the batch; only an error that
174
+ * recorded as failures) and do not abort the batch. Only an error that
175
175
  * escapes this function entirely warrants the caller's journal rollback.
176
176
  */
177
177
  async function runBatchRefresh(projectRoot, overrideNames, options) {
@@ -232,7 +232,7 @@ export async function furnaceRefreshCommand(projectRoot, name, options = {}) {
232
232
  if (name && refreshAll) {
233
233
  throw new FurnaceError('Cannot specify both a component name and --all. Use one or the other.');
234
234
  }
235
- // Verify engine exists — refresh reads engine files for three-way merge
235
+ // Verify engine exists: refresh reads engine files for three-way merge
236
236
  // and --reset-base reads engine HEAD. Without this check, the user gets
237
237
  // an obscure git error instead of a clear precondition message.
238
238
  await assertFurnaceEngineReady(projectRoot);
@@ -265,7 +265,7 @@ export async function furnaceRefreshCommand(projectRoot, name, options = {}) {
265
265
  }
266
266
  // Snapshot furnace.json before the batch loop so an unexpected failure
267
267
  // (process crash, unhandled error) can be recovered from. Per-component
268
- // errors caught below are expected and do not trigger a restore — only
268
+ // errors caught below are expected and do not trigger a restore. Only
269
269
  // an error that escapes the loop entirely warrants rolling back.
270
270
  const batchJournal = dryRun ? undefined : createRollbackJournal();
271
271
  if (batchJournal) {
@@ -2,7 +2,7 @@ import type { FurnacePaths } from '../../core/furnace-config.js';
2
2
  import type { RollbackJournal } from '../../core/furnace-rollback.js';
3
3
  import type { FurnaceConfig, FurnaceState } from '../../types/furnace.js';
4
4
  /**
5
- * Engine-side and workspace-side removal for an OVERRIDE component.
5
+ * Engine-side and workspace-side removal for an override component.
6
6
  *
7
7
  * Runs inside the caller's rollback journal rather than opening its own, so
8
8
  * a failure anywhere in the remove still restores the whole operation as a
@@ -20,8 +20,8 @@ export declare function performOverrideRemovalMutations(args: {
20
20
  journal: RollbackJournal;
21
21
  }): Promise<void>;
22
22
  /**
23
- * Engine-side and workspace-side removal for a CUSTOM component.
24
- * Sibling of {@link performOverrideRemovalMutations}; see its note.
23
+ * Engine-side and workspace-side removal for a custom component.
24
+ * Sibling of {@link performOverrideRemovalMutations}. See its note.
25
25
  */
26
26
  export declare function performCustomRemovalMutations(args: {
27
27
  projectRoot: string;
@@ -7,7 +7,7 @@
7
7
  * `furnaceRemoveCommand` at the per-function cap. Extracting them inside the
8
8
  * same file would trade a function-length problem for a file-length one.
9
9
  *
10
- * Both run inside the CALLER's rollback journal rather than opening their
10
+ * Both run inside the caller's rollback journal rather than opening their
11
11
  * own, so a failure anywhere in the remove still restores the whole
12
12
  * operation as a single unit.
13
13
  */
@@ -27,12 +27,12 @@ import { removeDeployedCustomFiles } from './remove-state.js';
27
27
  /**
28
28
  * Restores every override-deployed file in `engine/` to its pristine HEAD
29
29
  * state, inverting what `applyOverrideComponent` would have written. Files that
30
- * existed in HEAD are restored via `git restore`; files the override
30
+ * existed in HEAD are restored via `git restore`. Files the override
31
31
  * introduced (not in HEAD) are deleted outright.
32
32
  *
33
- * The restore set is the **union** of (a) files currently in the override
34
- * workspace directory and (b) filenames recorded in `previousChecksumKeys`
35
- * — i.e. files we know we deployed last time, even if the developer has
33
+ * The restore set is the union of (a) files currently in the override
34
+ * workspace directory and (b) filenames recorded in `previousChecksumKeys`,
35
+ * i.e. files we know we deployed last time, even if the developer has
36
36
  * since deleted them from the workspace. Without (b), a workspace deletion
37
37
  * leaves an orphaned engine copy that `furnace remove` would never see.
38
38
  *
@@ -43,14 +43,15 @@ import { removeDeployedCustomFiles } from './remove-state.js';
43
43
  async function restoreOverrideEngineFiles(engineDir, overrideDir, overrideConfig, previousChecksumKeys, ftlDir, journal) {
44
44
  // Engine-as-git is a hard precondition for restoration: git HEAD is the only
45
45
  // honest oracle for "what was there before the override". If the engine is
46
- // not a git repo we refuse rather than silently leaving files behind — the
47
- // previous warn-and-continue behaviour is exactly what this fix removes.
46
+ // not a git repo we refuse rather than silently leaving files behind. The
47
+ // previous behaviour was to warn and continue, which is what this fix
48
+ // removes.
48
49
  if (!(await isGitRepository(engineDir))) {
49
50
  throw new FurnaceError('Cannot restore override files: engine is not a git repository. Run "fireforge download" to initialise it.');
50
51
  }
51
52
  // Build the union of "files we still see on disk" and "files state.json
52
53
  // claims we deployed". The state set is the only authority for files that
53
- // were deployed and later deleted from the workspace; the workspace set is
54
+ // were deployed and later deleted from the workspace. The workspace set is
54
55
  // the only authority for files added since last apply that have not yet
55
56
  // been recorded in state. We need both.
56
57
  const fileSet = new Set();
@@ -80,7 +81,7 @@ async function restoreOverrideEngineFiles(engineDir, overrideDir, overrideConfig
80
81
  return { restored, removed };
81
82
  }
82
83
  /**
83
- * Engine-side and workspace-side removal for an OVERRIDE component.
84
+ * Engine-side and workspace-side removal for an override component.
84
85
  *
85
86
  * Runs inside the caller's rollback journal rather than opening its own, so
86
87
  * a failure anywhere in the remove still restores the whole operation as a
@@ -90,10 +91,10 @@ export async function performOverrideRemovalMutations(args) {
90
91
  const { name, paths, furnacePaths, freshConfig, freshState, ftlDir, journal } = args;
91
92
  const overrideConfig = freshConfig.overrides[name];
92
93
  const dir = join(furnacePaths.overridesDir, name);
93
- // Restore deployed engine files BEFORE removing the workspace
94
+ // Restore deployed engine files before removing the workspace
94
95
  // directory. The restore set is the union of (a) files currently in
95
- // the workspace and (b) files state.json says we deployed last time
96
- // — without (b), source-side deletions would orphan engine copies
96
+ // the workspace and (b) files state.json says we deployed last time.
97
+ // Without (b), source-side deletions would orphan engine copies
97
98
  // that this command can never see again.
98
99
  if (overrideConfig?.basePath) {
99
100
  const previousKeys = Object.keys(extractComponentChecksums(freshState.appliedChecksums, 'override', name));
@@ -112,8 +113,8 @@ export async function performOverrideRemovalMutations(args) {
112
113
  }
113
114
  }
114
115
  /**
115
- * Engine-side and workspace-side removal for a CUSTOM component.
116
- * Sibling of {@link performOverrideRemovalMutations}; see its note.
116
+ * Engine-side and workspace-side removal for a custom component.
117
+ * Sibling of {@link performOverrideRemovalMutations}. See its note.
117
118
  */
118
119
  export async function performCustomRemovalMutations(args) {
119
120
  const { projectRoot, name, paths, furnacePaths, freshConfig, ftlDir, journal } = args;
@@ -140,12 +141,12 @@ export async function performCustomRemovalMutations(args) {
140
141
  await removeDir(dir);
141
142
  info(`Deleted components/custom/${name}/`);
142
143
  }
143
- // Clean up deployed files in engine (per-file — see helper doc).
144
+ // Clean up deployed files in engine (per-file, see helper doc).
144
145
  if (customConfig?.targetPath) {
145
146
  await removeDeployedCustomFiles(projectRoot, paths.engine, name, customConfig.targetPath, journal);
146
147
  }
147
148
  // Localized components deploy a .ftl outside targetPath into the
148
- // shared Fluent tree; apply writes it, so remove must delete it too
149
+ // shared Fluent tree. Apply writes it, so remove must delete it too
149
150
  // or the locale payload is orphaned.
150
151
  if (customConfig?.localized) {
151
152
  const ftlRel = join(ftlDir, `${name}.ftl`);
@@ -154,12 +155,12 @@ export async function performCustomRemovalMutations(args) {
154
155
  await snapshotFile(journal, ftlPath);
155
156
  await removeFile(ftlPath);
156
157
  // `ftlRel` is a native join, so on Windows an interpolated
157
- // `engine/${ftlRel}` renders as `engine/toolkit\locales\...` — one
158
+ // `engine/${ftlRel}` renders as `engine/toolkit\locales\...`, one
158
159
  // message with both separators. Print the engine-relative form.
159
160
  info(`Deleted localized file engine/${normalizePathSlashes(ftlRel)}`);
160
161
  }
161
162
  // Drop the locale jar.mn chrome registration that `applyCustomFtlFile`
162
- // wrote during deploy — otherwise the engine is left with a
163
+ // wrote during deploy. Otherwise the engine is left with a
163
164
  // `locale/.../${name}.ftl` entry pointing at a file just deleted, which
164
165
  // breaks the next package-manifest validation.
165
166
  await removeCustomFtlJarMnEntry(paths.engine, `${name}.ftl`, ftlDir, customConfig, journal);
@@ -10,7 +10,7 @@ export declare function dropChecksumsByPrefix(state: FurnaceState, prefix: strin
10
10
  * Per-file, never a recursive `removeDir` of the whole directory: nothing
11
11
  * stops two components from sharing a targetPath (or a hand-edited config
12
12
  * from pointing at an upstream-shared directory), and the recursive delete
13
- * permanently destroyed the co-located files on success — the rollback
13
+ * permanently destroyed the co-located files on success. The rollback
14
14
  * journal only protects the failure path. Deployed files come from the
15
15
  * component's state checksums, falling back to the conventional
16
16
  * `<name>.{mjs,css,ftl}` set when state carries no record (cleared by a
@@ -24,7 +24,7 @@ export function dropChecksumsByPrefix(state, prefix) {
24
24
  * Per-file, never a recursive `removeDir` of the whole directory: nothing
25
25
  * stops two components from sharing a targetPath (or a hand-edited config
26
26
  * from pointing at an upstream-shared directory), and the recursive delete
27
- * permanently destroyed the co-located files on success — the rollback
27
+ * permanently destroyed the co-located files on success. The rollback
28
28
  * journal only protects the failure path. Deployed files come from the
29
29
  * component's state checksums, falling back to the conventional
30
30
  * `<name>.{mjs,css,ftl}` set when state carries no record (cleared by a
@@ -218,7 +218,7 @@ async function cleanupCustomMochikitTestFiles(name, projectRoot, journal) {
218
218
  * leaves an operator who ran `furnace create --with-tests --xpcshell`
219
219
  * followed by `furnace remove` with orphan `xpcshell.toml` +
220
220
  * `test_<name>_packaged.js` files still referencing the removed component.
221
- * This pass mirrors the mochitest one — snapshot before removal,
221
+ * This pass mirrors the mochitest one: snapshot before removal,
222
222
  * warn-and-continue semantics, explicit summary on partial failures.
223
223
  */
224
224
  async function cleanupCustomXpcshellTestFiles(name, projectRoot, journal) {
@@ -307,7 +307,7 @@ async function confirmFurnaceRemove(name, type, options, isInteractive) {
307
307
  }
308
308
  /**
309
309
  * Enforces the engine-as-git precondition for both override and custom
310
- * removals. Runs BEFORE the lock is acquired or a journal is registered so
310
+ * removals. Runs before the lock is acquired or a journal is registered so
311
311
  * the failure path does not involve any rollback infrastructure.
312
312
  */
313
313
  async function requireGitEngineForRemove(type, name, engineDir) {
@@ -10,7 +10,7 @@ export function updateBrowserChromeTestContent(content, oldName, newName, binary
10
10
  const newUnderscored = newName.replace(/-/g, '_');
11
11
  const oldTestStem = deriveTestStem(oldName, binaryName);
12
12
  const newTestStem = deriveTestStem(newName, binaryName);
13
- // ONE pass over the content, not four chained `.replace()` calls.
13
+ // One pass over the content, instead of four chained `.replace()` calls.
14
14
  //
15
15
  // Chaining let each rule see the previous rule's output. Renaming
16
16
  // `acme-widget` to `acme-widget-v2` rewrote `test_acme_widget_defined` to
@@ -23,12 +23,12 @@ export function updateBrowserChromeTestContent(content, oldName, newName, binary
23
23
  // alternative that matches at a given position.
24
24
  const alternatives = [
25
25
  // The stem is a short bare fragment (`moz-` and binary prefixes stripped,
26
- // hyphens underscored) — `panel` for `moz-panel`. Matching it loose, even
26
+ // hyphens underscored), so `panel` for `moz-panel`. Matching it loose, even
27
27
  // with hyphen guards, rewrote unrelated underscore-delimited identifiers
28
28
  // such as `test_panel_group_integration`, because `_` must stay a legal
29
29
  // neighbour for the generated name to match at all. The scaffold emits the
30
30
  // stem in exactly one shape, so anchor to that shape instead of guessing
31
- // from boundaries — with its own guards, so the anchored shape cannot
31
+ // from boundaries. The anchored shape carries its own guards so it cannot
32
32
  // match inside a longer identifier (`mytest_panel_defined_extra`).
33
33
  {
34
34
  pattern: `(?<![\\w-])test_${escapeRegex(oldTestStem)}_defined(?![\\w-])`,
@@ -37,10 +37,10 @@ export function updateBrowserChromeTestContent(content, oldName, newName, binary
37
37
  // Word-boundary-aware, matching `furnace/rename.ts` and
38
38
  // `rename-xpcshell.ts`: without the guards a rename of `moz-panel` rewrote
39
39
  // `moz-panel-group`. `_` stays a legal neighbour for the underscored form
40
- // because it is deliberately embedded in generated identifiers; `-` does
40
+ // because it is embedded in generated identifiers on purpose. `-` is
41
41
  // not.
42
42
  //
43
- // Skipped when the underscored form IS the tag name (a hyphen-less
43
+ // Skipped when the underscored form is the tag name (a hyphen-less
44
44
  // component): both rules then match the same text and this one would win
45
45
  // on order, substituting `newUnderscored` where the tag `newName` was
46
46
  // meant. The stem rule still covers the one generated identifier shape.
@@ -55,9 +55,10 @@ export function updateBrowserChromeTestContent(content, oldName, newName, binary
55
55
  { pattern: `(?<![\\w-])${escapeRegex(oldName)}(?![\\w-])`, to: newName },
56
56
  { pattern: `\\b${escapeRegex(oldClassName)}\\b`, to: newClassName },
57
57
  ];
58
- // Each alternative is its own capture group and the replacement is picked by
59
- // the group that matched — not by matched TEXT, which is ambiguous whenever
60
- // two rules can produce the same match with different substitutions.
58
+ // Each alternative is its own capture group and the replacement is picked
59
+ // by the group that matched, rather than by the matched text, which is
60
+ // ambiguous whenever two rules can produce the same match with different
61
+ // substitutions.
61
62
  const combined = new RegExp(alternatives.map(({ pattern }) => `(${pattern})`).join('|'), 'g');
62
63
  return content.replace(combined, (matched, ...args) => {
63
64
  const groups = args.slice(0, alternatives.length);
@@ -8,7 +8,7 @@
8
8
  * so word-boundary occurrences of the old tag / underscored name map to the
9
9
  * new ones.
10
10
  *
11
- * Extracted to keep `rename.ts` under the per-file LOC budget — it already
11
+ * Extracted to keep `rename.ts` under the per-file LOC budget. It already
12
12
  * carries mochikit + browser-mochitest + FTL handling.
13
13
  */
14
14
  import { type RollbackJournal } from '../../core/furnace-rollback.js';
@@ -19,7 +19,7 @@ import { type RollbackJournal } from '../../core/furnace-rollback.js';
19
19
  * old tag / old underscored name inside the test body.
20
20
  *
21
21
  * Best-effort: any failure logs a warning through the shared logger
22
- * but never throws — the component rename itself has already succeeded
22
+ * but never throws. The component rename itself has already succeeded
23
23
  * at this point, and blocking on a test rewrite would leave the
24
24
  * operator with a half-renamed component.
25
25
  *
@@ -9,7 +9,7 @@
9
9
  * so word-boundary occurrences of the old tag / underscored name map to the
10
10
  * new ones.
11
11
  *
12
- * Extracted to keep `rename.ts` under the per-file LOC budget — it already
12
+ * Extracted to keep `rename.ts` under the per-file LOC budget. It already
13
13
  * carries mochikit + browser-mochitest + FTL handling.
14
14
  */
15
15
  import { readdir } from 'node:fs/promises';
@@ -28,7 +28,7 @@ import { escapeRegex } from '../../utils/regex.js';
28
28
  * old tag / old underscored name inside the test body.
29
29
  *
30
30
  * Best-effort: any failure logs a warning through the shared logger
31
- * but never throws — the component rename itself has already succeeded
31
+ * but never throws. The component rename itself has already succeeded
32
32
  * at this point, and blocking on a test rewrite would leave the
33
33
  * operator with a half-renamed component.
34
34
  *
@@ -59,7 +59,7 @@ export async function renameXpcshellTestFiles(engineDir, projectRoot, oldName, n
59
59
  const newTestFileName = `test_${newUnderscored}_packaged.js`;
60
60
  try {
61
61
  // Journal the new scaffold dir + files so rollback (including the
62
- // SIGINT path) removes them; only the old-name files were journaled
62
+ // SIGINT path) removes them. Only the old-name files were journaled
63
63
  // before, so a failed rename stranded the new-name scaffold.
64
64
  recordCreatedDir(journal, newScaffoldDir);
65
65
  await ensureDir(newScaffoldDir);