@hominis/fireforge 0.45.0 → 0.46.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (662) hide show
  1. package/CHANGELOG.md +409 -446
  2. package/dist/bin/fireforge.d.ts +1 -1
  3. package/dist/bin/fireforge.js +21 -15
  4. package/dist/build-info.json +4 -4
  5. package/dist/src/cli-usage-error.d.ts +46 -0
  6. package/dist/src/cli-usage-error.js +81 -0
  7. package/dist/src/cli.d.ts +7 -2
  8. package/dist/src/cli.js +47 -47
  9. package/dist/src/commands/bootstrap-checks.js +2 -1
  10. package/dist/src/commands/bootstrap.js +3 -4
  11. package/dist/src/commands/build.js +27 -17
  12. package/dist/src/commands/config.js +9 -9
  13. package/dist/src/commands/destructive-decision.d.ts +19 -0
  14. package/dist/src/commands/destructive-decision.js +31 -0
  15. package/dist/src/commands/discard.js +5 -5
  16. package/dist/src/commands/doctor-check-core.d.ts +4 -10
  17. package/dist/src/commands/doctor-check-core.js +0 -8
  18. package/dist/src/commands/doctor-external-toolchains.js +2 -2
  19. package/dist/src/commands/doctor-furnace-config-sync.d.ts +2 -2
  20. package/dist/src/commands/doctor-furnace-config-sync.js +20 -20
  21. package/dist/src/commands/doctor-furnace-jar.d.ts +1 -1
  22. package/dist/src/commands/doctor-furnace-jar.js +1 -1
  23. package/dist/src/commands/doctor-furnace.js +22 -22
  24. package/dist/src/commands/doctor-orphaned-harness.d.ts +10 -17
  25. package/dist/src/commands/doctor-orphaned-harness.js +14 -23
  26. package/dist/src/commands/doctor-patch-manifest.d.ts +2 -1
  27. package/dist/src/commands/doctor-patch-manifest.js +7 -6
  28. package/dist/src/commands/doctor-post-rebase-audit.js +3 -3
  29. package/dist/src/commands/doctor-source-pin.d.ts +12 -12
  30. package/dist/src/commands/doctor-source-pin.js +14 -14
  31. package/dist/src/commands/doctor-working-tree.d.ts +3 -3
  32. package/dist/src/commands/doctor-working-tree.js +3 -3
  33. package/dist/src/commands/doctor.d.ts +3 -1
  34. package/dist/src/commands/doctor.js +15 -16
  35. package/dist/src/commands/download.js +50 -37
  36. package/dist/src/commands/export-all.js +29 -12
  37. package/dist/src/commands/export-flow.d.ts +5 -5
  38. package/dist/src/commands/export-flow.js +29 -59
  39. package/dist/src/commands/export-placement-conflicts.d.ts +3 -3
  40. package/dist/src/commands/export-placement-conflicts.js +12 -12
  41. package/dist/src/commands/export-placement-gate.d.ts +2 -2
  42. package/dist/src/commands/export-placement-gate.js +7 -13
  43. package/dist/src/commands/export-placement-policy.d.ts +1 -1
  44. package/dist/src/commands/export-placement-policy.js +4 -6
  45. package/dist/src/commands/export-shared.d.ts +51 -32
  46. package/dist/src/commands/export-shared.js +17 -32
  47. package/dist/src/commands/export.js +14 -5
  48. package/dist/src/commands/furnace/apply.js +16 -16
  49. package/dist/src/commands/furnace/authoring-config.d.ts +13 -0
  50. package/dist/src/commands/furnace/authoring-config.js +19 -0
  51. package/dist/src/commands/furnace/chrome-doc-remove.d.ts +1 -1
  52. package/dist/src/commands/furnace/chrome-doc-remove.js +2 -2
  53. package/dist/src/commands/furnace/chrome-doc-templates.d.ts +14 -14
  54. package/dist/src/commands/furnace/chrome-doc-templates.js +17 -17
  55. package/dist/src/commands/furnace/chrome-doc-tests.d.ts +2 -2
  56. package/dist/src/commands/furnace/chrome-doc-tests.js +4 -4
  57. package/dist/src/commands/furnace/chrome-doc.d.ts +8 -8
  58. package/dist/src/commands/furnace/chrome-doc.js +18 -18
  59. package/dist/src/commands/furnace/create-browser-test.d.ts +1 -1
  60. package/dist/src/commands/furnace/create-browser-test.js +7 -12
  61. package/dist/src/commands/furnace/create-dry-run.d.ts +4 -4
  62. package/dist/src/commands/furnace/create-dry-run.js +6 -9
  63. package/dist/src/commands/furnace/create-features.d.ts +2 -2
  64. package/dist/src/commands/furnace/create-features.js +2 -2
  65. package/dist/src/commands/furnace/create-mochikit.d.ts +4 -4
  66. package/dist/src/commands/furnace/create-mochikit.js +7 -7
  67. package/dist/src/commands/furnace/create-templates.d.ts +31 -15
  68. package/dist/src/commands/furnace/create-templates.js +20 -19
  69. package/dist/src/commands/furnace/create-xpcshell.d.ts +5 -5
  70. package/dist/src/commands/furnace/create-xpcshell.js +8 -8
  71. package/dist/src/commands/furnace/create.d.ts +1 -1
  72. package/dist/src/commands/furnace/create.js +35 -29
  73. package/dist/src/commands/furnace/deploy.js +15 -6
  74. package/dist/src/commands/furnace/diff.js +7 -7
  75. package/dist/src/commands/furnace/index.js +1 -1
  76. package/dist/src/commands/furnace/init.js +17 -16
  77. package/dist/src/commands/furnace/list.js +2 -2
  78. package/dist/src/commands/furnace/override.d.ts +1 -1
  79. package/dist/src/commands/furnace/override.js +43 -34
  80. package/dist/src/commands/furnace/preview.js +17 -17
  81. package/dist/src/commands/furnace/refresh.js +15 -7
  82. package/dist/src/commands/furnace/remove-mutations.d.ts +9 -10
  83. package/dist/src/commands/furnace/remove-mutations.js +19 -19
  84. package/dist/src/commands/furnace/remove-state.d.ts +1 -1
  85. package/dist/src/commands/furnace/remove-state.js +1 -1
  86. package/dist/src/commands/furnace/remove.js +4 -8
  87. package/dist/src/commands/furnace/rename-browser-test.js +10 -15
  88. package/dist/src/commands/furnace/rename-xpcshell.d.ts +2 -2
  89. package/dist/src/commands/furnace/rename-xpcshell.js +3 -3
  90. package/dist/src/commands/furnace/rename.js +36 -36
  91. package/dist/src/commands/furnace/scan.js +3 -3
  92. package/dist/src/commands/furnace/status.js +19 -16
  93. package/dist/src/commands/furnace/sync.js +6 -6
  94. package/dist/src/commands/furnace/test-file-name.d.ts +28 -0
  95. package/dist/src/commands/furnace/test-file-name.js +39 -0
  96. package/dist/src/commands/furnace/validate.js +11 -12
  97. package/dist/src/commands/furnace/validation-output.d.ts +21 -9
  98. package/dist/src/commands/furnace/validation-output.js +3 -8
  99. package/dist/src/commands/import.js +22 -29
  100. package/dist/src/commands/lint-per-patch.d.ts +2 -2
  101. package/dist/src/commands/lint-per-patch.js +27 -12
  102. package/dist/src/commands/lint-per-run-checkjs.d.ts +14 -15
  103. package/dist/src/commands/lint-per-run-checkjs.js +14 -15
  104. package/dist/src/commands/lint-report.d.ts +3 -3
  105. package/dist/src/commands/lint-report.js +4 -4
  106. package/dist/src/commands/lint.d.ts +5 -4
  107. package/dist/src/commands/lint.js +36 -36
  108. package/dist/src/commands/manifest.d.ts +4 -4
  109. package/dist/src/commands/manifest.js +1 -1
  110. package/dist/src/commands/package.js +4 -6
  111. package/dist/src/commands/patch/compact.d.ts +2 -2
  112. package/dist/src/commands/patch/compact.js +19 -20
  113. package/dist/src/commands/patch/delete.d.ts +1 -1
  114. package/dist/src/commands/patch/delete.js +23 -33
  115. package/dist/src/commands/patch/entry-projection.d.ts +13 -0
  116. package/dist/src/commands/patch/entry-projection.js +24 -0
  117. package/dist/src/commands/patch/lint-ignore.d.ts +3 -12
  118. package/dist/src/commands/patch/lint-ignore.js +33 -44
  119. package/dist/src/commands/patch/move-files-create.d.ts +2 -2
  120. package/dist/src/commands/patch/move-files-create.js +29 -15
  121. package/dist/src/commands/patch/move-files-into.d.ts +2 -2
  122. package/dist/src/commands/patch/move-files-into.js +41 -37
  123. package/dist/src/commands/patch/move-files.js +5 -14
  124. package/dist/src/commands/patch/patch-context.d.ts +1 -1
  125. package/dist/src/commands/patch/rename.d.ts +4 -4
  126. package/dist/src/commands/patch/rename.js +35 -49
  127. package/dist/src/commands/patch/reorder.js +35 -48
  128. package/dist/src/commands/patch/split-plan.d.ts +7 -8
  129. package/dist/src/commands/patch/split-plan.js +10 -13
  130. package/dist/src/commands/patch/split.d.ts +2 -2
  131. package/dist/src/commands/patch/split.js +50 -48
  132. package/dist/src/commands/patch/staged-dependency-validate.d.ts +1 -1
  133. package/dist/src/commands/patch/staged-dependency-validate.js +3 -3
  134. package/dist/src/commands/patch/staged-dependency.d.ts +1 -1
  135. package/dist/src/commands/patch/staged-dependency.js +22 -28
  136. package/dist/src/commands/patch/tier.d.ts +2 -2
  137. package/dist/src/commands/patch/tier.js +20 -30
  138. package/dist/src/commands/patch-rename-map.d.ts +19 -0
  139. package/dist/src/commands/patch-rename-map.js +36 -0
  140. package/dist/src/commands/pending-resolution.d.ts +15 -0
  141. package/dist/src/commands/pending-resolution.js +25 -0
  142. package/dist/src/commands/re-export-adjacent.d.ts +25 -3
  143. package/dist/src/commands/re-export-adjacent.js +40 -24
  144. package/dist/src/commands/re-export-bulk-scan.d.ts +3 -3
  145. package/dist/src/commands/re-export-bulk-scan.js +23 -27
  146. package/dist/src/commands/re-export-drift.d.ts +10 -10
  147. package/dist/src/commands/re-export-drift.js +33 -33
  148. package/dist/src/commands/re-export-files.d.ts +2 -3
  149. package/dist/src/commands/re-export-files.js +52 -44
  150. package/dist/src/commands/re-export-lint.d.ts +29 -30
  151. package/dist/src/commands/re-export-lint.js +36 -29
  152. package/dist/src/commands/re-export-options.d.ts +1 -1
  153. package/dist/src/commands/re-export-options.js +1 -1
  154. package/dist/src/commands/re-export-register.d.ts +1 -1
  155. package/dist/src/commands/re-export-register.js +1 -1
  156. package/dist/src/commands/re-export-scan.d.ts +1 -1
  157. package/dist/src/commands/re-export-scan.js +12 -9
  158. package/dist/src/commands/re-export-single.d.ts +23 -4
  159. package/dist/src/commands/re-export-single.js +39 -31
  160. package/dist/src/commands/re-export.js +35 -17
  161. package/dist/src/commands/rebase/abort.js +9 -14
  162. package/dist/src/commands/rebase/continue.js +20 -19
  163. package/dist/src/commands/rebase/index.d.ts +1 -1
  164. package/dist/src/commands/rebase/index.js +5 -5
  165. package/dist/src/commands/rebase/patch-loop.d.ts +2 -2
  166. package/dist/src/commands/rebase/patch-loop.js +20 -24
  167. package/dist/src/commands/register.js +5 -5
  168. package/dist/src/commands/reset.js +1 -1
  169. package/dist/src/commands/resolve.d.ts +2 -2
  170. package/dist/src/commands/resolve.js +21 -13
  171. package/dist/src/commands/run.d.ts +0 -13
  172. package/dist/src/commands/run.js +38 -51
  173. package/dist/src/commands/setup-support.d.ts +16 -4
  174. package/dist/src/commands/setup-support.js +20 -20
  175. package/dist/src/commands/setup.js +4 -10
  176. package/dist/src/commands/source.js +9 -2
  177. package/dist/src/commands/status-check.d.ts +3 -3
  178. package/dist/src/commands/status-check.js +6 -6
  179. package/dist/src/commands/status-json.d.ts +14 -13
  180. package/dist/src/commands/status-json.js +9 -8
  181. package/dist/src/commands/status-output.d.ts +3 -3
  182. package/dist/src/commands/status-output.js +5 -5
  183. package/dist/src/commands/status-ownership.d.ts +3 -3
  184. package/dist/src/commands/status-ownership.js +3 -3
  185. package/dist/src/commands/status.js +25 -26
  186. package/dist/src/commands/test-build-phase.d.ts +3 -3
  187. package/dist/src/commands/test-build-phase.js +48 -24
  188. package/dist/src/commands/test-diagnose.d.ts +1 -1
  189. package/dist/src/commands/test-diagnose.js +20 -20
  190. package/dist/src/commands/test-modes.d.ts +4 -4
  191. package/dist/src/commands/test-modes.js +4 -5
  192. package/dist/src/commands/test-register.js +5 -3
  193. package/dist/src/commands/test-run.d.ts +11 -11
  194. package/dist/src/commands/test-run.js +40 -33
  195. package/dist/src/commands/test-stale-gate.d.ts +12 -12
  196. package/dist/src/commands/test-stale-gate.js +17 -17
  197. package/dist/src/commands/test-verdict.d.ts +19 -5
  198. package/dist/src/commands/test-verdict.js +26 -11
  199. package/dist/src/commands/test.d.ts +3 -3
  200. package/dist/src/commands/test.js +73 -36
  201. package/dist/src/commands/token-coverage.js +3 -3
  202. package/dist/src/commands/token-list.d.ts +26 -0
  203. package/dist/src/commands/token-list.js +153 -0
  204. package/dist/src/commands/token.js +26 -10
  205. package/dist/src/commands/tree.js +26 -21
  206. package/dist/src/commands/typecheck.d.ts +6 -6
  207. package/dist/src/commands/typecheck.js +16 -16
  208. package/dist/src/commands/verify.d.ts +3 -3
  209. package/dist/src/commands/verify.js +10 -10
  210. package/dist/src/commands/watch.js +11 -11
  211. package/dist/src/commands/wire.js +17 -16
  212. package/dist/src/core/ast-utils.d.ts +7 -7
  213. package/dist/src/core/ast-utils.js +8 -8
  214. package/dist/src/core/branding.d.ts +5 -12
  215. package/dist/src/core/branding.js +6 -5
  216. package/dist/src/core/browser-wire.d.ts +1 -1
  217. package/dist/src/core/browser-wire.js +10 -7
  218. package/dist/src/core/build-audit-platform.d.ts +32 -3
  219. package/dist/src/core/build-audit-platform.js +153 -13
  220. package/dist/src/core/build-audit-registration.d.ts +5 -5
  221. package/dist/src/core/build-audit-registration.js +10 -9
  222. package/dist/src/core/build-audit-resolve.d.ts +5 -5
  223. package/dist/src/core/build-audit-resolve.js +6 -6
  224. package/dist/src/core/build-audit-skip.d.ts +57 -0
  225. package/dist/src/core/build-audit-skip.js +112 -0
  226. package/dist/src/core/build-audit-transforms.d.ts +2 -2
  227. package/dist/src/core/build-audit-transforms.js +3 -3
  228. package/dist/src/core/build-audit.d.ts +21 -8
  229. package/dist/src/core/build-audit.js +142 -40
  230. package/dist/src/core/build-baseline-types.d.ts +19 -18
  231. package/dist/src/core/build-baseline-types.js +1 -1
  232. package/dist/src/core/build-baseline.d.ts +48 -31
  233. package/dist/src/core/build-baseline.js +20 -43
  234. package/dist/src/core/build-jar-escalation.d.ts +8 -8
  235. package/dist/src/core/build-jar-escalation.js +18 -17
  236. package/dist/src/core/build-overwrite-guard.d.ts +4 -4
  237. package/dist/src/core/build-overwrite-guard.js +14 -14
  238. package/dist/src/core/build-prepare.d.ts +4 -12
  239. package/dist/src/core/build-prepare.js +22 -26
  240. package/dist/src/core/config-mutate.js +4 -4
  241. package/dist/src/core/config-paths.d.ts +2 -6
  242. package/dist/src/core/config-paths.js +4 -2
  243. package/dist/src/core/config-state.d.ts +0 -6
  244. package/dist/src/core/config-state.js +3 -21
  245. package/dist/src/core/config-validate-build-audit.d.ts +8 -0
  246. package/dist/src/core/config-validate-build-audit.js +80 -0
  247. package/dist/src/core/config-validate-file-size.d.ts +1 -1
  248. package/dist/src/core/config-validate-file-size.js +3 -3
  249. package/dist/src/core/config-validate-patch-policy.d.ts +2 -2
  250. package/dist/src/core/config-validate-patch-policy.js +3 -3
  251. package/dist/src/core/config-validate-test-toolchains.d.ts +2 -2
  252. package/dist/src/core/config-validate-test-toolchains.js +4 -5
  253. package/dist/src/core/config-validate.js +22 -12
  254. package/dist/src/core/config.d.ts +12 -12
  255. package/dist/src/core/config.js +21 -25
  256. package/dist/src/core/coverage-extend.d.ts +16 -16
  257. package/dist/src/core/coverage-extend.js +20 -20
  258. package/dist/src/core/destructive.d.ts +14 -14
  259. package/dist/src/core/destructive.js +9 -9
  260. package/dist/src/core/diff-hunks.d.ts +2 -2
  261. package/dist/src/core/diff-hunks.js +7 -7
  262. package/dist/src/core/discard-baseline.d.ts +10 -10
  263. package/dist/src/core/discard-baseline.js +22 -23
  264. package/dist/src/core/display-state.d.ts +11 -11
  265. package/dist/src/core/display-state.js +12 -12
  266. package/dist/src/core/engine-changes.d.ts +2 -2
  267. package/dist/src/core/engine-changes.js +2 -2
  268. package/dist/src/core/engine-precondition.d.ts +5 -13
  269. package/dist/src/core/engine-precondition.js +5 -10
  270. package/dist/src/core/engine-session-lock.d.ts +18 -18
  271. package/dist/src/core/engine-session-lock.js +50 -54
  272. package/dist/src/core/export-moved-code-shape.d.ts +7 -7
  273. package/dist/src/core/export-moved-code-shape.js +10 -10
  274. package/dist/src/core/file-lock-owner.d.ts +103 -0
  275. package/dist/src/core/file-lock-owner.js +259 -0
  276. package/dist/src/core/file-lock.d.ts +14 -19
  277. package/dist/src/core/file-lock.js +90 -128
  278. package/dist/src/core/firefox-cache.d.ts +13 -1
  279. package/dist/src/core/firefox-cache.js +61 -36
  280. package/dist/src/core/firefox-download.d.ts +15 -0
  281. package/dist/src/core/firefox-download.js +38 -22
  282. package/dist/src/core/firefox-extract.d.ts +8 -7
  283. package/dist/src/core/firefox-extract.js +45 -27
  284. package/dist/src/core/firefox.d.ts +34 -36
  285. package/dist/src/core/firefox.js +13 -44
  286. package/dist/src/core/furnace-apply-dry-run.d.ts +1 -6
  287. package/dist/src/core/furnace-apply-dry-run.js +2 -8
  288. package/dist/src/core/furnace-apply-ftl.d.ts +5 -5
  289. package/dist/src/core/furnace-apply-ftl.js +8 -8
  290. package/dist/src/core/furnace-apply-helpers.d.ts +9 -20
  291. package/dist/src/core/furnace-apply-helpers.js +28 -39
  292. package/dist/src/core/furnace-apply-output.js +1 -1
  293. package/dist/src/core/furnace-apply-overwrite-warn.d.ts +9 -9
  294. package/dist/src/core/furnace-apply-overwrite-warn.js +13 -11
  295. package/dist/src/core/furnace-apply-undeploy-actions.d.ts +1 -1
  296. package/dist/src/core/furnace-apply-undeploy-actions.js +1 -1
  297. package/dist/src/core/furnace-apply.d.ts +4 -4
  298. package/dist/src/core/furnace-apply.js +50 -29
  299. package/dist/src/core/furnace-checksum-utils.d.ts +5 -5
  300. package/dist/src/core/furnace-checksum-utils.js +5 -5
  301. package/dist/src/core/furnace-config-custom.d.ts +1 -1
  302. package/dist/src/core/furnace-config-custom.js +2 -2
  303. package/dist/src/core/furnace-config-order.js +1 -1
  304. package/dist/src/core/furnace-config-tokens.d.ts +3 -3
  305. package/dist/src/core/furnace-config-tokens.js +3 -3
  306. package/dist/src/core/furnace-config-validate.js +2 -2
  307. package/dist/src/core/furnace-config.d.ts +5 -5
  308. package/dist/src/core/furnace-config.js +40 -53
  309. package/dist/src/core/furnace-constants.d.ts +6 -6
  310. package/dist/src/core/furnace-constants.js +9 -8
  311. package/dist/src/core/furnace-css-fragments.d.ts +6 -6
  312. package/dist/src/core/furnace-css-fragments.js +11 -11
  313. package/dist/src/core/furnace-dir-entry.d.ts +20 -0
  314. package/dist/src/core/furnace-dir-entry.js +21 -0
  315. package/dist/src/core/furnace-jsconfig.d.ts +7 -7
  316. package/dist/src/core/furnace-jsconfig.js +22 -20
  317. package/dist/src/core/furnace-operation.d.ts +22 -19
  318. package/dist/src/core/furnace-operation.js +38 -34
  319. package/dist/src/core/furnace-precondition.d.ts +10 -10
  320. package/dist/src/core/furnace-precondition.js +8 -8
  321. package/dist/src/core/furnace-refresh.d.ts +18 -6
  322. package/dist/src/core/furnace-refresh.js +5 -8
  323. package/dist/src/core/furnace-registration-ast.d.ts +2 -3
  324. package/dist/src/core/furnace-registration-ast.js +9 -12
  325. package/dist/src/core/furnace-registration-remove.d.ts +4 -4
  326. package/dist/src/core/furnace-registration-remove.js +6 -6
  327. package/dist/src/core/furnace-registration-validate.d.ts +2 -2
  328. package/dist/src/core/furnace-registration-validate.js +2 -2
  329. package/dist/src/core/furnace-registration.d.ts +7 -6
  330. package/dist/src/core/furnace-registration.js +29 -36
  331. package/dist/src/core/furnace-rollback.d.ts +1 -1
  332. package/dist/src/core/furnace-rollback.js +5 -5
  333. package/dist/src/core/furnace-scanner.js +3 -6
  334. package/dist/src/core/furnace-stale-export.d.ts +17 -16
  335. package/dist/src/core/furnace-stale-export.js +16 -15
  336. package/dist/src/core/furnace-staleness.d.ts +2 -2
  337. package/dist/src/core/furnace-staleness.js +2 -2
  338. package/dist/src/core/furnace-state-persist.d.ts +12 -12
  339. package/dist/src/core/furnace-state-persist.js +10 -10
  340. package/dist/src/core/furnace-step-errors.d.ts +6 -6
  341. package/dist/src/core/furnace-step-errors.js +6 -6
  342. package/dist/src/core/furnace-validate-accessibility.js +14 -14
  343. package/dist/src/core/furnace-validate-compatibility.js +9 -9
  344. package/dist/src/core/furnace-validate-registration.d.ts +2 -2
  345. package/dist/src/core/furnace-validate-registration.js +18 -20
  346. package/dist/src/core/furnace-validate-structure.d.ts +1 -1
  347. package/dist/src/core/furnace-validate-structure.js +4 -4
  348. package/dist/src/core/furnace-validate.js +9 -9
  349. package/dist/src/core/furnace-version-drift.d.ts +5 -5
  350. package/dist/src/core/furnace-version-drift.js +5 -5
  351. package/dist/src/core/git-base.d.ts +6 -4
  352. package/dist/src/core/git-base.js +29 -7
  353. package/dist/src/core/git-diff-new-file.d.ts +40 -0
  354. package/dist/src/core/git-diff-new-file.js +119 -0
  355. package/dist/src/core/git-diff.d.ts +13 -13
  356. package/dist/src/core/git-diff.js +121 -189
  357. package/dist/src/core/git-file-ops.d.ts +6 -13
  358. package/dist/src/core/git-file-ops.js +11 -35
  359. package/dist/src/core/git-readonly-index.d.ts +12 -14
  360. package/dist/src/core/git-readonly-index.js +12 -16
  361. package/dist/src/core/git-status.d.ts +9 -2
  362. package/dist/src/core/git-status.js +23 -11
  363. package/dist/src/core/git.d.ts +3 -9
  364. package/dist/src/core/git.js +28 -57
  365. package/dist/src/core/harness-orphans.d.ts +17 -17
  366. package/dist/src/core/harness-orphans.js +28 -27
  367. package/dist/src/core/history-log.d.ts +19 -0
  368. package/dist/src/core/history-log.js +29 -0
  369. package/dist/src/core/license-headers.d.ts +19 -18
  370. package/dist/src/core/license-headers.js +29 -28
  371. package/dist/src/core/mach-build-artifacts.d.ts +21 -21
  372. package/dist/src/core/mach-build-artifacts.js +23 -23
  373. package/dist/src/core/mach-error-hints.d.ts +5 -10
  374. package/dist/src/core/mach-error-hints.js +14 -14
  375. package/dist/src/core/mach-known-noise-filter.d.ts +42 -38
  376. package/dist/src/core/mach-known-noise-filter.js +57 -56
  377. package/dist/src/core/mach-mozconfig.d.ts +6 -6
  378. package/dist/src/core/mach-mozconfig.js +17 -16
  379. package/dist/src/core/mach-python.d.ts +3 -0
  380. package/dist/src/core/mach-python.js +13 -7
  381. package/dist/src/core/mach-resource-shim.d.ts +24 -12
  382. package/dist/src/core/mach-resource-shim.js +124 -21
  383. package/dist/src/core/mach.d.ts +59 -73
  384. package/dist/src/core/mach.js +47 -115
  385. package/dist/src/core/marionette-port.d.ts +15 -30
  386. package/dist/src/core/marionette-port.js +46 -89
  387. package/dist/src/core/marionette-preflight.d.ts +6 -6
  388. package/dist/src/core/marionette-preflight.js +32 -50
  389. package/dist/src/core/markdown-table.d.ts +9 -9
  390. package/dist/src/core/markdown-table.js +14 -14
  391. package/dist/src/core/mochitest-server-port.d.ts +8 -8
  392. package/dist/src/core/mochitest-server-port.js +17 -17
  393. package/dist/src/core/module-resolution-preflight.d.ts +8 -8
  394. package/dist/src/core/module-resolution-preflight.js +11 -11
  395. package/dist/src/core/moz-manifest-helpers.d.ts +7 -7
  396. package/dist/src/core/moz-manifest-helpers.js +7 -7
  397. package/dist/src/core/moz-manifest-register.d.ts +1 -1
  398. package/dist/src/core/moz-manifest-register.js +2 -2
  399. package/dist/src/core/moz-manifest-rules.js +46 -42
  400. package/dist/src/core/moz-manifest-tokenizers.js +1 -1
  401. package/dist/src/core/ownership-table.d.ts +5 -5
  402. package/dist/src/core/ownership-table.js +7 -7
  403. package/dist/src/core/parser-fallback.d.ts +3 -3
  404. package/dist/src/core/parser-fallback.js +3 -3
  405. package/dist/src/core/patch-apply-fuzz.d.ts +5 -5
  406. package/dist/src/core/patch-apply-fuzz.js +13 -13
  407. package/dist/src/core/patch-apply.d.ts +13 -14
  408. package/dist/src/core/patch-apply.js +36 -42
  409. package/dist/src/core/patch-export-coverage.d.ts +0 -9
  410. package/dist/src/core/patch-export-coverage.js +1 -30
  411. package/dist/src/core/patch-export-update.d.ts +21 -4
  412. package/dist/src/core/patch-export-update.js +7 -6
  413. package/dist/src/core/patch-export.d.ts +20 -30
  414. package/dist/src/core/patch-export.js +55 -77
  415. package/dist/src/core/patch-files.d.ts +0 -4
  416. package/dist/src/core/patch-files.js +0 -11
  417. package/dist/src/core/patch-identifier-suggest.d.ts +1 -1
  418. package/dist/src/core/patch-identifier-suggest.js +4 -4
  419. package/dist/src/core/patch-lint-binary.d.ts +12 -18
  420. package/dist/src/core/patch-lint-cache.d.ts +18 -2
  421. package/dist/src/core/patch-lint-cache.js +16 -19
  422. package/dist/src/core/patch-lint-checkjs.d.ts +55 -38
  423. package/dist/src/core/patch-lint-checkjs.js +78 -64
  424. package/dist/src/core/patch-lint-chrome-jsdoc.d.ts +8 -9
  425. package/dist/src/core/patch-lint-chrome-jsdoc.js +10 -11
  426. package/dist/src/core/patch-lint-creators.d.ts +5 -9
  427. package/dist/src/core/patch-lint-creators.js +3 -3
  428. package/dist/src/core/patch-lint-cross.d.ts +27 -19
  429. package/dist/src/core/patch-lint-cross.js +67 -110
  430. package/dist/src/core/patch-lint-css.d.ts +1 -1
  431. package/dist/src/core/patch-lint-css.js +15 -11
  432. package/dist/src/core/patch-lint-diff-tag.d.ts +5 -5
  433. package/dist/src/core/patch-lint-diff-tag.js +5 -5
  434. package/dist/src/core/patch-lint-diff.d.ts +4 -4
  435. package/dist/src/core/patch-lint-diff.js +4 -4
  436. package/dist/src/core/patch-lint-file-size.d.ts +3 -3
  437. package/dist/src/core/patch-lint-file-size.js +6 -6
  438. package/dist/src/core/patch-lint-forward-registration.d.ts +58 -0
  439. package/dist/src/core/patch-lint-forward-registration.js +210 -0
  440. package/dist/src/core/patch-lint-jsdoc.d.ts +2 -2
  441. package/dist/src/core/patch-lint-jsdoc.js +46 -46
  442. package/dist/src/core/patch-lint-module-registration.d.ts +3 -9
  443. package/dist/src/core/patch-lint-module-registration.js +1 -1
  444. package/dist/src/core/patch-lint-mozbuild.d.ts +1 -1
  445. package/dist/src/core/patch-lint-mozbuild.js +10 -10
  446. package/dist/src/core/patch-lint-observer.d.ts +3 -3
  447. package/dist/src/core/patch-lint-observer.js +7 -7
  448. package/dist/src/core/patch-lint-ownership.d.ts +6 -6
  449. package/dist/src/core/patch-lint-ownership.js +6 -6
  450. package/dist/src/core/patch-lint-prettier.d.ts +6 -6
  451. package/dist/src/core/patch-lint-prettier.js +7 -7
  452. package/dist/src/core/patch-lint-queue-types.d.ts +60 -0
  453. package/dist/src/core/patch-lint-queue-types.js +12 -0
  454. package/dist/src/core/patch-lint-staged-registration.d.ts +61 -0
  455. package/dist/src/core/patch-lint-staged-registration.js +90 -0
  456. package/dist/src/core/patch-lint-unmanaged-companion.d.ts +23 -23
  457. package/dist/src/core/patch-lint-unmanaged-companion.js +26 -26
  458. package/dist/src/core/patch-lint.d.ts +41 -35
  459. package/dist/src/core/patch-lint.js +52 -49
  460. package/dist/src/core/patch-lock.d.ts +1 -1
  461. package/dist/src/core/patch-lock.js +11 -11
  462. package/dist/src/core/patch-manifest-consistency.d.ts +7 -7
  463. package/dist/src/core/patch-manifest-consistency.js +16 -17
  464. package/dist/src/core/patch-manifest-files-affected.d.ts +1 -1
  465. package/dist/src/core/patch-manifest-files-affected.js +3 -3
  466. package/dist/src/core/patch-manifest-io.d.ts +14 -14
  467. package/dist/src/core/patch-manifest-io.js +35 -34
  468. package/dist/src/core/patch-manifest-query.d.ts +1 -1
  469. package/dist/src/core/patch-manifest-query.js +4 -4
  470. package/dist/src/core/patch-manifest-resolve.d.ts +5 -5
  471. package/dist/src/core/patch-manifest-resolve.js +7 -7
  472. package/dist/src/core/patch-manifest-validate.js +3 -3
  473. package/dist/src/core/patch-manifest.d.ts +2 -2
  474. package/dist/src/core/patch-manifest.js +2 -2
  475. package/dist/src/core/patch-parse.d.ts +32 -21
  476. package/dist/src/core/patch-parse.js +40 -15
  477. package/dist/src/core/patch-policy.js +15 -27
  478. package/dist/src/core/patch-registration-refs.d.ts +4 -4
  479. package/dist/src/core/patch-registration-refs.js +7 -7
  480. package/dist/src/core/patch-source-metadata.d.ts +1 -3
  481. package/dist/src/core/patch-source-metadata.js +0 -4
  482. package/dist/src/core/patch-transform.d.ts +8 -16
  483. package/dist/src/core/patch-transform.js +13 -23
  484. package/dist/src/core/process-cpu-time.d.ts +1 -1
  485. package/dist/src/core/process-cpu-time.js +6 -6
  486. package/dist/src/core/rebase-session.d.ts +9 -15
  487. package/dist/src/core/rebase-session.js +13 -25
  488. package/dist/src/core/register-browser-content.js +3 -2
  489. package/dist/src/core/register-browser-test.js +2 -1
  490. package/dist/src/core/register-module.js +2 -1
  491. package/dist/src/core/register-result.d.ts +1 -1
  492. package/dist/src/core/register-result.js +1 -1
  493. package/dist/src/core/register-scaffold.d.ts +2 -2
  494. package/dist/src/core/register-scaffold.js +8 -7
  495. package/dist/src/core/register-shared-css.d.ts +3 -3
  496. package/dist/src/core/register-shared-css.js +6 -5
  497. package/dist/src/core/register-xpcshell-test.d.ts +2 -2
  498. package/dist/src/core/register-xpcshell-test.js +2 -2
  499. package/dist/src/core/run-log-redact.d.ts +38 -0
  500. package/dist/src/core/run-log-redact.js +69 -0
  501. package/dist/src/core/run-log.d.ts +21 -10
  502. package/dist/src/core/run-log.js +76 -27
  503. package/dist/src/core/shared-ftl.d.ts +2 -2
  504. package/dist/src/core/shared-ftl.js +6 -6
  505. package/dist/src/core/signal-critical.d.ts +2 -2
  506. package/dist/src/core/signal-critical.js +4 -6
  507. package/dist/src/core/smoke-patterns.d.ts +5 -6
  508. package/dist/src/core/smoke-patterns.js +15 -20
  509. package/dist/src/core/state-file.d.ts +15 -4
  510. package/dist/src/core/state-file.js +14 -1
  511. package/dist/src/core/status-binary.d.ts +8 -8
  512. package/dist/src/core/status-binary.js +12 -12
  513. package/dist/src/core/status-classify.d.ts +17 -17
  514. package/dist/src/core/status-classify.js +13 -12
  515. package/dist/src/core/test-changed-prefs.d.ts +12 -12
  516. package/dist/src/core/test-changed-prefs.js +40 -25
  517. package/dist/src/core/test-harness-crash.d.ts +39 -39
  518. package/dist/src/core/test-harness-crash.js +69 -69
  519. package/dist/src/core/test-harness-output.d.ts +7 -7
  520. package/dist/src/core/test-harness-output.js +7 -7
  521. package/dist/src/core/test-harness-verdict-notes.d.ts +13 -14
  522. package/dist/src/core/test-harness-verdict-notes.js +4 -4
  523. package/dist/src/core/test-path-scope.d.ts +8 -8
  524. package/dist/src/core/test-path-scope.js +11 -11
  525. package/dist/src/core/test-stale-check.d.ts +22 -23
  526. package/dist/src/core/test-stale-check.js +31 -30
  527. package/dist/src/core/test-stale-symlink.d.ts +1 -1
  528. package/dist/src/core/test-stale-symlink.js +1 -1
  529. package/dist/src/core/test-stall-triage.d.ts +9 -9
  530. package/dist/src/core/test-stall-triage.js +22 -22
  531. package/dist/src/core/test-xpcshell-retry.d.ts +26 -7
  532. package/dist/src/core/test-xpcshell-retry.js +14 -11
  533. package/dist/src/core/token-category.d.ts +35 -2
  534. package/dist/src/core/token-category.js +67 -58
  535. package/dist/src/core/token-coverage.js +4 -5
  536. package/dist/src/core/token-dark-mode.d.ts +9 -9
  537. package/dist/src/core/token-dark-mode.js +13 -25
  538. package/dist/src/core/token-docs.d.ts +1 -1
  539. package/dist/src/core/token-inventory.d.ts +56 -0
  540. package/dist/src/core/token-inventory.js +109 -0
  541. package/dist/src/core/token-manager.d.ts +4 -4
  542. package/dist/src/core/token-manager.js +22 -22
  543. package/dist/src/core/token-scaffold.d.ts +4 -4
  544. package/dist/src/core/token-scaffold.js +4 -4
  545. package/dist/src/core/token-variant.d.ts +14 -14
  546. package/dist/src/core/token-variant.js +52 -53
  547. package/dist/src/core/toolchain-preflight.d.ts +15 -15
  548. package/dist/src/core/toolchain-preflight.js +23 -23
  549. package/dist/src/core/tree-cow.d.ts +3 -5
  550. package/dist/src/core/tree-cow.js +8 -8
  551. package/dist/src/core/tree-guard.d.ts +3 -3
  552. package/dist/src/core/tree-guard.js +23 -23
  553. package/dist/src/core/tree-store.d.ts +15 -15
  554. package/dist/src/core/tree-store.js +39 -38
  555. package/dist/src/core/typecheck-shim.d.ts +16 -15
  556. package/dist/src/core/typecheck-shim.js +26 -25
  557. package/dist/src/core/typecheck.d.ts +12 -12
  558. package/dist/src/core/typecheck.js +33 -33
  559. package/dist/src/core/wire-destroy.d.ts +2 -2
  560. package/dist/src/core/wire-destroy.js +5 -5
  561. package/dist/src/core/wire-dom-fragment.d.ts +3 -3
  562. package/dist/src/core/wire-dom-fragment.js +12 -23
  563. package/dist/src/core/wire-init.d.ts +2 -2
  564. package/dist/src/core/wire-init.js +7 -7
  565. package/dist/src/core/wire-subscript.d.ts +1 -1
  566. package/dist/src/core/wire-subscript.js +3 -3
  567. package/dist/src/core/wire-utils.d.ts +9 -9
  568. package/dist/src/core/wire-utils.js +16 -28
  569. package/dist/src/core/xpcshell-appdir.d.ts +20 -20
  570. package/dist/src/core/xpcshell-appdir.js +28 -30
  571. package/dist/src/core/xpcshell-profile-dir.d.ts +3 -3
  572. package/dist/src/core/xpcshell-profile-dir.js +7 -7
  573. package/dist/src/errors/base.d.ts +69 -16
  574. package/dist/src/errors/base.js +95 -26
  575. package/dist/src/errors/build.d.ts +6 -6
  576. package/dist/src/errors/build.js +26 -34
  577. package/dist/src/errors/codes.d.ts +10 -10
  578. package/dist/src/errors/codes.js +10 -10
  579. package/dist/src/errors/config.d.ts +0 -14
  580. package/dist/src/errors/config.js +13 -34
  581. package/dist/src/errors/download.d.ts +13 -0
  582. package/dist/src/errors/download.js +53 -24
  583. package/dist/src/errors/furnace.d.ts +2 -2
  584. package/dist/src/errors/furnace.js +8 -9
  585. package/dist/src/errors/git.d.ts +9 -9
  586. package/dist/src/errors/git.js +21 -31
  587. package/dist/src/errors/patch.d.ts +3 -3
  588. package/dist/src/errors/patch.js +11 -13
  589. package/dist/src/errors/rebase.d.ts +1 -1
  590. package/dist/src/errors/rebase.js +8 -8
  591. package/dist/src/errors/run.d.ts +1 -1
  592. package/dist/src/errors/run.js +1 -1
  593. package/dist/src/index.d.ts +4 -4
  594. package/dist/src/index.js +4 -4
  595. package/dist/src/types/commands/options.d.ts +155 -200
  596. package/dist/src/types/commands/patches.d.ts +19 -19
  597. package/dist/src/types/commands/project.d.ts +3 -3
  598. package/dist/src/types/config.d.ts +52 -19
  599. package/dist/src/types/furnace.d.ts +17 -17
  600. package/dist/src/types/index.d.ts +0 -1
  601. package/dist/src/types/json.d.ts +3 -3
  602. package/dist/src/types/json.js +2 -2
  603. package/dist/src/types/typecheck.d.ts +3 -3
  604. package/dist/src/utils/assert.d.ts +4 -16
  605. package/dist/src/utils/assert.js +7 -24
  606. package/dist/src/utils/build-info.d.ts +6 -6
  607. package/dist/src/utils/build-info.js +6 -6
  608. package/dist/src/utils/child-env.d.ts +7 -6
  609. package/dist/src/utils/child-env.js +5 -5
  610. package/dist/src/utils/concurrency.d.ts +2 -2
  611. package/dist/src/utils/concurrency.js +2 -2
  612. package/dist/src/utils/elapsed.js +10 -1
  613. package/dist/src/utils/errors.d.ts +8 -8
  614. package/dist/src/utils/errors.js +8 -8
  615. package/dist/src/utils/fs.d.ts +1 -1
  616. package/dist/src/utils/fs.js +15 -20
  617. package/dist/src/utils/hash.d.ts +12 -0
  618. package/dist/src/utils/hash.js +16 -0
  619. package/dist/src/utils/line-dispatch.d.ts +15 -0
  620. package/dist/src/utils/line-dispatch.js +48 -0
  621. package/dist/src/utils/logger.d.ts +4 -4
  622. package/dist/src/utils/logger.js +11 -11
  623. package/dist/src/utils/machine-output.js +2 -2
  624. package/dist/src/utils/options.d.ts +14 -20
  625. package/dist/src/utils/options.js +26 -27
  626. package/dist/src/utils/package-root.js +5 -14
  627. package/dist/src/utils/paths.d.ts +4 -4
  628. package/dist/src/utils/paths.js +4 -4
  629. package/dist/src/utils/platform.d.ts +0 -4
  630. package/dist/src/utils/process-group.d.ts +10 -9
  631. package/dist/src/utils/process-group.js +37 -36
  632. package/dist/src/utils/process.d.ts +70 -55
  633. package/dist/src/utils/process.js +129 -179
  634. package/dist/src/utils/ps-duration.d.ts +4 -4
  635. package/dist/src/utils/ps-duration.js +9 -9
  636. package/dist/src/utils/regex.d.ts +4 -4
  637. package/dist/src/utils/regex.js +7 -7
  638. package/dist/src/utils/sleep.d.ts +26 -0
  639. package/dist/src/utils/sleep.js +31 -0
  640. package/dist/src/utils/stdio-drain.d.ts +7 -7
  641. package/dist/src/utils/stdio-drain.js +8 -8
  642. package/dist/src/utils/validation.d.ts +12 -49
  643. package/dist/src/utils/validation.js +26 -36
  644. package/docs/README.md +2 -2
  645. package/docs/configuration.md +163 -69
  646. package/docs/exit-codes.md +66 -49
  647. package/docs/furnace.md +20 -19
  648. package/docs/lifecycle-invariants.md +414 -247
  649. package/docs/machine-output.md +58 -34
  650. package/docs/patch-workflow.md +48 -44
  651. package/docs/run-logs.md +72 -28
  652. package/docs/testing.md +105 -98
  653. package/docs/verification-trees.md +23 -22
  654. package/package.json +7 -6
  655. package/dist/src/commands/rebase.d.ts +0 -4
  656. package/dist/src/commands/rebase.js +0 -5
  657. package/dist/src/core/patch-artifact-normalize.d.ts +0 -21
  658. package/dist/src/core/patch-artifact-normalize.js +0 -24
  659. package/dist/src/core/patch-lint-reexports.d.ts +0 -7
  660. package/dist/src/core/patch-lint-reexports.js +0 -8
  661. package/dist/src/core/wire-targets.d.ts +0 -7
  662. package/dist/src/core/wire-targets.js +0 -8
