@hominis/fireforge 0.49.2 → 0.51.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (400) hide show
  1. package/CHANGELOG.md +87 -1
  2. package/README.md +1 -1
  3. package/dist/bin/fireforge.js +6 -0
  4. package/dist/build-info.json +4 -4
  5. package/dist/src/commands/build-prelock.d.ts +20 -0
  6. package/dist/src/commands/build-prelock.js +50 -0
  7. package/dist/src/commands/build.d.ts +3 -1
  8. package/dist/src/commands/build.js +13 -6
  9. package/dist/src/commands/check-report.d.ts +41 -0
  10. package/dist/src/commands/check-report.js +91 -0
  11. package/dist/src/commands/check-run.d.ts +33 -0
  12. package/dist/src/commands/check-run.js +112 -0
  13. package/dist/src/commands/check-steps.d.ts +75 -0
  14. package/dist/src/commands/check-steps.js +200 -0
  15. package/dist/src/commands/check.d.ts +32 -0
  16. package/dist/src/commands/check.js +160 -0
  17. package/dist/src/commands/config.js +5 -6
  18. package/dist/src/commands/declarations-report.d.ts +43 -0
  19. package/dist/src/commands/declarations-report.js +76 -0
  20. package/dist/src/commands/doctor-engine-eslint.js +6 -1
  21. package/dist/src/commands/doctor-source-pin.js +4 -1
  22. package/dist/src/commands/export-adopt-check.d.ts +38 -0
  23. package/dist/src/commands/export-adopt-check.js +98 -0
  24. package/dist/src/commands/export-flow.js +29 -14
  25. package/dist/src/commands/export-placement-gate.d.ts +6 -2
  26. package/dist/src/commands/export-placement-gate.js +8 -0
  27. package/dist/src/commands/export-shared.d.ts +2 -1
  28. package/dist/src/commands/export-staged-registration.d.ts +46 -0
  29. package/dist/src/commands/export-staged-registration.js +91 -0
  30. package/dist/src/commands/forward-import-remedy.d.ts +32 -0
  31. package/dist/src/commands/forward-import-remedy.js +63 -0
  32. package/dist/src/commands/furnace/apply.js +3 -3
  33. package/dist/src/commands/furnace/chrome-doc-remove.d.ts +2 -1
  34. package/dist/src/commands/furnace/chrome-doc-remove.js +2 -2
  35. package/dist/src/commands/furnace/chrome-doc.d.ts +2 -1
  36. package/dist/src/commands/furnace/chrome-doc.js +2 -2
  37. package/dist/src/commands/furnace/create.js +2 -2
  38. package/dist/src/commands/furnace/deploy-named.d.ts +48 -0
  39. package/dist/src/commands/furnace/deploy-named.js +107 -0
  40. package/dist/src/commands/furnace/deploy.d.ts +3 -2
  41. package/dist/src/commands/furnace/deploy.js +50 -86
  42. package/dist/src/commands/furnace/diff.js +26 -3
  43. package/dist/src/commands/furnace/index.js +66 -41
  44. package/dist/src/commands/furnace/init.js +13 -6
  45. package/dist/src/commands/furnace/override.js +4 -2
  46. package/dist/src/commands/furnace/preview.js +4 -3
  47. package/dist/src/commands/furnace/refresh.js +2 -2
  48. package/dist/src/commands/furnace/remove.js +4 -3
  49. package/dist/src/commands/furnace/rename-dry-run.d.ts +29 -0
  50. package/dist/src/commands/furnace/rename-dry-run.js +127 -0
  51. package/dist/src/commands/furnace/rename-helpers.d.ts +7 -0
  52. package/dist/src/commands/furnace/rename-helpers.js +15 -1
  53. package/dist/src/commands/furnace/rename-registrations.d.ts +41 -0
  54. package/dist/src/commands/furnace/rename-registrations.js +98 -0
  55. package/dist/src/commands/furnace/rename.d.ts +2 -1
  56. package/dist/src/commands/furnace/rename.js +28 -66
  57. package/dist/src/commands/furnace/scan.d.ts +9 -4
  58. package/dist/src/commands/furnace/scan.js +11 -9
  59. package/dist/src/commands/furnace/sync.js +3 -2
  60. package/dist/src/commands/furnace/validate-report.d.ts +45 -0
  61. package/dist/src/commands/furnace/validate-report.js +91 -0
  62. package/dist/src/commands/furnace/validate.d.ts +1 -1
  63. package/dist/src/commands/furnace/validate.js +151 -113
  64. package/dist/src/commands/furnace/validation-output.js +14 -3
  65. package/dist/src/commands/lint-per-patch.js +36 -61
  66. package/dist/src/commands/lint-per-run-checkjs.js +2 -2
  67. package/dist/src/commands/lint-report.d.ts +8 -4
  68. package/dist/src/commands/lint-report.js +20 -5
  69. package/dist/src/commands/lint.js +15 -34
  70. package/dist/src/commands/manifest.js +4 -0
  71. package/dist/src/commands/park.d.ts +22 -0
  72. package/dist/src/commands/park.js +232 -0
  73. package/dist/src/commands/patch/delete-gap-notice.js +3 -1
  74. package/dist/src/commands/patch/delete.d.ts +1 -1
  75. package/dist/src/commands/patch/delete.js +24 -104
  76. package/dist/src/commands/patch/index.d.ts +3 -3
  77. package/dist/src/commands/patch/index.js +10 -4
  78. package/dist/src/commands/patch/lint-ignore-from.d.ts +44 -0
  79. package/dist/src/commands/patch/lint-ignore-from.js +142 -0
  80. package/dist/src/commands/patch/lint-ignore.d.ts +5 -1
  81. package/dist/src/commands/patch/lint-ignore.js +78 -31
  82. package/dist/src/commands/patch/move-files-create.js +34 -18
  83. package/dist/src/commands/patch/move-files-into.js +15 -7
  84. package/dist/src/commands/patch/move-files.js +6 -2
  85. package/dist/src/commands/patch/removal-created-files.d.ts +48 -0
  86. package/dist/src/commands/patch/removal-created-files.js +83 -0
  87. package/dist/src/commands/patch/removal-dependents.d.ts +63 -0
  88. package/dist/src/commands/patch/removal-dependents.js +133 -0
  89. package/dist/src/commands/patch/rename.js +20 -1
  90. package/dist/src/commands/patch/reserve.d.ts +33 -0
  91. package/dist/src/commands/patch/reserve.js +152 -0
  92. package/dist/src/commands/patch/retire.d.ts +34 -0
  93. package/dist/src/commands/patch/retire.js +133 -0
  94. package/dist/src/commands/patch/split-plan.d.ts +17 -8
  95. package/dist/src/commands/patch/split-plan.js +60 -28
  96. package/dist/src/commands/patch/split-staged.d.ts +108 -0
  97. package/dist/src/commands/patch/split-staged.js +202 -0
  98. package/dist/src/commands/patch/split.d.ts +5 -0
  99. package/dist/src/commands/patch/split.js +62 -17
  100. package/dist/src/commands/patch/stage.d.ts +34 -0
  101. package/dist/src/commands/patch/stage.js +153 -0
  102. package/dist/src/commands/patch/staged-dependency-batch.d.ts +48 -0
  103. package/dist/src/commands/patch/staged-dependency-batch.js +176 -0
  104. package/dist/src/commands/patch/staged-dependency-entries.d.ts +36 -0
  105. package/dist/src/commands/patch/staged-dependency-entries.js +52 -0
  106. package/dist/src/commands/patch/staged-dependency-from.d.ts +14 -0
  107. package/dist/src/commands/patch/staged-dependency-from.js +108 -0
  108. package/dist/src/commands/patch/staged-dependency-remove.d.ts +31 -0
  109. package/dist/src/commands/patch/staged-dependency-remove.js +80 -0
  110. package/dist/src/commands/patch/staged-dependency.js +54 -139
  111. package/dist/src/commands/re-export-adjacent-registrations.d.ts +20 -0
  112. package/dist/src/commands/re-export-adjacent-registrations.js +75 -0
  113. package/dist/src/commands/re-export-adjacent.d.ts +50 -2
  114. package/dist/src/commands/re-export-adjacent.js +160 -40
  115. package/dist/src/commands/re-export-bulk-scan.d.ts +2 -1
  116. package/dist/src/commands/re-export-bulk-scan.js +22 -7
  117. package/dist/src/commands/re-export-drift.d.ts +36 -8
  118. package/dist/src/commands/re-export-drift.js +73 -49
  119. package/dist/src/commands/re-export-files.js +11 -8
  120. package/dist/src/commands/re-export-hunks.d.ts +35 -0
  121. package/dist/src/commands/re-export-hunks.js +220 -0
  122. package/dist/src/commands/re-export-lint.d.ts +2 -1
  123. package/dist/src/commands/re-export-lint.js +23 -10
  124. package/dist/src/commands/re-export-options.js +74 -6
  125. package/dist/src/commands/re-export-preflight.d.ts +23 -0
  126. package/dist/src/commands/re-export-preflight.js +160 -0
  127. package/dist/src/commands/re-export-purity-scope.d.ts +18 -0
  128. package/dist/src/commands/re-export-purity-scope.js +131 -0
  129. package/dist/src/commands/re-export-register.js +56 -17
  130. package/dist/src/commands/re-export-removed.d.ts +13 -2
  131. package/dist/src/commands/re-export-removed.js +57 -12
  132. package/dist/src/commands/re-export-scan-owner.d.ts +44 -0
  133. package/dist/src/commands/re-export-scan-owner.js +116 -0
  134. package/dist/src/commands/re-export-scan.d.ts +19 -9
  135. package/dist/src/commands/re-export-scan.js +60 -24
  136. package/dist/src/commands/re-export-single.js +122 -46
  137. package/dist/src/commands/re-export-stale-registrations.d.ts +18 -0
  138. package/dist/src/commands/re-export-stale-registrations.js +62 -0
  139. package/dist/src/commands/re-export-summary.d.ts +28 -0
  140. package/dist/src/commands/re-export-summary.js +36 -0
  141. package/dist/src/commands/re-export.js +71 -57
  142. package/dist/src/commands/rebase/index.js +17 -17
  143. package/dist/src/commands/run.js +16 -2
  144. package/dist/src/commands/status-check.d.ts +55 -16
  145. package/dist/src/commands/status-check.js +92 -37
  146. package/dist/src/commands/status-json.d.ts +22 -9
  147. package/dist/src/commands/status-json.js +47 -32
  148. package/dist/src/commands/status-output.js +3 -1
  149. package/dist/src/commands/status-scope.d.ts +37 -0
  150. package/dist/src/commands/status-scope.js +54 -0
  151. package/dist/src/commands/status.js +66 -23
  152. package/dist/src/commands/test-browser-preflight.js +19 -3
  153. package/dist/src/commands/test-build-furnace.d.ts +22 -0
  154. package/dist/src/commands/test-build-furnace.js +54 -0
  155. package/dist/src/commands/test-build-phase.js +64 -41
  156. package/dist/src/commands/test-checkjs.js +10 -2
  157. package/dist/src/commands/test-diagnose.js +7 -0
  158. package/dist/src/commands/test-dispatch.d.ts +39 -0
  159. package/dist/src/commands/test-dispatch.js +211 -0
  160. package/dist/src/commands/test-furnace-reach.d.ts +37 -0
  161. package/dist/src/commands/test-furnace-reach.js +132 -0
  162. package/dist/src/commands/test-modes.d.ts +16 -1
  163. package/dist/src/commands/test-modes.js +24 -1
  164. package/dist/src/commands/test-multi-verdict.d.ts +61 -0
  165. package/dist/src/commands/test-multi-verdict.js +111 -0
  166. package/dist/src/commands/test-orchestrate.d.ts +52 -0
  167. package/dist/src/commands/test-orchestrate.js +240 -0
  168. package/dist/src/commands/test-perf-scope.d.ts +50 -0
  169. package/dist/src/commands/test-perf-scope.js +138 -0
  170. package/dist/src/commands/test-prelock.d.ts +51 -0
  171. package/dist/src/commands/test-prelock.js +273 -0
  172. package/dist/src/commands/test-register.js +69 -10
  173. package/dist/src/commands/test-results.d.ts +62 -0
  174. package/dist/src/commands/test-results.js +62 -0
  175. package/dist/src/commands/test-run.d.ts +13 -55
  176. package/dist/src/commands/test-run.js +74 -99
  177. package/dist/src/commands/test-shards.d.ts +110 -0
  178. package/dist/src/commands/test-shards.js +255 -0
  179. package/dist/src/commands/test-stale-gate.d.ts +5 -1
  180. package/dist/src/commands/test-stale-gate.js +60 -28
  181. package/dist/src/commands/test-verdict.d.ts +11 -1
  182. package/dist/src/commands/test-verdict.js +28 -1
  183. package/dist/src/commands/test.d.ts +6 -1
  184. package/dist/src/commands/test.js +120 -124
  185. package/dist/src/commands/token-lint.d.ts +14 -0
  186. package/dist/src/commands/token-lint.js +151 -0
  187. package/dist/src/commands/token.js +10 -0
  188. package/dist/src/commands/verify-scope.d.ts +28 -0
  189. package/dist/src/commands/verify-scope.js +67 -0
  190. package/dist/src/commands/verify.d.ts +10 -2
  191. package/dist/src/commands/verify.js +67 -36
  192. package/dist/src/core/build-baseline-types.d.ts +46 -0
  193. package/dist/src/core/build-baseline-validate.js +19 -0
  194. package/dist/src/core/build-baseline.d.ts +5 -1
  195. package/dist/src/core/build-baseline.js +3 -1
  196. package/dist/src/core/build-overwrite-guard.d.ts +50 -0
  197. package/dist/src/core/build-overwrite-guard.js +84 -4
  198. package/dist/src/core/build-prepare.d.ts +13 -0
  199. package/dist/src/core/build-prepare.js +42 -10
  200. package/dist/src/core/build-run-record.d.ts +74 -0
  201. package/dist/src/core/build-run-record.js +136 -0
  202. package/dist/src/core/checkjs-support-heads.d.ts +41 -0
  203. package/dist/src/core/checkjs-support-heads.js +104 -0
  204. package/dist/src/core/config-paths.d.ts +2 -2
  205. package/dist/src/core/config-paths.js +10 -0
  206. package/dist/src/core/config-validate-check.d.ts +8 -0
  207. package/dist/src/core/config-validate-check.js +219 -0
  208. package/dist/src/core/config-validate-file-size.d.ts +9 -6
  209. package/dist/src/core/config-validate-file-size.js +91 -2
  210. package/dist/src/core/config-validate-history.d.ts +11 -0
  211. package/dist/src/core/config-validate-history.js +38 -0
  212. package/dist/src/core/config-validate-patch-policy.js +100 -0
  213. package/dist/src/core/config-validate-test-toolchains.js +21 -0
  214. package/dist/src/core/config-validate-token-scales.d.ts +9 -0
  215. package/dist/src/core/config-validate-token-scales.js +92 -0
  216. package/dist/src/core/config-validate.js +20 -5
  217. package/dist/src/core/config.d.ts +5 -0
  218. package/dist/src/core/config.js +16 -0
  219. package/dist/src/core/coverage-dispatch.d.ts +24 -0
  220. package/dist/src/core/coverage-dispatch.js +44 -0
  221. package/dist/src/core/coverage-extend.d.ts +70 -45
  222. package/dist/src/core/coverage-extend.js +199 -144
  223. package/dist/src/core/coverage-records.d.ts +108 -0
  224. package/dist/src/core/coverage-records.js +384 -0
  225. package/dist/src/core/destructive.d.ts +7 -4
  226. package/dist/src/core/destructive.js +10 -10
  227. package/dist/src/core/engine-session-lock.d.ts +16 -1
  228. package/dist/src/core/engine-session-lock.js +38 -10
  229. package/dist/src/core/export-moved-code-shape.d.ts +49 -11
  230. package/dist/src/core/export-moved-code-shape.js +135 -44
  231. package/dist/src/core/file-lock-queue.d.ts +67 -0
  232. package/dist/src/core/file-lock-queue.js +221 -0
  233. package/dist/src/core/file-lock-shared.d.ts +57 -0
  234. package/dist/src/core/file-lock-shared.js +117 -0
  235. package/dist/src/core/file-lock.d.ts +13 -25
  236. package/dist/src/core/file-lock.js +163 -140
  237. package/dist/src/core/furnace-apply-output.d.ts +10 -0
  238. package/dist/src/core/furnace-apply-output.js +31 -1
  239. package/dist/src/core/furnace-apply.js +22 -12
  240. package/dist/src/core/furnace-composed-source.d.ts +76 -0
  241. package/dist/src/core/furnace-composed-source.js +167 -0
  242. package/dist/src/core/furnace-config-validate-exceptions.d.ts +16 -0
  243. package/dist/src/core/furnace-config-validate-exceptions.js +102 -0
  244. package/dist/src/core/furnace-config-validate.js +14 -0
  245. package/dist/src/core/furnace-css-fragments.d.ts +10 -0
  246. package/dist/src/core/furnace-css-fragments.js +26 -0
  247. package/dist/src/core/furnace-operation.d.ts +3 -3
  248. package/dist/src/core/furnace-registration-jar-inplace.d.ts +12 -0
  249. package/dist/src/core/furnace-registration-jar-inplace.js +80 -0
  250. package/dist/src/core/furnace-registration-remove.d.ts +22 -1
  251. package/dist/src/core/furnace-registration-remove.js +53 -17
  252. package/dist/src/core/furnace-registration-rename.d.ts +26 -0
  253. package/dist/src/core/furnace-registration-rename.js +77 -0
  254. package/dist/src/core/furnace-registration.d.ts +14 -4
  255. package/dist/src/core/furnace-registration.js +44 -10
  256. package/dist/src/core/furnace-staleness.d.ts +7 -0
  257. package/dist/src/core/furnace-staleness.js +34 -24
  258. package/dist/src/core/furnace-validate-accessibility.d.ts +8 -4
  259. package/dist/src/core/furnace-validate-accessibility.js +71 -28
  260. package/dist/src/core/furnace-validate-exceptions.d.ts +48 -0
  261. package/dist/src/core/furnace-validate-exceptions.js +80 -0
  262. package/dist/src/core/furnace-validate-icon-button.d.ts +7 -0
  263. package/dist/src/core/furnace-validate-icon-button.js +78 -0
  264. package/dist/src/core/furnace-validate.js +1 -1
  265. package/dist/src/core/harness-port-fallback.d.ts +60 -0
  266. package/dist/src/core/harness-port-fallback.js +96 -0
  267. package/dist/src/core/history-log-file.d.ts +61 -0
  268. package/dist/src/core/history-log-file.js +164 -0
  269. package/dist/src/core/history-log.d.ts +2 -1
  270. package/dist/src/core/history-log.js +2 -1
  271. package/dist/src/core/json-preserving-edit.d.ts +22 -0
  272. package/dist/src/core/json-preserving-edit.js +199 -0
  273. package/dist/src/core/line-prefixer.d.ts +18 -0
  274. package/dist/src/core/line-prefixer.js +34 -0
  275. package/dist/src/core/mach.d.ts +7 -0
  276. package/dist/src/core/mach.js +32 -10
  277. package/dist/src/core/module-resolution-preflight.d.ts +19 -3
  278. package/dist/src/core/module-resolution-preflight.js +24 -6
  279. package/dist/src/core/negative-control-compiled.d.ts +27 -0
  280. package/dist/src/core/negative-control-compiled.js +73 -0
  281. package/dist/src/core/negative-control-diff.d.ts +51 -0
  282. package/dist/src/core/negative-control-diff.js +179 -0
  283. package/dist/src/core/negative-control.d.ts +150 -0
  284. package/dist/src/core/negative-control.js +399 -0
  285. package/dist/src/core/objdir-install-manifests.d.ts +73 -0
  286. package/dist/src/core/objdir-install-manifests.js +226 -0
  287. package/dist/src/core/park-store.d.ts +63 -0
  288. package/dist/src/core/park-store.js +216 -0
  289. package/dist/src/core/patch-export-update.d.ts +6 -0
  290. package/dist/src/core/patch-export-update.js +13 -3
  291. package/dist/src/core/patch-export.d.ts +3 -2
  292. package/dist/src/core/patch-export.js +22 -16
  293. package/dist/src/core/patch-files.js +26 -8
  294. package/dist/src/core/patch-lint-checkjs-any-import.d.ts +39 -0
  295. package/dist/src/core/patch-lint-checkjs-any-import.js +63 -0
  296. package/dist/src/core/patch-lint-checkjs-diagnostics.d.ts +17 -0
  297. package/dist/src/core/patch-lint-checkjs-diagnostics.js +32 -0
  298. package/dist/src/core/patch-lint-checkjs.d.ts +10 -1
  299. package/dist/src/core/patch-lint-checkjs.js +20 -13
  300. package/dist/src/core/patch-lint-code-lines.d.ts +59 -0
  301. package/dist/src/core/patch-lint-code-lines.js +105 -0
  302. package/dist/src/core/patch-lint-cross.d.ts +3 -1
  303. package/dist/src/core/patch-lint-cross.js +17 -4
  304. package/dist/src/core/patch-lint-css.d.ts +8 -2
  305. package/dist/src/core/patch-lint-css.js +24 -14
  306. package/dist/src/core/patch-lint-file-size.d.ts +12 -5
  307. package/dist/src/core/patch-lint-file-size.js +22 -11
  308. package/dist/src/core/patch-lint-forward-registration-extended.d.ts +23 -0
  309. package/dist/src/core/patch-lint-forward-registration-extended.js +36 -11
  310. package/dist/src/core/patch-lint-forward-registration.js +10 -0
  311. package/dist/src/core/patch-lint-ignore.d.ts +196 -0
  312. package/dist/src/core/patch-lint-ignore.js +429 -0
  313. package/dist/src/core/patch-lint-ownership.d.ts +10 -0
  314. package/dist/src/core/patch-lint-ownership.js +26 -0
  315. package/dist/src/core/patch-lint-size-thresholds.d.ts +52 -0
  316. package/dist/src/core/patch-lint-size-thresholds.js +110 -0
  317. package/dist/src/core/patch-lint-size.d.ts +117 -0
  318. package/dist/src/core/patch-lint-size.js +331 -0
  319. package/dist/src/core/patch-lint-staged-registration.d.ts +18 -1
  320. package/dist/src/core/patch-lint-staged-registration.js +20 -0
  321. package/dist/src/core/patch-lint-token-scale.d.ts +57 -0
  322. package/dist/src/core/patch-lint-token-scale.js +286 -0
  323. package/dist/src/core/patch-lint.d.ts +11 -83
  324. package/dist/src/core/patch-lint.js +66 -288
  325. package/dist/src/core/patch-lock.js +7 -6
  326. package/dist/src/core/patch-manifest-consistency.js +7 -6
  327. package/dist/src/core/patch-manifest-io.d.ts +6 -3
  328. package/dist/src/core/patch-manifest-io.js +27 -9
  329. package/dist/src/core/patch-manifest-key-order.d.ts +24 -0
  330. package/dist/src/core/patch-manifest-key-order.js +61 -0
  331. package/dist/src/core/patch-manifest-stage.d.ts +46 -0
  332. package/dist/src/core/patch-manifest-stage.js +96 -0
  333. package/dist/src/core/patch-manifest-validate.js +61 -3
  334. package/dist/src/core/patch-order-legal.d.ts +26 -0
  335. package/dist/src/core/patch-order-legal.js +88 -0
  336. package/dist/src/core/patch-policy-content.d.ts +40 -0
  337. package/dist/src/core/patch-policy-content.js +216 -0
  338. package/dist/src/core/patch-policy.d.ts +22 -5
  339. package/dist/src/core/patch-policy.js +26 -12
  340. package/dist/src/core/patch-retired.d.ts +57 -0
  341. package/dist/src/core/patch-retired.js +92 -0
  342. package/dist/src/core/patch-subset.d.ts +16 -0
  343. package/dist/src/core/patch-subset.js +66 -0
  344. package/dist/src/core/preflight-wait.d.ts +20 -0
  345. package/dist/src/core/preflight-wait.js +38 -0
  346. package/dist/src/core/rebase-from-version.d.ts +46 -0
  347. package/dist/src/core/rebase-from-version.js +71 -0
  348. package/dist/src/core/run-log.d.ts +26 -0
  349. package/dist/src/core/run-log.js +106 -4
  350. package/dist/src/core/run-profile.d.ts +7 -0
  351. package/dist/src/core/run-profile.js +7 -1
  352. package/dist/src/core/smoke-patterns.d.ts +5 -0
  353. package/dist/src/core/smoke-patterns.js +13 -0
  354. package/dist/src/core/test-harness-crash.d.ts +19 -1
  355. package/dist/src/core/test-harness-crash.js +8 -9
  356. package/dist/src/core/test-harness-signature.d.ts +33 -0
  357. package/dist/src/core/test-harness-signature.js +23 -1
  358. package/dist/src/core/test-raw-log.d.ts +66 -0
  359. package/dist/src/core/test-raw-log.js +122 -0
  360. package/dist/src/core/test-run-completeness.d.ts +90 -0
  361. package/dist/src/core/test-run-completeness.js +184 -0
  362. package/dist/src/core/test-stale-check.d.ts +27 -1
  363. package/dist/src/core/test-stale-check.js +39 -49
  364. package/dist/src/core/test-stale-exempt.d.ts +40 -0
  365. package/dist/src/core/test-stale-exempt.js +70 -0
  366. package/dist/src/core/test-xpcshell-retry.d.ts +2 -0
  367. package/dist/src/core/test-xpcshell-retry.js +2 -1
  368. package/dist/src/core/token-lint.d.ts +53 -0
  369. package/dist/src/core/token-lint.js +131 -0
  370. package/dist/src/core/token-sibling-sheets.d.ts +46 -0
  371. package/dist/src/core/token-sibling-sheets.js +119 -0
  372. package/dist/src/core/tree-guard.js +5 -0
  373. package/dist/src/core/typecheck-shim.d.ts +6 -2
  374. package/dist/src/core/typecheck-shim.js +205 -4
  375. package/dist/src/core/typecheck.js +3 -1
  376. package/dist/src/index.d.ts +14 -3
  377. package/dist/src/index.js +6 -1
  378. package/dist/src/types/commands/index.d.ts +2 -2
  379. package/dist/src/types/commands/options.d.ts +212 -24
  380. package/dist/src/types/commands/patches.d.ts +118 -1
  381. package/dist/src/types/config.d.ts +264 -0
  382. package/dist/src/types/config.js +9 -0
  383. package/dist/src/types/furnace.d.ts +63 -1
  384. package/dist/src/types/furnace.js +7 -0
  385. package/dist/src/types/index.d.ts +1 -1
  386. package/dist/src/utils/options.d.ts +36 -7
  387. package/dist/src/utils/options.js +94 -8
  388. package/dist/src/utils/path-glob.d.ts +15 -0
  389. package/dist/src/utils/path-glob.js +47 -0
  390. package/dist/src/utils/regex.d.ts +15 -3
  391. package/dist/src/utils/regex.js +37 -16
  392. package/docs/configuration.md +369 -11
  393. package/docs/exit-codes.md +18 -1
  394. package/docs/furnace.md +139 -3
  395. package/docs/lifecycle-invariants.md +65 -30
  396. package/docs/machine-output.md +120 -12
  397. package/docs/patch-workflow.md +458 -22
  398. package/docs/run-logs.md +20 -1
  399. package/docs/testing.md +346 -21
  400. package/package.json +3 -3
