@hominis/fireforge 0.54.0 → 0.60.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +287 -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 -438
- 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 -332
- 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 -420
- package/dist/src/commands/setup.js +78 -90
- package/dist/src/commands/status.js +44 -413
- package/dist/src/commands/test.js +97 -422
- package/dist/src/commands/token.js +185 -228
- package/dist/src/commands/typecheck.js +59 -208
- 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 -692
- package/docs/exit-codes.md +76 -94
- package/docs/furnace.md +113 -181
- package/docs/gate.md +205 -0
- package/docs/getting-started.md +165 -0
- package/docs/machine-output.md +201 -277
- package/docs/migrating.md +261 -0
- package/docs/patch-workflow.md +163 -653
- package/docs/quality.md +220 -0
- package/docs/source-workflow.md +228 -0
- package/docs/testing.md +101 -712
- 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 -91
- package/dist/src/commands/check-run.d.ts +0 -33
- package/dist/src/commands/check-run.js +0 -112
- 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 -218
- 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 -282
- 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/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 -52
- 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 -261
- 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 -117
- package/dist/src/commands/patch/staged-dependency-validate.d.ts +0 -15
- package/dist/src/commands/patch/staged-dependency-validate.js +0 -49
- package/dist/src/commands/patch/staged-dependency.d.ts +0 -22
- package/dist/src/commands/patch/staged-dependency.js +0 -248
- 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 -267
- 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-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 -35
- package/dist/src/commands/re-export-hunks.js +0 -220
- 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 -191
- 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 -39
- package/dist/src/commands/re-export-single.js +0 -388
- 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 -28
- package/dist/src/commands/re-export-summary.js +0 -36
- 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 -29
- package/dist/src/commands/test-build-phase.js +0 -290
- 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 -63
- package/dist/src/commands/test-orchestrate.js +0 -274
- 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 -52
- package/dist/src/commands/test-stale-gate.js +0 -165
- package/dist/src/commands/test-verdict.d.ts +0 -92
- package/dist/src/commands/test-verdict.js +0 -162
- 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.d.ts +0 -56
- 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 -274
- 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 -92
- package/dist/src/core/config-validate.d.ts +0 -11
- package/dist/src/core/config-validate.js +0 -503
- 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/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 -62
- package/dist/src/core/furnace-apply-overwrite-warn.js +0 -124
- 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 -146
- 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 -79
- package/dist/src/core/furnace-constants.js +0 -123
- 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-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 -61
- package/dist/src/core/furnace-jsconfig.js +0 -208
- 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-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 -302
- 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 -318
- 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 -204
- 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.d.ts +0 -78
- package/dist/src/core/patch-lint-cache.js +0 -233
- package/dist/src/core/patch-lint-checkjs-any-import.d.ts +0 -39
- package/dist/src/core/patch-lint-checkjs-any-import.js +0 -63
- 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.d.ts +0 -180
- package/dist/src/core/patch-lint-checkjs.js +0 -611
- 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 -5
- package/dist/src/core/patch-lint-imports.js +0 -67
- 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 -78
- package/dist/src/core/patch-lint-staged-registration.js +0 -110
- package/dist/src/core/patch-lint-token-scale.d.ts +0 -57
- package/dist/src/core/patch-lint-token-scale.js +0 -286
- 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 -191
- package/dist/src/core/patch-lint.js +0 -529
- 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 -161
- package/dist/src/core/patch-parse.js +0 -347
- package/dist/src/core/patch-policy-content.d.ts +0 -40
- package/dist/src/core/patch-policy-content.js +0 -216
- 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-shim.d.ts +0 -90
- package/dist/src/core/typecheck-shim.js +0 -507
- package/dist/src/core/typecheck.d.ts +0 -75
- package/dist/src/core/typecheck.js +0 -433
- 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 -1367
- 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 -703
- package/dist/src/types/config.js +0 -15
- package/dist/src/types/furnace.d.ts +0 -415
- 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
|
@@ -0,0 +1,826 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Markers. Each reads only at the position the harness writes it, so a test
|
|
3
|
+
// that logs a marker-shaped line changes nothing.
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
/**
|
|
6
|
+
* What may precede a marker on a line the harness wrote: an instance label
|
|
7
|
+
* (`[job 2] `), mozlog's elapsed time, a mochitest line counter, a log level
|
|
8
|
+
* and xpcshell's `INFO | `. A test's own output reaches the log behind
|
|
9
|
+
* `console.log:`, `GECKO(n)` or similar, so a marker it prints never sits here.
|
|
10
|
+
*/
|
|
11
|
+
const HARNESS_LINE_PREFIX = String.raw `^[ \t]*(?:\[[^\]\n]*\][ \t]+)?(?:\d+:\d+(?:\.\d+)?[ \t]+)*(?:\d+[ \t]+)?(?:(?:INFO|WARNING|ERROR|CRITICAL|DEBUG)[ \t]+){0,2}(?:\|[ \t]+)?`;
|
|
12
|
+
const harnessLine = (body, flags = 'm') => new RegExp(`${HARNESS_LINE_PREFIX}${body}`, flags);
|
|
13
|
+
/** A start marker that names a test; mochitest's `TEST-START | Shutdown` announces its own teardown. */
|
|
14
|
+
const EXECUTION_START = harnessLine(String.raw `TEST[-_]START\b(?![:| \t]*Shutdown[ \t]*$)`);
|
|
15
|
+
const SUITE_END = harnessLine(String.raw `SUITE_END\b`);
|
|
16
|
+
const GREEN_UNEXPECTED = harnessLine(String.raw `Unexpected results:[ \t]*0+\b`);
|
|
17
|
+
const NONZERO_UNEXPECTED = harnessLine(String.raw `Unexpected results:[ \t]*0*[1-9]`);
|
|
18
|
+
const NONZERO_FAILED = harnessLine(String.raw `(?:Passed:[ \t]*\d+[ \t]*/[ \t]*)?Failed:[ \t]*0*[1-9]\d*[ \t]*$`);
|
|
19
|
+
const POSITIVE_PASSED = harnessLine(String.raw `Passed:[ \t]*0*[1-9]\d*\b`);
|
|
20
|
+
const ZERO_PASSED = harnessLine(String.raw `Passed:[ \t]*0+\b`);
|
|
21
|
+
/**
|
|
22
|
+
* The suite-specific xpcshell dispatch prints no start lines, but its result
|
|
23
|
+
* block proves tests ran. `Ran 0 checks` is the no-output hang's spelling, so
|
|
24
|
+
* only a positive count counts.
|
|
25
|
+
*/
|
|
26
|
+
const XPCSHELL_RESULT_SUMMARY = harnessLine(String.raw `(?:TEST_END\b|Ran [1-9]\d* checks?\b|Result summary:)`, 'im');
|
|
27
|
+
const START_MARKER = harnessLine(String.raw `TEST[-_]START\b[:| \t]*(\S+)?`);
|
|
28
|
+
const END_MARKER = harnessLine(String.raw `(?:TEST_END\b|TEST-OK\b)`);
|
|
29
|
+
const SKIP_MARKER = harnessLine(String.raw `TEST[-_]SKIP(?:PED)?\b[:| \t]*(\S+)?`);
|
|
30
|
+
/** Basename shape of a test file a manifest lists. */
|
|
31
|
+
const TEST_FILE_BASENAME = /^(?:browser|test)_.*\.m?js$/;
|
|
32
|
+
const lines = (text) => text.split(/\r?\n/);
|
|
33
|
+
function findLine(output, patterns) {
|
|
34
|
+
for (const line of lines(output)) {
|
|
35
|
+
if (patterns.some((pattern) => pattern.test(line)))
|
|
36
|
+
return line.trim();
|
|
37
|
+
}
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* The test a start line names, or undefined for any other line and for the
|
|
42
|
+
* harness's own `TEST-START | Shutdown`.
|
|
43
|
+
*
|
|
44
|
+
* @param line - One output line
|
|
45
|
+
*/
|
|
46
|
+
function parseStartMarker(line) {
|
|
47
|
+
const match = START_MARKER.exec(line);
|
|
48
|
+
if (match === null)
|
|
49
|
+
return undefined;
|
|
50
|
+
return match[1] === 'Shutdown' ? undefined : { name: match[1] };
|
|
51
|
+
}
|
|
52
|
+
function recordMarker(line, into) {
|
|
53
|
+
const start = parseStartMarker(line)?.name;
|
|
54
|
+
if (start !== undefined) {
|
|
55
|
+
into.started.push(start);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const skip = SKIP_MARKER.exec(line)?.[1];
|
|
59
|
+
if (skip !== undefined)
|
|
60
|
+
into.skipped.push(skip);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Collects start and skip markers line by line as output streams, so a run
|
|
64
|
+
* whose captured text lost its beginning can still be counted. It grows with
|
|
65
|
+
* the file count, not the output size.
|
|
66
|
+
*/
|
|
67
|
+
export function createMarkerTracker() {
|
|
68
|
+
const collected = { started: [], skipped: [] };
|
|
69
|
+
return {
|
|
70
|
+
line: (line) => {
|
|
71
|
+
recordMarker(line, collected);
|
|
72
|
+
},
|
|
73
|
+
markers: () => ({ started: [...collected.started], skipped: [...collected.skipped] }),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function scanMarkers(output) {
|
|
77
|
+
const markers = { started: [], skipped: [] };
|
|
78
|
+
for (const line of lines(output))
|
|
79
|
+
recordMarker(line, markers);
|
|
80
|
+
return markers;
|
|
81
|
+
}
|
|
82
|
+
function lastCount(output, pattern) {
|
|
83
|
+
let last;
|
|
84
|
+
for (const match of output.matchAll(pattern)) {
|
|
85
|
+
if (match[1] !== undefined)
|
|
86
|
+
last = Number.parseInt(match[1], 10);
|
|
87
|
+
}
|
|
88
|
+
return last;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* The counts of the embedded summary. The last occurrence of each wins: a
|
|
92
|
+
* multi-suite run prints one summary per suite.
|
|
93
|
+
*
|
|
94
|
+
* @param output - Captured harness output
|
|
95
|
+
*/
|
|
96
|
+
export function extractSummaryCounts(output) {
|
|
97
|
+
const checks = lastCount(output, harnessLine(String.raw `Ran (\d+) checks?\b`, 'gm'));
|
|
98
|
+
const unexpected = lastCount(output, harnessLine(String.raw `Unexpected results:[ \t]*(\d+)\b`, 'gm'));
|
|
99
|
+
return {
|
|
100
|
+
...(checks === undefined ? {} : { checks }),
|
|
101
|
+
...(unexpected === undefined ? {} : { unexpected }),
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
function lastSuiteEndOffset(output) {
|
|
105
|
+
let last = -1;
|
|
106
|
+
for (const match of output.matchAll(new RegExp(SUITE_END.source, 'gm')))
|
|
107
|
+
last = match.index;
|
|
108
|
+
return last;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Cross-checks starts and ends: every requested test file must start, and
|
|
112
|
+
* every start must end. Ends pair with starts positionally, because the
|
|
113
|
+
* xpcshell dialect's `TEST_END: Test PASS` names no file. A requested path
|
|
114
|
+
* that is not test-file shaped (a directory, a manifest) has no start of its own.
|
|
115
|
+
*
|
|
116
|
+
* @param output - Captured output, which may keep only the tail of a long run
|
|
117
|
+
* @param requested - Dispatched paths
|
|
118
|
+
* @param streamedStarts - Start names seen in the complete stream
|
|
119
|
+
*/
|
|
120
|
+
export function analyzeTestCompleteness(output, requested, streamedStarts = []) {
|
|
121
|
+
const startedNames = [...streamedStarts];
|
|
122
|
+
const open = [];
|
|
123
|
+
for (const line of lines(output)) {
|
|
124
|
+
const start = parseStartMarker(line);
|
|
125
|
+
if (start !== undefined) {
|
|
126
|
+
const name = start.name ?? '(unnamed test)';
|
|
127
|
+
startedNames.push(name);
|
|
128
|
+
open.push(name);
|
|
129
|
+
}
|
|
130
|
+
else if (END_MARKER.test(line)) {
|
|
131
|
+
open.pop();
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
const neverStarted = requested.filter((path) => {
|
|
135
|
+
const base = path.slice(path.lastIndexOf('/') + 1);
|
|
136
|
+
return TEST_FILE_BASENAME.test(base) && !startedNames.some((name) => name.includes(base));
|
|
137
|
+
});
|
|
138
|
+
return { neverStarted, neverEnded: open };
|
|
139
|
+
}
|
|
140
|
+
// ---------------------------------------------------------------------------
|
|
141
|
+
// Noise: output that never decides a verdict by itself.
|
|
142
|
+
// ---------------------------------------------------------------------------
|
|
143
|
+
/**
|
|
144
|
+
* The resource guard FireForge installs into mach (`engine/resourceGuard.ts`)
|
|
145
|
+
* substitutes `_DegradedReading` for a psutil reading that fails. These
|
|
146
|
+
* errors mean a consumer used that stand-in in a way it does not support:
|
|
147
|
+
* the monitor crashed, so the harness may not have run.
|
|
148
|
+
*/
|
|
149
|
+
const DEGRADED_READING = [
|
|
150
|
+
/'_DegradedReading' object is not subscriptable/,
|
|
151
|
+
/'_DegradedReading' object is not iterable/,
|
|
152
|
+
];
|
|
153
|
+
/**
|
|
154
|
+
* Upstream mozsystemmonitor and psutil failing to read host statistics
|
|
155
|
+
* (macOS's `host_statistics64` among them). They come from mach's resource
|
|
156
|
+
* monitoring, never from a test, so they explain a harness failure.
|
|
157
|
+
*/
|
|
158
|
+
const STARTUP_TRACEBACK = [
|
|
159
|
+
/AttributeError:.*SystemResourceMonitor/,
|
|
160
|
+
/'SystemResourceMonitor' object has no attribute/,
|
|
161
|
+
/poll_interval/,
|
|
162
|
+
/host_statistics64/,
|
|
163
|
+
/HOST_VM_INFO64/,
|
|
164
|
+
/\(ipc\/mig\) array not large enough/,
|
|
165
|
+
/psutil\.[A-Za-z]*Error/,
|
|
166
|
+
// mach's resource report at exit, when the monitor collected nothing.
|
|
167
|
+
/AttributeError: 'NoneType' object has no attribute 'read_bytes'/,
|
|
168
|
+
...DEGRADED_READING,
|
|
169
|
+
];
|
|
170
|
+
/**
|
|
171
|
+
* Warnings the resource monitor and the FireForge resource guard print when
|
|
172
|
+
* monitoring degrades. Monitoring is outside the harness, so they are never
|
|
173
|
+
* crash evidence.
|
|
174
|
+
*/
|
|
175
|
+
const NOISE_LINES = [
|
|
176
|
+
/\bUserWarning\b/,
|
|
177
|
+
/psutil failed to run/i,
|
|
178
|
+
// A `_collect` failure naming `_DegradedReading` is the crash above, not a warning.
|
|
179
|
+
/_collect failed(?!.*_DegradedReading)/i,
|
|
180
|
+
/FireForge: host resource monitor degraded/i,
|
|
181
|
+
/warnings\.warn\(/,
|
|
182
|
+
/failed to read the received data/i,
|
|
183
|
+
];
|
|
184
|
+
/** Output that can own a non-zero exit on a suite that finished green. */
|
|
185
|
+
const RECOGNIZED_EXIT_NOISE = [...STARTUP_TRACEBACK, ...NOISE_LINES];
|
|
186
|
+
/** A traceback mach caught and printed while submitting telemetry never aborts a run. */
|
|
187
|
+
const BENIGN_TRACEBACK_CONTEXT = /telemetry|glean/i;
|
|
188
|
+
const TRACEBACK = /Traceback \(most recent call last\)/;
|
|
189
|
+
const NO_OUTPUT_TIMEOUT = /timed out after \d+ seconds with no output/i;
|
|
190
|
+
const FOCUS_STALL = /must wait for focus/i;
|
|
191
|
+
const SHUTDOWN_REENTRY = /Application shut down \(without crashing\) in the middle of a test/i;
|
|
192
|
+
/**
|
|
193
|
+
* mozsystemmonitor's teardown failure: stopping a monitor that never started
|
|
194
|
+
* raises an `AttributeError` on `stop_time` or `poll_interval` from
|
|
195
|
+
* `resourcemonitor.py`. It happens after the tests, in mach's own
|
|
196
|
+
* bookkeeping, so it is benign. Another attribute, or a traceback from
|
|
197
|
+
* another file, is something else and is not excused.
|
|
198
|
+
*/
|
|
199
|
+
const MONITOR_TEARDOWN_ERROR = /AttributeError: 'SystemResourceMonitor' object has no attribute '(?:stop_time|poll_interval)'/;
|
|
200
|
+
const RESOURCEMONITOR_FRAME = /mozsystemmonitor[/\\]resourcemonitor\.py/;
|
|
201
|
+
const hasMonitorTeardownNoise = (output) => MONITOR_TEARDOWN_ERROR.test(output) && RESOURCEMONITOR_FRAME.test(output);
|
|
202
|
+
function scanNoise(output) {
|
|
203
|
+
const all = lines(output);
|
|
204
|
+
const kept = [];
|
|
205
|
+
let benignTracebacks = 0;
|
|
206
|
+
for (let index = 0; index < all.length; index += 1) {
|
|
207
|
+
const line = all[index] ?? '';
|
|
208
|
+
if (NOISE_LINES.some((pattern) => pattern.test(line)))
|
|
209
|
+
continue;
|
|
210
|
+
if (TRACEBACK.test(line)) {
|
|
211
|
+
// The block: the header, indented frames, and the unindented exception line.
|
|
212
|
+
const block = [line];
|
|
213
|
+
let end = index + 1;
|
|
214
|
+
for (; end < all.length; end += 1) {
|
|
215
|
+
const next = all[end] ?? '';
|
|
216
|
+
block.push(next);
|
|
217
|
+
if (!/^\s/.test(next) && next.trim().length > 0)
|
|
218
|
+
break;
|
|
219
|
+
}
|
|
220
|
+
if (BENIGN_TRACEBACK_CONTEXT.test(block.join('\n'))) {
|
|
221
|
+
benignTracebacks += 1;
|
|
222
|
+
index = end;
|
|
223
|
+
continue;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
kept.push(line);
|
|
227
|
+
}
|
|
228
|
+
return { kept, benignTracebacks };
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* The output without degradation chatter and caught telemetry tracebacks:
|
|
232
|
+
* crash evidence only. Test results are always read from the full output.
|
|
233
|
+
*
|
|
234
|
+
* @param output - Captured harness output
|
|
235
|
+
*/
|
|
236
|
+
export function stripNonSignalNoise(output) {
|
|
237
|
+
return scanNoise(output).kept.join('\n');
|
|
238
|
+
}
|
|
239
|
+
const hasRecognizedExitNoise = (output) => findLine(output, RECOGNIZED_EXIT_NOISE) !== undefined || scanNoise(output).benignTracebacks > 0;
|
|
240
|
+
// ---------------------------------------------------------------------------
|
|
241
|
+
// Failure and crash evidence.
|
|
242
|
+
// ---------------------------------------------------------------------------
|
|
243
|
+
/** Lines mozcrash and the harness print when the browser itself died. */
|
|
244
|
+
const CRASH_MARKERS = [
|
|
245
|
+
/Main app process: killed by SIG\w+/,
|
|
246
|
+
/\bPROCESS-CRASH\b/,
|
|
247
|
+
/mozcrash.*minidump/i,
|
|
248
|
+
/Crash dump filename/i,
|
|
249
|
+
/Thread \d+ \(crashed\)/,
|
|
250
|
+
];
|
|
251
|
+
const UNEXPECTED_LINES = /^.*\bTEST-UNEXPECTED-[A-Z-]+\b.*$/gm;
|
|
252
|
+
/** A harness `FAIL` token; `TEST-KNOWN-FAIL` is an expected failure and prose is not a token. */
|
|
253
|
+
const FAIL_LINES = /^.*\bTEST-(?!KNOWN-FAIL\b)[A-Z-]*FAIL\b.*$/gm;
|
|
254
|
+
/** The three shapes Gecko prints for an assertion failure; the English word does not count. */
|
|
255
|
+
const ASSERTION_LINES = /^.*(?:Assertion failure:|MOZ_ASSERT\(|###!!! ASSERTION).*$/gm;
|
|
256
|
+
const UNEXPECTED_MARKER = /\bTEST-UNEXPECTED-[A-Z-]+\b/;
|
|
257
|
+
/** Lines the harnesses print under an unexpected line: Got/Expected, Assert text, diffs, stacks. */
|
|
258
|
+
const FAILURE_CONTEXT = /^(?:\s*(?:Got\b|Expected\b|Actual\b|Assert\w*\b|Stack trace:|[-+]\s)|\s{2,}\S)/;
|
|
259
|
+
const FAILURE_CONTEXT_LIMIT = 6;
|
|
260
|
+
/** Harness lines that say what a run waited on or which ports it held. */
|
|
261
|
+
const STARTUP_CONTEXT = /\bport \d{2,5}\b|Waiting for browser|Marionette/i;
|
|
262
|
+
/** A mochitest server that never came up: the httpd's bind failure, and the wait for it. */
|
|
263
|
+
const SERVER_STARTUP_FAILURE = [
|
|
264
|
+
/could not start server on port \d+/,
|
|
265
|
+
/Timed out while waiting for server startup/,
|
|
266
|
+
];
|
|
267
|
+
/**
|
|
268
|
+
* The first crash-marker line, or undefined when the run shows no crash.
|
|
269
|
+
*
|
|
270
|
+
* @param output - Captured harness output, never noise-stripped
|
|
271
|
+
*/
|
|
272
|
+
export function findCrashMarkerLine(output) {
|
|
273
|
+
return findLine(output, CRASH_MARKERS);
|
|
274
|
+
}
|
|
275
|
+
function realFailureLines(output) {
|
|
276
|
+
const matches = [
|
|
277
|
+
...(output.match(UNEXPECTED_LINES) ?? []),
|
|
278
|
+
...(output.match(FAIL_LINES) ?? []),
|
|
279
|
+
...(output.match(ASSERTION_LINES) ?? []),
|
|
280
|
+
];
|
|
281
|
+
const summary = lines(output).find((line) => NONZERO_UNEXPECTED.test(line));
|
|
282
|
+
if (summary !== undefined)
|
|
283
|
+
matches.push(summary);
|
|
284
|
+
return [...new Set(matches.map((line) => line.trim()))].filter((line) => !SHUTDOWN_REENTRY.test(line));
|
|
285
|
+
}
|
|
286
|
+
const hasExecutionSignal = (output) => EXECUTION_START.test(output) || XPCSHELL_RESULT_SUMMARY.test(output);
|
|
287
|
+
/** Summary lines that look green, blind to crash and truncation evidence. */
|
|
288
|
+
const hasGreenShapedSummary = (output) => hasExecutionSignal(output) &&
|
|
289
|
+
SUITE_END.test(output) &&
|
|
290
|
+
GREEN_UNEXPECTED.test(output) &&
|
|
291
|
+
!NONZERO_UNEXPECTED.test(output) &&
|
|
292
|
+
!NONZERO_FAILED.test(output) &&
|
|
293
|
+
realFailureLines(output).length === 0;
|
|
294
|
+
/**
|
|
295
|
+
* Whether the output embeds a completed green suite with no crash marker.
|
|
296
|
+
* Such a suite finished, so startup-shaped noise in it was not fatal.
|
|
297
|
+
*
|
|
298
|
+
* @param output - Captured harness output
|
|
299
|
+
*/
|
|
300
|
+
export function hasCompletedGreenSummary(output) {
|
|
301
|
+
return hasGreenShapedSummary(output) && findCrashMarkerLine(output) === undefined;
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* The first `limit` unexpected lines, each with its assertion context, and a
|
|
305
|
+
* final note when more were left out.
|
|
306
|
+
*
|
|
307
|
+
* @param output - Captured harness output
|
|
308
|
+
* @param limit - How many blocks to keep
|
|
309
|
+
*/
|
|
310
|
+
export function collectFailureBlocks(output, limit = 5) {
|
|
311
|
+
const all = lines(output);
|
|
312
|
+
const blocks = [];
|
|
313
|
+
let skipped = 0;
|
|
314
|
+
for (let index = 0; index < all.length; index += 1) {
|
|
315
|
+
const line = all[index] ?? '';
|
|
316
|
+
if (!UNEXPECTED_MARKER.test(line) || SHUTDOWN_REENTRY.test(line))
|
|
317
|
+
continue;
|
|
318
|
+
if (blocks.length >= limit) {
|
|
319
|
+
skipped += 1;
|
|
320
|
+
continue;
|
|
321
|
+
}
|
|
322
|
+
const block = [line.trim()];
|
|
323
|
+
for (let next = index + 1; next < all.length && block.length <= FAILURE_CONTEXT_LIMIT; next++) {
|
|
324
|
+
const candidate = all[next] ?? '';
|
|
325
|
+
if (UNEXPECTED_MARKER.test(candidate) || !FAILURE_CONTEXT.test(candidate))
|
|
326
|
+
break;
|
|
327
|
+
block.push(candidate.trimEnd());
|
|
328
|
+
}
|
|
329
|
+
blocks.push(block.join('\n'));
|
|
330
|
+
}
|
|
331
|
+
if (skipped > 0) {
|
|
332
|
+
blocks.push(`…(+${skipped} more TEST-UNEXPECTED line${skipped === 1 ? '' : 's'} not shown)`);
|
|
333
|
+
}
|
|
334
|
+
return blocks;
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* The recognized harness failures, in the order they are tried. A browser
|
|
338
|
+
* crash marker is never one of them: it is a test result, and the
|
|
339
|
+
* classifier reports it with the files it cut off.
|
|
340
|
+
*/
|
|
341
|
+
const SIGNATURE_RULES = [
|
|
342
|
+
{
|
|
343
|
+
// Only a run with no test failure: a failing run's traceback may be the test's own.
|
|
344
|
+
reason: 'harness startup traceback (resource monitor/psutil)',
|
|
345
|
+
applies: (e) => !e.greenVeto && e.realFailures.length === 0 && TRACEBACK.test(e.stripped),
|
|
346
|
+
line: (e) => findLine(e.stripped, STARTUP_TRACEBACK),
|
|
347
|
+
},
|
|
348
|
+
{
|
|
349
|
+
// mach logs this one without a traceback header.
|
|
350
|
+
reason: 'degraded resource reading crashed the harness fallback (_DegradedReading)',
|
|
351
|
+
applies: (e) => !e.ranTests && e.realFailures.length === 0,
|
|
352
|
+
line: (e) => findLine(e.stripped, DEGRADED_READING),
|
|
353
|
+
},
|
|
354
|
+
{
|
|
355
|
+
// A trailing `Passed: 0` summary is part of this shape.
|
|
356
|
+
reason: 'no-output timeout before any test started',
|
|
357
|
+
applies: (e) => !e.ranTests,
|
|
358
|
+
line: (e) => findLine(e.stripped, [NO_OUTPUT_TIMEOUT]),
|
|
359
|
+
},
|
|
360
|
+
{
|
|
361
|
+
reason: 'a configured harness failure pattern matched before any test started',
|
|
362
|
+
applies: (e) => !e.ranTests && e.failurePatterns.length > 0,
|
|
363
|
+
line: (e) => findLine(e.output, e.failurePatterns),
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
// Every unexpected line is the shutdown artifact, on a run that stalled on focus.
|
|
367
|
+
reason: 'post-green shutdown re-entry during harness teardown',
|
|
368
|
+
applies: (e) => e.ranTests && e.realFailures.length === 0 && FOCUS_STALL.test(e.output),
|
|
369
|
+
line: (e) => findLine(e.output, [SHUTDOWN_REENTRY]),
|
|
370
|
+
},
|
|
371
|
+
];
|
|
372
|
+
/**
|
|
373
|
+
* The recognized harness failure in captured output, or undefined for
|
|
374
|
+
* anything that reads as a test result.
|
|
375
|
+
*
|
|
376
|
+
* @param output - Captured harness output
|
|
377
|
+
* @param failurePatterns - Lines that mean the browser never came up (`test.harnessFailurePatterns`)
|
|
378
|
+
*/
|
|
379
|
+
export function detectCrashSignature(output, failurePatterns = []) {
|
|
380
|
+
if (findCrashMarkerLine(output) !== undefined)
|
|
381
|
+
return undefined;
|
|
382
|
+
const evidence = {
|
|
383
|
+
output,
|
|
384
|
+
stripped: stripNonSignalNoise(output),
|
|
385
|
+
ranTests: hasExecutionSignal(output),
|
|
386
|
+
realFailures: realFailureLines(output),
|
|
387
|
+
greenVeto: hasCompletedGreenSummary(output),
|
|
388
|
+
failurePatterns,
|
|
389
|
+
};
|
|
390
|
+
for (const rule of SIGNATURE_RULES) {
|
|
391
|
+
if (!rule.applies(evidence))
|
|
392
|
+
continue;
|
|
393
|
+
const line = rule.line(evidence);
|
|
394
|
+
if (line === undefined)
|
|
395
|
+
continue;
|
|
396
|
+
const signature = { reason: rule.reason, line };
|
|
397
|
+
if (rule.reason.startsWith('no-output timeout')) {
|
|
398
|
+
const context = lines(evidence.stripped)
|
|
399
|
+
.filter((candidate) => STARTUP_CONTEXT.test(candidate))
|
|
400
|
+
.slice(0, 5)
|
|
401
|
+
.map((candidate) => candidate.trim());
|
|
402
|
+
if (context.length > 0)
|
|
403
|
+
signature.harnessLines = context;
|
|
404
|
+
}
|
|
405
|
+
return signature;
|
|
406
|
+
}
|
|
407
|
+
return undefined;
|
|
408
|
+
}
|
|
409
|
+
function secondaryNoise(output) {
|
|
410
|
+
const evidence = stripNonSignalNoise(output);
|
|
411
|
+
const traceback = TRACEBACK.test(evidence) ? findLine(evidence, STARTUP_TRACEBACK) : undefined;
|
|
412
|
+
if (traceback !== undefined) {
|
|
413
|
+
return { reason: 'harness traceback also present (resource monitor/psutil)', line: traceback };
|
|
414
|
+
}
|
|
415
|
+
const timeout = findLine(evidence, [NO_OUTPUT_TIMEOUT]);
|
|
416
|
+
return timeout === undefined
|
|
417
|
+
? undefined
|
|
418
|
+
: { reason: 'harness no-output timeout also present', line: timeout };
|
|
419
|
+
}
|
|
420
|
+
/** Exit values meaning the harness was killed: `128 + n`, a negated signal, a relayed SIGKILL or SIGTERM. */
|
|
421
|
+
const isSignalExit = (exitCode) => exitCode < 0 || exitCode > 128 || exitCode === 9 || exitCode === 15;
|
|
422
|
+
/** Caps an evidence line so a one-line note stays one line. */
|
|
423
|
+
function truncateEvidence(line) {
|
|
424
|
+
const flat = line.trim().replace(/\s+/g, ' ');
|
|
425
|
+
return flat.length <= 80 ? flat : `${flat.slice(0, 80)}…`;
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* Why a non-zero exit cannot be blamed on harness noise: a signal death, a
|
|
429
|
+
* traceback after the last suite that no recognized signature explains, or
|
|
430
|
+
* no recognized noise at all.
|
|
431
|
+
*/
|
|
432
|
+
function unexplainedExit(exitCode, output) {
|
|
433
|
+
if (exitCode === 0)
|
|
434
|
+
return undefined;
|
|
435
|
+
if (isSignalExit(exitCode))
|
|
436
|
+
return `the harness died on a signal (exit ${exitCode})`;
|
|
437
|
+
const lastSuiteEnd = lastSuiteEndOffset(output);
|
|
438
|
+
const afterSuite = stripNonSignalNoise(lastSuiteEnd < 0 ? '' : output.slice(lastSuiteEnd));
|
|
439
|
+
const traceback = /Traceback \(most recent call last\)[\s\S]*/.exec(afterSuite)?.[0];
|
|
440
|
+
if (traceback !== undefined && findLine(traceback, RECOGNIZED_EXIT_NOISE) === undefined) {
|
|
441
|
+
const exception = lines(traceback).find((line, index) => index > 0 && line.length > 0 && !/^\s/.test(line));
|
|
442
|
+
return `a traceback followed the last suite summary: ${truncateEvidence(exception ?? traceback)}`;
|
|
443
|
+
}
|
|
444
|
+
return hasRecognizedExitNoise(output)
|
|
445
|
+
? undefined
|
|
446
|
+
: `exit ${exitCode} has no recognized noise signature to account for it`;
|
|
447
|
+
}
|
|
448
|
+
/**
|
|
449
|
+
* Whether a clean suite whose only residue is mozsystemmonitor's teardown
|
|
450
|
+
* failure passes. Every condition must hold; the first that fails is named, but only
|
|
451
|
+
* when the teardown noise was present, since otherwise the run was never a
|
|
452
|
+
* candidate.
|
|
453
|
+
*/
|
|
454
|
+
function judgeTeardownNoise(output, counts, realFailures, requested, started) {
|
|
455
|
+
if (!hasMonitorTeardownNoise(output))
|
|
456
|
+
return { accepted: false };
|
|
457
|
+
const completeness = analyzeTestCompleteness(output, requested, started);
|
|
458
|
+
const checks = [
|
|
459
|
+
[hasExecutionSignal(output), () => 'no execution signal (no TEST-START/TEST_START)'],
|
|
460
|
+
[counts.checks !== undefined, () => 'summary printed no "Ran N checks" line'],
|
|
461
|
+
[counts.checks !== 0, () => 'summary reported zero checks'],
|
|
462
|
+
[counts.unexpected !== undefined, () => 'summary printed no "Unexpected results:" line'],
|
|
463
|
+
[
|
|
464
|
+
counts.unexpected === undefined || counts.unexpected === 0,
|
|
465
|
+
() => `summary reported unexpected=${counts.unexpected ?? 0}`,
|
|
466
|
+
],
|
|
467
|
+
[
|
|
468
|
+
!NONZERO_UNEXPECTED.test(output),
|
|
469
|
+
() => 'a non-zero "Unexpected results:" line is present somewhere in the output',
|
|
470
|
+
],
|
|
471
|
+
[
|
|
472
|
+
!NONZERO_FAILED.test(output),
|
|
473
|
+
() => 'a non-zero "Failed:" line is present somewhere in the output',
|
|
474
|
+
],
|
|
475
|
+
[
|
|
476
|
+
realFailures.length === 0,
|
|
477
|
+
() => `${realFailures.length} matched failure line(s), first: ${truncateEvidence(realFailures[0] ?? '')}`,
|
|
478
|
+
],
|
|
479
|
+
[
|
|
480
|
+
findCrashMarkerLine(output) === undefined,
|
|
481
|
+
() => `crash marker present: ${truncateEvidence(findCrashMarkerLine(output) ?? '')}`,
|
|
482
|
+
],
|
|
483
|
+
[!SHUTDOWN_REENTRY.test(output), () => 'post-green shutdown re-entry shape present'],
|
|
484
|
+
[
|
|
485
|
+
completeness.neverStarted.length === 0,
|
|
486
|
+
() => `requested file(s) never started: ${completeness.neverStarted.join(', ')}`,
|
|
487
|
+
],
|
|
488
|
+
[
|
|
489
|
+
completeness.neverEnded.length === 0,
|
|
490
|
+
() => `requested file(s) never ended: ${completeness.neverEnded.join(', ')}`,
|
|
491
|
+
],
|
|
492
|
+
];
|
|
493
|
+
const failed = checks.find(([holds]) => !holds);
|
|
494
|
+
return failed === undefined ? { accepted: true } : { accepted: false, rejectedBy: failed[1]() };
|
|
495
|
+
}
|
|
496
|
+
/** The verdict of an exit-0 run with no failure evidence: a pass only when it shows it completed. */
|
|
497
|
+
function judgeExitZero(output, counts, requested, raw) {
|
|
498
|
+
if (raw !== undefined) {
|
|
499
|
+
return raw.suiteCompleted
|
|
500
|
+
? { kind: 'pass', ...counts }
|
|
501
|
+
: {
|
|
502
|
+
kind: 'crash',
|
|
503
|
+
signature: {
|
|
504
|
+
reason: 'the raw log has no completed suite',
|
|
505
|
+
line: 'exit 0, with no suite_end for the last suite_start',
|
|
506
|
+
},
|
|
507
|
+
...counts,
|
|
508
|
+
};
|
|
509
|
+
}
|
|
510
|
+
const positive = (counts.checks ?? 0) > 0 || POSITIVE_PASSED.test(output);
|
|
511
|
+
if (!positive && ZERO_PASSED.test(output))
|
|
512
|
+
return { kind: 'no-tests', ...counts };
|
|
513
|
+
const completed = SUITE_END.test(output) || counts.unexpected !== undefined;
|
|
514
|
+
if (!positive || !completed) {
|
|
515
|
+
return {
|
|
516
|
+
kind: 'crash',
|
|
517
|
+
signature: {
|
|
518
|
+
reason: 'the harness exited 0 without a completed suite summary',
|
|
519
|
+
line: positive ? 'no SUITE_END or results summary' : 'no positive check count',
|
|
520
|
+
},
|
|
521
|
+
...counts,
|
|
522
|
+
};
|
|
523
|
+
}
|
|
524
|
+
const { neverEnded } = analyzeTestCompleteness(output, requested);
|
|
525
|
+
return neverEnded.length > 0
|
|
526
|
+
? { kind: 'test-failures', ...counts, greenSummaryRejected: { neverStarted: [], neverEnded } }
|
|
527
|
+
: { kind: 'pass', ...counts };
|
|
528
|
+
}
|
|
529
|
+
/**
|
|
530
|
+
* Classifies a finished dispatch, in this order:
|
|
531
|
+
*
|
|
532
|
+
* 1. A clean suite whose only residue is mozsystemmonitor's teardown failure passes.
|
|
533
|
+
* 2. A recognized harness failure is a crash, whatever the exit code.
|
|
534
|
+
* 3. No execution signal for requested paths: a server that failed to start
|
|
535
|
+
* is a crash (`server-startup`), anything else `no-tests`. A summary that
|
|
536
|
+
* counted zero checks is `no-tests` too.
|
|
537
|
+
* 4. Exit 0 without failure evidence passes only when the run shows it
|
|
538
|
+
* completed.
|
|
539
|
+
* 5. A non-zero exit whose summary completed green passes when recognized
|
|
540
|
+
* noise explains the exit and no file was cut off; any crash marker,
|
|
541
|
+
* unstarted or unfinished file, signal death or unexplained traceback
|
|
542
|
+
* rejects that summary.
|
|
543
|
+
* 6. Anything else is `test-failures`.
|
|
544
|
+
*
|
|
545
|
+
* @param exitCode - The harness exit status
|
|
546
|
+
* @param output - Its output, both streams
|
|
547
|
+
* @param requested - The dispatched paths
|
|
548
|
+
* @param evidence - See {@link DispatchEvidence}
|
|
549
|
+
*/
|
|
550
|
+
export function classifyHarnessRun(exitCode, output, requested, evidence = {}) {
|
|
551
|
+
const { raw, started } = evidence;
|
|
552
|
+
const counts = extractSummaryCounts(output);
|
|
553
|
+
const realFailures = realFailureLines(output);
|
|
554
|
+
const firstFailure = realFailures[0] ??
|
|
555
|
+
findCrashMarkerLine(output) ??
|
|
556
|
+
findLine(output, [NONZERO_UNEXPECTED, NONZERO_FAILED]);
|
|
557
|
+
const teardown = isSignalExit(exitCode)
|
|
558
|
+
? { accepted: false }
|
|
559
|
+
: judgeTeardownNoise(output, counts, realFailures, requested, started);
|
|
560
|
+
if (teardown.accepted)
|
|
561
|
+
return { kind: 'pass', note: 'teardown-noise-ignored', ...counts };
|
|
562
|
+
const withNote = noter(teardown.rejectedBy);
|
|
563
|
+
const signature = detectCrashSignature(output, evidence.failurePatterns);
|
|
564
|
+
if (signature !== undefined)
|
|
565
|
+
return withNote({ kind: 'crash', signature, ...counts });
|
|
566
|
+
const ranTests = hasExecutionSignal(output) || (raw?.results.length ?? 0) > 0;
|
|
567
|
+
if (!ranTests && requested.length > 0)
|
|
568
|
+
return nothingRan(output, counts);
|
|
569
|
+
if (counts.checks === 0 && firstFailure === undefined) {
|
|
570
|
+
return withNote({ kind: 'no-tests', ...counts });
|
|
571
|
+
}
|
|
572
|
+
// A non-zero unexpected or failed summary is itself a first failure.
|
|
573
|
+
if (exitCode === 0 && firstFailure === undefined) {
|
|
574
|
+
const judged = judgeExitZero(output, counts, requested, raw);
|
|
575
|
+
return judged.kind === 'pass' ? judged : withNote(judged);
|
|
576
|
+
}
|
|
577
|
+
const failure = { ...counts, ...failureKeys(output, firstFailure) };
|
|
578
|
+
if (hasGreenShapedSummary(output)) {
|
|
579
|
+
const rejection = rejectGreenSummary(exitCode, output, requested, started);
|
|
580
|
+
return rejection === undefined
|
|
581
|
+
? { kind: 'pass', greenSummaryOverride: true, ...counts }
|
|
582
|
+
: withNote({ kind: 'test-failures', ...failure, greenSummaryRejected: rejection });
|
|
583
|
+
}
|
|
584
|
+
// `unexpected=0` beside a red rests on pattern matching, not a harness result: say so.
|
|
585
|
+
const unmarked = counts.unexpected === 0 &&
|
|
586
|
+
realFailures.length > 0 &&
|
|
587
|
+
!realFailures.some((line) => UNEXPECTED_MARKER.test(line))
|
|
588
|
+
? 'summary reported 0 unexpected; no TEST-UNEXPECTED marker in the matched evidence'
|
|
589
|
+
: undefined;
|
|
590
|
+
return withNote({ kind: 'test-failures', ...failure }, unmarked);
|
|
591
|
+
}
|
|
592
|
+
/** Adds the rejected teardown override, and any further note, to a failing verdict. */
|
|
593
|
+
function noter(rejectedBy) {
|
|
594
|
+
return (verdict, extra) => {
|
|
595
|
+
const notes = [
|
|
596
|
+
rejectedBy === undefined ? undefined : `green-teardown override rejected: ${rejectedBy}`,
|
|
597
|
+
extra,
|
|
598
|
+
].filter((note) => note !== undefined);
|
|
599
|
+
return notes.length > 0 ? { ...verdict, note: notes.join('; ') } : verdict;
|
|
600
|
+
};
|
|
601
|
+
}
|
|
602
|
+
/** The evidence a failing verdict carries. */
|
|
603
|
+
function failureKeys(output, firstFailure) {
|
|
604
|
+
const blocks = collectFailureBlocks(output);
|
|
605
|
+
const secondary = firstFailure === undefined ? undefined : secondaryNoise(output);
|
|
606
|
+
return {
|
|
607
|
+
...(firstFailure === undefined ? {} : { failureLine: firstFailure }),
|
|
608
|
+
...(blocks.length > 0 ? { failureBlocks: blocks } : {}),
|
|
609
|
+
...(secondary === undefined ? {} : { secondary }),
|
|
610
|
+
};
|
|
611
|
+
}
|
|
612
|
+
/** No test ran: a mochitest server that never came up is infrastructure, anything else `no-tests`. */
|
|
613
|
+
function nothingRan(output, counts) {
|
|
614
|
+
const line = findLine(output, SERVER_STARTUP_FAILURE);
|
|
615
|
+
if (line === undefined)
|
|
616
|
+
return { kind: 'no-tests', ...counts };
|
|
617
|
+
return {
|
|
618
|
+
kind: 'crash',
|
|
619
|
+
signature: {
|
|
620
|
+
reason: 'mochitest server failed to start (server-startup)',
|
|
621
|
+
line,
|
|
622
|
+
verdictReason: 'server-startup',
|
|
623
|
+
},
|
|
624
|
+
...counts,
|
|
625
|
+
};
|
|
626
|
+
}
|
|
627
|
+
/** Why a green-shaped summary does not speak for the run, or undefined when it does. */
|
|
628
|
+
function rejectGreenSummary(exitCode, output, requested, started) {
|
|
629
|
+
const crashLine = findCrashMarkerLine(output);
|
|
630
|
+
const { neverStarted, neverEnded } = analyzeTestCompleteness(output, requested, started);
|
|
631
|
+
const exitEvidence = unexplainedExit(exitCode, output);
|
|
632
|
+
if (crashLine === undefined &&
|
|
633
|
+
neverStarted.length === 0 &&
|
|
634
|
+
neverEnded.length === 0 &&
|
|
635
|
+
exitEvidence === undefined) {
|
|
636
|
+
return undefined;
|
|
637
|
+
}
|
|
638
|
+
return {
|
|
639
|
+
...(crashLine === undefined ? {} : { crashLine }),
|
|
640
|
+
...(exitEvidence === undefined ? {} : { exitEvidence }),
|
|
641
|
+
neverStarted,
|
|
642
|
+
neverEnded,
|
|
643
|
+
};
|
|
644
|
+
}
|
|
645
|
+
const SIGSEGV_EXITS = new Set([-11, 139]);
|
|
646
|
+
/**
|
|
647
|
+
* Whether a harness died on SIGSEGV without producing any evidence: no
|
|
648
|
+
* execution signal, no failure line, no crash marker. A module loader that
|
|
649
|
+
* faults on an unregistered `.sys.mjs` leaves exactly this.
|
|
650
|
+
*
|
|
651
|
+
* @param exitCode - The harness exit status
|
|
652
|
+
* @param output - Its output
|
|
653
|
+
*/
|
|
654
|
+
export function isSilentSegfault(exitCode, output) {
|
|
655
|
+
return (SIGSEGV_EXITS.has(exitCode) &&
|
|
656
|
+
!hasExecutionSignal(output) &&
|
|
657
|
+
realFailureLines(output).length === 0 &&
|
|
658
|
+
findCrashMarkerLine(output) === undefined);
|
|
659
|
+
}
|
|
660
|
+
// ---------------------------------------------------------------------------
|
|
661
|
+
// Completeness: a would-be pass is re-examined against what the run recorded.
|
|
662
|
+
// ---------------------------------------------------------------------------
|
|
663
|
+
const normalized = (path) => path.replace(/\\/g, '/');
|
|
664
|
+
const basenameOf = (path) => path.slice(path.lastIndexOf('/') + 1);
|
|
665
|
+
const namesSameFile = (name, request) => name === request || name.endsWith(`/${request}`) || request.endsWith(`/${name}`);
|
|
666
|
+
const namesNoTestFile = (path) => !TEST_FILE_BASENAME.test(basenameOf(normalized(path)));
|
|
667
|
+
/** The requested indexes some name names unambiguously; a name matching two requests counts for neither. */
|
|
668
|
+
function namedIndexes(names, requested) {
|
|
669
|
+
const named = new Set();
|
|
670
|
+
for (const name of names) {
|
|
671
|
+
const matches = requested.flatMap((request, index) => namesSameFile(normalized(name), request) ? [index] : []);
|
|
672
|
+
if (matches.length === 1)
|
|
673
|
+
named.add(matches[0] ?? -1);
|
|
674
|
+
}
|
|
675
|
+
return named;
|
|
676
|
+
}
|
|
677
|
+
/**
|
|
678
|
+
* Counts the requested test files that produced a start or skip marker. A
|
|
679
|
+
* directory or manifest request counts the tests the raw log's `suite_start`
|
|
680
|
+
* announced. Undefined when nothing can be counted: no test-file request, or
|
|
681
|
+
* (outside the raw log) no start line naming any requested file.
|
|
682
|
+
*
|
|
683
|
+
* @param markers - Start and skip names
|
|
684
|
+
* @param requested - Dispatched paths, in order
|
|
685
|
+
* @param authoritative - The markers come from the raw log or provably name only other files
|
|
686
|
+
* @param roster - The ids `suite_start` announced
|
|
687
|
+
*/
|
|
688
|
+
function countStartedFiles(markers, requested, authoritative = false, roster = []) {
|
|
689
|
+
const named = requested.filter((path) => !namesNoTestFile(path)).map(normalized);
|
|
690
|
+
const all = requested.some(namesNoTestFile)
|
|
691
|
+
? [
|
|
692
|
+
...named,
|
|
693
|
+
...roster.filter((id) => !namesNoTestFile(id) && !named.some((request) => namesSameFile(normalized(id), request))),
|
|
694
|
+
]
|
|
695
|
+
: named;
|
|
696
|
+
if (all.length === 0)
|
|
697
|
+
return undefined;
|
|
698
|
+
const forms = all.map(normalized);
|
|
699
|
+
const startedIndexes = namedIndexes(markers.started, forms);
|
|
700
|
+
if (!authoritative && startedIndexes.size === 0)
|
|
701
|
+
return undefined;
|
|
702
|
+
const skippedIndexes = namedIndexes(markers.skipped, forms);
|
|
703
|
+
const unstarted = all.filter((_path, index) => !startedIndexes.has(index) && !skippedIndexes.has(index));
|
|
704
|
+
return {
|
|
705
|
+
started: all.length - unstarted.length,
|
|
706
|
+
requested: all.length,
|
|
707
|
+
...(unstarted[0] === undefined ? {} : { firstUnstarted: unstarted[0] }),
|
|
708
|
+
};
|
|
709
|
+
}
|
|
710
|
+
/** Start lines about other test files altogether, none sharing a basename with a request. */
|
|
711
|
+
function namesOnlyOtherFiles(markers, requested) {
|
|
712
|
+
const bases = new Set(requested.map(basenameOf));
|
|
713
|
+
const files = markers.started.filter((name) => TEST_FILE_BASENAME.test(basenameOf(name)));
|
|
714
|
+
return files.length > 0 && !files.some((name) => bases.has(basenameOf(name)));
|
|
715
|
+
}
|
|
716
|
+
/** Requested directories and manifests a raw log ran nothing under. */
|
|
717
|
+
function directoriesWithoutResults(requested, tests) {
|
|
718
|
+
return requested.filter((path) => {
|
|
719
|
+
const request = normalized(path);
|
|
720
|
+
if (!request.includes('/') || TEST_FILE_BASENAME.test(basenameOf(request)))
|
|
721
|
+
return false;
|
|
722
|
+
const dir = /\.(?:toml|ini|list)$/.test(request)
|
|
723
|
+
? request.slice(0, request.lastIndexOf('/'))
|
|
724
|
+
: request.replace(/\/+$/, '');
|
|
725
|
+
return !tests.some((test) => {
|
|
726
|
+
const id = normalized(test);
|
|
727
|
+
return id.startsWith(`${dir}/`) || id.includes(`/${dir}/`);
|
|
728
|
+
});
|
|
729
|
+
});
|
|
730
|
+
}
|
|
731
|
+
/** Where the start count comes from, and what it counts. */
|
|
732
|
+
function countStarts(verdict, output, requested, streamed, raw) {
|
|
733
|
+
// A raw log is complete whatever the capture kept. Streamed markers win when they saw a start.
|
|
734
|
+
if (raw !== undefined) {
|
|
735
|
+
const markers = { started: raw.started, skipped: raw.skipped };
|
|
736
|
+
return { counted: countStartedFiles(markers, requested, true, raw.roster), source: 'raw' };
|
|
737
|
+
}
|
|
738
|
+
if (streamed !== undefined && streamed.started.length > 0) {
|
|
739
|
+
const authoritative = verdict.kind === 'pass' && namesOnlyOtherFiles(streamed, requested);
|
|
740
|
+
return { counted: countStartedFiles(streamed, requested, authoritative), source: 'stream' };
|
|
741
|
+
}
|
|
742
|
+
return { counted: countStartedFiles(scanMarkers(output), requested), source: 'capture' };
|
|
743
|
+
}
|
|
744
|
+
function gatherCompleteness(verdict, output, requested, streamed, raw) {
|
|
745
|
+
const appExit = /Main app process: killed by (SIG[A-Z0-9]+)/.exec(output)?.[1];
|
|
746
|
+
const shutdownLine = lines(output)
|
|
747
|
+
.find((line) => SHUTDOWN_REENTRY.test(line))
|
|
748
|
+
?.trim();
|
|
749
|
+
const { counted, source } = countStarts(verdict, output, requested, streamed, raw);
|
|
750
|
+
const firstUnstarted = counted?.firstUnstarted ??
|
|
751
|
+
(raw === undefined
|
|
752
|
+
? undefined
|
|
753
|
+
: directoriesWithoutResults(requested, raw.results.map((result) => result.test))[0]);
|
|
754
|
+
const unexpected = Math.max(verdict.unexpected ?? 0, raw?.results.filter((result) => result.unexpected).length ?? 0);
|
|
755
|
+
return {
|
|
756
|
+
started: counted?.started ?? 0,
|
|
757
|
+
requested: counted?.requested ?? 0,
|
|
758
|
+
...(firstUnstarted === undefined ? {} : { firstUnstarted, startedSource: source }),
|
|
759
|
+
...(shutdownLine === undefined ? {} : { shutdownLine }),
|
|
760
|
+
...(unexpected > 0 ? { unexpected } : {}),
|
|
761
|
+
...(raw !== undefined && raw.unfinished.length > 0 ? { unfinished: raw.unfinished } : {}),
|
|
762
|
+
...(appExit === undefined ? {} : { appExit }),
|
|
763
|
+
};
|
|
764
|
+
}
|
|
765
|
+
/**
|
|
766
|
+
* Re-examines a passing verdict against what the run recorded, and fails it
|
|
767
|
+
* when a requested file never started, a test never finished, the browser
|
|
768
|
+
* shut down mid-test or died on a signal, or an unexpected result was
|
|
769
|
+
* reported. A raw log decides when there is one: every requested file and
|
|
770
|
+
* directory must have run. A failing verdict keeps its kind and gains the
|
|
771
|
+
* evidence.
|
|
772
|
+
*
|
|
773
|
+
* @param verdict - The classifier's verdict
|
|
774
|
+
* @param output - Captured harness output
|
|
775
|
+
* @param requested - Dispatched paths, in order
|
|
776
|
+
* @param streamed - Markers collected from the complete stream
|
|
777
|
+
* @param raw - The dispatch's raw log
|
|
778
|
+
*/
|
|
779
|
+
export function vetoIncompletePass(verdict, output, requested, streamed, raw) {
|
|
780
|
+
const passed = verdict.kind === 'pass';
|
|
781
|
+
const evidence = gatherCompleteness(verdict, output, requested, streamed, raw);
|
|
782
|
+
const stopped = evidence.firstUnstarted !== undefined ||
|
|
783
|
+
evidence.shutdownLine !== undefined ||
|
|
784
|
+
evidence.appExit !== undefined;
|
|
785
|
+
if (!stopped && (!passed || (evidence.unexpected === undefined && !evidence.unfinished))) {
|
|
786
|
+
// A raw log that recorded no test at all is a run that did nothing.
|
|
787
|
+
if (passed && raw?.results.length === 0) {
|
|
788
|
+
return {
|
|
789
|
+
kind: 'no-tests',
|
|
790
|
+
...(verdict.checks === undefined ? {} : { checks: verdict.checks }),
|
|
791
|
+
...(verdict.unexpected === undefined ? {} : { unexpected: verdict.unexpected }),
|
|
792
|
+
};
|
|
793
|
+
}
|
|
794
|
+
return verdict;
|
|
795
|
+
}
|
|
796
|
+
if (!passed)
|
|
797
|
+
return { ...verdict, incomplete: evidence };
|
|
798
|
+
// The pass-only annotations would misdescribe a failed run.
|
|
799
|
+
const rest = { ...verdict };
|
|
800
|
+
delete rest.greenSummaryOverride;
|
|
801
|
+
delete rest.note;
|
|
802
|
+
const unexpected = evidence.unexpected ?? 0;
|
|
803
|
+
return {
|
|
804
|
+
...rest,
|
|
805
|
+
kind: 'test-failures',
|
|
806
|
+
incomplete: evidence,
|
|
807
|
+
...(unexpected > (rest.unexpected ?? 0) ? { unexpected } : {}),
|
|
808
|
+
...(evidence.shutdownLine === undefined ? {} : { failureLine: evidence.shutdownLine }),
|
|
809
|
+
};
|
|
810
|
+
}
|
|
811
|
+
/**
|
|
812
|
+
* Classifies a dispatch and applies the completeness veto: the one judgement
|
|
813
|
+
* a run makes of each dispatch.
|
|
814
|
+
*
|
|
815
|
+
* @param exitCode - The harness exit status
|
|
816
|
+
* @param output - Its output, both streams in arrival order
|
|
817
|
+
* @param requested - The dispatched paths
|
|
818
|
+
* @param evidence - The raw log, streamed markers and configured failure patterns
|
|
819
|
+
*/
|
|
820
|
+
export function judgeDispatch(exitCode, output, requested, evidence = {}) {
|
|
821
|
+
const started = evidence.raw?.started ?? evidence.streamed?.started;
|
|
822
|
+
return vetoIncompletePass(classifyHarnessRun(exitCode, output, requested, {
|
|
823
|
+
...evidence,
|
|
824
|
+
...(started === undefined ? {} : { started }),
|
|
825
|
+
}), output, requested, evidence.streamed, evidence.raw);
|
|
826
|
+
}
|