@@ -3,15 +3,15 @@
3
3
  * Patch-aware restore planning for `fireforge discard`.
4
4
  *
5
5
  * The engine convention is: HEAD = pristine upstream Firefox, and the
6
- * applied patch queue lives as UNCOMMITTED worktree changes on top of it
6
+ * applied patch queue lives as uncommitted worktree changes on top of it
7
7
  * (`git apply` without `--index` → patch-edited tracked files are unstaged
8
8
  * modifications, patch-created files are untracked). A purely git-mechanical
9
- * discard — restore to HEAD, delete untracked files — therefore reverts
10
- * patch-backed files PAST their owning patch and deletes patch-created files
9
+ * discard (restore to HEAD, delete untracked files) therefore reverts
10
+ * patch-backed files past their owning patch and deletes patch-created files
11
11
  * outright.
12
12
  *
13
13
  * This module classifies each status entry against the patch manifest's
14
- * ownership claims and plans the correct restore target: the PATCH-APPLIED
14
+ * ownership claims and plans the correct restore target: the patch-applied
15
15
  * baseline (HEAD content folded through every affecting patch in order) for
16
16
  * claimed files, and the plain git mechanics for unmanaged ones.
17
17
  */
@@ -24,19 +24,19 @@ import { createPatchedContentContext } from './patch-apply.js';
24
24
  import { loadPatchesManifestState } from './patch-manifest-io.js';