@@ -54,6 +54,37 @@ export interface TestConfig {
54
54
  * verdict line. `--reap-orphans` is the per-invocation equivalent.
55
55
  */
56
56
  reapOrphans?: 'report' | 'reap';
57
+ /**
58
+ * `fixed` (the default) refuses a browser run while the mochitest server
59
+ * or Marionette port is held. `auto` lets a run proceed when the holder is
60
+ * not this checkout's own and the engine's mochitest harness can fall back
61
+ * to a free port itself, so sibling checkouts can run browser suites at
62
+ * once. `--auto-ports` is the per-invocation equivalent.
63
+ */
64
+ mochitestPorts?: 'fixed' | 'auto';
65
+ /**
66
+ * `exclusive` (the default): every `fireforge test` holds the engine
67
+ * session lock alone. `shared`: a build-less run with auto ports holds it
68
+ * shared, so peers' build-less runs on the same objdir overlap while
69
+ * builds and re-exports still wait. `--shared-lock` is the per-invocation
70
+ * equivalent.
71
+ */
72
+ lockMode?: 'exclusive' | 'shared';
73
+ /**
74
+ * Which components `test --build` deploys before building: `all` (the
75
+ * default) every component with undeployed edits, `reached` only those a
76
+ * requested test reaches, `none` nothing. `--furnace-apply` is the
77
+ * per-invocation equivalent.
78
+ */
79
+ furnaceApply?: 'all' | 'reached' | 'none';
80
+ }
81
+ /** Patch history log settings stored in fireforge.json. */
82
+ export interface HistoryConfig {
83
+ /**
84
+ * Project-relative path of the append-only patch history log. Defaults to
85
+ * `.fireforge/history.jsonl`, outside the tracked patch queue.
86
+ */
87
+ path?: string;
57
88
  }
