@hominis/fireforge 0.55.0 → 0.60.0

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