@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
@@ -2,29 +2,43 @@ import type { PatchesManifest, PatchLintIssue } from '../types/commands/index.js
2
2
  import type { ExportOptions, PatchCategory } from '../types/commands/index.js';
3
3
  import type { FireForgeConfig } from '../types/config.js';
4
4
  import type { SpinnerHandle } from '../utils/logger.js';
5
+ export interface RunPatchLintOptions {
6
+ /** Engine root directory. */
7
+ engineDir: string;
8
+ /** Files touched by the patch. */
9
+ filesAffected: string[];
10
+ /** Raw unified diff string. */
11
+ diffContent: string;
12
+ /** Project configuration. */
13
+ config: FireForgeConfig;
14
+ /** If true, downgrade errors to warnings. */
15
+ skipLint?: boolean | undefined;
16
+ /** Optional cross-patch context for ownership resolution. */
17
+ patchQueueCtx?: import('../core/patch-lint-cross.js').PatchQueueContext | undefined;
18
+ /**
19
+ * Optional per-patch set of `check` IDs to suppress (threaded from
20
+ * `PatchMetadata.lintIgnore`). Surgical alternative to `--skip-lint` when
21
+ * exactly one advisory rule does not apply to a specific patch, e.g.
22
+ * `large-patch-lines` on a cohesive branding bundle that genuinely cannot
23
+ * be split.
24
+ */
25
+ ignoreChecks?: ReadonlySet<string> | undefined;
26
+ /**
27
+ * Optional explicit tier override (threaded from `PatchMetadata.tier`).
28
+ * Forces the branding-tier thresholds when set, independent of the
29
+ * auto-detect allowlist. When the branding tier is applied, a single
30
+ * `info()` line surfaces the choice so the tier decision is visible rather
31
+ * than silent.
32
+ */
33
+ patchTier?: 'branding' | undefined;
34
+ }
5
35
  /**
6
36
  * Runs the full patch lint pipeline and reports results. Warnings are always
7
37
  * displayed. Errors block the export unless skipLint is true.
8
38
  *
9
- * @param engineDir - Engine root directory
10
- * @param filesAffected - Files touched by the patch
11
- * @param diffContent - Raw unified diff string
12
- * @param config - Project configuration
13
- * @param skipLint - If true, downgrade errors to warnings
14
- * @param patchQueueCtx - Optional cross-patch context for ownership
15
- * resolution
16
- * @param ignoreChecks - Optional per-patch set of `check` IDs to suppress
17
- * (threaded from `PatchMetadata.lintIgnore`). Surgical alternative to
18
- * `--skip-lint` when exactly one advisory rule does not apply to a
19
- * specific patch — e.g. `large-patch-lines` on a cohesive branding bundle
20
- * that genuinely cannot be split.
21
- * @param patchTier - Optional explicit tier override (threaded from
22
- * `PatchMetadata.tier`). Forces the branding-tier thresholds when set,
23
- * independent of the auto-detect allowlist. When the branding tier is
24
- * applied, a single `info()` line surfaces the choice so the tier decision
25
- * is visible rather than silent.
39
+ * @param options - See {@link RunPatchLintOptions}
26
40
  */
27
- export declare function runPatchLint(engineDir: string, filesAffected: string[], diffContent: string, config: FireForgeConfig, skipLint?: boolean, patchQueueCtx?: import('../core/patch-lint-cross.js').PatchQueueContext, ignoreChecks?: ReadonlySet<string>, patchTier?: 'branding'): Promise<void>;
41
+ export declare function runPatchLint(options: RunPatchLintOptions): Promise<void>;
28
42
  /**
29
43
  * Prints a patch-lint issue list with `runPatchLint`'s exact severity
30
44
  * buckets and skip-lint semantics, throwing on errors unless `skipLint`.
@@ -32,17 +46,22 @@ export declare function runPatchLint(engineDir: string, filesAffected: string[],
32
46
  * stored issues through the identical reporter without re-linting.
33
47
  */
34
48
  export declare function reportPatchLintOutcome(issues: PatchLintIssue[], skipLint?: boolean): void;
