@hominis/fireforge 0.43.1 → 0.44.0

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 (470) hide show
  1. package/CHANGELOG.md +126 -0
  2. package/README.md +10 -1
  3. package/dist/bin/fireforge.d.ts +4 -9
  4. package/dist/bin/fireforge.js +42 -40
  5. package/dist/build-info.json +4 -4
  6. package/dist/src/cli.js +74 -8
  7. package/dist/src/commands/bootstrap.js +17 -20
  8. package/dist/src/commands/build.js +25 -32
  9. package/dist/src/commands/config.js +34 -41
  10. package/dist/src/commands/discard.js +8 -9
  11. package/dist/src/commands/doctor-check-core.d.ts +4 -18
  12. package/dist/src/commands/doctor-check-core.js +8 -35
  13. package/dist/src/commands/doctor-external-toolchains.js +2 -2
  14. package/dist/src/commands/doctor-furnace-config-sync.d.ts +18 -0
  15. package/dist/src/commands/{doctor-furnace-manifest-sync.js → doctor-furnace-config-sync.js} +27 -26
  16. package/dist/src/commands/doctor-furnace-jar.d.ts +7 -9
  17. package/dist/src/commands/doctor-furnace-jar.js +7 -9
  18. package/dist/src/commands/doctor-furnace.js +21 -24
  19. package/dist/src/commands/doctor-orphaned-harness.d.ts +16 -20
  20. package/dist/src/commands/doctor-orphaned-harness.js +18 -44
  21. package/dist/src/commands/doctor-post-rebase-audit.d.ts +2 -0
  22. package/dist/src/commands/{doctor/post-rebase-audit.js → doctor-post-rebase-audit.js} +3 -3
  23. package/dist/src/commands/doctor-working-tree.d.ts +10 -12
  24. package/dist/src/commands/doctor-working-tree.js +11 -18
  25. package/dist/src/commands/doctor.js +35 -53
  26. package/dist/src/commands/download.js +32 -48
  27. package/dist/src/commands/export-all.js +29 -33
  28. package/dist/src/commands/export-flow.js +6 -6
  29. package/dist/src/commands/export-placement-conflicts.js +10 -9
  30. package/dist/src/commands/export-placement-gate.js +5 -5
  31. package/dist/src/commands/export-shared.d.ts +30 -33
  32. package/dist/src/commands/export-shared.js +45 -43
  33. package/dist/src/commands/export.js +21 -27
  34. package/dist/src/commands/furnace/apply.js +14 -23
  35. package/dist/src/commands/furnace/chrome-doc-remove.js +14 -21
  36. package/dist/src/commands/furnace/chrome-doc-templates.d.ts +23 -23
  37. package/dist/src/commands/furnace/chrome-doc-templates.js +23 -23
  38. package/dist/src/commands/furnace/chrome-doc-tests.js +26 -29
  39. package/dist/src/commands/furnace/chrome-doc.d.ts +16 -17
  40. package/dist/src/commands/furnace/chrome-doc.js +31 -41
  41. package/dist/src/commands/furnace/create-browser-test.d.ts +4 -4
  42. package/dist/src/commands/furnace/create-browser-test.js +8 -8
  43. package/dist/src/commands/furnace/create-mochikit.d.ts +6 -7
  44. package/dist/src/commands/furnace/create-mochikit.js +8 -9
  45. package/dist/src/commands/furnace/create-readback.d.ts +12 -13
  46. package/dist/src/commands/furnace/create-readback.js +12 -13
  47. package/dist/src/commands/furnace/create-templates.d.ts +22 -28
  48. package/dist/src/commands/furnace/create-templates.js +35 -30
  49. package/dist/src/commands/furnace/create-xpcshell.js +2 -2
  50. package/dist/src/commands/furnace/create.js +33 -23
  51. package/dist/src/commands/furnace/deploy.js +16 -24
  52. package/dist/src/commands/furnace/diff.js +9 -9
  53. package/dist/src/commands/furnace/init.js +33 -36
  54. package/dist/src/commands/furnace/override.js +23 -25
  55. package/dist/src/commands/furnace/preview.js +47 -67
  56. package/dist/src/commands/furnace/refresh.js +12 -16
  57. package/dist/src/commands/furnace/remove-mutations.d.ts +3 -6
  58. package/dist/src/commands/furnace/remove-mutations.js +9 -16
  59. package/dist/src/commands/furnace/remove-state.js +1 -1
  60. package/dist/src/commands/furnace/remove.js +33 -38
  61. package/dist/src/commands/furnace/rename-xpcshell.d.ts +8 -11
  62. package/dist/src/commands/furnace/rename-xpcshell.js +8 -11
  63. package/dist/src/commands/furnace/rename.js +59 -69
  64. package/dist/src/commands/furnace/scan.js +19 -33
  65. package/dist/src/commands/furnace/status.js +12 -9
  66. package/dist/src/commands/furnace/sync.js +9 -16
  67. package/dist/src/commands/furnace/validate.js +20 -20
  68. package/dist/src/commands/import.js +42 -35
  69. package/dist/src/commands/lint-per-patch.js +15 -10
  70. package/dist/src/commands/lint-per-run-checkjs.d.ts +13 -13
  71. package/dist/src/commands/lint-per-run-checkjs.js +13 -13
  72. package/dist/src/commands/lint-report.js +6 -7
  73. package/dist/src/commands/lint.d.ts +15 -16
  74. package/dist/src/commands/lint.js +86 -102
  75. package/dist/src/commands/package.js +6 -11
  76. package/dist/src/commands/patch/compact.js +1 -1
  77. package/dist/src/commands/patch/delete.js +24 -33
  78. package/dist/src/commands/patch/index.d.ts +5 -6
  79. package/dist/src/commands/patch/index.js +10 -12
  80. package/dist/src/commands/patch/lint-ignore.js +14 -13
  81. package/dist/src/commands/patch/move-files-create.d.ts +6 -6
  82. package/dist/src/commands/patch/move-files-create.js +8 -8
  83. package/dist/src/commands/patch/move-files-into.d.ts +6 -6
  84. package/dist/src/commands/patch/move-files-into.js +8 -8
  85. package/dist/src/commands/patch/patch-context.d.ts +2 -3
  86. package/dist/src/commands/patch/patch-context.js +2 -3
  87. package/dist/src/commands/patch/rename.d.ts +10 -11
  88. package/dist/src/commands/patch/rename.js +11 -12
  89. package/dist/src/commands/patch/reorder.js +8 -9
  90. package/dist/src/commands/patch/split-plan.js +1 -1
  91. package/dist/src/commands/patch/split.d.ts +8 -10
  92. package/dist/src/commands/patch/split.js +9 -11
  93. package/dist/src/commands/patch/staged-dependency-validate.js +8 -8
  94. package/dist/src/commands/patch/staged-dependency.js +7 -3
  95. package/dist/src/commands/patch/tier.d.ts +9 -9
  96. package/dist/src/commands/patch/tier.js +18 -15
  97. package/dist/src/commands/re-export-adjacent.js +9 -8
  98. package/dist/src/commands/re-export-bulk-scan.d.ts +9 -9
  99. package/dist/src/commands/re-export-bulk-scan.js +22 -21
  100. package/dist/src/commands/re-export-drift.js +10 -10
  101. package/dist/src/commands/re-export-files.d.ts +6 -7
  102. package/dist/src/commands/re-export-files.js +34 -44
  103. package/dist/src/commands/re-export-lint.d.ts +10 -13
  104. package/dist/src/commands/re-export-lint.js +16 -14
  105. package/dist/src/commands/re-export-options.d.ts +6 -6
  106. package/dist/src/commands/re-export-options.js +6 -6
  107. package/dist/src/commands/re-export-register.d.ts +4 -10
  108. package/dist/src/commands/re-export-register.js +5 -11
  109. package/dist/src/commands/re-export-scan.js +1 -1
  110. package/dist/src/commands/re-export-single.d.ts +3 -3
  111. package/dist/src/commands/re-export-single.js +33 -25
  112. package/dist/src/commands/re-export.js +13 -21
  113. package/dist/src/commands/rebase/abort.js +3 -3
  114. package/dist/src/commands/rebase/confirm.js +2 -1
  115. package/dist/src/commands/rebase/continue.d.ts +1 -1
  116. package/dist/src/commands/rebase/continue.js +14 -9
  117. package/dist/src/commands/rebase/index.js +11 -11
  118. package/dist/src/commands/rebase/patch-loop.d.ts +7 -1
  119. package/dist/src/commands/rebase/patch-loop.js +60 -39
  120. package/dist/src/commands/rebase/summary.js +1 -1
  121. package/dist/src/commands/register.js +5 -7
  122. package/dist/src/commands/reset.js +2 -1
  123. package/dist/src/commands/resolve.d.ts +16 -13
  124. package/dist/src/commands/resolve.js +30 -33
  125. package/dist/src/commands/run.js +33 -35
  126. package/dist/src/commands/setup-support.js +15 -19
  127. package/dist/src/commands/setup.js +13 -9
  128. package/dist/src/commands/status-check.d.ts +6 -6
  129. package/dist/src/commands/status-json.d.ts +6 -6
  130. package/dist/src/commands/status-json.js +5 -0
  131. package/dist/src/commands/status-output.d.ts +5 -5
  132. package/dist/src/commands/status-output.js +6 -6
  133. package/dist/src/commands/status-ownership.d.ts +16 -14
  134. package/dist/src/commands/status-ownership.js +16 -14
  135. package/dist/src/commands/status.js +42 -34
  136. package/dist/src/commands/test-build-phase.js +26 -13
  137. package/dist/src/commands/test-diagnose.js +44 -44
  138. package/dist/src/commands/test-register.js +1 -0
  139. package/dist/src/commands/test-run.d.ts +14 -16
  140. package/dist/src/commands/test-run.js +21 -13
  141. package/dist/src/commands/test-stale-gate.d.ts +15 -16
  142. package/dist/src/commands/test-stale-gate.js +15 -16
  143. package/dist/src/commands/test-verdict.d.ts +20 -3
  144. package/dist/src/commands/test-verdict.js +30 -0
  145. package/dist/src/commands/test.js +83 -76
  146. package/dist/src/commands/token-coverage.js +3 -4
  147. package/dist/src/commands/token.js +16 -18
  148. package/dist/src/commands/tree.js +47 -31
  149. package/dist/src/commands/typecheck.d.ts +10 -12
  150. package/dist/src/commands/typecheck.js +24 -27
  151. package/dist/src/commands/verify.js +13 -15
  152. package/dist/src/commands/watch.js +21 -23
  153. package/dist/src/commands/wire.js +52 -62
  154. package/dist/src/core/ast-utils.d.ts +8 -7
  155. package/dist/src/core/ast-utils.js +8 -7
  156. package/dist/src/core/branding.d.ts +9 -14
  157. package/dist/src/core/branding.js +7 -11
  158. package/dist/src/core/browser-wire.d.ts +1 -1
  159. package/dist/src/core/browser-wire.js +14 -19
  160. package/dist/src/core/build-audit-platform.js +25 -33
  161. package/dist/src/core/build-audit-registration.js +17 -25
  162. package/dist/src/core/build-audit-resolve.d.ts +15 -17
  163. package/dist/src/core/build-audit-resolve.js +27 -33
  164. package/dist/src/core/build-audit-transforms.js +18 -19
  165. package/dist/src/core/build-audit.js +28 -42
  166. package/dist/src/core/build-baseline-types.d.ts +29 -35
  167. package/dist/src/core/build-baseline.d.ts +5 -4
  168. package/dist/src/core/build-baseline.js +14 -14
  169. package/dist/src/core/build-overwrite-guard.d.ts +7 -14
  170. package/dist/src/core/build-overwrite-guard.js +17 -27
  171. package/dist/src/core/build-prepare.d.ts +2 -2
  172. package/dist/src/core/build-prepare.js +8 -9
  173. package/dist/src/core/config-state.js +12 -4
  174. package/dist/src/core/config-validate.js +8 -5
  175. package/dist/src/core/config.d.ts +5 -8
  176. package/dist/src/core/config.js +7 -16
  177. package/dist/src/core/coverage-extend.d.ts +15 -13
  178. package/dist/src/core/coverage-extend.js +15 -13
  179. package/dist/src/core/destructive.d.ts +31 -9
  180. package/dist/src/core/destructive.js +29 -26
  181. package/dist/src/core/diff-hunks.js +10 -12
  182. package/dist/src/core/discard-baseline.d.ts +8 -8
  183. package/dist/src/core/discard-baseline.js +16 -15
  184. package/dist/src/core/display-state.d.ts +12 -14
  185. package/dist/src/core/display-state.js +12 -14
  186. package/dist/src/core/engine-changes.d.ts +2 -4
  187. package/dist/src/core/engine-changes.js +2 -4
  188. package/dist/src/core/engine-precondition.d.ts +28 -13
  189. package/dist/src/core/engine-precondition.js +25 -10
  190. package/dist/src/core/engine-session-lock.d.ts +47 -21
  191. package/dist/src/core/engine-session-lock.js +168 -33
  192. package/dist/src/core/export-moved-code-shape.d.ts +10 -10
  193. package/dist/src/core/export-moved-code-shape.js +10 -10
  194. package/dist/src/core/file-lock.d.ts +62 -5
  195. package/dist/src/core/file-lock.js +196 -59
  196. package/dist/src/core/firefox-cache.js +1 -3
  197. package/dist/src/core/firefox-extract.js +10 -14
  198. package/dist/src/core/firefox.d.ts +7 -5
  199. package/dist/src/core/firefox.js +4 -5
  200. package/dist/src/core/furnace-apply-dry-run.d.ts +2 -2
  201. package/dist/src/core/furnace-apply-dry-run.js +3 -2
  202. package/dist/src/core/furnace-apply-ftl.d.ts +7 -9
  203. package/dist/src/core/furnace-apply-ftl.js +12 -12
  204. package/dist/src/core/furnace-apply-helpers.d.ts +7 -7
  205. package/dist/src/core/furnace-apply-helpers.js +19 -16
  206. package/dist/src/core/furnace-apply-overwrite-warn.d.ts +8 -9
  207. package/dist/src/core/furnace-apply-overwrite-warn.js +8 -9
  208. package/dist/src/core/furnace-apply-undeploy-actions.d.ts +3 -4
  209. package/dist/src/core/furnace-apply-undeploy-actions.js +3 -4
  210. package/dist/src/core/furnace-apply.d.ts +5 -8
  211. package/dist/src/core/furnace-apply.js +19 -24
  212. package/dist/src/core/furnace-checksum-utils.d.ts +14 -0
  213. package/dist/src/core/furnace-checksum-utils.js +16 -0
  214. package/dist/src/core/furnace-config.d.ts +21 -30
  215. package/dist/src/core/furnace-config.js +32 -54
  216. package/dist/src/core/furnace-constants.d.ts +8 -0
  217. package/dist/src/core/furnace-constants.js +10 -2
  218. package/dist/src/core/furnace-css-fragments.d.ts +5 -5
  219. package/dist/src/core/furnace-css-fragments.js +5 -5
  220. package/dist/src/core/furnace-jsconfig.d.ts +11 -12
  221. package/dist/src/core/furnace-jsconfig.js +11 -12
  222. package/dist/src/core/furnace-marker.d.ts +7 -8
  223. package/dist/src/core/furnace-marker.js +7 -8
  224. package/dist/src/core/furnace-operation.d.ts +31 -0
  225. package/dist/src/core/furnace-operation.js +54 -17
  226. package/dist/src/core/furnace-precondition.d.ts +61 -0
  227. package/dist/src/core/furnace-precondition.js +67 -0
  228. package/dist/src/core/furnace-registration-remove.d.ts +5 -6
  229. package/dist/src/core/furnace-registration-remove.js +6 -7
  230. package/dist/src/core/furnace-registration-validate.d.ts +13 -0
  231. package/dist/src/core/furnace-registration-validate.js +20 -1
  232. package/dist/src/core/furnace-registration.d.ts +5 -6
  233. package/dist/src/core/furnace-registration.js +10 -12
  234. package/dist/src/core/furnace-rollback.js +7 -7
  235. package/dist/src/core/furnace-scanner.d.ts +1 -0
  236. package/dist/src/core/furnace-scanner.js +1 -2
  237. package/dist/src/core/furnace-stale-export.d.ts +10 -10
  238. package/dist/src/core/furnace-stale-export.js +10 -10
  239. package/dist/src/core/furnace-state-persist.d.ts +6 -8
  240. package/dist/src/core/furnace-state-persist.js +6 -8
  241. package/dist/src/core/furnace-validate-accessibility.d.ts +22 -0
  242. package/dist/src/core/furnace-validate-accessibility.js +310 -1
  243. package/dist/src/core/furnace-validate-compatibility.js +141 -1
  244. package/dist/src/core/furnace-validate-helpers.d.ts +5 -116
  245. package/dist/src/core/furnace-validate-helpers.js +0 -491
  246. package/dist/src/core/furnace-validate-registration.d.ts +7 -0
  247. package/dist/src/core/furnace-validate-registration.js +115 -41
  248. package/dist/src/core/furnace-validate.d.ts +16 -0
  249. package/dist/src/core/furnace-validate.js +188 -145
  250. package/dist/src/core/furnace-version-drift.d.ts +10 -11
  251. package/dist/src/core/furnace-version-drift.js +10 -11
  252. package/dist/src/core/git-base.d.ts +7 -9
  253. package/dist/src/core/git-base.js +7 -9
  254. package/dist/src/core/git-diff.d.ts +20 -9
  255. package/dist/src/core/git-diff.js +148 -63
  256. package/dist/src/core/git-file-ops.d.ts +19 -19
  257. package/dist/src/core/git-file-ops.js +19 -19
  258. package/dist/src/core/git-readonly-index.d.ts +53 -19
  259. package/dist/src/core/git-readonly-index.js +75 -31
  260. package/dist/src/core/git-status.d.ts +5 -6
  261. package/dist/src/core/git-status.js +5 -6
  262. package/dist/src/core/git.d.ts +9 -10
  263. package/dist/src/core/git.js +54 -70
  264. package/dist/src/core/license-headers.d.ts +17 -23
  265. package/dist/src/core/license-headers.js +17 -23
  266. package/dist/src/core/mach-build-artifacts.d.ts +9 -9
  267. package/dist/src/core/mach-build-artifacts.js +57 -19
  268. package/dist/src/core/mach-error-hints.js +42 -29
  269. package/dist/src/core/mach-known-noise-filter.d.ts +15 -16
  270. package/dist/src/core/mach-known-noise-filter.js +18 -20
  271. package/dist/src/core/mach-mozconfig.d.ts +14 -0
  272. package/dist/src/core/mach-mozconfig.js +30 -0
  273. package/dist/src/core/mach-resource-shim.d.ts +43 -58
  274. package/dist/src/core/mach-resource-shim.js +50 -67
  275. package/dist/src/core/mach.d.ts +37 -41
  276. package/dist/src/core/mach.js +50 -51
  277. package/dist/src/core/marionette-port.d.ts +36 -1
  278. package/dist/src/core/marionette-port.js +96 -31
  279. package/dist/src/core/marionette-preflight.d.ts +8 -12
  280. package/dist/src/core/marionette-preflight.js +86 -52
  281. package/dist/src/core/mochitest-server-port.d.ts +42 -0
  282. package/dist/src/core/mochitest-server-port.js +119 -0
  283. package/dist/src/core/module-resolution-preflight.d.ts +9 -11
  284. package/dist/src/core/module-resolution-preflight.js +9 -11
  285. package/dist/src/core/moz-manifest-helpers.d.ts +79 -0
  286. package/dist/src/core/moz-manifest-helpers.js +163 -0
  287. package/dist/src/core/{manifest-register.d.ts → moz-manifest-register.d.ts} +1 -1
  288. package/dist/src/core/{manifest-register.js → moz-manifest-register.js} +13 -28
  289. package/dist/src/core/{manifest-rules.d.ts → moz-manifest-rules.d.ts} +10 -1
  290. package/dist/src/core/{manifest-rules.js → moz-manifest-rules.js} +31 -24
  291. package/dist/src/core/{manifest-tokenizers.d.ts → moz-manifest-tokenizers.d.ts} +3 -5
  292. package/dist/src/core/{manifest-tokenizers.js → moz-manifest-tokenizers.js} +9 -12
  293. package/dist/src/core/ownership-table.d.ts +14 -16
  294. package/dist/src/core/ownership-table.js +14 -16
  295. package/dist/src/core/parser-fallback.d.ts +15 -1
  296. package/dist/src/core/parser-fallback.js +22 -3
  297. package/dist/src/core/patch-apply-fuzz.d.ts +10 -12
  298. package/dist/src/core/patch-apply-fuzz.js +15 -18
  299. package/dist/src/core/patch-apply.d.ts +13 -34
  300. package/dist/src/core/patch-apply.js +16 -76
  301. package/dist/src/core/patch-artifact-normalize.d.ts +13 -15
  302. package/dist/src/core/patch-artifact-normalize.js +13 -15
  303. package/dist/src/core/patch-export-metadata.d.ts +12 -2
  304. package/dist/src/core/patch-export-metadata.js +13 -4
  305. package/dist/src/core/patch-export-update.d.ts +13 -1
  306. package/dist/src/core/patch-export-update.js +25 -8
  307. package/dist/src/core/patch-export.d.ts +15 -8
  308. package/dist/src/core/patch-export.js +10 -11
  309. package/dist/src/core/patch-files.d.ts +5 -6
  310. package/dist/src/core/patch-files.js +5 -6
  311. package/dist/src/core/patch-identifier-suggest.d.ts +7 -12
  312. package/dist/src/core/patch-identifier-suggest.js +14 -19
  313. package/dist/src/core/patch-lint-binary.d.ts +51 -0
  314. package/dist/src/core/patch-lint-binary.js +39 -0
  315. package/dist/src/core/{lint-cache.d.ts → patch-lint-cache.d.ts} +5 -5
  316. package/dist/src/core/{lint-cache.js → patch-lint-cache.js} +21 -23
  317. package/dist/src/core/patch-lint-checkjs.d.ts +16 -16
  318. package/dist/src/core/patch-lint-checkjs.js +16 -16
  319. package/dist/src/core/patch-lint-chrome-jsdoc.d.ts +6 -9
  320. package/dist/src/core/patch-lint-chrome-jsdoc.js +10 -14
  321. package/dist/src/core/patch-lint-creators.d.ts +8 -8
  322. package/dist/src/core/patch-lint-creators.js +8 -8
  323. package/dist/src/core/patch-lint-cross.d.ts +17 -20
  324. package/dist/src/core/patch-lint-cross.js +16 -16
  325. package/dist/src/core/patch-lint-css.d.ts +3 -5
  326. package/dist/src/core/patch-lint-css.js +17 -22
  327. package/dist/src/core/patch-lint-diff-tag.d.ts +14 -16
  328. package/dist/src/core/patch-lint-diff-tag.js +14 -16
  329. package/dist/src/core/patch-lint-jsdoc.d.ts +7 -8
  330. package/dist/src/core/patch-lint-jsdoc.js +26 -19
  331. package/dist/src/core/patch-lint-mozbuild.js +20 -20
  332. package/dist/src/core/patch-lint-observer.d.ts +7 -7
  333. package/dist/src/core/patch-lint-observer.js +7 -7
  334. package/dist/src/core/patch-lint.d.ts +38 -29
  335. package/dist/src/core/patch-lint.js +89 -121
  336. package/dist/src/core/patch-lock.d.ts +1 -1
  337. package/dist/src/core/patch-lock.js +45 -9
  338. package/dist/src/core/patch-manifest-consistency.d.ts +2 -1
  339. package/dist/src/core/patch-manifest-consistency.js +25 -27
  340. package/dist/src/core/patch-manifest-io.js +14 -18
  341. package/dist/src/core/patch-manifest-resolve.d.ts +9 -12
  342. package/dist/src/core/patch-manifest-resolve.js +9 -12
  343. package/dist/src/core/patch-manifest-validate.d.ts +6 -1
  344. package/dist/src/core/patch-manifest-validate.js +25 -13
  345. package/dist/src/core/patch-parse.d.ts +24 -13
  346. package/dist/src/core/patch-parse.js +19 -14
  347. package/dist/src/core/patch-policy.d.ts +2 -2
  348. package/dist/src/core/patch-policy.js +2 -2
  349. package/dist/src/core/patch-registration-refs.d.ts +7 -8
  350. package/dist/src/core/patch-registration-refs.js +9 -9
  351. package/dist/src/core/process-cpu-time.d.ts +12 -0
  352. package/dist/src/core/process-cpu-time.js +52 -0
  353. package/dist/src/core/rebase-session.d.ts +38 -26
  354. package/dist/src/core/rebase-session.js +55 -28
  355. package/dist/src/core/register-browser-content.js +9 -74
  356. package/dist/src/core/{register-test-manifest.js → register-browser-test.js} +7 -42
  357. package/dist/src/core/register-module.js +10 -43
  358. package/dist/src/core/register-scaffold.d.ts +8 -8
  359. package/dist/src/core/register-scaffold.js +10 -10
  360. package/dist/src/core/register-shared-css.d.ts +9 -12
  361. package/dist/src/core/register-shared-css.js +17 -87
  362. package/dist/src/core/register-xpcshell-test.d.ts +6 -7
  363. package/dist/src/core/register-xpcshell-test.js +7 -8
  364. package/dist/src/core/shared-ftl.js +12 -4
  365. package/dist/src/core/state-file.d.ts +45 -0
  366. package/dist/src/core/state-file.js +34 -0
  367. package/dist/src/core/status-binary.d.ts +18 -11
  368. package/dist/src/core/status-binary.js +19 -12
  369. package/dist/src/core/status-classify.d.ts +30 -36
  370. package/dist/src/core/status-classify.js +21 -26
  371. package/dist/src/core/test-changed-prefs.d.ts +30 -0
  372. package/dist/src/core/test-changed-prefs.js +78 -0
  373. package/dist/src/core/test-harness-crash.d.ts +25 -63
  374. package/dist/src/core/test-harness-crash.js +121 -142
  375. package/dist/src/core/test-harness-signature.d.ts +18 -0
  376. package/dist/src/core/test-harness-signature.js +13 -0
  377. package/dist/src/core/test-path-scope.d.ts +12 -15
  378. package/dist/src/core/test-path-scope.js +15 -18
  379. package/dist/src/core/test-stale-check.d.ts +17 -17
  380. package/dist/src/core/test-stale-check.js +50 -43
  381. package/dist/src/core/test-stall-triage.d.ts +51 -0
  382. package/dist/src/core/test-stall-triage.js +126 -0
  383. package/dist/src/core/token-category.js +5 -7
  384. package/dist/src/core/token-coverage.js +9 -9
  385. package/dist/src/core/token-dark-mode.d.ts +9 -11
  386. package/dist/src/core/token-dark-mode.js +9 -11
  387. package/dist/src/core/token-docs.d.ts +2 -0
  388. package/dist/src/core/token-docs.js +2 -0
  389. package/dist/src/core/token-manager.d.ts +10 -2
  390. package/dist/src/core/token-manager.js +17 -8
  391. package/dist/src/core/token-scaffold.d.ts +7 -7
  392. package/dist/src/core/token-scaffold.js +7 -7
  393. package/dist/src/core/token-variant.d.ts +4 -4
  394. package/dist/src/core/token-variant.js +4 -4
  395. package/dist/src/core/toolchain-preflight.d.ts +20 -21
  396. package/dist/src/core/toolchain-preflight.js +28 -31
  397. package/dist/src/core/tree-guard.js +12 -2
  398. package/dist/src/core/tree-store.d.ts +41 -27
  399. package/dist/src/core/tree-store.js +63 -42
  400. package/dist/src/core/typecheck-shim.d.ts +23 -24
  401. package/dist/src/core/typecheck-shim.js +23 -24
  402. package/dist/src/core/typecheck.js +8 -8
  403. package/dist/src/core/wire-destroy.d.ts +3 -3
  404. package/dist/src/core/wire-destroy.js +7 -15
  405. package/dist/src/core/wire-dom-fragment.d.ts +9 -17
  406. package/dist/src/core/wire-dom-fragment.js +11 -44
  407. package/dist/src/core/wire-init.d.ts +2 -3
  408. package/dist/src/core/wire-init.js +8 -19
  409. package/dist/src/core/wire-subscript.d.ts +2 -3
  410. package/dist/src/core/wire-subscript.js +4 -13
  411. package/dist/src/core/wire-utils.d.ts +7 -8
  412. package/dist/src/core/wire-utils.js +7 -8
  413. package/dist/src/core/xpcshell-appdir.d.ts +38 -45
  414. package/dist/src/core/xpcshell-appdir.js +38 -45
  415. package/dist/src/errors/base.d.ts +37 -16
  416. package/dist/src/errors/base.js +37 -16
  417. package/dist/src/errors/build.d.ts +13 -1
  418. package/dist/src/errors/build.js +14 -2
  419. package/dist/src/errors/codes.d.ts +16 -0
  420. package/dist/src/errors/codes.js +16 -0
  421. package/dist/src/errors/furnace.d.ts +4 -4
  422. package/dist/src/errors/git.d.ts +6 -10
  423. package/dist/src/errors/git.js +6 -10
  424. package/dist/src/errors/patch.d.ts +7 -7
  425. package/dist/src/errors/patch.js +7 -7
  426. package/dist/src/errors/rebase.d.ts +4 -4
  427. package/dist/src/errors/rebase.js +4 -4
  428. package/dist/src/index.d.ts +7 -1
  429. package/dist/src/index.js +5 -0
  430. package/dist/src/types/commands/index.d.ts +2 -2
  431. package/dist/src/types/commands/options.d.ts +88 -70
  432. package/dist/src/types/commands/patches.d.ts +24 -34
  433. package/dist/src/types/commands/project.d.ts +5 -34
  434. package/dist/src/types/config.d.ts +25 -23
  435. package/dist/src/types/config.js +6 -1
  436. package/dist/src/types/furnace.d.ts +37 -13
  437. package/dist/src/types/furnace.js +19 -1
  438. package/dist/src/types/index.d.ts +3 -3
  439. package/dist/src/utils/build-info.d.ts +7 -8
  440. package/dist/src/utils/build-info.js +12 -11
  441. package/dist/src/utils/errors.d.ts +6 -8
  442. package/dist/src/utils/errors.js +6 -8
  443. package/dist/src/utils/logger.d.ts +27 -10
  444. package/dist/src/utils/logger.js +28 -16
  445. package/dist/src/utils/machine-output.d.ts +12 -0
  446. package/dist/src/utils/machine-output.js +33 -0
  447. package/dist/src/utils/options.d.ts +31 -14
  448. package/dist/src/utils/options.js +86 -30
  449. package/dist/src/utils/paths.d.ts +10 -8
  450. package/dist/src/utils/paths.js +10 -8
  451. package/dist/src/utils/platform.d.ts +0 -25
  452. package/dist/src/utils/platform.js +1 -42
  453. package/dist/src/utils/process-group.d.ts +9 -4
  454. package/dist/src/utils/process-group.js +19 -5
  455. package/dist/src/utils/process.d.ts +42 -7
  456. package/dist/src/utils/process.js +44 -17
  457. package/dist/src/utils/ps-duration.d.ts +31 -0
  458. package/dist/src/utils/ps-duration.js +70 -0
  459. package/dist/src/utils/regex.d.ts +9 -10
  460. package/dist/src/utils/regex.js +9 -10
  461. package/dist/src/utils/validation.d.ts +58 -28
  462. package/dist/src/utils/validation.js +60 -33
  463. package/package.json +2 -2
  464. package/dist/src/commands/doctor/post-rebase-audit.d.ts +0 -2
  465. package/dist/src/commands/doctor-furnace-manifest-sync.d.ts +0 -18
  466. package/dist/src/core/manifest-helpers.d.ts +0 -38
  467. package/dist/src/core/manifest-helpers.js +0 -120
  468. /package/dist/src/core/{lint-projection.d.ts → patch-lint-projection.d.ts} +0 -0
  469. /package/dist/src/core/{lint-projection.js → patch-lint-projection.js} +0 -0
  470. /package/dist/src/core/{register-test-manifest.d.ts → register-browser-test.d.ts} +0 -0
