@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
@@ -6,8 +6,8 @@ The `--json` surface is a contract with scripted consumers. Before 0.44.0 it
6
6
  was four unrelated shapes: `status --json` and `tree list --json` shared a
7
7
  `schemaVersion: 1` envelope but disagreed on failure, `test` emitted a
8
8
  `FIREFORGE-VERDICT:` line, and `lint --per-patch --report` wrote a versioned
9
- file nothing ever reads back. This file is the single statement of what a
10
- `--json` command must do, so the next one added does not invent a fifth.
9
+ file that nothing ever reads back. This file states what a `--json` command
10
+ has to do, so the next one added does not invent a fifth shape.
11
11
 
12
12
  ## The rules
13
13
 
@@ -16,22 +16,23 @@ file nothing ever reads back. This file is the single statement of what a
16
16
  2. **Failure writes exactly one error document to stdout**, of the shape
17
17
  `{ "schemaVersion": 1, "error": "<human message>", "code": "<tag>" }`,
18
18
  and then exits non-zero. The `error` text is the same sentence the
19
- non-JSON mode would print; `code` is a stable machine-readable tag
20
- (`engine-missing`, `engine-not-git`, `tree-list-failed`, …) that consumers
21
- may branch on.
19
+ non-JSON mode would print. `code` is a stable machine-readable tag
20
+ (`engine-missing`, `engine-not-git`, `tree-list-failed`, and so on) that
21
+ consumers may branch on.
22
22
  3. **Machine mode is engaged before any output.** `setMachineOutputMode(true)`
23
- must run before the first write, so every diagnostic — including one
24
- rendered later by `withErrorHandling` — routes to stderr and cannot
23
+ has to run before the first write, so that every diagnostic, including one
24
+ rendered later by `withErrorHandling`, goes to stderr and cannot
25
25
  interleave with the payload.
26
26
  4. **stdout carries nothing else.** No banners, no progress, no warnings.
27
27
  `logger.ts` enforces this through a single `routeToStderr()` gate that all
28
- its helpers consult, including `spinner()`, `note()` and `intro`/`outro`.
28
+ of its helpers consult, including `spinner()`, `note()` and
29
+ `intro`/`outro`.
29
30
 
30
31
  ## Implementation
31
32
 
32
33
  Use `emitMachineError` from `src/utils/machine-output.ts` for rule 2. It
33
34
  writes the envelope and throws `CommandError`, which the CLI boundary treats
34
- as already-rendered — so the boundary adds no second rendering on stderr.
35
+ as already rendered, so the boundary adds no second rendering on stderr.
35
36
 
