@hominis/fireforge 0.45.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 (662) hide show
  1. package/CHANGELOG.md +409 -446
  2. package/dist/bin/fireforge.d.ts +1 -1
  3. package/dist/bin/fireforge.js +21 -15
  4. package/dist/build-info.json +4 -4
  5. package/dist/src/cli-usage-error.d.ts +46 -0
  6. package/dist/src/cli-usage-error.js +81 -0
  7. package/dist/src/cli.d.ts +7 -2
  8. package/dist/src/cli.js +47 -47
  9. package/dist/src/commands/bootstrap-checks.js +2 -1
  10. package/dist/src/commands/bootstrap.js +3 -4
  11. package/dist/src/commands/build.js +27 -17
  12. package/dist/src/commands/config.js +9 -9
  13. package/dist/src/commands/destructive-decision.d.ts +19 -0
  14. package/dist/src/commands/destructive-decision.js +31 -0
  15. package/dist/src/commands/discard.js +5 -5
  16. package/dist/src/commands/doctor-check-core.d.ts +4 -10
  17. package/dist/src/commands/doctor-check-core.js +0 -8
  18. package/dist/src/commands/doctor-external-toolchains.js +2 -2
  19. package/dist/src/commands/doctor-furnace-config-sync.d.ts +2 -2
  20. package/dist/src/commands/doctor-furnace-config-sync.js +20 -20
  21. package/dist/src/commands/doctor-furnace-jar.d.ts +1 -1
  22. package/dist/src/commands/doctor-furnace-jar.js +1 -1
  23. package/dist/src/commands/doctor-furnace.js +22 -22
  24. package/dist/src/commands/doctor-orphaned-harness.d.ts +10 -17
  25. package/dist/src/commands/doctor-orphaned-harness.js +14 -23
  26. package/dist/src/commands/doctor-patch-manifest.d.ts +2 -1
  27. package/dist/src/commands/doctor-patch-manifest.js +7 -6
  28. package/dist/src/commands/doctor-post-rebase-audit.js +3 -3
  29. package/dist/src/commands/doctor-source-pin.d.ts +12 -12
  30. package/dist/src/commands/doctor-source-pin.js +14 -14
  31. package/dist/src/commands/doctor-working-tree.d.ts +3 -3
  32. package/dist/src/commands/doctor-working-tree.js +3 -3
  33. package/dist/src/commands/doctor.d.ts +3 -1
  34. package/dist/src/commands/doctor.js +15 -16
  35. package/dist/src/commands/download.js +50 -37
  36. package/dist/src/commands/export-all.js +29 -12
  37. package/dist/src/commands/export-flow.d.ts +5 -5
  38. package/dist/src/commands/export-flow.js +29 -59
  39. package/dist/src/commands/export-placement-conflicts.d.ts +3 -3
  40. package/dist/src/commands/export-placement-conflicts.js +12 -12
  41. package/dist/src/commands/export-placement-gate.d.ts +2 -2
  42. package/dist/src/commands/export-placement-gate.js +7 -13
  43. package/dist/src/commands/export-placement-policy.d.ts +1 -1
  44. package/dist/src/commands/export-placement-policy.js +4 -6
  45. package/dist/src/commands/export-shared.d.ts +51 -32
  46. package/dist/src/commands/export-shared.js +17 -32
  47. package/dist/src/commands/export.js +14 -5
  48. package/dist/src/commands/furnace/apply.js +16 -16
  49. package/dist/src/commands/furnace/authoring-config.d.ts +13 -0
  50. package/dist/src/commands/furnace/authoring-config.js +19 -0
  51. package/dist/src/commands/furnace/chrome-doc-remove.d.ts +1 -1
  52. package/dist/src/commands/furnace/chrome-doc-remove.js +2 -2
  53. package/dist/src/commands/furnace/chrome-doc-templates.d.ts +14 -14
  54. package/dist/src/commands/furnace/chrome-doc-templates.js +17 -17
  55. package/dist/src/commands/furnace/chrome-doc-tests.d.ts +2 -2
  56. package/dist/src/commands/furnace/chrome-doc-tests.js +4 -4
  57. package/dist/src/commands/furnace/chrome-doc.d.ts +8 -8
  58. package/dist/src/commands/furnace/chrome-doc.js +18 -18
  59. package/dist/src/commands/furnace/create-browser-test.d.ts +1 -1
  60. package/dist/src/commands/furnace/create-browser-test.js +7 -12
  61. package/dist/src/commands/furnace/create-dry-run.d.ts +4 -4
  62. package/dist/src/commands/furnace/create-dry-run.js +6 -9
  63. package/dist/src/commands/furnace/create-features.d.ts +2 -2
  64. package/dist/src/commands/furnace/create-features.js +2 -2
  65. package/dist/src/commands/furnace/create-mochikit.d.ts +4 -4
  66. package/dist/src/commands/furnace/create-mochikit.js +7 -7
  67. package/dist/src/commands/furnace/create-templates.d.ts +31 -15
  68. package/dist/src/commands/furnace/create-templates.js +20 -19
  69. package/dist/src/commands/furnace/create-xpcshell.d.ts +5 -5
  70. package/dist/src/commands/furnace/create-xpcshell.js +8 -8
  71. package/dist/src/commands/furnace/create.d.ts +1 -1
  72. package/dist/src/commands/furnace/create.js +35 -29
  73. package/dist/src/commands/furnace/deploy.js +15 -6
  74. package/dist/src/commands/furnace/diff.js +7 -7
  75. package/dist/src/commands/furnace/index.js +1 -1
  76. package/dist/src/commands/furnace/init.js +17 -16
  77. package/dist/src/commands/furnace/list.js +2 -2
  78. package/dist/src/commands/furnace/override.d.ts +1 -1
  79. package/dist/src/commands/furnace/override.js +43 -34
  80. package/dist/src/commands/furnace/preview.js +17 -17
  81. package/dist/src/commands/furnace/refresh.js +15 -7
  82. package/dist/src/commands/furnace/remove-mutations.d.ts +9 -10
  83. package/dist/src/commands/furnace/remove-mutations.js +19 -19
  84. package/dist/src/commands/furnace/remove-state.d.ts +1 -1
  85. package/dist/src/commands/furnace/remove-state.js +1 -1
  86. package/dist/src/commands/furnace/remove.js +4 -8
  87. package/dist/src/commands/furnace/rename-browser-test.js +10 -15
  88. package/dist/src/commands/furnace/rename-xpcshell.d.ts +2 -2
  89. package/dist/src/commands/furnace/rename-xpcshell.js +3 -3
  90. package/dist/src/commands/furnace/rename.js +36 -36
  91. package/dist/src/commands/furnace/scan.js +3 -3
  92. package/dist/src/commands/furnace/status.js +19 -16
  93. package/dist/src/commands/furnace/sync.js +6 -6
  94. package/dist/src/commands/furnace/test-file-name.d.ts +28 -0
  95. package/dist/src/commands/furnace/test-file-name.js +39 -0
  96. package/dist/src/commands/furnace/validate.js +11 -12
  97. package/dist/src/commands/furnace/validation-output.d.ts +21 -9
  98. package/dist/src/commands/furnace/validation-output.js +3 -8
  99. package/dist/src/commands/import.js +22 -29
  100. package/dist/src/commands/lint-per-patch.d.ts +2 -2
  101. package/dist/src/commands/lint-per-patch.js +27 -12
  102. package/dist/src/commands/lint-per-run-checkjs.d.ts +14 -15
  103. package/dist/src/commands/lint-per-run-checkjs.js +14 -15
  104. package/dist/src/commands/lint-report.d.ts +3 -3
  105. package/dist/src/commands/lint-report.js +4 -4
  106. package/dist/src/commands/lint.d.ts +5 -4
  107. package/dist/src/commands/lint.js +36 -36
  108. package/dist/src/commands/manifest.d.ts +4 -4
  109. package/dist/src/commands/manifest.js +1 -1
  110. package/dist/src/commands/package.js +4 -6
  111. package/dist/src/commands/patch/compact.d.ts +2 -2
  112. package/dist/src/commands/patch/compact.js +19 -20
  113. package/dist/src/commands/patch/delete.d.ts +1 -1
  114. package/dist/src/commands/patch/delete.js +23 -33
  115. package/dist/src/commands/patch/entry-projection.d.ts +13 -0
  116. package/dist/src/commands/patch/entry-projection.js +24 -0
  117. package/dist/src/commands/patch/lint-ignore.d.ts +3 -12
  118. package/dist/src/commands/patch/lint-ignore.js +33 -44
  119. package/dist/src/commands/patch/move-files-create.d.ts +2 -2
  120. package/dist/src/commands/patch/move-files-create.js +29 -15
  121. package/dist/src/commands/patch/move-files-into.d.ts +2 -2
  122. package/dist/src/commands/patch/move-files-into.js +41 -37
  123. package/dist/src/commands/patch/move-files.js +5 -14
  124. package/dist/src/commands/patch/patch-context.d.ts +1 -1
  125. package/dist/src/commands/patch/rename.d.ts +4 -4
  126. package/dist/src/commands/patch/rename.js +35 -49
  127. package/dist/src/commands/patch/reorder.js +35 -48
  128. package/dist/src/commands/patch/split-plan.d.ts +7 -8
  129. package/dist/src/commands/patch/split-plan.js +10 -13
  130. package/dist/src/commands/patch/split.d.ts +2 -2
  131. package/dist/src/commands/patch/split.js +50 -48
  132. package/dist/src/commands/patch/staged-dependency-validate.d.ts +1 -1
  133. package/dist/src/commands/patch/staged-dependency-validate.js +3 -3
  134. package/dist/src/commands/patch/staged-dependency.d.ts +1 -1
  135. package/dist/src/commands/patch/staged-dependency.js +22 -28
  136. package/dist/src/commands/patch/tier.d.ts +2 -2
  137. package/dist/src/commands/patch/tier.js +20 -30
  138. package/dist/src/commands/patch-rename-map.d.ts +19 -0
  139. package/dist/src/commands/patch-rename-map.js +36 -0
  140. package/dist/src/commands/pending-resolution.d.ts +15 -0
  141. package/dist/src/commands/pending-resolution.js +25 -0
  142. package/dist/src/commands/re-export-adjacent.d.ts +25 -3
  143. package/dist/src/commands/re-export-adjacent.js +40 -24
  144. package/dist/src/commands/re-export-bulk-scan.d.ts +3 -3
  145. package/dist/src/commands/re-export-bulk-scan.js +23 -27
  146. package/dist/src/commands/re-export-drift.d.ts +10 -10
  147. package/dist/src/commands/re-export-drift.js +33 -33
  148. package/dist/src/commands/re-export-files.d.ts +2 -3
  149. package/dist/src/commands/re-export-files.js +52 -44
  150. package/dist/src/commands/re-export-lint.d.ts +29 -30
  151. package/dist/src/commands/re-export-lint.js +36 -29
  152. package/dist/src/commands/re-export-options.d.ts +1 -1
  153. package/dist/src/commands/re-export-options.js +1 -1
  154. package/dist/src/commands/re-export-register.d.ts +1 -1
  155. package/dist/src/commands/re-export-register.js +1 -1
  156. package/dist/src/commands/re-export-scan.d.ts +1 -1
  157. package/dist/src/commands/re-export-scan.js +12 -9
  158. package/dist/src/commands/re-export-single.d.ts +23 -4
  159. package/dist/src/commands/re-export-single.js +39 -31
  160. package/dist/src/commands/re-export.js +35 -17
  161. package/dist/src/commands/rebase/abort.js +9 -14
  162. package/dist/src/commands/rebase/continue.js +20 -19
  163. package/dist/src/commands/rebase/index.d.ts +1 -1
  164. package/dist/src/commands/rebase/index.js +5 -5
  165. package/dist/src/commands/rebase/patch-loop.d.ts +2 -2
  166. package/dist/src/commands/rebase/patch-loop.js +20 -24
  167. package/dist/src/commands/register.js +5 -5
  168. package/dist/src/commands/reset.js +1 -1
  169. package/dist/src/commands/resolve.d.ts +2 -2
  170. package/dist/src/commands/resolve.js +21 -13
  171. package/dist/src/commands/run.d.ts +0 -13
  172. package/dist/src/commands/run.js +38 -51
  173. package/dist/src/commands/setup-support.d.ts +16 -4
  174. package/dist/src/commands/setup-support.js +20 -20
  175. package/dist/src/commands/setup.js +4 -10
  176. package/dist/src/commands/source.js +9 -2
  177. package/dist/src/commands/status-check.d.ts +3 -3
  178. package/dist/src/commands/status-check.js +6 -6
  179. package/dist/src/commands/status-json.d.ts +14 -13
  180. package/dist/src/commands/status-json.js +9 -8
  181. package/dist/src/commands/status-output.d.ts +3 -3
  182. package/dist/src/commands/status-output.js +5 -5
  183. package/dist/src/commands/status-ownership.d.ts +3 -3
  184. package/dist/src/commands/status-ownership.js +3 -3
  185. package/dist/src/commands/status.js +25 -26
  186. package/dist/src/commands/test-build-phase.d.ts +3 -3
  187. package/dist/src/commands/test-build-phase.js +48 -24
  188. package/dist/src/commands/test-diagnose.d.ts +1 -1
  189. package/dist/src/commands/test-diagnose.js +20 -20
  190. package/dist/src/commands/test-modes.d.ts +4 -4
  191. package/dist/src/commands/test-modes.js +4 -5
  192. package/dist/src/commands/test-register.js +5 -3
  193. package/dist/src/commands/test-run.d.ts +11 -11
  194. package/dist/src/commands/test-run.js +40 -33
  195. package/dist/src/commands/test-stale-gate.d.ts +12 -12
  196. package/dist/src/commands/test-stale-gate.js +17 -17
  197. package/dist/src/commands/test-verdict.d.ts +19 -5
  198. package/dist/src/commands/test-verdict.js +26 -11
  199. package/dist/src/commands/test.d.ts +3 -3
  200. package/dist/src/commands/test.js +73 -36
  201. package/dist/src/commands/token-coverage.js +3 -3
  202. package/dist/src/commands/token-list.d.ts +26 -0
  203. package/dist/src/commands/token-list.js +153 -0
  204. package/dist/src/commands/token.js +26 -10
  205. package/dist/src/commands/tree.js +26 -21
  206. package/dist/src/commands/typecheck.d.ts +6 -6
  207. package/dist/src/commands/typecheck.js +16 -16
  208. package/dist/src/commands/verify.d.ts +3 -3
  209. package/dist/src/commands/verify.js +10 -10
  210. package/dist/src/commands/watch.js +11 -11
  211. package/dist/src/commands/wire.js +17 -16
  212. package/dist/src/core/ast-utils.d.ts +7 -7
  213. package/dist/src/core/ast-utils.js +8 -8
  214. package/dist/src/core/branding.d.ts +5 -12
  215. package/dist/src/core/branding.js +6 -5
  216. package/dist/src/core/browser-wire.d.ts +1 -1
  217. package/dist/src/core/browser-wire.js +10 -7
  218. package/dist/src/core/build-audit-platform.d.ts +32 -3
  219. package/dist/src/core/build-audit-platform.js +153 -13
  220. package/dist/src/core/build-audit-registration.d.ts +5 -5
  221. package/dist/src/core/build-audit-registration.js +10 -9
  222. package/dist/src/core/build-audit-resolve.d.ts +5 -5
  223. package/dist/src/core/build-audit-resolve.js +6 -6
  224. package/dist/src/core/build-audit-skip.d.ts +57 -0
  225. package/dist/src/core/build-audit-skip.js +112 -0
  226. package/dist/src/core/build-audit-transforms.d.ts +2 -2
  227. package/dist/src/core/build-audit-transforms.js +3 -3
  228. package/dist/src/core/build-audit.d.ts +21 -8
  229. package/dist/src/core/build-audit.js +142 -40
  230. package/dist/src/core/build-baseline-types.d.ts +19 -18
  231. package/dist/src/core/build-baseline-types.js +1 -1
  232. package/dist/src/core/build-baseline.d.ts +48 -31
  233. package/dist/src/core/build-baseline.js +20 -43
  234. package/dist/src/core/build-jar-escalation.d.ts +8 -8
  235. package/dist/src/core/build-jar-escalation.js +18 -17
  236. package/dist/src/core/build-overwrite-guard.d.ts +4 -4
  237. package/dist/src/core/build-overwrite-guard.js +14 -14
  238. package/dist/src/core/build-prepare.d.ts +4 -12
  239. package/dist/src/core/build-prepare.js +22 -26
  240. package/dist/src/core/config-mutate.js +4 -4
  241. package/dist/src/core/config-paths.d.ts +2 -6
  242. package/dist/src/core/config-paths.js +4 -2
  243. package/dist/src/core/config-state.d.ts +0 -6
  244. package/dist/src/core/config-state.js +3 -21
  245. package/dist/src/core/config-validate-build-audit.d.ts +8 -0
  246. package/dist/src/core/config-validate-build-audit.js +80 -0
  247. package/dist/src/core/config-validate-file-size.d.ts +1 -1
  248. package/dist/src/core/config-validate-file-size.js +3 -3
  249. package/dist/src/core/config-validate-patch-policy.d.ts +2 -2
  250. package/dist/src/core/config-validate-patch-policy.js +3 -3
  251. package/dist/src/core/config-validate-test-toolchains.d.ts +2 -2
  252. package/dist/src/core/config-validate-test-toolchains.js +4 -5
  253. package/dist/src/core/config-validate.js +22 -12
  254. package/dist/src/core/config.d.ts +12 -12
  255. package/dist/src/core/config.js +21 -25
  256. package/dist/src/core/coverage-extend.d.ts +16 -16
  257. package/dist/src/core/coverage-extend.js +20 -20
  258. package/dist/src/core/destructive.d.ts +14 -14
  259. package/dist/src/core/destructive.js +9 -9
  260. package/dist/src/core/diff-hunks.d.ts +2 -2
  261. package/dist/src/core/diff-hunks.js +7 -7
  262. package/dist/src/core/discard-baseline.d.ts +10 -10
  263. package/dist/src/core/discard-baseline.js +22 -23
  264. package/dist/src/core/display-state.d.ts +11 -11
  265. package/dist/src/core/display-state.js +12 -12
  266. package/dist/src/core/engine-changes.d.ts +2 -2
  267. package/dist/src/core/engine-changes.js +2 -2
  268. package/dist/src/core/engine-precondition.d.ts +5 -13
  269. package/dist/src/core/engine-precondition.js +5 -10
  270. package/dist/src/core/engine-session-lock.d.ts +18 -18
  271. package/dist/src/core/engine-session-lock.js +50 -54
  272. package/dist/src/core/export-moved-code-shape.d.ts +7 -7
  273. package/dist/src/core/export-moved-code-shape.js +10 -10
  274. package/dist/src/core/file-lock-owner.d.ts +103 -0
  275. package/dist/src/core/file-lock-owner.js +259 -0
  276. package/dist/src/core/file-lock.d.ts +14 -19
  277. package/dist/src/core/file-lock.js +90 -128
  278. package/dist/src/core/firefox-cache.d.ts +13 -1
  279. package/dist/src/core/firefox-cache.js +61 -36
  280. package/dist/src/core/firefox-download.d.ts +15 -0
  281. package/dist/src/core/firefox-download.js +38 -22
  282. package/dist/src/core/firefox-extract.d.ts +8 -7
  283. package/dist/src/core/firefox-extract.js +45 -27
  284. package/dist/src/core/firefox.d.ts +34 -36
  285. package/dist/src/core/firefox.js +13 -44
  286. package/dist/src/core/furnace-apply-dry-run.d.ts +1 -6
  287. package/dist/src/core/furnace-apply-dry-run.js +2 -8
  288. package/dist/src/core/furnace-apply-ftl.d.ts +5 -5
  289. package/dist/src/core/furnace-apply-ftl.js +8 -8
  290. package/dist/src/core/furnace-apply-helpers.d.ts +9 -20
  291. package/dist/src/core/furnace-apply-helpers.js +28 -39
  292. package/dist/src/core/furnace-apply-output.js +1 -1
  293. package/dist/src/core/furnace-apply-overwrite-warn.d.ts +9 -9
  294. package/dist/src/core/furnace-apply-overwrite-warn.js +13 -11
  295. package/dist/src/core/furnace-apply-undeploy-actions.d.ts +1 -1
  296. package/dist/src/core/furnace-apply-undeploy-actions.js +1 -1
  297. package/dist/src/core/furnace-apply.d.ts +4 -4
  298. package/dist/src/core/furnace-apply.js +50 -29
  299. package/dist/src/core/furnace-checksum-utils.d.ts +5 -5
  300. package/dist/src/core/furnace-checksum-utils.js +5 -5
  301. package/dist/src/core/furnace-config-custom.d.ts +1 -1
  302. package/dist/src/core/furnace-config-custom.js +2 -2
  303. package/dist/src/core/furnace-config-order.js +1 -1
  304. package/dist/src/core/furnace-config-tokens.d.ts +3 -3
  305. package/dist/src/core/furnace-config-tokens.js +3 -3
  306. package/dist/src/core/furnace-config-validate.js +2 -2
  307. package/dist/src/core/furnace-config.d.ts +5 -5
  308. package/dist/src/core/furnace-config.js +40 -53
  309. package/dist/src/core/furnace-constants.d.ts +6 -6
  310. package/dist/src/core/furnace-constants.js +9 -8
  311. package/dist/src/core/furnace-css-fragments.d.ts +6 -6
  312. package/dist/src/core/furnace-css-fragments.js +11 -11
  313. package/dist/src/core/furnace-dir-entry.d.ts +20 -0
  314. package/dist/src/core/furnace-dir-entry.js +21 -0
  315. package/dist/src/core/furnace-jsconfig.d.ts +7 -7
  316. package/dist/src/core/furnace-jsconfig.js +22 -20
  317. package/dist/src/core/furnace-operation.d.ts +22 -19
  318. package/dist/src/core/furnace-operation.js +38 -34
  319. package/dist/src/core/furnace-precondition.d.ts +10 -10
  320. package/dist/src/core/furnace-precondition.js +8 -8
  321. package/dist/src/core/furnace-refresh.d.ts +18 -6
  322. package/dist/src/core/furnace-refresh.js +5 -8
  323. package/dist/src/core/furnace-registration-ast.d.ts +2 -3
  324. package/dist/src/core/furnace-registration-ast.js +9 -12
  325. package/dist/src/core/furnace-registration-remove.d.ts +4 -4
  326. package/dist/src/core/furnace-registration-remove.js +6 -6
  327. package/dist/src/core/furnace-registration-validate.d.ts +2 -2
  328. package/dist/src/core/furnace-registration-validate.js +2 -2
  329. package/dist/src/core/furnace-registration.d.ts +7 -6
  330. package/dist/src/core/furnace-registration.js +29 -36
  331. package/dist/src/core/furnace-rollback.d.ts +1 -1
  332. package/dist/src/core/furnace-rollback.js +5 -5
  333. package/dist/src/core/furnace-scanner.js +3 -6
  334. package/dist/src/core/furnace-stale-export.d.ts +17 -16
  335. package/dist/src/core/furnace-stale-export.js +16 -15
  336. package/dist/src/core/furnace-staleness.d.ts +2 -2
  337. package/dist/src/core/furnace-staleness.js +2 -2
  338. package/dist/src/core/furnace-state-persist.d.ts +12 -12
  339. package/dist/src/core/furnace-state-persist.js +10 -10
  340. package/dist/src/core/furnace-step-errors.d.ts +6 -6
  341. package/dist/src/core/furnace-step-errors.js +6 -6
  342. package/dist/src/core/furnace-validate-accessibility.js +14 -14
  343. package/dist/src/core/furnace-validate-compatibility.js +9 -9
  344. package/dist/src/core/furnace-validate-registration.d.ts +2 -2
  345. package/dist/src/core/furnace-validate-registration.js +18 -20
  346. package/dist/src/core/furnace-validate-structure.d.ts +1 -1
  347. package/dist/src/core/furnace-validate-structure.js +4 -4
  348. package/dist/src/core/furnace-validate.js +9 -9
  349. package/dist/src/core/furnace-version-drift.d.ts +5 -5
  350. package/dist/src/core/furnace-version-drift.js +5 -5
  351. package/dist/src/core/git-base.d.ts +6 -4
  352. package/dist/src/core/git-base.js +29 -7
  353. package/dist/src/core/git-diff-new-file.d.ts +40 -0
  354. package/dist/src/core/git-diff-new-file.js +119 -0
  355. package/dist/src/core/git-diff.d.ts +13 -13
  356. package/dist/src/core/git-diff.js +121 -189
  357. package/dist/src/core/git-file-ops.d.ts +6 -13
  358. package/dist/src/core/git-file-ops.js +11 -35
  359. package/dist/src/core/git-readonly-index.d.ts +12 -14
  360. package/dist/src/core/git-readonly-index.js +12 -16
  361. package/dist/src/core/git-status.d.ts +9 -2
  362. package/dist/src/core/git-status.js +23 -11
  363. package/dist/src/core/git.d.ts +3 -9
  364. package/dist/src/core/git.js +28 -57
  365. package/dist/src/core/harness-orphans.d.ts +17 -17
  366. package/dist/src/core/harness-orphans.js +28 -27
  367. package/dist/src/core/history-log.d.ts +19 -0
  368. package/dist/src/core/history-log.js +29 -0
  369. package/dist/src/core/license-headers.d.ts +19 -18
  370. package/dist/src/core/license-headers.js +29 -28
  371. package/dist/src/core/mach-build-artifacts.d.ts +21 -21
  372. package/dist/src/core/mach-build-artifacts.js +23 -23
  373. package/dist/src/core/mach-error-hints.d.ts +5 -10
  374. package/dist/src/core/mach-error-hints.js +14 -14
  375. package/dist/src/core/mach-known-noise-filter.d.ts +42 -38
  376. package/dist/src/core/mach-known-noise-filter.js +57 -56
  377. package/dist/src/core/mach-mozconfig.d.ts +6 -6
  378. package/dist/src/core/mach-mozconfig.js +17 -16
  379. package/dist/src/core/mach-python.d.ts +3 -0
  380. package/dist/src/core/mach-python.js +13 -7
  381. package/dist/src/core/mach-resource-shim.d.ts +24 -12
  382. package/dist/src/core/mach-resource-shim.js +124 -21
  383. package/dist/src/core/mach.d.ts +59 -73
  384. package/dist/src/core/mach.js +47 -115
  385. package/dist/src/core/marionette-port.d.ts +15 -30
  386. package/dist/src/core/marionette-port.js +46 -89
  387. package/dist/src/core/marionette-preflight.d.ts +6 -6
  388. package/dist/src/core/marionette-preflight.js +32 -50
  389. package/dist/src/core/markdown-table.d.ts +9 -9
  390. package/dist/src/core/markdown-table.js +14 -14
  391. package/dist/src/core/mochitest-server-port.d.ts +8 -8
  392. package/dist/src/core/mochitest-server-port.js +17 -17
  393. package/dist/src/core/module-resolution-preflight.d.ts +8 -8
  394. package/dist/src/core/module-resolution-preflight.js +11 -11
  395. package/dist/src/core/moz-manifest-helpers.d.ts +7 -7
  396. package/dist/src/core/moz-manifest-helpers.js +7 -7
  397. package/dist/src/core/moz-manifest-register.d.ts +1 -1
  398. package/dist/src/core/moz-manifest-register.js +2 -2
  399. package/dist/src/core/moz-manifest-rules.js +46 -42
  400. package/dist/src/core/moz-manifest-tokenizers.js +1 -1
  401. package/dist/src/core/ownership-table.d.ts +5 -5
  402. package/dist/src/core/ownership-table.js +7 -7
  403. package/dist/src/core/parser-fallback.d.ts +3 -3
  404. package/dist/src/core/parser-fallback.js +3 -3
  405. package/dist/src/core/patch-apply-fuzz.d.ts +5 -5
  406. package/dist/src/core/patch-apply-fuzz.js +13 -13
  407. package/dist/src/core/patch-apply.d.ts +13 -14
  408. package/dist/src/core/patch-apply.js +36 -42
  409. package/dist/src/core/patch-export-coverage.d.ts +0 -9
  410. package/dist/src/core/patch-export-coverage.js +1 -30
  411. package/dist/src/core/patch-export-update.d.ts +21 -4
  412. package/dist/src/core/patch-export-update.js +7 -6
  413. package/dist/src/core/patch-export.d.ts +20 -30
  414. package/dist/src/core/patch-export.js +55 -77
  415. package/dist/src/core/patch-files.d.ts +0 -4
  416. package/dist/src/core/patch-files.js +0 -11
  417. package/dist/src/core/patch-identifier-suggest.d.ts +1 -1
  418. package/dist/src/core/patch-identifier-suggest.js +4 -4
  419. package/dist/src/core/patch-lint-binary.d.ts +12 -18
  420. package/dist/src/core/patch-lint-cache.d.ts +18 -2
  421. package/dist/src/core/patch-lint-cache.js +16 -19
  422. package/dist/src/core/patch-lint-checkjs.d.ts +55 -38
  423. package/dist/src/core/patch-lint-checkjs.js +78 -64
  424. package/dist/src/core/patch-lint-chrome-jsdoc.d.ts +8 -9
  425. package/dist/src/core/patch-lint-chrome-jsdoc.js +10 -11
  426. package/dist/src/core/patch-lint-creators.d.ts +5 -9
  427. package/dist/src/core/patch-lint-creators.js +3 -3
  428. package/dist/src/core/patch-lint-cross.d.ts +27 -19
  429. package/dist/src/core/patch-lint-cross.js +67 -110
  430. package/dist/src/core/patch-lint-css.d.ts +1 -1
  431. package/dist/src/core/patch-lint-css.js +15 -11
  432. package/dist/src/core/patch-lint-diff-tag.d.ts +5 -5
  433. package/dist/src/core/patch-lint-diff-tag.js +5 -5
  434. package/dist/src/core/patch-lint-diff.d.ts +4 -4
  435. package/dist/src/core/patch-lint-diff.js +4 -4
  436. package/dist/src/core/patch-lint-file-size.d.ts +3 -3
  437. package/dist/src/core/patch-lint-file-size.js +6 -6
  438. package/dist/src/core/patch-lint-forward-registration.d.ts +58 -0
  439. package/dist/src/core/patch-lint-forward-registration.js +210 -0
  440. package/dist/src/core/patch-lint-jsdoc.d.ts +2 -2
  441. package/dist/src/core/patch-lint-jsdoc.js +46 -46
  442. package/dist/src/core/patch-lint-module-registration.d.ts +3 -9
  443. package/dist/src/core/patch-lint-module-registration.js +1 -1
  444. package/dist/src/core/patch-lint-mozbuild.d.ts +1 -1
  445. package/dist/src/core/patch-lint-mozbuild.js +10 -10
  446. package/dist/src/core/patch-lint-observer.d.ts +3 -3
  447. package/dist/src/core/patch-lint-observer.js +7 -7
  448. package/dist/src/core/patch-lint-ownership.d.ts +6 -6
  449. package/dist/src/core/patch-lint-ownership.js +6 -6
  450. package/dist/src/core/patch-lint-prettier.d.ts +6 -6
  451. package/dist/src/core/patch-lint-prettier.js +7 -7
  452. package/dist/src/core/patch-lint-queue-types.d.ts +60 -0
  453. package/dist/src/core/patch-lint-queue-types.js +12 -0
  454. package/dist/src/core/patch-lint-staged-registration.d.ts +61 -0
  455. package/dist/src/core/patch-lint-staged-registration.js +90 -0
  456. package/dist/src/core/patch-lint-unmanaged-companion.d.ts +23 -23
  457. package/dist/src/core/patch-lint-unmanaged-companion.js +26 -26
  458. package/dist/src/core/patch-lint.d.ts +41 -35
  459. package/dist/src/core/patch-lint.js +52 -49
  460. package/dist/src/core/patch-lock.d.ts +1 -1
  461. package/dist/src/core/patch-lock.js +11 -11
  462. package/dist/src/core/patch-manifest-consistency.d.ts +7 -7
  463. package/dist/src/core/patch-manifest-consistency.js +16 -17
  464. package/dist/src/core/patch-manifest-files-affected.d.ts +1 -1
  465. package/dist/src/core/patch-manifest-files-affected.js +3 -3
  466. package/dist/src/core/patch-manifest-io.d.ts +14 -14
  467. package/dist/src/core/patch-manifest-io.js +35 -34
  468. package/dist/src/core/patch-manifest-query.d.ts +1 -1
  469. package/dist/src/core/patch-manifest-query.js +4 -4
  470. package/dist/src/core/patch-manifest-resolve.d.ts +5 -5
  471. package/dist/src/core/patch-manifest-resolve.js +7 -7
  472. package/dist/src/core/patch-manifest-validate.js +3 -3
  473. package/dist/src/core/patch-manifest.d.ts +2 -2
  474. package/dist/src/core/patch-manifest.js +2 -2
  475. package/dist/src/core/patch-parse.d.ts +32 -21
  476. package/dist/src/core/patch-parse.js +40 -15
  477. package/dist/src/core/patch-policy.js +15 -27
  478. package/dist/src/core/patch-registration-refs.d.ts +4 -4
  479. package/dist/src/core/patch-registration-refs.js +7 -7
  480. package/dist/src/core/patch-source-metadata.d.ts +1 -3
  481. package/dist/src/core/patch-source-metadata.js +0 -4
  482. package/dist/src/core/patch-transform.d.ts +8 -16
  483. package/dist/src/core/patch-transform.js +13 -23
  484. package/dist/src/core/process-cpu-time.d.ts +1 -1
  485. package/dist/src/core/process-cpu-time.js +6 -6
  486. package/dist/src/core/rebase-session.d.ts +9 -15
  487. package/dist/src/core/rebase-session.js +13 -25
  488. package/dist/src/core/register-browser-content.js +3 -2
  489. package/dist/src/core/register-browser-test.js +2 -1
  490. package/dist/src/core/register-module.js +2 -1
  491. package/dist/src/core/register-result.d.ts +1 -1
  492. package/dist/src/core/register-result.js +1 -1
  493. package/dist/src/core/register-scaffold.d.ts +2 -2
  494. package/dist/src/core/register-scaffold.js +8 -7
  495. package/dist/src/core/register-shared-css.d.ts +3 -3
  496. package/dist/src/core/register-shared-css.js +6 -5
  497. package/dist/src/core/register-xpcshell-test.d.ts +2 -2
  498. package/dist/src/core/register-xpcshell-test.js +2 -2
  499. package/dist/src/core/run-log-redact.d.ts +38 -0
  500. package/dist/src/core/run-log-redact.js +69 -0
  501. package/dist/src/core/run-log.d.ts +21 -10
  502. package/dist/src/core/run-log.js +76 -27
  503. package/dist/src/core/shared-ftl.d.ts +2 -2
  504. package/dist/src/core/shared-ftl.js +6 -6
  505. package/dist/src/core/signal-critical.d.ts +2 -2
  506. package/dist/src/core/signal-critical.js +4 -6
  507. package/dist/src/core/smoke-patterns.d.ts +5 -6
  508. package/dist/src/core/smoke-patterns.js +15 -20
  509. package/dist/src/core/state-file.d.ts +15 -4
  510. package/dist/src/core/state-file.js +14 -1
  511. package/dist/src/core/status-binary.d.ts +8 -8
  512. package/dist/src/core/status-binary.js +12 -12
  513. package/dist/src/core/status-classify.d.ts +17 -17
  514. package/dist/src/core/status-classify.js +13 -12
  515. package/dist/src/core/test-changed-prefs.d.ts +12 -12
  516. package/dist/src/core/test-changed-prefs.js +40 -25
  517. package/dist/src/core/test-harness-crash.d.ts +39 -39
  518. package/dist/src/core/test-harness-crash.js +69 -69
  519. package/dist/src/core/test-harness-output.d.ts +7 -7
  520. package/dist/src/core/test-harness-output.js +7 -7
  521. package/dist/src/core/test-harness-verdict-notes.d.ts +13 -14
  522. package/dist/src/core/test-harness-verdict-notes.js +4 -4
  523. package/dist/src/core/test-path-scope.d.ts +8 -8
  524. package/dist/src/core/test-path-scope.js +11 -11
  525. package/dist/src/core/test-stale-check.d.ts +22 -23
  526. package/dist/src/core/test-stale-check.js +31 -30
  527. package/dist/src/core/test-stale-symlink.d.ts +1 -1
  528. package/dist/src/core/test-stale-symlink.js +1 -1
  529. package/dist/src/core/test-stall-triage.d.ts +9 -9
  530. package/dist/src/core/test-stall-triage.js +22 -22
  531. package/dist/src/core/test-xpcshell-retry.d.ts +26 -7
  532. package/dist/src/core/test-xpcshell-retry.js +14 -11
  533. package/dist/src/core/token-category.d.ts +35 -2
  534. package/dist/src/core/token-category.js +67 -58
  535. package/dist/src/core/token-coverage.js +4 -5
  536. package/dist/src/core/token-dark-mode.d.ts +9 -9
  537. package/dist/src/core/token-dark-mode.js +13 -25
  538. package/dist/src/core/token-docs.d.ts +1 -1
  539. package/dist/src/core/token-inventory.d.ts +56 -0
  540. package/dist/src/core/token-inventory.js +109 -0
  541. package/dist/src/core/token-manager.d.ts +4 -4
  542. package/dist/src/core/token-manager.js +22 -22
  543. package/dist/src/core/token-scaffold.d.ts +4 -4
  544. package/dist/src/core/token-scaffold.js +4 -4
  545. package/dist/src/core/token-variant.d.ts +14 -14
  546. package/dist/src/core/token-variant.js +52 -53
  547. package/dist/src/core/toolchain-preflight.d.ts +15 -15
  548. package/dist/src/core/toolchain-preflight.js +23 -23
  549. package/dist/src/core/tree-cow.d.ts +3 -5
  550. package/dist/src/core/tree-cow.js +8 -8
  551. package/dist/src/core/tree-guard.d.ts +3 -3
  552. package/dist/src/core/tree-guard.js +23 -23
  553. package/dist/src/core/tree-store.d.ts +15 -15
  554. package/dist/src/core/tree-store.js +39 -38
  555. package/dist/src/core/typecheck-shim.d.ts +16 -15
  556. package/dist/src/core/typecheck-shim.js +26 -25
  557. package/dist/src/core/typecheck.d.ts +12 -12
  558. package/dist/src/core/typecheck.js +33 -33
  559. package/dist/src/core/wire-destroy.d.ts +2 -2
  560. package/dist/src/core/wire-destroy.js +5 -5
  561. package/dist/src/core/wire-dom-fragment.d.ts +3 -3
  562. package/dist/src/core/wire-dom-fragment.js +12 -23
  563. package/dist/src/core/wire-init.d.ts +2 -2
  564. package/dist/src/core/wire-init.js +7 -7
  565. package/dist/src/core/wire-subscript.d.ts +1 -1
  566. package/dist/src/core/wire-subscript.js +3 -3
  567. package/dist/src/core/wire-utils.d.ts +9 -9
  568. package/dist/src/core/wire-utils.js +16 -28
  569. package/dist/src/core/xpcshell-appdir.d.ts +20 -20
  570. package/dist/src/core/xpcshell-appdir.js +28 -30
  571. package/dist/src/core/xpcshell-profile-dir.d.ts +3 -3
  572. package/dist/src/core/xpcshell-profile-dir.js +7 -7
  573. package/dist/src/errors/base.d.ts +69 -16
  574. package/dist/src/errors/base.js +95 -26
  575. package/dist/src/errors/build.d.ts +6 -6
  576. package/dist/src/errors/build.js +26 -34
  577. package/dist/src/errors/codes.d.ts +10 -10
  578. package/dist/src/errors/codes.js +10 -10
  579. package/dist/src/errors/config.d.ts +0 -14
  580. package/dist/src/errors/config.js +13 -34
  581. package/dist/src/errors/download.d.ts +13 -0
  582. package/dist/src/errors/download.js +53 -24
  583. package/dist/src/errors/furnace.d.ts +2 -2
  584. package/dist/src/errors/furnace.js +8 -9
  585. package/dist/src/errors/git.d.ts +9 -9
  586. package/dist/src/errors/git.js +21 -31
  587. package/dist/src/errors/patch.d.ts +3 -3
  588. package/dist/src/errors/patch.js +11 -13
  589. package/dist/src/errors/rebase.d.ts +1 -1
  590. package/dist/src/errors/rebase.js +8 -8
  591. package/dist/src/errors/run.d.ts +1 -1
  592. package/dist/src/errors/run.js +1 -1
  593. package/dist/src/index.d.ts +4 -4
  594. package/dist/src/index.js +4 -4
  595. package/dist/src/types/commands/options.d.ts +155 -200
  596. package/dist/src/types/commands/patches.d.ts +19 -19
  597. package/dist/src/types/commands/project.d.ts +3 -3
  598. package/dist/src/types/config.d.ts +52 -19
  599. package/dist/src/types/furnace.d.ts +17 -17
  600. package/dist/src/types/index.d.ts +0 -1
  601. package/dist/src/types/json.d.ts +3 -3
  602. package/dist/src/types/json.js +2 -2
  603. package/dist/src/types/typecheck.d.ts +3 -3
  604. package/dist/src/utils/assert.d.ts +4 -16
  605. package/dist/src/utils/assert.js +7 -24
  606. package/dist/src/utils/build-info.d.ts +6 -6
  607. package/dist/src/utils/build-info.js +6 -6
  608. package/dist/src/utils/child-env.d.ts +7 -6
  609. package/dist/src/utils/child-env.js +5 -5
  610. package/dist/src/utils/concurrency.d.ts +2 -2
  611. package/dist/src/utils/concurrency.js +2 -2
  612. package/dist/src/utils/elapsed.js +10 -1
  613. package/dist/src/utils/errors.d.ts +8 -8
  614. package/dist/src/utils/errors.js +8 -8
  615. package/dist/src/utils/fs.d.ts +1 -1
  616. package/dist/src/utils/fs.js +15 -20
  617. package/dist/src/utils/hash.d.ts +12 -0
  618. package/dist/src/utils/hash.js +16 -0
  619. package/dist/src/utils/line-dispatch.d.ts +15 -0
  620. package/dist/src/utils/line-dispatch.js +48 -0
  621. package/dist/src/utils/logger.d.ts +4 -4
  622. package/dist/src/utils/logger.js +11 -11
  623. package/dist/src/utils/machine-output.js +2 -2
  624. package/dist/src/utils/options.d.ts +14 -20
  625. package/dist/src/utils/options.js +26 -27
  626. package/dist/src/utils/package-root.js +5 -14
  627. package/dist/src/utils/paths.d.ts +4 -4
  628. package/dist/src/utils/paths.js +4 -4
  629. package/dist/src/utils/platform.d.ts +0 -4
  630. package/dist/src/utils/process-group.d.ts +10 -9
  631. package/dist/src/utils/process-group.js +37 -36
  632. package/dist/src/utils/process.d.ts +70 -55
  633. package/dist/src/utils/process.js +129 -179
  634. package/dist/src/utils/ps-duration.d.ts +4 -4
  635. package/dist/src/utils/ps-duration.js +9 -9
  636. package/dist/src/utils/regex.d.ts +4 -4
  637. package/dist/src/utils/regex.js +7 -7
  638. package/dist/src/utils/sleep.d.ts +26 -0
  639. package/dist/src/utils/sleep.js +31 -0
  640. package/dist/src/utils/stdio-drain.d.ts +7 -7
  641. package/dist/src/utils/stdio-drain.js +8 -8
  642. package/dist/src/utils/validation.d.ts +12 -49
  643. package/dist/src/utils/validation.js +26 -36
  644. package/docs/README.md +2 -2
  645. package/docs/configuration.md +163 -69
  646. package/docs/exit-codes.md +66 -49
  647. package/docs/furnace.md +20 -19
  648. package/docs/lifecycle-invariants.md +414 -247
  649. package/docs/machine-output.md +58 -34
  650. package/docs/patch-workflow.md +48 -44
  651. package/docs/run-logs.md +72 -28
  652. package/docs/testing.md +105 -98
  653. package/docs/verification-trees.md +23 -22
  654. package/package.json +7 -6
  655. package/dist/src/commands/rebase.d.ts +0 -4
  656. package/dist/src/commands/rebase.js +0 -5
  657. package/dist/src/core/patch-artifact-normalize.d.ts +0 -21
  658. package/dist/src/core/patch-artifact-normalize.js +0 -24
  659. package/dist/src/core/patch-lint-reexports.d.ts +0 -7
  660. package/dist/src/core/patch-lint-reexports.js +0 -8
  661. package/dist/src/core/wire-targets.d.ts +0 -7
  662. package/dist/src/core/wire-targets.js +0 -8
