@hominis/fireforge 0.45.0 → 0.46.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (662) hide show
  1. package/CHANGELOG.md +409 -446
  2. package/dist/bin/fireforge.d.ts +1 -1
  3. package/dist/bin/fireforge.js +21 -15
  4. package/dist/build-info.json +4 -4
  5. package/dist/src/cli-usage-error.d.ts +46 -0
  6. package/dist/src/cli-usage-error.js +81 -0
  7. package/dist/src/cli.d.ts +7 -2
  8. package/dist/src/cli.js +47 -47
  9. package/dist/src/commands/bootstrap-checks.js +2 -1
  10. package/dist/src/commands/bootstrap.js +3 -4
  11. package/dist/src/commands/build.js +27 -17
  12. package/dist/src/commands/config.js +9 -9
  13. package/dist/src/commands/destructive-decision.d.ts +19 -0
  14. package/dist/src/commands/destructive-decision.js +31 -0
  15. package/dist/src/commands/discard.js +5 -5
  16. package/dist/src/commands/doctor-check-core.d.ts +4 -10
  17. package/dist/src/commands/doctor-check-core.js +0 -8
  18. package/dist/src/commands/doctor-external-toolchains.js +2 -2
  19. package/dist/src/commands/doctor-furnace-config-sync.d.ts +2 -2
  20. package/dist/src/commands/doctor-furnace-config-sync.js +20 -20
  21. package/dist/src/commands/doctor-furnace-jar.d.ts +1 -1
  22. package/dist/src/commands/doctor-furnace-jar.js +1 -1
  23. package/dist/src/commands/doctor-furnace.js +22 -22
  24. package/dist/src/commands/doctor-orphaned-harness.d.ts +10 -17
  25. package/dist/src/commands/doctor-orphaned-harness.js +14 -23
  26. package/dist/src/commands/doctor-patch-manifest.d.ts +2 -1
  27. package/dist/src/commands/doctor-patch-manifest.js +7 -6
  28. package/dist/src/commands/doctor-post-rebase-audit.js +3 -3
  29. package/dist/src/commands/doctor-source-pin.d.ts +12 -12
  30. package/dist/src/commands/doctor-source-pin.js +14 -14
  31. package/dist/src/commands/doctor-working-tree.d.ts +3 -3
  32. package/dist/src/commands/doctor-working-tree.js +3 -3
  33. package/dist/src/commands/doctor.d.ts +3 -1
  34. package/dist/src/commands/doctor.js +15 -16
  35. package/dist/src/commands/download.js +50 -37
  36. package/dist/src/commands/export-all.js +29 -12
  37. package/dist/src/commands/export-flow.d.ts +5 -5
  38. package/dist/src/commands/export-flow.js +29 -59
  39. package/dist/src/commands/export-placement-conflicts.d.ts +3 -3
  40. package/dist/src/commands/export-placement-conflicts.js +12 -12
  41. package/dist/src/commands/export-placement-gate.d.ts +2 -2
  42. package/dist/src/commands/export-placement-gate.js +7 -13
  43. package/dist/src/commands/export-placement-policy.d.ts +1 -1
  44. package/dist/src/commands/export-placement-policy.js +4 -6
  45. package/dist/src/commands/export-shared.d.ts +51 -32
  46. package/dist/src/commands/export-shared.js +17 -32
  47. package/dist/src/commands/export.js +14 -5
  48. package/dist/src/commands/furnace/apply.js +16 -16
  49. package/dist/src/commands/furnace/authoring-config.d.ts +13 -0
  50. package/dist/src/commands/furnace/authoring-config.js +19 -0
  51. package/dist/src/commands/furnace/chrome-doc-remove.d.ts +1 -1
  52. package/dist/src/commands/furnace/chrome-doc-remove.js +2 -2
  53. package/dist/src/commands/furnace/chrome-doc-templates.d.ts +14 -14
  54. package/dist/src/commands/furnace/chrome-doc-templates.js +17 -17
  55. package/dist/src/commands/furnace/chrome-doc-tests.d.ts +2 -2
  56. package/dist/src/commands/furnace/chrome-doc-tests.js +4 -4
  57. package/dist/src/commands/furnace/chrome-doc.d.ts +8 -8
  58. package/dist/src/commands/furnace/chrome-doc.js +18 -18
  59. package/dist/src/commands/furnace/create-browser-test.d.ts +1 -1
  60. package/dist/src/commands/furnace/create-browser-test.js +7 -12
  61. package/dist/src/commands/furnace/create-dry-run.d.ts +4 -4
  62. package/dist/src/commands/furnace/create-dry-run.js +6 -9
  63. package/dist/src/commands/furnace/create-features.d.ts +2 -2
  64. package/dist/src/commands/furnace/create-features.js +2 -2
  65. package/dist/src/commands/furnace/create-mochikit.d.ts +4 -4
  66. package/dist/src/commands/furnace/create-mochikit.js +7 -7
  67. package/dist/src/commands/furnace/create-templates.d.ts +31 -15
  68. package/dist/src/commands/furnace/create-templates.js +20 -19
  69. package/dist/src/commands/furnace/create-xpcshell.d.ts +5 -5
  70. package/dist/src/commands/furnace/create-xpcshell.js +8 -8
  71. package/dist/src/commands/furnace/create.d.ts +1 -1
  72. package/dist/src/commands/furnace/create.js +35 -29
  73. package/dist/src/commands/furnace/deploy.js +15 -6
  74. package/dist/src/commands/furnace/diff.js +7 -7
  75. package/dist/src/commands/furnace/index.js +1 -1
  76. package/dist/src/commands/furnace/init.js +17 -16
  77. package/dist/src/commands/furnace/list.js +2 -2
  78. package/dist/src/commands/furnace/override.d.ts +1 -1
  79. package/dist/src/commands/furnace/override.js +43 -34
  80. package/dist/src/commands/furnace/preview.js +17 -17
  81. package/dist/src/commands/furnace/refresh.js +15 -7
  82. package/dist/src/commands/furnace/remove-mutations.d.ts +9 -10
  83. package/dist/src/commands/furnace/remove-mutations.js +19 -19
  84. package/dist/src/commands/furnace/remove-state.d.ts +1 -1
  85. package/dist/src/commands/furnace/remove-state.js +1 -1
  86. package/dist/src/commands/furnace/remove.js +4 -8
  87. package/dist/src/commands/furnace/rename-browser-test.js +10 -15
  88. package/dist/src/commands/furnace/rename-xpcshell.d.ts +2 -2
  89. package/dist/src/commands/furnace/rename-xpcshell.js +3 -3
  90. package/dist/src/commands/furnace/rename.js +36 -36
  91. package/dist/src/commands/furnace/scan.js +3 -3
  92. package/dist/src/commands/furnace/status.js +19 -16
  93. package/dist/src/commands/furnace/sync.js +6 -6
  94. package/dist/src/commands/furnace/test-file-name.d.ts +28 -0
  95. package/dist/src/commands/furnace/test-file-name.js +39 -0
  96. package/dist/src/commands/furnace/validate.js +11 -12
  97. package/dist/src/commands/furnace/validation-output.d.ts +21 -9
  98. package/dist/src/commands/furnace/validation-output.js +3 -8
  99. package/dist/src/commands/import.js +22 -29
  100. package/dist/src/commands/lint-per-patch.d.ts +2 -2
  101. package/dist/src/commands/lint-per-patch.js +27 -12
  102. package/dist/src/commands/lint-per-run-checkjs.d.ts +14 -15
  103. package/dist/src/commands/lint-per-run-checkjs.js +14 -15
  104. package/dist/src/commands/lint-report.d.ts +3 -3
  105. package/dist/src/commands/lint-report.js +4 -4
  106. package/dist/src/commands/lint.d.ts +5 -4
  107. package/dist/src/commands/lint.js +36 -36
  108. package/dist/src/commands/manifest.d.ts +4 -4
  109. package/dist/src/commands/manifest.js +1 -1
  110. package/dist/src/commands/package.js +4 -6
  111. package/dist/src/commands/patch/compact.d.ts +2 -2
  112. package/dist/src/commands/patch/compact.js +19 -20
  113. package/dist/src/commands/patch/delete.d.ts +1 -1
  114. package/dist/src/commands/patch/delete.js +23 -33
  115. package/dist/src/commands/patch/entry-projection.d.ts +13 -0
  116. package/dist/src/commands/patch/entry-projection.js +24 -0
  117. package/dist/src/commands/patch/lint-ignore.d.ts +3 -12
  118. package/dist/src/commands/patch/lint-ignore.js +33 -44
  119. package/dist/src/commands/patch/move-files-create.d.ts +2 -2
  120. package/dist/src/commands/patch/move-files-create.js +29 -15
  121. package/dist/src/commands/patch/move-files-into.d.ts +2 -2
  122. package/dist/src/commands/patch/move-files-into.js +41 -37
  123. package/dist/src/commands/patch/move-files.js +5 -14
  124. package/dist/src/commands/patch/patch-context.d.ts +1 -1
  125. package/dist/src/commands/patch/rename.d.ts +4 -4
  126. package/dist/src/commands/patch/rename.js +35 -49
  127. package/dist/src/commands/patch/reorder.js +35 -48
  128. package/dist/src/commands/patch/split-plan.d.ts +7 -8
  129. package/dist/src/commands/patch/split-plan.js +10 -13
  130. package/dist/src/commands/patch/split.d.ts +2 -2
  131. package/dist/src/commands/patch/split.js +50 -48
  132. package/dist/src/commands/patch/staged-dependency-validate.d.ts +1 -1
  133. package/dist/src/commands/patch/staged-dependency-validate.js +3 -3
  134. package/dist/src/commands/patch/staged-dependency.d.ts +1 -1
  135. package/dist/src/commands/patch/staged-dependency.js +22 -28
  136. package/dist/src/commands/patch/tier.d.ts +2 -2
  137. package/dist/src/commands/patch/tier.js +20 -30
  138. package/dist/src/commands/patch-rename-map.d.ts +19 -0
  139. package/dist/src/commands/patch-rename-map.js +36 -0
  140. package/dist/src/commands/pending-resolution.d.ts +15 -0
  141. package/dist/src/commands/pending-resolution.js +25 -0
  142. package/dist/src/commands/re-export-adjacent.d.ts +25 -3
  143. package/dist/src/commands/re-export-adjacent.js +40 -24
  144. package/dist/src/commands/re-export-bulk-scan.d.ts +3 -3
  145. package/dist/src/commands/re-export-bulk-scan.js +23 -27
  146. package/dist/src/commands/re-export-drift.d.ts +10 -10
  147. package/dist/src/commands/re-export-drift.js +33 -33
  148. package/dist/src/commands/re-export-files.d.ts +2 -3
  149. package/dist/src/commands/re-export-files.js +52 -44
  150. package/dist/src/commands/re-export-lint.d.ts +29 -30
  151. package/dist/src/commands/re-export-lint.js +36 -29
  152. package/dist/src/commands/re-export-options.d.ts +1 -1
  153. package/dist/src/commands/re-export-options.js +1 -1
  154. package/dist/src/commands/re-export-register.d.ts +1 -1
  155. package/dist/src/commands/re-export-register.js +1 -1
  156. package/dist/src/commands/re-export-scan.d.ts +1 -1
  157. package/dist/src/commands/re-export-scan.js +12 -9
  158. package/dist/src/commands/re-export-single.d.ts +23 -4
  159. package/dist/src/commands/re-export-single.js +39 -31
  160. package/dist/src/commands/re-export.js +35 -17
  161. package/dist/src/commands/rebase/abort.js +9 -14
  162. package/dist/src/commands/rebase/continue.js +20 -19
  163. package/dist/src/commands/rebase/index.d.ts +1 -1
  164. package/dist/src/commands/rebase/index.js +5 -5
  165. package/dist/src/commands/rebase/patch-loop.d.ts +2 -2
  166. package/dist/src/commands/rebase/patch-loop.js +20 -24
  167. package/dist/src/commands/register.js +5 -5
  168. package/dist/src/commands/reset.js +1 -1
  169. package/dist/src/commands/resolve.d.ts +2 -2
  170. package/dist/src/commands/resolve.js +21 -13
  171. package/dist/src/commands/run.d.ts +0 -13
  172. package/dist/src/commands/run.js +38 -51
  173. package/dist/src/commands/setup-support.d.ts +16 -4
  174. package/dist/src/commands/setup-support.js +20 -20
  175. package/dist/src/commands/setup.js +4 -10
  176. package/dist/src/commands/source.js +9 -2
  177. package/dist/src/commands/status-check.d.ts +3 -3
  178. package/dist/src/commands/status-check.js +6 -6
  179. package/dist/src/commands/status-json.d.ts +14 -13
  180. package/dist/src/commands/status-json.js +9 -8
  181. package/dist/src/commands/status-output.d.ts +3 -3
  182. package/dist/src/commands/status-output.js +5 -5
  183. package/dist/src/commands/status-ownership.d.ts +3 -3
  184. package/dist/src/commands/status-ownership.js +3 -3
  185. package/dist/src/commands/status.js +25 -26
  186. package/dist/src/commands/test-build-phase.d.ts +3 -3
  187. package/dist/src/commands/test-build-phase.js +48 -24
  188. package/dist/src/commands/test-diagnose.d.ts +1 -1
  189. package/dist/src/commands/test-diagnose.js +20 -20
  190. package/dist/src/commands/test-modes.d.ts +4 -4
  191. package/dist/src/commands/test-modes.js +4 -5
  192. package/dist/src/commands/test-register.js +5 -3
  193. package/dist/src/commands/test-run.d.ts +11 -11
  194. package/dist/src/commands/test-run.js +40 -33
  195. package/dist/src/commands/test-stale-gate.d.ts +12 -12
  196. package/dist/src/commands/test-stale-gate.js +17 -17
  197. package/dist/src/commands/test-verdict.d.ts +19 -5
  198. package/dist/src/commands/test-verdict.js +26 -11
  199. package/dist/src/commands/test.d.ts +3 -3
  200. package/dist/src/commands/test.js +73 -36
  201. package/dist/src/commands/token-coverage.js +3 -3
  202. package/dist/src/commands/token-list.d.ts +26 -0
  203. package/dist/src/commands/token-list.js +153 -0
  204. package/dist/src/commands/token.js +26 -10
  205. package/dist/src/commands/tree.js +26 -21
  206. package/dist/src/commands/typecheck.d.ts +6 -6
  207. package/dist/src/commands/typecheck.js +16 -16
  208. package/dist/src/commands/verify.d.ts +3 -3
  209. package/dist/src/commands/verify.js +10 -10
  210. package/dist/src/commands/watch.js +11 -11
  211. package/dist/src/commands/wire.js +17 -16
  212. package/dist/src/core/ast-utils.d.ts +7 -7
  213. package/dist/src/core/ast-utils.js +8 -8
  214. package/dist/src/core/branding.d.ts +5 -12
  215. package/dist/src/core/branding.js +6 -5
  216. package/dist/src/core/browser-wire.d.ts +1 -1
  217. package/dist/src/core/browser-wire.js +10 -7
  218. package/dist/src/core/build-audit-platform.d.ts +32 -3
  219. package/dist/src/core/build-audit-platform.js +153 -13
  220. package/dist/src/core/build-audit-registration.d.ts +5 -5
  221. package/dist/src/core/build-audit-registration.js +10 -9
  222. package/dist/src/core/build-audit-resolve.d.ts +5 -5
  223. package/dist/src/core/build-audit-resolve.js +6 -6
  224. package/dist/src/core/build-audit-skip.d.ts +57 -0
  225. package/dist/src/core/build-audit-skip.js +112 -0
  226. package/dist/src/core/build-audit-transforms.d.ts +2 -2
  227. package/dist/src/core/build-audit-transforms.js +3 -3
  228. package/dist/src/core/build-audit.d.ts +21 -8
  229. package/dist/src/core/build-audit.js +142 -40
  230. package/dist/src/core/build-baseline-types.d.ts +19 -18
  231. package/dist/src/core/build-baseline-types.js +1 -1
  232. package/dist/src/core/build-baseline.d.ts +48 -31
  233. package/dist/src/core/build-baseline.js +20 -43
  234. package/dist/src/core/build-jar-escalation.d.ts +8 -8
  235. package/dist/src/core/build-jar-escalation.js +18 -17
  236. package/dist/src/core/build-overwrite-guard.d.ts +4 -4
  237. package/dist/src/core/build-overwrite-guard.js +14 -14
  238. package/dist/src/core/build-prepare.d.ts +4 -12
  239. package/dist/src/core/build-prepare.js +22 -26
  240. package/dist/src/core/config-mutate.js +4 -4
  241. package/dist/src/core/config-paths.d.ts +2 -6
  242. package/dist/src/core/config-paths.js +4 -2
  243. package/dist/src/core/config-state.d.ts +0 -6
  244. package/dist/src/core/config-state.js +3 -21
  245. package/dist/src/core/config-validate-build-audit.d.ts +8 -0
  246. package/dist/src/core/config-validate-build-audit.js +80 -0
  247. package/dist/src/core/config-validate-file-size.d.ts +1 -1
  248. package/dist/src/core/config-validate-file-size.js +3 -3
  249. package/dist/src/core/config-validate-patch-policy.d.ts +2 -2
  250. package/dist/src/core/config-validate-patch-policy.js +3 -3
  251. package/dist/src/core/config-validate-test-toolchains.d.ts +2 -2
  252. package/dist/src/core/config-validate-test-toolchains.js +4 -5
  253. package/dist/src/core/config-validate.js +22 -12
  254. package/dist/src/core/config.d.ts +12 -12
  255. package/dist/src/core/config.js +21 -25
  256. package/dist/src/core/coverage-extend.d.ts +16 -16
  257. package/dist/src/core/coverage-extend.js +20 -20
  258. package/dist/src/core/destructive.d.ts +14 -14
  259. package/dist/src/core/destructive.js +9 -9
  260. package/dist/src/core/diff-hunks.d.ts +2 -2
  261. package/dist/src/core/diff-hunks.js +7 -7
  262. package/dist/src/core/discard-baseline.d.ts +10 -10
  263. package/dist/src/core/discard-baseline.js +22 -23
  264. package/dist/src/core/display-state.d.ts +11 -11
  265. package/dist/src/core/display-state.js +12 -12
  266. package/dist/src/core/engine-changes.d.ts +2 -2
  267. package/dist/src/core/engine-changes.js +2 -2
  268. package/dist/src/core/engine-precondition.d.ts +5 -13
  269. package/dist/src/core/engine-precondition.js +5 -10
  270. package/dist/src/core/engine-session-lock.d.ts +18 -18
  271. package/dist/src/core/engine-session-lock.js +50 -54
  272. package/dist/src/core/export-moved-code-shape.d.ts +7 -7
  273. package/dist/src/core/export-moved-code-shape.js +10 -10
  274. package/dist/src/core/file-lock-owner.d.ts +103 -0
  275. package/dist/src/core/file-lock-owner.js +259 -0
  276. package/dist/src/core/file-lock.d.ts +14 -19
  277. package/dist/src/core/file-lock.js +90 -128
  278. package/dist/src/core/firefox-cache.d.ts +13 -1
  279. package/dist/src/core/firefox-cache.js +61 -36
  280. package/dist/src/core/firefox-download.d.ts +15 -0
  281. package/dist/src/core/firefox-download.js +38 -22
  282. package/dist/src/core/firefox-extract.d.ts +8 -7
  283. package/dist/src/core/firefox-extract.js +45 -27
  284. package/dist/src/core/firefox.d.ts +34 -36
  285. package/dist/src/core/firefox.js +13 -44
  286. package/dist/src/core/furnace-apply-dry-run.d.ts +1 -6
  287. package/dist/src/core/furnace-apply-dry-run.js +2 -8
  288. package/dist/src/core/furnace-apply-ftl.d.ts +5 -5
  289. package/dist/src/core/furnace-apply-ftl.js +8 -8
  290. package/dist/src/core/furnace-apply-helpers.d.ts +9 -20
  291. package/dist/src/core/furnace-apply-helpers.js +28 -39
  292. package/dist/src/core/furnace-apply-output.js +1 -1
  293. package/dist/src/core/furnace-apply-overwrite-warn.d.ts +9 -9
  294. package/dist/src/core/furnace-apply-overwrite-warn.js +13 -11
  295. package/dist/src/core/furnace-apply-undeploy-actions.d.ts +1 -1
  296. package/dist/src/core/furnace-apply-undeploy-actions.js +1 -1
  297. package/dist/src/core/furnace-apply.d.ts +4 -4
  298. package/dist/src/core/furnace-apply.js +50 -29
  299. package/dist/src/core/furnace-checksum-utils.d.ts +5 -5
  300. package/dist/src/core/furnace-checksum-utils.js +5 -5
  301. package/dist/src/core/furnace-config-custom.d.ts +1 -1
  302. package/dist/src/core/furnace-config-custom.js +2 -2
  303. package/dist/src/core/furnace-config-order.js +1 -1
  304. package/dist/src/core/furnace-config-tokens.d.ts +3 -3
  305. package/dist/src/core/furnace-config-tokens.js +3 -3
  306. package/dist/src/core/furnace-config-validate.js +2 -2
  307. package/dist/src/core/furnace-config.d.ts +5 -5
  308. package/dist/src/core/furnace-config.js +40 -53
  309. package/dist/src/core/furnace-constants.d.ts +6 -6
  310. package/dist/src/core/furnace-constants.js +9 -8
  311. package/dist/src/core/furnace-css-fragments.d.ts +6 -6
  312. package/dist/src/core/furnace-css-fragments.js +11 -11
  313. package/dist/src/core/furnace-dir-entry.d.ts +20 -0
  314. package/dist/src/core/furnace-dir-entry.js +21 -0
  315. package/dist/src/core/furnace-jsconfig.d.ts +7 -7
  316. package/dist/src/core/furnace-jsconfig.js +22 -20
  317. package/dist/src/core/furnace-operation.d.ts +22 -19
  318. package/dist/src/core/furnace-operation.js +38 -34
  319. package/dist/src/core/furnace-precondition.d.ts +10 -10
  320. package/dist/src/core/furnace-precondition.js +8 -8
  321. package/dist/src/core/furnace-refresh.d.ts +18 -6
  322. package/dist/src/core/furnace-refresh.js +5 -8
  323. package/dist/src/core/furnace-registration-ast.d.ts +2 -3
  324. package/dist/src/core/furnace-registration-ast.js +9 -12
  325. package/dist/src/core/furnace-registration-remove.d.ts +4 -4
  326. package/dist/src/core/furnace-registration-remove.js +6 -6
  327. package/dist/src/core/furnace-registration-validate.d.ts +2 -2
  328. package/dist/src/core/furnace-registration-validate.js +2 -2
  329. package/dist/src/core/furnace-registration.d.ts +7 -6
  330. package/dist/src/core/furnace-registration.js +29 -36
  331. package/dist/src/core/furnace-rollback.d.ts +1 -1
  332. package/dist/src/core/furnace-rollback.js +5 -5
  333. package/dist/src/core/furnace-scanner.js +3 -6
  334. package/dist/src/core/furnace-stale-export.d.ts +17 -16
  335. package/dist/src/core/furnace-stale-export.js +16 -15
  336. package/dist/src/core/furnace-staleness.d.ts +2 -2
  337. package/dist/src/core/furnace-staleness.js +2 -2
  338. package/dist/src/core/furnace-state-persist.d.ts +12 -12
  339. package/dist/src/core/furnace-state-persist.js +10 -10
  340. package/dist/src/core/furnace-step-errors.d.ts +6 -6
  341. package/dist/src/core/furnace-step-errors.js +6 -6
  342. package/dist/src/core/furnace-validate-accessibility.js +14 -14
  343. package/dist/src/core/furnace-validate-compatibility.js +9 -9
  344. package/dist/src/core/furnace-validate-registration.d.ts +2 -2
  345. package/dist/src/core/furnace-validate-registration.js +18 -20
  346. package/dist/src/core/furnace-validate-structure.d.ts +1 -1
  347. package/dist/src/core/furnace-validate-structure.js +4 -4
  348. package/dist/src/core/furnace-validate.js +9 -9
  349. package/dist/src/core/furnace-version-drift.d.ts +5 -5
  350. package/dist/src/core/furnace-version-drift.js +5 -5
  351. package/dist/src/core/git-base.d.ts +6 -4
  352. package/dist/src/core/git-base.js +29 -7
  353. package/dist/src/core/git-diff-new-file.d.ts +40 -0
  354. package/dist/src/core/git-diff-new-file.js +119 -0
  355. package/dist/src/core/git-diff.d.ts +13 -13
  356. package/dist/src/core/git-diff.js +121 -189
  357. package/dist/src/core/git-file-ops.d.ts +6 -13
  358. package/dist/src/core/git-file-ops.js +11 -35
  359. package/dist/src/core/git-readonly-index.d.ts +12 -14
  360. package/dist/src/core/git-readonly-index.js +12 -16
  361. package/dist/src/core/git-status.d.ts +9 -2
  362. package/dist/src/core/git-status.js +23 -11
  363. package/dist/src/core/git.d.ts +3 -9
  364. package/dist/src/core/git.js +28 -57
  365. package/dist/src/core/harness-orphans.d.ts +17 -17
  366. package/dist/src/core/harness-orphans.js +28 -27
  367. package/dist/src/core/history-log.d.ts +19 -0
  368. package/dist/src/core/history-log.js +29 -0
  369. package/dist/src/core/license-headers.d.ts +19 -18
  370. package/dist/src/core/license-headers.js +29 -28
  371. package/dist/src/core/mach-build-artifacts.d.ts +21 -21
  372. package/dist/src/core/mach-build-artifacts.js +23 -23
  373. package/dist/src/core/mach-error-hints.d.ts +5 -10
  374. package/dist/src/core/mach-error-hints.js +14 -14
  375. package/dist/src/core/mach-known-noise-filter.d.ts +42 -38
  376. package/dist/src/core/mach-known-noise-filter.js +57 -56
  377. package/dist/src/core/mach-mozconfig.d.ts +6 -6
  378. package/dist/src/core/mach-mozconfig.js +17 -16
  379. package/dist/src/core/mach-python.d.ts +3 -0
  380. package/dist/src/core/mach-python.js +13 -7
  381. package/dist/src/core/mach-resource-shim.d.ts +24 -12
  382. package/dist/src/core/mach-resource-shim.js +124 -21
  383. package/dist/src/core/mach.d.ts +59 -73
  384. package/dist/src/core/mach.js +47 -115
  385. package/dist/src/core/marionette-port.d.ts +15 -30
  386. package/dist/src/core/marionette-port.js +46 -89
  387. package/dist/src/core/marionette-preflight.d.ts +6 -6
  388. package/dist/src/core/marionette-preflight.js +32 -50
  389. package/dist/src/core/markdown-table.d.ts +9 -9
  390. package/dist/src/core/markdown-table.js +14 -14
  391. package/dist/src/core/mochitest-server-port.d.ts +8 -8
  392. package/dist/src/core/mochitest-server-port.js +17 -17
  393. package/dist/src/core/module-resolution-preflight.d.ts +8 -8
  394. package/dist/src/core/module-resolution-preflight.js +11 -11
  395. package/dist/src/core/moz-manifest-helpers.d.ts +7 -7
  396. package/dist/src/core/moz-manifest-helpers.js +7 -7
  397. package/dist/src/core/moz-manifest-register.d.ts +1 -1
  398. package/dist/src/core/moz-manifest-register.js +2 -2
  399. package/dist/src/core/moz-manifest-rules.js +46 -42
  400. package/dist/src/core/moz-manifest-tokenizers.js +1 -1
  401. package/dist/src/core/ownership-table.d.ts +5 -5
  402. package/dist/src/core/ownership-table.js +7 -7
  403. package/dist/src/core/parser-fallback.d.ts +3 -3
  404. package/dist/src/core/parser-fallback.js +3 -3
  405. package/dist/src/core/patch-apply-fuzz.d.ts +5 -5
  406. package/dist/src/core/patch-apply-fuzz.js +13 -13
  407. package/dist/src/core/patch-apply.d.ts +13 -14
  408. package/dist/src/core/patch-apply.js +36 -42
  409. package/dist/src/core/patch-export-coverage.d.ts +0 -9
  410. package/dist/src/core/patch-export-coverage.js +1 -30
  411. package/dist/src/core/patch-export-update.d.ts +21 -4
  412. package/dist/src/core/patch-export-update.js +7 -6
  413. package/dist/src/core/patch-export.d.ts +20 -30
  414. package/dist/src/core/patch-export.js +55 -77
  415. package/dist/src/core/patch-files.d.ts +0 -4
  416. package/dist/src/core/patch-files.js +0 -11
  417. package/dist/src/core/patch-identifier-suggest.d.ts +1 -1
  418. package/dist/src/core/patch-identifier-suggest.js +4 -4
  419. package/dist/src/core/patch-lint-binary.d.ts +12 -18
  420. package/dist/src/core/patch-lint-cache.d.ts +18 -2
  421. package/dist/src/core/patch-lint-cache.js +16 -19
  422. package/dist/src/core/patch-lint-checkjs.d.ts +55 -38
  423. package/dist/src/core/patch-lint-checkjs.js +78 -64
  424. package/dist/src/core/patch-lint-chrome-jsdoc.d.ts +8 -9
  425. package/dist/src/core/patch-lint-chrome-jsdoc.js +10 -11
  426. package/dist/src/core/patch-lint-creators.d.ts +5 -9
  427. package/dist/src/core/patch-lint-creators.js +3 -3
  428. package/dist/src/core/patch-lint-cross.d.ts +27 -19
  429. package/dist/src/core/patch-lint-cross.js +67 -110
  430. package/dist/src/core/patch-lint-css.d.ts +1 -1
  431. package/dist/src/core/patch-lint-css.js +15 -11
  432. package/dist/src/core/patch-lint-diff-tag.d.ts +5 -5
  433. package/dist/src/core/patch-lint-diff-tag.js +5 -5
  434. package/dist/src/core/patch-lint-diff.d.ts +4 -4
  435. package/dist/src/core/patch-lint-diff.js +4 -4
  436. package/dist/src/core/patch-lint-file-size.d.ts +3 -3
  437. package/dist/src/core/patch-lint-file-size.js +6 -6
  438. package/dist/src/core/patch-lint-forward-registration.d.ts +58 -0
  439. package/dist/src/core/patch-lint-forward-registration.js +210 -0
  440. package/dist/src/core/patch-lint-jsdoc.d.ts +2 -2
  441. package/dist/src/core/patch-lint-jsdoc.js +46 -46
  442. package/dist/src/core/patch-lint-module-registration.d.ts +3 -9
  443. package/dist/src/core/patch-lint-module-registration.js +1 -1
  444. package/dist/src/core/patch-lint-mozbuild.d.ts +1 -1
  445. package/dist/src/core/patch-lint-mozbuild.js +10 -10
  446. package/dist/src/core/patch-lint-observer.d.ts +3 -3
  447. package/dist/src/core/patch-lint-observer.js +7 -7
  448. package/dist/src/core/patch-lint-ownership.d.ts +6 -6
  449. package/dist/src/core/patch-lint-ownership.js +6 -6
  450. package/dist/src/core/patch-lint-prettier.d.ts +6 -6
  451. package/dist/src/core/patch-lint-prettier.js +7 -7
  452. package/dist/src/core/patch-lint-queue-types.d.ts +60 -0
  453. package/dist/src/core/patch-lint-queue-types.js +12 -0
  454. package/dist/src/core/patch-lint-staged-registration.d.ts +61 -0
  455. package/dist/src/core/patch-lint-staged-registration.js +90 -0
  456. package/dist/src/core/patch-lint-unmanaged-companion.d.ts +23 -23
  457. package/dist/src/core/patch-lint-unmanaged-companion.js +26 -26
  458. package/dist/src/core/patch-lint.d.ts +41 -35
  459. package/dist/src/core/patch-lint.js +52 -49
  460. package/dist/src/core/patch-lock.d.ts +1 -1
  461. package/dist/src/core/patch-lock.js +11 -11
  462. package/dist/src/core/patch-manifest-consistency.d.ts +7 -7
  463. package/dist/src/core/patch-manifest-consistency.js +16 -17
  464. package/dist/src/core/patch-manifest-files-affected.d.ts +1 -1
  465. package/dist/src/core/patch-manifest-files-affected.js +3 -3
  466. package/dist/src/core/patch-manifest-io.d.ts +14 -14
  467. package/dist/src/core/patch-manifest-io.js +35 -34
  468. package/dist/src/core/patch-manifest-query.d.ts +1 -1
  469. package/dist/src/core/patch-manifest-query.js +4 -4
  470. package/dist/src/core/patch-manifest-resolve.d.ts +5 -5
  471. package/dist/src/core/patch-manifest-resolve.js +7 -7
  472. package/dist/src/core/patch-manifest-validate.js +3 -3
  473. package/dist/src/core/patch-manifest.d.ts +2 -2
  474. package/dist/src/core/patch-manifest.js +2 -2
  475. package/dist/src/core/patch-parse.d.ts +32 -21
  476. package/dist/src/core/patch-parse.js +40 -15
  477. package/dist/src/core/patch-policy.js +15 -27
  478. package/dist/src/core/patch-registration-refs.d.ts +4 -4
  479. package/dist/src/core/patch-registration-refs.js +7 -7
  480. package/dist/src/core/patch-source-metadata.d.ts +1 -3
  481. package/dist/src/core/patch-source-metadata.js +0 -4
  482. package/dist/src/core/patch-transform.d.ts +8 -16
  483. package/dist/src/core/patch-transform.js +13 -23
  484. package/dist/src/core/process-cpu-time.d.ts +1 -1
  485. package/dist/src/core/process-cpu-time.js +6 -6
  486. package/dist/src/core/rebase-session.d.ts +9 -15
  487. package/dist/src/core/rebase-session.js +13 -25
  488. package/dist/src/core/register-browser-content.js +3 -2
  489. package/dist/src/core/register-browser-test.js +2 -1
  490. package/dist/src/core/register-module.js +2 -1
  491. package/dist/src/core/register-result.d.ts +1 -1
  492. package/dist/src/core/register-result.js +1 -1
  493. package/dist/src/core/register-scaffold.d.ts +2 -2
  494. package/dist/src/core/register-scaffold.js +8 -7
  495. package/dist/src/core/register-shared-css.d.ts +3 -3
  496. package/dist/src/core/register-shared-css.js +6 -5
  497. package/dist/src/core/register-xpcshell-test.d.ts +2 -2
  498. package/dist/src/core/register-xpcshell-test.js +2 -2
  499. package/dist/src/core/run-log-redact.d.ts +38 -0
  500. package/dist/src/core/run-log-redact.js +69 -0
  501. package/dist/src/core/run-log.d.ts +21 -10
  502. package/dist/src/core/run-log.js +76 -27
  503. package/dist/src/core/shared-ftl.d.ts +2 -2
  504. package/dist/src/core/shared-ftl.js +6 -6
  505. package/dist/src/core/signal-critical.d.ts +2 -2
  506. package/dist/src/core/signal-critical.js +4 -6
  507. package/dist/src/core/smoke-patterns.d.ts +5 -6
  508. package/dist/src/core/smoke-patterns.js +15 -20
  509. package/dist/src/core/state-file.d.ts +15 -4
  510. package/dist/src/core/state-file.js +14 -1
  511. package/dist/src/core/status-binary.d.ts +8 -8
  512. package/dist/src/core/status-binary.js +12 -12
  513. package/dist/src/core/status-classify.d.ts +17 -17
  514. package/dist/src/core/status-classify.js +13 -12
  515. package/dist/src/core/test-changed-prefs.d.ts +12 -12
  516. package/dist/src/core/test-changed-prefs.js +40 -25
  517. package/dist/src/core/test-harness-crash.d.ts +39 -39
  518. package/dist/src/core/test-harness-crash.js +69 -69
  519. package/dist/src/core/test-harness-output.d.ts +7 -7
  520. package/dist/src/core/test-harness-output.js +7 -7
  521. package/dist/src/core/test-harness-verdict-notes.d.ts +13 -14
  522. package/dist/src/core/test-harness-verdict-notes.js +4 -4
  523. package/dist/src/core/test-path-scope.d.ts +8 -8
  524. package/dist/src/core/test-path-scope.js +11 -11
  525. package/dist/src/core/test-stale-check.d.ts +22 -23
  526. package/dist/src/core/test-stale-check.js +31 -30
  527. package/dist/src/core/test-stale-symlink.d.ts +1 -1
  528. package/dist/src/core/test-stale-symlink.js +1 -1
  529. package/dist/src/core/test-stall-triage.d.ts +9 -9
  530. package/dist/src/core/test-stall-triage.js +22 -22
  531. package/dist/src/core/test-xpcshell-retry.d.ts +26 -7
  532. package/dist/src/core/test-xpcshell-retry.js +14 -11
  533. package/dist/src/core/token-category.d.ts +35 -2
  534. package/dist/src/core/token-category.js +67 -58
  535. package/dist/src/core/token-coverage.js +4 -5
  536. package/dist/src/core/token-dark-mode.d.ts +9 -9
  537. package/dist/src/core/token-dark-mode.js +13 -25
  538. package/dist/src/core/token-docs.d.ts +1 -1
  539. package/dist/src/core/token-inventory.d.ts +56 -0
  540. package/dist/src/core/token-inventory.js +109 -0
  541. package/dist/src/core/token-manager.d.ts +4 -4
  542. package/dist/src/core/token-manager.js +22 -22
  543. package/dist/src/core/token-scaffold.d.ts +4 -4
  544. package/dist/src/core/token-scaffold.js +4 -4
  545. package/dist/src/core/token-variant.d.ts +14 -14
  546. package/dist/src/core/token-variant.js +52 -53
  547. package/dist/src/core/toolchain-preflight.d.ts +15 -15
  548. package/dist/src/core/toolchain-preflight.js +23 -23
  549. package/dist/src/core/tree-cow.d.ts +3 -5
  550. package/dist/src/core/tree-cow.js +8 -8
  551. package/dist/src/core/tree-guard.d.ts +3 -3
  552. package/dist/src/core/tree-guard.js +23 -23
  553. package/dist/src/core/tree-store.d.ts +15 -15
  554. package/dist/src/core/tree-store.js +39 -38
  555. package/dist/src/core/typecheck-shim.d.ts +16 -15
  556. package/dist/src/core/typecheck-shim.js +26 -25
  557. package/dist/src/core/typecheck.d.ts +12 -12
  558. package/dist/src/core/typecheck.js +33 -33
  559. package/dist/src/core/wire-destroy.d.ts +2 -2
  560. package/dist/src/core/wire-destroy.js +5 -5
  561. package/dist/src/core/wire-dom-fragment.d.ts +3 -3
  562. package/dist/src/core/wire-dom-fragment.js +12 -23
  563. package/dist/src/core/wire-init.d.ts +2 -2
  564. package/dist/src/core/wire-init.js +7 -7
  565. package/dist/src/core/wire-subscript.d.ts +1 -1
  566. package/dist/src/core/wire-subscript.js +3 -3
  567. package/dist/src/core/wire-utils.d.ts +9 -9
  568. package/dist/src/core/wire-utils.js +16 -28
  569. package/dist/src/core/xpcshell-appdir.d.ts +20 -20
  570. package/dist/src/core/xpcshell-appdir.js +28 -30
  571. package/dist/src/core/xpcshell-profile-dir.d.ts +3 -3
  572. package/dist/src/core/xpcshell-profile-dir.js +7 -7
  573. package/dist/src/errors/base.d.ts +69 -16
  574. package/dist/src/errors/base.js +95 -26
  575. package/dist/src/errors/build.d.ts +6 -6
  576. package/dist/src/errors/build.js +26 -34
  577. package/dist/src/errors/codes.d.ts +10 -10
  578. package/dist/src/errors/codes.js +10 -10
  579. package/dist/src/errors/config.d.ts +0 -14
  580. package/dist/src/errors/config.js +13 -34
  581. package/dist/src/errors/download.d.ts +13 -0
  582. package/dist/src/errors/download.js +53 -24
  583. package/dist/src/errors/furnace.d.ts +2 -2
  584. package/dist/src/errors/furnace.js +8 -9
  585. package/dist/src/errors/git.d.ts +9 -9
  586. package/dist/src/errors/git.js +21 -31
  587. package/dist/src/errors/patch.d.ts +3 -3
  588. package/dist/src/errors/patch.js +11 -13
  589. package/dist/src/errors/rebase.d.ts +1 -1
  590. package/dist/src/errors/rebase.js +8 -8
  591. package/dist/src/errors/run.d.ts +1 -1
  592. package/dist/src/errors/run.js +1 -1
  593. package/dist/src/index.d.ts +4 -4
  594. package/dist/src/index.js +4 -4
  595. package/dist/src/types/commands/options.d.ts +155 -200
  596. package/dist/src/types/commands/patches.d.ts +19 -19
  597. package/dist/src/types/commands/project.d.ts +3 -3
  598. package/dist/src/types/config.d.ts +52 -19
  599. package/dist/src/types/furnace.d.ts +17 -17
  600. package/dist/src/types/index.d.ts +0 -1
  601. package/dist/src/types/json.d.ts +3 -3
  602. package/dist/src/types/json.js +2 -2
  603. package/dist/src/types/typecheck.d.ts +3 -3
  604. package/dist/src/utils/assert.d.ts +4 -16
  605. package/dist/src/utils/assert.js +7 -24
  606. package/dist/src/utils/build-info.d.ts +6 -6
  607. package/dist/src/utils/build-info.js +6 -6
  608. package/dist/src/utils/child-env.d.ts +7 -6
  609. package/dist/src/utils/child-env.js +5 -5
  610. package/dist/src/utils/concurrency.d.ts +2 -2
  611. package/dist/src/utils/concurrency.js +2 -2
  612. package/dist/src/utils/elapsed.js +10 -1
  613. package/dist/src/utils/errors.d.ts +8 -8
  614. package/dist/src/utils/errors.js +8 -8
  615. package/dist/src/utils/fs.d.ts +1 -1
  616. package/dist/src/utils/fs.js +15 -20
  617. package/dist/src/utils/hash.d.ts +12 -0
  618. package/dist/src/utils/hash.js +16 -0
  619. package/dist/src/utils/line-dispatch.d.ts +15 -0
  620. package/dist/src/utils/line-dispatch.js +48 -0
  621. package/dist/src/utils/logger.d.ts +4 -4
  622. package/dist/src/utils/logger.js +11 -11
  623. package/dist/src/utils/machine-output.js +2 -2
  624. package/dist/src/utils/options.d.ts +14 -20
  625. package/dist/src/utils/options.js +26 -27
  626. package/dist/src/utils/package-root.js +5 -14
  627. package/dist/src/utils/paths.d.ts +4 -4
  628. package/dist/src/utils/paths.js +4 -4
  629. package/dist/src/utils/platform.d.ts +0 -4
  630. package/dist/src/utils/process-group.d.ts +10 -9
  631. package/dist/src/utils/process-group.js +37 -36
  632. package/dist/src/utils/process.d.ts +70 -55
  633. package/dist/src/utils/process.js +129 -179
  634. package/dist/src/utils/ps-duration.d.ts +4 -4
  635. package/dist/src/utils/ps-duration.js +9 -9
  636. package/dist/src/utils/regex.d.ts +4 -4
  637. package/dist/src/utils/regex.js +7 -7
  638. package/dist/src/utils/sleep.d.ts +26 -0
  639. package/dist/src/utils/sleep.js +31 -0
  640. package/dist/src/utils/stdio-drain.d.ts +7 -7
  641. package/dist/src/utils/stdio-drain.js +8 -8
  642. package/dist/src/utils/validation.d.ts +12 -49
  643. package/dist/src/utils/validation.js +26 -36
  644. package/docs/README.md +2 -2
  645. package/docs/configuration.md +163 -69
  646. package/docs/exit-codes.md +66 -49
  647. package/docs/furnace.md +20 -19
  648. package/docs/lifecycle-invariants.md +414 -247
  649. package/docs/machine-output.md +58 -34
  650. package/docs/patch-workflow.md +48 -44
  651. package/docs/run-logs.md +72 -28
  652. package/docs/testing.md +105 -98
  653. package/docs/verification-trees.md +23 -22
  654. package/package.json +7 -6
  655. package/dist/src/commands/rebase.d.ts +0 -4
  656. package/dist/src/commands/rebase.js +0 -5
  657. package/dist/src/core/patch-artifact-normalize.d.ts +0 -21
  658. package/dist/src/core/patch-artifact-normalize.js +0 -24
  659. package/dist/src/core/patch-lint-reexports.d.ts +0 -7
  660. package/dist/src/core/patch-lint-reexports.js +0 -8
  661. package/dist/src/core/wire-targets.d.ts +0 -7
  662. package/dist/src/core/wire-targets.js +0 -8