58
89
  /** A single external executable required by a project-specific toolchain. */
59
90
  export interface ExternalToolRequirement {
@@ -104,6 +135,35 @@ export interface PatchPolicyReservedRange {
104
135
  /** Exact patch exceptions allowed in this reserved range. */
105
136
  allowed: PatchPolicyReservedAllowedPatch[];
106
137
  }
138
+ /**
139
+ * One `patchPolicy.upstreamAllowlist` entry in object form. The string form
140
+ * is shorthand for `{ path }`.
141
+ */
142
+ export interface PatchPolicyUpstreamAllowEntry {
143
+ /** Engine-relative path glob (`*` within a segment, `**` across segments). */
144
+ path: string;
145
+ /**
146
+ * Registration-only mode: a patch may only add lines to a matching file
147
+ * (no removals, no deletion), and every non-blank added line must carry
148
+ * `marker` (or `patchPolicy.addOnlyMarker`), case-insensitively.
149
+ */
150
+ addOnly?: boolean;
151
+ /** Marker an added line must contain. Overrides `patchPolicy.addOnlyMarker`. */
152
+ marker?: string;
153
+ }
154
+ /**
155
+ * Limits the files a class of patch may touch, e.g. a `-tests` patch to test
156
+ * directories and test manifests. A rule applies to a patch when every
157
+ * selector it sets matches. At least one selector is required.
158
+ */
159
+ export interface PatchPolicyScopeRule {
160
+ /** Applies to patches in this category. */
161
+ category?: string;
162
+ /** Applies to patches whose filename matches this regular expression. */
163
+ filenamePattern?: string;
164
+ /** Engine-relative path globs every file the patch touches must match. */
165
+ files: string[];
166
+ }
107
167
  /**
108
168
  * Optional project-specific patch queue policy. When absent, FireForge keeps
109
169
  * its historical broad category + numeric ordering behaviour.
@@ -121,6 +181,21 @@ export interface PatchPolicyConfig {
121
181
  ranges: PatchPolicyRange[];
122
182
  /** Reserved exception ranges. */
123
183
  reservedRanges?: PatchPolicyReservedRange[];
184
+ /**
185
+ * Globs naming the upstream files a non-reserved patch may modify. A file
186
+ * counts as upstream when no patch in the queue creates it. Unset: no
187
+ * restriction.
188
+ */
189
+ upstreamAllowlist?: Array<string | PatchPolicyUpstreamAllowEntry>;
190
+ /** Default marker for `addOnly` allowlist entries that set none. */
191
+ addOnlyMarker?: string;
192
+ /** File-scope rules per patch class (category and/or filename pattern). */
193
+ scopeRules?: PatchPolicyScopeRule[];
194
+ /**
195
+ * Require every reserved allowlist entry's `adr` and `documentation` path
196
+ * to exist under the project root. Default false.
197
+ */
198
+ verifyDocumentPaths?: boolean;
124
199
  }
