@hominis/fireforge 0.46.0 → 0.46.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (606) hide show
  1. package/CHANGELOG.md +381 -498
  2. package/dist/bin/fireforge.d.ts +1 -1
  3. package/dist/bin/fireforge.js +17 -17
  4. package/dist/build-info.json +4 -4
  5. package/dist/src/cli-usage-error.d.ts +9 -9
  6. package/dist/src/cli-usage-error.js +12 -12
  7. package/dist/src/cli.d.ts +3 -2
  8. package/dist/src/cli.js +29 -28
  9. package/dist/src/commands/bootstrap-checks.js +2 -1
  10. package/dist/src/commands/bootstrap.js +2 -2
  11. package/dist/src/commands/build.js +12 -11
  12. package/dist/src/commands/config.js +9 -9
  13. package/dist/src/commands/destructive-decision.d.ts +4 -4
  14. package/dist/src/commands/destructive-decision.js +4 -4
  15. package/dist/src/commands/discard.js +5 -5
  16. package/dist/src/commands/doctor-check-core.d.ts +4 -4
  17. package/dist/src/commands/doctor-external-toolchains.js +2 -2
  18. package/dist/src/commands/doctor-furnace-config-sync.d.ts +2 -2
  19. package/dist/src/commands/doctor-furnace-config-sync.js +20 -20
  20. package/dist/src/commands/doctor-furnace-jar.d.ts +1 -1
  21. package/dist/src/commands/doctor-furnace-jar.js +1 -1
  22. package/dist/src/commands/doctor-furnace.js +22 -22
  23. package/dist/src/commands/doctor-orphaned-harness.d.ts +10 -11
  24. package/dist/src/commands/doctor-orphaned-harness.js +10 -11
  25. package/dist/src/commands/doctor-patch-manifest.d.ts +2 -1
  26. package/dist/src/commands/doctor-patch-manifest.js +7 -6
  27. package/dist/src/commands/doctor-post-rebase-audit.js +2 -2
  28. package/dist/src/commands/doctor-source-pin.d.ts +12 -12
  29. package/dist/src/commands/doctor-source-pin.js +14 -14
  30. package/dist/src/commands/doctor-working-tree.d.ts +3 -3
  31. package/dist/src/commands/doctor-working-tree.js +3 -3
  32. package/dist/src/commands/doctor.d.ts +2 -2
  33. package/dist/src/commands/doctor.js +9 -9
  34. package/dist/src/commands/download.js +15 -13
  35. package/dist/src/commands/export-all.js +8 -8
  36. package/dist/src/commands/export-flow.d.ts +5 -5
  37. package/dist/src/commands/export-flow.js +14 -14
  38. package/dist/src/commands/export-placement-conflicts.d.ts +3 -3
  39. package/dist/src/commands/export-placement-conflicts.js +9 -9
  40. package/dist/src/commands/export-placement-gate.d.ts +2 -2
  41. package/dist/src/commands/export-placement-gate.js +5 -5
  42. package/dist/src/commands/export-placement-policy.d.ts +1 -1
  43. package/dist/src/commands/export-placement-policy.js +1 -1
  44. package/dist/src/commands/export-shared.d.ts +10 -10
  45. package/dist/src/commands/export-shared.js +13 -13
  46. package/dist/src/commands/export.js +4 -4
  47. package/dist/src/commands/furnace/apply.js +16 -16
  48. package/dist/src/commands/furnace/chrome-doc-remove.d.ts +1 -1
  49. package/dist/src/commands/furnace/chrome-doc-remove.js +1 -1
  50. package/dist/src/commands/furnace/chrome-doc-templates.d.ts +14 -14
  51. package/dist/src/commands/furnace/chrome-doc-templates.js +17 -17
  52. package/dist/src/commands/furnace/chrome-doc-tests.d.ts +2 -2
  53. package/dist/src/commands/furnace/chrome-doc-tests.js +4 -4
  54. package/dist/src/commands/furnace/chrome-doc.d.ts +8 -8
  55. package/dist/src/commands/furnace/chrome-doc.js +18 -18
  56. package/dist/src/commands/furnace/create-browser-test.d.ts +1 -1
  57. package/dist/src/commands/furnace/create-browser-test.js +4 -4
  58. package/dist/src/commands/furnace/create-dry-run.d.ts +4 -4
  59. package/dist/src/commands/furnace/create-dry-run.js +4 -4
  60. package/dist/src/commands/furnace/create-features.d.ts +2 -2
  61. package/dist/src/commands/furnace/create-features.js +2 -2
  62. package/dist/src/commands/furnace/create-mochikit.d.ts +4 -4
  63. package/dist/src/commands/furnace/create-mochikit.js +7 -7
  64. package/dist/src/commands/furnace/create-templates.d.ts +14 -14
  65. package/dist/src/commands/furnace/create-templates.js +18 -18
  66. package/dist/src/commands/furnace/create-xpcshell.d.ts +5 -5
  67. package/dist/src/commands/furnace/create-xpcshell.js +8 -8
  68. package/dist/src/commands/furnace/create.d.ts +1 -1
  69. package/dist/src/commands/furnace/create.js +10 -10
  70. package/dist/src/commands/furnace/deploy.js +4 -4
  71. package/dist/src/commands/furnace/diff.js +7 -7
  72. package/dist/src/commands/furnace/index.js +1 -1
  73. package/dist/src/commands/furnace/init.js +15 -15
  74. package/dist/src/commands/furnace/list.js +2 -2
  75. package/dist/src/commands/furnace/override.d.ts +1 -1
  76. package/dist/src/commands/furnace/override.js +15 -15
  77. package/dist/src/commands/furnace/preview.js +17 -17
  78. package/dist/src/commands/furnace/refresh.js +6 -6
  79. package/dist/src/commands/furnace/remove-mutations.d.ts +3 -3
  80. package/dist/src/commands/furnace/remove-mutations.js +19 -18
  81. package/dist/src/commands/furnace/remove-state.d.ts +1 -1
  82. package/dist/src/commands/furnace/remove-state.js +1 -1
  83. package/dist/src/commands/furnace/remove.js +2 -2
  84. package/dist/src/commands/furnace/rename-browser-test.js +9 -8
  85. package/dist/src/commands/furnace/rename-xpcshell.d.ts +2 -2
  86. package/dist/src/commands/furnace/rename-xpcshell.js +3 -3
  87. package/dist/src/commands/furnace/rename.js +9 -9
  88. package/dist/src/commands/furnace/scan.js +3 -3
  89. package/dist/src/commands/furnace/status.js +7 -7
  90. package/dist/src/commands/furnace/sync.js +6 -6
  91. package/dist/src/commands/furnace/test-file-name.d.ts +2 -2
  92. package/dist/src/commands/furnace/test-file-name.js +2 -2
  93. package/dist/src/commands/furnace/validate.js +11 -12
  94. package/dist/src/commands/import.js +20 -20
  95. package/dist/src/commands/lint-per-patch.js +8 -8
  96. package/dist/src/commands/lint-per-run-checkjs.d.ts +12 -13
  97. package/dist/src/commands/lint-per-run-checkjs.js +14 -15
  98. package/dist/src/commands/lint-report.d.ts +3 -3
  99. package/dist/src/commands/lint-report.js +4 -4
  100. package/dist/src/commands/lint.d.ts +3 -3
  101. package/dist/src/commands/lint.js +35 -35
  102. package/dist/src/commands/manifest.d.ts +4 -4
  103. package/dist/src/commands/package.js +2 -2
  104. package/dist/src/commands/patch/compact.d.ts +2 -2
  105. package/dist/src/commands/patch/compact.js +8 -8
  106. package/dist/src/commands/patch/delete.d.ts +1 -1
  107. package/dist/src/commands/patch/delete.js +8 -8
  108. package/dist/src/commands/patch/lint-ignore.d.ts +3 -4
  109. package/dist/src/commands/patch/lint-ignore.js +14 -15
  110. package/dist/src/commands/patch/move-files-create.d.ts +2 -2
  111. package/dist/src/commands/patch/move-files-create.js +5 -5
  112. package/dist/src/commands/patch/move-files-into.d.ts +2 -2
  113. package/dist/src/commands/patch/move-files-into.js +3 -3
  114. package/dist/src/commands/patch/move-files.js +1 -1
  115. package/dist/src/commands/patch/patch-context.d.ts +1 -1
  116. package/dist/src/commands/patch/rename.d.ts +4 -4
  117. package/dist/src/commands/patch/rename.js +8 -8
  118. package/dist/src/commands/patch/reorder.js +10 -10
  119. package/dist/src/commands/patch/split-plan.d.ts +3 -3
  120. package/dist/src/commands/patch/split-plan.js +6 -5
  121. package/dist/src/commands/patch/split.d.ts +2 -2
  122. package/dist/src/commands/patch/split.js +5 -5
  123. package/dist/src/commands/patch/staged-dependency-validate.d.ts +1 -1
  124. package/dist/src/commands/patch/staged-dependency-validate.js +3 -3
  125. package/dist/src/commands/patch/staged-dependency.d.ts +1 -1
  126. package/dist/src/commands/patch/staged-dependency.js +6 -6
  127. package/dist/src/commands/patch/tier.d.ts +2 -2
  128. package/dist/src/commands/patch/tier.js +5 -5
  129. package/dist/src/commands/patch-rename-map.d.ts +1 -1
  130. package/dist/src/commands/patch-rename-map.js +1 -1
  131. package/dist/src/commands/pending-resolution.d.ts +5 -5
  132. package/dist/src/commands/pending-resolution.js +5 -5
  133. package/dist/src/commands/re-export-adjacent.d.ts +3 -3
  134. package/dist/src/commands/re-export-adjacent.js +8 -8
  135. package/dist/src/commands/re-export-bulk-scan.d.ts +3 -3
  136. package/dist/src/commands/re-export-bulk-scan.js +17 -17
  137. package/dist/src/commands/re-export-drift.d.ts +10 -10
  138. package/dist/src/commands/re-export-drift.js +29 -29
  139. package/dist/src/commands/re-export-files.js +14 -15
  140. package/dist/src/commands/re-export-lint.d.ts +26 -26
  141. package/dist/src/commands/re-export-lint.js +27 -27
  142. package/dist/src/commands/re-export-options.d.ts +1 -1
  143. package/dist/src/commands/re-export-options.js +1 -1
  144. package/dist/src/commands/re-export-register.d.ts +1 -1
  145. package/dist/src/commands/re-export-register.js +1 -1
  146. package/dist/src/commands/re-export-scan.d.ts +1 -1
  147. package/dist/src/commands/re-export-scan.js +7 -7
  148. package/dist/src/commands/re-export-single.d.ts +1 -1
  149. package/dist/src/commands/re-export-single.js +20 -20
  150. package/dist/src/commands/re-export.js +7 -6
  151. package/dist/src/commands/rebase/abort.js +6 -6
  152. package/dist/src/commands/rebase/continue.js +8 -7
  153. package/dist/src/commands/rebase/index.d.ts +1 -1
  154. package/dist/src/commands/rebase/index.js +3 -3
  155. package/dist/src/commands/rebase/patch-loop.js +18 -17
  156. package/dist/src/commands/register.js +5 -5
  157. package/dist/src/commands/reset.js +1 -1
  158. package/dist/src/commands/resolve.d.ts +2 -2
  159. package/dist/src/commands/resolve.js +3 -3
  160. package/dist/src/commands/run.js +26 -26
  161. package/dist/src/commands/setup-support.js +4 -4
  162. package/dist/src/commands/setup.js +1 -1
  163. package/dist/src/commands/source.js +1 -1
  164. package/dist/src/commands/status-check.d.ts +3 -3
  165. package/dist/src/commands/status-check.js +4 -4
  166. package/dist/src/commands/status-json.d.ts +14 -13
  167. package/dist/src/commands/status-json.js +9 -8
  168. package/dist/src/commands/status-output.d.ts +3 -3
  169. package/dist/src/commands/status-output.js +3 -3
  170. package/dist/src/commands/status-ownership.d.ts +3 -3
  171. package/dist/src/commands/status-ownership.js +3 -3
  172. package/dist/src/commands/status.js +22 -22
  173. package/dist/src/commands/test-build-phase.d.ts +1 -1
  174. package/dist/src/commands/test-build-phase.js +17 -17
  175. package/dist/src/commands/test-diagnose.d.ts +1 -1
  176. package/dist/src/commands/test-diagnose.js +20 -20
  177. package/dist/src/commands/test-modes.d.ts +2 -2
  178. package/dist/src/commands/test-modes.js +4 -4
  179. package/dist/src/commands/test-run.d.ts +11 -11
  180. package/dist/src/commands/test-run.js +15 -15
  181. package/dist/src/commands/test-stale-gate.d.ts +12 -12
  182. package/dist/src/commands/test-stale-gate.js +13 -13
  183. package/dist/src/commands/test-verdict.d.ts +6 -6
  184. package/dist/src/commands/test-verdict.js +11 -11
  185. package/dist/src/commands/test.d.ts +3 -3
  186. package/dist/src/commands/test.js +36 -36
  187. package/dist/src/commands/token-coverage.js +3 -3
  188. package/dist/src/commands/token-list.js +5 -5
  189. package/dist/src/commands/token.js +9 -9
  190. package/dist/src/commands/tree.js +19 -19
  191. package/dist/src/commands/typecheck.d.ts +6 -6
  192. package/dist/src/commands/typecheck.js +7 -7
  193. package/dist/src/commands/verify.d.ts +3 -3
  194. package/dist/src/commands/verify.js +10 -10
  195. package/dist/src/commands/watch.js +11 -11
  196. package/dist/src/commands/wire.js +13 -13
  197. package/dist/src/core/ast-utils.d.ts +7 -7
  198. package/dist/src/core/ast-utils.js +8 -8
  199. package/dist/src/core/branding.d.ts +5 -5
  200. package/dist/src/core/branding.js +3 -3
  201. package/dist/src/core/browser-wire.d.ts +1 -1
  202. package/dist/src/core/browser-wire.js +4 -4
  203. package/dist/src/core/build-audit-platform.d.ts +6 -6
  204. package/dist/src/core/build-audit-platform.js +26 -26
  205. package/dist/src/core/build-audit-registration.d.ts +5 -5
  206. package/dist/src/core/build-audit-registration.js +7 -7
  207. package/dist/src/core/build-audit-resolve.d.ts +5 -5
  208. package/dist/src/core/build-audit-resolve.js +6 -6
  209. package/dist/src/core/build-audit-skip.d.ts +8 -8
  210. package/dist/src/core/build-audit-skip.js +12 -12
  211. package/dist/src/core/build-audit-transforms.d.ts +2 -2
  212. package/dist/src/core/build-audit-transforms.js +3 -3
  213. package/dist/src/core/build-audit.d.ts +8 -8
  214. package/dist/src/core/build-audit.js +39 -37
  215. package/dist/src/core/build-baseline-types.d.ts +19 -18
  216. package/dist/src/core/build-baseline-types.js +1 -1
  217. package/dist/src/core/build-baseline.d.ts +8 -8
  218. package/dist/src/core/build-baseline.js +14 -14
  219. package/dist/src/core/build-jar-escalation.d.ts +8 -8
  220. package/dist/src/core/build-jar-escalation.js +15 -15
  221. package/dist/src/core/build-overwrite-guard.d.ts +4 -4
  222. package/dist/src/core/build-overwrite-guard.js +13 -13
  223. package/dist/src/core/build-prepare.d.ts +4 -4
  224. package/dist/src/core/build-prepare.js +16 -15
  225. package/dist/src/core/config-mutate.js +4 -4
  226. package/dist/src/core/config-state.js +2 -2
  227. package/dist/src/core/config-validate-build-audit.js +3 -3
  228. package/dist/src/core/config-validate-file-size.d.ts +1 -1
  229. package/dist/src/core/config-validate-file-size.js +2 -2
  230. package/dist/src/core/config-validate.js +8 -9
  231. package/dist/src/core/config.d.ts +10 -10
  232. package/dist/src/core/config.js +10 -10
  233. package/dist/src/core/coverage-extend.d.ts +16 -16
  234. package/dist/src/core/coverage-extend.js +16 -16
  235. package/dist/src/core/destructive.d.ts +14 -14
  236. package/dist/src/core/destructive.js +9 -9
  237. package/dist/src/core/diff-hunks.d.ts +2 -2
  238. package/dist/src/core/diff-hunks.js +7 -7
  239. package/dist/src/core/discard-baseline.d.ts +10 -10
  240. package/dist/src/core/discard-baseline.js +15 -16
  241. package/dist/src/core/display-state.d.ts +11 -11
  242. package/dist/src/core/display-state.js +12 -12
  243. package/dist/src/core/engine-changes.d.ts +2 -2
  244. package/dist/src/core/engine-changes.js +2 -2
  245. package/dist/src/core/engine-precondition.d.ts +4 -4
  246. package/dist/src/core/engine-precondition.js +2 -2
  247. package/dist/src/core/engine-session-lock.d.ts +18 -18
  248. package/dist/src/core/engine-session-lock.js +37 -37
  249. package/dist/src/core/export-moved-code-shape.d.ts +7 -7
  250. package/dist/src/core/export-moved-code-shape.js +8 -8
  251. package/dist/src/core/file-lock-owner.d.ts +11 -11
  252. package/dist/src/core/file-lock-owner.js +18 -18
  253. package/dist/src/core/file-lock.d.ts +12 -12
  254. package/dist/src/core/file-lock.js +52 -39
  255. package/dist/src/core/firefox-cache.d.ts +1 -1
  256. package/dist/src/core/firefox-cache.js +10 -10
  257. package/dist/src/core/firefox-download.d.ts +3 -3
  258. package/dist/src/core/firefox-download.js +6 -6
  259. package/dist/src/core/firefox-extract.d.ts +2 -2
  260. package/dist/src/core/firefox-extract.js +13 -13
  261. package/dist/src/core/firefox.d.ts +5 -5
  262. package/dist/src/core/firefox.js +8 -8
  263. package/dist/src/core/furnace-apply-dry-run.js +1 -1
  264. package/dist/src/core/furnace-apply-ftl.d.ts +5 -5
  265. package/dist/src/core/furnace-apply-ftl.js +8 -8
  266. package/dist/src/core/furnace-apply-helpers.d.ts +9 -9
  267. package/dist/src/core/furnace-apply-helpers.js +21 -21
  268. package/dist/src/core/furnace-apply-output.js +1 -1
  269. package/dist/src/core/furnace-apply-overwrite-warn.d.ts +9 -9
  270. package/dist/src/core/furnace-apply-overwrite-warn.js +9 -9
  271. package/dist/src/core/furnace-apply-undeploy-actions.d.ts +1 -1
  272. package/dist/src/core/furnace-apply-undeploy-actions.js +1 -1
  273. package/dist/src/core/furnace-apply.d.ts +3 -3
  274. package/dist/src/core/furnace-apply.js +22 -21
  275. package/dist/src/core/furnace-checksum-utils.d.ts +5 -5
  276. package/dist/src/core/furnace-checksum-utils.js +5 -5
  277. package/dist/src/core/furnace-config-custom.d.ts +1 -1
  278. package/dist/src/core/furnace-config-custom.js +2 -2
  279. package/dist/src/core/furnace-config-order.js +1 -1
  280. package/dist/src/core/furnace-config-tokens.d.ts +3 -3
  281. package/dist/src/core/furnace-config-tokens.js +3 -3
  282. package/dist/src/core/furnace-config-validate.js +2 -2
  283. package/dist/src/core/furnace-config.d.ts +4 -4
  284. package/dist/src/core/furnace-config.js +18 -18
  285. package/dist/src/core/furnace-constants.d.ts +6 -6
  286. package/dist/src/core/furnace-constants.js +6 -6
  287. package/dist/src/core/furnace-css-fragments.d.ts +6 -6
  288. package/dist/src/core/furnace-css-fragments.js +11 -11
  289. package/dist/src/core/furnace-dir-entry.d.ts +1 -1
  290. package/dist/src/core/furnace-dir-entry.js +1 -1
  291. package/dist/src/core/furnace-jsconfig.d.ts +7 -7
  292. package/dist/src/core/furnace-jsconfig.js +22 -20
  293. package/dist/src/core/furnace-operation.d.ts +21 -20
  294. package/dist/src/core/furnace-operation.js +36 -34
  295. package/dist/src/core/furnace-precondition.d.ts +10 -10
  296. package/dist/src/core/furnace-precondition.js +8 -8
  297. package/dist/src/core/furnace-refresh.js +2 -2
  298. package/dist/src/core/furnace-registration-ast.d.ts +2 -2
  299. package/dist/src/core/furnace-registration-ast.js +9 -9
  300. package/dist/src/core/furnace-registration-remove.d.ts +4 -4
  301. package/dist/src/core/furnace-registration-remove.js +6 -6
  302. package/dist/src/core/furnace-registration-validate.d.ts +2 -2
  303. package/dist/src/core/furnace-registration-validate.js +2 -2
  304. package/dist/src/core/furnace-registration.d.ts +5 -5
  305. package/dist/src/core/furnace-registration.js +7 -7
  306. package/dist/src/core/furnace-rollback.d.ts +1 -1
  307. package/dist/src/core/furnace-rollback.js +5 -5
  308. package/dist/src/core/furnace-stale-export.d.ts +17 -16
  309. package/dist/src/core/furnace-stale-export.js +16 -15
  310. package/dist/src/core/furnace-staleness.d.ts +2 -2
  311. package/dist/src/core/furnace-staleness.js +2 -2
  312. package/dist/src/core/furnace-state-persist.d.ts +10 -10
  313. package/dist/src/core/furnace-state-persist.js +10 -10
  314. package/dist/src/core/furnace-step-errors.d.ts +6 -6
  315. package/dist/src/core/furnace-step-errors.js +6 -6
  316. package/dist/src/core/furnace-validate-accessibility.js +14 -14
  317. package/dist/src/core/furnace-validate-compatibility.js +9 -9
  318. package/dist/src/core/furnace-validate-registration.d.ts +2 -2
  319. package/dist/src/core/furnace-validate-registration.js +13 -13
  320. package/dist/src/core/furnace-validate-structure.d.ts +1 -1
  321. package/dist/src/core/furnace-validate-structure.js +4 -4
  322. package/dist/src/core/furnace-validate.js +9 -9
  323. package/dist/src/core/furnace-version-drift.d.ts +5 -5
  324. package/dist/src/core/furnace-version-drift.js +5 -5
  325. package/dist/src/core/git-base.d.ts +4 -4
  326. package/dist/src/core/git-base.js +9 -9
  327. package/dist/src/core/git-diff-new-file.d.ts +4 -4
  328. package/dist/src/core/git-diff-new-file.js +8 -8
  329. package/dist/src/core/git-diff.d.ts +4 -4
  330. package/dist/src/core/git-diff.js +35 -34
  331. package/dist/src/core/git-file-ops.d.ts +6 -6
  332. package/dist/src/core/git-file-ops.js +7 -7
  333. package/dist/src/core/git-readonly-index.d.ts +12 -12
  334. package/dist/src/core/git-readonly-index.js +12 -12
  335. package/dist/src/core/git-status.d.ts +4 -4
  336. package/dist/src/core/git-status.js +4 -4
  337. package/dist/src/core/git.d.ts +3 -3
  338. package/dist/src/core/git.js +14 -14
  339. package/dist/src/core/harness-orphans.d.ts +17 -17
  340. package/dist/src/core/harness-orphans.js +20 -20
  341. package/dist/src/core/history-log.d.ts +3 -3
  342. package/dist/src/core/history-log.js +3 -3
  343. package/dist/src/core/license-headers.d.ts +19 -18
  344. package/dist/src/core/license-headers.js +29 -28
  345. package/dist/src/core/mach-build-artifacts.d.ts +21 -21
  346. package/dist/src/core/mach-build-artifacts.js +23 -23
  347. package/dist/src/core/mach-error-hints.d.ts +5 -5
  348. package/dist/src/core/mach-error-hints.js +13 -13
  349. package/dist/src/core/mach-known-noise-filter.d.ts +41 -38
  350. package/dist/src/core/mach-known-noise-filter.js +53 -50
  351. package/dist/src/core/mach-mozconfig.d.ts +6 -6
  352. package/dist/src/core/mach-mozconfig.js +15 -15
  353. package/dist/src/core/mach-python.d.ts +2 -1
  354. package/dist/src/core/mach-python.js +4 -3
  355. package/dist/src/core/mach-resource-shim.d.ts +12 -12
  356. package/dist/src/core/mach-resource-shim.js +20 -20
  357. package/dist/src/core/mach.d.ts +23 -23
  358. package/dist/src/core/mach.js +36 -36
  359. package/dist/src/core/marionette-port.d.ts +15 -13
  360. package/dist/src/core/marionette-port.js +34 -31
  361. package/dist/src/core/marionette-preflight.d.ts +6 -6
  362. package/dist/src/core/marionette-preflight.js +23 -23
  363. package/dist/src/core/markdown-table.d.ts +9 -9
  364. package/dist/src/core/markdown-table.js +14 -14
  365. package/dist/src/core/mochitest-server-port.d.ts +8 -8
  366. package/dist/src/core/mochitest-server-port.js +14 -14
  367. package/dist/src/core/module-resolution-preflight.d.ts +8 -8
  368. package/dist/src/core/module-resolution-preflight.js +11 -11
  369. package/dist/src/core/moz-manifest-helpers.d.ts +7 -7
  370. package/dist/src/core/moz-manifest-helpers.js +7 -7
  371. package/dist/src/core/moz-manifest-register.d.ts +1 -1
  372. package/dist/src/core/moz-manifest-register.js +2 -2
  373. package/dist/src/core/moz-manifest-rules.js +11 -11
  374. package/dist/src/core/moz-manifest-tokenizers.js +1 -1
  375. package/dist/src/core/ownership-table.d.ts +5 -5
  376. package/dist/src/core/ownership-table.js +7 -7
  377. package/dist/src/core/parser-fallback.d.ts +3 -3
  378. package/dist/src/core/parser-fallback.js +3 -3
  379. package/dist/src/core/patch-apply-fuzz.d.ts +5 -5
  380. package/dist/src/core/patch-apply-fuzz.js +9 -9
  381. package/dist/src/core/patch-apply.d.ts +9 -9
  382. package/dist/src/core/patch-apply.js +30 -30
  383. package/dist/src/core/patch-export-update.d.ts +4 -4
  384. package/dist/src/core/patch-export-update.js +3 -3
  385. package/dist/src/core/patch-export.d.ts +10 -10
  386. package/dist/src/core/patch-export.js +13 -13
  387. package/dist/src/core/patch-identifier-suggest.d.ts +1 -1
  388. package/dist/src/core/patch-identifier-suggest.js +4 -4
  389. package/dist/src/core/patch-lint-binary.d.ts +7 -7
  390. package/dist/src/core/patch-lint-cache.d.ts +2 -2
  391. package/dist/src/core/patch-lint-cache.js +13 -13
  392. package/dist/src/core/patch-lint-checkjs.d.ts +26 -26
  393. package/dist/src/core/patch-lint-checkjs.js +42 -41
  394. package/dist/src/core/patch-lint-chrome-jsdoc.d.ts +8 -9
  395. package/dist/src/core/patch-lint-chrome-jsdoc.js +10 -11
  396. package/dist/src/core/patch-lint-creators.d.ts +3 -3
  397. package/dist/src/core/patch-lint-creators.js +3 -3
  398. package/dist/src/core/patch-lint-cross.d.ts +13 -13
  399. package/dist/src/core/patch-lint-cross.js +21 -21
  400. package/dist/src/core/patch-lint-css.d.ts +1 -1
  401. package/dist/src/core/patch-lint-css.js +5 -5
  402. package/dist/src/core/patch-lint-diff-tag.d.ts +5 -5
  403. package/dist/src/core/patch-lint-diff-tag.js +5 -5
  404. package/dist/src/core/patch-lint-diff.d.ts +4 -4
  405. package/dist/src/core/patch-lint-diff.js +4 -4
  406. package/dist/src/core/patch-lint-file-size.d.ts +3 -3
  407. package/dist/src/core/patch-lint-file-size.js +3 -3
  408. package/dist/src/core/patch-lint-forward-registration.d.ts +4 -4
  409. package/dist/src/core/patch-lint-forward-registration.js +12 -12
  410. package/dist/src/core/patch-lint-jsdoc.d.ts +2 -2
  411. package/dist/src/core/patch-lint-jsdoc.js +11 -11
  412. package/dist/src/core/patch-lint-module-registration.d.ts +1 -1
  413. package/dist/src/core/patch-lint-module-registration.js +1 -1
  414. package/dist/src/core/patch-lint-mozbuild.d.ts +1 -1
  415. package/dist/src/core/patch-lint-mozbuild.js +10 -10
  416. package/dist/src/core/patch-lint-observer.d.ts +3 -3
  417. package/dist/src/core/patch-lint-observer.js +7 -7
  418. package/dist/src/core/patch-lint-ownership.d.ts +6 -6
  419. package/dist/src/core/patch-lint-ownership.js +6 -6
  420. package/dist/src/core/patch-lint-prettier.d.ts +6 -6
  421. package/dist/src/core/patch-lint-prettier.js +6 -6
  422. package/dist/src/core/patch-lint-queue-types.d.ts +1 -1
  423. package/dist/src/core/patch-lint-queue-types.js +1 -1
  424. package/dist/src/core/patch-lint-staged-registration.d.ts +2 -2
  425. package/dist/src/core/patch-lint-staged-registration.js +6 -6
  426. package/dist/src/core/patch-lint-unmanaged-companion.d.ts +23 -23
  427. package/dist/src/core/patch-lint-unmanaged-companion.js +26 -26
  428. package/dist/src/core/patch-lint.d.ts +27 -26
  429. package/dist/src/core/patch-lint.js +48 -46
  430. package/dist/src/core/patch-lock.d.ts +1 -1
  431. package/dist/src/core/patch-lock.js +8 -8
  432. package/dist/src/core/patch-manifest-consistency.d.ts +7 -7
  433. package/dist/src/core/patch-manifest-consistency.js +16 -17
  434. package/dist/src/core/patch-manifest-files-affected.d.ts +1 -1
  435. package/dist/src/core/patch-manifest-files-affected.js +3 -3
  436. package/dist/src/core/patch-manifest-io.d.ts +14 -14
  437. package/dist/src/core/patch-manifest-io.js +27 -27
  438. package/dist/src/core/patch-manifest-query.d.ts +1 -1
  439. package/dist/src/core/patch-manifest-query.js +4 -4
  440. package/dist/src/core/patch-manifest-resolve.d.ts +5 -5
  441. package/dist/src/core/patch-manifest-resolve.js +7 -7
  442. package/dist/src/core/patch-manifest-validate.js +3 -3
  443. package/dist/src/core/patch-manifest.d.ts +2 -2
  444. package/dist/src/core/patch-manifest.js +2 -2
  445. package/dist/src/core/patch-parse.d.ts +14 -14
  446. package/dist/src/core/patch-parse.js +16 -16
  447. package/dist/src/core/patch-registration-refs.d.ts +4 -4
  448. package/dist/src/core/patch-registration-refs.js +7 -7
  449. package/dist/src/core/patch-transform.d.ts +8 -8
  450. package/dist/src/core/patch-transform.js +13 -13
  451. package/dist/src/core/process-cpu-time.d.ts +1 -1
  452. package/dist/src/core/process-cpu-time.js +5 -5
  453. package/dist/src/core/rebase-session.d.ts +7 -7
  454. package/dist/src/core/rebase-session.js +8 -8
  455. package/dist/src/core/register-result.d.ts +1 -1
  456. package/dist/src/core/register-result.js +1 -1
  457. package/dist/src/core/register-scaffold.d.ts +2 -2
  458. package/dist/src/core/register-scaffold.js +3 -3
  459. package/dist/src/core/register-shared-css.d.ts +3 -3
  460. package/dist/src/core/register-shared-css.js +4 -4
  461. package/dist/src/core/register-xpcshell-test.d.ts +2 -2
  462. package/dist/src/core/register-xpcshell-test.js +2 -2
  463. package/dist/src/core/run-log-redact.d.ts +12 -12
  464. package/dist/src/core/run-log-redact.js +16 -16
  465. package/dist/src/core/run-log.d.ts +9 -9
  466. package/dist/src/core/run-log.js +14 -14
  467. package/dist/src/core/shared-ftl.d.ts +2 -2
  468. package/dist/src/core/shared-ftl.js +6 -6
  469. package/dist/src/core/signal-critical.d.ts +2 -2
  470. package/dist/src/core/signal-critical.js +2 -2
  471. package/dist/src/core/smoke-patterns.d.ts +5 -5
  472. package/dist/src/core/smoke-patterns.js +9 -9
  473. package/dist/src/core/state-file.d.ts +3 -3
  474. package/dist/src/core/status-binary.d.ts +8 -8
  475. package/dist/src/core/status-binary.js +12 -12
  476. package/dist/src/core/status-classify.d.ts +17 -17
  477. package/dist/src/core/status-classify.js +11 -11
  478. package/dist/src/core/test-changed-prefs.d.ts +12 -12
  479. package/dist/src/core/test-changed-prefs.js +15 -15
  480. package/dist/src/core/test-harness-crash.d.ts +39 -39
  481. package/dist/src/core/test-harness-crash.js +67 -67
  482. package/dist/src/core/test-harness-output.d.ts +7 -7
  483. package/dist/src/core/test-harness-output.js +7 -7
  484. package/dist/src/core/test-harness-verdict-notes.d.ts +13 -14
  485. package/dist/src/core/test-harness-verdict-notes.js +4 -4
  486. package/dist/src/core/test-path-scope.d.ts +8 -8
  487. package/dist/src/core/test-path-scope.js +11 -11
  488. package/dist/src/core/test-stale-check.d.ts +22 -21
  489. package/dist/src/core/test-stale-check.js +29 -28
  490. package/dist/src/core/test-stale-symlink.d.ts +1 -1
  491. package/dist/src/core/test-stale-symlink.js +1 -1
  492. package/dist/src/core/test-stall-triage.d.ts +9 -9
  493. package/dist/src/core/test-stall-triage.js +22 -22
  494. package/dist/src/core/token-category.d.ts +4 -4
  495. package/dist/src/core/token-category.js +13 -12
  496. package/dist/src/core/token-coverage.js +4 -5
  497. package/dist/src/core/token-dark-mode.d.ts +9 -9
  498. package/dist/src/core/token-dark-mode.js +11 -11
  499. package/dist/src/core/token-docs.d.ts +1 -1
  500. package/dist/src/core/token-inventory.d.ts +6 -6
  501. package/dist/src/core/token-inventory.js +7 -7
  502. package/dist/src/core/token-manager.d.ts +3 -3
  503. package/dist/src/core/token-manager.js +21 -21
  504. package/dist/src/core/token-scaffold.d.ts +4 -4
  505. package/dist/src/core/token-scaffold.js +4 -4
  506. package/dist/src/core/token-variant.d.ts +14 -14
  507. package/dist/src/core/token-variant.js +32 -32
  508. package/dist/src/core/toolchain-preflight.d.ts +15 -15
  509. package/dist/src/core/toolchain-preflight.js +22 -22
  510. package/dist/src/core/tree-cow.d.ts +3 -3
  511. package/dist/src/core/tree-cow.js +6 -6
  512. package/dist/src/core/tree-guard.d.ts +3 -3
  513. package/dist/src/core/tree-guard.js +23 -23
  514. package/dist/src/core/tree-store.d.ts +15 -15
  515. package/dist/src/core/tree-store.js +35 -33
  516. package/dist/src/core/typecheck-shim.d.ts +16 -15
  517. package/dist/src/core/typecheck-shim.js +26 -25
  518. package/dist/src/core/typecheck.d.ts +12 -12
  519. package/dist/src/core/typecheck.js +31 -31
  520. package/dist/src/core/wire-destroy.d.ts +2 -2
  521. package/dist/src/core/wire-destroy.js +5 -5
  522. package/dist/src/core/wire-dom-fragment.d.ts +3 -3
  523. package/dist/src/core/wire-dom-fragment.js +6 -6
  524. package/dist/src/core/wire-init.d.ts +2 -2
  525. package/dist/src/core/wire-init.js +7 -7
  526. package/dist/src/core/wire-subscript.d.ts +1 -1
  527. package/dist/src/core/wire-subscript.js +3 -3
  528. package/dist/src/core/wire-utils.d.ts +9 -9
  529. package/dist/src/core/wire-utils.js +11 -11
  530. package/dist/src/core/xpcshell-appdir.d.ts +20 -20
  531. package/dist/src/core/xpcshell-appdir.js +26 -26
  532. package/dist/src/core/xpcshell-profile-dir.d.ts +3 -3
  533. package/dist/src/core/xpcshell-profile-dir.js +7 -7
  534. package/dist/src/errors/base.d.ts +22 -21
  535. package/dist/src/errors/base.js +22 -21
  536. package/dist/src/errors/build.d.ts +6 -6
  537. package/dist/src/errors/build.js +6 -6
  538. package/dist/src/errors/codes.d.ts +10 -10
  539. package/dist/src/errors/codes.js +10 -10
  540. package/dist/src/errors/furnace.d.ts +2 -2
  541. package/dist/src/errors/git.d.ts +1 -1
  542. package/dist/src/errors/git.js +1 -1
  543. package/dist/src/errors/patch.d.ts +3 -3
  544. package/dist/src/errors/patch.js +3 -3
  545. package/dist/src/errors/rebase.d.ts +1 -1
  546. package/dist/src/errors/rebase.js +1 -1
  547. package/dist/src/errors/run.d.ts +1 -1
  548. package/dist/src/errors/run.js +1 -1
  549. package/dist/src/index.d.ts +4 -4
  550. package/dist/src/index.js +4 -4
  551. package/dist/src/types/commands/options.d.ts +86 -85
  552. package/dist/src/types/commands/patches.d.ts +19 -19
  553. package/dist/src/types/commands/project.d.ts +3 -3
  554. package/dist/src/types/config.d.ts +24 -23
  555. package/dist/src/types/furnace.d.ts +17 -17
  556. package/dist/src/types/json.d.ts +3 -3
  557. package/dist/src/types/json.js +2 -2
  558. package/dist/src/types/typecheck.d.ts +3 -3
  559. package/dist/src/utils/assert.d.ts +1 -1
  560. package/dist/src/utils/assert.js +6 -6
  561. package/dist/src/utils/build-info.d.ts +5 -5
  562. package/dist/src/utils/build-info.js +6 -6
  563. package/dist/src/utils/child-env.d.ts +5 -5
  564. package/dist/src/utils/child-env.js +5 -5
  565. package/dist/src/utils/concurrency.d.ts +2 -2
  566. package/dist/src/utils/concurrency.js +2 -2
  567. package/dist/src/utils/elapsed.js +1 -1
  568. package/dist/src/utils/errors.d.ts +8 -8
  569. package/dist/src/utils/errors.js +8 -8
  570. package/dist/src/utils/fs.d.ts +1 -1
  571. package/dist/src/utils/fs.js +8 -8
  572. package/dist/src/utils/line-dispatch.d.ts +3 -3
  573. package/dist/src/utils/line-dispatch.js +5 -5
  574. package/dist/src/utils/logger.d.ts +4 -4
  575. package/dist/src/utils/logger.js +11 -11
  576. package/dist/src/utils/machine-output.js +2 -2
  577. package/dist/src/utils/options.d.ts +13 -13
  578. package/dist/src/utils/options.js +20 -20
  579. package/dist/src/utils/package-root.js +2 -2
  580. package/dist/src/utils/paths.d.ts +4 -4
  581. package/dist/src/utils/paths.js +4 -4
  582. package/dist/src/utils/process-group.d.ts +8 -8
  583. package/dist/src/utils/process-group.js +19 -19
  584. package/dist/src/utils/process.d.ts +34 -33
  585. package/dist/src/utils/process.js +20 -19
  586. package/dist/src/utils/ps-duration.d.ts +4 -4
  587. package/dist/src/utils/ps-duration.js +6 -6
  588. package/dist/src/utils/regex.d.ts +4 -4
  589. package/dist/src/utils/regex.js +7 -7
  590. package/dist/src/utils/sleep.d.ts +7 -7
  591. package/dist/src/utils/sleep.js +7 -7
  592. package/dist/src/utils/stdio-drain.d.ts +7 -7
  593. package/dist/src/utils/stdio-drain.js +8 -8
  594. package/dist/src/utils/validation.d.ts +11 -12
  595. package/dist/src/utils/validation.js +20 -21
  596. package/docs/README.md +2 -2
  597. package/docs/configuration.md +120 -114
  598. package/docs/exit-codes.md +63 -58
  599. package/docs/furnace.md +20 -19
  600. package/docs/lifecycle-invariants.md +412 -251
  601. package/docs/machine-output.md +33 -32
  602. package/docs/patch-workflow.md +48 -45
  603. package/docs/run-logs.md +62 -58
  604. package/docs/testing.md +101 -101
  605. package/docs/verification-trees.md +23 -22
  606. package/package.json +2 -2