36
37
  ```ts
37
38
  if (options.json === true) {
@@ -60,16 +61,16 @@ if (options.json === true) {
60
61
  | `token show --json` | `{ schemaVersion: 1, name, category, declarations }` | One entry per declaring block, with its selector trail and line |
61
62
  | `test` verdict line | `FIREFORGE-VERDICT: PASS\|FAIL reason=… [note=<class>] [log=<path>]` | Not JSON. A single final stdout line, sealed by `setStdoutSealed` so nothing can displace it. `log=` names the run's own complete output under `.fireforge/logs/`, so a piped or truncated run still leaves a re-readable artifact |
62
63
  | `lint --per-patch --report <path>` | `{ schemaVersion: 1, … }` | Written to a file, never read back by FireForge |
63
- | `status --raw` | `git status --porcelain` lines | Not JSON, but a machine surface: it engages the same stdout discipline, so rules 3 and 4 apply and rules 1 and 2 do not. A clean tree prints nothing |
64
+ | `status --raw` | `git status --porcelain` lines | Not JSON, but still a machine surface: it engages the same stdout discipline, so rules 3 and 4 apply and rules 1 and 2 do not. A clean tree prints nothing |
64
65
  | `build` log announcement | `Full build output: <path>` | Not JSON. `build` prints no verdict line, so it names its run log directly on the way out |
65
66
 
66
- `--raw` is why `cli.ts` reads `process.argv` for `--json` **or** `--raw`
67
- before dispatching: rule 3 is about who owns stdout, and that question is
68
- settled the same way for a porcelain stream as for a JSON document.
67
+ `--raw` is why `cli.ts` reads `process.argv` for `--json` or `--raw` before
68
+ dispatching. Rule 3 is about who owns stdout, and that question is settled
69
+ the same way for a porcelain stream as for a JSON document.
69
70
 
70
71
  `doctor` and `verify` have no `--json` mode. `doctor` already computes a
71
- serializable `DoctorCheck[]`, so adding one is cheap if a consumer asks —
72
- follow the rules above rather than inventing a shape.
72
+ serializable `DoctorCheck[]`, so adding one is cheap if a consumer asks for
73
+ it. Follow the rules above rather than inventing a shape.
73
74
 
74
75
  The run logs behind `log=` are specified in [`run-logs.md`](run-logs.md).
75
76
 
@@ -77,23 +78,23 @@ The run logs behind `log=` are specified in [`run-logs.md`](run-logs.md).
77
78
 
78
79
  `schemaVersion` is `MACHINE_OUTPUT_SCHEMA_VERSION` in
79
80
  `src/utils/machine-output.ts`. Additive changes (a new key) do not bump it.
80
- Removing or retyping a key does, and needs a note in the changelog naming
81
- what moved.
81
+ Removing or retyping a key does, and needs a changelog note saying what
82
+ moved.
82
83
 
83
84
  ## `test` verdict reasons
84
85
 
85
86
  `FIREFORGE-VERDICT: FAIL reason=<reason>` uses a closed set
86
87
  (`FireforgeVerdictReason`, `src/commands/test-verdict.ts`):
87
88
 
88
- | Reason | Meaning |
89
- | --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
90
- | `crash` | The harness or the browser died; no trustworthy suite result. |
91
- | `no-tests` | The run dispatched but nothing ran. |
92
- | `test-failures` | The suite ran and reported unexpected results. |
93
- | `preflight` | The run was refused before the harness was reached. |
94
- | `inconclusive` | A result exists but `engine/` moved under it, so it was discarded. |
95
- | `lock-timeout` | The run never started: the engine session lock stayed contended. |
96
- | `killed` | A signal terminated the run. Written from the signal handler so a log tail is always self-describing — a killed run must never be silent, or "killed", "still running" and "never started" become indistinguishable. |
89
+ | Reason | Meaning |
90
+ | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
91
+ | `crash` | The harness or the browser died, so there is no trustworthy suite result. |
92
+ | `no-tests` | The run dispatched but nothing ran. |
93
+ | `test-failures` | The suite ran and reported unexpected results. |
94
+ | `preflight` | The run was refused before the harness was reached. |
95
+ | `inconclusive` | A result exists, but `engine/` moved under it, so the result was discarded. |
96
+ | `lock-timeout` | The run never started: the engine session lock stayed contended. |
97
+ | `killed` | A signal terminated the run. Written from the signal handler so that a log tail always describes itself. A killed run must never be silent, or "killed", "still running" and "never started" all look alike. |
97
98
 
98
99
  ### The additive `note=` key
99
100
 
@@ -101,17 +102,17 @@ A `FAIL reason=preflight` line covers every gate before the harness: a
101
102
  missing build, a peer's packaging record replacing this session's, a
102
103
  developer browser holding the objdir. An unattended reader whose pipe kept
103
104
  only the verdict line could not tell those apart, so a preflight refusal that
104
- classifies itself also emits `note=<class>`.
105
+ can classify itself also emits `note=<class>`.
105
106
 
106
- `note=` is **additive**, like `log=`, `signal=` and `shards=`. `reason=` is
107
+ `note=` is additive, like `log=`, `signal=` and `shards=`. `reason=` is
107
108
  unchanged and still comes from the closed set above, so a consumer that
108
109
  tokenises `key=value` pairs is unaffected, and a gate that names no class
109
- emits no `note=` at all. The classes are not a closed set and may grow;
110
+ emits no `note=` at all. The classes are not a closed set and may grow, so
110
111
  consumers should treat an unrecognised one as opaque. Current values:
111
112
  `stale-browser`, `stale-browser-kill-failed`, `marionette-port-busy`,
112
113
  `coverage-replaced`, `stale-build`, `stale-components`.
113
114
 
114
- A preflight refusal's own text is written to stdout **before** the verdict
115
- line, and into the run log, so the verdict stays the last stdout write while
116
- the reason survives both a redirect and a `tail`. See
115
+ A preflight refusal's own text is written to stdout before the verdict line,
116
+ and into the run log, so the verdict stays the last stdout write while the
117
+ reason survives both a redirect and a `tail`. See
117
118
  [`run-logs.md`](run-logs.md).
@@ -2,9 +2,9 @@
2
2
 
3
3
  # Patch workflow
4
4
 
5
- The day-to-day loop: change code inside `engine/`, export it, keep the queue
6
- applying cleanly. `fireforge --help` remains the authority on flags; this file
7
- covers the behaviour that a flag list cannot state.
5
+ The day-to-day loop: change code inside `engine/`, export it, and keep the
6
+ queue applying cleanly. `fireforge --help` is the authority on flags. This
7
+ file covers the behavior a flag list cannot state.
8
8
 
9
9
  ## The loop
10
10
 
@@ -18,13 +18,13 @@ npx fireforge verify
18
18
 
19
19
  ## Exporting
20
20
 
21
- Patch names are normalized on export and rename: `window-chrome-tests`,
21
+ Patch names are normalized on export and rename, so `window-chrome-tests`,
22
22
  `ui-window-chrome-tests`, and `235-ui-window-chrome-tests` all resolve to the
23
23
  same `<order>-ui-window-chrome-tests.patch` shape.
24
24
 
25
- For large generated asset batches, `re-export --scan --scan-files <manifest>`
26
- assigns files to their owner patches without broad directory scanning. The
27
- manifest is JSON:
25
+ For large batches of generated assets, `re-export --scan --scan-files
26
+ <manifest>` assigns files to their owner patches without scanning whole
27
+ directories. The manifest is JSON:
28
28
 
29
29
  ```json