@@ -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}.`);
@@ -1,6 +1,4 @@
1
- import { isXpcomManifestPath } from './build-audit.js';
2
1
  import type { BuildBaseline, TestPackagingCoverage } from './build-baseline-types.js';
3
- export { isXpcomManifestPath };
4
2
  /** Result of the stale-build preflight probe. */
5
3
  export interface StaleBuildResult {
6
4
  /** True when at least one packageable engine file changed since the baseline. */
@@ -8,7 +6,7 @@ export interface StaleBuildResult {
8
6
  /**
9
7
  * Engine-relative paths that would have been packaged but appear to have
10
8
  * changed since the baseline. Sorted and deduplicated. Truncated at
11
- * {@link STALE_PATHS_LIMIT} entries for rendering; consult
9
+ * {@link STALE_PATHS_LIMIT} entries for rendering. Consult
12
10
  * {@link StaleBuildResult.truncated} to know when to append a `(+N more)`
13
11
  * tail to the warning.
14
12
  */
@@ -20,16 +18,16 @@ export interface StaleBuildResult {
20
18
  truncated: number;
21
19
  /**
22
20
  * The baseline that anchored the diff, or undefined when no previous
23
- * successful build exists. A missing baseline is treated as "not stale"
24
- * — we have nothing to compare against and a warning would mislead.
21
+ * successful build exists. A missing baseline is treated as "not stale":
22
+ * we have nothing to compare against and a warning would mislead.
25
23
  */
26
24
  baseline: BuildBaseline | undefined;
27
25
  }
28
26
  /**
29
27
  * Probes the engine tree for packageable changes since the last successful
30
28
  * `fireforge build`. Returns a summary the `fireforge test` handler renders
31
- * as an up-front warning when `--build` was NOT passed. The probe never
32
- * throws; git failures and a missing baseline both degrade to `stale: false`
29
+ * as an up-front warning when `--build` was not passed. The probe never
30
+ * throws. Git failures and a missing baseline both degrade to `stale: false`
33
31
  * so a broken probe cannot block a test run.
34
32
  *
35
33
  * @param projectRoot Root directory of the project.
@@ -50,25 +48,26 @@ export declare const FULL_SUITE_REQUEST = "(entire suite)";
50
48
  /**
51
49
  * Compares the requested test paths against the packaged runtime's coverage
52
50
  * claim recorded in the baseline. Returns the requested paths the recorded
53
- * packaging does NOT cover — the runs that would dispatch against missing
51
+ * packaging does not cover: the runs that would dispatch against missing
54
52
  * `_tests/` support fixtures and hang rather than fail.
55
53
  *
56
54
  * Coverage semantics: an absent claim and `'full'` cover everything. A
57
55
  * scoped list covers a request path when the request equals a covered entry,
58
56
  * sits beneath a covered directory entry, or shares a manifest granule with
59
- * a covered entry ({@link toManifestGranule} — a scoped `test --build`
57
+ * a covered entry (see {@link toManifestGranule}: a scoped `test --build`
60
58
  * packages the whole manifest directory, so a same-manifest sibling of a
61
59
  * covered file is packaged too). Both sides are normalized to forward
62
60
  * slashes so Windows-style CLI input cannot defeat the prefix rule (baseline
63
61
  * paths are POSIX by convention). A request with no paths is a full-suite
64
- * run and is never covered by a scoped list — the {@link FULL_SUITE_REQUEST}
65
- * sentinel is returned so the refusal can name it.
62
+ * run and is never covered by a scoped list, so the
63
+ * {@link FULL_SUITE_REQUEST} sentinel is returned and the refusal can name
64
+ * it.
66
65
  */
67
66
  export declare function findUncoveredRequestPaths(coverage: TestPackagingCoverage | undefined, requestedPaths: readonly string[]): string[];
68
67
  /**
69
68
  * Test manifests changed since the recorded build that sit in (or above)
70
- * the directory of an uncovered request path — i.e. the manifests that
71
- * EXPLAIN why this run needs coverage the build never claimed.
69
+ * the directory of an uncovered request path, i.e. the manifests that
70
+ * explain why this run needs coverage the build never claimed.
72
71
  *
73
72
  * Best-effort: a probe failure returns an empty list, so the refusal
74
73
  * degrades to exactly its previous text rather than failing differently.
@@ -86,7 +85,7 @@ export declare function findChangedTestManifestsForPaths(engineDir: string, base
86
85
  * @param coverage - The recorded scoped coverage claim
87
86
  * @param changedManifests - Test manifests changed since the recorded
88
87
  * build that explain an uncovered path (from
89
- * {@link findChangedTestManifestsForPaths}); omitted or empty renders
88
+ * {@link findChangedTestManifestsForPaths}). Omitted or empty renders
90
89
  * nothing
91
90
  */
92
91
  export declare function formatTestCoverageRefusal(uncovered: string[], coverage: string[], changedManifests?: readonly string[]): string;
@@ -95,25 +94,25 @@ export interface StaticComponentsStaleResult {
95
94
  /** True when at least one `components.conf` genuinely diverged from the anchor. */
96
95
  stale: boolean;
97
96
  /**
98
- * Engine-relative `components.conf` paths changed since the last FULL
99
- * build. Sorted; NOT capped — {@link formatStaticComponentsRefusal}
97
+ * Engine-relative `components.conf` paths changed since the last full
98
+ * build. Sorted, and not capped. {@link formatStaticComponentsRefusal}
100
99
  * applies the render cap.
101
100
  */
102
101
  changedManifests: string[];
103
102
  }
104
103
  /**
105
- * Probes whether any `components.conf` changed since the last FULL
106
- * `fireforge build` — i.e. since the compiled StaticComponents table was
107
- * last regenerated. `components.conf` entries bake into compiled code; a
104
+ * Probes whether any `components.conf` changed since the last full
105
+ * `fireforge build`, i.e. since the compiled StaticComponents table was
106
+ * last regenerated. `components.conf` entries bake into compiled code. A
108
107
  * scoped `test --build` packages the file but the child process resolves the
109
- * OLD table and fails with `NS_ERROR_MALFORMED_URI` that reads as a test
108
+ * old table and fails with `NS_ERROR_MALFORMED_URI` that reads as a test
110
109
  * bug.
111
110
  *
112
111
  * The diff anchors to the baseline's `staticComponentsBaseline` (the last
113
- * full build's engine HEAD SHA), NOT the baseline's own `engineHeadSha`,
112
+ * full build's engine HEAD SHA), not the baseline's own `engineHeadSha`,
114
113
  * which a scoped `test --build` advances. Dirty candidates are hash-checked
115
114
  * against the anchor's fingerprints so only genuine content divergence
116
- * counts. No baseline or no anchor means fresh. Never throws — the probes it
115
+ * counts. No baseline or no anchor means fresh. Never throws: the probes it
117
116
  * composes degrade to verbose lines and empty results on git failure,
118
117
  * matching {@link checkStaleBuildForTest}.
119
118
  */
@@ -130,7 +129,7 @@ export declare function formatStaticComponentsRefusal(changedManifests: string[]
130
129
  * `fireforge import` when `components.conf` diverged from the last full
131
130
  * build. Same probe as {@link formatStaticComponentsRefusal},
132
131
  * different moment: this fires at mutation time so the operator learns a
133
- * full build is needed BEFORE the next gate run refuses.
132
+ * full build is needed before the next gate run refuses.
134
133
  */
135
134
  export declare function formatPostMutationStaticComponentsWarning(changedManifests: string[]): string;
136
135
  /**
@@ -5,9 +5,9 @@
5
5
  * Without this preflight, an operator who edits engine chrome / packaged
6
6
  * resources (`jar.mn` entries, `.xhtml`/`.mjs`/`.css` under chrome trees,
7
7
  * pref files) and then runs `fireforge test <path>` only discovers the build
8
- * is stale AFTER xpcshell / mach test starts and errors out with
9
- * `NS_ERROR_FILE_NOT_FOUND` against a `chrome://browser/content/…` URI —
10
- * which reads as a test bug, not a rebuild prompt. Scaffolding a new
8
+ * is stale after xpcshell / mach test starts and errors out with
9
+ * `NS_ERROR_FILE_NOT_FOUND` against a `chrome://browser/content/…` URI,
10
+ * which reads as a test bug rather than a rebuild prompt. Scaffolding a new
11
11
  * top-level chrome document plus an xpcshell test is the canonical case: the