125
200
  /**
126
201
  * Main fireforge.json configuration schema.
@@ -142,6 +217,8 @@ export interface FireForgeConfig {
142
217
  buildAudit?: BuildAuditConfig;
143
218
  /** Test command defaults */
144
219
  test?: TestConfig;
220
+ /** Patch history log settings */
221
+ history?: HistoryConfig;
145
222
  /** Optional project-specific external toolchains checked by doctor. */
146
223
  externalToolchains?: ExternalToolchainConfig[];
147
224
  /** Project license SPDX identifier */
@@ -154,6 +231,8 @@ export interface FireForgeConfig {
154
231
  patchPolicy?: PatchPolicyConfig;
155
232
  /** Typecheck command configuration (CI-grade, whole-project) */
156
233
  typecheck?: TypecheckConfig;
234
+ /** `fireforge check`: the composed static gate's policy and project steps */
235
+ check?: CheckConfig;
157
236
  /**
158
237
  * Project marker prefix appended to lines FireForge writes into
159
238
  * upstream Firefox source files (e.g. the `customElements.js` tag list).
@@ -162,6 +241,67 @@ export interface FireForgeConfig {
162
241
  */
163
242
  markerComment?: string;
164
243
  }
244
+ /** The built-in steps of `fireforge check`, in table order. */
245
+ export declare const CHECK_BUILTIN_STEPS: readonly ["status", "verify", "lint", "typecheck", "furnace-validate", "token-coverage"];
246
+ /** One built-in `fireforge check` step name. */
247
+ export type CheckBuiltinStep = (typeof CHECK_BUILTIN_STEPS)[number];
248
+ /**
249
+ * A project command `fireforge check` runs beside its built-in steps
250
+ * (`check.extraSteps[]`): an audit FireForge does not ship.
251
+ */
252
+ export interface CheckExtraStep {
253
+ /** Unique step name shown in the table (lowercase, digits and dashes). */
254
+ name: string;
255
+ /** Shell command line, run with `/bin/sh -c` (`cmd.exe /c` on Windows). */
256
+ command: string;
257
+ /** Project-relative working directory. Defaults to the project root. */
258
+ cwd?: string;
259
+ /** Seconds before the step is killed and fails. Unbounded when unset. */
260
+ timeout?: number;
261
+ /**
262
+ * Steps (built-in or extra) that must finish before this one starts,
263
+ * whatever their outcome: an ordering, not a success dependency.
264
+ */
265
+ after?: string[];
266
+ }
267
+ /** Configuration for `fireforge check`. Every field is optional. */
268
+ export interface CheckConfig {
269
+ /** Built-in steps this project never runs. */
270
+ skip?: CheckBuiltinStep[];
271
+ /**
272
+ * The status step's `--check` policy: `--fail-on`, `--allow` and
273
+ * `--fail-on-unknown`. Unset runs the default `status --check` policy.
274
+ */
275
+ status?: {
276
+ failOn?: string[];
277
+ allow?: string[];
278
+ failOnUnknown?: boolean;
279
+ };
280
+ /** `--max-warnings` for the lint and furnace-validate steps. */
281
+ maxWarnings?: {
282
+ lint?: number;
283
+ furnace?: number;
284
+ };
285
+ /** Project commands run as further steps. */
286
+ extraSteps?: CheckExtraStep[];
287
+ /** Seconds before a built-in step is killed and fails. Unbounded when unset. */
288
+ timeout?: number;
289
+ /** Per-step `timeout` overrides for built-in steps, in seconds. */
290
+ timeouts?: Partial<Record<CheckBuiltinStep, number>>;
291
+ /**
292
+ * Fail the verdict when a built-in step is skipped because it has nothing
293
+ * to run (no `typecheck` block, no furnace.json). A step named in `skip`
294
+ * is a decision, not a gap, and never fails it.
295
+ */
296
+ failOnSkipped?: boolean;
297
+ /**
298
+ * Project-relative path the lint step writes its `lint --per-patch
299
+ * --report` JSON to. Extra steps receive it as
300
+ * `FIREFORGE_CHECK_LINT_REPORT`, so an audit can read the run's lint
301
+ * report instead of linting the queue a second time.
302
+ */
303
+ lintReport?: string;
304
+ }
165
305
  /**
166
306
  * Configuration for the `fireforge typecheck` command. Distinct from
167
307
  * `patchLint.checkJs`: patch-lint runs every time `fireforge lint` runs
@@ -205,6 +345,15 @@ export interface TypecheckConfig {
205
345
  * blocking. `'off'` suppresses them.
206
346
  */