@@ -45,7 +45,7 @@ export function canaryTimeoutSeconds(projectConfig) {
45
45
  /** Emits or throws the one-word canary verdict. */
46
46
  export function reportCanaryOutcome(outcome) {
47
47
  // Written raw as the run's last stdout line on green and throw paths
48
- // alike — see the FIREFORGE-VERDICT contract in test-harness-crash.ts.
48
+ // alike. See the FIREFORGE-VERDICT contract in test-harness-crash.ts.
49
49
  try {
50
50
  if (outcome.verdict.kind === 'tests-ran-ok') {
51
51
  success('Canary: green');
@@ -97,16 +97,16 @@ function buildMixedHarnessMessage(classification) {
97
97
  * dispatch, so refusing it before spending minutes in a pre-test build
98
98
  * is strictly better. A nonexistent path classifies as
99
99
  * nonXpcshell (findNearestXpcshellManifest returns null), so classifying
100
- * before assertTestPathsExist is harmless — existence is still asserted
100
+ * before assertTestPathsExist is harmless: existence is still asserted
101
101
  * after the stale/coverage gates, preserving their precedence over
102
102
  * missing-path errors. `xpcshellOnly` (non-empty request, zero
103
103
  * nonXpcshell paths) gates the Marionette preflight and the mochitest
104
- * client flags; pathless runs keep the full-suite behavior.
104
+ * client flags. Pathless runs keep the full-suite behavior.
105
105
  */
106
106
  export async function classifyBeforeDispatch(engineDir, normalizedPaths, options) {
107
107
  const classification = await classifyTestHarnesses(engineDir, normalizedPaths);
108
108
  if (classification.xpcshell.length > 0 && classification.nonXpcshell.length > 0) {
109
- // `--build-only` never dispatches, so a mixed request is legal there —
109
+ // `--build-only` never dispatches, so a mixed request is legal there:
110
110
  // packaging the union is the whole point.
111
111
  if (options?.allowMixed !== true) {
112
112
  throw new GeneralError(buildMixedHarnessMessage(classification));
@@ -3,10 +3,10 @@
3
3
  * sequential per-file sharding of multi-path invocations.
4
4
  *
5
5
  * Sharding exists because passing several browser-chrome files to one mach
6
- * invocation destabilizes later files — cross-file profile/pref bleed in the
6
+ * invocation destabilizes later files: cross-file profile/pref bleed in the
7
7
  * shared mochitest profile makes the second file time out at window-open
8
8
  * while each file passes in isolation. Sequential single-file harness runs
9
- * cost startup time but make results reproducible; the combined invocation
9
+ * cost startup time but make results reproducible. The combined invocation
10
10
  * stays available via `--no-shard`.
11
11
  */
12
12
  import { type DisplaySleepState } from '../core/display-state.js';
@@ -54,8 +54,8 @@ export interface TestRunOutcome {
54
54
  /** Whether xpcshell appdir injection was attempted for this invocation. */
55
55
  appdirInjectionAttempted: boolean;
56
56
  /**
57
- * Display power state measured for a HEADED no-output stall;
58
- * undefined when the shape did not apply and no probe ran.
57
+ * Display power state measured for a HEADED no-output stall. Undefined
58
+ * when the shape did not apply and no probe ran.
59
59
  */
60
60
  displayState?: DisplaySleepState | undefined;
61
61
  }
@@ -68,7 +68,7 @@ export declare function runTestsWithRetries(ctx: TestRunContext, paths: string[]
68
68
  /**
69
69
  * One sequential harness invocation of a sharded run: a requested path
70
70
  * argument and the mach paths dispatched for it. A file argument is a group
71
- * of one; a directory argument groups its enumerated test files so the whole
71
+ * of one. A directory argument groups its enumerated test files so the whole
72
72
  * directory still runs in ONE browser instance, keeping cross-file state
73
73
  * behaviour within a directory run.
74
74
  */
@@ -88,25 +88,25 @@ export interface ShardedRunSummary {
88
88
  shards: ShardOutcome[];
89
89
  passed: number;
90
90
  total: number;
91
- /** Aggregate classifier verdict — see {@link deriveAggregateShardVerdict}. */
91
+ /** Aggregate classifier verdict. See {@link deriveAggregateShardVerdict}. */
92
92
  aggregate: HarnessRunVerdict;
93
93
  }
94
94
  /**
95
95
  * Derives the aggregate classification for a sharded run: all-green is
96
- * `tests-ran-ok`; otherwise the most structural failure wins — a crashed
96
+ * `tests-ran-ok`. Otherwise the most structural failure wins. A crashed
97
97
  * shard makes the whole run `harness-crash`, then `no-tests`, then plain
98
- * `test-failures` — so the aggregate `reason=` keeps the classifier-driven
98
+ * `test-failures`, so the aggregate `reason=` keeps the classifier-driven
99
99
  * contract instead of collapsing every failure to `test-failures`.
100
100
  */
101
101
  export declare function deriveAggregateShardVerdict(shards: ShardOutcome[]): HarnessRunVerdict;
102
102
  /**
103
103
  * Runs each requested path argument as its own sequential harness
104
104
  * invocation (a directory argument's enumerated files stay together in
105
- * one invocation — see {@link ShardGroup}) and prints an aggregate
105
+ * one invocation, see {@link ShardGroup}) and prints an aggregate
106
106
  * report. Per-shard failures are diagnosed via `diagnoseShardFailure`
107
107
  * (which receives the throwing diagnosis chain from the command layer)
108
108
  * but downgraded to warnings so every shard runs. The aggregate verdict
109
- * line and the aggregate error are NOT produced here — the caller runs
109
+ * line and the aggregate error are not produced here: the caller runs
110
110
  * the engine-generation integrity check first and then calls
111
111
  * {@link finalizeShardedOutcome}, so a run invalidated by a concurrent
112
112
  * `engine/` mutation can never print `PASS` before the check fails.
@@ -114,7 +114,7 @@ export declare function deriveAggregateShardVerdict(shards: ShardOutcome[]): Har
114
114
  export declare function runShardedTests(ctx: TestRunContext, groups: ShardGroup[], diagnoseShardFailure: (outcome: TestRunOutcome, label: string) => string | undefined): Promise<ShardedRunSummary>;
115
115
  /**
116
116
  * Emits the aggregate FIREFORGE-VERDICT line for a sharded run, then
117
- * throws the aggregate error when any shard did not pass — the same
117
+ * throws the aggregate error when any shard did not pass, the same
118
118
  * emit-then-throw shape as `finalizeSingleRunOutcome`. Called only after
119
119
  * the engine-generation check succeeded.
120
120
  */
@@ -4,10 +4,10 @@
4
4
  * sequential per-file sharding of multi-path invocations.
5
5
  *
6
6
  * Sharding exists because passing several browser-chrome files to one mach
7
- * invocation destabilizes later files — cross-file profile/pref bleed in the
7
+ * invocation destabilizes later files: cross-file profile/pref bleed in the
8
8
  * shared mochitest profile makes the second file time out at window-open
9
9
  * while each file passes in isolation. Sequential single-file harness runs
10
- * cost startup time but make results reproducible; the combined invocation
10
+ * cost startup time but make results reproducible. The combined invocation
11
11
  * stays available via `--no-shard`.
12
12
  */
13
13
  import { probeDisplaySleepState } from '../core/display-state.js';
@@ -38,16 +38,16 @@ function machKindForSuite(suite) {
38
38
  * stale-xpcshell-symlink repair path the single-run flow already used.
39
39
  */
40
40
  export async function runTestsWithRetries(ctx, paths) {
41
- // Pure mochitest dispatches keep their env byte-identical — the profile
41
+ // Pure mochitest dispatches keep their env byte-identical, since the profile
42
42
  // variable is xpcshell-harness-specific. Generic `mach
43
43
  // test` runs may include xpcshell paths, so they get the isolation too.
44
44
  if (ctx.suite === 'mochitest') {
45
45
  return runTestsWithRetriesInner(ctx, paths, ctx.env);
46
46
  }
47
47
  // Fresh profile dir per harness invocation: shards isolate from each
48
- // other and from concurrent `fireforge test` processes; the crash /
49
- // symlink-repair retries inside one invocation deliberately REUSE the
50
- // same directory (they are the same logical run and the harness
48
+ // other and from concurrent `fireforge test` processes. The crash /
49
+ // symlink-repair retries inside one invocation reuse the same directory
50
+ // on purpose (they are the same logical run and the harness
51
51
  // re-initialises the profile contents itself).
52
52
  return withXpcshellProfileDir(ctx.env, (env) => runTestsWithRetriesInner(ctx, paths, env));
53
53
  }
@@ -88,7 +88,7 @@ async function runTestsWithRetriesInner(ctx, paths, env) {
88
88
  `Retrying (attempt ${attempts + 1} of ${maxAttempts})...`);
89
89
  }
90
90
  // A verdict whose every unexpected result is time-driven pref noise is
91
- // still a FAIL — only the note changes, so a `unexpected=2` line is not
91
+ // still a FAIL. Only the note changes, so a `unexpected=2` line is not
92
92
  // read as two real assertion failures.
93
93
  if (verdict.kind === 'test-failures' && verdict.note === undefined) {
94
94
  const prefNote = changedPrefNoiseVerdictNote(`${result.stdout}\n${result.stderr}`);
@@ -108,9 +108,9 @@ async function runTestsWithRetriesInner(ctx, paths, env) {
108
108
  return { result, verdict, attempts, appdirInjectionAttempted, displayState };
109
109
  }
110
110
  /**
111
- * Probes the display's power state for a HEADED no-output stall, and only for
112
- * that shape. Every other outcome — a passing run, a real test failure, a
113
- * headless run, any other crash shape — skips the probe entirely, so the
111
+ * Probes the display's power state for a headed no-output stall, and only for
112
+ * that shape. Every other outcome (a passing run, a real test failure, a
113
+ * headless run, any other crash shape) skips the probe entirely, so the
114
114
  * common paths spawn nothing.
115
115
  *
116
116
  * @returns The measured state, or undefined when the shape does not apply
@@ -132,9 +132,9 @@ const SHARD_STATUS_LABEL = {
132
132
  };
133
133
  /**
134
134
  * Derives the aggregate classification for a sharded run: all-green is
135
- * `tests-ran-ok`; otherwise the most structural failure wins — a crashed
135
+ * `tests-ran-ok`. Otherwise the most structural failure wins. A crashed
136
136
  * shard makes the whole run `harness-crash`, then `no-tests`, then plain
137
- * `test-failures` — so the aggregate `reason=` keeps the classifier-driven
137
+ * `test-failures`, so the aggregate `reason=` keeps the classifier-driven
138
138
  * contract instead of collapsing every failure to `test-failures`.
139
139
  */
140
140
  export function deriveAggregateShardVerdict(shards) {
@@ -150,11 +150,11 @@ export function deriveAggregateShardVerdict(shards) {
150
150
  /**
151
151
  * Runs each requested path argument as its own sequential harness
152
152
  * invocation (a directory argument's enumerated files stay together in
153
- * one invocation — see {@link ShardGroup}) and prints an aggregate
153
+ * one invocation, see {@link ShardGroup}) and prints an aggregate
154
154
  * report. Per-shard failures are diagnosed via `diagnoseShardFailure`
155
155
  * (which receives the throwing diagnosis chain from the command layer)
156
156
  * but downgraded to warnings so every shard runs. The aggregate verdict
157
- * line and the aggregate error are NOT produced here — the caller runs
157
+ * line and the aggregate error are not produced here: the caller runs
158
158
  * the engine-generation integrity check first and then calls
159
159
  * {@link finalizeShardedOutcome}, so a run invalidated by a concurrent
160
160
  * `engine/` mutation can never print `PASS` before the check fails.
@@ -193,7 +193,7 @@ export async function runShardedTests(ctx, groups, diagnoseShardFailure) {
193
193
  }
194
194
  /**
195
195
  * Emits the aggregate FIREFORGE-VERDICT line for a sharded run, then
196
- * throws the aggregate error when any shard did not pass — the same
196
+ * throws the aggregate error when any shard did not pass, the same
197
197
  * emit-then-throw shape as `finalizeSingleRunOutcome`. Called only after
198
198
  * the engine-generation check succeeded.
199
199
  */
@@ -3,40 +3,40 @@
3
3
  * and a run against a stale or under-packaged runtime: the packaging
4
4
  * coverage refusal, the stale-content refusal, and the compiled
5
5
  * StaticComponents refusal. Split out of `test.ts` so the command module
6
- * stays wiring; the probes and refusal copy live in
6
+ * stays wiring. The probes and refusal copy live in
7
7
  * `src/core/test-stale-check.ts`.
8
8
  */
9
9
  import type { BuildBaseline } from '../core/build-baseline-types.js';
10
10
  import type { TestOptions } from '../types/commands/index.js';
11
11
  /**
12
- * Stale-build preflight — when `--build` was NOT requested, detect packageable
13
- * engine edits since the last successful build and fail UP-FRONT unless the
12
+ * Stale-build preflight: when `--build` was not requested, detect packageable
13
+ * engine edits since the last successful build and fail up front unless the
14
14
  * operator explicitly accepts the stale package risk.
15
15
  *
16
- * Packaging COVERAGE is checked first, on EVERY non-`--build` run and
16
+ * Packaging coverage is checked first, on every non-`--build` run and
17
17
  * regardless of staleness or `--allow-stale-build`: a runtime packaged by a
18
- * file-scoped `test --build` can lack support fixtures for OTHER manifests
19
- * even when nothing changed since — dispatching such a run hangs on missing
18
+ * file-scoped `test --build` can lack support fixtures for other manifests
19
+ * even when nothing changed since, and dispatching such a run hangs on missing
20
20
  * fixtures rather than failing, so the flag (which only accepts stale
21
- * CONTENT) must not be the trigger. A three-file scoped rebuild leaving one
21
+ * content) must not be the trigger. A three-file scoped rebuild leaving one
22
22
  * fixture unpackaged makes a later run over different files time out waiting
23
23
  * on an event that never fires.
24
24
  *
25
25
  * Exception: a path-less `test --doctor` stops at the Marionette health check
26
26
  * (`runDoctorPreflight` returns 'stop' when no test paths were given) and
27
- * never dispatches a test, so it needs no packaging coverage — treating it as
27
+ * never dispatches a test, so it needs no packaging coverage. Treating it as
28
28
  * a full-suite request would refuse a probe that touches no fixtures. The
29
29
  * stale-content refusal still applies to it unchanged.
30
30
  */
31
31
  export declare function enforceStaleBuildGate(projectRoot: string, engineDir: string, options: TestOptions, normalizedPaths: readonly string[]): Promise<void>;
32
32
  /**
33
- * Compiled-StaticComponents gate — refuses runs whose child process would
33
+ * Compiled-StaticComponents gate: refuses runs whose child process would
34
34
  * resolve a stale compiled component table. `components.conf` entries bake
35
- * into compiled code that only a FULL build regenerates; a scoped
35
+ * into compiled code that only a full build regenerates. A scoped
36
36
  * `test --build` repackages the file but the failure surfaces as
37
37
  * `NS_ERROR_MALFORMED_URI` inside the test. Applies to build-less runs
38
- * (after the coverage refusal) AND to scoped `test --build` runs (before
39
- * the pre-test build — that build cannot fix the table). A path-less
38
+ * (after the coverage refusal) and to scoped `test --build` runs (before
39
+ * the pre-test build, which cannot fix the table). A path-less
40
40
  * `test --build` is exempt: its full build refreshes the anchor itself.
41
41
  * `--allow-stale-components` downgrades the refusal to a warning.
42
42
  */
@@ -4,29 +4,29 @@
4
4
  * and a run against a stale or under-packaged runtime: the packaging
5
5
  * coverage refusal, the stale-content refusal, and the compiled
6
6
  * StaticComponents refusal. Split out of `test.ts` so the command module
7
- * stays wiring; the probes and refusal copy live in
7
+ * stays wiring. The probes and refusal copy live in
8
8
  * `src/core/test-stale-check.ts`.
9
9
  */
10
10
  import { checkStaleBuildForTest, checkStaticComponentsStale, findChangedTestManifestsForPaths, findUncoveredRequestPaths, formatStaleBuildWarning, formatStaticComponentsRefusal, formatTestCoverageRefusal, } from '../core/test-stale-check.js';
11
11
  import { PreflightRefusalError } from '../errors/base.js';
12
12
  import { warn } from '../utils/logger.js';
13
13
  /**
14
- * Stale-build preflight — when `--build` was NOT requested, detect packageable
15
- * engine edits since the last successful build and fail UP-FRONT unless the
14
+ * Stale-build preflight: when `--build` was not requested, detect packageable
15
+ * engine edits since the last successful build and fail up front unless the
16
16
  * operator explicitly accepts the stale package risk.
17
17
  *
18
- * Packaging COVERAGE is checked first, on EVERY non-`--build` run and
18
+ * Packaging coverage is checked first, on every non-`--build` run and
19
19
  * regardless of staleness or `--allow-stale-build`: a runtime packaged by a
20
- * file-scoped `test --build` can lack support fixtures for OTHER manifests
21
- * even when nothing changed since — dispatching such a run hangs on missing
20
+ * file-scoped `test --build` can lack support fixtures for other manifests
21
+ * even when nothing changed since, and dispatching such a run hangs on missing
22
22
  * fixtures rather than failing, so the flag (which only accepts stale
23
- * CONTENT) must not be the trigger. A three-file scoped rebuild leaving one
23
+ * content) must not be the trigger. A three-file scoped rebuild leaving one
24
24
  * fixture unpackaged makes a later run over different files time out waiting
25
25
  * on an event that never fires.
26
26
  *
27
27
  * Exception: a path-less `test --doctor` stops at the Marionette health check
28
28
  * (`runDoctorPreflight` returns 'stop' when no test paths were given) and
29
- * never dispatches a test, so it needs no packaging coverage — treating it as
29
+ * never dispatches a test, so it needs no packaging coverage. Treating it as
30
30
  * a full-suite request would refuse a probe that touches no fixtures. The
31
31
  * stale-content refusal still applies to it unchanged.
32
32
  */
@@ -37,7 +37,7 @@ export async function enforceStaleBuildGate(projectRoot, engineDir, options, nor
37
37
  const recordedCoverage = stale.baseline?.testPackagingCoverage;
38
38
  const uncovered = findUncoveredRequestPaths(recordedCoverage, normalizedPaths);
39
39
  if (uncovered.length > 0) {
40
- // The refusal is correct on its own; naming the manifest that gained
40
+ // The refusal is correct on its own. Naming the manifest that gained
41
41
  // an entry is the triage step it otherwise leaves to the reader.
42
42
  const changedManifests = await findChangedTestManifestsForPaths(engineDir, stale.baseline, uncovered);
43
43
  throw new PreflightRefusalError(formatTestCoverageRefusal(uncovered, Array.isArray(recordedCoverage) ? recordedCoverage : [], changedManifests), 'coverage-replaced');
@@ -64,13 +64,13 @@ export async function enforceStaleBuildGate(projectRoot, engineDir, options, nor
64
64
  }
65
65
  }
66
66
  /**
67
- * Compiled-StaticComponents gate — refuses runs whose child process would
67
+ * Compiled-StaticComponents gate: refuses runs whose child process would
68
68
  * resolve a stale compiled component table. `components.conf` entries bake
69
- * into compiled code that only a FULL build regenerates; a scoped
69
+ * into compiled code that only a full build regenerates. A scoped
70
70
  * `test --build` repackages the file but the failure surfaces as
71
71
  * `NS_ERROR_MALFORMED_URI` inside the test. Applies to build-less runs
72
- * (after the coverage refusal) AND to scoped `test --build` runs (before
73
- * the pre-test build — that build cannot fix the table). A path-less
72
+ * (after the coverage refusal) and to scoped `test --build` runs (before
73
+ * the pre-test build, which cannot fix the table). A path-less
74
74
  * `test --build` is exempt: its full build refreshes the anchor itself.
75
75
  * `--allow-stale-components` downgrades the refusal to a warning.
76
76
  */
@@ -1,7 +1,7 @@
1
1
  import type { HarnessRunVerdict } from '../core/test-harness-crash.js';
2
2
  /**
3
3
  * Reason codes the emission layer can put on a `FIREFORGE-VERDICT: FAIL`
4
- * line. The first three mirror the harness classifier; `preflight` covers
4
+ * line. The first three mirror the harness classifier. `preflight` covers
5
5
  * every failure before harness classification (missing/stale builds,
6
6
  * invalid paths, port conflicts, config errors, spawn failures),
7
7
  * `inconclusive` marks a run whose harness result exists but cannot be
@@ -34,12 +34,12 @@ export declare function emitPassVerdict(): void;
34
34
  * Emits a FAIL verdict carrying an emission-layer reason code, and
35
35
  * optionally the refusal class that produced it.
36
36
  *
37
- * `note=` is ADDITIVE, like the `log=`, `signal=` and `shards=` keys already
37
+ * `note=` is additive, like the `log=`, `signal=` and `shards=` keys already
38
38
  * on this line: `reason=` is unchanged and still comes from the closed set
39
39
  * in `docs/machine-output.md`, so a consumer that tokenises `key=value`
40
40
  * pairs is unaffected. It exists because `reason=preflight` covers every
41
- * gate before the harness — a missing build, a peer's packaging record, a
42
- * developer browser holding the objdir — and an unattended reader whose
41
+ * gate before the harness (a missing build, a peer's packaging record, a
42
+ * developer browser holding the objdir), and an unattended reader whose
43
43
  * pipe kept only the verdict line could not tell those apart.
44
44
  *
45
45
  * @param reason - Closed-set verdict reason
@@ -49,8 +49,8 @@ export declare function emitFailVerdict(reason: FireforgeVerdictReason, note?: s
49
49
  /**
50
50
  * Emits the terminal verdict for a run killed by a signal.
51
51
  *
52
- * Without it a killed run wrote NO terminal line, so a log tail could not
53
- * distinguish "killed" from "still running" from "never started" — recovery
52
+ * Without it a killed run wrote no terminal line, so a log tail could not
53
+ * distinguish "killed" from "still running" from "never started". Recovery
54
54
  * meant checking `ps` and the lock file by hand, at the exact moment (a
55
55
  * mass kill under a usage limit, mid-drain) when the tree's state most
56
56
  * needs to be readable. A no-op unless a run was actually in flight: the
@@ -27,21 +27,21 @@ export function verdictEmitted() {
27
27
  return emitted;
28
28
  }
29
29
  /**
30
- * Writes the run's single verdict line — raw stdout (clack's renderer can
31
- * drop output under non-TTY capture), first write wins. Every later call
30
+ * Writes the run's single verdict line to raw stdout (clack's renderer can
31
+ * drop output under non-TTY capture). First write wins. Every later call
32
32
  * is a no-op: the writer closest to the harness result runs first, so the
33
33
  * fallback layers (the engine-generation guard, the preflight wrapper)
34
34
  * can emit unconditionally without risking a second line. Writing also
35
- * seals stdout: the verdict must stay the run's LAST stdout write, so all
36
- * subsequent logger output — including the CLI-boundary error/cancel
37
- * rendering after an emit-then-throw path — routes to stderr.
35
+ * seals stdout: the verdict must stay the run's last stdout write, so all
36
+ * subsequent logger output, including the CLI-boundary error/cancel
37
+ * rendering after an emit-then-throw path, routes to stderr.
38
38
  */
39
39
  function writeVerdictLine(line) {
40
40
  if (emitted)
41
41
  return;
42
42
  emitted = true;
43
43
  // The run log's path rides the verdict line because the verdict must stay
44
- // the run's LAST stdout write — a separate announcement after it would
44
+ // the run's last stdout write: a separate announcement after it would
45
45
  // break that contract, and one before it is the first thing a `tail` cuts.
46
46
  // Appended as an additive `key=value`, so consumers that tokenize the line
47
47
  // are unaffected and a truncated tail still says where the full output is.
@@ -65,12 +65,12 @@ export function emitPassVerdict() {
65
65
  * Emits a FAIL verdict carrying an emission-layer reason code, and
66
66
  * optionally the refusal class that produced it.
67
67
  *
68
- * `note=` is ADDITIVE, like the `log=`, `signal=` and `shards=` keys already
68
+ * `note=` is additive, like the `log=`, `signal=` and `shards=` keys already
69
69
  * on this line: `reason=` is unchanged and still comes from the closed set
70
70
  * in `docs/machine-output.md`, so a consumer that tokenises `key=value`
71
71
  * pairs is unaffected. It exists because `reason=preflight` covers every
72
- * gate before the harness — a missing build, a peer's packaging record, a
73
- * developer browser holding the objdir — and an unattended reader whose
72
+ * gate before the harness (a missing build, a peer's packaging record, a
73
+ * developer browser holding the objdir), and an unattended reader whose
74
74
  * pipe kept only the verdict line could not tell those apart.
75
75
  *
76
76
  * @param reason - Closed-set verdict reason
@@ -83,8 +83,8 @@ export function emitFailVerdict(reason, note) {
83
83
  /**
84
84
  * Emits the terminal verdict for a run killed by a signal.
85
85
  *
86
- * Without it a killed run wrote NO terminal line, so a log tail could not
87
- * distinguish "killed" from "still running" from "never started" — recovery
86
+ * Without it a killed run wrote no terminal line, so a log tail could not
87
+ * distinguish "killed" from "still running" from "never started". Recovery
88
88
  * meant checking `ps` and the lock file by hand, at the exact moment (a
89
89
  * mass kill under a usage limit, mid-drain) when the tree's state most
90
90
  * needs to be readable. A no-op unless a run was actually in flight: the
@@ -4,9 +4,9 @@ import type { TestOptions } from '../types/commands/index.js';
4
4
  *
5
5
  * Owns the run's exactly-one-`FIREFORGE-VERDICT:`-line guarantee: the sink
6
6
  * is re-armed at entry, and any failure that reaches this boundary without
7
- * an inner writer having emitted — the preflight ladder (missing engine or
8
- * build, config errors, stale-build and port gates, missing paths), and a
9
- * harness process that failed to start — emits `FAIL reason=preflight`,
7
+ * an inner writer having emitted (the preflight ladder: missing engine or
8
+ * build, config errors, stale-build and port gates, missing paths, and a
9
+ * harness process that failed to start) emits `FAIL reason=preflight`,
10
10
  * since no harness classification exists for such a run. Writers closer to
11
11
  * the harness (doctor, canary, single, sharded, the engine-generation
12
12
  * guard) emit first and win.
@@ -42,7 +42,7 @@ async function assertTestPathsExist(engineDir, testPaths) {
42
42
  * auto-routes to the suite-specific command (`mach xpcshell-test` /
43
43
  * `mach mochitest`), which degrades a broken host resource monitor to a
44
44
  * warning instead of crashing generic `mach test` at startup. Mixed runs are
45
- * rejected before this point; a path-less "run all" or an explicit
45
+ * rejected before this point. A path-less "run all" or an explicit
46
46
  * `--generic-mach-test` opt-out stays on the generic command.
47
47
  */
48
48
  function resolveTestSuite(classification, forceGeneric) {
@@ -102,14 +102,14 @@ function logTestSelection(scopes) {
102
102
  }
103
103
  /**
104
104
  * Runs the `--doctor` marionette handshake probe. With no test paths the
105
- * probe is the entire command (returns `'stop'` after reporting); with
106
- * paths it gates the mach invocation — a FAIL throws before mach runs.
105
+ * probe is the entire command (returns `'stop'` after reporting). With
106
+ * paths it gates the mach invocation, where a FAIL throws before mach runs.
107
107
  */
108
108
  async function runDoctorPreflight(args) {
109
109
  const { engineDir, effectivePort, hasTestPaths, objDir, binaryName, launchablePath } = args;
110
110
  // Non-TTY captures need the banner even if clack's renderer defers output
111
- // in pipe mode; TTY users need the clack framing. Gated rather than
112
- // written twice — the unconditional pair printed the same line twice on a
111
+ // in pipe mode. TTY users need the clack framing. Gated rather than
112
+ // written twice: the unconditional pair printed the same line twice on a
113
113
  // terminal.
114
114
  if (process.stdout.isTTY) {
115
115
  info('Running marionette preflight...');
@@ -125,7 +125,7 @@ async function runDoctorPreflight(args) {
125
125
  // can drop the summary under non-TTY capture.
126
126
  //
127
127
  // Gated on non-TTY: unconditional, it stacks with the two clack renderings
128
- // below and the same line appears THREE times on a terminal. Captured
128
+ // below and the same line appears three times on a terminal. Captured
129
129
  // streams are exactly where this branch still fires.
130
130
  const directLine = formatMarionettePreflightLine(preflight);
131
131
  if (!process.stdout.isTTY) {
@@ -139,7 +139,7 @@ async function runDoctorPreflight(args) {
139
139
  throw new GeneralError('Marionette preflight reported FAIL — see output above.');
140
140
  }
141
141
  // Doctor-only runs end here, so they carry their own verdict line
142
- // (reason=preflight on failure); with test paths the verdict comes
142
+ // (reason=preflight on failure). With test paths the verdict comes
143
143
  // from the actual harness run downstream.
144
144
  emitPassVerdict();
145
145
  outro('Test completed');
@@ -161,12 +161,12 @@ async function runDoctorPreflight(args) {
161
161
  function appendMarionetteForwardingArgs(extraArgs, options, forwardedPort, xpcshellOnly = false) {
162
162
  // Auto-forward the Marionette port to mach when `--marionette-port` is set.
163
163
  // `--setpref=marionette.port=<n>` configures where the browser listener
164
- // binds; `--marionette=127.0.0.1:<n>` tells the mochitest harness client to
164
+ // binds. `--marionette=127.0.0.1:<n>` tells the mochitest harness client to
165
165
  // connect there (default client is 127.0.0.1:2828). xpcshell ignores both
166
166
  // for browser Marionette.
167
167
  //
168
168
  // Skip setpref forwarding when the operator already supplied an equivalent
169
- // arg via `--mach-arg` — duplicates would confuse without changing
169
+ // arg via `--mach-arg`: duplicates would confuse without changing
170
170
  // semantics. Skip when mach args explicitly request `--flavor=xpcshell` (or
171
171
  // `xpcshell-tests`): the preflight still honours `--marionette-port`, but
172
172
  // mach does not use the marionette.port pref on that harness. Any other arg
@@ -178,7 +178,7 @@ function appendMarionetteForwardingArgs(extraArgs, options, forwardedPort, xpcsh
178
178
  if (options.marionettePort === undefined)
179
179
  return;
180
180
  if (xpcshellOnly) {
181
- // Manifest classification says every requested path is xpcshell —
181
+ // Manifest classification says every requested path is xpcshell.
182
182
  // xpcshell ignores the browser Marionette path entirely, and forwarding
183
183
  // the mochitest client flags here makes mach reject the dispatch.
184
184
  info(`--marionette-port=${options.marionettePort} applied to the preflight probe only: the requested paths are xpcshell-only, and xpcshell ignores the browser Marionette port. Not forwarding --setpref=marionette.port or --marionette to mach.`);
@@ -272,9 +272,9 @@ const TEST_BUILD_PREFLIGHT = {
272
272
  *
273
273
  * Owns the run's exactly-one-`FIREFORGE-VERDICT:`-line guarantee: the sink
274
274
  * is re-armed at entry, and any failure that reaches this boundary without
275
- * an inner writer having emitted — the preflight ladder (missing engine or
276
- * build, config errors, stale-build and port gates, missing paths), and a
277
- * harness process that failed to start — emits `FAIL reason=preflight`,
275
+ * an inner writer having emitted (the preflight ladder: missing engine or
276
+ * build, config errors, stale-build and port gates, missing paths, and a
277
+ * harness process that failed to start) emits `FAIL reason=preflight`,
278
278
  * since no harness classification exists for such a run. Writers closer to
279
279
  * the harness (doctor, canary, single, sharded, the engine-generation
280
280
  * guard) emit first and win.
@@ -285,7 +285,7 @@ const TEST_BUILD_PREFLIGHT = {
285
285
  export async function testCommand(projectRoot, testPaths, options = {}) {
286
286
  intro('FireForge Test');
287
287
  resetVerdictEmission();
288
- // Opened before ANY work so a preflight refusal is logged too — those are
288
+ // Opened before any work so a preflight refusal is logged too. Those are
289
289
  // exactly the runs whose only output a `tail` throws away. Closed in
290
290
  // `finally`, after the verdict line has already read the path.
291
291
  setActiveRunLog(await openRunLog(projectRoot, 'test'));
@@ -308,14 +308,14 @@ function refusalNote(error) {
308
308
  return error instanceof PreflightRefusalError ? error.note : undefined;
309
309
  }
310
310
  /**
311
- * Puts a preflight refusal's own text on the operator's channel BEFORE the
311
+ * Puts a preflight refusal's own text on the operator's channel before the
312
312
  * verdict line, and into the run log.
313
313
  *
314
- * Both halves are load-bearing, and neither happened before:
314
+ * Both halves matter, and neither happened before:
315
315
  *
316
316
  * - `withErrorHandling` renders `error.userMessage` back in `cli.ts`, but
317
- * by then `emitFailVerdict` has called `setStdoutSealed(true)` — the seal
318
- * that keeps the verdict the LAST stdout write — so `logError` routes to
317
+ * by then `emitFailVerdict` has called `setStdoutSealed(true)`, the seal
318
+ * that keeps the verdict the last stdout write, so `logError` routes to
319
319
  * stderr. A run captured with `> file` therefore kept the verdict and
320
320
  * dropped the reason.
321
321
  * - That same rendering happens after this function's caller returns, and
@@ -333,15 +333,15 @@ function renderPreflightRefusal(error) {
333
333
  const block = `Preflight refused:\n${text}\n`;
334
334
  // Raw stdout rather than the clack logger: this must land on the captured
335
335
  // stream verbatim, and clack's renderer can drop output under non-TTY
336
- // capture — the same reason the verdict line is written this way.
336
+ // capture, the same reason the verdict line is written this way.
337
337
  process.stdout.write(block);
338
338
  writeToActiveRunLog(block);
339
339
  }
340
340
  /**
341
341
  * Verifies `engine/` did not change under the run before any PASS verdict
342
- * may print. On failure the run's verdict is `FAIL reason=inconclusive` —
343
- * the harness result exists but cannot be trusted (`preflight` would
344
- * misdescribe a run whose harness already executed) — emitted here so the
342
+ * may print. On failure the run's verdict is `FAIL reason=inconclusive`,
343
+ * because the harness result exists but cannot be trusted (`preflight` would
344
+ * misdescribe a run whose harness already executed). It is emitted here so the
345
345
  * guard's throw can never leave a stale or missing verdict line behind.
346
346
  */
347
347
  async function verifyEngineGenerationOrEmitInconclusive(engineDir, before) {
@@ -361,7 +361,7 @@ async function runTestCommandBody(projectRoot, testPaths, options = {}) {
361
361
  const buildCheck = await hasBuildArtifacts(paths.engine);
362
362
  assertBuildArtifacts(paths.engine, buildCheck, TEST_BUILD_PREFLIGHT);
363
363
  // Inside a verification tree, only the objdir the marker records was
364
- // proven rewritten-and-reconfigured to the tree; refuse any other.
364
+ // proven rewritten-and-reconfigured to the tree. Refuse any other.
365
365
  await assertObjdirMatchesTreeMarker(projectRoot, buildCheck.objDir);
366
366
  // Load the project config once so both the build and the port
367
367
  // probe have access to `binaryName` (the port probe uses it to
@@ -369,11 +369,11 @@ async function runTestCommandBody(projectRoot, testPaths, options = {}) {
369
369
  const projectConfig = await loadConfig(projectRoot);
370
370
  const canaryPath = resolveCanaryPath(options, projectConfig);
371
371
  assertTestModeCombinations(testPaths, options, canaryPath);
372
- // `hasBuildArtifacts` only confirms `obj-*/dist/` exists; a partial build
372
+ // `hasBuildArtifacts` only confirms `obj-*/dist/` exists. A partial build
373
373
  // (linker failed, packaging step interrupted) can satisfy that check
374
374
  // without ever writing the launchable binary the marionette preflight
375
375
  // needs to spawn. `fireforge run` already uses `hasRunnableBundle` to fail
376
- // fast with a precise message; mirroring it here makes `test --doctor`
376
+ // fast with a precise message. Mirroring it here makes `test --doctor`
377
377
  // against an incomplete build surface the missing-bundle path instead of a
378
378
  // cryptic `Browser process exited during spawn (exit code 1, signal none).
379
379
  // stderr tail: (empty)`.
@@ -382,8 +382,8 @@ async function runTestCommandBody(projectRoot, testPaths, options = {}) {
382
382
  // Normalized engine-relative request paths, hoisted above the build/stale
383
383
  // gate: the pre-test build records them as the packaging-coverage claim,
384
384
  // and the --allow-stale-build path checks the request against the
385
- // recorded coverage. (Existence is still asserted later, after the gate —
386
- // stale/coverage refusals keep precedence over missing-path errors.)
385
+ // recorded coverage. (Existence is still asserted later, after the gate,
386
+ // so stale/coverage refusals keep precedence over missing-path errors.)
387
387
  const requestedPaths = canaryPath !== undefined ? [canaryPath] : testPaths;
388
388
  const normalizedPaths = requestedPaths.map((p) => stripEnginePrefix(p).trim());
389
389
  const { classification, xpcshellOnly } = await classifyBeforeDispatch(paths.engine, normalizedPaths, { allowMixed: options.buildOnly === true });
@@ -433,22 +433,22 @@ async function runTestCommandBody(projectRoot, testPaths, options = {}) {
433
433
  }
434
434
  // --mach-arg is a verbatim passthrough for upstream mach/xpcshell/mochitest
435
435
  // flags FireForge does not model directly (see the xpcshell appdir hint
436
- // above for why). Appended AFTER --headless so mach sees
436
+ // above for why). Appended after --headless so mach sees
437
437
  // the FireForge-managed flags first and the escape-valve ones last, which
438
438
  // keeps the override precedence predictable.
439
439
  if (forwardedMachArgs.length > 0) {
440
440
  extraArgs.push(...forwardedMachArgs);
441
441
  }
442
442
  appendMarionetteForwardingArgs(extraArgs, options, forwardedPort, xpcshellOnly);
443
- // Directory arguments mean EXACTLY that directory: mozbuild's test
443
+ // Directory arguments mean exactly that directory: mozbuild's test
444
444
  // resolver matches paths by string prefix, so a bare directory arg
445
- // silently sweeps in prefix-named siblings — `…/test/hominis` also running
446
- // `…/test/hominis-tiles`, with no indication the scope widened. Each
445
+ // silently sweeps in prefix-named siblings, with `…/test/hominis` also
446
+ // running `…/test/hominis-tiles`, with no indication the scope widened. Each
447
447
  // directory argument therefore dispatches as its enumerated explicit
448
- // test-file list, which cannot prefix-match a sibling; a trailing-`/`
448
+ // test-file list, which cannot prefix-match a sibling. A trailing-`/`
449
449
  // normalization does not work, as mach still sweeps the sibling in. Any
450
450
  // prefix-siblings are echoed so the narrowed scope is visible.
451
- // Classification above intentionally used the raw argument forms; only the
451
+ // Classification above intentionally used the raw argument forms. Only the
452
452
  // mach dispatch needs the exact-match shape.
453
453
  const scopes = await analyzeTestPathScopes(paths.engine, normalizedPaths);
454
454
  const dispatchGroups = scopes.map((scope) => ({
@@ -482,10 +482,10 @@ async function runTestCommandBody(projectRoot, testPaths, options = {}) {
482
482
  : undefined;
483
483
  // Multi-argument requests shard into sequential harness runs by default:
484
484
  // one shared mochitest profile across files bleeds pref/media-query state
485
- // into later files. Sharding is per path ARGUMENT — a directory argument
485
+ // into later files. Sharding is per path argument: a directory argument
486
486
  // keeps its enumerated files together in one invocation, preserving the
487
487
  // one-browser-instance semantics of a directory run. `--no-shard` restores
488
- // the combined invocation. The default must not be SILENT: a cross-file
488
+ // the combined invocation. The default must not be silent: a cross-file
489
489
  // pollution repro otherwise "passes" because the comparison run was
490
490
  // sharded without saying so, misattributing a suite-context bug upstream.
491
491
  // Hence the one-line notice stating what sharding does and does not
@@ -500,7 +500,7 @@ async function runTestCommandBody(projectRoot, testPaths, options = {}) {
500
500
  summary = await runShardedTests(runCtx, dispatchGroups, (outcome, label) => diagnoseShardOutcome(outcome, label, projectConfig.binaryName, postRebuildContext));
501
501
  }
502
502
  finally {
503
- // Runs BEFORE the aggregate verdict below: a mutated engine/ emits
503
+ // Runs before the aggregate verdict below: a mutated engine/ emits
504
504
  // `FAIL reason=inconclusive` and throws, so an invalidated run can
505
505
  // never print `PASS shards=N/N` first. (A throw here masks an
506
506
  // in-flight shard error, as the plain assert always did.)