@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
@@ -16,11 +16,11 @@ import { detectHarnessCrashSignature } from './test-harness-crash.js';
16
16
  // This block is a frozen compatibility list, not a barrel to grow: every name
17
17
  // here already had a `from './mach.js'` import when the module was split.
18
18
  // New helpers belong in their own sub-module and are imported from it
19
- // directly — adding to this list pulls the whole sub-module into every suite
19
+ // directly. Adding to this list pulls the whole sub-module into every suite
20
20
  // that mocks `mach.js`.
21
21
  export { attemptMozinfoRewrite, buildArtifactMismatchMessage, hasBuildArtifacts, hasRunnableBundle, } from './mach-build-artifacts.js';
22
22
  export { generateMozconfig } from './mach-mozconfig.js';
23
- export { ensurePython, resetResolvedPython } from './mach-python.js';
23
+ export { ensurePython } from './mach-python.js';
24
24
  /**
25
25
  * Ensures mach is available in the engine directory.
26
26
  * @param engineDir - Path to the engine directory
@@ -51,8 +51,8 @@ export async function runMach(args, engineDir, options = {}) {
51
51
  if (options.inherit) {
52
52
  // Group-reap every long-lived inherited mach dispatch (bootstrap, run,
53
53
  // watch): a mach dying at startup must not strand multiprocessing
54
- // workers. Short-lived metadata queries below stay on plain exec() —
55
- // adding groups there would touch every non-mach exec consumer's path
54
+ // workers. Short-lived metadata queries below stay on plain exec().
55
+ // Adding groups there would touch every non-mach exec consumer's path
56
56
  // for no reaping benefit.
57
57
  return execInherit(python, [machPath, ...args], { ...execOptions, processGroup: true });
58
58
  }
@@ -79,7 +79,7 @@ export async function runMachCapture(args, engineDir, options = {}) {
79
79
  const machPath = join(engineDir, 'mach');
80
80
  let stdout = '';
81
81
  let stderr = '';
82
- // Echo-path filters only: the captured strings above accumulate RAW so the
82
+ // Echo-path filters only: the captured strings above accumulate raw so the
83
83
  // classifier still sees the full teardown traceback. When the option is
84
84
  // off, the filters are absent and echo is a straight write (unchanged).
85
85
  // One shutdown context per run, shared by both stream filters: the
@@ -94,18 +94,18 @@ export async function runMachCapture(args, engineDir, options = {}) {
94
94
  ...(options.envUnset ? { envUnset: options.envUnset } : {}),
95
95
  // Every capture dispatch (test suites, protected builds, package,
96
96
  // storybook) runs as a process-group leader and is group-reaped on
97
- // exit/abort — see ExecOptions.processGroup.
97
+ // exit/abort. See ExecOptions.processGroup.
98
98
  processGroup: true,
99
99
  onStdout: (data) => {
100
100
  stdout += data;
101
101
  if (stdout.length > CAPTURE_TAIL_LIMIT) {
102
102
  stdout = stdout.slice(-CAPTURE_TAIL_LIMIT);
103
103
  }
104
- // RAW into the log, filtered into the echo. The log exists to be
104
+ // Raw into the log, filtered into the echo. The log exists to be
105
105
  // re-read after the fact by whoever is diagnosing the run, and the
106
- // echo filter's whole purpose is to shorten what a HUMAN scrolls
107
- // past — collapsing a traceback in the artifact would reintroduce
108
- // the loss this log exists to prevent.
106
+ // echo filter only exists to shorten what a human scrolls past.
107
+ // Collapsing a traceback in the artifact would reintroduce the loss
108
+ // this log exists to prevent.
109
109
  writeToActiveRunLog(data);
110
110
  process.stdout.write(stdoutFilter ? stdoutFilter.transform(data) : data);
111
111
  },
@@ -149,14 +149,6 @@ export async function runMachInheritCapture(args, engineDir, options = {}) {
149
149
  processGroup: true,
150
150
  });
151
151
  }
152
- /**
153
- * Runs mach bootstrap to install build dependencies.
154
- * @param engineDir - Path to the engine directory
155
- * @returns Exit code
156
- */
157
- export async function bootstrap(engineDir) {
158
- return runMach(['bootstrap', '--application-choice', 'browser'], engineDir, { inherit: true });
159
- }
160
152
  /**
161
153
  * Runs mach bootstrap while preserving stdin and capturing the emitted output.
162
154
  * @param engineDir - Path to the engine directory
@@ -171,9 +163,9 @@ export async function bootstrapWithOutput(engineDir) {
171
163
  * propagates so the hint sits immediately below the raw mach error in the
172
164
  * operator's terminal.
173
165
  *
174
- * The scanner is passed the concatenation of stderr AND stdout because mach
166
+ * The scanner is passed the concatenation of stderr and stdout because mach
175
167
  * streams its subcommand output through a timestamp-prefixing wrapper that
176
- * writes both streams to whatever FD the subprocess chose — `rustc` errors
168
+ * writes both streams to whatever FD the subprocess chose, so `rustc` errors
177
169
  * from `mach build` can land on stdout, so feeding only `result.stderr`
178
170
  * silently loses the match.
179
171
  */
