@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
@@ -1,12 +1,12 @@
1
1
  /**
2
2
  * Resolves a patch identifier to its manifest entry. Accepts:
3
3
  *
4
- * 1. An ordinal number (e.g. `2`) — matches `PatchMetadata.order`.
5
- * 2. A full filename with `.patch` suffix (e.g. `002-ui-foo.patch`) —
6
- * matches `PatchMetadata.filename`.
7
- * 3. A filename without the `.patch` suffix — the command appends it
4
+ * 1. An ordinal number (e.g. `2`), matching `PatchMetadata.order`.
5
+ * 2. A full filename with `.patch` suffix (e.g. `002-ui-foo.patch`),
6
+ * matching `PatchMetadata.filename`.
7
+ * 3. A filename without the `.patch` suffix. The command appends it
8
8
  * before matching (e.g. `002-ui-foo`).
9
- * 4. The manifest `name` field (e.g. `furnace-token-override`) — the short
9
+ * 4. The manifest `name` field (e.g. `furnace-token-override`), the short
10
10
  * logical handle the export workflow stamps onto the patch and the
11
11
  * natural identifier an operator keeps in their notes. The CLI help
12
12
  * says `<name>`, so rejecting it forces the operator to copy the full
@@ -22,14 +22,14 @@ export function resolvePatchIdentifier(identifier, patches) {
22
22
  const order = parseInt(identifier, 10);
23
23
  return patches.find((p) => p.order === order) ?? null;
24
24
  }
25
- // Filename lookup — try the input as-is first (covers both the
25
+ // Filename lookup: try the input as-is first (covers both the
26
26
  // full `.patch` form and a bare name, because `endsWith` treats the
27
27
  // bare form as a miss and falls through to the appended variant).
28
28
  const normalized = identifier.endsWith('.patch') ? identifier : `${identifier}.patch`;
29
29
  const byFilename = patches.find((p) => p.filename === normalized || p.filename === identifier);
30
30
  if (byFilename)
31
31
  return byFilename;
32
- // Name-field lookup — the short logical handle stamped into the
32
+ // Name-field lookup: the short logical handle stamped into the
33
33
  // manifest at export time. See function docstring.
34
34
  return patches.find((p) => p.name === identifier) ?? null;
35
35
  }
@@ -92,12 +92,12 @@ function validatePatchMetadata(data, index) {
92
92
  throw new Error(`patches[${index}].sourceEsrVersion must be a valid Firefox version string`);
93
93
  }
94
94
  const filesAffected = rec.stringArray('filesAffected');
95
- // Optional fields. These are easy to strip silently — an escape hatch
95
+ // Optional fields. These are easy to strip silently: an escape hatch
96
96
  // that round-trips only through test fixtures mocking
97
97
  // `loadPatchesManifest` looks fine while real operator edits to
98
98
  // `patches.json` are dropped on every load, so a patch relying on
99
99
  // `lintIgnore` to suppress a rule is quietly re-tripped the next time the
100
- // manifest validates. Preserve both `lintIgnore` and `tier` here; future
100
+ // manifest validates. Preserve both `lintIgnore` and `tier` here. Future
101
101
  // optional fields follow the same template.
102
102
  const lintIgnore = rec.optionalStringArray('lintIgnore');
103
103
  const rawTier = rec.raw('tier');
@@ -143,7 +143,7 @@ export function validatePatchesManifest(data) {
143
143
  if (!isObject(data)) {
144
144
  throw new Error('patches.json must be a JSON object');
145
145
  }
146
- // A manifest from a NEWER FireForge is not corrupt. The bare "version must
146
+ // A manifest from a newer FireForge is not corrupt. The bare "version must
147
147
  // be 1" this replaced sent the operator looking for damage in a file that
148
148
  // only needed a newer build to read it.
149
149
  const version = checkDocumentVersion(data, 'version', PATCHES_MANIFEST_VERSION);
@@ -1,7 +1,7 @@
1
1
  /**
2
- * Patches manifest — re-exports from focused sub-modules.
2
+ * Patches manifest: re-exports from focused sub-modules.
3
3
  *
4
- * Callers should continue to import from this module; the internal split
4
+ * Callers should continue to import from this module. The internal split
5
5
  * is an implementation detail.
6
6
  */
7
7
  export { type PatchManifestConsistencyIssue, rebuildPatchesManifest, recommendManifestRepair, validatePatchesManifestConsistency, } from './patch-manifest-consistency.js';
@@ -1,8 +1,8 @@
1
1
  // SPDX-License-Identifier: EUPL-1.2
2
2
  /**
3
- * Patches manifest — re-exports from focused sub-modules.
3
+ * Patches manifest: re-exports from focused sub-modules.
4
4
  *
5
- * Callers should continue to import from this module; the internal split
5
+ * Callers should continue to import from this module. The internal split
6
6
  * is an implementation detail.
7
7
  */
