@hominis/fireforge 0.54.0 → 0.60.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1244) hide show
  1. package/CHANGELOG.md +287 -6
  2. package/README.md +51 -17
  3. package/dist/bin/fireforge.js +34 -129
  4. package/dist/build-info.json +4 -4
  5. package/dist/src/check/check.js +394 -0
  6. package/dist/src/check/gate.js +448 -0
  7. package/dist/src/check/index.js +10 -0
  8. package/dist/src/check/record.js +155 -0
  9. package/dist/src/cli/command.js +286 -0
  10. package/dist/src/cli/output.js +96 -0
  11. package/dist/src/cli/program.js +231 -0
  12. package/dist/src/cli/stdio.js +59 -0
  13. package/dist/src/cli/version.js +99 -0
  14. package/dist/src/commands/bootstrap.js +17 -102
  15. package/dist/src/commands/build.js +34 -438
  16. package/dist/src/commands/check.js +44 -157
  17. package/dist/src/commands/config.js +50 -226
  18. package/dist/src/commands/discard.js +38 -215
  19. package/dist/src/commands/doctor.js +29 -456
  20. package/dist/src/commands/download.js +35 -499
  21. package/dist/src/commands/export.js +42 -431
  22. package/dist/src/commands/furnace.js +220 -0
  23. package/dist/src/commands/gate.js +127 -0
  24. package/dist/src/commands/import.js +44 -445
  25. package/dist/src/commands/index.js +86 -0
  26. package/dist/src/commands/lint.js +44 -546
  27. package/dist/src/commands/merge-driver.js +56 -0
  28. package/dist/src/commands/migrate.js +75 -0
  29. package/dist/src/commands/override.js +43 -0
  30. package/dist/src/commands/package.js +48 -77
  31. package/dist/src/commands/patch.js +221 -0
  32. package/dist/src/commands/re-export.js +55 -332
  33. package/dist/src/commands/rebase.js +69 -0
  34. package/dist/src/commands/register.js +62 -103
  35. package/dist/src/commands/reset.js +28 -91
  36. package/dist/src/commands/resolve.js +20 -167
  37. package/dist/src/commands/restore.js +19 -0
  38. package/dist/src/commands/run.js +60 -420
  39. package/dist/src/commands/setup.js +78 -90
  40. package/dist/src/commands/status.js +44 -413
  41. package/dist/src/commands/test.js +97 -422
  42. package/dist/src/commands/token.js +185 -228
  43. package/dist/src/commands/typecheck.js +59 -208
  44. package/dist/src/commands/verify.js +28 -334
  45. package/dist/src/commands/version.js +14 -0
  46. package/dist/src/commands/watch.js +20 -218
  47. package/dist/src/commands/wire.js +60 -349
  48. package/dist/src/commands/workspace.js +117 -0
  49. package/dist/src/config/edit.js +237 -0
  50. package/dist/src/config/index.js +15 -0
  51. package/dist/src/config/load.js +59 -0
  52. package/dist/src/config/previous.js +404 -0
  53. package/dist/src/config/schema/build.js +63 -0
  54. package/dist/src/config/schema/check.js +113 -0
  55. package/dist/src/config/schema/common.js +71 -0
  56. package/dist/src/config/schema/export-queue.js +36 -0
  57. package/dist/src/config/schema/firefox.js +69 -0
  58. package/dist/src/config/schema/gate.js +199 -0
  59. package/dist/src/config/schema/identity.js +55 -0
  60. package/dist/src/config/schema/index.js +45 -0
  61. package/dist/src/config/schema/lint.js +297 -0
  62. package/dist/src/config/schema/policy.js +111 -0
  63. package/dist/src/config/schema/source.js +90 -0
  64. package/dist/src/config/schema/test.js +17 -0
  65. package/dist/src/config/schema/toolchains.js +17 -0
  66. package/dist/src/config/schema/typecheck.js +29 -0
  67. package/dist/src/config/schema/wire.js +15 -0
  68. package/dist/src/diff/apply.js +129 -0
  69. package/dist/src/diff/index.js +16 -0
  70. package/dist/src/diff/model.js +267 -0
  71. package/dist/src/diff/query.js +65 -0
  72. package/dist/src/doctor/index.js +240 -0
  73. package/dist/src/engine/archive.js +396 -0
  74. package/dist/src/engine/audit.js +66 -0
  75. package/dist/src/engine/build.js +150 -0
  76. package/dist/src/engine/hostLocks.js +66 -0
  77. package/dist/src/engine/index.js +26 -0
  78. package/dist/src/engine/installManifests.js +147 -0
  79. package/dist/src/engine/mach.js +97 -0
  80. package/dist/src/engine/machHints.js +80 -0
  81. package/dist/src/engine/mozconfig.js +110 -0
  82. package/dist/src/engine/objdir.js +124 -0
  83. package/dist/src/engine/package.js +169 -0
  84. package/dist/src/engine/pin.js +12 -0
  85. package/dist/src/engine/pool.js +423 -0
  86. package/dist/src/engine/pristine.js +281 -0
  87. package/dist/src/engine/python.js +68 -0
  88. package/dist/src/engine/resourceGuard.js +582 -0
  89. package/dist/src/engine/run.js +259 -0
  90. package/dist/src/engine/smoke.js +204 -0
  91. package/dist/src/engine/staleness.js +229 -0
  92. package/dist/src/engine/watch.js +82 -0
  93. package/dist/src/engine/workspace.js +85 -0
  94. package/dist/src/furnace/config.js +360 -0
  95. package/dist/src/furnace/deploy.js +414 -0
  96. package/dist/src/furnace/diff.js +59 -0
  97. package/dist/src/furnace/edit.js +64 -0
  98. package/dist/src/furnace/fragments.js +53 -0
  99. package/dist/src/furnace/index.js +19 -0
  100. package/dist/src/furnace/operations.js +283 -0
  101. package/dist/src/furnace/registration.js +220 -0
  102. package/dist/src/furnace/scaffold.js +311 -0
  103. package/dist/src/furnace/typing.js +252 -0
  104. package/dist/src/furnace/validate.js +662 -0
  105. package/dist/src/git/apply.js +129 -0
  106. package/dist/src/git/diff.js +143 -0
  107. package/dist/src/git/index.js +33 -0
  108. package/dist/src/git/objects.js +201 -0
  109. package/dist/src/git/refs.js +85 -0
  110. package/dist/src/git/repo.js +222 -0
  111. package/dist/src/git/run.js +242 -0
  112. package/dist/src/git/status.js +156 -0
  113. package/dist/src/kernel/errors.js +123 -0
  114. package/dist/src/kernel/fs.js +515 -0
  115. package/dist/src/kernel/glob.js +63 -0
  116. package/dist/src/kernel/hash.js +28 -0
  117. package/dist/src/kernel/journal.js +524 -0
  118. package/dist/src/kernel/json-edit.js +198 -0
  119. package/dist/src/kernel/json.js +101 -0
  120. package/dist/src/kernel/lock.js +589 -0
  121. package/dist/src/kernel/log.js +154 -0
  122. package/dist/src/kernel/process/identity.js +313 -0
  123. package/dist/src/kernel/process/index.js +8 -0
  124. package/dist/src/kernel/process/listing.js +128 -0
  125. package/dist/src/kernel/process/spawn.js +430 -0
  126. package/dist/src/kernel/process/tree.js +301 -0
  127. package/dist/src/kernel/schema.js +308 -0
  128. package/dist/src/kernel/signals.js +171 -0
  129. package/dist/src/kernel/text.js +151 -0
  130. package/dist/src/kernel/time.js +83 -0
  131. package/dist/src/kernel/tty.js +84 -0
  132. package/dist/src/lint/cache.js +77 -0
  133. package/dist/src/lint/checkjs.js +400 -0
  134. package/dist/src/lint/index.js +3 -0
  135. package/dist/src/lint/input.js +100 -0
  136. package/dist/src/lint/report.js +107 -0
  137. package/dist/src/lint/rule.js +41 -0
  138. package/dist/src/lint/rules/css.js +308 -0
  139. package/dist/src/lint/rules/javascript.js +299 -0
  140. package/dist/src/lint/rules/jsdoc.js +249 -0
  141. package/dist/src/lint/rules/license.js +93 -0
  142. package/dist/src/lint/rules/policy.js +201 -0
  143. package/dist/src/lint/rules/registration.js +264 -0
  144. package/dist/src/lint/rules/size.js +299 -0
  145. package/dist/src/lint/run.js +126 -0
  146. package/dist/src/lint/shim.js +323 -0
  147. package/dist/src/lint/typescript.js +186 -0
  148. package/dist/src/lint/waivers.js +93 -0
  149. package/dist/src/mode/changes.js +264 -0
  150. package/dist/src/mode/diagnose.js +173 -0
  151. package/dist/src/mode/export.js +147 -0
  152. package/dist/src/mode/index.js +23 -0
  153. package/dist/src/mode/migrate.js +181 -0
  154. package/dist/src/mode/previousWaivers.js +206 -0
  155. package/dist/src/mode/pristine.js +61 -0
  156. package/dist/src/mode/rebase.js +197 -0
  157. package/dist/src/mode/report.js +157 -0
  158. package/dist/src/mode/setup.js +103 -0
  159. package/dist/src/mode/tracked.js +116 -0
  160. package/dist/src/mode/upgrade.js +281 -0
  161. package/dist/src/mode/watch.js +83 -0
  162. package/dist/src/mode/workspace.js +189 -0
  163. package/dist/src/mozbuild/index.js +6 -0
  164. package/dist/src/mozbuild/jar.js +366 -0
  165. package/dist/src/mozbuild/mozbuild.js +321 -0
  166. package/dist/src/mozbuild/paths.js +96 -0
  167. package/dist/src/mozbuild/references.js +39 -0
  168. package/dist/src/mozbuild/testManifest.js +343 -0
  169. package/dist/src/mozbuild/text.js +142 -0
  170. package/dist/src/project/changes.js +145 -0
  171. package/dist/src/project/checkout.js +66 -0
  172. package/dist/src/project/index.js +11 -0
  173. package/dist/src/project/license.js +119 -0
  174. package/dist/src/project/project.js +111 -0
  175. package/dist/src/project/state.js +85 -0
  176. package/dist/src/project/tracked.js +1 -0
  177. package/dist/src/queue/apply.js +270 -0
  178. package/dist/src/queue/attribute.js +159 -0
  179. package/dist/src/queue/baseline.js +409 -0
  180. package/dist/src/queue/capture.js +298 -0
  181. package/dist/src/queue/changes.js +234 -0
  182. package/dist/src/queue/index.js +50 -0
  183. package/dist/src/queue/manifest.js +341 -0
  184. package/dist/src/queue/operations.js +454 -0
  185. package/dist/src/queue/placement.js +220 -0
  186. package/dist/src/queue/queue.js +359 -0
  187. package/dist/src/queue/restore.js +103 -0
  188. package/dist/src/queue/session.js +685 -0
  189. package/dist/src/queue/status.js +137 -0
  190. package/dist/src/register/files.js +39 -0
  191. package/dist/src/register/index.js +8 -0
  192. package/dist/src/register/js.js +217 -0
  193. package/dist/src/register/register.js +359 -0
  194. package/dist/src/register/wire.js +146 -0
  195. package/dist/src/source/adopt.js +99 -0
  196. package/dist/src/source/changes.js +132 -0
  197. package/dist/src/source/edit.js +278 -0
  198. package/dist/src/source/export.js +70 -0
  199. package/dist/src/source/groups.js +131 -0
  200. package/dist/src/source/index.js +20 -0
  201. package/dist/src/source/materialize.js +382 -0
  202. package/dist/src/source/merge.js +255 -0
  203. package/dist/src/source/objects.js +102 -0
  204. package/dist/src/source/previous.js +166 -0
  205. package/dist/src/source/records.js +138 -0
  206. package/dist/src/source/refresh.js +264 -0
  207. package/dist/src/source/tree.js +337 -0
  208. package/dist/src/syntax/css.js +215 -0
  209. package/dist/src/syntax/fragments.js +63 -0
  210. package/dist/src/syntax/index.js +10 -0
  211. package/dist/src/syntax/js.js +270 -0
  212. package/dist/src/test/classify.js +826 -0
  213. package/dist/src/test/control.js +236 -0
  214. package/dist/src/test/host.js +266 -0
  215. package/dist/src/test/index.js +11 -0
  216. package/dist/src/test/plan.js +347 -0
  217. package/dist/src/test/rawLog.js +138 -0
  218. package/dist/src/test/run.js +404 -0
  219. package/dist/src/test/verdict.js +420 -0
  220. package/dist/src/test/xpcshell.js +143 -0
  221. package/dist/src/tokens/add.js +304 -0
  222. package/dist/src/tokens/coverage.js +65 -0
  223. package/dist/src/tokens/css.js +58 -0
  224. package/dist/src/tokens/index.js +12 -0
  225. package/dist/src/tokens/lint.js +96 -0
  226. package/dist/src/tokens/model.js +118 -0
  227. package/dist/src/tokens/settings.js +87 -0
  228. package/dist/src/tokens/siblings.js +104 -0
  229. package/dist/src/typecheck/explain.js +123 -0
  230. package/dist/src/typecheck/index.js +8 -0
  231. package/dist/src/typecheck/typecheck.js +332 -0
  232. package/docs/README.md +23 -28
  233. package/docs/authoring.md +97 -0
  234. package/docs/configuration.md +307 -692
  235. package/docs/exit-codes.md +76 -94
  236. package/docs/furnace.md +113 -181
  237. package/docs/gate.md +205 -0
  238. package/docs/getting-started.md +165 -0
  239. package/docs/machine-output.md +201 -277
  240. package/docs/migrating.md +261 -0
  241. package/docs/patch-workflow.md +163 -653
  242. package/docs/quality.md +220 -0
  243. package/docs/source-workflow.md +228 -0
  244. package/docs/testing.md +101 -712
  245. package/docs/workspaces.md +187 -0
  246. package/package.json +22 -30
  247. package/templates/configs/common.mozconfig +8 -2
  248. package/templates/configs/darwin.mozconfig +6 -7
  249. package/templates/configs/linux.mozconfig +5 -8
  250. package/templates/configs/win32.mozconfig +3 -9
  251. package/dist/bin/fireforge.d.ts +0 -9
  252. package/dist/src/cli-usage-error.d.ts +0 -46
  253. package/dist/src/cli-usage-error.js +0 -81
  254. package/dist/src/cli.d.ts +0 -41
  255. package/dist/src/cli.js +0 -380
  256. package/dist/src/commands/bootstrap-checks.d.ts +0 -16
  257. package/dist/src/commands/bootstrap-checks.js +0 -66
  258. package/dist/src/commands/bootstrap.d.ts +0 -10
  259. package/dist/src/commands/build-prelock.d.ts +0 -20
  260. package/dist/src/commands/build-prelock.js +0 -50
  261. package/dist/src/commands/build.d.ts +0 -13
  262. package/dist/src/commands/check-report.d.ts +0 -41
  263. package/dist/src/commands/check-report.js +0 -91
  264. package/dist/src/commands/check-run.d.ts +0 -33
  265. package/dist/src/commands/check-run.js +0 -112
  266. package/dist/src/commands/check-steps.d.ts +0 -75
  267. package/dist/src/commands/check-steps.js +0 -200
  268. package/dist/src/commands/check.d.ts +0 -32
  269. package/dist/src/commands/config.d.ts +0 -13
  270. package/dist/src/commands/declarations-report.d.ts +0 -49
  271. package/dist/src/commands/declarations-report.js +0 -83
  272. package/dist/src/commands/destructive-decision.d.ts +0 -19
  273. package/dist/src/commands/destructive-decision.js +0 -31
  274. package/dist/src/commands/discard.d.ts +0 -12
  275. package/dist/src/commands/doctor-check-core.d.ts +0 -110
  276. package/dist/src/commands/doctor-check-core.js +0 -24
  277. package/dist/src/commands/doctor-engine-eslint.d.ts +0 -3
  278. package/dist/src/commands/doctor-engine-eslint.js +0 -17
  279. package/dist/src/commands/doctor-external-toolchains.d.ts +0 -3
  280. package/dist/src/commands/doctor-external-toolchains.js +0 -56
  281. package/dist/src/commands/doctor-furnace-config-sync.d.ts +0 -18
  282. package/dist/src/commands/doctor-furnace-config-sync.js +0 -295
  283. package/dist/src/commands/doctor-furnace-jar.d.ts +0 -14
  284. package/dist/src/commands/doctor-furnace-jar.js +0 -44
  285. package/dist/src/commands/doctor-furnace.d.ts +0 -8
  286. package/dist/src/commands/doctor-furnace.js +0 -514
  287. package/dist/src/commands/doctor-macos-sdk.d.ts +0 -8
  288. package/dist/src/commands/doctor-macos-sdk.js +0 -158
  289. package/dist/src/commands/doctor-orphaned-harness.d.ts +0 -41
  290. package/dist/src/commands/doctor-orphaned-harness.js +0 -98
  291. package/dist/src/commands/doctor-patch-manifest.d.ts +0 -9
  292. package/dist/src/commands/doctor-patch-manifest.js +0 -156
  293. package/dist/src/commands/doctor-post-rebase-audit.d.ts +0 -2
  294. package/dist/src/commands/doctor-post-rebase-audit.js +0 -108
  295. package/dist/src/commands/doctor-source-pin.d.ts +0 -29
  296. package/dist/src/commands/doctor-source-pin.js +0 -91
  297. package/dist/src/commands/doctor-working-tree.d.ts +0 -27
  298. package/dist/src/commands/doctor-working-tree.js +0 -89
  299. package/dist/src/commands/doctor.d.ts +0 -49
  300. package/dist/src/commands/download.d.ts +0 -11
  301. package/dist/src/commands/export-adopt-check.d.ts +0 -37
  302. package/dist/src/commands/export-adopt-check.js +0 -97
  303. package/dist/src/commands/export-all.d.ts +0 -11
  304. package/dist/src/commands/export-all.js +0 -361
  305. package/dist/src/commands/export-flow.d.ts +0 -124
  306. package/dist/src/commands/export-flow.js +0 -423
  307. package/dist/src/commands/export-placement-conflicts.d.ts +0 -17
  308. package/dist/src/commands/export-placement-conflicts.js +0 -75
  309. package/dist/src/commands/export-placement-gate.d.ts +0 -42
  310. package/dist/src/commands/export-placement-gate.js +0 -107
  311. package/dist/src/commands/export-placement-policy.d.ts +0 -22
  312. package/dist/src/commands/export-placement-policy.js +0 -54
  313. package/dist/src/commands/export-shared.d.ts +0 -152
  314. package/dist/src/commands/export-shared.js +0 -396
  315. package/dist/src/commands/export-staged-registration.d.ts +0 -46
  316. package/dist/src/commands/export-staged-registration.js +0 -91
  317. package/dist/src/commands/export.d.ts +0 -13
  318. package/dist/src/commands/forward-import-remedy.d.ts +0 -31
  319. package/dist/src/commands/forward-import-remedy.js +0 -62
  320. package/dist/src/commands/furnace/apply.d.ts +0 -8
  321. package/dist/src/commands/furnace/apply.js +0 -327
  322. package/dist/src/commands/furnace/authoring-config.d.ts +0 -13
  323. package/dist/src/commands/furnace/authoring-config.js +0 -19
  324. package/dist/src/commands/furnace/chrome-doc-remove.d.ts +0 -14
  325. package/dist/src/commands/furnace/chrome-doc-remove.js +0 -148
  326. package/dist/src/commands/furnace/chrome-doc-templates.d.ts +0 -152
  327. package/dist/src/commands/furnace/chrome-doc-templates.js +0 -331
  328. package/dist/src/commands/furnace/chrome-doc-tests.d.ts +0 -23
  329. package/dist/src/commands/furnace/chrome-doc-tests.js +0 -148
  330. package/dist/src/commands/furnace/chrome-doc.d.ts +0 -87
  331. package/dist/src/commands/furnace/chrome-doc.js +0 -365
  332. package/dist/src/commands/furnace/create-browser-test.d.ts +0 -44
  333. package/dist/src/commands/furnace/create-browser-test.js +0 -179
  334. package/dist/src/commands/furnace/create-dry-run.d.ts +0 -49
  335. package/dist/src/commands/furnace/create-dry-run.js +0 -107
  336. package/dist/src/commands/furnace/create-features.d.ts +0 -24
  337. package/dist/src/commands/furnace/create-features.js +0 -55
  338. package/dist/src/commands/furnace/create-mochikit.d.ts +0 -29
  339. package/dist/src/commands/furnace/create-mochikit.js +0 -75
  340. package/dist/src/commands/furnace/create-readback.d.ts +0 -22
  341. package/dist/src/commands/furnace/create-readback.js +0 -32
  342. package/dist/src/commands/furnace/create-templates.d.ts +0 -119
  343. package/dist/src/commands/furnace/create-templates.js +0 -283
  344. package/dist/src/commands/furnace/create-validation.d.ts +0 -6
  345. package/dist/src/commands/furnace/create-validation.js +0 -59
  346. package/dist/src/commands/furnace/create-xpcshell.d.ts +0 -27
  347. package/dist/src/commands/furnace/create-xpcshell.js +0 -80
  348. package/dist/src/commands/furnace/create.d.ts +0 -24
  349. package/dist/src/commands/furnace/create.js +0 -407
  350. package/dist/src/commands/furnace/deploy-fragment-includers.d.ts +0 -59
  351. package/dist/src/commands/furnace/deploy-fragment-includers.js +0 -120
  352. package/dist/src/commands/furnace/deploy-named.d.ts +0 -48
  353. package/dist/src/commands/furnace/deploy-named.js +0 -107
  354. package/dist/src/commands/furnace/deploy.d.ts +0 -9
  355. package/dist/src/commands/furnace/deploy.js +0 -218
  356. package/dist/src/commands/furnace/diff.d.ts +0 -11
  357. package/dist/src/commands/furnace/diff.js +0 -238
  358. package/dist/src/commands/furnace/index.d.ts +0 -4
  359. package/dist/src/commands/furnace/index.js +0 -282
  360. package/dist/src/commands/furnace/init.d.ts +0 -11
  361. package/dist/src/commands/furnace/init.js +0 -287
  362. package/dist/src/commands/furnace/list.d.ts +0 -8
  363. package/dist/src/commands/furnace/list.js +0 -104
  364. package/dist/src/commands/furnace/override.d.ts +0 -16
  365. package/dist/src/commands/furnace/override.js +0 -454
  366. package/dist/src/commands/furnace/preview.d.ts +0 -19
  367. package/dist/src/commands/furnace/preview.js +0 -349
  368. package/dist/src/commands/furnace/refresh.d.ts +0 -10
  369. package/dist/src/commands/furnace/refresh.js +0 -303
  370. package/dist/src/commands/furnace/remove-mutations.d.ts +0 -36
  371. package/dist/src/commands/furnace/remove-mutations.js +0 -168
  372. package/dist/src/commands/furnace/remove-state.d.ts +0 -20
  373. package/dist/src/commands/furnace/remove-state.js +0 -60
  374. package/dist/src/commands/furnace/remove.d.ts +0 -8
  375. package/dist/src/commands/furnace/remove.js +0 -415
  376. package/dist/src/commands/furnace/rename-browser-test.d.ts +0 -2
  377. package/dist/src/commands/furnace/rename-browser-test.js +0 -68
  378. package/dist/src/commands/furnace/rename-dry-run.d.ts +0 -29
  379. package/dist/src/commands/furnace/rename-dry-run.js +0 -127
  380. package/dist/src/commands/furnace/rename-helpers.d.ts +0 -26
  381. package/dist/src/commands/furnace/rename-helpers.js +0 -85
  382. package/dist/src/commands/furnace/rename-registrations.d.ts +0 -41
  383. package/dist/src/commands/furnace/rename-registrations.js +0 -98
  384. package/dist/src/commands/furnace/rename-xpcshell.d.ts +0 -32
  385. package/dist/src/commands/furnace/rename-xpcshell.js +0 -95
  386. package/dist/src/commands/furnace/rename.d.ts +0 -6
  387. package/dist/src/commands/furnace/rename.js +0 -400
  388. package/dist/src/commands/furnace/scan.d.ts +0 -14
  389. package/dist/src/commands/furnace/scan.js +0 -192
  390. package/dist/src/commands/furnace/status.d.ts +0 -7
  391. package/dist/src/commands/furnace/status.js +0 -209
  392. package/dist/src/commands/furnace/sync.d.ts +0 -12
  393. package/dist/src/commands/furnace/sync.js +0 -145
  394. package/dist/src/commands/furnace/test-file-name.d.ts +0 -28
  395. package/dist/src/commands/furnace/test-file-name.js +0 -39
  396. package/dist/src/commands/furnace/validate-report.d.ts +0 -45
  397. package/dist/src/commands/furnace/validate-report.js +0 -91
  398. package/dist/src/commands/furnace/validate.d.ts +0 -8
  399. package/dist/src/commands/furnace/validate.js +0 -309
  400. package/dist/src/commands/furnace/validation-output.d.ts +0 -47
  401. package/dist/src/commands/furnace/validation-output.js +0 -161
  402. package/dist/src/commands/import.d.ts +0 -11
  403. package/dist/src/commands/lint-per-patch.d.ts +0 -10
  404. package/dist/src/commands/lint-per-patch.js +0 -428
  405. package/dist/src/commands/lint-per-run-checkjs.d.ts +0 -66
  406. package/dist/src/commands/lint-per-run-checkjs.js +0 -102
  407. package/dist/src/commands/lint-report.d.ts +0 -25
  408. package/dist/src/commands/lint-report.js +0 -76
  409. package/dist/src/commands/lint.d.ts +0 -47
  410. package/dist/src/commands/manifest.d.ts +0 -38
  411. package/dist/src/commands/manifest.js +0 -68
  412. package/dist/src/commands/package.d.ts +0 -11
  413. package/dist/src/commands/park.d.ts +0 -22
  414. package/dist/src/commands/park.js +0 -232
  415. package/dist/src/commands/patch/compact.d.ts +0 -28
  416. package/dist/src/commands/patch/compact.js +0 -208
  417. package/dist/src/commands/patch/delete-gap-notice.d.ts +0 -24
  418. package/dist/src/commands/patch/delete-gap-notice.js +0 -48
  419. package/dist/src/commands/patch/delete.d.ts +0 -28
  420. package/dist/src/commands/patch/delete.js +0 -131
  421. package/dist/src/commands/patch/entry-projection.d.ts +0 -13
  422. package/dist/src/commands/patch/entry-projection.js +0 -24
  423. package/dist/src/commands/patch/index.d.ts +0 -16
  424. package/dist/src/commands/patch/index.js +0 -52
  425. package/dist/src/commands/patch/lint-ignore-from.d.ts +0 -43
  426. package/dist/src/commands/patch/lint-ignore-from.js +0 -141
  427. package/dist/src/commands/patch/lint-ignore.d.ts +0 -42
  428. package/dist/src/commands/patch/lint-ignore.js +0 -261
  429. package/dist/src/commands/patch/move-files-adopt.d.ts +0 -33
  430. package/dist/src/commands/patch/move-files-adopt.js +0 -65
  431. package/dist/src/commands/patch/move-files-create.d.ts +0 -19
  432. package/dist/src/commands/patch/move-files-create.js +0 -187
  433. package/dist/src/commands/patch/move-files-into.d.ts +0 -65
  434. package/dist/src/commands/patch/move-files-into.js +0 -325
  435. package/dist/src/commands/patch/move-files-retire.d.ts +0 -39
  436. package/dist/src/commands/patch/move-files-retire.js +0 -91
  437. package/dist/src/commands/patch/move-files.d.ts +0 -28
  438. package/dist/src/commands/patch/move-files.js +0 -224
  439. package/dist/src/commands/patch/move-size-tier.d.ts +0 -27
  440. package/dist/src/commands/patch/move-size-tier.js +0 -66
  441. package/dist/src/commands/patch/patch-context.d.ts +0 -40
  442. package/dist/src/commands/patch/patch-context.js +0 -51
  443. package/dist/src/commands/patch/removal-created-files.d.ts +0 -48
  444. package/dist/src/commands/patch/removal-created-files.js +0 -83
  445. package/dist/src/commands/patch/removal-dependents.d.ts +0 -63
  446. package/dist/src/commands/patch/removal-dependents.js +0 -133
  447. package/dist/src/commands/patch/rename.d.ts +0 -35
  448. package/dist/src/commands/patch/rename.js +0 -378
  449. package/dist/src/commands/patch/reorder-projection.d.ts +0 -17
  450. package/dist/src/commands/patch/reorder-projection.js +0 -49
  451. package/dist/src/commands/patch/reorder-shift.d.ts +0 -30
  452. package/dist/src/commands/patch/reorder-shift.js +0 -307
  453. package/dist/src/commands/patch/reorder.d.ts +0 -34
  454. package/dist/src/commands/patch/reorder.js +0 -375
  455. package/dist/src/commands/patch/reserve.d.ts +0 -33
  456. package/dist/src/commands/patch/reserve.js +0 -152
  457. package/dist/src/commands/patch/retire.d.ts +0 -34
  458. package/dist/src/commands/patch/retire.js +0 -133
  459. package/dist/src/commands/patch/split-plan.d.ts +0 -125
  460. package/dist/src/commands/patch/split-plan.js +0 -313
  461. package/dist/src/commands/patch/split-staged.d.ts +0 -108
  462. package/dist/src/commands/patch/split-staged.js +0 -202
  463. package/dist/src/commands/patch/split.d.ts +0 -43
  464. package/dist/src/commands/patch/split.js +0 -367
  465. package/dist/src/commands/patch/stage.d.ts +0 -34
  466. package/dist/src/commands/patch/stage.js +0 -153
  467. package/dist/src/commands/patch/staged-dependency-batch.d.ts +0 -48
  468. package/dist/src/commands/patch/staged-dependency-batch.js +0 -176
  469. package/dist/src/commands/patch/staged-dependency-entries.d.ts +0 -44
  470. package/dist/src/commands/patch/staged-dependency-entries.js +0 -80
  471. package/dist/src/commands/patch/staged-dependency-from.d.ts +0 -14
  472. package/dist/src/commands/patch/staged-dependency-from.js +0 -114
  473. package/dist/src/commands/patch/staged-dependency-remove.d.ts +0 -53
  474. package/dist/src/commands/patch/staged-dependency-remove.js +0 -117
  475. package/dist/src/commands/patch/staged-dependency-validate.d.ts +0 -15
  476. package/dist/src/commands/patch/staged-dependency-validate.js +0 -49
  477. package/dist/src/commands/patch/staged-dependency.d.ts +0 -22
  478. package/dist/src/commands/patch/staged-dependency.js +0 -248
  479. package/dist/src/commands/patch/tier.d.ts +0 -34
  480. package/dist/src/commands/patch/tier.js +0 -125
  481. package/dist/src/commands/patch-rename-map.d.ts +0 -30
  482. package/dist/src/commands/patch-rename-map.js +0 -54
  483. package/dist/src/commands/pending-resolution.d.ts +0 -15
  484. package/dist/src/commands/pending-resolution.js +0 -25
  485. package/dist/src/commands/re-export-adjacent-registrations.d.ts +0 -20
  486. package/dist/src/commands/re-export-adjacent-registrations.js +0 -75
  487. package/dist/src/commands/re-export-adjacent.d.ts +0 -111
  488. package/dist/src/commands/re-export-adjacent.js +0 -267
  489. package/dist/src/commands/re-export-bulk-scan.d.ts +0 -19
  490. package/dist/src/commands/re-export-bulk-scan.js +0 -233
  491. package/dist/src/commands/re-export-drift.d.ts +0 -110
  492. package/dist/src/commands/re-export-drift.js +0 -358
  493. package/dist/src/commands/re-export-files.d.ts +0 -15
  494. package/dist/src/commands/re-export-files.js +0 -307
  495. package/dist/src/commands/re-export-hunks.d.ts +0 -35
  496. package/dist/src/commands/re-export-hunks.js +0 -220
  497. package/dist/src/commands/re-export-lint.d.ts +0 -137
  498. package/dist/src/commands/re-export-lint.js +0 -303
  499. package/dist/src/commands/re-export-options.d.ts +0 -29
  500. package/dist/src/commands/re-export-options.js +0 -191
  501. package/dist/src/commands/re-export-preflight.d.ts +0 -23
  502. package/dist/src/commands/re-export-preflight.js +0 -159
  503. package/dist/src/commands/re-export-purity-scope.d.ts +0 -18
  504. package/dist/src/commands/re-export-purity-scope.js +0 -137
  505. package/dist/src/commands/re-export-register.d.ts +0 -12
  506. package/dist/src/commands/re-export-register.js +0 -99
  507. package/dist/src/commands/re-export-removed.d.ts +0 -15
  508. package/dist/src/commands/re-export-removed.js +0 -94
  509. package/dist/src/commands/re-export-retired-declarations.d.ts +0 -22
  510. package/dist/src/commands/re-export-retired-declarations.js +0 -113
  511. package/dist/src/commands/re-export-scan-owner.d.ts +0 -44
  512. package/dist/src/commands/re-export-scan-owner.js +0 -116
  513. package/dist/src/commands/re-export-scan.d.ts +0 -72
  514. package/dist/src/commands/re-export-scan.js +0 -265
  515. package/dist/src/commands/re-export-single.d.ts +0 -39
  516. package/dist/src/commands/re-export-single.js +0 -388
  517. package/dist/src/commands/re-export-stale-registrations.d.ts +0 -39
  518. package/dist/src/commands/re-export-stale-registrations.js +0 -106
  519. package/dist/src/commands/re-export-summary.d.ts +0 -28
  520. package/dist/src/commands/re-export-summary.js +0 -36
  521. package/dist/src/commands/re-export.d.ts +0 -8
  522. package/dist/src/commands/rebase/abort.d.ts +0 -7
  523. package/dist/src/commands/rebase/abort.js +0 -67
  524. package/dist/src/commands/rebase/confirm.d.ts +0 -42
  525. package/dist/src/commands/rebase/confirm.js +0 -36
  526. package/dist/src/commands/rebase/conflict-summary.d.ts +0 -12
  527. package/dist/src/commands/rebase/conflict-summary.js +0 -37
  528. package/dist/src/commands/rebase/continue.d.ts +0 -7
  529. package/dist/src/commands/rebase/continue.js +0 -119
  530. package/dist/src/commands/rebase/index.d.ts +0 -22
  531. package/dist/src/commands/rebase/index.js +0 -209
  532. package/dist/src/commands/rebase/patch-loop.d.ts +0 -15
  533. package/dist/src/commands/rebase/patch-loop.js +0 -289
  534. package/dist/src/commands/rebase/summary.d.ts +0 -8
  535. package/dist/src/commands/rebase/summary.js +0 -47
  536. package/dist/src/commands/register.d.ts +0 -13
  537. package/dist/src/commands/reset.d.ts +0 -11
  538. package/dist/src/commands/resolve.d.ts +0 -36
  539. package/dist/src/commands/run.d.ts +0 -10
  540. package/dist/src/commands/setup-support.d.ts +0 -35
  541. package/dist/src/commands/setup-support.js +0 -386
  542. package/dist/src/commands/setup.d.ts +0 -11
  543. package/dist/src/commands/source.d.ts +0 -9
  544. package/dist/src/commands/source.js +0 -120
  545. package/dist/src/commands/status-check.d.ts +0 -87
  546. package/dist/src/commands/status-check.js +0 -161
  547. package/dist/src/commands/status-json.d.ts +0 -45
  548. package/dist/src/commands/status-json.js +0 -97
  549. package/dist/src/commands/status-output.d.ts +0 -23
  550. package/dist/src/commands/status-output.js +0 -231
  551. package/dist/src/commands/status-ownership.d.ts +0 -54
  552. package/dist/src/commands/status-ownership.js +0 -59
  553. package/dist/src/commands/status-scope.d.ts +0 -37
  554. package/dist/src/commands/status-scope.js +0 -54
  555. package/dist/src/commands/status.d.ts +0 -11
  556. package/dist/src/commands/test-appdir.d.ts +0 -6
  557. package/dist/src/commands/test-appdir.js +0 -29
  558. package/dist/src/commands/test-browser-preflight.d.ts +0 -28
  559. package/dist/src/commands/test-browser-preflight.js +0 -197
  560. package/dist/src/commands/test-build-furnace.d.ts +0 -21
  561. package/dist/src/commands/test-build-furnace.js +0 -53
  562. package/dist/src/commands/test-build-phase.d.ts +0 -29
  563. package/dist/src/commands/test-build-phase.js +0 -290
  564. package/dist/src/commands/test-checkjs.d.ts +0 -3
  565. package/dist/src/commands/test-checkjs.js +0 -35
  566. package/dist/src/commands/test-control-restore.d.ts +0 -40
  567. package/dist/src/commands/test-control-restore.js +0 -86
  568. package/dist/src/commands/test-diagnose.d.ts +0 -23
  569. package/dist/src/commands/test-diagnose.js +0 -317
  570. package/dist/src/commands/test-dispatch.d.ts +0 -39
  571. package/dist/src/commands/test-dispatch.js +0 -281
  572. package/dist/src/commands/test-furnace-reach.d.ts +0 -37
  573. package/dist/src/commands/test-furnace-reach.js +0 -132
  574. package/dist/src/commands/test-harness-env.d.ts +0 -23
  575. package/dist/src/commands/test-harness-env.js +0 -81
  576. package/dist/src/commands/test-harness-teardown.d.ts +0 -62
  577. package/dist/src/commands/test-harness-teardown.js +0 -128
  578. package/dist/src/commands/test-modes.d.ts +0 -57
  579. package/dist/src/commands/test-modes.js +0 -158
  580. package/dist/src/commands/test-multi-verdict.d.ts +0 -61
  581. package/dist/src/commands/test-multi-verdict.js +0 -112
  582. package/dist/src/commands/test-orchestrate.d.ts +0 -63
  583. package/dist/src/commands/test-orchestrate.js +0 -274
  584. package/dist/src/commands/test-perf-scope.d.ts +0 -50
  585. package/dist/src/commands/test-perf-scope.js +0 -138
  586. package/dist/src/commands/test-prelock.d.ts +0 -61
  587. package/dist/src/commands/test-prelock.js +0 -301
  588. package/dist/src/commands/test-register.d.ts +0 -4
  589. package/dist/src/commands/test-register.js +0 -181
  590. package/dist/src/commands/test-results.d.ts +0 -71
  591. package/dist/src/commands/test-results.js +0 -79
  592. package/dist/src/commands/test-run.d.ts +0 -89
  593. package/dist/src/commands/test-run.js +0 -251
  594. package/dist/src/commands/test-shards.d.ts +0 -114
  595. package/dist/src/commands/test-shards.js +0 -272
  596. package/dist/src/commands/test-stale-gate.d.ts +0 -52
  597. package/dist/src/commands/test-stale-gate.js +0 -165
  598. package/dist/src/commands/test-verdict.d.ts +0 -92
  599. package/dist/src/commands/test-verdict.js +0 -162
  600. package/dist/src/commands/test.d.ts +0 -22
  601. package/dist/src/commands/token-coverage.d.ts +0 -5
  602. package/dist/src/commands/token-coverage.js +0 -170
  603. package/dist/src/commands/token-lint.d.ts +0 -14
  604. package/dist/src/commands/token-lint.js +0 -151
  605. package/dist/src/commands/token-list.d.ts +0 -26
  606. package/dist/src/commands/token-list.js +0 -153
  607. package/dist/src/commands/token.d.ts +0 -14
  608. package/dist/src/commands/tree.d.ts +0 -19
  609. package/dist/src/commands/tree.js +0 -341
  610. package/dist/src/commands/typecheck.d.ts +0 -56
  611. package/dist/src/commands/verify-scope.d.ts +0 -28
  612. package/dist/src/commands/verify-scope.js +0 -67
  613. package/dist/src/commands/verify.d.ts +0 -58
  614. package/dist/src/commands/watch.d.ts +0 -9
  615. package/dist/src/commands/wire.d.ts +0 -13
  616. package/dist/src/core/ast-utils.d.ts +0 -73
  617. package/dist/src/core/ast-utils.js +0 -105
  618. package/dist/src/core/brand-validation.d.ts +0 -7
  619. package/dist/src/core/brand-validation.js +0 -14
  620. package/dist/src/core/branding.d.ts +0 -86
  621. package/dist/src/core/branding.js +0 -371
  622. package/dist/src/core/browser-wire.d.ts +0 -48
  623. package/dist/src/core/browser-wire.js +0 -133
  624. package/dist/src/core/build-audit-platform.d.ts +0 -67
  625. package/dist/src/core/build-audit-platform.js +0 -373
  626. package/dist/src/core/build-audit-registration.d.ts +0 -80
  627. package/dist/src/core/build-audit-registration.js +0 -181
  628. package/dist/src/core/build-audit-resolve.d.ts +0 -78
  629. package/dist/src/core/build-audit-resolve.js +0 -240
  630. package/dist/src/core/build-audit-skip.d.ts +0 -57
  631. package/dist/src/core/build-audit-skip.js +0 -112
  632. package/dist/src/core/build-audit-transforms.d.ts +0 -23
  633. package/dist/src/core/build-audit-transforms.js +0 -92
  634. package/dist/src/core/build-audit.d.ts +0 -93
  635. package/dist/src/core/build-audit.js +0 -633
  636. package/dist/src/core/build-baseline-types.d.ts +0 -225
  637. package/dist/src/core/build-baseline-types.js +0 -10
  638. package/dist/src/core/build-baseline-validate.d.ts +0 -32
  639. package/dist/src/core/build-baseline-validate.js +0 -173
  640. package/dist/src/core/build-baseline.d.ts +0 -103
  641. package/dist/src/core/build-baseline.js +0 -261
  642. package/dist/src/core/build-jar-escalation.d.ts +0 -61
  643. package/dist/src/core/build-jar-escalation.js +0 -125
  644. package/dist/src/core/build-overwrite-guard.d.ts +0 -92
  645. package/dist/src/core/build-overwrite-guard.js +0 -235
  646. package/dist/src/core/build-prepare.d.ts +0 -83
  647. package/dist/src/core/build-prepare.js +0 -414
  648. package/dist/src/core/build-run-record.d.ts +0 -74
  649. package/dist/src/core/build-run-record.js +0 -136
  650. package/dist/src/core/checkjs-support-heads.d.ts +0 -41
  651. package/dist/src/core/checkjs-support-heads.js +0 -104
  652. package/dist/src/core/component-source-guard.d.ts +0 -20
  653. package/dist/src/core/component-source-guard.js +0 -68
  654. package/dist/src/core/config-mutate.d.ts +0 -16
  655. package/dist/src/core/config-mutate.js +0 -76
  656. package/dist/src/core/config-paths.d.ts +0 -16
  657. package/dist/src/core/config-paths.js +0 -106
  658. package/dist/src/core/config-state.d.ts +0 -16
  659. package/dist/src/core/config-state.js +0 -141
  660. package/dist/src/core/config-validate-build-audit.d.ts +0 -8
  661. package/dist/src/core/config-validate-build-audit.js +0 -80
  662. package/dist/src/core/config-validate-check.d.ts +0 -8
  663. package/dist/src/core/config-validate-check.js +0 -219
  664. package/dist/src/core/config-validate-file-size.d.ts +0 -15
  665. package/dist/src/core/config-validate-file-size.js +0 -154
  666. package/dist/src/core/config-validate-history.d.ts +0 -11
  667. package/dist/src/core/config-validate-history.js +0 -38
  668. package/dist/src/core/config-validate-patch-policy.d.ts +0 -7
  669. package/dist/src/core/config-validate-patch-policy.js +0 -274
  670. package/dist/src/core/config-validate-test-toolchains.d.ts +0 -8
  671. package/dist/src/core/config-validate-test-toolchains.js +0 -133
  672. package/dist/src/core/config-validate-token-scales.d.ts +0 -9
  673. package/dist/src/core/config-validate-token-scales.js +0 -92
  674. package/dist/src/core/config-validate.d.ts +0 -11
  675. package/dist/src/core/config-validate.js +0 -503
  676. package/dist/src/core/config.d.ts +0 -92
  677. package/dist/src/core/config.js +0 -169
  678. package/dist/src/core/coverage-dispatch.d.ts +0 -24
  679. package/dist/src/core/coverage-dispatch.js +0 -44
  680. package/dist/src/core/coverage-extend.d.ts +0 -89
  681. package/dist/src/core/coverage-extend.js +0 -239
  682. package/dist/src/core/coverage-records.d.ts +0 -107
  683. package/dist/src/core/coverage-records.js +0 -383
  684. package/dist/src/core/destructive.d.ts +0 -144
  685. package/dist/src/core/destructive.js +0 -182
  686. package/dist/src/core/diff-hunks.d.ts +0 -73
  687. package/dist/src/core/diff-hunks.js +0 -286
  688. package/dist/src/core/discard-baseline.d.ts +0 -60
  689. package/dist/src/core/discard-baseline.js +0 -247
  690. package/dist/src/core/display-state.d.ts +0 -50
  691. package/dist/src/core/display-state.js +0 -87
  692. package/dist/src/core/engine-changes.d.ts +0 -40
  693. package/dist/src/core/engine-changes.js +0 -95
  694. package/dist/src/core/engine-precondition.d.ts +0 -42
  695. package/dist/src/core/engine-precondition.js +0 -60
  696. package/dist/src/core/engine-session-lock.d.ts +0 -119
  697. package/dist/src/core/engine-session-lock.js +0 -374
  698. package/dist/src/core/engine-write-boundary.d.ts +0 -5
  699. package/dist/src/core/engine-write-boundary.js +0 -41
  700. package/dist/src/core/export-moved-code-shape.d.ts +0 -98
  701. package/dist/src/core/export-moved-code-shape.js +0 -220
  702. package/dist/src/core/file-lock-owner.d.ts +0 -103
  703. package/dist/src/core/file-lock-owner.js +0 -259
  704. package/dist/src/core/file-lock-queue.d.ts +0 -67
  705. package/dist/src/core/file-lock-queue.js +0 -219
  706. package/dist/src/core/file-lock-shared.d.ts +0 -57
  707. package/dist/src/core/file-lock-shared.js +0 -117
  708. package/dist/src/core/file-lock.d.ts +0 -143
  709. package/dist/src/core/file-lock.js +0 -531
  710. package/dist/src/core/firefox-archive.d.ts +0 -45
  711. package/dist/src/core/firefox-archive.js +0 -96
  712. package/dist/src/core/firefox-cache.d.ts +0 -30
  713. package/dist/src/core/firefox-cache.js +0 -248
  714. package/dist/src/core/firefox-download.d.ts +0 -30
  715. package/dist/src/core/firefox-download.js +0 -152
  716. package/dist/src/core/firefox-extract.d.ts +0 -42
  717. package/dist/src/core/firefox-extract.js +0 -248
  718. package/dist/src/core/firefox-ignorefile.d.ts +0 -17
  719. package/dist/src/core/firefox-ignorefile.js +0 -30
  720. package/dist/src/core/firefox.d.ts +0 -66
  721. package/dist/src/core/firefox.js +0 -121
  722. package/dist/src/core/forward-registrations.d.ts +0 -33
  723. package/dist/src/core/forward-registrations.js +0 -16
  724. package/dist/src/core/furnace-apply-dry-run.d.ts +0 -12
  725. package/dist/src/core/furnace-apply-dry-run.js +0 -99
  726. package/dist/src/core/furnace-apply-ftl.d.ts +0 -49
  727. package/dist/src/core/furnace-apply-ftl.js +0 -210
  728. package/dist/src/core/furnace-apply-helpers.d.ts +0 -106
  729. package/dist/src/core/furnace-apply-helpers.js +0 -436
  730. package/dist/src/core/furnace-apply-output.d.ts +0 -36
  731. package/dist/src/core/furnace-apply-output.js +0 -111
  732. package/dist/src/core/furnace-apply-overwrite-warn.d.ts +0 -62
  733. package/dist/src/core/furnace-apply-overwrite-warn.js +0 -124
  734. package/dist/src/core/furnace-apply-undeploy-actions.d.ts +0 -10
  735. package/dist/src/core/furnace-apply-undeploy-actions.js +0 -48
  736. package/dist/src/core/furnace-apply.d.ts +0 -49
  737. package/dist/src/core/furnace-apply.js +0 -465
  738. package/dist/src/core/furnace-checksum-utils.d.ts +0 -25
  739. package/dist/src/core/furnace-checksum-utils.js +0 -54
  740. package/dist/src/core/furnace-composed-source.d.ts +0 -76
  741. package/dist/src/core/furnace-composed-source.js +0 -167
  742. package/dist/src/core/furnace-config-array-utils.d.ts +0 -11
  743. package/dist/src/core/furnace-config-array-utils.js +0 -26
  744. package/dist/src/core/furnace-config-custom.d.ts +0 -15
  745. package/dist/src/core/furnace-config-custom.js +0 -73
  746. package/dist/src/core/furnace-config-order.d.ts +0 -8
  747. package/dist/src/core/furnace-config-order.js +0 -90
  748. package/dist/src/core/furnace-config-tokens.d.ts +0 -17
  749. package/dist/src/core/furnace-config-tokens.js +0 -42
  750. package/dist/src/core/furnace-config-validate-exceptions.d.ts +0 -17
  751. package/dist/src/core/furnace-config-validate-exceptions.js +0 -122
  752. package/dist/src/core/furnace-config-validate.d.ts +0 -32
  753. package/dist/src/core/furnace-config-validate.js +0 -146
  754. package/dist/src/core/furnace-config.d.ts +0 -139
  755. package/dist/src/core/furnace-config.js +0 -511
  756. package/dist/src/core/furnace-constants.d.ts +0 -79
  757. package/dist/src/core/furnace-constants.js +0 -123
  758. package/dist/src/core/furnace-css-fragments.d.ts +0 -96
  759. package/dist/src/core/furnace-css-fragments.js +0 -279
  760. package/dist/src/core/furnace-dir-entry.d.ts +0 -20
  761. package/dist/src/core/furnace-dir-entry.js +0 -21
  762. package/dist/src/core/furnace-fragment-includers.d.ts +0 -56
  763. package/dist/src/core/furnace-fragment-includers.js +0 -122
  764. package/dist/src/core/furnace-graph-utils.d.ts +0 -11
  765. package/dist/src/core/furnace-graph-utils.js +0 -93
  766. package/dist/src/core/furnace-jsconfig.d.ts +0 -61
  767. package/dist/src/core/furnace-jsconfig.js +0 -208
  768. package/dist/src/core/furnace-marker.d.ts +0 -15
  769. package/dist/src/core/furnace-marker.js +0 -21
  770. package/dist/src/core/furnace-operation.d.ts +0 -195
  771. package/dist/src/core/furnace-operation.js +0 -444
  772. package/dist/src/core/furnace-precondition.d.ts +0 -61
  773. package/dist/src/core/furnace-precondition.js +0 -67
  774. package/dist/src/core/furnace-refresh.d.ts +0 -28
  775. package/dist/src/core/furnace-refresh.js +0 -125
  776. package/dist/src/core/furnace-registration-ast.d.ts +0 -53
  777. package/dist/src/core/furnace-registration-ast.js +0 -402
  778. package/dist/src/core/furnace-registration-jar-inplace.d.ts +0 -12
  779. package/dist/src/core/furnace-registration-jar-inplace.js +0 -79
  780. package/dist/src/core/furnace-registration-remove.d.ts +0 -56
  781. package/dist/src/core/furnace-registration-remove.js +0 -260
  782. package/dist/src/core/furnace-registration-rename.d.ts +0 -26
  783. package/dist/src/core/furnace-registration-rename.js +0 -77
  784. package/dist/src/core/furnace-registration-validate.d.ts +0 -53
  785. package/dist/src/core/furnace-registration-validate.js +0 -110
  786. package/dist/src/core/furnace-registration.d.ts +0 -112
  787. package/dist/src/core/furnace-registration.js +0 -348
  788. package/dist/src/core/furnace-rollback.d.ts +0 -48
  789. package/dist/src/core/furnace-rollback.js +0 -170
  790. package/dist/src/core/furnace-scanner.d.ts +0 -47
  791. package/dist/src/core/furnace-scanner.js +0 -236
  792. package/dist/src/core/furnace-stale-export.d.ts +0 -60
  793. package/dist/src/core/furnace-stale-export.js +0 -125
  794. package/dist/src/core/furnace-staleness.d.ts +0 -24
  795. package/dist/src/core/furnace-staleness.js +0 -67
  796. package/dist/src/core/furnace-state-persist.d.ts +0 -68
  797. package/dist/src/core/furnace-state-persist.js +0 -116
  798. package/dist/src/core/furnace-step-errors.d.ts +0 -23
  799. package/dist/src/core/furnace-step-errors.js +0 -25
  800. package/dist/src/core/furnace-stories.d.ts +0 -37
  801. package/dist/src/core/furnace-stories.js +0 -186
  802. package/dist/src/core/furnace-validate-accessibility.d.ts +0 -39
  803. package/dist/src/core/furnace-validate-accessibility.js +0 -417
  804. package/dist/src/core/furnace-validate-checks.d.ts +0 -4
  805. package/dist/src/core/furnace-validate-checks.js +0 -6
  806. package/dist/src/core/furnace-validate-compatibility.d.ts +0 -6
  807. package/dist/src/core/furnace-validate-compatibility.js +0 -295
  808. package/dist/src/core/furnace-validate-exceptions.d.ts +0 -49
  809. package/dist/src/core/furnace-validate-exceptions.js +0 -98
  810. package/dist/src/core/furnace-validate-helpers.d.ts +0 -7
  811. package/dist/src/core/furnace-validate-helpers.js +0 -4
  812. package/dist/src/core/furnace-validate-icon-button.d.ts +0 -7
  813. package/dist/src/core/furnace-validate-icon-button.js +0 -78
  814. package/dist/src/core/furnace-validate-registration.d.ts +0 -67
  815. package/dist/src/core/furnace-validate-registration.js +0 -487
  816. package/dist/src/core/furnace-validate-structure.d.ts +0 -22
  817. package/dist/src/core/furnace-validate-structure.js +0 -122
  818. package/dist/src/core/furnace-validate.d.ts +0 -41
  819. package/dist/src/core/furnace-validate.js +0 -302
  820. package/dist/src/core/furnace-version-drift.d.ts +0 -57
  821. package/dist/src/core/furnace-version-drift.js +0 -102
  822. package/dist/src/core/gecko-dom-types.d.ts +0 -2
  823. package/dist/src/core/gecko-dom-types.js +0 -17
  824. package/dist/src/core/git-base.d.ts +0 -101
  825. package/dist/src/core/git-base.js +0 -162
  826. package/dist/src/core/git-diff-new-file.d.ts +0 -40
  827. package/dist/src/core/git-diff-new-file.js +0 -118
  828. package/dist/src/core/git-diff.d.ts +0 -82
  829. package/dist/src/core/git-diff.js +0 -539
  830. package/dist/src/core/git-file-ops.d.ts +0 -108
  831. package/dist/src/core/git-file-ops.js +0 -280
  832. package/dist/src/core/git-readonly-index.d.ts +0 -91
  833. package/dist/src/core/git-readonly-index.js +0 -177
  834. package/dist/src/core/git-status.d.ts +0 -84
  835. package/dist/src/core/git-status.js +0 -208
  836. package/dist/src/core/git.d.ts +0 -114
  837. package/dist/src/core/git.js +0 -540
  838. package/dist/src/core/harness-helper-pids.d.ts +0 -98
  839. package/dist/src/core/harness-helper-pids.js +0 -240
  840. package/dist/src/core/harness-orphans.d.ts +0 -118
  841. package/dist/src/core/harness-orphans.js +0 -268
  842. package/dist/src/core/harness-port-fallback.d.ts +0 -60
  843. package/dist/src/core/harness-port-fallback.js +0 -96
  844. package/dist/src/core/harness-port-reservation.d.ts +0 -60
  845. package/dist/src/core/harness-port-reservation.js +0 -122
  846. package/dist/src/core/history-log-file.d.ts +0 -61
  847. package/dist/src/core/history-log-file.js +0 -164
  848. package/dist/src/core/history-log.d.ts +0 -20
  849. package/dist/src/core/history-log.js +0 -30
  850. package/dist/src/core/json-preserving-edit.d.ts +0 -22
  851. package/dist/src/core/json-preserving-edit.js +0 -199
  852. package/dist/src/core/launchable-build.d.ts +0 -39
  853. package/dist/src/core/launchable-build.js +0 -85
  854. package/dist/src/core/license-headers.d.ts +0 -103
  855. package/dist/src/core/license-headers.js +0 -318
  856. package/dist/src/core/line-prefixer.d.ts +0 -18
  857. package/dist/src/core/line-prefixer.js +0 -34
  858. package/dist/src/core/lit-template-regions.d.ts +0 -4
  859. package/dist/src/core/lit-template-regions.js +0 -50
  860. package/dist/src/core/mach-build-artifacts.d.ts +0 -176
  861. package/dist/src/core/mach-build-artifacts.js +0 -436
  862. package/dist/src/core/mach-error-hints.d.ts +0 -24
  863. package/dist/src/core/mach-error-hints.js +0 -135
  864. package/dist/src/core/mach-known-noise-filter.d.ts +0 -122
  865. package/dist/src/core/mach-known-noise-filter.js +0 -257
  866. package/dist/src/core/mach-mozconfig.d.ts +0 -57
  867. package/dist/src/core/mach-mozconfig.js +0 -166
  868. package/dist/src/core/mach-python.d.ts +0 -19
  869. package/dist/src/core/mach-python.js +0 -131
  870. package/dist/src/core/mach-resource-shim.d.ts +0 -107
  871. package/dist/src/core/mach-resource-shim.js +0 -640
  872. package/dist/src/core/mach.d.ts +0 -284
  873. package/dist/src/core/mach.js +0 -445
  874. package/dist/src/core/marionette-port.d.ts +0 -153
  875. package/dist/src/core/marionette-port.js +0 -474
  876. package/dist/src/core/marionette-preflight.d.ts +0 -58
  877. package/dist/src/core/marionette-preflight.js +0 -332
  878. package/dist/src/core/markdown-table.d.ts +0 -104
  879. package/dist/src/core/markdown-table.js +0 -265
  880. package/dist/src/core/mochitest-server-port.d.ts +0 -81
  881. package/dist/src/core/mochitest-server-port.js +0 -175
  882. package/dist/src/core/module-resolution-preflight.d.ts +0 -65
  883. package/dist/src/core/module-resolution-preflight.js +0 -171
  884. package/dist/src/core/moz-manifest-helpers.d.ts +0 -79
  885. package/dist/src/core/moz-manifest-helpers.js +0 -163
  886. package/dist/src/core/moz-manifest-register.d.ts +0 -19
  887. package/dist/src/core/moz-manifest-register.js +0 -51
  888. package/dist/src/core/moz-manifest-rules.d.ts +0 -58
  889. package/dist/src/core/moz-manifest-rules.js +0 -264
  890. package/dist/src/core/moz-manifest-tokenizers.d.ts +0 -38
  891. package/dist/src/core/moz-manifest-tokenizers.js +0 -108
  892. package/dist/src/core/negative-control-compiled.d.ts +0 -46
  893. package/dist/src/core/negative-control-compiled.js +0 -109
  894. package/dist/src/core/negative-control-diff.d.ts +0 -51
  895. package/dist/src/core/negative-control-diff.js +0 -204
  896. package/dist/src/core/negative-control.d.ts +0 -150
  897. package/dist/src/core/negative-control.js +0 -399
  898. package/dist/src/core/objdir-install-manifests.d.ts +0 -73
  899. package/dist/src/core/objdir-install-manifests.js +0 -226
  900. package/dist/src/core/objdir-maintenance.d.ts +0 -10
  901. package/dist/src/core/objdir-maintenance.js +0 -167
  902. package/dist/src/core/ownership-table.d.ts +0 -53
  903. package/dist/src/core/ownership-table.js +0 -159
  904. package/dist/src/core/parent-exit-watchdog.d.ts +0 -62
  905. package/dist/src/core/parent-exit-watchdog.js +0 -69
  906. package/dist/src/core/park-store.d.ts +0 -63
  907. package/dist/src/core/park-store.js +0 -216
  908. package/dist/src/core/parser-fallback.d.ts +0 -50
  909. package/dist/src/core/parser-fallback.js +0 -61
  910. package/dist/src/core/patch-apply-fuzz.d.ts +0 -57
  911. package/dist/src/core/patch-apply-fuzz.js +0 -125
  912. package/dist/src/core/patch-apply.d.ts +0 -88
  913. package/dist/src/core/patch-apply.js +0 -435
  914. package/dist/src/core/patch-export-coverage.d.ts +0 -49
  915. package/dist/src/core/patch-export-coverage.js +0 -73
  916. package/dist/src/core/patch-export-metadata.d.ts +0 -46
  917. package/dist/src/core/patch-export-metadata.js +0 -47
  918. package/dist/src/core/patch-export-update.d.ts +0 -55
  919. package/dist/src/core/patch-export-update.js +0 -95
  920. package/dist/src/core/patch-export.d.ts +0 -175
  921. package/dist/src/core/patch-export.js +0 -312
  922. package/dist/src/core/patch-files.d.ts +0 -17
  923. package/dist/src/core/patch-files.js +0 -59
  924. package/dist/src/core/patch-identifier-suggest.d.ts +0 -26
  925. package/dist/src/core/patch-identifier-suggest.js +0 -135
  926. package/dist/src/core/patch-lint-binary.d.ts +0 -45
  927. package/dist/src/core/patch-lint-binary.js +0 -39
  928. package/dist/src/core/patch-lint-cache.d.ts +0 -78
  929. package/dist/src/core/patch-lint-cache.js +0 -233
  930. package/dist/src/core/patch-lint-checkjs-any-import.d.ts +0 -39
  931. package/dist/src/core/patch-lint-checkjs-any-import.js +0 -63
  932. package/dist/src/core/patch-lint-checkjs-cache.d.ts +0 -18
  933. package/dist/src/core/patch-lint-checkjs-cache.js +0 -45
  934. package/dist/src/core/patch-lint-checkjs-diagnostics.d.ts +0 -17
  935. package/dist/src/core/patch-lint-checkjs-diagnostics.js +0 -32
  936. package/dist/src/core/patch-lint-checkjs.d.ts +0 -180
  937. package/dist/src/core/patch-lint-checkjs.js +0 -611
  938. package/dist/src/core/patch-lint-chrome-jsdoc.d.ts +0 -43
  939. package/dist/src/core/patch-lint-chrome-jsdoc.js +0 -90
  940. package/dist/src/core/patch-lint-code-lines.d.ts +0 -59
  941. package/dist/src/core/patch-lint-code-lines.js +0 -105
  942. package/dist/src/core/patch-lint-creators.d.ts +0 -26
  943. package/dist/src/core/patch-lint-creators.js +0 -45
  944. package/dist/src/core/patch-lint-cross.d.ts +0 -232
  945. package/dist/src/core/patch-lint-cross.js +0 -590
  946. package/dist/src/core/patch-lint-css.d.ts +0 -27
  947. package/dist/src/core/patch-lint-css.js +0 -228
  948. package/dist/src/core/patch-lint-diff-tag.d.ts +0 -51
  949. package/dist/src/core/patch-lint-diff-tag.js +0 -105
  950. package/dist/src/core/patch-lint-diff.d.ts +0 -42
  951. package/dist/src/core/patch-lint-diff.js +0 -100
  952. package/dist/src/core/patch-lint-file-size.d.ts +0 -57
  953. package/dist/src/core/patch-lint-file-size.js +0 -62
  954. package/dist/src/core/patch-lint-forward-registration-extended.d.ts +0 -61
  955. package/dist/src/core/patch-lint-forward-registration-extended.js +0 -265
  956. package/dist/src/core/patch-lint-forward-registration.d.ts +0 -71
  957. package/dist/src/core/patch-lint-forward-registration.js +0 -266
  958. package/dist/src/core/patch-lint-ignore.d.ts +0 -196
  959. package/dist/src/core/patch-lint-ignore.js +0 -429
  960. package/dist/src/core/patch-lint-imports.d.ts +0 -5
  961. package/dist/src/core/patch-lint-imports.js +0 -67
  962. package/dist/src/core/patch-lint-jsdoc.d.ts +0 -67
  963. package/dist/src/core/patch-lint-jsdoc.js +0 -471
  964. package/dist/src/core/patch-lint-module-registration.d.ts +0 -22
  965. package/dist/src/core/patch-lint-module-registration.js +0 -97
  966. package/dist/src/core/patch-lint-mozbuild.d.ts +0 -18
  967. package/dist/src/core/patch-lint-mozbuild.js +0 -192
  968. package/dist/src/core/patch-lint-observer.d.ts +0 -37
  969. package/dist/src/core/patch-lint-observer.js +0 -167
  970. package/dist/src/core/patch-lint-ownership.d.ts +0 -74
  971. package/dist/src/core/patch-lint-ownership.js +0 -125
  972. package/dist/src/core/patch-lint-prettier.d.ts +0 -34
  973. package/dist/src/core/patch-lint-prettier.js +0 -124
  974. package/dist/src/core/patch-lint-projection.d.ts +0 -25
  975. package/dist/src/core/patch-lint-projection.js +0 -43
  976. package/dist/src/core/patch-lint-queue-types.d.ts +0 -60
  977. package/dist/src/core/patch-lint-queue-types.js +0 -12
  978. package/dist/src/core/patch-lint-size-thresholds.d.ts +0 -52
  979. package/dist/src/core/patch-lint-size-thresholds.js +0 -110
  980. package/dist/src/core/patch-lint-size.d.ts +0 -117
  981. package/dist/src/core/patch-lint-size.js +0 -331
  982. package/dist/src/core/patch-lint-staged-registration.d.ts +0 -78
  983. package/dist/src/core/patch-lint-staged-registration.js +0 -110
  984. package/dist/src/core/patch-lint-token-scale.d.ts +0 -57
  985. package/dist/src/core/patch-lint-token-scale.js +0 -286
  986. package/dist/src/core/patch-lint-unmanaged-companion.d.ts +0 -106
  987. package/dist/src/core/patch-lint-unmanaged-companion.js +0 -214
  988. package/dist/src/core/patch-lint.d.ts +0 -191
  989. package/dist/src/core/patch-lint.js +0 -529
  990. package/dist/src/core/patch-lock.d.ts +0 -40
  991. package/dist/src/core/patch-lock.js +0 -129
  992. package/dist/src/core/patch-manifest-consistency.d.ts +0 -95
  993. package/dist/src/core/patch-manifest-consistency.js +0 -256
  994. package/dist/src/core/patch-manifest-files-affected.d.ts +0 -43
  995. package/dist/src/core/patch-manifest-files-affected.js +0 -77
  996. package/dist/src/core/patch-manifest-io.d.ts +0 -199
  997. package/dist/src/core/patch-manifest-io.js +0 -556
  998. package/dist/src/core/patch-manifest-key-order.d.ts +0 -23
  999. package/dist/src/core/patch-manifest-key-order.js +0 -60
  1000. package/dist/src/core/patch-manifest-query.d.ts +0 -55
  1001. package/dist/src/core/patch-manifest-query.js +0 -139
  1002. package/dist/src/core/patch-manifest-resolve.d.ts +0 -21
  1003. package/dist/src/core/patch-manifest-resolve.js +0 -35
  1004. package/dist/src/core/patch-manifest-stage.d.ts +0 -46
  1005. package/dist/src/core/patch-manifest-stage.js +0 -96
  1006. package/dist/src/core/patch-manifest-validate.d.ts +0 -20
  1007. package/dist/src/core/patch-manifest-validate.js +0 -240
  1008. package/dist/src/core/patch-manifest.d.ts +0 -12
  1009. package/dist/src/core/patch-manifest.js +0 -13
  1010. package/dist/src/core/patch-order-legal.d.ts +0 -26
  1011. package/dist/src/core/patch-order-legal.js +0 -88
  1012. package/dist/src/core/patch-parse.d.ts +0 -161
  1013. package/dist/src/core/patch-parse.js +0 -347
  1014. package/dist/src/core/patch-policy-content.d.ts +0 -40
  1015. package/dist/src/core/patch-policy-content.js +0 -216
  1016. package/dist/src/core/patch-policy.d.ts +0 -80
  1017. package/dist/src/core/patch-policy.js +0 -394
  1018. package/dist/src/core/patch-registration-refs.d.ts +0 -41
  1019. package/dist/src/core/patch-registration-refs.js +0 -107
  1020. package/dist/src/core/patch-retired.d.ts +0 -57
  1021. package/dist/src/core/patch-retired.js +0 -92
  1022. package/dist/src/core/patch-source-metadata.d.ts +0 -6
  1023. package/dist/src/core/patch-source-metadata.js +0 -12
  1024. package/dist/src/core/patch-subset.d.ts +0 -18
  1025. package/dist/src/core/patch-subset.js +0 -67
  1026. package/dist/src/core/patch-transform.d.ts +0 -61
  1027. package/dist/src/core/patch-transform.js +0 -198
  1028. package/dist/src/core/preflight-wait.d.ts +0 -22
  1029. package/dist/src/core/preflight-wait.js +0 -62
  1030. package/dist/src/core/process-cpu-time.d.ts +0 -12
  1031. package/dist/src/core/process-cpu-time.js +0 -52
  1032. package/dist/src/core/process-owner.d.ts +0 -9
  1033. package/dist/src/core/process-owner.js +0 -43
  1034. package/dist/src/core/rebase-dry-run.d.ts +0 -48
  1035. package/dist/src/core/rebase-dry-run.js +0 -105
  1036. package/dist/src/core/rebase-from-version.d.ts +0 -46
  1037. package/dist/src/core/rebase-from-version.js +0 -71
  1038. package/dist/src/core/rebase-session.d.ts +0 -100
  1039. package/dist/src/core/rebase-session.js +0 -174
  1040. package/dist/src/core/register-browser-content.d.ts +0 -11
  1041. package/dist/src/core/register-browser-content.js +0 -52
  1042. package/dist/src/core/register-browser-test.d.ts +0 -18
  1043. package/dist/src/core/register-browser-test.js +0 -66
  1044. package/dist/src/core/register-module.d.ts +0 -11
  1045. package/dist/src/core/register-module.js +0 -56
  1046. package/dist/src/core/register-result.d.ts +0 -30
  1047. package/dist/src/core/register-result.js +0 -8
  1048. package/dist/src/core/register-scaffold.d.ts +0 -55
  1049. package/dist/src/core/register-scaffold.js +0 -146
  1050. package/dist/src/core/register-shared-css.d.ts +0 -36
  1051. package/dist/src/core/register-shared-css.js +0 -112
  1052. package/dist/src/core/register-xpcshell-test.d.ts +0 -50
  1053. package/dist/src/core/register-xpcshell-test.js +0 -143
  1054. package/dist/src/core/run-log-redact.d.ts +0 -38
  1055. package/dist/src/core/run-log-redact.js +0 -69
  1056. package/dist/src/core/run-log.d.ts +0 -97
  1057. package/dist/src/core/run-log.js +0 -334
  1058. package/dist/src/core/run-profile.d.ts +0 -57
  1059. package/dist/src/core/run-profile.js +0 -137
  1060. package/dist/src/core/shared-ftl.d.ts +0 -28
  1061. package/dist/src/core/shared-ftl.js +0 -49
  1062. package/dist/src/core/signal-critical.d.ts +0 -38
  1063. package/dist/src/core/signal-critical.js +0 -62
  1064. package/dist/src/core/smoke-patterns.d.ts +0 -81
  1065. package/dist/src/core/smoke-patterns.js +0 -176
  1066. package/dist/src/core/state-file.d.ts +0 -60
  1067. package/dist/src/core/state-file.js +0 -71
  1068. package/dist/src/core/status-binary.d.ts +0 -62
  1069. package/dist/src/core/status-binary.js +0 -133
  1070. package/dist/src/core/status-classify.d.ts +0 -96
  1071. package/dist/src/core/status-classify.js +0 -244
  1072. package/dist/src/core/test-changed-prefs.d.ts +0 -30
  1073. package/dist/src/core/test-changed-prefs.js +0 -93
  1074. package/dist/src/core/test-harness-crash.d.ts +0 -251
  1075. package/dist/src/core/test-harness-crash.js +0 -780
  1076. package/dist/src/core/test-harness-infra.d.ts +0 -32
  1077. package/dist/src/core/test-harness-infra.js +0 -69
  1078. package/dist/src/core/test-harness-output.d.ts +0 -45
  1079. package/dist/src/core/test-harness-output.js +0 -119
  1080. package/dist/src/core/test-harness-signature.d.ts +0 -57
  1081. package/dist/src/core/test-harness-signature.js +0 -35
  1082. package/dist/src/core/test-harness-verdict-notes.d.ts +0 -54
  1083. package/dist/src/core/test-harness-verdict-notes.js +0 -48
  1084. package/dist/src/core/test-host-state.d.ts +0 -14
  1085. package/dist/src/core/test-host-state.js +0 -80
  1086. package/dist/src/core/test-path-scope.d.ts +0 -59
  1087. package/dist/src/core/test-path-scope.js +0 -147
  1088. package/dist/src/core/test-profile-files.d.ts +0 -17
  1089. package/dist/src/core/test-profile-files.js +0 -75
  1090. package/dist/src/core/test-raw-log.d.ts +0 -66
  1091. package/dist/src/core/test-raw-log.js +0 -122
  1092. package/dist/src/core/test-run-completeness.d.ts +0 -97
  1093. package/dist/src/core/test-run-completeness.js +0 -191
  1094. package/dist/src/core/test-stale-check.d.ts +0 -213
  1095. package/dist/src/core/test-stale-check.js +0 -396
  1096. package/dist/src/core/test-stale-exempt.d.ts +0 -40
  1097. package/dist/src/core/test-stale-exempt.js +0 -70
  1098. package/dist/src/core/test-stale-symlink.d.ts +0 -12
  1099. package/dist/src/core/test-stale-symlink.js +0 -39
  1100. package/dist/src/core/test-stall-triage.d.ts +0 -51
  1101. package/dist/src/core/test-stall-triage.js +0 -142
  1102. package/dist/src/core/test-xpcshell-retry.d.ts +0 -35
  1103. package/dist/src/core/test-xpcshell-retry.js +0 -31
  1104. package/dist/src/core/token-category.d.ts +0 -54
  1105. package/dist/src/core/token-category.js +0 -299
  1106. package/dist/src/core/token-coverage.d.ts +0 -12
  1107. package/dist/src/core/token-coverage.js +0 -96
  1108. package/dist/src/core/token-dark-mode.d.ts +0 -64
  1109. package/dist/src/core/token-dark-mode.js +0 -186
  1110. package/dist/src/core/token-docs.d.ts +0 -34
  1111. package/dist/src/core/token-docs.js +0 -102
  1112. package/dist/src/core/token-inventory.d.ts +0 -56
  1113. package/dist/src/core/token-inventory.js +0 -114
  1114. package/dist/src/core/token-lint.d.ts +0 -53
  1115. package/dist/src/core/token-lint.js +0 -131
  1116. package/dist/src/core/token-manager.d.ts +0 -87
  1117. package/dist/src/core/token-manager.js +0 -407
  1118. package/dist/src/core/token-scaffold.d.ts +0 -36
  1119. package/dist/src/core/token-scaffold.js +0 -73
  1120. package/dist/src/core/token-sibling-sheets.d.ts +0 -46
  1121. package/dist/src/core/token-sibling-sheets.js +0 -119
  1122. package/dist/src/core/token-variant.d.ts +0 -90
  1123. package/dist/src/core/token-variant.js +0 -327
  1124. package/dist/src/core/toolchain-preflight.d.ts +0 -90
  1125. package/dist/src/core/toolchain-preflight.js +0 -251
  1126. package/dist/src/core/tree-cow.d.ts +0 -16
  1127. package/dist/src/core/tree-cow.js +0 -71
  1128. package/dist/src/core/tree-guard.d.ts +0 -35
  1129. package/dist/src/core/tree-guard.js +0 -194
  1130. package/dist/src/core/tree-store.d.ts +0 -143
  1131. package/dist/src/core/tree-store.js +0 -478
  1132. package/dist/src/core/typecheck-shim.d.ts +0 -90
  1133. package/dist/src/core/typecheck-shim.js +0 -507
  1134. package/dist/src/core/typecheck.d.ts +0 -75
  1135. package/dist/src/core/typecheck.js +0 -433
  1136. package/dist/src/core/wire-destroy.d.ts +0 -25
  1137. package/dist/src/core/wire-destroy.js +0 -126
  1138. package/dist/src/core/wire-dom-fragment.d.ts +0 -44
  1139. package/dist/src/core/wire-dom-fragment.js +0 -139
  1140. package/dist/src/core/wire-init.d.ts +0 -28
  1141. package/dist/src/core/wire-init.js +0 -219
  1142. package/dist/src/core/wire-subscript.d.ts +0 -23
  1143. package/dist/src/core/wire-subscript.js +0 -145
  1144. package/dist/src/core/wire-utils.d.ts +0 -149
  1145. package/dist/src/core/wire-utils.js +0 -338
  1146. package/dist/src/core/xpcshell-appdir.d.ts +0 -157
  1147. package/dist/src/core/xpcshell-appdir.js +0 -299
  1148. package/dist/src/core/xpcshell-profile-dir.d.ts +0 -12
  1149. package/dist/src/core/xpcshell-profile-dir.js +0 -45
  1150. package/dist/src/errors/base.d.ts +0 -217
  1151. package/dist/src/errors/base.js +0 -279
  1152. package/dist/src/errors/build.d.ts +0 -92
  1153. package/dist/src/errors/build.js +0 -166
  1154. package/dist/src/errors/codes.d.ts +0 -74
  1155. package/dist/src/errors/codes.js +0 -74
  1156. package/dist/src/errors/config.d.ts +0 -17
  1157. package/dist/src/errors/config.js +0 -39
  1158. package/dist/src/errors/download.d.ts +0 -66
  1159. package/dist/src/errors/download.js +0 -160
  1160. package/dist/src/errors/furnace.d.ts +0 -20
  1161. package/dist/src/errors/furnace.js +0 -28
  1162. package/dist/src/errors/git.d.ts +0 -65
  1163. package/dist/src/errors/git.js +0 -140
  1164. package/dist/src/errors/patch.d.ts +0 -27
  1165. package/dist/src/errors/patch.js +0 -52
  1166. package/dist/src/errors/rebase.d.ts +0 -42
  1167. package/dist/src/errors/rebase.js +0 -71
  1168. package/dist/src/errors/run.d.ts +0 -16
  1169. package/dist/src/errors/run.js +0 -22
  1170. package/dist/src/index.d.ts +0 -42
  1171. package/dist/src/index.js +0 -32
  1172. package/dist/src/types/cli.d.ts +0 -14
  1173. package/dist/src/types/commands/index.d.ts +0 -6
  1174. package/dist/src/types/commands/index.js +0 -5
  1175. package/dist/src/types/commands/options.d.ts +0 -1367
  1176. package/dist/src/types/commands/options.js +0 -5
  1177. package/dist/src/types/commands/patches.d.ts +0 -352
  1178. package/dist/src/types/commands/patches.js +0 -5
  1179. package/dist/src/types/commands/project.d.ts +0 -51
  1180. package/dist/src/types/commands/project.js +0 -5
  1181. package/dist/src/types/config.d.ts +0 -703
  1182. package/dist/src/types/config.js +0 -15
  1183. package/dist/src/types/furnace.d.ts +0 -415
  1184. package/dist/src/types/furnace.js +0 -26
  1185. package/dist/src/types/index.d.ts +0 -5
  1186. package/dist/src/types/index.js +0 -5
  1187. package/dist/src/types/json.d.ts +0 -22
  1188. package/dist/src/types/json.js +0 -11
  1189. package/dist/src/types/typecheck.d.ts +0 -51
  1190. package/dist/src/types/typecheck.js +0 -14
  1191. package/dist/src/utils/assert.d.ts +0 -34
  1192. package/dist/src/utils/assert.js +0 -61
  1193. package/dist/src/utils/build-info.d.ts +0 -30
  1194. package/dist/src/utils/build-info.js +0 -99
  1195. package/dist/src/utils/child-env.d.ts +0 -28
  1196. package/dist/src/utils/child-env.js +0 -27
  1197. package/dist/src/utils/concurrency.d.ts +0 -8
  1198. package/dist/src/utils/concurrency.js +0 -32
  1199. package/dist/src/utils/elapsed.d.ts +0 -2
  1200. package/dist/src/utils/elapsed.js +0 -23
  1201. package/dist/src/utils/errors.d.ts +0 -39
  1202. package/dist/src/utils/errors.js +0 -67
  1203. package/dist/src/utils/fs.d.ts +0 -113
  1204. package/dist/src/utils/fs.js +0 -337
  1205. package/dist/src/utils/hash.d.ts +0 -12
  1206. package/dist/src/utils/hash.js +0 -16
  1207. package/dist/src/utils/line-dispatch.d.ts +0 -15
  1208. package/dist/src/utils/line-dispatch.js +0 -48
  1209. package/dist/src/utils/logger.d.ts +0 -109
  1210. package/dist/src/utils/logger.js +0 -270
  1211. package/dist/src/utils/machine-output.d.ts +0 -12
  1212. package/dist/src/utils/machine-output.js +0 -33
  1213. package/dist/src/utils/options.d.ts +0 -155
  1214. package/dist/src/utils/options.js +0 -312
  1215. package/dist/src/utils/package-root.d.ts +0 -21
  1216. package/dist/src/utils/package-root.js +0 -70
  1217. package/dist/src/utils/parse.d.ts +0 -117
  1218. package/dist/src/utils/parse.js +0 -214
  1219. package/dist/src/utils/path-glob.d.ts +0 -15
  1220. package/dist/src/utils/path-glob.js +0 -47
  1221. package/dist/src/utils/paths.d.ts +0 -31
  1222. package/dist/src/utils/paths.js +0 -80
  1223. package/dist/src/utils/platform.d.ts +0 -9
  1224. package/dist/src/utils/platform.js +0 -14
  1225. package/dist/src/utils/process-group.d.ts +0 -42
  1226. package/dist/src/utils/process-group.js +0 -190
  1227. package/dist/src/utils/process-input.d.ts +0 -27
  1228. package/dist/src/utils/process-input.js +0 -46
  1229. package/dist/src/utils/process.d.ts +0 -293
  1230. package/dist/src/utils/process.js +0 -593
  1231. package/dist/src/utils/ps-duration.d.ts +0 -31
  1232. package/dist/src/utils/ps-duration.js +0 -70
  1233. package/dist/src/utils/regex.d.ts +0 -39
  1234. package/dist/src/utils/regex.js +0 -109
  1235. package/dist/src/utils/sleep.d.ts +0 -25
  1236. package/dist/src/utils/sleep.js +0 -30
  1237. package/dist/src/utils/stdio-drain.d.ts +0 -28
  1238. package/dist/src/utils/stdio-drain.js +0 -54
  1239. package/dist/src/utils/validation.d.ts +0 -182
  1240. package/dist/src/utils/validation.js +0 -394
  1241. package/docs/lifecycle-invariants.md +0 -523
  1242. package/docs/run-logs.md +0 -122
  1243. package/docs/verification-trees.md +0 -49
  1244. /package/dist/src/{types/cli.js → cli/context.js} +0 -0
