@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.
- package/CHANGELOG.md +233 -6
- package/README.md +51 -17
- package/dist/bin/fireforge.js +34 -129
- package/dist/build-info.json +4 -4
- package/dist/src/check/check.js +394 -0
- package/dist/src/check/gate.js +448 -0
- package/dist/src/check/index.js +10 -0
- package/dist/src/check/record.js +155 -0
- package/dist/src/cli/command.js +286 -0
- package/dist/src/cli/output.js +96 -0
- package/dist/src/cli/program.js +231 -0
- package/dist/src/cli/stdio.js +59 -0
- package/dist/src/cli/version.js +99 -0
- package/dist/src/commands/bootstrap.js +17 -102
- package/dist/src/commands/build.js +34 -456
- package/dist/src/commands/check.js +44 -157
- package/dist/src/commands/config.js +50 -226
- package/dist/src/commands/discard.js +38 -215
- package/dist/src/commands/doctor.js +29 -456
- package/dist/src/commands/download.js +35 -499
- package/dist/src/commands/export.js +42 -431
- package/dist/src/commands/furnace.js +220 -0
- package/dist/src/commands/gate.js +127 -0
- package/dist/src/commands/import.js +44 -445
- package/dist/src/commands/index.js +86 -0
- package/dist/src/commands/lint.js +44 -546
- package/dist/src/commands/merge-driver.js +56 -0
- package/dist/src/commands/migrate.js +75 -0
- package/dist/src/commands/override.js +43 -0
- package/dist/src/commands/package.js +48 -77
- package/dist/src/commands/patch.js +221 -0
- package/dist/src/commands/re-export.js +55 -359
- package/dist/src/commands/rebase.js +69 -0
- package/dist/src/commands/register.js +62 -103
- package/dist/src/commands/reset.js +28 -91
- package/dist/src/commands/resolve.js +20 -167
- package/dist/src/commands/restore.js +19 -0
- package/dist/src/commands/run.js +60 -382
- package/dist/src/commands/setup.js +78 -90
- package/dist/src/commands/status.js +44 -413
- package/dist/src/commands/test.js +97 -423
- package/dist/src/commands/token.js +185 -228
- package/dist/src/commands/typecheck.js +59 -241
- package/dist/src/commands/verify.js +28 -334
- package/dist/src/commands/version.js +14 -0
- package/dist/src/commands/watch.js +20 -218
- package/dist/src/commands/wire.js +60 -349
- package/dist/src/commands/workspace.js +117 -0
- package/dist/src/config/edit.js +237 -0
- package/dist/src/config/index.js +15 -0
- package/dist/src/config/load.js +59 -0
- package/dist/src/config/previous.js +404 -0
- package/dist/src/config/schema/build.js +63 -0
- package/dist/src/config/schema/check.js +113 -0
- package/dist/src/config/schema/common.js +71 -0
- package/dist/src/config/schema/export-queue.js +36 -0
- package/dist/src/config/schema/firefox.js +69 -0
- package/dist/src/config/schema/gate.js +199 -0
- package/dist/src/config/schema/identity.js +55 -0
- package/dist/src/config/schema/index.js +45 -0
- package/dist/src/config/schema/lint.js +297 -0
- package/dist/src/config/schema/policy.js +111 -0
- package/dist/src/config/schema/source.js +90 -0
- package/dist/src/config/schema/test.js +17 -0
- package/dist/src/config/schema/toolchains.js +17 -0
- package/dist/src/config/schema/typecheck.js +29 -0
- package/dist/src/config/schema/wire.js +15 -0
- package/dist/src/diff/apply.js +129 -0
- package/dist/src/diff/index.js +16 -0
- package/dist/src/diff/model.js +267 -0
- package/dist/src/diff/query.js +65 -0
- package/dist/src/doctor/index.js +240 -0
- package/dist/src/engine/archive.js +396 -0
- package/dist/src/engine/audit.js +66 -0
- package/dist/src/engine/build.js +150 -0
- package/dist/src/engine/hostLocks.js +66 -0
- package/dist/src/engine/index.js +26 -0
- package/dist/src/engine/installManifests.js +147 -0
- package/dist/src/engine/mach.js +97 -0
- package/dist/src/engine/machHints.js +80 -0
- package/dist/src/engine/mozconfig.js +110 -0
- package/dist/src/engine/objdir.js +124 -0
- package/dist/src/engine/package.js +169 -0
- package/dist/src/engine/pin.js +12 -0
- package/dist/src/engine/pool.js +423 -0
- package/dist/src/engine/pristine.js +281 -0
- package/dist/src/engine/python.js +68 -0
- package/dist/src/engine/resourceGuard.js +582 -0
- package/dist/src/engine/run.js +259 -0
- package/dist/src/engine/smoke.js +204 -0
- package/dist/src/engine/staleness.js +229 -0
- package/dist/src/engine/watch.js +82 -0
- package/dist/src/engine/workspace.js +85 -0
- package/dist/src/furnace/config.js +360 -0
- package/dist/src/furnace/deploy.js +414 -0
- package/dist/src/furnace/diff.js +59 -0
- package/dist/src/furnace/edit.js +64 -0
- package/dist/src/furnace/fragments.js +53 -0
- package/dist/src/furnace/index.js +19 -0
- package/dist/src/furnace/operations.js +283 -0
- package/dist/src/furnace/registration.js +220 -0
- package/dist/src/furnace/scaffold.js +311 -0
- package/dist/src/furnace/typing.js +252 -0
- package/dist/src/furnace/validate.js +662 -0
- package/dist/src/git/apply.js +129 -0
- package/dist/src/git/diff.js +143 -0
- package/dist/src/git/index.js +33 -0
- package/dist/src/git/objects.js +201 -0
- package/dist/src/git/refs.js +85 -0
- package/dist/src/git/repo.js +222 -0
- package/dist/src/git/run.js +242 -0
- package/dist/src/git/status.js +156 -0
- package/dist/src/kernel/errors.js +123 -0
- package/dist/src/kernel/fs.js +515 -0
- package/dist/src/kernel/glob.js +63 -0
- package/dist/src/kernel/hash.js +28 -0
- package/dist/src/kernel/journal.js +524 -0
- package/dist/src/kernel/json-edit.js +198 -0
- package/dist/src/kernel/json.js +101 -0
- package/dist/src/kernel/lock.js +589 -0
- package/dist/src/kernel/log.js +154 -0
- package/dist/src/kernel/process/identity.js +313 -0
- package/dist/src/kernel/process/index.js +8 -0
- package/dist/src/kernel/process/listing.js +128 -0
- package/dist/src/kernel/process/spawn.js +430 -0
- package/dist/src/kernel/process/tree.js +301 -0
- package/dist/src/kernel/schema.js +308 -0
- package/dist/src/kernel/signals.js +171 -0
- package/dist/src/kernel/text.js +151 -0
- package/dist/src/kernel/time.js +83 -0
- package/dist/src/kernel/tty.js +84 -0
- package/dist/src/lint/cache.js +77 -0
- package/dist/src/lint/checkjs.js +400 -0
- package/dist/src/lint/index.js +3 -0
- package/dist/src/lint/input.js +100 -0
- package/dist/src/lint/report.js +107 -0
- package/dist/src/lint/rule.js +41 -0
- package/dist/src/lint/rules/css.js +308 -0
- package/dist/src/lint/rules/javascript.js +299 -0
- package/dist/src/lint/rules/jsdoc.js +249 -0
- package/dist/src/lint/rules/license.js +93 -0
- package/dist/src/lint/rules/policy.js +201 -0
- package/dist/src/lint/rules/registration.js +264 -0
- package/dist/src/lint/rules/size.js +299 -0
- package/dist/src/lint/run.js +126 -0
- package/dist/src/lint/shim.js +323 -0
- package/dist/src/lint/typescript.js +186 -0
- package/dist/src/lint/waivers.js +93 -0
- package/dist/src/mode/changes.js +264 -0
- package/dist/src/mode/diagnose.js +173 -0
- package/dist/src/mode/export.js +147 -0
- package/dist/src/mode/index.js +23 -0
- package/dist/src/mode/migrate.js +181 -0
- package/dist/src/mode/previousWaivers.js +206 -0
- package/dist/src/mode/pristine.js +61 -0
- package/dist/src/mode/rebase.js +197 -0
- package/dist/src/mode/report.js +157 -0
- package/dist/src/mode/setup.js +103 -0
- package/dist/src/mode/tracked.js +116 -0
- package/dist/src/mode/upgrade.js +281 -0
- package/dist/src/mode/watch.js +83 -0
- package/dist/src/mode/workspace.js +189 -0
- package/dist/src/mozbuild/index.js +6 -0
- package/dist/src/mozbuild/jar.js +366 -0
- package/dist/src/mozbuild/mozbuild.js +321 -0
- package/dist/src/mozbuild/paths.js +96 -0
- package/dist/src/mozbuild/references.js +39 -0
- package/dist/src/mozbuild/testManifest.js +343 -0
- package/dist/src/mozbuild/text.js +142 -0
- package/dist/src/project/changes.js +145 -0
- package/dist/src/project/checkout.js +66 -0
- package/dist/src/project/index.js +11 -0
- package/dist/src/project/license.js +119 -0
- package/dist/src/project/project.js +111 -0
- package/dist/src/project/state.js +85 -0
- package/dist/src/project/tracked.js +1 -0
- package/dist/src/queue/apply.js +270 -0
- package/dist/src/queue/attribute.js +159 -0
- package/dist/src/queue/baseline.js +409 -0
- package/dist/src/queue/capture.js +298 -0
- package/dist/src/queue/changes.js +234 -0
- package/dist/src/queue/index.js +50 -0
- package/dist/src/queue/manifest.js +341 -0
- package/dist/src/queue/operations.js +454 -0
- package/dist/src/queue/placement.js +220 -0
- package/dist/src/queue/queue.js +359 -0
- package/dist/src/queue/restore.js +103 -0
- package/dist/src/queue/session.js +685 -0
- package/dist/src/queue/status.js +137 -0
- package/dist/src/register/files.js +39 -0
- package/dist/src/register/index.js +8 -0
- package/dist/src/register/js.js +217 -0
- package/dist/src/register/register.js +359 -0
- package/dist/src/register/wire.js +146 -0
- package/dist/src/source/adopt.js +99 -0
- package/dist/src/source/changes.js +132 -0
- package/dist/src/source/edit.js +278 -0
- package/dist/src/source/export.js +70 -0
- package/dist/src/source/groups.js +131 -0
- package/dist/src/source/index.js +20 -0
- package/dist/src/source/materialize.js +382 -0
- package/dist/src/source/merge.js +255 -0
- package/dist/src/source/objects.js +102 -0
- package/dist/src/source/previous.js +166 -0
- package/dist/src/source/records.js +138 -0
- package/dist/src/source/refresh.js +264 -0
- package/dist/src/source/tree.js +337 -0
- package/dist/src/syntax/css.js +215 -0
- package/dist/src/syntax/fragments.js +63 -0
- package/dist/src/syntax/index.js +10 -0
- package/dist/src/syntax/js.js +270 -0
- package/dist/src/test/classify.js +826 -0
- package/dist/src/test/control.js +236 -0
- package/dist/src/test/host.js +266 -0
- package/dist/src/test/index.js +11 -0
- package/dist/src/test/plan.js +347 -0
- package/dist/src/test/rawLog.js +138 -0
- package/dist/src/test/run.js +404 -0
- package/dist/src/test/verdict.js +420 -0
- package/dist/src/test/xpcshell.js +143 -0
- package/dist/src/tokens/add.js +304 -0
- package/dist/src/tokens/coverage.js +65 -0
- package/dist/src/tokens/css.js +58 -0
- package/dist/src/tokens/index.js +12 -0
- package/dist/src/tokens/lint.js +96 -0
- package/dist/src/tokens/model.js +118 -0
- package/dist/src/tokens/settings.js +87 -0
- package/dist/src/tokens/siblings.js +104 -0
- package/dist/src/typecheck/explain.js +123 -0
- package/dist/src/typecheck/index.js +8 -0
- package/dist/src/typecheck/typecheck.js +332 -0
- package/docs/README.md +23 -28
- package/docs/authoring.md +97 -0
- package/docs/configuration.md +307 -766
- package/docs/exit-codes.md +76 -94
- package/docs/furnace.md +111 -221
- package/docs/gate.md +205 -0
- package/docs/getting-started.md +165 -0
- package/docs/machine-output.md +201 -290
- package/docs/migrating.md +261 -0
- package/docs/patch-workflow.md +159 -723
- package/docs/quality.md +220 -0
- package/docs/source-workflow.md +228 -0
- package/docs/testing.md +101 -719
- package/docs/workspaces.md +187 -0
- package/package.json +22 -30
- package/templates/configs/common.mozconfig +8 -2
- package/templates/configs/darwin.mozconfig +6 -7
- package/templates/configs/linux.mozconfig +5 -8
- package/templates/configs/win32.mozconfig +3 -9
- package/dist/bin/fireforge.d.ts +0 -9
- package/dist/src/cli-usage-error.d.ts +0 -46
- package/dist/src/cli-usage-error.js +0 -81
- package/dist/src/cli.d.ts +0 -41
- package/dist/src/cli.js +0 -380
- package/dist/src/commands/bootstrap-checks.d.ts +0 -16
- package/dist/src/commands/bootstrap-checks.js +0 -66
- package/dist/src/commands/bootstrap.d.ts +0 -10
- package/dist/src/commands/build-prelock.d.ts +0 -20
- package/dist/src/commands/build-prelock.js +0 -50
- package/dist/src/commands/build.d.ts +0 -13
- package/dist/src/commands/check-report.d.ts +0 -41
- package/dist/src/commands/check-report.js +0 -98
- package/dist/src/commands/check-run.d.ts +0 -44
- package/dist/src/commands/check-run.js +0 -125
- package/dist/src/commands/check-steps.d.ts +0 -75
- package/dist/src/commands/check-steps.js +0 -200
- package/dist/src/commands/check.d.ts +0 -32
- package/dist/src/commands/config.d.ts +0 -13
- package/dist/src/commands/declarations-report.d.ts +0 -49
- package/dist/src/commands/declarations-report.js +0 -83
- package/dist/src/commands/destructive-decision.d.ts +0 -19
- package/dist/src/commands/destructive-decision.js +0 -31
- package/dist/src/commands/discard.d.ts +0 -12
- package/dist/src/commands/doctor-check-core.d.ts +0 -110
- package/dist/src/commands/doctor-check-core.js +0 -24
- package/dist/src/commands/doctor-engine-eslint.d.ts +0 -3
- package/dist/src/commands/doctor-engine-eslint.js +0 -17
- package/dist/src/commands/doctor-external-toolchains.d.ts +0 -3
- package/dist/src/commands/doctor-external-toolchains.js +0 -56
- package/dist/src/commands/doctor-furnace-config-sync.d.ts +0 -18
- package/dist/src/commands/doctor-furnace-config-sync.js +0 -295
- package/dist/src/commands/doctor-furnace-jar.d.ts +0 -14
- package/dist/src/commands/doctor-furnace-jar.js +0 -44
- package/dist/src/commands/doctor-furnace.d.ts +0 -8
- package/dist/src/commands/doctor-furnace.js +0 -514
- package/dist/src/commands/doctor-macos-sdk.d.ts +0 -8
- package/dist/src/commands/doctor-macos-sdk.js +0 -158
- package/dist/src/commands/doctor-orphaned-harness.d.ts +0 -41
- package/dist/src/commands/doctor-orphaned-harness.js +0 -98
- package/dist/src/commands/doctor-patch-manifest.d.ts +0 -9
- package/dist/src/commands/doctor-patch-manifest.js +0 -156
- package/dist/src/commands/doctor-post-rebase-audit.d.ts +0 -2
- package/dist/src/commands/doctor-post-rebase-audit.js +0 -108
- package/dist/src/commands/doctor-source-pin.d.ts +0 -29
- package/dist/src/commands/doctor-source-pin.js +0 -91
- package/dist/src/commands/doctor-working-tree.d.ts +0 -27
- package/dist/src/commands/doctor-working-tree.js +0 -89
- package/dist/src/commands/doctor.d.ts +0 -49
- package/dist/src/commands/download.d.ts +0 -11
- package/dist/src/commands/export-adopt-check.d.ts +0 -37
- package/dist/src/commands/export-adopt-check.js +0 -97
- package/dist/src/commands/export-all.d.ts +0 -11
- package/dist/src/commands/export-all.js +0 -361
- package/dist/src/commands/export-flow.d.ts +0 -124
- package/dist/src/commands/export-flow.js +0 -423
- package/dist/src/commands/export-placement-conflicts.d.ts +0 -17
- package/dist/src/commands/export-placement-conflicts.js +0 -75
- package/dist/src/commands/export-placement-gate.d.ts +0 -42
- package/dist/src/commands/export-placement-gate.js +0 -107
- package/dist/src/commands/export-placement-policy.d.ts +0 -22
- package/dist/src/commands/export-placement-policy.js +0 -54
- package/dist/src/commands/export-shared.d.ts +0 -152
- package/dist/src/commands/export-shared.js +0 -396
- package/dist/src/commands/export-staged-registration.d.ts +0 -46
- package/dist/src/commands/export-staged-registration.js +0 -91
- package/dist/src/commands/export.d.ts +0 -13
- package/dist/src/commands/forward-import-remedy.d.ts +0 -31
- package/dist/src/commands/forward-import-remedy.js +0 -62
- package/dist/src/commands/furnace/apply.d.ts +0 -8
- package/dist/src/commands/furnace/apply.js +0 -327
- package/dist/src/commands/furnace/authoring-config.d.ts +0 -13
- package/dist/src/commands/furnace/authoring-config.js +0 -19
- package/dist/src/commands/furnace/chrome-doc-remove.d.ts +0 -14
- package/dist/src/commands/furnace/chrome-doc-remove.js +0 -148
- package/dist/src/commands/furnace/chrome-doc-templates.d.ts +0 -152
- package/dist/src/commands/furnace/chrome-doc-templates.js +0 -331
- package/dist/src/commands/furnace/chrome-doc-tests.d.ts +0 -23
- package/dist/src/commands/furnace/chrome-doc-tests.js +0 -148
- package/dist/src/commands/furnace/chrome-doc.d.ts +0 -87
- package/dist/src/commands/furnace/chrome-doc.js +0 -365
- package/dist/src/commands/furnace/create-browser-test.d.ts +0 -44
- package/dist/src/commands/furnace/create-browser-test.js +0 -179
- package/dist/src/commands/furnace/create-dry-run.d.ts +0 -49
- package/dist/src/commands/furnace/create-dry-run.js +0 -107
- package/dist/src/commands/furnace/create-features.d.ts +0 -24
- package/dist/src/commands/furnace/create-features.js +0 -55
- package/dist/src/commands/furnace/create-mochikit.d.ts +0 -29
- package/dist/src/commands/furnace/create-mochikit.js +0 -75
- package/dist/src/commands/furnace/create-readback.d.ts +0 -22
- package/dist/src/commands/furnace/create-readback.js +0 -32
- package/dist/src/commands/furnace/create-templates.d.ts +0 -119
- package/dist/src/commands/furnace/create-templates.js +0 -283
- package/dist/src/commands/furnace/create-validation.d.ts +0 -6
- package/dist/src/commands/furnace/create-validation.js +0 -59
- package/dist/src/commands/furnace/create-xpcshell.d.ts +0 -27
- package/dist/src/commands/furnace/create-xpcshell.js +0 -80
- package/dist/src/commands/furnace/create.d.ts +0 -24
- package/dist/src/commands/furnace/create.js +0 -407
- package/dist/src/commands/furnace/deploy-fragment-includers.d.ts +0 -59
- package/dist/src/commands/furnace/deploy-fragment-includers.js +0 -120
- package/dist/src/commands/furnace/deploy-named.d.ts +0 -48
- package/dist/src/commands/furnace/deploy-named.js +0 -107
- package/dist/src/commands/furnace/deploy.d.ts +0 -9
- package/dist/src/commands/furnace/deploy.js +0 -229
- package/dist/src/commands/furnace/diff.d.ts +0 -11
- package/dist/src/commands/furnace/diff.js +0 -238
- package/dist/src/commands/furnace/index.d.ts +0 -4
- package/dist/src/commands/furnace/index.js +0 -283
- package/dist/src/commands/furnace/init.d.ts +0 -11
- package/dist/src/commands/furnace/init.js +0 -287
- package/dist/src/commands/furnace/list.d.ts +0 -8
- package/dist/src/commands/furnace/list.js +0 -104
- package/dist/src/commands/furnace/override.d.ts +0 -16
- package/dist/src/commands/furnace/override.js +0 -454
- package/dist/src/commands/furnace/preview.d.ts +0 -19
- package/dist/src/commands/furnace/preview.js +0 -349
- package/dist/src/commands/furnace/refresh.d.ts +0 -10
- package/dist/src/commands/furnace/refresh.js +0 -303
- package/dist/src/commands/furnace/remove-mutations.d.ts +0 -36
- package/dist/src/commands/furnace/remove-mutations.js +0 -168
- package/dist/src/commands/furnace/remove-state.d.ts +0 -20
- package/dist/src/commands/furnace/remove-state.js +0 -60
- package/dist/src/commands/furnace/remove.d.ts +0 -8
- package/dist/src/commands/furnace/remove.js +0 -415
- package/dist/src/commands/furnace/rename-browser-test.d.ts +0 -2
- package/dist/src/commands/furnace/rename-browser-test.js +0 -68
- package/dist/src/commands/furnace/rename-dry-run.d.ts +0 -29
- package/dist/src/commands/furnace/rename-dry-run.js +0 -127
- package/dist/src/commands/furnace/rename-helpers.d.ts +0 -26
- package/dist/src/commands/furnace/rename-helpers.js +0 -85
- package/dist/src/commands/furnace/rename-registrations.d.ts +0 -41
- package/dist/src/commands/furnace/rename-registrations.js +0 -98
- package/dist/src/commands/furnace/rename-xpcshell.d.ts +0 -32
- package/dist/src/commands/furnace/rename-xpcshell.js +0 -95
- package/dist/src/commands/furnace/rename.d.ts +0 -6
- package/dist/src/commands/furnace/rename.js +0 -400
- package/dist/src/commands/furnace/scan.d.ts +0 -14
- package/dist/src/commands/furnace/scan.js +0 -192
- package/dist/src/commands/furnace/status.d.ts +0 -7
- package/dist/src/commands/furnace/status.js +0 -209
- package/dist/src/commands/furnace/sync.d.ts +0 -12
- package/dist/src/commands/furnace/sync.js +0 -145
- package/dist/src/commands/furnace/test-file-name.d.ts +0 -28
- package/dist/src/commands/furnace/test-file-name.js +0 -39
- package/dist/src/commands/furnace/validate-report.d.ts +0 -45
- package/dist/src/commands/furnace/validate-report.js +0 -91
- package/dist/src/commands/furnace/validate.d.ts +0 -8
- package/dist/src/commands/furnace/validate.js +0 -309
- package/dist/src/commands/furnace/validation-output.d.ts +0 -47
- package/dist/src/commands/furnace/validation-output.js +0 -161
- package/dist/src/commands/import.d.ts +0 -11
- package/dist/src/commands/lint-per-patch.d.ts +0 -10
- package/dist/src/commands/lint-per-patch.js +0 -428
- package/dist/src/commands/lint-per-run-checkjs.d.ts +0 -66
- package/dist/src/commands/lint-per-run-checkjs.js +0 -102
- package/dist/src/commands/lint-report.d.ts +0 -25
- package/dist/src/commands/lint-report.js +0 -76
- package/dist/src/commands/lint.d.ts +0 -47
- package/dist/src/commands/manifest.d.ts +0 -38
- package/dist/src/commands/manifest.js +0 -68
- package/dist/src/commands/package.d.ts +0 -11
- package/dist/src/commands/park.d.ts +0 -22
- package/dist/src/commands/park.js +0 -232
- package/dist/src/commands/patch/body.d.ts +0 -29
- package/dist/src/commands/patch/body.js +0 -60
- package/dist/src/commands/patch/compact.d.ts +0 -28
- package/dist/src/commands/patch/compact.js +0 -208
- package/dist/src/commands/patch/delete-gap-notice.d.ts +0 -24
- package/dist/src/commands/patch/delete-gap-notice.js +0 -48
- package/dist/src/commands/patch/delete.d.ts +0 -28
- package/dist/src/commands/patch/delete.js +0 -131
- package/dist/src/commands/patch/entry-projection.d.ts +0 -13
- package/dist/src/commands/patch/entry-projection.js +0 -24
- package/dist/src/commands/patch/index.d.ts +0 -16
- package/dist/src/commands/patch/index.js +0 -54
- package/dist/src/commands/patch/lint-ignore-from.d.ts +0 -43
- package/dist/src/commands/patch/lint-ignore-from.js +0 -141
- package/dist/src/commands/patch/lint-ignore.d.ts +0 -42
- package/dist/src/commands/patch/lint-ignore.js +0 -263
- package/dist/src/commands/patch/move-files-adopt.d.ts +0 -33
- package/dist/src/commands/patch/move-files-adopt.js +0 -65
- package/dist/src/commands/patch/move-files-create.d.ts +0 -19
- package/dist/src/commands/patch/move-files-create.js +0 -187
- package/dist/src/commands/patch/move-files-into.d.ts +0 -65
- package/dist/src/commands/patch/move-files-into.js +0 -325
- package/dist/src/commands/patch/move-files-retire.d.ts +0 -39
- package/dist/src/commands/patch/move-files-retire.js +0 -91
- package/dist/src/commands/patch/move-files.d.ts +0 -28
- package/dist/src/commands/patch/move-files.js +0 -224
- package/dist/src/commands/patch/move-size-tier.d.ts +0 -27
- package/dist/src/commands/patch/move-size-tier.js +0 -66
- package/dist/src/commands/patch/patch-context.d.ts +0 -40
- package/dist/src/commands/patch/patch-context.js +0 -51
- package/dist/src/commands/patch/removal-created-files.d.ts +0 -48
- package/dist/src/commands/patch/removal-created-files.js +0 -83
- package/dist/src/commands/patch/removal-dependents.d.ts +0 -63
- package/dist/src/commands/patch/removal-dependents.js +0 -133
- package/dist/src/commands/patch/rename.d.ts +0 -35
- package/dist/src/commands/patch/rename.js +0 -378
- package/dist/src/commands/patch/reorder-projection.d.ts +0 -17
- package/dist/src/commands/patch/reorder-projection.js +0 -49
- package/dist/src/commands/patch/reorder-shift.d.ts +0 -30
- package/dist/src/commands/patch/reorder-shift.js +0 -307
- package/dist/src/commands/patch/reorder.d.ts +0 -34
- package/dist/src/commands/patch/reorder.js +0 -375
- package/dist/src/commands/patch/reserve.d.ts +0 -33
- package/dist/src/commands/patch/reserve.js +0 -152
- package/dist/src/commands/patch/retire.d.ts +0 -34
- package/dist/src/commands/patch/retire.js +0 -133
- package/dist/src/commands/patch/split-plan.d.ts +0 -125
- package/dist/src/commands/patch/split-plan.js +0 -313
- package/dist/src/commands/patch/split-staged.d.ts +0 -108
- package/dist/src/commands/patch/split-staged.js +0 -202
- package/dist/src/commands/patch/split.d.ts +0 -43
- package/dist/src/commands/patch/split.js +0 -367
- package/dist/src/commands/patch/stage.d.ts +0 -34
- package/dist/src/commands/patch/stage.js +0 -153
- package/dist/src/commands/patch/staged-dependency-batch.d.ts +0 -48
- package/dist/src/commands/patch/staged-dependency-batch.js +0 -176
- package/dist/src/commands/patch/staged-dependency-entries.d.ts +0 -44
- package/dist/src/commands/patch/staged-dependency-entries.js +0 -80
- package/dist/src/commands/patch/staged-dependency-from.d.ts +0 -14
- package/dist/src/commands/patch/staged-dependency-from.js +0 -114
- package/dist/src/commands/patch/staged-dependency-remove.d.ts +0 -53
- package/dist/src/commands/patch/staged-dependency-remove.js +0 -114
- package/dist/src/commands/patch/staged-dependency-validate.d.ts +0 -27
- package/dist/src/commands/patch/staged-dependency-validate.js +0 -78
- package/dist/src/commands/patch/staged-dependency.d.ts +0 -22
- package/dist/src/commands/patch/staged-dependency.js +0 -251
- package/dist/src/commands/patch/tier.d.ts +0 -34
- package/dist/src/commands/patch/tier.js +0 -125
- package/dist/src/commands/patch-rename-map.d.ts +0 -30
- package/dist/src/commands/patch-rename-map.js +0 -54
- package/dist/src/commands/pending-resolution.d.ts +0 -15
- package/dist/src/commands/pending-resolution.js +0 -25
- package/dist/src/commands/re-export-adjacent-registrations.d.ts +0 -20
- package/dist/src/commands/re-export-adjacent-registrations.js +0 -75
- package/dist/src/commands/re-export-adjacent.d.ts +0 -111
- package/dist/src/commands/re-export-adjacent.js +0 -285
- package/dist/src/commands/re-export-bulk-scan.d.ts +0 -19
- package/dist/src/commands/re-export-bulk-scan.js +0 -233
- package/dist/src/commands/re-export-drift.d.ts +0 -110
- package/dist/src/commands/re-export-drift.js +0 -358
- package/dist/src/commands/re-export-each.d.ts +0 -46
- package/dist/src/commands/re-export-each.js +0 -110
- package/dist/src/commands/re-export-files.d.ts +0 -15
- package/dist/src/commands/re-export-files.js +0 -307
- package/dist/src/commands/re-export-hunks.d.ts +0 -37
- package/dist/src/commands/re-export-hunks.js +0 -264
- package/dist/src/commands/re-export-lint.d.ts +0 -137
- package/dist/src/commands/re-export-lint.js +0 -303
- package/dist/src/commands/re-export-options.d.ts +0 -29
- package/dist/src/commands/re-export-options.js +0 -192
- package/dist/src/commands/re-export-preflight.d.ts +0 -23
- package/dist/src/commands/re-export-preflight.js +0 -159
- package/dist/src/commands/re-export-purity-scope.d.ts +0 -18
- package/dist/src/commands/re-export-purity-scope.js +0 -137
- package/dist/src/commands/re-export-register.d.ts +0 -12
- package/dist/src/commands/re-export-register.js +0 -99
- package/dist/src/commands/re-export-removed.d.ts +0 -15
- package/dist/src/commands/re-export-removed.js +0 -94
- package/dist/src/commands/re-export-retired-declarations.d.ts +0 -22
- package/dist/src/commands/re-export-retired-declarations.js +0 -113
- package/dist/src/commands/re-export-scan-owner.d.ts +0 -44
- package/dist/src/commands/re-export-scan-owner.js +0 -116
- package/dist/src/commands/re-export-scan.d.ts +0 -72
- package/dist/src/commands/re-export-scan.js +0 -265
- package/dist/src/commands/re-export-single.d.ts +0 -53
- package/dist/src/commands/re-export-single.js +0 -426
- package/dist/src/commands/re-export-stale-registrations.d.ts +0 -39
- package/dist/src/commands/re-export-stale-registrations.js +0 -106
- package/dist/src/commands/re-export-summary.d.ts +0 -44
- package/dist/src/commands/re-export-summary.js +0 -59
- package/dist/src/commands/re-export.d.ts +0 -8
- package/dist/src/commands/rebase/abort.d.ts +0 -7
- package/dist/src/commands/rebase/abort.js +0 -67
- package/dist/src/commands/rebase/confirm.d.ts +0 -42
- package/dist/src/commands/rebase/confirm.js +0 -36
- package/dist/src/commands/rebase/conflict-summary.d.ts +0 -12
- package/dist/src/commands/rebase/conflict-summary.js +0 -37
- package/dist/src/commands/rebase/continue.d.ts +0 -7
- package/dist/src/commands/rebase/continue.js +0 -119
- package/dist/src/commands/rebase/index.d.ts +0 -22
- package/dist/src/commands/rebase/index.js +0 -209
- package/dist/src/commands/rebase/patch-loop.d.ts +0 -15
- package/dist/src/commands/rebase/patch-loop.js +0 -289
- package/dist/src/commands/rebase/summary.d.ts +0 -8
- package/dist/src/commands/rebase/summary.js +0 -47
- package/dist/src/commands/register.d.ts +0 -13
- package/dist/src/commands/reset.d.ts +0 -11
- package/dist/src/commands/resolve.d.ts +0 -36
- package/dist/src/commands/run.d.ts +0 -10
- package/dist/src/commands/setup-support.d.ts +0 -35
- package/dist/src/commands/setup-support.js +0 -386
- package/dist/src/commands/setup.d.ts +0 -11
- package/dist/src/commands/source.d.ts +0 -9
- package/dist/src/commands/source.js +0 -120
- package/dist/src/commands/status-check.d.ts +0 -87
- package/dist/src/commands/status-check.js +0 -161
- package/dist/src/commands/status-json.d.ts +0 -45
- package/dist/src/commands/status-json.js +0 -97
- package/dist/src/commands/status-output.d.ts +0 -23
- package/dist/src/commands/status-output.js +0 -231
- package/dist/src/commands/status-ownership.d.ts +0 -54
- package/dist/src/commands/status-ownership.js +0 -59
- package/dist/src/commands/status-scope.d.ts +0 -37
- package/dist/src/commands/status-scope.js +0 -54
- package/dist/src/commands/status.d.ts +0 -11
- package/dist/src/commands/test-appdir.d.ts +0 -6
- package/dist/src/commands/test-appdir.js +0 -29
- package/dist/src/commands/test-browser-preflight.d.ts +0 -28
- package/dist/src/commands/test-browser-preflight.js +0 -197
- package/dist/src/commands/test-build-furnace.d.ts +0 -21
- package/dist/src/commands/test-build-furnace.js +0 -53
- package/dist/src/commands/test-build-phase.d.ts +0 -34
- package/dist/src/commands/test-build-phase.js +0 -291
- package/dist/src/commands/test-checkjs.d.ts +0 -3
- package/dist/src/commands/test-checkjs.js +0 -35
- package/dist/src/commands/test-control-restore.d.ts +0 -40
- package/dist/src/commands/test-control-restore.js +0 -86
- package/dist/src/commands/test-diagnose.d.ts +0 -23
- package/dist/src/commands/test-diagnose.js +0 -317
- package/dist/src/commands/test-dispatch.d.ts +0 -39
- package/dist/src/commands/test-dispatch.js +0 -281
- package/dist/src/commands/test-furnace-reach.d.ts +0 -37
- package/dist/src/commands/test-furnace-reach.js +0 -132
- package/dist/src/commands/test-harness-env.d.ts +0 -23
- package/dist/src/commands/test-harness-env.js +0 -81
- package/dist/src/commands/test-harness-teardown.d.ts +0 -62
- package/dist/src/commands/test-harness-teardown.js +0 -128
- package/dist/src/commands/test-modes.d.ts +0 -57
- package/dist/src/commands/test-modes.js +0 -158
- package/dist/src/commands/test-multi-verdict.d.ts +0 -61
- package/dist/src/commands/test-multi-verdict.js +0 -112
- package/dist/src/commands/test-orchestrate.d.ts +0 -70
- package/dist/src/commands/test-orchestrate.js +0 -277
- package/dist/src/commands/test-perf-scope.d.ts +0 -50
- package/dist/src/commands/test-perf-scope.js +0 -138
- package/dist/src/commands/test-prelock.d.ts +0 -61
- package/dist/src/commands/test-prelock.js +0 -301
- package/dist/src/commands/test-register.d.ts +0 -4
- package/dist/src/commands/test-register.js +0 -181
- package/dist/src/commands/test-results.d.ts +0 -71
- package/dist/src/commands/test-results.js +0 -79
- package/dist/src/commands/test-run.d.ts +0 -89
- package/dist/src/commands/test-run.js +0 -251
- package/dist/src/commands/test-shards.d.ts +0 -114
- package/dist/src/commands/test-shards.js +0 -272
- package/dist/src/commands/test-stale-gate.d.ts +0 -56
- package/dist/src/commands/test-stale-gate.js +0 -208
- package/dist/src/commands/test-verdict.d.ts +0 -102
- package/dist/src/commands/test-verdict.js +0 -176
- package/dist/src/commands/test.d.ts +0 -22
- package/dist/src/commands/token-coverage.d.ts +0 -5
- package/dist/src/commands/token-coverage.js +0 -170
- package/dist/src/commands/token-lint.d.ts +0 -14
- package/dist/src/commands/token-lint.js +0 -151
- package/dist/src/commands/token-list.d.ts +0 -26
- package/dist/src/commands/token-list.js +0 -153
- package/dist/src/commands/token.d.ts +0 -14
- package/dist/src/commands/tree.d.ts +0 -19
- package/dist/src/commands/tree.js +0 -341
- package/dist/src/commands/typecheck-explain.d.ts +0 -13
- package/dist/src/commands/typecheck-explain.js +0 -100
- package/dist/src/commands/typecheck.d.ts +0 -61
- package/dist/src/commands/verify-scope.d.ts +0 -28
- package/dist/src/commands/verify-scope.js +0 -67
- package/dist/src/commands/verify.d.ts +0 -58
- package/dist/src/commands/watch.d.ts +0 -9
- package/dist/src/commands/wire.d.ts +0 -13
- package/dist/src/core/ast-utils.d.ts +0 -73
- package/dist/src/core/ast-utils.js +0 -105
- package/dist/src/core/brand-validation.d.ts +0 -7
- package/dist/src/core/brand-validation.js +0 -14
- package/dist/src/core/branding.d.ts +0 -86
- package/dist/src/core/branding.js +0 -371
- package/dist/src/core/browser-wire.d.ts +0 -48
- package/dist/src/core/browser-wire.js +0 -133
- package/dist/src/core/build-audit-platform.d.ts +0 -67
- package/dist/src/core/build-audit-platform.js +0 -373
- package/dist/src/core/build-audit-registration.d.ts +0 -80
- package/dist/src/core/build-audit-registration.js +0 -181
- package/dist/src/core/build-audit-resolve.d.ts +0 -78
- package/dist/src/core/build-audit-resolve.js +0 -240
- package/dist/src/core/build-audit-skip.d.ts +0 -57
- package/dist/src/core/build-audit-skip.js +0 -112
- package/dist/src/core/build-audit-transforms.d.ts +0 -23
- package/dist/src/core/build-audit-transforms.js +0 -92
- package/dist/src/core/build-audit.d.ts +0 -93
- package/dist/src/core/build-audit.js +0 -633
- package/dist/src/core/build-baseline-types.d.ts +0 -225
- package/dist/src/core/build-baseline-types.js +0 -10
- package/dist/src/core/build-baseline-validate.d.ts +0 -32
- package/dist/src/core/build-baseline-validate.js +0 -173
- package/dist/src/core/build-baseline.d.ts +0 -103
- package/dist/src/core/build-baseline.js +0 -261
- package/dist/src/core/build-jar-escalation.d.ts +0 -61
- package/dist/src/core/build-jar-escalation.js +0 -125
- package/dist/src/core/build-overwrite-guard.d.ts +0 -92
- package/dist/src/core/build-overwrite-guard.js +0 -235
- package/dist/src/core/build-prepare.d.ts +0 -83
- package/dist/src/core/build-prepare.js +0 -414
- package/dist/src/core/build-run-record.d.ts +0 -74
- package/dist/src/core/build-run-record.js +0 -136
- package/dist/src/core/checkjs-support-heads.d.ts +0 -41
- package/dist/src/core/checkjs-support-heads.js +0 -104
- package/dist/src/core/component-source-guard.d.ts +0 -20
- package/dist/src/core/component-source-guard.js +0 -68
- package/dist/src/core/config-mutate.d.ts +0 -16
- package/dist/src/core/config-mutate.js +0 -76
- package/dist/src/core/config-paths.d.ts +0 -16
- package/dist/src/core/config-paths.js +0 -106
- package/dist/src/core/config-state.d.ts +0 -16
- package/dist/src/core/config-state.js +0 -141
- package/dist/src/core/config-validate-build-audit.d.ts +0 -8
- package/dist/src/core/config-validate-build-audit.js +0 -80
- package/dist/src/core/config-validate-check.d.ts +0 -8
- package/dist/src/core/config-validate-check.js +0 -219
- package/dist/src/core/config-validate-file-size.d.ts +0 -15
- package/dist/src/core/config-validate-file-size.js +0 -154
- package/dist/src/core/config-validate-history.d.ts +0 -11
- package/dist/src/core/config-validate-history.js +0 -38
- package/dist/src/core/config-validate-patch-policy.d.ts +0 -7
- package/dist/src/core/config-validate-patch-policy.js +0 -284
- package/dist/src/core/config-validate-test-toolchains.d.ts +0 -8
- package/dist/src/core/config-validate-test-toolchains.js +0 -133
- package/dist/src/core/config-validate-token-scales.d.ts +0 -9
- package/dist/src/core/config-validate-token-scales.js +0 -125
- package/dist/src/core/config-validate.d.ts +0 -11
- package/dist/src/core/config-validate.js +0 -509
- package/dist/src/core/config.d.ts +0 -92
- package/dist/src/core/config.js +0 -169
- package/dist/src/core/coverage-dispatch.d.ts +0 -24
- package/dist/src/core/coverage-dispatch.js +0 -44
- package/dist/src/core/coverage-extend.d.ts +0 -89
- package/dist/src/core/coverage-extend.js +0 -239
- package/dist/src/core/coverage-records.d.ts +0 -107
- package/dist/src/core/coverage-records.js +0 -383
- package/dist/src/core/destructive.d.ts +0 -144
- package/dist/src/core/destructive.js +0 -182
- package/dist/src/core/dev-profile.d.ts +0 -28
- package/dist/src/core/dev-profile.js +0 -58
- package/dist/src/core/diff-hunks.d.ts +0 -73
- package/dist/src/core/diff-hunks.js +0 -286
- package/dist/src/core/discard-baseline.d.ts +0 -60
- package/dist/src/core/discard-baseline.js +0 -247
- package/dist/src/core/display-state.d.ts +0 -50
- package/dist/src/core/display-state.js +0 -87
- package/dist/src/core/engine-changes.d.ts +0 -40
- package/dist/src/core/engine-changes.js +0 -95
- package/dist/src/core/engine-precondition.d.ts +0 -42
- package/dist/src/core/engine-precondition.js +0 -60
- package/dist/src/core/engine-session-lock.d.ts +0 -119
- package/dist/src/core/engine-session-lock.js +0 -374
- package/dist/src/core/engine-write-boundary.d.ts +0 -5
- package/dist/src/core/engine-write-boundary.js +0 -41
- package/dist/src/core/export-moved-code-shape.d.ts +0 -98
- package/dist/src/core/export-moved-code-shape.js +0 -220
- package/dist/src/core/file-lock-owner.d.ts +0 -103
- package/dist/src/core/file-lock-owner.js +0 -259
- package/dist/src/core/file-lock-queue.d.ts +0 -67
- package/dist/src/core/file-lock-queue.js +0 -219
- package/dist/src/core/file-lock-shared.d.ts +0 -57
- package/dist/src/core/file-lock-shared.js +0 -117
- package/dist/src/core/file-lock.d.ts +0 -143
- package/dist/src/core/file-lock.js +0 -531
- package/dist/src/core/firefox-archive.d.ts +0 -45
- package/dist/src/core/firefox-archive.js +0 -96
- package/dist/src/core/firefox-cache.d.ts +0 -30
- package/dist/src/core/firefox-cache.js +0 -248
- package/dist/src/core/firefox-download.d.ts +0 -30
- package/dist/src/core/firefox-download.js +0 -152
- package/dist/src/core/firefox-extract.d.ts +0 -42
- package/dist/src/core/firefox-extract.js +0 -248
- package/dist/src/core/firefox-ignorefile.d.ts +0 -17
- package/dist/src/core/firefox-ignorefile.js +0 -30
- package/dist/src/core/firefox.d.ts +0 -66
- package/dist/src/core/firefox.js +0 -121
- package/dist/src/core/forward-registrations.d.ts +0 -33
- package/dist/src/core/forward-registrations.js +0 -16
- package/dist/src/core/furnace-apply-dry-run.d.ts +0 -12
- package/dist/src/core/furnace-apply-dry-run.js +0 -99
- package/dist/src/core/furnace-apply-ftl.d.ts +0 -49
- package/dist/src/core/furnace-apply-ftl.js +0 -210
- package/dist/src/core/furnace-apply-helpers.d.ts +0 -106
- package/dist/src/core/furnace-apply-helpers.js +0 -436
- package/dist/src/core/furnace-apply-output.d.ts +0 -36
- package/dist/src/core/furnace-apply-output.js +0 -111
- package/dist/src/core/furnace-apply-overwrite-warn.d.ts +0 -67
- package/dist/src/core/furnace-apply-overwrite-warn.js +0 -131
- package/dist/src/core/furnace-apply-undeploy-actions.d.ts +0 -10
- package/dist/src/core/furnace-apply-undeploy-actions.js +0 -48
- package/dist/src/core/furnace-apply.d.ts +0 -49
- package/dist/src/core/furnace-apply.js +0 -465
- package/dist/src/core/furnace-checksum-utils.d.ts +0 -25
- package/dist/src/core/furnace-checksum-utils.js +0 -54
- package/dist/src/core/furnace-composed-source.d.ts +0 -76
- package/dist/src/core/furnace-composed-source.js +0 -167
- package/dist/src/core/furnace-config-array-utils.d.ts +0 -11
- package/dist/src/core/furnace-config-array-utils.js +0 -26
- package/dist/src/core/furnace-config-custom.d.ts +0 -15
- package/dist/src/core/furnace-config-custom.js +0 -73
- package/dist/src/core/furnace-config-order.d.ts +0 -8
- package/dist/src/core/furnace-config-order.js +0 -90
- package/dist/src/core/furnace-config-tokens.d.ts +0 -17
- package/dist/src/core/furnace-config-tokens.js +0 -42
- package/dist/src/core/furnace-config-validate-exceptions.d.ts +0 -17
- package/dist/src/core/furnace-config-validate-exceptions.js +0 -122
- package/dist/src/core/furnace-config-validate.d.ts +0 -32
- package/dist/src/core/furnace-config-validate.js +0 -167
- package/dist/src/core/furnace-config.d.ts +0 -139
- package/dist/src/core/furnace-config.js +0 -511
- package/dist/src/core/furnace-constants.d.ts +0 -81
- package/dist/src/core/furnace-constants.js +0 -125
- package/dist/src/core/furnace-css-fragments.d.ts +0 -96
- package/dist/src/core/furnace-css-fragments.js +0 -279
- package/dist/src/core/furnace-deploy-owner.d.ts +0 -29
- package/dist/src/core/furnace-deploy-owner.js +0 -116
- package/dist/src/core/furnace-dir-entry.d.ts +0 -20
- package/dist/src/core/furnace-dir-entry.js +0 -21
- package/dist/src/core/furnace-fragment-includers.d.ts +0 -56
- package/dist/src/core/furnace-fragment-includers.js +0 -122
- package/dist/src/core/furnace-graph-utils.d.ts +0 -11
- package/dist/src/core/furnace-graph-utils.js +0 -93
- package/dist/src/core/furnace-jsconfig.d.ts +0 -87
- package/dist/src/core/furnace-jsconfig.js +0 -248
- package/dist/src/core/furnace-marker.d.ts +0 -15
- package/dist/src/core/furnace-marker.js +0 -21
- package/dist/src/core/furnace-operation.d.ts +0 -195
- package/dist/src/core/furnace-operation.js +0 -444
- package/dist/src/core/furnace-precondition.d.ts +0 -61
- package/dist/src/core/furnace-precondition.js +0 -67
- package/dist/src/core/furnace-refresh.d.ts +0 -28
- package/dist/src/core/furnace-refresh.js +0 -125
- package/dist/src/core/furnace-registration-ast.d.ts +0 -53
- package/dist/src/core/furnace-registration-ast.js +0 -402
- package/dist/src/core/furnace-registration-jar-inplace.d.ts +0 -12
- package/dist/src/core/furnace-registration-jar-inplace.js +0 -79
- package/dist/src/core/furnace-registration-remove.d.ts +0 -56
- package/dist/src/core/furnace-registration-remove.js +0 -260
- package/dist/src/core/furnace-registration-rename.d.ts +0 -26
- package/dist/src/core/furnace-registration-rename.js +0 -77
- package/dist/src/core/furnace-registration-validate.d.ts +0 -53
- package/dist/src/core/furnace-registration-validate.js +0 -110
- package/dist/src/core/furnace-registration.d.ts +0 -112
- package/dist/src/core/furnace-registration.js +0 -348
- package/dist/src/core/furnace-rollback.d.ts +0 -48
- package/dist/src/core/furnace-rollback.js +0 -170
- package/dist/src/core/furnace-scanner.d.ts +0 -47
- package/dist/src/core/furnace-scanner.js +0 -236
- package/dist/src/core/furnace-stale-export.d.ts +0 -60
- package/dist/src/core/furnace-stale-export.js +0 -125
- package/dist/src/core/furnace-staleness.d.ts +0 -24
- package/dist/src/core/furnace-staleness.js +0 -67
- package/dist/src/core/furnace-state-persist.d.ts +0 -68
- package/dist/src/core/furnace-state-persist.js +0 -116
- package/dist/src/core/furnace-step-errors.d.ts +0 -23
- package/dist/src/core/furnace-step-errors.js +0 -25
- package/dist/src/core/furnace-stories.d.ts +0 -37
- package/dist/src/core/furnace-stories.js +0 -186
- package/dist/src/core/furnace-tag-map.d.ts +0 -47
- package/dist/src/core/furnace-tag-map.js +0 -182
- package/dist/src/core/furnace-validate-accessibility.d.ts +0 -39
- package/dist/src/core/furnace-validate-accessibility.js +0 -417
- package/dist/src/core/furnace-validate-checks.d.ts +0 -4
- package/dist/src/core/furnace-validate-checks.js +0 -6
- package/dist/src/core/furnace-validate-compatibility.d.ts +0 -6
- package/dist/src/core/furnace-validate-compatibility.js +0 -295
- package/dist/src/core/furnace-validate-exceptions.d.ts +0 -49
- package/dist/src/core/furnace-validate-exceptions.js +0 -98
- package/dist/src/core/furnace-validate-helpers.d.ts +0 -7
- package/dist/src/core/furnace-validate-helpers.js +0 -4
- package/dist/src/core/furnace-validate-icon-button.d.ts +0 -7
- package/dist/src/core/furnace-validate-icon-button.js +0 -78
- package/dist/src/core/furnace-validate-registration.d.ts +0 -67
- package/dist/src/core/furnace-validate-registration.js +0 -487
- package/dist/src/core/furnace-validate-structure.d.ts +0 -22
- package/dist/src/core/furnace-validate-structure.js +0 -122
- package/dist/src/core/furnace-validate.d.ts +0 -41
- package/dist/src/core/furnace-validate.js +0 -331
- package/dist/src/core/furnace-version-drift.d.ts +0 -57
- package/dist/src/core/furnace-version-drift.js +0 -102
- package/dist/src/core/gecko-dom-types.d.ts +0 -2
- package/dist/src/core/gecko-dom-types.js +0 -17
- package/dist/src/core/git-base.d.ts +0 -101
- package/dist/src/core/git-base.js +0 -162
- package/dist/src/core/git-diff-new-file.d.ts +0 -40
- package/dist/src/core/git-diff-new-file.js +0 -118
- package/dist/src/core/git-diff.d.ts +0 -82
- package/dist/src/core/git-diff.js +0 -539
- package/dist/src/core/git-file-ops.d.ts +0 -108
- package/dist/src/core/git-file-ops.js +0 -280
- package/dist/src/core/git-readonly-index.d.ts +0 -91
- package/dist/src/core/git-readonly-index.js +0 -177
- package/dist/src/core/git-status.d.ts +0 -84
- package/dist/src/core/git-status.js +0 -208
- package/dist/src/core/git.d.ts +0 -114
- package/dist/src/core/git.js +0 -540
- package/dist/src/core/harness-helper-pids.d.ts +0 -98
- package/dist/src/core/harness-helper-pids.js +0 -240
- package/dist/src/core/harness-orphans.d.ts +0 -118
- package/dist/src/core/harness-orphans.js +0 -268
- package/dist/src/core/harness-port-fallback.d.ts +0 -60
- package/dist/src/core/harness-port-fallback.js +0 -96
- package/dist/src/core/harness-port-reservation.d.ts +0 -60
- package/dist/src/core/harness-port-reservation.js +0 -122
- package/dist/src/core/history-log-file.d.ts +0 -61
- package/dist/src/core/history-log-file.js +0 -164
- package/dist/src/core/history-log.d.ts +0 -20
- package/dist/src/core/history-log.js +0 -30
- package/dist/src/core/json-preserving-edit.d.ts +0 -22
- package/dist/src/core/json-preserving-edit.js +0 -199
- package/dist/src/core/launchable-build.d.ts +0 -39
- package/dist/src/core/launchable-build.js +0 -85
- package/dist/src/core/license-headers.d.ts +0 -103
- package/dist/src/core/license-headers.js +0 -328
- package/dist/src/core/line-prefixer.d.ts +0 -18
- package/dist/src/core/line-prefixer.js +0 -34
- package/dist/src/core/lit-template-regions.d.ts +0 -4
- package/dist/src/core/lit-template-regions.js +0 -50
- package/dist/src/core/mach-build-artifacts.d.ts +0 -176
- package/dist/src/core/mach-build-artifacts.js +0 -436
- package/dist/src/core/mach-error-hints.d.ts +0 -24
- package/dist/src/core/mach-error-hints.js +0 -135
- package/dist/src/core/mach-known-noise-filter.d.ts +0 -122
- package/dist/src/core/mach-known-noise-filter.js +0 -257
- package/dist/src/core/mach-mozconfig.d.ts +0 -57
- package/dist/src/core/mach-mozconfig.js +0 -166
- package/dist/src/core/mach-python.d.ts +0 -19
- package/dist/src/core/mach-python.js +0 -131
- package/dist/src/core/mach-resource-shim.d.ts +0 -107
- package/dist/src/core/mach-resource-shim.js +0 -640
- package/dist/src/core/mach.d.ts +0 -284
- package/dist/src/core/mach.js +0 -445
- package/dist/src/core/marionette-port.d.ts +0 -153
- package/dist/src/core/marionette-port.js +0 -474
- package/dist/src/core/marionette-preflight.d.ts +0 -58
- package/dist/src/core/marionette-preflight.js +0 -332
- package/dist/src/core/markdown-table.d.ts +0 -104
- package/dist/src/core/markdown-table.js +0 -265
- package/dist/src/core/mochitest-server-port.d.ts +0 -81
- package/dist/src/core/mochitest-server-port.js +0 -175
- package/dist/src/core/module-resolution-preflight.d.ts +0 -65
- package/dist/src/core/module-resolution-preflight.js +0 -171
- package/dist/src/core/moz-manifest-helpers.d.ts +0 -79
- package/dist/src/core/moz-manifest-helpers.js +0 -163
- package/dist/src/core/moz-manifest-register.d.ts +0 -19
- package/dist/src/core/moz-manifest-register.js +0 -51
- package/dist/src/core/moz-manifest-rules.d.ts +0 -58
- package/dist/src/core/moz-manifest-rules.js +0 -264
- package/dist/src/core/moz-manifest-tokenizers.d.ts +0 -38
- package/dist/src/core/moz-manifest-tokenizers.js +0 -108
- package/dist/src/core/negative-control-compiled.d.ts +0 -46
- package/dist/src/core/negative-control-compiled.js +0 -109
- package/dist/src/core/negative-control-diff.d.ts +0 -51
- package/dist/src/core/negative-control-diff.js +0 -167
- package/dist/src/core/negative-control.d.ts +0 -150
- package/dist/src/core/negative-control.js +0 -399
- package/dist/src/core/objdir-install-manifests.d.ts +0 -73
- package/dist/src/core/objdir-install-manifests.js +0 -226
- package/dist/src/core/objdir-maintenance.d.ts +0 -10
- package/dist/src/core/objdir-maintenance.js +0 -167
- package/dist/src/core/ownership-table.d.ts +0 -53
- package/dist/src/core/ownership-table.js +0 -159
- package/dist/src/core/parent-exit-watchdog.d.ts +0 -62
- package/dist/src/core/parent-exit-watchdog.js +0 -69
- package/dist/src/core/park-store.d.ts +0 -63
- package/dist/src/core/park-store.js +0 -216
- package/dist/src/core/parser-fallback.d.ts +0 -50
- package/dist/src/core/parser-fallback.js +0 -61
- package/dist/src/core/patch-apply-fuzz.d.ts +0 -57
- package/dist/src/core/patch-apply-fuzz.js +0 -125
- package/dist/src/core/patch-apply.d.ts +0 -88
- package/dist/src/core/patch-apply.js +0 -435
- package/dist/src/core/patch-export-coverage.d.ts +0 -49
- package/dist/src/core/patch-export-coverage.js +0 -73
- package/dist/src/core/patch-export-metadata.d.ts +0 -46
- package/dist/src/core/patch-export-metadata.js +0 -47
- package/dist/src/core/patch-export-update.d.ts +0 -55
- package/dist/src/core/patch-export-update.js +0 -95
- package/dist/src/core/patch-export.d.ts +0 -175
- package/dist/src/core/patch-export.js +0 -312
- package/dist/src/core/patch-files.d.ts +0 -17
- package/dist/src/core/patch-files.js +0 -59
- package/dist/src/core/patch-identifier-suggest.d.ts +0 -26
- package/dist/src/core/patch-identifier-suggest.js +0 -135
- package/dist/src/core/patch-lint-binary.d.ts +0 -45
- package/dist/src/core/patch-lint-binary.js +0 -39
- package/dist/src/core/patch-lint-cache-checkjs.d.ts +0 -45
- package/dist/src/core/patch-lint-cache-checkjs.js +0 -195
- package/dist/src/core/patch-lint-cache.d.ts +0 -79
- package/dist/src/core/patch-lint-cache.js +0 -247
- package/dist/src/core/patch-lint-checkjs-any-import.d.ts +0 -57
- package/dist/src/core/patch-lint-checkjs-any-import.js +0 -91
- package/dist/src/core/patch-lint-checkjs-cache.d.ts +0 -18
- package/dist/src/core/patch-lint-checkjs-cache.js +0 -45
- package/dist/src/core/patch-lint-checkjs-diagnostics.d.ts +0 -17
- package/dist/src/core/patch-lint-checkjs-diagnostics.js +0 -32
- package/dist/src/core/patch-lint-checkjs-resolve.d.ts +0 -31
- package/dist/src/core/patch-lint-checkjs-resolve.js +0 -86
- package/dist/src/core/patch-lint-checkjs.d.ts +0 -182
- package/dist/src/core/patch-lint-checkjs.js +0 -563
- package/dist/src/core/patch-lint-chrome-jsdoc.d.ts +0 -43
- package/dist/src/core/patch-lint-chrome-jsdoc.js +0 -90
- package/dist/src/core/patch-lint-code-lines.d.ts +0 -59
- package/dist/src/core/patch-lint-code-lines.js +0 -105
- package/dist/src/core/patch-lint-creators.d.ts +0 -26
- package/dist/src/core/patch-lint-creators.js +0 -45
- package/dist/src/core/patch-lint-cross.d.ts +0 -232
- package/dist/src/core/patch-lint-cross.js +0 -590
- package/dist/src/core/patch-lint-css.d.ts +0 -27
- package/dist/src/core/patch-lint-css.js +0 -228
- package/dist/src/core/patch-lint-diff-tag.d.ts +0 -51
- package/dist/src/core/patch-lint-diff-tag.js +0 -105
- package/dist/src/core/patch-lint-diff.d.ts +0 -42
- package/dist/src/core/patch-lint-diff.js +0 -100
- package/dist/src/core/patch-lint-file-size.d.ts +0 -57
- package/dist/src/core/patch-lint-file-size.js +0 -62
- package/dist/src/core/patch-lint-forward-registration-extended.d.ts +0 -61
- package/dist/src/core/patch-lint-forward-registration-extended.js +0 -265
- package/dist/src/core/patch-lint-forward-registration.d.ts +0 -71
- package/dist/src/core/patch-lint-forward-registration.js +0 -266
- package/dist/src/core/patch-lint-ignore.d.ts +0 -196
- package/dist/src/core/patch-lint-ignore.js +0 -429
- package/dist/src/core/patch-lint-imports.d.ts +0 -9
- package/dist/src/core/patch-lint-imports.js +0 -90
- package/dist/src/core/patch-lint-jsdoc.d.ts +0 -67
- package/dist/src/core/patch-lint-jsdoc.js +0 -471
- package/dist/src/core/patch-lint-module-registration.d.ts +0 -22
- package/dist/src/core/patch-lint-module-registration.js +0 -97
- package/dist/src/core/patch-lint-mozbuild.d.ts +0 -18
- package/dist/src/core/patch-lint-mozbuild.js +0 -192
- package/dist/src/core/patch-lint-observer.d.ts +0 -37
- package/dist/src/core/patch-lint-observer.js +0 -167
- package/dist/src/core/patch-lint-ownership.d.ts +0 -74
- package/dist/src/core/patch-lint-ownership.js +0 -125
- package/dist/src/core/patch-lint-prettier.d.ts +0 -34
- package/dist/src/core/patch-lint-prettier.js +0 -124
- package/dist/src/core/patch-lint-projection.d.ts +0 -25
- package/dist/src/core/patch-lint-projection.js +0 -43
- package/dist/src/core/patch-lint-queue-types.d.ts +0 -60
- package/dist/src/core/patch-lint-queue-types.js +0 -12
- package/dist/src/core/patch-lint-size-thresholds.d.ts +0 -52
- package/dist/src/core/patch-lint-size-thresholds.js +0 -110
- package/dist/src/core/patch-lint-size.d.ts +0 -117
- package/dist/src/core/patch-lint-size.js +0 -331
- package/dist/src/core/patch-lint-staged-registration.d.ts +0 -98
- package/dist/src/core/patch-lint-staged-registration.js +0 -128
- package/dist/src/core/patch-lint-token-scale.d.ts +0 -65
- package/dist/src/core/patch-lint-token-scale.js +0 -304
- package/dist/src/core/patch-lint-unmanaged-companion.d.ts +0 -106
- package/dist/src/core/patch-lint-unmanaged-companion.js +0 -214
- package/dist/src/core/patch-lint.d.ts +0 -206
- package/dist/src/core/patch-lint.js +0 -533
- package/dist/src/core/patch-lock.d.ts +0 -40
- package/dist/src/core/patch-lock.js +0 -129
- package/dist/src/core/patch-manifest-consistency.d.ts +0 -95
- package/dist/src/core/patch-manifest-consistency.js +0 -256
- package/dist/src/core/patch-manifest-files-affected.d.ts +0 -43
- package/dist/src/core/patch-manifest-files-affected.js +0 -77
- package/dist/src/core/patch-manifest-io.d.ts +0 -199
- package/dist/src/core/patch-manifest-io.js +0 -556
- package/dist/src/core/patch-manifest-key-order.d.ts +0 -23
- package/dist/src/core/patch-manifest-key-order.js +0 -60
- package/dist/src/core/patch-manifest-query.d.ts +0 -55
- package/dist/src/core/patch-manifest-query.js +0 -139
- package/dist/src/core/patch-manifest-resolve.d.ts +0 -21
- package/dist/src/core/patch-manifest-resolve.js +0 -35
- package/dist/src/core/patch-manifest-stage.d.ts +0 -46
- package/dist/src/core/patch-manifest-stage.js +0 -96
- package/dist/src/core/patch-manifest-validate.d.ts +0 -20
- package/dist/src/core/patch-manifest-validate.js +0 -240
- package/dist/src/core/patch-manifest.d.ts +0 -12
- package/dist/src/core/patch-manifest.js +0 -13
- package/dist/src/core/patch-order-legal.d.ts +0 -26
- package/dist/src/core/patch-order-legal.js +0 -88
- package/dist/src/core/patch-parse.d.ts +0 -176
- package/dist/src/core/patch-parse.js +0 -416
- package/dist/src/core/patch-policy-content.d.ts +0 -40
- package/dist/src/core/patch-policy-content.js +0 -219
- package/dist/src/core/patch-policy.d.ts +0 -80
- package/dist/src/core/patch-policy.js +0 -394
- package/dist/src/core/patch-registration-refs.d.ts +0 -41
- package/dist/src/core/patch-registration-refs.js +0 -107
- package/dist/src/core/patch-retired.d.ts +0 -57
- package/dist/src/core/patch-retired.js +0 -92
- package/dist/src/core/patch-source-metadata.d.ts +0 -6
- package/dist/src/core/patch-source-metadata.js +0 -12
- package/dist/src/core/patch-subset.d.ts +0 -18
- package/dist/src/core/patch-subset.js +0 -67
- package/dist/src/core/patch-transform.d.ts +0 -61
- package/dist/src/core/patch-transform.js +0 -198
- package/dist/src/core/preflight-wait.d.ts +0 -22
- package/dist/src/core/preflight-wait.js +0 -62
- package/dist/src/core/process-cpu-time.d.ts +0 -12
- package/dist/src/core/process-cpu-time.js +0 -52
- package/dist/src/core/process-owner.d.ts +0 -9
- package/dist/src/core/process-owner.js +0 -43
- package/dist/src/core/rebase-dry-run.d.ts +0 -48
- package/dist/src/core/rebase-dry-run.js +0 -105
- package/dist/src/core/rebase-from-version.d.ts +0 -46
- package/dist/src/core/rebase-from-version.js +0 -71
- package/dist/src/core/rebase-session.d.ts +0 -100
- package/dist/src/core/rebase-session.js +0 -174
- package/dist/src/core/register-browser-content.d.ts +0 -11
- package/dist/src/core/register-browser-content.js +0 -52
- package/dist/src/core/register-browser-test.d.ts +0 -18
- package/dist/src/core/register-browser-test.js +0 -66
- package/dist/src/core/register-module.d.ts +0 -11
- package/dist/src/core/register-module.js +0 -56
- package/dist/src/core/register-result.d.ts +0 -30
- package/dist/src/core/register-result.js +0 -8
- package/dist/src/core/register-scaffold.d.ts +0 -55
- package/dist/src/core/register-scaffold.js +0 -146
- package/dist/src/core/register-shared-css.d.ts +0 -36
- package/dist/src/core/register-shared-css.js +0 -112
- package/dist/src/core/register-xpcshell-test.d.ts +0 -50
- package/dist/src/core/register-xpcshell-test.js +0 -143
- package/dist/src/core/run-log-redact.d.ts +0 -38
- package/dist/src/core/run-log-redact.js +0 -69
- package/dist/src/core/run-log.d.ts +0 -97
- package/dist/src/core/run-log.js +0 -334
- package/dist/src/core/run-profile.d.ts +0 -57
- package/dist/src/core/run-profile.js +0 -137
- package/dist/src/core/shared-ftl.d.ts +0 -28
- package/dist/src/core/shared-ftl.js +0 -49
- package/dist/src/core/signal-critical.d.ts +0 -38
- package/dist/src/core/signal-critical.js +0 -62
- package/dist/src/core/smoke-patterns.d.ts +0 -81
- package/dist/src/core/smoke-patterns.js +0 -176
- package/dist/src/core/state-file.d.ts +0 -60
- package/dist/src/core/state-file.js +0 -71
- package/dist/src/core/status-binary.d.ts +0 -62
- package/dist/src/core/status-binary.js +0 -133
- package/dist/src/core/status-classify.d.ts +0 -96
- package/dist/src/core/status-classify.js +0 -244
- package/dist/src/core/test-changed-prefs.d.ts +0 -30
- package/dist/src/core/test-changed-prefs.js +0 -93
- package/dist/src/core/test-harness-crash.d.ts +0 -251
- package/dist/src/core/test-harness-crash.js +0 -780
- package/dist/src/core/test-harness-infra.d.ts +0 -32
- package/dist/src/core/test-harness-infra.js +0 -69
- package/dist/src/core/test-harness-output.d.ts +0 -45
- package/dist/src/core/test-harness-output.js +0 -119
- package/dist/src/core/test-harness-signature.d.ts +0 -57
- package/dist/src/core/test-harness-signature.js +0 -35
- package/dist/src/core/test-harness-verdict-notes.d.ts +0 -54
- package/dist/src/core/test-harness-verdict-notes.js +0 -48
- package/dist/src/core/test-host-state.d.ts +0 -14
- package/dist/src/core/test-host-state.js +0 -80
- package/dist/src/core/test-path-scope.d.ts +0 -59
- package/dist/src/core/test-path-scope.js +0 -147
- package/dist/src/core/test-profile-files.d.ts +0 -17
- package/dist/src/core/test-profile-files.js +0 -75
- package/dist/src/core/test-raw-log.d.ts +0 -66
- package/dist/src/core/test-raw-log.js +0 -122
- package/dist/src/core/test-run-completeness.d.ts +0 -97
- package/dist/src/core/test-run-completeness.js +0 -191
- package/dist/src/core/test-stale-check.d.ts +0 -213
- package/dist/src/core/test-stale-check.js +0 -396
- package/dist/src/core/test-stale-exempt.d.ts +0 -40
- package/dist/src/core/test-stale-exempt.js +0 -70
- package/dist/src/core/test-stale-symlink.d.ts +0 -12
- package/dist/src/core/test-stale-symlink.js +0 -39
- package/dist/src/core/test-stall-triage.d.ts +0 -51
- package/dist/src/core/test-stall-triage.js +0 -142
- package/dist/src/core/test-xpcshell-retry.d.ts +0 -35
- package/dist/src/core/test-xpcshell-retry.js +0 -31
- package/dist/src/core/token-category.d.ts +0 -54
- package/dist/src/core/token-category.js +0 -299
- package/dist/src/core/token-coverage.d.ts +0 -12
- package/dist/src/core/token-coverage.js +0 -96
- package/dist/src/core/token-dark-mode.d.ts +0 -64
- package/dist/src/core/token-dark-mode.js +0 -186
- package/dist/src/core/token-docs.d.ts +0 -34
- package/dist/src/core/token-docs.js +0 -102
- package/dist/src/core/token-inventory.d.ts +0 -56
- package/dist/src/core/token-inventory.js +0 -114
- package/dist/src/core/token-lint.d.ts +0 -53
- package/dist/src/core/token-lint.js +0 -131
- package/dist/src/core/token-manager.d.ts +0 -87
- package/dist/src/core/token-manager.js +0 -407
- package/dist/src/core/token-scaffold.d.ts +0 -36
- package/dist/src/core/token-scaffold.js +0 -73
- package/dist/src/core/token-sibling-sheets.d.ts +0 -46
- package/dist/src/core/token-sibling-sheets.js +0 -119
- package/dist/src/core/token-variant.d.ts +0 -90
- package/dist/src/core/token-variant.js +0 -327
- package/dist/src/core/toolchain-preflight.d.ts +0 -90
- package/dist/src/core/toolchain-preflight.js +0 -251
- package/dist/src/core/tree-cow.d.ts +0 -16
- package/dist/src/core/tree-cow.js +0 -71
- package/dist/src/core/tree-guard.d.ts +0 -35
- package/dist/src/core/tree-guard.js +0 -194
- package/dist/src/core/tree-store.d.ts +0 -143
- package/dist/src/core/tree-store.js +0 -478
- package/dist/src/core/typecheck-explain.d.ts +0 -93
- package/dist/src/core/typecheck-explain.js +0 -213
- package/dist/src/core/typecheck-shim.d.ts +0 -90
- package/dist/src/core/typecheck-shim.js +0 -508
- package/dist/src/core/typecheck.d.ts +0 -97
- package/dist/src/core/typecheck.js +0 -457
- package/dist/src/core/wire-destroy.d.ts +0 -25
- package/dist/src/core/wire-destroy.js +0 -126
- package/dist/src/core/wire-dom-fragment.d.ts +0 -44
- package/dist/src/core/wire-dom-fragment.js +0 -139
- package/dist/src/core/wire-init.d.ts +0 -28
- package/dist/src/core/wire-init.js +0 -219
- package/dist/src/core/wire-subscript.d.ts +0 -23
- package/dist/src/core/wire-subscript.js +0 -145
- package/dist/src/core/wire-utils.d.ts +0 -149
- package/dist/src/core/wire-utils.js +0 -338
- package/dist/src/core/xpcshell-appdir.d.ts +0 -157
- package/dist/src/core/xpcshell-appdir.js +0 -299
- package/dist/src/core/xpcshell-profile-dir.d.ts +0 -12
- package/dist/src/core/xpcshell-profile-dir.js +0 -45
- package/dist/src/errors/base.d.ts +0 -217
- package/dist/src/errors/base.js +0 -279
- package/dist/src/errors/build.d.ts +0 -92
- package/dist/src/errors/build.js +0 -166
- package/dist/src/errors/codes.d.ts +0 -74
- package/dist/src/errors/codes.js +0 -74
- package/dist/src/errors/config.d.ts +0 -17
- package/dist/src/errors/config.js +0 -39
- package/dist/src/errors/download.d.ts +0 -66
- package/dist/src/errors/download.js +0 -160
- package/dist/src/errors/furnace.d.ts +0 -20
- package/dist/src/errors/furnace.js +0 -28
- package/dist/src/errors/git.d.ts +0 -65
- package/dist/src/errors/git.js +0 -140
- package/dist/src/errors/patch.d.ts +0 -27
- package/dist/src/errors/patch.js +0 -52
- package/dist/src/errors/rebase.d.ts +0 -42
- package/dist/src/errors/rebase.js +0 -71
- package/dist/src/errors/run.d.ts +0 -16
- package/dist/src/errors/run.js +0 -22
- package/dist/src/index.d.ts +0 -42
- package/dist/src/index.js +0 -32
- package/dist/src/types/cli.d.ts +0 -14
- package/dist/src/types/commands/index.d.ts +0 -6
- package/dist/src/types/commands/index.js +0 -5
- package/dist/src/types/commands/options.d.ts +0 -1372
- package/dist/src/types/commands/options.js +0 -5
- package/dist/src/types/commands/patches.d.ts +0 -352
- package/dist/src/types/commands/patches.js +0 -5
- package/dist/src/types/commands/project.d.ts +0 -51
- package/dist/src/types/commands/project.js +0 -5
- package/dist/src/types/config.d.ts +0 -732
- package/dist/src/types/config.js +0 -15
- package/dist/src/types/furnace.d.ts +0 -422
- package/dist/src/types/furnace.js +0 -26
- package/dist/src/types/index.d.ts +0 -5
- package/dist/src/types/index.js +0 -5
- package/dist/src/types/json.d.ts +0 -22
- package/dist/src/types/json.js +0 -11
- package/dist/src/types/typecheck.d.ts +0 -51
- package/dist/src/types/typecheck.js +0 -14
- package/dist/src/utils/assert.d.ts +0 -34
- package/dist/src/utils/assert.js +0 -61
- package/dist/src/utils/build-info.d.ts +0 -30
- package/dist/src/utils/build-info.js +0 -99
- package/dist/src/utils/child-env.d.ts +0 -28
- package/dist/src/utils/child-env.js +0 -27
- package/dist/src/utils/concurrency.d.ts +0 -8
- package/dist/src/utils/concurrency.js +0 -32
- package/dist/src/utils/elapsed.d.ts +0 -2
- package/dist/src/utils/elapsed.js +0 -23
- package/dist/src/utils/errors.d.ts +0 -39
- package/dist/src/utils/errors.js +0 -67
- package/dist/src/utils/fs.d.ts +0 -113
- package/dist/src/utils/fs.js +0 -337
- package/dist/src/utils/hash.d.ts +0 -12
- package/dist/src/utils/hash.js +0 -16
- package/dist/src/utils/line-dispatch.d.ts +0 -15
- package/dist/src/utils/line-dispatch.js +0 -48
- package/dist/src/utils/logger.d.ts +0 -109
- package/dist/src/utils/logger.js +0 -270
- package/dist/src/utils/machine-output.d.ts +0 -12
- package/dist/src/utils/machine-output.js +0 -33
- package/dist/src/utils/options.d.ts +0 -155
- package/dist/src/utils/options.js +0 -312
- package/dist/src/utils/package-root.d.ts +0 -21
- package/dist/src/utils/package-root.js +0 -70
- package/dist/src/utils/parse.d.ts +0 -117
- package/dist/src/utils/parse.js +0 -214
- package/dist/src/utils/path-glob.d.ts +0 -15
- package/dist/src/utils/path-glob.js +0 -47
- package/dist/src/utils/paths.d.ts +0 -31
- package/dist/src/utils/paths.js +0 -80
- package/dist/src/utils/platform.d.ts +0 -9
- package/dist/src/utils/platform.js +0 -14
- package/dist/src/utils/process-group.d.ts +0 -42
- package/dist/src/utils/process-group.js +0 -190
- package/dist/src/utils/process-input.d.ts +0 -27
- package/dist/src/utils/process-input.js +0 -46
- package/dist/src/utils/process.d.ts +0 -293
- package/dist/src/utils/process.js +0 -593
- package/dist/src/utils/ps-duration.d.ts +0 -31
- package/dist/src/utils/ps-duration.js +0 -70
- package/dist/src/utils/regex.d.ts +0 -39
- package/dist/src/utils/regex.js +0 -109
- package/dist/src/utils/sleep.d.ts +0 -25
- package/dist/src/utils/sleep.js +0 -30
- package/dist/src/utils/stdio-drain.d.ts +0 -28
- package/dist/src/utils/stdio-drain.js +0 -54
- package/dist/src/utils/validation.d.ts +0 -182
- package/dist/src/utils/validation.js +0 -394
- package/docs/lifecycle-invariants.md +0 -523
- package/docs/run-logs.md +0 -122
- package/docs/verification-trees.md +0 -49
- /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
|
-
#
|
|
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
|
-
|
|
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
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
`
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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
|
-
|
|
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
|
-
|
|
389
|
-
|
|
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
|
|
393
|
-
|
|
394
|
-
|
|
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
|
|
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
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
and
|
|
529
|
-
|
|
530
|
-
|
|
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
|
-
|
|
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
|
-
|
|
597
|
-
is
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
The
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
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.
|