@hominis/fireforge 0.46.0 → 0.46.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (606) hide show
  1. package/CHANGELOG.md +381 -498
  2. package/dist/bin/fireforge.d.ts +1 -1
  3. package/dist/bin/fireforge.js +17 -17
  4. package/dist/build-info.json +4 -4
  5. package/dist/src/cli-usage-error.d.ts +9 -9
  6. package/dist/src/cli-usage-error.js +12 -12
  7. package/dist/src/cli.d.ts +3 -2
  8. package/dist/src/cli.js +29 -28
  9. package/dist/src/commands/bootstrap-checks.js +2 -1
  10. package/dist/src/commands/bootstrap.js +2 -2
  11. package/dist/src/commands/build.js +12 -11
  12. package/dist/src/commands/config.js +9 -9
  13. package/dist/src/commands/destructive-decision.d.ts +4 -4
  14. package/dist/src/commands/destructive-decision.js +4 -4
  15. package/dist/src/commands/discard.js +5 -5
  16. package/dist/src/commands/doctor-check-core.d.ts +4 -4
  17. package/dist/src/commands/doctor-external-toolchains.js +2 -2
  18. package/dist/src/commands/doctor-furnace-config-sync.d.ts +2 -2
  19. package/dist/src/commands/doctor-furnace-config-sync.js +20 -20
  20. package/dist/src/commands/doctor-furnace-jar.d.ts +1 -1
  21. package/dist/src/commands/doctor-furnace-jar.js +1 -1
  22. package/dist/src/commands/doctor-furnace.js +22 -22
  23. package/dist/src/commands/doctor-orphaned-harness.d.ts +10 -11
  24. package/dist/src/commands/doctor-orphaned-harness.js +10 -11
  25. package/dist/src/commands/doctor-patch-manifest.d.ts +2 -1
  26. package/dist/src/commands/doctor-patch-manifest.js +7 -6
  27. package/dist/src/commands/doctor-post-rebase-audit.js +2 -2
  28. package/dist/src/commands/doctor-source-pin.d.ts +12 -12
  29. package/dist/src/commands/doctor-source-pin.js +14 -14
  30. package/dist/src/commands/doctor-working-tree.d.ts +3 -3
  31. package/dist/src/commands/doctor-working-tree.js +3 -3
  32. package/dist/src/commands/doctor.d.ts +2 -2
  33. package/dist/src/commands/doctor.js +9 -9
  34. package/dist/src/commands/download.js +15 -13
  35. package/dist/src/commands/export-all.js +8 -8
  36. package/dist/src/commands/export-flow.d.ts +5 -5
  37. package/dist/src/commands/export-flow.js +14 -14
  38. package/dist/src/commands/export-placement-conflicts.d.ts +3 -3
  39. package/dist/src/commands/export-placement-conflicts.js +9 -9
  40. package/dist/src/commands/export-placement-gate.d.ts +2 -2
  41. package/dist/src/commands/export-placement-gate.js +5 -5
  42. package/dist/src/commands/export-placement-policy.d.ts +1 -1
  43. package/dist/src/commands/export-placement-policy.js +1 -1
  44. package/dist/src/commands/export-shared.d.ts +10 -10
  45. package/dist/src/commands/export-shared.js +13 -13
  46. package/dist/src/commands/export.js +4 -4
  47. package/dist/src/commands/furnace/apply.js +16 -16
  48. package/dist/src/commands/furnace/chrome-doc-remove.d.ts +1 -1
  49. package/dist/src/commands/furnace/chrome-doc-remove.js +1 -1
  50. package/dist/src/commands/furnace/chrome-doc-templates.d.ts +14 -14
  51. package/dist/src/commands/furnace/chrome-doc-templates.js +17 -17
  52. package/dist/src/commands/furnace/chrome-doc-tests.d.ts +2 -2
  53. package/dist/src/commands/furnace/chrome-doc-tests.js +4 -4
  54. package/dist/src/commands/furnace/chrome-doc.d.ts +8 -8
  55. package/dist/src/commands/furnace/chrome-doc.js +18 -18
  56. package/dist/src/commands/furnace/create-browser-test.d.ts +1 -1
  57. package/dist/src/commands/furnace/create-browser-test.js +4 -4
  58. package/dist/src/commands/furnace/create-dry-run.d.ts +4 -4
  59. package/dist/src/commands/furnace/create-dry-run.js +4 -4
  60. package/dist/src/commands/furnace/create-features.d.ts +2 -2
  61. package/dist/src/commands/furnace/create-features.js +2 -2
  62. package/dist/src/commands/furnace/create-mochikit.d.ts +4 -4
  63. package/dist/src/commands/furnace/create-mochikit.js +7 -7
  64. package/dist/src/commands/furnace/create-templates.d.ts +14 -14
  65. package/dist/src/commands/furnace/create-templates.js +18 -18
  66. package/dist/src/commands/furnace/create-xpcshell.d.ts +5 -5
  67. package/dist/src/commands/furnace/create-xpcshell.js +8 -8
  68. package/dist/src/commands/furnace/create.d.ts +1 -1
  69. package/dist/src/commands/furnace/create.js +10 -10
  70. package/dist/src/commands/furnace/deploy.js +4 -4
  71. package/dist/src/commands/furnace/diff.js +7 -7
  72. package/dist/src/commands/furnace/index.js +1 -1
  73. package/dist/src/commands/furnace/init.js +15 -15
  74. package/dist/src/commands/furnace/list.js +2 -2
  75. package/dist/src/commands/furnace/override.d.ts +1 -1
  76. package/dist/src/commands/furnace/override.js +15 -15
  77. package/dist/src/commands/furnace/preview.js +17 -17
  78. package/dist/src/commands/furnace/refresh.js +6 -6
  79. package/dist/src/commands/furnace/remove-mutations.d.ts +3 -3
  80. package/dist/src/commands/furnace/remove-mutations.js +19 -18
  81. package/dist/src/commands/furnace/remove-state.d.ts +1 -1
  82. package/dist/src/commands/furnace/remove-state.js +1 -1
  83. package/dist/src/commands/furnace/remove.js +2 -2
  84. package/dist/src/commands/furnace/rename-browser-test.js +9 -8
  85. package/dist/src/commands/furnace/rename-xpcshell.d.ts +2 -2
  86. package/dist/src/commands/furnace/rename-xpcshell.js +3 -3
  87. package/dist/src/commands/furnace/rename.js +9 -9
  88. package/dist/src/commands/furnace/scan.js +3 -3
  89. package/dist/src/commands/furnace/status.js +7 -7
  90. package/dist/src/commands/furnace/sync.js +6 -6
  91. package/dist/src/commands/furnace/test-file-name.d.ts +2 -2
  92. package/dist/src/commands/furnace/test-file-name.js +2 -2
  93. package/dist/src/commands/furnace/validate.js +11 -12
  94. package/dist/src/commands/import.js +20 -20
  95. package/dist/src/commands/lint-per-patch.js +8 -8
  96. package/dist/src/commands/lint-per-run-checkjs.d.ts +12 -13
  97. package/dist/src/commands/lint-per-run-checkjs.js +14 -15
  98. package/dist/src/commands/lint-report.d.ts +3 -3
  99. package/dist/src/commands/lint-report.js +4 -4
  100. package/dist/src/commands/lint.d.ts +3 -3
  101. package/dist/src/commands/lint.js +35 -35
  102. package/dist/src/commands/manifest.d.ts +4 -4
  103. package/dist/src/commands/package.js +2 -2
  104. package/dist/src/commands/patch/compact.d.ts +2 -2
  105. package/dist/src/commands/patch/compact.js +8 -8
  106. package/dist/src/commands/patch/delete.d.ts +1 -1
  107. package/dist/src/commands/patch/delete.js +8 -8
  108. package/dist/src/commands/patch/lint-ignore.d.ts +3 -4
  109. package/dist/src/commands/patch/lint-ignore.js +14 -15
  110. package/dist/src/commands/patch/move-files-create.d.ts +2 -2
  111. package/dist/src/commands/patch/move-files-create.js +5 -5
  112. package/dist/src/commands/patch/move-files-into.d.ts +2 -2
  113. package/dist/src/commands/patch/move-files-into.js +3 -3
  114. package/dist/src/commands/patch/move-files.js +1 -1
  115. package/dist/src/commands/patch/patch-context.d.ts +1 -1
  116. package/dist/src/commands/patch/rename.d.ts +4 -4
  117. package/dist/src/commands/patch/rename.js +8 -8
  118. package/dist/src/commands/patch/reorder.js +10 -10
  119. package/dist/src/commands/patch/split-plan.d.ts +3 -3
  120. package/dist/src/commands/patch/split-plan.js +6 -5
  121. package/dist/src/commands/patch/split.d.ts +2 -2
  122. package/dist/src/commands/patch/split.js +5 -5
  123. package/dist/src/commands/patch/staged-dependency-validate.d.ts +1 -1
  124. package/dist/src/commands/patch/staged-dependency-validate.js +3 -3
  125. package/dist/src/commands/patch/staged-dependency.d.ts +1 -1
  126. package/dist/src/commands/patch/staged-dependency.js +6 -6
  127. package/dist/src/commands/patch/tier.d.ts +2 -2
  128. package/dist/src/commands/patch/tier.js +5 -5
  129. package/dist/src/commands/patch-rename-map.d.ts +1 -1
  130. package/dist/src/commands/patch-rename-map.js +1 -1
  131. package/dist/src/commands/pending-resolution.d.ts +5 -5
  132. package/dist/src/commands/pending-resolution.js +5 -5
  133. package/dist/src/commands/re-export-adjacent.d.ts +3 -3
  134. package/dist/src/commands/re-export-adjacent.js +8 -8
  135. package/dist/src/commands/re-export-bulk-scan.d.ts +3 -3
  136. package/dist/src/commands/re-export-bulk-scan.js +17 -17
  137. package/dist/src/commands/re-export-drift.d.ts +10 -10
  138. package/dist/src/commands/re-export-drift.js +29 -29
  139. package/dist/src/commands/re-export-files.js +14 -15
  140. package/dist/src/commands/re-export-lint.d.ts +26 -26
  141. package/dist/src/commands/re-export-lint.js +27 -27
  142. package/dist/src/commands/re-export-options.d.ts +1 -1
  143. package/dist/src/commands/re-export-options.js +1 -1
  144. package/dist/src/commands/re-export-register.d.ts +1 -1
  145. package/dist/src/commands/re-export-register.js +1 -1
  146. package/dist/src/commands/re-export-scan.d.ts +1 -1
  147. package/dist/src/commands/re-export-scan.js +7 -7
  148. package/dist/src/commands/re-export-single.d.ts +1 -1
  149. package/dist/src/commands/re-export-single.js +20 -20
  150. package/dist/src/commands/re-export.js +7 -6
  151. package/dist/src/commands/rebase/abort.js +6 -6
  152. package/dist/src/commands/rebase/continue.js +8 -7
  153. package/dist/src/commands/rebase/index.d.ts +1 -1
  154. package/dist/src/commands/rebase/index.js +3 -3
  155. package/dist/src/commands/rebase/patch-loop.js +18 -17
  156. package/dist/src/commands/register.js +5 -5
  157. package/dist/src/commands/reset.js +1 -1
  158. package/dist/src/commands/resolve.d.ts +2 -2
  159. package/dist/src/commands/resolve.js +3 -3
  160. package/dist/src/commands/run.js +26 -26
  161. package/dist/src/commands/setup-support.js +4 -4
  162. package/dist/src/commands/setup.js +1 -1
  163. package/dist/src/commands/source.js +1 -1
  164. package/dist/src/commands/status-check.d.ts +3 -3
  165. package/dist/src/commands/status-check.js +4 -4
  166. package/dist/src/commands/status-json.d.ts +14 -13
  167. package/dist/src/commands/status-json.js +9 -8
  168. package/dist/src/commands/status-output.d.ts +3 -3
  169. package/dist/src/commands/status-output.js +3 -3
  170. package/dist/src/commands/status-ownership.d.ts +3 -3
  171. package/dist/src/commands/status-ownership.js +3 -3
  172. package/dist/src/commands/status.js +22 -22
  173. package/dist/src/commands/test-build-phase.d.ts +1 -1
  174. package/dist/src/commands/test-build-phase.js +17 -17
  175. package/dist/src/commands/test-diagnose.d.ts +1 -1
  176. package/dist/src/commands/test-diagnose.js +20 -20
  177. package/dist/src/commands/test-modes.d.ts +2 -2
  178. package/dist/src/commands/test-modes.js +4 -4
  179. package/dist/src/commands/test-run.d.ts +11 -11
  180. package/dist/src/commands/test-run.js +15 -15
  181. package/dist/src/commands/test-stale-gate.d.ts +12 -12
  182. package/dist/src/commands/test-stale-gate.js +13 -13
  183. package/dist/src/commands/test-verdict.d.ts +6 -6
  184. package/dist/src/commands/test-verdict.js +11 -11
  185. package/dist/src/commands/test.d.ts +3 -3
  186. package/dist/src/commands/test.js +36 -36
  187. package/dist/src/commands/token-coverage.js +3 -3
  188. package/dist/src/commands/token-list.js +5 -5
  189. package/dist/src/commands/token.js +9 -9
  190. package/dist/src/commands/tree.js +19 -19
  191. package/dist/src/commands/typecheck.d.ts +6 -6
  192. package/dist/src/commands/typecheck.js +7 -7
  193. package/dist/src/commands/verify.d.ts +3 -3
  194. package/dist/src/commands/verify.js +10 -10
  195. package/dist/src/commands/watch.js +11 -11
  196. package/dist/src/commands/wire.js +13 -13
  197. package/dist/src/core/ast-utils.d.ts +7 -7
  198. package/dist/src/core/ast-utils.js +8 -8
  199. package/dist/src/core/branding.d.ts +5 -5
  200. package/dist/src/core/branding.js +3 -3
  201. package/dist/src/core/browser-wire.d.ts +1 -1
  202. package/dist/src/core/browser-wire.js +4 -4
  203. package/dist/src/core/build-audit-platform.d.ts +6 -6
  204. package/dist/src/core/build-audit-platform.js +26 -26
  205. package/dist/src/core/build-audit-registration.d.ts +5 -5
  206. package/dist/src/core/build-audit-registration.js +7 -7
  207. package/dist/src/core/build-audit-resolve.d.ts +5 -5
  208. package/dist/src/core/build-audit-resolve.js +6 -6
  209. package/dist/src/core/build-audit-skip.d.ts +8 -8
  210. package/dist/src/core/build-audit-skip.js +12 -12
  211. package/dist/src/core/build-audit-transforms.d.ts +2 -2
  212. package/dist/src/core/build-audit-transforms.js +3 -3
  213. package/dist/src/core/build-audit.d.ts +8 -8
  214. package/dist/src/core/build-audit.js +39 -37
  215. package/dist/src/core/build-baseline-types.d.ts +19 -18
  216. package/dist/src/core/build-baseline-types.js +1 -1
  217. package/dist/src/core/build-baseline.d.ts +8 -8
  218. package/dist/src/core/build-baseline.js +14 -14
  219. package/dist/src/core/build-jar-escalation.d.ts +8 -8
  220. package/dist/src/core/build-jar-escalation.js +15 -15
  221. package/dist/src/core/build-overwrite-guard.d.ts +4 -4
  222. package/dist/src/core/build-overwrite-guard.js +13 -13
  223. package/dist/src/core/build-prepare.d.ts +4 -4
  224. package/dist/src/core/build-prepare.js +16 -15
  225. package/dist/src/core/config-mutate.js +4 -4
  226. package/dist/src/core/config-state.js +2 -2
  227. package/dist/src/core/config-validate-build-audit.js +3 -3
  228. package/dist/src/core/config-validate-file-size.d.ts +1 -1
  229. package/dist/src/core/config-validate-file-size.js +2 -2
  230. package/dist/src/core/config-validate.js +8 -9
  231. package/dist/src/core/config.d.ts +10 -10
  232. package/dist/src/core/config.js +10 -10
  233. package/dist/src/core/coverage-extend.d.ts +16 -16
  234. package/dist/src/core/coverage-extend.js +16 -16
  235. package/dist/src/core/destructive.d.ts +14 -14
  236. package/dist/src/core/destructive.js +9 -9
  237. package/dist/src/core/diff-hunks.d.ts +2 -2
  238. package/dist/src/core/diff-hunks.js +7 -7
  239. package/dist/src/core/discard-baseline.d.ts +10 -10
  240. package/dist/src/core/discard-baseline.js +15 -16
  241. package/dist/src/core/display-state.d.ts +11 -11
  242. package/dist/src/core/display-state.js +12 -12
  243. package/dist/src/core/engine-changes.d.ts +2 -2
  244. package/dist/src/core/engine-changes.js +2 -2
  245. package/dist/src/core/engine-precondition.d.ts +4 -4
  246. package/dist/src/core/engine-precondition.js +2 -2
  247. package/dist/src/core/engine-session-lock.d.ts +18 -18
  248. package/dist/src/core/engine-session-lock.js +37 -37
  249. package/dist/src/core/export-moved-code-shape.d.ts +7 -7
  250. package/dist/src/core/export-moved-code-shape.js +8 -8
  251. package/dist/src/core/file-lock-owner.d.ts +11 -11
  252. package/dist/src/core/file-lock-owner.js +18 -18
  253. package/dist/src/core/file-lock.d.ts +12 -12
  254. package/dist/src/core/file-lock.js +52 -39
  255. package/dist/src/core/firefox-cache.d.ts +1 -1
  256. package/dist/src/core/firefox-cache.js +10 -10
  257. package/dist/src/core/firefox-download.d.ts +3 -3
  258. package/dist/src/core/firefox-download.js +6 -6
  259. package/dist/src/core/firefox-extract.d.ts +2 -2
  260. package/dist/src/core/firefox-extract.js +13 -13
  261. package/dist/src/core/firefox.d.ts +5 -5
  262. package/dist/src/core/firefox.js +8 -8
  263. package/dist/src/core/furnace-apply-dry-run.js +1 -1
  264. package/dist/src/core/furnace-apply-ftl.d.ts +5 -5
  265. package/dist/src/core/furnace-apply-ftl.js +8 -8
  266. package/dist/src/core/furnace-apply-helpers.d.ts +9 -9
  267. package/dist/src/core/furnace-apply-helpers.js +21 -21
  268. package/dist/src/core/furnace-apply-output.js +1 -1
  269. package/dist/src/core/furnace-apply-overwrite-warn.d.ts +9 -9
  270. package/dist/src/core/furnace-apply-overwrite-warn.js +9 -9
  271. package/dist/src/core/furnace-apply-undeploy-actions.d.ts +1 -1
  272. package/dist/src/core/furnace-apply-undeploy-actions.js +1 -1
  273. package/dist/src/core/furnace-apply.d.ts +3 -3
  274. package/dist/src/core/furnace-apply.js +22 -21
  275. package/dist/src/core/furnace-checksum-utils.d.ts +5 -5
  276. package/dist/src/core/furnace-checksum-utils.js +5 -5
  277. package/dist/src/core/furnace-config-custom.d.ts +1 -1
  278. package/dist/src/core/furnace-config-custom.js +2 -2
  279. package/dist/src/core/furnace-config-order.js +1 -1
  280. package/dist/src/core/furnace-config-tokens.d.ts +3 -3
  281. package/dist/src/core/furnace-config-tokens.js +3 -3
  282. package/dist/src/core/furnace-config-validate.js +2 -2
  283. package/dist/src/core/furnace-config.d.ts +4 -4
  284. package/dist/src/core/furnace-config.js +18 -18
  285. package/dist/src/core/furnace-constants.d.ts +6 -6
  286. package/dist/src/core/furnace-constants.js +6 -6
  287. package/dist/src/core/furnace-css-fragments.d.ts +6 -6
  288. package/dist/src/core/furnace-css-fragments.js +11 -11
  289. package/dist/src/core/furnace-dir-entry.d.ts +1 -1
  290. package/dist/src/core/furnace-dir-entry.js +1 -1
  291. package/dist/src/core/furnace-jsconfig.d.ts +7 -7
  292. package/dist/src/core/furnace-jsconfig.js +22 -20
  293. package/dist/src/core/furnace-operation.d.ts +21 -20
  294. package/dist/src/core/furnace-operation.js +36 -34
  295. package/dist/src/core/furnace-precondition.d.ts +10 -10
  296. package/dist/src/core/furnace-precondition.js +8 -8
  297. package/dist/src/core/furnace-refresh.js +2 -2
  298. package/dist/src/core/furnace-registration-ast.d.ts +2 -2
  299. package/dist/src/core/furnace-registration-ast.js +9 -9
  300. package/dist/src/core/furnace-registration-remove.d.ts +4 -4
  301. package/dist/src/core/furnace-registration-remove.js +6 -6
  302. package/dist/src/core/furnace-registration-validate.d.ts +2 -2
  303. package/dist/src/core/furnace-registration-validate.js +2 -2
  304. package/dist/src/core/furnace-registration.d.ts +5 -5
  305. package/dist/src/core/furnace-registration.js +7 -7
  306. package/dist/src/core/furnace-rollback.d.ts +1 -1
  307. package/dist/src/core/furnace-rollback.js +5 -5
  308. package/dist/src/core/furnace-stale-export.d.ts +17 -16
  309. package/dist/src/core/furnace-stale-export.js +16 -15
  310. package/dist/src/core/furnace-staleness.d.ts +2 -2
  311. package/dist/src/core/furnace-staleness.js +2 -2
  312. package/dist/src/core/furnace-state-persist.d.ts +10 -10
  313. package/dist/src/core/furnace-state-persist.js +10 -10
  314. package/dist/src/core/furnace-step-errors.d.ts +6 -6
  315. package/dist/src/core/furnace-step-errors.js +6 -6
  316. package/dist/src/core/furnace-validate-accessibility.js +14 -14
  317. package/dist/src/core/furnace-validate-compatibility.js +9 -9
  318. package/dist/src/core/furnace-validate-registration.d.ts +2 -2
  319. package/dist/src/core/furnace-validate-registration.js +13 -13
  320. package/dist/src/core/furnace-validate-structure.d.ts +1 -1
  321. package/dist/src/core/furnace-validate-structure.js +4 -4
  322. package/dist/src/core/furnace-validate.js +9 -9
  323. package/dist/src/core/furnace-version-drift.d.ts +5 -5
  324. package/dist/src/core/furnace-version-drift.js +5 -5
  325. package/dist/src/core/git-base.d.ts +4 -4
  326. package/dist/src/core/git-base.js +9 -9
  327. package/dist/src/core/git-diff-new-file.d.ts +4 -4
  328. package/dist/src/core/git-diff-new-file.js +8 -8
  329. package/dist/src/core/git-diff.d.ts +4 -4
  330. package/dist/src/core/git-diff.js +35 -34
  331. package/dist/src/core/git-file-ops.d.ts +6 -6
  332. package/dist/src/core/git-file-ops.js +7 -7
  333. package/dist/src/core/git-readonly-index.d.ts +12 -12
  334. package/dist/src/core/git-readonly-index.js +12 -12
  335. package/dist/src/core/git-status.d.ts +4 -4
  336. package/dist/src/core/git-status.js +4 -4
  337. package/dist/src/core/git.d.ts +3 -3
  338. package/dist/src/core/git.js +14 -14
  339. package/dist/src/core/harness-orphans.d.ts +17 -17
  340. package/dist/src/core/harness-orphans.js +20 -20
  341. package/dist/src/core/history-log.d.ts +3 -3
  342. package/dist/src/core/history-log.js +3 -3
  343. package/dist/src/core/license-headers.d.ts +19 -18
  344. package/dist/src/core/license-headers.js +29 -28
  345. package/dist/src/core/mach-build-artifacts.d.ts +21 -21
  346. package/dist/src/core/mach-build-artifacts.js +23 -23
  347. package/dist/src/core/mach-error-hints.d.ts +5 -5
  348. package/dist/src/core/mach-error-hints.js +13 -13
  349. package/dist/src/core/mach-known-noise-filter.d.ts +41 -38
  350. package/dist/src/core/mach-known-noise-filter.js +53 -50
  351. package/dist/src/core/mach-mozconfig.d.ts +6 -6
  352. package/dist/src/core/mach-mozconfig.js +15 -15
  353. package/dist/src/core/mach-python.d.ts +2 -1
  354. package/dist/src/core/mach-python.js +4 -3
  355. package/dist/src/core/mach-resource-shim.d.ts +12 -12
  356. package/dist/src/core/mach-resource-shim.js +20 -20
  357. package/dist/src/core/mach.d.ts +23 -23
  358. package/dist/src/core/mach.js +36 -36
  359. package/dist/src/core/marionette-port.d.ts +15 -13
  360. package/dist/src/core/marionette-port.js +34 -31
  361. package/dist/src/core/marionette-preflight.d.ts +6 -6
  362. package/dist/src/core/marionette-preflight.js +23 -23
  363. package/dist/src/core/markdown-table.d.ts +9 -9
  364. package/dist/src/core/markdown-table.js +14 -14
  365. package/dist/src/core/mochitest-server-port.d.ts +8 -8
  366. package/dist/src/core/mochitest-server-port.js +14 -14
  367. package/dist/src/core/module-resolution-preflight.d.ts +8 -8
  368. package/dist/src/core/module-resolution-preflight.js +11 -11
  369. package/dist/src/core/moz-manifest-helpers.d.ts +7 -7
  370. package/dist/src/core/moz-manifest-helpers.js +7 -7
  371. package/dist/src/core/moz-manifest-register.d.ts +1 -1
  372. package/dist/src/core/moz-manifest-register.js +2 -2
  373. package/dist/src/core/moz-manifest-rules.js +11 -11
  374. package/dist/src/core/moz-manifest-tokenizers.js +1 -1
  375. package/dist/src/core/ownership-table.d.ts +5 -5
  376. package/dist/src/core/ownership-table.js +7 -7
  377. package/dist/src/core/parser-fallback.d.ts +3 -3
  378. package/dist/src/core/parser-fallback.js +3 -3
  379. package/dist/src/core/patch-apply-fuzz.d.ts +5 -5
  380. package/dist/src/core/patch-apply-fuzz.js +9 -9
  381. package/dist/src/core/patch-apply.d.ts +9 -9
  382. package/dist/src/core/patch-apply.js +30 -30
  383. package/dist/src/core/patch-export-update.d.ts +4 -4
  384. package/dist/src/core/patch-export-update.js +3 -3
  385. package/dist/src/core/patch-export.d.ts +10 -10
  386. package/dist/src/core/patch-export.js +13 -13
  387. package/dist/src/core/patch-identifier-suggest.d.ts +1 -1
  388. package/dist/src/core/patch-identifier-suggest.js +4 -4
  389. package/dist/src/core/patch-lint-binary.d.ts +7 -7
  390. package/dist/src/core/patch-lint-cache.d.ts +2 -2
  391. package/dist/src/core/patch-lint-cache.js +13 -13
  392. package/dist/src/core/patch-lint-checkjs.d.ts +26 -26
  393. package/dist/src/core/patch-lint-checkjs.js +42 -41
  394. package/dist/src/core/patch-lint-chrome-jsdoc.d.ts +8 -9
  395. package/dist/src/core/patch-lint-chrome-jsdoc.js +10 -11
  396. package/dist/src/core/patch-lint-creators.d.ts +3 -3
  397. package/dist/src/core/patch-lint-creators.js +3 -3
  398. package/dist/src/core/patch-lint-cross.d.ts +13 -13
  399. package/dist/src/core/patch-lint-cross.js +21 -21
  400. package/dist/src/core/patch-lint-css.d.ts +1 -1
  401. package/dist/src/core/patch-lint-css.js +5 -5
  402. package/dist/src/core/patch-lint-diff-tag.d.ts +5 -5
  403. package/dist/src/core/patch-lint-diff-tag.js +5 -5
  404. package/dist/src/core/patch-lint-diff.d.ts +4 -4
  405. package/dist/src/core/patch-lint-diff.js +4 -4
  406. package/dist/src/core/patch-lint-file-size.d.ts +3 -3
  407. package/dist/src/core/patch-lint-file-size.js +3 -3
  408. package/dist/src/core/patch-lint-forward-registration.d.ts +4 -4
  409. package/dist/src/core/patch-lint-forward-registration.js +12 -12
  410. package/dist/src/core/patch-lint-jsdoc.d.ts +2 -2
  411. package/dist/src/core/patch-lint-jsdoc.js +11 -11
  412. package/dist/src/core/patch-lint-module-registration.d.ts +1 -1
  413. package/dist/src/core/patch-lint-module-registration.js +1 -1
  414. package/dist/src/core/patch-lint-mozbuild.d.ts +1 -1
  415. package/dist/src/core/patch-lint-mozbuild.js +10 -10
  416. package/dist/src/core/patch-lint-observer.d.ts +3 -3
  417. package/dist/src/core/patch-lint-observer.js +7 -7
  418. package/dist/src/core/patch-lint-ownership.d.ts +6 -6
  419. package/dist/src/core/patch-lint-ownership.js +6 -6
  420. package/dist/src/core/patch-lint-prettier.d.ts +6 -6
  421. package/dist/src/core/patch-lint-prettier.js +6 -6
  422. package/dist/src/core/patch-lint-queue-types.d.ts +1 -1
  423. package/dist/src/core/patch-lint-queue-types.js +1 -1
  424. package/dist/src/core/patch-lint-staged-registration.d.ts +2 -2
  425. package/dist/src/core/patch-lint-staged-registration.js +6 -6
  426. package/dist/src/core/patch-lint-unmanaged-companion.d.ts +23 -23
  427. package/dist/src/core/patch-lint-unmanaged-companion.js +26 -26
  428. package/dist/src/core/patch-lint.d.ts +27 -26
  429. package/dist/src/core/patch-lint.js +48 -46
  430. package/dist/src/core/patch-lock.d.ts +1 -1
  431. package/dist/src/core/patch-lock.js +8 -8
  432. package/dist/src/core/patch-manifest-consistency.d.ts +7 -7
  433. package/dist/src/core/patch-manifest-consistency.js +16 -17
  434. package/dist/src/core/patch-manifest-files-affected.d.ts +1 -1
  435. package/dist/src/core/patch-manifest-files-affected.js +3 -3
  436. package/dist/src/core/patch-manifest-io.d.ts +14 -14
  437. package/dist/src/core/patch-manifest-io.js +27 -27
  438. package/dist/src/core/patch-manifest-query.d.ts +1 -1
  439. package/dist/src/core/patch-manifest-query.js +4 -4
  440. package/dist/src/core/patch-manifest-resolve.d.ts +5 -5
  441. package/dist/src/core/patch-manifest-resolve.js +7 -7
  442. package/dist/src/core/patch-manifest-validate.js +3 -3
  443. package/dist/src/core/patch-manifest.d.ts +2 -2
  444. package/dist/src/core/patch-manifest.js +2 -2
  445. package/dist/src/core/patch-parse.d.ts +14 -14
  446. package/dist/src/core/patch-parse.js +16 -16
  447. package/dist/src/core/patch-registration-refs.d.ts +4 -4
  448. package/dist/src/core/patch-registration-refs.js +7 -7
  449. package/dist/src/core/patch-transform.d.ts +8 -8
  450. package/dist/src/core/patch-transform.js +13 -13
  451. package/dist/src/core/process-cpu-time.d.ts +1 -1
  452. package/dist/src/core/process-cpu-time.js +5 -5
  453. package/dist/src/core/rebase-session.d.ts +7 -7
  454. package/dist/src/core/rebase-session.js +8 -8
  455. package/dist/src/core/register-result.d.ts +1 -1
  456. package/dist/src/core/register-result.js +1 -1
  457. package/dist/src/core/register-scaffold.d.ts +2 -2
  458. package/dist/src/core/register-scaffold.js +3 -3
  459. package/dist/src/core/register-shared-css.d.ts +3 -3
  460. package/dist/src/core/register-shared-css.js +4 -4
  461. package/dist/src/core/register-xpcshell-test.d.ts +2 -2
  462. package/dist/src/core/register-xpcshell-test.js +2 -2
  463. package/dist/src/core/run-log-redact.d.ts +12 -12
  464. package/dist/src/core/run-log-redact.js +16 -16
  465. package/dist/src/core/run-log.d.ts +9 -9
  466. package/dist/src/core/run-log.js +14 -14
  467. package/dist/src/core/shared-ftl.d.ts +2 -2
  468. package/dist/src/core/shared-ftl.js +6 -6
  469. package/dist/src/core/signal-critical.d.ts +2 -2
  470. package/dist/src/core/signal-critical.js +2 -2
  471. package/dist/src/core/smoke-patterns.d.ts +5 -5
  472. package/dist/src/core/smoke-patterns.js +9 -9
  473. package/dist/src/core/state-file.d.ts +3 -3
  474. package/dist/src/core/status-binary.d.ts +8 -8
  475. package/dist/src/core/status-binary.js +12 -12
  476. package/dist/src/core/status-classify.d.ts +17 -17
  477. package/dist/src/core/status-classify.js +11 -11
  478. package/dist/src/core/test-changed-prefs.d.ts +12 -12
  479. package/dist/src/core/test-changed-prefs.js +15 -15
  480. package/dist/src/core/test-harness-crash.d.ts +39 -39
  481. package/dist/src/core/test-harness-crash.js +67 -67
  482. package/dist/src/core/test-harness-output.d.ts +7 -7
  483. package/dist/src/core/test-harness-output.js +7 -7
  484. package/dist/src/core/test-harness-verdict-notes.d.ts +13 -14
  485. package/dist/src/core/test-harness-verdict-notes.js +4 -4
  486. package/dist/src/core/test-path-scope.d.ts +8 -8
  487. package/dist/src/core/test-path-scope.js +11 -11
  488. package/dist/src/core/test-stale-check.d.ts +22 -21
  489. package/dist/src/core/test-stale-check.js +29 -28
  490. package/dist/src/core/test-stale-symlink.d.ts +1 -1
  491. package/dist/src/core/test-stale-symlink.js +1 -1
  492. package/dist/src/core/test-stall-triage.d.ts +9 -9
  493. package/dist/src/core/test-stall-triage.js +22 -22
  494. package/dist/src/core/token-category.d.ts +4 -4
  495. package/dist/src/core/token-category.js +13 -12
  496. package/dist/src/core/token-coverage.js +4 -5
  497. package/dist/src/core/token-dark-mode.d.ts +9 -9
  498. package/dist/src/core/token-dark-mode.js +11 -11
  499. package/dist/src/core/token-docs.d.ts +1 -1
  500. package/dist/src/core/token-inventory.d.ts +6 -6
  501. package/dist/src/core/token-inventory.js +7 -7
  502. package/dist/src/core/token-manager.d.ts +3 -3
  503. package/dist/src/core/token-manager.js +21 -21
  504. package/dist/src/core/token-scaffold.d.ts +4 -4
  505. package/dist/src/core/token-scaffold.js +4 -4
  506. package/dist/src/core/token-variant.d.ts +14 -14
  507. package/dist/src/core/token-variant.js +32 -32
  508. package/dist/src/core/toolchain-preflight.d.ts +15 -15
  509. package/dist/src/core/toolchain-preflight.js +22 -22
  510. package/dist/src/core/tree-cow.d.ts +3 -3
  511. package/dist/src/core/tree-cow.js +6 -6
  512. package/dist/src/core/tree-guard.d.ts +3 -3
  513. package/dist/src/core/tree-guard.js +23 -23
  514. package/dist/src/core/tree-store.d.ts +15 -15
  515. package/dist/src/core/tree-store.js +35 -33
  516. package/dist/src/core/typecheck-shim.d.ts +16 -15
  517. package/dist/src/core/typecheck-shim.js +26 -25
  518. package/dist/src/core/typecheck.d.ts +12 -12
  519. package/dist/src/core/typecheck.js +31 -31
  520. package/dist/src/core/wire-destroy.d.ts +2 -2
  521. package/dist/src/core/wire-destroy.js +5 -5
  522. package/dist/src/core/wire-dom-fragment.d.ts +3 -3
  523. package/dist/src/core/wire-dom-fragment.js +6 -6
  524. package/dist/src/core/wire-init.d.ts +2 -2
  525. package/dist/src/core/wire-init.js +7 -7
  526. package/dist/src/core/wire-subscript.d.ts +1 -1
  527. package/dist/src/core/wire-subscript.js +3 -3
  528. package/dist/src/core/wire-utils.d.ts +9 -9
  529. package/dist/src/core/wire-utils.js +11 -11
  530. package/dist/src/core/xpcshell-appdir.d.ts +20 -20
  531. package/dist/src/core/xpcshell-appdir.js +26 -26
  532. package/dist/src/core/xpcshell-profile-dir.d.ts +3 -3
  533. package/dist/src/core/xpcshell-profile-dir.js +7 -7
  534. package/dist/src/errors/base.d.ts +22 -21
  535. package/dist/src/errors/base.js +22 -21
  536. package/dist/src/errors/build.d.ts +6 -6
  537. package/dist/src/errors/build.js +6 -6
  538. package/dist/src/errors/codes.d.ts +10 -10
  539. package/dist/src/errors/codes.js +10 -10
  540. package/dist/src/errors/furnace.d.ts +2 -2
  541. package/dist/src/errors/git.d.ts +1 -1
  542. package/dist/src/errors/git.js +1 -1
  543. package/dist/src/errors/patch.d.ts +3 -3
  544. package/dist/src/errors/patch.js +3 -3
  545. package/dist/src/errors/rebase.d.ts +1 -1
  546. package/dist/src/errors/rebase.js +1 -1
  547. package/dist/src/errors/run.d.ts +1 -1
  548. package/dist/src/errors/run.js +1 -1
  549. package/dist/src/index.d.ts +4 -4
  550. package/dist/src/index.js +4 -4
  551. package/dist/src/types/commands/options.d.ts +86 -85
  552. package/dist/src/types/commands/patches.d.ts +19 -19
  553. package/dist/src/types/commands/project.d.ts +3 -3
  554. package/dist/src/types/config.d.ts +24 -23
  555. package/dist/src/types/furnace.d.ts +17 -17
  556. package/dist/src/types/json.d.ts +3 -3
  557. package/dist/src/types/json.js +2 -2
  558. package/dist/src/types/typecheck.d.ts +3 -3
  559. package/dist/src/utils/assert.d.ts +1 -1
  560. package/dist/src/utils/assert.js +6 -6
  561. package/dist/src/utils/build-info.d.ts +5 -5
  562. package/dist/src/utils/build-info.js +6 -6
  563. package/dist/src/utils/child-env.d.ts +5 -5
  564. package/dist/src/utils/child-env.js +5 -5
  565. package/dist/src/utils/concurrency.d.ts +2 -2
  566. package/dist/src/utils/concurrency.js +2 -2
  567. package/dist/src/utils/elapsed.js +1 -1
  568. package/dist/src/utils/errors.d.ts +8 -8
  569. package/dist/src/utils/errors.js +8 -8
  570. package/dist/src/utils/fs.d.ts +1 -1
  571. package/dist/src/utils/fs.js +8 -8
  572. package/dist/src/utils/line-dispatch.d.ts +3 -3
  573. package/dist/src/utils/line-dispatch.js +5 -5
  574. package/dist/src/utils/logger.d.ts +4 -4
  575. package/dist/src/utils/logger.js +11 -11
  576. package/dist/src/utils/machine-output.js +2 -2
  577. package/dist/src/utils/options.d.ts +13 -13
  578. package/dist/src/utils/options.js +20 -20
  579. package/dist/src/utils/package-root.js +2 -2
  580. package/dist/src/utils/paths.d.ts +4 -4
  581. package/dist/src/utils/paths.js +4 -4
  582. package/dist/src/utils/process-group.d.ts +8 -8
  583. package/dist/src/utils/process-group.js +19 -19
  584. package/dist/src/utils/process.d.ts +34 -33
  585. package/dist/src/utils/process.js +20 -19
  586. package/dist/src/utils/ps-duration.d.ts +4 -4
  587. package/dist/src/utils/ps-duration.js +6 -6
  588. package/dist/src/utils/regex.d.ts +4 -4
  589. package/dist/src/utils/regex.js +7 -7
  590. package/dist/src/utils/sleep.d.ts +7 -7
  591. package/dist/src/utils/sleep.js +7 -7
  592. package/dist/src/utils/stdio-drain.d.ts +7 -7
  593. package/dist/src/utils/stdio-drain.js +8 -8
  594. package/dist/src/utils/validation.d.ts +11 -12
  595. package/dist/src/utils/validation.js +20 -21
  596. package/docs/README.md +2 -2
  597. package/docs/configuration.md +120 -114
  598. package/docs/exit-codes.md +63 -58
  599. package/docs/furnace.md +20 -19
  600. package/docs/lifecycle-invariants.md +412 -251
  601. package/docs/machine-output.md +33 -32
  602. package/docs/patch-workflow.md +48 -45
  603. package/docs/run-logs.md +62 -58
  604. package/docs/testing.md +101 -101
  605. package/docs/verification-trees.md +23 -22
  606. package/package.json +2 -2