@@ -12,7 +12,7 @@
12
12
  * Sentinel attribute emitted on every `furnace chrome-doc create`-scaffolded
13
13
  * root element. Platform modules (`DevToolsStartup`, `PageActions`,
14
14
  * `SessionStore`, `DownloadsButton`, …) that observe
15
- * `browser-delayed-startup-finished` and walk INTO the window assume the
15
+ * `browser-delayed-startup-finished` and walk into the window assume the
16
16
  * `browser.xhtml` DOM and throw on anything else. A fork-authored patch
17
17
  * to such a module can use `hasAttribute(...)` against this sentinel as
18
18
  * a cheap, fork-neutral guard to skip the walk on a custom chrome doc.
@@ -54,8 +54,8 @@ const FURNACE_CHROME_DOC_SENTINEL = 'data-furnace-chrome-doc';
54
54
  * the README "Platform module compatibility" section for the pattern.
55
55
  */
56
56
  export function generateChromeDocXhtml(name, withTitlebar, license) {
57
- // navigator:browser minimum set. Carrying every attribute together —
58
- // not just `windowtype` — lets a fork that uses the scaffold output
57
+ // navigator:browser minimum set. Carrying every attribute together, not
58
+ // just `windowtype`, lets a fork that uses the scaffold output
59
59
  // verbatim launch as a real main window: `customtitlebar` opts into the
60
60
  // platform-native title bar handling that pairs with the buttonbox
61
61
  // markup below, the explicit width/height avoid the OS-minimum first
@@ -99,21 +99,21 @@ export function generateChromeDocXhtml(name, withTitlebar, license) {
99
99
  `;
100
100
  }
101
101
  /**
102
- * browser.xhtml-like scaffold for the document that ships as the fork's MAIN
103
- * BROWSER WINDOW.
102
+ * browser.xhtml-like scaffold for the document that ships as the fork's main
103
+ * browser window.
104
104
  *
105
105
  * The generic dialog-shaped `<window>` scaffold is wrong for the
106
106
  * `tokenHostDocuments[0]` / BROWSER_CHROME_URL target: platform C++ reads
107
- * the root element BEFORE any script runs, and expects the `browser.xhtml`
107
+ * the root element before any script runs, and expects the `browser.xhtml`
108
108
  * shape:
109
109
  *
110
- * - `<html id="main-window">` root (not `<window id="<name>-window">`) —
110
+ * - `<html id="main-window">` root (not `<window id="<name>-window">`):
111
111
  * upstream code from nsXULWindow sizing to session restore looks up
112
- * `main-window` by id;
112
+ * `main-window` by id.
113
113
  * - `windowtype="navigator:browser"`, `chromehidden=""` and the geometry
114
- * `persist` allowlist declared as ROOT ATTRIBUTES so the platform's
114
+ * `persist` allowlist declared as root attributes so the platform's
115
115
  * pre-script pass (window tracking, XULStore geometry, chrome flags) sees
116
- * them;
116
+ * them.
117
117
  * - the same head/bootstrap wiring (customElements.js, per-doc subscript,
118
118
  * CSS + Fluent links) and `data-furnace-chrome-doc` sentinel as the
119
119
  * generic scaffold, so jar.mn registration and the platform-module guard
@@ -252,7 +252,7 @@ export function generateChromeDocCss(name, withTitlebar, licenseHeader) {
252
252
  }${titlebarOverrides}
253
253
  `;
254
254
  }
255
- /** Fluent stub — one placeholder message keyed to the window title. */
255
+ /** Fluent stub with one placeholder message keyed to the window title. */
256
256
  export function generateChromeDocFtl(name, licenseHeader) {
257
257
  return `${licenseHeader}
258
258
 
@@ -283,7 +283,7 @@ export function jarMnEntriesForChromeDoc(name) {
283
283
  * The source path is `../shared/<name>-chrome.css` because `jar.inc.mn` is
284
284
  * included from each theme-specific manifest (`browser/themes/osx/jar.mn`,
285
285
  * `.../linux/`, `.../windows/`), and every existing entry in those manifests
286
- * resolves paths relative to the INCLUDING manifest's directory. A bare
286
+ * resolves paths relative to the including manifest's directory. A bare
287
287
  * `(shared/…)` path resolves to
288
288
  * `obj-.../browser/themes/osx/shared/<name>-chrome.css`, which does not
289
289
  * exist.
@@ -295,7 +295,7 @@ export function jarIncMnEntryForChromeDoc(name) {
295
295
  * locales/jar.mn entry that registers the `.ftl` under the browser locale
296
296
  * bundle. The source path is resolved by mach-locale-jar relative to the
297
297
  * per-locale root (e.g. `engine/browser/locales/en-US/`), and the FTL file
298
- * is scaffolded at `browser/${name}.ftl` under that root — the `%` prefix
298
+ * is scaffolded at `browser/${name}.ftl` under that root. The `%` prefix
299
299
  * means "per-locale content" and the `browser/` subdirectory matches where
300
300
  * the scaffolder writes. A bare `(%${name}.ftl)` points at
301
301
  * `en-US/${name}.ftl` and breaks the first post-scaffold build with
@@ -309,11 +309,11 @@ export function localeJarMnEntryForChromeDoc(name) {
309
309
  * wildcard rooted at `%browser/` whose pattern would already pick up a
310
310
  * scaffolded `browser/<name>.ftl` file. Recognises:
311
311
  *
312
- * - `(%browser/**\/*.ftl)` — recursive (the upstream shape).
313
- * - `(%browser/*.ftl)` — flat.
312
+ * - `(%browser/**\/*.ftl)`: recursive (the upstream shape).
313
+ * - `(%browser/*.ftl)`: flat.
314
314
  *
315
315
  * Forks that have migrated entirely to `[localization]` wildcards typically
316
- * keep no per-file `locale/...` entries for FTL at all; appending one
316
+ * keep no per-file `locale/...` entries for FTL at all. Appending one
317
317
  * there is dead weight at best, and an outright build break when the fork
318
318
  * has also dropped the `% locale browser …` registration. The chrome-doc
319
319
  * scaffolder consults this predicate before its locales/jar.mn append and
@@ -323,7 +323,7 @@ export function localeJarMnEntryForChromeDoc(name) {
323
323
  * Conservative by design: only wildcards rooted at `%browser/` count, and
324
324
  * a `(%browser/foo.ftl)`-style explicit reference (no `*`) is not treated
325
325
  * as a capture. A fork with a narrower wildcard (e.g. `(%browser/about/*.ftl)`)
326
- * is correctly NOT captured by this predicate, because that wildcard would
326
+ * is correctly not captured by this predicate, because that wildcard would
327
327
  * not pick up the top-level `browser/<name>.ftl` the scaffold writes.
328
328
  */
329
329
  export function localesFtlWildcardCapturesScaffoldedName(jarMnContents) {
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Returns the canonical xpcshell test basename for a chrome doc packaging
3
- * check (`test_<name>_packaging.js`). Hyphens in `<name>` are preserved —
3
+ * check (`test_<name>_packaging.js`). Hyphens in `<name>` are preserved:
4
4
  * xpcshell permits them in file basenames even though the derived task
5
5
  * function names replace them with underscores.
6
6
  */
@@ -16,7 +16,7 @@ export declare function generateChromeDocPackagingTest(name: string, header: str
16
16
  /**
17
17
  * Emits the `xpcshell.toml` manifest for the packaging test directory.
18
18
  * Sets `firefox-appdir = "browser"` so XCurProcD resolves to the browser
19
- * subdir rather than the generic gecko runtime dir — without that, the
19
+ * subdir rather than the generic gecko runtime dir. Without that, the
20
20
  * path probe walks the wrong tree on every fork whose app directory is
21
21
  * not the default.
22
22
  */
@@ -10,7 +10,7 @@
10
10
  * - xpcshell's `chrome://browser/*` URI registration lags what the real
11
11
  * browser loads even with `firefox-appdir = "browser"` set, so
12
12
  * `NetUtil.asyncFetch("chrome://browser/content/<name>.xhtml")` can fail
13
- * with `NS_ERROR_FILE_NOT_FOUND` against a file that IS correctly
13
+ * with `NS_ERROR_FILE_NOT_FOUND` against a file that is correctly
14
14
  * packaged.
15
15
  * - Browser-chrome mochitests require a `tabbrowser`, which a
16
16
  * fork-authored chrome doc that replaces `browser.xhtml` deliberately
@@ -23,13 +23,13 @@
23
23
  * is stable across platforms at
24
24
  * `<AppDir>/chrome/browser/content/browser/<name>.xhtml` on an unpacked tree
25
25
  * (the default for `mach build` without `MOZ_CHROME_MULTILOCALE` / omnijar).
26
- * A tree that packs omni.ja would need a different probe; the scaffold notes
26
+ * A tree that packs omni.ja would need a different probe. The scaffold notes
27
27
  * that out-of-scope case explicitly rather than silently producing a test
28
28
  * that fails on packed builds.
29
29
  */
30
30
  /**
31
31
  * Returns the canonical xpcshell test basename for a chrome doc packaging
32
- * check (`test_<name>_packaging.js`). Hyphens in `<name>` are preserved —
32
+ * check (`test_<name>_packaging.js`). Hyphens in `<name>` are preserved:
33
33
  * xpcshell permits them in file basenames even though the derived task
34
34
  * function names replace them with underscores.
35
35
  */
@@ -132,7 +132,7 @@ add_task(async function test_${taskSuffix}_files_packaged() {
132
132
  /**
133
133
  * Emits the `xpcshell.toml` manifest for the packaging test directory.
134
134
  * Sets `firefox-appdir = "browser"` so XCurProcD resolves to the browser
135
- * subdir rather than the generic gecko runtime dir — without that, the
135
+ * subdir rather than the generic gecko runtime dir. Without that, the
136
136
  * path probe walks the wrong tree on every fork whose app directory is
137
137
  * not the default.
138
138
  */
@@ -1,10 +1,10 @@
1
1
  /**
2
- * `fireforge furnace chrome-doc create <name>` — scaffolds a top-level
2
+ * `fireforge furnace chrome-doc create <name>` scaffolds a top-level
3
3
  * chrome document (xhtml + js + css + ftl + jar.mn registrations).
4
4
  *
5
5
  * `furnace create` covers custom elements under `toolkit/content/widgets/`,
6
- * but top-level chrome documents — the `mybrowser.xhtml`-class entry points
7
- * a fork adds alongside or instead of `browser.xhtml` — are otherwise
6
+ * but top-level chrome documents (the `mybrowser.xhtml`-class entry points
7
+ * a fork adds alongside or instead of `browser.xhtml`) are otherwise
8
8
  * hand-authored with error-prone jar.mn + jar.inc.mn + locales/jar.mn glue.
9
9
  * The `*` preprocessor flag, the macOS titlebar-button carve-out, the
10
10
  * startup-topic observer, and the Fluent linkage each have silent-break
@@ -12,7 +12,7 @@
12
12
  *
13
13
  * This command writes the four source files and appends three jar.mn entries
14
14
  * under a rollback journal identical in shape to `furnace create`. A SIGINT
15
- * mid-scaffold restores every touched file; a successful run leaves the tree
15
+ * mid-scaffold restores every touched file. A successful run leaves the tree
16
16
  * ready for `fireforge build`.
17
17
  */
18
18
  /** Options for `furnace chrome-doc create`. */
@@ -28,16 +28,16 @@ export interface FurnaceChromeDocCreateOptions {
28
28
  * Scaffold an xpcshell packaging-verification test alongside the chrome
29
29
  * document. The generated test probes `XCurProcD/chrome/browser/...` on
30
30
  * disk rather than going through `chrome://` URI resolution, which
31
- * bypasses xpcshell's limited browser-chrome manifest set — where
31
+ * bypasses xpcshell's limited browser-chrome manifest set, where
32
32
  * `NetUtil.asyncFetch` returns `NS_ERROR_FILE_NOT_FOUND` against a file
33
- * that IS packaged. Registration in `XPCSHELL_TESTS_MANIFESTS` is left to
33
+ * that is packaged. Registration in `XPCSHELL_TESTS_MANIFESTS` is left to
34
34
  * the operator because the owning moz.build depends on the fork's layout.
35
35
  */
36
36
  withTests?: boolean;
37
37
  /** Print the scaffold plan without writing files. */
38
38
  dryRun?: boolean;
39
39
  /**
40
- * Emit the browser.xhtml-like MAIN-WINDOW skeleton (`<html
40
+ * Emit the browser.xhtml-like main-window skeleton (`<html
41
41
  * id="main-window">` with the `windowtype`/`chromehidden`/`persist`
42
42
  * root attributes platform C++ reads before scripts run) instead of
43
43
  * the generic dialog-shaped `<window>` document. Use for the document
@@ -49,7 +49,7 @@ export interface FurnaceChromeDocCreateOptions {
49
49
  }
50
50
  /**
51
51
  * Validates a chrome-doc name. Lowercase ASCII, optional hyphens, no
52
- * leading digit — the name is used verbatim in CSS selectors, jar.mn
52
+ * leading digit. The name is used verbatim in CSS selectors, jar.mn
53
53
  * entries, FTL keys, and file basenames, so anything outside that
54
54
  * character set would break at least one downstream consumer.
55
55
  * @param name Chrome-doc name (file basename without extension).
@@ -1,11 +1,11 @@
1
1
  // SPDX-License-Identifier: EUPL-1.2
2
2
  /**
3
- * `fireforge furnace chrome-doc create <name>` — scaffolds a top-level
3
+ * `fireforge furnace chrome-doc create <name>` scaffolds a top-level
4
4
  * chrome document (xhtml + js + css + ftl + jar.mn registrations).
5
5
  *
6
6
  * `furnace create` covers custom elements under `toolkit/content/widgets/`,
7
- * but top-level chrome documents — the `mybrowser.xhtml`-class entry points
8
- * a fork adds alongside or instead of `browser.xhtml` — are otherwise
7
+ * but top-level chrome documents (the `mybrowser.xhtml`-class entry points
8
+ * a fork adds alongside or instead of `browser.xhtml`) are otherwise
9
9
  * hand-authored with error-prone jar.mn + jar.inc.mn + locales/jar.mn glue.
10
10
  * The `*` preprocessor flag, the macOS titlebar-button carve-out, the
11
11
  * startup-topic observer, and the Fluent linkage each have silent-break
@@ -13,7 +13,7 @@
13
13
  *
14
14
  * This command writes the four source files and appends three jar.mn entries
15
15
  * under a rollback journal identical in shape to `furnace create`. A SIGINT
16
- * mid-scaffold restores every touched file; a successful run leaves the tree
16
+ * mid-scaffold restores every touched file. A successful run leaves the tree
17
17
  * ready for `fireforge build`.
18
18
  */
19
19
  import { join } from 'node:path';
@@ -33,7 +33,7 @@ import { chromeDocPackagingTestFileName, generateChromeDocPackagingManifest, gen
33
33
  const CHROME_DOC_NAME_PATTERN = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;
34
34
  /**
35
35
  * Validates a chrome-doc name. Lowercase ASCII, optional hyphens, no
36
- * leading digit — the name is used verbatim in CSS selectors, jar.mn
36
+ * leading digit. The name is used verbatim in CSS selectors, jar.mn
37
37
  * entries, FTL keys, and file basenames, so anything outside that
38
38
  * character set would break at least one downstream consumer.
39
39
  * @param name Chrome-doc name (file basename without extension).
@@ -154,8 +154,8 @@ function renderChromeDocCreateDryRun(name, plan) {
154
154
  */
155
155
  async function appendJarEntryIfAbsent(filePath, entry, journal) {
156
156
  if (!(await pathExists(filePath))) {
157
- // Target jar.mn doesn't exist in this tree layout. We do NOT create it
158
- // — a fork that moved the jar file needs the operator to choose a
157
+ // Target jar.mn doesn't exist in this tree layout. We do not create it:
158
+ // a fork that moved the jar file needs the operator to choose a
159
159
  // placement. The command surfaces this as a FurnaceError so the user
160
160
  // can investigate rather than silently writing to a non-canonical path.
161
161
  throw new FurnaceError(`Required jar file ${filePath} does not exist; cannot register chrome-doc entry. Check that the fork's engine layout matches the expected browser/ and locales/ tree.`);
@@ -177,7 +177,7 @@ async function performChromeDocMutations(args) {
177
177
  const journal = createRollbackJournal();
178
178
  args.operationContext.registerJournal(journal);
179
179
  // XHTML uses an inline XML comment since getLicenseHeader has no XML
180
- // style — the SPDX convention is a single-line comment at the top.
180
+ // style. The SPDX convention is a single-line comment at the top.
181
181
  const jsHeader = getLicenseHeader(args.license, 'js');
182
182
  const cssHeader = getLicenseHeader(args.license, 'css');
183
183
  const ftlHeader = getLicenseHeader(args.license, 'hash');
@@ -213,7 +213,7 @@ async function performChromeDocMutations(args) {
213
213
  await snapshotFile(journal, ftlPath);
214
214
  await writeText(ftlPath, generateChromeDocFtl(args.name, ftlHeader));
215
215
  written.push(`browser/locales/en-US/browser/${args.name}.ftl`);
216
- // jar.mn registrations — XHTML + JS go through the `*` preprocessor
216
+ // jar.mn registrations: XHTML + JS go through the `*` preprocessor
217
217
  // for brand substitution, CSS goes through jar.inc.mn, FTL through
218
218
  // the locale jar.
219
219
  const jarMnPath = join(args.engineDir, 'browser/base/jar.mn');
@@ -226,12 +226,12 @@ async function performChromeDocMutations(args) {
226
226
  written.push('browser/themes/shared/jar.inc.mn');
227
227
  const localeJarMnPath = join(args.engineDir, 'browser/locales/jar.mn');
228
228
  // Forks that have migrated to a `[localization] (%browser/**/*.ftl)`
229
- // wildcard already pick up the scaffolded FTL automatically — appending
230
- // a per-file `locale/...` entry on top is at best dead weight and at
231
- // worst a build error when the fork has dropped the `% locale browser`
232
- // registration the per-file entry depends on. The wildcard predicate is
233
- // intentionally narrow: only `%browser/`-rooted globs ending in `*.ftl`
234
- // count as a capture.
229
+ // wildcard already pick up the scaffolded FTL automatically, so
230
+ // appending a per-file `locale/...` entry on top is at best dead weight
231
+ // and at worst a build error when the fork has dropped the
232
+ // `% locale browser` registration the per-file entry depends on. The
233
+ // wildcard predicate is narrow on purpose: only `%browser/`-rooted globs
234
+ // ending in `*.ftl` count as a capture.
235
235
  if (await pathExists(localeJarMnPath)) {
236
236
  const existingLocaleJar = await readText(localeJarMnPath);
237
237
  if (localesFtlWildcardCapturesScaffoldedName(existingLocaleJar)) {
@@ -298,12 +298,12 @@ export async function furnaceChromeDocCreateCommand(projectRoot, name, options =
298
298
  });
299
299
  const browserWindow = options.browserWindow ?? false;
300
300
  // The browser-window skeleton always carries its own titlebar markup and
301
- // chrome attributes; --no-titlebar only applies to the generic scaffold.
301
+ // chrome attributes. --no-titlebar only applies to the generic scaffold.
302
302
  const withTitlebar = browserWindow ? true : (options.titlebar ?? true);
303
303
  const withTests = options.withTests ?? false;
304
304
  // Hint: when the scaffolded document is the configured token-host document
305
305
  // (the fork's main browser window), the generic dialog-shaped scaffold is
306
- // almost certainly wrong — correct jar.mn registrations, wrong document
306
+ // almost certainly wrong: correct jar.mn registrations, wrong document
307
307
  // body.
308
308
  if (!browserWindow && (await furnaceConfigExists(projectRoot))) {
309
309
  try {
@@ -317,7 +317,7 @@ export async function furnaceChromeDocCreateCommand(projectRoot, name, options =
317
317
  }
318
318
  }
319
319
  catch {
320
- // A broken furnace.json must not block chrome-doc scaffolding; the
320
+ // A broken furnace.json must not block chrome-doc scaffolding. The
321
321
  // hint is best-effort.
322
322
  }
323
323
  }
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Browser-chrome test scaffolding for `furnace create --with-tests`,
3
3
  * including the `--test-dir` redirect and collision safety (existing
4
- * manifests are appended to; head.js and test implementations are never
4
+ * manifests are appended to, and head.js and test implementations are never
5
5
  * overwritten). Split out of `create.ts` to keep that command file within
6
6
  * the per-file line budget.
7
7
  */
@@ -2,7 +2,7 @@
2
2
  /**
3
3
  * Browser-chrome test scaffolding for `furnace create --with-tests`,
4
4
  * including the `--test-dir` redirect and collision safety (existing
5
- * manifests are appended to; head.js and test implementations are never
5
+ * manifests are appended to, and head.js and test implementations are never
6
6
  * overwritten). Split out of `create.ts` to keep that command file within
7
7
  * the per-file line budget.
8
8
  */
@@ -16,6 +16,7 @@ import { toError } from '../../utils/errors.js';
16
16
  import { ensureDir, pathExists, readText, writeText } from '../../utils/fs.js';
17
17
  import { info, success, warn } from '../../utils/logger.js';
18
18
  import { stripEnginePrefix } from '../../utils/paths.js';
19
+ import { browserTestFileName, deriveTestStem } from './test-file-name.js';
19
20
  /**
20
21
  * Validates the `--test-dir` option against the resolved test style before
21
22
  * any writes. Mochikit lives in the upstream toolkit/content/tests/widgets
@@ -65,15 +66,9 @@ export function resolveTestDirOverride(raw) {
65
66
  * the harness will try to run.
66
67
  */
67
68
  export async function scaffoldTestFiles(componentName, license, forgeConfig, paths, journal, testDirOverride) {
68
- const strippedName = componentName.startsWith('moz-') ? componentName.slice(4) : componentName;
69
- // Avoid double-prefixing: strip binaryName prefix since the default test
70
- // dir name already uses it
71
69
  const binaryName = forgeConfig.binaryName;
72
- const withoutBinaryPrefix = strippedName.startsWith(binaryName + '-')
73
- ? strippedName.slice(binaryName.length + 1)
74
- : strippedName;
75
- const underscored = withoutBinaryPrefix.replace(/-/g, '_');
76
- const testFileName = `browser_${binaryName}_${underscored}.js`;
70
+ const underscored = deriveTestStem(componentName, binaryName);
71
+ const testFileName = browserTestFileName(componentName, binaryName);
77
72
  // --test-dir redirects the scaffold: the hardcoded
78
73
  // `.../test/<binaryName>/` target can collide with a test suite owned by a
79
74
  // different patch. The manifest-registration name is the path below
@@ -88,12 +83,12 @@ export async function scaffoldTestFiles(componentName, license, forgeConfig, pat
88
83
  const jsHeader = getLicenseHeader(license, 'js');
89
84
  const hashHeader = getLicenseHeader(license, 'hash');
90
85
  const testFiles = [];
91
- // browser.toml — create if missing, append entry if existing
86
+ // browser.toml: create if missing, append entry if existing.
92
87
  const tomlPath = join(testDir, 'browser.toml');
93
88
  if (await pathExists(tomlPath)) {
94
89
  // Defensive guard: only append if the entry is not already present.
95
90
  // With a fresh journal per create, the same test file name cannot be
96
- // appended twice in a single run — but retaining the check protects
91
+ // appended twice in a single run, but retaining the check protects
97
92
  // against accidental re-entrance or a future refactor that reuses the
98
93
  // helper with a stale test directory.
99
94
  const existingToml = await readText(tomlPath);
@@ -118,7 +113,7 @@ support-files = ["head.js"]
118
113
  await writeText(tomlPath, browserToml);
119
114
  }
120
115
  testFiles.push('browser.toml');
121
- // head.js — only create if it doesn't exist (shared across components)
116
+ // head.js: only create if it doesn't exist (shared across components).
122
117
  const headPath = join(testDir, 'head.js');
123
118
  if (!(await pathExists(headPath))) {
124
119
  if (journal)
@@ -8,7 +8,7 @@ export interface DryRunPlanInput {
8
8
  /**
9
9
  * Feature-scoped Fluent bundle the component participates in (the same
10
10
  * value that will be written to `furnace.json`'s `sharedFtl`). When set,
11
- * the component's own `.ftl` is NOT scaffolded and the plan preview
11
+ * the component's own `.ftl` is not scaffolded and the plan preview
12
12
  * reflects that. Omit the key for the default per-component scaffold.
13
13
  */
14
14
  sharedFtl?: string;
@@ -18,8 +18,8 @@ export interface DryRunPlanInput {
18
18
  /**
19
19
  * Resolved `--test-dir` override (engine-relative, already validated by
20
20
  * `resolveValidatedTestDir`). Omit for the default `<binaryName>`-derived
21
- * scaffold directory. The formatters MUST receive the same value the
22
- * scaffolders get — the plan used to recompute the default from
21
+ * scaffold directory. The formatters must receive the same value the
22
+ * scaffolders get. The plan used to recompute the default from
23
23
  * `binaryName` and named a directory the real run never wrote to.
24
24
  */
25
25
  testDir?: string;
@@ -35,7 +35,7 @@ export declare function formatSuccessNote(args: {
35
35
  testFiles: string[];
36
36
  testStyle: ResolvedTestStyle;
37
37
  binaryName: string;
38
- /** Resolved `--test-dir` override; see {@link DryRunPlanInput.testDir}. */
38
+ /** Resolved `--test-dir` override. See {@link DryRunPlanInput.testDir}. */
39
39
  testDir?: string | undefined;
40
40
  }): string;
41
41
  /**
@@ -3,11 +3,12 @@
3
3
  * Dry-run plan formatter for `furnace create`.
4
4
  *
5
5
  * Lives outside `create.ts` so the authoring command stays under the
6
- * per-file LOC budget. The formatter is pure — all inputs are already
7
- * resolved by the command's validation phase — so it can be exercised
6
+ * per-file LOC budget. The formatter is pure (all inputs are already
7
+ * resolved by the command's validation phase), so it can be exercised
8
8
  * independently of the mutation plumbing.
9
9
  */
10
10
  import { BROWSER_TEST_SCAFFOLD_ROOT, resolveBrowserChromeTestDir, resolveXpcshellTestDir, } from '../../core/furnace-constants.js';
11
+ import { deriveTestStem } from './test-file-name.js';
11
12
  /**
12
13
  * Builds the test-section fragment of the dry-run plan for a given
13
14
  * harness choice. Kept separate from the top-level formatter so the
@@ -18,15 +19,11 @@ function formatTestSection(args) {
18
19
  const { testStyle, componentName, binaryName, testDir } = args;
19
20
  if (testStyle === 'none')
20
21
  return '';
21
- const strippedName = componentName.startsWith('moz-') ? componentName.slice(4) : componentName;
22
- const withoutBinaryPrefix = strippedName.startsWith(binaryName + '-')
23
- ? strippedName.slice(binaryName.length + 1)
24
- : strippedName;
25
- const underscored = withoutBinaryPrefix.replace(/-/g, '_');
22
+ const underscored = deriveTestStem(componentName, binaryName);
26
23
  if (testStyle === 'browser-chrome') {
27
24
  // Same resolver as scaffoldTestFiles: the registration name is the
28
25
  // path below browser/base/content/test/, which under --test-dir is
29
- // NOT the binary name.
26
+ // not the binary name.
30
27
  const testDirRel = resolveBrowserChromeTestDir(binaryName, testDir);
31
28
  const manifestName = testDirRel.slice(BROWSER_TEST_SCAFFOLD_ROOT.length);
32
29
  return (`\n\nWould create test files in engine/${testDirRel}/:\n` +
@@ -82,7 +79,7 @@ export function formatSuccessNote(args) {
82
79
  export function formatDryRunPlan(args) {
83
80
  const { componentName, localized, register, composes, stockAdditions, sharedFtl, testStyle, description, binaryName, testDir, } = args;
84
81
  const componentFiles = [`${componentName}.mjs`, `${componentName}.css`];
85
- // A per-component .ftl is scaffolded only when the component does NOT
82
+ // A per-component .ftl is scaffolded only when the component does not
86
83
  // opt into a shared feature-scoped bundle. Mirrors writeComponentFiles.
87
84
  if (localized && !sharedFtl)
88
85
  componentFiles.push(`${componentName}.ftl`);
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Feature-flag resolution for `furnace create`. Extracted from
3
3
  * `create.ts` so the authoring command stays under the per-file LOC
4
- * budget — the flag resolver has grown with each new opt-in (`--xpcshell`,
4
+ * budget. The flag resolver has grown with each new opt-in (`--xpcshell`,
5
5
  * `--test-style`, `--shared-ftl`).
6
6
  */
7
7
  import type { FurnaceCreateOptions } from '../../types/commands/index.js';
@@ -11,7 +11,7 @@ import type { FurnaceCreateOptions } from '../../types/commands/index.js';
11
11
  * `--shared-ftl` implies `localized` and short-circuits the interactive
12
12
  * prompt so the operator is not asked to flip a flag we are about to
13
13
  * enforce. `--no-localized` combined with `--shared-ftl` is rejected
14
- * fast-fail; the cross-field check in furnace-config would catch it
14
+ * fast-fail. The cross-field check in furnace-config would catch it
15
15
  * too, but later and without a clear command-line message.
16
16
  *
17
17
  * @param isInteractive - Whether interactive prompts are available
@@ -2,7 +2,7 @@
2
2
  /**
3
3
  * Feature-flag resolution for `furnace create`. Extracted from
4
4
  * `create.ts` so the authoring command stays under the per-file LOC
5
- * budget — the flag resolver has grown with each new opt-in (`--xpcshell`,
5
+ * budget. The flag resolver has grown with each new opt-in (`--xpcshell`,
6
6
  * `--test-style`, `--shared-ftl`).
7
7
  */
8
8
  import { multiselect } from '@clack/prompts';
@@ -14,7 +14,7 @@ import { cancel, isCancel } from '../../utils/logger.js';
14
14
  * `--shared-ftl` implies `localized` and short-circuits the interactive
15
15
  * prompt so the operator is not asked to flip a flag we are about to
16
16
  * enforce. `--no-localized` combined with `--shared-ftl` is rejected
17
- * fast-fail; the cross-field check in furnace-config would catch it
17
+ * fast-fail. The cross-field check in furnace-config would catch it
18
18
  * too, but later and without a clear command-line message.
19
19
  *
20
20
  * @param isInteractive - Whether interactive prompts are available
@@ -3,10 +3,10 @@
3
3
  * `fireforge furnace create --test-style=mochikit`.
4
4
  *
5
5
  * Browser-chrome mochitests require a `tabbrowser` in the top-level chrome
6
- * document, so forks with a bespoke chrome document that deliberately omits
7
- * one cannot run them. MochiKit tests load the component module directly via
6
+ * document, so forks with a bespoke chrome document that omits one cannot
7
+ * run them. MochiKit tests load the component module directly via
8
8
  * `chrome://global/` and assert against `customElements`, so they work
9
- * against any fork that registers the upstream toolkit test manifest tree —
9
+ * against any fork that registers the upstream toolkit test manifest tree,
10
10
  * including those without a tabbrowser.
11
11
  */
12
12
  import { type RollbackJournal } from '../../core/furnace-rollback.js';
@@ -21,7 +21,7 @@ import type { ProjectLicense } from '../../types/config.js';
21
21
  * Appends a per-test entry to the existing `chrome.toml` when present,
22
22
  * writes a fresh `[DEFAULT]`-headed one otherwise. The caller is still
23
23
  * responsible for ensuring the `toolkit/content/tests/widgets/chrome.toml`
24
- * path is registered somewhere in the moz.build tree; most forks inherit
24
+ * path is registered somewhere in the moz.build tree. Most forks inherit
25
25
  * this from upstream via `TEST_HARNESS_FILES += [...]`.
26
26
  */
27
27
  export declare function scaffoldMochikitTestFiles(componentName: string, license: ProjectLicense, paths: {
@@ -4,10 +4,10 @@
4
4
  * `fireforge furnace create --test-style=mochikit`.
5
5
  *
6
6
  * Browser-chrome mochitests require a `tabbrowser` in the top-level chrome
7
- * document, so forks with a bespoke chrome document that deliberately omits
8
- * one cannot run them. MochiKit tests load the component module directly via
7
+ * document, so forks with a bespoke chrome document that omits one cannot
8
+ * run them. MochiKit tests load the component module directly via
9
9
  * `chrome://global/` and assert against `customElements`, so they work
10
- * against any fork that registers the upstream toolkit test manifest tree —
10
+ * against any fork that registers the upstream toolkit test manifest tree,
11
11
  * including those without a tabbrowser.
12
12
  */
13
13
  import { join } from 'node:path';
@@ -26,7 +26,7 @@ import { generateMochikitChromeTomlEntry, generateMochikitChromeTomlSkeleton, ge
26
26
  * Appends a per-test entry to the existing `chrome.toml` when present,
27
27
  * writes a fresh `[DEFAULT]`-headed one otherwise. The caller is still
28
28
  * responsible for ensuring the `toolkit/content/tests/widgets/chrome.toml`
29
- * path is registered somewhere in the moz.build tree; most forks inherit
29
+ * path is registered somewhere in the moz.build tree. Most forks inherit
30
30
  * this from upstream via `TEST_HARNESS_FILES += [...]`.
31
31
  */
32
32
  export async function scaffoldMochikitTestFiles(componentName, license, paths, journal) {
@@ -50,9 +50,9 @@ export async function scaffoldMochikitTestFiles(componentName, license, paths, j
50
50
  await writeText(testFilePath, generateMochikitTestContent(componentName));
51
51
  writtenFiles.push(testFileName);
52
52
  }
53
- // chrome.toml — append entry if the file already exists, otherwise write
54
- // a fresh skeleton + entry. Idempotency: if the entry is already present
55
- // the manifest is left untouched so re-runs don't double-register.
53
+ // chrome.toml: append an entry if the file already exists, otherwise
54
+ // write a fresh skeleton + entry. Idempotency: if the entry is already
55
+ // present the manifest is left untouched so re-runs don't double-register.
56
56
  const manifestPath = join(testDir, 'chrome.toml');
57
57
  const entry = generateMochikitChromeTomlEntry(componentName);
58
58
  if (await pathExists(manifestPath)) {