@hominis/fireforge 0.55.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 (1262) hide show
  1. package/CHANGELOG.md +233 -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 -456
  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 -359
  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 -382
  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 -423
  42. package/dist/src/commands/token.js +185 -228
  43. package/dist/src/commands/typecheck.js +59 -241
  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 -766
  235. package/docs/exit-codes.md +76 -94
  236. package/docs/furnace.md +111 -221
  237. package/docs/gate.md +205 -0
  238. package/docs/getting-started.md +165 -0
  239. package/docs/machine-output.md +201 -290
  240. package/docs/migrating.md +261 -0
  241. package/docs/patch-workflow.md +159 -723
  242. package/docs/quality.md +220 -0
  243. package/docs/source-workflow.md +228 -0
  244. package/docs/testing.md +101 -719
  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 -98
  264. package/dist/src/commands/check-run.d.ts +0 -44
  265. package/dist/src/commands/check-run.js +0 -125
  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 -229
  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 -283
  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/body.d.ts +0 -29
  416. package/dist/src/commands/patch/body.js +0 -60
  417. package/dist/src/commands/patch/compact.d.ts +0 -28
  418. package/dist/src/commands/patch/compact.js +0 -208
  419. package/dist/src/commands/patch/delete-gap-notice.d.ts +0 -24
  420. package/dist/src/commands/patch/delete-gap-notice.js +0 -48
  421. package/dist/src/commands/patch/delete.d.ts +0 -28
  422. package/dist/src/commands/patch/delete.js +0 -131
  423. package/dist/src/commands/patch/entry-projection.d.ts +0 -13
  424. package/dist/src/commands/patch/entry-projection.js +0 -24
  425. package/dist/src/commands/patch/index.d.ts +0 -16
  426. package/dist/src/commands/patch/index.js +0 -54
  427. package/dist/src/commands/patch/lint-ignore-from.d.ts +0 -43
  428. package/dist/src/commands/patch/lint-ignore-from.js +0 -141
  429. package/dist/src/commands/patch/lint-ignore.d.ts +0 -42
  430. package/dist/src/commands/patch/lint-ignore.js +0 -263
  431. package/dist/src/commands/patch/move-files-adopt.d.ts +0 -33
  432. package/dist/src/commands/patch/move-files-adopt.js +0 -65
  433. package/dist/src/commands/patch/move-files-create.d.ts +0 -19
  434. package/dist/src/commands/patch/move-files-create.js +0 -187
  435. package/dist/src/commands/patch/move-files-into.d.ts +0 -65
  436. package/dist/src/commands/patch/move-files-into.js +0 -325
  437. package/dist/src/commands/patch/move-files-retire.d.ts +0 -39
  438. package/dist/src/commands/patch/move-files-retire.js +0 -91
  439. package/dist/src/commands/patch/move-files.d.ts +0 -28
  440. package/dist/src/commands/patch/move-files.js +0 -224
  441. package/dist/src/commands/patch/move-size-tier.d.ts +0 -27
  442. package/dist/src/commands/patch/move-size-tier.js +0 -66
  443. package/dist/src/commands/patch/patch-context.d.ts +0 -40
  444. package/dist/src/commands/patch/patch-context.js +0 -51
  445. package/dist/src/commands/patch/removal-created-files.d.ts +0 -48
  446. package/dist/src/commands/patch/removal-created-files.js +0 -83
  447. package/dist/src/commands/patch/removal-dependents.d.ts +0 -63
  448. package/dist/src/commands/patch/removal-dependents.js +0 -133
  449. package/dist/src/commands/patch/rename.d.ts +0 -35
  450. package/dist/src/commands/patch/rename.js +0 -378
  451. package/dist/src/commands/patch/reorder-projection.d.ts +0 -17
  452. package/dist/src/commands/patch/reorder-projection.js +0 -49
  453. package/dist/src/commands/patch/reorder-shift.d.ts +0 -30
  454. package/dist/src/commands/patch/reorder-shift.js +0 -307
  455. package/dist/src/commands/patch/reorder.d.ts +0 -34
  456. package/dist/src/commands/patch/reorder.js +0 -375
  457. package/dist/src/commands/patch/reserve.d.ts +0 -33
  458. package/dist/src/commands/patch/reserve.js +0 -152
  459. package/dist/src/commands/patch/retire.d.ts +0 -34
  460. package/dist/src/commands/patch/retire.js +0 -133
  461. package/dist/src/commands/patch/split-plan.d.ts +0 -125
  462. package/dist/src/commands/patch/split-plan.js +0 -313
  463. package/dist/src/commands/patch/split-staged.d.ts +0 -108
  464. package/dist/src/commands/patch/split-staged.js +0 -202
  465. package/dist/src/commands/patch/split.d.ts +0 -43
  466. package/dist/src/commands/patch/split.js +0 -367
  467. package/dist/src/commands/patch/stage.d.ts +0 -34
  468. package/dist/src/commands/patch/stage.js +0 -153
  469. package/dist/src/commands/patch/staged-dependency-batch.d.ts +0 -48
  470. package/dist/src/commands/patch/staged-dependency-batch.js +0 -176
  471. package/dist/src/commands/patch/staged-dependency-entries.d.ts +0 -44
  472. package/dist/src/commands/patch/staged-dependency-entries.js +0 -80
  473. package/dist/src/commands/patch/staged-dependency-from.d.ts +0 -14
  474. package/dist/src/commands/patch/staged-dependency-from.js +0 -114
  475. package/dist/src/commands/patch/staged-dependency-remove.d.ts +0 -53
  476. package/dist/src/commands/patch/staged-dependency-remove.js +0 -114
  477. package/dist/src/commands/patch/staged-dependency-validate.d.ts +0 -27
  478. package/dist/src/commands/patch/staged-dependency-validate.js +0 -78
  479. package/dist/src/commands/patch/staged-dependency.d.ts +0 -22
  480. package/dist/src/commands/patch/staged-dependency.js +0 -251
  481. package/dist/src/commands/patch/tier.d.ts +0 -34
  482. package/dist/src/commands/patch/tier.js +0 -125
  483. package/dist/src/commands/patch-rename-map.d.ts +0 -30
  484. package/dist/src/commands/patch-rename-map.js +0 -54
  485. package/dist/src/commands/pending-resolution.d.ts +0 -15
  486. package/dist/src/commands/pending-resolution.js +0 -25
  487. package/dist/src/commands/re-export-adjacent-registrations.d.ts +0 -20
  488. package/dist/src/commands/re-export-adjacent-registrations.js +0 -75
  489. package/dist/src/commands/re-export-adjacent.d.ts +0 -111
  490. package/dist/src/commands/re-export-adjacent.js +0 -285
  491. package/dist/src/commands/re-export-bulk-scan.d.ts +0 -19
  492. package/dist/src/commands/re-export-bulk-scan.js +0 -233
  493. package/dist/src/commands/re-export-drift.d.ts +0 -110
  494. package/dist/src/commands/re-export-drift.js +0 -358
  495. package/dist/src/commands/re-export-each.d.ts +0 -46
  496. package/dist/src/commands/re-export-each.js +0 -110
  497. package/dist/src/commands/re-export-files.d.ts +0 -15
  498. package/dist/src/commands/re-export-files.js +0 -307
  499. package/dist/src/commands/re-export-hunks.d.ts +0 -37
  500. package/dist/src/commands/re-export-hunks.js +0 -264
  501. package/dist/src/commands/re-export-lint.d.ts +0 -137
  502. package/dist/src/commands/re-export-lint.js +0 -303
  503. package/dist/src/commands/re-export-options.d.ts +0 -29
  504. package/dist/src/commands/re-export-options.js +0 -192
  505. package/dist/src/commands/re-export-preflight.d.ts +0 -23
  506. package/dist/src/commands/re-export-preflight.js +0 -159
  507. package/dist/src/commands/re-export-purity-scope.d.ts +0 -18
  508. package/dist/src/commands/re-export-purity-scope.js +0 -137
  509. package/dist/src/commands/re-export-register.d.ts +0 -12
  510. package/dist/src/commands/re-export-register.js +0 -99
  511. package/dist/src/commands/re-export-removed.d.ts +0 -15
  512. package/dist/src/commands/re-export-removed.js +0 -94
  513. package/dist/src/commands/re-export-retired-declarations.d.ts +0 -22
  514. package/dist/src/commands/re-export-retired-declarations.js +0 -113
  515. package/dist/src/commands/re-export-scan-owner.d.ts +0 -44
  516. package/dist/src/commands/re-export-scan-owner.js +0 -116
  517. package/dist/src/commands/re-export-scan.d.ts +0 -72
  518. package/dist/src/commands/re-export-scan.js +0 -265
  519. package/dist/src/commands/re-export-single.d.ts +0 -53
  520. package/dist/src/commands/re-export-single.js +0 -426
  521. package/dist/src/commands/re-export-stale-registrations.d.ts +0 -39
  522. package/dist/src/commands/re-export-stale-registrations.js +0 -106
  523. package/dist/src/commands/re-export-summary.d.ts +0 -44
  524. package/dist/src/commands/re-export-summary.js +0 -59
  525. package/dist/src/commands/re-export.d.ts +0 -8
  526. package/dist/src/commands/rebase/abort.d.ts +0 -7
  527. package/dist/src/commands/rebase/abort.js +0 -67
  528. package/dist/src/commands/rebase/confirm.d.ts +0 -42
  529. package/dist/src/commands/rebase/confirm.js +0 -36
  530. package/dist/src/commands/rebase/conflict-summary.d.ts +0 -12
  531. package/dist/src/commands/rebase/conflict-summary.js +0 -37
  532. package/dist/src/commands/rebase/continue.d.ts +0 -7
  533. package/dist/src/commands/rebase/continue.js +0 -119
  534. package/dist/src/commands/rebase/index.d.ts +0 -22
  535. package/dist/src/commands/rebase/index.js +0 -209
  536. package/dist/src/commands/rebase/patch-loop.d.ts +0 -15
  537. package/dist/src/commands/rebase/patch-loop.js +0 -289
  538. package/dist/src/commands/rebase/summary.d.ts +0 -8
  539. package/dist/src/commands/rebase/summary.js +0 -47
  540. package/dist/src/commands/register.d.ts +0 -13
  541. package/dist/src/commands/reset.d.ts +0 -11
  542. package/dist/src/commands/resolve.d.ts +0 -36
  543. package/dist/src/commands/run.d.ts +0 -10
  544. package/dist/src/commands/setup-support.d.ts +0 -35
  545. package/dist/src/commands/setup-support.js +0 -386
  546. package/dist/src/commands/setup.d.ts +0 -11
  547. package/dist/src/commands/source.d.ts +0 -9
  548. package/dist/src/commands/source.js +0 -120
  549. package/dist/src/commands/status-check.d.ts +0 -87
  550. package/dist/src/commands/status-check.js +0 -161
  551. package/dist/src/commands/status-json.d.ts +0 -45
  552. package/dist/src/commands/status-json.js +0 -97
  553. package/dist/src/commands/status-output.d.ts +0 -23
  554. package/dist/src/commands/status-output.js +0 -231
  555. package/dist/src/commands/status-ownership.d.ts +0 -54
  556. package/dist/src/commands/status-ownership.js +0 -59
  557. package/dist/src/commands/status-scope.d.ts +0 -37
  558. package/dist/src/commands/status-scope.js +0 -54
  559. package/dist/src/commands/status.d.ts +0 -11
  560. package/dist/src/commands/test-appdir.d.ts +0 -6
  561. package/dist/src/commands/test-appdir.js +0 -29
  562. package/dist/src/commands/test-browser-preflight.d.ts +0 -28
  563. package/dist/src/commands/test-browser-preflight.js +0 -197
  564. package/dist/src/commands/test-build-furnace.d.ts +0 -21
  565. package/dist/src/commands/test-build-furnace.js +0 -53
  566. package/dist/src/commands/test-build-phase.d.ts +0 -34
  567. package/dist/src/commands/test-build-phase.js +0 -291
  568. package/dist/src/commands/test-checkjs.d.ts +0 -3
  569. package/dist/src/commands/test-checkjs.js +0 -35
  570. package/dist/src/commands/test-control-restore.d.ts +0 -40
  571. package/dist/src/commands/test-control-restore.js +0 -86
  572. package/dist/src/commands/test-diagnose.d.ts +0 -23
  573. package/dist/src/commands/test-diagnose.js +0 -317
  574. package/dist/src/commands/test-dispatch.d.ts +0 -39
  575. package/dist/src/commands/test-dispatch.js +0 -281
  576. package/dist/src/commands/test-furnace-reach.d.ts +0 -37
  577. package/dist/src/commands/test-furnace-reach.js +0 -132
  578. package/dist/src/commands/test-harness-env.d.ts +0 -23
  579. package/dist/src/commands/test-harness-env.js +0 -81
  580. package/dist/src/commands/test-harness-teardown.d.ts +0 -62
  581. package/dist/src/commands/test-harness-teardown.js +0 -128
  582. package/dist/src/commands/test-modes.d.ts +0 -57
  583. package/dist/src/commands/test-modes.js +0 -158
  584. package/dist/src/commands/test-multi-verdict.d.ts +0 -61
  585. package/dist/src/commands/test-multi-verdict.js +0 -112
  586. package/dist/src/commands/test-orchestrate.d.ts +0 -70
  587. package/dist/src/commands/test-orchestrate.js +0 -277
  588. package/dist/src/commands/test-perf-scope.d.ts +0 -50
  589. package/dist/src/commands/test-perf-scope.js +0 -138
  590. package/dist/src/commands/test-prelock.d.ts +0 -61
  591. package/dist/src/commands/test-prelock.js +0 -301
  592. package/dist/src/commands/test-register.d.ts +0 -4
  593. package/dist/src/commands/test-register.js +0 -181
  594. package/dist/src/commands/test-results.d.ts +0 -71
  595. package/dist/src/commands/test-results.js +0 -79
  596. package/dist/src/commands/test-run.d.ts +0 -89
  597. package/dist/src/commands/test-run.js +0 -251
  598. package/dist/src/commands/test-shards.d.ts +0 -114
  599. package/dist/src/commands/test-shards.js +0 -272
  600. package/dist/src/commands/test-stale-gate.d.ts +0 -56
  601. package/dist/src/commands/test-stale-gate.js +0 -208
  602. package/dist/src/commands/test-verdict.d.ts +0 -102
  603. package/dist/src/commands/test-verdict.js +0 -176
  604. package/dist/src/commands/test.d.ts +0 -22
  605. package/dist/src/commands/token-coverage.d.ts +0 -5
  606. package/dist/src/commands/token-coverage.js +0 -170
  607. package/dist/src/commands/token-lint.d.ts +0 -14
  608. package/dist/src/commands/token-lint.js +0 -151
  609. package/dist/src/commands/token-list.d.ts +0 -26
  610. package/dist/src/commands/token-list.js +0 -153
  611. package/dist/src/commands/token.d.ts +0 -14
  612. package/dist/src/commands/tree.d.ts +0 -19
  613. package/dist/src/commands/tree.js +0 -341
  614. package/dist/src/commands/typecheck-explain.d.ts +0 -13
  615. package/dist/src/commands/typecheck-explain.js +0 -100
  616. package/dist/src/commands/typecheck.d.ts +0 -61
  617. package/dist/src/commands/verify-scope.d.ts +0 -28
  618. package/dist/src/commands/verify-scope.js +0 -67
  619. package/dist/src/commands/verify.d.ts +0 -58
  620. package/dist/src/commands/watch.d.ts +0 -9
  621. package/dist/src/commands/wire.d.ts +0 -13
  622. package/dist/src/core/ast-utils.d.ts +0 -73
  623. package/dist/src/core/ast-utils.js +0 -105
  624. package/dist/src/core/brand-validation.d.ts +0 -7
  625. package/dist/src/core/brand-validation.js +0 -14
  626. package/dist/src/core/branding.d.ts +0 -86
  627. package/dist/src/core/branding.js +0 -371
  628. package/dist/src/core/browser-wire.d.ts +0 -48
  629. package/dist/src/core/browser-wire.js +0 -133
  630. package/dist/src/core/build-audit-platform.d.ts +0 -67
  631. package/dist/src/core/build-audit-platform.js +0 -373
  632. package/dist/src/core/build-audit-registration.d.ts +0 -80
  633. package/dist/src/core/build-audit-registration.js +0 -181
  634. package/dist/src/core/build-audit-resolve.d.ts +0 -78
  635. package/dist/src/core/build-audit-resolve.js +0 -240
  636. package/dist/src/core/build-audit-skip.d.ts +0 -57
  637. package/dist/src/core/build-audit-skip.js +0 -112
  638. package/dist/src/core/build-audit-transforms.d.ts +0 -23
  639. package/dist/src/core/build-audit-transforms.js +0 -92
  640. package/dist/src/core/build-audit.d.ts +0 -93
  641. package/dist/src/core/build-audit.js +0 -633
  642. package/dist/src/core/build-baseline-types.d.ts +0 -225
  643. package/dist/src/core/build-baseline-types.js +0 -10
  644. package/dist/src/core/build-baseline-validate.d.ts +0 -32
  645. package/dist/src/core/build-baseline-validate.js +0 -173
  646. package/dist/src/core/build-baseline.d.ts +0 -103
  647. package/dist/src/core/build-baseline.js +0 -261
  648. package/dist/src/core/build-jar-escalation.d.ts +0 -61
  649. package/dist/src/core/build-jar-escalation.js +0 -125
  650. package/dist/src/core/build-overwrite-guard.d.ts +0 -92
  651. package/dist/src/core/build-overwrite-guard.js +0 -235
  652. package/dist/src/core/build-prepare.d.ts +0 -83
  653. package/dist/src/core/build-prepare.js +0 -414
  654. package/dist/src/core/build-run-record.d.ts +0 -74
  655. package/dist/src/core/build-run-record.js +0 -136
  656. package/dist/src/core/checkjs-support-heads.d.ts +0 -41
  657. package/dist/src/core/checkjs-support-heads.js +0 -104
  658. package/dist/src/core/component-source-guard.d.ts +0 -20
  659. package/dist/src/core/component-source-guard.js +0 -68
  660. package/dist/src/core/config-mutate.d.ts +0 -16
  661. package/dist/src/core/config-mutate.js +0 -76
  662. package/dist/src/core/config-paths.d.ts +0 -16
  663. package/dist/src/core/config-paths.js +0 -106
  664. package/dist/src/core/config-state.d.ts +0 -16
  665. package/dist/src/core/config-state.js +0 -141
  666. package/dist/src/core/config-validate-build-audit.d.ts +0 -8
  667. package/dist/src/core/config-validate-build-audit.js +0 -80
  668. package/dist/src/core/config-validate-check.d.ts +0 -8
  669. package/dist/src/core/config-validate-check.js +0 -219
  670. package/dist/src/core/config-validate-file-size.d.ts +0 -15
  671. package/dist/src/core/config-validate-file-size.js +0 -154
  672. package/dist/src/core/config-validate-history.d.ts +0 -11
  673. package/dist/src/core/config-validate-history.js +0 -38
  674. package/dist/src/core/config-validate-patch-policy.d.ts +0 -7
  675. package/dist/src/core/config-validate-patch-policy.js +0 -284
  676. package/dist/src/core/config-validate-test-toolchains.d.ts +0 -8
  677. package/dist/src/core/config-validate-test-toolchains.js +0 -133
  678. package/dist/src/core/config-validate-token-scales.d.ts +0 -9
  679. package/dist/src/core/config-validate-token-scales.js +0 -125
  680. package/dist/src/core/config-validate.d.ts +0 -11
  681. package/dist/src/core/config-validate.js +0 -509
  682. package/dist/src/core/config.d.ts +0 -92
  683. package/dist/src/core/config.js +0 -169
  684. package/dist/src/core/coverage-dispatch.d.ts +0 -24
  685. package/dist/src/core/coverage-dispatch.js +0 -44
  686. package/dist/src/core/coverage-extend.d.ts +0 -89
  687. package/dist/src/core/coverage-extend.js +0 -239
  688. package/dist/src/core/coverage-records.d.ts +0 -107
  689. package/dist/src/core/coverage-records.js +0 -383
  690. package/dist/src/core/destructive.d.ts +0 -144
  691. package/dist/src/core/destructive.js +0 -182
  692. package/dist/src/core/dev-profile.d.ts +0 -28
  693. package/dist/src/core/dev-profile.js +0 -58
  694. package/dist/src/core/diff-hunks.d.ts +0 -73
  695. package/dist/src/core/diff-hunks.js +0 -286
  696. package/dist/src/core/discard-baseline.d.ts +0 -60
  697. package/dist/src/core/discard-baseline.js +0 -247
  698. package/dist/src/core/display-state.d.ts +0 -50
  699. package/dist/src/core/display-state.js +0 -87
  700. package/dist/src/core/engine-changes.d.ts +0 -40
  701. package/dist/src/core/engine-changes.js +0 -95
  702. package/dist/src/core/engine-precondition.d.ts +0 -42
  703. package/dist/src/core/engine-precondition.js +0 -60
  704. package/dist/src/core/engine-session-lock.d.ts +0 -119
  705. package/dist/src/core/engine-session-lock.js +0 -374
  706. package/dist/src/core/engine-write-boundary.d.ts +0 -5
  707. package/dist/src/core/engine-write-boundary.js +0 -41
  708. package/dist/src/core/export-moved-code-shape.d.ts +0 -98
  709. package/dist/src/core/export-moved-code-shape.js +0 -220
  710. package/dist/src/core/file-lock-owner.d.ts +0 -103
  711. package/dist/src/core/file-lock-owner.js +0 -259
  712. package/dist/src/core/file-lock-queue.d.ts +0 -67
  713. package/dist/src/core/file-lock-queue.js +0 -219
  714. package/dist/src/core/file-lock-shared.d.ts +0 -57
  715. package/dist/src/core/file-lock-shared.js +0 -117
  716. package/dist/src/core/file-lock.d.ts +0 -143
  717. package/dist/src/core/file-lock.js +0 -531
  718. package/dist/src/core/firefox-archive.d.ts +0 -45
  719. package/dist/src/core/firefox-archive.js +0 -96
  720. package/dist/src/core/firefox-cache.d.ts +0 -30
  721. package/dist/src/core/firefox-cache.js +0 -248
  722. package/dist/src/core/firefox-download.d.ts +0 -30
  723. package/dist/src/core/firefox-download.js +0 -152
  724. package/dist/src/core/firefox-extract.d.ts +0 -42
  725. package/dist/src/core/firefox-extract.js +0 -248
  726. package/dist/src/core/firefox-ignorefile.d.ts +0 -17
  727. package/dist/src/core/firefox-ignorefile.js +0 -30
  728. package/dist/src/core/firefox.d.ts +0 -66
  729. package/dist/src/core/firefox.js +0 -121
  730. package/dist/src/core/forward-registrations.d.ts +0 -33
  731. package/dist/src/core/forward-registrations.js +0 -16
  732. package/dist/src/core/furnace-apply-dry-run.d.ts +0 -12
  733. package/dist/src/core/furnace-apply-dry-run.js +0 -99
  734. package/dist/src/core/furnace-apply-ftl.d.ts +0 -49
  735. package/dist/src/core/furnace-apply-ftl.js +0 -210
  736. package/dist/src/core/furnace-apply-helpers.d.ts +0 -106
  737. package/dist/src/core/furnace-apply-helpers.js +0 -436
  738. package/dist/src/core/furnace-apply-output.d.ts +0 -36
  739. package/dist/src/core/furnace-apply-output.js +0 -111
  740. package/dist/src/core/furnace-apply-overwrite-warn.d.ts +0 -67
  741. package/dist/src/core/furnace-apply-overwrite-warn.js +0 -131
  742. package/dist/src/core/furnace-apply-undeploy-actions.d.ts +0 -10
  743. package/dist/src/core/furnace-apply-undeploy-actions.js +0 -48
  744. package/dist/src/core/furnace-apply.d.ts +0 -49
  745. package/dist/src/core/furnace-apply.js +0 -465
  746. package/dist/src/core/furnace-checksum-utils.d.ts +0 -25
  747. package/dist/src/core/furnace-checksum-utils.js +0 -54
  748. package/dist/src/core/furnace-composed-source.d.ts +0 -76
  749. package/dist/src/core/furnace-composed-source.js +0 -167
  750. package/dist/src/core/furnace-config-array-utils.d.ts +0 -11
  751. package/dist/src/core/furnace-config-array-utils.js +0 -26
  752. package/dist/src/core/furnace-config-custom.d.ts +0 -15
  753. package/dist/src/core/furnace-config-custom.js +0 -73
  754. package/dist/src/core/furnace-config-order.d.ts +0 -8
  755. package/dist/src/core/furnace-config-order.js +0 -90
  756. package/dist/src/core/furnace-config-tokens.d.ts +0 -17
  757. package/dist/src/core/furnace-config-tokens.js +0 -42
  758. package/dist/src/core/furnace-config-validate-exceptions.d.ts +0 -17
  759. package/dist/src/core/furnace-config-validate-exceptions.js +0 -122
  760. package/dist/src/core/furnace-config-validate.d.ts +0 -32
  761. package/dist/src/core/furnace-config-validate.js +0 -167
  762. package/dist/src/core/furnace-config.d.ts +0 -139
  763. package/dist/src/core/furnace-config.js +0 -511
  764. package/dist/src/core/furnace-constants.d.ts +0 -81
  765. package/dist/src/core/furnace-constants.js +0 -125
  766. package/dist/src/core/furnace-css-fragments.d.ts +0 -96
  767. package/dist/src/core/furnace-css-fragments.js +0 -279
  768. package/dist/src/core/furnace-deploy-owner.d.ts +0 -29
  769. package/dist/src/core/furnace-deploy-owner.js +0 -116
  770. package/dist/src/core/furnace-dir-entry.d.ts +0 -20
  771. package/dist/src/core/furnace-dir-entry.js +0 -21
  772. package/dist/src/core/furnace-fragment-includers.d.ts +0 -56
  773. package/dist/src/core/furnace-fragment-includers.js +0 -122
  774. package/dist/src/core/furnace-graph-utils.d.ts +0 -11
  775. package/dist/src/core/furnace-graph-utils.js +0 -93
  776. package/dist/src/core/furnace-jsconfig.d.ts +0 -87
  777. package/dist/src/core/furnace-jsconfig.js +0 -248
  778. package/dist/src/core/furnace-marker.d.ts +0 -15
  779. package/dist/src/core/furnace-marker.js +0 -21
  780. package/dist/src/core/furnace-operation.d.ts +0 -195
  781. package/dist/src/core/furnace-operation.js +0 -444
  782. package/dist/src/core/furnace-precondition.d.ts +0 -61
  783. package/dist/src/core/furnace-precondition.js +0 -67
  784. package/dist/src/core/furnace-refresh.d.ts +0 -28
  785. package/dist/src/core/furnace-refresh.js +0 -125
  786. package/dist/src/core/furnace-registration-ast.d.ts +0 -53
  787. package/dist/src/core/furnace-registration-ast.js +0 -402
  788. package/dist/src/core/furnace-registration-jar-inplace.d.ts +0 -12
  789. package/dist/src/core/furnace-registration-jar-inplace.js +0 -79
  790. package/dist/src/core/furnace-registration-remove.d.ts +0 -56
  791. package/dist/src/core/furnace-registration-remove.js +0 -260
  792. package/dist/src/core/furnace-registration-rename.d.ts +0 -26
  793. package/dist/src/core/furnace-registration-rename.js +0 -77
  794. package/dist/src/core/furnace-registration-validate.d.ts +0 -53
  795. package/dist/src/core/furnace-registration-validate.js +0 -110
  796. package/dist/src/core/furnace-registration.d.ts +0 -112
  797. package/dist/src/core/furnace-registration.js +0 -348
  798. package/dist/src/core/furnace-rollback.d.ts +0 -48
  799. package/dist/src/core/furnace-rollback.js +0 -170
  800. package/dist/src/core/furnace-scanner.d.ts +0 -47
  801. package/dist/src/core/furnace-scanner.js +0 -236
  802. package/dist/src/core/furnace-stale-export.d.ts +0 -60
  803. package/dist/src/core/furnace-stale-export.js +0 -125
  804. package/dist/src/core/furnace-staleness.d.ts +0 -24
  805. package/dist/src/core/furnace-staleness.js +0 -67
  806. package/dist/src/core/furnace-state-persist.d.ts +0 -68
  807. package/dist/src/core/furnace-state-persist.js +0 -116
  808. package/dist/src/core/furnace-step-errors.d.ts +0 -23
  809. package/dist/src/core/furnace-step-errors.js +0 -25
  810. package/dist/src/core/furnace-stories.d.ts +0 -37
  811. package/dist/src/core/furnace-stories.js +0 -186
  812. package/dist/src/core/furnace-tag-map.d.ts +0 -47
  813. package/dist/src/core/furnace-tag-map.js +0 -182
  814. package/dist/src/core/furnace-validate-accessibility.d.ts +0 -39
  815. package/dist/src/core/furnace-validate-accessibility.js +0 -417
  816. package/dist/src/core/furnace-validate-checks.d.ts +0 -4
  817. package/dist/src/core/furnace-validate-checks.js +0 -6
  818. package/dist/src/core/furnace-validate-compatibility.d.ts +0 -6
  819. package/dist/src/core/furnace-validate-compatibility.js +0 -295
  820. package/dist/src/core/furnace-validate-exceptions.d.ts +0 -49
  821. package/dist/src/core/furnace-validate-exceptions.js +0 -98
  822. package/dist/src/core/furnace-validate-helpers.d.ts +0 -7
  823. package/dist/src/core/furnace-validate-helpers.js +0 -4
  824. package/dist/src/core/furnace-validate-icon-button.d.ts +0 -7
  825. package/dist/src/core/furnace-validate-icon-button.js +0 -78
  826. package/dist/src/core/furnace-validate-registration.d.ts +0 -67
  827. package/dist/src/core/furnace-validate-registration.js +0 -487
  828. package/dist/src/core/furnace-validate-structure.d.ts +0 -22
  829. package/dist/src/core/furnace-validate-structure.js +0 -122
  830. package/dist/src/core/furnace-validate.d.ts +0 -41
  831. package/dist/src/core/furnace-validate.js +0 -331
  832. package/dist/src/core/furnace-version-drift.d.ts +0 -57
  833. package/dist/src/core/furnace-version-drift.js +0 -102
  834. package/dist/src/core/gecko-dom-types.d.ts +0 -2
  835. package/dist/src/core/gecko-dom-types.js +0 -17
  836. package/dist/src/core/git-base.d.ts +0 -101
  837. package/dist/src/core/git-base.js +0 -162
  838. package/dist/src/core/git-diff-new-file.d.ts +0 -40
  839. package/dist/src/core/git-diff-new-file.js +0 -118
  840. package/dist/src/core/git-diff.d.ts +0 -82
  841. package/dist/src/core/git-diff.js +0 -539
  842. package/dist/src/core/git-file-ops.d.ts +0 -108
  843. package/dist/src/core/git-file-ops.js +0 -280
  844. package/dist/src/core/git-readonly-index.d.ts +0 -91
  845. package/dist/src/core/git-readonly-index.js +0 -177
  846. package/dist/src/core/git-status.d.ts +0 -84
  847. package/dist/src/core/git-status.js +0 -208
  848. package/dist/src/core/git.d.ts +0 -114
  849. package/dist/src/core/git.js +0 -540
  850. package/dist/src/core/harness-helper-pids.d.ts +0 -98
  851. package/dist/src/core/harness-helper-pids.js +0 -240
  852. package/dist/src/core/harness-orphans.d.ts +0 -118
  853. package/dist/src/core/harness-orphans.js +0 -268
  854. package/dist/src/core/harness-port-fallback.d.ts +0 -60
  855. package/dist/src/core/harness-port-fallback.js +0 -96
  856. package/dist/src/core/harness-port-reservation.d.ts +0 -60
  857. package/dist/src/core/harness-port-reservation.js +0 -122
  858. package/dist/src/core/history-log-file.d.ts +0 -61
  859. package/dist/src/core/history-log-file.js +0 -164
  860. package/dist/src/core/history-log.d.ts +0 -20
  861. package/dist/src/core/history-log.js +0 -30
  862. package/dist/src/core/json-preserving-edit.d.ts +0 -22
  863. package/dist/src/core/json-preserving-edit.js +0 -199
  864. package/dist/src/core/launchable-build.d.ts +0 -39
  865. package/dist/src/core/launchable-build.js +0 -85
  866. package/dist/src/core/license-headers.d.ts +0 -103
  867. package/dist/src/core/license-headers.js +0 -328
  868. package/dist/src/core/line-prefixer.d.ts +0 -18
  869. package/dist/src/core/line-prefixer.js +0 -34
  870. package/dist/src/core/lit-template-regions.d.ts +0 -4
  871. package/dist/src/core/lit-template-regions.js +0 -50
  872. package/dist/src/core/mach-build-artifacts.d.ts +0 -176
  873. package/dist/src/core/mach-build-artifacts.js +0 -436
  874. package/dist/src/core/mach-error-hints.d.ts +0 -24
  875. package/dist/src/core/mach-error-hints.js +0 -135
  876. package/dist/src/core/mach-known-noise-filter.d.ts +0 -122
  877. package/dist/src/core/mach-known-noise-filter.js +0 -257
  878. package/dist/src/core/mach-mozconfig.d.ts +0 -57
  879. package/dist/src/core/mach-mozconfig.js +0 -166
  880. package/dist/src/core/mach-python.d.ts +0 -19
  881. package/dist/src/core/mach-python.js +0 -131
  882. package/dist/src/core/mach-resource-shim.d.ts +0 -107
  883. package/dist/src/core/mach-resource-shim.js +0 -640
  884. package/dist/src/core/mach.d.ts +0 -284
  885. package/dist/src/core/mach.js +0 -445
  886. package/dist/src/core/marionette-port.d.ts +0 -153
  887. package/dist/src/core/marionette-port.js +0 -474
  888. package/dist/src/core/marionette-preflight.d.ts +0 -58
  889. package/dist/src/core/marionette-preflight.js +0 -332
  890. package/dist/src/core/markdown-table.d.ts +0 -104
  891. package/dist/src/core/markdown-table.js +0 -265
  892. package/dist/src/core/mochitest-server-port.d.ts +0 -81
  893. package/dist/src/core/mochitest-server-port.js +0 -175
  894. package/dist/src/core/module-resolution-preflight.d.ts +0 -65
  895. package/dist/src/core/module-resolution-preflight.js +0 -171
  896. package/dist/src/core/moz-manifest-helpers.d.ts +0 -79
  897. package/dist/src/core/moz-manifest-helpers.js +0 -163
  898. package/dist/src/core/moz-manifest-register.d.ts +0 -19
  899. package/dist/src/core/moz-manifest-register.js +0 -51
  900. package/dist/src/core/moz-manifest-rules.d.ts +0 -58
  901. package/dist/src/core/moz-manifest-rules.js +0 -264
  902. package/dist/src/core/moz-manifest-tokenizers.d.ts +0 -38
  903. package/dist/src/core/moz-manifest-tokenizers.js +0 -108
  904. package/dist/src/core/negative-control-compiled.d.ts +0 -46
  905. package/dist/src/core/negative-control-compiled.js +0 -109
  906. package/dist/src/core/negative-control-diff.d.ts +0 -51
  907. package/dist/src/core/negative-control-diff.js +0 -167
  908. package/dist/src/core/negative-control.d.ts +0 -150
  909. package/dist/src/core/negative-control.js +0 -399
  910. package/dist/src/core/objdir-install-manifests.d.ts +0 -73
  911. package/dist/src/core/objdir-install-manifests.js +0 -226
  912. package/dist/src/core/objdir-maintenance.d.ts +0 -10
  913. package/dist/src/core/objdir-maintenance.js +0 -167
  914. package/dist/src/core/ownership-table.d.ts +0 -53
  915. package/dist/src/core/ownership-table.js +0 -159
  916. package/dist/src/core/parent-exit-watchdog.d.ts +0 -62
  917. package/dist/src/core/parent-exit-watchdog.js +0 -69
  918. package/dist/src/core/park-store.d.ts +0 -63
  919. package/dist/src/core/park-store.js +0 -216
  920. package/dist/src/core/parser-fallback.d.ts +0 -50
  921. package/dist/src/core/parser-fallback.js +0 -61
  922. package/dist/src/core/patch-apply-fuzz.d.ts +0 -57
  923. package/dist/src/core/patch-apply-fuzz.js +0 -125
  924. package/dist/src/core/patch-apply.d.ts +0 -88
  925. package/dist/src/core/patch-apply.js +0 -435
  926. package/dist/src/core/patch-export-coverage.d.ts +0 -49
  927. package/dist/src/core/patch-export-coverage.js +0 -73
  928. package/dist/src/core/patch-export-metadata.d.ts +0 -46
  929. package/dist/src/core/patch-export-metadata.js +0 -47
  930. package/dist/src/core/patch-export-update.d.ts +0 -55
  931. package/dist/src/core/patch-export-update.js +0 -95
  932. package/dist/src/core/patch-export.d.ts +0 -175
  933. package/dist/src/core/patch-export.js +0 -312
  934. package/dist/src/core/patch-files.d.ts +0 -17
  935. package/dist/src/core/patch-files.js +0 -59
  936. package/dist/src/core/patch-identifier-suggest.d.ts +0 -26
  937. package/dist/src/core/patch-identifier-suggest.js +0 -135
  938. package/dist/src/core/patch-lint-binary.d.ts +0 -45
  939. package/dist/src/core/patch-lint-binary.js +0 -39
  940. package/dist/src/core/patch-lint-cache-checkjs.d.ts +0 -45
  941. package/dist/src/core/patch-lint-cache-checkjs.js +0 -195
  942. package/dist/src/core/patch-lint-cache.d.ts +0 -79
  943. package/dist/src/core/patch-lint-cache.js +0 -247
  944. package/dist/src/core/patch-lint-checkjs-any-import.d.ts +0 -57
  945. package/dist/src/core/patch-lint-checkjs-any-import.js +0 -91
  946. package/dist/src/core/patch-lint-checkjs-cache.d.ts +0 -18
  947. package/dist/src/core/patch-lint-checkjs-cache.js +0 -45
  948. package/dist/src/core/patch-lint-checkjs-diagnostics.d.ts +0 -17
  949. package/dist/src/core/patch-lint-checkjs-diagnostics.js +0 -32
  950. package/dist/src/core/patch-lint-checkjs-resolve.d.ts +0 -31
  951. package/dist/src/core/patch-lint-checkjs-resolve.js +0 -86
  952. package/dist/src/core/patch-lint-checkjs.d.ts +0 -182
  953. package/dist/src/core/patch-lint-checkjs.js +0 -563
  954. package/dist/src/core/patch-lint-chrome-jsdoc.d.ts +0 -43
  955. package/dist/src/core/patch-lint-chrome-jsdoc.js +0 -90
  956. package/dist/src/core/patch-lint-code-lines.d.ts +0 -59
  957. package/dist/src/core/patch-lint-code-lines.js +0 -105
  958. package/dist/src/core/patch-lint-creators.d.ts +0 -26
  959. package/dist/src/core/patch-lint-creators.js +0 -45
  960. package/dist/src/core/patch-lint-cross.d.ts +0 -232
  961. package/dist/src/core/patch-lint-cross.js +0 -590
  962. package/dist/src/core/patch-lint-css.d.ts +0 -27
  963. package/dist/src/core/patch-lint-css.js +0 -228
  964. package/dist/src/core/patch-lint-diff-tag.d.ts +0 -51
  965. package/dist/src/core/patch-lint-diff-tag.js +0 -105
  966. package/dist/src/core/patch-lint-diff.d.ts +0 -42
  967. package/dist/src/core/patch-lint-diff.js +0 -100
  968. package/dist/src/core/patch-lint-file-size.d.ts +0 -57
  969. package/dist/src/core/patch-lint-file-size.js +0 -62
  970. package/dist/src/core/patch-lint-forward-registration-extended.d.ts +0 -61
  971. package/dist/src/core/patch-lint-forward-registration-extended.js +0 -265
  972. package/dist/src/core/patch-lint-forward-registration.d.ts +0 -71
  973. package/dist/src/core/patch-lint-forward-registration.js +0 -266
  974. package/dist/src/core/patch-lint-ignore.d.ts +0 -196
  975. package/dist/src/core/patch-lint-ignore.js +0 -429
  976. package/dist/src/core/patch-lint-imports.d.ts +0 -9
  977. package/dist/src/core/patch-lint-imports.js +0 -90
  978. package/dist/src/core/patch-lint-jsdoc.d.ts +0 -67
  979. package/dist/src/core/patch-lint-jsdoc.js +0 -471
  980. package/dist/src/core/patch-lint-module-registration.d.ts +0 -22
  981. package/dist/src/core/patch-lint-module-registration.js +0 -97
  982. package/dist/src/core/patch-lint-mozbuild.d.ts +0 -18
  983. package/dist/src/core/patch-lint-mozbuild.js +0 -192
  984. package/dist/src/core/patch-lint-observer.d.ts +0 -37
  985. package/dist/src/core/patch-lint-observer.js +0 -167
  986. package/dist/src/core/patch-lint-ownership.d.ts +0 -74
  987. package/dist/src/core/patch-lint-ownership.js +0 -125
  988. package/dist/src/core/patch-lint-prettier.d.ts +0 -34
  989. package/dist/src/core/patch-lint-prettier.js +0 -124
  990. package/dist/src/core/patch-lint-projection.d.ts +0 -25
  991. package/dist/src/core/patch-lint-projection.js +0 -43
  992. package/dist/src/core/patch-lint-queue-types.d.ts +0 -60
  993. package/dist/src/core/patch-lint-queue-types.js +0 -12
  994. package/dist/src/core/patch-lint-size-thresholds.d.ts +0 -52
  995. package/dist/src/core/patch-lint-size-thresholds.js +0 -110
  996. package/dist/src/core/patch-lint-size.d.ts +0 -117
  997. package/dist/src/core/patch-lint-size.js +0 -331
  998. package/dist/src/core/patch-lint-staged-registration.d.ts +0 -98
  999. package/dist/src/core/patch-lint-staged-registration.js +0 -128
  1000. package/dist/src/core/patch-lint-token-scale.d.ts +0 -65
  1001. package/dist/src/core/patch-lint-token-scale.js +0 -304
  1002. package/dist/src/core/patch-lint-unmanaged-companion.d.ts +0 -106
  1003. package/dist/src/core/patch-lint-unmanaged-companion.js +0 -214
  1004. package/dist/src/core/patch-lint.d.ts +0 -206
  1005. package/dist/src/core/patch-lint.js +0 -533
  1006. package/dist/src/core/patch-lock.d.ts +0 -40
  1007. package/dist/src/core/patch-lock.js +0 -129
  1008. package/dist/src/core/patch-manifest-consistency.d.ts +0 -95
  1009. package/dist/src/core/patch-manifest-consistency.js +0 -256
  1010. package/dist/src/core/patch-manifest-files-affected.d.ts +0 -43
  1011. package/dist/src/core/patch-manifest-files-affected.js +0 -77
  1012. package/dist/src/core/patch-manifest-io.d.ts +0 -199
  1013. package/dist/src/core/patch-manifest-io.js +0 -556
  1014. package/dist/src/core/patch-manifest-key-order.d.ts +0 -23
  1015. package/dist/src/core/patch-manifest-key-order.js +0 -60
  1016. package/dist/src/core/patch-manifest-query.d.ts +0 -55
  1017. package/dist/src/core/patch-manifest-query.js +0 -139
  1018. package/dist/src/core/patch-manifest-resolve.d.ts +0 -21
  1019. package/dist/src/core/patch-manifest-resolve.js +0 -35
  1020. package/dist/src/core/patch-manifest-stage.d.ts +0 -46
  1021. package/dist/src/core/patch-manifest-stage.js +0 -96
  1022. package/dist/src/core/patch-manifest-validate.d.ts +0 -20
  1023. package/dist/src/core/patch-manifest-validate.js +0 -240
  1024. package/dist/src/core/patch-manifest.d.ts +0 -12
  1025. package/dist/src/core/patch-manifest.js +0 -13
  1026. package/dist/src/core/patch-order-legal.d.ts +0 -26
  1027. package/dist/src/core/patch-order-legal.js +0 -88
  1028. package/dist/src/core/patch-parse.d.ts +0 -176
  1029. package/dist/src/core/patch-parse.js +0 -416
  1030. package/dist/src/core/patch-policy-content.d.ts +0 -40
  1031. package/dist/src/core/patch-policy-content.js +0 -219
  1032. package/dist/src/core/patch-policy.d.ts +0 -80
  1033. package/dist/src/core/patch-policy.js +0 -394
  1034. package/dist/src/core/patch-registration-refs.d.ts +0 -41
  1035. package/dist/src/core/patch-registration-refs.js +0 -107
  1036. package/dist/src/core/patch-retired.d.ts +0 -57
  1037. package/dist/src/core/patch-retired.js +0 -92
  1038. package/dist/src/core/patch-source-metadata.d.ts +0 -6
  1039. package/dist/src/core/patch-source-metadata.js +0 -12
  1040. package/dist/src/core/patch-subset.d.ts +0 -18
  1041. package/dist/src/core/patch-subset.js +0 -67
  1042. package/dist/src/core/patch-transform.d.ts +0 -61
  1043. package/dist/src/core/patch-transform.js +0 -198
  1044. package/dist/src/core/preflight-wait.d.ts +0 -22
  1045. package/dist/src/core/preflight-wait.js +0 -62
  1046. package/dist/src/core/process-cpu-time.d.ts +0 -12
  1047. package/dist/src/core/process-cpu-time.js +0 -52
  1048. package/dist/src/core/process-owner.d.ts +0 -9
  1049. package/dist/src/core/process-owner.js +0 -43
  1050. package/dist/src/core/rebase-dry-run.d.ts +0 -48
  1051. package/dist/src/core/rebase-dry-run.js +0 -105
  1052. package/dist/src/core/rebase-from-version.d.ts +0 -46
  1053. package/dist/src/core/rebase-from-version.js +0 -71
  1054. package/dist/src/core/rebase-session.d.ts +0 -100
  1055. package/dist/src/core/rebase-session.js +0 -174
  1056. package/dist/src/core/register-browser-content.d.ts +0 -11
  1057. package/dist/src/core/register-browser-content.js +0 -52
  1058. package/dist/src/core/register-browser-test.d.ts +0 -18
  1059. package/dist/src/core/register-browser-test.js +0 -66
  1060. package/dist/src/core/register-module.d.ts +0 -11
  1061. package/dist/src/core/register-module.js +0 -56
  1062. package/dist/src/core/register-result.d.ts +0 -30
  1063. package/dist/src/core/register-result.js +0 -8
  1064. package/dist/src/core/register-scaffold.d.ts +0 -55
  1065. package/dist/src/core/register-scaffold.js +0 -146
  1066. package/dist/src/core/register-shared-css.d.ts +0 -36
  1067. package/dist/src/core/register-shared-css.js +0 -112
  1068. package/dist/src/core/register-xpcshell-test.d.ts +0 -50
  1069. package/dist/src/core/register-xpcshell-test.js +0 -143
  1070. package/dist/src/core/run-log-redact.d.ts +0 -38
  1071. package/dist/src/core/run-log-redact.js +0 -69
  1072. package/dist/src/core/run-log.d.ts +0 -97
  1073. package/dist/src/core/run-log.js +0 -334
  1074. package/dist/src/core/run-profile.d.ts +0 -57
  1075. package/dist/src/core/run-profile.js +0 -137
  1076. package/dist/src/core/shared-ftl.d.ts +0 -28
  1077. package/dist/src/core/shared-ftl.js +0 -49
  1078. package/dist/src/core/signal-critical.d.ts +0 -38
  1079. package/dist/src/core/signal-critical.js +0 -62
  1080. package/dist/src/core/smoke-patterns.d.ts +0 -81
  1081. package/dist/src/core/smoke-patterns.js +0 -176
  1082. package/dist/src/core/state-file.d.ts +0 -60
  1083. package/dist/src/core/state-file.js +0 -71
  1084. package/dist/src/core/status-binary.d.ts +0 -62
  1085. package/dist/src/core/status-binary.js +0 -133
  1086. package/dist/src/core/status-classify.d.ts +0 -96
  1087. package/dist/src/core/status-classify.js +0 -244
  1088. package/dist/src/core/test-changed-prefs.d.ts +0 -30
  1089. package/dist/src/core/test-changed-prefs.js +0 -93
  1090. package/dist/src/core/test-harness-crash.d.ts +0 -251
  1091. package/dist/src/core/test-harness-crash.js +0 -780
  1092. package/dist/src/core/test-harness-infra.d.ts +0 -32
  1093. package/dist/src/core/test-harness-infra.js +0 -69
  1094. package/dist/src/core/test-harness-output.d.ts +0 -45
  1095. package/dist/src/core/test-harness-output.js +0 -119
  1096. package/dist/src/core/test-harness-signature.d.ts +0 -57
  1097. package/dist/src/core/test-harness-signature.js +0 -35
  1098. package/dist/src/core/test-harness-verdict-notes.d.ts +0 -54
  1099. package/dist/src/core/test-harness-verdict-notes.js +0 -48
  1100. package/dist/src/core/test-host-state.d.ts +0 -14
  1101. package/dist/src/core/test-host-state.js +0 -80
  1102. package/dist/src/core/test-path-scope.d.ts +0 -59
  1103. package/dist/src/core/test-path-scope.js +0 -147
  1104. package/dist/src/core/test-profile-files.d.ts +0 -17
  1105. package/dist/src/core/test-profile-files.js +0 -75
  1106. package/dist/src/core/test-raw-log.d.ts +0 -66
  1107. package/dist/src/core/test-raw-log.js +0 -122
  1108. package/dist/src/core/test-run-completeness.d.ts +0 -97
  1109. package/dist/src/core/test-run-completeness.js +0 -191
  1110. package/dist/src/core/test-stale-check.d.ts +0 -213
  1111. package/dist/src/core/test-stale-check.js +0 -396
  1112. package/dist/src/core/test-stale-exempt.d.ts +0 -40
  1113. package/dist/src/core/test-stale-exempt.js +0 -70
  1114. package/dist/src/core/test-stale-symlink.d.ts +0 -12
  1115. package/dist/src/core/test-stale-symlink.js +0 -39
  1116. package/dist/src/core/test-stall-triage.d.ts +0 -51
  1117. package/dist/src/core/test-stall-triage.js +0 -142
  1118. package/dist/src/core/test-xpcshell-retry.d.ts +0 -35
  1119. package/dist/src/core/test-xpcshell-retry.js +0 -31
  1120. package/dist/src/core/token-category.d.ts +0 -54
  1121. package/dist/src/core/token-category.js +0 -299
  1122. package/dist/src/core/token-coverage.d.ts +0 -12
  1123. package/dist/src/core/token-coverage.js +0 -96
  1124. package/dist/src/core/token-dark-mode.d.ts +0 -64
  1125. package/dist/src/core/token-dark-mode.js +0 -186
  1126. package/dist/src/core/token-docs.d.ts +0 -34
  1127. package/dist/src/core/token-docs.js +0 -102
  1128. package/dist/src/core/token-inventory.d.ts +0 -56
  1129. package/dist/src/core/token-inventory.js +0 -114
  1130. package/dist/src/core/token-lint.d.ts +0 -53
  1131. package/dist/src/core/token-lint.js +0 -131
  1132. package/dist/src/core/token-manager.d.ts +0 -87
  1133. package/dist/src/core/token-manager.js +0 -407
  1134. package/dist/src/core/token-scaffold.d.ts +0 -36
  1135. package/dist/src/core/token-scaffold.js +0 -73
  1136. package/dist/src/core/token-sibling-sheets.d.ts +0 -46
  1137. package/dist/src/core/token-sibling-sheets.js +0 -119
  1138. package/dist/src/core/token-variant.d.ts +0 -90
  1139. package/dist/src/core/token-variant.js +0 -327
  1140. package/dist/src/core/toolchain-preflight.d.ts +0 -90
  1141. package/dist/src/core/toolchain-preflight.js +0 -251
  1142. package/dist/src/core/tree-cow.d.ts +0 -16
  1143. package/dist/src/core/tree-cow.js +0 -71
  1144. package/dist/src/core/tree-guard.d.ts +0 -35
  1145. package/dist/src/core/tree-guard.js +0 -194
  1146. package/dist/src/core/tree-store.d.ts +0 -143
  1147. package/dist/src/core/tree-store.js +0 -478
  1148. package/dist/src/core/typecheck-explain.d.ts +0 -93
  1149. package/dist/src/core/typecheck-explain.js +0 -213
  1150. package/dist/src/core/typecheck-shim.d.ts +0 -90
  1151. package/dist/src/core/typecheck-shim.js +0 -508
  1152. package/dist/src/core/typecheck.d.ts +0 -97
  1153. package/dist/src/core/typecheck.js +0 -457
  1154. package/dist/src/core/wire-destroy.d.ts +0 -25
  1155. package/dist/src/core/wire-destroy.js +0 -126
  1156. package/dist/src/core/wire-dom-fragment.d.ts +0 -44
  1157. package/dist/src/core/wire-dom-fragment.js +0 -139
  1158. package/dist/src/core/wire-init.d.ts +0 -28
  1159. package/dist/src/core/wire-init.js +0 -219
  1160. package/dist/src/core/wire-subscript.d.ts +0 -23
  1161. package/dist/src/core/wire-subscript.js +0 -145
  1162. package/dist/src/core/wire-utils.d.ts +0 -149
  1163. package/dist/src/core/wire-utils.js +0 -338
  1164. package/dist/src/core/xpcshell-appdir.d.ts +0 -157
  1165. package/dist/src/core/xpcshell-appdir.js +0 -299
  1166. package/dist/src/core/xpcshell-profile-dir.d.ts +0 -12
  1167. package/dist/src/core/xpcshell-profile-dir.js +0 -45
  1168. package/dist/src/errors/base.d.ts +0 -217
  1169. package/dist/src/errors/base.js +0 -279
  1170. package/dist/src/errors/build.d.ts +0 -92
  1171. package/dist/src/errors/build.js +0 -166
  1172. package/dist/src/errors/codes.d.ts +0 -74
  1173. package/dist/src/errors/codes.js +0 -74
  1174. package/dist/src/errors/config.d.ts +0 -17
  1175. package/dist/src/errors/config.js +0 -39
  1176. package/dist/src/errors/download.d.ts +0 -66
  1177. package/dist/src/errors/download.js +0 -160
  1178. package/dist/src/errors/furnace.d.ts +0 -20
  1179. package/dist/src/errors/furnace.js +0 -28
  1180. package/dist/src/errors/git.d.ts +0 -65
  1181. package/dist/src/errors/git.js +0 -140
  1182. package/dist/src/errors/patch.d.ts +0 -27
  1183. package/dist/src/errors/patch.js +0 -52
  1184. package/dist/src/errors/rebase.d.ts +0 -42
  1185. package/dist/src/errors/rebase.js +0 -71
  1186. package/dist/src/errors/run.d.ts +0 -16
  1187. package/dist/src/errors/run.js +0 -22
  1188. package/dist/src/index.d.ts +0 -42
  1189. package/dist/src/index.js +0 -32
  1190. package/dist/src/types/cli.d.ts +0 -14
  1191. package/dist/src/types/commands/index.d.ts +0 -6
  1192. package/dist/src/types/commands/index.js +0 -5
  1193. package/dist/src/types/commands/options.d.ts +0 -1372
  1194. package/dist/src/types/commands/options.js +0 -5
  1195. package/dist/src/types/commands/patches.d.ts +0 -352
  1196. package/dist/src/types/commands/patches.js +0 -5
  1197. package/dist/src/types/commands/project.d.ts +0 -51
  1198. package/dist/src/types/commands/project.js +0 -5
  1199. package/dist/src/types/config.d.ts +0 -732
  1200. package/dist/src/types/config.js +0 -15
  1201. package/dist/src/types/furnace.d.ts +0 -422
  1202. package/dist/src/types/furnace.js +0 -26
  1203. package/dist/src/types/index.d.ts +0 -5
  1204. package/dist/src/types/index.js +0 -5
  1205. package/dist/src/types/json.d.ts +0 -22
  1206. package/dist/src/types/json.js +0 -11
  1207. package/dist/src/types/typecheck.d.ts +0 -51
  1208. package/dist/src/types/typecheck.js +0 -14
  1209. package/dist/src/utils/assert.d.ts +0 -34
  1210. package/dist/src/utils/assert.js +0 -61
  1211. package/dist/src/utils/build-info.d.ts +0 -30
  1212. package/dist/src/utils/build-info.js +0 -99
  1213. package/dist/src/utils/child-env.d.ts +0 -28
  1214. package/dist/src/utils/child-env.js +0 -27
  1215. package/dist/src/utils/concurrency.d.ts +0 -8
  1216. package/dist/src/utils/concurrency.js +0 -32
  1217. package/dist/src/utils/elapsed.d.ts +0 -2
  1218. package/dist/src/utils/elapsed.js +0 -23
  1219. package/dist/src/utils/errors.d.ts +0 -39
  1220. package/dist/src/utils/errors.js +0 -67
  1221. package/dist/src/utils/fs.d.ts +0 -113
  1222. package/dist/src/utils/fs.js +0 -337
  1223. package/dist/src/utils/hash.d.ts +0 -12
  1224. package/dist/src/utils/hash.js +0 -16
  1225. package/dist/src/utils/line-dispatch.d.ts +0 -15
  1226. package/dist/src/utils/line-dispatch.js +0 -48
  1227. package/dist/src/utils/logger.d.ts +0 -109
  1228. package/dist/src/utils/logger.js +0 -270
  1229. package/dist/src/utils/machine-output.d.ts +0 -12
  1230. package/dist/src/utils/machine-output.js +0 -33
  1231. package/dist/src/utils/options.d.ts +0 -155
  1232. package/dist/src/utils/options.js +0 -312
  1233. package/dist/src/utils/package-root.d.ts +0 -21
  1234. package/dist/src/utils/package-root.js +0 -70
  1235. package/dist/src/utils/parse.d.ts +0 -117
  1236. package/dist/src/utils/parse.js +0 -214
  1237. package/dist/src/utils/path-glob.d.ts +0 -15
  1238. package/dist/src/utils/path-glob.js +0 -47
  1239. package/dist/src/utils/paths.d.ts +0 -31
  1240. package/dist/src/utils/paths.js +0 -80
  1241. package/dist/src/utils/platform.d.ts +0 -9
  1242. package/dist/src/utils/platform.js +0 -14
  1243. package/dist/src/utils/process-group.d.ts +0 -42
  1244. package/dist/src/utils/process-group.js +0 -190
  1245. package/dist/src/utils/process-input.d.ts +0 -27
  1246. package/dist/src/utils/process-input.js +0 -46
  1247. package/dist/src/utils/process.d.ts +0 -293
  1248. package/dist/src/utils/process.js +0 -593
  1249. package/dist/src/utils/ps-duration.d.ts +0 -31
  1250. package/dist/src/utils/ps-duration.js +0 -70
  1251. package/dist/src/utils/regex.d.ts +0 -39
  1252. package/dist/src/utils/regex.js +0 -109
  1253. package/dist/src/utils/sleep.d.ts +0 -25
  1254. package/dist/src/utils/sleep.js +0 -30
  1255. package/dist/src/utils/stdio-drain.d.ts +0 -28
  1256. package/dist/src/utils/stdio-drain.js +0 -54
  1257. package/dist/src/utils/validation.d.ts +0 -182
  1258. package/dist/src/utils/validation.js +0 -394
  1259. package/docs/lifecycle-invariants.md +0 -523
  1260. package/docs/run-logs.md +0 -122
  1261. package/docs/verification-trees.md +0 -49
  1262. /package/dist/src/{types/cli.js → cli/context.js} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,232 @@
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
+
3
230
  ## 0.55.0
4
231
 
5
232
  ### Test harness
@@ -260,27 +487,27 @@
260
487
 
261
488
  ### Performance
262
489
 
263
- - 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.
264
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.
265
492
 
266
493
  ### Typecheck and checkJs
267
494
 
268
- - 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.
269
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/`.
270
- - 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.
271
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.
272
499
 
273
500
  ### Re-export
274
501
 
275
- - 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.
276
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`.
277
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.
278
505
 
279
506
  ### Patch queue and lint
280
507
 
281
- - 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.
282
509
  - New public `findForwardRegistrations(patchesDir, { scope })` returns the same census as structured records.
283
- - 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.
284
511
 
285
512
  ### Programmatic API
286
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