@hominis/fireforge 0.46.0 → 0.46.2

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 +17 -9
  498. package/dist/src/core/token-dark-mode.js +41 -28
  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
@@ -38,7 +38,7 @@ function validateBuildMozinfo(data) {
38
38
  * Reads the objdir name the engine's mozconfig declares, or undefined when
39
39
  * there is no mozconfig, it cannot be read, or it declares nothing.
40
40
  *
41
- * Fail-open by construction: this only ever narrows an ambiguity that would
41
+ * Fail-open: this only ever narrows an ambiguity that would
42
42
  * otherwise refuse, so an unreadable mozconfig costs nothing beyond the
43
43
  * refusal the caller was already going to raise.
44
44
  */
@@ -57,8 +57,8 @@ async function readDeclaredObjDirName(engineDir) {
57
57
  /**
58
58
  * Checks if build artifacts exist in the engine directory.
59
59
  * Looks for obj-* directories with a dist subdirectory. Detection is
60
- * deliberately symlink-agnostic — building/running against a symlinked
61
- * objdir in place is the user's own arrangement; the clone path, where a
60
+ * symlink-agnostic on purpose: building/running against a symlinked
61
+ * objdir in place is the user's own arrangement. The clone path, where a
62
62
  * symlink would route writes into the original build, refuses separately
63
63
  * (`assertCloneSafeObjdir` in tree-store.ts).
64
64
  * @param engineDir - Path to the engine directory
@@ -86,7 +86,7 @@ export async function hasBuildArtifacts(engineDir) {
86
86
  let declaredObjDir;
87
87
  if (validObjDirs.length > 1) {
88
88
  // An ambiguous glob is a question the mozconfig may already answer.
89
- // Refusing when the active configuration NAMES the objdir sends the
89
+ // Refusing when the active configuration names the objdir sends the
90
90
  // operator to rename a directory to satisfy a scan, when the thing
91
91
  // that decides the build has said which one it is. The refusal is
92
92
  // kept for the genuinely ambiguous case: a declaration that does not
@@ -148,7 +148,7 @@ export async function hasBuildArtifacts(engineDir) {
148
148
  /**
149
149
  * Checks whether the built browser's launchable binary exists under
150
150
  * `<engineDir>/<objDir>/dist/...`. `hasBuildArtifacts` only confirms that
151
- * an obj tree with a `dist/` subdir exists; a partial or in-progress build
151
+ * an obj tree with a `dist/` subdir exists. A partial or in-progress build
152
152
  * can satisfy that check without ever writing the executable, which is the
153
153
  * failure mode that makes `fireforge run` throw `mach run` after having
154
154
  * reported the build as usable. Separating the probes lets `run` fail fast
@@ -158,19 +158,19 @@ export async function hasBuildArtifacts(engineDir) {
158
158
  *
159
159
  * Platform layout:
160
160
  * - macOS: `<objDir>/dist/*.app/Contents/MacOS/<binaryName>` (the `.app`
161
- * display casing can differ from `binaryName` — e.g. `MyBrowser.app` for
161
+ * display casing can differ from `binaryName`, e.g. `MyBrowser.app` for
162
162
  * binary `mybrowser`, so we enumerate the `*.app` bundles rather than
163
163
  * compute the name.
164
164
  * - Linux: `<objDir>/dist/bin/<binaryName>`.
165
165
  * - Windows: `<objDir>/dist/bin/<binaryName>.exe`.
166
166
  *
167
167
  * Returns `runnable: false` with no `expectedPath` when the `objDir`
168
- * itself cannot be scanned — same degraded contract as `hasBuildArtifacts`.
168
+ * itself cannot be scanned. Same degraded contract as `hasBuildArtifacts`.
169
169
  *
170
170
  * @param engineDir Path to the engine directory
171
171
  * @param binaryName Lowercase binary name from `fireforge.json`
172
172
  * @param objDir The single matching `obj-*` directory name (caller
173
- * resolves it; typically from `hasBuildArtifacts().objDir`)
173
+ * resolves it, typically from `hasBuildArtifacts().objDir`)
174
174
  * @returns Structured check result
175
175
  */
176
176
  export async function hasRunnableBundle(engineDir, binaryName, objDir) {
@@ -241,26 +241,26 @@ export function buildArtifactMismatchMessage(engineDir, buildCheck, commandName)
241
241
  * Safe-relocation rewriter for mozinfo.json under the active obj-* tree.
242
242
  *
243
243
  * Firefox build artefacts bake the topsrcdir into many generated files
244
- * (Makefiles, config.status, backend.mk, .deps dependency files — anything
244
+ * (Makefiles, config.status, backend.mk, .deps dependency files, anything
245
245
  * produced by `mach configure`). A fresh `mach configure` rebuilds those
246
246
  * from the top, so the rewriter only needs to patch the one file `mach`
247
247
  * reads to learn where its checkout actually lives. Once mozinfo.json
248
248
  * agrees with the on-disk layout, `mach configure` regenerates the rest.
249
249
  *
250
- * Safety rules — the rewrite is refused when any of them are violated:
250
+ * Safety rules. The rewrite is refused when any of them are violated:
251
251
  * - `topsrcdir` and `topobjdir` must both be present and non-empty.
252
- * - `topobjdir` must resolve to `<topsrcdir>/<objDir>`; a non-in-tree
252
+ * - `topobjdir` must resolve to `<topsrcdir>/<objDir>`. A non-in-tree
253
253
  * objdir means the previous workspace was configured differently,
254
254
  * so a blind prefix-rewrite could point mach at the wrong tree.
255
- * - The computed new `topobjdir` must be `<engineDir>/<objDir>`; if it
255
+ * - The computed new `topobjdir` must be `<engineDir>/<objDir>`. If it
256
256
  * is not, the objDir name itself changed and we cannot prove safety.
257
257
  *
258
258
  * When any rule trips, the caller should fall back to the clean-rebuild
259
- * instruction — that's always a correct (if expensive) recovery path.
259
+ * instruction, which is always a correct (if expensive) recovery path.
260
260
  *
261
261
  * @param engineDir Absolute path to the current engine checkout.
262
262
  * @param objDir Name of the obj-* directory to rewrite against.
263
- * @returns Result object; callers inspect `rewritten` and surface `reason`.
263
+ * @returns Result object. Callers inspect `rewritten` and surface `reason`.
264
264
  */
265
265
  export async function attemptMozinfoRewrite(engineDir, objDir) {
266
266
  const mozinfoPath = join(engineDir, objDir, 'mozinfo.json');
@@ -323,10 +323,10 @@ export async function attemptMozinfoRewrite(engineDir, objDir) {
323
323
  newMozconfig = resolve(newSrc, rel);
324
324
  patched['mozconfig'] = newMozconfig;
325
325
  }
326
- // A mozconfig living outside the old topsrcdir is left as-is — it
326
+ // A mozconfig living outside the old topsrcdir is left as-is. It
327
327
  // probably points at a shared configuration file the user kept in
328
328
  // place across the relocation. A relocated checkout that also moved
329
- // its mozconfig will still fail configure; operator can re-point
329
+ // its mozconfig will still fail configure. The operator can re-point
330
330
  // with `MOZCONFIG=…` or run a full clean rebuild.
331
331
  }
332
332
  await writeJson(mozinfoPath, patched);
@@ -340,7 +340,7 @@ export async function attemptMozinfoRewrite(engineDir, objDir) {
340
340
  /**
341
341
  * Shared build-artifact preflight: rejects ambiguous multi-objdir checkouts,
342
342
  * artifacts whose metadata points at another tree, and (when
343
- * `requireExisting`) missing or incomplete builds — each with the actionable
343
+ * `requireExisting`) missing or incomplete builds, each with the actionable
344
344
  * message for that case.
345
345
  *
346
346
  * Takes an already-probed {@link BuildArtifactCheck} rather than probing
@@ -369,13 +369,13 @@ export function assertBuildArtifacts(engineDir, buildCheck, options) {
369
369
  * the four configure-generated root files (`config.status`, `backend.mk`,
370
370
  * `Makefile`, `config/autoconf.mk`) still names `forbiddenDir` (the
371
371
  * primary engine a relocated clone must never consult). Exit code 0 alone
372
- * proves neither — a stray MOZCONFIG/MOZ_OBJDIR can steer configure at a
372
+ * proves neither: a stray MOZCONFIG/MOZ_OBJDIR can steer configure at a
373
373
  * different objdir entirely. Nested Makefiles are products of the verified
374
- * `config.status` and are not scanned; `.deps` files are build products a
375
- * configure cannot regenerate and are explicitly out of scope — any
374
+ * `config.status` and are not scanned. `.deps` files are build products a
375
+ * configure cannot regenerate and are explicitly out of scope, and any
376
376
  * primary-path strings they retain are read-only staleness corrected by
377
377
  * the first in-tree rebuild. Pure checker: returns a human-readable
378
- * violation, or `undefined` when clean; callers own the error type and
378
+ * violation, or `undefined` when clean. Callers own the error type and
379
379
  * remediation copy. Unreadable metadata is itself a violation (fail
380
380
  * closed).
381
381
  */
@@ -406,9 +406,9 @@ export async function findObjdirRelocationViolation(args) {
406
406
  // The canonical no-primary-paths assertion (mirrored by the opt-in
407
407
  // real-mach proof in scripts/run-full-firefox-integration.mjs): substring
408
408
  // search on the resolved primary engine dir is collision-safe against the
409
- // tree's own paths — `<primary>/.fireforge/trees/<name>/engine` never
409
+ // tree's own paths: `<primary>/.fireforge/trees/<name>/engine` never
410
410
  // contains the substring `<primary>/engine`. Scans exactly the
411
- // configure-generated root files; `config.status` is mandatory (checked
411
+ // configure-generated root files. `config.status` is mandatory (checked
412
412
  // above), the rest are optional-if-absent because not every configure
413
413
  // backend writes them.
414
414
  const forbidden = resolve(forbiddenDir);
@@ -1,11 +1,11 @@
1
1
  /**
2
2
  * Pattern-based translator for cryptic mozbuild / mach errors.
3
3
  *
4
- * Each entry maps a stderr regex to an actionable hint. The goal is not to
5
- * parse every mach failure — it's to convert the handful of errors whose
6
- * message is non-obvious into a one-line "here's what to change". New
4
+ * Each entry maps a stderr regex to an actionable hint. The goal is narrow:
5
+ * convert the handful of errors whose message is non-obvious into a one-line
6
+ * "here's what to change", rather than parse every mach failure. New
7
7
  * entries should only be added when a concrete diagnosis of the cryptic
8
- * output has been established; low-confidence hints would train operators
8
+ * output has been established. Low-confidence hints would train operators
9
9
  * to ignore the translator.
10
10
  */
11
11
  /** A single translator entry. */
@@ -17,7 +17,7 @@ export interface MachErrorHint {
17
17
  }
18
18
  /**
19
19
  * Scans captured stderr for known mach errors and returns matching hints.
20
- * Pure function — safe to call on any string; never throws.
20
+ * Pure function. Safe to call on any string and never throws.
21
21
  * @param stderr Captured mach stderr.
22
22
  * @returns Ordered, de-duplicated list of hint strings. Empty when nothing matches.
23
23
  */
@@ -2,11 +2,11 @@
2
2
  /**
3
3
  * Pattern-based translator for cryptic mozbuild / mach errors.
4
4
  *
5
- * Each entry maps a stderr regex to an actionable hint. The goal is not to
6
- * parse every mach failure — it's to convert the handful of errors whose
7
- * message is non-obvious into a one-line "here's what to change". New
5
+ * Each entry maps a stderr regex to an actionable hint. The goal is narrow:
6
+ * convert the handful of errors whose message is non-obvious into a one-line
7
+ * "here's what to change", rather than parse every mach failure. New
8
8
  * entries should only be added when a concrete diagnosis of the cryptic
9
- * output has been established; low-confidence hints would train operators
9
+ * output has been established. Low-confidence hints would train operators
10
10
  * to ignore the translator.
11
11
  */
12
12
  /**
@@ -20,12 +20,12 @@ const MACH_ERROR_HINTS = [
20
20
  'Use JS_PREFERENCE_FILES instead, or add at least one #filter / #expand directive to the file.',
21
21
  },
22
22
  {
23
- // mozbuild raises `UnsortedError` while READING a moz.build whose
23
+ // mozbuild raises `UnsortedError` while reading a moz.build whose
24
24
  // StrictOrderingOnAppendList entries are out of order, so `mach
25
25
  // configure` dies before anything compiles. The ordering rule is the
26
26
  // part operators get wrong: mozbuild sorts by `.lower()`
27
27
  // (`StrictOrderingOnAppendList.ensure_sorted`), so an uppercase letter
28
- // does NOT sort ahead of a lowercase one, and an entry that looks
28
+ // does not sort ahead of a lowercase one, and an entry that looks
29
29
  // correctly placed by byte order can be rejected. mozbuild's own
30
30
  // message names both entries ("We expected X but got Y") and survives
31
31
  // to the operator through `extractMachConfigureError`, so the hint
@@ -41,7 +41,7 @@ const MACH_ERROR_HINTS = [
41
41
  },
42
42
  {
43
43
  // `mach package` inside `packager.py` dereferences a `None` sink when
44
- // the packaging input set cannot resolve an entry it expected — most
44
+ // the packaging input set cannot resolve an entry it expected, most
45
45
  // commonly running `fireforge package` before a full `fireforge build`
46
46
  // has finished, so `obj-*/dist/` is missing pieces the packager assumes
47
47
  // exist. The broader "build failed" path has already surfaced the raw
@@ -75,10 +75,10 @@ const MACH_ERROR_HINTS = [
75
75
  },
76
76
  {
77
77
  // Firefox declares per-release toolchain minimums in-tree
78
- // (`build/moz.configure/bindgen.configure` for cbindgen; mozboot's
78
+ // (`build/moz.configure/bindgen.configure` for cbindgen, and mozboot's
79
79
  // MINIMUM_RUST_VERSION for rustc/cargo), and a source hop can move them.
80
- // The failure lands ~8s into `mach configure` — e.g. "ERROR: cbindgen
81
- // version 0.29.1 is too old. At least version 0.29.4 is required." —
80
+ // The failure lands ~8s into `mach configure` (e.g. "ERROR: cbindgen
81
+ // version 0.29.1 is too old. At least version 0.29.4 is required."),
82
82
  // and mach's own remediation text names "./mach bootstrap", the wrong
83
83
  // entry point for a FireForge-managed repo. Pattern matches configure's
84
84
  // cbindgen die() shape.
@@ -90,7 +90,7 @@ const MACH_ERROR_HINTS = [
90
90
  },
91
91
  {
92
92
  // Same family, rust.configure's die() shapes: "Rust compiler {v} is
93
- // too old." / "Cargo package manager {v} is too old." — the minimum
93
+ // too old." / "Cargo package manager {v} is too old." The minimum
94
94
  // is only named further down that message, so the pattern keys on
95
95
  // the first line.
96
96
  pattern: /\b(?:Rust compiler|Cargo package manager) [\d.]+(?:[\w.-]*)? is too old/i,
@@ -103,7 +103,7 @@ const MACH_ERROR_HINTS = [
103
103
  // When `mach build` fails mid-compile, mach's own shutdown pipeline
104
104
  // still runs its trailing "Config object not found by mach. / Configure
105
105
  // complete! / Be sure to run |mach build|..." summary on the way out.
106
- // Those three lines are plain upstream mach output, printed AFTER the
106
+ // Those three lines are plain upstream mach output, printed after the
107
107
  // non-zero exit code is established, and they read deceptively like a
108
108
  // success banner. Nudge the operator that they are cosmetic
109
109
  // post-failure output, not a mixed success/failure signal.
@@ -115,7 +115,7 @@ const MACH_ERROR_HINTS = [
115
115
  ];
116
116
  /**
117
117
  * Scans captured stderr for known mach errors and returns matching hints.
118
- * Pure function — safe to call on any string; never throws.
118
+ * Pure function. Safe to call on any string and never throws.
119
119
  * @param stderr Captured mach stderr.
120
120
  * @returns Ordered, de-duplicated list of hint strings. Empty when nothing matches.
121
121
  */
@@ -4,73 +4,75 @@
4
4
  *
5
5
  * Headless test runs against recent engines can end with an
6
6
  * `AttributeError: 'SystemResourceMonitor' object has no attribute
7
- * 'stop_time'` traceback at harness teardown — upstream noise that sits
8
- * exactly where a reader looks for the failure summary. Real failure lines
9
- * already beat this traceback in CLASSIFICATION; this filter closes the
10
- * PRESENTATION gap by collapsing the echoed traceback to one labeled line.
7
+ * 'stop_time'` traceback at harness teardown. That is upstream noise, and
8
+ * it sits exactly where a reader looks for the failure summary. Real failure
9
+ * lines already beat this traceback in classification. This filter closes
10
+ * the presentation gap by collapsing the echoed traceback to one labeled
11
+ * line.
11
12
  *
12
- * Scope is deliberately narrow:
13
- * - Only the terminal ECHO is filtered. The captured stdout/stderr strings
14
- * stay raw — the classifier (`test-harness-crash.ts`) depends on the raw
15
- * traceback for its green-summary override and secondary-noise
13
+ * Scope is narrow on purpose:
14
+ * - Only the terminal echo is filtered. The captured stdout/stderr strings
15
+ * stay raw, because the classifier (`test-harness-crash.ts`) depends on
16
+ * the raw traceback for its green-summary override and secondary-noise
16
17
  * detection.
17
18
  * - Only the exact documented incident is collapsed, and every condition
18
19
  * must hold: an `AttributeError` on `SystemResourceMonitor` naming one
19
- * of the two known attributes (`stop_time`, `poll_interval`), AND a
20
- * `mozsystemmonitor/resourcemonitor.py` stack frame, AND a
20
+ * of the two known attributes (`stop_time`, `poll_interval`), and a
21
+ * `mozsystemmonitor/resourcemonitor.py` stack frame, and a
21
22
  * previously-seen SUITE_END shutdown marker (shared across the run's
22
- * stdout/stderr filter instances — the marker usually lands on stdout
23
- * while the traceback lands on stderr). A novel attribute, a novel
23
+ * stdout/stderr filter instances, where the marker usually lands on
24
+ * stdout while the traceback lands on stderr). A novel attribute, a novel
24
25
  * exception type in resourcemonitor.py, or a pre-shutdown occurrence is
25
26
  * echoed verbatim, always.
26
- * - The hold buffer is bounded; on overflow the block is flushed verbatim
27
+ * - The hold buffer is bounded. On overflow the block is flushed verbatim
27
28
  * and the filter returns to pass-through, so output is never lost.
28
29
  *
29
- * The COLLAPSE is test-only, deliberately, and not an oversight — the two
30
- * reasons are worth stating because from outside it reads like one:
30
+ * The collapse is test-only on purpose, not an oversight. Two reasons,
31
+ * since from outside they read like one:
31
32
  * 1. Recognition requires a previously-seen SUITE_END shutdown marker, and
32
33
  * `mach build` never prints one. Wiring the option into the build
33
34
  * dispatch would therefore be a silent no-op.
34
35
  * 2. Relaxing that gate for builds would be wrong on its own terms. The
35
36
  * marker is what separates teardown noise from a traceback raised while
36
- * work was still happening; a build has no equivalent boundary, so
37
+ * work was still happening. A build has no equivalent boundary, so
37
38
  * FireForge cannot tell the known-cosmetic case from a real build-time
38
39
  * failure and must not withhold the block.
39
- * The build path instead RECOGNIZES the signature and says so beside the
40
- * verbatim traceback — see {@link KNOWN_TEARDOWN_NOISE_BUILD_NOTE} and
40
+ * The build path instead recognizes the signature and says so beside the
41
+ * verbatim traceback. See {@link KNOWN_TEARDOWN_NOISE_BUILD_NOTE} and
41
42
  * `runProtectedMachBuild`.
42
43
  */
43
44
  /**
44
- * Whole-block recognition — every signal must hold (see module doc). True
45
- * when CAPTURED output carries the documented mozsystemmonitor teardown
45
+ * Whole-block recognition. Every signal must hold (see module doc). True
46
+ * when captured output carries the documented mozsystemmonitor teardown
46
47
  * traceback.
47
48
  *
48
- * The echo filter below only affects what a human sees. The CLASSIFIER
49
+ * The echo filter below only affects what a human sees. The classifier
49
50
  * reads the raw capture, and it needs the same recognition to tell "the
50
51
  * suite finished clean and then upstream fell over at shutdown" from "the
51
- * suite did not finish". Deliberately the same two-signal test the echo
52
- * filter applies — a novel attribute or a traceback from anywhere but
53
- * `resourcemonitor.py` is NOT this incident and must keep failing the run.
52
+ * suite did not finish". This is the same two-signal test the echo filter
53
+ * applies: a novel attribute or a traceback from anywhere but
54
+ * `resourcemonitor.py` is not this incident and must keep failing the run.
54
55
  *
55
56
  * The shutdown-marker precondition the echo filter adds is intentionally
56
- * omitted: the whole point at the classification layer is the case where
57
- * the teardown crash prevented the shutdown marker from printing.
57
+ * omitted: at the classification layer the case that matters is exactly
58
+ * the one where the teardown crash prevented the shutdown marker from
59
+ * printing.
58
60
  *
59
- * Pure; exported for the classifier and for direct unit testing.
61
+ * Pure. Exported for the classifier and for direct unit testing.
60
62
  *
61
63
  * @param output - Raw captured stdout/stderr
62
64
  * @returns True when the recognized teardown traceback is present
63
65
  */
64
66
  export declare function hasKnownTeardownNoise(output: string): boolean;
65
67
  /**
66
- * True when a SINGLE line is the documented teardown family's
68
+ * True when a single line is the documented teardown family's
67
69
  * `AttributeError`.
68
70
  *
69
- * The line-level half of {@link hasKnownTeardownNoise}: the traceback FRAME
71
+ * The line-level half of {@link hasKnownTeardownNoise}: the traceback frame
70
72
  * lives on a neighbouring line, so a per-line test cannot apply the
71
73
  * two-signal rule by itself. Callers pair this with
72
- * `hasKnownTeardownNoise(wholeOutput)` to recover the full recognition —
73
- * "this capture carries the incident, and THIS line is its header" — which
74
+ * `hasKnownTeardownNoise(wholeOutput)` to recover the full recognition
75
+ * ("this capture carries the incident, and this line is its header"), which
74
76
  * keeps the closed attribute allowlist (`stop_time`/`poll_interval`) doing
75
77
  * the same work it does everywhere else. A novel attribute is not this
76
78
  * incident and must stay a candidate failure.
@@ -80,20 +82,21 @@ export declare function hasKnownTeardownNoise(output: string): boolean;
80
82
  */
81
83
  export declare function isKnownTeardownNoiseLine(line: string): boolean;
82
84
  /**
83
- * Shared across the stdout and stderr filter instances of ONE mach run:
85
+ * Shared across the stdout and stderr filter instances of one mach run:
84
86
  * SUITE_END typically arrives on stdout while the teardown traceback lands
85
87
  * on stderr, so the shutdown-seen flag must be visible to both. The two
86
88
  * pipes are independent, so a traceback can theoretically beat the marker
87
- * through — the block then prints verbatim, the correct failure direction.
89
+ * through. The block then prints verbatim, which is the correct failure
90
+ * direction.
88
91
  */
89
92
  export interface TeardownNoiseContext {
90
93
  shutdownSeen: boolean;
91
94
  }
92
- /** Fresh per-run context — hand the same instance to both stream filters. */
95
+ /** Fresh per-run context. Hand the same instance to both stream filters. */
93
96
  export declare function createTeardownNoiseContext(): TeardownNoiseContext;
94
97
  /**
95
- * Build-phase note for the SAME recognized signature. The build path does
96
- * not COLLAPSE the traceback (see the module doc's "test-only" note) — it
98
+ * Build-phase note for the same recognized signature. The build path does
99
+ * not collapse the traceback (see the module doc's "test-only" note). It
97
100
  * prints verbatim and this line is added beside it, so one signature reads
98
101
  * the same in both phases without a build losing output it may need.
99
102
  */
@@ -102,7 +105,7 @@ export declare const KNOWN_TEARDOWN_NOISE_BUILD_NOTE: string;
102
105
  export declare const KNOWN_TEARDOWN_NOISE_ANNOTATION: string;
103
106
  /** Chunk-safe, line-buffered echo filter. See module doc. */
104
107
  export interface KnownTeardownNoiseFilter {
105
- /** Feed a raw chunk; returns the text to echo now (possibly empty). */
108
+ /** Feed a raw chunk. Returns the text to echo now (possibly empty). */
106
109
  transform(chunk: string): string;
107
110
  /** Flush any buffered residue verbatim (call after the stream closes). */
108
111
  flush(): string;
@@ -110,7 +113,7 @@ export interface KnownTeardownNoiseFilter {
110
113
  /**
111
114
  * Creates a stateful filter for one output stream. Complete lines outside a
112
115
  * traceback pass straight through (only the trailing partial line is held
113
- * back); a `Traceback (most recent call last)` header switches to hold mode
116
+ * back). A `Traceback (most recent call last)` header switches to hold mode
114
117
  * until the block ends, then either the one-line annotation (recognized
115
118
  * signature after a seen shutdown marker) or the verbatim block (anything
116
119
  * else) is emitted. Pass the run's shared {@link TeardownNoiseContext} so
@@ -5,40 +5,41 @@
5
5
  *
6
6
  * Headless test runs against recent engines can end with an
7
7
  * `AttributeError: 'SystemResourceMonitor' object has no attribute
8
- * 'stop_time'` traceback at harness teardown — upstream noise that sits
9
- * exactly where a reader looks for the failure summary. Real failure lines
10
- * already beat this traceback in CLASSIFICATION; this filter closes the
11
- * PRESENTATION gap by collapsing the echoed traceback to one labeled line.
8
+ * 'stop_time'` traceback at harness teardown. That is upstream noise, and
9
+ * it sits exactly where a reader looks for the failure summary. Real failure
10
+ * lines already beat this traceback in classification. This filter closes
11
+ * the presentation gap by collapsing the echoed traceback to one labeled
12
+ * line.
12
13
  *
13
- * Scope is deliberately narrow:
14
- * - Only the terminal ECHO is filtered. The captured stdout/stderr strings
15
- * stay raw — the classifier (`test-harness-crash.ts`) depends on the raw
16
- * traceback for its green-summary override and secondary-noise
14
+ * Scope is narrow on purpose:
15
+ * - Only the terminal echo is filtered. The captured stdout/stderr strings
16
+ * stay raw, because the classifier (`test-harness-crash.ts`) depends on
17
+ * the raw traceback for its green-summary override and secondary-noise
17
18
  * detection.
18
19
  * - Only the exact documented incident is collapsed, and every condition
19
20
  * must hold: an `AttributeError` on `SystemResourceMonitor` naming one
20
- * of the two known attributes (`stop_time`, `poll_interval`), AND a
21
- * `mozsystemmonitor/resourcemonitor.py` stack frame, AND a
21
+ * of the two known attributes (`stop_time`, `poll_interval`), and a
22
+ * `mozsystemmonitor/resourcemonitor.py` stack frame, and a
22
23
  * previously-seen SUITE_END shutdown marker (shared across the run's
23
- * stdout/stderr filter instances — the marker usually lands on stdout
24
- * while the traceback lands on stderr). A novel attribute, a novel
24
+ * stdout/stderr filter instances, where the marker usually lands on
25
+ * stdout while the traceback lands on stderr). A novel attribute, a novel
25
26
  * exception type in resourcemonitor.py, or a pre-shutdown occurrence is
26
27
  * echoed verbatim, always.
27
- * - The hold buffer is bounded; on overflow the block is flushed verbatim
28
+ * - The hold buffer is bounded. On overflow the block is flushed verbatim
28
29
  * and the filter returns to pass-through, so output is never lost.
29
30
  *
30
- * The COLLAPSE is test-only, deliberately, and not an oversight — the two
31
- * reasons are worth stating because from outside it reads like one:
31
+ * The collapse is test-only on purpose, not an oversight. Two reasons,
32
+ * since from outside they read like one:
32
33
  * 1. Recognition requires a previously-seen SUITE_END shutdown marker, and
33
34
  * `mach build` never prints one. Wiring the option into the build
34
35
  * dispatch would therefore be a silent no-op.
35
36
  * 2. Relaxing that gate for builds would be wrong on its own terms. The
36
37
  * marker is what separates teardown noise from a traceback raised while
37
- * work was still happening; a build has no equivalent boundary, so
38
+ * work was still happening. A build has no equivalent boundary, so
38
39
  * FireForge cannot tell the known-cosmetic case from a real build-time
39
40
  * failure and must not withhold the block.
40
- * The build path instead RECOGNIZES the signature and says so beside the
41
- * verbatim traceback — see {@link KNOWN_TEARDOWN_NOISE_BUILD_NOTE} and
41
+ * The build path instead recognizes the signature and says so beside the
42
+ * verbatim traceback. See {@link KNOWN_TEARDOWN_NOISE_BUILD_NOTE} and
42
43
  * `runProtectedMachBuild`.
43
44
  */
44
45
  const TRACEBACK_HEADER_PATTERN = /^Traceback \(most recent call last\)/;
@@ -47,33 +48,35 @@ const CHAINED_EXCEPTION_CONNECTOR_PATTERN = /^(?:During handling of the above ex
47
48
  * Closed allowlist of the documented teardown family's attributes:
48
49
  * `stop_time` and `poll_interval` (the same mozsystemmonitor init failure
49
50
  * `test-harness-crash.ts` already classifies as recognized noise). Any other
50
- * missing attribute is a NEW upstream defect and must print verbatim.
51
+ * missing attribute is a new upstream defect and must print verbatim.
51
52
  */
52
53
  const KNOWN_TEARDOWN_ATTRIBUTE_ERROR_PATTERN = /AttributeError: 'SystemResourceMonitor' object has no attribute '(?:stop_time|poll_interval)'/;
53
54
  const RESOURCEMONITOR_FRAME_PATTERN = /mozsystemmonitor[/\\]resourcemonitor\.py/;
54
55
  /**
55
56
  * Shutdown marker: the harness's SUITE_END line. Matches the shape
56
57
  * `test-harness-crash.ts` keys its summary parsing on (module-private
57
- * there; duplicated here with this cross-reference rather than exported).
58
+ * there, and duplicated here with this cross-reference rather than
59
+ * exported).
58
60
  */
59
61
  const SHUTDOWN_MARKER_PATTERN = /\bSUITE_END\b/;
60
62
  /**
61
- * Whole-block recognition — every signal must hold (see module doc). True
62
- * when CAPTURED output carries the documented mozsystemmonitor teardown
63
+ * Whole-block recognition. Every signal must hold (see module doc). True
64
+ * when captured output carries the documented mozsystemmonitor teardown
63
65
  * traceback.
64
66
  *
65
- * The echo filter below only affects what a human sees. The CLASSIFIER
67
+ * The echo filter below only affects what a human sees. The classifier
66
68
  * reads the raw capture, and it needs the same recognition to tell "the
67
69
  * suite finished clean and then upstream fell over at shutdown" from "the
68
- * suite did not finish". Deliberately the same two-signal test the echo
69
- * filter applies — a novel attribute or a traceback from anywhere but
70
- * `resourcemonitor.py` is NOT this incident and must keep failing the run.
70
+ * suite did not finish". This is the same two-signal test the echo filter
71
+ * applies: a novel attribute or a traceback from anywhere but
72
+ * `resourcemonitor.py` is not this incident and must keep failing the run.
71
73
  *
72
74
  * The shutdown-marker precondition the echo filter adds is intentionally
73
- * omitted: the whole point at the classification layer is the case where
74
- * the teardown crash prevented the shutdown marker from printing.
75
+ * omitted: at the classification layer the case that matters is exactly
76
+ * the one where the teardown crash prevented the shutdown marker from
77
+ * printing.
75
78
  *
76
- * Pure; exported for the classifier and for direct unit testing.
79
+ * Pure. Exported for the classifier and for direct unit testing.
77
80
  *
78
81
  * @param output - Raw captured stdout/stderr
79
82
  * @returns True when the recognized teardown traceback is present
@@ -83,14 +86,14 @@ export function hasKnownTeardownNoise(output) {
83
86
  RESOURCEMONITOR_FRAME_PATTERN.test(output));
84
87
  }
85
88
  /**
86
- * True when a SINGLE line is the documented teardown family's
89
+ * True when a single line is the documented teardown family's
87
90
  * `AttributeError`.
88
91
  *
89
- * The line-level half of {@link hasKnownTeardownNoise}: the traceback FRAME
92
+ * The line-level half of {@link hasKnownTeardownNoise}: the traceback frame
90
93
  * lives on a neighbouring line, so a per-line test cannot apply the
91
94
  * two-signal rule by itself. Callers pair this with
92
- * `hasKnownTeardownNoise(wholeOutput)` to recover the full recognition —
93
- * "this capture carries the incident, and THIS line is its header" — which
95
+ * `hasKnownTeardownNoise(wholeOutput)` to recover the full recognition
96
+ * ("this capture carries the incident, and this line is its header"), which
94
97
  * keeps the closed attribute allowlist (`stop_time`/`poll_interval`) doing
95
98
  * the same work it does everywhere else. A novel attribute is not this
96
99
  * incident and must stay a candidate failure.
@@ -101,13 +104,13 @@ export function hasKnownTeardownNoise(output) {
101
104
  export function isKnownTeardownNoiseLine(line) {
102
105
  return KNOWN_TEARDOWN_ATTRIBUTE_ERROR_PATTERN.test(line);
103
106
  }
104
- /** Fresh per-run context — hand the same instance to both stream filters. */
107
+ /** Fresh per-run context. Hand the same instance to both stream filters. */
105
108
  export function createTeardownNoiseContext() {
106
109
  return { shutdownSeen: false };
107
110
  }
108
111
  /**
109
- * Build-phase note for the SAME recognized signature. The build path does
110
- * not COLLAPSE the traceback (see the module doc's "test-only" note) — it
112
+ * Build-phase note for the same recognized signature. The build path does
113
+ * not collapse the traceback (see the module doc's "test-only" note). It
111
114
  * prints verbatim and this line is added beside it, so one signature reads
112
115
  * the same in both phases without a build losing output it may need.
113
116
  */
@@ -123,7 +126,7 @@ const HOLD_BYTE_LIMIT = 16 * 1024;
123
126
  /**
124
127
  * Creates a stateful filter for one output stream. Complete lines outside a
125
128
  * traceback pass straight through (only the trailing partial line is held
126
- * back); a `Traceback (most recent call last)` header switches to hold mode
129
+ * back). A `Traceback (most recent call last)` header switches to hold mode
127
130
  * until the block ends, then either the one-line annotation (recognized
128
131
  * signature after a seen shutdown marker) or the verbatim block (anything
129
132
  * else) is emitted. Pass the run's shared {@link TeardownNoiseContext} so
@@ -132,18 +135,18 @@ const HOLD_BYTE_LIMIT = 16 * 1024;
132
135
  export function createKnownTeardownNoiseFilter(context = createTeardownNoiseContext()) {
133
136
  /** Partial (no trailing newline yet) input line. */
134
137
  let partial = '';
135
- /** Held traceback lines (each WITH its newline) while in hold mode. */
138
+ /** Held traceback lines (each with its newline) while in hold mode. */
136
139
  let held = [];
137
140
  let heldBytes = 0;
138
141
  /**
139
142
  * State machine:
140
- * 'pass' — outside any traceback; lines echo through.
141
- * 'inside' — between a Traceback header and its closing exception line.
142
- * 'closed' — saw the closing `SomeError: …` line; still holding in
143
- * case a chained-exception connector continues the block
144
- * (the real fixture chains two tracebacks — the whole
145
- * chain must be evaluated as ONE block or the second half
146
- * would print raw after the annotation).
143
+ * 'pass': outside any traceback, so lines echo through.
144
+ * 'inside': between a Traceback header and its closing exception line.
145
+ * 'closed': saw the closing `SomeError: …` line, still holding in
146
+ * case a chained-exception connector continues the block
147
+ * (the real fixture chains two tracebacks, so the whole
148
+ * chain must be evaluated as one block or the second half
149
+ * would print raw after the annotation).
147
150
  */
148
151
  let state = 'pass';
149
152
  const resetHold = () => {
@@ -166,7 +169,7 @@ export function createKnownTeardownNoiseFilter(context = createTeardownNoiseCont
166
169
  heldBytes += line.length;
167
170
  if (held.length > HOLD_LINE_LIMIT || heldBytes > HOLD_BYTE_LIMIT) {
168
171
  // Pathological block: flush verbatim rather than risk withholding
169
- // output; do not attempt recognition on oversized blocks.
172
+ // output. Do not attempt recognition on oversized blocks.
170
173
  return { out: resetHold(), overflowed: true };
171
174
  }
172
175
  return { out: '', overflowed: false };
@@ -187,7 +190,7 @@ export function createKnownTeardownNoiseFilter(context = createTeardownNoiseCont
187
190
  /^[ \t]/.test(content) ||
188
191
  TRACEBACK_HEADER_PATTERN.test(content);
189
192
  const { out, overflowed } = hold(line);
190
- // The first unindented line is the closing `SomeError: …` line; keep
193
+ // The first unindented line is the closing `SomeError: …` line. Keep
191
194
  // holding in case a chained connector extends the block.
192
195
  if (!overflowed && !isContinuation) {
193
196
  state = 'closed';
@@ -207,8 +210,8 @@ export function createKnownTeardownNoiseFilter(context = createTeardownNoiseCont
207
210
  }
208
211
  return releaseHeld() + processLineInPass(line);
209
212
  };
210
- // Re-dispatch a line through pass-mode handling after a block release —
211
- // the line that ended the block may itself start a new traceback.
213
+ // Re-dispatch a line through pass-mode handling after a block release.
214
+ // The line that ended the block may itself start a new traceback.
212
215
  const processLineInPass = (line) => {
213
216
  const content = line.replace(/\r?\n$/, '');
214
217
  if (TRACEBACK_HEADER_PATTERN.test(content)) {
@@ -238,7 +241,7 @@ export function createKnownTeardownNoiseFilter(context = createTeardownNoiseCont
238
241
  let out = '';
239
242
  if (state !== 'pass') {
240
243
  // A stream that closes mid-block: fold the trailing partial line in
241
- // and evaluate — the final exception line is often the last thing
244
+ // and evaluate. The final exception line is often the last thing
242
245
  // printed, without a trailing newline.
243
246
  if (partial.length > 0) {
244
247
  held.push(partial);