@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
@@ -9,16 +9,16 @@
9
9
  * - startup crashes from the mozlog resource monitor on macOS
10
10
  * (`AttributeError: 'SystemResourceMonitor' object has no attribute
11
11
  * 'poll_interval'`, `host_statistics64(HOST_VM_INFO64) syscall failed`,
12
- * `(ipc/mig) array not large enough` — a psutil/macOS mismatch) which
13
- * abort the run before any test executes;
12
+ * `(ipc/mig) array not large enough`, a psutil/macOS mismatch) which
13
+ * abort the run before any test executes.
14
14
  * - hangs after browser startup that die at the no-output timeout yet still
15
- * emit a `Passed: 0` summary;
15
+ * emit a `Passed: 0` summary.
16
16
  * - post-green shutdown re-entry, where a fully green run stalls on "must
17
17
  * wait for focus" and records "Application shut down (without crashing)
18
18
  * in the middle of a test!" as the only unexpected failure.
19
19
  *
20
- * Classification therefore keys on `TEST-START` presence — summary lines
21
- * never count as proof that tests ran — and recognizes the crash shapes
20
+ * Classification therefore keys on `TEST-START` presence, so summary lines
21
+ * never count as proof that tests ran, and recognizes the crash shapes
22
22
  * above so the command layer can retry them with a bounded budget instead of
23
23
  * reporting phantom test failures (or phantom passes).
24
24
  */
@@ -40,7 +40,7 @@ const GREEN_UNEXPECTED_SUMMARY_PATTERN = /\bUnexpected results:\s*0\b/;
40
40
  const NONZERO_UNEXPECTED_SUMMARY_PATTERN = /\bUnexpected results:\s*[1-9]/;
41
41
  /**
42
42
  * Execution signals emitted by the suite-specific xpcshell dispatch
43
- * (`mach xpcshell-test`), which does NOT print `TEST-START` lines the way
43
+ * (`mach xpcshell-test`), which does not print `TEST-START` lines the way
44
44
  * the generic `mach test` / browser-chrome dispatch does. A passing
45
45
  * single-file xpcshell run prints a result-summary block instead
46
46
  * (`TEST_END: Test PASS`, `Ran 16 checks`, `Unexpected results: 0`), so
@@ -49,16 +49,16 @@ const NONZERO_UNEXPECTED_SUMMARY_PATTERN = /\bUnexpected results:\s*[1-9]/;
49
49
  *
50
50
  * These markers are xpcshell-specific on purpose: the bare `Passed: 0` /
51
51
  * `Failed: 0` summary that the no-output hang shape prints is deliberately
52
- * NOT matched here — that case must still read as `no-tests`.
52
+ * not matched here, because that case must still read as `no-tests`.
53
53
  */
54
54
  const XPCSHELL_RESULT_SUMMARY_PATTERN = /\bTEST_END\b|\bRan \d+ checks?\b|\bResult summary:/i;
55
55
  const UNEXPECTED_LINE_PATTERN = /^.*\bTEST-UNEXPECTED-[A-Z-]+\b.*$/gm;
56
56
  /**
57
- * A `FAIL` token that is HARNESS-SHAPED. Deliberately not a bare `\bFAIL\b`
57
+ * A `FAIL` token that is harness-shaped. Not a bare `\bFAIL\b`
58
58
  * word match: that matched any output line containing the ordinary English
59
59
  * word, so a test's own passing diagnostic could manufacture a red run (see
60
- * {@link realUnexpectedFailureLines}). It also matched `TEST-KNOWN-FAIL` —
61
- * an EXPECTED failure — and counted it as a real one.
60
+ * {@link realUnexpectedFailureLines}). It also matched `TEST-KNOWN-FAIL`,
61
+ * an expected failure, and counted it as a real one.
62
62
  *
63
63
  * The `TEST-` prefix is what makes the token the harness's rather than
64
64
  * prose, and the negative lookahead is what keeps a known-fail annotation
@@ -67,11 +67,11 @@ const UNEXPECTED_LINE_PATTERN = /^.*\bTEST-UNEXPECTED-[A-Z-]+\b.*$/gm;
67
67
  const FAIL_LINE_PATTERN = /^.*\bTEST-(?!KNOWN-FAIL\b)[A-Z-]*FAIL\b.*$/gm;
68
68
  /**
69
69
  * The three concrete shapes Gecko prints for a real assertion failure.
70
- * Case-SENSITIVE and punctuation-anchored on purpose: the previous
70
+ * Case-sensitive and punctuation-anchored on purpose: the previous
71
71
  * `/\b(?:Assertion failure|MOZ_ASSERT|ASSERTION)\b/gim` was
72
72
  * case-insensitive, so the ordinary English word "assertion" in a passing
73
73
  * diagnostic ("If an assertion below times out, this is why") was read as
74
- * a failure — and the verdict then named that diagnostic as the first real
74
+ * a failure, and the verdict then named that diagnostic as the first real
75
75
  * test failure, pointing the reader at the wrong line.
76
76
  */
