@hominis/fireforge 0.54.0 → 0.60.0

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 (1244) hide show
  1. package/CHANGELOG.md +287 -6
  2. package/README.md +51 -17
  3. package/dist/bin/fireforge.js +34 -129
  4. package/dist/build-info.json +4 -4
  5. package/dist/src/check/check.js +394 -0
  6. package/dist/src/check/gate.js +448 -0
  7. package/dist/src/check/index.js +10 -0
  8. package/dist/src/check/record.js +155 -0
  9. package/dist/src/cli/command.js +286 -0
  10. package/dist/src/cli/output.js +96 -0
  11. package/dist/src/cli/program.js +231 -0
  12. package/dist/src/cli/stdio.js +59 -0
  13. package/dist/src/cli/version.js +99 -0
  14. package/dist/src/commands/bootstrap.js +17 -102
  15. package/dist/src/commands/build.js +34 -438
  16. package/dist/src/commands/check.js +44 -157
  17. package/dist/src/commands/config.js +50 -226
  18. package/dist/src/commands/discard.js +38 -215
  19. package/dist/src/commands/doctor.js +29 -456
  20. package/dist/src/commands/download.js +35 -499
  21. package/dist/src/commands/export.js +42 -431
  22. package/dist/src/commands/furnace.js +220 -0
  23. package/dist/src/commands/gate.js +127 -0
  24. package/dist/src/commands/import.js +44 -445
  25. package/dist/src/commands/index.js +86 -0
  26. package/dist/src/commands/lint.js +44 -546
  27. package/dist/src/commands/merge-driver.js +56 -0
  28. package/dist/src/commands/migrate.js +75 -0
  29. package/dist/src/commands/override.js +43 -0
  30. package/dist/src/commands/package.js +48 -77
  31. package/dist/src/commands/patch.js +221 -0
  32. package/dist/src/commands/re-export.js +55 -332
  33. package/dist/src/commands/rebase.js +69 -0
  34. package/dist/src/commands/register.js +62 -103
  35. package/dist/src/commands/reset.js +28 -91
  36. package/dist/src/commands/resolve.js +20 -167
  37. package/dist/src/commands/restore.js +19 -0
  38. package/dist/src/commands/run.js +60 -420
  39. package/dist/src/commands/setup.js +78 -90
  40. package/dist/src/commands/status.js +44 -413
  41. package/dist/src/commands/test.js +97 -422
  42. package/dist/src/commands/token.js +185 -228
  43. package/dist/src/commands/typecheck.js +59 -208
  44. package/dist/src/commands/verify.js +28 -334
  45. package/dist/src/commands/version.js +14 -0
  46. package/dist/src/commands/watch.js +20 -218
  47. package/dist/src/commands/wire.js +60 -349
  48. package/dist/src/commands/workspace.js +117 -0
  49. package/dist/src/config/edit.js +237 -0
  50. package/dist/src/config/index.js +15 -0
  51. package/dist/src/config/load.js +59 -0
  52. package/dist/src/config/previous.js +404 -0
  53. package/dist/src/config/schema/build.js +63 -0
  54. package/dist/src/config/schema/check.js +113 -0
  55. package/dist/src/config/schema/common.js +71 -0
  56. package/dist/src/config/schema/export-queue.js +36 -0
  57. package/dist/src/config/schema/firefox.js +69 -0
  58. package/dist/src/config/schema/gate.js +199 -0
  59. package/dist/src/config/schema/identity.js +55 -0
  60. package/dist/src/config/schema/index.js +45 -0
  61. package/dist/src/config/schema/lint.js +297 -0
  62. package/dist/src/config/schema/policy.js +111 -0
  63. package/dist/src/config/schema/source.js +90 -0
  64. package/dist/src/config/schema/test.js +17 -0
  65. package/dist/src/config/schema/toolchains.js +17 -0
  66. package/dist/src/config/schema/typecheck.js +29 -0
  67. package/dist/src/config/schema/wire.js +15 -0
  68. package/dist/src/diff/apply.js +129 -0
  69. package/dist/src/diff/index.js +16 -0
  70. package/dist/src/diff/model.js +267 -0
  71. package/dist/src/diff/query.js +65 -0
  72. package/dist/src/doctor/index.js +240 -0
  73. package/dist/src/engine/archive.js +396 -0
  74. package/dist/src/engine/audit.js +66 -0
  75. package/dist/src/engine/build.js +150 -0
  76. package/dist/src/engine/hostLocks.js +66 -0
  77. package/dist/src/engine/index.js +26 -0
  78. package/dist/src/engine/installManifests.js +147 -0
  79. package/dist/src/engine/mach.js +97 -0
  80. package/dist/src/engine/machHints.js +80 -0
  81. package/dist/src/engine/mozconfig.js +110 -0
  82. package/dist/src/engine/objdir.js +124 -0
  83. package/dist/src/engine/package.js +169 -0
  84. package/dist/src/engine/pin.js +12 -0
  85. package/dist/src/engine/pool.js +423 -0
  86. package/dist/src/engine/pristine.js +281 -0
  87. package/dist/src/engine/python.js +68 -0
  88. package/dist/src/engine/resourceGuard.js +582 -0
  89. package/dist/src/engine/run.js +259 -0
  90. package/dist/src/engine/smoke.js +204 -0
  91. package/dist/src/engine/staleness.js +229 -0
  92. package/dist/src/engine/watch.js +82 -0
  93. package/dist/src/engine/workspace.js +85 -0
  94. package/dist/src/furnace/config.js +360 -0
  95. package/dist/src/furnace/deploy.js +414 -0
  96. package/dist/src/furnace/diff.js +59 -0
  97. package/dist/src/furnace/edit.js +64 -0
  98. package/dist/src/furnace/fragments.js +53 -0
  99. package/dist/src/furnace/index.js +19 -0
  100. package/dist/src/furnace/operations.js +283 -0
  101. package/dist/src/furnace/registration.js +220 -0
  102. package/dist/src/furnace/scaffold.js +311 -0
  103. package/dist/src/furnace/typing.js +252 -0
  104. package/dist/src/furnace/validate.js +662 -0
  105. package/dist/src/git/apply.js +129 -0
  106. package/dist/src/git/diff.js +143 -0
  107. package/dist/src/git/index.js +33 -0
  108. package/dist/src/git/objects.js +201 -0
  109. package/dist/src/git/refs.js +85 -0
  110. package/dist/src/git/repo.js +222 -0
  111. package/dist/src/git/run.js +242 -0
  112. package/dist/src/git/status.js +156 -0
  113. package/dist/src/kernel/errors.js +123 -0
  114. package/dist/src/kernel/fs.js +515 -0
  115. package/dist/src/kernel/glob.js +63 -0
  116. package/dist/src/kernel/hash.js +28 -0
  117. package/dist/src/kernel/journal.js +524 -0
  118. package/dist/src/kernel/json-edit.js +198 -0
  119. package/dist/src/kernel/json.js +101 -0
  120. package/dist/src/kernel/lock.js +589 -0
  121. package/dist/src/kernel/log.js +154 -0
  122. package/dist/src/kernel/process/identity.js +313 -0
  123. package/dist/src/kernel/process/index.js +8 -0
  124. package/dist/src/kernel/process/listing.js +128 -0
  125. package/dist/src/kernel/process/spawn.js +430 -0
  126. package/dist/src/kernel/process/tree.js +301 -0
  127. package/dist/src/kernel/schema.js +308 -0
  128. package/dist/src/kernel/signals.js +171 -0
  129. package/dist/src/kernel/text.js +151 -0
  130. package/dist/src/kernel/time.js +83 -0
  131. package/dist/src/kernel/tty.js +84 -0
  132. package/dist/src/lint/cache.js +77 -0
  133. package/dist/src/lint/checkjs.js +400 -0
  134. package/dist/src/lint/index.js +3 -0
  135. package/dist/src/lint/input.js +100 -0
  136. package/dist/src/lint/report.js +107 -0
  137. package/dist/src/lint/rule.js +41 -0
  138. package/dist/src/lint/rules/css.js +308 -0
  139. package/dist/src/lint/rules/javascript.js +299 -0
  140. package/dist/src/lint/rules/jsdoc.js +249 -0
  141. package/dist/src/lint/rules/license.js +93 -0
  142. package/dist/src/lint/rules/policy.js +201 -0
  143. package/dist/src/lint/rules/registration.js +264 -0
  144. package/dist/src/lint/rules/size.js +299 -0
  145. package/dist/src/lint/run.js +126 -0
  146. package/dist/src/lint/shim.js +323 -0
  147. package/dist/src/lint/typescript.js +186 -0
  148. package/dist/src/lint/waivers.js +93 -0
  149. package/dist/src/mode/changes.js +264 -0
  150. package/dist/src/mode/diagnose.js +173 -0
  151. package/dist/src/mode/export.js +147 -0
  152. package/dist/src/mode/index.js +23 -0
  153. package/dist/src/mode/migrate.js +181 -0
  154. package/dist/src/mode/previousWaivers.js +206 -0
  155. package/dist/src/mode/pristine.js +61 -0
  156. package/dist/src/mode/rebase.js +197 -0
  157. package/dist/src/mode/report.js +157 -0
  158. package/dist/src/mode/setup.js +103 -0
  159. package/dist/src/mode/tracked.js +116 -0
  160. package/dist/src/mode/upgrade.js +281 -0
  161. package/dist/src/mode/watch.js +83 -0
  162. package/dist/src/mode/workspace.js +189 -0
  163. package/dist/src/mozbuild/index.js +6 -0
  164. package/dist/src/mozbuild/jar.js +366 -0
  165. package/dist/src/mozbuild/mozbuild.js +321 -0
  166. package/dist/src/mozbuild/paths.js +96 -0
  167. package/dist/src/mozbuild/references.js +39 -0
  168. package/dist/src/mozbuild/testManifest.js +343 -0
  169. package/dist/src/mozbuild/text.js +142 -0
  170. package/dist/src/project/changes.js +145 -0
  171. package/dist/src/project/checkout.js +66 -0
  172. package/dist/src/project/index.js +11 -0
  173. package/dist/src/project/license.js +119 -0
  174. package/dist/src/project/project.js +111 -0
  175. package/dist/src/project/state.js +85 -0
  176. package/dist/src/project/tracked.js +1 -0
  177. package/dist/src/queue/apply.js +270 -0
  178. package/dist/src/queue/attribute.js +159 -0
  179. package/dist/src/queue/baseline.js +409 -0
  180. package/dist/src/queue/capture.js +298 -0
  181. package/dist/src/queue/changes.js +234 -0
  182. package/dist/src/queue/index.js +50 -0
  183. package/dist/src/queue/manifest.js +341 -0
  184. package/dist/src/queue/operations.js +454 -0
  185. package/dist/src/queue/placement.js +220 -0
  186. package/dist/src/queue/queue.js +359 -0
  187. package/dist/src/queue/restore.js +103 -0
  188. package/dist/src/queue/session.js +685 -0
  189. package/dist/src/queue/status.js +137 -0
  190. package/dist/src/register/files.js +39 -0
  191. package/dist/src/register/index.js +8 -0
  192. package/dist/src/register/js.js +217 -0
  193. package/dist/src/register/register.js +359 -0
  194. package/dist/src/register/wire.js +146 -0
  195. package/dist/src/source/adopt.js +99 -0
  196. package/dist/src/source/changes.js +132 -0
  197. package/dist/src/source/edit.js +278 -0
  198. package/dist/src/source/export.js +70 -0
  199. package/dist/src/source/groups.js +131 -0
  200. package/dist/src/source/index.js +20 -0
  201. package/dist/src/source/materialize.js +382 -0
  202. package/dist/src/source/merge.js +255 -0
  203. package/dist/src/source/objects.js +102 -0
  204. package/dist/src/source/previous.js +166 -0
  205. package/dist/src/source/records.js +138 -0
  206. package/dist/src/source/refresh.js +264 -0
  207. package/dist/src/source/tree.js +337 -0
  208. package/dist/src/syntax/css.js +215 -0
  209. package/dist/src/syntax/fragments.js +63 -0
  210. package/dist/src/syntax/index.js +10 -0
  211. package/dist/src/syntax/js.js +270 -0
  212. package/dist/src/test/classify.js +826 -0
  213. package/dist/src/test/control.js +236 -0
  214. package/dist/src/test/host.js +266 -0
  215. package/dist/src/test/index.js +11 -0
  216. package/dist/src/test/plan.js +347 -0
  217. package/dist/src/test/rawLog.js +138 -0
  218. package/dist/src/test/run.js +404 -0
  219. package/dist/src/test/verdict.js +420 -0
  220. package/dist/src/test/xpcshell.js +143 -0
  221. package/dist/src/tokens/add.js +304 -0
  222. package/dist/src/tokens/coverage.js +65 -0
  223. package/dist/src/tokens/css.js +58 -0
  224. package/dist/src/tokens/index.js +12 -0
  225. package/dist/src/tokens/lint.js +96 -0
  226. package/dist/src/tokens/model.js +118 -0
  227. package/dist/src/tokens/settings.js +87 -0
  228. package/dist/src/tokens/siblings.js +104 -0
  229. package/dist/src/typecheck/explain.js +123 -0
  230. package/dist/src/typecheck/index.js +8 -0
  231. package/dist/src/typecheck/typecheck.js +332 -0
  232. package/docs/README.md +23 -28
  233. package/docs/authoring.md +97 -0
  234. package/docs/configuration.md +307 -692
  235. package/docs/exit-codes.md +76 -94
  236. package/docs/furnace.md +113 -181
  237. package/docs/gate.md +205 -0
  238. package/docs/getting-started.md +165 -0
  239. package/docs/machine-output.md +201 -277
  240. package/docs/migrating.md +261 -0
  241. package/docs/patch-workflow.md +163 -653
  242. package/docs/quality.md +220 -0
  243. package/docs/source-workflow.md +228 -0
  244. package/docs/testing.md +101 -712
  245. package/docs/workspaces.md +187 -0
  246. package/package.json +22 -30
  247. package/templates/configs/common.mozconfig +8 -2
  248. package/templates/configs/darwin.mozconfig +6 -7
  249. package/templates/configs/linux.mozconfig +5 -8
  250. package/templates/configs/win32.mozconfig +3 -9
  251. package/dist/bin/fireforge.d.ts +0 -9
  252. package/dist/src/cli-usage-error.d.ts +0 -46
  253. package/dist/src/cli-usage-error.js +0 -81
  254. package/dist/src/cli.d.ts +0 -41
  255. package/dist/src/cli.js +0 -380
  256. package/dist/src/commands/bootstrap-checks.d.ts +0 -16
  257. package/dist/src/commands/bootstrap-checks.js +0 -66
  258. package/dist/src/commands/bootstrap.d.ts +0 -10
  259. package/dist/src/commands/build-prelock.d.ts +0 -20
  260. package/dist/src/commands/build-prelock.js +0 -50
  261. package/dist/src/commands/build.d.ts +0 -13
  262. package/dist/src/commands/check-report.d.ts +0 -41
  263. package/dist/src/commands/check-report.js +0 -91
  264. package/dist/src/commands/check-run.d.ts +0 -33
  265. package/dist/src/commands/check-run.js +0 -112
  266. package/dist/src/commands/check-steps.d.ts +0 -75
  267. package/dist/src/commands/check-steps.js +0 -200
  268. package/dist/src/commands/check.d.ts +0 -32
  269. package/dist/src/commands/config.d.ts +0 -13
  270. package/dist/src/commands/declarations-report.d.ts +0 -49
  271. package/dist/src/commands/declarations-report.js +0 -83
  272. package/dist/src/commands/destructive-decision.d.ts +0 -19
  273. package/dist/src/commands/destructive-decision.js +0 -31
  274. package/dist/src/commands/discard.d.ts +0 -12
  275. package/dist/src/commands/doctor-check-core.d.ts +0 -110
  276. package/dist/src/commands/doctor-check-core.js +0 -24
  277. package/dist/src/commands/doctor-engine-eslint.d.ts +0 -3
  278. package/dist/src/commands/doctor-engine-eslint.js +0 -17
  279. package/dist/src/commands/doctor-external-toolchains.d.ts +0 -3
  280. package/dist/src/commands/doctor-external-toolchains.js +0 -56
  281. package/dist/src/commands/doctor-furnace-config-sync.d.ts +0 -18
  282. package/dist/src/commands/doctor-furnace-config-sync.js +0 -295
  283. package/dist/src/commands/doctor-furnace-jar.d.ts +0 -14
  284. package/dist/src/commands/doctor-furnace-jar.js +0 -44
  285. package/dist/src/commands/doctor-furnace.d.ts +0 -8
  286. package/dist/src/commands/doctor-furnace.js +0 -514
  287. package/dist/src/commands/doctor-macos-sdk.d.ts +0 -8
  288. package/dist/src/commands/doctor-macos-sdk.js +0 -158
  289. package/dist/src/commands/doctor-orphaned-harness.d.ts +0 -41
  290. package/dist/src/commands/doctor-orphaned-harness.js +0 -98
  291. package/dist/src/commands/doctor-patch-manifest.d.ts +0 -9
  292. package/dist/src/commands/doctor-patch-manifest.js +0 -156
  293. package/dist/src/commands/doctor-post-rebase-audit.d.ts +0 -2
  294. package/dist/src/commands/doctor-post-rebase-audit.js +0 -108
  295. package/dist/src/commands/doctor-source-pin.d.ts +0 -29
  296. package/dist/src/commands/doctor-source-pin.js +0 -91
  297. package/dist/src/commands/doctor-working-tree.d.ts +0 -27
  298. package/dist/src/commands/doctor-working-tree.js +0 -89
  299. package/dist/src/commands/doctor.d.ts +0 -49
  300. package/dist/src/commands/download.d.ts +0 -11
  301. package/dist/src/commands/export-adopt-check.d.ts +0 -37
  302. package/dist/src/commands/export-adopt-check.js +0 -97
  303. package/dist/src/commands/export-all.d.ts +0 -11
  304. package/dist/src/commands/export-all.js +0 -361
  305. package/dist/src/commands/export-flow.d.ts +0 -124
  306. package/dist/src/commands/export-flow.js +0 -423
  307. package/dist/src/commands/export-placement-conflicts.d.ts +0 -17
  308. package/dist/src/commands/export-placement-conflicts.js +0 -75
  309. package/dist/src/commands/export-placement-gate.d.ts +0 -42
  310. package/dist/src/commands/export-placement-gate.js +0 -107
  311. package/dist/src/commands/export-placement-policy.d.ts +0 -22
  312. package/dist/src/commands/export-placement-policy.js +0 -54
  313. package/dist/src/commands/export-shared.d.ts +0 -152
  314. package/dist/src/commands/export-shared.js +0 -396
  315. package/dist/src/commands/export-staged-registration.d.ts +0 -46
  316. package/dist/src/commands/export-staged-registration.js +0 -91
  317. package/dist/src/commands/export.d.ts +0 -13
  318. package/dist/src/commands/forward-import-remedy.d.ts +0 -31
  319. package/dist/src/commands/forward-import-remedy.js +0 -62
  320. package/dist/src/commands/furnace/apply.d.ts +0 -8
  321. package/dist/src/commands/furnace/apply.js +0 -327
  322. package/dist/src/commands/furnace/authoring-config.d.ts +0 -13
  323. package/dist/src/commands/furnace/authoring-config.js +0 -19
  324. package/dist/src/commands/furnace/chrome-doc-remove.d.ts +0 -14
  325. package/dist/src/commands/furnace/chrome-doc-remove.js +0 -148
  326. package/dist/src/commands/furnace/chrome-doc-templates.d.ts +0 -152
  327. package/dist/src/commands/furnace/chrome-doc-templates.js +0 -331
  328. package/dist/src/commands/furnace/chrome-doc-tests.d.ts +0 -23
  329. package/dist/src/commands/furnace/chrome-doc-tests.js +0 -148
  330. package/dist/src/commands/furnace/chrome-doc.d.ts +0 -87
  331. package/dist/src/commands/furnace/chrome-doc.js +0 -365
  332. package/dist/src/commands/furnace/create-browser-test.d.ts +0 -44
  333. package/dist/src/commands/furnace/create-browser-test.js +0 -179
  334. package/dist/src/commands/furnace/create-dry-run.d.ts +0 -49
  335. package/dist/src/commands/furnace/create-dry-run.js +0 -107
  336. package/dist/src/commands/furnace/create-features.d.ts +0 -24
  337. package/dist/src/commands/furnace/create-features.js +0 -55
  338. package/dist/src/commands/furnace/create-mochikit.d.ts +0 -29
  339. package/dist/src/commands/furnace/create-mochikit.js +0 -75
  340. package/dist/src/commands/furnace/create-readback.d.ts +0 -22
  341. package/dist/src/commands/furnace/create-readback.js +0 -32
  342. package/dist/src/commands/furnace/create-templates.d.ts +0 -119
  343. package/dist/src/commands/furnace/create-templates.js +0 -283
  344. package/dist/src/commands/furnace/create-validation.d.ts +0 -6
  345. package/dist/src/commands/furnace/create-validation.js +0 -59
  346. package/dist/src/commands/furnace/create-xpcshell.d.ts +0 -27
  347. package/dist/src/commands/furnace/create-xpcshell.js +0 -80
  348. package/dist/src/commands/furnace/create.d.ts +0 -24
  349. package/dist/src/commands/furnace/create.js +0 -407
  350. package/dist/src/commands/furnace/deploy-fragment-includers.d.ts +0 -59
  351. package/dist/src/commands/furnace/deploy-fragment-includers.js +0 -120
  352. package/dist/src/commands/furnace/deploy-named.d.ts +0 -48
  353. package/dist/src/commands/furnace/deploy-named.js +0 -107
  354. package/dist/src/commands/furnace/deploy.d.ts +0 -9
  355. package/dist/src/commands/furnace/deploy.js +0 -218
  356. package/dist/src/commands/furnace/diff.d.ts +0 -11
  357. package/dist/src/commands/furnace/diff.js +0 -238
  358. package/dist/src/commands/furnace/index.d.ts +0 -4
  359. package/dist/src/commands/furnace/index.js +0 -282
  360. package/dist/src/commands/furnace/init.d.ts +0 -11
  361. package/dist/src/commands/furnace/init.js +0 -287
  362. package/dist/src/commands/furnace/list.d.ts +0 -8
  363. package/dist/src/commands/furnace/list.js +0 -104
  364. package/dist/src/commands/furnace/override.d.ts +0 -16
  365. package/dist/src/commands/furnace/override.js +0 -454
  366. package/dist/src/commands/furnace/preview.d.ts +0 -19
  367. package/dist/src/commands/furnace/preview.js +0 -349
  368. package/dist/src/commands/furnace/refresh.d.ts +0 -10
  369. package/dist/src/commands/furnace/refresh.js +0 -303
  370. package/dist/src/commands/furnace/remove-mutations.d.ts +0 -36
  371. package/dist/src/commands/furnace/remove-mutations.js +0 -168
  372. package/dist/src/commands/furnace/remove-state.d.ts +0 -20
  373. package/dist/src/commands/furnace/remove-state.js +0 -60
  374. package/dist/src/commands/furnace/remove.d.ts +0 -8
  375. package/dist/src/commands/furnace/remove.js +0 -415
  376. package/dist/src/commands/furnace/rename-browser-test.d.ts +0 -2
  377. package/dist/src/commands/furnace/rename-browser-test.js +0 -68
  378. package/dist/src/commands/furnace/rename-dry-run.d.ts +0 -29
  379. package/dist/src/commands/furnace/rename-dry-run.js +0 -127
  380. package/dist/src/commands/furnace/rename-helpers.d.ts +0 -26
  381. package/dist/src/commands/furnace/rename-helpers.js +0 -85
  382. package/dist/src/commands/furnace/rename-registrations.d.ts +0 -41
  383. package/dist/src/commands/furnace/rename-registrations.js +0 -98
  384. package/dist/src/commands/furnace/rename-xpcshell.d.ts +0 -32
  385. package/dist/src/commands/furnace/rename-xpcshell.js +0 -95
  386. package/dist/src/commands/furnace/rename.d.ts +0 -6
  387. package/dist/src/commands/furnace/rename.js +0 -400
  388. package/dist/src/commands/furnace/scan.d.ts +0 -14
  389. package/dist/src/commands/furnace/scan.js +0 -192
  390. package/dist/src/commands/furnace/status.d.ts +0 -7
  391. package/dist/src/commands/furnace/status.js +0 -209
  392. package/dist/src/commands/furnace/sync.d.ts +0 -12
  393. package/dist/src/commands/furnace/sync.js +0 -145
  394. package/dist/src/commands/furnace/test-file-name.d.ts +0 -28
  395. package/dist/src/commands/furnace/test-file-name.js +0 -39
  396. package/dist/src/commands/furnace/validate-report.d.ts +0 -45
  397. package/dist/src/commands/furnace/validate-report.js +0 -91
  398. package/dist/src/commands/furnace/validate.d.ts +0 -8
  399. package/dist/src/commands/furnace/validate.js +0 -309
  400. package/dist/src/commands/furnace/validation-output.d.ts +0 -47
  401. package/dist/src/commands/furnace/validation-output.js +0 -161
  402. package/dist/src/commands/import.d.ts +0 -11
  403. package/dist/src/commands/lint-per-patch.d.ts +0 -10
  404. package/dist/src/commands/lint-per-patch.js +0 -428
  405. package/dist/src/commands/lint-per-run-checkjs.d.ts +0 -66
  406. package/dist/src/commands/lint-per-run-checkjs.js +0 -102
  407. package/dist/src/commands/lint-report.d.ts +0 -25
  408. package/dist/src/commands/lint-report.js +0 -76
  409. package/dist/src/commands/lint.d.ts +0 -47
  410. package/dist/src/commands/manifest.d.ts +0 -38
  411. package/dist/src/commands/manifest.js +0 -68
  412. package/dist/src/commands/package.d.ts +0 -11
  413. package/dist/src/commands/park.d.ts +0 -22
  414. package/dist/src/commands/park.js +0 -232
  415. package/dist/src/commands/patch/compact.d.ts +0 -28
  416. package/dist/src/commands/patch/compact.js +0 -208
  417. package/dist/src/commands/patch/delete-gap-notice.d.ts +0 -24
  418. package/dist/src/commands/patch/delete-gap-notice.js +0 -48
  419. package/dist/src/commands/patch/delete.d.ts +0 -28
  420. package/dist/src/commands/patch/delete.js +0 -131
  421. package/dist/src/commands/patch/entry-projection.d.ts +0 -13
  422. package/dist/src/commands/patch/entry-projection.js +0 -24
  423. package/dist/src/commands/patch/index.d.ts +0 -16
  424. package/dist/src/commands/patch/index.js +0 -52
  425. package/dist/src/commands/patch/lint-ignore-from.d.ts +0 -43
  426. package/dist/src/commands/patch/lint-ignore-from.js +0 -141
  427. package/dist/src/commands/patch/lint-ignore.d.ts +0 -42
  428. package/dist/src/commands/patch/lint-ignore.js +0 -261
  429. package/dist/src/commands/patch/move-files-adopt.d.ts +0 -33
  430. package/dist/src/commands/patch/move-files-adopt.js +0 -65
  431. package/dist/src/commands/patch/move-files-create.d.ts +0 -19
  432. package/dist/src/commands/patch/move-files-create.js +0 -187
  433. package/dist/src/commands/patch/move-files-into.d.ts +0 -65
  434. package/dist/src/commands/patch/move-files-into.js +0 -325
  435. package/dist/src/commands/patch/move-files-retire.d.ts +0 -39
  436. package/dist/src/commands/patch/move-files-retire.js +0 -91
  437. package/dist/src/commands/patch/move-files.d.ts +0 -28
  438. package/dist/src/commands/patch/move-files.js +0 -224
  439. package/dist/src/commands/patch/move-size-tier.d.ts +0 -27
  440. package/dist/src/commands/patch/move-size-tier.js +0 -66
  441. package/dist/src/commands/patch/patch-context.d.ts +0 -40
  442. package/dist/src/commands/patch/patch-context.js +0 -51
  443. package/dist/src/commands/patch/removal-created-files.d.ts +0 -48
  444. package/dist/src/commands/patch/removal-created-files.js +0 -83
  445. package/dist/src/commands/patch/removal-dependents.d.ts +0 -63
  446. package/dist/src/commands/patch/removal-dependents.js +0 -133
  447. package/dist/src/commands/patch/rename.d.ts +0 -35
  448. package/dist/src/commands/patch/rename.js +0 -378
  449. package/dist/src/commands/patch/reorder-projection.d.ts +0 -17
  450. package/dist/src/commands/patch/reorder-projection.js +0 -49
  451. package/dist/src/commands/patch/reorder-shift.d.ts +0 -30
  452. package/dist/src/commands/patch/reorder-shift.js +0 -307
  453. package/dist/src/commands/patch/reorder.d.ts +0 -34
  454. package/dist/src/commands/patch/reorder.js +0 -375
  455. package/dist/src/commands/patch/reserve.d.ts +0 -33
  456. package/dist/src/commands/patch/reserve.js +0 -152
  457. package/dist/src/commands/patch/retire.d.ts +0 -34
  458. package/dist/src/commands/patch/retire.js +0 -133
  459. package/dist/src/commands/patch/split-plan.d.ts +0 -125
  460. package/dist/src/commands/patch/split-plan.js +0 -313
  461. package/dist/src/commands/patch/split-staged.d.ts +0 -108
  462. package/dist/src/commands/patch/split-staged.js +0 -202
  463. package/dist/src/commands/patch/split.d.ts +0 -43
  464. package/dist/src/commands/patch/split.js +0 -367
  465. package/dist/src/commands/patch/stage.d.ts +0 -34
  466. package/dist/src/commands/patch/stage.js +0 -153
  467. package/dist/src/commands/patch/staged-dependency-batch.d.ts +0 -48
  468. package/dist/src/commands/patch/staged-dependency-batch.js +0 -176
  469. package/dist/src/commands/patch/staged-dependency-entries.d.ts +0 -44
  470. package/dist/src/commands/patch/staged-dependency-entries.js +0 -80
  471. package/dist/src/commands/patch/staged-dependency-from.d.ts +0 -14
  472. package/dist/src/commands/patch/staged-dependency-from.js +0 -114
  473. package/dist/src/commands/patch/staged-dependency-remove.d.ts +0 -53
  474. package/dist/src/commands/patch/staged-dependency-remove.js +0 -117
  475. package/dist/src/commands/patch/staged-dependency-validate.d.ts +0 -15
  476. package/dist/src/commands/patch/staged-dependency-validate.js +0 -49
  477. package/dist/src/commands/patch/staged-dependency.d.ts +0 -22
  478. package/dist/src/commands/patch/staged-dependency.js +0 -248
  479. package/dist/src/commands/patch/tier.d.ts +0 -34
  480. package/dist/src/commands/patch/tier.js +0 -125
  481. package/dist/src/commands/patch-rename-map.d.ts +0 -30
  482. package/dist/src/commands/patch-rename-map.js +0 -54
  483. package/dist/src/commands/pending-resolution.d.ts +0 -15
  484. package/dist/src/commands/pending-resolution.js +0 -25
  485. package/dist/src/commands/re-export-adjacent-registrations.d.ts +0 -20
  486. package/dist/src/commands/re-export-adjacent-registrations.js +0 -75
  487. package/dist/src/commands/re-export-adjacent.d.ts +0 -111
  488. package/dist/src/commands/re-export-adjacent.js +0 -267
  489. package/dist/src/commands/re-export-bulk-scan.d.ts +0 -19
  490. package/dist/src/commands/re-export-bulk-scan.js +0 -233
  491. package/dist/src/commands/re-export-drift.d.ts +0 -110
  492. package/dist/src/commands/re-export-drift.js +0 -358
  493. package/dist/src/commands/re-export-files.d.ts +0 -15
  494. package/dist/src/commands/re-export-files.js +0 -307
  495. package/dist/src/commands/re-export-hunks.d.ts +0 -35
  496. package/dist/src/commands/re-export-hunks.js +0 -220
  497. package/dist/src/commands/re-export-lint.d.ts +0 -137
  498. package/dist/src/commands/re-export-lint.js +0 -303
  499. package/dist/src/commands/re-export-options.d.ts +0 -29
  500. package/dist/src/commands/re-export-options.js +0 -191
  501. package/dist/src/commands/re-export-preflight.d.ts +0 -23
  502. package/dist/src/commands/re-export-preflight.js +0 -159
  503. package/dist/src/commands/re-export-purity-scope.d.ts +0 -18
  504. package/dist/src/commands/re-export-purity-scope.js +0 -137
  505. package/dist/src/commands/re-export-register.d.ts +0 -12
  506. package/dist/src/commands/re-export-register.js +0 -99
  507. package/dist/src/commands/re-export-removed.d.ts +0 -15
  508. package/dist/src/commands/re-export-removed.js +0 -94
  509. package/dist/src/commands/re-export-retired-declarations.d.ts +0 -22
  510. package/dist/src/commands/re-export-retired-declarations.js +0 -113
  511. package/dist/src/commands/re-export-scan-owner.d.ts +0 -44
  512. package/dist/src/commands/re-export-scan-owner.js +0 -116
  513. package/dist/src/commands/re-export-scan.d.ts +0 -72
  514. package/dist/src/commands/re-export-scan.js +0 -265
  515. package/dist/src/commands/re-export-single.d.ts +0 -39
  516. package/dist/src/commands/re-export-single.js +0 -388
  517. package/dist/src/commands/re-export-stale-registrations.d.ts +0 -39
  518. package/dist/src/commands/re-export-stale-registrations.js +0 -106
  519. package/dist/src/commands/re-export-summary.d.ts +0 -28
  520. package/dist/src/commands/re-export-summary.js +0 -36
  521. package/dist/src/commands/re-export.d.ts +0 -8
  522. package/dist/src/commands/rebase/abort.d.ts +0 -7
  523. package/dist/src/commands/rebase/abort.js +0 -67
  524. package/dist/src/commands/rebase/confirm.d.ts +0 -42
  525. package/dist/src/commands/rebase/confirm.js +0 -36
  526. package/dist/src/commands/rebase/conflict-summary.d.ts +0 -12
  527. package/dist/src/commands/rebase/conflict-summary.js +0 -37
  528. package/dist/src/commands/rebase/continue.d.ts +0 -7
  529. package/dist/src/commands/rebase/continue.js +0 -119
  530. package/dist/src/commands/rebase/index.d.ts +0 -22
  531. package/dist/src/commands/rebase/index.js +0 -209
  532. package/dist/src/commands/rebase/patch-loop.d.ts +0 -15
  533. package/dist/src/commands/rebase/patch-loop.js +0 -289
  534. package/dist/src/commands/rebase/summary.d.ts +0 -8
  535. package/dist/src/commands/rebase/summary.js +0 -47
  536. package/dist/src/commands/register.d.ts +0 -13
  537. package/dist/src/commands/reset.d.ts +0 -11
  538. package/dist/src/commands/resolve.d.ts +0 -36
  539. package/dist/src/commands/run.d.ts +0 -10
  540. package/dist/src/commands/setup-support.d.ts +0 -35
  541. package/dist/src/commands/setup-support.js +0 -386
  542. package/dist/src/commands/setup.d.ts +0 -11
  543. package/dist/src/commands/source.d.ts +0 -9
  544. package/dist/src/commands/source.js +0 -120
  545. package/dist/src/commands/status-check.d.ts +0 -87
  546. package/dist/src/commands/status-check.js +0 -161
  547. package/dist/src/commands/status-json.d.ts +0 -45
  548. package/dist/src/commands/status-json.js +0 -97
  549. package/dist/src/commands/status-output.d.ts +0 -23
  550. package/dist/src/commands/status-output.js +0 -231
  551. package/dist/src/commands/status-ownership.d.ts +0 -54
  552. package/dist/src/commands/status-ownership.js +0 -59
  553. package/dist/src/commands/status-scope.d.ts +0 -37
  554. package/dist/src/commands/status-scope.js +0 -54
  555. package/dist/src/commands/status.d.ts +0 -11
  556. package/dist/src/commands/test-appdir.d.ts +0 -6
  557. package/dist/src/commands/test-appdir.js +0 -29
  558. package/dist/src/commands/test-browser-preflight.d.ts +0 -28
  559. package/dist/src/commands/test-browser-preflight.js +0 -197
  560. package/dist/src/commands/test-build-furnace.d.ts +0 -21
  561. package/dist/src/commands/test-build-furnace.js +0 -53
  562. package/dist/src/commands/test-build-phase.d.ts +0 -29
  563. package/dist/src/commands/test-build-phase.js +0 -290
  564. package/dist/src/commands/test-checkjs.d.ts +0 -3
  565. package/dist/src/commands/test-checkjs.js +0 -35
  566. package/dist/src/commands/test-control-restore.d.ts +0 -40
  567. package/dist/src/commands/test-control-restore.js +0 -86
  568. package/dist/src/commands/test-diagnose.d.ts +0 -23
  569. package/dist/src/commands/test-diagnose.js +0 -317
  570. package/dist/src/commands/test-dispatch.d.ts +0 -39
  571. package/dist/src/commands/test-dispatch.js +0 -281
  572. package/dist/src/commands/test-furnace-reach.d.ts +0 -37
  573. package/dist/src/commands/test-furnace-reach.js +0 -132
  574. package/dist/src/commands/test-harness-env.d.ts +0 -23
  575. package/dist/src/commands/test-harness-env.js +0 -81
  576. package/dist/src/commands/test-harness-teardown.d.ts +0 -62
  577. package/dist/src/commands/test-harness-teardown.js +0 -128
  578. package/dist/src/commands/test-modes.d.ts +0 -57
  579. package/dist/src/commands/test-modes.js +0 -158
  580. package/dist/src/commands/test-multi-verdict.d.ts +0 -61
  581. package/dist/src/commands/test-multi-verdict.js +0 -112
  582. package/dist/src/commands/test-orchestrate.d.ts +0 -63
  583. package/dist/src/commands/test-orchestrate.js +0 -274
  584. package/dist/src/commands/test-perf-scope.d.ts +0 -50
  585. package/dist/src/commands/test-perf-scope.js +0 -138
  586. package/dist/src/commands/test-prelock.d.ts +0 -61
  587. package/dist/src/commands/test-prelock.js +0 -301
  588. package/dist/src/commands/test-register.d.ts +0 -4
  589. package/dist/src/commands/test-register.js +0 -181
  590. package/dist/src/commands/test-results.d.ts +0 -71
  591. package/dist/src/commands/test-results.js +0 -79
  592. package/dist/src/commands/test-run.d.ts +0 -89
  593. package/dist/src/commands/test-run.js +0 -251
  594. package/dist/src/commands/test-shards.d.ts +0 -114
  595. package/dist/src/commands/test-shards.js +0 -272
  596. package/dist/src/commands/test-stale-gate.d.ts +0 -52
  597. package/dist/src/commands/test-stale-gate.js +0 -165
  598. package/dist/src/commands/test-verdict.d.ts +0 -92
  599. package/dist/src/commands/test-verdict.js +0 -162
  600. package/dist/src/commands/test.d.ts +0 -22
  601. package/dist/src/commands/token-coverage.d.ts +0 -5
  602. package/dist/src/commands/token-coverage.js +0 -170
  603. package/dist/src/commands/token-lint.d.ts +0 -14
  604. package/dist/src/commands/token-lint.js +0 -151
  605. package/dist/src/commands/token-list.d.ts +0 -26
  606. package/dist/src/commands/token-list.js +0 -153
  607. package/dist/src/commands/token.d.ts +0 -14
  608. package/dist/src/commands/tree.d.ts +0 -19
  609. package/dist/src/commands/tree.js +0 -341
  610. package/dist/src/commands/typecheck.d.ts +0 -56
  611. package/dist/src/commands/verify-scope.d.ts +0 -28
  612. package/dist/src/commands/verify-scope.js +0 -67
  613. package/dist/src/commands/verify.d.ts +0 -58
  614. package/dist/src/commands/watch.d.ts +0 -9
  615. package/dist/src/commands/wire.d.ts +0 -13
  616. package/dist/src/core/ast-utils.d.ts +0 -73
  617. package/dist/src/core/ast-utils.js +0 -105
  618. package/dist/src/core/brand-validation.d.ts +0 -7
  619. package/dist/src/core/brand-validation.js +0 -14
  620. package/dist/src/core/branding.d.ts +0 -86
  621. package/dist/src/core/branding.js +0 -371
  622. package/dist/src/core/browser-wire.d.ts +0 -48
  623. package/dist/src/core/browser-wire.js +0 -133
  624. package/dist/src/core/build-audit-platform.d.ts +0 -67
  625. package/dist/src/core/build-audit-platform.js +0 -373
  626. package/dist/src/core/build-audit-registration.d.ts +0 -80
  627. package/dist/src/core/build-audit-registration.js +0 -181
  628. package/dist/src/core/build-audit-resolve.d.ts +0 -78
  629. package/dist/src/core/build-audit-resolve.js +0 -240
  630. package/dist/src/core/build-audit-skip.d.ts +0 -57
  631. package/dist/src/core/build-audit-skip.js +0 -112
  632. package/dist/src/core/build-audit-transforms.d.ts +0 -23
  633. package/dist/src/core/build-audit-transforms.js +0 -92
  634. package/dist/src/core/build-audit.d.ts +0 -93
  635. package/dist/src/core/build-audit.js +0 -633
  636. package/dist/src/core/build-baseline-types.d.ts +0 -225
  637. package/dist/src/core/build-baseline-types.js +0 -10
  638. package/dist/src/core/build-baseline-validate.d.ts +0 -32
  639. package/dist/src/core/build-baseline-validate.js +0 -173
  640. package/dist/src/core/build-baseline.d.ts +0 -103
  641. package/dist/src/core/build-baseline.js +0 -261
  642. package/dist/src/core/build-jar-escalation.d.ts +0 -61
  643. package/dist/src/core/build-jar-escalation.js +0 -125
  644. package/dist/src/core/build-overwrite-guard.d.ts +0 -92
  645. package/dist/src/core/build-overwrite-guard.js +0 -235
  646. package/dist/src/core/build-prepare.d.ts +0 -83
  647. package/dist/src/core/build-prepare.js +0 -414
  648. package/dist/src/core/build-run-record.d.ts +0 -74
  649. package/dist/src/core/build-run-record.js +0 -136
  650. package/dist/src/core/checkjs-support-heads.d.ts +0 -41
  651. package/dist/src/core/checkjs-support-heads.js +0 -104
  652. package/dist/src/core/component-source-guard.d.ts +0 -20
  653. package/dist/src/core/component-source-guard.js +0 -68
  654. package/dist/src/core/config-mutate.d.ts +0 -16
  655. package/dist/src/core/config-mutate.js +0 -76
  656. package/dist/src/core/config-paths.d.ts +0 -16
  657. package/dist/src/core/config-paths.js +0 -106
  658. package/dist/src/core/config-state.d.ts +0 -16
  659. package/dist/src/core/config-state.js +0 -141
  660. package/dist/src/core/config-validate-build-audit.d.ts +0 -8
  661. package/dist/src/core/config-validate-build-audit.js +0 -80
  662. package/dist/src/core/config-validate-check.d.ts +0 -8
  663. package/dist/src/core/config-validate-check.js +0 -219
  664. package/dist/src/core/config-validate-file-size.d.ts +0 -15
  665. package/dist/src/core/config-validate-file-size.js +0 -154
  666. package/dist/src/core/config-validate-history.d.ts +0 -11
  667. package/dist/src/core/config-validate-history.js +0 -38
  668. package/dist/src/core/config-validate-patch-policy.d.ts +0 -7
  669. package/dist/src/core/config-validate-patch-policy.js +0 -274
  670. package/dist/src/core/config-validate-test-toolchains.d.ts +0 -8
  671. package/dist/src/core/config-validate-test-toolchains.js +0 -133
  672. package/dist/src/core/config-validate-token-scales.d.ts +0 -9
  673. package/dist/src/core/config-validate-token-scales.js +0 -92
  674. package/dist/src/core/config-validate.d.ts +0 -11
  675. package/dist/src/core/config-validate.js +0 -503
  676. package/dist/src/core/config.d.ts +0 -92
  677. package/dist/src/core/config.js +0 -169
  678. package/dist/src/core/coverage-dispatch.d.ts +0 -24
  679. package/dist/src/core/coverage-dispatch.js +0 -44
  680. package/dist/src/core/coverage-extend.d.ts +0 -89
  681. package/dist/src/core/coverage-extend.js +0 -239
  682. package/dist/src/core/coverage-records.d.ts +0 -107
  683. package/dist/src/core/coverage-records.js +0 -383
  684. package/dist/src/core/destructive.d.ts +0 -144
  685. package/dist/src/core/destructive.js +0 -182
  686. package/dist/src/core/diff-hunks.d.ts +0 -73
  687. package/dist/src/core/diff-hunks.js +0 -286
  688. package/dist/src/core/discard-baseline.d.ts +0 -60
  689. package/dist/src/core/discard-baseline.js +0 -247
  690. package/dist/src/core/display-state.d.ts +0 -50
  691. package/dist/src/core/display-state.js +0 -87
  692. package/dist/src/core/engine-changes.d.ts +0 -40
  693. package/dist/src/core/engine-changes.js +0 -95
  694. package/dist/src/core/engine-precondition.d.ts +0 -42
  695. package/dist/src/core/engine-precondition.js +0 -60
  696. package/dist/src/core/engine-session-lock.d.ts +0 -119
  697. package/dist/src/core/engine-session-lock.js +0 -374
  698. package/dist/src/core/engine-write-boundary.d.ts +0 -5
  699. package/dist/src/core/engine-write-boundary.js +0 -41
  700. package/dist/src/core/export-moved-code-shape.d.ts +0 -98
  701. package/dist/src/core/export-moved-code-shape.js +0 -220
  702. package/dist/src/core/file-lock-owner.d.ts +0 -103
  703. package/dist/src/core/file-lock-owner.js +0 -259
  704. package/dist/src/core/file-lock-queue.d.ts +0 -67
  705. package/dist/src/core/file-lock-queue.js +0 -219
  706. package/dist/src/core/file-lock-shared.d.ts +0 -57
  707. package/dist/src/core/file-lock-shared.js +0 -117
  708. package/dist/src/core/file-lock.d.ts +0 -143
  709. package/dist/src/core/file-lock.js +0 -531
  710. package/dist/src/core/firefox-archive.d.ts +0 -45
  711. package/dist/src/core/firefox-archive.js +0 -96
  712. package/dist/src/core/firefox-cache.d.ts +0 -30
  713. package/dist/src/core/firefox-cache.js +0 -248
  714. package/dist/src/core/firefox-download.d.ts +0 -30
  715. package/dist/src/core/firefox-download.js +0 -152
  716. package/dist/src/core/firefox-extract.d.ts +0 -42
  717. package/dist/src/core/firefox-extract.js +0 -248
  718. package/dist/src/core/firefox-ignorefile.d.ts +0 -17
  719. package/dist/src/core/firefox-ignorefile.js +0 -30
  720. package/dist/src/core/firefox.d.ts +0 -66
  721. package/dist/src/core/firefox.js +0 -121
  722. package/dist/src/core/forward-registrations.d.ts +0 -33
  723. package/dist/src/core/forward-registrations.js +0 -16
  724. package/dist/src/core/furnace-apply-dry-run.d.ts +0 -12
  725. package/dist/src/core/furnace-apply-dry-run.js +0 -99
  726. package/dist/src/core/furnace-apply-ftl.d.ts +0 -49
  727. package/dist/src/core/furnace-apply-ftl.js +0 -210
  728. package/dist/src/core/furnace-apply-helpers.d.ts +0 -106
  729. package/dist/src/core/furnace-apply-helpers.js +0 -436
  730. package/dist/src/core/furnace-apply-output.d.ts +0 -36
  731. package/dist/src/core/furnace-apply-output.js +0 -111
  732. package/dist/src/core/furnace-apply-overwrite-warn.d.ts +0 -62
  733. package/dist/src/core/furnace-apply-overwrite-warn.js +0 -124
  734. package/dist/src/core/furnace-apply-undeploy-actions.d.ts +0 -10
  735. package/dist/src/core/furnace-apply-undeploy-actions.js +0 -48
  736. package/dist/src/core/furnace-apply.d.ts +0 -49
  737. package/dist/src/core/furnace-apply.js +0 -465
  738. package/dist/src/core/furnace-checksum-utils.d.ts +0 -25
  739. package/dist/src/core/furnace-checksum-utils.js +0 -54
  740. package/dist/src/core/furnace-composed-source.d.ts +0 -76
  741. package/dist/src/core/furnace-composed-source.js +0 -167
  742. package/dist/src/core/furnace-config-array-utils.d.ts +0 -11
  743. package/dist/src/core/furnace-config-array-utils.js +0 -26
  744. package/dist/src/core/furnace-config-custom.d.ts +0 -15
  745. package/dist/src/core/furnace-config-custom.js +0 -73
  746. package/dist/src/core/furnace-config-order.d.ts +0 -8
  747. package/dist/src/core/furnace-config-order.js +0 -90
  748. package/dist/src/core/furnace-config-tokens.d.ts +0 -17
  749. package/dist/src/core/furnace-config-tokens.js +0 -42
  750. package/dist/src/core/furnace-config-validate-exceptions.d.ts +0 -17
  751. package/dist/src/core/furnace-config-validate-exceptions.js +0 -122
  752. package/dist/src/core/furnace-config-validate.d.ts +0 -32
  753. package/dist/src/core/furnace-config-validate.js +0 -146
  754. package/dist/src/core/furnace-config.d.ts +0 -139
  755. package/dist/src/core/furnace-config.js +0 -511
  756. package/dist/src/core/furnace-constants.d.ts +0 -79
  757. package/dist/src/core/furnace-constants.js +0 -123
  758. package/dist/src/core/furnace-css-fragments.d.ts +0 -96
  759. package/dist/src/core/furnace-css-fragments.js +0 -279
  760. package/dist/src/core/furnace-dir-entry.d.ts +0 -20
  761. package/dist/src/core/furnace-dir-entry.js +0 -21
  762. package/dist/src/core/furnace-fragment-includers.d.ts +0 -56
  763. package/dist/src/core/furnace-fragment-includers.js +0 -122
  764. package/dist/src/core/furnace-graph-utils.d.ts +0 -11
  765. package/dist/src/core/furnace-graph-utils.js +0 -93
  766. package/dist/src/core/furnace-jsconfig.d.ts +0 -61
  767. package/dist/src/core/furnace-jsconfig.js +0 -208
  768. package/dist/src/core/furnace-marker.d.ts +0 -15
  769. package/dist/src/core/furnace-marker.js +0 -21
  770. package/dist/src/core/furnace-operation.d.ts +0 -195
  771. package/dist/src/core/furnace-operation.js +0 -444
  772. package/dist/src/core/furnace-precondition.d.ts +0 -61
  773. package/dist/src/core/furnace-precondition.js +0 -67
  774. package/dist/src/core/furnace-refresh.d.ts +0 -28
  775. package/dist/src/core/furnace-refresh.js +0 -125
  776. package/dist/src/core/furnace-registration-ast.d.ts +0 -53
  777. package/dist/src/core/furnace-registration-ast.js +0 -402
  778. package/dist/src/core/furnace-registration-jar-inplace.d.ts +0 -12
  779. package/dist/src/core/furnace-registration-jar-inplace.js +0 -79
  780. package/dist/src/core/furnace-registration-remove.d.ts +0 -56
  781. package/dist/src/core/furnace-registration-remove.js +0 -260
  782. package/dist/src/core/furnace-registration-rename.d.ts +0 -26
  783. package/dist/src/core/furnace-registration-rename.js +0 -77
  784. package/dist/src/core/furnace-registration-validate.d.ts +0 -53
  785. package/dist/src/core/furnace-registration-validate.js +0 -110
  786. package/dist/src/core/furnace-registration.d.ts +0 -112
  787. package/dist/src/core/furnace-registration.js +0 -348
  788. package/dist/src/core/furnace-rollback.d.ts +0 -48
  789. package/dist/src/core/furnace-rollback.js +0 -170
  790. package/dist/src/core/furnace-scanner.d.ts +0 -47
  791. package/dist/src/core/furnace-scanner.js +0 -236
  792. package/dist/src/core/furnace-stale-export.d.ts +0 -60
  793. package/dist/src/core/furnace-stale-export.js +0 -125
  794. package/dist/src/core/furnace-staleness.d.ts +0 -24
  795. package/dist/src/core/furnace-staleness.js +0 -67
  796. package/dist/src/core/furnace-state-persist.d.ts +0 -68
  797. package/dist/src/core/furnace-state-persist.js +0 -116
  798. package/dist/src/core/furnace-step-errors.d.ts +0 -23
  799. package/dist/src/core/furnace-step-errors.js +0 -25
  800. package/dist/src/core/furnace-stories.d.ts +0 -37
  801. package/dist/src/core/furnace-stories.js +0 -186
  802. package/dist/src/core/furnace-validate-accessibility.d.ts +0 -39
  803. package/dist/src/core/furnace-validate-accessibility.js +0 -417
  804. package/dist/src/core/furnace-validate-checks.d.ts +0 -4
  805. package/dist/src/core/furnace-validate-checks.js +0 -6
  806. package/dist/src/core/furnace-validate-compatibility.d.ts +0 -6
  807. package/dist/src/core/furnace-validate-compatibility.js +0 -295
  808. package/dist/src/core/furnace-validate-exceptions.d.ts +0 -49
  809. package/dist/src/core/furnace-validate-exceptions.js +0 -98
  810. package/dist/src/core/furnace-validate-helpers.d.ts +0 -7
  811. package/dist/src/core/furnace-validate-helpers.js +0 -4
  812. package/dist/src/core/furnace-validate-icon-button.d.ts +0 -7
  813. package/dist/src/core/furnace-validate-icon-button.js +0 -78
  814. package/dist/src/core/furnace-validate-registration.d.ts +0 -67
  815. package/dist/src/core/furnace-validate-registration.js +0 -487
  816. package/dist/src/core/furnace-validate-structure.d.ts +0 -22
  817. package/dist/src/core/furnace-validate-structure.js +0 -122
  818. package/dist/src/core/furnace-validate.d.ts +0 -41
  819. package/dist/src/core/furnace-validate.js +0 -302
  820. package/dist/src/core/furnace-version-drift.d.ts +0 -57
  821. package/dist/src/core/furnace-version-drift.js +0 -102
  822. package/dist/src/core/gecko-dom-types.d.ts +0 -2
  823. package/dist/src/core/gecko-dom-types.js +0 -17
  824. package/dist/src/core/git-base.d.ts +0 -101
  825. package/dist/src/core/git-base.js +0 -162
  826. package/dist/src/core/git-diff-new-file.d.ts +0 -40
  827. package/dist/src/core/git-diff-new-file.js +0 -118
  828. package/dist/src/core/git-diff.d.ts +0 -82
  829. package/dist/src/core/git-diff.js +0 -539
  830. package/dist/src/core/git-file-ops.d.ts +0 -108
  831. package/dist/src/core/git-file-ops.js +0 -280
  832. package/dist/src/core/git-readonly-index.d.ts +0 -91
  833. package/dist/src/core/git-readonly-index.js +0 -177
  834. package/dist/src/core/git-status.d.ts +0 -84
  835. package/dist/src/core/git-status.js +0 -208
  836. package/dist/src/core/git.d.ts +0 -114
  837. package/dist/src/core/git.js +0 -540
  838. package/dist/src/core/harness-helper-pids.d.ts +0 -98
  839. package/dist/src/core/harness-helper-pids.js +0 -240
  840. package/dist/src/core/harness-orphans.d.ts +0 -118
  841. package/dist/src/core/harness-orphans.js +0 -268
  842. package/dist/src/core/harness-port-fallback.d.ts +0 -60
  843. package/dist/src/core/harness-port-fallback.js +0 -96
  844. package/dist/src/core/harness-port-reservation.d.ts +0 -60
  845. package/dist/src/core/harness-port-reservation.js +0 -122
  846. package/dist/src/core/history-log-file.d.ts +0 -61
  847. package/dist/src/core/history-log-file.js +0 -164
  848. package/dist/src/core/history-log.d.ts +0 -20
  849. package/dist/src/core/history-log.js +0 -30
  850. package/dist/src/core/json-preserving-edit.d.ts +0 -22
  851. package/dist/src/core/json-preserving-edit.js +0 -199
  852. package/dist/src/core/launchable-build.d.ts +0 -39
  853. package/dist/src/core/launchable-build.js +0 -85
  854. package/dist/src/core/license-headers.d.ts +0 -103
  855. package/dist/src/core/license-headers.js +0 -318
  856. package/dist/src/core/line-prefixer.d.ts +0 -18
  857. package/dist/src/core/line-prefixer.js +0 -34
  858. package/dist/src/core/lit-template-regions.d.ts +0 -4
  859. package/dist/src/core/lit-template-regions.js +0 -50
  860. package/dist/src/core/mach-build-artifacts.d.ts +0 -176
  861. package/dist/src/core/mach-build-artifacts.js +0 -436
  862. package/dist/src/core/mach-error-hints.d.ts +0 -24
  863. package/dist/src/core/mach-error-hints.js +0 -135
  864. package/dist/src/core/mach-known-noise-filter.d.ts +0 -122
  865. package/dist/src/core/mach-known-noise-filter.js +0 -257
  866. package/dist/src/core/mach-mozconfig.d.ts +0 -57
  867. package/dist/src/core/mach-mozconfig.js +0 -166
  868. package/dist/src/core/mach-python.d.ts +0 -19
  869. package/dist/src/core/mach-python.js +0 -131
  870. package/dist/src/core/mach-resource-shim.d.ts +0 -107
  871. package/dist/src/core/mach-resource-shim.js +0 -640
  872. package/dist/src/core/mach.d.ts +0 -284
  873. package/dist/src/core/mach.js +0 -445
  874. package/dist/src/core/marionette-port.d.ts +0 -153
  875. package/dist/src/core/marionette-port.js +0 -474
  876. package/dist/src/core/marionette-preflight.d.ts +0 -58
  877. package/dist/src/core/marionette-preflight.js +0 -332
  878. package/dist/src/core/markdown-table.d.ts +0 -104
  879. package/dist/src/core/markdown-table.js +0 -265
  880. package/dist/src/core/mochitest-server-port.d.ts +0 -81
  881. package/dist/src/core/mochitest-server-port.js +0 -175
  882. package/dist/src/core/module-resolution-preflight.d.ts +0 -65
  883. package/dist/src/core/module-resolution-preflight.js +0 -171
  884. package/dist/src/core/moz-manifest-helpers.d.ts +0 -79
  885. package/dist/src/core/moz-manifest-helpers.js +0 -163
  886. package/dist/src/core/moz-manifest-register.d.ts +0 -19
  887. package/dist/src/core/moz-manifest-register.js +0 -51
  888. package/dist/src/core/moz-manifest-rules.d.ts +0 -58
  889. package/dist/src/core/moz-manifest-rules.js +0 -264
  890. package/dist/src/core/moz-manifest-tokenizers.d.ts +0 -38
  891. package/dist/src/core/moz-manifest-tokenizers.js +0 -108
  892. package/dist/src/core/negative-control-compiled.d.ts +0 -46
  893. package/dist/src/core/negative-control-compiled.js +0 -109
  894. package/dist/src/core/negative-control-diff.d.ts +0 -51
  895. package/dist/src/core/negative-control-diff.js +0 -204
  896. package/dist/src/core/negative-control.d.ts +0 -150
  897. package/dist/src/core/negative-control.js +0 -399
  898. package/dist/src/core/objdir-install-manifests.d.ts +0 -73
  899. package/dist/src/core/objdir-install-manifests.js +0 -226
  900. package/dist/src/core/objdir-maintenance.d.ts +0 -10
  901. package/dist/src/core/objdir-maintenance.js +0 -167
  902. package/dist/src/core/ownership-table.d.ts +0 -53
  903. package/dist/src/core/ownership-table.js +0 -159
  904. package/dist/src/core/parent-exit-watchdog.d.ts +0 -62
  905. package/dist/src/core/parent-exit-watchdog.js +0 -69
  906. package/dist/src/core/park-store.d.ts +0 -63
  907. package/dist/src/core/park-store.js +0 -216
  908. package/dist/src/core/parser-fallback.d.ts +0 -50
  909. package/dist/src/core/parser-fallback.js +0 -61
  910. package/dist/src/core/patch-apply-fuzz.d.ts +0 -57
  911. package/dist/src/core/patch-apply-fuzz.js +0 -125
  912. package/dist/src/core/patch-apply.d.ts +0 -88
  913. package/dist/src/core/patch-apply.js +0 -435
  914. package/dist/src/core/patch-export-coverage.d.ts +0 -49
  915. package/dist/src/core/patch-export-coverage.js +0 -73
  916. package/dist/src/core/patch-export-metadata.d.ts +0 -46
  917. package/dist/src/core/patch-export-metadata.js +0 -47
  918. package/dist/src/core/patch-export-update.d.ts +0 -55
  919. package/dist/src/core/patch-export-update.js +0 -95
  920. package/dist/src/core/patch-export.d.ts +0 -175
  921. package/dist/src/core/patch-export.js +0 -312
  922. package/dist/src/core/patch-files.d.ts +0 -17
  923. package/dist/src/core/patch-files.js +0 -59
  924. package/dist/src/core/patch-identifier-suggest.d.ts +0 -26
  925. package/dist/src/core/patch-identifier-suggest.js +0 -135
  926. package/dist/src/core/patch-lint-binary.d.ts +0 -45
  927. package/dist/src/core/patch-lint-binary.js +0 -39
  928. package/dist/src/core/patch-lint-cache.d.ts +0 -78
  929. package/dist/src/core/patch-lint-cache.js +0 -233
  930. package/dist/src/core/patch-lint-checkjs-any-import.d.ts +0 -39
  931. package/dist/src/core/patch-lint-checkjs-any-import.js +0 -63
  932. package/dist/src/core/patch-lint-checkjs-cache.d.ts +0 -18
  933. package/dist/src/core/patch-lint-checkjs-cache.js +0 -45
  934. package/dist/src/core/patch-lint-checkjs-diagnostics.d.ts +0 -17
  935. package/dist/src/core/patch-lint-checkjs-diagnostics.js +0 -32
  936. package/dist/src/core/patch-lint-checkjs.d.ts +0 -180
  937. package/dist/src/core/patch-lint-checkjs.js +0 -611
  938. package/dist/src/core/patch-lint-chrome-jsdoc.d.ts +0 -43
  939. package/dist/src/core/patch-lint-chrome-jsdoc.js +0 -90
  940. package/dist/src/core/patch-lint-code-lines.d.ts +0 -59
  941. package/dist/src/core/patch-lint-code-lines.js +0 -105
  942. package/dist/src/core/patch-lint-creators.d.ts +0 -26
  943. package/dist/src/core/patch-lint-creators.js +0 -45
  944. package/dist/src/core/patch-lint-cross.d.ts +0 -232
  945. package/dist/src/core/patch-lint-cross.js +0 -590
  946. package/dist/src/core/patch-lint-css.d.ts +0 -27
  947. package/dist/src/core/patch-lint-css.js +0 -228
  948. package/dist/src/core/patch-lint-diff-tag.d.ts +0 -51
  949. package/dist/src/core/patch-lint-diff-tag.js +0 -105
  950. package/dist/src/core/patch-lint-diff.d.ts +0 -42
  951. package/dist/src/core/patch-lint-diff.js +0 -100
  952. package/dist/src/core/patch-lint-file-size.d.ts +0 -57
  953. package/dist/src/core/patch-lint-file-size.js +0 -62
  954. package/dist/src/core/patch-lint-forward-registration-extended.d.ts +0 -61
  955. package/dist/src/core/patch-lint-forward-registration-extended.js +0 -265
  956. package/dist/src/core/patch-lint-forward-registration.d.ts +0 -71
  957. package/dist/src/core/patch-lint-forward-registration.js +0 -266
  958. package/dist/src/core/patch-lint-ignore.d.ts +0 -196
  959. package/dist/src/core/patch-lint-ignore.js +0 -429
  960. package/dist/src/core/patch-lint-imports.d.ts +0 -5
  961. package/dist/src/core/patch-lint-imports.js +0 -67
  962. package/dist/src/core/patch-lint-jsdoc.d.ts +0 -67
  963. package/dist/src/core/patch-lint-jsdoc.js +0 -471
  964. package/dist/src/core/patch-lint-module-registration.d.ts +0 -22
  965. package/dist/src/core/patch-lint-module-registration.js +0 -97
  966. package/dist/src/core/patch-lint-mozbuild.d.ts +0 -18
  967. package/dist/src/core/patch-lint-mozbuild.js +0 -192
  968. package/dist/src/core/patch-lint-observer.d.ts +0 -37
  969. package/dist/src/core/patch-lint-observer.js +0 -167
  970. package/dist/src/core/patch-lint-ownership.d.ts +0 -74
  971. package/dist/src/core/patch-lint-ownership.js +0 -125
  972. package/dist/src/core/patch-lint-prettier.d.ts +0 -34
  973. package/dist/src/core/patch-lint-prettier.js +0 -124
  974. package/dist/src/core/patch-lint-projection.d.ts +0 -25
  975. package/dist/src/core/patch-lint-projection.js +0 -43
  976. package/dist/src/core/patch-lint-queue-types.d.ts +0 -60
  977. package/dist/src/core/patch-lint-queue-types.js +0 -12
  978. package/dist/src/core/patch-lint-size-thresholds.d.ts +0 -52
  979. package/dist/src/core/patch-lint-size-thresholds.js +0 -110
  980. package/dist/src/core/patch-lint-size.d.ts +0 -117
  981. package/dist/src/core/patch-lint-size.js +0 -331
  982. package/dist/src/core/patch-lint-staged-registration.d.ts +0 -78
  983. package/dist/src/core/patch-lint-staged-registration.js +0 -110
  984. package/dist/src/core/patch-lint-token-scale.d.ts +0 -57
  985. package/dist/src/core/patch-lint-token-scale.js +0 -286
  986. package/dist/src/core/patch-lint-unmanaged-companion.d.ts +0 -106
  987. package/dist/src/core/patch-lint-unmanaged-companion.js +0 -214
  988. package/dist/src/core/patch-lint.d.ts +0 -191
  989. package/dist/src/core/patch-lint.js +0 -529
  990. package/dist/src/core/patch-lock.d.ts +0 -40
  991. package/dist/src/core/patch-lock.js +0 -129
  992. package/dist/src/core/patch-manifest-consistency.d.ts +0 -95
  993. package/dist/src/core/patch-manifest-consistency.js +0 -256
  994. package/dist/src/core/patch-manifest-files-affected.d.ts +0 -43
  995. package/dist/src/core/patch-manifest-files-affected.js +0 -77
  996. package/dist/src/core/patch-manifest-io.d.ts +0 -199
  997. package/dist/src/core/patch-manifest-io.js +0 -556
  998. package/dist/src/core/patch-manifest-key-order.d.ts +0 -23
  999. package/dist/src/core/patch-manifest-key-order.js +0 -60
  1000. package/dist/src/core/patch-manifest-query.d.ts +0 -55
  1001. package/dist/src/core/patch-manifest-query.js +0 -139
  1002. package/dist/src/core/patch-manifest-resolve.d.ts +0 -21
  1003. package/dist/src/core/patch-manifest-resolve.js +0 -35
  1004. package/dist/src/core/patch-manifest-stage.d.ts +0 -46
  1005. package/dist/src/core/patch-manifest-stage.js +0 -96
  1006. package/dist/src/core/patch-manifest-validate.d.ts +0 -20
  1007. package/dist/src/core/patch-manifest-validate.js +0 -240
  1008. package/dist/src/core/patch-manifest.d.ts +0 -12
  1009. package/dist/src/core/patch-manifest.js +0 -13
  1010. package/dist/src/core/patch-order-legal.d.ts +0 -26
  1011. package/dist/src/core/patch-order-legal.js +0 -88
  1012. package/dist/src/core/patch-parse.d.ts +0 -161
  1013. package/dist/src/core/patch-parse.js +0 -347
  1014. package/dist/src/core/patch-policy-content.d.ts +0 -40
  1015. package/dist/src/core/patch-policy-content.js +0 -216
  1016. package/dist/src/core/patch-policy.d.ts +0 -80
  1017. package/dist/src/core/patch-policy.js +0 -394
  1018. package/dist/src/core/patch-registration-refs.d.ts +0 -41
  1019. package/dist/src/core/patch-registration-refs.js +0 -107
  1020. package/dist/src/core/patch-retired.d.ts +0 -57
  1021. package/dist/src/core/patch-retired.js +0 -92
  1022. package/dist/src/core/patch-source-metadata.d.ts +0 -6
  1023. package/dist/src/core/patch-source-metadata.js +0 -12
  1024. package/dist/src/core/patch-subset.d.ts +0 -18
  1025. package/dist/src/core/patch-subset.js +0 -67
  1026. package/dist/src/core/patch-transform.d.ts +0 -61
  1027. package/dist/src/core/patch-transform.js +0 -198
  1028. package/dist/src/core/preflight-wait.d.ts +0 -22
  1029. package/dist/src/core/preflight-wait.js +0 -62
  1030. package/dist/src/core/process-cpu-time.d.ts +0 -12
  1031. package/dist/src/core/process-cpu-time.js +0 -52
  1032. package/dist/src/core/process-owner.d.ts +0 -9
  1033. package/dist/src/core/process-owner.js +0 -43
  1034. package/dist/src/core/rebase-dry-run.d.ts +0 -48
  1035. package/dist/src/core/rebase-dry-run.js +0 -105
  1036. package/dist/src/core/rebase-from-version.d.ts +0 -46
  1037. package/dist/src/core/rebase-from-version.js +0 -71
  1038. package/dist/src/core/rebase-session.d.ts +0 -100
  1039. package/dist/src/core/rebase-session.js +0 -174
  1040. package/dist/src/core/register-browser-content.d.ts +0 -11
  1041. package/dist/src/core/register-browser-content.js +0 -52
  1042. package/dist/src/core/register-browser-test.d.ts +0 -18
  1043. package/dist/src/core/register-browser-test.js +0 -66
  1044. package/dist/src/core/register-module.d.ts +0 -11
  1045. package/dist/src/core/register-module.js +0 -56
  1046. package/dist/src/core/register-result.d.ts +0 -30
  1047. package/dist/src/core/register-result.js +0 -8
  1048. package/dist/src/core/register-scaffold.d.ts +0 -55
  1049. package/dist/src/core/register-scaffold.js +0 -146
  1050. package/dist/src/core/register-shared-css.d.ts +0 -36
  1051. package/dist/src/core/register-shared-css.js +0 -112
  1052. package/dist/src/core/register-xpcshell-test.d.ts +0 -50
  1053. package/dist/src/core/register-xpcshell-test.js +0 -143
  1054. package/dist/src/core/run-log-redact.d.ts +0 -38
  1055. package/dist/src/core/run-log-redact.js +0 -69
  1056. package/dist/src/core/run-log.d.ts +0 -97
  1057. package/dist/src/core/run-log.js +0 -334
  1058. package/dist/src/core/run-profile.d.ts +0 -57
  1059. package/dist/src/core/run-profile.js +0 -137
  1060. package/dist/src/core/shared-ftl.d.ts +0 -28
  1061. package/dist/src/core/shared-ftl.js +0 -49
  1062. package/dist/src/core/signal-critical.d.ts +0 -38
  1063. package/dist/src/core/signal-critical.js +0 -62
  1064. package/dist/src/core/smoke-patterns.d.ts +0 -81
  1065. package/dist/src/core/smoke-patterns.js +0 -176
  1066. package/dist/src/core/state-file.d.ts +0 -60
  1067. package/dist/src/core/state-file.js +0 -71
  1068. package/dist/src/core/status-binary.d.ts +0 -62
  1069. package/dist/src/core/status-binary.js +0 -133
  1070. package/dist/src/core/status-classify.d.ts +0 -96
  1071. package/dist/src/core/status-classify.js +0 -244
  1072. package/dist/src/core/test-changed-prefs.d.ts +0 -30
  1073. package/dist/src/core/test-changed-prefs.js +0 -93
  1074. package/dist/src/core/test-harness-crash.d.ts +0 -251
  1075. package/dist/src/core/test-harness-crash.js +0 -780
  1076. package/dist/src/core/test-harness-infra.d.ts +0 -32
  1077. package/dist/src/core/test-harness-infra.js +0 -69
  1078. package/dist/src/core/test-harness-output.d.ts +0 -45
  1079. package/dist/src/core/test-harness-output.js +0 -119
  1080. package/dist/src/core/test-harness-signature.d.ts +0 -57
  1081. package/dist/src/core/test-harness-signature.js +0 -35
  1082. package/dist/src/core/test-harness-verdict-notes.d.ts +0 -54
  1083. package/dist/src/core/test-harness-verdict-notes.js +0 -48
  1084. package/dist/src/core/test-host-state.d.ts +0 -14
  1085. package/dist/src/core/test-host-state.js +0 -80
  1086. package/dist/src/core/test-path-scope.d.ts +0 -59
  1087. package/dist/src/core/test-path-scope.js +0 -147
  1088. package/dist/src/core/test-profile-files.d.ts +0 -17
  1089. package/dist/src/core/test-profile-files.js +0 -75
  1090. package/dist/src/core/test-raw-log.d.ts +0 -66
  1091. package/dist/src/core/test-raw-log.js +0 -122
  1092. package/dist/src/core/test-run-completeness.d.ts +0 -97
  1093. package/dist/src/core/test-run-completeness.js +0 -191
  1094. package/dist/src/core/test-stale-check.d.ts +0 -213
  1095. package/dist/src/core/test-stale-check.js +0 -396
  1096. package/dist/src/core/test-stale-exempt.d.ts +0 -40
  1097. package/dist/src/core/test-stale-exempt.js +0 -70
  1098. package/dist/src/core/test-stale-symlink.d.ts +0 -12
  1099. package/dist/src/core/test-stale-symlink.js +0 -39
  1100. package/dist/src/core/test-stall-triage.d.ts +0 -51
  1101. package/dist/src/core/test-stall-triage.js +0 -142
  1102. package/dist/src/core/test-xpcshell-retry.d.ts +0 -35
  1103. package/dist/src/core/test-xpcshell-retry.js +0 -31
  1104. package/dist/src/core/token-category.d.ts +0 -54
  1105. package/dist/src/core/token-category.js +0 -299
  1106. package/dist/src/core/token-coverage.d.ts +0 -12
  1107. package/dist/src/core/token-coverage.js +0 -96
  1108. package/dist/src/core/token-dark-mode.d.ts +0 -64
  1109. package/dist/src/core/token-dark-mode.js +0 -186
  1110. package/dist/src/core/token-docs.d.ts +0 -34
  1111. package/dist/src/core/token-docs.js +0 -102
  1112. package/dist/src/core/token-inventory.d.ts +0 -56
  1113. package/dist/src/core/token-inventory.js +0 -114
  1114. package/dist/src/core/token-lint.d.ts +0 -53
  1115. package/dist/src/core/token-lint.js +0 -131
  1116. package/dist/src/core/token-manager.d.ts +0 -87
  1117. package/dist/src/core/token-manager.js +0 -407
  1118. package/dist/src/core/token-scaffold.d.ts +0 -36
  1119. package/dist/src/core/token-scaffold.js +0 -73
  1120. package/dist/src/core/token-sibling-sheets.d.ts +0 -46
  1121. package/dist/src/core/token-sibling-sheets.js +0 -119
  1122. package/dist/src/core/token-variant.d.ts +0 -90
  1123. package/dist/src/core/token-variant.js +0 -327
  1124. package/dist/src/core/toolchain-preflight.d.ts +0 -90
  1125. package/dist/src/core/toolchain-preflight.js +0 -251
  1126. package/dist/src/core/tree-cow.d.ts +0 -16
  1127. package/dist/src/core/tree-cow.js +0 -71
  1128. package/dist/src/core/tree-guard.d.ts +0 -35
  1129. package/dist/src/core/tree-guard.js +0 -194
  1130. package/dist/src/core/tree-store.d.ts +0 -143
  1131. package/dist/src/core/tree-store.js +0 -478
  1132. package/dist/src/core/typecheck-shim.d.ts +0 -90
  1133. package/dist/src/core/typecheck-shim.js +0 -507
  1134. package/dist/src/core/typecheck.d.ts +0 -75
  1135. package/dist/src/core/typecheck.js +0 -433
  1136. package/dist/src/core/wire-destroy.d.ts +0 -25
  1137. package/dist/src/core/wire-destroy.js +0 -126
  1138. package/dist/src/core/wire-dom-fragment.d.ts +0 -44
  1139. package/dist/src/core/wire-dom-fragment.js +0 -139
  1140. package/dist/src/core/wire-init.d.ts +0 -28
  1141. package/dist/src/core/wire-init.js +0 -219
  1142. package/dist/src/core/wire-subscript.d.ts +0 -23
  1143. package/dist/src/core/wire-subscript.js +0 -145
  1144. package/dist/src/core/wire-utils.d.ts +0 -149
  1145. package/dist/src/core/wire-utils.js +0 -338
  1146. package/dist/src/core/xpcshell-appdir.d.ts +0 -157
  1147. package/dist/src/core/xpcshell-appdir.js +0 -299
  1148. package/dist/src/core/xpcshell-profile-dir.d.ts +0 -12
  1149. package/dist/src/core/xpcshell-profile-dir.js +0 -45
  1150. package/dist/src/errors/base.d.ts +0 -217
  1151. package/dist/src/errors/base.js +0 -279
  1152. package/dist/src/errors/build.d.ts +0 -92
  1153. package/dist/src/errors/build.js +0 -166
  1154. package/dist/src/errors/codes.d.ts +0 -74
  1155. package/dist/src/errors/codes.js +0 -74
  1156. package/dist/src/errors/config.d.ts +0 -17
  1157. package/dist/src/errors/config.js +0 -39
  1158. package/dist/src/errors/download.d.ts +0 -66
  1159. package/dist/src/errors/download.js +0 -160
  1160. package/dist/src/errors/furnace.d.ts +0 -20
  1161. package/dist/src/errors/furnace.js +0 -28
  1162. package/dist/src/errors/git.d.ts +0 -65
  1163. package/dist/src/errors/git.js +0 -140
  1164. package/dist/src/errors/patch.d.ts +0 -27
  1165. package/dist/src/errors/patch.js +0 -52
  1166. package/dist/src/errors/rebase.d.ts +0 -42
  1167. package/dist/src/errors/rebase.js +0 -71
  1168. package/dist/src/errors/run.d.ts +0 -16
  1169. package/dist/src/errors/run.js +0 -22
  1170. package/dist/src/index.d.ts +0 -42
  1171. package/dist/src/index.js +0 -32
  1172. package/dist/src/types/cli.d.ts +0 -14
  1173. package/dist/src/types/commands/index.d.ts +0 -6
  1174. package/dist/src/types/commands/index.js +0 -5
  1175. package/dist/src/types/commands/options.d.ts +0 -1367
  1176. package/dist/src/types/commands/options.js +0 -5
  1177. package/dist/src/types/commands/patches.d.ts +0 -352
  1178. package/dist/src/types/commands/patches.js +0 -5
  1179. package/dist/src/types/commands/project.d.ts +0 -51
  1180. package/dist/src/types/commands/project.js +0 -5
  1181. package/dist/src/types/config.d.ts +0 -703
  1182. package/dist/src/types/config.js +0 -15
  1183. package/dist/src/types/furnace.d.ts +0 -415
  1184. package/dist/src/types/furnace.js +0 -26
  1185. package/dist/src/types/index.d.ts +0 -5
  1186. package/dist/src/types/index.js +0 -5
  1187. package/dist/src/types/json.d.ts +0 -22
  1188. package/dist/src/types/json.js +0 -11
  1189. package/dist/src/types/typecheck.d.ts +0 -51
  1190. package/dist/src/types/typecheck.js +0 -14
  1191. package/dist/src/utils/assert.d.ts +0 -34
  1192. package/dist/src/utils/assert.js +0 -61
  1193. package/dist/src/utils/build-info.d.ts +0 -30
  1194. package/dist/src/utils/build-info.js +0 -99
  1195. package/dist/src/utils/child-env.d.ts +0 -28
  1196. package/dist/src/utils/child-env.js +0 -27
  1197. package/dist/src/utils/concurrency.d.ts +0 -8
  1198. package/dist/src/utils/concurrency.js +0 -32
  1199. package/dist/src/utils/elapsed.d.ts +0 -2
  1200. package/dist/src/utils/elapsed.js +0 -23
  1201. package/dist/src/utils/errors.d.ts +0 -39
  1202. package/dist/src/utils/errors.js +0 -67
  1203. package/dist/src/utils/fs.d.ts +0 -113
  1204. package/dist/src/utils/fs.js +0 -337
  1205. package/dist/src/utils/hash.d.ts +0 -12
  1206. package/dist/src/utils/hash.js +0 -16
  1207. package/dist/src/utils/line-dispatch.d.ts +0 -15
  1208. package/dist/src/utils/line-dispatch.js +0 -48
  1209. package/dist/src/utils/logger.d.ts +0 -109
  1210. package/dist/src/utils/logger.js +0 -270
  1211. package/dist/src/utils/machine-output.d.ts +0 -12
  1212. package/dist/src/utils/machine-output.js +0 -33
  1213. package/dist/src/utils/options.d.ts +0 -155
  1214. package/dist/src/utils/options.js +0 -312
  1215. package/dist/src/utils/package-root.d.ts +0 -21
  1216. package/dist/src/utils/package-root.js +0 -70
  1217. package/dist/src/utils/parse.d.ts +0 -117
  1218. package/dist/src/utils/parse.js +0 -214
  1219. package/dist/src/utils/path-glob.d.ts +0 -15
  1220. package/dist/src/utils/path-glob.js +0 -47
  1221. package/dist/src/utils/paths.d.ts +0 -31
  1222. package/dist/src/utils/paths.js +0 -80
  1223. package/dist/src/utils/platform.d.ts +0 -9
  1224. package/dist/src/utils/platform.js +0 -14
  1225. package/dist/src/utils/process-group.d.ts +0 -42
  1226. package/dist/src/utils/process-group.js +0 -190
  1227. package/dist/src/utils/process-input.d.ts +0 -27
  1228. package/dist/src/utils/process-input.js +0 -46
  1229. package/dist/src/utils/process.d.ts +0 -293
  1230. package/dist/src/utils/process.js +0 -593
  1231. package/dist/src/utils/ps-duration.d.ts +0 -31
  1232. package/dist/src/utils/ps-duration.js +0 -70
  1233. package/dist/src/utils/regex.d.ts +0 -39
  1234. package/dist/src/utils/regex.js +0 -109
  1235. package/dist/src/utils/sleep.d.ts +0 -25
  1236. package/dist/src/utils/sleep.js +0 -30
  1237. package/dist/src/utils/stdio-drain.d.ts +0 -28
  1238. package/dist/src/utils/stdio-drain.js +0 -54
  1239. package/dist/src/utils/validation.d.ts +0 -182
  1240. package/dist/src/utils/validation.js +0 -394
  1241. package/docs/lifecycle-invariants.md +0 -523
  1242. package/docs/run-logs.md +0 -122
  1243. package/docs/verification-trees.md +0 -49
  1244. /package/dist/src/{types/cli.js → cli/context.js} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,284 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.60.0
