@hominis/fireforge 0.46.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 (606) hide show
  1. package/CHANGELOG.md +381 -498
  2. package/dist/bin/fireforge.d.ts +1 -1
  3. package/dist/bin/fireforge.js +17 -17
  4. package/dist/build-info.json +4 -4
  5. package/dist/src/cli-usage-error.d.ts +9 -9
  6. package/dist/src/cli-usage-error.js +12 -12
  7. package/dist/src/cli.d.ts +3 -2
  8. package/dist/src/cli.js +29 -28
  9. package/dist/src/commands/bootstrap-checks.js +2 -1
  10. package/dist/src/commands/bootstrap.js +2 -2
  11. package/dist/src/commands/build.js +12 -11
  12. package/dist/src/commands/config.js +9 -9
  13. package/dist/src/commands/destructive-decision.d.ts +4 -4
  14. package/dist/src/commands/destructive-decision.js +4 -4
  15. package/dist/src/commands/discard.js +5 -5
  16. package/dist/src/commands/doctor-check-core.d.ts +4 -4
  17. package/dist/src/commands/doctor-external-toolchains.js +2 -2
  18. package/dist/src/commands/doctor-furnace-config-sync.d.ts +2 -2
  19. package/dist/src/commands/doctor-furnace-config-sync.js +20 -20
  20. package/dist/src/commands/doctor-furnace-jar.d.ts +1 -1
  21. package/dist/src/commands/doctor-furnace-jar.js +1 -1
  22. package/dist/src/commands/doctor-furnace.js +22 -22
  23. package/dist/src/commands/doctor-orphaned-harness.d.ts +10 -11
  24. package/dist/src/commands/doctor-orphaned-harness.js +10 -11
  25. package/dist/src/commands/doctor-patch-manifest.d.ts +2 -1
  26. package/dist/src/commands/doctor-patch-manifest.js +7 -6
  27. package/dist/src/commands/doctor-post-rebase-audit.js +2 -2
  28. package/dist/src/commands/doctor-source-pin.d.ts +12 -12
  29. package/dist/src/commands/doctor-source-pin.js +14 -14
  30. package/dist/src/commands/doctor-working-tree.d.ts +3 -3
  31. package/dist/src/commands/doctor-working-tree.js +3 -3
  32. package/dist/src/commands/doctor.d.ts +2 -2
  33. package/dist/src/commands/doctor.js +9 -9
  34. package/dist/src/commands/download.js +15 -13
  35. package/dist/src/commands/export-all.js +8 -8
  36. package/dist/src/commands/export-flow.d.ts +5 -5
  37. package/dist/src/commands/export-flow.js +14 -14
  38. package/dist/src/commands/export-placement-conflicts.d.ts +3 -3
  39. package/dist/src/commands/export-placement-conflicts.js +9 -9
  40. package/dist/src/commands/export-placement-gate.d.ts +2 -2
  41. package/dist/src/commands/export-placement-gate.js +5 -5
  42. package/dist/src/commands/export-placement-policy.d.ts +1 -1
  43. package/dist/src/commands/export-placement-policy.js +1 -1
  44. package/dist/src/commands/export-shared.d.ts +10 -10
  45. package/dist/src/commands/export-shared.js +13 -13
  46. package/dist/src/commands/export.js +4 -4
  47. package/dist/src/commands/furnace/apply.js +16 -16
  48. package/dist/src/commands/furnace/chrome-doc-remove.d.ts +1 -1
  49. package/dist/src/commands/furnace/chrome-doc-remove.js +1 -1
  50. package/dist/src/commands/furnace/chrome-doc-templates.d.ts +14 -14
  51. package/dist/src/commands/furnace/chrome-doc-templates.js +17 -17
  52. package/dist/src/commands/furnace/chrome-doc-tests.d.ts +2 -2
  53. package/dist/src/commands/furnace/chrome-doc-tests.js +4 -4
  54. package/dist/src/commands/furnace/chrome-doc.d.ts +8 -8
  55. package/dist/src/commands/furnace/chrome-doc.js +18 -18
  56. package/dist/src/commands/furnace/create-browser-test.d.ts +1 -1
  57. package/dist/src/commands/furnace/create-browser-test.js +4 -4
  58. package/dist/src/commands/furnace/create-dry-run.d.ts +4 -4
  59. package/dist/src/commands/furnace/create-dry-run.js +4 -4
  60. package/dist/src/commands/furnace/create-features.d.ts +2 -2
  61. package/dist/src/commands/furnace/create-features.js +2 -2
  62. package/dist/src/commands/furnace/create-mochikit.d.ts +4 -4
  63. package/dist/src/commands/furnace/create-mochikit.js +7 -7
  64. package/dist/src/commands/furnace/create-templates.d.ts +14 -14
  65. package/dist/src/commands/furnace/create-templates.js +18 -18
  66. package/dist/src/commands/furnace/create-xpcshell.d.ts +5 -5
  67. package/dist/src/commands/furnace/create-xpcshell.js +8 -8
  68. package/dist/src/commands/furnace/create.d.ts +1 -1
  69. package/dist/src/commands/furnace/create.js +10 -10
  70. package/dist/src/commands/furnace/deploy.js +4 -4
  71. package/dist/src/commands/furnace/diff.js +7 -7
  72. package/dist/src/commands/furnace/index.js +1 -1
  73. package/dist/src/commands/furnace/init.js +15 -15
  74. package/dist/src/commands/furnace/list.js +2 -2
  75. package/dist/src/commands/furnace/override.d.ts +1 -1
  76. package/dist/src/commands/furnace/override.js +15 -15
  77. package/dist/src/commands/furnace/preview.js +17 -17
  78. package/dist/src/commands/furnace/refresh.js +6 -6
  79. package/dist/src/commands/furnace/remove-mutations.d.ts +3 -3
  80. package/dist/src/commands/furnace/remove-mutations.js +19 -18
  81. package/dist/src/commands/furnace/remove-state.d.ts +1 -1
  82. package/dist/src/commands/furnace/remove-state.js +1 -1
  83. package/dist/src/commands/furnace/remove.js +2 -2
  84. package/dist/src/commands/furnace/rename-browser-test.js +9 -8
  85. package/dist/src/commands/furnace/rename-xpcshell.d.ts +2 -2
  86. package/dist/src/commands/furnace/rename-xpcshell.js +3 -3
  87. package/dist/src/commands/furnace/rename.js +9 -9
  88. package/dist/src/commands/furnace/scan.js +3 -3
  89. package/dist/src/commands/furnace/status.js +7 -7
  90. package/dist/src/commands/furnace/sync.js +6 -6
  91. package/dist/src/commands/furnace/test-file-name.d.ts +2 -2
  92. package/dist/src/commands/furnace/test-file-name.js +2 -2
  93. package/dist/src/commands/furnace/validate.js +11 -12
  94. package/dist/src/commands/import.js +20 -20
  95. package/dist/src/commands/lint-per-patch.js +8 -8
  96. package/dist/src/commands/lint-per-run-checkjs.d.ts +12 -13
  97. package/dist/src/commands/lint-per-run-checkjs.js +14 -15
  98. package/dist/src/commands/lint-report.d.ts +3 -3
  99. package/dist/src/commands/lint-report.js +4 -4
  100. package/dist/src/commands/lint.d.ts +3 -3
  101. package/dist/src/commands/lint.js +35 -35
  102. package/dist/src/commands/manifest.d.ts +4 -4
  103. package/dist/src/commands/package.js +2 -2
  104. package/dist/src/commands/patch/compact.d.ts +2 -2
  105. package/dist/src/commands/patch/compact.js +8 -8
  106. package/dist/src/commands/patch/delete.d.ts +1 -1
  107. package/dist/src/commands/patch/delete.js +8 -8
  108. package/dist/src/commands/patch/lint-ignore.d.ts +3 -4
  109. package/dist/src/commands/patch/lint-ignore.js +14 -15
  110. package/dist/src/commands/patch/move-files-create.d.ts +2 -2
  111. package/dist/src/commands/patch/move-files-create.js +5 -5
  112. package/dist/src/commands/patch/move-files-into.d.ts +2 -2
  113. package/dist/src/commands/patch/move-files-into.js +3 -3
  114. package/dist/src/commands/patch/move-files.js +1 -1
  115. package/dist/src/commands/patch/patch-context.d.ts +1 -1
  116. package/dist/src/commands/patch/rename.d.ts +4 -4
  117. package/dist/src/commands/patch/rename.js +8 -8
  118. package/dist/src/commands/patch/reorder.js +10 -10
  119. package/dist/src/commands/patch/split-plan.d.ts +3 -3
  120. package/dist/src/commands/patch/split-plan.js +6 -5
  121. package/dist/src/commands/patch/split.d.ts +2 -2
  122. package/dist/src/commands/patch/split.js +5 -5
  123. package/dist/src/commands/patch/staged-dependency-validate.d.ts +1 -1
  124. package/dist/src/commands/patch/staged-dependency-validate.js +3 -3
  125. package/dist/src/commands/patch/staged-dependency.d.ts +1 -1
  126. package/dist/src/commands/patch/staged-dependency.js +6 -6
  127. package/dist/src/commands/patch/tier.d.ts +2 -2
  128. package/dist/src/commands/patch/tier.js +5 -5
  129. package/dist/src/commands/patch-rename-map.d.ts +1 -1
  130. package/dist/src/commands/patch-rename-map.js +1 -1
  131. package/dist/src/commands/pending-resolution.d.ts +5 -5
  132. package/dist/src/commands/pending-resolution.js +5 -5
  133. package/dist/src/commands/re-export-adjacent.d.ts +3 -3
  134. package/dist/src/commands/re-export-adjacent.js +8 -8
  135. package/dist/src/commands/re-export-bulk-scan.d.ts +3 -3
  136. package/dist/src/commands/re-export-bulk-scan.js +17 -17
  137. package/dist/src/commands/re-export-drift.d.ts +10 -10
  138. package/dist/src/commands/re-export-drift.js +29 -29
  139. package/dist/src/commands/re-export-files.js +14 -15
  140. package/dist/src/commands/re-export-lint.d.ts +26 -26
  141. package/dist/src/commands/re-export-lint.js +27 -27
  142. package/dist/src/commands/re-export-options.d.ts +1 -1
  143. package/dist/src/commands/re-export-options.js +1 -1
  144. package/dist/src/commands/re-export-register.d.ts +1 -1
  145. package/dist/src/commands/re-export-register.js +1 -1
  146. package/dist/src/commands/re-export-scan.d.ts +1 -1
  147. package/dist/src/commands/re-export-scan.js +7 -7
  148. package/dist/src/commands/re-export-single.d.ts +1 -1
  149. package/dist/src/commands/re-export-single.js +20 -20
  150. package/dist/src/commands/re-export.js +7 -6
  151. package/dist/src/commands/rebase/abort.js +6 -6
  152. package/dist/src/commands/rebase/continue.js +8 -7
  153. package/dist/src/commands/rebase/index.d.ts +1 -1
  154. package/dist/src/commands/rebase/index.js +3 -3
  155. package/dist/src/commands/rebase/patch-loop.js +18 -17
  156. package/dist/src/commands/register.js +5 -5
  157. package/dist/src/commands/reset.js +1 -1
  158. package/dist/src/commands/resolve.d.ts +2 -2
  159. package/dist/src/commands/resolve.js +3 -3
  160. package/dist/src/commands/run.js +26 -26
  161. package/dist/src/commands/setup-support.js +4 -4
  162. package/dist/src/commands/setup.js +1 -1
  163. package/dist/src/commands/source.js +1 -1
  164. package/dist/src/commands/status-check.d.ts +3 -3
  165. package/dist/src/commands/status-check.js +4 -4
  166. package/dist/src/commands/status-json.d.ts +14 -13
  167. package/dist/src/commands/status-json.js +9 -8
  168. package/dist/src/commands/status-output.d.ts +3 -3
  169. package/dist/src/commands/status-output.js +3 -3
  170. package/dist/src/commands/status-ownership.d.ts +3 -3
  171. package/dist/src/commands/status-ownership.js +3 -3
  172. package/dist/src/commands/status.js +22 -22
  173. package/dist/src/commands/test-build-phase.d.ts +1 -1
  174. package/dist/src/commands/test-build-phase.js +17 -17
  175. package/dist/src/commands/test-diagnose.d.ts +1 -1
  176. package/dist/src/commands/test-diagnose.js +20 -20
  177. package/dist/src/commands/test-modes.d.ts +2 -2
  178. package/dist/src/commands/test-modes.js +4 -4
  179. package/dist/src/commands/test-run.d.ts +11 -11
  180. package/dist/src/commands/test-run.js +15 -15
  181. package/dist/src/commands/test-stale-gate.d.ts +12 -12
  182. package/dist/src/commands/test-stale-gate.js +13 -13
  183. package/dist/src/commands/test-verdict.d.ts +6 -6
  184. package/dist/src/commands/test-verdict.js +11 -11
  185. package/dist/src/commands/test.d.ts +3 -3
  186. package/dist/src/commands/test.js +36 -36
  187. package/dist/src/commands/token-coverage.js +3 -3
  188. package/dist/src/commands/token-list.js +5 -5
  189. package/dist/src/commands/token.js +9 -9
  190. package/dist/src/commands/tree.js +19 -19
  191. package/dist/src/commands/typecheck.d.ts +6 -6
  192. package/dist/src/commands/typecheck.js +7 -7
  193. package/dist/src/commands/verify.d.ts +3 -3
  194. package/dist/src/commands/verify.js +10 -10
  195. package/dist/src/commands/watch.js +11 -11
  196. package/dist/src/commands/wire.js +13 -13
  197. package/dist/src/core/ast-utils.d.ts +7 -7
  198. package/dist/src/core/ast-utils.js +8 -8
  199. package/dist/src/core/branding.d.ts +5 -5
  200. package/dist/src/core/branding.js +3 -3
  201. package/dist/src/core/browser-wire.d.ts +1 -1
  202. package/dist/src/core/browser-wire.js +4 -4
  203. package/dist/src/core/build-audit-platform.d.ts +6 -6
  204. package/dist/src/core/build-audit-platform.js +26 -26
  205. package/dist/src/core/build-audit-registration.d.ts +5 -5
  206. package/dist/src/core/build-audit-registration.js +7 -7
  207. package/dist/src/core/build-audit-resolve.d.ts +5 -5
  208. package/dist/src/core/build-audit-resolve.js +6 -6
  209. package/dist/src/core/build-audit-skip.d.ts +8 -8
  210. package/dist/src/core/build-audit-skip.js +12 -12
  211. package/dist/src/core/build-audit-transforms.d.ts +2 -2
  212. package/dist/src/core/build-audit-transforms.js +3 -3
  213. package/dist/src/core/build-audit.d.ts +8 -8
  214. package/dist/src/core/build-audit.js +39 -37
  215. package/dist/src/core/build-baseline-types.d.ts +19 -18
  216. package/dist/src/core/build-baseline-types.js +1 -1
  217. package/dist/src/core/build-baseline.d.ts +8 -8
  218. package/dist/src/core/build-baseline.js +14 -14
  219. package/dist/src/core/build-jar-escalation.d.ts +8 -8
  220. package/dist/src/core/build-jar-escalation.js +15 -15
  221. package/dist/src/core/build-overwrite-guard.d.ts +4 -4
  222. package/dist/src/core/build-overwrite-guard.js +13 -13
  223. package/dist/src/core/build-prepare.d.ts +4 -4
  224. package/dist/src/core/build-prepare.js +16 -15
  225. package/dist/src/core/config-mutate.js +4 -4
  226. package/dist/src/core/config-state.js +2 -2
  227. package/dist/src/core/config-validate-build-audit.js +3 -3
  228. package/dist/src/core/config-validate-file-size.d.ts +1 -1
  229. package/dist/src/core/config-validate-file-size.js +2 -2
  230. package/dist/src/core/config-validate.js +8 -9
  231. package/dist/src/core/config.d.ts +10 -10
  232. package/dist/src/core/config.js +10 -10
  233. package/dist/src/core/coverage-extend.d.ts +16 -16
  234. package/dist/src/core/coverage-extend.js +16 -16
  235. package/dist/src/core/destructive.d.ts +14 -14
  236. package/dist/src/core/destructive.js +9 -9
  237. package/dist/src/core/diff-hunks.d.ts +2 -2
  238. package/dist/src/core/diff-hunks.js +7 -7
  239. package/dist/src/core/discard-baseline.d.ts +10 -10
  240. package/dist/src/core/discard-baseline.js +15 -16
  241. package/dist/src/core/display-state.d.ts +11 -11
  242. package/dist/src/core/display-state.js +12 -12
  243. package/dist/src/core/engine-changes.d.ts +2 -2
  244. package/dist/src/core/engine-changes.js +2 -2
  245. package/dist/src/core/engine-precondition.d.ts +4 -4
  246. package/dist/src/core/engine-precondition.js +2 -2
  247. package/dist/src/core/engine-session-lock.d.ts +18 -18
  248. package/dist/src/core/engine-session-lock.js +37 -37
  249. package/dist/src/core/export-moved-code-shape.d.ts +7 -7
  250. package/dist/src/core/export-moved-code-shape.js +8 -8
  251. package/dist/src/core/file-lock-owner.d.ts +11 -11
  252. package/dist/src/core/file-lock-owner.js +18 -18
  253. package/dist/src/core/file-lock.d.ts +12 -12
  254. package/dist/src/core/file-lock.js +52 -39
  255. package/dist/src/core/firefox-cache.d.ts +1 -1
  256. package/dist/src/core/firefox-cache.js +10 -10
  257. package/dist/src/core/firefox-download.d.ts +3 -3
  258. package/dist/src/core/firefox-download.js +6 -6
  259. package/dist/src/core/firefox-extract.d.ts +2 -2
  260. package/dist/src/core/firefox-extract.js +13 -13
  261. package/dist/src/core/firefox.d.ts +5 -5
  262. package/dist/src/core/firefox.js +8 -8
  263. package/dist/src/core/furnace-apply-dry-run.js +1 -1
  264. package/dist/src/core/furnace-apply-ftl.d.ts +5 -5
  265. package/dist/src/core/furnace-apply-ftl.js +8 -8
  266. package/dist/src/core/furnace-apply-helpers.d.ts +9 -9
  267. package/dist/src/core/furnace-apply-helpers.js +21 -21
  268. package/dist/src/core/furnace-apply-output.js +1 -1
  269. package/dist/src/core/furnace-apply-overwrite-warn.d.ts +9 -9
  270. package/dist/src/core/furnace-apply-overwrite-warn.js +9 -9
  271. package/dist/src/core/furnace-apply-undeploy-actions.d.ts +1 -1
  272. package/dist/src/core/furnace-apply-undeploy-actions.js +1 -1
  273. package/dist/src/core/furnace-apply.d.ts +3 -3
  274. package/dist/src/core/furnace-apply.js +22 -21
  275. package/dist/src/core/furnace-checksum-utils.d.ts +5 -5
  276. package/dist/src/core/furnace-checksum-utils.js +5 -5
  277. package/dist/src/core/furnace-config-custom.d.ts +1 -1
  278. package/dist/src/core/furnace-config-custom.js +2 -2
  279. package/dist/src/core/furnace-config-order.js +1 -1
  280. package/dist/src/core/furnace-config-tokens.d.ts +3 -3
  281. package/dist/src/core/furnace-config-tokens.js +3 -3
  282. package/dist/src/core/furnace-config-validate.js +2 -2
  283. package/dist/src/core/furnace-config.d.ts +4 -4
  284. package/dist/src/core/furnace-config.js +18 -18
  285. package/dist/src/core/furnace-constants.d.ts +6 -6
  286. package/dist/src/core/furnace-constants.js +6 -6
  287. package/dist/src/core/furnace-css-fragments.d.ts +6 -6
  288. package/dist/src/core/furnace-css-fragments.js +11 -11
  289. package/dist/src/core/furnace-dir-entry.d.ts +1 -1
  290. package/dist/src/core/furnace-dir-entry.js +1 -1
  291. package/dist/src/core/furnace-jsconfig.d.ts +7 -7
  292. package/dist/src/core/furnace-jsconfig.js +22 -20
  293. package/dist/src/core/furnace-operation.d.ts +21 -20
  294. package/dist/src/core/furnace-operation.js +36 -34
  295. package/dist/src/core/furnace-precondition.d.ts +10 -10
  296. package/dist/src/core/furnace-precondition.js +8 -8
  297. package/dist/src/core/furnace-refresh.js +2 -2
  298. package/dist/src/core/furnace-registration-ast.d.ts +2 -2
  299. package/dist/src/core/furnace-registration-ast.js +9 -9
  300. package/dist/src/core/furnace-registration-remove.d.ts +4 -4
  301. package/dist/src/core/furnace-registration-remove.js +6 -6
  302. package/dist/src/core/furnace-registration-validate.d.ts +2 -2
  303. package/dist/src/core/furnace-registration-validate.js +2 -2
  304. package/dist/src/core/furnace-registration.d.ts +5 -5
  305. package/dist/src/core/furnace-registration.js +7 -7
  306. package/dist/src/core/furnace-rollback.d.ts +1 -1
  307. package/dist/src/core/furnace-rollback.js +5 -5
  308. package/dist/src/core/furnace-stale-export.d.ts +17 -16
  309. package/dist/src/core/furnace-stale-export.js +16 -15
  310. package/dist/src/core/furnace-staleness.d.ts +2 -2
  311. package/dist/src/core/furnace-staleness.js +2 -2
  312. package/dist/src/core/furnace-state-persist.d.ts +10 -10
  313. package/dist/src/core/furnace-state-persist.js +10 -10
  314. package/dist/src/core/furnace-step-errors.d.ts +6 -6
  315. package/dist/src/core/furnace-step-errors.js +6 -6
  316. package/dist/src/core/furnace-validate-accessibility.js +14 -14
  317. package/dist/src/core/furnace-validate-compatibility.js +9 -9
  318. package/dist/src/core/furnace-validate-registration.d.ts +2 -2
  319. package/dist/src/core/furnace-validate-registration.js +13 -13
  320. package/dist/src/core/furnace-validate-structure.d.ts +1 -1
  321. package/dist/src/core/furnace-validate-structure.js +4 -4
  322. package/dist/src/core/furnace-validate.js +9 -9
  323. package/dist/src/core/furnace-version-drift.d.ts +5 -5
  324. package/dist/src/core/furnace-version-drift.js +5 -5
  325. package/dist/src/core/git-base.d.ts +4 -4
  326. package/dist/src/core/git-base.js +9 -9
  327. package/dist/src/core/git-diff-new-file.d.ts +4 -4
  328. package/dist/src/core/git-diff-new-file.js +8 -8
  329. package/dist/src/core/git-diff.d.ts +4 -4
  330. package/dist/src/core/git-diff.js +35 -34
  331. package/dist/src/core/git-file-ops.d.ts +6 -6
  332. package/dist/src/core/git-file-ops.js +7 -7
  333. package/dist/src/core/git-readonly-index.d.ts +12 -12
  334. package/dist/src/core/git-readonly-index.js +12 -12
  335. package/dist/src/core/git-status.d.ts +4 -4
  336. package/dist/src/core/git-status.js +4 -4
  337. package/dist/src/core/git.d.ts +3 -3
  338. package/dist/src/core/git.js +14 -14
  339. package/dist/src/core/harness-orphans.d.ts +17 -17
  340. package/dist/src/core/harness-orphans.js +20 -20
  341. package/dist/src/core/history-log.d.ts +3 -3
  342. package/dist/src/core/history-log.js +3 -3
  343. package/dist/src/core/license-headers.d.ts +19 -18
  344. package/dist/src/core/license-headers.js +29 -28
  345. package/dist/src/core/mach-build-artifacts.d.ts +21 -21
  346. package/dist/src/core/mach-build-artifacts.js +23 -23
  347. package/dist/src/core/mach-error-hints.d.ts +5 -5
  348. package/dist/src/core/mach-error-hints.js +13 -13
  349. package/dist/src/core/mach-known-noise-filter.d.ts +41 -38
  350. package/dist/src/core/mach-known-noise-filter.js +53 -50
  351. package/dist/src/core/mach-mozconfig.d.ts +6 -6
  352. package/dist/src/core/mach-mozconfig.js +15 -15
  353. package/dist/src/core/mach-python.d.ts +2 -1
  354. package/dist/src/core/mach-python.js +4 -3
  355. package/dist/src/core/mach-resource-shim.d.ts +12 -12
  356. package/dist/src/core/mach-resource-shim.js +20 -20
  357. package/dist/src/core/mach.d.ts +23 -23
  358. package/dist/src/core/mach.js +36 -36
  359. package/dist/src/core/marionette-port.d.ts +15 -13
  360. package/dist/src/core/marionette-port.js +34 -31
  361. package/dist/src/core/marionette-preflight.d.ts +6 -6
  362. package/dist/src/core/marionette-preflight.js +23 -23
  363. package/dist/src/core/markdown-table.d.ts +9 -9
  364. package/dist/src/core/markdown-table.js +14 -14
  365. package/dist/src/core/mochitest-server-port.d.ts +8 -8
  366. package/dist/src/core/mochitest-server-port.js +14 -14
  367. package/dist/src/core/module-resolution-preflight.d.ts +8 -8
  368. package/dist/src/core/module-resolution-preflight.js +11 -11
  369. package/dist/src/core/moz-manifest-helpers.d.ts +7 -7
  370. package/dist/src/core/moz-manifest-helpers.js +7 -7
  371. package/dist/src/core/moz-manifest-register.d.ts +1 -1
  372. package/dist/src/core/moz-manifest-register.js +2 -2
  373. package/dist/src/core/moz-manifest-rules.js +11 -11
  374. package/dist/src/core/moz-manifest-tokenizers.js +1 -1
  375. package/dist/src/core/ownership-table.d.ts +5 -5
  376. package/dist/src/core/ownership-table.js +7 -7
  377. package/dist/src/core/parser-fallback.d.ts +3 -3
  378. package/dist/src/core/parser-fallback.js +3 -3
  379. package/dist/src/core/patch-apply-fuzz.d.ts +5 -5
  380. package/dist/src/core/patch-apply-fuzz.js +9 -9
  381. package/dist/src/core/patch-apply.d.ts +9 -9
  382. package/dist/src/core/patch-apply.js +30 -30
  383. package/dist/src/core/patch-export-update.d.ts +4 -4
  384. package/dist/src/core/patch-export-update.js +3 -3
  385. package/dist/src/core/patch-export.d.ts +10 -10
  386. package/dist/src/core/patch-export.js +13 -13
  387. package/dist/src/core/patch-identifier-suggest.d.ts +1 -1
  388. package/dist/src/core/patch-identifier-suggest.js +4 -4
  389. package/dist/src/core/patch-lint-binary.d.ts +7 -7
  390. package/dist/src/core/patch-lint-cache.d.ts +2 -2
  391. package/dist/src/core/patch-lint-cache.js +13 -13
  392. package/dist/src/core/patch-lint-checkjs.d.ts +26 -26
  393. package/dist/src/core/patch-lint-checkjs.js +42 -41
  394. package/dist/src/core/patch-lint-chrome-jsdoc.d.ts +8 -9
  395. package/dist/src/core/patch-lint-chrome-jsdoc.js +10 -11
  396. package/dist/src/core/patch-lint-creators.d.ts +3 -3
  397. package/dist/src/core/patch-lint-creators.js +3 -3
  398. package/dist/src/core/patch-lint-cross.d.ts +13 -13
  399. package/dist/src/core/patch-lint-cross.js +21 -21
  400. package/dist/src/core/patch-lint-css.d.ts +1 -1
  401. package/dist/src/core/patch-lint-css.js +5 -5
  402. package/dist/src/core/patch-lint-diff-tag.d.ts +5 -5
  403. package/dist/src/core/patch-lint-diff-tag.js +5 -5
  404. package/dist/src/core/patch-lint-diff.d.ts +4 -4
  405. package/dist/src/core/patch-lint-diff.js +4 -4
  406. package/dist/src/core/patch-lint-file-size.d.ts +3 -3
  407. package/dist/src/core/patch-lint-file-size.js +3 -3
  408. package/dist/src/core/patch-lint-forward-registration.d.ts +4 -4
  409. package/dist/src/core/patch-lint-forward-registration.js +12 -12
  410. package/dist/src/core/patch-lint-jsdoc.d.ts +2 -2
  411. package/dist/src/core/patch-lint-jsdoc.js +11 -11
  412. package/dist/src/core/patch-lint-module-registration.d.ts +1 -1
  413. package/dist/src/core/patch-lint-module-registration.js +1 -1
  414. package/dist/src/core/patch-lint-mozbuild.d.ts +1 -1
  415. package/dist/src/core/patch-lint-mozbuild.js +10 -10
  416. package/dist/src/core/patch-lint-observer.d.ts +3 -3
  417. package/dist/src/core/patch-lint-observer.js +7 -7
  418. package/dist/src/core/patch-lint-ownership.d.ts +6 -6
  419. package/dist/src/core/patch-lint-ownership.js +6 -6
  420. package/dist/src/core/patch-lint-prettier.d.ts +6 -6
  421. package/dist/src/core/patch-lint-prettier.js +6 -6
  422. package/dist/src/core/patch-lint-queue-types.d.ts +1 -1
  423. package/dist/src/core/patch-lint-queue-types.js +1 -1
  424. package/dist/src/core/patch-lint-staged-registration.d.ts +2 -2
  425. package/dist/src/core/patch-lint-staged-registration.js +6 -6
  426. package/dist/src/core/patch-lint-unmanaged-companion.d.ts +23 -23
  427. package/dist/src/core/patch-lint-unmanaged-companion.js +26 -26
  428. package/dist/src/core/patch-lint.d.ts +27 -26
  429. package/dist/src/core/patch-lint.js +48 -46
  430. package/dist/src/core/patch-lock.d.ts +1 -1
  431. package/dist/src/core/patch-lock.js +8 -8
  432. package/dist/src/core/patch-manifest-consistency.d.ts +7 -7
  433. package/dist/src/core/patch-manifest-consistency.js +16 -17
  434. package/dist/src/core/patch-manifest-files-affected.d.ts +1 -1
  435. package/dist/src/core/patch-manifest-files-affected.js +3 -3
  436. package/dist/src/core/patch-manifest-io.d.ts +14 -14
  437. package/dist/src/core/patch-manifest-io.js +27 -27
  438. package/dist/src/core/patch-manifest-query.d.ts +1 -1
  439. package/dist/src/core/patch-manifest-query.js +4 -4
  440. package/dist/src/core/patch-manifest-resolve.d.ts +5 -5
  441. package/dist/src/core/patch-manifest-resolve.js +7 -7
  442. package/dist/src/core/patch-manifest-validate.js +3 -3
  443. package/dist/src/core/patch-manifest.d.ts +2 -2
  444. package/dist/src/core/patch-manifest.js +2 -2
  445. package/dist/src/core/patch-parse.d.ts +14 -14
  446. package/dist/src/core/patch-parse.js +16 -16
  447. package/dist/src/core/patch-registration-refs.d.ts +4 -4
  448. package/dist/src/core/patch-registration-refs.js +7 -7
  449. package/dist/src/core/patch-transform.d.ts +8 -8
  450. package/dist/src/core/patch-transform.js +13 -13
  451. package/dist/src/core/process-cpu-time.d.ts +1 -1
  452. package/dist/src/core/process-cpu-time.js +5 -5
  453. package/dist/src/core/rebase-session.d.ts +7 -7
  454. package/dist/src/core/rebase-session.js +8 -8
  455. package/dist/src/core/register-result.d.ts +1 -1
  456. package/dist/src/core/register-result.js +1 -1
  457. package/dist/src/core/register-scaffold.d.ts +2 -2
  458. package/dist/src/core/register-scaffold.js +3 -3
  459. package/dist/src/core/register-shared-css.d.ts +3 -3
  460. package/dist/src/core/register-shared-css.js +4 -4
  461. package/dist/src/core/register-xpcshell-test.d.ts +2 -2
  462. package/dist/src/core/register-xpcshell-test.js +2 -2
  463. package/dist/src/core/run-log-redact.d.ts +12 -12
  464. package/dist/src/core/run-log-redact.js +16 -16
  465. package/dist/src/core/run-log.d.ts +9 -9
  466. package/dist/src/core/run-log.js +14 -14
  467. package/dist/src/core/shared-ftl.d.ts +2 -2
  468. package/dist/src/core/shared-ftl.js +6 -6
  469. package/dist/src/core/signal-critical.d.ts +2 -2
  470. package/dist/src/core/signal-critical.js +2 -2
  471. package/dist/src/core/smoke-patterns.d.ts +5 -5
  472. package/dist/src/core/smoke-patterns.js +9 -9
  473. package/dist/src/core/state-file.d.ts +3 -3
  474. package/dist/src/core/status-binary.d.ts +8 -8
  475. package/dist/src/core/status-binary.js +12 -12
  476. package/dist/src/core/status-classify.d.ts +17 -17
  477. package/dist/src/core/status-classify.js +11 -11
  478. package/dist/src/core/test-changed-prefs.d.ts +12 -12
  479. package/dist/src/core/test-changed-prefs.js +15 -15
  480. package/dist/src/core/test-harness-crash.d.ts +39 -39
  481. package/dist/src/core/test-harness-crash.js +67 -67
  482. package/dist/src/core/test-harness-output.d.ts +7 -7
  483. package/dist/src/core/test-harness-output.js +7 -7
  484. package/dist/src/core/test-harness-verdict-notes.d.ts +13 -14
  485. package/dist/src/core/test-harness-verdict-notes.js +4 -4
  486. package/dist/src/core/test-path-scope.d.ts +8 -8
  487. package/dist/src/core/test-path-scope.js +11 -11
  488. package/dist/src/core/test-stale-check.d.ts +22 -21
  489. package/dist/src/core/test-stale-check.js +29 -28
  490. package/dist/src/core/test-stale-symlink.d.ts +1 -1
  491. package/dist/src/core/test-stale-symlink.js +1 -1
  492. package/dist/src/core/test-stall-triage.d.ts +9 -9
  493. package/dist/src/core/test-stall-triage.js +22 -22
  494. package/dist/src/core/token-category.d.ts +4 -4
  495. package/dist/src/core/token-category.js +13 -12
  496. package/dist/src/core/token-coverage.js +4 -5
  497. package/dist/src/core/token-dark-mode.d.ts +9 -9
  498. package/dist/src/core/token-dark-mode.js +11 -11
  499. package/dist/src/core/token-docs.d.ts +1 -1
  500. package/dist/src/core/token-inventory.d.ts +6 -6
  501. package/dist/src/core/token-inventory.js +7 -7
  502. package/dist/src/core/token-manager.d.ts +3 -3
  503. package/dist/src/core/token-manager.js +21 -21
  504. package/dist/src/core/token-scaffold.d.ts +4 -4
  505. package/dist/src/core/token-scaffold.js +4 -4
  506. package/dist/src/core/token-variant.d.ts +14 -14
  507. package/dist/src/core/token-variant.js +32 -32
  508. package/dist/src/core/toolchain-preflight.d.ts +15 -15
  509. package/dist/src/core/toolchain-preflight.js +22 -22
  510. package/dist/src/core/tree-cow.d.ts +3 -3
  511. package/dist/src/core/tree-cow.js +6 -6
  512. package/dist/src/core/tree-guard.d.ts +3 -3
  513. package/dist/src/core/tree-guard.js +23 -23
  514. package/dist/src/core/tree-store.d.ts +15 -15
  515. package/dist/src/core/tree-store.js +35 -33
  516. package/dist/src/core/typecheck-shim.d.ts +16 -15
  517. package/dist/src/core/typecheck-shim.js +26 -25
  518. package/dist/src/core/typecheck.d.ts +12 -12
  519. package/dist/src/core/typecheck.js +31 -31
  520. package/dist/src/core/wire-destroy.d.ts +2 -2
  521. package/dist/src/core/wire-destroy.js +5 -5
  522. package/dist/src/core/wire-dom-fragment.d.ts +3 -3
  523. package/dist/src/core/wire-dom-fragment.js +6 -6
  524. package/dist/src/core/wire-init.d.ts +2 -2
  525. package/dist/src/core/wire-init.js +7 -7
  526. package/dist/src/core/wire-subscript.d.ts +1 -1
  527. package/dist/src/core/wire-subscript.js +3 -3
  528. package/dist/src/core/wire-utils.d.ts +9 -9
  529. package/dist/src/core/wire-utils.js +11 -11
  530. package/dist/src/core/xpcshell-appdir.d.ts +20 -20
  531. package/dist/src/core/xpcshell-appdir.js +26 -26
  532. package/dist/src/core/xpcshell-profile-dir.d.ts +3 -3
  533. package/dist/src/core/xpcshell-profile-dir.js +7 -7
  534. package/dist/src/errors/base.d.ts +22 -21
  535. package/dist/src/errors/base.js +22 -21
  536. package/dist/src/errors/build.d.ts +6 -6
  537. package/dist/src/errors/build.js +6 -6
  538. package/dist/src/errors/codes.d.ts +10 -10
  539. package/dist/src/errors/codes.js +10 -10
  540. package/dist/src/errors/furnace.d.ts +2 -2
  541. package/dist/src/errors/git.d.ts +1 -1
  542. package/dist/src/errors/git.js +1 -1
  543. package/dist/src/errors/patch.d.ts +3 -3
  544. package/dist/src/errors/patch.js +3 -3
  545. package/dist/src/errors/rebase.d.ts +1 -1
  546. package/dist/src/errors/rebase.js +1 -1
  547. package/dist/src/errors/run.d.ts +1 -1
  548. package/dist/src/errors/run.js +1 -1
  549. package/dist/src/index.d.ts +4 -4
  550. package/dist/src/index.js +4 -4
  551. package/dist/src/types/commands/options.d.ts +86 -85
  552. package/dist/src/types/commands/patches.d.ts +19 -19
  553. package/dist/src/types/commands/project.d.ts +3 -3
  554. package/dist/src/types/config.d.ts +24 -23
  555. package/dist/src/types/furnace.d.ts +17 -17
  556. package/dist/src/types/json.d.ts +3 -3
  557. package/dist/src/types/json.js +2 -2
  558. package/dist/src/types/typecheck.d.ts +3 -3
  559. package/dist/src/utils/assert.d.ts +1 -1
  560. package/dist/src/utils/assert.js +6 -6
  561. package/dist/src/utils/build-info.d.ts +5 -5
  562. package/dist/src/utils/build-info.js +6 -6
  563. package/dist/src/utils/child-env.d.ts +5 -5
  564. package/dist/src/utils/child-env.js +5 -5
  565. package/dist/src/utils/concurrency.d.ts +2 -2
  566. package/dist/src/utils/concurrency.js +2 -2
  567. package/dist/src/utils/elapsed.js +1 -1
  568. package/dist/src/utils/errors.d.ts +8 -8
  569. package/dist/src/utils/errors.js +8 -8
  570. package/dist/src/utils/fs.d.ts +1 -1
  571. package/dist/src/utils/fs.js +8 -8
  572. package/dist/src/utils/line-dispatch.d.ts +3 -3
  573. package/dist/src/utils/line-dispatch.js +5 -5
  574. package/dist/src/utils/logger.d.ts +4 -4
  575. package/dist/src/utils/logger.js +11 -11
  576. package/dist/src/utils/machine-output.js +2 -2
  577. package/dist/src/utils/options.d.ts +13 -13
  578. package/dist/src/utils/options.js +20 -20
  579. package/dist/src/utils/package-root.js +2 -2
  580. package/dist/src/utils/paths.d.ts +4 -4
  581. package/dist/src/utils/paths.js +4 -4
  582. package/dist/src/utils/process-group.d.ts +8 -8
  583. package/dist/src/utils/process-group.js +19 -19
  584. package/dist/src/utils/process.d.ts +34 -33
  585. package/dist/src/utils/process.js +20 -19
  586. package/dist/src/utils/ps-duration.d.ts +4 -4
  587. package/dist/src/utils/ps-duration.js +6 -6
  588. package/dist/src/utils/regex.d.ts +4 -4
  589. package/dist/src/utils/regex.js +7 -7
  590. package/dist/src/utils/sleep.d.ts +7 -7
  591. package/dist/src/utils/sleep.js +7 -7
  592. package/dist/src/utils/stdio-drain.d.ts +7 -7
  593. package/dist/src/utils/stdio-drain.js +8 -8
  594. package/dist/src/utils/validation.d.ts +11 -12
  595. package/dist/src/utils/validation.js +20 -21
  596. package/docs/README.md +2 -2
  597. package/docs/configuration.md +120 -114
  598. package/docs/exit-codes.md +63 -58
  599. package/docs/furnace.md +20 -19
  600. package/docs/lifecycle-invariants.md +412 -251
  601. package/docs/machine-output.md +33 -32
  602. package/docs/patch-workflow.md +48 -45
  603. package/docs/run-logs.md +62 -58
  604. package/docs/testing.md +101 -101
  605. package/docs/verification-trees.md +23 -22
  606. package/package.json +2 -2