package/docs/testing.md CHANGED
@@ -1,729 +1,118 @@
1
1
  <!-- SPDX-License-Identifier: EUPL-1.2 -->
2
2
 
3
- # Running tests
4
-
5
- `fireforge test` wraps `mach test`. Most of what follows exists because
6
- mach's own defaults are wrong for a fork that has to know exactly what ran.
7
-
8
- ## Scope is exact
9
-
10
- `fireforge test <directory>` runs exactly that directory. FireForge
11
- enumerates the directory's test files and passes the explicit file list to
12
- mach in one invocation, so mach's prefix-based path matching cannot quietly
13
- sweep in sibling directories that share the name prefix. Excluded siblings
14
- are echoed with their test-file counts.
15
-
16
- Multiple path arguments run as sequential shards by default: one browser
17
- instance per argument, with a directory argument keeping its files together.
18
- FireForge announces this with a notice, since isolated instances do not
19
- exercise cross-argument state. `--no-shard` restores one combined
20
- invocation.
21
-
22
- ## Several runs under one lock hold
23
-
24
- Every `fireforge test` holds the engine-session lock for its whole run. Three
25
- request shapes run more than one mach invocation inside that one hold, so a
26
- peer cannot take the lock, build, or replace the packaging record between
27
- them:
28
-
29
- - **Mixed harnesses.** xpcshell and browser/mochitest paths in one request
30
- run as two consecutive mach invocations, the xpcshell half first. With
31
- `--build`, one pre-test build packages both halves (its coverage claim is
32
- the union), and the second half runs build-less against it.
33
- - **`--repeat <n>`** runs the same selection n times. A `--build` builds
34
- once, and `--doctor` probes once. Every run is reported, so a flaky suite's
35
- rate is visible from one invocation.
36
- - **`--negative-control <diff>`**, below.
37
-
38
- Each sub-run prints the verdict it would have printed alone as a
39
- `FIREFORGE-RUN:` line (its own status, reason and counts, plus
40
- `run=<i>/<n>` and, for a mixed request, `harness=xpcshell|mochitest`). The
41
- invocation still ends with exactly one `FIREFORGE-VERDICT:` line:
42
- `PASS runs=<n>/<n>`, or `FAIL reason=<most structural failing run>
43
- [note=…] runs=<passed>/<planned>`. Runs continue after a red or a crash; a
44
- preflight refusal or an inconclusive run stops the invocation, since the
45
- runs after it would not be comparable. `--mach-arg` and every other option
46
- apply to each sub-run. `--repeat` and `--negative-control` need explicit
47
- paths and cannot be combined with `--build-only`, `--canary` or `--auto`.
3
+ # Testing
48
4
 