207
347
  undefinedIdentifiers?: PatchLintSeverityGate;
348
+ /**
349
+ * Types Lit in the shim: `LitElement` and the template helpers of
350
+ * `chrome://global/content/vendor/lit.all.mjs`, and `MozLitElement` of
351
+ * `chrome://global/content/lit-utils.mjs`, with closed member lists, so a
352
+ * misspelt member of a widget host is an error. Default off: reactive
353
+ * properties declared only through `static properties` or
354
+ * `static queries` then need a JSDoc or constructor declaration.
355
+ */
356
+ litTypes?: boolean;
208
357
  }
209
358
  /**
210
359
  * Wire command configuration.
@@ -297,6 +446,37 @@ export interface PatchLintFileSizeThresholds {
297
446
  /** Test files. Defaults: notice 1200, warning 1400, error 1600. */
298
447
  test?: PatchLintFileSizeTier;
299
448
  }
449
+ /** What `file-too-large` counts: every line, or only lines that carry code. */
450
+ export type PatchLintFileSizeMetric = 'raw' | 'code';
451
+ /**
452
+ * What `large-patch-lines` counts: every non-binary line of the unified
453
+ * diff, or only the added lines that carry code.
454
+ */
455
+ export type PatchLintPatchSizeMetric = 'diff' | 'addedCode';
456
+ /**
457
+ * Overrides for one patch-size tier. `lines` drives `large-patch-lines`,
458
+ * `files` drives `large-patch-files`. Each is a `notice`/`warning`/`error`
459
+ * triple shaped like {@link PatchLintFileSizeTier}, merged over the
460
+ * defaults and validated `notice <= warning <= error`.
461
+ */
462
+ export interface PatchLintPatchSizeTier {
463
+ lines?: PatchLintFileSizeTier;
464
+ files?: PatchLintFileSizeTier;
465
+ }
466
+ /**
467
+ * Overrides for the patch-size thresholds, per tier.
468
+ *
469
+ * Module constants until 0.50.0. The defaults are the old constants: lines
470
+ * general 800/1500/3000, test 1500/3000/6000, branding 8000/18000/30000;
471
+ * files warn above 5 (general, test) or 60 (branding). The files triple has
472
+ * no notice or error band by default: an unset `files.notice` follows the
473
+ * effective `files.warning`, and an unset `files.error` never fires.
474
+ */
475
+ export interface PatchLintPatchSizeThresholds {
476
+ general?: PatchLintPatchSizeTier;
477
+ test?: PatchLintPatchSizeTier;
478
+ branding?: PatchLintPatchSizeTier;
479
+ }
300
480
  /**
301
481
  * Configuration for patch lint rules.
302
482
  */