12
12
  * test file exists, the manifests are registered, but `dist/` still holds
13
13
  * the pre-edit bundle and chrome URIs resolve to nothing.
@@ -16,7 +16,7 @@
16
16
  * baseline (`.fireforge/last-build.json`), filters to paths that imply
17
17
  * packaging, and returns a compact summary. `fireforge test` prints a
18
18
  * warning up-front so the operator sees "you edited X, Y, Z since the last
19
- * build — rerun with `--build` to refresh" BEFORE mach test launches.
19
+ * build, rerun with `--build` to refresh" before mach test launches.
20
20
  * Detection stays advisory (warn-only) because a fork that rebuilds
21
21
  * out-of-band (a separate `./mach build` invocation, an IDE plugin) can
22
22
  * legitimately have a fresh `dist/` with no FireForge-recorded baseline
@@ -24,18 +24,18 @@
24
24
  */
25
25
  import { toError } from '../utils/errors.js';
26
26
  import { verbose, warn } from '../utils/logger.js';
27
+ import { normalizePathSlashes } from '../utils/paths.js';
27
28
  import { isPackageablePath, isXpcomManifestPath } from './build-audit.js';
28
29
  import { readBuildBaseline } from './build-baseline.js';
29
30
  import { hashEngineFile } from './coverage-extend.js';
