@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
@@ -37,21 +37,21 @@ export interface DoctorCheckContext {
37
37
  /**
38
38
  * The parsed furnace config, set by the "Furnace configuration" check
39
39
  * when it succeeds. Later furnace checks read from this so they do not
40
- * re-parse the file; undefined when the config could not be loaded.
40
+ * re-parse the file. Undefined when the config could not be loaded.
41
41
  */
42
42
  furnaceConfig: FurnaceConfig | undefined;
43
43
  /**
44
44
  * State this run actually mutated, one human-readable line per write.
45
45
  * Repairs run inside the check loop while the exit code is computed only
46
46
  * after every check, so a repair can land and the run still exit non-zero
47
- * on an unrelated check — and a non-zero exit reads as "nothing happened".
47
+ * on an unrelated check, and a non-zero exit reads as "nothing happened".
48
48
  * The runner prints these before the summary in every branch so a write is
49
49
  * never invisible.
50
50
  */
51
51
  mutations: string[];
52
52
  }
53
53
  /**
54
- * Result a check may return. A single object is the common case; an array
54
+ * Result a check may return. A single object is the common case. An array
55
55
  * lets a single check emit multiple related rows (e.g. the engine branch
56
56
  * check which may report on branch + detached state together).
57
57
  */
@@ -85,7 +85,7 @@ export interface DoctorCheckDefinition {
85
85
  dependsOn?: readonly string[];
86
86
  /**
87
87
  * Runs the inspection. Throwing is shorthand for "this check failed with
88
- * severity 'error'" — the runner converts the exception message into a
88
+ * severity 'error'": the runner converts the exception message into a
89
89
  * DoctorCheck. Returning a DoctorCheck (or array) lets the check control
90
90
  * severity, warnings, and fix hints directly.
91
91
  */
@@ -15,8 +15,8 @@ async function resolveDeclaredTool(projectRoot, tool) {
15
15
  return found.exitCode === 0 ? line?.trim() : undefined;
16
16
  }
17
17
  catch {
18
- // `xcrun -find` is absent or the tool is unknown — either way the tool has
19
- // no resolvable path, which is what `undefined` means to the caller.
18
+ // `xcrun -find` is absent or the tool is unknown. Either way the tool
19
+ // has no resolvable path, which is what `undefined` means to the caller.
20
20
  return undefined;
21
21
  }
22
22
  }
@@ -2,11 +2,11 @@
2
2
  * "Furnace config sync" doctor check.
3
3
  *
4
4
  * Surfaces orphaned component directories on disk whose names are missing
5
- * from `furnace.json` — typically the concurrent-override race, where two
5
+ * from `furnace.json`, typically the concurrent-override race, where two
6
6
  * parallel `furnace override` commands both leave their directory on disk
7
7
  * but only the second reaches `writeFurnaceConfig`. Under
8
8
  * `--repair-furnace`, override orphans are re-registered from the
9
- * `override.json` sidecar the command wrote during the copy phase; custom
9
+ * `override.json` sidecar the command wrote during the copy phase. Custom
10
10
  * orphans are listed for the operator to either re-run `furnace create`
11
11
  * against or delete manually, because custom components have no similar
12
12
  * persisted metadata.
@@ -3,11 +3,11 @@
3
3
  * "Furnace config sync" doctor check.
4
4
  *
5
5
  * Surfaces orphaned component directories on disk whose names are missing
6
- * from `furnace.json` — typically the concurrent-override race, where two
6
+ * from `furnace.json`, typically the concurrent-override race, where two
7
7
  * parallel `furnace override` commands both leave their directory on disk
8
8
  * but only the second reaches `writeFurnaceConfig`. Under
9
9
  * `--repair-furnace`, override orphans are re-registered from the
10
- * `override.json` sidecar the command wrote during the copy phase; custom
10
+ * `override.json` sidecar the command wrote during the copy phase. Custom
11
11
  * orphans are listed for the operator to either re-run `furnace create`
12
12
  * against or delete manually, because custom components have no similar
13
13
  * persisted metadata.
@@ -32,10 +32,10 @@ import { failure, ok, warning } from './doctor-check-core.js';
32
32
  * to catch. The caller surfaces the failure instead.
33
33
  */