@@ -348,6 +528,34 @@ export interface PatchLintConfig {
348
528
  * Unset fields keep the built-in defaults.
349
529
  */
350
530
  fileSizeThresholds?: PatchLintFileSizeThresholds;
531
+ /**
532
+ * What `file-too-large` counts. `'raw'` (the default) counts every line
533
+ * the way `wc -l` does. `'code'` counts the lines left non-blank once
534
+ * comments are blanked, so JSDoc and blank lines stop counting.
535
+ */
536
+ fileSizeMetric?: PatchLintFileSizeMetric;
537
+ /**
538
+ * Per-tier overrides for `large-patch-lines` and `large-patch-files`.
539
+ * Unset fields keep the built-in defaults.
540
+ */
541
+ patchSizeThresholds?: PatchLintPatchSizeThresholds;
542
+ /**
543
+ * What `large-patch-lines` counts. `'diff'` (the default) counts every
544
+ * non-binary line of the unified diff. `'addedCode'` counts added lines
545
+ * that are neither blank nor comment, judged on each file's post-image,
546
+ * skips lines inside Furnace `@fireforge-include` spans, and counts test
547
+ * files against the test tier and everything else against the general
548
+ * tier inside a mixed patch.
549
+ */
550
+ patchSizeMetric?: PatchLintPatchSizeMetric;
551
+ /**
552
+ * Globs naming registration files (`jar.mn`, `moz.build`, manifests)
553
+ * that count toward neither `large-patch-lines` nor `large-patch-files`.
554
+ * A glob without a `/` matches the basename, one with a `/` matches the
555
+ * engine-relative path. `*` stays within a path segment, `**` crosses
556
+ * segments. Default: none.
557
+ */
558
+ patchSizeRegistrationFiles?: string[];
351
559
  /**
352
560
  * Run the project's Prettier over patch-owned `.sys.mjs` modules, from
353
561
  * inside `engine/` so the engine's own `.prettierrc*`/`.prettierignore`
@@ -387,6 +595,62 @@ export interface PatchLintConfig {
387
595
  * and fail the other. Default: 'warning'.
388
596
  */
389
597
  undefinedIdentifiers?: PatchLintSeverityGate;
598
+ /**
599
+ * Token scales enforced over CSS files a patch creates (`token-scale`).
600
+ * Each scale names properties whose values must resolve to its tokens.
601
+ * Default unset: no scale is enforced.
602
+ */
603
+ tokenScales?: PatchLintTokenScale[];
604
+ }
605
+ /**
606
+ * One `patchLint.tokenScales[]` entry: a property family (spacing, type,
607
+ * radius, opacity, z-index, …) whose declared values must be tokens on one
608
+ * scale.
609
+ */
610
+ export interface PatchLintTokenScale {
611
+ /** CSS properties governed (exact names, or a `*`-suffixed prefix such as `padding*`). */
612
+ properties: string[];
613
+ /**
614
+ * Custom-property prefix of the scale's tokens, e.g. `--mybrowser-space-`,
615
+ * or a list of them for a scale whose steps are spelled more than one way
616
+ * (`["--mybrowser-space-", "--mybrowser-gap-"]`).
617
+ */
618
+ prefix: string | string[];
619
+ /**
620
+ * Literal value atoms accepted without a token (`0`, `auto`, `1px`).
621
+ * `*` is a wildcard, so `*%` accepts any percentage. CSS-wide keywords
622
+ * (`inherit`, `initial`, `unset`, `revert`, `revert-layer`) are always
623
+ * accepted.
624
+ */
625
+ allowLiterals?: string[];
626
+ /**
627
+ * Further custom properties accepted besides `prefix` (exact names, or a
628
+ * `*`-suffixed prefix such as `--moz-*`), for reviewed upstream or recipe
629
+ * tokens.
630
+ */
631
+ allow?: string[];
632
+ /**
633
+ * Literal atoms accepted only inside a math function (`calc()`, `min()`,
634
+ * `max()`, `clamp()`), with the `allowLiterals` wildcard syntax: a
635
+ * unitless multiplier (`calc(var(--x-space-2) * 2)`) without also
636
+ * accepting a bare `2`.
637
+ */
638
+ allowInCalc?: string[];
639
+ /**
640
+ * Largest total, in px, a declaration may subtract from this scale's
641
+ * tokens inside a math function (`calc(var(--x-space-4) - 1px)`), for a
642
+ * border or hairline inset. Summed over the declaration.
643
+ */
644
+ offsetCap?: number;
645
+ /** Engine-relative globs (`**`, `*`, `?`) of files this scale does not govern. */
646
+ exclude?: string[];
647
+ /**
648
+ * The fewest patch-created CSS files (outside `exclude`) that must carry a
649
+ * declaration of this scale's properties. A queue under it fails
650
+ * `token-scale-vacuous`, so a scale that matches nothing, or a scan set
651
+ * a move emptied, cannot pass by judging nothing.
652
+ */
653
+ minFiles?: number;
390
654
  }
