@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
@@ -11,21 +11,21 @@ export interface ExecResult {
11
11
  exitCode: number;
12
12
  /**
13
13
  * True when `stdout` was cut off at the 50 MB collector cap. Optional so
14
- * existing mocks stay valid; absent means "not truncated". Callers that
14
+ * existing mocks stay valid. Absent means "not truncated". Callers that
15
15
  * feed the output into safety decisions (e.g. archive-listing scans) must
16
- * treat `true` as a hard failure — a truncated listing looks exactly like
17
- * a complete one otherwise.
16
+ * treat `true` as a hard failure, since a truncated listing otherwise
17
+ * looks exactly like a complete one.
18
18
  */
19
19
  stdoutTruncated?: boolean;
20
20
  /** True when `stderr` was cut off at the 50 MB collector cap. See {@link ExecResult.stdoutTruncated}. */
21
21
  stderrTruncated?: boolean;
22
22
  }
23
23
  /**
24
- * Options for plain `exec()` — the pipe-capturing, non-grouped, non-mirrored
24
+ * Options for plain `exec()`, the pipe-capturing, non-grouped, non-mirrored
25
25
  * path. The other wrappers extend this with the fields they actually read:
26
26
  * `processGroup` lives in {@link ProcessGroupOptions}, `mirror` in
27
27
  * {@link MirrorOptions}. Neither belongs here because `exec()` reads
28
- * neither — a field the type accepts but the function ignores is a trap
28
+ * neither, and a field the type accepts but the function ignores is a trap
29
29
  * (the caller believes it got a process group, and never did).
30
30
  */