8
8
  export { rebuildPatchesManifest, recommendManifestRepair, validatePatchesManifestConsistency, } from './patch-manifest-consistency.js';
@@ -1,14 +1,25 @@
1
1
  /**
2
- * Pure parsing functions for extracting information from patch files. All
3
- * functions are synchronous and operate on string content.
2
+ * Renders a patch order as the zero-padded prefix used in filenames and in
3
+ * every message that names an order.
4
4
  *
5
- * This module is the ONE unified-diff walker in the codebase. Hand-rolled
6
- * `diff --git` walkers diverge in ways that matter: CRLF handling (a
7
- * CRLF-saved patch file silently fails target-file matching and
8
- * `\ No newline` detection on Windows), quoted-path support, and greedy path
9
- * captures that mis-split any path containing ` b/`. New diff-shaped parsing
10
- * must build on {@link parseDiffSections} rather than re-walking lines.
5
+ * Eleven call sites across `patch-policy`, `patch-export`, `export-flow`,
6
+ * `export-placement-policy` and `patch move-files` spelled this as
7
+ * `String(order).padStart(3, '0')`, so the padding width lived in eleven
8
+ * places while the filenames it has to agree with are produced in one.
9
+ * @param order - Numeric patch order.
10
+ * @param width - Prefix width. Defaults to the on-disk convention.
11
+ * @returns The zero-padded order, e.g. `007`.
11
12
  */
13
+ export declare function formatPatchOrder(order: number, width?: number): string;
14
+ /**
15
+ * Renders an inclusive order range the way `patchPolicy` diagnostics name it.
16
+ * @param range - Inclusive `from`/`to` order bounds.
17
+ * @returns The range label, e.g. `100-199`.
18
+ */
19
+ export declare function formatOrderRange(range: {
20
+ from: number;
21
+ to: number;
22
+ }): string;
12
23
  /**
13
24
  * Extracts the order number from a patch filename.
14
25
  * Expects format like "001-description.patch"
@@ -24,7 +35,7 @@ export declare function extractOrder(filename: string): number;
24
35
  * `Infinity` for a prefix-less filename, which sorts such a patch last and
25
36
  * is the right answer for a read: an unparseable name should not crash a
26
37
  * status listing. Persisting `Infinity` (or the `0` some call sites used to
27
- * fall back to) is a different matter — it puts an order in the manifest
38
+ * fall back to) is a different matter: it puts an order in the manifest
28
39
  * that no filename on disk agrees with, and the queue then applies in an
29
40
  * order the operator cannot see. Callers here have always just built or
30
41
  * looked up a real prefixed filename, so absence is a bug, not input.
@@ -41,7 +52,7 @@ export declare function requirePatchOrder(filename: string): number;
41
52
  export interface DiffGitHeader {
42
53
  /** Old-side (`a/`) path. */
43
54
  sourcePath: string;
44
- /** New-side (`b/`) path — the file the patch produces. */
55
+ /** New-side (`b/`) path: the file the patch produces. */
45
56
  targetPath: string;
46
57
  }
47
58
  /**
@@ -51,8 +62,8 @@ export interface DiffGitHeader {
51
62
  * (`diff --git "a/x y" "b/x y"`), and disambiguates the unquoted form for
52
63
  * paths that themselves contain ` b/`: for the overwhelmingly common
53
64
  * non-rename case the two paths are identical, so a symmetric split
54
- * (`a/<p> b/<p>`) is tried first — a greedy `a\/.+ b\/(.+)$` splits such
55
- * lines at the LAST ` b/` and returns a truncated path. Falls back to a
65
+ * (`a/<p> b/<p>`) is tried first: a greedy `a\/.+ b\/(.+)$` splits such
66
+ * lines at the last ` b/` and returns a truncated path. Falls back to a
56
67
  * non-greedy split for renames.
57
68
  *
58
69
  * @returns null when the line is not a diff --git header.
@@ -62,7 +73,7 @@ export declare function parseDiffGitHeader(line: string): DiffGitHeader | null;
62
73
  * One `diff --git` section of a unified diff, fully structured.
63
74
  */
