@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
@@ -2,8 +2,8 @@
2
2
  * xpcshell test-file registration. Without it, xpcshell test files (e.g.
3
3
  * `<module-dir>/test/unit/test_*.js`) are rejected by `fireforge register`
4
4
  * as "Unknown file pattern". This writer inserts the `["test_*.js"]` section
5
- * into the directory's `xpcshell.toml` (alphabetically, idempotently) and —
6
- * with `--create-manifest` — creates the manifest and wires
5
+ * into the directory's `xpcshell.toml` (alphabetically, idempotently). With
6
+ * `--create-manifest` it also creates the manifest and wires
7
7
  * `XPCSHELL_TESTS_MANIFESTS` into the nearest moz.build.
8
8
  */
9
9
  import type { RegisterResult } from './register-result.js';
@@ -3,8 +3,8 @@
3
3
  * xpcshell test-file registration. Without it, xpcshell test files (e.g.
4
4
  * `<module-dir>/test/unit/test_*.js`) are rejected by `fireforge register`
5
5
  * as "Unknown file pattern". This writer inserts the `["test_*.js"]` section
6
- * into the directory's `xpcshell.toml` (alphabetically, idempotently) and —
7
- * with `--create-manifest` — creates the manifest and wires
6
+ * into the directory's `xpcshell.toml` (alphabetically, idempotently). With
7
+ * `--create-manifest` it also creates the manifest and wires
8
8
  * `XPCSHELL_TESTS_MANIFESTS` into the nearest moz.build.
9
9
  */
10
10
  import { join } from 'node:path';
@@ -4,31 +4,31 @@
4
4
  * A run log is a complete copy of mach's output, and mach echoes its
5
5
  * environment in places (configure summaries, `mach env`, harness
6
6
  * diagnostics that print the command line). The terminal already showed
7
- * every byte to the operator who ran it; the file, by contrast, is retained
7
+ * every byte to the operator who ran it. The file, by contrast, is retained
8
8
  * twenty deep and gets attached to bug reports. So the file gets a narrow
9
9
  * masking pass and the terminal does not.
10
10
  *
11
- * Deliberately minimal and pattern-based — see {@link redactRunLogText} for
12
- * the exact contract. It is a seatbelt against the common accidental leak,
13
- * not a guarantee that a log is free of secrets.
11
+ * Minimal and pattern-based. See {@link redactRunLogText} for the exact
12
+ * contract. It is a seatbelt against the common accidental leak, not a
13
+ * guarantee that a log is free of secrets.
14
14
  */
15
15
  /**
16
16
  * Masks the obvious secret shapes in run-log text, line by line.
17
17
  *
18
18
  * Redacted:
19
19
  * - the value of an env-style assignment `KEY=value` whose KEY matches
20
- * `/(TOKEN|SECRET|PASSWORD|PASSWD|API_KEY|AUTH)/i` — the value up to the
21
- * next whitespace, or a whole quoted string — becomes `KEY=<redacted>`;
22
- * the `--flag=value` and `-DNAME=value` spellings of the same shape are
23
- * covered (`--password=x` → `--password=<redacted>`);
20
+ * `/(TOKEN|SECRET|PASSWORD|PASSWD|API_KEY|AUTH)/i`. The value up to the
21
+ * next whitespace, or a whole quoted string, becomes `KEY=<redacted>`.
22
+ * The `--flag=value` and `-DNAME=value` spellings of the same shape are
23
+ * covered (`--password=x` → `--password=<redacted>`).
24
24
  * - the credential of an `Authorization:` header (`Bearer`, `Basic` and
25
- * `Token` schemes keep the scheme word; anything else masks the whole
26
- * value).
25
+ * `Token` schemes keep the scheme word, and anything else masks the
26
+ * whole value).
27
27
  *
28
- * NOT redacted: secrets that appear without one of those key names or
28
+ * Not redacted: secrets that appear without one of those key names or
29
29
  * headers (a bare token in a URL query string, a space-separated
30
30
  * `--password foo` CLI argument, JSON `"token": "..."` fields, cookies).
31
- * Line structure and every other byte pass through unchanged; `\n`, `\r\n`
31
+ * Line structure and every other byte pass through unchanged. `\n`, `\r\n`
32
32
  * and lone `\r` all delimit lines, so carriage-return-repainted progress
33
33
  * output is masked per repaint.
34
34
  *
@@ -5,13 +5,13 @@
5
5
  * A run log is a complete copy of mach's output, and mach echoes its
6
6
  * environment in places (configure summaries, `mach env`, harness
7
7
  * diagnostics that print the command line). The terminal already showed
8
- * every byte to the operator who ran it; the file, by contrast, is retained
8
+ * every byte to the operator who ran it. The file, by contrast, is retained
9
9
  * twenty deep and gets attached to bug reports. So the file gets a narrow
10
10
  * masking pass and the terminal does not.
11
11
  *
12
- * Deliberately minimal and pattern-based — see {@link redactRunLogText} for
13
- * the exact contract. It is a seatbelt against the common accidental leak,
14
- * not a guarantee that a log is free of secrets.
12
+ * Minimal and pattern-based. See {@link redactRunLogText} for the exact
13
+ * contract. It is a seatbelt against the common accidental leak, not a
14
+ * guarantee that a log is free of secrets.
15
15
  */
