@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
@@ -4,10 +4,10 @@
4
4
  *
5
5
  * A tree is a snapshot: its `patches/` and `components/` are copies with
6
6
  * no merge-back model, so any command that mutates project or engine
7
- * state must run in the primary tree. Enforcement is DEFAULT-DENY via an
8
- * explicit verdict table over every top-level command — a newly added
7
+ * state must run in the primary tree. Enforcement is default-deny via an
8
+ * explicit verdict table over every top-level command, so a newly added
9
9
  * command is refused inside trees until its author classifies it (the
10
- * drift test in `tree-guard.test.ts` fails otherwise) — and lives in ONE
10
+ * drift test in `tree-guard.test.ts` fails otherwise). It lives in one
11
11
  * commander `preAction` hook installed by `createProgram()`, so the
12
12
  * guard fires no matter how the cwd ended up inside a tree (`tree exec`
13
13
  * or a plain `cd`).
@@ -17,8 +17,8 @@ import { dirname, join, resolve } from 'node:path';
17
17
  import { GeneralError } from '../errors/base.js';
18
18
  import { getTreeMarkerPath, readTreeMarker, } from './tree-store.js';
19
19
  /**
20
- * Per-command verdicts. `allowed` runs unconditionally; `refused` never
21
- * runs in a tree; `conditional` consults `TREE_CONDITIONAL_CHECKS` with
20
+ * Per-command verdicts. `allowed` runs unconditionally. `refused` never
21
+ * runs in a tree. `conditional` consults `TREE_CONDITIONAL_CHECKS` with
22
22
  * the invoked subcommand chain, parsed options, and the tree marker.
23
23
  */
