@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
@@ -68,8 +68,8 @@ export interface BuildOptions {
68
68
  rewriteMozinfo?: boolean;
69
69
  /**
70
70
  * Refuse the build (rather than warn) when it would overwrite engine
71
- * content recorded in neither a patch body nor the pristine baseline
72
- *. The default is a loud warning, because an interactive
71
+ * content recorded in neither a patch body nor the pristine baseline.
72
+ * The default is a loud warning, because an interactive
73
73
  * operator often means to discard the drift; a scripted gate on a
74
74
  * multi-session checkout wants the hard stop.
75
75
  */
@@ -170,8 +170,7 @@ export interface ResetOptions {
170
170
  export interface DiscardOptions {
171
171
  /**
172
172
  * Restore to pristine upstream (HEAD) instead of the patch-applied
173
- * baseline; deletes patch-created files (the pre-0.39.0 semantics —
174
- *).
173
+ * baseline, deleting patch-created files.
175
174
  */
176
175
  toUpstream?: boolean;
177
176
  /** Show what would be discarded without doing it */
@@ -190,6 +189,11 @@ export interface PackageOptions {
190
189
  * Options for the import command.
191
190
  */
192
191
  export interface ImportOptions {
192
+ /**
193
+ * Answer the engine-drift prompt non-interactively. Unlike `force`,
194
+ * this does NOT waive the patch-integrity gate.
195
+ */
196
+ yes?: boolean;
193
197
  /** Specific patches to apply (by name) */
194
198
  patches?: string[];
195
199
  /** Continue applying patches even if one fails */
@@ -272,13 +276,10 @@ export interface ReExportOptions {
272
276
  */
273
277
  tier?: 'branding';
274
278
  /**
275
- * Lint check IDs to suppress, **appended** (union) to the patch's
276
- * existing `lintIgnore` list. De-duplicated. Mutually exclusive with
277
- * `--all`. To remove an entry or clear the list entirely, use the
278
- * `fireforge patch lint-ignore` subcommand (which has explicit
279
- * `--add` / `--remove` / `--clear` modes); re-export's append-only
280
- * semantics match the operator's most common intent ("I want this
281
- * patch to also suppress X").
279
+ * Lint check IDs to suppress, **appended** (union) to the patch's existing
280
+ * `lintIgnore` list. De-duplicated. Mutually exclusive with `--all`. To
281
+ * remove an entry or clear the list, use `fireforge patch lint-ignore`,
282
+ * which has explicit `--add` / `--remove` / `--clear` modes.
282
283
  */
283
284
  lintIgnore?: string[];
284
285
  /**
@@ -298,10 +299,9 @@ export interface ReExportOptions {
298
299
  */
299
300
  refuseAdjacentUnmanaged?: boolean;
300
301
  /**
301
- * Bypass per-patch lint result cache reads AND writes for this
302
- * invocation (`--no-cache`). The cache is what makes a repeat
303
- * re-export of an unchanged patch skip the checkJs program build
304
- * entirely.
302
+ * Bypass per-patch lint result cache reads AND writes for this invocation
303
+ * (`--no-cache`). The cache is what lets a repeat re-export of an unchanged
304
+ * patch skip the checkJs program build entirely.
305
305
  */
306
306
  noCache?: boolean;
307
307
  /**
@@ -317,9 +317,9 @@ export interface ReExportOptions {
317
317
  * Engine-relative files whose drift is EXPECTED (`--expect`, repeatable;
318
318
  * requires `--refuse-foreign-drift`). The content-based drift detector
319
319
  * cannot tell the exporting session's own slice edits from another
320
- * session's, so a real slice export under the refusal flag
321
- * names its intended files here: drift confined to expected files
322
- * proceeds, drift anywhere else still refuses.
320
+ * session's, so a slice export under the refusal flag names its intended
321
+ * files here: drift confined to expected files proceeds, drift anywhere
322
+ * else still refuses.
323
323
  */
324
324
  expect?: string[];
325
325
  }
@@ -329,6 +329,11 @@ export interface ReExportOptions {
329
329
  * `.patch` file body — the manifest is the only thing that changes.
330
330
  */
331
331
  export interface PatchTierOptions {
332
+ /**
333
+ * Seconds to wait for the patch directory lock. This command mutates patch
334
+ * metadata under that lock.
335
+ */
336
+ waitLock?: number | boolean;
332
337
  /** Force the named tier on the patch. Only `"branding"` is recognised. */
333
338
  tier?: 'branding';
334
339
  /** Remove the `tier` override entirely, restoring auto-detection. */
@@ -344,6 +349,11 @@ export interface PatchTierOptions {
344
349
  * be set per invocation.
345
350
  */
346
351
  export interface PatchLintIgnoreOptions {
352
+ /**
353
+ * Seconds to wait for the patch directory lock. This command mutates patch
354
+ * metadata under that lock.
355
+ */
356
+ waitLock?: number | boolean;
347
357
  /** Lint check IDs to add to the patch's `lintIgnore` list (union, de-duped). */
348
358
  add?: string[];
349
359
  /** Lint check IDs to remove from the patch's `lintIgnore` list. */
@@ -361,6 +371,11 @@ export interface PatchLintIgnoreOptions {
361
371
  * declarations, or clear all staged dependencies from the patch.
362
372
  */
363
373
  export interface PatchStagedDependencyOptions {
374
+ /**
375
+ * Seconds to wait for the patch directory lock. This command mutates patch
376
+ * metadata under that lock.
377
+ */
378
+ waitLock?: number | boolean;
364
379
  /** Add a staged dependency declaration. */
365
380
  add?: boolean;
366
381
  /** Remove matching staged dependency declarations. */
@@ -455,6 +470,11 @@ export interface PatchMoveFilesOptions {
455
470
  * Options for the rebase command.
456
471
  */
457
472
  export interface RebaseOptions {
473
+ /**
474
+ * Seconds to wait for the patch directory lock. The rebase loop rewrites
475
+ * patch bodies under that lock.
476
+ */
477
+ waitLock?: number | boolean;
458
478
  /** Resume a previously interrupted rebase session */
459
479
  continue?: boolean;
460
480
  /** Cancel the current rebase session and restore engine */
@@ -525,20 +545,29 @@ export interface TestOptions {
525
545
  * Run the scoped pre-test build (packaging exactly the requested paths,
526
546
  * MIXED harnesses allowed) and exit without dispatching tests. One
527
547
  * ~10-minute build then covers both an xpcshell and a browser-chrome
528
- * half of a slice; run each harness afterwards without `--build`
529
- *. Emits `FIREFORGE-VERDICT: PASS` on success.
548
+ * half of a slice; run each harness afterwards without `--build`.
549
+ * Emits `FIREFORGE-VERDICT: PASS` on success.
530
550
  */
531
551
  buildOnly?: boolean;
532
552
  /**
533
553
  * Union the paths this build packages onto the recorded coverage claim
534
- * instead of REPLACING it, so successive scoped builds
535
- * accumulate and an earlier slice's build-less runs stay covered. Valid
536
- * only with `--build`/`--build-only` and explicit paths. Refused
537
- * fail-closed unless the build anchor is unchanged: same engine HEAD,
538
- * same `engine/mozconfig`, and every previously fingerprinted packageable
539
- * file byte-identical. See `src/core/coverage-extend.ts`.
554
+ * instead of REPLACING it, so successive scoped builds accumulate and an
555
+ * earlier slice's build-less runs stay covered. Valid only with
556
+ * `--build`/`--build-only` and explicit paths. Refused fail-closed unless
557
+ * the build anchor is unchanged: same engine HEAD, same `engine/mozconfig`,
558
+ * and every previously fingerprinted packageable file byte-identical. See
559
+ * `src/core/coverage-extend.ts`.
540
560
  */
541
561
  extendCoverage?: boolean;
562
+ /**
563
+ * Forwarded to the PRE-TEST build: refuse (rather than warn) when that
564
+ * build would overwrite engine content recorded in neither a patch body
565
+ * nor the pristine baseline. Same meaning as `fireforge build`'s flag of
566
+ * the same name — a scripted `test --build` is exactly the shape the
567
+ * multi-session hazard shows up in, and until now it was the one shape
568
+ * that could not arm the refusal. Valid only with `--build`/`--build-only`.
569
+ */
570
+ refuseUnexportedDrift?: boolean;
542
571
  /** Forward mach's pathless auto-selection mode. Valid only with no explicit paths. */
543
572
  auto?: boolean;
544
573
  /**
@@ -591,7 +620,7 @@ export interface TestOptions {
591
620
  * single-suite run auto-selects. Escape hatch for the rare case where a
592
621
  * suite-specific command misbehaves; on a healthy host the generic command
593
622
  * is equivalent. The default (auto suite dispatch) skips the mozlog
594
- * resource monitor that crashes `mach test` on a broken host (E1).
623
+ * resource monitor that crashes `mach test` on a broken host.
595
624
  */
596
625
  genericMachTest?: boolean;
597
626
  /**
@@ -804,13 +833,11 @@ export interface PatchDeleteOptions {
804
833
  waitLock?: number | boolean;
805
834
  }
806
835
  /**
807
- * Options for the `fireforge patch rename` subcommand. Updates the
808
- * patch's filename, manifest `name`, and (optionally) `description`
809
- * atomically without rewriting the `.patch` file body. Companion to
810
- * `re-export --files` for the case where the body is already correct
811
- * but the patch's identity (filename + description) describes a
812
- * pre-shrink scope; before this verb existed the only workaround was
813
- * `delete` + re-export, which briefly dropped the patch from the queue.
836
+ * Options for the `fireforge patch rename` subcommand. Updates the patch's
837
+ * filename, manifest `name`, and (optionally) `description` atomically
838
+ * without rewriting the `.patch` file body. Companion to `re-export --files`
839
+ * for the case where the body is already correct but the patch's identity
840
+ * describes a pre-shrink scope.
814
841
  */
815
842
  export interface PatchRenameOptions {
816
843
  /**
@@ -915,9 +942,9 @@ export interface StatusOptions {
915
942
  * `ownership` block — the flat path→owning-patch rows plus
916
943
  * managed/unmanaged/conflict counts — so a gate reads ownership,
917
944
  * classification, and the check verdict from ONE scan instead of three
918
- * back-to-back `status` invocations. A modifier, not a mode:
919
- * exit semantics are unchanged, so ownership conflicts still fail only
920
- * the human `--ownership` mode. Refused without `--json`.
945
+ * back-to-back `status` invocations. A modifier, not a mode: exit
946
+ * semantics are unchanged, so ownership conflicts still fail only the
947
+ * human `--ownership` mode. Refused without `--json`.
921
948
  */
922
949
  includeOwnership?: boolean;
923
950
  /**
@@ -955,6 +982,11 @@ export interface TokenAddOptions {
955
982
  * Options for the doctor command.
956
983
  */
957
984
  export interface DoctorOptions {
985
+ /**
986
+ * Seconds to wait for the patch directory lock. This command can mutate
987
+ * the patch manifest under that lock.
988
+ */
989
+ waitLock?: number | boolean;
958
990
  repairPatchesManifest?: boolean;
959
991
  /**
960
992
  * Clear a stale `pendingResolution` marker, but only after the same
@@ -976,13 +1008,6 @@ export interface DoctorOptions {
976
1008
  /** Run extra post-rebase checks for common Firefox registration surfaces. */
977
1009
  postRebaseAudit?: boolean;
978
1010
  }
979
- /**
980
- * Global CLI options available to all commands.
981
- */
982
- export interface GlobalOptions {
983
- /** Enable verbose/debug output */
984
- verbose?: boolean;
985
- }
986
1011
  /** Options controlling how the lint command filters and tags its output. */
987
1012
  export interface LintCommandOptions {
988
1013
  /**
@@ -995,38 +1020,31 @@ export interface LintCommandOptions {
995
1020
  since?: string;
996
1021
  /**
997
1022
  * When set together with {@link since}, scope the exit code to issues
998
- * tagged `introduced`. Cumulative pre-existing errors still print (so
999
- * the operator can still see the full queue state) but do not fail
1000
- * lint. Motivating case: a branch whose diff is clean but whose repo
1001
- * already carries unrelated `raw-color` / license-header errors from
1002
- * older patches. Without this flag, CI treats the clean branch as
1003
- * failing; with it, a branch "breaks the build" only when its own diff
1004
- * introduced a new error.
1023
+ * tagged `introduced`. Cumulative pre-existing errors still print, so the
1024
+ * operator sees the full queue state, but do not fail lint. This is for a
1025
+ * branch whose own diff is clean but whose repo carries unrelated
1026
+ * `raw-color` / license-header errors from older patches.
1005
1027
  *
1006
- * Requires {@link since}: without a revision to diff against there is
1007
- * no distinction between introduced and cumulative, so the flag is
1008
- * rejected up-front rather than silently ignored.
1028
+ * Requires {@link since}: without a revision to diff against there is no
1029
+ * distinction between introduced and cumulative, so the flag is rejected
1030
+ * up-front rather than silently ignored.
1009
1031
  */
1010
1032
  onlyIntroduced?: boolean;
1011
1033
  /**
1012
- * Lint each patch in the queue as its own isolated diff, rather than
1013
- * the aggregate `git diff HEAD` across all applied patches.
1034
+ * Lint each patch in the queue as its own isolated diff, rather than the
1035
+ * aggregate `git diff HEAD` across all applied patches.
1014
1036
  *
1015
- * Motivating case: running `fireforge lint` (no args) on a repo where
1016
- * `fireforge import` or `fireforge rebase` has just applied the full
1017
- * patch queue produces an aggregate diff (every patch's changes
1018
- * summed). The patch-size advisory rules (`large-patch-lines`,
1019
- * `large-patch-files`) then fire against the sum — e.g. "Patch is
1020
- * 37529 lines" on a queue of 22 individually-fine patches — which
1021
- * reads as a task-specific regression when it is really an artefact
1022
- * of the aggregation. `--per-patch` rescopes the diff to each patch's
1023
- * own `filesAffected`, honours the patch's own `lintIgnore`, and runs
1024
- * the cross-patch rules once over the whole queue so queue-level
1025
- * findings (duplicate creations, forward imports) still surface.
1037
+ * On a repo where `import` or `rebase` has just applied the full queue,
1038
+ * the aggregate diff sums every patch's changes, and the patch-size
1039
+ * advisory rules (`large-patch-lines`, `large-patch-files`) fire against
1040
+ * that sum — "Patch is 37529 lines" for a queue of individually-fine
1041
+ * patches. `--per-patch` rescopes the diff to each patch's own
1042
+ * `filesAffected`, honours the patch's own `lintIgnore`, and runs the
1043
+ * cross-patch rules once over the whole queue so queue-level findings
1044
+ * still surface.
1026
1045
  *
1027
- * Positional file arguments change meaning under this flag: they are
1028
- * PATCH selectors resolved like {@link patches} entries, not engine
1029
- * file paths.
1046
+ * Positional file arguments change meaning under this flag: they are PATCH
1047
+ * selectors resolved like {@link patches} entries, not engine file paths.
1030
1048
  */
1031
1049
  perPatch?: boolean;
1032
1050
  /**
@@ -68,49 +68,39 @@ export interface PatchMetadata {
68
68
  /** Array of file paths affected by this patch */
69
69
  filesAffected: string[];
70
70
  /**
71
- * Optional per-patch list of lint check IDs to suppress when this patch
72
- * is the target of `export`, `export-all`, or `re-export`. Exists for
73
- * the class of patch that is advisory-noisy by nature — a cohesive
74
- * branding bundle, a localised-resource pack, an auto-generated
75
- * manifest — where the generic `large-patch-lines` / `large-patch-files`
76
- * thresholds do not apply but `--skip-lint` (which silences *all*
77
- * errors, not just the one that does not apply) is too coarse a hammer.
71
+ * Optional per-patch list of lint check IDs to suppress when this patch is
72
+ * the target of `export`, `export-all`, or `re-export`. Exists for the
73
+ * class of patch that is advisory-noisy by nature — a cohesive branding
74
+ * bundle, a localised-resource pack, an auto-generated manifest — where
75
+ * the generic `large-patch-lines` / `large-patch-files` thresholds do not
76
+ * apply but `--skip-lint`, which silences every error rather than the one
77
+ * that does not apply, is too coarse.
78
78
  *
79
- * Previously the only escape hatches were `--skip-lint` (blunt) or the
80
- * full `rebase` flow (refreshes the same patch through a code path that
81
- * silently skips `runPatchLint` — an asymmetry that forced operators
82
- * through a multi-minute Firefox source re-download just to refresh
83
- * one patch body).
84
- *
85
- * Values are free-form check IDs (e.g. `"large-patch-lines"`,
86
- * `"large-patch-files"`). Checks not listed here still run normally.
87
- * An entry for an unknown check ID is a no-op — the patch metadata
88
- * documents the *intent* to suppress even if the check is later
89
- * renamed or removed.
79
+ * Values are free-form check IDs (e.g. `"large-patch-lines"`). Checks not
80
+ * listed here still run normally. An entry for an unknown check ID is a
81
+ * no-op — the metadata documents the intent to suppress even if the check
82
+ * is later renamed or removed.
90
83
  */
91
84
  lintIgnore?: string[];
92
85
  /**
93
86
  * Optional per-patch threshold-tier override for the `large-patch-lines`
94
87
  * rule. Exists for branding patches that must touch a small number of
95
88
  * cross-cutting registration files alongside `browser/branding/<name>/`
96
- * (notably `browser/moz.configure` to register the new branding flavor
97
- * with the top-level configure). The narrow auto-detect allowlist in
98
- * `isBrandingOnlyPatch` covers the canonical shape, but a fork whose
99
- * branding patch also touches an unlisted sibling (for example a
100
- * `browser/themes/<name>/` override or a vendor-specific icon
101
- * resource) falls through to the general tier and trips the hard
102
- * limit on what is legitimately one branding diff.
89
+ * (notably `browser/moz.configure`, which registers the new branding
90
+ * flavor with the top-level configure). The narrow auto-detect allowlist
91
+ * in `isBrandingOnlyPatch` covers the canonical shape; a fork whose
92
+ * branding patch also touches an unlisted sibling falls through to the
93
+ * general tier and trips the hard limit on what is legitimately one
94
+ * branding diff.
103
95
  *
104
- * Declaring `tier: "branding"` here forces the branding thresholds
105
- * (notice 8000 / warning 18000 / error 30000 lines, ≤60 files)
106
- * regardless of `filesAffected`. The tier is the weaker claim than
107
- * test — a patch of all-tests still lands in the test tier even if
108
- * this field is set, because the test-tier thresholds are already
109
- * more permissive and a test that is also branding-shaped is
110
- * vanishingly rare.
96
+ * Declaring `tier: "branding"` forces the branding thresholds (notice
97
+ * 8000 / warning 18000 / error 30000 lines, ≤60 files) regardless of
98
+ * `filesAffected`. It is the weaker claim than test: an all-tests patch
99
+ * stays in the test tier even with this set, because those thresholds are
100
+ * already more permissive.
111
101
  *
112
- * Only `"branding"` is currently recognised. Unknown values are
113
- * rejected by the manifest validator, not silently stripped.
102
+ * Only `"branding"` is recognised. Unknown values are rejected by the
103
+ * manifest validator, not silently stripped.
114
104
  */
115
105
  tier?: 'branding';
116
106
  /**
@@ -4,47 +4,18 @@
4
4
  /**
5
5
  * Result of a doctor check.
6
6
  *
7
- * Field precedence (consumers and producers must agree):
8
- * 1. `severity`, when present, is authoritative — `'error'` counts as a
9
- * failure and `'warning'` as a warning REGARDLESS of `passed`.
10
- * 2. Without `severity`, `passed: false` is a failure unless
11
- * `warning: true` downgrades it to a warning.
12
- * Producers should prefer setting `severity` explicitly; `warning` exists
13
- * for older checks that predate the field. Do not emit contradictory
14
- * combinations like `passed: true, severity: 'error'`.
7
+ * `severity` is the single source of truth; consumers that want a boolean
8
+ * derive it as `severity !== 'error'`.
15
9
  */
16
10
  export interface DoctorCheck {
17
11
  /** Name of the check */
18
12
  name: string;
19
- /** Whether the check passed */
20
- passed: boolean;
21
- /** Severity of the result (authoritative when present — see above) */
22
- severity?: 'ok' | 'warning' | 'error';
13
+ /** Outcome of the check. Authoritative and required. */
14
+ severity: 'ok' | 'warning' | 'error';
23
15
  /** Description of the result */
24
16
  message: string;
25
- /** Suggested fix if check failed */
17
+ /** Suggested fix when the check did not pass */
26
18
  fix?: string;
27
- /** Legacy warning flag for checks that predate `severity` */
28
- warning?: boolean;
29
- }
30
- /**
31
- * Status of the project.
32
- */
33
- export interface ProjectStatus {
34
- /** Whether fireforge.json exists */
35
- hasConfig: boolean;
36
- /** Whether engine/ exists */
37
- hasEngine: boolean;
38
- /** Whether patches/ exists */
39
- hasPatches: boolean;
40
- /** Number of patch files */
41
- patchCount: number;
42
- /** Whether build output exists */
43
- hasBuild: boolean;
44
- /** Firefox version from config */
45
- firefoxVersion?: string;
46
- /** Downloaded Firefox version */
47
- downloadedVersion?: string;
48
19
  }
49
20
  /**
50
21
  * Per-file token coverage breakdown.
@@ -182,11 +182,10 @@ export interface TypecheckConfig {
182
182
  */
183
183
  projectOverrides?: Record<string, string | null>;
184
184
  /**
185
- * How to report undefined free identifiers (TS2304/TS2552). These were
186
- * historically suppressed as shim-gap noise, which also hid genuine
187
- * missing imports until they crashed at runtime. Default
188
- * `'warning'`: visible without failing the gate. `'error'` makes them
189
- * blocking; `'off'` restores the historical suppression.
185
+ * How to report undefined free identifiers (TS2304/TS2552). Default
186
+ * `'warning'`: visible without failing the gate, since shim gaps produce
187
+ * the same diagnostic as a genuine missing import. `'error'` makes them
188
+ * blocking; `'off'` suppresses them.
190
189
  */
191
190
  undefinedIdentifiers?: PatchLintSeverityGate;
192
191
  }
@@ -235,9 +234,9 @@ export interface PatchLintConfig {
235
234
  checkJs?: boolean;
236
235
  /**
237
236
  * When true with `checkJs: true`, run checkJs with `strict` and
238
- * `noImplicitAny` enabled (CI-style). Default false preserves the
239
- * historical loose preset. Optional {@link checkJsCompilerOptions}
240
- * can relax individual strict flags (e.g. `strictNullChecks: false`).
237
+ * `noImplicitAny` enabled (CI-style). Default false uses the loose preset.
238
+ * Optional {@link checkJsCompilerOptions} can relax individual strict
239
+ * flags (e.g. `strictNullChecks: false`).
241
240
  */
242
241
  checkJsStrict?: boolean;
243
242
  /**
@@ -249,27 +248,26 @@ export interface PatchLintConfig {
249
248
  * Project-relative path to an additional `.d.ts` file whose contents
250
249
  * are concatenated to the built-in `FIREFOX_GLOBALS_SHIM` for the
251
250
  * `patchLint.checkJs` pass. Same semantics as `typecheck.extraShim`
252
- * but scoped to the patch-hygiene flow. Default unset = current
253
- * behaviour (built-in shim only).
251
+ * but scoped to the patch-hygiene flow. Default unset: built-in shim only.
254
252
  */
255
253
  checkJsExtraShim?: string;
256
254
  /**
257
255
  * Extend the checkJs pass to patch-owned test `.js` files
258
256
  * (`browser_*` / `test_*` / `xpcshell_*` basenames and files under a
259
- * `/test/` path), each checked as its own small script-scope program
260
- * with same-directory patch-owned `head*.js` helpers included (FORGE
261
- * G5 — a harness global that does not exist should fail at the patch
262
- * boundary where the test was authored, not in a downstream
263
- * jsconfig-project run). Opt-in: it is a new failure surface with
264
- * nonzero compile cost. Requires `checkJs: true`.
257
+ * `/test/` path), each checked as its own small script-scope program with
258
+ * same-directory patch-owned `head*.js` helpers included, so a call to a
259
+ * harness global that does not exist fails at the patch boundary where the
260
+ * test was authored rather than in a downstream jsconfig-project run.
261
+ * Opt-in: it is a new failure surface with nonzero compile cost. Requires
262
+ * `checkJs: true`.
265
263
  */
266
264
  checkJsTestFiles?: boolean;
267
265
  /**
268
266
  * Project-relative `.d.ts` appended to the built-in test-harness shim
269
267
  * (loose `TestUtils`/`BrowserTestUtils`/`add_task`/… declarations) for
270
- * the `checkJsTestFiles` pass — a consumer-typed `TestUtils` here is
271
- * what turns a call to a nonexistent harness member into a TS2339 at
272
- * export time. Requires `checkJsTestFiles: true`.
268
+ * the `checkJsTestFiles` pass. A consumer-typed `TestUtils` here is what
269
+ * turns a call to a nonexistent harness member into a TS2339 at export
270
+ * time. Requires `checkJsTestFiles: true`.
273
271
  */
274
272
  checkJsTestShim?: string;
275
273
  /** File paths exempt from the raw-color-value check (exact or basename match) */
@@ -291,16 +289,20 @@ export interface PatchLintConfig {
291
289
  chromeScriptJsDoc?: PatchLintSeverityGate;
292
290
  /**
293
291
  * How the checkJs pass reports undefined free identifiers
294
- * (TS2304/TS2552). Same semantics as `typecheck.undefinedIdentifiers`
295
- *; the two flows share the suppression policy so a patch
292
+ * (TS2304/TS2552). Same semantics as `typecheck.undefinedIdentifiers`;
293
+ * the two flows share the suppression policy so a patch
296
294
  * cannot pass one and fail the other. Default: 'warning'.
297
295
  */
298
296
  undefinedIdentifiers?: PatchLintSeverityGate;
299
297
  }
300
298
  /**
301
- * Build mode for mach.
299
+ * Build modes for mach.
300
+ *
301
+ * Derived from the list so the runtime allowlist cannot drift from the type.
302
302
  */
303
- export type BuildMode = 'dev' | 'debug' | 'release';
303
+ export declare const BUILD_MODES: readonly ["dev", "debug", "release"];
304
+ /** Build mode for mach. */
305
+ export type BuildMode = (typeof BUILD_MODES)[number];
304
306
  /**
305
307
  * Runtime state stored in .fireforge/state.json.
306
308
  */
@@ -1 +1,6 @@
1
- export {};
1
+ /**
2
+ * Build modes for mach.
3
+ *
4
+ * Derived from the list so the runtime allowlist cannot drift from the type.
5
+ */
6
+ export const BUILD_MODES = ['dev', 'debug', 'release'];
@@ -117,11 +117,10 @@ export interface FurnaceConfig {
117
117
  tokenAllowlist?: string[];
118
118
  /**
119
119
  * CSS custom-property prefixes that identify upstream / platform
120
- * variables the fork does not own. `token coverage` counts matches
121
- * as `allowlisted` rather than `unknown` so a copied upstream
122
- * baseline doesn't drag fork-owned coverage percentages down.
123
- * Defaults to `['--moz-']` when unset. Pass an explicit empty array
124
- * to restore the pre-0.18.0 strict contract.
120
+ * variables the fork does not own. `token coverage` counts matches as
121
+ * `allowlisted` rather than `unknown` so a copied upstream baseline does
122
+ * not drag fork-owned coverage percentages down. Defaults to `['--moz-']`
123
+ * when unset; pass an explicit empty array to count every prefix.
125
124
  */
126
125
  platformPrefixes?: string[];
127
126
  /**
@@ -176,7 +175,13 @@ export interface FurnaceConfig {
176
175
  * state before clearing authoring markers. The string is surfaced in doctor's
177
176
  * failure message verbatim, so new entries should be self-explanatory.
178
177
  */
179
- export type FurnacePendingRepairOperation = 'preview-teardown' | 'apply-rollback' | 'deploy-rollback' | 'remove-rollback' | 'create-rollback' | 'override-rollback' | 'scan-rollback' | 'rename-rollback' | 'refresh-rollback' | 'chrome-doc-rollback';
178
+ export declare const FURNACE_PENDING_REPAIR_OPERATIONS: readonly ["preview-teardown", "apply-rollback", "deploy-rollback", "remove-rollback", "create-rollback", "override-rollback", "scan-rollback", "rename-rollback", "refresh-rollback", "chrome-doc-rollback"];
179
+ /**
180
+ * Operations that can leave a pending-repair marker when they fail to roll
181
+ * back cleanly. Derived from the list above so the runtime allowlist in
182
+ * `furnace-config.ts` cannot drift from the union.
183
+ */
184
+ export type FurnacePendingRepairOperation = (typeof FURNACE_PENDING_REPAIR_OPERATIONS)[number];
180
185
  /**
181
186
  * Marker persisted into `.fireforge/furnace-state.json` when a furnace
182
187
  * mutation failed to roll back cleanly. Its presence tells the next
@@ -222,13 +227,10 @@ export interface StepError {
222
227
  step: string;
223
228
  error: string;
224
229
  /**
225
- * Advisory step errors are reported as warnings and never trigger
226
- * rollback or a non-zero exit. Used by the `.ftl` helpers, whose module
227
- * contract is graceful degradation: a missing locale jar.mn on a fork
228
- * without a locale package must not block a working `.mjs`/`.css` from
229
- * shipping. Before this flag existed the contract was contradicted in
230
- * practice — any FTL step error rolled back the entire apply, so a
231
- * localized component on such a fork could never be applied at all.
230
+ * Advisory step errors are reported as warnings and never trigger rollback
231
+ * or a non-zero exit. Used by the `.ftl` helpers, whose module contract is
232
+ * graceful degradation: a missing locale jar.mn on a fork without a locale
233
+ * package must not block a working `.mjs`/`.css` from shipping.
232
234
  */
233
235
  advisory?: boolean;
234
236
  }
@@ -318,3 +320,25 @@ export interface ValidationIssue {
318
320
  }
319
321
  /** Resolved test-harness selection for a `furnace create` run. */
320
322
  export type ResolvedTestStyle = 'mochikit' | 'browser-chrome' | 'xpcshell' | 'none';
323
+ /**
324
+ * The four paths and the name that every per-component apply, dry-run, FTL
325
+ * and drift helper needs some subset of.
326
+ *
327
+ * Passing these positionally is unsafe: they are all `string`, so any
328
+ * permutation typechecks against any other and a swap surfaces as a
329
+ * wrong-directory read at runtime. Helpers take
330
+ * `Pick<ComponentApplyContext, …>` of exactly the members they read, so a
331
+ * caller is never asked to invent a value it does not have.
332
+ */
333
+ export interface ComponentApplyContext {
334
+ /** Project root — what registration consistency resolves against. */
335
+ root: string;
336
+ /** Firefox source directory the component deploys into. */
337
+ engineDir: string;
338
+ /** Component name as it appears in `furnace.json`. */
339
+ name: string;
340
+ /** Absolute path to the component's authoring directory. */
341
+ componentDir: string;
342
+ /** Engine-relative locale directory holding the component's `.ftl`. */
343
+ ftlDir: string;
344
+ }
@@ -1 +1,19 @@
1
- export {};
1
+ /**
2
+ * Operations that can leave a pending-repair marker when they fail to roll
3
+ * back cleanly. The marker is consumed by `fireforge doctor`, which either
4
+ * re-runs apply for engine-side failures or validates the current authoring
5
+ * state before clearing authoring markers. The string is surfaced in doctor's
6
+ * failure message verbatim, so new entries should be self-explanatory.
7
+ */
8
+ export const FURNACE_PENDING_REPAIR_OPERATIONS = [
9
+ 'preview-teardown',
10
+ 'apply-rollback',
11
+ 'deploy-rollback',
12
+ 'remove-rollback',
13
+ 'create-rollback',
14
+ 'override-rollback',
15
+ 'scan-rollback',
16
+ 'rename-rollback',
17
+ 'refresh-rollback',
18
+ 'chrome-doc-rollback',
19
+ ];
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Re-exports all type definitions.
3
3
  */
4
- export type { BuildOptions, DiscardOptions, DoctorCheck, DownloadOptions, ExportOptions, FurnaceCreateOptions, FurnaceOverrideOptions, FurnaceRemoveOptions, GlobalOptions, ImportOptions, ImportSummary, PackageOptions, PatchCategory, PatchesManifest, PatchInfo, PatchLintIssue, PatchMetadata, PatchResult, ProjectStatus, ReExportOptions, ResetOptions, RunOptions, SetupOptions, TestOptions, TokenCoverageFileEntry, TokenCoverageReport, } from './commands/index.js';
5
- export type { BuildConfig, BuildMode, FireForgeConfig, FireForgeState, FirefoxConfig, FirefoxProduct, ProjectLicense, ProjectPaths, WireConfig, } from './config.js';
6
- export type { ApplyResult, ComponentType, CustomComponentConfig, DryRunAction, FurnaceConfig, FurnaceState, OverrideComponentConfig, OverrideType, RegistrationStatus, ScannedComponent, StepError, SyncResult, ValidationIssue, } from './furnace.js';
4
+ export type {} from './commands/index.js';
5
+ export type { BuildConfig, FireForgeConfig, FirefoxConfig, FirefoxProduct, ProjectLicense, ProjectPaths, WireConfig, } from './config.js';
6
+ export type { ApplyResult, ComponentType, CustomComponentConfig, DryRunAction, FurnaceConfig, FurnaceState, OverrideComponentConfig, OverrideType, StepError, ValidationIssue, } from './furnace.js';