@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,7 +4,7 @@
4
4
  *
5
5
  * mozbuild enforces alphabetical ordering on `StrictOrderingOnAppendList`
6
6
  * variables and raises `mozbuild.util.UnsortedError: … expected "X" but got
7
- * "Y"` — but only at CONFIGURE time, i.e. minutes into a `fireforge build`
7
+ * "Y"`, but only at configure time, i.e. minutes into a `fireforge build`
8
8
  * or `fireforge test --build` dispatch. This check reads the patched
9
9
  * `moz.build` files from the engine tree (the working tree carries the
10
10
  * applied patch state, same as every other per-patch rule) and reports the
@@ -16,8 +16,8 @@ import { mozbuildSortCompare } from './moz-manifest-helpers.js';
16
16
  /**
17
17
  * moz.build list variables mozbuild declares as `StrictOrderingOnAppendList`
18
18
  * (python/mozbuild/mozbuild/frontend/context.py). configure raises
19
- * `UnsortedError` on append when out of order. `DIRS` is deliberately absent
20
- * — directory order is meaningful and not strict-ordered. Dotted namespaces
19
+ * `UnsortedError` on append when out of order. `DIRS` is absent on purpose:
20
+ * directory order is meaningful and not strict-ordered. Dotted namespaces
21
21
  * (`EXTRA_JS_MODULES.<subdir>`, `EXPORTS.<ns>`) inherit strict ordering
22
22
  * from their parent variable.
23
23
  */
@@ -39,7 +39,7 @@ const LIST_OPENER = new RegExp(`^\\s*((?:${STRICT_ORDERED_MOZBUILD_LISTS.join('|
39
39
  */
40
40
  /**
41
41
  * True when `line` contains a `]` outside any quoted span. A bracket inside an
42
- * item (`"icons[2x].png"`) is filename text, not the list's close — reading it
42
+ * item (`"icons[2x].png"`) is filename text, not the list's close. Reading it
43
43
  * as one truncated the item set and left every later item unchecked.
44
44
  */
45
45
  function hasUnquotedCloseBracket(line) {
@@ -90,8 +90,8 @@ function stripMozBuildComment(line) {
90
90
  * - a quoted string in a trailing comment would otherwise be scraped in as a
91
91
  * phantom list item (`"Zeta.cpp", # replaces "Beta.cpp"` yielding a
92
92
  * `Beta.cpp` entry), so the sort check reports an unsorted list naming a
93
- * file that is not in it — with a fingerprint that can never stabilise,
94
- * because the item does not exist to be moved;
93
+ * file that is not in it, with a fingerprint that can never stabilise,
94
+ * because the item does not exist to be moved.
95
95
  * - a `]` anywhere in a comment (`# see foo[0]`) would close the list early
96
96
  * and silently truncate the item set.
97
97
  *
@@ -99,9 +99,9 @@ function stripMozBuildComment(line) {
99
99
  * list would otherwise consume the rest of the file and skip every later
100
100
  * list in it.
101
101
  *
102
- * Nor does an unterminated list borrow the NEXT list's bracket. The forward
103
- * scan stops at the next list opener rather than reading through it —
104
- * otherwise an unclosed `EXTRA_COMPONENTS` swallows the following
102
+ * Nor does an unterminated list borrow the next list's bracket. The forward
103
+ * scan stops at the next list opener rather than reading through it.
104
+ * Otherwise an unclosed `EXTRA_COMPONENTS` swallows the following
105
105
  * `EXTRA_JS_MODULES`, merging its items into the first list and accepting
106
106
  * its `]` as the first list's close, reporting a sorting error against a
107
107
  * variable that never contained those items.
@@ -149,7 +149,7 @@ function collectStrictOrderedLists(content) {
149
149
  }
150
150
  if (closed) {
151
151
  occurrences.push({ varName, items });
152
- // Resume after the list we just consumed; a list that never closed
152
+ // Resume after the list we just consumed. A list that never closed
153
153
  // leaves `i` untouched so the next line is still examined.
154
154
  i = cursor;
155
155
  }
@@ -16,7 +16,7 @@ import type { PatchLintIssue } from '../types/commands/index.js';
16
16
  * binaryName happens to be a substring of one. `quit-application*` is
17
17
  * handled as a prefix family in {@link isKnownFirefoxTopic}.
18
18
  *
19
- * The list is deliberately conservative: it only needs to cover topics
19
+ * The list is conservative: it only needs to cover topics
20
20
  * whose text could plausibly contain a fork's binaryName, plus the
21
21
  * high-traffic lifecycle topics seen in downstream test simulations.
22
22
  */
@@ -26,8 +26,8 @@ export declare function isKnownFirefoxTopic(topic: string): boolean;
26
26
  /**
27
27
  * Lints observer-service call sites in `strippedContent` (comments already
28
28
  * removed) for fork topic naming. Only topics that embed `binaryName` and
29
- * do not follow the `<binary>-<noun>-<verb>` convention are flagged;
30
- * allowlisted Firefox topics and constant-named topics are skipped.
29
+ * do not follow the `<binary>-<noun>-<verb>` convention are flagged.
30
+ * Allowlisted Firefox topics and constant-named topics are skipped.
31
31
  *
32
32
  * @param strippedContent - Source with comments stripped
33
33
  * @param file - File path for issue attribution
@@ -16,7 +16,7 @@
16
16
  * binaryName happens to be a substring of one. `quit-application*` is
17
17
  * handled as a prefix family in {@link isKnownFirefoxTopic}.
18
18
  *
19
- * The list is deliberately conservative: it only needs to cover topics
19
+ * The list is conservative: it only needs to cover topics
20
20
  * whose text could plausibly contain a fork's binaryName, plus the
21
21
  * high-traffic lifecycle topics seen in downstream test simulations.
22
22
  */
@@ -49,7 +49,7 @@ export function isKnownFirefoxTopic(topic) {
49
49
  * commas inside nested calls, object literals, or strings do not split.
50
50
  *
51
51
  * @returns The argument texts, or null when the span never closes within
52
- * `maxLength` characters (malformed or truncated source — caller skips).
52
+ * `maxLength` characters (malformed or truncated source, caller skips).
53
53
  */
54
54
  function extractCallArguments(content, openParen, maxLength = 2000) {
55
55
  const args = [];
@@ -103,9 +103,9 @@ function extractCallArguments(content, openParen, maxLength = 2000) {
103
103
  /**
104
104
  * Returns the literal string value when `arg` is exactly one plain string
105
105
  * literal (no concatenation, no `${}` interpolation), otherwise null.
106
- * Constant-named topics (identifiers, member expressions) intentionally
107
- * return null — hoisting a literal into a named constant is a supported
108
- * way to mark a topic as deliberate.
106
+ * Constant-named topics (identifiers, member expressions) return null on
107
+ * purpose: hoisting a literal into a named constant is a supported way to
108
+ * mark a topic as deliberate.
109
109
  */
110
110
  function asStringLiteral(arg) {
111
111
  const trimmed = arg.trim();
@@ -126,8 +126,8 @@ function asStringLiteral(arg) {
126
126
  /**
127
127
  * Lints observer-service call sites in `strippedContent` (comments already
128
128
  * removed) for fork topic naming. Only topics that embed `binaryName` and
129
- * do not follow the `<binary>-<noun>-<verb>` convention are flagged;
130
- * allowlisted Firefox topics and constant-named topics are skipped.
129
+ * do not follow the `<binary>-<noun>-<verb>` convention are flagged.
130
+ * Allowlisted Firefox topics and constant-named topics are skipped.
131
131
  *
132
132
  * @param strippedContent - Source with comments stripped
133
133
  * @param file - File path for issue attribution
@@ -8,9 +8,9 @@
8
8
  *
9
9
  * The two resolvers are kept separate (one per extension predicate)
10
10
  * because the downstream rules differ: `.sys.mjs` files go through
11
- * `runCheckJs` (TypeScript checkJs) and the export-walker JSDoc rule;
12
- * chrome subscripts (`.js` non-`.sys.mjs`) only get the script-walker
13
- * JSDoc rule. Mixing them in a single set would silently broaden
11
+ * `runCheckJs` (TypeScript checkJs) and the export-walker JSDoc rule,
12
+ * while chrome subscripts (`.js` non-`.sys.mjs`) only get the
13
+ * script-walker JSDoc rule. Mixing them in a single set would silently broaden
14
14
  * `runCheckJs` to chrome subscripts, which it is not designed for.
15
15
  */
16
16
  import type { PatchQueueContext } from './patch-lint-cross.js';
@@ -32,7 +32,7 @@ import type { PatchQueueContext } from './patch-lint-cross.js';
32
32
  export declare function resolvePatchOwnedSysMjs(currentNewFiles: Set<string>, patchQueueCtx?: PatchQueueContext): Set<string>;
33
33
  /**
34
34
  * Returns the set of file paths that are patch-owned chrome subscripts
35
- * (`.js` files that are not `.sys.mjs` modules — typically
35
+ * (`.js` files that are not `.sys.mjs` modules, typically
36
36
  * `browser/base/content/<binaryName>*.js` and similar). Same ownership
37
37
  * semantics as {@link resolvePatchOwnedSysMjs}.
38
38
  *
@@ -45,7 +45,7 @@ export declare function resolvePatchOwnedChromeScripts(currentNewFiles: Set<stri
45
45
  * Test-script predicate for the `checkJsTestFiles` pass:
46
46
  * plain `.js` files (not `.sys.mjs` modules) that live under a `/test/`
47
47
  * path or carry a `browser_` / `test_` / `xpcshell_` basename. Duplicates
48
- * `patch-lint.ts`'s `isTestFile` shape rather than importing it —
48
+ * `patch-lint.ts`'s `isTestFile` shape rather than importing it:
49
49
  * patch-lint.ts imports this module, so the reverse edge would create an
50
50
  * import cycle (dpdm gate). The agreement is pinned by
51
51
  * `patch-lint-ownership.test.ts`.
@@ -53,7 +53,7 @@ export declare function resolvePatchOwnedChromeScripts(currentNewFiles: Set<stri
53
53
  export declare function isTestScriptFile(file: string): boolean;
54
54
  /**
55
55
  * Returns the set of patch-owned test `.js` files. Same
56
- * ownership semantics as {@link resolvePatchOwnedSysMjs}; consumed by the
56
+ * ownership semantics as {@link resolvePatchOwnedSysMjs}. Consumed by the
57
57
  * `patchLint.checkJsTestFiles` pass, which checks each as its own small
58
58
  * script-scope program.
59
59
  *
@@ -9,9 +9,9 @@
9
9
  *
10
10
  * The two resolvers are kept separate (one per extension predicate)
11
11
  * because the downstream rules differ: `.sys.mjs` files go through
12
- * `runCheckJs` (TypeScript checkJs) and the export-walker JSDoc rule;
13
- * chrome subscripts (`.js` non-`.sys.mjs`) only get the script-walker
14
- * JSDoc rule. Mixing them in a single set would silently broaden
12
+ * `runCheckJs` (TypeScript checkJs) and the export-walker JSDoc rule,
13
+ * while chrome subscripts (`.js` non-`.sys.mjs`) only get the
14
+ * script-walker JSDoc rule. Mixing them in a single set would silently broaden
15
15
  * `runCheckJs` to chrome subscripts, which it is not designed for.
16
16
  */
17
17
  import { collectNewFileCreatorsByPath } from './patch-lint-cross.js';
@@ -56,7 +56,7 @@ export function resolvePatchOwnedSysMjs(currentNewFiles, patchQueueCtx) {
56
56
  }
57
57
  /**
58
58
  * Returns the set of file paths that are patch-owned chrome subscripts
59
- * (`.js` files that are not `.sys.mjs` modules — typically
59
+ * (`.js` files that are not `.sys.mjs` modules, typically
60
60
  * `browser/base/content/<binaryName>*.js` and similar). Same ownership
61
61
  * semantics as {@link resolvePatchOwnedSysMjs}.
62
62
  *
@@ -71,7 +71,7 @@ export function resolvePatchOwnedChromeScripts(currentNewFiles, patchQueueCtx) {
71
71
  * Test-script predicate for the `checkJsTestFiles` pass:
72
72
  * plain `.js` files (not `.sys.mjs` modules) that live under a `/test/`
73
73
  * path or carry a `browser_` / `test_` / `xpcshell_` basename. Duplicates
74
- * `patch-lint.ts`'s `isTestFile` shape rather than importing it —
74
+ * `patch-lint.ts`'s `isTestFile` shape rather than importing it:
75
75
  * patch-lint.ts imports this module, so the reverse edge would create an
76
76
  * import cycle (dpdm gate). The agreement is pinned by
77
77
  * `patch-lint-ownership.test.ts`.
@@ -86,7 +86,7 @@ export function isTestScriptFile(file) {
86
86
  }
87
87
  /**
88
88
  * Returns the set of patch-owned test `.js` files. Same
89
- * ownership semantics as {@link resolvePatchOwnedSysMjs}; consumed by the
89
+ * ownership semantics as {@link resolvePatchOwnedSysMjs}. Consumed by the
90
90
  * `patchLint.checkJsTestFiles` pass, which checks each as its own small
91
91
  * script-scope program.
92
92
  *
@@ -4,32 +4,32 @@
4
4
  * Until 0.45.0 no tier of the chain ran Prettier on `.sys.mjs` at all, so
5
5
  * module formatting drift was caught by nothing and survived to a human
6
6
  * reviewer. Worse, the obvious manual check was misleading in the same
7
- * direction: a fork's ROOT `.prettierignore` typically excludes `engine/`,
7
+ * direction: a fork's root `.prettierignore` typically excludes `engine/`,
8
8
  * so `prettier --check --config engine/.prettierrc.js <engine files>` run
9
9
  * from the repo root reports "all files use Prettier code style" for files
10
10
  * that fail the identical check run from inside `engine/`. A root-level
11
11
  * spot-check falsely refuted a correct reviewer finding on exactly this.
12
12
  *
13
- * This pass therefore runs prettier with `cwd` set to the ENGINE directory,
13
+ * This pass therefore runs prettier with `cwd` set to the engine directory,
14
14
  * so the engine's own `.prettierrc*` and `.prettierignore` resolve the way
15
15
  * they do for anyone working in that tree, and the FireForge result agrees
16
16
  * with the operator's own command.
17
17
  *
18
18
  * Opt-in (`patchLint.prettier`, default `'off'`): it spawns a process per
19
19
  * lint and is a new failure surface on queues that never had one. When it
20
- * is off, formatting is explicitly out of scope for the per-patch tier —
21
- * that is the contract, not an accident.
20
+ * is off, formatting is explicitly out of scope for the per-patch tier.
21
+ * That is the contract, not an accident.
22
22
  */
23
23
  import type { PatchLintIssue } from '../types/commands/index.js';
24
24
  import type { PatchLintSeverityGate } from '../types/config.js';
25
25
  /**
26
26
  * Runs `prettier --check` over `files` from inside the engine directory.
27
27
  *
28
- * @param engineDir - Absolute engine directory; also the `cwd`, which is
28
+ * @param engineDir - Absolute engine directory. Also the `cwd`, which is
29
29
  * what makes the engine's own config and ignore file authoritative
30
30
  * @param projectRoot - FireForge project root, for the fallback binary
31
31
  * @param files - Engine-relative patch-owned `.sys.mjs` paths
32
- * @param gate - Severity for reported issues; `'off'` skips the pass
32
+ * @param gate - Severity for reported issues. `'off'` skips the pass
33
33
  * @returns One issue per unformatted file, or a single run-level issue when
34
34
  * prettier could not be run at all
35
35
  */
@@ -5,21 +5,21 @@
5
5
  * Until 0.45.0 no tier of the chain ran Prettier on `.sys.mjs` at all, so
6
6
  * module formatting drift was caught by nothing and survived to a human
7
7
  * reviewer. Worse, the obvious manual check was misleading in the same
8
- * direction: a fork's ROOT `.prettierignore` typically excludes `engine/`,
8
+ * direction: a fork's root `.prettierignore` typically excludes `engine/`,
9
9
  * so `prettier --check --config engine/.prettierrc.js <engine files>` run
10
10
  * from the repo root reports "all files use Prettier code style" for files
11
11
  * that fail the identical check run from inside `engine/`. A root-level
12
12
  * spot-check falsely refuted a correct reviewer finding on exactly this.
13
13
  *
14
- * This pass therefore runs prettier with `cwd` set to the ENGINE directory,
14
+ * This pass therefore runs prettier with `cwd` set to the engine directory,
15
15
  * so the engine's own `.prettierrc*` and `.prettierignore` resolve the way
16
16
  * they do for anyone working in that tree, and the FireForge result agrees
17
17
  * with the operator's own command.
18
18
  *
19
19
  * Opt-in (`patchLint.prettier`, default `'off'`): it spawns a process per
20
20
  * lint and is a new failure surface on queues that never had one. When it
21
- * is off, formatting is explicitly out of scope for the per-patch tier —
22
- * that is the contract, not an accident.
21
+ * is off, formatting is explicitly out of scope for the per-patch tier.
22
+ * That is the contract, not an accident.
23
23
  */
24
24
  import { join } from 'node:path';
25
25
  import { toError } from '../utils/errors.js';
@@ -52,11 +52,11 @@ async function resolvePrettier(engineDir, projectRoot) {
52
52
  /**
53
53
  * Runs `prettier --check` over `files` from inside the engine directory.
54
54
  *
55
- * @param engineDir - Absolute engine directory; also the `cwd`, which is
55
+ * @param engineDir - Absolute engine directory. Also the `cwd`, which is
56
56
  * what makes the engine's own config and ignore file authoritative
57
57
  * @param projectRoot - FireForge project root, for the fallback binary
58
58
  * @param files - Engine-relative patch-owned `.sys.mjs` paths
59
- * @param gate - Severity for reported issues; `'off'` skips the pass
59
+ * @param gate - Severity for reported issues. `'off'` skips the pass
60
60
  * @returns One issue per unformatted file, or a single run-level issue when
61
61
  * prettier could not be run at all
62
62
  */
@@ -94,7 +94,7 @@ export async function invokePatchLintPrettier(engineDir, projectRoot, files, gat
94
94
  {
95
95
  file: '(prettier)',
96
96
  check: 'prettier-format',
97
- message: `prettier exited ${String(result.exitCode)} without completing the check: ` +
97
+ message: `prettier exited ${result.exitCode} without completing the check: ` +
98
98
  output.trim().split('\n').slice(-5).join(' ').slice(0, 400),
99
99
  severity,
100
100
  },
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Structural views of the cross-patch lint queue context.
3
+ *
4
+ * A leaf module by design: it imports nothing, so the individual rule
5
+ * modules can describe the slice of `PatchQueueContext` they read without
6
+ * importing `patch-lint-cross.ts` (which imports them back). Previously each
7
+ * rule re-declared its own private `{ entries }` interface. Sharing them here
8
+ * keeps the dependency edge one-way and `dpdm` clean while stating the shape
9
+ * once.
10
+ */
11
+ /**
12
+ * The slice of a queue entry consumed by rules that read raw patch bodies
13
+ * (the new-file creators map, the binary-body check).
14
+ */
15
+ export interface PatchQueueBodyEntry {
16
+ /** Filename on disk and in the manifest. */
17
+ filename: string;
18
+ /** Raw unified-diff content of the patch body. */
19
+ diff: string;
20
+ }
21
+ /**
22
+ * The slice of a queue entry consumed by the module-registration rule: the
23
+ * per-path content maps rather than the raw diff.
24
+ */
25
+ export interface PatchQueueRegistrationEntry {
26
+ /** Filename on disk and in the manifest. */
27
+ filename: string;
28
+ /** Newly-created file path → the content the patch would produce. */
29
+ newFiles: ReadonlyMap<string, string>;
30
+ /** Existing file path → the lines the patch adds to it. */
31
+ modifiedFileAdditions: ReadonlyMap<string, string>;
32
+ }
33
+ /**
34
+ * Structural queue view: the `entries` field of a `PatchQueueContext`,
35
+ * narrowed to whichever entry slice a rule needs.
36
+ */
37
+ export interface PatchQueueView<TEntry> {
38
+ /** Entries in application order (lowest `order` first). */
39
+ entries: readonly TEntry[];
40
+ }
41
+ /**
42
+ * The slice consumed by the forward-registration rule: the same content maps
43
+ * the module-registration rule reads, plus the body-kind-agnostic creation
44
+ * set and the ordering/metadata needed to decide "later" and "declared".
45
+ */
46
+ export interface PatchQueueForwardRegistrationEntry extends PatchQueueRegistrationEntry {
47
+ /** Order number from the manifest (or filename prefix fallback). */
48
+ order: number;
49
+ /** Every path this patch creates, whatever the body kind. */
50
+ createdFiles: ReadonlySet<string>;
51
+ /** Manifest metadata. Null when the patch file exists but has no entry. */
52
+ metadata: {
53
+ stagedDependencies?: {
54
+ registrations?: readonly {
55
+ file: string;
56
+ creates: string;
57
+ }[];
58
+ };
59
+ } | null;
60
+ }
@@ -0,0 +1,12 @@
1
+ // SPDX-License-Identifier: EUPL-1.2
2
+ /**
3
+ * Structural views of the cross-patch lint queue context.
4
+ *
5
+ * A leaf module by design: it imports nothing, so the individual rule
6
+ * modules can describe the slice of `PatchQueueContext` they read without
7
+ * importing `patch-lint-cross.ts` (which imports them back). Previously each
8
+ * rule re-declared its own private `{ entries }` interface. Sharing them here
9
+ * keeps the dependency edge one-way and `dpdm` clean while stating the shape
10
+ * once.
11
+ */
12
+ export {};
@@ -0,0 +1,61 @@
1
+ import type { PatchStagedRegistration } from '../types/commands/index.js';
2
+ /** A patch that creates a given path, with its position in the queue. */
3
+ export interface NewFileOwner {
4
+ filename: string;
5
+ order: number;
6
+ fullPath: string;
7
+ }
8
+ /** The ordering fields `isLaterOwner` compares an owner against. */
9
+ export interface QueuePosition {
10
+ filename: string;
11
+ order: number;
12
+ }
13
+ /**
14
+ * Later-in-apply-order predicate shared by the forward-import scan, the
15
+ * forward-registration rule and the registration validation: strictly
16
+ * higher ordinal, or same ordinal with a lexicographically later filename
17
+ * (the apply loop's tiebreak).
18
+ *
19
+ * @param owner - The creating patch
20
+ * @param entry - The referencing patch
21
+ * @returns True when `owner` applies after `entry`
22
+ */
23
+ export declare function isLaterOwner(owner: QueuePosition, entry: QueuePosition): boolean;
24
+ /** The slice of a queue entry the registration validation reads. */
25
+ export interface StagedRegistrationEntry extends QueuePosition {
26
+ newFiles: ReadonlyMap<string, string>;
27
+ modifiedFileAdditions: ReadonlyMap<string, string>;
28
+ }
29
+ /** Why a staged registration declaration failed validation. */
30
+ export type StagedRegistrationFailure = {
31
+ kind: 'line-absent';
32
+ } | {
33
+ kind: 'creates-unresolved';
34
+ } | {
35
+ kind: 'owner-mismatch';
36
+ creators: readonly NewFileOwner[];
37
+ };
38
+ /**
39
+ * Validates one registration-kind declaration against the patch content
40
+ * and the queue, mirroring {@link findMatchingStagedDependency}: the
41
+ * declared line must be added by this patch, `creates` must exactly match
42
+ * a file a later-ordered patch creates (an earlier-only creator means the
43
+ * dependency is already satisfied and the declaration is stale), and
44
+ * `owner`, when set, must name one of those creating patches. Returns
45
+ * undefined when valid.
46
+ */
47
+ export declare function findStagedRegistrationFailure(entry: StagedRegistrationEntry, registration: PatchStagedRegistration, createdFileIndex: Map<string, NewFileOwner[]>): StagedRegistrationFailure | undefined;
48
+ /** Message tail for each {@link StagedRegistrationFailure} shape. */
49
+ export declare function describeRegistrationFailure(failure: StagedRegistrationFailure): string;
50
+ /**
51
+ * Renders `line` for the `--line "…"` argument of a paste-and-run
52
+ * `patch staged-dependency` command.
53
+ *
54
+ * A registration line is quoted for the shell in the messages that print
55
+ * the command, and a `support-files` element carries its own quotes
56
+ * (`"file_tiles_find.html",` is what a multi-line TOML array adds). Without
57
+ * escaping, the shell would eat them and the declaration would be written
58
+ * with a line the patch never adds, the exact mismatch that made the
59
+ * forward-registration remedy leave the declaring patch red.
60
+ */
61
+ export declare function quoteRegistrationLine(line: string): string;
@@ -0,0 +1,90 @@
1
+ // SPDX-License-Identifier: EUPL-1.2
2
+ /**
3
+ * Validation of `--kind registration` staged-dependency declarations.
4
+ *
5
+ * Split out of `patch-lint-cross.ts` to keep that file inside the per-file
6
+ * line budget, and because the forward-registration rule needs the same
7
+ * apply-order predicate: two spellings of "later in the queue" would let the
8
+ * rule that flags an undeclared registration and the rule that validates a
9
+ * declared one disagree about the very same pair of patches.
10
+ *
11
+ * Exports helpers consumed by `patch-lint-cross.ts` and
12
+ * `patch-lint-forward-registration.ts`, with no registrar or rule of its own.
13
+ */
14
+ import { basename } from 'node:path';
15
+ /**
16
+ * Later-in-apply-order predicate shared by the forward-import scan, the
17
+ * forward-registration rule and the registration validation: strictly
18
+ * higher ordinal, or same ordinal with a lexicographically later filename
19
+ * (the apply loop's tiebreak).
20
+ *
21
+ * @param owner - The creating patch
22
+ * @param entry - The referencing patch
23
+ * @returns True when `owner` applies after `entry`
24
+ */
25
+ export function isLaterOwner(owner, entry) {
26
+ return (owner.order > entry.order || (owner.order === entry.order && owner.filename > entry.filename));
27
+ }
28
+ /**
29
+ * Validates one registration-kind declaration against the patch content
30
+ * and the queue, mirroring {@link findMatchingStagedDependency}: the
31
+ * declared line must be added by this patch, `creates` must exactly match
32
+ * a file a later-ordered patch creates (an earlier-only creator means the
33
+ * dependency is already satisfied and the declaration is stale), and
34
+ * `owner`, when set, must name one of those creating patches. Returns
35
+ * undefined when valid.
36
+ */
37
+ export function findStagedRegistrationFailure(entry, registration, createdFileIndex) {
38
+ if (!isRegistrationLinePresent(entry, registration))
39
+ return { kind: 'line-absent' };
40
+ const creators = (createdFileIndex.get(basename(registration.creates)) ?? []).filter((owner) => owner.fullPath === registration.creates && isLaterOwner(owner, entry));
41
+ if (creators.length === 0)
42
+ return { kind: 'creates-unresolved' };
43
+ if (registration.owner !== undefined &&
44
+ !creators.some((owner) => owner.filename === registration.owner)) {
45
+ return { kind: 'owner-mismatch', creators };
46
+ }
47
+ return undefined;
48
+ }
49
+ /** Message tail for each {@link StagedRegistrationFailure} shape. */
50
+ export function describeRegistrationFailure(failure) {
51
+ switch (failure.kind) {
52
+ case 'line-absent':
53
+ return 'the patch does not add that line.';
54
+ case 'creates-unresolved':
55
+ return ('no later-ordered patch creates that file — the declaration is stale, ' +
56
+ 'or the queue order no longer stages it.');
57
+ case 'owner-mismatch':
58
+ return `that file is created by ${failure.creators.map((o) => o.filename).join(', ')}, not the declared owner.`;
59
+ }
60
+ }
61
+ /**
62
+ * True when the declared registration/packaging line appears (trimmed)
63
+ * among the lines the patch introduces in the declaring file, either as a
64
+ * newly-created file's content or as added lines to an existing file
65
+ * (where jar.mn / customElements.js / actor-registration edits land).
66
+ */
67
+ function isRegistrationLinePresent(entry, registration) {
68
+ const declared = registration.line.trim();
69
+ if (declared.length === 0)
70
+ return false;
71
+ const introduced = [
72
+ entry.newFiles.get(registration.file),
73
+ entry.modifiedFileAdditions.get(registration.file),
74
+ ];
75
+ return introduced.some((content) => content !== undefined && content.split('\n').some((line) => line.trim() === declared));
76
+ }
77
+ /**
78
+ * Renders `line` for the `--line "…"` argument of a paste-and-run
79
+ * `patch staged-dependency` command.
80
+ *
81
+ * A registration line is quoted for the shell in the messages that print
82
+ * the command, and a `support-files` element carries its own quotes
83
+ * (`"file_tiles_find.html",` is what a multi-line TOML array adds). Without
84
+ * escaping, the shell would eat them and the declaration would be written
85
+ * with a line the patch never adds, the exact mismatch that made the
86
+ * forward-registration remedy leave the declaring patch red.
87
+ */
88
+ export function quoteRegistrationLine(line) {
89
+ return line.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
90
+ }
@@ -1,26 +1,26 @@
1
1
  /**
2
2
  * Recognizes the one shape where the undefined-identifier hint sends the
3
- * operator at the wrong remedy — and where taking that remedy would MASK a
3
+ * operator at the wrong remedy, and where taking that remedy would mask a
4
4
  * real bug.
5
5
  *
6
6
  * The shape: helpers are hoisted out of duplicated test files into a new
7
7
  * `head_settings.js` that a managed `head.js` pulls in with
8
8
  * `loadSubScript`. Until that companion is exported it belongs to no patch,
9
- * so the per-patch checkJs program — which only ever loads patch-owned
10
- * roots — cannot see any of its declarations. Every use of every hoisted
9
+ * so the per-patch checkJs program, which only ever loads patch-owned
10
+ * roots, cannot see any of its declarations. Every use of every hoisted
11
11
  * helper is then reported as `Cannot find name`, and the generic hint
12
12
  * offers three remedies of which the shim is the easiest: adding the
13
- * globals to `extraShim` makes all of the warnings disappear AND makes a
13
+ * globals to `extraShim` makes all of the warnings disappear and makes a
14
14
  * genuinely missing helper undetectable forever after.
15
15
  *
16
- * The warnings themselves are correct — the per-patch program's honest view
17
- * of a file that is in no patch. Only the advice is wrong. FireForge
18
- * already knows ownership, so when every undefined name in a file is
19
- * declared at the top level of an UNMANAGED file that a managed head loads,
20
- * it can name that file and the adoption command instead.
16
+ * The warnings themselves are correct: they are the per-patch program's
17
+ * honest view of a file that is in no patch. Only the advice is wrong.
18
+ * FireForge already knows ownership, so when every undefined name in a file
19
+ * is declared at the top level of an unmanaged file that a managed head
20
+ * loads, it can name that file and the adoption command instead.
21
21
  *
22
- * Detection is deliberately conservative on both halves: a companion must
23
- * be reachable from an actual `loadSubScript` call, and EVERY undefined
22
+ * Detection is conservative on both halves: a companion must
23
+ * be reachable from an actual `loadSubScript` call, and every undefined
24
24
  * name must resolve inside it. One unresolved name means the file may
25
25
  * genuinely be missing a helper, and the generic hint stays.
26
26
  */
@@ -31,14 +31,14 @@ import type { PatchLintIssue } from '../types/commands/index.js';
31
31
  * The mochitest idiom is
32
32
  * `Services.scriptloader.loadSubScript(getRootDirectory(gTestPath) + "head_settings.js", this)`,
33
33
  * so the useful signal is the `.js` literal inside the call, not a
34
- * resolvable URL — the path half is computed at runtime.
34
+ * resolvable URL. The path half is computed at runtime.
35
35
  */
36
36
  export declare function findLoadSubScriptTargets(source: string): string[];
37
37
  /**
38
38
  * Top-level declaration names in a script-scope file.
39
39
  *
40
40
  * Regex rather than a TS program on purpose: this runs only to decide the
41
- * WORDING of a hint, the file is by definition outside every program the
41
+ * wording of a hint, the file is outside every program the
42
42
  * pass built, and a missed declaration degrades to the generic hint rather
43
43
  * than to a wrong answer. Matching is anchored at column zero so a nested
44
44
  * declaration inside a function body is not mistaken for a global.
@@ -57,8 +57,8 @@ export interface UnmanagedCompanion {
57
57
  * Resolves the unmanaged companions reachable from a set of managed head
58
58
  * files, given a reader for repo-relative file content.
59
59
  *
60
- * A candidate qualifies only when it is NOT in `ownedFiles` and its content
61
- * can be read — an unreadable or absent target is simply not a companion,
60
+ * A candidate qualifies only when it is not in `ownedFiles` and its content
61
+ * can be read. An unreadable or absent target is simply not a companion,
62
62
  * and the generic hint applies.
63
63
  *
64
64
  * @param heads - Repo-relative managed head files, with their sources
@@ -73,14 +73,14 @@ export declare function resolveUnmanagedCompanions(heads: ReadonlyArray<{
73
73
  * The replacement hint, when every undefined name resolves in one
74
74
  * unmanaged companion.
75
75
  *
76
- * States the ownership fact first (that is the diagnosis), then the
77
- * adoption command, and explicitly rules the shim OUT — the shim is what an
78
- * operator reaches for by default here, and it is the one remedy that
79
- * permanently hides a genuinely missing helper.
76
+ * States the ownership fact first (the diagnosis), then the adoption
77
+ * command, and explicitly rules the shim out. The shim is what an operator
78
+ * reaches for by default here, and it is the one remedy that permanently
79
+ * hides a genuinely missing helper.
80
80
  */
81
81
  export declare function formatUnmanagedCompanionHint(companion: UnmanagedCompanion): string;
82
82
  /**
83
- * Picks the companion that explains EVERY undefined identifier in
83
+ * Picks the companion that explains every undefined identifier in
84
84
  * `messages`, or undefined when none does.
85
85
  *
86
86
  * @param messages - Diagnostic messages reported for one file
@@ -88,11 +88,11 @@ export declare function formatUnmanagedCompanionHint(companion: UnmanagedCompani
88
88
  */
89
89
  export declare function explainUndefinedIdentifiers(messages: readonly string[], companions: readonly UnmanagedCompanion[]): UnmanagedCompanion | undefined;
90
90
  /**
91
- * Reads the head files in the owned test set and resolves the UNMANAGED
91
+ * Reads the head files in the owned test set and resolves the unmanaged
92
92
  * companions they pull in with `loadSubScript`. Hoisting shared helpers
93
93
  * into such a companion leaves it unowned until export, and every use of
94
94
  * every helper then reports `Cannot find name` from an honest per-patch
95
- * program — see `patch-lint-unmanaged-companion.ts` for why the generic
95
+ * program. See `patch-lint-unmanaged-companion.ts` for why the generic
96
96
  * hint is actively harmful there.
97
97
  *
98
98
  * Best-effort: an unreadable head simply contributes no companions.
@@ -100,7 +100,7 @@ export declare function explainUndefinedIdentifiers(messages: readonly string[],
100
100
  export declare function collectUnmanagedCompanions(repoDir: string, files: readonly string[], ownedFiles: ReadonlySet<string>): Promise<UnmanagedCompanion[]>;
101
101
  /**
102
102
  * Swaps the generic undefined-identifier hint for the ownership hint when
103
- * one unmanaged companion explains EVERY undefined name in the file. Any
103
+ * one unmanaged companion explains every undefined name in the file. Any
104
104
  * other issue in the list is returned untouched.
105
105
  */
106
106
  export declare function retargetUnmanagedCompanionHints(issues: readonly PatchLintIssue[], companions: readonly UnmanagedCompanion[]): PatchLintIssue[];