30
31
  import { collectChangedEnginePaths, dropPathsMatchingFingerprints } from './engine-changes.js';
31
- export { isXpcomManifestPath };
32
32
  /** Cap on the number of changed paths rendered inline. */
33
33
  const STALE_PATHS_LIMIT = 10;
34
34
  /**
35
35
  * Probes the engine tree for packageable changes since the last successful
36
36
  * `fireforge build`. Returns a summary the `fireforge test` handler renders
37
- * as an up-front warning when `--build` was NOT passed. The probe never
38
- * throws; git failures and a missing baseline both degrade to `stale: false`
37
+ * as an up-front warning when `--build` was not passed. The probe never
38
+ * throws. Git failures and a missing baseline both degrade to `stale: false`
39
39
  * so a broken probe cannot block a test run.
40
40
  *
41
41
  * @param projectRoot Root directory of the project.
@@ -58,8 +58,8 @@ export async function checkStaleBuildForTest(projectRoot, engineDir) {
58
58
  // Furnace-applied components always has a persistent workdir diff against
59
59
  // HEAD, so `git diff --name-only HEAD` returns that diff on every build
60
60
  // and the stale check fires immediately after a successful one. The
61
- // fingerprints capture "these files had this content when the build ran";
62
- // a path stays stale only when its live hash diverges.
61
+ // fingerprints capture "these files had this content when the build ran".
62
+ // A path stays stale only when its live hash diverges.
63
63
  packageable = await dropPathsMatchingFingerprints(engineDir, packageable, baseline.packageableFingerprints);
64
64
  if (packageable.length === 0) {
65
65
  return { stale: false, changedPaths: [], truncated: 0, baseline };
@@ -89,19 +89,20 @@ export const FULL_SUITE_REQUEST = '(entire suite)';
89
89
  /**
90
90
  * Compares the requested test paths against the packaged runtime's coverage
91
91
  * claim recorded in the baseline. Returns the requested paths the recorded
92
- * packaging does NOT cover — the runs that would dispatch against missing
92
+ * packaging does not cover: the runs that would dispatch against missing
93
93
  * `_tests/` support fixtures and hang rather than fail.
94
94
  *
95
95
  * Coverage semantics: an absent claim and `'full'` cover everything. A
96
96
  * scoped list covers a request path when the request equals a covered entry,
97
97
  * sits beneath a covered directory entry, or shares a manifest granule with
98
- * a covered entry ({@link toManifestGranule} — a scoped `test --build`
98
+ * a covered entry (see {@link toManifestGranule}: a scoped `test --build`
99
99
  * packages the whole manifest directory, so a same-manifest sibling of a
100
100
  * covered file is packaged too). Both sides are normalized to forward
101
101
  * slashes so Windows-style CLI input cannot defeat the prefix rule (baseline
102
102
  * paths are POSIX by convention). A request with no paths is a full-suite
103
- * run and is never covered by a scoped list — the {@link FULL_SUITE_REQUEST}
104
- * sentinel is returned so the refusal can name it.
103
+ * run and is never covered by a scoped list, so the
104
+ * {@link FULL_SUITE_REQUEST} sentinel is returned and the refusal can name
105
+ * it.
105
106
  */