30
30
  {
@@ -34,76 +34,79 @@ manifest is JSON:
34
34
  }
35
35
  ```
36
36
 
37
- The command is dry-runnable, refuses ambiguous ownership, and reports each
37
+ The command can be dry-run, refuses ambiguous ownership, and reports each
38
38
  file-to-patch assignment before refreshing the patch.
39
39
 
40
- Scan-less `re-export` previews drift; `--refuse-foreign-drift --expect <path>`
41
- restricts it to intended files.
40
+ `re-export` without a scan previews drift. `--refuse-foreign-drift --expect
41
+ <path>` restricts it to the files you intended.
42
42
 
43
43
  ### Deletions
44
44
 
45
- A deleted upstream file is captured like any other change: a path that is
46
- tracked in HEAD but absent from disk stays in the diff scope, and the emitted
47
- patch carries a `deleted file mode` section. A captured deletion keeps its
48
- `filesAffected` entry — the patch is what performs the deletion, so pruning
49
- the entry would leave the body deleting a file the manifest says the patch has
50
- nothing to do with — and it still requires the confirmation, because the patch
51
- will remove those files wherever it is applied.
45
+ A deleted upstream file is captured like any other change: a path tracked in
46
+ HEAD but absent from disk stays in the diff scope, and the emitted patch
47
+ carries a `deleted file mode` section. A captured deletion keeps its
48
+ `filesAffected` entry, because the patch is what performs the deletion, and
49
+ pruning the entry would leave the body deleting a file the manifest says the
50
+ patch has nothing to do with. It also still requires the confirmation,
51
+ because the patch will remove those files wherever it is applied.
52
52
 
53
- An **untracked** absent path is refused rather than warned about: a patch
53
+ An untracked absent path is refused rather than warned about, because a patch
54
54
  cannot express it either way. The `--files` path also refuses when any
55
- requested path produces no hunk, checked against the full requested list
56
- rather than the post-filter subset, so nothing dropped upstream can pass as a
57
- silent success.
55
+ requested path produces no hunk. That is checked against the full requested
56
+ list rather than the subset left after filtering, so nothing dropped upstream
57
+ can pass as a silent success.
58
58
 
59
59
  ## Queue maintenance
60
60
 
61
61
  Under `fireforge patch`:
62
62
 
63
- - `patch compact` closes ordinal gaps (range-aware when `patchPolicy.ranges`
64
- is configured).
63
+ - `patch compact` closes ordinal gaps, and is range-aware when
64
+ `patchPolicy.ranges` is configured.
65
65
  - `patch reorder` moves a patch.
66
66
  - `patch split <source> --files <paths...> --name <name>` carves files out of
67
- a patch into a new one as a single transaction — including staged-dependency
68
- owner rewrites — with `--dry-run` support.
67
+ a patch into a new one as a single transaction, including staged-dependency
68
+ owner rewrites, and supports `--dry-run`.
69
69
  - `patch rename` also supports `--category` and `--order`.
70
70
 
71
- Every queue-mutating patch command accepts `--wait-lock [seconds]`; see
72
- [`configuration.md`](configuration.md#lock-waits) for how the budget resolves.
71
+ Every queue-mutating patch command accepts `--wait-lock [seconds]`. See
72
+ [`configuration.md`](configuration.md#lock-waits) for how the budget
73
+ resolves.
73
74
 
74
75
  ## Linting the queue
75
76
 
76
77
  `lint --per-patch --patches` accepts repeated flags, comma lists, full
77
- filenames/stems, bare order numbers, manifest names, category-prefixed slugs,
78
- and bare slugs.
78
+ filenames or stems, bare order numbers, manifest names, category-prefixed
79
+ slugs, and bare slugs.
79
80
 
80
81
  `lint --per-patch --max-warnings 0` is the warning-clean form for a release
81
82
  gate.
82
83
 
83
84
  `lint --per-patch --report <path>` writes a machine-readable JSON report with
84
- each patch's line count, tier, active size thresholds, issues, and
85
- `lintIgnore`-suppressed issues. The size metrics
86
- (`countNonBinaryDiffLines`, `resolvePatchSizeTier`, `getPatchSizeThresholds`)
87
- are also exported on the programmatic API.
85
+ each patch's line count, tier, active size thresholds, issues, and issues
86
+ suppressed by `lintIgnore`. The size metrics (`countNonBinaryDiffLines`,
87
+ `resolvePatchSizeTier`, `getPatchSizeThresholds`) are also exported on the
88
+ programmatic API.
88
89
 
89
- Per-patch lint type-checks plain Firefox JS against a built-in Firefox-globals
90
- shim that tracks upstream WebIDL additions per release. See
90
+ Per-patch lint type-checks plain Firefox JS against a built-in
91
+ Firefox-globals shim that tracks upstream WebIDL additions per release. See
91
92
  [`configuration.md`](configuration.md#patchlint) for the project hooks
92
93
  (`checkJsExtraShim`, `checkJsTestFiles`, `checkJsTestShim`).
93
94
 
94
- For release whitespace checks, use `npm run whitespace:check`; it still checks
95
- source diffs while excluding generated `patches/*.patch` diff syntax.
95
+ For release whitespace checks, use `npm run whitespace:check`. It still
96
+ checks source diffs while excluding the diff syntax of generated
97
+ `patches/*.patch` files.
96
98
 
97
99
  ## CI enforcement
98
100
 
99
101
  `fireforge status --check` exits non-zero when any unmanaged, drifted, or
100
102
  conflicted file exists. `--fail-on <class,...>` tunes the policy set, and
101
- `--json` composes — the JSON stays parseable and its `files[]` entries name
102
- the owning `patch`. `--include-ownership` adds ownership rows to JSON status
103
- output.
103
+ `--json` composes with it: the JSON stays parseable and its `files[]` entries
104
+ name the owning `patch`. `--include-ownership` adds ownership rows to JSON
105
+ status output.
104
106
 
105
- The JSON shapes are specified in [`machine-output.md`](machine-output.md), and
106
- the codes a script should branch on in [`exit-codes.md`](exit-codes.md).
107
+ The JSON shapes are specified in [`machine-output.md`](machine-output.md),
108
+ and the codes a script should branch on in
109
+ [`exit-codes.md`](exit-codes.md).
107
110
 
108
111
  ## Rebasing onto a new Firefox source release
109
112
 
@@ -114,7 +117,7 @@ npx fireforge rebase
114
117
  ```
115
118
 
116
119
  If a patch fails, fix the reject inside `engine/`, then run
117
- `npx fireforge rebase --continue`. A rebase deliberately leaves the engine
118
- mutated, so its apply-and-persist pairs are held across a signal rather than
119
- rolled back — see invariant 4 in
120
+ `npx fireforge rebase --continue`. A rebase leaves the engine mutated on
121
+ purpose, so its apply-and-persist pairs are held across a signal rather than
122
+ rolled back. See invariant 4 in
120
123
  [`lifecycle-invariants.md`](lifecycle-invariants.md).
package/docs/run-logs.md CHANGED
@@ -9,83 +9,87 @@
9
9
  ## Why the tool holds the log, not the operator
10
10
 
11
11
  A run's diagnosis used to exist in exactly one place: the terminal. The
12
- ergonomic default when output is long — `fireforge test … 2>&1 | tail -40` —
13
- keeps the summary and discards the `TEST-UNEXPECTED-FAIL` lines that say WHAT
14
- broke, and it launders the exit code besides. Nothing else held the output:
15
- `runMachCapture` keeps a 2 MB in-memory tail that dies with the process, and
16
- the shard retry loop discards earlier attempts outright.
17
-
18
- The operator rule ("never pipe a run") was written down three times downstream
19
- and broken after each writing. That is the tell that it is not an operator
20
- problem — the tool is the only party that can make the log survive the
21
- mistake.
12
+ convenient thing to do when output is long is
13
+ `fireforge test … 2>&1 | tail -40`, which keeps the summary, discards the
14
+ `TEST-UNEXPECTED-FAIL` lines that say what broke, and launders the exit code
15
+ as well. Nothing else held the output: `runMachCapture` keeps a 2 MB
16
+ in-memory tail that dies with the process, and the shard retry loop discards
17
+ earlier attempts outright.
18
+
19
+ The operator rule ("never pipe a run") was written down three times
20
+ downstream and broken after each writing. That is a sign it is not an
21
+ operator problem. The tool is the only party that can make the log survive
22
+ the mistake.
22
23
 
23
24
  ## The contract
24
25
 
25
26
  - **Complete output, never the echo filter's collapsed form.** The artifact
26
- exists to be re-read by whoever is diagnosing the run; shortening it would
27
- reintroduce the loss it prevents. The one transformation applied is the
28
- secret-masking pass below — it changes values, never line structure.
27
+ exists so that whoever is diagnosing the run can re-read it. Shortening it
28
+ would bring back the loss it prevents. The one transformation applied is
29
+ the secret-masking pass below, which changes values but never line
30
+ structure.
29
31
  - **Secret-shaped values are masked in the file, and only in the file.** The
30
- terminal already showed every byte to the operator who ran the command; the
32
+ terminal already showed every byte to the operator who ran the command. The
31
33
  file is retained twenty deep and gets attached to bug reports, so it gets a
32
34
  narrow redaction pass (`src/core/run-log-redact.ts`), applied per line
33
- before the write (a line split across two chunks is held until its
34
- terminator arrives — `\n`, or a lone `\r` from progress-bar repaints — or
35
- it exceeds 1 MiB, or the log is closed). Exactly what is redacted:
36
- - the value of an env-style assignment `KEY=value` whose `KEY` matches
37
- `/(TOKEN|SECRET|PASSWORD|PASSWD|API_KEY|AUTH)/i` — the value up to the
38
- next whitespace, or a whole quoted string — is written as
39
- `KEY=<redacted>`; the `--password=x` and `-DAUTH_TOKEN=x` spellings that
40
- mach and configure echo from their argv are the same shape and are
41
- masked too;
42
- - the credential of an `Authorization:` header (`Bearer`, `Basic` and
43
- `Token` keep the scheme word; any other value is masked whole).
44
-
45
- Nothing else is. A bare token in a URL, a space-separated `--password foo`
46
- argument, a JSON `"token": "…"` field, or a cookie passes through unchanged — the pass is a
47
- seatbelt against the common accidental leak (mach echoing its environment),
48
- not a guarantee that a log is free of secrets. Review a log before sharing
49
- it.
35
+ before the write. A line split across two chunks is held until its
36
+ terminator arrives (`\n`, or a lone `\r` from progress-bar repaints), or
37
+ until it exceeds 1 MiB, or until the log is closed. What gets redacted:
38
+ - The value of an env-style assignment `KEY=value` whose `KEY` matches
39
+ `/(TOKEN|SECRET|PASSWORD|PASSWD|API_KEY|AUTH)/i`. The value up to the
40
+ next whitespace, or a whole quoted string, is written as
41
+ `KEY=<redacted>`. The `--password=x` and `-DAUTH_TOKEN=x` spellings that
42
+ mach and configure echo from their argv have the same shape and are
43
+ masked too.
44
+ - The credential of an `Authorization:` header. `Bearer`, `Basic` and
45
+ `Token` keep the scheme word. Any other value is masked whole.
46
+
47
+ Nothing else is masked. A bare token in a URL, a space-separated
48
+ `--password foo` argument, a JSON `"token": "…"` field, or a cookie all
49
+ pass through unchanged. The pass is a seatbelt against the common
50
+ accidental leak (mach echoing its environment), not a guarantee that a log
51
+ is free of secrets. Review a log before sharing it.
50
52
 
51
53
  - **Opened before any preflight**, so a refusal is logged too. Those are
52
54
  exactly the runs whose only output a `tail` throws away.
53
- - **Retained 20 deep per command kind.** Per-kind, so a busy `test` loop
55
+ - **Retained 20 deep per command kind.** Per kind, so that a busy `test` loop
54
56
  cannot evict the `build` log an operator needs to read beside it. Pruning
55
- runs before the new file is opened, and orders by the filename's
56
- timestamp rather than by stat-ing every entry.
57
- - **Timestamps are filesystem-safe**: the ISO form with `:` and `.` replaced
58
- by `-`, which Windows accepts and which still sorts chronologically.
57
+ runs before the new file is opened, and orders by the timestamp in the
58
+ filename rather than by stat-ing every entry.
59
+ - **Timestamps are filesystem-safe.** They use the ISO form with `:` and `.`
60
+ replaced by `-`, which Windows accepts and which still sorts
61
+ chronologically.
59
62
  - **Best-effort throughout.** A log that cannot be opened, written or pruned
60
- degrades to no log. A run must never fail over a diagnostic, so `openRunLog`
61
- returns `undefined` on failure, a post-open stream error latches `broken`
62
- and drops every later write, and pruning failures are logged verbosely
63
- only. The entry point's SIGINT/SIGTERM path closes the active log (also
64
- best-effort) before exiting, so the held partial line of a killed run
65
- reaches disk.
63
+ degrades to no log, because a run must never fail over a diagnostic.
64
+ `openRunLog` returns `undefined` on failure, a stream error after opening
65
+ latches `broken` and drops every later write, and pruning failures are
66
+ logged verbosely only. The entry point's SIGINT/SIGTERM path closes the
67
+ active log, also best-effort, before exiting, so the held partial line of a
68
+ killed run reaches disk.
66
69
 
67
70
  ## Preflight refusals
68
71
 
69
72
  `fireforge test` opens its run log before any preflight, so a refusal is
70
- logged too — those are exactly the runs whose only output a `tail` throws
73
+ logged too. Those are exactly the runs whose only output a `tail` throws
71
74
  away. The refusal's own explanatory text is written into the log, and to
72
- stdout, **before** the verdict line seals stdout.
75
+ stdout, before the verdict line seals stdout.
73
76
 
74
- Both halves are load-bearing. The verdict seal routes everything the CLI
75
- error boundary renders afterwards to stderr, so a run captured with
76
- `> file` used to keep `FIREFORGE-VERDICT: FAIL reason=preflight` and nothing
77
- else; and that rendering happens after the run log is closed, so the artifact
78
- the verdict's own `log=` key pointed at held only the pre-test build. Writing
79
- before the seal fixes both without trading away the contract: the reason
80
- lands on both channels, and the verdict is still the run's last stdout line.
77
+ Both halves matter. The verdict seal routes everything the CLI error boundary
78
+ renders afterwards to stderr, so a run captured with `> file` used to keep
79
+ `FIREFORGE-VERDICT: FAIL reason=preflight` and nothing else. That rendering
80
+ also happens after the run log is closed, so the artifact the verdict's own
81
+ `log=` key pointed at held only the pre-test build. Writing before the seal
82
+ fixes both without giving up the contract: the reason lands on both channels,
83
+ and the verdict is still the run's last stdout line.
81
84
 
82
85
  ## Where the path is announced
83
86
 
84
87
  `test` publishes it as an additive `log=<path>` key on the
85
- `FIREFORGE-VERDICT:` line. That is forced, not chosen: the verdict must stay
86
- the run's LAST stdout write ([`machine-output.md`](machine-output.md)), so a
87
- separate announcement after it would break the contract, and one before it is
88
- the first thing a `tail` cuts.
88
+ `FIREFORGE-VERDICT:` line. That is forced rather than chosen: the verdict has
89
+ to stay the run's last stdout write (see
90
+ [`machine-output.md`](machine-output.md)), so a separate announcement after
91
+ it would break the contract, and one before it is the first thing a `tail`
92
+ cuts.
89
93
 
90
94
  `build` prints no verdict line, so it announces the path directly
91
95
  (`Full build output: <path>`).
@@ -94,7 +98,7 @@ the first thing a `tail` cuts.
94
98
 
95
99
  At the two mach capture funnels in `src/core/mach.ts`, not at the commands.
96
100
  That covers every dispatch: the three test dispatchers, `package`, and the
97
- stdio-inheriting path `mach build` uses — which rides the collectors' existing
101
+ stdio-inheriting path `mach build` uses, which rides the collectors' existing
98
102
  `mirror` hook rather than growing a second one. A new dispatcher added at the
99
- funnels is logged by construction; one added beside them is not, which is the
100
- reason to keep going through them.
103
+ funnels is logged automatically, and one added beside them is not, which is
104
+ the reason to keep going through them.