@@ -9,7 +9,7 @@
9
9
  * override as `mozInfo["appname"] + "-appdir"`. On a stock Firefox build the
10
10
  * key is `firefox-appdir`, so the very common `firefox-appdir = "browser"`
11
11
  * directive is honoured. On a rebranded fork (appname=`mybrowser`) the
12
- * harness looks for `mybrowser-appdir` — the literal `firefox-appdir` line
12
+ * harness looks for `mybrowser-appdir`, so the literal `firefox-appdir` line
13
13
  * is silently ignored, `appPath` falls back to `xrePath`, and every
14
14
  * `resource:///modules/…` import throws `Failed to load
15
15
  * resource:///modules/<name>.sys.mjs` because xpcshell resolves the
@@ -21,7 +21,7 @@
21
21
  * `xpcshell.toml`. If none exists, the test is not an xpcshell test and
22
22
  * there is nothing to inject.
23
23
  * 2. Read the manifest's `[DEFAULT]` section. Look for `<appname>-appdir`
24
- * first — if present, the harness already finds it. Fall back to
24
+ * first. If present, the harness already finds it. Fall back to
25
25
  * `firefox-appdir`. This ordering matches upstream precedence and avoids
26
26
  * overriding an operator who already migrated.
27
27
  * 3. If only `firefox-appdir` is present and `appname != "firefox"`, compute