49
- ## Negative controls
5
+ `fireforge test` runs Firefox's own test harnesses (mochitest, xpcshell, reftest) through `mach` in the project's workspace and judges the result. It is the same command in patch mode and source mode.
6
+
7
+ ```sh
8
+ npx fireforge test browser/base/content/test/sidebar/browser_focus.js
9
+ npx fireforge test browser/base/content/test/sidebar/
10
+ npx fireforge test browser/base/content/test/sidebar/browser.toml
11
+ npx fireforge test 'browser/base/content/test/sidebar/browser_*.js'
12
+ ```
13
+
14
+ ## What to run
15
+
16
+ Paths are engine-relative test files, directories, test manifests or globs; at least one is required. FireForge resolves them through the manifests to the exact test files, each with the harness that runs it, and hands every file to `mach` by name, so a directory never sweeps in a sibling that shares its prefix.
17
+
18
+ - A named file that is not a test is refused before anything runs. When a manifest lists it as a support file, the refusal names the tests that read it.
19
+ - A path that does not exist, or that selects no test, is refused.
20
+ - A reftest list (`reftest*.list`, `crashtests*.list`) runs as one `mach test` invocation.
21
+
22
+ ## How tests are dispatched
23
+
24
+ | Option | Mochitest files run |
25
+ | -------------- | ------------------------------------------------------- |
26
+ | `--shard` | each in a browser of its own; this is the default |
27
+ | `--no-shard` | all in one browser |
28
+ | `--standalone` | in one invocation, restarting the browser between files |
50
29
 