24
24
  export const TREE_COMMAND_VERDICTS = {
@@ -41,7 +41,7 @@ export const TREE_COMMAND_VERDICTS = {
41
41
  package: 'refused',
42
42
  watch: 'refused',
43
43
  // Build-less runs only, and only in trees whose marker records a cloned
44
- // (mozinfo-rewritten) objdir — see the conditional check below.
44
+ // (mozinfo-rewritten) objdir. See the conditional check below.
45
45
  test: 'conditional',
46
46
  config: 'conditional',
47
47
  doctor: 'conditional',
@@ -52,8 +52,8 @@ export const TREE_COMMAND_VERDICTS = {
52
52
  typecheck: 'allowed',
53
53
  verify: 'allowed',
54
54
  furnace: 'refused',
55
- // No nesting; `tree list` inside a tree is pointless but harmless — the
56
- // subcommand check below allows only `list`.
55
+ // No nesting. `tree list` inside a tree is pointless but harmless, and
56
+ // the subcommand check below allows only `list`.
57
57
  tree: 'conditional',
58
58
  };
59
59
  /** The command set named in refusal messages. */
@@ -61,29 +61,29 @@ const ALLOWED_SUMMARY = 'Verification trees support: status, lint, typecheck, ve
61
61
  'config (read), export --dry-run, export-all --dry-run, re-export --dry-run, and — ' +
62
62
  'in trees created with --with-objdir — build-less test.';
63
63
  const TREE_CONDITIONAL_CHECKS = {
64
- // Exports write patches/ + patches.json; only the dry-run preview is a read.
64
+ // Exports write patches/ + patches.json. Only the dry-run preview is a read.
65
65
  export: ({ options }) => options['dryRun'] === true,
66
66
  'export-all': ({ options }) => options['dryRun'] === true,
67
67
  // Same rule for refreshing existing patches: the dry-run projection is a
68
68
  // read (proven side-effect free and runtime-enforced by
69
- // withDryRunPurityGuard); a real re-export writes patches/.
69
+ // withDryRunPurityGuard). A real re-export writes patches/.
70
70
  're-export': ({ options }) => options['dryRun'] === true,
71
- // `config` with no positional value prints; with a value it writes.
71
+ // `config` with no positional value prints. With a value it writes.
72
72
  config: ({ args }) => args.filter((a) => typeof a === 'string').length <= 1,
73
73
  // Doctor reads unless a repair flag is set.
74
74
  doctor: ({ options }) => options['repairFurnace'] !== true && options['fix'] !== true,
75
75
  // Build-less test needs the objdir the marker records as cloned,
76
- // mozinfo-rewritten AND reconfigured in-tree; `test --build` rebuilds
76
+ // mozinfo-rewritten and reconfigured in-tree. `test --build` rebuilds
77
77
  // the engine and stays primary-only (a tree is a snapshot with no
78
78
  // merge-back model, so build outputs mutated in-tree go nowhere).
79
79
  test: ({ options }, marker) => marker.clonedObjdir !== undefined && options['build'] !== true,
80
- // No tree lifecycle inside a tree; `tree list` is the only read.
80
+ // No tree lifecycle inside a tree. `tree list` is the only read.
81
81
  tree: ({ subcommands }) => subcommands[0] === 'list',
82
82
  };
83
83
  /**
84
- * Command-specific refusal hints appended after the generic sentence —
85
- * for verdicts where "mutates project or engine state" alone would
86
- * misdiagnose the actual reason.
84
+ * Command-specific refusal hints appended after the generic sentence, for
85
+ * verdicts where "mutates project or engine state" alone would misdiagnose
86
+ * the actual reason.
87
87
  */
88
88
  const TREE_REFUSAL_HINTS = {
89
89
  test: ({ options }, marker) => {
@@ -149,13 +149,13 @@ export async function runTreeGuardHook(rootCommandName, actionCommand) {
149
149
  const state = located.state;
150
150
  if (state.kind === 'absent')
151
151
  return;
152
- // A marker we cannot read is not evidence that this is not a tree — it is
152
+ // A marker we cannot read is not evidence that this is not a tree. It is
153
153
  // evidence that we cannot tell. Treating it as "not a tree" would grant the
154
154
  // full mutating command set to a snapshot on the strength of a file that
155
- // failed to parse, which is exactly backwards for a default-deny guard.
156
- // A marker from a NEWER FireForge is not damaged, so the corrupt branch's
157
- // remedies — recreate the tree, delete the stray marker — are actively
158
- // wrong for it. Refuse with the upgrade instruction instead, and do NOT
155
+ // failed to parse, which is backwards for a default-deny guard.
156
+ // A marker from a newer FireForge is not damaged, so the corrupt branch's
157
+ // remedies (recreate the tree, delete the stray marker) are actively
158
+ // wrong for it. Refuse with the upgrade instruction instead, and do not
159
159
  // offer --ignore-corrupt-tree-marker: proceeding would mean acting on a
160
160
  // marker whose fields this build does not understand.
161
161
  if (state.kind === 'unsupported') {
@@ -166,8 +166,8 @@ export async function runTreeGuardHook(rootCommandName, actionCommand) {
166
166
  if (state.kind === 'corrupt') {
167
167
  if (options['ignoreCorruptTreeMarker'] === true)
168
168
  return;
169
- // Unconditionally-allowed commands never consult marker fields — their
170
- // verdict is the same in every tree — so an unreadable marker cannot
169
+ // Unconditionally-allowed commands never consult marker fields, and
170
+ // their verdict is the same in every tree, so an unreadable marker cannot
171
171
  // change their answer. Letting them through keeps read-only diagnostics
172
172
  // (status, lint) usable on the very tree the operator needs to inspect.
173
173
  // 'conditional' verdicts stay refused: their predicates can write.
@@ -1,5 +1,5 @@
1
1
  import { type CowCapability } from './tree-cow.js';
2
- /** `.fireforge/tree.json` — identifies a directory as a verification tree. */
2
+ /** `.fireforge/tree.json`, which identifies a directory as a verification tree. */
3
3
  export interface TreeMarker {
4
4
  schemaVersion: 1;
5
5
  name: string;
@@ -11,10 +11,10 @@ export interface TreeMarker {
11
11
  patchesFingerprint: string | null;
12
12
  /**
13
13
  * Name of the obj-* directory cloned into this tree, written only after
14
- * its mozinfo.json was successfully rewritten to the tree's paths AND the
14
+ * its mozinfo.json was successfully rewritten to the tree's paths and the
15
15
  * caller's in-tree reconfigure regenerated the remaining configure output.
16
16
  * Its presence is what lets the guard admit build-less `test` in-tree
17
- * (`tree-guard.ts`); absent on trees created without `--with-objdir`.
17
+ * (`tree-guard.ts`). Absent on trees created without `--with-objdir`.
18
18
  */
19
19
  clonedObjdir?: string;
20
20
  }
@@ -35,7 +35,7 @@ export declare function withTreeLifecycleLock<T>(primaryRoot: string, operation:
35
35
  * The three states must stay distinct because they carry opposite safety
36
36
  * meanings. `absent` means "this directory is not a tree", which is what
37
37
  * lets every mutating command run. `corrupt` means "this directory claims to
38
- * be a tree but we cannot read the claim" — collapsing it into `absent` (as
38
+ * be a tree but we cannot read the claim". Collapsing it into `absent` (as
39
39
  * a bare `undefined` return does) hands a snapshot the full mutating command
40
40
  * set on the strength of a file we failed to parse, inverting
41
41
  * `tree-guard.ts`'s default-deny design. Deleting one field from a marker is
@@ -51,7 +51,7 @@ export type TreeMarkerRead = {
51
51
  reason: string;
52
52
  }
53
53
  /**
54
- * Written by a NEWER FireForge. Distinct from `corrupt` because the remedy
54
+ * Written by a newer FireForge. Distinct from `corrupt` because the remedy
55
55
  * is the opposite: upgrade, do not delete.
56
56
  */
57
57
  | {
@@ -68,20 +68,20 @@ export declare function getTreeMarkerPath(root: string): string;
68
68
  *
69
69
  * Only ENOENT/ENOTDIR mean `absent`: any other probe failure (EACCES on the
70
70
  * `.fireforge` directory, EIO, …) reports `corrupt`, because "we cannot read
71
- * the marker" is not evidence that there is no marker — a `pathExists`
71
+ * the marker" is not evidence that there is no marker: a `pathExists`
72
72
  * pre-check classifies a tree with an unreadable `.fireforge` as `absent`
73
73
  * and hands it the full mutating command set.
74
74
  */
75
75
  /**
76
76
  * Naming convention for state-file readers:
77
- * - `readX(): Promise<XRead>` — the TRI-STATE read: absent, corrupt, or
77
+ * - `readX(): Promise<XRead>` is the tri-state read: absent, corrupt, or
78
78
  * valid.
79
- * - `tryReadX(): Promise<X | undefined>` — collapses absent and corrupt.
79
+ * - `tryReadX(): Promise<X | undefined>` collapses absent and corrupt.
80
80
  */
81
81
  export declare function readTreeMarker(root: string): Promise<TreeMarkerRead>;
82
82
  /**
83
83
  * Reads the tree marker for a project root, or undefined when it is absent
84
- * OR unreadable.
84
+ * or unreadable.
85
85
  *
86
86
  * For display and best-effort paths only (`tree list` renders an unreadable
87
87
  * marker as staleness 'unknown'). Anything that decides whether a mutation may
@@ -93,8 +93,8 @@ export declare function tryReadTreeMarker(root: string): Promise<TreeMarker | un
93
93
  * the one this tree's marker vouched for as rewritten-and-reconfigured. A
94
94
  * mismatch means an objdir appeared in the tree through some path other than
95
95
  * `tree create --with-objdir` (manual copy, partial restore), so nothing
96
- * proves it was relocated — running against it could consult primary paths.
97
- * No-op outside a tree; a corrupt marker is already refused by the guard.
96
+ * proves it was relocated, and running against it could consult primary paths.
97
+ * No-op outside a tree. A corrupt marker is already refused by the guard.
98
98
  */
99
99
  export declare function assertObjdirMatchesTreeMarker(projectRoot: string, objDir: string | undefined): Promise<void>;
100
100
  /** Current primary-side snapshot identity, including dirty source and patch bodies. */
@@ -109,8 +109,8 @@ export declare function assertValidTreeName(name: string): void;
109
109
  * Materialises the tree at `treeRoot` from `primaryRoot` using `capability`
110
110
  * ('none' = plain copy, already gated on --force-copy by the caller).
111
111
  *
112
- * The engine is cloned one TOP-LEVEL entry at a time so unwanted `obj-*`
113
- * directories are never traversed or materialised — on a Firefox tree, even
112
+ * The engine is cloned one top-level entry at a time so unwanted `obj-*`
113
+ * directories are never traversed or materialised. On a Firefox tree, even
114
114
  * CoW-cloning and then deleting an objdir touches metadata for millions of
115
115
  * build outputs. With `withObjdir` exactly that objdir is included (after
116
116
  * {@link assertCloneSafeObjdir} refuses symlinked or engine-escaping objdirs
@@ -134,8 +134,8 @@ export declare function cloneTree(args: {
134
134
  export declare function listTrees(primaryRoot: string): Promise<TreeListEntry[]>;
135
135
  /**
136
136
  * Removes one tree. Refuses when a live process holds the tree's build
137
- * or engine-session lock — or when a lock directory exists whose ownership
138
- * cannot be established, which `--force` overrides — and never deletes a path
137
+ * or engine-session lock, or when a lock directory exists whose ownership
138
+ * cannot be established (which `--force` overrides). Never deletes a path
139
139
  * outside the trees directory (containment check before `rm -rf`).
140
140
  */
141
141
  export declare function removeTree(primaryRoot: string, name: string, options?: {
@@ -2,8 +2,8 @@
2
2
  /**
3
3
  * Verification-tree storage and lifecycle for `fireforge tree`.
4
4
  *
5
- * A tree is a FULL project-root CoW snapshot under
6
- * `.fireforge/trees/<name>` — `getProjectRoot()` walks up from cwd, so
5
+ * A tree is a full project-root CoW snapshot under
6
+ * `.fireforge/trees/<name>`. `getProjectRoot()` walks up from cwd, so
7
7
  * every read command (status, lint, typecheck, verify, doctor,
8
8
  * `export --dry-run`) runs inside the tree unmodified and its build /
9
9
  * engine-session locks key on the tree root automatically. Trees are
@@ -19,6 +19,7 @@ import { GeneralError } from '../errors/base.js';
19
19
  import { mapWithConcurrency } from '../utils/concurrency.js';
20
20
  import { getNodeErrorCode, isProcessAlive, toError } from '../utils/errors.js';
21
21
  import { pathExists, readJson, writeJson } from '../utils/fs.js';
22
+ import { sha256Hex } from '../utils/hash.js';
22
23
  import { verbose, warn } from '../utils/logger.js';
23
24
  import { isObject } from '../utils/validation.js';
24
25
  import { getBuildBaselinePath } from './build-baseline.js';
@@ -91,23 +92,23 @@ export function getTreeMarkerPath(root) {
91
92
  *
92
93
  * Only ENOENT/ENOTDIR mean `absent`: any other probe failure (EACCES on the
93
94
  * `.fireforge` directory, EIO, …) reports `corrupt`, because "we cannot read
94
- * the marker" is not evidence that there is no marker — a `pathExists`
95
+ * the marker" is not evidence that there is no marker: a `pathExists`
95
96
  * pre-check classifies a tree with an unreadable `.fireforge` as `absent`
96
97
  * and hands it the full mutating command set.
97
98
  */
98
99
  /**
99
100
  * Naming convention for state-file readers:
100
- * - `readX(): Promise<XRead>` — the TRI-STATE read: absent, corrupt, or
101
+ * - `readX(): Promise<XRead>` is the tri-state read: absent, corrupt, or
101
102
  * valid.
102
- * - `tryReadX(): Promise<X | undefined>` — collapses absent and corrupt.
103
+ * - `tryReadX(): Promise<X | undefined>` collapses absent and corrupt.
103
104
  */
104
105
  export async function readTreeMarker(root) {
105
106
  const markerPath = getTreeMarkerPath(root);
106
107
  try {
107
108
  const raw = await readJson(markerPath);
108
- // Version FIRST, and reported distinctly. Folding the schemaVersion
109
- // check into `isTreeMarker` makes a marker from a NEWER FireForge read
110
- // as "missing or mistypes a required field" — and `tree-guard.ts` is
109
+ // Version first, and reported distinctly. Folding the schemaVersion
110
+ // check into `isTreeMarker` makes a marker from a newer FireForge read
111
+ // as "missing or mistypes a required field", and `tree-guard.ts` is
111
112
  // default-deny on corrupt, so the operator is locked out of every
112
113
  // mutating command inside the tree by a message claiming the file is
113
114
  // malformed when it is merely newer.
@@ -128,13 +129,13 @@ export async function readTreeMarker(root) {
128
129
  const code = getNodeErrorCode(error);
129
130
  if (code === 'ENOENT' || code === 'ENOTDIR')
130
131
  return { kind: 'absent' };
131
- verbose(`Unreadable tree marker at ${markerPath}: ${String(error)}`);
132
+ verbose(`Unreadable tree marker at ${markerPath}: ${toError(error).message}`);
132
133
  return { kind: 'corrupt', reason: `the marker could not be read (${toError(error).message})` };
133
134
  }
134
135
  }
135
136
  /**
136
137
  * Reads the tree marker for a project root, or undefined when it is absent
137
- * OR unreadable.
138
+ * or unreadable.
138
139
  *
139
140
  * For display and best-effort paths only (`tree list` renders an unreadable
140
141
  * marker as staleness 'unknown'). Anything that decides whether a mutation may
@@ -149,8 +150,8 @@ export async function tryReadTreeMarker(root) {
149
150
  * the one this tree's marker vouched for as rewritten-and-reconfigured. A
150
151
  * mismatch means an objdir appeared in the tree through some path other than
151
152
  * `tree create --with-objdir` (manual copy, partial restore), so nothing
152
- * proves it was relocated — running against it could consult primary paths.
153
- * No-op outside a tree; a corrupt marker is already refused by the guard.
153
+ * proves it was relocated, and running against it could consult primary paths.
154
+ * No-op outside a tree. A corrupt marker is already refused by the guard.
154
155
  */
155
156
  export async function assertObjdirMatchesTreeMarker(projectRoot, objDir) {
156
157
  const state = await readTreeMarker(projectRoot);
@@ -178,9 +179,7 @@ export async function computePrimaryFingerprint(primaryRoot) {
178
179
  }
179
180
  let engineFingerprint;
180
181
  try {
181
- engineFingerprint = createHash('sha256')
182
- .update(await getAllDiff(engineDir))
183
- .digest('hex');
182
+ engineFingerprint = sha256Hex(await getAllDiff(engineDir));
184
183
  }
185
184
  catch {
186
185
  engineFingerprint = null;
@@ -215,17 +214,17 @@ export function assertValidTreeName(name) {
215
214
  }
216
215
  /**
217
216
  * Refuses an objdir that is not a plain directory physically inside
218
- * `engineDir` — every `cp` mode `cloneEntry` uses preserves symlinks, so
217
+ * `engineDir`. Every `cp` mode `cloneEntry` uses preserves symlinks, so
219
218
  * a symlinked `engine/obj-*` would be cloned as a symlink pointing back
220
219
  * at the original (primary or fully external) build, and the clone's
221
220
  * mozinfo rewrite and `_virtualenvs` removal would then mutate that
222
221
  * original through the link. Checks lstat (the entry itself must be a
223
- * real directory) AND realpath containment (a real directory reached
224
- * through a symlinked parent resolves elsewhere) — the rewriter's
222
+ * real directory) and realpath containment (a real directory reached
223
+ * through a symlinked parent resolves elsewhere). The rewriter's
225
224
  * lexical `resolve()` paths cannot detect either. Also validates the
226
225
  * name as a single `obj-*` path segment. Role `'primary'` guards before
227
- * any copying starts; `'cloned'` re-checks the tree's copy before any
228
- * write goes through it (defense in depth).
226
+ * any copying starts. Role `'cloned'` re-checks the tree's copy before
227
+ * any write goes through it (defense in depth).
229
228
  */
230
229
  async function assertCloneSafeObjdir(engineDir, objDir, role) {
231
230
  const where = role === 'primary' ? 'engine/' : "the tree's engine/";
@@ -260,8 +259,8 @@ async function assertCloneSafeObjdir(engineDir, objDir, role) {
260
259
  * Materialises the tree at `treeRoot` from `primaryRoot` using `capability`
261
260
  * ('none' = plain copy, already gated on --force-copy by the caller).
262
261
  *
263
- * The engine is cloned one TOP-LEVEL entry at a time so unwanted `obj-*`
264
- * directories are never traversed or materialised — on a Firefox tree, even
262
+ * The engine is cloned one top-level entry at a time so unwanted `obj-*`
263
+ * directories are never traversed or materialised. On a Firefox tree, even
265
264
  * CoW-cloning and then deleting an objdir touches metadata for millions of
266
265
  * build outputs. With `withObjdir` exactly that objdir is included (after
267
266
  * {@link assertCloneSafeObjdir} refuses symlinked or engine-escaping objdirs
@@ -273,7 +272,7 @@ async function assertCloneSafeObjdir(engineDir, objDir, role) {
273
272
  export async function cloneTree(args) {
274
273
  const { primaryRoot, treeRoot, name, capability, createdAt, withObjdir } = args;
275
274
  if (withObjdir) {
276
- // Refuse a symlinked/escaping primary objdir BEFORE any copying: the
275
+ // Refuse a symlinked/escaping primary objdir before any copying: the
277
276
  // clone would carry the symlink and every later write would land in
278
277
  // the original build (see assertCloneSafeObjdir).
279
278
  await assertCloneSafeObjdir(join(primaryRoot, 'engine'), withObjdir.objDir, 'primary');
@@ -294,8 +293,8 @@ export async function cloneTree(args) {
294
293
  });
295
294
  });
296
295
  // A selected objdir embeds absolute topsrcdir/topobjdir paths back into
297
- // the PRIMARY tree. It is rewritten below before the marker records it as
298
- // usable; no other objdir ever enters the snapshot.
296
+ // the primary tree. It is rewritten below before the marker records it as
297
+ // usable. No other objdir ever enters the snapshot.
299
298
  if (await pathExists(engineDir)) {
300
299
  // Defensive: never inherit a mid-operation git index lock.
301
300
  await rm(join(engineDir, '.git', 'index.lock'), { force: true });
@@ -303,7 +302,7 @@ export async function cloneTree(args) {
303
302
  if (withObjdir) {
304
303
  await rewriteClonedObjdir(engineDir, withObjdir.objDir);
305
304
  // Regenerate configure output (config.status, backend.mk, Makefile,
306
- // config/autoconf.mk) against the tree's paths — the mozinfo rewrite
305
+ // config/autoconf.mk) against the tree's paths. The mozinfo rewrite
307
306
  // alone leaves those naming the primary. A failed reconfigure throws
308
307
  // before the marker below records the objdir as usable (fail-closed).
309
308
  await withObjdir.reconfigure(engineDir);
@@ -315,7 +314,7 @@ export async function cloneTree(args) {
315
314
  }
316
315
  if (withObjdir) {
317
316
  // The in-tree stale-build and static-components gates anchor on the
318
- // last-build baseline; without the copy they would read `undefined`
317
+ // last-build baseline. Without the copy they would read `undefined`
319
318
  // and degrade to first-build semantics inside a fully built tree.
320
319
  const baseline = getBuildBaselinePath(primaryRoot);
321
320
  if (await pathExists(baseline)) {
@@ -340,7 +339,7 @@ export async function cloneTree(args) {
340
339
  * Points the cloned objdir at the tree: rewrites mozinfo.json's
341
340
  * topsrcdir/topobjdir (and an in-tree mozconfig) via the same
342
341
  * safe-relocation rewriter `build --rewrite-mozinfo` uses, refusing
343
- * fail-closed when its safety rules cannot prove the rewrite correct —
342
+ * fail-closed when its safety rules cannot prove the rewrite correct:
344
343
  * a tree must never hold an objdir that still names the primary. Before
345
344
  * any write, the cloned objdir is re-checked as a real directory inside
346
345
  * the tree ({@link assertCloneSafeObjdir}) so no write ever goes through
@@ -348,7 +347,7 @@ export async function cloneTree(args) {
348
347
  * removed outright: their scripts carry primary-tree shebang paths, and
349
348
  * mach rebuilds venvs in-tree on first use. The configure-generated root
350
349
  * files (config.status, backend.mk, Makefile, config/autoconf.mk) still
351
- * name the primary after this rewrite; they are regenerated by the
350
+ * name the primary after this rewrite. They are regenerated by the
352
351
  * in-tree `mach configure` the caller supplies to {@link cloneTree},
353
352
  * which runs before the marker is written.
354
353
  */
@@ -392,7 +391,7 @@ export async function listTrees(primaryRoot) {
392
391
  }
393
392
  /**
394
393
  * Classifies a mkdir-style lock directory. Reads the lock's owner file
395
- * directly (line 1 = PID — the format `file-lock.ts` documents as stable,
394
+ * directly (line 1 = PID, the format `file-lock.ts` documents as stable,
396
395
  * whose name it shares via {@link LOCK_PID_FILE}) instead of exporting
397
396
  * file-lock internals.
398
397
  *
@@ -403,7 +402,7 @@ export async function listTrees(primaryRoot) {
403
402
  *
404
403
  * The `unknown` state is not theoretical. `withFileLock` takes the lock by
405
404
  * creating the directory and only *then* writes the owner file, treating a
406
- * write failure as non-fatal — so every acquisition passes through a window
405
+ * write failure as non-fatal, so every acquisition passes through a window
407
406
  * in which the lock is genuinely held and has no readable PID, and a
408
407
  * read-only or full filesystem leaves it that way for the lock's whole life.
409
408
  * Reporting that as `free` lets `removeTree` recursively delete a tree out
@@ -420,8 +419,9 @@ async function inspectTreeLock(lockPath) {
420
419
  }
421
420
  catch (error) {
422
421
  // A lock cleanly released between the existence probe above and this read
423
- // leaves no directory behind — that is a release, not an unreadable owner,
424
- // and demanding --force for it would be a spurious refusal.
422
+ // leaves no directory behind. That is a release rather than an
423
+ // unreadable owner, and demanding --force for it would be a spurious
424
+ // refusal.
425
425
  if (!existsSync(lockPath))
426
426
  return { kind: 'free' };
427
427
  return {
@@ -437,16 +437,17 @@ async function inspectTreeLock(lockPath) {
437
437
  }
438
438
  /**
439
439
  * Removes one tree. Refuses when a live process holds the tree's build
440
- * or engine-session lock — or when a lock directory exists whose ownership
441
- * cannot be established, which `--force` overrides — and never deletes a path
440
+ * or engine-session lock, or when a lock directory exists whose ownership
441
+ * cannot be established (which `--force` overrides). Never deletes a path
442
442
  * outside the trees directory (containment check before `rm -rf`).
443
443
  */
444
444
  export async function removeTree(primaryRoot, name, options = {}) {
445
445
  assertValidTreeName(name);
446
446
  // Both sides resolved: the containment prefix has to be in the same form as
447
447
  // the path it guards. `getTreesDir` is a `join`, so on Windows it yields a
448
- // drive-less path while `resolve` below adds the drive letter — the prefix
449
- // test then failed for EVERY tree and refused each removal as an escape.
448
+ // drive-less path while `resolve` below adds the drive letter, so the
449
+ // prefix test then failed for every tree and refused each removal as an
450
+ // escape.
450
451
  const treesDir = resolve(getTreesDir(primaryRoot));
451
452
  const treeRoot = resolve(treesDir, name);
452
453
  if (!treeRoot.startsWith(treesDir + sep) || basename(treeRoot) !== name) {
@@ -461,7 +462,7 @@ export async function removeTree(primaryRoot, name, options = {}) {
461
462
  ]) {
462
463
  const state = await inspectTreeLock(lockPath);
463
464
  if (state.kind === 'held') {
464
- throw new GeneralError(`Refusing to remove tree "${name}": a live process (pid ${String(state.pid)}) holds ${lockPath}. ` +
465
+ throw new GeneralError(`Refusing to remove tree "${name}": a live process (pid ${state.pid}) holds ${lockPath}. ` +
465
466
  'Wait for it to finish, then retry.');
466
467
  }
467
468
  if (state.kind === 'unknown' && options.force !== true) {
@@ -4,7 +4,7 @@
4
4
  * `fireforge typecheck` command (`typecheck.ts`).
5
5
  *
6
6
  * Centralised so both flows agree on the same Firefox-globals shim
7
- * and the same set of suppressed diagnostic codes — drift between the
7
+ * and the same set of suppressed diagnostic codes. Drift between the
8
8
  * two would mean a patch could lint clean under `fireforge lint` but
9
9
  * still fail `fireforge typecheck`, or vice versa, for reasons the
10
10
  * operator could not infer from the rule names.
@@ -13,15 +13,15 @@
13
13
  export declare const SHIM_FILENAME = "__fireforge_firefox_globals.d.ts";
14
14
  /**
15
15
  * Loose declarations for Firefox test-harness globals (mochitest
16
- * browser-chrome and xpcshell), appended AFTER the composed
16
+ * browser-chrome and xpcshell), appended after the composed
17
17
  * Firefox-globals + consumer shim when `patchLint.checkJsTestFiles`
18
18
  * extends the checkJs pass to patch-adopted test scripts.
19
- * Deliberately `any`-typed — the pragmatic posture matches the main
20
- * shim. A consumer that wants TYPED harness members (so e.g. a call to
21
- * a method the harness does not declare fails at the patch boundary)
22
- * declares them in `patchLint.checkJsTestShim`; because that shim
23
- * composes BEFORE this baseline and TypeScript resolves conflicting
24
- * `declare var` redeclarations to the FIRST declaration, the typed
19
+ * These are `any`-typed, the same pragmatic posture as the main
20
+ * shim. A consumer that wants typed harness members (so that, say, a call
21
+ * to a method the harness does not declare fails at the patch boundary)
22
+ * declares them in `patchLint.checkJsTestShim`. Because that shim
23
+ * composes before this baseline and TypeScript resolves conflicting
24
+ * `declare var` redeclarations to the first declaration, the typed
25
25
  * consumer declaration wins over the loose fallback here.
26
26
  */
27
27
  export declare const TEST_HARNESS_SHIM = "\n// \u2500\u2500 FireForge test-harness shim (loose baseline) \u2500\u2500\ndeclare var TestUtils: any;\ndeclare var BrowserTestUtils: any;\ndeclare var SpecialPowers: any;\ndeclare var EventUtils: any;\ndeclare var SimpleTest: any;\ndeclare var Assert: any;\ndeclare var gTestPath: string;\ndeclare var content: any;\ndeclare function add_task(task: (...args: any[]) => any): any;\ndeclare function add_setup(task: (...args: any[]) => any): any;\ndeclare function ok(condition: any, message?: string): void;\ndeclare function is(actual: any, expected: any, message?: string): void;\ndeclare function isnot(actual: any, expected: any, message?: string): void;\ndeclare function todo(condition: any, message?: string): void;\ndeclare function todo_is(actual: any, expected: any, message?: string): void;\ndeclare function info(message: string): void;\ndeclare function registerCleanupFunction(callback: (...args: any[]) => any): void;\ndeclare function waitForExplicitFinish(): void;\ndeclare function finish(): void;\ndeclare function do_get_profile(): any;\ndeclare function run_test(): any;\n\n";
@@ -32,7 +32,7 @@ export declare const TEST_HARNESS_SHIM = "\n// \u2500\u2500 FireForge test-harne
32
32
  * build system: the resolver can't follow `resource://`/`chrome://`
33
33
  * URLs and the global shim is intentionally narrow.
34
34
  *
35
- * Widening this set should be deliberate and per-code — silently
35
+ * Widening this set should be deliberate and per-code: silently
36
36
  * suppressing more codes hides real type errors. The same set is used
37
37
  * by both flows so a patch can't pass one and fail the other for a
38
38
  * reason the operator couldn't infer from the docs.
@@ -44,8 +44,9 @@ export declare const SUPPRESSED_DIAGNOSTIC_CODES: ReadonlySet<number>;
44
44
  * a module reference a name with no import or declaration anywhere and still
45
45
  * typecheck with 0 errors, so the failure surfaces as a runtime
46
46
  * `ReferenceError`. Both flows report these at a configurable severity
47
- * (default `'warning'`: visible without breaking gates; genuine shim gaps
48
- * are silenced by adding the global to `extraShim`, or per-run via `'off'`).
47
+ * (default `'warning'`: visible without breaking gates, while genuine shim
48
+ * gaps are silenced by adding the global to `extraShim`, or per-run via
49
+ * `'off'`).
49
50
  */
50
51
  export declare const UNDEFINED_IDENTIFIER_CODES: ReadonlySet<number>;
51
52
  /** Hint appended to reported undefined-identifier diagnostics. */
@@ -62,18 +63,18 @@ export interface ComposedShim {
62
63
  /**
63
64
  * Composes the synthetic shim source by concatenating the built-in Firefox
64
65
  * globals shim with the contents of an optional user-supplied `.d.ts` file.
65
- * The user file is appended verbatim — the augment direction is intentional
66
+ * The user file is appended verbatim. The augment direction is intentional
66
67
  * (declarations later in concat order augment earlier ones), so a project
67
68
  * that wants to refine `Services` with a more specific type can do so in the
68
- * extra shim, and members can be ADDED to the structured globals by merging
69
- * their interfaces (`interface ChromeUtilsShim { newMember(): any }` — see
69
+ * extra shim, and members can be added to the structured globals by merging
70
+ * their interfaces (`interface ChromeUtilsShim { newMember(): any }`, see
70
71
  * the module doc comment). Any triple-slash `/// <reference path="…">`
71
72
  * directives inside the extra shim are inlined (resolved against the extra
72
73
  * shim's own directory) so they are not silently dropped at the synthetic
73
74
  * shim path.
74
75
  *
75
76
  * Missing extra-shim files raise a clear error rather than failing silently
76
- * with a confusing "type not found" downstream — this is the one
77
+ * with a confusing "type not found" downstream. This is the one
77
78
  * config-driven path where a user typo in `fireforge.json` produces a
78
79
  * runtime error, so it needs to be unmistakable.
79
80
  *