391
655
  /**
392
656
  * Build modes for mach.
@@ -1,3 +1,12 @@
1
+ /** The built-in steps of `fireforge check`, in table order. */
2
+ export const CHECK_BUILTIN_STEPS = [
3
+ 'status',
4
+ 'verify',
5
+ 'lint',
6
+ 'typecheck',
7
+ 'furnace-validate',
8
+ 'token-coverage',
9
+ ];
1
10
  /**
2
11
  * Build modes for mach.
3
12
  *
@@ -103,6 +103,30 @@ export interface CustomComponentConfig {
103
103
  */
104
104
  sharedFtl?: string;
105
105
  }
106
+ /** A reviewed `furnace validate` finding (`furnace.json#validationExceptions[]`). */
107
+ export interface FurnaceValidationException {
108
+ /** Component tag name the finding is reported on. */
109
+ component: string;
110
+ /** The finding's check name, as `furnace validate` prints it in brackets. */
111
+ check: string;
112
+ /**
113
+ * Narrows the exception to the findings on this element tag (a finding's
114
+ * `tags`): a `panel-item` menu row can be accepted without muting the
115
+ * check for every other element of the component.
116
+ */
117
+ tag?: string;
118
+ /** Why the finding is accepted. Required: the entry is the review record. */
119
+ reason: string;
120
+ }
121
+ /**
122
+ * `furnace validate` checks that run only when `furnace.json#optInChecks`
123
+ * names them. `icon-button-label`: an icon-only `<moz-button>` (an
124
+ * `iconsrc` or an `icon` type, no `label` and no text content) carries
125
+ * neither `data-l10n-id` nor `aria-label`.
126
+ */
127
+ export declare const FURNACE_OPT_IN_CHECKS: readonly ["icon-button-label"];
128
+ /** One opt-in check name. */
129
+ export type FurnaceOptInCheck = (typeof FURNACE_OPT_IN_CHECKS)[number];
106
130
  /**
107
131
  * The furnace.json schema.
108
132
  */