106
107
  export function findUncoveredRequestPaths(coverage, requestedPaths) {
107
108
  if (coverage === undefined || coverage === 'full') {
@@ -121,10 +122,10 @@ export function findUncoveredRequestPaths(coverage, requestedPaths) {
121
122
  * Maps a normalized request/coverage path to the "manifest granule" the
122
123
  * packaged runtime actually staged: an extension-bearing basename (a test
123
124
  * FILE) maps to its containing directory, a directory (no dot in the
124
- * basename) maps to itself. Purely lexical — the directory-as-manifest
125
+ * basename) maps to itself. Purely lexical: the directory-as-manifest
125
126
  * approximation holds because xpcshell/mochitest manifests live next to
126
127
  * their test files and a scoped `test --build` stages the whole manifest
127
- * directory into `obj-*`/`_tests/`, not single files. Caveat: a DIRECTORY
128
+ * directory into `obj-*`/`_tests/`, not single files. Caveat: a directory
128
129
  * whose basename contains a dot is misread as a file and mapped to its
129
130
  * parent, which widens (never narrows) the covered granule.
130
131
  */
@@ -138,11 +139,11 @@ function toManifestGranule(path) {
138
139
  }
139
140
  /** Normalizes a path for coverage comparison: forward slashes, no trailing slash. */
140
141
  function normalizeCoveragePath(path) {
141
- return path.trim().replace(/\\/g, '/').replace(/\/+$/, '');
142
+ return normalizePathSlashes(path.trim()).replace(/\/+$/, '');
142
143
  }
143
144
  /**
144
145
  * Formats the refusal shown when a non-`--build` run requests paths the
145
- * packaged runtime's scoped `test --build` coverage does not include —
146
+ * packaged runtime's scoped `test --build` coverage does not include. It is
146
147
  * enforced on every such run, with or without `--allow-stale-build`. Kept
147
148
  * separate from the matcher so tests can pin structure and copy
148
149
  * independently (same split as {@link formatStaleBuildWarning}).
@@ -150,7 +151,7 @@ function normalizeCoveragePath(path) {
150
151
  /**
151
152
  * Basenames of the test manifests whose entries decide what a packaged test
152
153
  * runtime stages. A manifest that gained an entry is the single most common
153
- * reason a run needs coverage the last build never claimed — and it is a
154
+ * reason a run needs coverage the last build never claimed, and it is a
154
155
  * fact FireForge already holds but never said, leaving the operator to
155
156
  * rediscover it after a correct refusal.
156
157
  */
@@ -173,8 +174,8 @@ function isTestManifestPath(path) {
173
174
  }
174
175
  /**
175
176
  * Test manifests changed since the recorded build that sit in (or above)
176
- * the directory of an uncovered request path — i.e. the manifests that
177
- * EXPLAIN why this run needs coverage the build never claimed.
177
+ * the directory of an uncovered request path, i.e. the manifests that
178
+ * explain why this run needs coverage the build never claimed.
178
179
  *
179
180
  * Best-effort: a probe failure returns an empty list, so the refusal
180
181
  * degrades to exactly its previous text rather than failing differently.
@@ -211,7 +212,7 @@ export async function findChangedTestManifestsForPaths(engineDir, baseline, unco
211
212
  * @param coverage - The recorded scoped coverage claim
212
213
  * @param changedManifests - Test manifests changed since the recorded
213
214
  * build that explain an uncovered path (from
214
- * {@link findChangedTestManifestsForPaths}); omitted or empty renders
215
+ * {@link findChangedTestManifestsForPaths}). Omitted or empty renders
215
216
  * nothing
216
217
  */
217
218
  export function formatTestCoverageRefusal(uncovered, coverage, changedManifests = []) {
@@ -222,7 +223,7 @@ export function formatTestCoverageRefusal(uncovered, coverage, changedManifests
222
223
  };
223
224
  const rebuildTargets = uncovered.filter((p) => p !== FULL_SUITE_REQUEST);
224
225
  // Name --extend-coverage here or it is undiscoverable: a scoped build
225
- // REPLACES the claim, so under several concurrent sessions a peer's build
226
+ // replaces the claim, so under several concurrent sessions a peer's build
226
227
  // for an unrelated path erases coverage you legitimately still hold, and
227
228
  // the union that fixes it is a flag the operator has no reason to know
228
229
  // exists at the moment they need it. The anchor conditions are stated
@@ -233,7 +234,7 @@ export function formatTestCoverageRefusal(uncovered, coverage, changedManifests
233
234
  const rebuildHint = rebuildTargets.length > 0
234
235
  ? `Rerun "fireforge test --build ${rebuildTargets.slice(0, STALE_PATHS_LIMIT).join(' ')}" to package them, or run "fireforge build" for full coverage.${extendHint}`
235
236
  : 'Run "fireforge build" (or a path-less "fireforge test --build") for full coverage first.';
236
- // Why THIS run needs new coverage, when a changed manifest explains it: a
237
+ // Why this run needs new coverage, when a changed manifest explains it: a
237
238
  // manifest that gained an entry is not covered by a build claim recorded
238
239
  // for other paths, and a browser-chrome claim never covers xpcshell.
239
240
  const manifestLine = changedManifests.length > 0
@@ -246,18 +247,18 @@ export function formatTestCoverageRefusal(uncovered, coverage, changedManifests
246
247
  '(--allow-stale-build does not bypass this check — it accepts stale content, not missing coverage.)');
247
248
  }
248
249
  /**
249
- * Probes whether any `components.conf` changed since the last FULL
250
- * `fireforge build` — i.e. since the compiled StaticComponents table was
251
- * last regenerated. `components.conf` entries bake into compiled code; a
250
+ * Probes whether any `components.conf` changed since the last full
251
+ * `fireforge build`, i.e. since the compiled StaticComponents table was
252
+ * last regenerated. `components.conf` entries bake into compiled code. A
252
253
  * scoped `test --build` packages the file but the child process resolves the
253
- * OLD table and fails with `NS_ERROR_MALFORMED_URI` that reads as a test
254
+ * old table and fails with `NS_ERROR_MALFORMED_URI` that reads as a test
254
255
  * bug.
255
256
  *
256
257
  * The diff anchors to the baseline's `staticComponentsBaseline` (the last
257
- * full build's engine HEAD SHA), NOT the baseline's own `engineHeadSha`,
258
+ * full build's engine HEAD SHA), not the baseline's own `engineHeadSha`,
258
259
  * which a scoped `test --build` advances. Dirty candidates are hash-checked
259
260
  * against the anchor's fingerprints so only genuine content divergence
260
- * counts. No baseline or no anchor means fresh. Never throws — the probes it
261
+ * counts. No baseline or no anchor means fresh. Never throws: the probes it
261
262
  * composes degrade to verbose lines and empty results on git failure,
262
263
  * matching {@link checkStaleBuildForTest}.
263
264
  */
@@ -300,7 +301,7 @@ export function formatStaticComponentsRefusal(changedManifests) {
300
301
  * `fireforge import` when `components.conf` diverged from the last full
301
302
  * build. Same probe as {@link formatStaticComponentsRefusal},
302
303
  * different moment: this fires at mutation time so the operator learns a
303
- * full build is needed BEFORE the next gate run refuses.
304
+ * full build is needed before the next gate run refuses.
304
305
  */
305
306
  export function formatPostMutationStaticComponentsWarning(changedManifests) {
306
307
  const head = changedManifests.slice(0, STALE_PATHS_LIMIT);
@@ -5,7 +5,7 @@
5
5
  * Removes one stale xpcshell `_tests` symlink when mach reports a
6
6
  * FileExistsError during test installation.
7
7
  *
8
- * The guard rails are deliberately narrow: only quoted FileExistsError
8
+ * The guard rails are narrow: only quoted FileExistsError
9
9
  * destinations inside the active objdir's `_tests` tree are considered, and
10
10
  * only when lstat confirms the destination itself is a symlink.
11
11
  */
@@ -17,7 +17,7 @@ function isInsideDirectory(parent, candidate) {
17
17
  * Removes one stale xpcshell `_tests` symlink when mach reports a
18
18
  * FileExistsError during test installation.
19
19
  *
20
- * The guard rails are deliberately narrow: only quoted FileExistsError
20
+ * The guard rails are narrow: only quoted FileExistsError
21
21
  * destinations inside the active objdir's `_tests` tree are considered, and
22
22
  * only when lstat confirms the destination itself is a symlink.
23
23
  */
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Operator-facing triage for the `timed out … with no output` / `Ran 0
3
- * checks` stall — the shape where the harness dies before ANY test output.
3
+ * checks` stall: the shape where the harness dies before any test output.
4
4
  *
5
- * Split out of `test-harness-crash.ts`, which CLASSIFIES runs; this module
5
+ * Split out of `test-harness-crash.ts`, which classifies runs. This module
6
6
  * only renders advice about one already-classified shape. Keeping the two
7
7
  * apart matters because the census below carries claims of unequal
8
8
  * evidential strength, and the rules for editing it are not the rules for
@@ -10,23 +10,23 @@
10
10
  * the output or not, while a cause in the census is an assertion about the
11
11
  * world that an operator will act on.
12
12
  *
13
- * Everything here is pure — the platform and the probed display state are
13
+ * Everything here is pure. The platform and the probed display state are
14
14
  * injected, so unit tests need no mocking.
15
15
  */
16
16
  import type { DisplaySleepState } from './display-state.js';
17
17
  import type { HarnessCrashSignature } from './test-harness-signature.js';
18
18
  /**
19
- * Optional hint appended to the harness-crash message when a HEADED run on
19
+ * Optional hint appended to the harness-crash message when a headed run on
20
20
  * macOS died at the no-output timeout.
21
21
  *
22
- * When `displayState` names a MEASURED display state, the hint states it as
23
- * fact rather than as one of three possibilities — that is the point of
24
- * probing: an operator staring at a bare test failure should not have to
22
+ * When `displayState` names a measured display state, the hint states it as
23
+ * fact rather than as one of three possibilities, which is what probing is
24
+ * for: an operator staring at a bare test failure should not have to
25
25
  * rediscover that their machine dimmed. `caffeinate` is described accurately
26
- * (it prevents sleep; it cannot wake an already-sleeping display), so
26
+ * (it prevents sleep, and cannot wake an already-sleeping display), so
27
27
  * operators are not sent to a command that could not have helped them.
28
28
  *
29
- * Pure — the platform and the probed state are injected so unit tests need
29
+ * Pure. The platform and the probed state are injected so unit tests need
30
30
  * no mocking.
31
31
  *
32
32
  * @param signature - The recognized crash shape