@@ -79,13 +79,10 @@ export declare class InvalidArgumentError extends FireForgeError {
79
79
  * Error thrown when a spawned command exceeds its `timeout` option.
80
80
  *
81
81
  * Every `exec*` helper in `src/utils/process.ts` rejects with this type
82
- * (instead of Node's bare `AbortError: The operation was aborted`) when the
83
- * caller-supplied timeout fires. The bare AbortError bit an operator during
84
- * the 2026-04-24 eval (see {@link GitIndexingTimeoutError} in errors/git.ts):
85
- * an 854 s git indexing pass died with no command name, no elapsed time, and
86
- * no hint that a timeout — not git — was responsible. The git path gained a
87
- * site-local typed error then; this class extends the same courtesy to every
88
- * other `timeout` caller.
82
+ * instead of Node's bare `AbortError: The operation was aborted`, which
83
+ * carries no command name, no elapsed time, and no hint that a timeout —
84
+ * not the command — was responsible. See {@link GitIndexingTimeoutError} in
85
+ * errors/git.ts for the git-specific variant.
89
86
  */
90
87
  export declare class ExecTimeoutError extends FireForgeError {
91
88
  /** Executable that was spawned (argv[0]). */
@@ -105,23 +102,47 @@ export declare class ExecTimeoutError extends FireForgeError {
105
102
  get userMessage(): string;
106
103
  }
107
104
  /**
108
- * Error thrown when a file-lock wait times out because another process
109
- * holds the lock.
105
+ * Error thrown when a file-lock wait times out because another process holds
106
+ * the lock.
110
107
  *
111
108
  * Dedicated subclass so the CLI boundary renders lock contention as the
112
- * one-line reason-first/remedy-second refusal it is — before this, the
113
- * timeout surfaced as a plain `Error`, which `withErrorHandling` treats
114
- * as an internal failure and prints with a five-frame stack. The refusal
115
- * was always correct; the presentation made it look like a crash.
109
+ * one-line reason-first/remedy-second refusal it is. As a plain `Error` it
110
+ * is treated by `withErrorHandling` as an internal failure and printed with
111
+ * a five-frame stack — a correct refusal that looks like a crash.
112
+ *
113
+ * Exit code 15, not 1: the run never started. A script that retries on
114
+ * failure wants to re-queue this one, not treat it as a failure of the work
115
+ * it asked for. Every lock in FireForge shares the class and therefore the
116
+ * code — the fact is the same whichever lock was contended.
116
117
  */
117
118
  export declare class LockContentionError extends FireForgeError {
118
- readonly code: 1;
119
+ readonly code: 15;
120
+ }
121
+ /**
122
+ * Error thrown when a test run completed but its verdict cannot be trusted,
123
+ * because `engine/` changed (or stopped being probeable) while the harness
124
+ * was running.
125
+ *
126
+ * Dedicated subclass for its exit code alone: as a `GeneralError` this
127
+ * refusal exited 1 beside real test failures' 5, and a summary line reading
128
+ * `FAIL — exit 1` next to `FAIL — exit 5` invites treating them as the same
129
+ * kind of fact. They are opposites — one suite failed, the other's result
130
+ * was discarded — and only a distinct code makes "unknown, re-run"
131
+ * mechanically separable from "red".
132
+ */
133
+ export declare class InconclusiveVerdictError extends FireForgeError {
134
+ readonly code: 14;
119
135
  }
120
136
  /**
121
- * Error thrown when the user cancels an interactive prompt.
137
+ * Error thrown when the user INTERRUPTS an interactive prompt — Esc or
138
+ * Ctrl+C, i.e. `isCancel(...)`.
139
+ *
140
+ * Not for a prompt the operator deliberately answered "no" to: 130 is
141
+ * 128+SIGINT, which claims an interrupt. A declined confirmation is a
142
+ * successful run that chose not to proceed, and exits 0.
122
143
  */
123
144
  export declare class CancellationError extends FireForgeError {
124
- readonly code: 1;
145
+ readonly code: 130;
125
146
  constructor();
126
147
  }
127
148
  /**
@@ -113,13 +113,10 @@ export class InvalidArgumentError extends FireForgeError {
113
113
  * Error thrown when a spawned command exceeds its `timeout` option.
114
114
  *
115
115
  * Every `exec*` helper in `src/utils/process.ts` rejects with this type
116
- * (instead of Node's bare `AbortError: The operation was aborted`) when the
117
- * caller-supplied timeout fires. The bare AbortError bit an operator during
118
- * the 2026-04-24 eval (see {@link GitIndexingTimeoutError} in errors/git.ts):
119
- * an 854 s git indexing pass died with no command name, no elapsed time, and
120
- * no hint that a timeout — not git — was responsible. The git path gained a
121
- * site-local typed error then; this class extends the same courtesy to every
122
- * other `timeout` caller.
116
+ * instead of Node's bare `AbortError: The operation was aborted`, which
117
+ * carries no command name, no elapsed time, and no hint that a timeout —
118
+ * not the command — was responsible. See {@link GitIndexingTimeoutError} in
119
+ * errors/git.ts for the git-specific variant.
123
120
  */
124
121
  export class ExecTimeoutError extends FireForgeError {
125
122
  command;
@@ -145,23 +142,47 @@ export class ExecTimeoutError extends FireForgeError {
145
142
  }
146
143
  }
147
144
  /**
148
- * Error thrown when a file-lock wait times out because another process
149
- * holds the lock.
145
+ * Error thrown when a file-lock wait times out because another process holds
146
+ * the lock.
150
147
  *
151
148
  * Dedicated subclass so the CLI boundary renders lock contention as the
152
- * one-line reason-first/remedy-second refusal it is — before this, the
153
- * timeout surfaced as a plain `Error`, which `withErrorHandling` treats
154
- * as an internal failure and prints with a five-frame stack. The refusal
155
- * was always correct; the presentation made it look like a crash.
149
+ * one-line reason-first/remedy-second refusal it is. As a plain `Error` it
150
+ * is treated by `withErrorHandling` as an internal failure and printed with
151
+ * a five-frame stack — a correct refusal that looks like a crash.
152
+ *
153
+ * Exit code 15, not 1: the run never started. A script that retries on
154
+ * failure wants to re-queue this one, not treat it as a failure of the work
155
+ * it asked for. Every lock in FireForge shares the class and therefore the
156
+ * code — the fact is the same whichever lock was contended.
156
157
  */
157
158
  export class LockContentionError extends FireForgeError {
158
- code = ExitCode.GENERAL_ERROR;
159
+ code = ExitCode.LOCK_TIMEOUT;
160
+ }
161
+ /**
162
+ * Error thrown when a test run completed but its verdict cannot be trusted,
163
+ * because `engine/` changed (or stopped being probeable) while the harness
164
+ * was running.
165
+ *
166
+ * Dedicated subclass for its exit code alone: as a `GeneralError` this
167
+ * refusal exited 1 beside real test failures' 5, and a summary line reading
168
+ * `FAIL — exit 1` next to `FAIL — exit 5` invites treating them as the same
169
+ * kind of fact. They are opposites — one suite failed, the other's result
170
+ * was discarded — and only a distinct code makes "unknown, re-run"
171
+ * mechanically separable from "red".
172
+ */
173
+ export class InconclusiveVerdictError extends FireForgeError {
174
+ code = ExitCode.INCONCLUSIVE;
159
175
  }
160
176
  /**
161
- * Error thrown when the user cancels an interactive prompt.
177
+ * Error thrown when the user INTERRUPTS an interactive prompt — Esc or
178
+ * Ctrl+C, i.e. `isCancel(...)`.
179
+ *
180
+ * Not for a prompt the operator deliberately answered "no" to: 130 is
181
+ * 128+SIGINT, which claims an interrupt. A declined confirmation is a
182
+ * successful run that chose not to proceed, and exits 0.
162
183
  */
163
184
  export class CancellationError extends FireForgeError {
164
- code = ExitCode.GENERAL_ERROR;
185
+ code = ExitCode.USER_CANCELLED;
165
186
  constructor() {
166
187
  super('cancelled');
167
188
  }
@@ -47,6 +47,18 @@ export declare class MozconfigError extends BuildError {
47
47
  */
48
48
  export declare class AmbiguousBuildArtifactsError extends BuildError {
49
49
  readonly objDirs: string[];
50
- constructor(objDirs: string[]);
50
+ /**
51
+ * Objdir the active mozconfig declared, when one was declared and did
52
+ * not resolve to exactly one candidate. Reported because a declaration
53
+ * that names something the scan cannot see is the diagnosis, not noise.
54
+ */
55
+ readonly declaredObjDir?: string | undefined;
56
+ constructor(objDirs: string[],
57
+ /**
58
+ * Objdir the active mozconfig declared, when one was declared and did
59
+ * not resolve to exactly one candidate. Reported because a declaration
60
+ * that names something the scan cannot see is the diagnosis, not noise.
61
+ */
62
+ declaredObjDir?: string | undefined);
51
63
  get userMessage(): string;
52
64
  }
@@ -97,17 +97,29 @@ export class MozconfigError extends BuildError {
97
97
  */
98
98
  export class AmbiguousBuildArtifactsError extends BuildError {
99
99
  objDirs;
100
- constructor(objDirs) {
100
+ declaredObjDir;
101
+ constructor(objDirs,
102
+ /**
103
+ * Objdir the active mozconfig declared, when one was declared and did
104
+ * not resolve to exactly one candidate. Reported because a declaration
105
+ * that names something the scan cannot see is the diagnosis, not noise.
106
+ */
107
+ declaredObjDir) {
101
108
  super(`Multiple build artifact directories found: ${objDirs.join(', ')}`);
102
109
  this.objDirs = objDirs;
110
+ this.declaredObjDir = declaredObjDir;
103
111
  }
104
112
  get userMessage() {
113
+ const declared = this.declaredObjDir !== undefined
114
+ ? `The mozconfig declares MOZ_OBJDIR=${this.declaredObjDir}, which does not match exactly one of these candidates — so it could not settle the choice.\n\n`
115
+ : '';
105
116
  return ('Build Error: Multiple build artifact directories were found.\n\n' +
106
117
  `Candidates: ${this.objDirs.join(', ')}\n\n` +
118
+ declared +
107
119
  'FireForge will not guess which build output to use.\n\n' +
108
120
  'To fix this:\n' +
109
121
  ' 1. Remove stale obj-* directories you no longer need\n' +
110
- ' 2. Keep only the active build output directory\n' +
122
+ ' 2. Keep only the active build output directory, or name it with MOZ_OBJDIR in the mozconfig\n' +
111
123
  ' 3. Run the command again');
112
124
  }
113
125
  }
@@ -48,6 +48,22 @@ export declare const ExitCode: {
48
48
  * missing profile, etc.).
49
49
  */
50
50
  readonly SMOKE_LAUNCH_FAILURE: 13;
51
+ /**
52
+ * A `fireforge test` run produced a harness result that cannot be trusted
53
+ * — `engine/` moved (or became unprobeable) while the tests ran. Distinct
54
+ * from BUILD_ERROR because the two are opposites: a 5 is a suite that
55
+ * FAILED, a 14 is a suite whose result was THROWN AWAY. A consumer should
56
+ * re-run a 14 (after settling the writers) and must not report it as red.
57
+ */
58
+ readonly INCONCLUSIVE: 14;
59
+ /**
60
+ * A lock wait expired: the run never started, because another FireForge
61
+ * process held the lock for the whole budget. Distinct from GENERAL_ERROR
62
+ * because nothing about the request was wrong — a consumer should re-queue
63
+ * it, with a larger `--wait-lock` budget, rather than treat it as a
64
+ * failure of the work it asked for.
65
+ */
66
+ readonly LOCK_TIMEOUT: 15;
51
67
  /**
52
68
  * The user cancelled an interactive prompt. 130 = 128 + SIGINT, the
53
69
  * conventional "interrupted by the user" code — scripts and CI can tell
@@ -49,6 +49,22 @@ export const ExitCode = {
49
49
  * missing profile, etc.).
50
50
  */
51
51
  SMOKE_LAUNCH_FAILURE: 13,
52
+ /**
53
+ * A `fireforge test` run produced a harness result that cannot be trusted
54
+ * — `engine/` moved (or became unprobeable) while the tests ran. Distinct
55
+ * from BUILD_ERROR because the two are opposites: a 5 is a suite that
56
+ * FAILED, a 14 is a suite whose result was THROWN AWAY. A consumer should
57
+ * re-run a 14 (after settling the writers) and must not report it as red.
58
+ */
59
+ INCONCLUSIVE: 14,
60
+ /**
61
+ * A lock wait expired: the run never started, because another FireForge
62
+ * process held the lock for the whole budget. Distinct from GENERAL_ERROR
63
+ * because nothing about the request was wrong — a consumer should re-queue
64
+ * it, with a larger `--wait-lock` budget, rather than treat it as a
65
+ * failure of the work it asked for.
66
+ */
67
+ LOCK_TIMEOUT: 15,
52
68
  /**
53
69
  * The user cancelled an interactive prompt. 130 = 128 + SIGINT, the
54
70
  * conventional "interrupted by the user" code — scripts and CI can tell
@@ -8,10 +8,10 @@ export declare class FurnaceError extends FireForgeError {
8
8
  constructor(message: string, component?: string | undefined, cause?: Error, options?: {
9
9
  /**
10
10
  * Suppresses the "run furnace validate" advice line. Set by callers
11
- * whose message already tells the user to run validate (or that ARE
12
- * the validate command) — an explicit flag, because the previous
13
- * `message.includes('furnace validate')` sniffing dropped the advice
14
- * from any error that merely MENTIONED the command.
11
+ * whose message already tells the user to run validate, or that ARE
12
+ * the validate command. An explicit flag rather than sniffing the
13
+ * message for `furnace validate`, which drops the advice from any
14
+ * error that merely MENTIONS the command.
15
15
  */
16
16
  omitValidateAdvice?: boolean;
17
17
  });
@@ -48,17 +48,13 @@ export declare class GitIndexLockError extends GitError {
48
48
  */
49
49
  export declare function isGitIndexLockConflict(error: unknown): boolean;
50
50
  /**
51
- * Error thrown when `git add` (monolithic or chunked) exceeds the
52
- * configured timeout while indexing the Firefox source tree.
51
+ * Error thrown when `git add` (monolithic or chunked) exceeds the configured
52
+ * timeout while indexing the Firefox source tree.
53
53
  *
54
- * 2026-04-24 eval Finding 10: a 140.10.0esr bump on a previously-working
55
- * 140.9.0esr workspace aborted after ~854s with a generic
56
- * `AbortError: The operation was aborted`. The root cause was the
57
- * `git add` timeout firing, but the surfaced error was indistinguishable
58
- * from any other AbortError and gave the operator no actionable
59
- * direction. This typed error carries the elapsed budget and the
60
- * environment-variable override so the recovery path is
61
- * self-documenting.
54
+ * A bare `AbortError: The operation was aborted` after ~15 minutes is
55
+ * indistinguishable from any other AbortError and gives the operator no
56
+ * actionable direction. This typed error carries the elapsed budget and the
57
+ * environment-variable override so the recovery path is self-documenting.
62
58
  */
63
59
  export declare class GitIndexingTimeoutError extends GitError {
64
60
  readonly phase: 'monolithic' | 'chunked';
@@ -114,17 +114,13 @@ export function isGitIndexLockConflict(error) {
114
114
  /(unable to create|another git process seems to be running|file exists|locked)/i.test(error.message));
115
115
  }
116
116
  /**
117
- * Error thrown when `git add` (monolithic or chunked) exceeds the
118
- * configured timeout while indexing the Firefox source tree.
117
+ * Error thrown when `git add` (monolithic or chunked) exceeds the configured
118
+ * timeout while indexing the Firefox source tree.
119
119
  *
120
- * 2026-04-24 eval Finding 10: a 140.10.0esr bump on a previously-working
121
- * 140.9.0esr workspace aborted after ~854s with a generic
122
- * `AbortError: The operation was aborted`. The root cause was the
123
- * `git add` timeout firing, but the surfaced error was indistinguishable
124
- * from any other AbortError and gave the operator no actionable
125
- * direction. This typed error carries the elapsed budget and the
126
- * environment-variable override so the recovery path is
127
- * self-documenting.
120
+ * A bare `AbortError: The operation was aborted` after ~15 minutes is
121
+ * indistinguishable from any other AbortError and gives the operator no
122
+ * actionable direction. This typed error carries the elapsed budget and the
123
+ * environment-variable override so the recovery path is self-documenting.
128
124
  */
129
125
  export class GitIndexingTimeoutError extends GitError {
130
126
  phase;
@@ -2,13 +2,13 @@ import { FireForgeError } from './base.js';
2
2
  /**
3
3
  * Error thrown when `patches.json` exists but cannot be parsed or validated.
4
4
  *
5
- * This must be a HARD error on every mutating path. The historical behavior
6
- * collapsed "corrupt" into "absent" (`loadPatchesManifest` returned null for
7
- * both), so the next `fireforge export` would rebuild the manifest containing
8
- * only the new patch — silently destroying every other patch's metadata
9
- * (tiers, descriptions, lintIgnore, staged dependencies) — and a failed
10
- * export's rollback would then delete `patches.json` outright because the
11
- * "before" state looked absent (2026-07-05 review, finding H2).
5
+ * This must be a HARD error on every mutating path. Collapsing "corrupt"
6
+ * into "absent" — a `loadPatchesManifest` that returns null for both — makes
7
+ * the next `fireforge export` rebuild the manifest containing only the new
8
+ * patch, silently destroying every other patch's metadata (tiers,
9
+ * descriptions, lintIgnore, staged dependencies); a failed export's rollback
10
+ * then deletes `patches.json` outright, because the "before" state looked
11
+ * absent.
12
12
  */
13
13
  export declare class PatchManifestCorruptError extends FireForgeError {
14
14
  readonly manifestPath: string;
@@ -4,13 +4,13 @@ import { ExitCode } from './codes.js';
4
4
  /**
5
5
  * Error thrown when `patches.json` exists but cannot be parsed or validated.
6
6
  *
7
- * This must be a HARD error on every mutating path. The historical behavior
8
- * collapsed "corrupt" into "absent" (`loadPatchesManifest` returned null for
9
- * both), so the next `fireforge export` would rebuild the manifest containing
10
- * only the new patch — silently destroying every other patch's metadata
11
- * (tiers, descriptions, lintIgnore, staged dependencies) — and a failed
12
- * export's rollback would then delete `patches.json` outright because the
13
- * "before" state looked absent (2026-07-05 review, finding H2).
7
+ * This must be a HARD error on every mutating path. Collapsing "corrupt"
8
+ * into "absent" — a `loadPatchesManifest` that returns null for both — makes
9
+ * the next `fireforge export` rebuild the manifest containing only the new
10
+ * patch, silently destroying every other patch's metadata (tiers,
11
+ * descriptions, lintIgnore, staged dependencies); a failed export's rollback
12
+ * then deletes `patches.json` outright, because the "before" state looked
13
+ * absent.
14
14
  */
15
15
  export class PatchManifestCorruptError extends FireForgeError {
16
16
  manifestPath;
@@ -21,11 +21,11 @@ export declare class NoRebaseSessionError extends RebaseError {
21
21
  /**
22
22
  * Thrown when the session file exists but cannot be used.
23
23
  *
24
- * This case had no error of its own before 0.41.0 and was reported as
24
+ * Without an error of its own, this case is reported as
25
25
  * {@link NoRebaseSessionError} by `--continue`/`--abort` while `rebase`
26
- * reported {@link RebaseSessionExistsError} — a closed cycle in which each
27
- * command pointed at the other two. The message names the file so an operator
28
- * always has a way out, and `--abort` now clears a corrupt session rather than
26
+ * reports {@link RebaseSessionExistsError} — a closed cycle in which each
27
+ * command points at the other two. The message names the file so an operator
28
+ * always has a way out, and `--abort` clears a corrupt session rather than
29
29
  * refusing to run against one.
30
30
  */
31
31
  export declare class CorruptRebaseSessionError extends RebaseError {
@@ -35,11 +35,11 @@ export class NoRebaseSessionError extends RebaseError {
35
35
  /**
36
36
  * Thrown when the session file exists but cannot be used.
37
37
  *
38
- * This case had no error of its own before 0.41.0 and was reported as
38
+ * Without an error of its own, this case is reported as
39
39
  * {@link NoRebaseSessionError} by `--continue`/`--abort` while `rebase`
40
- * reported {@link RebaseSessionExistsError} — a closed cycle in which each
41
- * command pointed at the other two. The message names the file so an operator
42
- * always has a way out, and `--abort` now clears a corrupt session rather than
40
+ * reports {@link RebaseSessionExistsError} — a closed cycle in which each
41
+ * command points at the other two. The message names the file so an operator
42
+ * always has a way out, and `--abort` clears a corrupt session rather than
43
43
  * refusing to run against one.
44
44
  */
45
45
  export class CorruptRebaseSessionError extends RebaseError {
@@ -8,9 +8,15 @@
8
8
  * but may change between minor versions until 1.0 is released. Pin to an
9
9
  * exact version if you depend on the programmatic API.
10
10
  *
11
+ * **What belongs here:** a type earns a place on this surface only if it is
12
+ * reachable from the signature of an exported VALUE — i.e. a consumer needs
13
+ * it to name an argument or a return. Everything else stays internal to
14
+ * `src/types/`.
15
+ *
11
16
  * @packageDocumentation
12
17
  */
13
18
  export { loadConfig, validateConfig } from './core/config.js';
19
+ export type { ApplyAllComponentsResult } from './core/furnace-apply.js';
14
20
  export { applyAllComponents } from './core/furnace-apply.js';
15
21
  export { ensureFurnaceConfig, loadFurnaceConfig, loadFurnaceState, saveFurnaceState, validateFurnaceConfig, } from './core/furnace-config.js';
16
22
  export { validateAllComponents, validateComponent } from './core/furnace-validate.js';
@@ -20,4 +26,4 @@ export type { AddTokenOptions, AddTokenResult, TokenMode } from './core/token-ma
20
26
  export { addToken, getTokensCssPath, validateTokenAdd } from './core/token-manager.js';
21
27
  export { CancellationError, CommandError, FireForgeError, GeneralError, InvalidArgumentError, ResolutionError, } from './errors/base.js';
22
28
  export { ExitCode } from './errors/codes.js';
23
- export type { ApplyResult, BuildConfig, BuildMode, BuildOptions, ComponentType, CustomComponentConfig, DiscardOptions, DoctorCheck, DownloadOptions, DryRunAction, ExportOptions, FireForgeConfig, FireForgeState, FirefoxConfig, FirefoxProduct, FurnaceConfig, FurnaceCreateOptions, FurnaceOverrideOptions, FurnaceRemoveOptions, FurnaceState, GlobalOptions, ImportOptions, ImportSummary, OverrideComponentConfig, OverrideType, PackageOptions, PatchCategory, PatchesManifest, PatchInfo, PatchLintIssue, PatchMetadata, PatchResult, ProjectLicense, ProjectPaths, ProjectStatus, ReExportOptions, RegistrationStatus, ResetOptions, RunOptions, ScannedComponent, SetupOptions, StepError, SyncResult, TestOptions, TokenCoverageFileEntry, TokenCoverageReport, ValidationIssue, WireConfig, } from './types/index.js';
29
+ export type { ApplyResult, BuildConfig, ComponentType, CustomComponentConfig, DryRunAction, FireForgeConfig, FirefoxConfig, FirefoxProduct, FurnaceConfig, FurnaceState, OverrideComponentConfig, OverrideType, ProjectLicense, StepError, ValidationIssue, WireConfig, } from './types/index.js';
package/dist/src/index.js CHANGED
@@ -9,6 +9,11 @@
9
9
  * but may change between minor versions until 1.0 is released. Pin to an
10
10
  * exact version if you depend on the programmatic API.
11
11
  *
12
+ * **What belongs here:** a type earns a place on this surface only if it is
13
+ * reachable from the signature of an exported VALUE — i.e. a consumer needs
14
+ * it to name an argument or a return. Everything else stays internal to
15
+ * `src/types/`.
16
+ *
12
17
  * @packageDocumentation
13
18
  */
14
19
  export { loadConfig, validateConfig } from './core/config.js';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Re-exports all command-related types from focused sub-modules.
3
3
  */
4
- export type { BuildOptions, DiscardOptions, DoctorOptions, DownloadOptions, ExportOptions, FurnaceApplyOptions, FurnaceCreateOptions, FurnaceDeployOptions, FurnaceOverrideOptions, FurnacePreviewOptions, FurnaceRefreshOptions, FurnaceRemoveOptions, FurnaceSyncOptions, FurnaceValidateOptions, GlobalOptions, ImportOptions, LintCommandOptions, PackageOptions, PatchCompactOptions, PatchDeleteOptions, PatchLintIgnoreOptions, PatchMoveFilesOptions, PatchRenameOptions, PatchReorderOptions, PatchSplitOptions, PatchStagedDependencyOptions, PatchTierOptions, RebaseOptions, ReExportOptions, RegisterOptions, ResetOptions, RunOptions, SetupOptions, SourceSetOptions, StatusOptions, TestOptions, TokenAddOptions, WireOptions, } from './options.js';
4
+ export type { BuildOptions, DiscardOptions, DoctorOptions, DownloadOptions, ExportOptions, FurnaceApplyOptions, FurnaceCreateOptions, FurnaceDeployOptions, FurnaceOverrideOptions, FurnacePreviewOptions, FurnaceRefreshOptions, FurnaceRemoveOptions, FurnaceSyncOptions, FurnaceValidateOptions, ImportOptions, LintCommandOptions, PackageOptions, PatchCompactOptions, PatchDeleteOptions, PatchLintIgnoreOptions, PatchMoveFilesOptions, PatchRenameOptions, PatchReorderOptions, PatchSplitOptions, PatchStagedDependencyOptions, PatchTierOptions, RebaseOptions, ReExportOptions, RegisterOptions, ResetOptions, RunOptions, SetupOptions, SourceSetOptions, StatusOptions, TestOptions, TokenAddOptions, WireOptions, } from './options.js';
5
5
  export type { ImportSummary, PatchCategory, PatchesManifest, PatchInfo, PatchLintIssue, PatchMetadata, PatchResult, PatchStagedDependencies, PatchStagedForwardImport, PatchStagedRegistration, } from './patches.js';
6
- export type { DoctorCheck, ProjectStatus, TokenCoverageFileEntry, TokenCoverageReport, } from './project.js';
6
+ export type { DoctorCheck, TokenCoverageFileEntry, TokenCoverageReport } from './project.js';