49
+ /** Patch identity resolved for an export, from flags or interactive prompts. */
50
+ export interface ExportPatchMetadata {
51
+ /** Normalized patch name (without order prefix or extension). */
52
+ patchName: string;
53
+ /** Category the patch is filed under. */
54
+ selectedCategory: PatchCategory;
55
+ /** Human-readable patch description. */
56
+ description: string;
57
+ }
35
58
  /**
36
59
  * Resolves patch metadata interactively or from flags, with shared validation.
37
60
  * @param options - Export command options
38
61
  * @param isInteractive - Whether interactive prompts are allowed
39
62
  * @param commandName - Command name for error/help text
40
63
  */
41
- export declare function promptExportPatchMetadata(options: ExportOptions, isInteractive: boolean, commandName: 'export' | 'export-all', config?: FireForgeConfig): Promise<{
42
- patchName: string;
43
- selectedCategory: PatchCategory;
44
- description: string;
45
- } | null>;
64
+ export declare function promptExportPatchMetadata(options: ExportOptions, isInteractive: boolean, commandName: 'export' | 'export-all', config?: FireForgeConfig): Promise<ExportPatchMetadata | null>;
46
65
  /**
47
66
  * Confirms whether an export may supersede existing patches.
48
67
  * @param patchesDir - Patches directory
@@ -56,14 +75,14 @@ export declare function confirmSupersedePatches(patchesDir: string, filesAffecte
56
75
  * Detects new files missing license headers and offers to add them.
57
76
  *
58
77
  * In interactive mode the user is prompted before any files are modified. In
59
- * non-interactive mode the function is a no-op — the existing lint error
78
+ * non-interactive mode the function is a no-op. The existing lint error
60
79
  * blocks the export instead.
61
80
  *
62
81
  * @param engineDir - Absolute path to engine directory
63
82
  * @param diffContent - Current unified diff
64
83
  * @param config - Project configuration
65
84
  * @param isInteractive - Whether interactive prompts are available
66
- * @param dryRun - When true, only REPORT missing headers, never prompt or
85
+ * @param dryRun - When true, only report missing headers, never prompt or
67
86
  * write. Dry-run must stay read-only: without this flag an interactive
68
87
  * `export --dry-run` prompts (default Yes), writes license headers into
69
88
  * engine/ files, and then closes with "no changes made".
@@ -77,23 +96,23 @@ export declare function autoFixLicenseHeaders(engineDir: string, diffContent: st
77
96
  *
78
97
  * Returns an empty map when no overlap exists. Used by the overlap gate in
79
98
  * `export` and `export-all` to refuse a default-mode export that would
80
- * silently create cross-patch ownership conflicts — the same class of
99
+ * silently create cross-patch ownership conflicts, the same class of
81
100
  * conflict `verify` immediately fails with.
82
101
  */
83
102
  export declare function findPartialOwnershipOverlap(manifest: PatchesManifest, filesAffected: string[], excludeFilenames: ReadonlySet<string>): Map<string, string[]>;
84
103
  /**
85
104
  * Gate that refuses the default export path when the new patch would
86
105
  * silently claim files already tracked by other non-superseded patches.
87
- * `findAllPatchesForFiles` catches the full-coverage supersede case; this
88
- * fills the gap for PARTIAL overlap — two patches both claiming e.g.
106
+ * `findAllPatchesForFiles` catches the full-coverage supersede case. This
107
+ * fills the gap for partial overlap: two patches both claiming e.g.
89
108
  * `browser/themes/shared/jar.inc.mn` after a second export with `--before`.
90
109
  *
91
110
  * Proceeds silently when there is no overlap, or when the caller passed
92
111
  * `--allow-overlap`. In interactive mode the caller is prompted to
93
112
  * acknowledge the overlap (the proper fix path is `re-export --files` to
94
113
  * repartition ownership, so the prompt surfaces that pointer). In
95
- * non-interactive mode it throws — better to fail fast than let the queue
96
- * fall out of sync with verify.
114
+ * non-interactive mode it throws, since failing fast beats letting the
115
+ * queue fall out of sync with verify.
97
116
  */