@@ -194,10 +186,10 @@ function surfaceMachErrorHints(result) {
194
186
  */
195
187
  const DEFAULT_BUILD_CRASH_RETRIES = 2;
196
188
  /**
197
- * Names the known mozsystemmonitor teardown traceback when a BUILD carried
198
- * it. The test path collapses this signature in the echo; a build cannot
189
+ * Names the known mozsystemmonitor teardown traceback when a build carried
190
+ * it. The test path collapses this signature in the echo. A build cannot
199
191
  * (see `mach-known-noise-filter.ts`), so it reached operators as an
200
- * unexplained traceback in a build log — a recognized, documented upstream
192
+ * unexplained traceback in a build log: a recognized, documented upstream
201
193
  * defect wearing the appearance of a new one. The output is left verbatim
202
194
  * and this one line is added beside it, so the same signature reads the same
203
195
  * in both phases.
@@ -209,20 +201,20 @@ function noteKnownTeardownNoiseInBuild(result) {
209
201
  }
210
202
  /**
211
203
  * The single protected path every FireForge mach build dispatch routes
212
- * through — `build`, `build --ui`, and the pre-test `--build` step all use
204
+ * through. `build`, `build --ui`, and the pre-test `--build` step all use
213
205
  * it, so no entry point is left unprotected with a different retry budget:
214
206
  *
215
- * 1. installs the resource-monitor degrade guard IN the mach virtualenvs
216
- * (plus the PYTHONPATH fallback) — re-installed before every attempt, so
207
+ * 1. installs the resource-monitor degrade guard in the mach virtualenvs
208
+ * (plus the PYTHONPATH fallback), re-installed before every attempt, so
217
209
  * a venv materialized by a crashed first attempt is guarded on the next
218
- * one instead of every retry dying on the same wedged state;
219
- * 2. spawns a fresh mach process per attempt;
220
- * 3. retries ONLY the recognized harness-crash family (resource monitor /
221
- * psutil startup tracebacks) up to the uniform budget — an ordinary
210
+ * one instead of every retry dying on the same wedged state.
211
+ * 2. spawns a fresh mach process per attempt.
212
+ * 3. retries only the recognized harness-crash family (resource monitor /
213
+ * psutil startup tracebacks) up to the uniform budget. An ordinary
222
214
  * compile error is never retried.
223
215
  *
224
216
  * The protected path never runs `mach configure`, never clobbers, and never
225
- * widens the requested build kind — a `faster` dispatch retries as
217
+ * widens the requested build kind: a `faster` dispatch retries as
226
218
  * `mach build faster`, so it cannot invalidate more of the objdir than the
227
219
  * command the operator asked for.
228
220
  */
@@ -258,8 +250,8 @@ export async function runProtectedMachBuild(kind, engineDir, options = {}) {
258
250
  * hints are surfaced on top of the raw mach output so operators get an
259
251
  * actionable nudge alongside the cryptic mozbuild traceback. Returns the
260
252
  * captured result so the caller (e.g. `fireforge build`) can inspect the
261
- * tail for post-build diagnostics that mach prints AFTER "Your build was
262
- * successful!" — notably the stale `config.status is out of date`
253
+ * tail for post-build diagnostics that mach prints after "Your build was
254
+ * successful!", notably the stale `config.status is out of date`
263
255
  * notice that mach emits when a tool-managed edit landed on
264
256
  * `moz.configure` before the build.
265
257
  * @param engineDir - Path to the engine directory
@@ -287,13 +279,13 @@ export async function buildUI(engineDir) {
287
279
  *
288
280
  * Without it, a `build --ui` started while a full `build` is still in flight
289
281
  * hands off to `mach build faster` and fails almost immediately with `No
290
- * rule to make target 'XUL'` — the real problem being that the first build
282
+ * rule to make target 'XUL'`, the real problem being that the first build
291
283
  * has not yet materialised the full backend, with nothing in the low-level
292
284
  * make error pointing at the concurrent run. The lock intercepts the second
293
285
  * invocation before it touches mach, and the refusal names the PID holding
294
286
  * the lock so the operator can decide whether to wait or investigate.
295
287
  *
296
- * Stale-lock recovery: the lock stores the owner PID; a crashed build
288
+ * Stale-lock recovery: the lock stores the owner PID. A crashed build
297
289
  * (SIGINT, SIGTERM, or a kernel kill) leaves the lock dir behind but not the
298
290
  * owning process, and `withFileLock` removes the lock on the next attempt
299
291
  * when `process.kill(pid, 0)` shows the owner is gone.
@@ -307,9 +299,9 @@ export async function buildUI(engineDir) {
307
299
  export async function withBuildLock(projectRoot, operation) {
308
300
  const lockPath = createSiblingLockPath(join(projectRoot, '.fireforge-build'), '.lock');
309
301
  return withFileLock(lockPath, operation, {
310
- // Default lock timeout is 30s; bump to 24h so a slow full build does
311
- // not trip the timeout while the second invocation waits. A real
312
- // operator will ^C long before 24h elapses; the ceiling is there
302
+ // Default lock timeout is 30s. Bump it to 24h so a slow full build
303
+ // does not trip the timeout while the second invocation waits. A real
304
+ // operator will ^C long before 24h elapses. The ceiling is there
313
305
  // purely so a forgotten lock cannot wedge the command forever.
314
306
  timeoutMs: 24 * 60 * 60 * 1000,
315
307
  onTimeoutMessage: `Timed out waiting for the FireForge build lock at ${lockPath}. ` +
@@ -331,7 +323,7 @@ export async function run(engineDir, args = []) {
331
323
  * enforces a deadline by SIGTERMing the whole process group, and returns
332
324
  * the captured output alongside a `timedOut` flag.
333
325
  *
334
- * Unlike {@link run}, this variant does NOT inherit stdio. The child
326
+ * Unlike {@link run}, this variant does not inherit stdio. The child
335
327
  * stdout/stderr are piped back through the line callbacks so the caller
336
328
  * can scan for `JavaScript error:` / `console.error:` without coupling
337
329
  * the runner to chrome-specific pattern logic.
@@ -351,20 +343,10 @@ export async function runMachSmoke(args, engineDir, options) {
351
343
  ...(options.mirror ? { mirror: options.mirror } : {}),
352
344
  });
353
345
  }
354
- /**
355
- * Creates a distribution package.
356
- * @param engineDir - Path to the engine directory
357
- * @returns Exit code
358
- */
359
- export async function machPackage(engineDir) {
360
- return runMach(['package'], engineDir, { inherit: true });
361
- }
362
346
  /**
363
347
  * Creates a distribution package while streaming output to the terminal
364
- * and capturing the stderr tail for post-run diagnostics. Callers that
365
- * want to consult {@link explainMachError} on failure should use this
366
- * variant; the inherit-only `machPackage` above remains for callers that
367
- * just need an exit code.
348
+ * and capturing the stderr tail for post-run diagnostics, so callers can
349
+ * consult {@link explainMachError} on failure.
368
350
  *
369
351
  * @param engineDir - Path to the engine directory
370
352
  * @returns Captured mach result (stdout tail, stderr tail, exit code)
@@ -372,21 +354,13 @@ export async function machPackage(engineDir) {
372
354
  export async function machPackageCapture(engineDir) {
373
355
  return runMachCapture(['package'], engineDir);
374
356
  }
375
- /**
376
- * Runs mach watch for auto-rebuilding.
377
- * @param engineDir - Path to the engine directory
378
- * @returns Exit code
379
- */
380
- export async function watch(engineDir) {
381
- return runMach(['watch'], engineDir, { inherit: true });
382
- }
383
357
  /**
384
358
  * Runs mach watch while preserving stdin and capturing emitted output.
385
359
  *
386
360
  * `env` is threaded through so the caller can prepend the resolved watchman
387
361
  * directory to PATH in a way mach inherits: `fireforge watch` can locate
388
362
  * `watchman` via `which`, but the mach subprocess spawns with the parent's
389
- * PATH only — on macOS that typically omits `/opt/homebrew/bin`, so
363
+ * PATH only, and on macOS that typically omits `/opt/homebrew/bin`, so
390
364
  * `mach watch` fails at the `watch-project` subscription step.
391
365
  *
392
366
  * @param engineDir - Path to the engine directory
@@ -397,28 +371,18 @@ export async function watch(engineDir) {
397
371
  export async function watchWithOutput(engineDir, options = {}) {
398
372
  return runMachInheritCapture(['watch'], engineDir, options.env ? { env: options.env } : {});
399
373
  }
400
- /**
401
- * Runs mach test with the given test paths.
402
- * @param engineDir - Path to the engine directory
403
- * @param testPaths - Test file or directory paths (relative to engine)
404
- * @param args - Additional arguments to pass to mach test
405
- * @returns Exit code
406
- */
407
- export async function test(engineDir, testPaths = [], args = []) {
408
- return runMach(['test', ...testPaths, ...args], engineDir, { inherit: true });
409
- }
410
374
  /**
411
375
  * Environment markers mozbuild reads to decide it is running under a coding
412
376
  * agent (`mozbuild.util.is_running_under_coding_agent`), which quiets
413
377
  * terminal output to warnings and errors.
414
378
  *
415
- * The quieting is genuinely useful for BUILDS — that is most of what an
416
- * agent session prints — but it applies to test runs too, where it removes
379
+ * The quieting is genuinely useful for builds, which are most of what an
380
+ * agent session prints, but it applies to test runs too, where it removes
417
381
  * `TEST_START` and console INFO: exactly the lines a hang or stall
418
382
  * diagnosis needs, and the ones FireForge's own classifier reads
419
383
  * (`Ran N checks`, `Unexpected results:`, `TEST-UNEXPECTED-*`). Unsetting
420
384
  * the variable globally would give up the build half as well, so the
421
- * dispatchers below unset it per TEST dispatch and leave the build path
385
+ * dispatchers below unset it per test dispatch and leave the build path
422
386
  * alone.
423
387
  */
424
388
  const CODING_AGENT_ENV_MARKERS = ['CLAUDECODE'];
@@ -433,52 +397,20 @@ function testVerbosityEnvUnset(fullOutput) {
433
397
  return fullOutput === true ? CODING_AGENT_ENV_MARKERS : undefined;
434
398
  }
435
399
  /**
436
- * Runs mach test while capturing streamed output for better diagnostics.
400
+ * Runs one mach test command (`mach test` / `mach xpcshell-test` / `mach
401
+ * mochitest`) while capturing streamed output for better diagnostics. The
402
+ * three commands share every other detail of the dispatch (resource guard,
403
+ * verbosity env, teardown-noise annotation), so they share one entry point
404
+ * keyed by `kind` rather than three copies that drift.
437
405
  *
438
- * @param engineDir - Absolute path to the engine checkout
439
- * @param testPaths - Test paths to pass to `mach test`; empty runs the default set
440
- * @param args - Extra `mach test` arguments appended after the paths
441
- * @param env - Optional extra environment variables for the mach process
442
- * (merged over `process.env` by the exec layer). Used by
443
- * `fireforge test --perf-samples` to publish the artifact-path contract.
444
- */
445
- export async function testWithOutput(engineDir, testPaths = [], args = [], env, fullOutput) {
446
- const guard = await installMachResourceGuard(engineDir);
447
- const envUnset = testVerbosityEnvUnset(fullOutput);
448
- return runMachCapture(['test', ...testPaths, ...args], engineDir, {
449
- env: { ...guard.env, ...env },
450
- ...(envUnset ? { envUnset } : {}),
451
- annotateKnownTeardownNoise: true,
452
- });
453
- }
454
- /**
455
- * Runs `mach xpcshell-test` (the suite-specific xpcshell command) while
456
- * capturing output. Unlike the generic `mach test`, the suite-specific
457
- * commands degrade a broken mozlog resource monitor to a warning instead of
458
- * crashing at startup, so `fireforge test` dispatches single-suite runs here
459
- * to stay resilient to the host psutil failure.
460
- *
461
- * Signature mirrors {@link testWithOutput} so the two are interchangeable in
462
- * the dispatch path.
463
- */
464
- export async function xpcshellTestWithOutput(engineDir, testPaths = [], args = [], env, fullOutput) {
465
- const guard = await installMachResourceGuard(engineDir);
466
- const envUnset = testVerbosityEnvUnset(fullOutput);
467
- return runMachCapture(['xpcshell-test', ...testPaths, ...args], engineDir, {
468
- env: { ...guard.env, ...env },
469
- ...(envUnset ? { envUnset } : {}),
470
- annotateKnownTeardownNoise: true,
471
- });
472
- }
473
- /**
474
- * Runs `mach mochitest` (covers browser-chrome / mochitest flavors) while
475
- * capturing output. The suite-specific counterpart to {@link testWithOutput}
476
- * for non-xpcshell single-suite runs — see {@link xpcshellTestWithOutput}.
406
+ * @param kind - Which mach command to run
407
+ * @param options - Engine checkout, test paths, extra args, env, verbosity
477
408
  */
478
- export async function mochitestWithOutput(engineDir, testPaths = [], args = [], env, fullOutput) {
409
+ export async function runMachTestSuite(kind, options) {
410
+ const { engineDir, testPaths = [], args = [], env, fullOutput } = options;
479
411
  const guard = await installMachResourceGuard(engineDir);
480
412
  const envUnset = testVerbosityEnvUnset(fullOutput);
481
- return runMachCapture(['mochitest', ...testPaths, ...args], engineDir, {
413
+ return runMachCapture([kind, ...testPaths, ...args], engineDir, {
482
414
  env: { ...guard.env, ...env },
483
415
  ...(envUnset ? { envUnset } : {}),
484
416
  annotateKnownTeardownNoise: true,
@@ -11,7 +11,7 @@ export interface MarionettePortHolder {
11
11
  /**
12
12
  * Full command line the holder was launched with, when the probe
13
13
  * can recover it. `lsof` by itself only returns the basename, so
14
- * POSIX callers see `command === commandLine`; Windows callers
14
+ * POSIX callers see `command === commandLine`. Windows callers
15
15
  * recover the full command line via `Get-Process`. Used to detect
16
16
  * the `-marionette` flag, which positively identifies a stale
17
17
  * browser rather than an unrelated listener.
@@ -33,7 +33,7 @@ export interface RunningBundleProcess {
33
33
  commandLine: string;
34
34
  /**
35
35
  * Elapsed wall-clock seconds since the process started, from `ps
36
- * etime=`. `NaN` when the field was absent or unparseable — callers must
36
+ * etime=`. `NaN` when the field was absent or unparseable, and callers must
37
37
  * omit the clause rather than print a zero, because "started 0s ago" is
38
38
  * exactly the wrong attribution for a peer session's long-lived browser.
39
39
  */
@@ -44,7 +44,7 @@ export interface RunningBundleProcess {
44
44
  * regression-testable.
45
45
  *
46
46
  * Reads `pid etime args` where the middle field is a `ps` duration. The
47
- * elapsed field is parsed OPTIMISTICALLY: a listing produced without
47
+ * elapsed field is parsed optimistically: a listing produced without
48
48
  * `etime=` still parses, with the duration reported as `NaN` and the whole
49
49
  * second field folded back into the command line, so a caller that lost the
50
50
  * column degrades to the old behaviour instead of dropping the process.
@@ -62,17 +62,17 @@ export declare function ensureLaunchableBrowserNotRunning(launchableBinary: stri
62
62
  /**
63
63
  * Builds the refusal for a running objdir browser.
64
64
  *
65
- * Reports the EVIDENCE rather than a bare PID: the elapsed time and the
65
+ * Reports the evidence rather than a bare PID: the elapsed time and the
66
66
  * command line are what let an operator on a shared checkout decide whose
67
67
  * process it is, without reconstructing PID ancestry by hand. A downstream
68
- * fork hit exactly this — the message named a PID belonging to a peer
68
+ * fork hit exactly this: the message named a PID belonging to a peer
69
69
  * session's live browser and offered a flag that would have killed a
70
70
  * multi-hour evaluation run.
71
71
  *
72
- * So `--kill-stale-marionette` is offered ONLY for a marionette-driven
72
+ * So `--kill-stale-marionette` is offered only for a marionette-driven
73
73
  * browser. For a bare launch the message says what it found and stops:
74
74
  * FireForge cannot tell a dead run's orphan from someone's live window, and
75
- * the flag is the right MANUAL clear once ownership is verified, never an
75
+ * the flag is the right manual clear once ownership is verified, never an
76
76
  * automatic one.
77
77
  *
78
78
  * Exported for direct unit testing.
@@ -88,7 +88,7 @@ export declare function describeRunningBundleRefusal(holder: RunningBundleProces
88
88
  export declare function probeMarionettePort(port?: number): Promise<MarionettePortProbeResult>;
89
89
  /**
90
90
  * Raises a targeted {@link GeneralError} when the Marionette port
91
- * is held by a browser process; raises a softer warning-shaped
91
+ * is held by a browser process. Raises a softer warning-shaped
92
92
  * error when the holder is unrelated (so the operator still sees
93
93
  * a useful signal but can decide whether to wait it out).
94
94
  *
@@ -118,18 +118,20 @@ export declare function ensureMarionettePortAvailable(port?: number, options?: {
118
118
  * the test command auto-forwards to mach.
119
119
  *
120
120
  * @param machArgs - Forwarded mach args as they would appear on the command
121
- * line (one element per token; `--foo=bar` and `--foo bar` both supported).
122
- * @returns The integer port if a recognised arg is present and parses; else
123
- * `undefined`.
121
+ * line (one element per token, with `--foo=bar` and `--foo bar` both
122
+ * supported).
123
+ * @returns The integer port if a recognised arg is present and parses,
124
+ * otherwise `undefined`.
124
125
  */
125
126
  export declare function extractForwardedMarionettePort(machArgs: string[]): number | undefined;
126
127
  /**
127
128
  * True when forwarded mach args already set a Marionette **client** address
128
129
  * for mach/mochitest (`--marionette=host:port` or `--marionette host:port`).
129
130
  * Used only to avoid duplicating FireForge's auto-injected
130
- * `--marionette=127.0.0.1:<n>`; this is not a full URL validator (IPv6, etc.).
131
+ * `--marionette=127.0.0.1:<n>`. This is not a full URL validator (IPv6,
132
+ * etc.).
131
133
  *
132
- * Deliberately does **not** treat `--marionette-port` as a client endpoint.
134
+ * Does not treat `--marionette-port` as a client endpoint.
133
135
  */
134
136
  export declare function forwardedMachArgsIncludeMarionetteClient(machArgs: string[]): boolean;
135
137
  /**
@@ -147,20 +149,3 @@ export declare function hasExplicitXpcshellFlavor(machArgs: string[]): boolean;
147
149
  * Marionette-driven browser).
148
150
  */
149
151
  export declare function shouldAutoForwardMarionettePortToMach(machArgs: string[]): boolean;
150
- /**
151
- * Heuristic: do the test paths or forwarded mach args indicate a flavour
152
- * that actually launches a Marionette-driven browser? Browser-chrome and
153
- * mochitest do; xpcshell does not. A no-paths invocation (the default "run
154
- * all tests" shape) is treated as marionette-relevant since it includes
155
- * browser-chrome.
156
- *
157
- * Note: `fireforge test` auto-forward of `--marionette-port` to mach uses
158
- * {@link shouldAutoForwardMarionettePortToMach} (mach-arg flavor gate) rather
159
- * than this function alone, so toolkit paths without `/mochitest/` still get
160
- * the listener pref and harness `--marionette=127.0.0.1:<n>` when appropriate.
161
- *
162
- * @param testPaths - Engine-relative paths after `stripEnginePrefix`.
163
- * @param machArgs - Forwarded mach args (post-`--mach-arg`).
164
- * @returns `true` when the run is likely to bind a Marionette listener.
165
- */
166
- export declare function isMarionetteFlavor(testPaths: string[], machArgs: string[]): boolean;