77
77
  const ASSERTION_LINE_PATTERN = /^.*(?:Assertion failure:|MOZ_ASSERT\(|###!!! ASSERTION).*$/gm;
@@ -81,7 +81,7 @@ const TRACEBACK_PATTERN = /Traceback \(most recent call last\)/;
81
81
  const NO_OUTPUT_TIMEOUT_PATTERN = /timed out after \d+ seconds with no output/i;
82
82
  /**
83
83
  * Crash-marker lines mozcrash / the mochitest harness print when the browser
84
- * process itself died. Matched against the RAW output (never noise-stripped):
84
+ * process itself died. Matched against the raw output (never noise-stripped):
85
85
  * any of these proves the run was truncated by a crash, so an embedded green
86
86
  * summary is under-reporting, not a result. `Main app process: killed by
87
87
  * SIGSEGV` at the second of eight files with a `Passed: 2 / Failed: 0`
@@ -103,10 +103,10 @@ const CRASH_MARKER_PATTERNS = [
103
103
  */
104
104
  // A `_DegradedReading` fallback that is not a real namedtuple duck type
105
105
  // crashes mozsystemmonitor on the fallback itself (`_build_meta` subscripts
106
- // the reading; `_collect` unpacks it); a startup abort with zero TEST-START
106
+ // the reading, `_collect` unpacks it). A startup abort with zero TEST-START
107
107
  // lines from this family is a crash, not a test failure. The `_collect
108
- // failed` variant is caught-and-logged, so it carries no Traceback header —
109
- // it gets its own zero-TEST-START check in `detectHarnessCrashSignature`
108
+ // failed` variant is caught-and-logged, so it carries no Traceback header.
109
+ // It gets its own zero-TEST-START check in `detectHarnessCrashSignature`
110
110
  // besides joining the traceback cluster.
111
111
  const DEGRADED_READING_CRASH_SIGNALS = [
112
112
  /'_DegradedReading' object is not subscriptable/,
@@ -123,7 +123,7 @@ const STARTUP_TRACEBACK_SIGNALS = [
123
123
  // On a degraded host every collector sample is rejected, aggregation has
124
124
  // nothing, and mozbuild's log_resource_usage dies on
125
125
  // usage["io"].read_bytes AFTER a fully successful compile ("Error running
126
- // mach" with complete artifacts). Environmental, not a build regression —
126
+ // mach" with complete artifacts). Environmental, not a build regression:
127
127
  // the protected build retries it, since an incremental retry is cheap and
128
128
  // the guard keeps the retry green.
129
129
  /AttributeError: 'NoneType' object has no attribute 'read_bytes'/,
@@ -165,8 +165,8 @@ const BENIGN_TRACEBACK_CONTEXT = /telemetry|glean/i;
165
165
  * Strips non-signal noise from captured output before crash-signature
166
166
  * matching: resource-monitor degradation warnings, and traceback blocks
167
167
  * that mach caught itself (telemetry submission tracebacks are printed but
168
- * never abort the run). The stripped text is used ONLY as crash evidence —
169
- * classification of test results still reads the full output.
168
+ * never abort the run). The stripped text is used only as crash evidence.
169
+ * Classification of test results still reads the full output.
170
170
  */
171
171
  export function stripNonSignalNoise(output) {
172
172
  const lines = output.split(/\r?\n/);
@@ -219,9 +219,9 @@ export function findCrashMarkerLine(output) {
219
219
  /**
220
220
  * True when the summary lines LOOK green: execution signal, `Unexpected
221
221
  * results: 0` with no non-zero count, `SUITE_END`, no real
222
- * `TEST-UNEXPECTED-*` lines. Deliberately blind to crash/truncation
223
- * evidence — {@link hasCompletedGreenSummary} layers that on top, and
224
- * {@link classifyHarnessRun} needs the distinction to report WHY a
222
+ * `TEST-UNEXPECTED-*` lines. Blind to crash/truncation
223
+ * evidence: {@link hasCompletedGreenSummary} layers that on top, and
224
+ * {@link classifyHarnessRun} needs the distinction to report why a
225
225
  * green-shaped summary was rejected.
226
226
  */
227
227
  function hasGreenShapedSummary(output) {
@@ -232,15 +232,15 @@ function hasGreenShapedSummary(output) {
232
232
  realUnexpectedFailureLines(output).length === 0);
233
233
  }
234
234
  /**
235
- * True when the output embeds a COMPLETED, GREEN suite summary: an execution
235
+ * True when the output embeds a completed, green suite summary: an execution
236
236
  * signal, `Unexpected results: 0` (and no non-zero unexpected count), a
237
- * `SUITE_END` marker, no real `TEST-UNEXPECTED-*` lines — and NO crash
237
+ * `SUITE_END` marker, no real `TEST-UNEXPECTED-*` lines, and no crash
238
238
  * marker. Such a run finished its suite, so any startup-traceback-shaped
239
- * noise in the same output is by definition non-fatal and this vetoes
240
- * signature-based crash classification; without the veto, fully green
239
+ * noise in the same output is non-fatal and this vetoes
240
+ * signature-based crash classification. Without the veto, fully green
241
241
  * sharded runs report `CRASH (N attempts)` because degradation warnings
242
- * match the psutil signals. A summary printed after a crash marker is NOT
243
- * "completed" — it only covers the files that ran before the crash.
242
+ * match the psutil signals. A summary printed after a crash marker is not
243
+ * "completed": it only covers the files that ran before the crash.
244
244
  * Exported for direct unit testing.
245
245
  */
246
246
  export function hasCompletedGreenSummary(output) {
@@ -252,7 +252,7 @@ const TEST_FILE_BASENAME_PATTERN = /^(?:browser|test)_.*\.m?js$/;
252
252
  * Start/end execution markers, both log dialects: the structured mozlog
253
253
  * `TEST_START`/`TEST_END` pair and the human browser-chrome
254
254
  * `TEST-START`/`TEST-OK` pair. `TEST-UNEXPECTED-*` end shapes are
255
- * irrelevant here — any such line already fails the green-summary check
255
+ * irrelevant here, since any such line already fails the green-summary check
256
256
  * before completeness is consulted.
257
257
  */
258
258
  const START_MARKER_PATTERN = /\bTEST[-_]START\b[:| ]*\s*(\S+)?/;
@@ -262,11 +262,11 @@ const END_MARKER_PATTERN = /\bTEST[-_]END\b|\bTEST-OK\b/;
262
262
  * requested file must produce a start marker, and every started test must
263
263
  * produce an end marker (the harness emits both even for failing files).
264
264
  *
265
- * Ends are paired with starts POSITIONALLY (last open start is closed by
266
- * the next end), not by filename — the xpcshell dialect's `TEST_END: Test
265
+ * Ends are paired with starts positionally (last open start is closed by
266
+ * the next end), not by filename: the xpcshell dialect's `TEST_END: Test
267
267
  * PASS` lines do not name the file. Requested paths that are not
268
268
  * test-file-shaped (directories, manifests) are skipped for the
269
- * never-started check; the start/end pairing scan covers them regardless.
269
+ * never-started check. The start/end pairing scan covers them regardless.
270
270
  * Exported for direct unit testing.
271
271
  */
272
272
  export function analyzeTestCompleteness(output, requestedPaths) {
@@ -302,7 +302,7 @@ export function analyzeTestCompleteness(output, requestedPaths) {
302
302
  function hasXpcshellResultSummary(output) {
303
303
  return XPCSHELL_RESULT_SUMMARY_PATTERN.test(output);
304
304
  }
305
- /** Unexpected-failure lines that are NOT the shutdown re-entry artifact. */
305
+ /** Unexpected-failure lines that are not the shutdown re-entry artifact. */
306
306
  function realUnexpectedFailureLines(output) {
307
307
  const matches = [
308
308
  ...(output.match(UNEXPECTED_LINE_PATTERN) ?? []),
@@ -319,8 +319,8 @@ function realUnexpectedFailureLines(output) {
319
319
  return [...new Set(matches.map((line) => line.trim()))].filter((line) => !SHUTDOWN_REENTRY_PATTERN.test(line));
320
320
  }
321
321
  /**
322
- * Non-global copies of the unexpected/assertion patterns for per-line use —
323
- * the `g`-flagged module patterns carry `lastIndex` state across `.test()`
322
+ * Non-global copies of the unexpected/assertion patterns for per-line use.
323
+ * The `g`-flagged module patterns carry `lastIndex` state across `.test()`
324
324
  * calls and must never be reused line-by-line.
325
325
  */
326
326
  const UNEXPECTED_LINE_SINGLE = /\bTEST-UNEXPECTED-[A-Z-]+\b/;
@@ -338,7 +338,7 @@ const FAILURE_BLOCK_CONTEXT_LIMIT = 6;
338
338
  * assertion/diff context, one string per block. The shutdown-reentry
339
339
  * artifact is excluded (it is harness noise, not a test result). When more
340
340
  * than `limit` blocks exist, a final `…(+N more …)` note is appended so the
341
- * operator knows the echo was truncated. Pure; exported for unit tests.
341
+ * operator knows the echo was truncated. Pure. Exported for unit tests.
342
342
  */
343
343
  export function collectUnexpectedFailureBlocks(output, limit = 5) {
344
344
  const lines = output.split(/\r?\n/);
@@ -404,7 +404,7 @@ export function detectHarnessCrashSignature(output) {
404
404
  // A completed green embedded summary vetoes signature-based crash
405
405
  // classification outright: the suite finished, so any startup-shaped
406
406
  // noise in the same output was non-fatal. (The post-green shutdown
407
- // re-entry shape below is exempt — it is deliberately a crash verdict on
407
+ // re-entry shape below is exempt: it is a crash verdict on
408
408
  // an otherwise-green log, keyed on its own explicit markers.)
409
409
  const greenSummaryVeto = hasCompletedGreenSummary(output);
410
410
  // Startup traceback cluster (resource monitor / psutil), scanned over
@@ -443,7 +443,7 @@ export function detectHarnessCrashSignature(output) {
443
443
  }
444
444
  // Post-green shutdown re-entry: every unexpected line is the
445
445
  // shutdown-mid-test artifact, the run stalled on focus, and at least one
446
- // such artifact exists — an otherwise green log.
446
+ // such artifact exists, on an otherwise green log.
447
447
  const shutdownLine = findLine(output, [SHUTDOWN_REENTRY_PATTERN]);
448
448
  if (shutdownLine && realFailures.length === 0 && FOCUS_STALL_PATTERN.test(output)) {
449
449
  return { reason: 'post-green shutdown re-entry during harness teardown', line: shutdownLine };
@@ -454,20 +454,20 @@ export function detectHarnessCrashSignature(output) {
454
454
  * Classifies a completed harness run. The decision tree, in order:
455
455
  *
456
456
  * 1. A recognized crash signature wins regardless of exit code (the
457
- * shutdown re-entry shape exits non-zero on an otherwise green run;
458
- * the hang shape can even exit zero with a `Passed: 0` summary).
459
- * 2. No execution signal with explicit paths requested means no test ran —
457
+ * shutdown re-entry shape exits non-zero on an otherwise green run,
458
+ * and the hang shape can even exit zero with a `Passed: 0` summary).
459
+ * 2. No execution signal with explicit paths requested means no test ran:
460
460
  * `no-tests`, even when the exit code is zero. The execution signal is
461
461
  * a `TEST-START` line (generic `mach test` / browser-chrome dispatch)
462
- * OR the suite-specific xpcshell result-summary block (the xpcshell
462
+ * or the suite-specific xpcshell result-summary block (the xpcshell
463
463
  * dispatch prints no `TEST-START`). Bare `Passed:`/`Failed:` summary
464
464
  * lines are still not trusted as evidence of execution.
465
- * 3. Exit code zero with tests started is a pass; anything else is a
466
- * test failure for the regular diagnosis chain — except a non-zero
467
- * exit whose embedded summary completed green AND shows no crash
465
+ * 3. Exit code zero with tests started is a pass. Anything else is a
466
+ * test failure for the regular diagnosis chain, except a non-zero
467
+ * exit whose embedded summary completed green and shows no crash
468
468
  * marker and no truncated/never-started requested file, which is a
469
469
  * pass with a `greenSummaryOverride` note (harness noise owns the
470
- * exit code). A green-shaped summary WITH such evidence is rejected
470
+ * exit code). A green-shaped summary with such evidence is rejected
471
471
  * (`greenSummaryRejected`) and fails.
472
472
  */
473
473
  export function classifyHarnessRun(exitCode, output, requestedPaths) {
@@ -476,10 +476,10 @@ export function classifyHarnessRun(exitCode, output, requestedPaths) {
476
476
  const firstRealFailure = realFailures[0];
477
477
  const failureBlocks = collectUnexpectedFailureBlocks(output);
478
478
  const secondaryHarnessSignature = firstRealFailure !== undefined ? detectSecondaryHarnessNoise(output) : undefined;
479
- // Checked BEFORE signature detection: a suite that ran clean and then died
480
- // in KNOWN upstream teardown noise is a PASS, not a crash. The teardown
479
+ // Checked before signature detection: a suite that ran clean and then died
480
+ // in known upstream teardown noise is a pass, not a crash. The teardown
481
481
  // traceback matches the startup-traceback cluster, and the green-summary
482
- // veto over that cluster requires a `SUITE_END` marker — which this very
482
+ // veto over that cluster requires a `SUITE_END` marker, which this very
483
483
  // traceback is what prevents from printing. Without this check a
484
484
  // substantively green suite (`Ran N checks` / `Unexpected results: 0`, no
485
485
  // unexpected lines) reports CRASH, indistinguishable at the summary level
@@ -558,17 +558,17 @@ export function classifyHarnessRun(exitCode, output, requestedPaths) {
558
558
  * unexplained residue is the recognized mozsystemmonitor teardown
559
559
  * traceback.
560
560
  *
561
- * Requires, all of them: tests actually executed; the summary printed
562
- * `Ran N checks` with an explicit `Unexpected results: 0`; no non-zero
563
- * unexpected count anywhere; no real `TEST-UNEXPECTED-*`/assertion line;
564
- * no crash marker; every requested test file both started and ended; and
561
+ * Requires, all of them: tests actually executed, the summary printed
562
+ * `Ran N checks` with an explicit `Unexpected results: 0`, no non-zero
563
+ * unexpected count anywhere, no real `TEST-UNEXPECTED-*`/assertion line,
564
+ * no crash marker, every requested test file both started and ended, and
565
565
  * the recognized teardown traceback is present. Anything short of that
566
- * falls through to the normal (failing) chain — with the failing condition
567
- * NAMED, so the next occurrence is a filed bug rather than another
566
+ * falls through to the normal (failing) chain, with the failing condition
567
+ * named, so the next occurrence is a filed bug rather than another
568
568
  * undiagnosable re-run.
569
569
  *
570
- * The conditions are evaluated in a fixed order and the FIRST failing one
571
- * is reported; a run can violate several, and reporting one deterministic
570
+ * The conditions are evaluated in a fixed order and the first failing one
571
+ * is reported. A run can violate several, and reporting one deterministic
572
572
  * condition beats an unordered list of everything that happened to be true.
573
573
  */
574
574
  function evaluateGreenTeardownOverride(output, counts, realFailures, requestedPaths) {
@@ -601,7 +601,7 @@ function evaluateGreenTeardownOverride(output, counts, realFailures, requestedPa
601
601
  if (crashLine !== undefined)
602
602
  return reject(`crash marker present: ${truncateEvidence(crashLine)}`);
603
603
  // The post-green shutdown re-entry shape is deliberately a crash verdict
604
- // on an otherwise-green log; it must not be swept up here.
604
+ // on an otherwise-green log. It must not be swept up here.
605
605
  if (SHUTDOWN_REENTRY_PATTERN.test(output)) {
606
606
  return reject('post-green shutdown re-entry shape present');
607
607
  }
@@ -616,8 +616,8 @@ function evaluateGreenTeardownOverride(output, counts, realFailures, requestedPa
616
616
  }
617
617
  /**
618
618
  * Parses the numeric counts from the harness's embedded result summary
619
- * (`Ran N checks` / `Unexpected results: N`). The LAST occurrence of each
620
- * wins — a multi-suite run prints one summary per suite and the final one
619
+ * (`Ran N checks` / `Unexpected results: N`). The last occurrence of each
620
+ * wins: a multi-suite run prints one summary per suite and the final one
621
621
  * covers the aggregate the operator sees. Absent counts are omitted (the
622
622
  * `FIREFORGE-VERDICT:` contract: an absent key means "summary did not
623
623
  * print it", never zero).
@@ -642,9 +642,9 @@ function lastCapturedCount(output, pattern) {
642
642
  return last;
643
643
  }
644
644
  /**
645
- * Formats the machine-readable `FIREFORGE-VERDICT:` line — the stable,
645
+ * Formats the machine-readable `FIREFORGE-VERDICT:` line: the stable,
646
646
  * greppable last line every `fireforge test` run prints so harness-verdict
647
- * consumers stop regexing mach internals. The status follows THIS
647
+ * consumers stop regexing mach internals. The status follows this
648
648
  * classifier, never the raw exit code: a crash-classified run says
649
649
  * `FAIL reason=crash` even at exit 0, and a green-summary-override pass
650
650
  * says `PASS` despite a non-zero mach exit. Count keys are omitted when
@@ -716,18 +716,18 @@ const SIGSEGV_EXIT_CODES = new Set([-11, 139]);
716
716
  * `xpcshell return code: -11` with zero output is the signature of an
717
717
  * `.sys.mjs` that a packaged module imports but whose `EXTRA_JS_MODULES`
718
718
  * registration never landed: the module loader faults before any logging
719
- * exists, so there is no import error, no stack, no test output — just a
719
+ * exists, so there is no import error, no stack, no test output, just a
720
720
  * dead process. It is indistinguishable from a genuine product crash
721
721
  * unless someone names the cause.
722
722
  *
723
- * "Produced no evidence" is deliberately semantic rather than a byte
723
+ * "Produced no evidence" is semantic rather than a byte
724
724
  * budget: no execution signal, no real failure line, and no mozcrash
725
725
  * marker. A run that got far enough to start a test, report a failure, or
726
726
  * leave a crash dump has evidence of its own, and the regular diagnosis
727
- * chain reads it — this branch is only for the case where there is
727
+ * chain reads it. This branch is only for the case where there is
728
728
  * nothing else to say.
729
729
  *
730
- * Pure; exported for direct unit testing.
730
+ * Pure. Exported for direct unit testing.
731
731
  *
732
732
  * @param exitCode - The harness process exit code
733
733
  * @param output - Combined stdout/stderr from the run
@@ -767,7 +767,7 @@ export function buildSilentSegfaultMessage(exitCode, requestedPaths) {
767
767
  }
768
768
  /**
769
769
  * Builds the message for a run that produced no `TEST-START` despite
770
- * requesting paths — including exit-code-zero runs whose `Passed: 0`
770
+ * requesting paths, including exit-code-zero runs whose `Passed: 0`
771
771
  * summary would otherwise read as a silent false green.
772
772
  */
773
773
  export function buildNoTestsRanMessage(exitCode, requestedPaths) {
@@ -11,20 +11,20 @@ export interface PostRebuildFailureContext {
11
11
  /**
12
12
  * Finds the first high-signal failure line from captured mach test output.
13
13
  *
14
- * Selection is FIRST-MATCHING-LINE, not first-matching-pattern, so the bare
15
- * `AttributeError:` arm above has exactly the same standing as
16
- * `TEST-UNEXPECTED-FAIL` — whichever appears earlier in the text wins. That
14
+ * Selection is by first matching line, not by first matching pattern, so the
15
+ * bare `AttributeError:` arm above has exactly the same standing as
16
+ * `TEST-UNEXPECTED-FAIL`: whichever appears earlier in the text wins. That
17
17
  * is how a run whose real defect was an export shard's file-count assertion
18
- * got diagnosed as the recognized mozsystemmonitor teardown crash: the
19
- * information was present and the SELECTION was wrong, which is the
18
+ * got diagnosed as the recognized mozsystemmonitor teardown crash. The
19
+ * information was present and the selection was wrong, which is the
20
20
  * expensive kind of wrong, because the named cause is a real, documented,
21
21
  * unrelated upstream defect and therefore reads as an answer.
22
22
  *
23
23
  * So a capture carrying the recognized teardown incident gets two passes:
24
24
  * candidates excluding its `AttributeError` header first, and only if that
25
25
  * finds nothing does the full set apply. The narrowness the rest of the
26
- * codebase maintains is preserved exactly — the exclusion is gated on
27
- * `hasKnownTeardownNoise` for the WHOLE capture, so it requires both the
26
+ * codebase maintains is preserved exactly: the exclusion is gated on
27
+ * `hasKnownTeardownNoise` for the whole capture, so it requires both the
28
28
  * closed attribute allowlist and a `resourcemonitor.py` frame. A novel
29
29
  * attribute, or a traceback from anywhere else, stays a real failure and is
30
30
  * still eligible to be reported.
@@ -26,20 +26,20 @@ const FAILURE_LINE_PATTERNS = [
26
26
  /**
27
27
  * Finds the first high-signal failure line from captured mach test output.
28
28
  *
29
- * Selection is FIRST-MATCHING-LINE, not first-matching-pattern, so the bare
30
- * `AttributeError:` arm above has exactly the same standing as
31
- * `TEST-UNEXPECTED-FAIL` — whichever appears earlier in the text wins. That
29
+ * Selection is by first matching line, not by first matching pattern, so the
30
+ * bare `AttributeError:` arm above has exactly the same standing as
31
+ * `TEST-UNEXPECTED-FAIL`: whichever appears earlier in the text wins. That
32
32
  * is how a run whose real defect was an export shard's file-count assertion
33
- * got diagnosed as the recognized mozsystemmonitor teardown crash: the
34
- * information was present and the SELECTION was wrong, which is the
33
+ * got diagnosed as the recognized mozsystemmonitor teardown crash. The
34
+ * information was present and the selection was wrong, which is the
35
35
  * expensive kind of wrong, because the named cause is a real, documented,
36
36
  * unrelated upstream defect and therefore reads as an answer.
37
37
  *
38
38
  * So a capture carrying the recognized teardown incident gets two passes:
39
39
  * candidates excluding its `AttributeError` header first, and only if that
40
40
  * finds nothing does the full set apply. The narrowness the rest of the
41
- * codebase maintains is preserved exactly — the exclusion is gated on
42
- * `hasKnownTeardownNoise` for the WHOLE capture, so it requires both the
41
+ * codebase maintains is preserved exactly: the exclusion is gated on
42
+ * `hasKnownTeardownNoise` for the whole capture, so it requires both the
43
43
  * closed attribute allowlist and a `resourcemonitor.py` frame. A novel
44
44
  * attribute, or a traceback from anywhere else, stays a real failure and is
45
45
  * still eligible to be reported.
@@ -2,7 +2,7 @@
2
2
  * Verdict-note helpers for the harness classifier.
3
3
  *
4
4
  * Split out of `test-harness-crash.ts` (at its per-file line budget). These
5
- * decide the ADVISORY parenthetical on the `FIREFORGE-VERDICT:` line; none
5
+ * decide the advisory parenthetical on the `FIREFORGE-VERDICT:` line. None
6
6
  * of them changes a status or a reason key, which the verdict contract's
7
7
  * consumers parse.
8
8
  */
@@ -21,12 +21,12 @@ interface SummaryCountsView {
21
21
  * `Unexpected results: 0`, yet the run is still classified `test-failures`
22
22
  * on evidence lines that carry NO `TEST-UNEXPECTED-*` marker.
23
23
  *
24
- * `unexpected=0` printed beside `reason=test-failures` is the tell that the
25
- * verdict rests on pattern matching rather than on a harness result, and a
24
+ * `unexpected=0` printed beside `reason=test-failures` means the verdict
25
+ * rests on pattern matching rather than on a harness result, and a
26
26
  * reader who cannot see that spends hours attributing a red run to the
27
27
  * change under test. The note says so on the verdict line itself.
28
28
  *
29
- * Deliberately a NOTE and not a reclassification: a non-zero exit with no
29
+ * This is a note and not a reclassification: a non-zero exit with no
30
30
  * green-shaped summary is still a failing run, and inventing a new `reason`
31
31
  * would break the `FIREFORGE-VERDICT:` contract its consumers parse.
32
32
  */
@@ -36,16 +36,15 @@ export declare function truncateEvidence(line: string): string;
36
36
  /**
37
37
  * Outcome of the green-teardown belt.
38
38
  *
39
- * `accepted` is the pass. A rejection carries `rejectedBy` ONLY when the
40
- * recognized teardown noise was present — i.e. when the belt was the thing
41
- * that could have applied and did not. That distinction is the whole point
42
- * of the field: a run with no teardown traceback was never a candidate and
43
- * naming a "rejecting condition" for it would be noise, whereas a run that
44
- * DOES carry the traceback and still fails is the shape an operator
45
- * otherwise cannot diagnose from outside — every condition is
46
- * all-or-nothing, so the failing verdict looks identical whichever one
47
- * rejected it, and a downstream report spent a re-run and a filed-bug's
48
- * worth of effort guessing between them.
39
+ * `accepted` is the pass. A rejection carries `rejectedBy` only when the
40
+ * recognized teardown noise was present, i.e. when the belt was the thing
41
+ * that could have applied and did not. That is what the field is for: a run
42
+ * with no teardown traceback was never a candidate and naming a "rejecting
43
+ * condition" for it would be noise, whereas a run that does carry the
44
+ * traceback and still fails is the shape an operator otherwise cannot
45
+ * diagnose from outside. Every condition is all-or-nothing, so the failing
46
+ * verdict looks identical whichever one rejected it, and a downstream report
47
+ * spent a re-run and a filed-bug's worth of effort guessing between them.
49
48
  */
50
49
  export interface GreenTeardownOverride {
51
50
  accepted: boolean;
@@ -3,7 +3,7 @@
3
3
  * Verdict-note helpers for the harness classifier.
4
4
  *
5
5
  * Split out of `test-harness-crash.ts` (at its per-file line budget). These
6
- * decide the ADVISORY parenthetical on the `FIREFORGE-VERDICT:` line; none
6
+ * decide the advisory parenthetical on the `FIREFORGE-VERDICT:` line. None
7
7
  * of them changes a status or a reason key, which the verdict contract's
8
8
  * consumers parse.
9
9
  */
@@ -19,12 +19,12 @@ const UNEXPECTED_MARKER = /TEST-UNEXPECTED-\w+/;
19
19
  * `Unexpected results: 0`, yet the run is still classified `test-failures`
20
20
  * on evidence lines that carry NO `TEST-UNEXPECTED-*` marker.
21
21
  *
22
- * `unexpected=0` printed beside `reason=test-failures` is the tell that the
23
- * verdict rests on pattern matching rather than on a harness result, and a
22
+ * `unexpected=0` printed beside `reason=test-failures` means the verdict
23
+ * rests on pattern matching rather than on a harness result, and a
24
24
  * reader who cannot see that spends hours attributing a red run to the
25
25
  * change under test. The note says so on the verdict line itself.
26
26
  *
27
- * Deliberately a NOTE and not a reclassification: a non-zero exit with no
27
+ * This is a note and not a reclassification: a non-zero exit with no
28
28
  * green-shaped summary is still a failing run, and inventing a new `reason`
29
29
  * would break the `FIREFORGE-VERDICT:` contract its consumers parse.
30
30
  */
@@ -1,22 +1,22 @@
1
1
  /**
2
2
  * Directory-argument scope analysis for `fireforge test`.
3
3
  *
4
- * mozbuild's test resolver matches command-line paths by STRING PREFIX, so
4
+ * mozbuild's test resolver matches command-line paths by string prefix, so
5
5
  * `fireforge test browser/base/content/test/hominis` also runs the sibling
6
- * directory `browser/base/content/test/hominis-tiles` — silently, and with
6
+ * directory `browser/base/content/test/hominis-tiles`, silently, and with
7
7
  * no indication the scope widened.
8
8
  *
9
- * FireForge therefore treats a directory argument as meaning EXACTLY that
9
+ * FireForge therefore treats a directory argument as meaning exactly that
10
10
  * directory: {@link analyzeTestPathScopes} enumerates the test files of
11
- * exactly that directory and dispatches THAT explicit file list to mach,
11
+ * exactly that directory and dispatches that explicit file list to mach,
12
12
  * because a file list cannot prefix-match anything. Normalizing the
13
- * directory with a trailing `/` does NOT work — mach still sweeps in the
13
+ * directory with a trailing `/` does not work. Mach still sweeps in the
14
14
  * prefix-named sibling. The prefix-matching sibling directories are still
15
15
  * reported so the command layer can tell the operator what was excluded.
16
16
  *
17
17
  * FireForge already rejects non-existent paths up front, so raw
18
- * prefix-widening was never something an operator could invoke
19
- * deliberately — it only ever happened by accident.
18
+ * prefix-widening was never something an operator could invoke on purpose.
19
+ * It only ever happened by accident.
20
20
  */
21
21
  /** A sibling directory the raw mach prefix match would have included. */
22
22
  export interface SiblingPrefixMatch {
@@ -34,7 +34,7 @@ export interface TestPathScope {
34
34
  * list for a directory (mach cannot prefix-widen an explicit file
35
35
  * list), or the argument unchanged for files. A directory containing
36
36
  * no enumerable test files falls back to the trailing-`/` directory
37
- * form — there is nothing to list, and mach owns the "no tests found"
37
+ * form: there is nothing to list, and mach owns the "no tests found"
38
38
  * failure.
39
39
  */
40
40
  dispatchPaths: string[];
@@ -2,22 +2,22 @@
2
2
  /**
3
3
  * Directory-argument scope analysis for `fireforge test`.
4
4
  *
5
- * mozbuild's test resolver matches command-line paths by STRING PREFIX, so
5
+ * mozbuild's test resolver matches command-line paths by string prefix, so
6
6
  * `fireforge test browser/base/content/test/hominis` also runs the sibling
7
- * directory `browser/base/content/test/hominis-tiles` — silently, and with
7
+ * directory `browser/base/content/test/hominis-tiles`, silently, and with
8
8
  * no indication the scope widened.
9
9
  *
10
- * FireForge therefore treats a directory argument as meaning EXACTLY that
10
+ * FireForge therefore treats a directory argument as meaning exactly that
11
11
  * directory: {@link analyzeTestPathScopes} enumerates the test files of
12
- * exactly that directory and dispatches THAT explicit file list to mach,
12
+ * exactly that directory and dispatches that explicit file list to mach,
13
13
  * because a file list cannot prefix-match anything. Normalizing the
14
- * directory with a trailing `/` does NOT work — mach still sweeps in the
14
+ * directory with a trailing `/` does not work. Mach still sweeps in the
15
15
  * prefix-named sibling. The prefix-matching sibling directories are still
16
16
  * reported so the command layer can tell the operator what was excluded.
17
17
  *
18
18
  * FireForge already rejects non-existent paths up front, so raw
19
- * prefix-widening was never something an operator could invoke
20
- * deliberately — it only ever happened by accident.
19
+ * prefix-widening was never something an operator could invoke on purpose.
20
+ * It only ever happened by accident.
21
21
  */
22
22
  import { readdir, stat } from 'node:fs/promises';
23
23
  import { basename, dirname, join } from 'node:path';
@@ -26,7 +26,7 @@ const TEST_FILE_PATTERN = /^(?:browser|test)_.*\.(?:m?js|x?html)$/;
26
26
  /**
27
27
  * Recursively enumerates test-implementation files under a directory,
28
28
  * returned engine-relative and sorted for deterministic dispatch order.
29
- * Returns [] when the directory cannot be read — the caller then falls
29
+ * Returns [] when the directory cannot be read. The caller then falls
30
30
  * back to the directory form and mach owns the failure.
31
31
  */
32
32
  async function collectTestFiles(dir, relPrefix) {
@@ -95,13 +95,13 @@ async function analyzeTestPathScope(engineDir, requestedPath) {
95
95
  }
96
96
  }
97
97
  catch {
98
- // Unreadable parent: skip the sibling probe; exactness via the
98
+ // Unreadable parent: skip the sibling probe. Exactness via the
99
99
  // explicit file list is preserved regardless.
100
100
  }
101
101
  const testFiles = await collectTestFiles(absolute, `${stripped}/`);
102
102
  return {
103
103
  requestedPath,
104
- // The explicit file list is what makes the selection exact; an empty
104
+ // The explicit file list is what makes the selection exact. An empty
105
105
  // enumeration falls back to the directory form.
106
106
  dispatchPaths: testFiles.length > 0 ? testFiles : [`${stripped}/`],
107
107
  isDirectory: true,
@@ -135,7 +135,7 @@ export function formatScopeNotice(scope) {
135
135
  .join(', ');
136
136
  if (scope.testFileCount === 0) {
137
137
  // Fallback dispatch: with nothing to enumerate, the raw directory form
138
- // goes to mach, whose prefix matching CAN sweep the siblings in.
138
+ // goes to mach, whose prefix matching can sweep the siblings in.
139
139
  // Claiming exclusion here would be a lie.
140
140
  return (`${requestedDir}/ contains no enumerable test files, so the directory is passed to mach ` +
141
141
  `as-is — mach resolves paths by string prefix, which may also select: ${siblings}.`);