25
25
  import { parseDiffSections } from './patch-parse.js';
26
26
  import { buildPatchClaims } from './status-classify.js';
27
- /** Builds an all-unmanaged plan set — the `--to-upstream` (legacy) shape. */
27
+ /** Builds an all-unmanaged plan set, the `--to-upstream` (legacy) shape. */
28
28
  export function planUpstreamDiscards(entries) {
29
29
  return entries.map((entry) => ({ entry, kind: 'unmanaged', owners: [], conflicted: false }));
30
30
  }
31
31
  /**
32
32
  * Plans the restore target for each status entry. Entries claimed by the
33
- * patch manifest restore to the patch-applied baseline; unclaimed entries
33
+ * patch manifest restore to the patch-applied baseline. Unclaimed entries
34
34
  * keep the plain git mechanics. A missing patches dir or empty manifest
35
35
  * degrades every plan to `unmanaged`.
36
36
  *
37
- * A corrupt manifest or an unreconstructible patch baseline REFUSES with a
38
- * GeneralError naming `--to-upstream` — silently falling back to pristine
39
- * HEAD is exactly the data-loss path this module exists to close.
37
+ * A corrupt manifest or an unreconstructible patch baseline refuses with a
38
+ * GeneralError naming `--to-upstream`. Silently falling back to pristine
39
+ * HEAD is the data-loss path this module exists to close.
40
40
  */