@@ -142,6 +166,12 @@ export interface FurnaceConfig {
142
166
  * `['browser/base/content/browser.xhtml']`, the upstream Firefox path.
143
167
  */
144
168
  tokenHostDocuments?: string[];
169
+ /**
170
+ * Stylesheets that load beside others in a document no queue link shows,
171
+ * for `token lint`: `{ "<glob>": ["<path or glob>", …] }`. A sheet the key
172
+ * matches may reference the tokens its partners declare.
173
+ */
174
+ tokenSiblingSheets?: Record<string, string[]>;
145
175
  /**
146
176
  * Override the default Fluent (.ftl) base path within the engine.
147
177
  * Defaults to `toolkit/locales/en-US/toolkit/global` when not set.
@@ -161,6 +191,23 @@ export interface FurnaceConfig {
161
191
  * Unset disables jsconfig maintenance.
162
192
  */
163
193
  typecheckJsconfig?: string;
194
+ /**
195
+ * Reviewed `furnace validate` findings. Each entry suppresses every
196
+ * finding of `check` on `component`, and `furnace validate` reports an
197
+ * entry that no longer matches anything as a stale-exception warning.
198
+ */
199
+ validationExceptions?: FurnaceValidationException[];
200
+ /**
201
+ * The fewest components a full `furnace validate` must judge. A run under
202
+ * it fails with `component-floor`, so a moved or emptied components tree
203
+ * cannot pass by validating nothing.
204
+ */
205
+ minComponents?: number;
206
+ /**
207
+ * Opt-in `furnace validate` checks (see {@link FURNACE_OPT_IN_CHECKS}).
208
+ * Unset runs only the default checks.
209
+ */
210
+ optInChecks?: FurnaceOptInCheck[];
164
211
  /** Stock components tracked for preview */
165
212
  stock: string[];
166
213
  /** Override components */
@@ -234,6 +281,15 @@ export interface StepError {
234
281
  */
235
282
  advisory?: boolean;
236
283
  }
284
+ /**
285
+ * Why `applyAllComponents` skipped a component, so a summary can say more
286
+ * than "skipped". `already-current`: the source is unchanged since the last
287
+ * recorded apply and the engine copy still matches it (fragment expansions
288
+ * included), so there was nothing to write. The apply state is shared by
289
+ * every session on the checkout, so the recorded apply may be another
290
+ * session's, e.g. a peer's `test --build`.
291
+ */
292
+ export type ApplySkipKind = 'already-current';
237
293
  /**
238
294
  * Result of applying all components to the engine source tree.
239
295
  */
@@ -246,10 +302,14 @@ export interface ApplyResult {
246
302
  /** Non-fatal registration step errors */
247
303
  stepErrors?: StepError[];
248
304
  }>;
249
- /** Components that were skipped (e.g., no changes) */
305
+ /**
306
+ * Components that were skipped (e.g., no changes). `kind` names the
307
+ * reason for summaries; `reason` is the stable free-text form.
308
+ */
250
309
  skipped: Array<{
251
310
  name: string;
252
311
  reason: string;
312
+ kind?: ApplySkipKind;
253
313
  }>;
254
314
  /** Components that failed to apply */
255
315
  errors: Array<{
@@ -317,6 +377,8 @@ export interface ValidationIssue {
317
377
  check: string;
318
378
  /** Human-readable description of the issue */
319
379
  message: string;
380
+ /** Element tags the finding is about, when it is about particular elements. */
381
+ tags?: string[];
320
382
  }
321
383
  /** Resolved test-harness selection for a `furnace create` run. */
322
384
  export type ResolvedTestStyle = 'mochikit' | 'browser-chrome' | 'xpcshell' | 'none';
@@ -1,3 +1,10 @@
1
+ /**
2
+ * `furnace validate` checks that run only when `furnace.json#optInChecks`
3
+ * names them. `icon-button-label`: an icon-only `<moz-button>` (an
4
+ * `iconsrc` or an `icon` type, no `label` and no text content) carries
5
+ * neither `data-l10n-id` nor `aria-label`.
6
+ */
7
+ export const FURNACE_OPT_IN_CHECKS = ['icon-button-label'];
1
8
  /**
2
9
  * Operations that can leave a pending-repair marker when they fail to roll
3
10
  * back cleanly. The marker is consumed by `fireforge doctor`, which either
@@ -1,5 +1,5 @@
1
1
  /**
2
2
  * Re-exports all type definitions.
3
3
  */
4
- export type { BuildConfig, FireForgeConfig, FirefoxConfig, FirefoxProduct, ProjectLicense, ProjectPaths, WireConfig, } from './config.js';
4
+ export type { BuildConfig, FireForgeConfig, FirefoxConfig, FirefoxProduct, PatchLintFileSizeThresholds, PatchLintFileSizeTier, PatchLintPatchSizeMetric, ProjectLicense, ProjectPaths, WireConfig, } from './config.js';
5
5
  export type { ApplyResult, ComponentType, CustomComponentConfig, DryRunAction, FurnaceConfig, FurnaceState, OverrideComponentConfig, OverrideType, StepError, ValidationIssue, } from './furnace.js';
@@ -13,7 +13,9 @@ import type { Command } from 'commander';
13
13
  * @param obj - Object to filter
14
14
  * @returns The same object with every `undefined`-valued key removed
15
15
  */
16
- export declare function pickDefined<T extends object>(obj: T): {
16
+ export declare function pickDefined<T extends object>(obj: T): DefinedProps<T>;
17
+ /** `T` with every property optional and `undefined` removed: what {@link pickDefined} returns. */
18
+ export type DefinedProps<T> = {
17
19
  [K in keyof T]+?: Exclude<T[K], undefined>;
18
20
  };
19
21
  /**
@@ -47,13 +49,14 @@ export declare function commanderArgParser<T>(parse: (raw: string) => T): (raw:
47
49
  export declare function stringListOption(): [(value: string, previous: string[]) => string[], string[]];
48
50
  /** Environment variable naming a standing wait budget for the whole session. */
49
51
  export declare const WAIT_LOCK_ENV_VAR = "FIREFORGE_WAIT_LOCK";
52
+ export declare const MAX_WAIT_LOCK_SECONDS = 86400;
50
53
  /**
51
54
  * Resolves the parsed `--wait-lock [seconds]` option value into a wait budget
52
55
  * in seconds for `withEngineSessionLock`:
53
56
  * - absent (`undefined`) → {@link WAIT_LOCK_ENV_VAR} if set, else `undefined`
54
57
  * (the ~1 s fail-fast),
55
58
  * - bare flag (`true`) → {@link DEFAULT_WAIT_LOCK_SECONDS},
56
- * - explicit value → integer validated into 1..3600.
59
+ * - explicit value → integer validated into 1..86400.
57
60
  *
58
61
  * The flag always wins over the environment: the environment expresses a
59
62
  * default for a session, and an invocation that names a budget has said
@@ -74,11 +77,11 @@ export declare function resolveWaitLockSeconds(value: string | number | boolean
74
77
  * `--wait-lock` flag was threaded to. A furnace mutation takes the engine
75
78
  * session lock and then `.fireforge/furnace.lock`. Only the first had a
76
79
  * budget, so a contended deploy died on the file lock's fixed 30 s while
77
- * its operator believed a much larger budget was in force. Threading the
78
- * flag reaches the three furnace commands that declare it. This reaches
79
- * the twelve that do not (`create`, `remove`, `rename`, `refresh`, `scan`,
80
- * `override`, `chrome-doc`, …), which have no flag to thread but are just
81
- * as contended.
80
+ * its operator believed a much larger budget was in force. Every furnace
81
+ * leaf that takes the furnace lock threads its own `--wait-lock` into it;
82
+ * this is the fallback when the flag is absent, and the only budget for
83
+ * callers that do not thread one (doctor's furnace repair, the
84
+ * pre-build apply).
82
85
  *
83
86
  * Env-only: a flag belongs to one invocation and is passed
84
87
  * explicitly where it applies, while the environment is exactly the place a
@@ -109,6 +112,32 @@ export declare function addAcceptedWaitLockOption(command: Command): Command;
109
112
  * one everywhere else.
110
113
  */
111
114
  export declare function ensureWaitLockOptionEverywhere(command: Command): void;
115
+ /**
116
+ * True for a token that reads as a path rather than a number: it has a
117
+ * path separator or a file extension, or is `.`/`..`. A bare word such as
118
+ * `nonsense` is not path-shaped, so `--wait-lock nonsense` stays the usage
119
+ * error it always was.
120
+ */
121
+ export declare function isPathShapedArgument(token: string): boolean;
122
+ /**
123
+ * Rewrites a command's option tokens so a path-shaped argument after a
124
+ * numeric optional-value flag is an operand, and the flag takes its
125
+ * default.
126
+ *
127
+ * Commander binds the next non-dash token to an optional value, so
128
+ * `fireforge test --build --wait-lock browser_x.js` failed with
129
+ * "--wait-lock must be an integer in 1..86400 (got "browser_x.js")": the
130
+ * help says the value is optional, and the obvious spelling refused. The
131
+ * released flag moves to the end of the option section (before any `--`),
132
+ * where nothing follows it, so commander reads it bare. Operands keep their
133
+ * relative order. The value of a required-value option (`--mach-arg
134
+ * --wait-lock`) is never mistaken for a flag.
135
+ *
136
+ * @param argv - The tokens commander passes to `parseOptions`
137
+ * @param requiredValueFlags - This command's flags that always take a value
138
+ * @returns The rewritten tokens
139
+ */
140
+ export declare function releasePathShapedValues(argv: readonly string[], requiredValueFlags: ReadonlySet<string>): string[];
112
141
  /**
113
142
  * Registers the shared `--wait-lock [seconds]` flag on a lock-taking
114
143
  * command (the engine session lock for engine-mutating commands, the patch