4
+
5
+ A rework of the whole tool. The two ways of storing a fork stay (patch mode and source mode), and the daily commands (`status`, `lint`, `typecheck`, `check`, `build`, `test`, `run`) mean the same and take the same flags in both. Source mode no longer routes work through a host daemon: there are no jobs, slots, supervisor or proof ledger. The code base is about 47,000 lines instead of 164,000, and the command line has 65 commands and subcommands with 92 distinct flags, against 125 and 259. Upgrading needs configuration changes and one full rebuild; [`docs/migrating.md`](docs/migrating.md) lists every removed command, flag and key with its replacement, and the steps for each mode.
6
+
7
+ ### Workflow
8
+
9
+ - `fireforge.json` takes `"mode": "patches"` (the default) or `"mode": "source"` with a `source` block (`root`, `metadataRoot`, `pristineCommit`). `setup --mode` creates either.
10
+ - `download` imports the pinned archive as one commit into a pristine repository per pin under `~/.fireforge/pristine/`, the same commit on every host, and checks the archive's SHA-256 against `firefox.sha256` or Mozilla's `SHA256SUMS` every time. In patch mode `engine/` is a checkout of that commit.
11
+ - Source mode builds and tests in workspaces from a per-host pool under `~/.fireforge/workspaces/`. A command leases one for its duration (preferring the one its checkout used last, so the object directory stays warm), brings it to the checkout's `src/` by writing only the paths that differ, and releases it. Parallel sessions are git worktrees, each leasing its own workspace. When all are leased a command waits, naming the holders, up to `--wait-lock` (default two hours).
12
+ - Materialization changes an engine file only when it holds bytes FireForge can account for; anything else is reported as `materialize-drift` with `workspace repair <name>` as the fix.
13
+ - Commands that read owned changes (`status`, `verify`, `lint`, `export`) read `src/` and the pristine repository directly, with no capture, snapshot or slot.
14
+ - Two host locks apply in both modes: `display` (one browser window at a time) and `build` (`buildSlots` concurrent compiles, from `~/.fireforge/host.json`, default 1).
15
+ - Every lint, policy and typecheck rule is defined over the owned changes, so a rule means the same whichever mode produced them. In source mode the files Furnace deploys are judged with the owned files, one group per component, and the patch-size rules judge components of upstream changes; created files answer to `file-too-large`.
16
+ - Leasing a pool workspace deploys the checkout's components after materializing it, and `typecheck` reads its projects with the engine at `engine/` beside the project's files, so a `jsconfig.json` in the engine that names project files (the paths Furnace writes among them) resolves wherever the workspace is.
17
+ - A pristine repository 0.56 stored for the same archive is used as it is; the archive imports as the same commit in both versions.
18
+ - `gate` replaces `prove`: on a clean committed tree it runs `check`, a build, and the declared lanes, stress runs, negative controls and smoke starts in one workspace, reports every entry, and moves `refs/fireforge/verified` fast-forward only when all pass and every declared acceptance is recorded. A commit that changes only `gate.documents` paths needs `check` alone.
19
+ - The object directory is `obj-fireforge` inside every engine and belongs to the path it was configured at. `workspace add --from` clones a workspace's engine without its builds, and `build` removes an object directory configured for another path and builds from nothing; `build --rewrite-mozinfo` is gone, because a relocated object directory keeps reading and linking from the directory it was built in.
20
+
21
+ ### Commands
22
+
23
+ - `migrate` upgrades a 0.56 project in place, in either mode: the `fireforge.json` keys, the override records, `waivers.json` and `policy.json`, the merge driver and `MOZ_OBJDIR` lines, as one journaled change on a committed tree that ends with `verify`. It lists everything it rewrote or dropped and stops before writing when anything needs a decision. `migrate --to-source` is the conversion of a patch queue to source mode.
24
+ - `status --groups` lists every group by the ID that waivers, scope rules and reserved exceptions name it by. In source mode an ID is the component, the `exportQueue` group, `created-<directory>` or the Furnace component, used as written; nothing is prefixed, and an export's numbering is no part of it.
25
+ - New: `workspace list|add|remove|repair`, `override`, `restore`, `migrate`, `merge-driver install`, `gate`, `gate accept`, `gate status`, `patch set`, `config get|set`, `version`.
26
+ - `export` captures edits into a new patch in patch mode (`--all` replaces `export-all`) and writes the generated patch queue in source mode (`--out`), proven to replay to the tree the checkout builds.
27
+ - `rebase --to <version>` downloads the version, writes the pin and moves the project: patch mode re-applies the queue with reduced context (`--continue`, `--abort`, `--dry-run`, `--force`); source mode merges every owned file three ways and leaves conflicts as git leaves them. It replaces `source set`, `download --force` plus `rebase`, and `authored refresh`.
28
+ - `test` dispatches mochitest files one browser each by default (`--no-shard`, `--standalone`), runs negative controls with `--control <diff> --expect <assertion>`, and takes `--env`. Leftovers of earlier runs of the workspace are reaped and foreign port holders waited for without a flag.
29
+ - `check` gains a `token-lint` step and runs its engine steps in one workspace. `check.extraSteps` commands are argument vectors with a default 600-second timeout and an `engine` flag.
30
+ - `patch set` edits a patch's description, tier, lint waivers and staged dependencies in one transaction.
31
+ - `furnace apply` replaces `furnace deploy`; `furnace create --tests <harness>` and `furnace override --css-only` replace their previous flags.
32
+ - `doctor --recover` undoes changes an interrupted command left half-made.
33
+ - Exit code 143 (`TERMINATED`) for SIGTERM and SIGHUP.
34
+
35
+ ### Configuration
36
+
37
+ - `sources` becomes `mode` plus `source`. `proof` becomes `gate` with `build`, `documents`, `lanes`, `stress`, `controls`, `runs` and `acceptance`; a smoke start in `runs` is structured (`smokeExit`, `headless`, `args`, `consoleAllowFile`, `validate`).
38
+ - `patchLint.rules` sets the severity of any rule and replaces `jsdocClassMethods`, `chromeScriptJsDoc` and `testAssertionFloor`. `patchLint.waivers` declares waivers per group in either mode. `patchPolicy.scopeRules` selects groups by a `group` regular expression.
39
+ - `exportQueue.groups[].tier` and `exportQueue.componentTiers` carry size tiers into a generated queue. `wire.domTarget` names the chrome document `wire --dom` includes into. `test.harnessFailurePatterns` names output that means the browser failed before any test ran.
40
+ - `license` defaults to `EUPL-1.2`. `patchPolicy.mutationMode` takes `error` or `warn`. `history` is removed. `doctor` probes `externalToolchains`.
41
+ - `patches/patches.json` is written as version 2 (file names, categories and touched files derived; one Firefox stamp for the queue). A version 1 manifest is read and converted on the next write.
42
+ - A mozconfig template that sets `MOZ_OBJDIR` is refused.
43
+
44
+ ### Removed
45
+
46
+ - `authored` (every subcommand), `host`, `slot`, `job`, `prove`, `tree`, `park`, `export-all`, `source set`, `lint cache`, `patch body|stage|reserve|tier|lint-ignore|staged-dependency`, `furnace deploy|init|list|scan|preview|refresh|sync|chrome-doc`.
47
+ - `slots`, `proof`, `test.canaryPath`, `test.canaryTimeoutSeconds`, `test.reapOrphans`, `test.lockMode`, `test.furnaceApply`, `check.timeout`, `check.timeouts`, `check.status.failOnUnknown`, `patchLint.prettier`, `patchLint.forwardRegistration`.
48
+ - Most flags of the remaining commands, among them `test --headless` (the default), `--reap-orphans`, `--auto-ports`, `--furnace-apply`, `--canary`, `--perf-samples`, `--pgid-file`, `status --fail-on`, `lint --report`, `--since`, `export --category`, `--lint-ignore`, `--skip-lint`, every `--force-unsafe` and `--yes` on queue operations, and the `doctor --repair-*` family.
49
+ - The `.fireforge/logs/` run logs of `build`; `test` keeps its latest ten run logs in the workspace and `--keep-log` copies one.
50
+
51
+ ### Fixes
52
+
53
+ - Regenerating a patch body in `resolve`, `import --continue` and `rebase` keeps the patch's deletions, and writes only that patch's own work where other patches change the same file.
54
+ - `re-export` puts an edit to a file several patches change into the last selected patch and adjusts the later patches so they still apply; a patch whose files hold no edit keeps its body byte for byte.
55
+ - Resuming an import no longer replaces files of the patches before the failed one, and an import refuses a queue that changed since the paused run.
56
+ - Engine writes of import, discard, reset and rebase happen in one transaction, so an error, a signal or a crash leaves the old state or the new one. Undoing a journal no longer writes through symlinks.
57
+ - `workspace repair` and `workspace add --from` carry or reset the materialization ledger with the engine, so a repaired or cloned workspace never skips a write.
58
+ - The build baseline is captured before the build runs, so an edit made during a build is not recorded as built.
59
+ - Patch bodies are byte-exact on every host: files that are not valid UTF-8 are written as binary sections, Latin-1 and CRLF patch files round-trip, and git's C-quoted paths are read correctly.
60
+ - A crash, a hang, a cut-off suite or a file that never started or finished never reads as a test pass, whatever mach's exit code or summary says.
61
+ - `jar.mn` entries inserted after a flagged entry keep the surrounding indentation, test manifests are recognised by name and by the `moz.build` that lists them, and conditional `moz.build` lists are edited in place.
62
+ - Lint no longer reports false findings on real fork code in the JavaScript and CSS rules; one parser setup serves both languages.
63
+
64
+ ### Docs
65
+
66
+ - New `docs/getting-started.md`, `source-workflow.md`, `workspaces.md`, `quality.md`, `gate.md`, `authoring.md` and `migrating.md`. `authored-sources.md`, `jobs-and-slots.md`, `proof.md`, `verification-trees.md` and `run-logs.md` are removed. The process lifecycle for contributors is `contributing/lifecycle.md`.
67
+
68
+ ## 0.56.0
69
+
70
+ ### Source mode
71
+
72
+ A second workflow, enabled by a `sources` block in `fireforge.json`. Owned files are ordinary tracked source, edited in any checkout or `git worktree`. Patches become generated review artifacts, and builds and tests run as jobs in private slots. A queue project becomes a source-mode project only through `authored migrate`. The queue workflow stays supported and frozen apart from fixes. Direct `export`, `import`, `build`, `test`, `run` and the other legacy commands refuse in a source-mode project, each naming the command that does its work there (`run` → `job run --run`), or saying that none exists.
73
+
74
+ - `authored capture` takes what a commit of the checkout would hold. Ignored files are left out, ignored files under `src` are refused by name, and changed tracked files outside the selection are refused unless `--allow-dirty-root`. Snapshots are immutable Git trees whose identity has no host, path or tool version in it, and the editing checkout's index and HEAD never move.
75
+ - `authored override` declares a first upstream edit (`--component` and `--classification` have defaults). `authored restore-upstream` and `authored override --delete` refuse to lose uncommitted edits without `--discard`. `authored prune` releases old retained snapshots, newest kept by ref age (the reflog dates a packed ref), from a linked worktree too; a snapshot whose age cannot be read is never released and is listed as `undated`.
76
+ - Plain `git merge`, `rebase` and `cherry-pick` merge two first touches of one upstream file against its pristine blob through a merge driver, installed by `authored override` or `authored merge-install`. The pristine blob stands in only when the ancestor commit lacks the path, taking that commit from Git's `%S` label or, on Git before 2.44, from the merge, rebase or multi-commit cherry-pick in progress; a committed empty ancestor, several merge bases or an ancestor it cannot identify (on Git before 2.44, a single-commit cherry-pick or revert) leave Git's conflict. Authored merges and `authored refresh` work with Git before 2.44, whose `merge-file` has no `--diff-algorithm`.
77
+ - `authored lint`, `typecheck` and `verify` give static feedback from a private snapshot view with no slot, job or namespace. `lint`, `typecheck`, `verify` and `status` use the same path in an editing checkout. A bare `typecheck` there runs strict source typing and leaves `typecheck.projects` to `job run --check`, so a green bare `typecheck` is narrower than a job's. Strict typing covers created and undeclared generated files, not upstream overrides.
78
+ - `authored pristine fetch` creates a donor outside the checkout from a repository or from the pinned archive, with the same commit on every host, on a queue project too. An archive import holds everything the archive holds and refuses otherwise.
79
+ - `authored migrate --verify` proves an overlay reconstructs its queue before publishing it, leaves nothing behind on failure, and writes `fireforge.fragment.json` and `src/.gitattributes`. The pin defaults to an archive donor's commit, then the recorded base commit, and `pinReproducible` says whether another host can rebuild the donor.
80
+ - `authored export-queue --snapshot --out` writes a patch queue that `fireforge import` replays byte for byte, with a replay proof before it publishes. Each upstream component is one `001-` patch; created files follow as `002-` patches grouped by the new `fireforge.json#exportQueue.groups` globs, then by directory within `exportQueue.maxGroupBytes` (1 MiB). An edit to one file changes one patch, a new group renames nothing, and `patches.json` names the snapshot once as `source.snapshot`. `authored refresh` writes conflict files and records them as `conflictFiles`.
81
+ - An ADR's `allowed.files` may list created files. `doctor` and the missing-engine remedies understand a checkout with no `engine/`, and static commands use the host's template as donor.
82
+ - Path-valued output options (`build --keep-log`, `lint --report`, `test --perf-samples`, `test --profile-file`, `--map-out`, `--declarations-out`) cannot write into a slot.
83
+ - Exporting a pristine tree streams `git archive` into `tar` and verifies every file, about 25 times faster on a 5,000-file tree.
84
+ - In a source-mode checkout, `token coverage`, `furnace diff` and `furnace validate` refuse and name `job run --check` rather than judging the pristine donor in `engine/`, and `doctor` leaves out the engine branch, baseline, working-tree, mach, Watchman, engine ESLint and Furnace engine-state rows, so it neither fails the donor nor suggests repairs source mode refuses. `docs/authored-sources.md` lists the source-mode equivalent of every refused command.
85
+ - An interrupted materialization recovers when a path turned from a file into a directory, or back, between the engine writes and the ledger.
86
+
87
+ ### Host setup, jobs and slots
88
+
89
+ - `fireforge host init --slots N --from-engine <engine>` readies a machine: coordinator, frozen toolchain, slots and their qualification. It can be rerun, never edits a project file, and prints the mozconfig change a first run needs (`--enable-bootstrap` to `--disable-bootstrap`). `--slots 0` sets up the coordinator alone. `--cpu`, `--memory`, `--max-slots`, `--browsers`, `--cache <target>=<path>` and `--release-secrets <directory>` state host facts; capacity otherwise comes from the host. Under `--json` it writes one document and an error envelope when blocked.
90
+ - `fireforge job run [--check] [--build ui|full|none] [--test <path>...] [--slot auto]` captures the checkout, runs it in a slot, waits and prints one verdict line. With no flags it means `--check`; `--test` implies a UI build. On a host with no build it refuses and exits 1, naming `job run --build full` and `job run --build full --test <path>`. Any other job nothing can run is refused at submit with the command to run. Further flags: `--headed`, `--no-shard`, `--standalone`, `--env`, `--upload-dir`, `--mach-arg`, `--keep-awake`, `--no-keep-awake`, `--hold-front`, `--throttle`, `--release`, `--path`, `--owner`, `--timeout`.
91
+ - Jobs survive the caller. The supervisor acknowledges a submit only after a durable journal write, runs each job in its own process group with CPU, memory, build, browser and display admission, and seals receipts atomically. Admission is work-conserving, and a waiting job reports why in `blockedBy`, including quarantined slots and the restore that clears them. A build gets 75% of the CPU budget as `-j`.
92
+ - A red, refused or cancelled job returns its slot to the pool, audited on next use. Quarantine is for uncertain process ownership, a failed audit, an unrestored control or an interrupted prepare, and a process that outlives its phase keeps the slot locked until its quarantine is on disk. `slot restore <name>` resets a slot to pristine plus its snapshot under its own lock, keeps the objdir and costs a full build. `job host-clear` clears host quarantine after a census; `--forget-group <group>` clears a group whose number now belongs to something else.
93
+ - A cancel or deadline keeps signalling until the process is gone; preparation and sealing have a 30-minute deadline. A damaged journal row moves to `journal.damaged.jsonl` without stopping the host, and a supervisor that cannot start says why at once. One still running with no election after 30 seconds, as a process held back by macOS privacy controls is, is stopped, and `Coordinator did not start` names it, in the error and in `supervisor.log`, with the folder that needs access.
94
+ - A build that can touch compiled output clears the full-build anchor before it launches. A trusted build is bound to a stat signature of its package, checked at launch and seal; a package that moved costs the slot its anchor. A process with a working directory or open file in a slot is found at seal and admission audit.
95
+ - Slots are `cp -c -R -p` clones of a per-pin pristine template and take minutes. `slot create --from <built-slot>` clones source and objdir together and keeps the anchor when the toolchain matches. `slots.dependencyCaches` declares dependency trees beyond the root `node_modules` (including `engine/node_modules`); each installed tree is also stored per lockfile in `<namespace>/dependency-trees/` (the four most recent per target), and a job whose lockfile differs from its slot's restores the tree for its own lockfile before it runs, so one checkout's `slot refresh-deps` never breaks another checkout's queued jobs; it refuses, naming `slot refresh-deps`, only when no slot was ever given that lockfile. A target has to be a canonical path owning nothing of a slot's runtime or engine source, inside `engine/` only a `node_modules` upstream does not track, and `refresh-deps` deletes only its own targets. A tree with npm's install record is held to an npm lockfile whatever its directory is called; any other tree is identified by its bytes, and saying so is part of installing it. A declared tree's `.bin` links resolve inside that tree. A job leaves `AS` unset when the deriving engine's assembler is its C compiler, so configure derives it from the frozen `CC` with its SDK and target flags. A slot's package signature ignores the `.purgecaches` marker the browser removes at startup. `slot remove`, `slot list`, `slot audit`, `slot prepare`, `slot qualify-native` complete the set.
96
+ - The toolchain is derived from an engine's configure output, frozen under `~/.fireforge/toolchains/<digest>/` and recorded in the namespace. Per-job checks compare a stat signature; bytes are read at qualification and at a final gate. The compiled anchor binds only native tools and the Mach recipe. `slot qualify-native` runs real `mach configure` as an ordinary job. `MACOS_SDK_DIR` is exported and the generated mozconfig states `--with-onnx-runtime` through a variable, so it holds no host path; a configure that lost what the deriving engine selected is refused.
97
+ - `job run --release` builds `package --recipe release` from `build.release` (a captured overlay and declared secrets) in its own object directory, emptied first so every release is built from clean, leaving the development build alone. `build.release.outputs` lists paths in that object directory (`dist/*.app`, `dist/*.dmg`, `dist/host/bin/mar`), which the job copies to its output directory beside `release.json`; a declared output the build did not produce reads red. That directory counts toward storage: a release with no room for it above the disk floor is refused at submit, and its size is recorded in the slot's reservation.
98
+ - A slot whose source declares `build.release` qualifies Mach's `taskgraph` site beside `mach`, `common` and `build`, since `mach package` resolves its DMG tools through `mach taskgraph`, which provisions that site with hash-pinned pip. A native step runs only on the recorded sites: a site nobody qualified reads red by name, and a source whose site roster differs from the slot's record is refused before the job runs, naming `slot qualify-native <name>`. Qualification provisions afresh a site it did not record and removes one the source no longer declares. The compiled anchor does not bind the site, so requalifying keeps the full-build anchor.
99
+ - A step with a window waits with `blockedBy: display: <reason>` while no display is active: graphics off, every display asleep, or a closed lid with no external display. A docked laptop with its lid closed runs them. A supervisor outside the login session refuses them at submit and holds a recovered one with the same `blockedBy`. `holdFront` and `--hold-front` keep the phase's browser frontmost and read red if that could not be confirmed. `throttle: background | utility` runs a test under a fixed `taskpolicy` clamp.
100
+ - `check.extraSteps[].footprint` declares a step static so `check` stays parallel. `$FIREFORGE_CAPTURED_FILES` lists captured files for project checks.
101
+ - `job wait`, `job status` and `job run` exit by the job's state: 16 failed, 17 cancelled or interrupted (including an executor killed from outside), 18 wait timeout. A red's reason carries the step's last complaint. Refusals carry the codes `unknown-job`, `ambiguous-job`, `unknown-slot`, `invalid-log-range`, `job-cannot-run` and `executor-mismatch`, with the next action in the text. A flag value that is not a whole number is exit 8 everywhere.
102
+ - `job`, `slot`, `host`, `authored` and `prove` share one output rule: text by default, and `--json` writes one document carrying `schemaVersion`. A queue project is told to migrate before any of them captures source. `job list` and `job cancel` work by ID for any job. Reads never start a supervisor.
103
+ - The supervisor is a detached child of the first client that needs one, inheriting its login session and macOS privacy grants. It and its jobs do not inherit a client's environment or working directory (it runs in the namespace, not in a removable worktree or a privacy-watched folder), and its socket does not follow a client's `TMPDIR`. Job `run` steps always use a fresh profile.
104
+ - A step's evidence records `hostLoadPeak`, the highest one-minute load average while it ran, on a red step too; no identity or proof reads it. A failed job's verdict line shows it as `host-load-peak=`, and a test step's reason ends with `(started=<n>/<m> first-unstarted=<path>)` when its verdict says where the run stopped.
105
+ - A quiet phase starts only once the host's one-minute load is below the quiet limit (`host init --quiet-load <n>`, by default the CPU capacity), waiting as `blockedBy: host-load: ...` and ending `interrupted` if its step deadline passes first. A quiet step that goes red while its load peak, less its own admitted CPU, reached the limit ends `interrupted`, with no verdict against the step; a pass under load stands. Quiet applies per step: a `--perf-samples` test step or a request that sets `quiet` itself runs alone, while beside any other quiet step a static check (`check`, `typecheck`, `lint`, `verify`, `status`) that claims no build, browser or display may start as long as the load, with its CPU, stays under the limit. When a quiet step ends, jobs that waited are admitted before the job's next quiet step drains the host again. A job waiting on a quiet phase names the holding job, its step and how long it has held the host.
106
+ - A test or run step records what changed on the host under it as `hostState` (`networkLost`, and on macOS `lidClosed`, `displaySlept` and, for a step with a window, `input`), each the seconds into the step it was first seen; no identity or proof reads it. A failed or interrupted job's verdict line shows it as `host-state=<entry>@<s>,…`. A tunnel interface's address does not count as a network. A red step ends `interrupted` instead when the network went away, when the lid closed or the display slept under a quiet step, or when keyboard or pointer input reached a step with a window; a pass stands.
107
+ - `fireforge host upgrade [--from <package>] [--previous]` pins one FireForge build per host: it is copied into the namespace with its production dependencies, run once to take its executor fingerprint, checked byte for byte before every supervisor start, and kept with the previous build for rollback. Every supervisor runs the pinned build whichever checkout starts it, `prove` measures evidence against it, and checkouts of other builds submit normally with a one-line note. A host with no pinned build runs the supervisor from the starting client's package. A submit refuses (`executor-mismatch`, exit 1, naming both builds and `host upgrade`) when the client speaks another coordinator protocol than the pinned build, or, on a host with no pinned build, when the running supervisor was started from another build. Jobs submitted while a host switches builds wait with `blockedBy: Waiting for the host to switch to FireForge <version>` until the old supervisor goes idle and starts the pinned one. The endpoint records the supervisor's executor digest, package, version and protocol. Reads, waits and cancellation work across builds.
108
+ - A run or test option that names a file the step writes (`--capture-console`, `--screenshot`, `--keep-log`, `--coverage`, `--pgid-file`, `--perf-samples`) takes `{artifacts}/<path>`, the step's output directory.
109
+ - `job watch` is the source-mode `watch`: on every save that changes what a capture holds, it captures, submits the job `job run` would with the same flags (`--build ui|full|none`, `--test`, `--check`, `--headed`, `--repeat`, `--shuffle`, `--slot`, `--path`, `--debounce <ms>`) and prints its verdict line, on one kept slot so the object directory stays warm. A newer change cancels the running job (`--no-supersede` lets it finish), saves in between become one pending capture, and an unchanged snapshot submits nothing. It uses Watchman per captured directory when it answers and Node's recursive `fs.watch` otherwise; gitignored files, editor temporaries and `engine/` never start a capture. Ctrl-C cancels the running job and exits with the code of the last job that ran to its own end. Watch jobs are ordinary jobs, and their evidence counts.
110
+ - A harness helper that outlives its harness in its own session, such as xpcshell's `moz-http2.js` after "no tests to run", is stopped with the job when its command line names the slot. A process carrying the phase's marker with no foothold in the slot is reported as detached; one holding the slot still quarantines it. `fireforge test` refuses a path that is not a test (`note=not-a-test`) before any build or harness starts.
111
+ - A process killed at a phase's end gets up to 2 seconds to leave the process table before its slot is quarantined, so a cancel on a loaded host does not quarantine a clean slot.
112
+ - A slot refused as still in use names the holding process's command, its parent and the path it holds.
113
+ - `slot restore --stop-orphans` stops the orphaned processes holding a slot (no running job and no interactive shell above them) with SIGTERM, then SIGKILL, printing each pid and command, and refuses by name while any other holder remains; a plain restore refused over orphans names the flag. A job refused for want of a build that exists only in a quarantined slot names that slot, its reason and `slot restore <name>`.
114
+ - A slot remembers each self-detached process a phase left running (by pid and birth, at most 32, in `detached.json`), and every later admission audit and `slot audit` checks them again: one that has since taken a working directory or open file in the slot, or names it in its command line, quarantines it with `process <pid> (<command>) left detached by job <id>, now holds <path>`; one that has exited or whose pid now belongs to another process is forgotten. `slot restore` clears the record, and clones and replicas do not inherit it.
115
+ - When jobs queue for the one slot holding the build they need, the supervisor copies that build into an idle slot no queued job needs (both slots locked, only with free disk above twice the object directory) and relocates it with a `qualify-native` job, so two slots serve. `host init --replicate-depth <n>` sets how many waiting jobs per holding slot trigger it (default 2, `0` off). `blockedBy` and `slot list` show a replication in progress; a failed one leaves the destination `needs=full-build` and never touches the source. `slot qualify-native` relocates an object directory copied in from another slot even when the slot's Mach sites are already qualified.
116
+ - A job still running carries `progress`: its current step and label (prove's obligation ID), the time in that step and overall, and how each finished step ended. `job status`, `job list` and `prove status` show it, and a step takes an optional display-only `label`.
117
+ - While `job run`, `job wait`, `job watch`, `prove` and `prove run --wait` wait, they print a line to stderr when the job enters a step and when a step ends, with nothing repeated and nothing printed under `--json`.
118
+ - `job cancel` records who cancelled (owner, cwd, pid, time) as `cancelledBy`, shown as `cancelled-by=` on the verdict line, and cancelling another owner's job is refused without `--force`. The default job owner is `<worktree>@<branch>` (`<worktree>@<short commit>` when detached, `user@host` outside Git); `FIREFORGE_OWNER` and `--owner` win.
119
+ - Each step samples free disk on the namespace and slot volumes. A failed, interrupted or cancelled job whose step saw free space fall below the low-disk threshold (the larger of `host init --disk-low-gib`, default 10, and 3% of the volume) carries `hostDisk`, shows `host-disk-low=<GiB>@<s>`, and says in its reason that the red may come from disk pressure, naming what slots and artifacts hold. `fireforge host status` reports free disk against that threshold, the space slots and artifacts use, and the pinned, previous and running FireForge builds.
120
+ - Job artifacts are bounded by `host init --artifact-max-gib` (default 10) and `--artifact-max-age-days` (default 14), removing only finished jobs' artifacts and never the newest 3 per owner. The supervisor prunes on start and hourly while idle, and `fireforge host prune [--max-gib] [--max-age-days] [--dry-run]` prunes on demand and prints what it freed.
121
+ - A window step waiting for the host's one display says `Waiting for the display, held by job <id> step <n>`. On macOS a window step records `foreground-lost@<s>` in `host-state` when another application was in front of its own browser, read with `lsappinfo` (annotation only; unknown on other platforms), and a harness can read `FIREFORGE_DISPLAY_LEASE` and `FIREFORGE_DISPLAY_STATE`, a JSON file with the lease and whether the foreground is its own.
122
+ - `job run --test` takes `--repeat <n>`, `--shuffle <seed>`, `--coverage`, `--perf-samples`, `--keep-log` and `--profile-file`; a file a step writes lands in the job's artifacts, and the command prints where.
123
+ - `job run --run [--build ui|full|none] [--profile <dir>] [-- <browser args>]` opens the browser on this checkout from a slot, streams its output until the window closes, and cancels the job on Ctrl-C. `--profile` keeps a profile between interactive runs; it must be absolute and outside every slot, the coordinator namespace and tracked source, and every other run starts from a fresh profile. A job with an interactive run is never proof evidence.
124
+ - `job status`, `wait`, `logs` and `cancel` take a unique prefix of a job ID of at least 8 hex characters; an ambiguous prefix is refused, listing the IDs it matches.
125
+ - `job logs --step <n>` reads one step's output, numbered from 0 as in the job's artifacts, with offsets from that step's start. Asked for no range, a failed job's log opens on its red step (the last red one when the job went on past reds), or that step's last chunk, with a note naming the step and how to read the others. Each step's output starts with a marker line naming its index.
126
+ - `slot create` qualifies the new slot's native sites, as `host init` does, when the host has a toolchain; a red qualification fails the command. When it cannot qualify, or under `--no-qualify`, it warns that native jobs refuse on the slot, says why and names `slot qualify-native <name>`.
127
+ - `slot refresh-deps` reads only `fireforge.json` and the declared lockfiles, which must be committed; other uncommitted paths are taken at their committed bytes. It serves slots on another pin than the checkout's, reading a lockfile the pin itself holds at the slot's pin.
128
+ - A job's `--jobs`/`-j` value (`--jobs N`, `--jobs=N`, `-j N`, `-jN`) is read once: what the job reserves is what the command runs with, a value above the host's CPUs or above 1 on a test step is refused, and giving it twice is refused at submit.
129
+ - A slot's package signature covers the targets of links in the package that point into the objdir or outside the slot, so a changed target is caught without relinking; links into the engine source are left to the slot audit.
130
+ - A distribution Python under `/usr` makes the toolchain cover the interpreter and its `sys.path` directories, never the whole prefix. On Linux the process census runs `ps` in a form procps accepts, so jobs end with a clean census instead of quarantining their slot, and the slot-user audit and the end-of-job foothold check read procfs, so a host without `lsof` (a minimal distribution or a container) can run jobs.
131
+ - The memory a slot reserves is checked against the coordinator's recorded memory (`host init --memory`, by default 80% of physical memory). A cached tool digest is reused only once the file's stamp has settled, so two writes within one coarse clock tick are not read as one. A Prettier or ESLint config inside a slot's `.fireforge` directory is refused even when the slot lives under the system temporary directory.
132
+
133
+ ### Proof
134
+
135
+ - `fireforge prove --tier task|gate [--base <ref>]` captures, plans, runs what has no evidence yet and reports (`--no-wait` returns once submitted). `prove status` is the same plan as a query, and `prove plan` shows the job it would submit. `prove --slot <name>` (and `prove plan --slot`) composes its jobs for that slot and runs them there, as `job run --slot` does.
136
+ - A plan records its base's tree. The default base is the merge-base with the main branch (a gate defaults to `refs/fireforge/verified` when it is an ancestor), and completion recomputes the plan, so a narrower `--base` cannot claim it.
137
+ - Task tier: scoped static, a build by route, changed tests and direct consumers. Gate tier: lanes, stress, controls, runs, acceptance, `proof.gate.mode` and a final check, declared in the validated `proof` block. A control with `always: true` applies to every gate, including a candidate with no difference from its base. A lane or run can declare `validate`, a closed command (`node <script>` or a captured script) run after the harness in the same phase, such as one judging a run's `--capture-console {artifacts}/console.txt`. `prove --tier gate --lane <id>` runs one declared obligation and the build it needs, with the evidence a full gate run of it leaves.
138
+ - Evidence is keyed by source, step fingerprint and build identity across jobs and slots, so one flake reruns only its step. A proof is compared with the tools as they are now: at task tier by kind (an ESLint upgrade re-runs lint and leaves browser tests standing), at a gate under one identity.
139
+ - A candidate answers to the union of its base's `proof` and its own: additions apply at once, removals apply until the removing commit is itself verified, and a changed `proof`, `check`, `patchLint`, `patchPolicy` or `typecheck` section adds `accept:proof-config`, as does a changed file the gate names as a judge: a validator's script, a control's diff, a file an extra check step's command names, or a type shim. What those files import is not followed. `proof.mainBranch` comes from history.
140
+ - `prove accept` and `prove waive` record a person's decision bound to the source and tier. `acceptance[].evidence` makes `accept` refuse until those obligations pass on this source. `waive` needs `--allow-machine` and refuses an acceptance; a gate's claim and `publish` refuse waived obligations without `--allow-waived`. Verdict `complete-with-waivers`.
141
+ - `prove publish` moves `refs/fireforge/verified` by compare-and-swap when the commit's exact tree has complete evidence, and records waivers at `refs/fireforge/verified-waivers/<commit>`; `--allow-rewrite` recovers from rewritten history.
142
+ - A gate candidate that differs from its verified base only in documents at the project root (none-route paths, outside the source metadata, the declared inputs, `package.json` and its lockfile, with nothing that decides the gate changed) carries the base's evidence to every obligation but `check`, which still runs on the candidate. Carried obligations print `carried-from=<commit>`, `publish` takes them and records the origin at `refs/fireforge/verified-carries/<commit>`, and a chain of documents commits carries from that origin. A named `--base` and a waived base carry nothing; a waiver never carries. When the verified base is not documents-only from the candidate, the carry starts at the nearest first-parent ancestor (within 50) whose own gate evidence is complete, clean and current, published or not, so a peer's ledger commit on top of a finished gate costs one check.
143
+ - An override record that only rebased onto a new pin (its `base.commit`, `base.pin` or `base.blob` moved, with the same bytes under `src/` and the same kind, classification, component, ADR and mode) does not make its path changed, so a gate after `authored refresh` does not refuse overridden upstream `test_*.html` files with `proof-unclassified-test`. The pin change still forces the full build and the lanes.
144
+ - A deleted test is listed by both tiers with the lanes that held it. A changed test nothing would run refuses, a control must touch what changed, and more direct consumers than `proof.consumerLimit` refuses by name. `check.maxWarnings.lint` is the one line on lint warnings for `prove`, `check` and `authored lint`.
145
+ - A gate runs `check` first, before the build, so a static red costs no build or lane, and its job goes on past a red step (the request's `continueOnFailure`), so one run gives every obligation a verdict. After a red build, the lanes and runs that need its package are `blocked` (a new obligation state, rerun by the next `prove`), not red. Each red is audited as the next job's admission would audit it, and one that leaves the slot untrusted still ends the job. The job ends `failed` with each red and blocked step in `stepVerdicts`, and every step that passed is sealed as evidence.
146
+ - A changed component test is planned at the engine path Furnace deploys it to, so it needs an obligation that runs that path; one Furnace deploys nowhere refuses with `proof-unclassified-test`.
147
+ - A changed file a manifest lists under `support-files`, `head` or `tail` (globs, `../`, engine-root paths, `[DEFAULT]` or per test, `.toml` and `.ini`) selects that manifest's tests, and a gate counts it as owning the lanes that hold them, so a committed fixture is no longer `proof-unclassified-test`. `prove --test` refuses a path that is not a test, test directory or manifest (`proof-not-a-test`), naming the tests that read a support file.
148
+ - A negative control matches an xpcshell red by its task name or its `Assert` message, with or without the `- <actual> <op> <expected>` details. A control that reddened elsewhere names every label it saw, and the control step's verdict uses the same matching as the proof decision.
149
+ - `prove` and `prove status` attribute each red to the commits between the plan's base and `HEAD` that touched what it reads (failing tests from the results file; lint, type and check files from the step log), each marked as on main or this change; with none, the red reads as uncommitted, older than the range, or not located to a file. A gate comparing with the verified ref says up front when main has commits since that ref whose reds may not be yours. JSON carries `range` and `attribution`.
150
+ - `typecheck`, checkJs and `typecheck --explain` take the TypeScript compiler API from `typescript` when it carries one and from `@typescript/typescript6` otherwise, so a project on TypeScript 7, whose `typescript` ships no compiler API, keeps them by installing that package beside it.
151
+ - Task-tier `prove` adds a `types` obligation when a changed JS or TS file, deleted ones included, falls inside a `typecheck.projects` jsconfig: it runs `typecheck --project <jsconfig>` for those projects, the pass the gate's `check` runs, and every project after a full-build route or a changed jsconfig or type shim. `typecheck --project` can be repeated. `authored typecheck` says on stderr when such a project holds a file in scope that it checks authored sources only, naming what predicts the gate's pass.
152
+ - `prove --sample <n>` runs a deterministic sample of task-tier consumers over `proof.consumerLimit`: every consumer beside the change, one per lane, then one per lane or directory in turn, seeded by the changed paths so a rerun reuses its evidence. The report says `sampled N of M consumers` and lists what did not run, the verdict is `sampled`, and a sample never stands for a gate (`proof-sample-gate`). `proof-consumer-limit` names `--sample`.
153
+ - `prove` (every subcommand), `job run`, `job watch` and `host init` take `--allow-dirty-root`, as `authored` and `feedback` do, so the capture refusal names a flag the command accepts.
154
+
155
+ ### Breaking changes
156
+
157
+ - **Config.** `fireforge.json` refuses unknown keys at the root and in every block, with a did-you-mean hint. `binaryName` must match `^[a-z][a-z0-9-]*$`, and `name` and `vendor` reject control characters. `fireforge config` validates the whole document on every write, and `--force` no longer allows unknown keys. `furnace.json` refuses absolute `ftlBasePath`, `scanPaths`, `typecheckJsconfig`, `typecheckTagMap` and override `basePath`.
158
+ - **Tag map.** The generated tag map types each widget as `HTMLElement & import(...)`, so `furnace validate --max-warnings 0` reports `tag-map-drift` after upgrading. Run `fireforge furnace types` and commit the regenerated file.
159
+ - **Builds and tests without a record.** A build-less `test` with no recorded build refuses (`note=no-build-baseline`); `--allow-stale-build` proceeds and stamps `baseline=none`. A record whose commit is gone, as after `download --force`, counts as no record: `build` and `test --build` print a notice and run a full build. A pre-test build whose record cannot be written stops the run (`note=baseline-write-failed`). A checkout built outside FireForge needs the flag.
160
+ - **`package`.** It no longer applies Furnace or regenerates the mozconfig. It refuses a control-built binary outright, and refuses a build that does not match the tree unless `--allow-stale-build` is passed. `run` warns about both.
161
+ - **Negative controls.** `--negative-control` dispatches the selection unmutated first. `control=caught` requires that baseline to be green; a red one reports `control=inconclusive note=baseline-red`. A compiled control costs a second build. In `--results`, the baseline moves to `controlBaseline`, and `files` and `unfinished` hold `run >= 1` only.
162
+ - **Verdict classifier.** A non-zero harness exit after a green summary passes only with recognized noise, whatever the request names. An exit-0 run must show a positive check count and a completed suite, every started test ended, and with a raw log every requested file ended with no unexpected or unfinished test (`unfinished=<n>` on the verdict line). An exit-0 run with no count or summary is `reason=crash` and is retried, so a negative control reads it as inconclusive. A summary counting zero checks is `no-tests`. Exit 9 and 15 read as signals. Harness markers count only where the harness writes them, so a test's own output cannot satisfy or fail them; a browser run's `TEST-START | Shutdown` is not an unfinished test.
163
+ - **`test.reapOrphans`.** `"reap"` and `--reap-orphans` terminate only helpers a killed FireForge run recorded in `.fireforge/harness-helpers/`, once that run is gone; they no longer signal what the preflight census finds. Census survivors are reported and left alone. The new value `"owned"`, which source mode requires, behaves the same.
164
+ - **Typing.** `typecheck` and per-patch checkJs report TS2305 and TS2306 for imports that resolve to patch-owned or `paths`-mapped files, so a renamed or removed export fails in its importers. This can surface errors that were hidden. `typecheck --no-cache` is accepted and ignored, and `typecheck --source-files` refuses an entry that matches nothing. `lint --per-patch` fails when no patch could be linted.
165
+ - **Locks and Git.** `NODE_ENV=test` or `VITEST` in the environment no longer disables the engine session lock in a real CLI. Every Git call FireForge makes ignores global and system Git config, global and XDG excludes, hooks and signing, and pins diff settings, so the engine baseline indexes all upstream files and generated patches are byte-stable whatever your Git config says.
166
+ - **Public API.** `src/index.ts` exports no job, slot, proof or authored API; the CLI is the interface. The package ships only the declarations `index.d.ts` reaches.
167
+
168
+ ### Test harness
169
+
170
+ - `fireforge test` walks the engine once per lock hold, so a peer's edit the runtime already serves no longer voids a coverage claim. A stale run is refused before it waits out a browser or port.
171
+ - Verdicts stamp `display=`, `power-source=` and `host-slept=true`, and report the worst host across dispatches. `check --only/--skip` adds `selection=narrowed`. Flags that only shape a build refuse before the lock.
172
+ - Stale-compiled detection anchors on libxul and covers assembly, table and generator inputs.
173
+ - `test --coverage <dir>` collects per-process JavaScript LCOV with startup and flush receipts and a bounded browser shutdown barrier. Missing or empty coverage vetoes a green result.
174
+ - A harness startup timeout lists the port and browser-wait lines printed before it. `test --doctor` probes its own port and rejects a listener outside the browser it launched. `--kill-stale-marionette` only touches an orphaned browser from this checkout.
175
+ - The post-build audit walks `dist/` once and skips paths unchanged since the previous build. `fireforge tree create` clones no longer leave every index entry stat-dirty. `run --temp-profile` prints its profile path.
176
+ - Verdicts stamp `host-load-peak=<n>` and `host-load-peak-at=<s>`: the one-minute load average is sampled every 30 s while a suite runs, so a rise between its edges shows, and a peak of at least 4 sets `host-cpu-warning=true`. A sharded or repeated run reports its highest peak. Absent on Windows.
177
+ - A request naming a directory or manifest is counted against the tests the raw log's `suite_start` records announced, so a harness timeout that leaves files unjudged reports `started=<n>/<m> first-unstarted=<path> started-source=raw` instead of a bare `reason=test-failures`. Skip-if files count as accounted for; `--start-at` and `--end-at` turn the count off.
178
+
179
+ ### Processes and locks
180
+
181
+ - Process ownership samples one asynchronous `ps` snapshot per tick (procfs on Linux), so a job's tracker never blocks the supervisor.
182
+ - `exec` keeps a clean exit 0 when a background process holds a pipe and reports `pipesHeld`. A timeout gives SIGTERM its grace before SIGKILL, so `git` can release `index.lock`.
183
+ - A self-detached descendant is terminated only when its command line names a directory the run owns, and the job supervisor is never terminated by a run.
184
+ - A lock stays held while a process group started by a SIGKILLed holder still runs. Only the head of the waiter queue reaps, an unreadable owner record is never reaped, and on macOS a reused holder PID is detected by birth. Slot and election locks are numbered claims, so concurrent takeover of a dead holder cannot leave two holders.
185
+ - `tree exec` forwards SIGTERM and SIGHUP to its child; `tree create` skips credential-shaped root entries.
186
+
187
+ ### Patch queue
188
+
189
+ - `discard` accepts several paths from one status scan, prunes directories it empties, and refuses when a manifest row omits a file its patch touches. `discard`, `reset`, `rebase` and `rebase --abort` save a recovery snapshot under `refs/fireforge/recovery/`.
190
+ - `import`, `resolve`, `reset`, `discard`, `export-all`, `rebase`, `register`, `wire` and `token add` hold the engine-session lock (shared for `--dry-run`) and honour `--wait-lock`; in a source-mode project `register`, `wire` and `token add` write the source tree and take none.
191
+ - `download --force` downloads, extracts and indexes the new tree beside `engine/`, then takes the engine-session lock to swap it in, refusing when `engine/` changed since you confirmed. `download` honours `--wait-lock`.
192
+ - `resolve` and `rebase --continue` no longer write a cumulative diff for a patch sharing a file with another patch.
193
+ - `patch move-files <from> <to>` drops forward-import declarations the move makes unused. `re-export --adjacent-ignore-from <file>`.
194
+ - Export recovery rereads state under its lock and restores renumbered filenames before the original manifest. Hunk parks accept plain unified diffs and refuse malformed selections before mutation.
195
+ - Narrowed, empty or skipped `check` runs cannot discharge a full-gate proof.
196
+
197
+ ### Furnace
198
+
199
+ - New `furnace types [--check]` writes the `typecheckJsconfig` paths and the `typecheckTagMap` declaration, and works in a source-mode editing checkout, where a configured `engine/<path>` is written to `<sources.root>/<path>`. In source mode `furnace validate` reports `jsconfig-paths-drift` and `tag-map-drift` as errors against the committed copies, and `typecheck` in a job leaves them as they are, so a stale committed copy fails the gate. Both findings name `furnace types` rather than `furnace deploy`.
200
+ - `furnace deploy --owner` is repeatable. A multi-component deploy rolls back each failing component and never reverts one already committed; a killed mutation leaves a recovery marker that the next mutation or `doctor` turns into `pendingRepair`.
201
+ - `test --build --furnace-apply reached` counts components whose engine copy was erased and pulls in stale `composes` dependencies. A peer's mid-run edit to a component the run did not deploy is a warning.
202
+ - `furnace rename` leaves an existing test file of the new name in place, and `furnace chrome-doc` does not treat a commented-out jar line as registered. Component removal preserves unrelated shared test content and registrations.
203
+
204
+ ### Lint, types and tokens
205
+
206
+ - `token lint` in source mode judges every CSS file of the captured snapshot (created, overridden and generated), as source-mode `lint` does.
207
+ - `test-needs-assertion` detects real assertion calls through the AST. Per-patch prettier covers only the patch's own modules. Authored `lint` rejects `--per-patch`, `--report` and `--notices` and refuses a path that matches nothing.
208
+ - `lint --since` refuses a revision that names no commit in `engine/` (exit 8) and fails when Git cannot list the changes (exit 4), instead of tagging every finding cumulative so `--only-introduced` passed.
209
+ - A checkJs patch whose `paths` target is too large to fingerprint lints without the cache instead of replaying an earlier verdict.
210
+ - Per-patch lint and `fireforge check` no longer crash on a real `node_modules`: installed trees are identified by path and bytes, and read again only when their stat signature moves. A tools-identity failure misses the cache with a warning. A final gate still reads every byte.
211
+ - `register` accepts `EXTRA_JS_MODULES.<ns>` lists, `token add` refuses values that would break the CSS, and `wire --after` matches whole names. Token-variant previews warn about later equal-specificity cascade overrides.
212
+ - `patchLint.checkJsCompilerOptions`, `patchLint.rawColorAllowlist` and `patchPolicy.requireDescription` are documented in `docs/configuration.md`.
213
+
214
+ ### Other fixes
215
+
216
+ - A read-only command's private Git index keeps the original's time, so a same-size edit made in the second its file was staged is no longer read as unchanged. `lint --per-patch` could report that patch's files as absent.
217
+ - The engine guard no longer turns off because of an untracked nested repository, FIFO or socket; only a tree with no repository or commit warns and passes. An unreadable shared-lock record is no longer read as gone.
218
+ - `readJson` keeps `constructor`, `prototype` and `__proto__` keys, and `--json` detection ignores flags after `--`.
219
+ - `source set` clears a pinned checksum when the version or product changes.
220
+ - Two runs started within the same millisecond write separate run logs instead of interleaving into one file.
221
+ - `fireforge check` keeps a step's stdout only for the steps whose summary parses it, capped, instead of holding every step's whole output in memory.
222
+ - Token variant scans blank quoted values with a linear scanner instead of a regular expression that went quadratic on a line with an unclosed quote and many escaped quotes. Every spawn wrapper passes `shell: false` explicitly, so no caller option can route its arguments through a shell.
223
+ - CI runs the static checks, then the suite in four shards balanced by weight (files that start real jobs weigh more), and `quality (ubuntu)` merges their coverage and applies the same thresholds and per-module pins; the Ubuntu smoke leg no longer reruns that suite, and `node-floor` runs Node 22 and 24 in four shards each. The release workflow runs that pipeline before it publishes, and `prepublishOnly` (`scripts/prepublish-gate.mjs`) skips the full gate only for the commit it verified plus the version bump, running it everywhere else.
224
+ - Docs: `docs/authored-sources.md`, `docs/jobs-and-slots.md` and `docs/proof.md` cover source mode. The lifecycle invariants moved to `contributing/lifecycle-invariants.md`.
225
+
226
+ ### Dependencies
227
+
228
+ - magic-string 1.4.5, @types/estree 1.0.10, @types/node 26.6.6 (a development dependency: the shipped declarations need no Node types), eslint 10.14.0, eslint-plugin-jsdoc 65.4.5, knip 6.44.1, typescript-eslint 8.72.1, vite 8.3.6, vitest and @vitest/coverage-v8 5.1.0, with lockfile updates. FireForge builds and typechecks with TypeScript 7.0 (`@typescript/native`); `typescript` is `@typescript/typescript6`, the 6.0 compiler API that typescript-eslint and FireForge's own type checks run on. CodeQL actions 4.39.3.
229
+
230
+ ## 0.55.0
231
+
232
+ ### Test harness
233
+
234
+ - A compiled negative control with `--repeat`, or a mixed-harness request, no longer refuses its own later runs with `note=control-built` or `note=stale-compiled`. Runs after the first accept the `controlBuild` stamp their own invocation's control build wrote and ignore the fresh mtimes the restore leaves on the control's files. A stamp from any other build still refuses.
235
+ - A `note=coverage-replaced` verdict carries `build-paths=<path>,…`: every path the refusal says to rebuild, uncapped, with forward slashes, and `%`, `,` and whitespace inside a path percent-encoded. A script can retry with `fireforge test --build <paths>` without parsing the refusal text. The key is absent when the whole suite is uncovered.
236
+
237
+ ### Patch queue
238
+
239
+ - Under `--refuse-foreign-drift`, a multi-patch `re-export` judges every selected patch before writing any. A drift refusal in one patch leaves the clean ones unwritten too, and the summary names them as held back. Without the flag each patch is still written or refused on its own.
240
+ - `re-export --hunks-from` and `--exclude-hunks` accept a plain unified diff (`diff -u`, no `diff --git` lines). A section whose two sides name different paths is keyed on the side that is a file the patch owns. A `/dev/null` section for a file the patch already creates is refused.
241
+ - New `fireforge patch body <patch> <file>` prints a file as the patch leaves it: engine HEAD, or nothing for a file HEAD lacks, with the patch's section applied. For a patch-created file, `diff -u <(fireforge patch body <patch> <file>) engine/<file>` gives `--hunks-from` the hunks changed since the last export.
242
+ - `re-export --scan --scan-files <manifest>` takes positional patches. The run refreshes the manifest's patches plus the positionals, once each in queue order; a positional the manifest does not name refreshes without a scan. Only `--all` is still refused.
243
+ - `--refuse-adjacent-unmanaged` names a backup-shaped file (`*-E`, `*.bak`, `*.orig`, `*.rej`, `*~`) as a stray backup to delete, such as the copy macOS `sed -i -E` leaves, instead of suggesting `--scan-file`.
244
+ - A staged registration's line matches regardless of inner spacing, as its help says, so a `--line` typed with one space before `(` discharges a `jar.mn` line aligned with two. `patch staged-dependency --add --kind registration` warns when `--line` matches no line the patch adds to `--file`.
245
+ - `re-export` ends a run that wrote a patch with per-patch checkJs files with a line saying the project pass of `fireforge typecheck` is still owed.
246
+ - `patch lint-ignore --add` and `--from` say in their help that a run outside a terminal needs `--yes`, and the `lint-ignore-removable` remedy includes it.
247
+
248
+ ### Lint and tokens
249
+
250
+ - The per-patch lint cache key covers everything a patch's checkJs programs read: the queue order, the content of other patches' modules, test heads, unmanaged companions, `checkJsCompilerOptions.paths` targets and the TypeScript version. Restoring a file another patch's program reads restores the cached verdict; editing it or reordering the queue misses. The cache schema is 5, so older entries are discarded.
251
+ - A type-member reference through a URL import that a per-patch program cannot resolve (`import("…").Type`, `typeof import("…").member`) types as `any` there, like the whole-module import, instead of failing with TS2694. The project pass still reports it unless the jsconfig `paths` resolve the URL.
252
+ - New `patchLint.litTypes` types Lit in the per-patch checkJs programs, as `typecheck.litTypes` does for the project pass.
253
+ - The license-header rules accept Mozilla's dashed MPL block (`/* - This Source Code Form …` with ` - License, v. 2.0 …` continuations), so an edit to an upstream stylesheet such as `preferences.css` no longer draws `modified-file-missing-header`.
254
+ - `relative-import` judges a modified upstream file on the lines the patch adds, so a patch can carry an upstream module whose own imports are relative. A file the patch creates is still judged whole.
255
+ - `patchLint.tokenScales[].allowValues` (`{ property, value, reason }`) accepts a reviewed declaration in every file the scale governs, so a reviewed raw value can move to a seam sheet without a per-file `exclude`.
256
+
257
+ ### Gates and policy
258
+
259
+ - An `addOnly` entry of `patchPolicy.upstreamAllowlist` takes `retiredPaths`: a removed line that names one of them does not fail `add-only`, so a reviewed retirement can drop its `jar.mn` registration.
260
+ - `fireforge check` records the host's 1-minute load average at the start and end of each step: `load1Start` and `load1End` in `--json`, and a `LOAD` column (`12.3→18.0`) in the table, so a step that timed out under host load reads as such. Windows shows `-` and omits the fields.
261
+
262
+ ### Typecheck
263
+
264
+ - `typecheck --explain <file>` prints, without checking, which configured projects list the file and with which shim settings, and whether a per-patch checkJs program checks it: owning patch, root kind, heads, resolvable modules and the imports typed `any`.
265
+ - `typecheck --project` keeps `litTypes`, `undefinedIdentifiers`, `extraShim` and the project's `projectOverrides` entry, and a `projectOverrides` key matches by the file it names, so `./a/jsconfig.json` and absolute paths find `a/jsconfig.json`.
266
+
267
+ ### Furnace
268
+
269
+ - `furnace deploy --owner <patch>` names the patch being exported. A deployed file the deploy would overwrite that a different patch owns refuses the whole deploy before any file is written, naming each file and its owners. Without `--owner` such overwrites stay warnings.
270
+ - `furnace.json#typecheckJsconfig` accepts a list. Each jsconfig gets its own `paths`, relative to its own directory, and drift is reported per file.
271
+ - New `furnace.json#typecheckTagMap`: `deploy` and `sync` write a declaration file with an `HTMLElementTagNameMap` entry for each registered component that defines an exported element class. `furnace validate` reports `tag-map-drift`, and `typecheck` regenerates a stale one before it runs.
272
+
273
+ ### Build
274
+
275
+ - `fireforge build --ui` removes the objdir dev profile's startup cache and says how the rest stay stale: a UI build keeps the build id the startup cache is keyed on, and mach's `.purgecaches` purges only the first launch after a build, so a reused profile started later needs `-purgecaches` (which `fireforge run --profile` passes).
276
+
277
+ ### Other
278
+
279
+ - Docs: lock waits. A writer without a budget waits about one second before exiting 15, `re-export --dry-run` takes no lock, and `FIREFORGE_WAIT_LOCK` sets the budget for a whole session; the shared-engine `re-export` examples show `--wait-lock`. `docs/patch-workflow.md` lists the accepted license-header shapes.
280
+ - Dev tooling: `eslint` 10.13.0, `eslint-plugin-jsdoc` 65.4.1, `knip` 6.42.1, `typescript-eslint` 8.72.0 and `vite` 8.3.5. CI: `github/codeql-action` 4.39.1.
281
+
3
282
  ## 0.54.0
4
283
 
5
284
  ### Test harness
@@ -21,6 +300,8 @@
21
300
 
22
301
  - Tests: the `git diff --no-index` negative-control test no longer fails when the temp root's random suffix ends in `b`, which its fixture rewrite matched inside the old side's absolute path. The `application.ini` path test compares native paths on Windows.
23
302
 
303
+ ## 0.53.0
304
+
24
305
  ### Test harness
25
306
 
26
307
  - `test --jobs` gives each harness instance its own `MOZ_UPLOAD_DIR` (`<MOZ_UPLOAD_DIR>/job-<n>`, created up front) when the caller sets one, so instances no longer overwrite each other's fixed-name artifacts such as the `modifiedPrefs.json` pref census. The verdict names the directories as `upload-dirs=`.
@@ -206,27 +487,27 @@
206
487
 
207
488
  ### Performance
208
489
 
209
- - The worktree ownership scan behind `status`, `verify`, `doctor`, `import` and `discard` runs four git processes instead of one or more per managed file. On the Hominis tree (1,606 managed files) that was 1,625 spawns. `status --ownership` went from 13 to 16 s down to 5.7 s, and `verify` from 15 s to 7.6 s. Output is byte-identical to 0.47.1.
490
+ - The worktree ownership scan behind `status`, `verify`, `doctor`, `import` and `discard` runs four git processes instead of one or more per managed file. `status --ownership` went from 13 to 16 s down to 5.7 s, and `verify` from 15 s to 7.6 s. Output is byte-identical to 0.47.1.
210
491
  - The batched untracked listing uses `ls-files -z`, so a non-ASCII name inside a collapsed directory is no longer expanded to a quoted path that names no file.
211
492
 
212
493
  ### Typecheck and checkJs
213
494
 
214
- - The per-test-file checkJs programs share one parse of each lib, shim and helper file per run. On the Hominis queue (467 programs) the pass went from 66 to 85 s down to 22 to 25 s, with identical findings. This speeds up `typecheck` and every `lint --per-patch`, `export` or `re-export` that misses the lint cache.
495
+ - The per-test-file checkJs programs share one parse of each lib, shim and helper file per run. The pass went from 66 to 85 s down to 22 to 25 s, with identical findings. This speeds up `typecheck` and every `lint --per-patch`, `export` or `re-export` that misses the lint cache.
215
496
  - `fireforge typecheck` keeps incremental build info per project in `.fireforge/typecheck/`, keyed so a shim, compiler or FireForge change never replays a stale verdict. New `typecheck --no-cache` checks from scratch and writes nothing. Nothing is written under `engine/`.
216
- - On the Hominis tree `typecheck` went from 93.8 s to 30.2 s.
497
+ - `typecheck` went from 93.8 s to 30.2 s.
217
498
  - For the record: the projects are not run in a worker pool. They took 6 of the 93.8 s; the per-file checkJs pass was the cost.
218
499
 
219
500
  ### Re-export
220
501
 
221
- - A one-patch `re-export` roots its checkJs program at the patches it re-exports, as `lint --per-patch --patches` already did, instead of type-checking the whole queue. Cross-patch imports still resolve. On Hominis a cold `re-export <patch> --dry-run` went from 76.7 s to 8.0 s.
502
+ - A one-patch `re-export` roots its checkJs program at the patches it re-exports, as `lint --per-patch --patches` already did, instead of type-checking the whole queue. Cross-patch imports still resolve. A cold `re-export <patch> --dry-run` went from 76.7 s to 8.0 s.
222
503
  - The queue lint context parses each patch once instead of once per created file: 3 to 4.4 s down to 0.3 s on 401 patches. Shared by `lint --per-patch`, `re-export`, `export` and `typecheck`.
223
504
  - `re-export` names its lint scope before the wait and prints a line when it builds a checkJs program. The elapsed time now includes the context build.
224
505
 
225
506
  ### Patch queue and lint
226
507
 
227
- - New opt-in `patchLint.forwardRegistration: "extended"` widens `forward-registration` beyond test-manifest `support-files` to jar.mn lines, moz.build path tokens, test-manifest sections and `head`, and `customElements.js` chrome URLs. On the Hominis queue it finds 937 edges across 6 patches. The default (`"support-files"`) is unchanged. Each finding prints a `patch staged-dependency --add --kind registration` command, tested to quiet the queue without leaving `staged-dependency-unused` behind.
508
+ - New opt-in `patchLint.forwardRegistration: "extended"` widens `forward-registration` beyond test-manifest `support-files` to jar.mn lines, moz.build path tokens, test-manifest sections and `head`, and `customElements.js` chrome URLs. The default (`"support-files"`) is unchanged. Each finding prints a `patch staged-dependency --add --kind registration` command, tested to quiet the queue without leaving `staged-dependency-unused` behind.
228
509
  - New public `findForwardRegistrations(patchesDir, { scope })` returns the same census as structured records.
229
- - New `lint --per-patch --notices summary|full`. `summary` prints one line per check instead of every NOTICE row (about 430 on a green Hominis queue). `full` stays the default and is unchanged. Errors, warnings and `--report` JSON are unaffected.
510
+ - New `lint --per-patch --notices summary|full`. `summary` prints one line per check instead of every NOTICE row. `full` stays the default and is unchanged. Errors, warnings and `--report` JSON are unaffected.
230
511
 
231
512
  ### Programmatic API
232
513
 
package/README.md CHANGED
@@ -4,14 +4,17 @@
4
4
  [![license](https://img.shields.io/npm/l/@hominis/fireforge)](LICENSE.md)
5
5
  [![node](https://img.shields.io/node/v/@hominis/fireforge)](package.json)
6
6
 
7
- FireForge is a CLI tool for maintaining Firefox-based browser forks. It downloads Firefoxs source code, lets you export changes as patches, helps apply them and has some neat/mad code quality enforcement, built by taking a lot of learnings from the existing Firefox source code and trying to make the process as robust as can be. Ideally, FireForge makes everything from managing custom UI components to enforcing some rudimentary typechecking much easier, but I'll be honest, there is only so much one can do, so understanding upstream is advised, especially once future updates come into the mix. ~~I cannot guarantee how reliably these will apply, but I did try to assist in that process as much as I can by learning from prior Firefox versions which had major changes made to them, though this is of course still no guarantee for future success or that the methods will remain reliable. Beware of that.~~ Edit 16.07.2026: I have now upgraded and downgraded and sidegraded, really all the graded, across all the versions in many scenarios with modifications so far removed from upstream that I think it's fair to say upgrading is fairly reliable.
7
+ FireForge is a CLI tool for maintaining Firefox-based browser forks. It downloads Firefoxs source code, ~~lets you export changes as patches, helps apply them~~ keeps your changes as ordinary source in Git, builds and tests said changes in their own separate slots, writes patches whenever you need that feature (and still supports the old patch-based workflow) and has some neat and/or mad code quality enforcement, built by taking a lot of learnings from modifying the existing Firefox source code and trying to make the process as robust as can be. Ideally, FireForge makes everything from managing custom UI components to enforcing some rudimentary typechecking much easier, but I'll be honest, there is only so much one can do, so understanding upstream is advised, especially once future updates come into the mix. Thankfully, the Firefox team did create some great docs. ~~I cannot guarantee how reliably these will apply, but I did try to assist in that process as much as I can by learning from prior Firefox versions which had major changes made to them, though this is of course still no guarantee for future success or that the methods will remain reliable. Beware of that.~~ Edit 16.07.2026: I have now upgraded and downgraded and sidegraded, really all the graded, across all the versions in many scenarios with modifications so far removed from upstream that I think it's fair to say upgrading is fairly reliable.
8
8
 
9
- Inspired by [fern.js](https://github.com/ghostery/user-agent-desktop) and [Melon](https://github.com/dothq/melon).
9
+ Edit 08.11.2026: Source mode is now the standard way to use FireForge with patch-based development still being an option but not adviced. It works, is reliable and easy to understand (export diffs, apply to engine), but simply doesn't scale for parallel work. With source mode, changes now live as plain files under `src/`, every build and test runs as a job in its own cloned slot, and `fireforge prove` tells you what something still needs before it can land. Patches can still be used in conjuction with source mode, by the way, FireForge generates them from your source whenever you want an easier format to publish, hand to CI or roll back to.
10
+
11
+ Original patch mode was inspired by [fern.js](https://github.com/ghostery/user-agent-desktop) and [Melon](https://github.com/dothq/melon).
10
12
 
11
13
  ## What It Does
12
14
 
13
- - **Patch based** Edit Firefox inside the `engine/` directory, then export changes into `.patch` files with manifest metadata.
14
- - **Source rebasing** Reapply your patches onto newer Firefox source trees, including ESR, Beta, and Developer Edition archives, resolve rejects and re-export the queue against the new baseline, hopefully...
15
+ - **Source mode** Keep your changes as ordinary tracked files in Git. Edit them in any checkout or `git worktree`, run builds and tests as jobs in their own separate slots and let `prove` work out what a change still needs.
16
+ - **Patch mode** Edit inside `engine/` and export `.patch` files with manifest metadata. In source mode the patches are generated from your source (`authored export-queue`), one per component, so you can publish a readable queue, let CI import or roll back to the queue workflow.
17
+ - **Source rebasing** `authored refresh` three-way merges your source onto the new pin and hands you only the real conflicts. Patch mode still rebases the queue the old way.
15
18
  - **Firefox source and build helpers** Download, bootstrap, build, run, test, package, smoke-check, etc.
16
19
  - **Wiring and registration** Add chrome scripts, DOM fragments, modules, styles, tests and manifest entries through commands built by learning from existing Firefox conventions.
17
20
  - **Furnace components** Create or override `MozLitElement` widgets easily to add new or adapt existing UI components to your needs.
@@ -36,7 +39,7 @@ npm init -y
36
39
  npm install --save-dev @hominis/fireforge
37
40
  ```
38
41
 
39
- Then initialise and build:
42
+ Then initialise and build once (every project starts out in patch mode, so this first `run` still opens straight from `engine/`):
40
43
 
41
44
  ```bash
42
45
  npx fireforge setup
@@ -47,9 +50,34 @@ npx fireforge build
47
50
  npx fireforge run
48
51
  ```
49
52
 
50
- After setup you should have a `fireforge.json`, an `engine/` directory containing Firefox source and a `patches/` directory containing the patch manifest. From there, the usual loop is to change code inside the `engine/` directory, export these changes, then verify the queue still applies cleanly.
53
+ After setup you should have a `fireforge.json`, an `engine/` directory containing Firefox source and a `patches/` directory containing the patch manifest. That is a patch mode project, which is where every project starts. To switch it to source mode, migrate via the following commands:
54
+
55
+ ```bash
56
+ npx fireforge authored migrate --out ../migration --verify
57
+ # merge fireforge.fragment.json into fireforge.json, copy src/ and .fireforge-sources/ in, remove patches/
58
+ npx fireforge authored merge-install
59
+ npx fireforge host init --slots 2 --from-engine ./engine
60
+ ```
61
+
62
+ ## Source Mode Workflow
51
63
 
52
- ## Regular Workflow
64
+ The new workflow for parallel work.
65
+
66
+ ```bash
67
+ npx fireforge job run --build full # once per fresh slot
68
+ npx fireforge authored override browser/themes/shared/tabs.css # first edit of an upstream file
69
+ $EDITOR src/browser/themes/shared/tabs.css
70
+ npx fireforge authored lint # quick static feedback, no slot needed
71
+ npx fireforge job run --test browser/themes/test/browser_tabs.js # build what changed, run the test in a slot
72
+ npx fireforge job watch --test <path> # rebuild and retest on every save
73
+ npx fireforge job run --run # open the browser on this checkout
74
+ npx fireforge prove # what this change needs, and whether it has it
75
+ npx fireforge prove --tier gate && npx fireforge prove publish # before you push
76
+ ```
77
+
78
+ ## Patch Mode Workflow
79
+
80
+ The original patch-based workflow that I fell in love with but had to accept was not scalable is retained. In a source mode project its commands (`export`, `import`, `build`, `test` and friends) refuse and tell you what to use instead.
53
81
 
54
82
  ```bash
55
83
  npx fireforge status
@@ -61,13 +89,17 @@ npx fireforge build
61
89
  npx fireforge test browser/base/content/test/browser/
62
90
  ```
63
91
 
64
- Use `fireforge --help` for the full set of commands, and
65
- [`docs/patch-workflow.md`](docs/patch-workflow.md) for what the loop actually
66
- guarantees.
67
-
68
92
  ## Rebasing Firefox Source
69
93
 
70
- When Mozilla publishes a new Firefox source release you need to update the configured version/product, download the new source code and reapply the patches:
94
+ When Mozilla publishes a new Firefox release, source mode fetches the new pristine tree and proposes a merge you review before adopting it:
95
+
96
+ ```bash
97
+ npx fireforge authored pristine fetch --out ~/.fireforge/pristine/next --pin new-pin.json
98
+ npx fireforge authored refresh --snapshot old.json --pristine-repository <old pristine> \
99
+ --new-pristine-repository ~/.fireforge/pristine/next --new-pin new-pin.json --out ../refresh
100
+ ```
101
+
102
+ In patch mode you update the configured version/product, download the new source code and reapply the patches:
71
103
 
72
104
  ```bash
73
105
  npx fireforge source set --version 145.0.0esr --product firefox-esr --sha256 <archive-sha256>
@@ -79,7 +111,7 @@ If a patch fails, fix the reject inside the `engine/` directory, then run `npx f
79
111
 
80
112
  ## Furnace
81
113
 
82
- Furnace is our solution for UI components. It can track stock widgets, create new fork-owned widgets and override existing ones. The files still land inside the Firefox source directory and end up as part of the regular patches to export.
114
+ Furnace is our solution for UI components. It can track stock widgets, create new fork-owned widgets and override existing ones. Component sources stay under `components/`, in source mode they are composed into each sessions engine and in patch mode they land inside the Firefox source directory and subseqeuntly are exported as part of your patches.
83
115
 
84
116
  ```bash
85
117
  npx fireforge furnace scan
@@ -90,14 +122,15 @@ npx fireforge furnace status
90
122
  npx fireforge furnace preview
91
123
  ```
92
124
 
93
- Use `fireforge furnace --help` for the full set of component commands, and
94
- [`docs/furnace.md`](docs/furnace.md) for shared CSS fragments and typed
95
- cross-module imports.
125
+ In source mode `deploy` happens inside jobs and `furnace types` keeps the generated typecheck files in your checkout current. Use `fireforge furnace --help` for the full set of component commands, and [`docs/furnace.md`](docs/furnace.md) for shared CSS fragments and typed cross-module imports.
96
126
 
97
127
  ## Documentation
98
128
 
99
129
  [`docs/`](docs/README.md) holds the reference material:
100
130
 
131
+ - [Authored sources](docs/authored-sources.md) — source mode: overrides, capture, migration, exporting a queue, refreshing the pin
132
+ - [Jobs and slots](docs/jobs-and-slots.md) — `host init`, `job run`, slots, capacity and recovery
133
+ - [Proof](docs/proof.md) — `prove`: obligations, evidence, accept and waive, the verified ref
101
134
  - [Patch workflow](docs/patch-workflow.md) — export, re-export, queue maintenance, per-patch lint, CI gating
102
135
  - [Testing](docs/testing.md) — `fireforge test` scope, modes, build freshness, the verdict line
103
136
  - [Furnace](docs/furnace.md) — components, shared CSS fragments, typed imports
@@ -105,7 +138,7 @@ cross-module imports.
105
138
  - [Configuration](docs/configuration.md) — `fireforge.json`, design tokens, lock waits, environment variables
106
139
  - [Exit codes](docs/exit-codes.md) and [machine-readable output](docs/machine-output.md) — the contract for scripts and CI
107
140
  - [Run logs](docs/run-logs.md) — what `test` and `build` leave behind
108
- - [Lifecycle invariants](docs/lifecycle-invariants.md) — locking, rollback and signal handling internals
141
+ - [Lifecycle invariants](contributing/lifecycle-invariants.md) — locking, rollback and signal handling internals
109
142
 
110
143
  ## Roadmap
111
144
 
@@ -114,6 +147,7 @@ cross-module imports.
114
147
  - **Update manifests** Generate update server manifests for auto-updates.
115
148
  - **Nightly source support** Requires implementing `hg clone` support via mozilla-central. ESR, Beta, and Developer Edition source archives are supported through `fireforge source set`.
116
149
  - **E2E Github Actions** Requires either a higher tier of Githubs offering, an external VPS or another provider entirely. In any case, full end-to-end testing is currently run solely locally.
150
+ - **Remote workers** Slots on other machines, so jobs can run where the cores are.
117
151
 
118
152
  ## Licence
119
153