16
16
  /** Env-style keys whose assigned value is masked. */
17
17
  const SECRET_KEY_PATTERN = /(TOKEN|SECRET|PASSWORD|PASSWD|API_KEY|AUTH)/i;
@@ -21,8 +21,8 @@ const SECRET_KEY_PATTERN = /(TOKEN|SECRET|PASSWORD|PASSWD|API_KEY|AUTH)/i;
21
21
  * the assignment anchored at a token boundary so `x.y=z` is not split
22
22
  * mid-token. A hyphen IS a boundary: mach and configure echo their argv, so
23
23
  * `--token=…`, `--password=…` and `-DAUTH_TOKEN=…` are exactly the forms a
24
- * retained log would otherwise carry verbatim (the lead keeps the dash; the
25
- * key is what follows it). Empty values are left alone (nothing to hide).
24
+ * retained log would otherwise carry verbatim (the lead keeps the dash, and
25
+ * the key is what follows it). Empty values are left alone (nothing to hide).
26
26
  */
27
27
  const ENV_ASSIGNMENT_PATTERN = /(^|[\s"'([{,;-])([A-Za-z_][A-Za-z0-9_]*)=("(?:[^"\\]|\\.)*"|'[^']*'|[^\s"',;)\]}]+)/g;
28
28
  /** `Authorization: <scheme> <credential>` (scheme optional) in HTTP dumps. */
@@ -39,18 +39,18 @@ function redactLine(line) {
39
39
  *
40
40
  * Redacted:
41
41
  * - the value of an env-style assignment `KEY=value` whose KEY matches
42
- * `/(TOKEN|SECRET|PASSWORD|PASSWD|API_KEY|AUTH)/i` — the value up to the
43
- * next whitespace, or a whole quoted string — becomes `KEY=<redacted>`;
44
- * the `--flag=value` and `-DNAME=value` spellings of the same shape are
45
- * covered (`--password=x` → `--password=<redacted>`);
42
+ * `/(TOKEN|SECRET|PASSWORD|PASSWD|API_KEY|AUTH)/i`. The value up to the
43
+ * next whitespace, or a whole quoted string, becomes `KEY=<redacted>`.
44
+ * The `--flag=value` and `-DNAME=value` spellings of the same shape are
45
+ * covered (`--password=x` → `--password=<redacted>`).
46
46
  * - the credential of an `Authorization:` header (`Bearer`, `Basic` and
47
- * `Token` schemes keep the scheme word; anything else masks the whole
48
- * value).
47
+ * `Token` schemes keep the scheme word, and anything else masks the
48
+ * whole value).
49
49
  *
50
- * NOT redacted: secrets that appear without one of those key names or
50
+ * Not redacted: secrets that appear without one of those key names or
51
51
  * headers (a bare token in a URL query string, a space-separated
52
52
  * `--password foo` CLI argument, JSON `"token": "..."` fields, cookies).
53
- * Line structure and every other byte pass through unchanged; `\n`, `\r\n`
53
+ * Line structure and every other byte pass through unchanged. `\n`, `\r\n`
54
54
  * and lone `\r` all delimit lines, so carriage-return-repainted progress
55
55
  * output is masked per repaint.
56
56
  *