31
31
  export interface ExecOptions {
@@ -34,13 +34,13 @@ export interface ExecOptions {
34
34
  /** Environment variables */
35
35
  env?: Record<string, string>;
36
36
  /**
37
- * Environment variables to REMOVE from the child's inherited environment,
37
+ * Environment variables to remove from the child's inherited environment,
38
38
  * applied after {@link ExecOptions.env} is merged over `process.env`.
39
39
  *
40
40
  * Needed because `env` can only add or overwrite, and some variables are
41
- * read for their PRESENCE — mozbuild's `is_running_under_coding_agent()`
41
+ * read only for their presence: mozbuild's `is_running_under_coding_agent()`
42
42
  * keys on `CLAUDECODE`, so setting it empty would not unset it. An
43
- * explicit delete says what it means; relying on Node dropping
43
+ * explicit delete says what it means. Relying on Node dropping
44
44
  * `undefined`-valued env entries would be a semantics gamble at a layer
45
45
  * that must not have any.
46
46
  */
@@ -59,7 +59,7 @@ export interface MirrorOptions {
59
59
  * path, or an operator-supplied `--capture-console` file on the smoke
60
60
  * path. Lets a caller tee the live output somewhere else (a run log)
61
61
  * without a second per-chunk hook. Writes happen inline with capture and
62
- * the stream is NOT closed here — the caller owns its lifecycle.
62
+ * the stream is not closed here. The caller owns its lifecycle.
63
63
  */
64
64
  mirror?: {
65
65
  stdout?: NodeJS.WritableStream;
@@ -73,15 +73,15 @@ export interface MirrorOptions {
73
73
  export interface ProcessGroupOptions {
74
74
  /**
75
75
  * POSIX: spawn the child as a process-group leader and route every kill
76
- * (parent-signal forwarding, abort, escalation) to the whole GROUP, then
77
- * sweep the group for survivors after close — so a harness that dies at
76
+ * (parent-signal forwarding, abort, escalation) to the whole group, then
77
+ * sweep the group for survivors after close, so a harness that dies at
78
78
  * startup cannot strand spinning `multiprocessing` workers, which reparent
79
79
  * to launchd and busy-spin at 100% CPU indefinitely. Win32: tree-kill via
80
80
  * `taskkill /T /F` on abort/signals only, no post-run sweep
81
- * (best-effort). Default false — non-mach consumers are unaffected.
81
+ * (best-effort). Default false, so non-mach consumers are unaffected.
82
82
  *
83
- * NOTE for callers: a detached group leader does NOT receive terminal
84
- * Ctrl+C; the exec layer installs its own group-aware signal forwarder
83
+ * NOTE for callers: a detached group leader does not receive terminal
84
+ * Ctrl+C. The exec layer installs its own group-aware signal forwarder
85
85
  * whenever this option is set.
86
86
  */
87
87
  processGroup?: boolean;
@@ -121,7 +121,7 @@ export declare function execStream(command: string, args: string[], options?: St
121
121
  * Exported for the one legitimate spawn outside this module:
122
122
  * `core/marionette-preflight.ts` keeps its own `spawn` because it needs the
123
123
  * live `ChildProcess` mid-run, returns while the child is still running, and
124
- * aborts on a TCP byte rather than a deadline — none of which any wrapper
124
+ * aborts on a TCP byte rather than a deadline, none of which any wrapper
125
125
  * here can express. It still needs the shutdown contract, and a second
126
126
  * hand-rolled copy is what lets a Ctrl+C orphan the whole mach → Firefox
127
127
  * tree.
@@ -130,7 +130,7 @@ export declare function execStream(command: string, args: string[], options?: St
130
130
  * Registers a child whose shutdown {@link waitForActiveChildShutdown} must
131
131
  * wait for, and returns the handle that deregisters it.
132
132
  *
133
- * @returns `settle()` — call from both the child's `close` and `error`
133
+ * @returns `settle()`. Call from both the child's `close` and `error`
134
134
  * handlers so a dead child never holds the shutdown wait open
135
135
  */
136
136
  export declare function trackChildClosure(): {
@@ -157,7 +157,7 @@ export interface InheritCaptureOptions extends InheritOptions, MirrorOptions {
157
157
  * Graceful shutdown: when the FireForge process receives SIGINT/SIGTERM, the
158
158
  * signal is forwarded to the child as SIGTERM and a short grace timer (default
159
159
  * 1500ms) runs before escalating to SIGKILL. A second matching signal during
160
- * the grace period triggers an immediate SIGKILL — matching the usual
160
+ * the grace period triggers an immediate SIGKILL, matching the usual
161
161
  * "hit Ctrl-C again to force-quit" UX. Without this, Firefox's AsyncShutdown
162
162
  * / profileBeforeChange blockers (which flush in-memory state to disk) can be
163
163
  * racing the OS child-exit path, losing the last few seconds of edits.
@@ -170,9 +170,9 @@ export interface InheritCaptureOptions extends InheritOptions, MirrorOptions {
170
170
  export declare function execInherit(command: string, args: string[], options?: InheritOptions): Promise<number>;
171
171
  /**
172
172
  * Wires parent-process SIGINT/SIGTERM to a child: first signal → child.kill
173
- * (SIGTERM) + grace timer; second matching signal → immediate SIGKILL; grace
174
- * timer expiry → SIGKILL. Returns a `dispose()` that clears the listeners and
175
- * any outstanding timer. Callers must invoke `dispose()` from both the child's
173
+ * (SIGTERM) + grace timer. A second matching signal → immediate SIGKILL.
174
+ * Grace timer expiry → SIGKILL. Returns a `dispose()` that clears the
175
+ * listeners and any outstanding timer. Callers must invoke `dispose()` from both the child's
176
176
  * `close` and `error` handlers so the process does not accumulate signal
177
177
  * listeners across repeated spawns.
178
178
  */
@@ -193,28 +193,28 @@ export type SmokeLineCallback = (line: string) => void;
193
193
  /**
194
194
  * Options for {@link execSmokeRun}.
195
195
  *
196
- * Deliberately omits `ExecOptions.timeout`: the smoke run's only deadline is
196
+ * Omits `ExecOptions.timeout`: the smoke run's only deadline is
197
197
  * {@link SmokeRunOptions.smokeTimeoutMs}, which signals the whole process
198
- * group. Inheriting `timeout` is a leaky trap — accepted by the type but
199
- * silently ignored, so a caller setting it gets no deadline at all.
198
+ * group. Inheriting `timeout` would be a leaky trap, accepted by the type
199
+ * but silently ignored, so a caller setting it gets no deadline at all.
200
200
  *
201
201
  * {@link ProcessGroupOptions} is not mixed in for the same reason: a smoke
202
- * run is ALWAYS detached on POSIX (`usesProcessGroup` is derived from
202
+ * run is always detached on POSIX (`usesProcessGroup` is derived from
203
203
  * `process.platform` alone), so the field would be accepted and never read.
204
204
  */
205
205
  interface SmokeRunOptions extends Omit<ExecOptions, 'timeout'>, MirrorOptions {
206
206
  /**
207
207
  * Hard deadline in milliseconds. When it elapses the child process
208
208
  * group is sent SIGTERM and, after `killGraceMs`, SIGKILL. The returned
209
- * {@link SmokeRunResult.timedOut} is `true` when the deadline fires —
210
- * callers treat that as a clean smoke window (no child-driven error),
211
- * not a failure.
209
+ * {@link SmokeRunResult.timedOut} is `true` when the deadline fires.
210
+ * Callers treat that as a clean smoke window (no child-driven error)
211
+ * rather than a failure.
212
212
  */
213
213
  smokeTimeoutMs: number;
214
214
  /**
215
215
  * Grace period between SIGTERM and SIGKILL when the deadline fires.
216
216
  * Defaults to 10000 ms because Firefox's AsyncShutdown and
217
- * profileBeforeChange blockers can take ~5–10 s to flush in-memory
217
+ * profileBeforeChange blockers can take roughly 5 to 10 s to flush in-memory
218
218
  * state. A shorter grace risks corrupting the dev profile mid-quit.
219
219
  */
220
220
  killGraceMs?: number;
@@ -228,9 +228,9 @@ export interface SmokeRunResult extends ExecResult {
228
228
  /**
229
229
  * `true` when the smoke deadline fired and we SIGTERMed the child
230
230
  * ourselves. Callers that want to distinguish "smoke window elapsed
231
- * cleanly" from "child exited on its own" check this flag — the
231
+ * cleanly" from "child exited on its own" check this flag: the
232
232
  * `exitCode` in the timedOut path is almost always 143 (SIGTERM) and
233
- * should NOT be treated as a child-driven failure.
233
+ * should not be treated as a child-driven failure.
234
234
  */
235
235
  timedOut: boolean;
236
236
  }
@@ -249,9 +249,10 @@ export interface SmokeRunResult extends ExecResult {
249
249
  *
250
250
  * Windows fallback: `detached: true` does not create an equivalent group
251
251
  * there, so we kill the descendant tree with `taskkill /pid <pid> /T /F`
252
- * instead. taskkill has no graceful-signal equivalent — both the deadline
253
- * and the grace re-invocation are forced kills, so Windows children get
254
- * no shutdown window (best-effort; Windows is untested, see README).
252
+ * instead. taskkill has no graceful-signal equivalent, so both the deadline
253
+ * and the grace re-invocation are forced kills and Windows children get
254
+ * no shutdown window. This is best-effort and Windows is untested, see
255
+ * README.
255
256
  * `child.kill()` is still sent as a direct-child fallback in case
256
257
  * taskkill itself is unavailable.
257
258
  */
@@ -6,7 +6,7 @@ import { ExecTimeoutError } from '../errors/base.js';
6
6
  import { buildChildEnv } from './child-env.js';
7
7
  import { dispatchCompleteLines } from './line-dispatch.js';
8
8
  import { killProcessTree, sweepProcessGroup } from './process-group.js';
9
- // 50 MB cap per stream to prevent OOM — large toolchain builds (e.g. Firefox, Chromium)
9
+ // 50 MB cap per stream to prevent OOM. Large toolchain builds (e.g. Firefox, Chromium)
10
10
  // can easily blow past this, so we truncate rather than let the buffer grow unbounded.
11
11
  // Callers for whom truncation is unacceptable (e.g. the archive-safety preflight
12
12
  // scanning a full `tar -tvf` listing) must check `wasTruncated` and fail hard.
@@ -67,7 +67,7 @@ function toExecRejection(error, command, args, timeout, output) {
67
67
  /**
68
68
  * Snapshot of what two collectors hold, for carrying onto a timeout
69
69
  * rejection. Without it a `git add -A` killed at its budget rejected with
70
- * nothing but the budget — the partial stdout/stderr that said what git was
70
+ * nothing but the budget: the partial stdout/stderr that said what git was
71
71
  * doing when it died was already collected and simply dropped.
72
72
  */
73
73
  function collectedOutput(out, err) {
@@ -131,9 +131,9 @@ export async function exec(command, args, options = {}) {
131
131
  * sequence, and the copies drifted: `execStream` was the one that omitted
132
132
  * {@link trackChildClosure}, so the bin signal handler did not wait for
133
133
  * `runMachStream`'s children on Ctrl+C and the forwarder's SIGTERM → grace →
134
- * SIGKILL escalation could not finish before the parent exited — the exact
135
- * failure the tracking set was introduced to fix, left unwired in one copy.
136
- * Keeping the sequence in one place is what stops that recurring.
134
+ * SIGKILL escalation could not finish before the parent exited. That was the
135
+ * exact failure the tracking set was introduced to fix, left unwired in one
136
+ * copy. Keeping the sequence in one place is what stops that recurring.
137
137
  *
138
138
  * `exec` deliberately stays outside: it neither forwards signals nor tracks
139
139
  * closure, because it is for short-lived helpers that no one Ctrl+Cs through.
@@ -155,7 +155,7 @@ async function spawnTracked(spec) {
155
155
  });
156
156
  const groupPid = usesProcessGroup ? child.pid : undefined;
157
157
  spec.attach?.(child);
158
- // Group-aware kills route to the whole tree; a non-group child is killed
158
+ // Group-aware kills route to the whole tree. A non-group child is killed
159
159
  // directly by the forwarder's own `child.kill`.
160
160
  const killTarget = options.processGroup === true
161
161
  ? (signal) => {
@@ -207,7 +207,7 @@ export async function execStream(command, args, options = {}) {
207
207
  graceMs: 1500,
208
208
  // A detached group leader no longer receives the terminal's Ctrl+C, so
209
209
  // the forwarder is mandatory (not just graceful-UX) when processGroup
210
- // is set — but a plain streamed child does not get one.
210
+ // is set. A plain streamed child does not get one.
211
211
  forwardWithoutProcessGroup: false,
212
212
  spawnChild: (base) => spawn(command, args, { ...base, stdio: ['ignore', 'pipe', 'pipe'] }),
213
213
  attach: (child) => {
@@ -243,7 +243,7 @@ const activeChildClosures = new Set();
243
243
  * Exported for the one legitimate spawn outside this module:
244
244
  * `core/marionette-preflight.ts` keeps its own `spawn` because it needs the
245
245
  * live `ChildProcess` mid-run, returns while the child is still running, and
246
- * aborts on a TCP byte rather than a deadline — none of which any wrapper
246
+ * aborts on a TCP byte rather than a deadline, none of which any wrapper
247
247
  * here can express. It still needs the shutdown contract, and a second
248
248
  * hand-rolled copy is what lets a Ctrl+C orphan the whole mach → Firefox
249
249
  * tree.
@@ -252,7 +252,7 @@ const activeChildClosures = new Set();
252
252
  * Registers a child whose shutdown {@link waitForActiveChildShutdown} must
253
253
  * wait for, and returns the handle that deregisters it.
254
254
  *
255
- * @returns `settle()` — call from both the child's `close` and `error`
255
+ * @returns `settle()`. Call from both the child's `close` and `error`
256
256
  * handlers so a dead child never holds the shutdown wait open
257
257
  */
258
258
  export function trackChildClosure() {
@@ -291,7 +291,7 @@ export async function waitForActiveChildShutdown(timeoutMs) {
291
291
  * Graceful shutdown: when the FireForge process receives SIGINT/SIGTERM, the
292
292
  * signal is forwarded to the child as SIGTERM and a short grace timer (default
293
293
  * 1500ms) runs before escalating to SIGKILL. A second matching signal during
294
- * the grace period triggers an immediate SIGKILL — matching the usual
294
+ * the grace period triggers an immediate SIGKILL, matching the usual
295
295
  * "hit Ctrl-C again to force-quit" UX. Without this, Firefox's AsyncShutdown
296
296
  * / profileBeforeChange blockers (which flush in-memory state to disk) can be
297
297
  * racing the OS child-exit path, losing the last few seconds of edits.
@@ -314,9 +314,9 @@ export async function execInherit(command, args, options = {}) {
314
314
  }
315
315
  /**
316
316
  * Wires parent-process SIGINT/SIGTERM to a child: first signal → child.kill
317
- * (SIGTERM) + grace timer; second matching signal → immediate SIGKILL; grace
318
- * timer expiry → SIGKILL. Returns a `dispose()` that clears the listeners and
319
- * any outstanding timer. Callers must invoke `dispose()` from both the child's
317
+ * (SIGTERM) + grace timer. A second matching signal → immediate SIGKILL.
318
+ * Grace timer expiry → SIGKILL. Returns a `dispose()` that clears the
319
+ * listeners and any outstanding timer. Callers must invoke `dispose()` from both the child's
320
320
  * `close` and `error` handlers so the process does not accumulate signal
321
321
  * listeners across repeated spawns.
322
322
  */
@@ -337,7 +337,7 @@ export function installGracefulShutdownForwarder(child, graceMs, killTarget) {
337
337
  sendKill('SIGKILL');
338
338
  }
339
339
  catch {
340
- // Child is already gone — nothing to do.
340
+ // Child is already gone, nothing to do.
341
341
  }
342
342
  };
343
343
  const handleSignal = (signal) => {
@@ -422,9 +422,10 @@ export async function execInheritCapture(command, args, options = {}) {
422
422
  *
423
423
  * Windows fallback: `detached: true` does not create an equivalent group
424
424
  * there, so we kill the descendant tree with `taskkill /pid <pid> /T /F`
425
- * instead. taskkill has no graceful-signal equivalent — both the deadline
426
- * and the grace re-invocation are forced kills, so Windows children get
427
- * no shutdown window (best-effort; Windows is untested, see README).
425
+ * instead. taskkill has no graceful-signal equivalent, so both the deadline
426
+ * and the grace re-invocation are forced kills and Windows children get
427
+ * no shutdown window. This is best-effort and Windows is untested, see
428
+ * README.
428
429
  * `child.kill()` is still sent as a direct-child fallback in case
429
430
  * taskkill itself is unavailable.
430
431
  */
@@ -473,8 +474,8 @@ export async function execSmokeRun(command, args, options) {
473
474
  }, options.smokeTimeoutMs);
474
475
  deadlineTimer.unref();
475
476
  // Forward parent SIGINT/SIGTERM to the whole child process group. The
476
- // smoke child is a group leader (detached), so it does NOT receive the
477
- // terminal's Ctrl+C SIGINT — without this forwarder, the parent exits
477
+ // smoke child is a group leader (detached), so it does not receive the
478
+ // terminal's Ctrl+C SIGINT. Without this forwarder, the parent exits
478
479
  // and the entire mach → firefox tree is orphaned. Second signal (or
479
480
  // grace expiry) escalates to a group SIGKILL.
480
481
  const forwardedSignals = new Set();
@@ -3,9 +3,9 @@
3
3
  *
4
4
  * Two different columns share one grammar, which is why this lives apart
5
5
  * from either consumer: `time=` (accumulated CPU) and `etime=` (elapsed
6
- * wall clock). Reading them with one parser is deliberate — a second
7
- * hand-rolled copy is how the two would drift, and the darwin dialect is
8
- * the half that is easy to get wrong.
6
+ * wall clock). One parser handles both: a second hand-rolled copy is how
7
+ * the two would drift, and the darwin dialect is the half that is easy to
8
+ * get wrong.
9
9
  *
10
10
  * Dialects:
11
11
  * - linux `[dd-]hh:mm:ss` (e.g. `26-03:14:12`, `03:14:12`)
@@ -13,7 +13,7 @@
13
13
  * wrapping (e.g. `38412:07.55`)
14
14
  *
15
15
  * Returns `NaN` for anything else, so callers must treat an unrecognized
16
- * shape as "unknown" rather than as zero — a browser reported as 0 seconds
16
+ * shape as "unknown" rather than as zero. A browser reported as 0 seconds
17
17
  * old would be exactly the wrong attribution.
18
18
  */
19
19
  /**
@@ -4,9 +4,9 @@
4
4
  *
5
5
  * Two different columns share one grammar, which is why this lives apart
6
6
  * from either consumer: `time=` (accumulated CPU) and `etime=` (elapsed
7
- * wall clock). Reading them with one parser is deliberate — a second
8
- * hand-rolled copy is how the two would drift, and the darwin dialect is
9
- * the half that is easy to get wrong.
7
+ * wall clock). One parser handles both: a second hand-rolled copy is how
8
+ * the two would drift, and the darwin dialect is the half that is easy to
9
+ * get wrong.
10
10
  *
11
11
  * Dialects:
12
12
  * - linux `[dd-]hh:mm:ss` (e.g. `26-03:14:12`, `03:14:12`)
@@ -14,7 +14,7 @@
14
14
  * wrapping (e.g. `38412:07.55`)
15
15
  *
16
16
  * Returns `NaN` for anything else, so callers must treat an unrecognized
17
- * shape as "unknown" rather than as zero — a browser reported as 0 seconds
17
+ * shape as "unknown" rather than as zero. A browser reported as 0 seconds
18
18
  * old would be exactly the wrong attribution.
19
19
  */
20
20
  /**
@@ -34,14 +34,14 @@ export function parsePsDuration(value) {
34
34
  }
35
35
  const parts = rest.split(':');
36
36
  if (parts.length === 3) {
37
- // hh:mm:ss (linux; seconds may not carry fractions but tolerate them)
37
+ // hh:mm:ss on linux. Seconds may not carry fractions but tolerate them.
38
38
  const [h, m, s] = parts.map(Number);
39
39
  if ([h, m, s].some((n) => Number.isNaN(n)))
40
40
  return NaN;
41
41
  return days * 86400 + (h ?? 0) * 3600 + (m ?? 0) * 60 + (s ?? 0);
42
42
  }
43
43
  if (parts.length === 2) {
44
- // mm:ss.cc (darwin — the minutes field accumulates without wrapping)
44
+ // mm:ss.cc on darwin. The minutes field accumulates without wrapping.
45
45
  const [m, s] = parts.map(Number);
46
46
  if ([m, s].some((n) => Number.isNaN(n)))
47
47
  return NaN;
@@ -9,16 +9,16 @@ export declare function hasRawCssColors(content: string): boolean;
9
9
  /**
10
10
  * Strips JS single-line and multi-line comments from source code, replacing
11
11
  * comment bytes with spaces (newlines inside block comments are kept) so
12
- * both character offsets AND line numbers are preserved. String literals are
12
+ * both character offsets and line numbers are preserved. String literals are
13
13
  * preserved intact.
14
14
  *
15
- * Uses acorn's tokenizer, which understands regex literals — a pure-regex
15
+ * Uses acorn's tokenizer, which understands regex literals. A pure-regex
16
16
  * implementation does not model them, so two adjacent slashes inside a regex
17
17
  * (the tail of `/https?:\/\//`) read as a `//` line comment and the rest of
18
18
  * the line is blanked, corrupting whatever lint pass consumes the stripped
19
19
  * text. Firefox chrome sources contain preprocessor directives (`#ifdef`)
20
- * and other constructs acorn cannot tokenize; those fall back to the legacy
21
- * regex strip, which handles strings but NOT regex literals.
20
+ * and other constructs acorn cannot tokenize. Those fall back to the legacy
21
+ * regex strip, which handles strings but not regex literals.
22
22
  */
23
23
  export declare function stripJsComments(source: string): string;
24
24
  /**
@@ -25,16 +25,16 @@ export function hasRawCssColors(content) {
25
25
  /**
26
26
  * Strips JS single-line and multi-line comments from source code, replacing
27
27
  * comment bytes with spaces (newlines inside block comments are kept) so
28
- * both character offsets AND line numbers are preserved. String literals are
28
+ * both character offsets and line numbers are preserved. String literals are
29
29
  * preserved intact.
30
30
  *
31
- * Uses acorn's tokenizer, which understands regex literals — a pure-regex
31
+ * Uses acorn's tokenizer, which understands regex literals. A pure-regex
32
32
  * implementation does not model them, so two adjacent slashes inside a regex
33
33
  * (the tail of `/https?:\/\//`) read as a `//` line comment and the rest of
34
34
  * the line is blanked, corrupting whatever lint pass consumes the stripped
35
35
  * text. Firefox chrome sources contain preprocessor directives (`#ifdef`)
36
- * and other constructs acorn cannot tokenize; those fall back to the legacy
37
- * regex strip, which handles strings but NOT regex literals.
36
+ * and other constructs acorn cannot tokenize. Those fall back to the legacy
37
+ * regex strip, which handles strings but not regex literals.
38
38
  */
39
39
  export function stripJsComments(source) {
40
40
  const comments = [];
@@ -47,7 +47,7 @@ export function stripJsComments(source) {
47
47
  comments.push({ start, end });
48
48
  },
49
49
  });
50
- // Drive the tokenizer to EOF; we only care about onComment callbacks.
50
+ // Drive the tokenizer to EOF. We only care about onComment callbacks.
51
51
  for (;;) {
52
52
  const token = t.getToken();
53
53
  if (token.type === acornTokTypes.eof)
@@ -71,8 +71,8 @@ export function stripJsComments(source) {
71
71
  }
72
72
  /**
73
73
  * Legacy pure-regex comment strip, used only when acorn cannot tokenize
74
- * the source (preprocessor directives, syntax errors). Strings survive;
75
- * regex literals are NOT modeled, so `//` inside a regex blanks the rest
74
+ * the source (preprocessor directives, syntax errors). Strings survive.
75
+ * Regex literals are not modeled, so `//` inside a regex blanks the rest
76
76
  * of the line.
77
77
  */
78
78
  function stripJsCommentsLegacy(source) {
@@ -4,18 +4,18 @@
4
4
  * Five modules had grown a private copy of this (`sleep`, `delay`,
5
5
  * `sweepDelay`) and four more sites inlined
6
6
  * `new Promise((resolve) => setTimeout(resolve, ms))`. The copies disagreed on
7
- * the one property that actually matters — whether the pending timer holds the
8
- * event loop open — and the disagreement was invisible at each call site. Both
9
- * behaviours now live here, and callers state which one they need.
7
+ * the one property that actually matters (whether the pending timer holds
8
+ * the event loop open) and the disagreement was invisible at each call site.
9
+ * Both behaviours now live here, and callers state which one they need.
10
10
  *
11
11
  * The default is a ref'd timer, because the dangerous mistake is the other
12
12
  * one: an unref'd delay awaited between a SIGTERM and its escalation lets Node
13
13
  * exit mid-grace and skip the escalation entirely.
14
14
  *
15
- * Deliberately built on the global `setTimeout` rather than
16
- * `node:timers/promises`: the suites that drive retry and grace-period logic
17
- * use vitest fake timers, which patch the global but not the promisified
18
- * module, so the tidier import would make every timing path untestable.
15
+ * Built on the global `setTimeout` rather than `node:timers/promises`: the
16
+ * suites that drive retry and grace-period logic use vitest fake timers,
17
+ * which patch the global but not the promisified module, so the tidier
18
+ * import would make every timing path untestable.
19
19
  * @param ms - Milliseconds to wait.
20
20
  * @param options - Pass `unref: true` when a pending delay must not keep the
21
21
  * process alive (background probes, best-effort retries during shutdown).
@@ -5,18 +5,18 @@
5
5
  * Five modules had grown a private copy of this (`sleep`, `delay`,
6
6
  * `sweepDelay`) and four more sites inlined
7
7
  * `new Promise((resolve) => setTimeout(resolve, ms))`. The copies disagreed on
8
- * the one property that actually matters — whether the pending timer holds the
9
- * event loop open — and the disagreement was invisible at each call site. Both
10
- * behaviours now live here, and callers state which one they need.
8
+ * the one property that actually matters (whether the pending timer holds
9
+ * the event loop open) and the disagreement was invisible at each call site.
10
+ * Both behaviours now live here, and callers state which one they need.
11
11
  *
12
12
  * The default is a ref'd timer, because the dangerous mistake is the other
13
13
  * one: an unref'd delay awaited between a SIGTERM and its escalation lets Node
14
14
  * exit mid-grace and skip the escalation entirely.
15
15
  *
16
- * Deliberately built on the global `setTimeout` rather than
17
- * `node:timers/promises`: the suites that drive retry and grace-period logic
18
- * use vitest fake timers, which patch the global but not the promisified
19
- * module, so the tidier import would make every timing path untestable.
16
+ * Built on the global `setTimeout` rather than `node:timers/promises`: the
17
+ * suites that drive retry and grace-period logic use vitest fake timers,
18
+ * which patch the global but not the promisified module, so the tidier
19
+ * import would make every timing path untestable.
20
20
  * @param ms - Milliseconds to wait.
21
21
  * @param options - Pass `unref: true` when a pending delay must not keep the
22
22
  * process alive (background probes, best-effort retries during shutdown).
@@ -1,16 +1,16 @@
1
1
  /**
2
2
  * Bounded stdio drain for delayed process exits.
3
3
  *
4
- * `process.exit()` discards whatever is still queued in an async writable —
5
- * and stdout IS async when it is a pipe, with a 64 KiB kernel buffer on
4
+ * `process.exit()` discards whatever is still queued in an async writable,
5
+ * and stdout is async when it is a pipe, with a 64 KiB kernel buffer on
6
6
  * macOS/Linux. The observed failure: `status --json --fail-on` writes a
7
7
  * 176 KB payload, the refusal makes `bin/fireforge.ts` exit non-zero, and a
8
8
  * piped consumer receives exactly 65 536 bytes. The bin entry point awaits
9
- * this helper before every delayed exit; the helper itself never calls
9
+ * this helper before every delayed exit. The helper itself never calls
10
10
  * `process.exit` (the process-boundary test keeps that a bin-only right).
11
11
  */
12
12
  /**
13
- * The structural slice of `Writable` the drain wait needs — accepted instead
13
+ * The structural slice of `Writable` the drain wait needs. Accepted instead
14
14
  * of `NodeJS.WriteStream` so unit tests can drive synthetic streams.
15
15
  */
16
16
  export interface DrainableStream {
@@ -21,8 +21,8 @@ export interface DrainableStream {
21
21
  off(event: 'drain' | 'error' | 'close', listener: () => void): unknown;
22
22
  }
23
23
  /**
24
- * Waits (bounded by `timeoutMs`) for every given stream — stdout and stderr
25
- * by default — to drain. Resolution is unconditional; the caller exits
26
- * either way, the bound only decides how much queued output survives.
24
+ * Waits (bounded by `timeoutMs`) for every given stream (stdout and stderr
25
+ * by default) to drain. Resolution is unconditional. The caller exits
26
+ * either way, and the bound only decides how much queued output survives.
27
27
  */
28
28
  export declare function waitForStdioDrain(timeoutMs: number, streams?: readonly DrainableStream[]): Promise<void>;
@@ -2,12 +2,12 @@
2
2
  /**
3
3
  * Bounded stdio drain for delayed process exits.
4
4
  *
5
- * `process.exit()` discards whatever is still queued in an async writable —
6
- * and stdout IS async when it is a pipe, with a 64 KiB kernel buffer on
5
+ * `process.exit()` discards whatever is still queued in an async writable,
6
+ * and stdout is async when it is a pipe, with a 64 KiB kernel buffer on
7
7
  * macOS/Linux. The observed failure: `status --json --fail-on` writes a
8
8
  * 176 KB payload, the refusal makes `bin/fireforge.ts` exit non-zero, and a
9
9
  * piped consumer receives exactly 65 536 bytes. The bin entry point awaits
10
- * this helper before every delayed exit; the helper itself never calls
10
+ * this helper before every delayed exit. The helper itself never calls
11
11
  * `process.exit` (the process-boundary test keeps that a bin-only right).
12
12
  */
13
13
  /** True when nothing the process is about to lose remains queued. */
@@ -16,8 +16,8 @@ function isFlushed(stream) {
16
16
  }
17
17
  /**
18
18
  * Resolves once `stream` has drained its queued writes, and always within
19
- * `timeoutMs`. Never rejects: `'error'` and `'close'` (an EPIPE'd pipe —
20
- * `installBrokenPipeHandler` already swallows the error itself) resolve
19
+ * `timeoutMs`. Never rejects: `'error'` and `'close'` (an EPIPE'd pipe,
20
+ * whose error `installBrokenPipeHandler` already swallows) resolve
21
21
  * immediately, because a destroyed pipe can never drain and must not stall
22
22
  * the exit behind it.
23
23
  */
@@ -45,9 +45,9 @@ function waitForStreamDrain(stream, timeoutMs) {
45
45
  });
46
46
  }
47
47
  /**
48
- * Waits (bounded by `timeoutMs`) for every given stream — stdout and stderr
49
- * by default — to drain. Resolution is unconditional; the caller exits
50
- * either way, the bound only decides how much queued output survives.
48
+ * Waits (bounded by `timeoutMs`) for every given stream (stdout and stderr
49
+ * by default) to drain. Resolution is unconditional. The caller exits
50
+ * either way, and the bound only decides how much queued output survives.
51
51
  */
52
52
  export async function waitForStdioDrain(timeoutMs, streams = [process.stdout, process.stderr]) {
53
53
  await Promise.all(streams.map((stream) => waitForStreamDrain(stream, timeoutMs)));
@@ -27,9 +27,9 @@ export declare function isPositiveInteger(value: unknown): value is number;
27
27
  * orders instead of failing fast.
28
28
  *
29
29
  * Rejects leading-zero forms ("01"), decimals ("1.5"), whitespace, and
30
- * non-numeric garbage via a strict regex — only the canonical
31
- * representation is accepted, so there is no ambiguity between what the user
32
- * typed and what the value becomes on disk.
30
+ * non-numeric garbage via a strict regex. Only the canonical representation
31
+ * is accepted, so there is no ambiguity between what the user typed and what
32
+ * the value becomes on disk.
33
33
  *
34
34
  * @param flagName - Flag name to include in the error (e.g. `--order`)
35
35
  * @param rawValue - Raw string value from Commander
@@ -57,8 +57,8 @@ export declare function isArray(value: unknown): value is unknown[];
57
57
  * Narrows a JSON value to a JSON object node (excludes arrays and `null`).
58
58
  *
59
59
  * Unlike {@link isObject} this accepts only values already known to be JSON
60
- * data, so the narrowed `JsonObject` keeps its concrete value contract —
61
- * use it when walking a `JsonValue` tree rather than at `unknown` boundaries.
60
+ * data, so the narrowed `JsonObject` keeps its concrete value contract.
61
+ * Use it when walking a `JsonValue` tree rather than at `unknown` boundaries.
62
62
  * @param value - JSON value to check
63
63
  * @returns True if value is a JSON object node
64
64
  */
@@ -78,22 +78,21 @@ export declare const FIREFOX_PRODUCTS: readonly ["firefox", "firefox-esr", "fire
78
78
  * Validates a Firefox product string.
79
79
  *
80
80
  * A type predicate, matching its sibling {@link isValidProjectLicense}.
81
- * Returning plain `boolean` would force
82
- * `as FirefoxProduct` casts at the call sites even though the `.includes`
83
- * check IS the runtime proof.
81
+ * Returning plain `boolean` would force `as FirefoxProduct` casts at the
82
+ * call sites even though the `.includes` check is the runtime proof.
84
83
  */
85
84
  export declare const isValidFirefoxProduct: (value: string) => value is "firefox" | "firefox-esr" | "firefox-beta" | "firefox-devedition";
86
85
  /**
87
86
  * Builds a type predicate from a `readonly` tuple of allowed values.
88
87
  *
89
- * Deriving the type from the list — rather than declaring a union and
90
- * hand-maintaining a matching array — removes a whole class of drift: a
88
+ * Deriving the type from the list, rather than declaring a union and
89
+ * hand-maintaining a matching array, removes a whole class of drift: a
91
90
  * union can otherwise accept a stale allowlist with no compile error, and a
92
91
  * copy of the member list on the `fireforge.json` read path can silently
93
92
  * reject a newly added value.
94
93
  *
95
94
  * Returning a predicate rather than a boolean is what removes the `as`
96
- * casts: `.includes` IS the runtime proof, so the caller should not have to
95
+ * casts: `.includes` is the runtime proof, so the caller should not have to
97
96
  * re-assert it. `ParsedRecord.stringEnum` (src/utils/parse.ts) consumes
98
97
  * exactly this shape.
99
98
  *
@@ -158,7 +157,7 @@ export declare function normalizeTokenName(name: string): string;
158
157
  * Normalizes a patch display name against its category:
159
158
  * strips a trailing `.patch` and any redundant `NNN-<category>-` /
160
159
  * `<category>-` prefixes, case-insensitively and repeatedly, mirroring
161
- * the filename slug pipeline's require-the-category-token rule — a bare
160
+ * the filename slug pipeline's require-the-category-token rule. A bare
162
161
  * leading number is never stripped, so names like `2-step-verification`
163
162
  * survive intact. Falls back to the `.patch`-stripped stem when the
164
163
  * strip would empty the name.