64
75
  export interface DiffSection {
65
- /** New-side (`b/`) path — the file this section produces. */
76
+ /** New-side (`b/`) path: the file this section produces. */
66
77
  targetPath: string;
67
78
  /** Old-side (`a/`) path. */
68
79
  sourcePath: string;
@@ -72,21 +83,21 @@ export interface DiffSection {
72
83
  isDeletedFile: boolean;
73
84
  /**
74
85
  * True for binary sections (`GIT binary patch` or `Binary files … differ`).
75
- * Binary sections have no parseable hunks; text-oriented consumers must
86
+ * Binary sections have no parseable hunks. Text-oriented consumers must
76
87
  * refuse them rather than treat base85 lines starting with `+` as content.
77
88
  */
78
89
  isBinary: boolean;
79
90
  /**
80
- * True ONLY for `GIT binary patch` sections — the body carries a
91
+ * True only for `GIT binary patch` sections, whose body carries a
81
92
  * reconstructable literal/delta payload. False for `Binary files … differ`,
82
- * which records THAT the bytes changed but carries none of them and cannot
93
+ * which records that the bytes changed but carries none of them and cannot
83
94
  * be replayed by `git apply`.
84
95
  *
85
96
  * The distinction is not cosmetic: the stub form still carries a correct
86
97
  * `index <old>..<new>` line, so identity checks keyed on {@link indexNewHash}
87
98
  * alone happily conclude "the recorded bytes match the live file" for a body
88
99
  * that can no longer produce those bytes. Consumers deciding whether a patch
89
- * can RECREATE a file must read this flag, never `isBinary` plus a hash.
100
+ * can recreate a file must read this flag, never `isBinary` plus a hash.
90
101
  */
91
102
  hasBinaryDelta: boolean;
92
103
  /**
@@ -95,14 +106,14 @@ export interface DiffSection {
95
106
  * parseable index line (hand-written diffs, `Binary files … differ`).
96
107
  */
97
108
  indexOldHash?: string;
98
- /** New-side blob hash from the `index` line; see {@link indexOldHash}. */
109
+ /** New-side blob hash from the `index` line. See {@link indexOldHash}. */
99
110
  indexNewHash?: string;
100
111
  /** Parsed hunks, in file order. Empty for binary or metadata-only sections. */
101
112
  hunks: ParsedHunk[];
102
113
  }
103
114
  /**
104
- * Parses a unified diff into structured per-file sections — the single
105
- * shared walker every diff consumer builds on.
115
+ * Parses a unified diff into structured per-file sections. This is the
116
+ * single shared walker every diff consumer builds on.
106
117
  */
107
118
  export declare function parseDiffSections(diffContent: string): DiffSection[];
108
119
  /**
@@ -121,7 +132,7 @@ export declare function isNewFileInPatch(patchContent: string, targetFile: strin
121
132
  export declare function extractAffectedFiles(diffContent: string): string[];
122
133
  /**
123
134
  * A single parsed hunk. `noNewlineAtEndOld` / `noNewlineAtEndNew` track the
124
- * `` marker per side — the marker is a trailing
135
+ * `` marker per side. The marker is a trailing
125
136
  * annotation on the immediately preceding body line, and a `-` precedent
126
137
  * sets only the old-side flag, a `+` sets only the new-side flag, and a
127
138
  * context ` ` line sets both. Collapsing the two into one boolean makes the
@@ -4,13 +4,38 @@ import { assert } from '../utils/assert.js';
4
4
  * Pure parsing functions for extracting information from patch files. All
5
5
  * functions are synchronous and operate on string content.
6
6
  *
7
- * This module is the ONE unified-diff walker in the codebase. Hand-rolled
7
+ * This module is the one unified-diff walker in the codebase. Hand-rolled
8
8
  * `diff --git` walkers diverge in ways that matter: CRLF handling (a
9
9
  * CRLF-saved patch file silently fails target-file matching and
10
10
  * `\ No newline` detection on Windows), quoted-path support, and greedy path
11
11
  * captures that mis-split any path containing ` b/`. New diff-shaped parsing
12
12
  * must build on {@link parseDiffSections} rather than re-walking lines.
13
13
  */
14
+ /** Width of the zero-padded numeric prefix on a patch filename ("001-…"). */
15
+ const PATCH_ORDER_WIDTH = 3;
16
+ /**
17
+ * Renders a patch order as the zero-padded prefix used in filenames and in
18
+ * every message that names an order.
19
+ *
20
+ * Eleven call sites across `patch-policy`, `patch-export`, `export-flow`,
21
+ * `export-placement-policy` and `patch move-files` spelled this as
22
+ * `String(order).padStart(3, '0')`, so the padding width lived in eleven
23
+ * places while the filenames it has to agree with are produced in one.
24
+ * @param order - Numeric patch order.
25
+ * @param width - Prefix width. Defaults to the on-disk convention.
26
+ * @returns The zero-padded order, e.g. `007`.
27
+ */
28
+ export function formatPatchOrder(order, width = PATCH_ORDER_WIDTH) {
29
+ return String(order).padStart(width, '0');
30
+ }
31
+ /**
32
+ * Renders an inclusive order range the way `patchPolicy` diagnostics name it.
33
+ * @param range - Inclusive `from`/`to` order bounds.
34
+ * @returns The range label, e.g. `100-199`.
35
+ */
36
+ export function formatOrderRange(range) {
37
+ return `${formatPatchOrder(range.from)}-${formatPatchOrder(range.to)}`;
38
+ }
14
39
  /**
15
40
  * Extracts the order number from a patch filename.
16
41
  * Expects format like "001-description.patch"
@@ -32,7 +57,7 @@ export function extractOrder(filename) {
32
57
  * `Infinity` for a prefix-less filename, which sorts such a patch last and
33
58
  * is the right answer for a read: an unparseable name should not crash a
34
59
  * status listing. Persisting `Infinity` (or the `0` some call sites used to
35
- * fall back to) is a different matter — it puts an order in the manifest
60
+ * fall back to) is a different matter: it puts an order in the manifest
36
61
  * that no filename on disk agrees with, and the queue then applies in an
37
62
  * order the operator cannot see. Callers here have always just built or
38
63
  * looked up a real prefixed filename, so absence is a bug, not input.
@@ -58,8 +83,8 @@ function unquoteGitPath(quoted) {
58
83
  for (let i = 0; i < quoted.length; i++) {
59
84
  const ch = quoted[i];
60
85
  if (ch !== '\\') {
61
- // Plain character — may itself be multi-byte when the diff already
62
- // contains raw UTF-8; push its bytes.
86
+ // Plain character, which may itself be multi-byte when the diff already
87
+ // contains raw UTF-8. Push its bytes.
63
88
  const encoded = Buffer.from(quoted[i] ?? '', 'utf-8');
64
89
  for (const b of encoded)
65
90
  bytes.push(b);
@@ -87,8 +112,8 @@ function unquoteGitPath(quoted) {
87
112
  * (`diff --git "a/x y" "b/x y"`), and disambiguates the unquoted form for
88
113
  * paths that themselves contain ` b/`: for the overwhelmingly common
89
114
  * non-rename case the two paths are identical, so a symmetric split
90
- * (`a/<p> b/<p>`) is tried first — a greedy `a\/.+ b\/(.+)$` splits such
91
- * lines at the LAST ` b/` and returns a truncated path. Falls back to a
115
+ * (`a/<p> b/<p>`) is tried first: a greedy `a\/.+ b\/(.+)$` splits such
116
+ * lines at the last ` b/` and returns a truncated path. Falls back to a
92
117
  * non-greedy split for renames.
93
118
  *
94
119
  * @returns null when the line is not a diff --git header.
@@ -128,10 +153,10 @@ export function parseDiffGitHeader(line) {
128
153
  * Splits raw diff content into lines, tolerating CRLF-saved patch files.
129
154
  *
130
155
  * The distinction matters: a patch file saved with CRLF endings (Windows
131
- * editor, `core.autocrlf` checkout) has `\r` on EVERY line including
132
- * structural ones — strip it, or headers, `@@` lines and the
156
+ * editor, `core.autocrlf` checkout) has `\r` on every line including
157
+ * structural ones. Strip it, or headers, `@@` lines and the
133
158
  * `` marker all fail to match. But an LF patch
134
- * of a file whose CONTENT is CRLF has `\r` only on payload lines, where it
159
+ * of a file whose content is CRLF has `\r` only on payload lines, where it
135
160
  * is significant and must be preserved. Detect the former by checking the
136
161
  * structural lines themselves for a trailing `\r`.
137
162
  */
@@ -145,8 +170,8 @@ function splitDiffLines(diffContent) {
145
170
  return lines.map((line) => (line.endsWith('\r') ? line.slice(0, -1) : line));
146
171
  }
147
172
  /**
148
- * Parses a unified diff into structured per-file sections — the single
149
- * shared walker every diff consumer builds on.
173
+ * Parses a unified diff into structured per-file sections. This is the
174
+ * single shared walker every diff consumer builds on.
150
175
  */
151
176
  export function parseDiffSections(diffContent) {
152
177
  const sections = [];
@@ -198,7 +223,7 @@ export function parseDiffSections(diffContent) {
198
223
  continue;
199
224
  }
200
225
  // `git diff --binary` always records full blob hashes here (git
201
- // apply requires them); text sections carry abbreviated ones. The
226
+ // apply requires them). Text sections carry abbreviated ones. The
202
227
  // hashes let binary sections be compared by identity when their
203
228
  // payload cannot be applied as text.
204
229
  const indexMatch = /^index ([0-9a-f]{7,64})\.\.([0-9a-f]{7,64})(?: \d{6})?$/.exec(line);
@@ -229,7 +254,7 @@ export function parseDiffSections(diffContent) {
229
254
  if (line === '\') {
230
255
  // The marker is an annotation on the immediately preceding body
231
256
  // line. Peek the last collected line to decide which side(s) the
232
- // annotation applies to — a single boolean cannot represent the
257
+ // annotation applies to. A single boolean cannot represent the
233
258
  // asymmetric case where only one side lacks the trailing newline.
234
259
  const previous = currentHunk.lines[currentHunk.lines.length - 1] ?? '';
235
260
  if (previous.startsWith('-')) {
@@ -242,12 +267,12 @@ export function parseDiffSections(diffContent) {
242
267
  // Context line: present in both sides, so the trailing-newline
243
268
  // absence applies to both. This is rare (it only happens when
244
269
  // the hunk ends on an unchanged line that itself is the last
245
- // line of the file) but real — git emits it.
270
+ // line of the file) but real: git emits it.
246
271
  currentHunk.noNewlineAtEndOld = true;
247
272
  currentHunk.noNewlineAtEndNew = true;
248
273
  }
249
274
  // If the marker appears with no preceding body line (malformed
250
- // diff), leave both flags false — the downstream apply logic
275
+ // diff), leave both flags false. The downstream apply logic
251
276
  // will still produce a defined result.
252
277
  continue;
253
278
  }
@@ -11,6 +11,7 @@ import { InvalidArgumentError } from '../errors/base.js';
11
11
  import { warn } from '../utils/logger.js';
12
12
  import { PATCH_CATEGORIES } from '../utils/validation.js';
13
13
  import { rewriteStagedDependencyOwners } from './patch-manifest-io.js';
14
+ import { formatOrderRange, formatPatchOrder } from './patch-parse.js';
14
15
  /** Default patch filename contract used when a policy omits `filenamePattern`. */
15
16
  const DEFAULT_PATCH_POLICY_FILENAME_PATTERN = '^(?<order>\\d{3})-(?<category>[a-z][a-z0-9-]*)-(?<slug>[a-z0-9-]+)\\.patch$';
16
17
  function policy(config) {
@@ -19,13 +20,6 @@ function policy(config) {
19
20
  function mutationMode(config) {
20
21
  return policy(config)?.mutationMode ?? 'error';
21
22
  }
22
- function issueSeverity(config) {
23
- return mutationMode(config) === 'warn' ? 'warning' : 'error';
24
- }
25
- /** Returns true when the loaded config includes an opt-in patch policy. */
26
- function hasPatchPolicy(config) {
27
- return policy(config) !== undefined;
28
- }
29
23
  /** Returns valid categories for prompts and CLI validation under the config. */
30
24
  export function getPatchPolicyCategories(config) {
31
25
  const cfg = policy(config);
@@ -42,9 +36,6 @@ export function isCategoryAllowedByConfig(config, category) {
42
36
  return PATCH_CATEGORIES.includes(category);
43
37
  return cfg.ranges.some((range) => range.category === category);
44
38
  }
45
- function rangeLabel(range) {
46
- return `${String(range.from).padStart(3, '0')}-${String(range.to).padStart(3, '0')}`;
47
- }
48
39
  /**
49
40
  * Human-readable label for a category's configured ranges, e.g. `300-399`.
50
41
  * Exported for the forward-import hint, which must render the
@@ -54,7 +45,7 @@ export function categoryRangeLabel(ranges, category) {
54
45
  const matches = ranges.filter((range) => range.category === category);
55
46
  if (matches.length === 0)
56
47
  return '(no configured range)';
57
- return matches.map(rangeLabel).join(', ');
48
+ return matches.map(formatOrderRange).join(', ');
58
49
  }
59
50
  function reservedRangeForOrder(cfg, order) {
60
51
  return cfg.reservedRanges?.find((range) => order >= range.from && order <= range.to) ?? null;
@@ -73,9 +64,6 @@ export function categoryRangeForOrder(cfg, category, order) {
73
64
  function anyRangeForOrder(cfg, order) {
74
65
  return cfg.ranges.find((range) => order >= range.from && order <= range.to) ?? null;
75
66
  }
76
- function compileFilenamePattern(cfg) {
77
- return new RegExp(cfg.filenamePattern ?? DEFAULT_PATCH_POLICY_FILENAME_PATTERN);
78
- }
79
67
  function parseFilenameWithPolicy(cfg, patch, severity) {
80
68
  if (cfg.filenamePattern === undefined) {
81
69
  const defaultMatch = /^(?<order>\d{3})-(?<rest>[a-z0-9-]+)\.patch$/.exec(patch.filename);
@@ -117,7 +105,7 @@ function parseFilenameWithPolicy(cfg, patch, severity) {
117
105
  }
118
106
  return { order: Number.parseInt(orderRaw, 10), category };
119
107
  }
120
- const pattern = compileFilenamePattern(cfg);
108
+ const pattern = new RegExp(cfg.filenamePattern ?? DEFAULT_PATCH_POLICY_FILENAME_PATTERN);
121
109
  const match = pattern.exec(patch.filename);
122
110
  if (!match) {
123
111
  return [
@@ -188,7 +176,7 @@ function evaluatePatchMetadata(cfg, patch, severity) {
188
176
  code: 'reserved-range',
189
177
  filename: patch.filename,
190
178
  severity,
191
- message: `${patch.filename} is in reserved range ${rangeLabel(reserved)}. ` +
179
+ message: `${patch.filename} is in reserved range ${formatOrderRange(reserved)}. ` +
192
180
  'Reserved ranges require an exact patchPolicy.reservedRanges[].allowed filename exception.',
193
181
  });
194
182
  return issues;
@@ -198,7 +186,7 @@ function evaluatePatchMetadata(cfg, patch, severity) {
198
186
  code: 'reserved-documentation',
199
187
  filename: patch.filename,
200
188
  severity,
201
- message: `${patch.filename} is allowlisted for reserved range ${rangeLabel(reserved)}, ` +
189
+ message: `${patch.filename} is allowlisted for reserved range ${formatOrderRange(reserved)}, ` +
202
190
  'but the allowlist entry must include either "adr" or "documentation".',
203
191
  });
204
192
  }
@@ -210,7 +198,7 @@ function evaluatePatchMetadata(cfg, patch, severity) {
210
198
  code: 'reserved-files',
211
199
  filename: patch.filename,
212
200
  severity,
213
- message: `${patch.filename} is allowlisted for reserved range ${rangeLabel(reserved)}, ` +
201
+ message: `${patch.filename} is allowlisted for reserved range ${formatOrderRange(reserved)}, ` +
214
202
  `but touches file(s) outside its reserved allowlist: ${extraFiles.join(', ')}.`,
215
203
  });
216
204
  }
@@ -222,8 +210,8 @@ function evaluatePatchMetadata(cfg, patch, severity) {
222
210
  const owner = anyRangeForOrder(cfg, patch.order);
223
211
  const expected = categoryRangeLabel(cfg.ranges, patch.category);
224
212
  const actual = owner !== null
225
- ? `${String(patch.order).padStart(3, '0')} is configured for ${owner.category} (${rangeLabel(owner)})`
226
- : `${String(patch.order).padStart(3, '0')} is outside all configured ranges`;
213
+ ? `${formatPatchOrder(patch.order)} is configured for ${owner.category} (${formatOrderRange(owner)})`
214
+ : `${formatPatchOrder(patch.order)} is outside all configured ranges`;
227
215
  issues.push({
228
216
  code: 'category-range',
229
217
  filename: patch.filename,
@@ -262,10 +250,10 @@ function evaluateGaps(cfg, patches, severity) {
262
250
  if (missing.length > 0) {
263
251
  issues.push({
264
252
  code: 'numeric-gap',
265
- filename: `${range.category}:${rangeLabel(range)}`,
253
+ filename: `${range.category}:${formatOrderRange(range)}`,
266
254
  severity,
267
- message: `${range.category} range ${rangeLabel(range)} has numeric gap(s): ` +
268
- missing.map((order) => String(order).padStart(3, '0')).join(', ') +
255
+ message: `${range.category} range ${formatOrderRange(range)} has numeric gap(s): ` +
256
+ missing.map((order) => formatPatchOrder(order)).join(', ') +
269
257
  '. patchPolicy.allowGaps is false.',
270
258
  });
271
259
  }
@@ -286,9 +274,9 @@ function evaluateOrderCollisions(patches, severity) {
286
274
  const filenames = matches.map((patch) => patch.filename).sort((a, b) => a.localeCompare(b));
287
275
  issues.push({
288
276
  code: 'order-collision',
289
- filename: String(order).padStart(3, '0'),
277
+ filename: formatPatchOrder(order),
290
278
  severity,
291
- message: `patchPolicy requires unique numeric orders; order ${String(order).padStart(3, '0')} ` +
279
+ message: `patchPolicy requires unique numeric orders; order ${formatPatchOrder(order)} ` +
292
280
  `is used by: ${filenames.join(', ')}.`,
293
281
  });
294
282
  }
@@ -299,7 +287,7 @@ export function evaluatePatchPolicy(config, manifest) {
299
287
  const cfg = policy(config);
300
288
  if (!cfg)
301
289
  return [];
302
- const severity = issueSeverity(config);
290
+ const severity = mutationMode(config) === 'warn' ? 'warning' : 'error';
303
291
  const issues = manifest.patches.flatMap((patch) => evaluatePatchMetadata(cfg, patch, severity));
304
292
  issues.push(...evaluateOrderCollisions(manifest.patches, severity));
305
293
  issues.push(...evaluateGaps(cfg, manifest.patches, severity));
@@ -335,7 +323,7 @@ export function applyRenameMapToManifest(manifest, renameMap) {
335
323
  }
336
324
  /** Enforces patch policy according to the configured mutation mode. */
337
325
  export function enforcePatchPolicy(input) {
338
- if (!hasPatchPolicy(input.config))
326
+ if (policy(input.config) === undefined)
339
327
  return;
340
328
  const issues = evaluatePatchPolicy(input.config, input.manifest);
341
329
  if (issues.length === 0)
@@ -8,7 +8,7 @@
8
8
  * clean" for the broken queue. This module provides a pattern-scoped scan so
9
9
  * `verify` can cross-check registrations against available file bodies.
10
10
  *
11
- * The scan is deliberately narrow: it only matches component-shaped
11
+ * The scan is narrow on purpose: it only matches component-shaped
12
12
  * references (widget tag names, locale fluent names). Unrelated jar.mn or
13
13
  * customElements.js edits pass through without spurious warnings.
14
14
  */
@@ -28,11 +28,11 @@ export interface PatchRegistrationReference {
28
28
  }
29
29
  /**
30
30
  * Walks a unified-diff patch body and returns the set of
31
- * component-shaped engine paths that the patch ADDS a registration for.
31
+ * component-shaped engine paths that the patch adds a registration for.
32
32
  *
33
- * Returns the empty array when no registration hunks are present OR
33
+ * Returns the empty array when no registration hunks are present, or
34
34
  * when the registration hunks do not mention any component-shaped
35
- * paths — that leaves the scan silent on the vast majority of patches
35
+ * paths. That leaves the scan silent on the vast majority of patches
36
36
  * (branding tweaks, behavioural fixes, module additions) so it only
37
37
  * fires when a furnace-managed component is being newly registered.
38
38
  *
@@ -9,7 +9,7 @@
9
9
  * clean" for the broken queue. This module provides a pattern-scoped scan so
10
10
  * `verify` can cross-check registrations against available file bodies.
11
11
  *
12
- * The scan is deliberately narrow: it only matches component-shaped
12
+ * The scan is narrow on purpose: it only matches component-shaped
13
13
  * references (widget tag names, locale fluent names). Unrelated jar.mn or
14
14
  * customElements.js edits pass through without spurious warnings.
15
15
  */
@@ -23,11 +23,11 @@ const REGISTRATION_FILE_PATHS = new Set([
23
23
  ]);
24
24
  /**
25
25
  * Walks a unified-diff patch body and returns the set of
26
- * component-shaped engine paths that the patch ADDS a registration for.
26
+ * component-shaped engine paths that the patch adds a registration for.
27
27
  *
28
- * Returns the empty array when no registration hunks are present OR
28
+ * Returns the empty array when no registration hunks are present, or
29
29
  * when the registration hunks do not mention any component-shaped
30
- * paths — that leaves the scan silent on the vast majority of patches
30
+ * paths. That leaves the scan silent on the vast majority of patches
31
31
  * (branding tweaks, behavioural fixes, module additions) so it only
32
32
  * fires when a furnace-managed component is being newly registered.
33
33
  *
@@ -38,7 +38,7 @@ export function collectPatchRegistrationReferences(patchBody) {
38
38
  return [];
39
39
  const refs = [];
40
40
  // Key the file state off the `b/` path because that names the target
41
- // side and is stable against renames. Only real hunk adds count —
41
+ // side and is stable against renames. Only real hunk adds count.
42
42
  // parseDiffSections has already filtered out header/metadata lines.
43
43
  for (const section of parseDiffSections(patchBody)) {
44
44
  if (!REGISTRATION_FILE_PATHS.has(section.targetPath))
@@ -59,7 +59,7 @@ export function collectPatchRegistrationReferences(patchBody) {
59
59
  }
60
60
  /**
61
61
  * Per-source extractor. Each registration file has a distinct syntactic
62
- * shape; we scope the match to that file so a jar.mn regex does not
62
+ * shape. We scope the match to that file so a jar.mn regex does not
63
63
  * accidentally match a customElements.js line.
64
64
  */
65
65
  function extractTargetPathsFromRegistrationLine(sourceFile, added) {
@@ -68,7 +68,7 @@ function extractTargetPathsFromRegistrationLine(sourceFile, added) {
68
68
  // ` content/global/elements/moz-qa-panel.mjs (widgets/moz-qa-panel/moz-qa-panel.mjs)`
69
69
  // The parenthesised second half is the repo-relative path Firefox's
70
70
  // packaging system reads. Widget registrations always live under
71
- // `widgets/<tag>/<file>` — the enclosing tree is
71
+ // `widgets/<tag>/<file>`, and the enclosing tree is
72
72
  // `toolkit/content/widgets/`. Reconstruct the engine-relative
73
73
  // target path so callers can check it against patch bodies.
74
74
  const widgetMatch = /\(\s*(widgets\/[^\s)]+)\s*\)/.exec(added);
@@ -1,8 +1,6 @@
1
1
  import type { PatchMetadata } from '../types/commands/index.js';
2
- import type { FirefoxConfig, FirefoxProduct } from '../types/config.js';
2
+ import type { FirefoxConfig } from '../types/config.js';
3
3
  /** Metadata fields stamped on new or refreshed patch entries. */
4
4
  export declare function buildPatchSourceMetadata(firefox: Pick<FirefoxConfig, 'product' | 'version'>): Pick<PatchMetadata, 'sourceEsrVersion' | 'sourceProduct' | 'sourceVersion'>;
5
5
  /** Backward-compatible source version reader for legacy manifests. */
6
6
  export declare function getPatchSourceVersion(patch: Pick<PatchMetadata, 'sourceEsrVersion' | 'sourceVersion'>): string;
7
- /** Backward-compatible source product reader for legacy manifests. */
8
- export declare function getPatchSourceProduct(patch: Pick<PatchMetadata, 'sourceProduct'>): FirefoxProduct | undefined;
@@ -10,7 +10,3 @@ export function buildPatchSourceMetadata(firefox) {
10
10
  export function getPatchSourceVersion(patch) {
11
11
  return patch.sourceVersion ?? patch.sourceEsrVersion;
12
12
  }
13
- /** Backward-compatible source product reader for legacy manifests. */
14
- export function getPatchSourceProduct(patch) {
15
- return patch.sourceProduct;
16
- }
@@ -5,29 +5,29 @@
5
5
  /**
6
6
  * Extracts the complete file content from a "new file" patch given a raw
7
7
  * diff string already in memory. Callers with a patch file path should
8
- * prefer {@link extractNewFileContent}; this helper exists for code paths
8
+ * prefer {@link extractNewFileContent}. This helper exists for code paths
9
9
  * that already hold the diff (e.g. the in-flight export planner) and do
10
10
  * not want to round-trip through the filesystem.
11
11
  *
12
12
  * @param diff - Raw unified-diff content
13
13
  * @param targetFile - Optional target file to scope extraction to
14
14
  * @returns The file content that the patch would create
15
- * @throws PatchError for binary sections — a `GIT binary patch` payload is
15
+ * @throws PatchError for binary sections. A `GIT binary patch` payload is
16
16
  * base85 (whose alphabet includes `+`), so "extract the + lines" would
17
17
  * silently write garbage text over a binary target. Callers must treat
18
18
  * binary new-file conflicts as unresolvable rather than auto-resolving.
19
19
  */
20
20
  export declare function extractNewFileContentFromDiff(diff: string, targetFile?: string): string;
21
21
  /**
22
- * Projects every TEXT new file a diff creates into a path → content map, for
22
+ * Projects every text new file a diff creates into a path → content map, for
23
23
  * the cross-patch lint projections that build a synthetic patch-queue entry.
24
24
  *
25
- * Binary new files are SKIPPED rather than refused. The map feeds only the
26
- * forward-import rule, which scans content for import statements — a binary
27
- * blob authors none, so omitting it contributes exactly what including it
28
- * would. Refusing instead (which is what
25
+ * Binary new files are skipped rather than refused. The map feeds only the
26
+ * forward-import rule, which scans content for import statements, and a
27
+ * binary blob authors none, so omitting it contributes exactly what
28
+ * including it would. Refusing instead (which is what
29
29
  * {@link extractNewFileContentFromDiff} correctly does for a caller that
30
- * named ONE file) made vendoring a new binary impossible: every projection
30
+ * named one file) made vendoring a new binary impossible: every projection
31
31
  * site fed it every detected new file, so `export --order`, `re-export
32
32
  * --scan --scan-file`, `patch move-files-into` and `patch split` all died on
33
33
  * a file the export half had just written a valid `GIT binary patch` for.
@@ -48,14 +48,6 @@ export declare function buildNewFileTextProjection(diff: string): Map<string, st
48
48
  * @returns The file content that the patch would create
49
49
  */
50
50
  export declare function extractNewFileContent(patchPath: string, targetFile?: string): Promise<string>;
51
- /**
52
- * Applies a patch's changes to content.
53
- * @param content - Original content (null for new files)
54
- * @param patchPath - Path to the patch file
55
- * @param targetFile - The file path within the patch
56
- * @returns Modified content
57
- */
58
- export declare function applyPatchToContent(content: string | null, patchPath: string, targetFile: string): Promise<string>;
59
51
  /**
60
52
  * Applies an already-read patch body to content. Batched callers that hold
61
53
  * many (patch, file) pairs use this to read each patch body once instead of