@@ -77,7 +77,7 @@ async function renameTestFiles(engineDir, projectRoot, oldName, newName, journal
77
77
  * deployment. Best-effort: logs a warning but never blocks the rename.
78
78
  *
79
79
  * Without it, a rename registers and deploys the new name correctly but
80
- * leaves `engine/toolkit/content/widgets/<old>/` in place — subsequent
80
+ * leaves `engine/toolkit/content/widgets/<old>/` in place: subsequent
81
81
  * `furnace sync` runs cannot clear the stale widget, and packaging pulls in
82
82
  * both copies. The snapshot is taken before the remove so the rollback
83
83
  * journal restores the old directory if any later step in
@@ -103,7 +103,7 @@ async function removeStaleDeployedComponentDir(engineDir, oldTargetPath, journal
103
103
  * accompanying `chrome.toml` entry names the same file. Leaving both
104
104
  * unhandled produces a `test_<old>.html` that still imports
105
105
  * `chrome://global/content/elements/<old>.mjs` and references
106
- * `customElements.whenDefined("<old>")` — running against a component that
106
+ * `customElements.whenDefined("<old>")`, running against a component that
107
107
  * no longer exists under that name, and either failing or (if the old
108
108
  * component is still deployed) passing for the wrong reason.
109
109
  *
@@ -139,7 +139,7 @@ async function renameMochikitTestFiles(engineDir, oldName, newName, journal) {
139
139
  }
140
140
  }
141
141
  // Update `chrome.toml` entry if present. The file may live in the
142
- // same widgets/tests directory as the test file itself; upstream
142
+ // same widgets/tests directory as the test file itself. Upstream
143
143
  // convention places exactly one `chrome.toml` there for all widget
144
144
  // scaffolds.
145
145
  const chromeTomlPath = join(testDir, 'chrome.toml');
@@ -195,9 +195,9 @@ async function performRenameMutations(args) {
195
195
  }
196
196
  await snapshotDir(journal, oldDir);
197
197
  await snapshotFile(journal, args.furnaceConfigPath);
198
- // Journal the state file BEFORE step 4 re-keys its checksums, plus
198
+ // Journal the state file before step 4 re-keys its checksums, plus
199
199
  // the new dir and every new-name destination below (a snapshot of a
200
- // missing path records {existed: false} → rollback DELETES it).
200
+ // missing path records {existed: false}, so rollback deletes it).
201
201
  // Without these, a failed or SIGINT'd rename stranded the new-name
202
202
  // scaffold and kept re-keyed state for a nonexistent component.
203
203
  await snapshotFile(journal, getFurnacePaths(projectRoot).furnaceState);
@@ -209,7 +209,7 @@ async function performRenameMutations(args) {
209
209
  if (!entry.isFile())
210
210
  continue;
211
211
  const oldFileName = entry.name;
212
- // Rename only when the filename starts with the component name — the
212
+ // Rename only when the filename starts with the component name. The
213
213
  // scaffolding convention for both create and override is
214
214
  // `${name}.ext`. A plain `replace(oldName, newName)` produces wrong
215
215
  // results when the old name occurs more than once (`foo-foo.mjs`
@@ -276,7 +276,7 @@ async function performRenameMutations(args) {
276
276
  await renameTestFiles(args.engineDir, projectRoot, oldName, newName, journal);
277
277
  // The mochikit scaffold and widgets/chrome.toml live in a different
278
278
  // tree than browser.toml-registered browser-chrome tests, so
279
- // renameTestFiles does not reach them — leaving
279
+ // renameTestFiles does not reach them, leaving
280
280
  // `engine/toolkit/content/tests/widgets/test_<old>.html` and its
281
281
  // `chrome.toml` entry pointing at the old name, which either fails
282
282
  // the test run outright or passes for the wrong component.
@@ -401,8 +401,8 @@ export async function furnaceRenameCommand(projectRoot, oldName, newName) {
401
401
  throw new FurnaceError(`A component named "${newName}" already exists in furnace.json.`, newName);
402
402
  }
403
403
  // The furnace-state key is singular (`custom` / `override`, derived
404
- // inside performRenameMutations); the on-disk directory label differs —
405
- // custom components live under `components/custom/` (singular) while
404
+ // inside performRenameMutations). The on-disk directory label differs.
405
+ // Custom components live under `components/custom/` (singular) while
406
406
  // overrides live under `components/overrides/` (plural). Appending an
407
407
  // `s` to the state key produces the wrong label `components/customs/`
408
408
  // for custom components and is correct for overrides only by
@@ -59,7 +59,7 @@ async function promptAddComponents(components, tracked, projectRoot) {
59
59
  /**
60
60
  * Persists discovered component tag names into the `stock` section of
61
61
  * furnace.json. Shared by the interactive confirm flow and the
62
- * non-interactive `--track` flag — without it, scan prints a full inventory
62
+ * non-interactive `--track` flag. Without it, scan prints a full inventory
63
63
  * but persists nothing and says nothing about where the inventory goes.
64
64
  *
65
65
  * Wraps the furnace.json mutation in the standard furnace lifecycle so the
@@ -81,7 +81,7 @@ async function persistStockComponents(projectRoot, names) {
81
81
  // re-filter catches the edge case where the config on disk changed
82
82
  // between the scan's read and the write (concurrent scan / manual
83
83
  // edit). Without it a duplicate scan would introduce duplicate
84
- // entries into stock; writeFurnaceConfig's validator would then
84
+ // entries into stock. writeFurnaceConfig's validator would then
85
85
  // reject the write, but the error would be less actionable than
86
86
  // silently de-duplicating here.
87
87
  const toAdd = names.filter((s) => !config.stock.includes(s));
@@ -163,7 +163,7 @@ export async function furnaceScanCommand(projectRoot, options = {}) {
163
163
  note(`Total: ${components.length} Tracked: ${trackedCount} Untracked: ${untrackedCount}`, 'Summary');
164
164
  // --track: persist the discovered untracked inventory into the `stock`
165
165
  // section without prompting (works non-interactively). Without it, scan
166
- // stays report-only; the interactive confirm flow below is the other
166
+ // stays report-only. The interactive confirm flow below is the other
167
167
  // persistence path.
168
168
  if (options.track) {
169
169
  if (untrackedCount === 0) {
@@ -67,7 +67,7 @@ async function showDetailedComponentStatus(options) {
67
67
  outro('Status complete');
68
68
  return;
69
69
  }
70
- // Custom component — run registration consistency check
70
+ // Custom component: run registration consistency check
71
71
  const status = await checkRegistrationConsistency(projectRoot, name, customConfig, ftlDir);
72
72
  const lines = [];
73
73
  const check = (ok, label) => {
@@ -122,7 +122,7 @@ export async function furnaceStatusCommand(projectRoot, name) {
122
122
  // Surface a pendingRepair marker before the normal summary so it cannot
123
123
  // be missed. The marker means the last mutation could not roll back
124
124
  // cleanly, so the engine and workspace may have drifted in ways apply
125
- // cannot detect from checksums alone — doctor is the right next step.
125
+ // cannot detect from checksums alone, so doctor is the right next step.
126
126
  if (state.pendingRepair) {
127
127
  warn(`Furnace is in pending-repair state from ${state.pendingRepair.operation} (${state.pendingRepair.timestamp}): ${state.pendingRepair.reason}. Run \`fireforge doctor --repair-furnace\` to reconcile.`);
128
128
  }
@@ -154,7 +154,7 @@ export async function furnaceStatusCommand(projectRoot, name) {
154
154
  // Surface override baseVersion drift from the project config. This check
155
155
  // is cheap (no I/O besides the already-loaded fireforge.json) and catches
156
156
  // the single most common silent-drift case: Firefox bumped, overrides
157
- // still point at the old version. Advisory only — status never fails.
157
+ // still point at the old version. Advisory only. Status never fails.
158
158
  const forgeConfig = await loadConfig(projectRoot);
159
159
  for (const entry of findOverrideBaseVersionDrift(config, forgeConfig.firefox.version)) {
160
160
  warn(formatOverrideBaseVersionDriftWarning(entry));
@@ -166,17 +166,17 @@ export async function furnaceStatusCommand(projectRoot, name) {
166
166
  if (await pathExists(paths.engine)) {
167
167
  // Held in an object rather than two `let`s: the scanner below mutates
168
168
  // them from inside a closure, and TS's control-flow analysis does not
169
- // propagate that through the call — it would narrow both to the literal
169
+ // propagate that through the call. It would narrow both to the literal
170
170
  // `false` and flag every later read as always-falsy.
171
171
  const drift = { workspaceChanged: false, engineDrifted: false };
172
172
  /**
173
173
  * Scans one component family for workspace or engine drift.
174
174
  *
175
- * The engine probe sits behind `else if` deliberately: a component whose
175
+ * The engine probe sits behind `else if` on purpose: a component whose
176
176
  * workspace already changed does not need an engine comparison to decide
177
177
  * what `status` reports, and the probe is the expensive half (it
178
- * re-hashes deployed files). The consequence is that engine drift can go
179
- * UNREPORTED for a component that also has workspace changes — the
178
+ * re-hashes deployed files). The consequence is that engine drift goes
179
+ * unreported for a component that also has workspace changes. The
180
180
  * summary says "workspace changed", not both.
181
181
  */
182
182
  const scanFamily = async (entries, baseDir, kind, probeEngineDrift) => {
@@ -91,12 +91,12 @@ export async function furnaceSyncCommand(projectRoot, options = {}) {
91
91
  else {
92
92
  info('All overrides are up-to-date with the current Firefox version.');
93
93
  }
94
- // Phase 2.5: post-refresh gates. Refresh deliberately leaves conflict
95
- // markers in workspace files and does NOT bump baseVersion on conflict —
96
- // so without this gate sync warns about conflicts and then copies the
97
- // marker-laden files straight into the engine via Phase 3, producing a
98
- // broken build from the one command whose whole purpose is a safe upgrade.
99
- // Apply and deploy both enforce a drift gate; sync must not be the back
94
+ // Phase 2.5: post-refresh gates. Refresh leaves conflict markers in
95
+ // workspace files and does not bump baseVersion on conflict, so without
96
+ // this gate sync warns about conflicts and then copies the marker-laden
97
+ // files straight into the engine via Phase 3, producing a broken build
98
+ // from the one command meant to make an upgrade safe.
99
+ // Apply and deploy both enforce a drift gate. Sync must not be the back
100
100
  // door around it.
101
101
  if (!options.dryRun) {
102
102
  const refreshedConfig = await loadFurnaceConfig(projectRoot);
@@ -9,9 +9,9 @@
9
9
  * and silently leave the old test behind:
10
10
  *
11
11
  * 1. drop the upstream `moz-` custom-element prefix, which never appears in a
12
- * test filename;
12
+ * test filename.
13
13
  * 2. drop a leading `<binaryName>-`, because the test directory is already
14
- * named after the binary and the prefix would be doubled;
14
+ * named after the binary and the prefix would be doubled.
15
15
  * 3. underscore the remaining dashes, matching mozilla-central's
16
16
  * `browser_*.js` convention.
17
17
  * @param componentName - Custom-element name, e.g. `moz-mybrowser-sidebar`.
@@ -10,9 +10,9 @@
10
10
  * and silently leave the old test behind:
11
11
  *
12
12
  * 1. drop the upstream `moz-` custom-element prefix, which never appears in a
13
- * test filename;
13
+ * test filename.
14
14
  * 2. drop a leading `<binaryName>-`, because the test directory is already
15
- * named after the binary and the prefix would be doubled;
15
+ * named after the binary and the prefix would be doubled.
16
16
  * 3. underscore the remaining dashes, matching mozilla-central's
17
17
  * `browser_*.js` convention.
18
18
  * @param componentName - Custom-element name, e.g. `moz-mybrowser-sidebar`.
@@ -78,16 +78,15 @@ async function autoFixIssues(projectRoot, issues) {
78
78
  warn(`Could not fix jar.mn for ${componentName}: ${toError(err).message}`);
79
79
  }
80
80
  }
81
- // `wrong-registration-pattern` is deliberately NOT auto-fixed: it means the
82
- // component IS registered but in the wrong block, and moving code between
83
- // blocks is too risky to do unattended. Only truly missing registrations are
84
- // repaired, below.
81
+ // `wrong-registration-pattern` is not auto-fixed: the component is
82
+ // registered but in the wrong block, and moving code between blocks is too
83
+ // risky to do unattended. Only missing registrations are repaired, below.
85
84
  // Repair components missing from customElements.js entirely (reported by
86
85
  // validate as `missing-custom-element-registration`).
87
86
  //
88
87
  // Scoped to the components named in `issues`: iterating every entry in
89
88
  // `config.custom` makes `furnace validate <one-component> --fix` write
90
- // customElements.js registrations for EVERY custom component, outside the
89
+ // customElements.js registrations for every custom component, outside the
91
90
  // issue list it was handed and invisibly, since `fixed` is never
92
91
  // incremented here.
93
92
  const componentsWithIssues = new Set(issues.map((issue) => issue.component));
@@ -109,7 +108,7 @@ async function autoFixIssues(projectRoot, issues) {
109
108
  await addCustomElementRegistration(engineDir, componentName, modulePath);
110
109
  }
111
110
  catch {
112
- // Best-effort repair — the re-validation pass at the call site reports
111
+ // Best-effort repair. The re-validation pass at the call site reports
113
112
  // whatever is still outstanding.
114
113
  }
115
114
  }
@@ -194,11 +193,11 @@ export async function furnaceValidateCommand(projectRoot, name, options = {}) {
194
193
  }
195
194
  }
196
195
  // Auto-fix fixable issues when --fix is passed. The counter returned by
197
- // `autoFixIssues` only counts function calls that did not throw — a write
198
- // that succeeded but did not actually resolve the issue (addJarMnEntries
199
- // appending to a file mach later ignores) would still bump it. Re-validate
200
- // the affected components and compute the *actual* drop in fixable issues
201
- // so the reported number is honest.
196
+ // `autoFixIssues` only counts function calls that did not throw, so a
197
+ // write that succeeded but did not actually resolve the issue
198
+ // (addJarMnEntries appending to a file mach later ignores) would still
199
+ // bump it. Re-validate the affected components and compute the real drop
200
+ // in fixable issues so the reported number is honest.
202
201
  if (options.fix && allIssues.length > 0) {
203
202
  const fixableIssues = allIssues.filter((issue) => FIXABLE_CHECKS.has(issue.check));
204
203
  if (fixableIssues.length > 0) {
@@ -254,7 +253,7 @@ async function reValidateComponents(projectRoot, config, furnacePaths, component
254
253
  componentDir = join(furnacePaths.customDir, componentName);
255
254
  }
256
255
  else {
257
- // Stock or removed components are not local-validated; skip silently.
256
+ // Stock or removed components are not local-validated, so skip silently.
258
257
  continue;
259
258
  }
260
259
  if (!(await pathExists(componentDir)))
@@ -20,9 +20,9 @@ import { pickDefined } from '../utils/options.js';
20
20
  /**
21
21
  * Errno codes for filesystem-level failures against the working file.
22
22
  * These are safe to fall through as "unmanaged" because they describe the
23
- * *state of the engine directory*, not the integrity of the patch stack.
24
- * Manifest / patch-parse / PatchError failures do NOT match this set and
25
- * are re-thrown so the root cause surfaces instead of being silently
23
+ * state of the engine directory rather than the integrity of the patch
24
+ * stack. Manifest / patch-parse / PatchError failures do not match this set
25
+ * and are re-thrown so the root cause surfaces instead of being silently
26
26
  * reclassified as a spurious dirty file.
27
27
  */
28
28
  const SAFE_IO_FALLBACK_CODES = new Set(['ENOENT', 'EACCES', 'EPERM', 'EISDIR', 'EBUSY']);
@@ -48,7 +48,7 @@ async function getUnmanagedDirtyFiles(engineDir, patchesDir, dirtyFiles) {
48
48
  }
49
49
  catch (error) {
50
50
  // PatchError, manifest corruption, and patch-parse failures are
51
- // *structural* problems with the patch stack — masking them as
51
+ // structural problems with the patch stack. Masking them as an
52
52
  // "unmanaged dirty file" would let the user `--force` past a real
53
53
  // root cause (e.g. "patch 003 missing from manifest") and compound
54
54
  // the corruption. Only swallow the pure-IO fallback cases where
@@ -91,7 +91,7 @@ async function checkUncommittedPatchFiles(engineDir, patchesDir, forceImport) {
91
91
  // already carries the patch's effects. The import below still
92
92
  // re-applies each patch (a no-op for files whose contents already
93
93
  // match), so phrase the line as "no resync needed" rather than
94
- // "patches already applied" — the latter contradicts the "Applied N
94
+ // "patches already applied". The latter contradicts the "Applied N
95
95
  // patch(es)" summary `applyPatchesWithContinue` prints next.
96
96
  info('Patch-touched files already match the stored patch stack — no engine resync needed before re-applying.');
97
97
  }
@@ -160,7 +160,7 @@ async function checkEngineDrift(engineDir, baseCommit, forceImport, acceptPrompt
160
160
  const currentHead = await getHead(engineDir);
161
161
  if (currentHead === baseCommit)
162
162
  return true;
163
- // `--yes` and `--force` both answer this prompt; only `--force` also
163
+ // `--yes` and `--force` both answer this prompt. Only `--force` also
164
164
  // waives the patch-integrity gate further down.
165
165
  const promptAnswered = forceImport || acceptPrompts;
166
166
  if (!stdioIsInteractive()) {
@@ -193,7 +193,7 @@ async function checkEngineDrift(engineDir, baseCommit, forceImport, acceptPrompt
193
193
  * without the `.patch` suffix (matching `applyPatchesWithContinue`'s
194
194
  * `untilFilename` resolver).
195
195
  *
196
- * Returns an empty set when no match is found — the caller treats that as
196
+ * Returns an empty set when no match is found. The caller treats that as
197
197
  * "no scope filter applies" so the import behaves identically to an
198
198
  * unrecognised `--until` target (which `applyPatchesWithContinue` will
199
199
  * later surface as a normal error).
@@ -202,11 +202,11 @@ function buildUntilFilenameSet(patches, until) {
202
202
  const set = new Set();
203
203
  if (until === undefined)
204
204
  return set;
205
- // Resolve the identifier with the SAME matcher the apply loop uses
206
- // (`matchesUntilFilename` accepts filenames, extension-less names, AND
205
+ // Resolve the identifier with the same matcher the apply loop uses
206
+ // (`matchesUntilFilename` accepts filenames, extension-less names, and
207
207
  // bare ordinals). A filename-only match makes `import --until 5` produce
208
- // an EMPTY scope set — the UI previews "0 patches", the integrity gates
209
- // filter every in-range issue away — and the apply loop then applies
208
+ // an empty scope set: the UI previews "0 patches", the integrity gates
209
+ // filter every in-range issue away, and the apply loop then applies
210
210
  // patches 1..5 anyway.
211
211
  const target = patches.find((p) => matchesUntilFilename(p.filename, until));
212
212
  if (!target)
@@ -228,8 +228,8 @@ async function assertScopedManifestConsistency(patchesDir, untilFilenameSet, unt
228
228
  const manifestConsistencyIssues = await validatePatchesManifestConsistency(patchesDir);
229
229
  const scopedManifestIssues = until !== undefined
230
230
  ? manifestConsistencyIssues.filter((issue) =>
231
- // Global (manifest-level) issues have no specific filename to scope
232
- // against — a missing or unparseable patches.json blocks any
231
+ // Global (manifest-level) issues have no specific filename to
232
+ // scope against: a missing or unparseable patches.json blocks any
233
233
  // import. Per-patch issues only block when the patch is in scope.
234
234
  issue.code === 'manifest-missing' ||
235
235
  issue.code === 'manifest-invalid' ||
@@ -249,7 +249,7 @@ async function assertScopedManifestConsistency(patchesDir, untilFilenameSet, unt
249
249
  /**
250
250
  * Prints advisory version-compatibility warnings for every in-scope patch
251
251
  * whose recorded source version differs meaningfully from the configured
252
- * Firefox version. Advisory only — never blocks the import.
252
+ * Firefox version. Advisory only. Never blocks the import.
253
253
  */
254
254
  async function warnVersionCompatibility(projectRoot, manifest, untilFilenameSet, until) {
255
255
  if (!manifest)
@@ -269,7 +269,7 @@ async function warnVersionCompatibility(projectRoot, manifest, untilFilenameSet,
269
269
  }
270
270
  /**
271
271
  * Patch-integrity gate: surfaces orphaned-modification issues scoped to
272
- * the `--until` range and decides whether the import may proceed —
272
+ * the `--until` range and decides whether the import may proceed.
273
273
  * `--force` continues with a warning, non-TTY refuses loudly, and an
274
274
  * interactive operator is prompted. Returns false when the import should
275
275
  * stop (the cancel outro has been printed).
@@ -413,8 +413,8 @@ export async function importCommand(projectRoot, options = {}) {
413
413
  success(` ${result.patch.filename}${suffix}`);
414
414
  }
415
415
  // The re-applied queue may have moved components.conf away from what
416
- // the last full build compiled in — surface that now instead of at the
417
- // next test refusal.
416
+ // the last full build compiled in, so surface that now instead of at
417
+ // the next test refusal.
418
418
  await warnIfStaticComponentsStale(projectRoot, paths.engine);
419
419
  outro('All patches applied successfully!');
420
420
  }
@@ -432,10 +432,10 @@ export function registerImport(program, { getProjectRoot, withErrorHandling }) {
432
432
  .description('Apply patches from the patches directory')
433
433
  .option('--continue', 'Continue applying patches even if one fails')
434
434
  .option('-f, --force', 'Proceed despite engine drift and overwrite unmanaged changes in patch-touched files')
435
- // NOT an alias of --force. `--force` waives two orthogonal things: the
436
- // drift prompt AND the patch-integrity gate. `--yes` waives only the
435
+ // Not an alias of --force. `--force` waives two orthogonal things: the
436
+ // drift prompt and the patch-integrity gate. `--yes` waives only the
437
437
  // prompt, so a scripted import can run unattended while the integrity
438
- // refusal stays armed — which is the guard you actually want in CI.
438
+ // refusal stays armed, which is the guard you want in CI.
439
439
  .option('-y, --yes', 'Answer the drift prompt non-interactively. Unlike --force, this does NOT waive the patch-integrity gate.')
440
440
  .option('--until <patch>', 'Apply patches only up to and including this patch')
441
441
  .option('--dry-run', 'Preview which patches would be applied without modifying the engine')
@@ -28,7 +28,7 @@ function emitTierNotice(filename, files, tier) {
28
28
  /**
29
29
  * Lints one queued patch against its own isolated diff, reusing the cache entry
30
30
  * when the cache key matches. Returns the outcome and the patch's (unprefixed)
31
- * issues without touching shared state — the orchestrator applies the tier
31
+ * issues without touching shared state. The orchestrator applies the tier
32
32
  * notice, issue prefixing, and cache write in patch order after the pool
33
33
  * drains, so the bounded concurrency cannot reorder output. Returns `skipped`
34
34
  * (no files present / empty diff), `cached`, or `linted`.
@@ -135,8 +135,8 @@ const SUPPRESSED_SIZE_CHECKS = new Set([
135
135
  * Applies the per-patch results in patch order so the bounded concurrency
136
136
  * cannot reorder output: emits each tier notice, the once-only run-level
137
137
  * checkJs errors (before the first freshly linted patch's issues), the
138
- * filename-prefixed issue rows, and the cache writes — all in the same sequence
139
- * a serial run produced. Returns the run tallies.
138
+ * filename-prefixed issue rows, and the cache writes, all in the same
139
+ * sequence a serial run produced. Returns the run tallies.
140
140
  */
141
141
  async function applyPerPatchResults(subset, results, issues, checkJs, cache) {
142
142
  const totals = {
@@ -158,8 +158,8 @@ async function applyPerPatchResults(subset, results, issues, checkJs, cache) {
158
158
  }
159
159
  emitTierNotice(patch.filename, result.existingFiles, patch.tier);
160
160
  // Run-level checkJs errors are emitted once, before the first
161
- // non-skipped patch's own issues — matching the serial emit point.
162
- // Deliberately NOT gated on `result.usedCheckJs`: global findings are
161
+ // non-skipped patch's own issues, matching the serial emit point.
162
+ // Not gated on `result.usedCheckJs`: global findings are
163
163
  // run-level and never cached, so gating drops them entirely on an
164
164
  // all-cache-hit run and lets a warm run report fewer errors than a cold
165
165
  // one. PerRunCheckJs builds its program lazily, so the cost only
@@ -183,7 +183,7 @@ async function applyPerPatchResults(subset, results, issues, checkJs, cache) {
183
183
  for (const issue of result.rawIssues) {
184
184
  issues.push({ ...issue, file: `${patch.filename} :: ${issue.file}` });
185
185
  }
186
- // A waived size finding still reports its MEASUREMENT: the finding stays
186
+ // A waived size finding still reports its measurement: the finding stays
187
187
  // suppressed (no exit-code / --max-warnings effect) but the current count
188
188
  // is readable from the tool that enforces it, so a waiver's cited size
189
189
  // can be calibrated without hand-measuring.
@@ -331,7 +331,7 @@ function selectPatchSubset(manifest, requested) {
331
331
  * queue-level findings are scoped to files those patches touch).
332
332
  */
333
333
  export async function lintPerPatch(projectRoot, paths, options = {}) {
334
- // Read-only to the operator, an index WRITER to git: the per-patch diffs
334
+ // Read-only to the operator, but an index writer to git: the per-patch diffs
335
335
  // run `git diff HEAD` (and, for untracked binaries, a real stage/unstage
336
336
  // pair) against the primary checkout. A private index absorbs all of it
337
337
  // so a concurrent `fireforge test` still gets an evidential verdict.
@@ -379,7 +379,7 @@ async function lintPerPatchInner(projectRoot, paths, options = {}) {
379
379
  });
380
380
  }
381
381
  // With `--patches`, the checkJs program roots at only the subset's owned
382
- // files — the full queue stays resolvable, so a cold subset run costs the
382
+ // files. The full queue stays resolvable, so a cold subset run costs the
383
383
  // subset's import closure instead of the whole queue.
384
384
  const checkJs = buildPerRunCheckJs(projectRoot, paths, config, ctx, isSubset ? subsetNames : undefined);
385
385
  // Lint patches concurrently, then apply every side effect in patch order so
@@ -3,22 +3,21 @@
3
3
  * `re-export`.
4
4
  *
5
5
  * The dominant fixed cost of patch lint is one `ts.createProgram` over the
6
- * queue's patch-owned `.sys.mjs` files — tens of seconds on a large queue.
7
- * This controller builds that program at most ONCE per command invocation
6
+ * queue's patch-owned `.sys.mjs` files, tens of seconds on a large queue.
7
+ * This controller builds that program at most once per command invocation
8
8
  * (lazily, promise-memoised) and lets callers slice per-patch findings out of
9
9
  * the grouped result. Three levers keep the cost paid only when it buys
10
10
  * something:
11
11
  *
12
- * - **Lazy build**: nothing is built until the first cache miss asks.
13
- * - **Root scoping** (`rootScopePatches`): with `--patches <subset>` the
14
- * program's roots are only the subset's owned files; the full queue stays
12
+ * - Lazy build: nothing is built until the first cache miss asks.
13
+ * - Root scoping (`rootScopePatches`): with `--patches <subset>` the
14
+ * program's roots are only the subset's owned files. The full queue stays
15
15
  * resolvable, so cross-patch imports type-check identically while
16
16
  * unrelated files are never parsed.
17
- * - **Warm-run probe**: run-level ("global") checkJs findings come only from
18
- * a missing `typescript` package or an unreadable shim — never from the
19
- * built program — so an all-cache-hit run satisfies "warm never reports
20
- * less than cold" via `probeCheckJsGlobalIssues` instead of building
21
- * anything.
17
+ * - Warm-run probe: run-level ("global") checkJs findings come only from a
18
+ * missing `typescript` package or an unreadable shim, never from the built
19
+ * program, so an all-cache-hit run satisfies "warm never reports less than
20
+ * cold" via `probeCheckJsGlobalIssues` instead of building anything.
22
21
  */
23
22
  import { type GroupedCheckJsResult } from '../core/patch-lint-checkjs.js';
24
23
  import type { PatchQueueContext } from '../core/patch-lint-cross.js';
@@ -32,7 +31,7 @@ import type { FireForgeConfig, ProjectPaths } from '../types/config.js';
32
31
  export interface PerRunCheckJs {
33
32
  /** Patch filename → the checkJs-relevant files that patch creates. */
34
33
  ownedByPatch: Map<string, Set<string>>;
35
- /** Every checkJs-relevant file in the queue (sys + test scripts) — the
34
+ /** Every checkJs-relevant file in the queue (sys + test scripts), the
36
35
  * resolution universe the program can see. Callers use it to detect
37
36
  * files the hoisted program has never heard of (fresh `--scan`
38
37
  * adoptions) and fall back to a per-patch build. */
@@ -43,10 +42,10 @@ export interface PerRunCheckJs {
43
42
  getGrouped: () => Promise<GroupedCheckJsResult>;
44
43
  /** Run-level checkJs errors (e.g. TypeScript missing). When the program
45
44
  * was never built (all-warm run) this probes the two global failure
46
- * sources directly instead of building it holds because the
45
+ * sources directly instead of building it, which is safe because the
47
46
  * built program never contributes globals of its own. */
48
47
  getGlobal: () => Promise<PatchLintIssue[]>;
49
- /** The byFile slices for `files` (globals deliberately EXCLUDED — they
48
+ /** The byFile slices for `files` (globals are excluded because they
50
49
  * are run-level, never cached, and emitted once per invocation via
51
50
  * `getGlobal`). Feed to `LintExportedPatchOptions.precomputedCheckJs`. */
52
51
  sliceFor: (files: ReadonlySet<string>) => Promise<PatchLintIssue[]>;
@@ -4,22 +4,21 @@
4
4
  * `re-export`.
5
5
  *
6
6
  * The dominant fixed cost of patch lint is one `ts.createProgram` over the
7
- * queue's patch-owned `.sys.mjs` files — tens of seconds on a large queue.
8
- * This controller builds that program at most ONCE per command invocation
7
+ * queue's patch-owned `.sys.mjs` files, tens of seconds on a large queue.
8
+ * This controller builds that program at most once per command invocation
9
9
  * (lazily, promise-memoised) and lets callers slice per-patch findings out of
10
10
  * the grouped result. Three levers keep the cost paid only when it buys
11
11
  * something:
12
12
  *
13
- * - **Lazy build**: nothing is built until the first cache miss asks.
14
- * - **Root scoping** (`rootScopePatches`): with `--patches <subset>` the
15
- * program's roots are only the subset's owned files; the full queue stays
13
+ * - Lazy build: nothing is built until the first cache miss asks.
14
+ * - Root scoping (`rootScopePatches`): with `--patches <subset>` the
15
+ * program's roots are only the subset's owned files. The full queue stays
16
16
  * resolvable, so cross-patch imports type-check identically while
17
17
  * unrelated files are never parsed.
18
- * - **Warm-run probe**: run-level ("global") checkJs findings come only from
19
- * a missing `typescript` package or an unreadable shim — never from the
20
- * built program — so an all-cache-hit run satisfies "warm never reports
21
- * less than cold" via `probeCheckJsGlobalIssues` instead of building
22
- * anything.
18
+ * - Warm-run probe: run-level ("global") checkJs findings come only from a
19
+ * missing `typescript` package or an unreadable shim, never from the built
20
+ * program, so an all-cache-hit run satisfies "warm never reports less than
21
+ * cold" via `probeCheckJsGlobalIssues` instead of building anything.
23
22
  */
24
23
  import { invokePatchLintCheckJsGrouped, probeCheckJsGlobalIssues, runCheckJsTestFilesGrouped, } from '../core/patch-lint-checkjs.js';
25
24
  import { isTestScriptFile, resolvePatchOwnedSysMjs, resolvePatchOwnedTestScripts, } from '../core/patch-lint-ownership.js';
@@ -52,7 +51,7 @@ export function buildPerRunCheckJs(projectRoot, paths, config, ctx, rootScopePat
52
51
  for (const f of files)
53
52
  resolutionSet.add(f);
54
53
  }
55
- // The subset's owned files, split by program kind; undefined = full queue.
54
+ // The subset's owned files, split by program kind. Undefined = full queue.
56
55
  let scopedRoots;
57
56
  if (rootScopePatches !== undefined) {
58
57
  scopedRoots = new Set();
@@ -63,9 +62,9 @@ export function buildPerRunCheckJs(projectRoot, paths, config, ctx, rootScopePat
63
62
  scopedRoots.add(f);
64
63
  }
65
64
  }
66
- // One build for the whole run: the queue-wide `.sys.mjs` program plus —
67
- // when `patchLint.checkJsTestFiles` is on — one small
68
- // script-scope program per patch-owned test file, merged by file.
65
+ // One build for the whole run: the queue-wide `.sys.mjs` program, plus
66
+ // (when `patchLint.checkJsTestFiles` is on) one small script-scope
67
+ // program per patch-owned test file, merged by file.
69
68
  const buildAll = async () => {
70
69
  const sys = await invokePatchLintCheckJsGrouped(paths.engine, resolvePatchOwnedSysMjs(new Set(), ctx), patchLint, projectRoot, scopedRoots);
71
70
  if (!testFilesEnabled)
@@ -77,7 +76,7 @@ export function buildPerRunCheckJs(projectRoot, paths, config, ctx, rootScopePat
77
76
  }
78
77
  return { byFile, global: [...sys.global, ...tests.global] };
79
78
  };
80
- // Memoise the *promise*, not the resolved value: under the bounded pool
79
+ // Memoise the promise rather than the resolved value: under the bounded pool
81
80
  // several patches can reach `getGrouped` before the first build resolves, and
82
81
  // `??=` on the promise (a synchronous expression) guarantees a single build.
83
82
  let groupedPromise;
@@ -1,7 +1,7 @@
1
1
  import type { PatchLintIssue, PatchMetadata } from '../types/commands/index.js';
2
2
  /**
3
3
  * Structural view of one per-patch lint outcome. Mirrors the relevant
4
- * fields of lint-per-patch's QueuedPatchResult without importing it —
4
+ * fields of lint-per-patch's QueuedPatchResult without importing it:
5
5
  * that module imports this one, and a type back-edge would trip the
6
6
  * dpdm cycle gate.
7
7
  */
@@ -14,8 +14,8 @@ export interface PerPatchReportResult {
14
14
  }
15
15
  /**
16
16
  * Writes the per-patch lint report JSON. Called after the per-patch
17
- * results are assembled in patch order; queue-level and policy findings
17
+ * results are assembled in patch order. Queue-level and policy findings
18
18
  * are patch-attributed by their `file`/`filename` fields upstream and
19
- * are NOT duplicated here — the report is the per-patch view.
19
+ * are not duplicated here. The report is the per-patch view.
20
20
  */
21
21
  export declare function writePerPatchLintReport(reportPath: string, subset: readonly PatchMetadata[], results: readonly PerPatchReportResult[]): Promise<void>;
@@ -2,11 +2,11 @@
2
2
  /**
3
3
  * Machine-readable per-patch lint report (`lint --per-patch --report
4
4
  * <path>`). One mechanism serves two observability gaps: consumers get each
5
- * patch's size metrics against the SAME thresholds the size rules fire on,
5
+ * patch's size metrics against the same thresholds the size rules fire on,
6
6
  * instead of mirroring `countNonBinaryDiffLines`, and lintIgnore-suppressed
7
7
  * issues stay visible with their measurements rather than vanishing.
8
8
  *
9
- * Helper module consumed by lint-per-patch.ts; no registrar is exported and
9
+ * Helper module consumed by lint-per-patch.ts. No registrar is exported and
10
10
  * none is wanted.
11
11
  */
12
12
  import { getPatchSizeThresholds, resolvePatchSizeTier, } from '../core/patch-lint.js';
@@ -15,9 +15,9 @@ import { info } from '../utils/logger.js';
15
15
  const LINT_REPORT_SCHEMA_VERSION = 1;
16
16
  /**
17
17
  * Writes the per-patch lint report JSON. Called after the per-patch
18
- * results are assembled in patch order; queue-level and policy findings
18
+ * results are assembled in patch order. Queue-level and policy findings
19
19
  * are patch-attributed by their `file`/`filename` fields upstream and
20
- * are NOT duplicated here — the report is the per-patch view.
20
+ * are not duplicated here. The report is the per-patch view.
21
21
  */
22
22
  export async function writePerPatchLintReport(reportPath, subset, results) {
23
23
  const patches = [];
@@ -27,9 +27,9 @@ export interface AggregateLintIgnoreResult {
27
27
  * attribute via `issue.file`, which is the offending site and is owned by
28
28
  * some patch.
29
29
  *
30
- * Multiple owners: an issue is dropped if **any** owning patch waived the
31
- * rule. Conservative — never adds new findings, only drops already-waived
32
- * ones.
30
+ * Multiple owners: an issue is dropped if any owning patch waived the
31
+ * rule. This is conservative: it never adds new findings, only drops
32
+ * already-waived ones.
33
33
  *
34
34
  * @param issues - Issues collected from the aggregate lint run.
35
35
  * @param ctx - Patch queue context used to attribute file → patch.