41
41
  export async function planDiscardBaselines(patchesDir, engineDir, entries) {
42
42
  const state = await loadPatchesManifestState(patchesDir);
@@ -71,7 +71,7 @@ export async function planDiscardBaselines(patchesDir, engineDir, entries) {
71
71
  // `computePatchedContent` folds a deletion into an empty string (an
72
72
  // apply-to-content limitation), which is indistinguishable from a
73
73
  // legitimately empty file. Consult the owning patches' diff sections
74
- // directly: the LAST section (highest-ordered owner) naming the path
74
+ // directly: the last section (highest-ordered owner) naming the path
75
75
  // decides whether the baseline is "absent".
76
76
  const sectionCache = new Map();
77
77
  const isDeletedAtBaseline = async (path, owners) => {
@@ -86,11 +86,10 @@ export async function planDiscardBaselines(patchesDir, engineDir, entries) {
86
86
  }
87
87
  catch (error) {
88
88
  // Fail closed. Swallowing this yields no sections, which falls
89
- // through to `return false` — "not deleted at baseline" — so a path
90
- // the owning patch DELETES would be restored as present, i.e.
89
+ // through to `return false` ("not deleted at baseline"), so a
90
+ // path the owning patch deletes would be restored as present, i.e.
91
91
  // rewritten instead of removed: silent data loss on the command
92
- // whose header promises a refusal for exactly this class of
93
- // failure.
92
+ // whose header promises a refusal for this class of failure.
94
93
  //
95
94
  // `computeExpected` above reads the same patch first and refuses,
96
95
  // so this is defence-in-depth against a TOCTOU (the patch file
@@ -160,7 +159,7 @@ export async function applyDiscardBaseline(engineDir, plan) {
160
159
  }
161
160
  const { entry } = plan;
162
161
  // Drop any staged edits/adds/renames first so the rewritten content is a
163
- // plain worktree state (harmless when nothing is staged; skipped for
162
+ // plain worktree state (harmless when nothing is staged, and skipped for
164
163
  // purely-untracked entries which have no index footprint).
165
164
  if (!entry.isUntracked) {
166
165
  const indexPaths = entry.originalPath !== undefined ? [entry.file, entry.originalPath] : [entry.file];
@@ -172,7 +171,7 @@ export async function applyDiscardBaseline(engineDir, plan) {
172
171
  else {
173
172
  await writeText(join(engineDir, entry.file), plan.expectedContent);
174
173
  }
175
- // A rename/copy's original side restores to ITS baseline too: the patch
174
+ // A rename/copy's original side restores to its baseline too: the patch
176
175
  // baseline when claimed, else the legacy HEAD restore (matching what
177
176
  // discardStatusEntry does for that side).
178
177
  if (entry.originalPath !== undefined) {
@@ -226,22 +225,22 @@ export function summarizeDiscardBaselines(plans, succeeded) {
226
225
  const deleted = plans.filter((p) => p.kind === 'patch-deleted').length;
227
226
  const unmanaged = plans.filter((p) => p.kind === 'unmanaged').length;
228
227
  if (patchBacked + created + deleted === 0) {
229
- return `${String(succeeded)} file(s) restored to upstream state`;
228
+ return `${succeeded} file(s) restored to upstream state`;
230
229
  }
231
230
  const parts = [];
232
231
  if (patchBacked > 0)
233
- parts.push(`${String(patchBacked)} to patch baseline`);
232
+ parts.push(`${patchBacked} to patch baseline`);
234
233
  if (created > 0)
235
- parts.push(`${String(created)} re-materialized`);
234
+ parts.push(`${created} re-materialized`);
236
235
  if (deleted > 0)
237
- parts.push(`${String(deleted)} removed per patch baseline`);
236
+ parts.push(`${deleted} removed per patch baseline`);
238
237
  if (unmanaged > 0)
239
- parts.push(`${String(unmanaged)} to upstream state`);
240
- return `${String(succeeded)} file(s) restored: ${parts.join(', ')}`;
238
+ parts.push(`${unmanaged} to upstream state`);
239
+ return `${succeeded} file(s) restored: ${parts.join(', ')}`;
241
240
  }
242
241
  /** Warn text for a multi-owner (conflicted) restore. */
243
242
  export function describeConflictWarning(plan) {
244
- return (`${plan.entry.file} is claimed by ${String(plan.owners.length)} patches ` +
243
+ return (`${plan.entry.file} is claimed by ${plan.owners.length} patches ` +
245
244
  `(${plan.owners.join(', ')}). Restored the cumulative baseline; run ` +
246
245
  '"fireforge status --ownership" to resolve ownership.');
247
246
  }
@@ -3,15 +3,15 @@
3
3
  *
4
4
  * `TIMEOUT … application timed out after N seconds with no output` /
5
5
  * `Ran 0 checks` has three known causes, one of them purely environmental:
6
- * a HEADED run on an unattended machine whose display is asleep or locked.
6
+ * a headed run on an unattended machine whose display is asleep or locked.
7
7
  * A headed Firefox on a sleeping display never paints, never reaches its
8
- * first test, and dies at the no-output timeout — indistinguishable, from
9
- * the log alone, from a product hang.
8
+ * first test, and dies at the no-output timeout, which from the log alone
9
+ * is indistinguishable from a product hang.
10
10
  *
11
- * `caffeinate -disu` does not cure it. It PREVENTS sleep; it cannot WAKE a
12
- * display that is already asleep, so wrapping the run changes nothing once
13
- * the machine has dimmed. `fireforge test` defaults to headed, so an
14
- * unattended run walks straight into this.
11
+ * `caffeinate -disu` does not cure it. It prevents sleep, but it cannot
12
+ * wake a display that is already asleep, so wrapping the run changes
13
+ * nothing once the machine has dimmed. `fireforge test` defaults to
14
+ * headed, so an unattended run walks straight into this.
15
15
  *
16
16
  * The probe is advisory and fail-open: anything unexpected reports
17
17
  * `'unknown'` and the caller degrades to the generic triage list rather than
@@ -30,10 +30,10 @@ export type DisplaySleepState = 'asleep' | 'awake' | 'unknown';
30
30
  * ```
31
31
  *
32
32
  * Only the `IODisplayWrangler` row matters, and only its first numeric
33
- * column (the current power state). Any other shape — no such row, a
34
- * non-numeric column, an error message — is `'unknown'`, never a guess.
33
+ * column (the current power state). Any other shape (no such row, a
34
+ * non-numeric column, an error message) is `'unknown'`, never a guess.
35
35
  *
36
- * Pure; exported for direct unit testing.
36
+ * Pure. Exported for direct unit testing.
37
37
  *
38
38
  * @param stdout - Raw `pmset -g powerstate IODisplayWrangler` output
39
39
  * @returns The measured state, or `'unknown'`
@@ -41,7 +41,7 @@ export type DisplaySleepState = 'asleep' | 'awake' | 'unknown';
41
41
  export declare function parseDisplayPowerState(stdout: string): DisplaySleepState;
42
42
  /**
43
43
  * Probes the display's power state. Non-darwin platforms report `'unknown'`
44
- * without spawning anything — the stall shape this serves is macOS-specific
44
+ * without spawning anything: the stall shape this serves is macOS-specific
45
45
  * and no equivalent single-command probe is wired for other platforms.
46
46
  *
47
47
  * @param platform - `process.platform`-style id (injected for testability)
@@ -4,15 +4,15 @@
4
4
  *
5
5
  * `TIMEOUT … application timed out after N seconds with no output` /
6
6
  * `Ran 0 checks` has three known causes, one of them purely environmental:
7
- * a HEADED run on an unattended machine whose display is asleep or locked.
7
+ * a headed run on an unattended machine whose display is asleep or locked.
8
8
  * A headed Firefox on a sleeping display never paints, never reaches its
9
- * first test, and dies at the no-output timeout — indistinguishable, from
10
- * the log alone, from a product hang.
9
+ * first test, and dies at the no-output timeout, which from the log alone
10
+ * is indistinguishable from a product hang.
11
11
  *
12
- * `caffeinate -disu` does not cure it. It PREVENTS sleep; it cannot WAKE a
13
- * display that is already asleep, so wrapping the run changes nothing once
14
- * the machine has dimmed. `fireforge test` defaults to headed, so an
15
- * unattended run walks straight into this.
12
+ * `caffeinate -disu` does not cure it. It prevents sleep, but it cannot
13
+ * wake a display that is already asleep, so wrapping the run changes
14
+ * nothing once the machine has dimmed. `fireforge test` defaults to
15
+ * headed, so an unattended run walks straight into this.
16
16
  *
17
17
  * The probe is advisory and fail-open: anything unexpected reports
18
18
  * `'unknown'` and the caller degrades to the generic triage list rather than
@@ -25,7 +25,7 @@ import { exec } from '../utils/process.js';
25
25
  const DISPLAY_PROBE_TIMEOUT_MS = 5_000;
26
26
  /**
27
27
  * IOKit power state at which `IODisplayWrangler` is fully lit. Lower
28
- * states are dimmed or off; macOS reports 4 for a live display.
28
+ * states are dimmed or off. macOS reports 4 for a live display.
29
29
  */
30
30
  const DISPLAY_AWAKE_POWER_STATE = 4;
31
31
  /**
@@ -39,10 +39,10 @@ const DISPLAY_AWAKE_POWER_STATE = 4;
39
39
  * ```
40
40
  *
41
41
  * Only the `IODisplayWrangler` row matters, and only its first numeric
42
- * column (the current power state). Any other shape — no such row, a
43
- * non-numeric column, an error message — is `'unknown'`, never a guess.
42
+ * column (the current power state). Any other shape (no such row, a
43
+ * non-numeric column, an error message) is `'unknown'`, never a guess.
44
44
  *
45
- * Pure; exported for direct unit testing.
45
+ * Pure. Exported for direct unit testing.
46
46
  *
47
47
  * @param stdout - Raw `pmset -g powerstate IODisplayWrangler` output
48
48
  * @returns The measured state, or `'unknown'`
@@ -61,7 +61,7 @@ export function parseDisplayPowerState(stdout) {
61
61
  }
62
62
  /**
63
63
  * Probes the display's power state. Non-darwin platforms report `'unknown'`
64
- * without spawning anything — the stall shape this serves is macOS-specific
64
+ * without spawning anything: the stall shape this serves is macOS-specific
65
65
  * and no equivalent single-command probe is wired for other platforms.
66
66
  *
67
67
  * @param platform - `process.platform`-style id (injected for testability)
@@ -6,7 +6,7 @@
6
6
  import type { BuildBaseline } from './build-baseline-types.js';
7
7
  /**
8
8
  * Collects engine-relative paths changed since the baseline's HEAD SHA,
9
- * plus any workdir modifications (tracked and untracked). Defensive — git
9
+ * plus any workdir modifications (tracked and untracked). Defensive: git
10
10
  * failures surface as verbose lines and return the files collected so far,
11
11
  * so an empty result means "no drift we can prove" rather than "no drift
12
12
  * occurred". When the baseline is missing or the engine has no HEAD yet,
@@ -27,7 +27,7 @@ export declare function collectChangedEnginePaths(engineDir: string, baseline: B
27
27
  * full-build escalation in `build-prepare` (`buildInputFingerprints`).
28
28
  *
29
29
  * A path with no recorded entry, an unreadable file, or a differing hash
30
- * is kept — "cannot prove unchanged" must never turn into "unchanged".
30
+ * is kept, since "cannot prove unchanged" must never turn into "unchanged".
31
31
  * With no fingerprint set at all (a baseline written before the field
32
32
  * existed) every path is kept, which is the path-only comparison the
33
33
  * fingerprints refine.
@@ -12,7 +12,7 @@ import { git } from './git-base.js';
12
12
  import { getUntrackedFiles } from './git-status.js';
13
13
  /**
14
14
  * Collects engine-relative paths changed since the baseline's HEAD SHA,
15
- * plus any workdir modifications (tracked and untracked). Defensive — git
15
+ * plus any workdir modifications (tracked and untracked). Defensive: git
16
16
  * failures surface as verbose lines and return the files collected so far,
17
17
  * so an empty result means "no drift we can prove" rather than "no drift
18
18
  * occurred". When the baseline is missing or the engine has no HEAD yet,
@@ -67,7 +67,7 @@ export async function collectChangedEnginePaths(engineDir, baseline, contextLabe
67
67
  * full-build escalation in `build-prepare` (`buildInputFingerprints`).
68
68
  *
69
69
  * A path with no recorded entry, an unreadable file, or a differing hash
70
- * is kept — "cannot prove unchanged" must never turn into "unchanged".
70
+ * is kept, since "cannot prove unchanged" must never turn into "unchanged".
71
71
  * With no fingerprint set at all (a baseline written before the field
72
72
  * existed) every path is kept, which is the path-only comparison the
73
73
  * fingerprints refine.
@@ -14,20 +14,13 @@
14
14
  export interface EngineGitReadyOptions {
15
15
  /**
16
16
  * Appended to the unborn-HEAD remediation, e.g. `', then retry the rebase.'`
17
- * The base message deliberately ends WITHOUT punctuation so the suffix
18
- * reads as one sentence; callers that pass nothing get a plain full stop.
17
+ * The base message ends without punctuation on purpose so the suffix
18
+ * reads as one sentence. Callers that pass nothing get a plain full stop.
19
19
  */
20
20
  unbornHeadSuffix?: string;
21
21
  }
22
22
  /**
23
- * Error factory for callers whose domain uses a class other than
24
- * `GeneralError`. The furnace family raises `FurnaceError`, which carries
25
- * its own `userMessage` and exit code 9, so a helper hardcoding
26
- * `GeneralError` would silently change both.
27
- */
28
- export type PreconditionErrorFactory = (message: string) => Error;
29
- /**
30
- * Asserts only that the engine checkout EXISTS.
23
+ * Asserts only that the engine checkout exists.
31
24
  *
32
25
  * The first rung of {@link assertEngineGitReady}. Most callers want exactly
33
26
  * this rung and no more: `build`, `run`, `test`, `package`, `watch`,
@@ -36,12 +29,11 @@ export type PreconditionErrorFactory = (message: string) => Error;
36
29
  * would refuse runs that work today.
37
30
  *
38
31
  * @param engineDir - Absolute path to the engine checkout
39
- * @param errorFactory - Optional domain-specific error constructor
40
32
  */
41
- export declare function assertEngineExists(engineDir: string, errorFactory?: PreconditionErrorFactory): Promise<void>;
33
+ export declare function assertEngineExists(engineDir: string): Promise<void>;
42
34
  /**
43
35
  * Asserts that `engineDir` exists, is a git repository, and has a baseline
44
- * commit — in that order, so the operator gets the most specific applicable
36
+ * commit, in that order, so the operator gets the most specific applicable
45
37
  * remediation rather than a downstream git error.
46
38
  *
47
39
  * @param engineDir - Absolute path to the engine checkout
@@ -20,10 +20,8 @@ const UNBORN_HEAD_REMEDIATION = 'Engine repository has no baseline commit yet
20
20
  // No terminating period: the suffix below supplies its own punctuation, and
21
21
  // hardcoding one here rendered as "…cleanly., then retry the rebase."
22
22
  'Re-run "fireforge download --force" to recreate the baseline repository cleanly';
23
- /** Default factory: the message every non-furnace command already used. */
24
- const defaultErrorFactory = (message) => new GeneralError(message);
25
23
  /**
26
- * Asserts only that the engine checkout EXISTS.
24
+ * Asserts only that the engine checkout exists.
27
25
  *
28
26
  * The first rung of {@link assertEngineGitReady}. Most callers want exactly
29
27
  * this rung and no more: `build`, `run`, `test`, `package`, `watch`,
@@ -32,25 +30,22 @@ const defaultErrorFactory = (message) => new GeneralError(message);
32
30
  * would refuse runs that work today.
33
31
  *
34
32
  * @param engineDir - Absolute path to the engine checkout
35
- * @param errorFactory - Optional domain-specific error constructor
36
33
  */
37
- export async function assertEngineExists(engineDir, errorFactory = defaultErrorFactory) {
34
+ export async function assertEngineExists(engineDir) {
38
35
  if (!(await pathExists(engineDir))) {
39
- throw errorFactory('Firefox source not found. Run "fireforge download" first.');
36
+ throw new GeneralError('Firefox source not found. Run "fireforge download" first.');
40
37
  }
41
38
  }
42
39
  /**
43
40
  * Asserts that `engineDir` exists, is a git repository, and has a baseline
44
- * commit — in that order, so the operator gets the most specific applicable
41
+ * commit, in that order, so the operator gets the most specific applicable
45
42
  * remediation rather than a downstream git error.
46
43
  *
47
44
  * @param engineDir - Absolute path to the engine checkout
48
45
  * @param options - Optional per-command message tailoring
49
46
  */
50
47
  export async function assertEngineGitReady(engineDir, options = {}) {
51
- if (!(await pathExists(engineDir))) {
52
- throw new GeneralError('Firefox source not found. Run "fireforge download" first.');
53
- }
48
+ await assertEngineExists(engineDir);
54
49
  if (!(await isGitRepository(engineDir))) {
55
50
  throw new GeneralError('Engine directory is not a git repository. Run "fireforge download" to initialize.');
56
51
  }
@@ -9,13 +9,13 @@ export interface EngineSessionLockOptions {
9
9
  waitLockSeconds?: number | undefined;
10
10
  }
11
11
  /**
12
- * Formats the notice printed when the wait budget is EXTENDED because the
12
+ * Formats the notice printed when the wait budget is extended because the
13
13
  * queue advanced.
14
14
  *
15
- * Exported for direct unit testing. It names both figures — the requested
16
- * budget and the one now in force — because the whole point is that the two
17
- * have diverged, and an operator comparing the elapsed time against the
18
- * number they typed would otherwise conclude the timeout is broken.
15
+ * Exported for direct unit testing. It names both figures, the requested
16
+ * budget and the one now in force, because they have diverged and an
17
+ * operator comparing the elapsed time against the number they typed would
18
+ * otherwise conclude the timeout is broken.
19
19
  */
20
20
  export declare function formatWaitExtendedLine(ahead: number, budgetMs: number, requestedMs: number): string;
21
21
  /**
@@ -24,8 +24,8 @@ export declare function formatWaitExtendedLine(ahead: number, budgetMs: number,
24
24
  */
25
25
  export declare function withEngineSessionLock<T>(projectRoot: string, command: string, operation: () => Promise<T>, options?: EngineSessionLockOptions): Promise<T>;
26
26
  /**
27
- * Inspects the project's engine-session lock without acquiring it —
28
- * backing `fireforge status --lock`.
27
+ * Inspects the project's engine-session lock without acquiring it, backing
28
+ * `fireforge status --lock`.
29
29
  *
30
30
  * @param projectRoot - Project root containing `.fireforge/`
31
31
  * @returns Holder identity, hold duration, and queue depth
@@ -52,7 +52,7 @@ export declare function snapshotEngineGeneration(engineDir: string): Promise<str
52
52
  */
53
53
  export declare function isIndexLockError(error: unknown): boolean;
54
54
  /**
55
- * True when a generation token records a failed probe — i.e. nothing was
55
+ * True when a generation token records a failed probe, i.e. nothing was
56
56
  * measured, so the token must never be compared (or hashed) as if it
57
57
  * described the engine's state.
58
58
  */
@@ -62,8 +62,8 @@ export declare function unavailableGenerationReason(token: string): string;
62
62
  /**
63
63
  * Describes what moved between two generation tokens, in operator terms.
64
64
  *
65
- * The refusal used to say only THAT the engine changed, which left the
66
- * operator to reconstruct the writer by hand — `find -newermt` against the
65
+ * The refusal used to say only that the engine changed, which left the
66
+ * operator to reconstruct the writer by hand: `find -newermt` against the
67
67
  * run window, minus the objdir, minus git's own bookkeeping. Everything
68
68
  * needed to answer it is already in the two tokens, so the refusal answers
69
69
  * it. Pure and total: an unparseable token yields an empty list rather than
@@ -72,7 +72,7 @@ export declare function unavailableGenerationReason(token: string): string;
72
72
  *
73
73
  * @param before - Token captured before the run
74
74
  * @param after - Token captured after the run
75
- * @returns Human-readable lines describing the delta; empty when nothing
75
+ * @returns Human-readable lines describing the delta. Empty when nothing
76
76
  * could be attributed
77
77
  */
78
78
  export declare function describeEngineGenerationDelta(before: string, after: string): string[];
@@ -80,25 +80,25 @@ export declare function describeEngineGenerationDelta(before: string, after: str
80
80
  * Throws when the engine's generation token differs from `before`, i.e. the
81
81
  * engine was mutated by another writer while a test run was in flight.
82
82
  *
83
- * **An unmeasurable engine warns rather than throws.** `engine/` is not
84
- * always a git checkout — `fireforge download` extracts a source tarball —
83
+ * An unmeasurable engine warns rather than throws. `engine/` is not
84
+ * always a git checkout (`fireforge download` extracts a source tarball),
85
85
  * so a failed probe is a legitimate state and must not fail the run.
86
86
  *
87
- * What it must also not do is pass *silently*. A failure token compared for
87
+ * It must also not pass silently. A failure token compared for
88
88
  * equality like any other would let a git failure that reproduces across
89
89
  * both probes (unreadable `.git`, a permissions problem, a corrupt index)
90
90
  * take the `after === before` early return and bless a verdict the guard
91
- * never verified. Two *differing* failure messages are worse still: they
91
+ * never verified. Two differing failure messages are worse still: they
92
92
  * fall through to the mutation branch and report a spurious
93
93
  * "engine/ changed". Hence the prefix comparison rather than a token
94
- * comparison — the token embeds the error message, and two genuine failures
94
+ * comparison: the token embeds the error message, and two genuine failures
95
95
  * rarely phrase it identically.
96
96
  *
97
- * The tolerance is deliberately limited to a probe that failed *both* times:
97
+ * The tolerance is limited to a probe that failed both times:
98
98
  * that is the steady state of a non-git `engine/`, and it warns. A one-sided
99
99
  * transition is not that state. An `engine/` that was measurable and then
100
100
  * was not means the second probe measured nothing about a checkout that
101
- * demonstrably had something to measure; the reverse means there was never a
101
+ * demonstrably had something to measure. The reverse means there was never a
102
102
  * baseline to compare against. Neither verdict can be trusted, so both throw.
103
103
  */
104
104
  export declare function assertEngineGenerationUnchanged(engineDir: string, before: string): Promise<void>;