@@ -60,8 +60,8 @@ function redactLine(line) {
60
60
  export function redactRunLogText(text) {
61
61
  if (text.length === 0)
62
62
  return text;
63
- // Split with a capturing group so the terminators survive the round trip;
64
- // odd indices are the terminators themselves.
63
+ // Split with a capturing group so the terminators survive the round trip.
64
+ // Odd indices are the terminators themselves.
65
65
  return text
66
66
  .split(/(\r\n|\n|\r)/)
67
67
  .map((part, index) => (index % 2 === 0 ? redactLine(part) : part))
@@ -2,19 +2,19 @@
2
2
  * Per-run output logs under `.fireforge/logs/`.
3
3
  *
4
4
  * A run's diagnosis used to exist in exactly one place: the terminal. Piping
5
- * through `tail`/`grep` — the ergonomic default when output is long — keeps
6
- * the summary and discards the `TEST-UNEXPECTED-FAIL` lines that say WHAT
5
+ * through `tail`/`grep`, the ergonomic default when output is long, keeps
6
+ * the summary and discards the `TEST-UNEXPECTED-FAIL` lines that say what
7
7
  * broke, and it launders the exit code besides. The operator rule ("never
8
8
  * pipe a run") was written down three times downstream and broken after each
9
- * writing, which is the tell that it is not an operator problem: the tool is
10
- * the only party that can make the log survive the mistake.
9
+ * writing, so this is not an operator problem: the tool is the only party
10
+ * that can make the log survive the mistake.
11
11
  *
12
12
  * So `test` and `build` write their own complete copy as they stream, and the
13
13
  * `FIREFORGE-VERDICT:` line names the path. A piped, truncated, or
14
14
  * backgrounded run then still leaves a re-readable artifact.
15
15
  *
16
- * Everything here is BEST-EFFORT by construction. A log is a diagnostic aid;
17
- * a run must never fail because one could not be opened, written, or pruned.
16
+ * Everything here is best-effort. A log is a diagnostic aid, and a run must
17
+ * never fail because one could not be opened, written, or pruned.
18
18
  * Every entry point swallows its errors and degrades to "no log", which is
19
19
  * exactly the behaviour that existed before this module.
20
20
  */
@@ -24,7 +24,7 @@ export interface RunLog {
24
24
  path: string;
25
25
  /**
26
26
  * Appends output. Complete lines pass through {@link redactRunLogText}
27
- * before hitting disk; a trailing partial line is held until its newline
27
+ * before hitting disk. A trailing partial line is held until its newline
28
28
  * arrives (or until `close`). Silently drops on any stream error.
29
29
  */
30
30
  write: (chunk: string) => void;
@@ -59,10 +59,10 @@ export declare function writeToActiveRunLog(chunk: string): void;
59
59
  */
60
60
  export declare function closeActiveRunLog(): Promise<void>;
61
61
  /**
62
- * A writable that forwards to `base` AND to the active run log.
62
+ * A writable that forwards to `base` and to the active run log.
63
63
  *
64
64
  * Used by the stdio-inheriting capture path, whose collectors take a mirror
65
- * stream rather than per-chunk callbacks — so the tee reuses the mirror the
65
+ * stream rather than per-chunk callbacks, so the tee reuses the mirror the
66
66
  * exec layer already supports instead of growing a second hook.
67
67
  *
68
68
  * @param base - The stream to forward to (normally `process.stdout`)
@@ -3,19 +3,19 @@
3
3
  * Per-run output logs under `.fireforge/logs/`.
4
4
  *
5
5
  * A run's diagnosis used to exist in exactly one place: the terminal. Piping
6
- * through `tail`/`grep` — the ergonomic default when output is long — keeps
7
- * the summary and discards the `TEST-UNEXPECTED-FAIL` lines that say WHAT
6
+ * through `tail`/`grep`, the ergonomic default when output is long, keeps
7
+ * the summary and discards the `TEST-UNEXPECTED-FAIL` lines that say what
8
8
  * broke, and it launders the exit code besides. The operator rule ("never
9
9
  * pipe a run") was written down three times downstream and broken after each
10
- * writing, which is the tell that it is not an operator problem: the tool is
11
- * the only party that can make the log survive the mistake.
10
+ * writing, so this is not an operator problem: the tool is the only party
11
+ * that can make the log survive the mistake.
12
12
  *
13
13
  * So `test` and `build` write their own complete copy as they stream, and the
14
14
  * `FIREFORGE-VERDICT:` line names the path. A piped, truncated, or
15
15
  * backgrounded run then still leaves a re-readable artifact.
16
16
  *
17
- * Everything here is BEST-EFFORT by construction. A log is a diagnostic aid;
18
- * a run must never fail because one could not be opened, written, or pruned.
17
+ * Everything here is best-effort. A log is a diagnostic aid, and a run must
18
+ * never fail because one could not be opened, written, or pruned.
19
19
  * Every entry point swallows its errors and degrades to "no log", which is
20
20
  * exactly the behaviour that existed before this module.
21
21
  */
@@ -39,19 +39,19 @@ const RETAINED_LOGS_PER_COMMAND = 20;
39
39
  /**
40
40
  * Cap on the partial line held back between writes. A child emitting one
41
41
  * enormous unterminated line (a minified dump on stderr) would otherwise
42
- * grow the buffer without bound — and, because each write rebuilds
43
- * `pending + chunk`, quadratically — with nothing reaching disk until
44
- * close. Past the cap the tail is redacted and written as-is; a `KEY=value`
42
+ * grow the buffer without bound (and, because each write rebuilds
43
+ * `pending + chunk`, quadratically), with nothing reaching disk until
44
+ * close. Past the cap the tail is redacted and written as-is. A `KEY=value`
45
45
  * split exactly at the cap boundary is the accepted cost. Same figure as
46
46
  * `line-dispatch.ts` uses for the stream matchers.
47
47
  */
48
48
  const MAX_PENDING_LINE_SIZE = 1024 * 1024;
49
49
  /**
50
50
  * Index just past the last line terminator in `text`, or -1 when there is
51
- * none. `\n` and lone `\r` both terminate — progress-bar output (mach,
51
+ * none. `\n` and lone `\r` both terminate: progress-bar output (mach,
52
52
  * cargo) repaints a line with carriage returns and may never send a
53
53
  * newline, which would otherwise pin the whole run in `pending`. A single
54
- * trailing `\r` is NOT a terminator yet: it may be the first half of a
54
+ * trailing `\r` is not a terminator yet: it may be the first half of a
55
55
  * `\r\n` split across chunks.
56
56
  */
57
57
  function lastLineEnd(text) {
@@ -67,7 +67,7 @@ export function getRunLogDir(projectRoot) {
67
67
  /**
68
68
  * Makes room for one new log by deleting the oldest, so that at most
69
69
  * {@link RETAINED_LOGS_PER_COMMAND} logs for `command` exist once the new
70
- * one is created. Pruning runs BEFORE the file is opened — hence the
70
+ * one is created. Pruning runs before the file is opened, hence the
71
71
  * `- 1`, without which the directory settles at N + 1.
72
72
  *
73
73
  * Best-effort: a failure here must not stop the run that is about to be
@@ -211,10 +211,10 @@ export async function closeActiveRunLog() {
211
211
  await log?.close();
212
212
  }
213
213
  /**
214
- * A writable that forwards to `base` AND to the active run log.
214
+ * A writable that forwards to `base` and to the active run log.
215
215
  *
216
216
  * Used by the stdio-inheriting capture path, whose collectors take a mirror
217
- * stream rather than per-chunk callbacks — so the tee reuses the mirror the
217
+ * stream rather than per-chunk callbacks, so the tee reuses the mirror the
218
218
  * exec layer already supports instead of growing a second hook.
219
219
  *
220
220
  * @param base - The stream to forward to (normally `process.stdout`)
@@ -2,13 +2,13 @@
2
2
  * Structural rules for the `sharedFtl` field on a custom component.
3
3
  *
4
4
  * Both the `--shared-ftl` CLI flag path (`furnace create`) and the
5
- * furnace.json parser apply the same rules — extracting them here
5
+ * furnace.json parser apply the same rules. Extracting them here
6
6
  * avoids drift between the two entry points and lets the `.mjs`
7
7
  * template generator assume the value is safe to interpolate verbatim.
8
8
  */
9
9
  /**
10
10
  * Outcome of {@link validateSharedFtl}. `ok: true` carries the trimmed
11
- * (operator-safe) value; `ok: false` carries a human-readable message
11
+ * (operator-safe) value. `ok: false` carries a human-readable message
12
12
  * suitable for throwing as a `FurnaceError` or `InvalidArgumentError`.
13
13
  */
14
14
  export type SharedFtlValidation = {
@@ -3,18 +3,18 @@
3
3
  * Structural rules for the `sharedFtl` field on a custom component.
4
4
  *
5
5
  * Both the `--shared-ftl` CLI flag path (`furnace create`) and the
6
- * furnace.json parser apply the same rules — extracting them here
6
+ * furnace.json parser apply the same rules. Extracting them here
7
7
  * avoids drift between the two entry points and lets the `.mjs`
8
8
  * template generator assume the value is safe to interpolate verbatim.
9
9
  */
10
10
  /**
11
11
  * Characters that must not appear in `sharedFtl`.
12
12
  *
13
- * A POLICY rule about what a sensible FTL path looks like, not the safety
14
- * boundary for the generated `.mjs`: the scaffold escapes the value at its
15
- * sink with `JSON.stringify` (`commands/furnace/create-templates.ts`), which
16
- * is what actually makes interpolation safe and what covers the two inputs
17
- * this rule never catches — a `"` and a raw newline.
13
+ * This is a policy rule about what a sensible FTL path looks like, not the
14
+ * safety boundary for the generated `.mjs`. The scaffold escapes the value at
15
+ * its sink with `JSON.stringify` (`commands/furnace/create-templates.ts`),
16
+ * which is what actually makes interpolation safe, and what covers the two
17
+ * inputs this rule never catches: a `"` and a raw newline.
18
18
  *
19
19
  * Kept because each remains a real sign of a malformed path:
20
20
  * - `\` is a path-escape we do not want to interpret.
@@ -13,7 +13,7 @@
13
13
  * for the slot to clear before calling `process.exit`, so a signal that
14
14
  * lands mid-body is held until the body's state write finishes.
15
15
  *
16
- * This module is a pure runtime registry — it installs no signal handlers
16
+ * This module is a pure runtime registry. It installs no signal handlers
17
17
  * itself. The bin entry point is responsible for awaiting
18
18
  * `waitForActiveCriticalSections` before terminating.
19
19
  */
@@ -23,7 +23,7 @@
23
23
  * SIGTERM that arrives during `fn` will hold exit until `fn` returns (or
24
24
  * rejects).
25
25
  *
26
- * `fn` should be short — anything that takes longer than the bounded wait in
26
+ * `fn` should be short. Anything that takes longer than the bounded wait in
27
27
  * the bin handler (`SIGNAL_CRITICAL_SECTION_TIMEOUT_MS`) will time out and
28
28
  * the handler will exit anyway. The intent is "guard the apply + state
29
29
  * persist pair," not "postpone exit indefinitely."
@@ -14,7 +14,7 @@
14
14
  * for the slot to clear before calling `process.exit`, so a signal that
15
15
  * lands mid-body is held until the body's state write finishes.
16
16
  *
17
- * This module is a pure runtime registry — it installs no signal handlers
17
+ * This module is a pure runtime registry. It installs no signal handlers
18
18
  * itself. The bin entry point is responsible for awaiting
19
19
  * `waitForActiveCriticalSections` before terminating.
20
20
  */
@@ -26,7 +26,7 @@ const activeSections = new Set();
26
26
  * SIGTERM that arrives during `fn` will hold exit until `fn` returns (or
27
27
  * rejects).
28
28
  *
29
- * `fn` should be short — anything that takes longer than the bounded wait in
29
+ * `fn` should be short. Anything that takes longer than the bounded wait in
30
30
  * the bin handler (`SIGNAL_CRITICAL_SECTION_TIMEOUT_MS`) will time out and
31
31
  * the handler will exit anyway. The intent is "guard the apply + state
32
32
  * persist pair," not "postpone exit indefinitely."
@@ -12,14 +12,14 @@
12
12
  */
13
13
  /**
14
14
  * Returns `true` when `line` matches any pattern in
15
- * {@link SMOKE_ERROR_PATTERNS}. Does not consult the allowlist — that step
15
+ * {@link SMOKE_ERROR_PATTERNS}. Does not consult the allowlist. That step
16
16
  * lives in {@link matchAllowlist}, so the smoke runner can count
17
17
  * allowlisted hits separately from raw error matches for its summary.
18
18
  */
19
19
  export declare function matchesSmokeError(line: string): boolean;
20
20
  /**
21
21
  * One compiled allowlist entry with its provenance retained so the smoke
22
- * summary can attribute hits per entry — an entry that silently
22
+ * summary can attribute hits per entry. An entry that silently
23
23
  * stops matching (its suppressed shape changed upstream) is only
24
24
  * detectable when zero-hit entries are visible.
25
25
  */
@@ -32,16 +32,16 @@ export interface CompiledAllowlistEntry {
32
32
  }
33
33
  /**
34
34
  * Returns the index of the FIRST entry in `allow` matching `line`, or -1.
35
- * First-match attribution is deterministic and cheap; a line matching
35
+ * First-match attribution is deterministic and cheap. A line matching
36
36
  * several entries credits the earliest one. Safe to call with an empty
37
37
  * allowlist (always returns -1).
38
38
  */
39
39
  export declare function matchAllowlist(line: string, allow: readonly CompiledAllowlistEntry[]): number;
40
40
  /**
41
- * Parses a newline-delimited allowlist file body. Lines are trimmed; blank
41
+ * Parses a newline-delimited allowlist file body. Lines are trimmed. Blank
42
42
  * lines and `#`-prefixed comments are skipped. Each remaining line is
43
43
  * compiled as a RegExp with its `<file>:<line>` origin retained. A bad
44
- * pattern throws immediately — better to fail fast at CLI parse time than
44
+ * pattern throws immediately: better to fail fast at CLI parse time than
45
45
  * to silently let a typo match nothing.
46
46
  */
47
47
  export declare function compileAllowlistFromFile(body: string, sourcePath: string): CompiledAllowlistEntry[];
@@ -16,25 +16,25 @@
16
16
  * process. A hit on any of these patterns is a smoke failure unless the
17
17
  * line also matches the caller-supplied allowlist.
18
18
  *
19
- * Additions here should be conservative — false positives turn every
19
+ * Additions here should be conservative. False positives turn every
20
20
  * smoke run into noise for operators and every CI run into flake.
21
21
  */
22
22
  import { toError } from '../utils/errors.js';
23
23
  const SMOKE_ERROR_PATTERNS = [
24
- // Firefox chrome error lines — `JavaScript error: chrome://…, line N: TypeError: …`.
24
+ // Firefox chrome error lines: `JavaScript error: chrome://…, line N: TypeError: …`.
25
25
  /^\s*JavaScript error:/i,
26
26
  // Some log paths prefix browser-console `console.error(...)` with the literal label below.
27
27
  /^\s*console\.error:/i,
28
28
  // Older bracketed-prefix variant still seen in some chrome logs / test runs.
29
29
  /^\s*\[JavaScript (Error|Warning)\]/i,
30
- // IPC-layer fatal assertions — Firefox prints `###!!! [Parent] Error: …` on content-process crashes.
30
+ // IPC-layer fatal assertions. Firefox prints `###!!! [Parent] Error: …` on content-process crashes.
31
31
  /^\s*###!!! \[Parent\]/,
32
32
  // A chrome:// or resource:// URL that resolves to nothing. Outside
33
33
  // automation Gecko only PRINTS this (printf_stderr in
34
- // `CheckForBrokenChromeURL`, netwerk/base/nsNetUtil.cpp); under
34
+ // `CheckForBrokenChromeURL`, netwerk/base/nsNetUtil.cpp). Under
35
35
  // `xpc::IsInAutomation()` the same condition is a
36
36
  // `MOZ_CRASH_UNSAFE_PRINTF` in whichever process opened the channel. So
37
- // the smoke probe — which runs OUTSIDE automation — sees the printed
37
+ // the smoke probe, which runs outside automation, sees the printed
38
38
  // line for the same defect that hard-crashes every harness run, and a
39
39
  // probe that exits 0 on it reports "startup is healthy" for a build that
40
40
  // hangs at "Waiting for browser…". Both spellings are matched: the
@@ -44,7 +44,7 @@ const SMOKE_ERROR_PATTERNS = [
44
44
  ];
45
45
  /**
46
46
  * Returns `true` when `line` matches any pattern in
47
- * {@link SMOKE_ERROR_PATTERNS}. Does not consult the allowlist — that step
47
+ * {@link SMOKE_ERROR_PATTERNS}. Does not consult the allowlist. That step
48
48
  * lives in {@link matchAllowlist}, so the smoke runner can count
49
49
  * allowlisted hits separately from raw error matches for its summary.
50
50
  */
@@ -58,7 +58,7 @@ export function matchesSmokeError(line) {
58
58
  }
59
59
  /**
60
60
  * Returns the index of the FIRST entry in `allow` matching `line`, or -1.
61
- * First-match attribution is deterministic and cheap; a line matching
61
+ * First-match attribution is deterministic and cheap. A line matching
62
62
  * several entries credits the earliest one. Safe to call with an empty
63
63
  * allowlist (always returns -1).
64
64
  */
@@ -66,10 +66,10 @@ export function matchAllowlist(line, allow) {
66
66
  return allow.findIndex((entry) => entry.pattern.test(line));
67
67
  }
68
68
  /**
69
- * Parses a newline-delimited allowlist file body. Lines are trimmed; blank
69
+ * Parses a newline-delimited allowlist file body. Lines are trimmed. Blank
70
70
  * lines and `#`-prefixed comments are skipped. Each remaining line is
71
71
  * compiled as a RegExp with its `<file>:<line>` origin retained. A bad
72
- * pattern throws immediately — better to fail fast at CLI parse time than
72
+ * pattern throws immediately: better to fail fast at CLI parse time than
73
73
  * to silently let a typo match nothing.
74
74
  */
75
75
  export function compileAllowlistFromFile(body, sourcePath) {
@@ -17,11 +17,11 @@ export declare function quarantineStateFile(statePath: string, reason?: string):
17
17
  * Outcome of a version check on a persisted FireForge document.
18
18
  *
19
19
  * The distinction that matters is `newer` vs `corrupt`. A document written
20
- * by a NEWER FireForge is not damaged — the operator simply needs to upgrade
21
- * — but a check that collapses the two offers destructive remedies. The
20
+ * by a newer FireForge is not damaged. The operator simply needs to upgrade.
21
+ * A check that collapses the two offers destructive remedies. The
22
22
  * sharpest case is the tree marker, whose `schemaVersion` check inside a
23
23
  * boolean type guard makes a `schemaVersion: 2` marker read as "missing or
24
- * mistypes a required field"; `tree-guard.ts` is default-deny on corrupt, so
24
+ * mistypes a required field". `tree-guard.ts` is default-deny on corrupt, so
25
25
  * a newer FireForge would lock the operator out of every mutating command
26
26
  * inside that tree.
27
27
  *
@@ -2,21 +2,21 @@
2
2
  * Binary-aware drift classification for patch-owned files.
3
3
  *
4
4
  * The text classifier compares utf-8 decoded content against
5
- * `computePatchedContent`, which cannot apply `GIT binary patch` bodies — so
5
+ * `computePatchedContent`, which cannot apply `GIT binary patch` bodies, so
6
6
  * a binary file exported into a patch classifies as `patch-owned-drift`
7
7
  * forever, keeping the engine-clean gate permanently red with nothing
8
- * actually un-durable. A `GIT binary patch` section DOES carry the ground
8
+ * actually un-durable. A `GIT binary patch` section does carry the ground
9
9
  * truth: `git diff --binary` always records full blob hashes on the section's
10
10
  * `index <old>..<new>` line. Comparing the live file's `git hash-object`
11
11
  * against the last owning section's new-side hash settles the classification
12
12
  * exactly. Bodies without a usable hash (hand-written diffs) classify as
13
- * `binary-unsupported` — an honest "cannot compare" instead of a false "not
13
+ * `binary-unsupported`: an honest "cannot compare" instead of a false "not
14
14
  * durable".
15
15
  *
16
- * That hash is trusted ONLY when the section carries a replayable payload
16
+ * That hash is trusted only when the section carries a replayable payload
17
17
  * (`hasBinaryDelta`). A `Binary files … differ` stub carries a correct index
18
18
  * line too, so hashing against it reports `patch-backed` for a body that
19
- * cannot rebuild the file at all — precisely the dishonesty this module
19
+ * cannot rebuild the file at all, which is the dishonesty this module
20
20
  * exists to avoid. Such a body is `binary-unsupported` here, and an error
21
21
  * from the `binary-body-not-reconstructable` queue lint.
22
22
  *
@@ -40,8 +40,8 @@ export interface BinaryClassifiedFile {
40
40
  }
41
41
  /**
42
42
  * Classifies a single-owner file whose comparison is binary. Returns
43
- * `null` when the comparison is NOT binary — the live file is text and
44
- * (for deletions) the owning section is text — so the caller falls
43
+ * `null` when the comparison is not binary (the live file is text and,
44
+ * for deletions, the owning section is text), so the caller falls
45
45
  * through to the existing utf-8 content comparison unchanged.
46
46
  *
47
47
  * @param args.fileMissing - True when the porcelain status reports the
@@ -57,6 +57,6 @@ export declare function classifyBinaryOwnedFile(args: {
57
57
  matchClassification: 'patch-backed' | 'furnace';
58
58
  owner: string;
59
59
  fileMissing?: boolean;
60
- /** Batched lookup; when absent, falls back to per-file manifest queries. */
60
+ /** Batched lookup. When absent, falls back to per-file manifest queries. */
61
61
  lookup?: AffectingPatchLookup;
62
62
  }): Promise<BinaryClassifiedFile | null>;
@@ -3,21 +3,21 @@
3
3
  * Binary-aware drift classification for patch-owned files.
4
4
  *
5
5
  * The text classifier compares utf-8 decoded content against
6
- * `computePatchedContent`, which cannot apply `GIT binary patch` bodies — so
6
+ * `computePatchedContent`, which cannot apply `GIT binary patch` bodies, so
7
7
  * a binary file exported into a patch classifies as `patch-owned-drift`
8
8
  * forever, keeping the engine-clean gate permanently red with nothing
9
- * actually un-durable. A `GIT binary patch` section DOES carry the ground
9
+ * actually un-durable. A `GIT binary patch` section does carry the ground
10
10
  * truth: `git diff --binary` always records full blob hashes on the section's
11
11
  * `index <old>..<new>` line. Comparing the live file's `git hash-object`
12
12
  * against the last owning section's new-side hash settles the classification
13
13
  * exactly. Bodies without a usable hash (hand-written diffs) classify as
14
- * `binary-unsupported` — an honest "cannot compare" instead of a false "not
14
+ * `binary-unsupported`: an honest "cannot compare" instead of a false "not
15
15
  * durable".
16
16
  *
17
- * That hash is trusted ONLY when the section carries a replayable payload
17
+ * That hash is trusted only when the section carries a replayable payload
18
18
  * (`hasBinaryDelta`). A `Binary files … differ` stub carries a correct index
19
19
  * line too, so hashing against it reports `patch-backed` for a body that
20
- * cannot rebuild the file at all — precisely the dishonesty this module
20
+ * cannot rebuild the file at all, which is the dishonesty this module
21
21
  * exists to avoid. Such a body is `binary-unsupported` here, and an error
22
22
  * from the `binary-body-not-reconstructable` queue lint.
23
23
  *
@@ -35,7 +35,7 @@ import { parseDiffSections } from './patch-parse.js';
35
35
  /** Finds the LAST diff section affecting `file` across the owning patches, in queue order. */
36
36
  async function findLastAffectingSection(patchesDir, file, lookup) {
37
37
  // The lookup shares one manifest load + memoized body reads across the
38
- // whole classification batch; the fallback keeps single-file callers
38
+ // whole classification batch. The fallback keeps single-file callers
39
39
  // (and existing direct tests) working without a context.
40
40
  const patches = lookup !== undefined
41
41
  ? lookup.getAffectingPatches(file)
@@ -53,8 +53,8 @@ async function findLastAffectingSection(patchesDir, file, lookup) {
53
53
  }
54
54
  /**
55
55
  * Classifies a single-owner file whose comparison is binary. Returns
56
- * `null` when the comparison is NOT binary — the live file is text and
57
- * (for deletions) the owning section is text — so the caller falls
56
+ * `null` when the comparison is not binary (the live file is text and,
57
+ * for deletions, the owning section is text), so the caller falls
58
58
  * through to the existing utf-8 content comparison unchanged.
59
59
  *
60
60
  * @param args.fileMissing - True when the porcelain status reports the
@@ -68,8 +68,8 @@ export async function classifyBinaryOwnedFile(args) {
68
68
  classification: 'binary-unsupported',
69
69
  owner,
70
70
  });
71
- // Until the comparison is KNOWN to be binary, every failure defers to
72
- // the existing text path (`return null`) — classifying a text file as
71
+ // Until the comparison is known to be binary, every failure defers to
72
+ // the existing text path (`return null`). Classifying a text file as
73
73
  // `binary-unsupported` because a probe failed would hide real drift.
74
74
  let section;
75
75
  try {
@@ -89,12 +89,12 @@ export async function classifyBinaryOwnedFile(args) {
89
89
  try {
90
90
  if (section === undefined) {
91
91
  // Claimed in filesAffected but no diff section touches the file.
92
- // A missing file keeps the existing deletion logic; a live binary
92
+ // A missing file keeps the existing deletion logic. A live binary
93
93
  // has nothing recorded to compare against.
94
94
  return fileMissing ? null : unsupported();
95
95
  }
96
96
  if (!section.isBinary) {
97
- // Text section: deletions settle fine through the text path; a
97
+ // Text section: deletions settle fine through the text path. A
98
98
  // live binary against a text body has no comparable recording.
99
99
  return fileMissing ? null : unsupported();
100
100
  }