@@ -30,7 +30,7 @@
30
30
  * `dist/<bundle>.app/Contents/Resources/<value>` for the macOS packaged
31
31
  * layout) and return it as the value to pass to `--app-path`.
32
32
  * 4. If multiple test paths disagree on the resolved value, refuse injection
33
- * and return null — the operator can drop down to `--mach-arg`.
33
+ * and return null. The operator can drop down to `--mach-arg`.
34
34
  *
35
35
  * Operator escape hatch: `--mach-arg=--app-path=…` always wins (handled in
36
36
  * test.ts, which skips injection when `--app-path=` already appears in the
@@ -60,7 +60,7 @@ export interface AppdirResolveResult {
60
60
  * - Single- or double-quoted values
61
61
  * - Whitespace either side of `=`
62
62
  * - Continuation comments (`#` or `;`) at the end of the line
63
- * - Bare unquoted bareword values (e.g. `firefox-appdir = browser`) — some
63
+ * - Bare unquoted bareword values (e.g. `firefox-appdir = browser`). Some
64
64
  * operators omit the quotes and the harness honours either form.
65
65
  *
66
66
  * Returns `undefined` when the key is absent or sits outside `[DEFAULT]`.
@@ -74,10 +74,10 @@ export declare function parseAppdirFromToml(tomlText: string, key: string): {
74
74
  * returns the absolute path of the first sibling `xpcshell.toml` found.
75
75
  * Stops at `engineDir` (inclusive) and returns null on miss.
76
76
  *
77
- * Special-cases `startPath` itself when it already ends with `xpcshell.toml`
78
- * — operators sometimes pass a manifest path directly.
77
+ * Special-cases `startPath` itself when it already ends with
78
+ * `xpcshell.toml`, since operators sometimes pass a manifest path directly.
79
79
  *
80
- * When `startPath` is a DIRECTORY, the walk starts at the directory itself
80
+ * When `startPath` is a directory, the walk starts at the directory itself
81
81
  * (checking `<dir>/xpcshell.toml` first) rather than at its parent.
82
82
  * Starting at the parent misses a directory's own manifest, so
83
83
  * `fireforge test <dir>` classifies it non-xpcshell and dispatches to the
@@ -86,31 +86,31 @@ export declare function parseAppdirFromToml(tomlText: string, key: string): {
86
86
  export declare function findNearestXpcshellManifest(engineDir: string, startPath: string): Promise<string | null>;
87
87
  /**
88
88
  * Reads `<objDir>/mozinfo.json` for the active app name. Returns
89
- * `"firefox"` when mozinfo cannot be read or the field is missing — that
89
+ * `"firefox"` when mozinfo cannot be read or the field is missing. That
90
90
  * is the safe default because it matches stock Firefox behaviour and
91
91
  * means the resolver will not inject anything (the manifest's
92
- * `firefox-appdir` value WILL be honoured by the upstream harness when
92
+ * `firefox-appdir` value is honoured by the upstream harness when
93
93
  * appname is firefox).
94
94
  */
95
95
  export declare function readMozinfoAppname(objDirPath: string): Promise<string>;
96
96
  /**
97
97
  * Probes the obj-dir's `dist/` subtree for the absolute path the harness
98
98
  * would have computed if the manifest key had been honoured. Returns null
99
- * when no candidate exists — better to skip injection silently than to point
99
+ * when no candidate exists: better to skip injection silently than to point
100
100
  * the harness at a path that does not exist, which fails with a different
101
101
  * error than the original symptom and confuses triage.
102
102
  *
103
103
  * Probe order differs by host platform:
104
104
  *
105
- * - **macOS (`darwin`)**: prefer
106
- * `<objDir>/dist/<App>.app/Contents/Resources/<value>` FIRST, then fall
105
+ * - macOS (`darwin`): prefer
106
+ * `<objDir>/dist/<App>.app/Contents/Resources/<value>` first, then fall
107
107
  * back to `<objDir>/dist/bin/<value>`. On macOS `dist/bin` is symlinked to
108
- * `dist/<App>.app/Contents/MacOS/` (the *binaries* directory), so
109
- * `dist/bin/browser` resolves to `<App>.app/Contents/MacOS/browser/` —
110
- * NOT where `resource:///modules/` is rooted. Injecting that path looks
111
- * successful in the log but points at a directory with no modules tree, so
112
- * every `resource:///modules/…` import still throws.
113
- * - **non-macOS**: `dist/bin/<value>` first,
108
+ * `dist/<App>.app/Contents/MacOS/` (the binaries directory), so
109
+ * `dist/bin/browser` resolves to `<App>.app/Contents/MacOS/browser/`,
110
+ * which is not where `resource:///modules/` is rooted. Injecting that path
111
+ * looks successful in the log but points at a directory with no modules
112
+ * tree, so every `resource:///modules/…` import still throws.
113
+ * - non-macOS: `dist/bin/<value>` first,
114
114
  * `.app/Contents/Resources/<value>` as fallback.
115
115
  *
116
116
  * On both platforms the final `.app` fallback iterates every `*.app` entry
@@ -121,7 +121,7 @@ export declare function resolveAbsoluteAppPath(objDirAbs: string, relativeAppdir
121
121
  * Outcome carrier for {@link resolveXpcshellAppdirArg}. Distinguishes the
122
122
  * three "did nothing" cases so callers can shape diagnostics:
123
123
  * - `none`: no manifest under any test path needs injection.
124
- * - `mismatch`: at least two manifests resolved to different values; we
124
+ * - `mismatch`: at least two manifests resolved to different values. We
125
125
  * refuse to guess which one the operator meant.
126
126
  * - `unresolved`: the manifest asks for `firefox-appdir = "<value>"` but
127
127
  * no `dist/` candidate exists for that value.
@@ -143,7 +143,7 @@ export type XpcshellAppdirOutcome = {
143
143
  /**
144
144
  * Top-level resolver. Walks every test path, reads the nearest
145
145
  * xpcshell.toml, and returns the single absolute path to inject (or a
146
- * structured "no injection" outcome). Never throws — every fs / parse
146
+ * structured "no injection" outcome). Never throws: every fs / parse
147
147
  * error is folded into a `none` outcome so the test command always falls
148
148
  * through to the diagnostic hint instead of dying inside a helper.
149
149
  */
@@ -10,7 +10,7 @@
10
10
  * override as `mozInfo["appname"] + "-appdir"`. On a stock Firefox build the
11
11
  * key is `firefox-appdir`, so the very common `firefox-appdir = "browser"`
12
12
  * directive is honoured. On a rebranded fork (appname=`mybrowser`) the
13
- * harness looks for `mybrowser-appdir` — the literal `firefox-appdir` line
13
+ * harness looks for `mybrowser-appdir`, so the literal `firefox-appdir` line
14
14
  * is silently ignored, `appPath` falls back to `xrePath`, and every
15
15
  * `resource:///modules/…` import throws `Failed to load
16
16
  * resource:///modules/<name>.sys.mjs` because xpcshell resolves the
@@ -22,7 +22,7 @@
22
22
  * `xpcshell.toml`. If none exists, the test is not an xpcshell test and
23
23
  * there is nothing to inject.
24
24
  * 2. Read the manifest's `[DEFAULT]` section. Look for `<appname>-appdir`
25
- * first — if present, the harness already finds it. Fall back to
25
+ * first. If present, the harness already finds it. Fall back to
26
26
  * `firefox-appdir`. This ordering matches upstream precedence and avoids
27
27
  * overriding an operator who already migrated.
28
28
  * 3. If only `firefox-appdir` is present and `appname != "firefox"`, compute
@@ -31,7 +31,7 @@
31
31
  * `dist/<bundle>.app/Contents/Resources/<value>` for the macOS packaged
32
32
  * layout) and return it as the value to pass to `--app-path`.
33
33
  * 4. If multiple test paths disagree on the resolved value, refuse injection
34
- * and return null — the operator can drop down to `--mach-arg`.
34
+ * and return null. The operator can drop down to `--mach-arg`.
35
35
  *
36
36
  * Operator escape hatch: `--mach-arg=--app-path=…` always wins (handled in
37
37
  * test.ts, which skips injection when `--app-path=` already appears in the
@@ -51,7 +51,7 @@ import { isObject, isString } from '../utils/validation.js';
51
51
  * - Single- or double-quoted values
52
52
  * - Whitespace either side of `=`
53
53
  * - Continuation comments (`#` or `;`) at the end of the line
54
- * - Bare unquoted bareword values (e.g. `firefox-appdir = browser`) — some
54
+ * - Bare unquoted bareword values (e.g. `firefox-appdir = browser`). Some
55
55
  * operators omit the quotes and the harness honours either form.
56
56
  *
57
57
  * Returns `undefined` when the key is absent or sits outside `[DEFAULT]`.
@@ -93,7 +93,7 @@ function stripQuotes(raw) {
93
93
  if ((raw.startsWith('"') && raw.endsWith('"')) || (raw.startsWith("'") && raw.endsWith("'"))) {
94
94
  return raw.slice(1, -1);
95
95
  }
96
- // Bareword: must not contain whitespace; otherwise we are looking at
96
+ // Bareword: must not contain whitespace. Otherwise we are looking at
97
97
  // commentary that the regex's optional comment tail did not strip.
98
98
  if (/\s/.test(raw))
99
99
  return undefined;
@@ -104,10 +104,10 @@ function stripQuotes(raw) {
104
104
  * returns the absolute path of the first sibling `xpcshell.toml` found.
105
105
  * Stops at `engineDir` (inclusive) and returns null on miss.
106
106
  *
107
- * Special-cases `startPath` itself when it already ends with `xpcshell.toml`
108
- * — operators sometimes pass a manifest path directly.
107
+ * Special-cases `startPath` itself when it already ends with
108
+ * `xpcshell.toml`, since operators sometimes pass a manifest path directly.
109
109
  *
110
- * When `startPath` is a DIRECTORY, the walk starts at the directory itself
110
+ * When `startPath` is a directory, the walk starts at the directory itself
111
111
  * (checking `<dir>/xpcshell.toml` first) rather than at its parent.
112
112
  * Starting at the parent misses a directory's own manifest, so
113
113
  * `fireforge test <dir>` classifies it non-xpcshell and dispatches to the
@@ -122,8 +122,8 @@ export async function findNearestXpcshellManifest(engineDir, startPath) {
122
122
  const engineAbs = resolve(engineDir);
123
123
  let current = absStart;
124
124
  // First iteration resolves the starting directory (the path itself for a
125
- // directory argument, its parent for a file); subsequent ones walk up.
126
- // Cap iterations defensively — a pathological symlink loop would
125
+ // directory argument, its parent for a file). Subsequent ones walk up.
126
+ // Cap iterations defensively: a pathological symlink loop would
127
127
  // otherwise spin until the call stack overflows.
128
128
  for (let i = 0; i < 64; i += 1) {
129
129
  const dir = i === 0 ? (startIsDirectory ? absStart : dirname(absStart)) : dirname(current);
@@ -138,10 +138,10 @@ export async function findNearestXpcshellManifest(engineDir, startPath) {
138
138
  }
139
139
  /**
140
140
  * Reads `<objDir>/mozinfo.json` for the active app name. Returns
141
- * `"firefox"` when mozinfo cannot be read or the field is missing — that
141
+ * `"firefox"` when mozinfo cannot be read or the field is missing. That
142
142
  * is the safe default because it matches stock Firefox behaviour and
143
143
  * means the resolver will not inject anything (the manifest's
144
- * `firefox-appdir` value WILL be honoured by the upstream harness when
144
+ * `firefox-appdir` value is honoured by the upstream harness when
145
145
  * appname is firefox).
146
146
  */
147
147
  export async function readMozinfoAppname(objDirPath) {
@@ -156,28 +156,28 @@ export async function readMozinfoAppname(objDirPath) {
156
156
  }
157
157
  catch {
158
158
  // Malformed mozinfo is a build-system problem out of scope for the
159
- // appdir resolver; treat as if appname were missing.
159
+ // appdir resolver. Treat as if appname were missing.
160
160
  }
161
161
  return 'firefox';
162
162
  }
163
163
  /**
164
164
  * Probes the obj-dir's `dist/` subtree for the absolute path the harness
165
165
  * would have computed if the manifest key had been honoured. Returns null
166
- * when no candidate exists — better to skip injection silently than to point
166
+ * when no candidate exists: better to skip injection silently than to point
167
167
  * the harness at a path that does not exist, which fails with a different
168
168
  * error than the original symptom and confuses triage.
169
169
  *
170
170
  * Probe order differs by host platform:
171
171
  *
172
- * - **macOS (`darwin`)**: prefer
173
- * `<objDir>/dist/<App>.app/Contents/Resources/<value>` FIRST, then fall
172
+ * - macOS (`darwin`): prefer
173
+ * `<objDir>/dist/<App>.app/Contents/Resources/<value>` first, then fall
174
174
  * back to `<objDir>/dist/bin/<value>`. On macOS `dist/bin` is symlinked to
175
- * `dist/<App>.app/Contents/MacOS/` (the *binaries* directory), so
176
- * `dist/bin/browser` resolves to `<App>.app/Contents/MacOS/browser/` —
177
- * NOT where `resource:///modules/` is rooted. Injecting that path looks
178
- * successful in the log but points at a directory with no modules tree, so
179
- * every `resource:///modules/…` import still throws.
180
- * - **non-macOS**: `dist/bin/<value>` first,
175
+ * `dist/<App>.app/Contents/MacOS/` (the binaries directory), so
176
+ * `dist/bin/browser` resolves to `<App>.app/Contents/MacOS/browser/`,
177
+ * which is not where `resource:///modules/` is rooted. Injecting that path
178
+ * looks successful in the log but points at a directory with no modules
179
+ * tree, so every `resource:///modules/…` import still throws.
180
+ * - non-macOS: `dist/bin/<value>` first,
181
181
  * `.app/Contents/Resources/<value>` as fallback.
182
182
  *
183
183
  * On both platforms the final `.app` fallback iterates every `*.app` entry
@@ -222,7 +222,7 @@ export async function resolveAbsoluteAppPath(objDirAbs, relativeAppdir) {
222
222
  /**
223
223
  * Top-level resolver. Walks every test path, reads the nearest
224
224
  * xpcshell.toml, and returns the single absolute path to inject (or a
225
- * structured "no injection" outcome). Never throws — every fs / parse
225
+ * structured "no injection" outcome). Never throws: every fs / parse
226
226
  * error is folded into a `none` outcome so the test command always falls
227
227
  * through to the diagnostic hint instead of dying inside a helper.
228
228
  */
@@ -231,7 +231,7 @@ export async function resolveXpcshellAppdirArg(engineDir, testPaths, objDirName)
231
231
  return { kind: 'none' };
232
232
  const objDirAbs = resolve(engineDir, objDirName);
233
233
  const appname = await readMozinfoAppname(objDirAbs);
234
- // When appname IS "firefox" the upstream harness reads `firefox-appdir`
234
+ // When appname is "firefox" the upstream harness reads `firefox-appdir`
235
235
  // natively. Injecting in that case would be a no-op at best and an
236
236
  // override at worst, so bail out before doing any IO per-path.
237
237
  if (appname === 'firefox')
@@ -247,11 +247,11 @@ export async function resolveXpcshellAppdirArg(engineDir, testPaths, objDirName)
247
247
  body = await readText(manifestPath);
248
248
  }
249
249
  catch {
250
- // An unreadable manifest cannot declare an appdir; skip it and keep
250
+ // An unreadable manifest cannot declare an appdir. Skip it and keep
251
251
  // walking the remaining candidates.
252
252
  continue;
253
253
  }
254
- // Operator already migrated — harness will read the appname-keyed
254
+ // Operator already migrated. The harness will read the appname-keyed
255
255
  // value directly. Nothing to do.
256
256
  if (parseAppdirFromToml(body, appnameKey) !== undefined)
257
257
  continue;
@@ -2,11 +2,11 @@ export declare const XPCSHELL_PROFILE_ENV_VAR = "XPCSHELL_TEST_PROFILE_DIR";
2
2
  /**
3
3
  * Runs `fn` with a fresh per-invocation xpcshell profile directory
4
4
  * injected into the environment, removing the directory afterwards
5
- * (best-effort — a failure to clean up warns and leaves the mkdtemp dir
6
- * for the OS tmp reaper; the harness may still hold files briefly).
5
+ * (best-effort: a failure to clean up warns and leaves the mkdtemp dir
6
+ * for the OS tmp reaper, and the harness may still hold files briefly).
7
7
  *
8
8
  * An operator-provided `XPCSHELL_TEST_PROFILE_DIR` (in `baseEnv` or the
9
9
  * process environment) is respected verbatim: no directory is minted and
10
- * NOTHING is deleted — we never remove a directory we did not create.
10
+ * nothing is deleted, because we never remove a directory we did not create.
11
11
  */
12
12
  export declare function withXpcshellProfileDir<T>(baseEnv: Record<string, string> | undefined, fn: (env: Record<string, string>) => Promise<T>): Promise<T>;
@@ -3,10 +3,10 @@
3
3
  * Per-invocation xpcshell profile directory.
4
4
  *
5
5
  * Firefox's xpcshell harness defaults `XPCSHELL_TEST_PROFILE_DIR` to a
6
- * FIXED path (`$TMPDIR/firefox/xpcshellprofile`), so two overlapping
7
- * harness invocations — concurrent `fireforge test` processes, or future
8
- * verification-tree shards — corrupt each other's profiles. FireForge
9
- * never set the variable; this helper mints a fresh `mkdtemp` directory
6
+ * fixed path (`$TMPDIR/firefox/xpcshellprofile`), so two overlapping
7
+ * harness invocations (concurrent `fireforge test` processes, or future
8
+ * verification-tree shards) corrupt each other's profiles. FireForge
9
+ * never set the variable. This helper mints a fresh `mkdtemp` directory
10
10
  * per harness invocation and exports it through the mach env channel.
11
11
  */
12
12
  import { mkdtemp, rm } from 'node:fs/promises';
@@ -18,12 +18,12 @@ export const XPCSHELL_PROFILE_ENV_VAR = 'XPCSHELL_TEST_PROFILE_DIR';
18
18
  /**
19
19
  * Runs `fn` with a fresh per-invocation xpcshell profile directory
20
20
  * injected into the environment, removing the directory afterwards
21
- * (best-effort — a failure to clean up warns and leaves the mkdtemp dir
22
- * for the OS tmp reaper; the harness may still hold files briefly).
21
+ * (best-effort: a failure to clean up warns and leaves the mkdtemp dir
22
+ * for the OS tmp reaper, and the harness may still hold files briefly).
23
23
  *
24
24
  * An operator-provided `XPCSHELL_TEST_PROFILE_DIR` (in `baseEnv` or the
25
25
  * process environment) is respected verbatim: no directory is minted and
26
- * NOTHING is deleted — we never remove a directory we did not create.
26
+ * nothing is deleted, because we never remove a directory we did not create.
27
27
  */
28
28
  export async function withXpcshellProfileDir(baseEnv, fn) {
29
29
  const operatorProvided = baseEnv?.[XPCSHELL_PROFILE_ENV_VAR] ?? process.env[XPCSHELL_PROFILE_ENV_VAR];
@@ -26,7 +26,7 @@ export declare abstract class FireForgeError extends Error {
26
26
  * Numbering is derived from the array rather than written into each string.
27
27
  * Several classes vary their advice by context (`FurnaceError` drops the
28
28
  * validate step, `ChecksumMismatchError` adds a Developer Edition note), and
29
- * hand-numbered branches had to renumber every later step by hand — one
29
+ * hand-numbered branches had to renumber every later step by hand, one
30
30
  * conditional away from printing "2." twice.
31
31
  *
32
32
  * @param steps - The remedy lines, in order, without their numbers
@@ -48,8 +48,8 @@ export declare class GeneralError extends FireForgeError {
48
48
  * kebab-case refusal class that the `FIREFORGE-VERDICT:` line reports as an
49
49
  * additive `note=` key. Without it every preflight refusal reached an
50
50
  * unattended reader as the single token `reason=preflight`, which covers
51
- * everything from a missing build to a peer's packaging record — so the one
52
- * line that survives a truncating pipe could not say WHICH gate fired.
51
+ * everything from a missing build to a peer's packaging record, so the one
52
+ * line that survives a truncating pipe could not say which gate fired.
53
53
  */
54
54
  export declare class PreflightRefusalError extends GeneralError {
55
55
  /** Stable refusal class, e.g. `stale-browser`. */
@@ -59,7 +59,7 @@ export declare class PreflightRefusalError extends GeneralError {
59
59
  note: string);
60
60
  }
61
61
  /**
62
- * Raised when one of FireForge's own internal invariants did not hold —
62
+ * Raised when one of FireForge's own internal invariants did not hold:
63
63
  * the failure of a runtime assertion from `src/utils/assert.ts`.
64
64
  *
65
65
  * Dedicated subclass (rather than raw GeneralError) because an invariant
@@ -68,12 +68,12 @@ export declare class PreflightRefusalError extends GeneralError {
68
68
  * fix. That difference is worth carrying all the way to the exit status
69
69
  * (see {@link ExitCode.INTERNAL_ERROR}) so a CI job can escalate it
70
70
  * instead of retrying it, and it is the one error class the CLI boundary
71
- * prints a stack trace for — the stack is the report.
71
+ * prints a stack trace for, since the stack is the report.
72
72
  *
73
73
  * Assertions exist so that a violated invariant stops the run at the
74
74
  * first inconsistency instead of continuing to write. In the mutating
75
75
  * paths that means the surrounding rollback journal restores the engine
76
- * before this reaches the operator; see `docs/lifecycle-invariants.md`.
76
+ * before this reaches the operator. See `docs/lifecycle-invariants.md`.
77
77
  */
78
78
  export declare class InternalInvariantError extends FireForgeError {
79
79
  readonly code: 11;
@@ -81,7 +81,7 @@ export declare class InternalInvariantError extends FireForgeError {
81
81
  }
82
82
  /**
83
83
  * Raised when a legacy regex/brace-depth fallback parser decides it
84
- * cannot safely perform its mutation — e.g. because a block it expected
84
+ * cannot safely perform its mutation, e.g. because a block it expected
85
85
  * to walk never closes, because the inserted result fails a round-trip
86
86
  * brace balance check, or because an expected pattern is missing.
87
87
  *
@@ -113,9 +113,10 @@ export declare class InvalidArgumentError extends FireForgeError {
113
113
  *
114
114
  * Every `exec*` helper in `src/utils/process.ts` rejects with this type
115
115
  * instead of Node's bare `AbortError: The operation was aborted`, which
116
- * carries no command name, no elapsed time, and no hint that a timeout —
117
- * not the command — was responsible. See {@link GitIndexingTimeoutError} in
118
- * errors/git.ts for the git-specific variant.
116
+ * carries no command name, no elapsed time, and no hint that a timeout
117
+ * (rather than the command) was responsible. See
118
+ * {@link GitIndexingTimeoutError} in errors/git.ts for the git-specific
119
+ * variant.
119
120
  */
120
121
  export declare class ExecTimeoutError extends FireForgeError {
121
122
  /** Executable that was spawned (argv[0]). */
@@ -142,12 +143,12 @@ export declare class ExecTimeoutError extends FireForgeError {
142
143
  /**
143
144
  * The last few lines the command printed before it was killed, so an
144
145
  * operator can see what it was doing (a `git add -A` stuck on one path,
145
- * a build step that hung) instead of a bare budget number. Prefers
146
- * stderr; falls back to stdout when stderr is silent.
146
+ * a build step that hung) instead of a bare budget number. It prefers
147
+ * stderr and falls back to stdout when stderr is silent.
147
148
  */
148
149
  private outputTailForUser;
149
150
  }
150
- /** Output captured before an exec timeout fired; see {@link ExecTimeoutError}. */
151
+ /** Output captured before an exec timeout fired. See {@link ExecTimeoutError}. */
151
152
  export interface ExecTimeoutOutput {
152
153
  stdout: string;
153
154
  stderr: string;
@@ -160,12 +161,12 @@ export interface ExecTimeoutOutput {
160
161
  * Dedicated subclass so the CLI boundary renders lock contention as the
161
162
  * one-line reason-first/remedy-second refusal it is. As a plain `Error` it
162
163
  * is treated by `withErrorHandling` as an internal failure and printed with
163
- * a five-frame stack — a correct refusal that looks like a crash.
164
+ * a five-frame stack: a correct refusal that looks like a crash.
164
165
  *
165
166
  * Exit code 15, not 1: the run never started. A script that retries on
166
167
  * failure wants to re-queue this one, not treat it as a failure of the work
167
168
  * it asked for. Every lock in FireForge shares the class and therefore the
168
- * code — the fact is the same whichever lock was contended.
169
+ * code, because the fact is the same whichever lock was contended.
169
170
  */
170
171
  export declare class LockContentionError extends FireForgeError {
171
172
  readonly code: 15;
@@ -177,19 +178,19 @@ export declare class LockContentionError extends FireForgeError {
177
178
  *
178
179
  * Dedicated subclass for its exit code alone: as a `GeneralError` this
179
180
  * refusal exited 1 beside real test failures' 5, and a summary line reading
180
- * `FAIL — exit 1` next to `FAIL — exit 5` invites treating them as the same
181
- * kind of fact. They are opposites — one suite failed, the other's result
182
- * was discarded — and only a distinct code makes "unknown, re-run"
181
+ * `FAIL, exit 1` next to `FAIL, exit 5` invites treating them as the same
182
+ * kind of fact. They are opposites (one suite failed, the other's result
183
+ * was discarded) and only a distinct code makes "unknown, re-run"
183
184
  * mechanically separable from "red".
184
185
  */
185
186
  export declare class InconclusiveVerdictError extends FireForgeError {
186
187
  readonly code: 14;
187
188
  }
188
189
  /**
189
- * Error thrown when the user INTERRUPTS an interactive prompt — Esc or
190
+ * Error thrown when the user interrupts an interactive prompt: Esc or
190
191
  * Ctrl+C, i.e. `isCancel(...)`.
191
192
  *
192
- * Not for a prompt the operator deliberately answered "no" to: 130 is
193
+ * Not for a prompt the operator answered "no" to: 130 is
193
194
  * 128+SIGINT, which claims an interrupt. A declined confirmation is a
194
195
  * successful run that chose not to proceed, and exits 0.
195
196
  */
@@ -208,7 +209,7 @@ export declare class ResolutionError extends FireForgeError {
208
209
  * without calling process.exit() from shared library code.
209
210
  *
210
211
  * The user-visible error message has already been logged by the time this
211
- * is thrown — the entrypoint only needs to read `.exitCode` and terminate.
212
+ * is thrown. The entrypoint only needs to read `.exitCode` and terminate.
212
213
  */
213
214
  export declare class CommandError extends Error {
214
215
  readonly exitCode: ExitCode;
@@ -18,7 +18,7 @@ export class FireForgeError extends Error {
18
18
  this.cause = cause;
19
19
  }
20
20
  // Trims the constructor frames off the stack. `engines` pins Node >= 22,
21
- // so the V8-only `captureStackTrace` is always present — the former
21
+ // so the V8-only `captureStackTrace` is always present. The former
22
22
  // `typeof === 'function'` guard was an unreachable branch that coverage
23
23
  // could never close.
24
24
  Error.captureStackTrace(this, this.constructor);
@@ -38,7 +38,7 @@ export class FireForgeError extends Error {
38
38
  * Numbering is derived from the array rather than written into each string.
39
39
  * Several classes vary their advice by context (`FurnaceError` drops the
40
40
  * validate step, `ChecksumMismatchError` adds a Developer Edition note), and
41
- * hand-numbered branches had to renumber every later step by hand — one
41
+ * hand-numbered branches had to renumber every later step by hand, one
42
42
  * conditional away from printing "2." twice.
43
43
  *
44
44
  * @param steps - The remedy lines, in order, without their numbers
@@ -62,8 +62,8 @@ export class GeneralError extends FireForgeError {
62
62
  * kebab-case refusal class that the `FIREFORGE-VERDICT:` line reports as an
63
63
  * additive `note=` key. Without it every preflight refusal reached an
64
64
  * unattended reader as the single token `reason=preflight`, which covers
65
- * everything from a missing build to a peer's packaging record — so the one
66
- * line that survives a truncating pipe could not say WHICH gate fired.
65
+ * everything from a missing build to a peer's packaging record, so the one
66
+ * line that survives a truncating pipe could not say which gate fired.
67
67
  */
68
68
  export class PreflightRefusalError extends GeneralError {
69
69
  note;
@@ -75,7 +75,7 @@ export class PreflightRefusalError extends GeneralError {
75
75
  }
76
76
  }
77
77
  /**
78
- * Raised when one of FireForge's own internal invariants did not hold —
78
+ * Raised when one of FireForge's own internal invariants did not hold:
79
79
  * the failure of a runtime assertion from `src/utils/assert.ts`.
80
80
  *
81
81
  * Dedicated subclass (rather than raw GeneralError) because an invariant
@@ -84,12 +84,12 @@ export class PreflightRefusalError extends GeneralError {
84
84
  * fix. That difference is worth carrying all the way to the exit status
85
85
  * (see {@link ExitCode.INTERNAL_ERROR}) so a CI job can escalate it
86
86
  * instead of retrying it, and it is the one error class the CLI boundary
87
- * prints a stack trace for — the stack is the report.
87
+ * prints a stack trace for, since the stack is the report.
88
88
  *
89
89
  * Assertions exist so that a violated invariant stops the run at the
90
90
  * first inconsistency instead of continuing to write. In the mutating
91
91
  * paths that means the surrounding rollback journal restores the engine
92
- * before this reaches the operator; see `docs/lifecycle-invariants.md`.
92
+ * before this reaches the operator. See `docs/lifecycle-invariants.md`.
93
93
  */
94
94
  export class InternalInvariantError extends FireForgeError {
95
95
  code = ExitCode.INTERNAL_ERROR;
@@ -107,7 +107,7 @@ export class InternalInvariantError extends FireForgeError {
107
107
  }
108
108
  /**
109
109
  * Raised when a legacy regex/brace-depth fallback parser decides it
110
- * cannot safely perform its mutation — e.g. because a block it expected
110
+ * cannot safely perform its mutation, e.g. because a block it expected
111
111
  * to walk never closes, because the inserted result fails a round-trip
112
112
  * brace balance check, or because an expected pattern is missing.
113
113
  *
@@ -150,9 +150,10 @@ export class InvalidArgumentError extends FireForgeError {
150
150
  *
151
151
  * Every `exec*` helper in `src/utils/process.ts` rejects with this type
152
152
  * instead of Node's bare `AbortError: The operation was aborted`, which
153
- * carries no command name, no elapsed time, and no hint that a timeout —
154
- * not the command — was responsible. See {@link GitIndexingTimeoutError} in
155
- * errors/git.ts for the git-specific variant.
153
+ * carries no command name, no elapsed time, and no hint that a timeout
154
+ * (rather than the command) was responsible. See
155
+ * {@link GitIndexingTimeoutError} in errors/git.ts for the git-specific
156
+ * variant.
156
157
  */
157
158
  export class ExecTimeoutError extends FireForgeError {
158
159
  command;
@@ -189,8 +190,8 @@ export class ExecTimeoutError extends FireForgeError {
189
190
  /**
190
191
  * The last few lines the command printed before it was killed, so an
191
192
  * operator can see what it was doing (a `git add -A` stuck on one path,
192
- * a build step that hung) instead of a bare budget number. Prefers
193
- * stderr; falls back to stdout when stderr is silent.
193
+ * a build step that hung) instead of a bare budget number. It prefers
194
+ * stderr and falls back to stdout when stderr is silent.
194
195
  */
195
196
  outputTailForUser() {
196
197
  const source = this.stderr.trim().length > 0 ? this.stderr : this.stdout;
@@ -216,12 +217,12 @@ const EXEC_TIMEOUT_TAIL_LINES = 20;
216
217
  * Dedicated subclass so the CLI boundary renders lock contention as the
217
218
  * one-line reason-first/remedy-second refusal it is. As a plain `Error` it
218
219
  * is treated by `withErrorHandling` as an internal failure and printed with
219
- * a five-frame stack — a correct refusal that looks like a crash.
220
+ * a five-frame stack: a correct refusal that looks like a crash.
220
221
  *
221
222
  * Exit code 15, not 1: the run never started. A script that retries on
222
223
  * failure wants to re-queue this one, not treat it as a failure of the work
223
224
  * it asked for. Every lock in FireForge shares the class and therefore the
224
- * code — the fact is the same whichever lock was contended.
225
+ * code, because the fact is the same whichever lock was contended.
225
226
  */
226
227
  export class LockContentionError extends FireForgeError {
227
228
  code = ExitCode.LOCK_TIMEOUT;
@@ -233,19 +234,19 @@ export class LockContentionError extends FireForgeError {
233
234
  *
234
235
  * Dedicated subclass for its exit code alone: as a `GeneralError` this
235
236
  * refusal exited 1 beside real test failures' 5, and a summary line reading
236
- * `FAIL — exit 1` next to `FAIL — exit 5` invites treating them as the same
237
- * kind of fact. They are opposites — one suite failed, the other's result
238
- * was discarded — and only a distinct code makes "unknown, re-run"
237
+ * `FAIL, exit 1` next to `FAIL, exit 5` invites treating them as the same
238
+ * kind of fact. They are opposites (one suite failed, the other's result
239
+ * was discarded) and only a distinct code makes "unknown, re-run"
239
240
  * mechanically separable from "red".
240
241
  */
241
242
  export class InconclusiveVerdictError extends FireForgeError {
242
243
  code = ExitCode.INCONCLUSIVE;
243
244
  }
244
245
  /**
245
- * Error thrown when the user INTERRUPTS an interactive prompt — Esc or
246
+ * Error thrown when the user interrupts an interactive prompt: Esc or
246
247
  * Ctrl+C, i.e. `isCancel(...)`.
247
248
  *
248
- * Not for a prompt the operator deliberately answered "no" to: 130 is
249
+ * Not for a prompt the operator answered "no" to: 130 is
249
250
  * 128+SIGINT, which claims an interrupt. A declined confirmation is a
250
251
  * successful run that chose not to proceed, and exits 0.
251
252
  */
@@ -266,7 +267,7 @@ export class ResolutionError extends FireForgeError {
266
267
  * without calling process.exit() from shared library code.
267
268
  *
268
269
  * The user-visible error message has already been logged by the time this
269
- * is thrown — the entrypoint only needs to read `.exitCode` and terminate.
270
+ * is thrown. The entrypoint only needs to read `.exitCode` and terminate.
270
271
  */
271
272
  export class CommandError extends Error {
272
273
  exitCode;
@@ -10,19 +10,19 @@ export declare class BuildError extends FireForgeError {
10
10
  get userMessage(): string;
11
11
  }
12
12
  /**
13
- * A test SUITE went red — assertions failed, or sharded runs did not all
14
- * pass. Distinct from its {@link BuildError} parent only in what it TELLS
15
- * the operator, deliberately not in its exit code: `docs/exit-codes.md`
13
+ * A test suite went red: assertions failed, or sharded runs did not all
14
+ * pass. Distinct from its {@link BuildError} parent only in what it tells
15
+ * the operator, and not in its exit code: `docs/exit-codes.md`
16
16
  * documents 5 as "a suite that FAILED", and consumers key CI on it.
17
17
  *
18
- * The parent's remedies are all build remedies — "check the build output",
19
- * "fireforge bootstrap", "delete obj-* directories" — and none of them apply
18
+ * The parent's remedies are all build remedies ("check the build output",
19
+ * "fireforge bootstrap", "delete obj-* directories") and none of them apply
20
20
  * to a failing assertion. Worse, the first points at the wrong half of the
21
21
  * log, which is exactly the half a `tail` keeps. Ground truth for a test red
22
22
  * is the harness's own output, so the remedies here name the failing tests,
23
23
  * the `FIREFORGE-VERDICT:` line, and the run log that survives a pipe.
24
24
  *
25
- * Note that `machineErrorCode` derives the `--json` error code from the class
25
+ * `machineErrorCode` derives the `--json` error code from the class
26
26
  * name, so this reports as `test-failure` rather than `build`.
27
27
  */
28
28
  export declare class TestFailureError extends BuildError {
@@ -22,19 +22,19 @@ export class BuildError extends FireForgeError {
22
22
  }
23
23
  }
24
24
  /**
25
- * A test SUITE went red — assertions failed, or sharded runs did not all
26
- * pass. Distinct from its {@link BuildError} parent only in what it TELLS
27
- * the operator, deliberately not in its exit code: `docs/exit-codes.md`
25
+ * A test suite went red: assertions failed, or sharded runs did not all
26
+ * pass. Distinct from its {@link BuildError} parent only in what it tells
27
+ * the operator, and not in its exit code: `docs/exit-codes.md`
28
28
  * documents 5 as "a suite that FAILED", and consumers key CI on it.
29
29
  *
30
- * The parent's remedies are all build remedies — "check the build output",
31
- * "fireforge bootstrap", "delete obj-* directories" — and none of them apply
30
+ * The parent's remedies are all build remedies ("check the build output",
31
+ * "fireforge bootstrap", "delete obj-* directories") and none of them apply
32
32
  * to a failing assertion. Worse, the first points at the wrong half of the
33
33
  * log, which is exactly the half a `tail` keeps. Ground truth for a test red
34
34
  * is the harness's own output, so the remedies here name the failing tests,
35
35
  * the `FIREFORGE-VERDICT:` line, and the run log that survives a pipe.
36
36
  *
37
- * Note that `machineErrorCode` derives the `--json` error code from the class
37
+ * `machineErrorCode` derives the `--json` error code from the class
38
38
  * name, so this reports as `test-failure` rather than `build`.
39
39
  */
40
40
  export class TestFailureError extends BuildError {