98
117
  export declare function guardOwnershipOverlap(args: {
99
118
  patchesDir: string;
@@ -108,7 +127,7 @@ export declare function guardOwnershipOverlap(args: {
108
127
  * order: the supersede confirmation, then the cross-patch ownership overlap
109
128
  * guard. The overlap guard receives the filenames of the patches the export
110
129
  * would fully supersede so it does not flag a file claimed by a patch that
111
- * is about to be removed. Catching only FULL-coverage supersedes leaves a
130
+ * is about to be removed. Catching only full-coverage supersedes leaves a
112
131
  * second export targeting a shared file creating a queue where two patches
113
132
  * both claim it and `verify` fails immediately.
114
133
  *
@@ -119,7 +138,7 @@ export declare function guardOwnershipOverlap(args: {
119
138
  * @param args.allowOverlap - The command's `--allow-overlap` flag
120
139
  * @param args.isInteractive - Whether prompting the operator is possible
121
140
  * @param args.s - Active spinner, stopped before any prompt
122
- * @returns `true` when both gates passed; `false` when the operator declined
141
+ * @returns `true` when both gates passed, `false` when the operator declined
123
142
  * (the caller returns without committing)
124
143
  */
125
144
  export declare function runSupersedeAndOverlapGates(args: {
@@ -15,27 +15,12 @@ import { describePatchNameProblem, normalizePatchDisplayName, PATCH_CATEGORIES,
15
15
  * Runs the full patch lint pipeline and reports results. Warnings are always
16
16
  * displayed. Errors block the export unless skipLint is true.
17
17
  *
18
- * @param engineDir - Engine root directory
19
- * @param filesAffected - Files touched by the patch
20
- * @param diffContent - Raw unified diff string
21
- * @param config - Project configuration
22
- * @param skipLint - If true, downgrade errors to warnings
23
- * @param patchQueueCtx - Optional cross-patch context for ownership
24
- * resolution
25
- * @param ignoreChecks - Optional per-patch set of `check` IDs to suppress
26
- * (threaded from `PatchMetadata.lintIgnore`). Surgical alternative to
27
- * `--skip-lint` when exactly one advisory rule does not apply to a
28
- * specific patch — e.g. `large-patch-lines` on a cohesive branding bundle
29
- * that genuinely cannot be split.
30
- * @param patchTier - Optional explicit tier override (threaded from
31
- * `PatchMetadata.tier`). Forces the branding-tier thresholds when set,
32
- * independent of the auto-detect allowlist. When the branding tier is
33
- * applied, a single `info()` line surfaces the choice so the tier decision
34
- * is visible rather than silent.
18
+ * @param options - See {@link RunPatchLintOptions}
35
19
  */
36
- export async function runPatchLint(engineDir, filesAffected, diffContent, config, skipLint, patchQueueCtx, ignoreChecks, patchTier) {
20
+ export async function runPatchLint(options) {
21
+ const { engineDir, filesAffected, diffContent, config, skipLint, patchQueueCtx, ignoreChecks, patchTier, } = options;
37
22
  // Compute the tier decision independently of the lint pipeline so it can
38
- // be surfaced even when the rule body emitted no issues — a branding patch
23
+ // be surfaced even when the rule body emitted no issues. A branding patch
39
24
  // under the soft threshold still benefits from operators knowing which
40
25
  // tier governed the run. The same helper is reused inside `lintPatchSize`,
41
26
  // so the surfaced tier and the tier that actually drove the thresholds
@@ -115,8 +100,8 @@ export function reportPatchLintOutcome(issues, skipLint) {
115
100
  */
116
101
  export async function promptExportPatchMetadata(options, isInteractive, commandName, config) {
117
102
  const categories = config !== undefined ? getPatchPolicyCategories(config) : [...PATCH_CATEGORIES];
118
- // A filename-shaped `--name foo.patch` must not die on the dot rule —
119
- // strip the extension before validation so the one-step flow works for
103
+ // A filename-shaped `--name foo.patch` must not die on the dot rule, so
104
+ // strip the extension before validation and the one-step flow works for
120
105
  // both name shapes.
121
106
  let patchName = options.name?.trim().replace(/\.patch$/i, '');
122
107
  if (patchName) {
@@ -173,7 +158,7 @@ export async function promptExportPatchMetadata(options, isInteractive, commandN
173
158
  description = descResult;
174
159
  }
175
160
  }
176
- // The filename slug pipeline strips redundant category prefixes; the
161
+ // The filename slug pipeline strips redundant category prefixes. The
177
162
  // manifest display name must agree, or every `export --name ui-foo`
178
163
  // needs a follow-up `patch rename` to satisfy bare-slug naming policy.
179
164
  const normalized = normalizePatchDisplayName(patchName, category);
@@ -223,14 +208,14 @@ export async function confirmSupersedePatches(patchesDir, filesAffected, superse
223
208
  * Detects new files missing license headers and offers to add them.
224
209
  *
225
210
  * In interactive mode the user is prompted before any files are modified. In
226
- * non-interactive mode the function is a no-op — the existing lint error
211
+ * non-interactive mode the function is a no-op. The existing lint error
227
212
  * blocks the export instead.
228
213
  *
229
214
  * @param engineDir - Absolute path to engine directory
230
215
  * @param diffContent - Current unified diff
231
216
  * @param config - Project configuration
232
217
  * @param isInteractive - Whether interactive prompts are available
233
- * @param dryRun - When true, only REPORT missing headers, never prompt or
218
+ * @param dryRun - When true, only report missing headers, never prompt or
234
219
  * write. Dry-run must stay read-only: without this flag an interactive
235
220
  * `export --dry-run` prompts (default Yes), writes license headers into
236
221
  * engine/ files, and then closes with "no changes made".
@@ -308,7 +293,7 @@ export async function autoFixLicenseHeaders(engineDir, diffContent, config, isIn
308
293
  *
309
294
  * Returns an empty map when no overlap exists. Used by the overlap gate in
310
295
  * `export` and `export-all` to refuse a default-mode export that would
311
- * silently create cross-patch ownership conflicts — the same class of
296
+ * silently create cross-patch ownership conflicts, the same class of
312
297
  * conflict `verify` immediately fails with.
313
298
  */
314
299
  export function findPartialOwnershipOverlap(manifest, filesAffected, excludeFilenames) {
@@ -330,16 +315,16 @@ export function findPartialOwnershipOverlap(manifest, filesAffected, excludeFile
330
315
  /**
331
316
  * Gate that refuses the default export path when the new patch would
332
317
  * silently claim files already tracked by other non-superseded patches.
333
- * `findAllPatchesForFiles` catches the full-coverage supersede case; this
334
- * fills the gap for PARTIAL overlap — two patches both claiming e.g.
318
+ * `findAllPatchesForFiles` catches the full-coverage supersede case. This
319
+ * fills the gap for partial overlap: two patches both claiming e.g.
335
320
  * `browser/themes/shared/jar.inc.mn` after a second export with `--before`.
336
321
  *
337
322
  * Proceeds silently when there is no overlap, or when the caller passed
338
323
  * `--allow-overlap`. In interactive mode the caller is prompted to
339
324
  * acknowledge the overlap (the proper fix path is `re-export --files` to
340
325
  * repartition ownership, so the prompt surfaces that pointer). In
341
- * non-interactive mode it throws — better to fail fast than let the queue
342
- * fall out of sync with verify.
326
+ * non-interactive mode it throws, since failing fast beats letting the
327
+ * queue fall out of sync with verify.
343
328
  */
344
329
  export async function guardOwnershipOverlap(args) {
345
330
  const { patchesDir, filesAffected, supersedingFilenames, allowOverlap, isInteractive, s } = args;
@@ -353,7 +338,7 @@ export async function guardOwnershipOverlap(args) {
353
338
  return true;
354
339
  s.stop();
355
340
  const entries = [...overlap.entries()].sort(([a], [b]) => a.localeCompare(b));
356
- warn(`This export would create cross-patch ownership overlap on ${String(entries.length)} file${entries.length === 1 ? '' : 's'}:`);
341
+ warn(`This export would create cross-patch ownership overlap on ${entries.length} file${entries.length === 1 ? '' : 's'}:`);
357
342
  for (const [file, owners] of entries) {
358
343
  warn(` - ${file} already claimed by: ${owners.join(', ')}`);
359
344
  }
@@ -379,7 +364,7 @@ export async function guardOwnershipOverlap(args) {
379
364
  * order: the supersede confirmation, then the cross-patch ownership overlap
380
365
  * guard. The overlap guard receives the filenames of the patches the export
381
366
  * would fully supersede so it does not flag a file claimed by a patch that
382
- * is about to be removed. Catching only FULL-coverage supersedes leaves a
367
+ * is about to be removed. Catching only full-coverage supersedes leaves a
383
368
  * second export targeting a shared file creating a queue where two patches
384
369
  * both claim it and `verify` fails immediately.
385
370
  *
@@ -390,7 +375,7 @@ export async function guardOwnershipOverlap(args) {
390
375
  * @param args.allowOverlap - The command's `--allow-overlap` flag
391
376
  * @param args.isInteractive - Whether prompting the operator is possible
392
377
  * @param args.s - Active spinner, stopped before any prompt
393
- * @returns `true` when both gates passed; `false` when the operator declined
378
+ * @returns `true` when both gates passed, `false` when the operator declined
394
379
  * (the caller returns without committing)
395
380
  */
396
381
  export async function runSupersedeAndOverlapGates(args) {
@@ -88,11 +88,11 @@ async function collectExportFiles(paths, files) {
88
88
  return { files: [...collectedFiles].sort(), fromDirectory };
89
89
  }
90
90
  /**
91
- * Auto-excludes directory-derived files already owned by OTHER patches.
91
+ * Auto-excludes directory-derived files already owned by other patches.
92
92
  *
93
93
  * A directory export otherwise plans files owned by earlier patches into the
94
94
  * new patch, and the duplicate-new-file-creation refusal surfaces only at
95
- * placement lint, suggesting `--force-unsafe` — the wrong tool for "leave
95
+ * placement lint, suggesting `--force-unsafe`, the wrong tool for "leave
96
96
  * that file with its owner". Explicitly named files are never excluded (the
97
97
  * overlap gates still confront the operator with those). Prints one notice
98
98
  * per exclusion.
@@ -217,7 +217,7 @@ async function prepareExport(projectRoot, files, options) {
217
217
  }
218
218
  const config = await loadConfig(projectRoot);
219
219
  const isInteractive = stdioIsInteractive();
220
- // Auto-fix missing license headers on new files (interactive only;
220
+ // Auto-fix missing license headers on new files (interactive only, and
221
221
  // report-only under --dry-run so the preview never mutates engine/)
222
222
  const headersAdded = await autoFixLicenseHeaders(paths.engine, diff, config, isInteractive, options.dryRun ?? false);
223
223
  if (headersAdded) {
@@ -258,9 +258,18 @@ export async function exportCommand(projectRoot, files, options) {
258
258
  const patchQueueCtx = (await pathExists(paths.patches))
259
259
  ? await buildPatchQueueContext(paths.patches)
260
260
  : undefined;
261
- await runPatchLint(paths.engine, filesAffected, diff, config, options.skipLint, patchQueueCtx, exportIgnoreChecks, options.tier);
261
+ await runPatchLint({
262
+ engineDir: paths.engine,
263
+ filesAffected,
264
+ diffContent: diff,
265
+ config,
266
+ skipLint: options.skipLint,
267
+ patchQueueCtx,
268
+ ignoreChecks: exportIgnoreChecks,
269
+ patchTier: options.tier,
270
+ });
262
271
  // Resolve placement (if any flag was given). Placement is mutually
263
- // exclusive with supersede — the semantics overlap confusingly.
272
+ // exclusive with supersede, because the semantics overlap confusingly.
264
273
  let placementPlan = null;
265
274
  if (placementFlagCount > 0) {
266
275
  const gated = await gatePlacementPlan({
@@ -29,7 +29,7 @@ async function snapshotWatchedChecksums(watchDirs) {
29
29
  }
30
30
  }
31
31
  catch {
32
- // Directory may have been removed between iterations — ignore.
32
+ // Directory may have been removed between iterations, so ignore.
33
33
  }
34
34
  }
35
35
  return combined;
@@ -46,7 +46,7 @@ function checksumMapsEqual(a, b) {
46
46
  /**
47
47
  * Builds a watch-loop apply-failure message tailored to the error class so
48
48
  * transient filesystem errors (EACCES, ENOSPC, lock timeout) look different
49
- * from genuine apply-level failures; the previous generic "Apply failed: ..."
49
+ * from genuine apply-level failures. The previous generic "Apply failed: ..."
50
50
  * collapsed all causes into one string and made diagnosis difficult.
51
51
  */
52
52
  function classifyWatchApplyError(err) {
@@ -74,8 +74,8 @@ function classifyWatchApplyError(err) {
74
74
  }
75
75
  async function runWatchLoop(projectRoot) {
76
76
  const furnacePaths = getFurnacePaths(projectRoot);
77
- // Both categories are eligible targets. The set is fixed; only existence
78
- // varies over time — a component dir created AFTER watch started (the user
77
+ // Both categories are eligible targets. The set is fixed. Only existence
78
+ // varies over time: a component dir created after watch started (the user
79
79
  // running `furnace create` in another terminal) must be picked up without
80
80
  // restarting watch. A one-shot `pathExists` check at startup captures only
81
81
  // the dirs that existed then, leaving any later creation invisible.
@@ -115,8 +115,8 @@ async function runWatchLoop(projectRoot) {
115
115
  // for changes that are already reflected in the engine.
116
116
  lastChecksums = await snapshotWatchedChecksums(watchDirs);
117
117
  }
118
- // Another change arrived while we were applying — run again so the edit
119
- // is not silently absorbed into the post-apply checksum bump.
118
+ // Another change arrived while we were applying, so run again and the
119
+ // edit is not silently absorbed into the post-apply checksum bump.
120
120
  if (pendingChange) {
121
121
  pendingChange = false;
122
122
  await runApplyCycle();
@@ -124,7 +124,7 @@ async function runWatchLoop(projectRoot) {
124
124
  };
125
125
  const triggerApply = () => {
126
126
  if (applyInFlight) {
127
- // An apply is already running; record the change so runApplyCycle
127
+ // An apply is already running. Record the change so runApplyCycle
128
128
  // re-runs after it completes. Do not schedule a new debounce: the
129
129
  // in-flight apply will observe this flag when it finishes.
130
130
  pendingChange = true;
@@ -136,7 +136,7 @@ async function runWatchLoop(projectRoot) {
136
136
  debounceTimer = null;
137
137
  if (applyInFlight) {
138
138
  // Race with a change that started its own apply between the debounce
139
- // scheduling and the timer firing. Record the pending change; the
139
+ // scheduling and the timer firing. Record the pending change. The
140
140
  // in-flight apply will pick it up.
141
141
  pendingChange = true;
142
142
  return;
@@ -188,7 +188,7 @@ async function runWatchLoop(projectRoot) {
188
188
  }
189
189
  return added;
190
190
  };
191
- // Register signal-driven cleanup BEFORE creating watchers so there is no
191
+ // Register signal-driven cleanup before creating watchers so there is no
192
192
  // race window where a SIGINT could arrive after watchers exist but before
193
193
  // cleanup handlers are registered.
194
194
  const cleanup = () => {
@@ -229,7 +229,7 @@ async function runWatchLoop(projectRoot) {
229
229
  }
230
230
  }
231
231
  catch {
232
- // Best effort — errors here are transient filesystem issues.
232
+ // Best effort: errors here are transient filesystem issues.
233
233
  }
234
234
  })();
235
235
  }, WATCH_POLL_INTERVAL_MS);
@@ -277,14 +277,14 @@ export async function furnaceApplyCommand(projectRoot, name, options = {}) {
277
277
  }
278
278
  const applySpinner = dryRun ? undefined : spinner('Applying components to engine...');
279
279
  const result = await runFurnaceMutation(projectRoot, 'apply-rollback', async (ctx) => {
280
- // `persistState: false` for a NAMED apply is load-bearing: the batch
281
- // persist path replaces `appliedChecksums` wholesale with only this
282
- // run's entries, and the batch loops filter to the named component —
283
- // so routing a named apply through it persists a state file containing
284
- // ONLY that component, wiping every other component's checksums.
280
+ // `persistState: false` for a named apply matters: the batch persist
281
+ // path replaces `appliedChecksums` wholesale with only this run's
282
+ // entries, and the batch loops filter to the named component, so
283
+ // routing a named apply through it persists a state file containing
284
+ // only that component and wipes every other component's checksums.
285
285
  // Orphan detection and deleted-file undeploy both key on that state,
286
286
  // so the wiped components' stale engine files become invisible to
287
- // apply AND to `furnace validate`. Named apply merges per-component
287
+ // apply and to `furnace validate`. Named apply merges per-component
288
288
  // state below, exactly like `furnace deploy <name>`.
289
289
  const applyResult = await applyAllComponents(projectRoot, dryRun, {
290
290
  operationContext: ctx,
@@ -0,0 +1,13 @@
1
+ import type { FurnaceConfig } from '../../types/index.js';
2
+ /**
3
+ * Loads `furnace.json` for an authoring command, defaulting to an empty
4
+ * configuration when the project has none yet.
5
+ *
6
+ * `furnace create` and `furnace override` both need this: they are the two
7
+ * commands that may run before any furnace configuration exists, and both must
8
+ * treat "no file" as "nothing registered yet" rather than an error. They had a
9
+ * byte-identical private copy each.
10
+ * @param projectRoot - Project root to load from.
11
+ * @returns The parsed configuration, or a fresh default.
12
+ */
13
+ export declare function loadAuthoringFurnaceConfig(projectRoot: string): Promise<FurnaceConfig>;
@@ -0,0 +1,19 @@
1
+ // SPDX-License-Identifier: EUPL-1.2
2
+ import { createDefaultFurnaceConfig, furnaceConfigExists, loadFurnaceConfig, } from '../../core/furnace-config.js';
3
+ /**
4
+ * Loads `furnace.json` for an authoring command, defaulting to an empty
5
+ * configuration when the project has none yet.
6
+ *
7
+ * `furnace create` and `furnace override` both need this: they are the two
8
+ * commands that may run before any furnace configuration exists, and both must
9
+ * treat "no file" as "nothing registered yet" rather than an error. They had a
10
+ * byte-identical private copy each.
11
+ * @param projectRoot - Project root to load from.
12
+ * @returns The parsed configuration, or a fresh default.
13
+ */
14
+ export async function loadAuthoringFurnaceConfig(projectRoot) {
15
+ if (await furnaceConfigExists(projectRoot)) {
16
+ return loadFurnaceConfig(projectRoot);
17
+ }
18
+ return createDefaultFurnaceConfig();
19
+ }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * `fireforge furnace chrome-doc remove <name>` — removes the files and
2
+ * `fireforge furnace chrome-doc remove <name>` removes the files and
3
3
  * registrations created by `furnace chrome-doc create`.
4
4
  */
5
5
  /** Options for `furnace chrome-doc remove`. */
@@ -1,6 +1,6 @@
1
1
  // SPDX-License-Identifier: EUPL-1.2
2
2
  /**
3
- * `fireforge furnace chrome-doc remove <name>` — removes the files and
3
+ * `fireforge furnace chrome-doc remove <name>` removes the files and
4
4
  * registrations created by `furnace chrome-doc create`.
5
5
  */
6
6
  import { readdir } from 'node:fs/promises';
@@ -10,7 +10,7 @@ import { loadConfig } from '../../core/config.js';
10
10
  import { stdioIsInteractive } from '../../core/destructive.js';
11
11
  import { completeJournalRollback, runFurnaceMutation, } from '../../core/furnace-operation.js';
12
12
  import { assertFurnaceEngineReady } from '../../core/furnace-precondition.js';
13
- import { createRollbackJournal, snapshotDir, snapshotFile } from '../../core/furnace-rollback.js';
13
+ import { createRollbackJournal, snapshotDir, snapshotFile, } from '../../core/furnace-rollback.js';
14
14
  import { FurnaceError } from '../../errors/furnace.js';
15
15
  import { pathExists, readText, removeDir, removeFile, writeText } from '../../utils/fs.js';
16
16
  import { cancel, info, intro, isCancel, note, outro } from '../../utils/logger.js';
@@ -41,21 +41,21 @@
41
41
  */
42
42
  export declare function generateChromeDocXhtml(name: string, withTitlebar: boolean, license: string): string;
43
43
  /**
44
- * browser.xhtml-like scaffold for the document that ships as the fork's MAIN
45
- * BROWSER WINDOW.
44
+ * browser.xhtml-like scaffold for the document that ships as the fork's main
45
+ * browser window.
46
46
  *
47
47
  * The generic dialog-shaped `<window>` scaffold is wrong for the
48
48
  * `tokenHostDocuments[0]` / BROWSER_CHROME_URL target: platform C++ reads
49
- * the root element BEFORE any script runs, and expects the `browser.xhtml`
49
+ * the root element before any script runs, and expects the `browser.xhtml`
50
50
  * shape:
51
51
  *
52
- * - `<html id="main-window">` root (not `<window id="<name>-window">`) —
52
+ * - `<html id="main-window">` root (not `<window id="<name>-window">`):
53
53
  * upstream code from nsXULWindow sizing to session restore looks up
54
- * `main-window` by id;
54
+ * `main-window` by id.
55
55
  * - `windowtype="navigator:browser"`, `chromehidden=""` and the geometry
56
- * `persist` allowlist declared as ROOT ATTRIBUTES so the platform's
56
+ * `persist` allowlist declared as root attributes so the platform's
57
57
  * pre-script pass (window tracking, XULStore geometry, chrome flags) sees
58
- * them;
58
+ * them.
59
59
  * - the same head/bootstrap wiring (customElements.js, per-doc subscript,
60
60
  * CSS + Fluent links) and `data-furnace-chrome-doc` sentinel as the
61
61
  * generic scaffold, so jar.mn registration and the platform-module guard
@@ -89,7 +89,7 @@ export declare function generateChromeDocJs(name: string, licenseHeader: string)
89
89
  * the platform window controls that `global.css` applies by default.
90
90
  */
91
91
  export declare function generateChromeDocCss(name: string, withTitlebar: boolean, licenseHeader: string): string;
92
- /** Fluent stub — one placeholder message keyed to the window title. */
92
+ /** Fluent stub with one placeholder message keyed to the window title. */
93
93
  export declare function generateChromeDocFtl(name: string, licenseHeader: string): string;
94
94
  /**
95
95
  * Single-line jar.mn entry that registers an xhtml + js pair under
@@ -110,7 +110,7 @@ export declare function jarMnEntriesForChromeDoc(name: string): string[];
110
110
  * The source path is `../shared/<name>-chrome.css` because `jar.inc.mn` is
111
111
  * included from each theme-specific manifest (`browser/themes/osx/jar.mn`,
112
112
  * `.../linux/`, `.../windows/`), and every existing entry in those manifests
113
- * resolves paths relative to the INCLUDING manifest's directory. A bare
113
+ * resolves paths relative to the including manifest's directory. A bare
114
114
  * `(shared/…)` path resolves to
115
115
  * `obj-.../browser/themes/osx/shared/<name>-chrome.css`, which does not
116
116
  * exist.
@@ -120,7 +120,7 @@ export declare function jarIncMnEntryForChromeDoc(name: string): string;
120
120
  * locales/jar.mn entry that registers the `.ftl` under the browser locale
121
121
  * bundle. The source path is resolved by mach-locale-jar relative to the
122
122
  * per-locale root (e.g. `engine/browser/locales/en-US/`), and the FTL file
123
- * is scaffolded at `browser/${name}.ftl` under that root — the `%` prefix
123
+ * is scaffolded at `browser/${name}.ftl` under that root. The `%` prefix
124
124
  * means "per-locale content" and the `browser/` subdirectory matches where
125
125
  * the scaffolder writes. A bare `(%${name}.ftl)` points at
126
126
  * `en-US/${name}.ftl` and breaks the first post-scaffold build with
@@ -132,11 +132,11 @@ export declare function localeJarMnEntryForChromeDoc(name: string): string;
132
132
  * wildcard rooted at `%browser/` whose pattern would already pick up a
133
133
  * scaffolded `browser/<name>.ftl` file. Recognises:
134
134
  *
135
- * - `(%browser/**\/*.ftl)` — recursive (the upstream shape).
136
- * - `(%browser/*.ftl)` — flat.
135
+ * - `(%browser/**\/*.ftl)`: recursive (the upstream shape).
136
+ * - `(%browser/*.ftl)`: flat.
137
137
  *
138
138
  * Forks that have migrated entirely to `[localization]` wildcards typically
139
- * keep no per-file `locale/...` entries for FTL at all; appending one
139
+ * keep no per-file `locale/...` entries for FTL at all. Appending one
140
140
  * there is dead weight at best, and an outright build break when the fork
141
141
  * has also dropped the `% locale browser …` registration. The chrome-doc
142
142
  * scaffolder consults this predicate before its locales/jar.mn append and
@@ -146,7 +146,7 @@ export declare function localeJarMnEntryForChromeDoc(name: string): string;
146
146
  * Conservative by design: only wildcards rooted at `%browser/` count, and
147
147
  * a `(%browser/foo.ftl)`-style explicit reference (no `*`) is not treated
148
148
  * as a capture. A fork with a narrower wildcard (e.g. `(%browser/about/*.ftl)`)
149
- * is correctly NOT captured by this predicate, because that wildcard would
149
+ * is correctly not captured by this predicate, because that wildcard would
150
150
  * not pick up the top-level `browser/<name>.ftl` the scaffold writes.
151
151
  */
152
152
  export declare function localesFtlWildcardCapturesScaffoldedName(jarMnContents: string): boolean;