34
34
  async function listComponentDirs(dir) {
35
- // `pathExistsStrict`, not `pathExists`: the latter answers `false` for EVERY
35
+ // `pathExistsStrict`, not `pathExists`: the latter answers `false` for every
36
36
  // access error, so an unreadable components directory reported "no orphans",
37
- // i.e. a clean check — the same fail-open the comment above rejects for
38
- // `readdir`. Only ENOENT means genuinely absent.
37
+ // i.e. a clean check. That is the same fail-open the comment above rejects
38
+ // for `readdir`. Only ENOENT means genuinely absent.
39
39
  if (!(await pathExistsStrict(dir)))
40
40
  return [];
41
41
  const entries = await readdir(dir, { withFileTypes: true });
@@ -48,7 +48,7 @@ async function recoverOverrideConfig(overrideDir, name) {
48
48
  // outer-snapshot config and drops the sibling write's addition.
49
49
  //
50
50
  // No `pathExists` precheck: it collapses "absent" and "unreadable" into
51
- // the same `false`, and both outcomes lead here anyway — a missing file
51
+ // the same `false`, and both outcomes lead here anyway. A missing file
52
52
  // lands in the catch below with the same `undefined` result.
53
53
  const sidecarPath = join(overrideDir, name, 'override.json');
54
54
  try {
@@ -79,7 +79,7 @@ async function recoverOverrideConfig(overrideDir, name) {
79
79
  catch {
80
80
  // Unreadable or malformed sidecar. Returning `undefined` here is the same
81
81
  // value as "no sidecar present", so the caller reports the override as
82
- // unrecoverable — which is the safe direction (it never invents config),
82
+ // unrecoverable. That is the safe direction (it never invents config),
83
83
  // but the operator sees "no valid override.json" rather than "the
84
84
  // override.json is corrupt". The remediation is identical either way.
85
85
  return undefined;
@@ -125,7 +125,7 @@ function emptyOutcome() {
125
125
  }
126
126
  /**
127
127
  * Re-registers override orphans and deletes empty custom orphan directories,
128
- * under ONE furnace lock held across both.
128
+ * under one furnace lock held across both.
129
129
  *
130
130
  * Two things this must not do, both of which reproduce the lost-write race the
131
131
  * check exists to clean up after:
@@ -133,9 +133,9 @@ function emptyOutcome() {
133
133
  * 1. Write back a decision made before the lock. The orphan list is computed
134
134
  * from a config snapshot loaded well before we hold anything, so by the
135
135
  * time we can write, a concurrent `furnace override` may have registered
136
- * the same name — writing our sidecar-reconstructed entry over it discards
136
+ * the same name. Writing our sidecar-reconstructed entry over it discards
137
137
  * a live write, and a concurrent `furnace create` registering the name
138
- * under `custom` would leave it in BOTH maps, a state nothing validates.
138
+ * under `custom` would leave it in both maps, a state nothing validates.
139
139
  * Every orphan is therefore re-checked against `freshConfig` inside the
140
140
  * lock and skipped when it is no longer orphaned.
141
141
  * 2. Delete custom directories outside the lock. `repairCustomOrphans` used to
@@ -148,12 +148,12 @@ async function repairOrphans(projectRoot, orphans) {
148
148
  if (orphans.overrides.length === 0 && orphans.customNames.length === 0)
149
149
  return outcome;
150
150
  const lockPath = getFurnaceLockPath(projectRoot);
151
- // One catch covers four distinct phases; naming the one that failed keeps
152
- // the report honest — a lock timeout otherwise renders as "failed while
151
+ // One catch covers four distinct phases. Naming the one that failed keeps
152
+ // the report honest. A lock timeout otherwise renders as "failed while
153
153
  // writing furnace.json", the phase least likely to have been reached.
154
154
  // Held in an object rather than two `let`s: the lock callback mutates them
155
155
  // from inside a closure, and TS's control-flow analysis does not propagate
156
- // that through the call — it would narrow both to their initial literals
156
+ // that through the call, so it would narrow both to their initial literals
157
157
  // in the catch below.
158
158
  const progress = { phase: 'waiting for the furnace lock', persisted: false };
159
159
  try {
@@ -165,7 +165,7 @@ async function repairOrphans(projectRoot, orphans) {
165
165
  progress.phase = 'writing furnace.json';
166
166
  await writeFurnaceConfig(projectRoot, freshConfig);
167
167
  }
168
- // From here the restore (if any) is on disk; a later failure must not
168
+ // From here the restore (if any) is on disk. A later failure must not
169
169
  // report the whole repair as if it never happened.
170
170
  progress.persisted = true;
171
171
  progress.phase = 'cleaning custom orphan directories';
@@ -188,11 +188,11 @@ async function repairOrphans(projectRoot, orphans) {
188
188
  }
189
189
  return outcome;
190
190
  }
191
- /** Override half of {@link repairOrphans}; mutates `freshConfig` in place. */
191
+ /** Override half of {@link repairOrphans}. Mutates `freshConfig` in place. */
192
192
  function repairOverridesLocked(freshConfig, orphans, outcome) {
193
193
  for (const orphan of orphans) {
194
194
  if (orphan.name in freshConfig.overrides || orphan.name in freshConfig.custom) {
195
- // Registered while we waited for the lock — no longer an orphan, and
195
+ // Registered while we waited for the lock, so no longer an orphan, and
196
196
  // writing over it would either discard that write or duplicate the name
197
197
  // across `overrides` and `custom`.
198
198
  outcome.reconciled.push(orphan.name);
@@ -207,15 +207,15 @@ function repairOverridesLocked(freshConfig, orphans, outcome) {
207
207
  }
208
208
  }
209
209
  }
210
- /** Custom half of {@link repairOrphans}; must run under the same lock. */
210
+ /** Custom half of {@link repairOrphans}. Must run under the same lock. */
211
211
  async function deleteEmptyCustomOrphans(projectRoot, freshConfig, customNames, outcome) {
212
212
  if (customNames.length === 0)
213
213
  return;
214
214
  const furnacePaths = getFurnacePaths(projectRoot);
215
215
  for (const name of customNames) {
216
216
  if (name in freshConfig.custom || name in freshConfig.overrides) {
217
- // A name that was orphaned in BOTH trees is reconciled once, not once
218
- // per tree — the report reads "Skipped 2 names (x, x)" otherwise.
217
+ // A name orphaned in both trees is reconciled once rather than once
218
+ // per tree. The report reads "Skipped 2 names (x, x)" otherwise.
219
219
  if (!outcome.reconciled.includes(name))
220
220
  outcome.reconciled.push(name);
221
221
  continue;
@@ -237,7 +237,7 @@ async function deleteEmptyCustomOrphans(projectRoot, freshConfig, customNames, o
237
237
  // `rmdir`, not `rm`: `rm` without `{ recursive: true }` throws EISDIR on
238
238
  // a directory, so on a real filesystem this branch always failed and the
239
239
  // "deleted N empty directories" report was unreachable. `rmdir` is also
240
- // the exact semantics wanted here — it refuses a non-empty directory,
240
+ // the exact semantics wanted here: it refuses a non-empty directory,
241
241
  // which keeps the emptiness check above from being the only safeguard.
242
242
  await rmdir(dir);
243
243
  outcome.deleted.push(name);
@@ -8,7 +8,7 @@ import type { DoctorCheckDefinition } from './doctor-check-core.js';
8
8
  /**
9
9
  * "Furnace jar.mn registrations" check: detect widget registration lines
10
10
  * pointing at component files that no longer exist in the workspace,
11
- * typically left by a rename. These break `mach build` at packaging;
11
+ * typically left by a rename. These break `mach build` at packaging.
12
12
  * `--repair-furnace` prunes them.
13
13
  */
14
14
  export declare const furnaceStaleJarRegistrationCheck: DoctorCheckDefinition;
@@ -12,7 +12,7 @@ import { failure, ok, warning } from './doctor-check-core.js';
12
12
  /**
13
13
  * "Furnace jar.mn registrations" check: detect widget registration lines
14
14
  * pointing at component files that no longer exist in the workspace,
15
- * typically left by a rename. These break `mach build` at packaging;
15
+ * typically left by a rename. These break `mach build` at packaging.
16
16
  * `--repair-furnace` prunes them.
17
17
  */
18
18
  export const furnaceStaleJarRegistrationCheck = {
@@ -50,7 +50,7 @@ async function clearPendingRepairMarker(projectRoot) {
50
50
  * `stock` and name is the tag name.
51
51
  *
52
52
  * Stock components are never checksummed by apply, so they never appear
53
- * in the state file — any stock-prefixed entry is automatically stale.
53
+ * in the state file, so any stock-prefixed entry is automatically stale.
54
54
  */
55
55
  function collectStaleChecksumKeys(appliedChecksums, config) {
56
56
  const stale = [];
@@ -103,7 +103,7 @@ async function collectFurnaceDrift(projectRoot, engineDir, config, ftlDir) {
103
103
  }
104
104
  }
105
105
  catch {
106
- // Drift check throws on unreadable paths; treat as drift so the
106
+ // Drift check throws on unreadable paths. Treat as drift so the
107
107
  // operator is told to run apply rather than swallowing the error.
108
108
  drifted.push(name);
109
109
  }
@@ -120,9 +120,9 @@ async function collectFurnaceDrift(projectRoot, engineDir, config, ftlDir) {
120
120
  }
121
121
  }
122
122
  catch {
123
- // A drift probe that cannot complete is reported AS drift: the doctor check
124
- // must not claim a component is clean when it failed to look. Mirrors the
125
- // documented twin above.
123
+ // A drift probe that cannot complete is reported as drift: the doctor
124
+ // check must not claim a component is clean when it failed to look.
125
+ // Mirrors the documented twin above.
126
126
  drifted.push(name);
127
127
  }
128
128
  }
@@ -182,7 +182,7 @@ const furnaceStateConsistencyCheck = {
182
182
  }
183
183
  const ghostSet = new Set();
184
184
  for (const key of staleKeys) {
185
- // Keys look like "override/<name>/<file>" — the ghost component is
185
+ // Keys look like "override/<name>/<file>", so the ghost component is
186
186
  // the first two segments joined for display purposes.
187
187
  const segments = key.split('/');
188
188
  if (segments.length >= 2) {
@@ -214,14 +214,14 @@ const furnaceStateConsistencyCheck = {
214
214
  };
215
215
  /**
216
216
  * "Furnace engine state" check: detect the `pendingRepair` marker set by
217
- * a failed preview teardown AND any on-disk drift between the workspace
217
+ * a failed preview teardown and any on-disk drift between the workspace
218
218
  * and the engine. Repair runs `applyAllComponents` to reconcile and
219
219
  * clears the marker on success.
220
220
  */
221
221
  const furnaceEngineStateCheck = {
222
222
  name: 'Furnace engine state',
223
223
  dependsOn: ['Furnace configuration'],
224
- // Requires both a furnace project AND an engine checkout — the drift
224
+ // Requires both a furnace project and an engine checkout: the drift
225
225
  // oracles resolve engine paths, so a missing engine dir would throw.
226
226
  skipIf: (ctx) => !ctx.furnaceConfigExists || !ctx.furnaceConfig || !ctx.engineExists,
227
227
  run: async (ctx) => {
@@ -286,16 +286,16 @@ const furnaceEngineStateCheck = {
286
286
  }
287
287
  // Repair path: run apply to reconcile the engine with the workspace
288
288
  // state, then clear the pendingRepair marker on success. We re-run
289
- // apply even when only the marker is set — the marker exists
290
- // specifically because the last mutation could not clean up, so the
291
- // cheapest honest thing we can do is re-reconcile end-to-end.
289
+ // apply even when only the marker is set. The marker exists
290
+ // specifically because the last mutation could not clean up, so
291
+ // re-reconciling end-to-end is the cheapest honest thing to do.
292
292
  try {
293
293
  const applyResult = await runRepairApply(ctx.projectRoot);
294
294
  const totalFailures = countApplyFailures(applyResult);
295
295
  if (totalFailures > 0) {
296
296
  return failure('Furnace engine state', `Repair attempted but apply reported ${totalFailures} failure${totalFailures === 1 ? '' : 's'} (first: ${firstApplyFailure(applyResult)}).`, 'Fix the underlying component issue and retry the doctor command.');
297
297
  }
298
- // Apply succeeded — clear the pendingRepair marker so subsequent
298
+ // Apply succeeded, so clear the pendingRepair marker so subsequent
299
299
  // doctor runs stop reporting the issue. updateFurnaceState merges
300
300
  // its return value via `validateFurnaceState` which simply writes
301
301
  // whatever object we return, so dropping the key from the spread
@@ -356,9 +356,9 @@ const furnaceEnginePathsCheck = {
356
356
  /**
357
357
  * Furnace Storybook backend check: verifies that the engine contains the
358
358
  * Storybook workspace required by `furnace preview`. Missing Storybook
359
- * support is a warning, not a failure, since furnace works fine without
360
- * preview — but operators should know upfront rather than discovering it
361
- * mid-command.
359
+ * support is a warning rather than a failure, since furnace works fine
360
+ * without preview. Operators should still know upfront rather than
361
+ * discovering it mid-command.
362
362
  */
363
363
  const furnaceStorybookCheck = {
364
364
  name: 'Furnace Storybook backend',
@@ -422,7 +422,7 @@ const furnaceComponentValidationCheck = {
422
422
  /**
423
423
  * Reads the owner PID from a furnace lock directory. Returns `null` when
424
424
  * the PID file is missing, unreadable, or does not parse as a finite
425
- * integer — the caller then falls back to an age-only heuristic.
425
+ * integer. The caller then falls back to an age-only heuristic.
426
426
  */
427
427
  async function readFurnaceLockPid(lockPath) {
428
428
  try {
@@ -443,10 +443,10 @@ async function readFurnaceLockPid(lockPath) {
443
443
  *
444
444
  * This is the recovery path when the signal-handler sweep
445
445
  * (`forceReleaseFurnaceLocksForActiveOperations` in `bin/fireforge.ts`)
446
- * misses — a SIGKILL'd process that never ran the handler, or a lock created
446
+ * misses: a SIGKILL'd process that never ran the handler, or a lock created
447
447
  * by an older FireForge release without a PID file. SIGINT'ing `furnace
448
448
  * preview` leaves the lock behind, and the next `fireforge test --build`
449
- * then times out waiting for it; `doctor --repair-furnace` clears it so the
449
+ * then times out waiting for it. `doctor --repair-furnace` clears it so the
450
450
  * next command runs immediately.
451
451
  */
452
452
  const furnaceStaleLockCheck = {
@@ -464,12 +464,12 @@ const furnaceStaleLockCheck = {
464
464
  const ageSuffix = ageMs !== undefined ? ` (age: ${Math.round(ageMs / 1000)}s)` : '';
465
465
  // Two signals mark a lock as stale:
466
466
  // 1. PID file says owner is dead → unambiguous, remove immediately.
467
- // 2. PID file absent AND lock is older than 60s → older FireForge
467
+ // 2. PID file absent and lock is older than 60s → older FireForge
468
468
  // releases (or an externally-created lock directory) fall into this
469
- // bucket; the age gate avoids false positives on a lock just
469
+ // bucket. The age gate avoids false positives on a lock just
470
470
  // acquired by a concurrent process that has not written its PID yet.
471
471
  //
472
- // `isProcessAlive` treats EPERM as ALIVE. Returning false for EPERM
472
+ // `isProcessAlive` treats EPERM as alive. Returning false for EPERM
473
473
  // reports a furnace lock held by a live process owned by another uid as
474
474
  // "owner is no longer running", and --repair-furnace then deletes it,
475
475
  // dropping mutual exclusion under a concurrent furnace operation.
@@ -477,7 +477,7 @@ const furnaceStaleLockCheck = {
477
477
  const pidMissingAndOld = pid === null && (ageMs ?? 0) > 60_000;
478
478
  const isStale = ownerDead || pidMissingAndOld;
479
479
  if (!isStale) {
480
- // Lock is held by a running FireForge process — nothing to report.
480
+ // Lock is held by a running FireForge process, so nothing to report.
481
481
  return ok('Furnace lock');
482
482
  }
483
483
  const description = ownerDead
@@ -1,20 +1,19 @@
1
1
  /**
2
- * Doctor check for PRE-EXISTING orphaned test-harness workers.
2
+ * Doctor check for pre-existing orphaned test-harness workers.
3
3
  *
4
4
  * A mach invocation that dies at harness startup can strand a Python
5
- * `multiprocessing` spawn worker plus its resource tracker; the worker
5
+ * `multiprocessing` spawn worker plus its resource tracker. The worker
6
6
  * reparents to launchd (PPID 1) and busy-spins at 100% CPU indefinitely.
7
- * The dispatch-side fix is the process-group reaping in `utils/process.ts`;
8
- * this check covers orphans that predate it (or leaked from non-FireForge
7
+ * The dispatch-side fix is the process-group reaping in `utils/process.ts`.
8
+ * This check covers orphans that predate it (or leaked from non-FireForge
9
9
  * invocations), detecting them by PPID 1 + large accumulated CPU TIME + a
10
10
  * `multiprocessing.spawn`/`resource_tracker` command line.
11
11
  *
12
- * Report-only by design: FireForge never kills pre-existing processes it did
13
- * not spawn — the check names each candidate and suggests the kill.
12
+ * Report-only: FireForge never kills pre-existing processes it did not
13
+ * spawn, so the check names each candidate and suggests the kill.
14
14
  *
15
- * Deliberately not wired into `test --canary`: a system-wide process scan on
16
- * the canary hot path buys no coverage the doctor check does not already
17
- * give.
15
+ * Not wired into `test --canary`: a system-wide process scan on the canary
16
+ * hot path buys no coverage the doctor check does not already give.
18
17
  */
19
18
  import type { DoctorCheckDefinition } from './doctor-check-core.js';
20
19
  /** One process matching the orphaned-harness-worker shape. */
@@ -31,11 +30,11 @@ export interface OrphanedHarnessWorker {
31
30
  * Scans `ps -axo pid=,ppid=,time=,command=` output for orphaned harness
32
31
  * workers: PPID 1 (reparented to init/launchd), a multiprocessing
33
32
  * worker/tracker command line, and at least `minCpuSeconds` of accumulated
34
- * CPU time. Pure — fixture-testable without spawning anything.
33
+ * CPU time. Pure, so it is fixture-testable without spawning anything.
35
34
  */
36
35
  export declare function findOrphanedHarnessWorkers(psOutput: string, minCpuSeconds?: number): OrphanedHarnessWorker[];
37
36
  /**
38
- * Doctor check reporting orphaned harness workers. Windows has no `ps`;
37
+ * Doctor check reporting orphaned harness workers. Windows has no `ps`, so
39
38
  * the check is skipped there (best-effort platform gap, matching the
40
39
  * process-group reaper's POSIX-only sweep).
41
40
  */
@@ -1,21 +1,20 @@
1
1
  // SPDX-License-Identifier: EUPL-1.2
2
2
  /**
3
- * Doctor check for PRE-EXISTING orphaned test-harness workers.
3
+ * Doctor check for pre-existing orphaned test-harness workers.
4
4
  *
5
5
  * A mach invocation that dies at harness startup can strand a Python
6
- * `multiprocessing` spawn worker plus its resource tracker; the worker
6
+ * `multiprocessing` spawn worker plus its resource tracker. The worker
7
7
  * reparents to launchd (PPID 1) and busy-spins at 100% CPU indefinitely.
8
- * The dispatch-side fix is the process-group reaping in `utils/process.ts`;
9
- * this check covers orphans that predate it (or leaked from non-FireForge
8
+ * The dispatch-side fix is the process-group reaping in `utils/process.ts`.
9
+ * This check covers orphans that predate it (or leaked from non-FireForge
10
10
  * invocations), detecting them by PPID 1 + large accumulated CPU TIME + a
11
11
  * `multiprocessing.spawn`/`resource_tracker` command line.
12
12
  *
13
- * Report-only by design: FireForge never kills pre-existing processes it did
14
- * not spawn — the check names each candidate and suggests the kill.
13
+ * Report-only: FireForge never kills pre-existing processes it did not
14
+ * spawn, so the check names each candidate and suggests the kill.
15
15
  *
16
- * Deliberately not wired into `test --canary`: a system-wide process scan on
17
- * the canary hot path buys no coverage the doctor check does not already
18
- * give.
16
+ * Not wired into `test --canary`: a system-wide process scan on the canary
17
+ * hot path buys no coverage the doctor check does not already give.
19
18
  */
20
19
  import { toError } from '../utils/errors.js';
21
20
  import { exec } from '../utils/process.js';
@@ -33,7 +32,7 @@ const DEFAULT_MIN_CPU_SECONDS = 600;
33
32
  * Scans `ps -axo pid=,ppid=,time=,command=` output for orphaned harness
34
33
  * workers: PPID 1 (reparented to init/launchd), a multiprocessing
35
34
  * worker/tracker command line, and at least `minCpuSeconds` of accumulated
36
- * CPU time. Pure — fixture-testable without spawning anything.
35
+ * CPU time. Pure, so it is fixture-testable without spawning anything.
37
36
  */
38
37
  export function findOrphanedHarnessWorkers(psOutput, minCpuSeconds = DEFAULT_MIN_CPU_SECONDS) {
39
38
  const workers = [];
@@ -88,7 +87,7 @@ async function runOrphanedHarnessCheck() {
88
87
  'FireForge never kills pre-existing processes automatically.');
89
88
  }
90
89
  /**
91
- * Doctor check reporting orphaned harness workers. Windows has no `ps`;
90
+ * Doctor check reporting orphaned harness workers. Windows has no `ps`, so
92
91
  * the check is skipped there (best-effort platform gap, matching the
93
92
  * process-group reaper's POSIX-only sweep).
94
93
  */
@@ -1,7 +1,8 @@
1
1
  /**
2
2
  * The patch-manifest consistency check and its two repair paths, split out of
3
3
  * `doctor.ts` for the line budget. Exports a single `DoctorCheckDefinition`
4
- * consumed by the doctor registry; no registrar is exported and none is wanted.
4
+ * consumed by the doctor registry. No registrar is exported and none is
5
+ * wanted.
5
6
  */
6
7
  import type { DoctorCheckDefinition } from './doctor-check-core.js';
7
8
  /** Patch manifest consistency check, with its opt-in repair paths. */
@@ -2,7 +2,8 @@
2
2
  /**
3
3
  * The patch-manifest consistency check and its two repair paths, split out of
4
4
  * `doctor.ts` for the line budget. Exports a single `DoctorCheckDefinition`
5
- * consumed by the doctor registry; no registrar is exported and none is wanted.
5
+ * consumed by the doctor registry. No registrar is exported and none is
6
+ * wanted.
6
7
  */
7
8
  import { rebuildPatchesManifest, recommendManifestRepair, repairPatchesFilesAffected, validatePatchesManifestConsistency, } from '../core/patch-manifest.js';
8
9
  import { FireForgeError } from '../errors/base.js';
@@ -65,8 +66,8 @@ function describeCount(count) {
65
66
  async function runManifestRebuild(ctx) {
66
67
  // Repair stamps sourceEsrVersion into every recovered entry. If the
67
68
  // earlier "fireforge.json is valid" check failed, ctx.config is
68
- // undefined and we must refuse rather than fabricate a fallback —
69
- // persisting 'unknown' into manifest metadata is hard to reverse
69
+ // undefined and we must refuse rather than fabricate a fallback.
70
+ // Persisting 'unknown' into manifest metadata is hard to reverse
70
71
  // and would mislead every later command that reads it.
71
72
  if (!ctx.config) {
72
73
  return failure(CHECK_NAME, 'Cannot repair patches.json: fireforge.json could not be loaded, so the Firefox version to stamp into recovered manifest entries is unknown.', 'Fix the fireforge.json errors reported above and re-run "fireforge doctor --repair-patches-manifest". ' +
@@ -84,7 +85,7 @@ async function runManifestRebuild(ctx) {
84
85
  // trustworthy as an audit trail. The rebuilder returns the list of
85
86
  // filenames whose metadata was entirely invented, named explicitly
86
87
  // here so the operator knows which patches to review. Entries that
87
- // WERE preserved (only `filesAffected` / ordering drifted) are not
88
+ // were preserved (only `filesAffected` / ordering drifted) are not
88
89
  // flagged.
89
90
  for (const filename of repaired.recoveredFilenames) {
90
91
  // Telling the operator to hand-edit patches.json contradicts the
@@ -101,8 +102,8 @@ async function runManifestRebuild(ctx) {
101
102
  'Avoid hand-editing patches.json — FireForge owns that file and will regenerate it on the next manifest consistency pass.');
102
103
  }
103
104
  // A row whose patch file is gone is dropped by the rebuild. That is
104
- // correct — the patch file is the source of truth — but a manifest that
105
- // quietly loses rows is exactly what makes a repair hard to audit
105
+ // correct, since the patch file is the source of truth, but a manifest
106
+ // that quietly loses rows is what makes a repair hard to audit
106
107
  // afterwards, so each one is named.
107
108
  for (const filename of repaired.droppedFilenames) {
108
109
  warn(`Dropped the manifest entry for ${filename}: no such patch file on disk. ` +
@@ -16,7 +16,7 @@ async function readEngineText(engineDir, relativePath) {
16
16
  * Reports unreadable directories separately from "none found": the consumer
17
17
  * turns an empty result into the issue "no browser.toml files found", which is
18
18
  * the opposite diagnosis from "the tree could not be read". A swallowed
19
- * mid-walk EACCES also silently *shrank* the result set, so one unreadable
19
+ * mid-walk EACCES also silently shrank the result set, so one unreadable
20
20
  * subdirectory produced a false clean for that subtree.
21
21
  */
22
22
  async function collectBrowserTomlFiles(root) {
@@ -54,7 +54,7 @@ async function runPostRebaseAudit(ctx) {
54
54
  // The four probes below are upstream-Firefox shape markers: each names a
55
55
  // file and a token that a healthy post-rebase tree must still contain. A
56
56
  // rebase that dropped a fork patch, or an upstream reorganisation, shows up
57
- // as one of these going missing. The tokens are deliberately coarse — this
57
+ // as one of these going missing. The tokens are coarse on purpose: this
58
58
  // is a smoke check that runs warn-only behind an opt-in flag, not a
59
59
  // structural validator.
60
60
  const mozConfigure = await readEngineText(engineDir, 'browser/moz.configure');
@@ -1,29 +1,29 @@
1
1
  /**
2
- * Doctor check comparing the CONFIGURED Firefox source pin against what the
2
+ * Doctor check comparing the configured Firefox source pin against what the
3
3
  * engine checkout actually is.
4
4
  *
5
5
  * `fireforge source set` lands `firefox.version` inside `fireforge.json`,
6
6
  * beside hand-maintained policy sections. That is convenient and it is also
7
- * the whole problem: a routine `git checkout -- fireforge.json` — undoing an
8
- * accidental reformat, say — silently reverts an uncommitted pin along with
7
+ * the whole problem: a routine `git checkout -- fireforge.json` (undoing an
8
+ * accidental reformat, say) silently reverts an uncommitted pin along with
9
9
  * it, and nothing afterwards reports that the pin and the checkout have
10
- * diverged. The tell in the field was a gate flipping green with no change
11
- * that should have made it green.
10
+ * diverged. In the field this showed up as a gate flipping green with no
11
+ * change that should have made it green.
12
12
  *
13
- * This is deliberately not a lock and not a refusal: a tree may legitimately
14
- * be mid-migration between two versions. It only makes a mismatched tree
15
- * VISIBLE, which is all that was missing.
13
+ * This is not a lock and not a refusal: a tree may legitimately be
14
+ * mid-migration between two versions. It only makes a mismatched tree
15
+ * visible, which is all that was missing.
16
16
  *
17
17
  * Scope is limited by what is actually recorded. `firefox.product`,
18
- * `firefox.sha256` and `firefox.candidate` have NO counterpart anywhere on
19
- * disk — `.fireforge/state.json` records only `downloadedVersion` and
20
- * `baseCommit` — so there is nothing to compare them against and the check
18
+ * `firefox.sha256` and `firefox.candidate` have no counterpart anywhere on
19
+ * disk (`.fireforge/state.json` records only `downloadedVersion` and
20
+ * `baseCommit`), so there is nothing to compare them against and the check
21
21
  * says nothing about them rather than implying it verified them.
22
22
  */
23
23
  import type { DoctorCheckDefinition } from './doctor-check-core.js';
24
24
  /**
25
25
  * Pin-vs-checkout reporting. Needs the loaded config, so it declares the
26
- * dependency on the config check that populates `ctx.config`; skipped
26
+ * dependency on the config check that populates `ctx.config`. It is skipped
27
27
  * entirely without an engine, where there is nothing to compare.
28
28
  */
29
29
  export declare const SOURCE_PIN_DOCTOR_CHECK: DoctorCheckDefinition;
@@ -1,24 +1,24 @@
1
1
  // SPDX-License-Identifier: EUPL-1.2
2
2
  /**
3
- * Doctor check comparing the CONFIGURED Firefox source pin against what the
3
+ * Doctor check comparing the configured Firefox source pin against what the
4
4
  * engine checkout actually is.
5
5
  *
6
6
  * `fireforge source set` lands `firefox.version` inside `fireforge.json`,
7
7
  * beside hand-maintained policy sections. That is convenient and it is also
8
- * the whole problem: a routine `git checkout -- fireforge.json` — undoing an
9
- * accidental reformat, say — silently reverts an uncommitted pin along with
8
+ * the whole problem: a routine `git checkout -- fireforge.json` (undoing an
9
+ * accidental reformat, say) silently reverts an uncommitted pin along with
10
10
  * it, and nothing afterwards reports that the pin and the checkout have
11
- * diverged. The tell in the field was a gate flipping green with no change
12
- * that should have made it green.
11
+ * diverged. In the field this showed up as a gate flipping green with no
12
+ * change that should have made it green.
13
13
  *
14
- * This is deliberately not a lock and not a refusal: a tree may legitimately
15
- * be mid-migration between two versions. It only makes a mismatched tree
16
- * VISIBLE, which is all that was missing.
14
+ * This is not a lock and not a refusal: a tree may legitimately be
15
+ * mid-migration between two versions. It only makes a mismatched tree
16
+ * visible, which is all that was missing.
17
17
  *
18
18
  * Scope is limited by what is actually recorded. `firefox.product`,
19
- * `firefox.sha256` and `firefox.candidate` have NO counterpart anywhere on
20
- * disk — `.fireforge/state.json` records only `downloadedVersion` and
21
- * `baseCommit` — so there is nothing to compare them against and the check
19
+ * `firefox.sha256` and `firefox.candidate` have no counterpart anywhere on
20
+ * disk (`.fireforge/state.json` records only `downloadedVersion` and
21
+ * `baseCommit`), so there is nothing to compare them against and the check
22
22
  * says nothing about them rather than implying it verified them.
23
23
  */
24
24
  import { getFirefoxVersion } from '../core/firefox.js';
@@ -40,8 +40,8 @@ async function runSourcePinCheck(ctx) {
40
40
  let actual;
41
41
  try {
42
42
  // A blank or whitespace-only version.txt (a truncated write, a partial
43
- // extraction) carries no version to compare — treat it as absent rather
44
- // than reporting the engine as being at version "".
43
+ // extraction) carries no version to compare, so treat it as absent
44
+ // rather than reporting the engine as being at version "".
45
45
  actual = (await getFirefoxVersion(ctx.paths.engine))?.trim() || undefined;
46
46
  }
47
47
  catch (error) {
@@ -70,7 +70,7 @@ async function runSourcePinCheck(ctx) {
70
70
  }
71
71
  /**
72
72
  * Pin-vs-checkout reporting. Needs the loaded config, so it declares the
73
- * dependency on the config check that populates `ctx.config`; skipped
73
+ * dependency on the config check that populates `ctx.config`. It is skipped
74
74
  * entirely without an engine, where there is nothing to compare.
75
75
  */
76
76
  export const SOURCE_PIN_DOCTOR_CHECK = {
@@ -3,18 +3,18 @@
3
3
  *
4
4
  * Partitions engine-tree dirtiness into `branding`, `patch-backed`,
5
5
  * `furnace`, `conflict`, and `unmanaged` buckets, and only warns on the
6
- * last two — everything else is tool-managed state that the operator
6
+ * last two. Everything else is tool-managed state that the operator
7
7
  * did not author directly.
8
8
  *
9
9
  * Split out of `doctor.ts` so that file stays under the per-file LOC
10
- * budget; see the call site in `runEngineGitChecks`.
10
+ * budget. See the call site in `runEngineGitChecks`.
11
11
  */
12
12
  import type { DoctorCheck } from '../types/commands/index.js';
13
13
  import type { DoctorCheckContext } from './doctor-check-core.js';
14
14
  /**
15
15
  * Inspects the engine working tree and returns a single `DoctorCheck`.
16
16
  * Ownership-aware: patch-backed / branding / furnace rows are reported as OK
17
- * with an ownership summary; unmanaged drift warns; cross-patch conflicts
17
+ * with an ownership summary. Unmanaged drift warns. Cross-patch conflicts
18
18
  * warn loudly with a pointer at `fireforge status --ownership` +
19
19
  * `fireforge verify`.
20
20
  *