51
- A negative control proves a test can fail: neuter the code under test, run
52
- the test, and expect red. Done by hand on a shared engine it is dangerous.
53
- The objdir's chrome and widget files are symlinks into `engine/`, so the
54
- browser reads the sources when it loads them, after the build step. A
55
- mutation is therefore live for every build and suite that touches the file
56
- while it is in place: a peer's `test --build` can build and test the
57
- neuter, a `--build` run re-deploys `components/` over an engine-side
58
- control, and a neuter restored at `Build complete` (or after the first
59
- `TEST_START`) is already gone for the later shards of the same run.
60
-
61
- `fireforge test --negative-control <diff> <paths…>` makes the control part
62
- of the run:
63
-
64
- 1. The diff is read (resolved against the project root), parsed, and every
65
- hunk is checked against the current file before anything else, so a
66
- stale control is refused (`note=negative-control`) before the build. A
67
- `components/` target is checked after the build instead, because the
68
- build redeploys it.
69
- 2. With `--build`, the pre-test build (including the Furnace deploy)
70
- runs first and packages the clean sources.
71
- 3. After every gate has passed and right before the harness spawns, the
72
- control is applied. It stays in place until the run, every shard of it,
73
- has finished.
74
- 4. The files are restored byte-exact. Then the next repetition (if any)
75
- re-applies it, and only after the last restore is the lock released.
76
-
77
- The diff is `git diff` output (a `diff --git` header per file). Paths may be
78
- project-relative (`engine/…`, `components/…`) or engine-relative, so both
79
- `git diff` at the project root and `git -C engine diff` work. A
80
- `components/custom/<name>/<file>.mjs|.css` or
81
- `components/overrides/<name>/<file>` path is applied to the engine copy
82
- Furnace deployed it to, since that is what the run reads; the component
83
- source itself is never touched. Only modifications of existing text files
84
- are accepted: a created, deleted, renamed or binary file, or a symlinked
85
- target, is refused. Hunks must match exactly; the only tolerance is a line
86
- offset, as in `git apply`, never fuzz. A file named by more than one
87
- section (a generator that writes one section per edit) is applied as one
88
- section with every hunk in file order; sections whose hunks overlap are
89
- refused, with the advice to write one section for the file.
90
-
91
- The verdict says how the control came out with `control=`:
92
-
93
- - `caught`: every repetition went red with `reason=test-failures`, which is
94
- what a control is for. The invocation exits 0.
95
- - `missed`: a repetition stayed green with the mutation in place, so the
96
- selected tests do not detect it. Exit 5, like a red suite.
97
- - `inconclusive`: a run crashed, found no tests, was refused, or did not
98
- run. The exit code is that failure's.
99
-
100
- The status word keeps describing what the harness saw, so a caught control
101
- reads `FIREFORGE-VERDICT: FAIL reason=test-failures … control=caught` and
102
- exits 0. Key a control's success on `control=caught`, not on `PASS`.
103
-
104
- A one-run control keeps its own counts on the verdict line; a repeated or
105
- mixed one aggregates them as above. The mutation targets what the objdir
106
- symlinks. A file the build preprocesses or copies (rather than links) is
107
- read from the objdir, not from `engine/`, so a control on it stays green
108
- and reports `missed`: that result is the signal to target the file the
109
- browser actually loads.
110
-
111
- A control on compiled source (C/C++, Rust, IDL, WebIDL, IPDL or YAML that no
112
- install manifest ships) can only reach the binary through a build. A
113
- header (`.h`, `.hh`, `.hpp`, `.ipdlh`) counts as compiled even when an
114
- `EXPORTS` install manifest copies it into `dist/include`: that copy only feeds
115
- other compiles. Without
116
- `--build` it is refused before the lock. With `--build` it is applied before
117
- the pre-test build, so the binary under test carries it, stays applied for
118
- every `--repeat` run, and is restored with a fresh mtime so the next build
119
- recompiles the original. That pre-test build is a full
120
- `mach build`, with a notice naming the control's files: the default
121
- `mach build faster` compiles nothing, so the control would still test
122
- the previous binary and report `missed`. The verdict adds
123
- `control-build=compiled`.
124
-
125
- FireForge also rebuilds after such a control. Restoring the
126
- source byte-exact does not unbuild the binary, which would keep the mutation
127
- until the next full build, so every later run would test the control. After the last
128
- run's restore, still under the same lock hold, it runs one more full
129
- `mach build` and records a fresh baseline. The verdict adds
130
- `control-restore-build=done` (or `=failed`). The baseline the control's build
131
- writes carries a `controlBuild` stamp (diff file, targets, time applied) that
132
- only a full build clears: if the run is killed before the restore build, or
133
- that build fails, the next `fireforge test` refuses with `note=control-built`
134
- until `fireforge build` succeeds, and a `test --build` escalates to a full
135
- build. `fireforge build --ui` compiles nothing and keeps the stamp. A
136
- build-less control whose packaging is not current is refused before the
137
- lock with the advice to add `--build`, instead of ending `inconclusive`
138
- after a full queue.
139
-
140
- Besides `git diff` output, a control may be a plain unified diff
141
- (`diff -u`, no `diff --git` lines; the path comes from `---`/`+++`) or a
142
- `git diff --no-index <engine file> <edited copy>`: when the new side names a
143
- copy outside `engine/` and `components/`, the control targets the old side.
144
-
145
- ### The restore safety model
146
-
147
- - **Only under the lock.** Apply, run and restore all happen inside the
148
- engine-session lock hold of the `fireforge test` invocation, and the
149
- control is applied after the pre-test build. No peer build or test
150
- observes it, and the build cannot overwrite it or trip `stale-build`
151
- over it.
152
- - **Journal first.** Before the first mutated byte is written, the
153
- original bytes of every target go to `.fireforge/negative-control/`
154
- with a journal of each file's original and mutated SHA-256, mode and
155
- timestamps. Every write (originals, journal, mutation, restore) is an
156
- atomic temp-file-and-rename. A failure while writing the mutation puts
157
- back whatever was written before the run can start.
158
- - **Byte-exact restore, verified.** Restore writes the original bytes back,
159
- re-applies the original mode and timestamps (so make-based tooling sees
160
- no change either), and reads the file back to prove the bytes match. The
161
- stale-build gate hashes content, so a repeated control's next run is not
162
- refused.
163
- - **Never clobber.** A file is only restored while it still holds exactly
164
- the bytes the control wrote. A file someone edited while the control ran
165
- (an agent working outside the lock, say) keeps that edit. Its original
166
- stays in the journal directory, and the run ends
167
- `FAIL reason=inconclusive note=negative-control-restore` with the paths
168
- named. Reconcile by hand, then delete the directory.
169
- - **Every exit path.** Pass, red, crash and a refusal after the apply all
170
- restore in the run's own control flow. SIGINT and SIGTERM restore in the
171
- signal pipeline after the harness has shut down and before the held
172
- locks are released. A restore already in flight is awaited, not
173
- repeated.
174
- - **The binary too.** A compiled control's binary is rebuilt
175
- after the restore, under the same hold, and a binary still carrying a
176
- control is refused (`note=control-built`) rather than tested. See above.
177
- - **Even after SIGKILL.** A SIGKILLed FireForge cannot restore, but the
178
- journal survives it. Every later `fireforge test` checks for it first,
179
- under the lock, before any gate or build: a file still holding the
180
- control's bytes is restored, with a notice; any other state refuses with
181
- `note=negative-control-pending` rather than guess.
182
-
183
- There is no `--mutate <file> <old> <new>` shorthand. Commander options take
184
- one value, so a three-value option would have to swallow the positional test
185
- paths. A one-hunk diff expresses
186
- the same edit and can be reviewed before it runs.
187
-
188
- ## Pathless runs must choose a mode
189
-
190
- - `--auto` forwards mach's own auto-selection.
191
- - `--doctor` runs the Marionette preflight only.
192
- - `--canary [path]` runs one short browser-chrome canary
193
- (`test.canaryPath` and `test.canaryTimeoutSeconds` in `fireforge.json`
194
- provide the defaults).
30
+ xpcshell runs every file in a process of its own, so all xpcshell files go to one invocation. A run that mixes harnesses runs one invocation per harness.
31
+
32
+ Other options:
33
+
34
+ - `--repeat <n>` runs everything that many times; every repetition must pass.
35
+ - `--shuffle <seed>` permutes the mochitest files with that seed; the verdict line repeats the seed.
36
+ - `--headed` shows the browser and holds the host display lock ([workspaces.md](workspaces.md#host-locks)). The default is headless.
37
+ - `--mach-arg <arg>` passes `--setpref=<name>=<value>` (a value that names no path, outside `marionette.*`), `--timeout=<seconds>` or `--app-path=<absolute path>` to mach. FireForge owns the log, the profile, the control port, the test list and the run shape.
38
+ - `--env NAME=VALUE` sets a variable in the harness environment. `FIREFORGE_*` names are reserved.
39
+ - `--coverage <dir>` writes the harnesses' per-test JavaScript coverage under that directory (mochitest and xpcshell).
40
+ - `--workspace <name>` and `--wait-lock <seconds>` as for every workspace command.
41
+
42
+ A rebranded build's application name is not `firefox`, so the `firefox-appdir` key of an xpcshell manifest does not apply to it. When a manifest has only that key, FireForge passes `--app-path` itself so `resource:///modules/...` imports resolve. Each xpcshell invocation also gets a profile of its own.
195
43
 
196
44
  ## Build freshness
197
45
 
198
- When packageable engine files changed since the last successful FireForge
199
- build, `test` fails before launching stale artifacts. Use `--build` to
200
- refresh, or `--allow-stale-build` only for intentional out-of-band rebuilds.
201
- The refusal prints the one-line repackaging command for the requested paths
202
- (`fireforge test --build-only <paths>`), so a build-less sitting can
203
- repackage without dispatching anything.
204
-
205
- Two kinds of edit do not count as stale, because the packaged runtime
206
- already serves them. FireForge reads the objdir's install manifests
207
- (`obj-*/_build_manifests/install/*`, `obj-*/faster/install_*`) to decide:
208
-
209
- - a file whose every objdir copy is a symlink resolving to the edited source
210
- (the usual dev-build shape on macOS and Linux for chrome scripts and test
211
- files);
212
- - a test file the build does not package: one installed only by `mach test`
213
- itself at dispatch (`_test_files`), or a test-tree file no manifest installs.
214
-
215
- A copy, a preprocessed file, a symlink that does not resolve to the source,
216
- or an unreadable objdir keeps the edit stale. Exempted edits are named on
217
- the run (and in the refusal, when other edits are stale). On a
218
- `--perf-samples` run the refusal also says which stale files are staging
219
- inputs of the sampled test and which lie elsewhere, so a sample whose fixture
220
- is unaffected can proceed knowingly under `--allow-stale-build`.
221
-
222
- ### Compiled sources newer than the binary
223
-
224
- The packaging check above judges packaged files only. Every run
225
- also compares the compiled sources changed since the last build (C/C++,
226
- Rust, IDL, WebIDL, IPDL, and YAML such as `StaticPrefList.yaml`) with the
227
- time the binary under test was last linked: the newer of the launchable
228
- binary and the `libxul` beside it. Sources under `test`, `tests`, `gtest`,
229
- `testing` or `taskcluster` directories never reach that binary and are not
230
- counted. A newer source means the run would test the binary from before the
231
- edit, where a red reads as a failed fix. Without `--build` the run refuses
232
- with `note=stale-compiled`, naming the files and the link time, and suggests
233
- `fireforge build` or `test --build`; `--allow-stale-build` turns the refusal
234
- into a warning. With `--build` the pre-test build escalates to a full
235
- `mach build` with a notice, since `mach build faster` compiles nothing.
236
-
237
- Every run that reaches dispatch also stamps the binary's `BuildID` (from the
238
- `application.ini` beside it, the `moz:buildID` the browser reports) on its
239
- verdict line as `build-id=`, so a result can be matched to the build it ran
240
- against.
241
-
242
- ### Packaging coverage
243
-
244
- `--build-only` packages mixed-harness paths once, and then each harness half
245
- can run without `--build`. A plain mixed `test --build` does both in one
246
- invocation (see [Several runs under one lock hold](#several-runs-under-one-lock-hold)). Coverage is kept per staged path. Each path of a
247
- scoped build records its own staging inputs: its manifest directory (the
248
- nearest directory at or above it with a test manifest) plus whatever a
249
- manifest there names outside it (`support-files`, `head`, `!/` shared
250
- fixtures), with their content at that build. A later scoped build keeps every
251
- earlier path whose own inputs and `engine/mozconfig` are unchanged, whatever
252
- moved elsewhere in the engine, including a peer's edits and an engine HEAD
253
- move that touches none of them. A path whose inputs changed is dropped and
254
- named, with the inputs that changed. Changed inputs this build restages are
255
- allowed, and a scoped build of one file restages that file's test manifest
256
- too: a manifest that gained an entry for the new file does not drop the
257
- claims of its sibling files. A build-less run's packaging gates also run
258
- before the lock is requested, so a `coverage-replaced` or `stale-build`
259
- refusal arrives before the run queues.
260
-
261
- A scoped build after a full build keeps the claim full while nothing outside
262
- its scope moved. Otherwise it carries the full build's anchor forward, and a
263
- later build-less run over any path stays covered while that path's own
264
- staging inputs are unchanged since the full build. A refusal names the inputs
265
- that did change, and who wrote the coverage record: its
266
- invocation, when, and the writing process's pid (marked `still running`
267
- while it is), `FIREFORGE_SESSION_ID` and invocation id, the id its history
268
- records carry. `status --test-coverage` shows the pid and session too. A
269
- peer whose run a scoped build or a test-file edit refused can tell whose
270
- build to wait for.
271
-
272
- Retention is the default, so `--extend-coverage` only turns a drop into a
273
- refusal before the build. A baseline without complete staging-input
274
- fingerprints cannot prove anything unchanged, so its claims are dropped once.
275
-
276
- A scoped build records its request paths normalized (no trailing `/`, no
277
- `./`), as the baseline validator requires. An invalid baseline's refusal
278
- names the first failing field and its value, and when that field is part of
279
- the coverage claim it offers rerunning with `--build` as well as
280
- `fireforge build`. Dirty paths are fingerprinted unquoted, so a non-ASCII
281
- file name does not make the baseline invalid.
282
-
283
- ### Furnace components in a pre-test build
284
-
285
- `test --build` and `--build-only` run `furnace apply` first, like
286
- `fireforge build`, and that apply deploys every component whose
287
- `components/` source changed since its last deploy, another session's
288
- undeployed edits included. The run names those components in a notice and
289
- on the verdict line (`furnace-applied=<names>`). `--no-furnace-apply`
290
- packages `engine/` as it stands, for example for a before-capture, names the
291
- components with undeployed edits it left out, and stamps
292
- `furnace-apply=skipped`.
293
-
294
- On a shared engine a peer's default `test --build` deploys every session's
295
- undeployed component edits. `--furnace-apply reached` (or
296
- `test.furnaceApply: "reached"`) deploys only the components a requested test
297
- reaches: the test path, the test file, a `head*.js` beside it, or any test
298
- file under a requested directory names the component. The rest are named in
299
- a notice and stamped `furnace-skipped=<names>`. A path-less build reaches
300
- every component. `--furnace-apply none` is `--no-furnace-apply`; `all` is the
301
- default.
302
-
303
- When `patchLint.checkJs` and `patchLint.checkJsTestFiles` are enabled, named
304
- pre-test builds check the selected test scripts before deployment or mach.
305
- This includes new scripts not yet owned by an exported patch. The check runs
306
- before the engine lock is requested, so a type error refuses at once instead
307
- of after a place in the lock queue. An unowned `head*.js` in a named test's
308
- directory joins the check when that test loads it with `loadSubScript` or a
309
- manifest beside it lists it in `support-files`, so a suite moved onto a new
310
- support head can be proven before the head is exported. A notice names each
311
- such head and the `re-export --scan --scan-file` command that adopts it.
312
-
313
- `--restart-between-tests` forwards mochitest's flag of the same name, which
314
- restarts the browser between test files (the run shape a manifest's
315
- `standalone` key asks for). It is refused for an xpcshell or generic
316
- dispatch, like `--shuffle`.
317
-
318
- ### Shared browsers, ports and host state
319
-
320
- Browser ownership is checked before a pre-test deployment and before full
321
- or UI builds. A live or unreadable parent means busy, with its owner named
322
- when available. `--kill-stale-marionette` requires a dead parent plus harness
323
- arguments; a profile argument alone does not prove abandonment. A plain
324
- launchd-parented app remains unattributed and is not automatically killed.
325
-
326
- `test --wait-browser [seconds]` waits for this objdir's browser to exit;
327
- `test --wait-port [seconds]` waits for mochitest and Marionette listeners.
328
- `build --wait-browser [seconds]` queues a full or UI build behind the browser.
329
- Bare flags wait 60 seconds; explicit values accept 1–86400 seconds. They are
330
- independent of the FireForge lock budget, and they are spent BEFORE the
331
- engine session lock is requested, so a run waiting out a browser or a port
332
- does not hold every peer's build, test and re-export behind it. The run then
333
- joins the lock queue and re-checks once under the lock; the normal preflight
334
- refusal and its remedy apply if the resource is busy again (or still busy)
335
- there. A check that follows work the run already did under the lock waits
336
- the budgets out again instead: the browser and port checks after a
337
- `--build` run's pre-test build, and those of every later run of a `--repeat`
338
- or `--negative-control` sequence, so a peer's browser that started during
339
- the build does not throw the build away. With `--kill-stale-marionette` a reapable stale browser counts as
340
- clear before the lock, and the port waits stay under the lock, where the
341
- stale listener can be reaped.
342
-
343
- A path-shaped argument right after `--wait-lock`, `--wait-browser`,
344
- `--wait-port` or `--shuffle` (it has a `/`, a file extension, or is `.`) is
345
- a test path, not the flag's value, and the flag takes its default:
346
- `fireforge test --wait-lock browser_x.js` waits 60 seconds and runs
347
- `browser_x.js`. A bare word (`--wait-lock soon`) is still a usage error.
348
-
349
- `--wait-port` makes sibling checkouts take turns. `--auto-ports` (or
350
- `test.mochitestPorts: "auto"` in `fireforge.json`) lets them run browser
351
- suites at the same time. Desktop `mach mochitest` has no `--http-port` or
352
- `--ssl-port` option; those exist only for Android and iOS. Recent engines
353
- do something better instead: `testing/mochitest/runtests.py` bind-probes
354
- the HTTP server, ssltunnel and WebSocket ports before starting its servers,
355
- and the Marionette port before launching the browser, moves each busy one to
356
- a free port, and routes `mochi.test:8888` to wherever the server landed.
357
- In the default mode FireForge's own refusal fires before that fallback can.
358
- In auto mode the mochitest-server and Marionette gates step aside, with a notice
359
- naming the holder, when the holder is not this checkout's own (a sibling
360
- checkout's live suite or an unrelated listener). This checkout's own
361
- leftovers are refused exactly as in the default mode, and `--kill-stale-marionette`
362
- still applies to them. Auto mode takes effect only when the engine's
363
- `runtests.py` carries the fallback; otherwise a notice says so and the
364
- default refusal stays. It never applies to `--doctor`'s Marionette probe,
365
- which launches its own browser on that port. The default is `"fixed"`.
366
-
367
- Every suite samples host load and the highest CPU process before and after
368
- dispatch. Load at least 4 or a process at least 90% CPU produces a warning;
369
- verdicts include `host-load` and, when needed, `host-cpu-warning=true`.
370
- Perf runs include `power-source=ac|battery|unknown`; on macOS this comes from
371
- `pmset -g ps`, including charging on AC. Sample JSON carries a `fireforgeHost`
372
- object with start/end states and `powerSourceChanged`. A known power-source
373
- transition produces `FAIL reason=inconclusive power-changed=true`.
374
- Unknown power state is reported without inventing a transition.
375
-
376
- ### Profile overlays
377
-
378
- Use repeatable `--profile-file source=relative/destination` to add files to
379
- the test profile, for example:
46
+ A test must run against a build of the source it is testing. Before the harness starts, `test`:
380
47
 
381
- ```sh
382
- fireforge test --perf-samples sample.json --profile-file arm.css=chrome/userChrome.css browser/base/content/test/perf/browser_perf.js
383
- ```
48
+ 1. Deploys the project's Furnace components into the engine.
49
+ 2. Compares the engine with the last build. Compiled sources and build definitions are compared with the last full build; packaged front-end files with the last build of any kind (and do not count while the object directory serves them by symlink); a `jar.mn` counts only when the build backend has never seen it or it installs outside the default chrome root; tests and documentation never make a build stale.
50
+ 3. Refuses a stale build with `FAIL reason=preflight note=build-stale`, naming the build that catches up. `--build` runs that build first instead: `build --ui` when it is enough, a full build otherwise.
51
+
52
+ `run` and `package` apply the same rule.
384
53
 
385
- The source resolves from the project root. Destinations must stay relative
386
- with no traversal. FireForge stages copies and merges only those staged
387
- directories into the harness profile, preserving existing chrome files.
388
- A raw `--extra-profile-file` directory collision is classified as
389
- `reason=harness-arguments` and names this remedy rather than a rebuild.
390
-
391
- ### What a pre-test build costs
392
-
393
- `test --build` runs `mach build faster`. Two escalations are possible, and
394
- both are decided by comparing build inputs against the last successful build
395
- recorded in `.fireforge/last-build.json`, not against engine HEAD, since a
396
- fork's worktree is permanently dirty from imported patches and
397
- Furnace-applied components:
398
-
399
- - A changed `moz.build`, `moz.configure` or `Makefile.in` runs
400
- `mach configure` first.
401
- - A changed `jar.mn` escalates the whole build to a full `mach build`
402
- (minutes rather than seconds), but only when it is a new manifest
403
- (untracked in the engine repo, so no install manifest exists for it yet),
404
- or when its jar declaration carries a bracketed base-directory prefix,
405
- which redirects the install destination away from the default chrome root.
406
- An entry added to an existing `dist/bin` manifest does not escalate. Any
407
- probe failure (an unreadable manifest, no git) escalates, and the notice
408
- names the manifest and the reason.
409
-
410
- Each escalation is paid once per actual content change. A `jar.mn` that is
411
- dirty against HEAD but byte-identical to what the last full build consumed
412
- does not escalate again. `fireforge build --ui` is itself a
413
- `mach build faster` and never escalates. The `jar.mn` record it writes is
414
- carried forward from the previous full build, so a registration made between
415
- a `build --ui` and the next `test --build` still triggers the full build
416
- once.
417
-
418
- An entry added to an existing `dist/bin` `jar.mn` needs no full build: a
419
- jar-only registration of a new content file is installed by a plain
420
- `fireforge build --ui` (`faster/install_dist_bin_browser` names the
421
- destination, and the file reaches `dist/bin` and the `.app` bundle) and is
422
- then fetched over `chrome://` by a plain `fireforge test`. A new `jar.mn`
423
- file and a non-default install destination have no such evidence and
424
- escalate: relaxing a stale-artifact guard without evidence trades
425
- a slow build for a silently wrong test.
426
-
427
- ## Resilience
428
-
429
- - Recognized harness crashes retry up to `--harness-retries <n>` times
430
- (default 2).
431
- - `--kill-stale-marionette` terminates recognized stale browsers.
432
- - Every dispatch runs a census of orphaned harness helpers (`xpcshell`, the
433
- harness httpd, `pywebsocket`, `ssltunnel`, `moz-http2`) that survived an
434
- earlier run in this project's objdir. It runs at preflight, before this run
435
- spawns anything, so every hit is necessarily a survivor. A match has to be
436
- objdir-anchored, since `xpcshell` and `server.js` are far too generic to
437
- report on their own, and structural: the process's executable is a helper
438
- binary, or an interpreter whose script argument is a helper script. A
439
- process that merely mentions such a path (an editor, a `grep`, the shell
440
- FireForge runs under) is not a helper, and FireForge's own ancestors are
441
- never candidates. Survivors slow every later run without appearing in
442
- its output. The usual symptom is a three-second suite taking minutes of
443
- wall clock. The census is report-only by default; `--reap-orphans`, or
444
- `test.reapOrphans: "reap"` in `fireforge.json`, terminates what it finds
445
- (SIGTERM, a 500 ms grace, SIGKILL). It never refuses a run. Every reap is
446
- stamped on the verdict line as `orphans-reaped=<n>`. A different shape,
447
- reparented Python `multiprocessing` workers, is covered by the
448
- `Orphaned harness workers` doctor check.
449
- - Every dispatch owns its own kill path. The harness announces what it
450
- launches (`runtests.py | Server pid: <n>`, the websocket server, the SSL
451
- tunnel, the websocket/process bridge, and the browser as `Application
452
- pid`); FireForge tracks those pids and, after mach has exited for any
453
- reason (a clean finish, a harness crash before a retry, a no-output
454
- timeout, a forwarded SIGTERM, the parent-exit watchdog below), terminates
455
- any of them still alive. A tracked pid is re-read from `ps` first and must
456
- still be anchored to this objdir and still look like the thing that was
457
- launched, so a recycled pid is never signalled. One helper is never
458
- announced: mozserve starts `moz-http2` in a session of its own and logs no
459
- pid, so it is in neither the group nor the announcements. For it, FireForge
460
- snapshots the same-objdir helpers before the dispatch spawns and, after
461
- mach exits, reaps any helper-shaped process under this checkout's absolute
462
- objdir that is new since that snapshot and reparented to launchd. An
463
- earlier run's survivor is in the snapshot and stays the census's call. This
464
- reap runs inside the exec layer's close path, so the signal handler's
465
- bounded child-shutdown wait covers it. The count joins `orphans-reaped=`.
466
- - FireForge watches its own parent while a dispatch runs. A supervisor that
467
- SIGKILLs the process above `fireforge test` (an `npm run` step killed at
468
- its bound) signals nothing below it; FireForge notices the reparenting
469
- within about two seconds, writes `FIREFORGE-VERDICT: FAIL reason=killed
470
- signal=parent-exit`, reaps the harness process group and the tracked
471
- helpers, and ends the run without classifying or retrying.
472
- - `--perf-samples <path>` publishes a perf-sample artifact path to the
473
- harness (exported as `<BINARYNAME>_PERF_SAMPLE_JSON`).
474
-
475
- ## Process groups and supervisors
476
-
477
- `fireforge test` spawns mach as the leader of its **own** process group
478
- (`detached: true`), so that FireForge can signal the whole harness tree with
479
- one negative-pid kill and sweep the group after mach exits. Two consequences
480
- for anything that supervises `fireforge test`:
481
-
482
- - A supervisor that kills _its own_ process group (`kill -- -<npm pid>`) does
483
- not reach mach: mach is not in that group. Killing the `npm`/`node` chain
484
- above FireForge leaves the harness tree running.
485
- - SIGTERM to FireForge is the right signal. FireForge forwards it to the
486
- mach group, escalates to SIGKILL after a grace period, sweeps the group,
487
- reaps the tracked helpers, and writes `FAIL reason=killed signal=SIGTERM`.
488
- (That line, like the watchdog's `signal=parent-exit` line, is written
489
- before the teardown reap runs, so it cannot carry `orphans-reaped=`; the
490
- reap reports to stderr.)
491
- - A supervisor that has to SIGKILL FireForge should pass
492
- `--pgid-file <path>`. FireForge rewrites the file with the harness group id
493
- on every mach spawn (each retry attempt and shard) and removes it when the
494
- run ends under its own control. After a SIGKILL the file is still there:
495
- `kill -TERM -- -$(cat <path>)`, then `-KILL`, takes mach and every helper
496
- that shares its group. Two processes are outside it: the browser
497
- (mozprocess puts it in a group of its own) and `moz-http2` (mozserve
498
- starts it in its own session). A SIGTERM to the group gives `runtests.py`
499
- the chance to run its own cleanup, which normally takes the browser with
500
- it; nothing takes `moz-http2`, so after a SIGKILL of FireForge it stays
501
- until the next run's census, which is why that run should carry the reap
502
- posture. A browser that does survive is the Marionette preflight's and
503
- `--kill-stale-marionette`'s to remove.
504
-
505
- The mochitest helpers (httpd, websocket server, ssltunnel, process bridge)
506
- are plain children of `runtests.py` and share mach's group. The browser and
507
- `moz-http2` do not, which is why the teardown reap above exists alongside the
508
- group sweep.
509
-
510
- ## The verdict line
511
-
512
- Every test run ends with one machine-readable line:
54
+ ## The verdict
55
+
56
+ Every run ends stdout with one line, written on every way out, including Ctrl+C:
513
57
 
514
58
  ```
515
- FIREFORGE-VERDICT: PASS|FAIL reason=… [note=<class>] [started=<n>/<m> first-unstarted=<path> started-source=<src>] [shards=<p>/<t> [failed-shards=<labels>]] [runs=<p>/<n>] [control=<outcome>] [shuffle=<seed>] [orphans-reaped=<n>] [furnace-applied=<names>|furnace-apply=skipped] [furnace-skipped=<names>] [jobs=<n>] [lock=shared] [results=<path>] [log=<path>]
59
+ FIREFORGE-VERDICT: PASS checks=12 unexpected=0 log=/Users/me/.fireforge/workspaces/w1/test-runs/<id>/output.log
60
+ FIREFORGE-VERDICT: FAIL reason=crash started=2/8 first-unstarted=browser/base/content/test/sidebar/browser_keys.js log=...
516
61
  ```
517
62
 
518
- The start count reads every line the harness printed, not the last 2 MB of
519
- captured output, so a suite printing more than that (a large browser
520
- directory, or any run under `--full-output`) does not report files that ran
521
- and passed as never started. `started-source=` names the evidence. A sharded run also
522
- prints a `FIREFORGE-SHARD:` line per shard and names the shards that did not
523
- pass as `failed-shards=`; see [`machine-output.md`](machine-output.md).
524
-
525
- A run is never `PASS` when its summary reports unexpected results, when the
526
- harness printed "Application shut down (without crashing) in the middle of a
527
- test", or when a requested test file never produced a start (or skip)
528
- marker, even if mach exited 0. A browser that quits cleanly mid-suite does
529
- exactly that: the counts then cover only the files that ran. Such a run is
530
- `FAIL reason=test-failures`, and a short start count adds
531
- `started=<n>/<m> first-unstarted=<path>`: how many requested files started,
532
- and the first, in dispatch order, that never did. The file count is only
533
- taken when the output's start lines name the requested files; an xpcshell
534
- dispatch that proves execution with a result summary alone is not counted.
535
-
536
- Automation should branch on this line rather than on the raw process code,
537
- and has to treat a missing verdict as a failure. The closed set of `reason=`
538
- values and the stdout rules around the line are in
539
- [`machine-output.md`](machine-output.md). `log=` names the run's own complete
540
- output, specified in [`run-logs.md`](run-logs.md).
541
-
542
- `reason=preflight` covers every gate before the harness, so a refusal that
543
- can classify itself adds an additive `note=<class>` (`stale-browser`,
544
- `coverage-replaced`, and so on) naming which gate fired. The refusal's full
545
- text is written to stdout before the verdict line and into the run log, so a
546
- redirected run keeps the reason as well as the verdict. See
547
- [`run-logs.md`](run-logs.md).
548
-
549
- ## Seeded shuffle
550
-
551
- `fireforge test --shuffle` deterministically permutes isolated mochitest path
552
- arguments and prints the seed; `--shuffle=<seed>` replays that shard order for
553
- the same input selection. A directory remains one invocation. `--no-shard`
554
- disables this argument permutation. FireForge also forwards native mach
555
- `--shuffle` within each invocation, whose file order remains unseeded and is
556
- not replayed by the FireForge seed. `FIREFORGE_SHUFFLE_SEED=<seed>` is available
557
- to custom harness `head.js` code for in-file task ordering, and `shuffle=<seed>`
558
- is recorded on the verdict. The option is mochitest-only. A path-shaped
559
- argument right after a bare `--shuffle` is a test path, not a seed (see
560
- "Shared browsers, ports and host state" above).
561
-
562
- Exit code 14 (`INCONCLUSIVE`) is not red: it means `engine/` moved while the
563
- harness ran and the result was thrown away. Exit 15 (`LOCK_TIMEOUT`) means
564
- the run never started. See [`exit-codes.md`](exit-codes.md).
565
-
566
- ## Output verbosity
567
-
568
- mozbuild quiets terminal output to warnings and errors when it detects a
569
- coding agent (`is_running_under_coding_agent()` keys on `CLAUDECODE`). The
570
- build half of that quieting is useful. The test half removes `TEST_START` and
571
- console INFO, which are the lines a hang or stall diagnosis needs, and also
572
- the ones FireForge's own classifier reads (`Ran N checks`,
573
- `Unexpected results:`, `TEST-UNEXPECTED-*`), so suppression pushes a run
574
- toward `reason=no-tests`.
575
-
576
- `fireforge test --full-output` unsets the marker for test dispatches only,
577
- and the build path stays quiet. It is opt-in rather than automatic because it
578
- changes how much a third party prints, and an operator who wants the quieting
579
- should keep it.
580
-
581
- ## Known upstream teardown noise
582
-
583
- Recent engines can end a run with a Python traceback at harness teardown:
63
+ A test result is not the harness's exit code or its summary line. The verdict keys on what the harness itself writes: start and end markers for each file, the suite summary, crash markers, and the structured log each invocation writes. So:
64
+
65
+ - A crash, a hang, or a browser that quit mid-suite is a failure, even when mach exits 0 or the summary reads `Failed: 0`.
66
+ - Every planned file must start and finish. A file that never started or never finished is a failure.
67
+ - An engine that changed while the harness ran makes the result `inconclusive` (exit 14): run again.
68
+ - A harness failure FireForge recognizes before any test ran (mach's resource monitor failing at startup, for instance) is retried up to twice, because it says nothing about the tests. `test.harnessFailurePatterns` adds output lines that mean the browser failed before any test ran.
584
69
 
70
+ [machine-output.md](machine-output.md#test) lists every `reason` and key of the verdict line and the shape of the results document. [exit-codes.md](exit-codes.md#test) lists the exit codes.
71
+
72
+ ### Logs and results
73
+
74
+ Each run writes its complete output to `test-runs/<id>/output.log` in the workspace's state directory (`~/.fireforge/workspaces/<name>/` in source mode, `.fireforge/` in patch mode); the verdict line names it as `log=`. A workspace keeps its 10 latest runs. To keep one for good:
75
+
76
+ ```sh
77
+ npx fireforge test browser/base/content/test/sidebar/ --keep-log sidebar.log --results sidebar.json
585
78
  ```
586
- AttributeError: 'SystemResourceMonitor' object has no attribute 'stop_time'
79
+
80
+ - `--keep-log <path>` also writes the complete output there.
81
+ - `--results <path>` writes the per-file results document (the same document `--json` prints): the planned tests, each invocation with its exit code, attempts and verdict, one record per file with its failures, and a summary.
82
+
83
+ ## The host around a run
84
+
85
+ While a command holds the workspace, no other FireForge run uses its engine. `test` uses that to keep the host clean without touching anything else:
86
+
87
+ - **Before**: harness processes an earlier, killed run of this workspace left behind (their parent died, or they carry this engine's marker) are terminated by exact process identity. The verdict reports `orphans-reaped=<n>`.
88
+ - **Ports**: a browser harness binds the Marionette port and mochitest server ports. A leftover of this workspace holding one is terminated. A process of anyone else is never signalled: the run waits for it up to `--wait-lock`, then refuses with `port-busy` naming it. With `test.mochitestPorts: "auto"`, a run proceeds while another workspace holds the Marionette port (FireForge moves this run's to a free one) or a server port the harness can move away from by itself.
89
+ - **After**: helpers this run started that escaped its process group (xpcshell's HTTP/2 server, for instance) are found by the run marker in their environment and terminated.
90
+
91
+ Nothing about this is configurable; it is what a correct run needs.
92
+
93
+ ## Negative controls
94
+
95
+ A green test proves something only if it would go red when the behaviour breaks. A negative control checks that: apply a reviewed mutation, require the tests to fail at exactly the expected assertions, and put everything back.
96
+
97
+ ```sh
98
+ npx fireforge test browser/base/content/test/sidebar/browser_focus.js \
99
+ --control controls/sidebar-focus.diff \
100
+ --expect "focus moves to the first item"
587
101
  ```
588
102
 
589
- (or `poll_interval`), raised from `mozsystemmonitor/resourcemonitor.py`. It
590
- is an upstream defect in the resource monitor's own shutdown, it is cosmetic,
591
- and it does not affect any verdict. It matters only because it lands exactly
592
- where a reader looks for the failure summary.
593
-
594
- FireForge recognizes this one signature and no others. Recognition requires
595
- all of: an `AttributeError` on `SystemResourceMonitor` naming one of those
596
- two attributes, a `resourcemonitor.py` stack frame, and, in a test run, a
597
- preceding `SUITE_END`. A novel attribute, a different exception, or the same
598
- traceback before shutdown is treated as a real failure and always printed
599
- verbatim.
600
-
601
- The two phases handle it differently, on purpose:
602
-
603
- - **Tests** collapse the traceback in the terminal echo to one line labeled
604
- `[FireForge]`. Captures and the run log keep the raw traceback, and the
605
- classifier reads the raw form, so a real failure always outranks this
606
- signature in diagnosis.
607
- - **Builds** print it verbatim and add a note naming it. A build has no
608
- `SUITE_END`, so there is no boundary separating teardown from work still in
609
- progress, and FireForge cannot tell cosmetic teardown noise from a real
610
- build-time traceback there. Withholding the block would be the wrong risk
611
- to take.
612
-
613
- ## Concurrency
614
-
615
- A test run holds the engine-session lock and snapshots the engine git
616
- generation before and after the harness run, failing the verdict as invalid
617
- if the tree changed mid-run in a way the running browser can see: a file the
618
- objdir links to its source, a file staged at dispatch, or a test file or
619
- staging input of the run. A peer's edit to anything else (a compiled source,
620
- a copied file, an unrelated test) leaves the verdict standing with a warning
621
- and `drift-tolerated=<n>`; the next run's stale-build gate judges whether it
622
- needs a rebuild.
623
-
624
- `--shared-lock` (or `test.lockMode: "shared"`) holds the lock shared for a
625
- build-less run that applies no negative control and uses auto ports, so
626
- several such runs on one objdir overlap. Anything that writes (a build, a
627
- re-export, a `test --build`) still holds the lock alone: it waits for shared
628
- holders to finish, and new shared holders queue behind it.
629
- `status --lock` counts shared holders. Orphan reaping only touches helpers
630
- whose parent died, so overlapping runs do not reap each other's live
631
- helpers.
632
-
633
- `--jobs <n>` runs a request's shards on n harness instances inside one lock
634
- hold. Each instance has its own profile and its own Marionette port, and
635
- auto ports (required) move each instance's mochitest server ports; output
636
- lines carry a `[job <i>]` prefix in the terminal and the run log. Each
637
- instance also writes its own mochitest test list
638
- (`--testrun-manifest-file`): on the harness's shared default
639
- `_tests/testing/mochitest/tests.json`, the second instance would run the
640
- first shard's file and pass, or find none. A `--jobs` run always reads each
641
- dispatch's mozlog raw log, and a dispatch whose raw log starts none of its
642
- requested files fails with `started=0/<m>` instead of passing on another
643
- shard's results. With `--no-shard`, or a single directory argument, the
644
- files are split in order into n contiguous chunks. Parallel browsers raise
645
- host load, so measure before relying on it.
646
-
647
- When the caller sets `MOZ_UPLOAD_DIR`, each `--jobs` instance gets its own
648
- `<MOZ_UPLOAD_DIR>/job-<i>` (created up front) instead of the shared
649
- directory, where instances would replace each other's fixed-name artifacts
650
- such as the `modifiedPrefs.json` pref census. The verdict names them as
651
- `upload-dirs=<dir>,<dir>,...` so a caller can merge per-instance artifacts.
652
- Without `MOZ_UPLOAD_DIR` nothing changes.
653
-
654
- A browser `--jobs` run on more than one instance also holds
655
- placeholder listeners on `127.0.0.1` on the mochitest HTTP, ssltunnel and
656
- WebSocket ports (8888, 4443, 9988) for the whole parallel hold, after the
657
- server-port preflight. Desktop mochitest has no flags for these ports, and
658
- its busy-port probe passes for instances that start together, which then
659
- race for 8888 and die with `could not start server on port 8888`. With the
660
- ports held, every instance's probe fails and each falls back to its own
661
- port; a port that is already busy is left alone. Each `FIREFORGE-SHARD:`
662
- line carries the ports its instance took as `ports=http:<n>,ssl:<n>,ws:<n>`.
663
- A harness whose server still fails to start (`could not start server on
664
- port` or `Timed out while waiting for server startup`, before any test) is
665
- an infrastructure failure, not `no-tests`: it is retried within the
666
- `--harness-retries` budget like a harness crash, and reported as
667
- `reason=server-startup` once the budget is spent.
668
-
669
- `--shard-size <n>` dispatches n files per mach invocation (mochitest restarts
670
- the browser between files), paying the harness start once per chunk instead
671
- of once per file, and judges each file from mozlog's structured log:
672
- `shards=` then counts files and `failed-shards=` names failed files.
673
-
674
- `--results <path>` writes one JSON record per test file and `--repeat` run
675
- (status, expected status, duration, unexpected subtests, the shard, and the
676
- run-log line where the dispatch began) from mozlog's structured log, which
677
- each dispatch then writes with `--log-raw`, and names it on the verdict as
678
- `results=<path>`. A `--log-raw <file>` already forwarded with `--mach-arg` is
679
- read instead. A harness-level record (`test` is `automation.py`,
680
- such as a hung browser's no-output TIMEOUT) also carries `shardFiles`, the
681
- shard's dispatched files, and `file` when the shard has exactly one. The checks that need no lock run before it is
682
- requested: the launchable binary, the named-file checkJs pass, and the
683
- `--wait-browser`/`--wait-port` budgets. The run log is open from the start,
684
- so a `reason=lock-timeout` line carries `log=` too.
685
- A `--perf-samples` run fails only when HEAD
686
- moved or a changed path is packaged by the running build (an install-manifest
687
- source or a test file); an edit no manifest installs, such as a compiled
688
- source, leaves the sample standing with a warning. To verify beside a busy primary checkout
689
- instead, use a [verification tree](verification-trees.md).
690
-
691
- ## Dev-build gotcha
692
-
693
- In dev builds, files under `obj-*/dist/bin` may be symlinks back into the
694
- source tree (prefs, chrome JS and CSS, deployed widgets), so edit source
695
- prefs directly and keep a backup before bisection experiments. The same
696
- symlinks mean a running suite reads `engine/` when its browser loads a file,
697
- after any `--build` step: `Build complete` is not a snapshot. An edit to
698
- `engine/`, yours or a peer session's, made before the `FIREFORGE-VERDICT`
699
- line can reach the running suite, so keep a temporary edit, such as a
700
- hand-made neuter, in place until the verdict line, or use
701
- `--negative-control` for deliberate mutations. `fireforge test --help` says
702
- so too.
703
-
704
- ## Missing launchable binary
705
-
706
- `test` checks for the launchable binary before it requests the engine lock,
707
- and names the cause when the bundle is incomplete. Every protected mach
708
- build (`build`, `build --ui`, `test --build`) records itself in
709
- `.fireforge/build-run.json` while it runs. A successful build removes the
710
- record, a failed one keeps it with its exit code, and a build whose process
711
- died part-way leaves it marked running with a PID that no longer exists. The
712
- refusal (`note=no-launchable-binary`) then says, in any session, that the
713
- last build was interrupted or failed, by which command and when. A missing
714
- binary while a build is still running is not refused early: the run queues
715
- behind that build, which relinks the bundle before it releases the lock.
716
-
717
- ## Repository release gate
718
-
719
- Run `npm run release:check` with the exact Node version in `.nvmrc` and npm
720
- version in `package.json`'s `packageManager`. The gate verifies these pins
721
- before formatting, whitespace, zero-warning lint, strict typecheck, development
722
- and production dead-code checks, import cycles, coverage floors, and installed
723
- package smoke tests. `prepublishOnly` and the CI quality job run the same gate.
724
- Supported Node-version and OS matrices continue to run ordinary tests separately.
725
-
726
- The full-Firefox integration runner is opt-in. It snapshots project files,
727
- engine changes and the index before arming recovery; a refusal cannot erase an
728
- existing workspace. Failed recovery fails the run, preserves affected paths and
729
- writes recovery evidence for manual repair.
103
+ 1. The tests run unmutated and must be green. This is skipped when the workspace recorded a green run of exactly these tests on exactly this engine state. A red baseline fails the control as `baseline-red`, and the mutation is not applied.
104
+ 2. The diff is applied to the engine inside a transaction, and what the mutation needs is built. A path in the diff names an engine file: engine-relative, under `engine/`, or as the checkout holds it, so the output of `git diff` works as it is (`src/<path>` in source mode, and a component's `components/custom/<tag>/<file>` or `components/overrides/<name>/<file>` in either mode).
105
+ 3. The tests run again. They must go red at every `--expect` assertion and at no other. Repeat `--expect` for each assertion.
106
+ 4. Every byte is restored, whatever happened: an error, Ctrl+C or a crash (on the next run) puts the engine back. When the mutation needed a build, the restored engine is built again so the workspace does not keep a mutated binary (`control-restore-build=done|failed`).
107
+
108
+ The verdict reports how the control came out:
109
+
110
+ | `control=` | Meaning | Exit | `code` |
111
+ | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---: | ---------------------- |
112
+ | `caught` | Red at exactly the expected assertions | 0 | |
113
+ | `missed` | The tests stayed green with the mutation | 5 | `control-missed` |
114
+ | `wrong-red` | Red with the mutation, but not at exactly the expected assertions: an expected one stayed green, another one failed, or the run failed some other way (a crash). The message names the expected assertions and what was seen | 5 | `control-wrong-red` |
115
+ | `baseline-red` | The tests were red without the mutation | 5 | `control-baseline-red` |
116
+ | `inconclusive` | The engine changed while one of the two runs was under way: run again | 14 | `control-inconclusive` |
117
+
118
+ A `wrong-red` control is a failed control, not a result to retry: correct `--expect`, or narrow the mutation or the tests until only the expected assertions fail. [gate.md](gate.md) declares controls under `gate.controls` so every gate run repeats them.