@hominis/fireforge 0.45.0 → 0.46.1
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 +409 -446
- package/dist/bin/fireforge.d.ts +1 -1
- package/dist/bin/fireforge.js +21 -15
- package/dist/build-info.json +4 -4
- package/dist/src/cli-usage-error.d.ts +46 -0
- package/dist/src/cli-usage-error.js +81 -0
- package/dist/src/cli.d.ts +7 -2
- package/dist/src/cli.js +47 -47
- package/dist/src/commands/bootstrap-checks.js +2 -1
- package/dist/src/commands/bootstrap.js +3 -4
- package/dist/src/commands/build.js +27 -17
- package/dist/src/commands/config.js +9 -9
- package/dist/src/commands/destructive-decision.d.ts +19 -0
- package/dist/src/commands/destructive-decision.js +31 -0
- package/dist/src/commands/discard.js +5 -5
- package/dist/src/commands/doctor-check-core.d.ts +4 -10
- package/dist/src/commands/doctor-check-core.js +0 -8
- package/dist/src/commands/doctor-external-toolchains.js +2 -2
- package/dist/src/commands/doctor-furnace-config-sync.d.ts +2 -2
- package/dist/src/commands/doctor-furnace-config-sync.js +20 -20
- package/dist/src/commands/doctor-furnace-jar.d.ts +1 -1
- package/dist/src/commands/doctor-furnace-jar.js +1 -1
- package/dist/src/commands/doctor-furnace.js +22 -22
- package/dist/src/commands/doctor-orphaned-harness.d.ts +10 -17
- package/dist/src/commands/doctor-orphaned-harness.js +14 -23
- package/dist/src/commands/doctor-patch-manifest.d.ts +2 -1
- package/dist/src/commands/doctor-patch-manifest.js +7 -6
- package/dist/src/commands/doctor-post-rebase-audit.js +3 -3
- package/dist/src/commands/doctor-source-pin.d.ts +12 -12
- package/dist/src/commands/doctor-source-pin.js +14 -14
- package/dist/src/commands/doctor-working-tree.d.ts +3 -3
- package/dist/src/commands/doctor-working-tree.js +3 -3
- package/dist/src/commands/doctor.d.ts +3 -1
- package/dist/src/commands/doctor.js +15 -16
- package/dist/src/commands/download.js +50 -37
- package/dist/src/commands/export-all.js +29 -12
- package/dist/src/commands/export-flow.d.ts +5 -5
- package/dist/src/commands/export-flow.js +29 -59
- package/dist/src/commands/export-placement-conflicts.d.ts +3 -3
- package/dist/src/commands/export-placement-conflicts.js +12 -12
- package/dist/src/commands/export-placement-gate.d.ts +2 -2
- package/dist/src/commands/export-placement-gate.js +7 -13
- package/dist/src/commands/export-placement-policy.d.ts +1 -1
- package/dist/src/commands/export-placement-policy.js +4 -6
- package/dist/src/commands/export-shared.d.ts +51 -32
- package/dist/src/commands/export-shared.js +17 -32
- package/dist/src/commands/export.js +14 -5
- package/dist/src/commands/furnace/apply.js +16 -16
- package/dist/src/commands/furnace/authoring-config.d.ts +13 -0
- package/dist/src/commands/furnace/authoring-config.js +19 -0
- package/dist/src/commands/furnace/chrome-doc-remove.d.ts +1 -1
- package/dist/src/commands/furnace/chrome-doc-remove.js +2 -2
- package/dist/src/commands/furnace/chrome-doc-templates.d.ts +14 -14
- package/dist/src/commands/furnace/chrome-doc-templates.js +17 -17
- package/dist/src/commands/furnace/chrome-doc-tests.d.ts +2 -2
- package/dist/src/commands/furnace/chrome-doc-tests.js +4 -4
- package/dist/src/commands/furnace/chrome-doc.d.ts +8 -8
- package/dist/src/commands/furnace/chrome-doc.js +18 -18
- package/dist/src/commands/furnace/create-browser-test.d.ts +1 -1
- package/dist/src/commands/furnace/create-browser-test.js +7 -12
- package/dist/src/commands/furnace/create-dry-run.d.ts +4 -4
- package/dist/src/commands/furnace/create-dry-run.js +6 -9
- package/dist/src/commands/furnace/create-features.d.ts +2 -2
- package/dist/src/commands/furnace/create-features.js +2 -2
- package/dist/src/commands/furnace/create-mochikit.d.ts +4 -4
- package/dist/src/commands/furnace/create-mochikit.js +7 -7
- package/dist/src/commands/furnace/create-templates.d.ts +31 -15
- package/dist/src/commands/furnace/create-templates.js +20 -19
- package/dist/src/commands/furnace/create-xpcshell.d.ts +5 -5
- package/dist/src/commands/furnace/create-xpcshell.js +8 -8
- package/dist/src/commands/furnace/create.d.ts +1 -1
- package/dist/src/commands/furnace/create.js +35 -29
- package/dist/src/commands/furnace/deploy.js +15 -6
- package/dist/src/commands/furnace/diff.js +7 -7
- package/dist/src/commands/furnace/index.js +1 -1
- package/dist/src/commands/furnace/init.js +17 -16
- package/dist/src/commands/furnace/list.js +2 -2
- package/dist/src/commands/furnace/override.d.ts +1 -1
- package/dist/src/commands/furnace/override.js +43 -34
- package/dist/src/commands/furnace/preview.js +17 -17
- package/dist/src/commands/furnace/refresh.js +15 -7
- package/dist/src/commands/furnace/remove-mutations.d.ts +9 -10
- package/dist/src/commands/furnace/remove-mutations.js +19 -19
- package/dist/src/commands/furnace/remove-state.d.ts +1 -1
- package/dist/src/commands/furnace/remove-state.js +1 -1
- package/dist/src/commands/furnace/remove.js +4 -8
- package/dist/src/commands/furnace/rename-browser-test.js +10 -15
- package/dist/src/commands/furnace/rename-xpcshell.d.ts +2 -2
- package/dist/src/commands/furnace/rename-xpcshell.js +3 -3
- package/dist/src/commands/furnace/rename.js +36 -36
- package/dist/src/commands/furnace/scan.js +3 -3
- package/dist/src/commands/furnace/status.js +19 -16
- package/dist/src/commands/furnace/sync.js +6 -6
- package/dist/src/commands/furnace/test-file-name.d.ts +28 -0
- package/dist/src/commands/furnace/test-file-name.js +39 -0
- package/dist/src/commands/furnace/validate.js +11 -12
- package/dist/src/commands/furnace/validation-output.d.ts +21 -9
- package/dist/src/commands/furnace/validation-output.js +3 -8
- package/dist/src/commands/import.js +22 -29
- package/dist/src/commands/lint-per-patch.d.ts +2 -2
- package/dist/src/commands/lint-per-patch.js +27 -12
- package/dist/src/commands/lint-per-run-checkjs.d.ts +14 -15
- package/dist/src/commands/lint-per-run-checkjs.js +14 -15
- package/dist/src/commands/lint-report.d.ts +3 -3
- package/dist/src/commands/lint-report.js +4 -4
- package/dist/src/commands/lint.d.ts +5 -4
- package/dist/src/commands/lint.js +36 -36
- package/dist/src/commands/manifest.d.ts +4 -4
- package/dist/src/commands/manifest.js +1 -1
- package/dist/src/commands/package.js +4 -6
- package/dist/src/commands/patch/compact.d.ts +2 -2
- package/dist/src/commands/patch/compact.js +19 -20
- package/dist/src/commands/patch/delete.d.ts +1 -1
- package/dist/src/commands/patch/delete.js +23 -33
- package/dist/src/commands/patch/entry-projection.d.ts +13 -0
- package/dist/src/commands/patch/entry-projection.js +24 -0
- package/dist/src/commands/patch/lint-ignore.d.ts +3 -12
- package/dist/src/commands/patch/lint-ignore.js +33 -44
- package/dist/src/commands/patch/move-files-create.d.ts +2 -2
- package/dist/src/commands/patch/move-files-create.js +29 -15
- package/dist/src/commands/patch/move-files-into.d.ts +2 -2
- package/dist/src/commands/patch/move-files-into.js +41 -37
- package/dist/src/commands/patch/move-files.js +5 -14
- package/dist/src/commands/patch/patch-context.d.ts +1 -1
- package/dist/src/commands/patch/rename.d.ts +4 -4
- package/dist/src/commands/patch/rename.js +35 -49
- package/dist/src/commands/patch/reorder.js +35 -48
- package/dist/src/commands/patch/split-plan.d.ts +7 -8
- package/dist/src/commands/patch/split-plan.js +10 -13
- package/dist/src/commands/patch/split.d.ts +2 -2
- package/dist/src/commands/patch/split.js +50 -48
- package/dist/src/commands/patch/staged-dependency-validate.d.ts +1 -1
- package/dist/src/commands/patch/staged-dependency-validate.js +3 -3
- package/dist/src/commands/patch/staged-dependency.d.ts +1 -1
- package/dist/src/commands/patch/staged-dependency.js +22 -28
- package/dist/src/commands/patch/tier.d.ts +2 -2
- package/dist/src/commands/patch/tier.js +20 -30
- package/dist/src/commands/patch-rename-map.d.ts +19 -0
- package/dist/src/commands/patch-rename-map.js +36 -0
- package/dist/src/commands/pending-resolution.d.ts +15 -0
- package/dist/src/commands/pending-resolution.js +25 -0
- package/dist/src/commands/re-export-adjacent.d.ts +25 -3
- package/dist/src/commands/re-export-adjacent.js +40 -24
- package/dist/src/commands/re-export-bulk-scan.d.ts +3 -3
- package/dist/src/commands/re-export-bulk-scan.js +23 -27
- package/dist/src/commands/re-export-drift.d.ts +10 -10
- package/dist/src/commands/re-export-drift.js +33 -33
- package/dist/src/commands/re-export-files.d.ts +2 -3
- package/dist/src/commands/re-export-files.js +52 -44
- package/dist/src/commands/re-export-lint.d.ts +29 -30
- package/dist/src/commands/re-export-lint.js +36 -29
- package/dist/src/commands/re-export-options.d.ts +1 -1
- package/dist/src/commands/re-export-options.js +1 -1
- package/dist/src/commands/re-export-register.d.ts +1 -1
- package/dist/src/commands/re-export-register.js +1 -1
- package/dist/src/commands/re-export-scan.d.ts +1 -1
- package/dist/src/commands/re-export-scan.js +12 -9
- package/dist/src/commands/re-export-single.d.ts +23 -4
- package/dist/src/commands/re-export-single.js +39 -31
- package/dist/src/commands/re-export.js +35 -17
- package/dist/src/commands/rebase/abort.js +9 -14
- package/dist/src/commands/rebase/continue.js +20 -19
- package/dist/src/commands/rebase/index.d.ts +1 -1
- package/dist/src/commands/rebase/index.js +5 -5
- package/dist/src/commands/rebase/patch-loop.d.ts +2 -2
- package/dist/src/commands/rebase/patch-loop.js +20 -24
- package/dist/src/commands/register.js +5 -5
- package/dist/src/commands/reset.js +1 -1
- package/dist/src/commands/resolve.d.ts +2 -2
- package/dist/src/commands/resolve.js +21 -13
- package/dist/src/commands/run.d.ts +0 -13
- package/dist/src/commands/run.js +38 -51
- package/dist/src/commands/setup-support.d.ts +16 -4
- package/dist/src/commands/setup-support.js +20 -20
- package/dist/src/commands/setup.js +4 -10
- package/dist/src/commands/source.js +9 -2
- package/dist/src/commands/status-check.d.ts +3 -3
- package/dist/src/commands/status-check.js +6 -6
- package/dist/src/commands/status-json.d.ts +14 -13
- package/dist/src/commands/status-json.js +9 -8
- package/dist/src/commands/status-output.d.ts +3 -3
- package/dist/src/commands/status-output.js +5 -5
- package/dist/src/commands/status-ownership.d.ts +3 -3
- package/dist/src/commands/status-ownership.js +3 -3
- package/dist/src/commands/status.js +25 -26
- package/dist/src/commands/test-build-phase.d.ts +3 -3
- package/dist/src/commands/test-build-phase.js +48 -24
- package/dist/src/commands/test-diagnose.d.ts +1 -1
- package/dist/src/commands/test-diagnose.js +20 -20
- package/dist/src/commands/test-modes.d.ts +4 -4
- package/dist/src/commands/test-modes.js +4 -5
- package/dist/src/commands/test-register.js +5 -3
- package/dist/src/commands/test-run.d.ts +11 -11
- package/dist/src/commands/test-run.js +40 -33
- package/dist/src/commands/test-stale-gate.d.ts +12 -12
- package/dist/src/commands/test-stale-gate.js +17 -17
- package/dist/src/commands/test-verdict.d.ts +19 -5
- package/dist/src/commands/test-verdict.js +26 -11
- package/dist/src/commands/test.d.ts +3 -3
- package/dist/src/commands/test.js +73 -36
- package/dist/src/commands/token-coverage.js +3 -3
- package/dist/src/commands/token-list.d.ts +26 -0
- package/dist/src/commands/token-list.js +153 -0
- package/dist/src/commands/token.js +26 -10
- package/dist/src/commands/tree.js +26 -21
- package/dist/src/commands/typecheck.d.ts +6 -6
- package/dist/src/commands/typecheck.js +16 -16
- package/dist/src/commands/verify.d.ts +3 -3
- package/dist/src/commands/verify.js +10 -10
- package/dist/src/commands/watch.js +11 -11
- package/dist/src/commands/wire.js +17 -16
- package/dist/src/core/ast-utils.d.ts +7 -7
- package/dist/src/core/ast-utils.js +8 -8
- package/dist/src/core/branding.d.ts +5 -12
- package/dist/src/core/branding.js +6 -5
- package/dist/src/core/browser-wire.d.ts +1 -1
- package/dist/src/core/browser-wire.js +10 -7
- package/dist/src/core/build-audit-platform.d.ts +32 -3
- package/dist/src/core/build-audit-platform.js +153 -13
- package/dist/src/core/build-audit-registration.d.ts +5 -5
- package/dist/src/core/build-audit-registration.js +10 -9
- package/dist/src/core/build-audit-resolve.d.ts +5 -5
- package/dist/src/core/build-audit-resolve.js +6 -6
- package/dist/src/core/build-audit-skip.d.ts +57 -0
- package/dist/src/core/build-audit-skip.js +112 -0
- package/dist/src/core/build-audit-transforms.d.ts +2 -2
- package/dist/src/core/build-audit-transforms.js +3 -3
- package/dist/src/core/build-audit.d.ts +21 -8
- package/dist/src/core/build-audit.js +142 -40
- package/dist/src/core/build-baseline-types.d.ts +19 -18
- package/dist/src/core/build-baseline-types.js +1 -1
- package/dist/src/core/build-baseline.d.ts +48 -31
- package/dist/src/core/build-baseline.js +20 -43
- package/dist/src/core/build-jar-escalation.d.ts +8 -8
- package/dist/src/core/build-jar-escalation.js +18 -17
- package/dist/src/core/build-overwrite-guard.d.ts +4 -4
- package/dist/src/core/build-overwrite-guard.js +14 -14
- package/dist/src/core/build-prepare.d.ts +4 -12
- package/dist/src/core/build-prepare.js +22 -26
- package/dist/src/core/config-mutate.js +4 -4
- package/dist/src/core/config-paths.d.ts +2 -6
- package/dist/src/core/config-paths.js +4 -2
- package/dist/src/core/config-state.d.ts +0 -6
- package/dist/src/core/config-state.js +3 -21
- package/dist/src/core/config-validate-build-audit.d.ts +8 -0
- package/dist/src/core/config-validate-build-audit.js +80 -0
- package/dist/src/core/config-validate-file-size.d.ts +1 -1
- package/dist/src/core/config-validate-file-size.js +3 -3
- package/dist/src/core/config-validate-patch-policy.d.ts +2 -2
- package/dist/src/core/config-validate-patch-policy.js +3 -3
- package/dist/src/core/config-validate-test-toolchains.d.ts +2 -2
- package/dist/src/core/config-validate-test-toolchains.js +4 -5
- package/dist/src/core/config-validate.js +22 -12
- package/dist/src/core/config.d.ts +12 -12
- package/dist/src/core/config.js +21 -25
- package/dist/src/core/coverage-extend.d.ts +16 -16
- package/dist/src/core/coverage-extend.js +20 -20
- package/dist/src/core/destructive.d.ts +14 -14
- package/dist/src/core/destructive.js +9 -9
- package/dist/src/core/diff-hunks.d.ts +2 -2
- package/dist/src/core/diff-hunks.js +7 -7
- package/dist/src/core/discard-baseline.d.ts +10 -10
- package/dist/src/core/discard-baseline.js +22 -23
- package/dist/src/core/display-state.d.ts +11 -11
- package/dist/src/core/display-state.js +12 -12
- package/dist/src/core/engine-changes.d.ts +2 -2
- package/dist/src/core/engine-changes.js +2 -2
- package/dist/src/core/engine-precondition.d.ts +5 -13
- package/dist/src/core/engine-precondition.js +5 -10
- package/dist/src/core/engine-session-lock.d.ts +18 -18
- package/dist/src/core/engine-session-lock.js +50 -54
- package/dist/src/core/export-moved-code-shape.d.ts +7 -7
- package/dist/src/core/export-moved-code-shape.js +10 -10
- package/dist/src/core/file-lock-owner.d.ts +103 -0
- package/dist/src/core/file-lock-owner.js +259 -0
- package/dist/src/core/file-lock.d.ts +14 -19
- package/dist/src/core/file-lock.js +90 -128
- package/dist/src/core/firefox-cache.d.ts +13 -1
- package/dist/src/core/firefox-cache.js +61 -36
- package/dist/src/core/firefox-download.d.ts +15 -0
- package/dist/src/core/firefox-download.js +38 -22
- package/dist/src/core/firefox-extract.d.ts +8 -7
- package/dist/src/core/firefox-extract.js +45 -27
- package/dist/src/core/firefox.d.ts +34 -36
- package/dist/src/core/firefox.js +13 -44
- package/dist/src/core/furnace-apply-dry-run.d.ts +1 -6
- package/dist/src/core/furnace-apply-dry-run.js +2 -8
- package/dist/src/core/furnace-apply-ftl.d.ts +5 -5
- package/dist/src/core/furnace-apply-ftl.js +8 -8
- package/dist/src/core/furnace-apply-helpers.d.ts +9 -20
- package/dist/src/core/furnace-apply-helpers.js +28 -39
- package/dist/src/core/furnace-apply-output.js +1 -1
- package/dist/src/core/furnace-apply-overwrite-warn.d.ts +9 -9
- package/dist/src/core/furnace-apply-overwrite-warn.js +13 -11
- package/dist/src/core/furnace-apply-undeploy-actions.d.ts +1 -1
- package/dist/src/core/furnace-apply-undeploy-actions.js +1 -1
- package/dist/src/core/furnace-apply.d.ts +4 -4
- package/dist/src/core/furnace-apply.js +50 -29
- package/dist/src/core/furnace-checksum-utils.d.ts +5 -5
- package/dist/src/core/furnace-checksum-utils.js +5 -5
- package/dist/src/core/furnace-config-custom.d.ts +1 -1
- package/dist/src/core/furnace-config-custom.js +2 -2
- package/dist/src/core/furnace-config-order.js +1 -1
- package/dist/src/core/furnace-config-tokens.d.ts +3 -3
- package/dist/src/core/furnace-config-tokens.js +3 -3
- package/dist/src/core/furnace-config-validate.js +2 -2
- package/dist/src/core/furnace-config.d.ts +5 -5
- package/dist/src/core/furnace-config.js +40 -53
- package/dist/src/core/furnace-constants.d.ts +6 -6
- package/dist/src/core/furnace-constants.js +9 -8
- package/dist/src/core/furnace-css-fragments.d.ts +6 -6
- package/dist/src/core/furnace-css-fragments.js +11 -11
- package/dist/src/core/furnace-dir-entry.d.ts +20 -0
- package/dist/src/core/furnace-dir-entry.js +21 -0
- package/dist/src/core/furnace-jsconfig.d.ts +7 -7
- package/dist/src/core/furnace-jsconfig.js +22 -20
- package/dist/src/core/furnace-operation.d.ts +22 -19
- package/dist/src/core/furnace-operation.js +38 -34
- package/dist/src/core/furnace-precondition.d.ts +10 -10
- package/dist/src/core/furnace-precondition.js +8 -8
- package/dist/src/core/furnace-refresh.d.ts +18 -6
- package/dist/src/core/furnace-refresh.js +5 -8
- package/dist/src/core/furnace-registration-ast.d.ts +2 -3
- package/dist/src/core/furnace-registration-ast.js +9 -12
- package/dist/src/core/furnace-registration-remove.d.ts +4 -4
- package/dist/src/core/furnace-registration-remove.js +6 -6
- package/dist/src/core/furnace-registration-validate.d.ts +2 -2
- package/dist/src/core/furnace-registration-validate.js +2 -2
- package/dist/src/core/furnace-registration.d.ts +7 -6
- package/dist/src/core/furnace-registration.js +29 -36
- package/dist/src/core/furnace-rollback.d.ts +1 -1
- package/dist/src/core/furnace-rollback.js +5 -5
- package/dist/src/core/furnace-scanner.js +3 -6
- package/dist/src/core/furnace-stale-export.d.ts +17 -16
- package/dist/src/core/furnace-stale-export.js +16 -15
- package/dist/src/core/furnace-staleness.d.ts +2 -2
- package/dist/src/core/furnace-staleness.js +2 -2
- package/dist/src/core/furnace-state-persist.d.ts +12 -12
- package/dist/src/core/furnace-state-persist.js +10 -10
- package/dist/src/core/furnace-step-errors.d.ts +6 -6
- package/dist/src/core/furnace-step-errors.js +6 -6
- package/dist/src/core/furnace-validate-accessibility.js +14 -14
- package/dist/src/core/furnace-validate-compatibility.js +9 -9
- package/dist/src/core/furnace-validate-registration.d.ts +2 -2
- package/dist/src/core/furnace-validate-registration.js +18 -20
- package/dist/src/core/furnace-validate-structure.d.ts +1 -1
- package/dist/src/core/furnace-validate-structure.js +4 -4
- package/dist/src/core/furnace-validate.js +9 -9
- package/dist/src/core/furnace-version-drift.d.ts +5 -5
- package/dist/src/core/furnace-version-drift.js +5 -5
- package/dist/src/core/git-base.d.ts +6 -4
- package/dist/src/core/git-base.js +29 -7
- package/dist/src/core/git-diff-new-file.d.ts +40 -0
- package/dist/src/core/git-diff-new-file.js +119 -0
- package/dist/src/core/git-diff.d.ts +13 -13
- package/dist/src/core/git-diff.js +121 -189
- package/dist/src/core/git-file-ops.d.ts +6 -13
- package/dist/src/core/git-file-ops.js +11 -35
- package/dist/src/core/git-readonly-index.d.ts +12 -14
- package/dist/src/core/git-readonly-index.js +12 -16
- package/dist/src/core/git-status.d.ts +9 -2
- package/dist/src/core/git-status.js +23 -11
- package/dist/src/core/git.d.ts +3 -9
- package/dist/src/core/git.js +28 -57
- package/dist/src/core/harness-orphans.d.ts +17 -17
- package/dist/src/core/harness-orphans.js +28 -27
- package/dist/src/core/history-log.d.ts +19 -0
- package/dist/src/core/history-log.js +29 -0
- package/dist/src/core/license-headers.d.ts +19 -18
- package/dist/src/core/license-headers.js +29 -28
- package/dist/src/core/mach-build-artifacts.d.ts +21 -21
- package/dist/src/core/mach-build-artifacts.js +23 -23
- package/dist/src/core/mach-error-hints.d.ts +5 -10
- package/dist/src/core/mach-error-hints.js +14 -14
- package/dist/src/core/mach-known-noise-filter.d.ts +42 -38
- package/dist/src/core/mach-known-noise-filter.js +57 -56
- package/dist/src/core/mach-mozconfig.d.ts +6 -6
- package/dist/src/core/mach-mozconfig.js +17 -16
- package/dist/src/core/mach-python.d.ts +3 -0
- package/dist/src/core/mach-python.js +13 -7
- package/dist/src/core/mach-resource-shim.d.ts +24 -12
- package/dist/src/core/mach-resource-shim.js +124 -21
- package/dist/src/core/mach.d.ts +59 -73
- package/dist/src/core/mach.js +47 -115
- package/dist/src/core/marionette-port.d.ts +15 -30
- package/dist/src/core/marionette-port.js +46 -89
- package/dist/src/core/marionette-preflight.d.ts +6 -6
- package/dist/src/core/marionette-preflight.js +32 -50
- package/dist/src/core/markdown-table.d.ts +9 -9
- package/dist/src/core/markdown-table.js +14 -14
- package/dist/src/core/mochitest-server-port.d.ts +8 -8
- package/dist/src/core/mochitest-server-port.js +17 -17
- package/dist/src/core/module-resolution-preflight.d.ts +8 -8
- package/dist/src/core/module-resolution-preflight.js +11 -11
- package/dist/src/core/moz-manifest-helpers.d.ts +7 -7
- package/dist/src/core/moz-manifest-helpers.js +7 -7
- package/dist/src/core/moz-manifest-register.d.ts +1 -1
- package/dist/src/core/moz-manifest-register.js +2 -2
- package/dist/src/core/moz-manifest-rules.js +46 -42
- package/dist/src/core/moz-manifest-tokenizers.js +1 -1
- package/dist/src/core/ownership-table.d.ts +5 -5
- package/dist/src/core/ownership-table.js +7 -7
- package/dist/src/core/parser-fallback.d.ts +3 -3
- package/dist/src/core/parser-fallback.js +3 -3
- package/dist/src/core/patch-apply-fuzz.d.ts +5 -5
- package/dist/src/core/patch-apply-fuzz.js +13 -13
- package/dist/src/core/patch-apply.d.ts +13 -14
- package/dist/src/core/patch-apply.js +36 -42
- package/dist/src/core/patch-export-coverage.d.ts +0 -9
- package/dist/src/core/patch-export-coverage.js +1 -30
- package/dist/src/core/patch-export-update.d.ts +21 -4
- package/dist/src/core/patch-export-update.js +7 -6
- package/dist/src/core/patch-export.d.ts +20 -30
- package/dist/src/core/patch-export.js +55 -77
- package/dist/src/core/patch-files.d.ts +0 -4
- package/dist/src/core/patch-files.js +0 -11
- package/dist/src/core/patch-identifier-suggest.d.ts +1 -1
- package/dist/src/core/patch-identifier-suggest.js +4 -4
- package/dist/src/core/patch-lint-binary.d.ts +12 -18
- package/dist/src/core/patch-lint-cache.d.ts +18 -2
- package/dist/src/core/patch-lint-cache.js +16 -19
- package/dist/src/core/patch-lint-checkjs.d.ts +55 -38
- package/dist/src/core/patch-lint-checkjs.js +78 -64
- package/dist/src/core/patch-lint-chrome-jsdoc.d.ts +8 -9
- package/dist/src/core/patch-lint-chrome-jsdoc.js +10 -11
- package/dist/src/core/patch-lint-creators.d.ts +5 -9
- package/dist/src/core/patch-lint-creators.js +3 -3
- package/dist/src/core/patch-lint-cross.d.ts +27 -19
- package/dist/src/core/patch-lint-cross.js +67 -110
- package/dist/src/core/patch-lint-css.d.ts +1 -1
- package/dist/src/core/patch-lint-css.js +15 -11
- package/dist/src/core/patch-lint-diff-tag.d.ts +5 -5
- package/dist/src/core/patch-lint-diff-tag.js +5 -5
- package/dist/src/core/patch-lint-diff.d.ts +4 -4
- package/dist/src/core/patch-lint-diff.js +4 -4
- package/dist/src/core/patch-lint-file-size.d.ts +3 -3
- package/dist/src/core/patch-lint-file-size.js +6 -6
- package/dist/src/core/patch-lint-forward-registration.d.ts +58 -0
- package/dist/src/core/patch-lint-forward-registration.js +210 -0
- package/dist/src/core/patch-lint-jsdoc.d.ts +2 -2
- package/dist/src/core/patch-lint-jsdoc.js +46 -46
- package/dist/src/core/patch-lint-module-registration.d.ts +3 -9
- package/dist/src/core/patch-lint-module-registration.js +1 -1
- package/dist/src/core/patch-lint-mozbuild.d.ts +1 -1
- package/dist/src/core/patch-lint-mozbuild.js +10 -10
- package/dist/src/core/patch-lint-observer.d.ts +3 -3
- package/dist/src/core/patch-lint-observer.js +7 -7
- package/dist/src/core/patch-lint-ownership.d.ts +6 -6
- package/dist/src/core/patch-lint-ownership.js +6 -6
- package/dist/src/core/patch-lint-prettier.d.ts +6 -6
- package/dist/src/core/patch-lint-prettier.js +7 -7
- package/dist/src/core/patch-lint-queue-types.d.ts +60 -0
- package/dist/src/core/patch-lint-queue-types.js +12 -0
- package/dist/src/core/patch-lint-staged-registration.d.ts +61 -0
- package/dist/src/core/patch-lint-staged-registration.js +90 -0
- package/dist/src/core/patch-lint-unmanaged-companion.d.ts +23 -23
- package/dist/src/core/patch-lint-unmanaged-companion.js +26 -26
- package/dist/src/core/patch-lint.d.ts +41 -35
- package/dist/src/core/patch-lint.js +52 -49
- package/dist/src/core/patch-lock.d.ts +1 -1
- package/dist/src/core/patch-lock.js +11 -11
- package/dist/src/core/patch-manifest-consistency.d.ts +7 -7
- package/dist/src/core/patch-manifest-consistency.js +16 -17
- package/dist/src/core/patch-manifest-files-affected.d.ts +1 -1
- package/dist/src/core/patch-manifest-files-affected.js +3 -3
- package/dist/src/core/patch-manifest-io.d.ts +14 -14
- package/dist/src/core/patch-manifest-io.js +35 -34
- package/dist/src/core/patch-manifest-query.d.ts +1 -1
- package/dist/src/core/patch-manifest-query.js +4 -4
- package/dist/src/core/patch-manifest-resolve.d.ts +5 -5
- package/dist/src/core/patch-manifest-resolve.js +7 -7
- package/dist/src/core/patch-manifest-validate.js +3 -3
- package/dist/src/core/patch-manifest.d.ts +2 -2
- package/dist/src/core/patch-manifest.js +2 -2
- package/dist/src/core/patch-parse.d.ts +32 -21
- package/dist/src/core/patch-parse.js +40 -15
- package/dist/src/core/patch-policy.js +15 -27
- package/dist/src/core/patch-registration-refs.d.ts +4 -4
- package/dist/src/core/patch-registration-refs.js +7 -7
- package/dist/src/core/patch-source-metadata.d.ts +1 -3
- package/dist/src/core/patch-source-metadata.js +0 -4
- package/dist/src/core/patch-transform.d.ts +8 -16
- package/dist/src/core/patch-transform.js +13 -23
- package/dist/src/core/process-cpu-time.d.ts +1 -1
- package/dist/src/core/process-cpu-time.js +6 -6
- package/dist/src/core/rebase-session.d.ts +9 -15
- package/dist/src/core/rebase-session.js +13 -25
- package/dist/src/core/register-browser-content.js +3 -2
- package/dist/src/core/register-browser-test.js +2 -1
- package/dist/src/core/register-module.js +2 -1
- package/dist/src/core/register-result.d.ts +1 -1
- package/dist/src/core/register-result.js +1 -1
- package/dist/src/core/register-scaffold.d.ts +2 -2
- package/dist/src/core/register-scaffold.js +8 -7
- package/dist/src/core/register-shared-css.d.ts +3 -3
- package/dist/src/core/register-shared-css.js +6 -5
- package/dist/src/core/register-xpcshell-test.d.ts +2 -2
- package/dist/src/core/register-xpcshell-test.js +2 -2
- package/dist/src/core/run-log-redact.d.ts +38 -0
- package/dist/src/core/run-log-redact.js +69 -0
- package/dist/src/core/run-log.d.ts +21 -10
- package/dist/src/core/run-log.js +76 -27
- package/dist/src/core/shared-ftl.d.ts +2 -2
- package/dist/src/core/shared-ftl.js +6 -6
- package/dist/src/core/signal-critical.d.ts +2 -2
- package/dist/src/core/signal-critical.js +4 -6
- package/dist/src/core/smoke-patterns.d.ts +5 -6
- package/dist/src/core/smoke-patterns.js +15 -20
- package/dist/src/core/state-file.d.ts +15 -4
- package/dist/src/core/state-file.js +14 -1
- package/dist/src/core/status-binary.d.ts +8 -8
- package/dist/src/core/status-binary.js +12 -12
- package/dist/src/core/status-classify.d.ts +17 -17
- package/dist/src/core/status-classify.js +13 -12
- package/dist/src/core/test-changed-prefs.d.ts +12 -12
- package/dist/src/core/test-changed-prefs.js +40 -25
- package/dist/src/core/test-harness-crash.d.ts +39 -39
- package/dist/src/core/test-harness-crash.js +69 -69
- package/dist/src/core/test-harness-output.d.ts +7 -7
- package/dist/src/core/test-harness-output.js +7 -7
- package/dist/src/core/test-harness-verdict-notes.d.ts +13 -14
- package/dist/src/core/test-harness-verdict-notes.js +4 -4
- package/dist/src/core/test-path-scope.d.ts +8 -8
- package/dist/src/core/test-path-scope.js +11 -11
- package/dist/src/core/test-stale-check.d.ts +22 -23
- package/dist/src/core/test-stale-check.js +31 -30
- package/dist/src/core/test-stale-symlink.d.ts +1 -1
- package/dist/src/core/test-stale-symlink.js +1 -1
- package/dist/src/core/test-stall-triage.d.ts +9 -9
- package/dist/src/core/test-stall-triage.js +22 -22
- package/dist/src/core/test-xpcshell-retry.d.ts +26 -7
- package/dist/src/core/test-xpcshell-retry.js +14 -11
- package/dist/src/core/token-category.d.ts +35 -2
- package/dist/src/core/token-category.js +67 -58
- package/dist/src/core/token-coverage.js +4 -5
- package/dist/src/core/token-dark-mode.d.ts +9 -9
- package/dist/src/core/token-dark-mode.js +13 -25
- package/dist/src/core/token-docs.d.ts +1 -1
- package/dist/src/core/token-inventory.d.ts +56 -0
- package/dist/src/core/token-inventory.js +109 -0
- package/dist/src/core/token-manager.d.ts +4 -4
- package/dist/src/core/token-manager.js +22 -22
- package/dist/src/core/token-scaffold.d.ts +4 -4
- package/dist/src/core/token-scaffold.js +4 -4
- package/dist/src/core/token-variant.d.ts +14 -14
- package/dist/src/core/token-variant.js +52 -53
- package/dist/src/core/toolchain-preflight.d.ts +15 -15
- package/dist/src/core/toolchain-preflight.js +23 -23
- package/dist/src/core/tree-cow.d.ts +3 -5
- package/dist/src/core/tree-cow.js +8 -8
- package/dist/src/core/tree-guard.d.ts +3 -3
- package/dist/src/core/tree-guard.js +23 -23
- package/dist/src/core/tree-store.d.ts +15 -15
- package/dist/src/core/tree-store.js +39 -38
- package/dist/src/core/typecheck-shim.d.ts +16 -15
- package/dist/src/core/typecheck-shim.js +26 -25
- package/dist/src/core/typecheck.d.ts +12 -12
- package/dist/src/core/typecheck.js +33 -33
- package/dist/src/core/wire-destroy.d.ts +2 -2
- package/dist/src/core/wire-destroy.js +5 -5
- package/dist/src/core/wire-dom-fragment.d.ts +3 -3
- package/dist/src/core/wire-dom-fragment.js +12 -23
- package/dist/src/core/wire-init.d.ts +2 -2
- package/dist/src/core/wire-init.js +7 -7
- package/dist/src/core/wire-subscript.d.ts +1 -1
- package/dist/src/core/wire-subscript.js +3 -3
- package/dist/src/core/wire-utils.d.ts +9 -9
- package/dist/src/core/wire-utils.js +16 -28
- package/dist/src/core/xpcshell-appdir.d.ts +20 -20
- package/dist/src/core/xpcshell-appdir.js +28 -30
- package/dist/src/core/xpcshell-profile-dir.d.ts +3 -3
- package/dist/src/core/xpcshell-profile-dir.js +7 -7
- package/dist/src/errors/base.d.ts +69 -16
- package/dist/src/errors/base.js +95 -26
- package/dist/src/errors/build.d.ts +6 -6
- package/dist/src/errors/build.js +26 -34
- package/dist/src/errors/codes.d.ts +10 -10
- package/dist/src/errors/codes.js +10 -10
- package/dist/src/errors/config.d.ts +0 -14
- package/dist/src/errors/config.js +13 -34
- package/dist/src/errors/download.d.ts +13 -0
- package/dist/src/errors/download.js +53 -24
- package/dist/src/errors/furnace.d.ts +2 -2
- package/dist/src/errors/furnace.js +8 -9
- package/dist/src/errors/git.d.ts +9 -9
- package/dist/src/errors/git.js +21 -31
- package/dist/src/errors/patch.d.ts +3 -3
- package/dist/src/errors/patch.js +11 -13
- package/dist/src/errors/rebase.d.ts +1 -1
- package/dist/src/errors/rebase.js +8 -8
- package/dist/src/errors/run.d.ts +1 -1
- package/dist/src/errors/run.js +1 -1
- package/dist/src/index.d.ts +4 -4
- package/dist/src/index.js +4 -4
- package/dist/src/types/commands/options.d.ts +155 -200
- package/dist/src/types/commands/patches.d.ts +19 -19
- package/dist/src/types/commands/project.d.ts +3 -3
- package/dist/src/types/config.d.ts +52 -19
- package/dist/src/types/furnace.d.ts +17 -17
- package/dist/src/types/index.d.ts +0 -1
- package/dist/src/types/json.d.ts +3 -3
- package/dist/src/types/json.js +2 -2
- package/dist/src/types/typecheck.d.ts +3 -3
- package/dist/src/utils/assert.d.ts +4 -16
- package/dist/src/utils/assert.js +7 -24
- package/dist/src/utils/build-info.d.ts +6 -6
- package/dist/src/utils/build-info.js +6 -6
- package/dist/src/utils/child-env.d.ts +7 -6
- package/dist/src/utils/child-env.js +5 -5
- package/dist/src/utils/concurrency.d.ts +2 -2
- package/dist/src/utils/concurrency.js +2 -2
- package/dist/src/utils/elapsed.js +10 -1
- package/dist/src/utils/errors.d.ts +8 -8
- package/dist/src/utils/errors.js +8 -8
- package/dist/src/utils/fs.d.ts +1 -1
- package/dist/src/utils/fs.js +15 -20
- package/dist/src/utils/hash.d.ts +12 -0
- package/dist/src/utils/hash.js +16 -0
- package/dist/src/utils/line-dispatch.d.ts +15 -0
- package/dist/src/utils/line-dispatch.js +48 -0
- package/dist/src/utils/logger.d.ts +4 -4
- package/dist/src/utils/logger.js +11 -11
- package/dist/src/utils/machine-output.js +2 -2
- package/dist/src/utils/options.d.ts +14 -20
- package/dist/src/utils/options.js +26 -27
- package/dist/src/utils/package-root.js +5 -14
- package/dist/src/utils/paths.d.ts +4 -4
- package/dist/src/utils/paths.js +4 -4
- package/dist/src/utils/platform.d.ts +0 -4
- package/dist/src/utils/process-group.d.ts +10 -9
- package/dist/src/utils/process-group.js +37 -36
- package/dist/src/utils/process.d.ts +70 -55
- package/dist/src/utils/process.js +129 -179
- package/dist/src/utils/ps-duration.d.ts +4 -4
- package/dist/src/utils/ps-duration.js +9 -9
- package/dist/src/utils/regex.d.ts +4 -4
- package/dist/src/utils/regex.js +7 -7
- package/dist/src/utils/sleep.d.ts +26 -0
- package/dist/src/utils/sleep.js +31 -0
- package/dist/src/utils/stdio-drain.d.ts +7 -7
- package/dist/src/utils/stdio-drain.js +8 -8
- package/dist/src/utils/validation.d.ts +12 -49
- package/dist/src/utils/validation.js +26 -36
- package/docs/README.md +2 -2
- package/docs/configuration.md +163 -69
- package/docs/exit-codes.md +66 -49
- package/docs/furnace.md +20 -19
- package/docs/lifecycle-invariants.md +414 -247
- package/docs/machine-output.md +58 -34
- package/docs/patch-workflow.md +48 -44
- package/docs/run-logs.md +72 -28
- package/docs/testing.md +105 -98
- package/docs/verification-trees.md +23 -22
- package/package.json +7 -6
- package/dist/src/commands/rebase.d.ts +0 -4
- package/dist/src/commands/rebase.js +0 -5
- package/dist/src/core/patch-artifact-normalize.d.ts +0 -21
- package/dist/src/core/patch-artifact-normalize.js +0 -24
- package/dist/src/core/patch-lint-reexports.d.ts +0 -7
- package/dist/src/core/patch-lint-reexports.js +0 -8
- package/dist/src/core/wire-targets.d.ts +0 -7
- package/dist/src/core/wire-targets.js +0 -8
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Verdict-note helpers for the harness classifier.
|
|
3
3
|
*
|
|
4
4
|
* Split out of `test-harness-crash.ts` (at its per-file line budget). These
|
|
5
|
-
* decide the
|
|
5
|
+
* decide the advisory parenthetical on the `FIREFORGE-VERDICT:` line. None
|
|
6
6
|
* of them changes a status or a reason key, which the verdict contract's
|
|
7
7
|
* consumers parse.
|
|
8
8
|
*/
|
|
@@ -21,12 +21,12 @@ interface SummaryCountsView {
|
|
|
21
21
|
* `Unexpected results: 0`, yet the run is still classified `test-failures`
|
|
22
22
|
* on evidence lines that carry NO `TEST-UNEXPECTED-*` marker.
|
|
23
23
|
*
|
|
24
|
-
* `unexpected=0` printed beside `reason=test-failures`
|
|
25
|
-
*
|
|
24
|
+
* `unexpected=0` printed beside `reason=test-failures` means the verdict
|
|
25
|
+
* rests on pattern matching rather than on a harness result, and a
|
|
26
26
|
* reader who cannot see that spends hours attributing a red run to the
|
|
27
27
|
* change under test. The note says so on the verdict line itself.
|
|
28
28
|
*
|
|
29
|
-
*
|
|
29
|
+
* This is a note and not a reclassification: a non-zero exit with no
|
|
30
30
|
* green-shaped summary is still a failing run, and inventing a new `reason`
|
|
31
31
|
* would break the `FIREFORGE-VERDICT:` contract its consumers parse.
|
|
32
32
|
*/
|
|
@@ -36,16 +36,15 @@ export declare function truncateEvidence(line: string): string;
|
|
|
36
36
|
/**
|
|
37
37
|
* Outcome of the green-teardown belt.
|
|
38
38
|
*
|
|
39
|
-
* `accepted` is the pass. A rejection carries `rejectedBy`
|
|
40
|
-
* recognized teardown noise was present
|
|
41
|
-
* that could have applied and did not. That
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
* worth of effort guessing between them.
|
|
39
|
+
* `accepted` is the pass. A rejection carries `rejectedBy` only when the
|
|
40
|
+
* recognized teardown noise was present, i.e. when the belt was the thing
|
|
41
|
+
* that could have applied and did not. That is what the field is for: a run
|
|
42
|
+
* with no teardown traceback was never a candidate and naming a "rejecting
|
|
43
|
+
* condition" for it would be noise, whereas a run that does carry the
|
|
44
|
+
* traceback and still fails is the shape an operator otherwise cannot
|
|
45
|
+
* diagnose from outside. Every condition is all-or-nothing, so the failing
|
|
46
|
+
* verdict looks identical whichever one rejected it, and a downstream report
|
|
47
|
+
* spent a re-run and a filed-bug's worth of effort guessing between them.
|
|
49
48
|
*/
|
|
50
49
|
export interface GreenTeardownOverride {
|
|
51
50
|
accepted: boolean;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Verdict-note helpers for the harness classifier.
|
|
4
4
|
*
|
|
5
5
|
* Split out of `test-harness-crash.ts` (at its per-file line budget). These
|
|
6
|
-
* decide the
|
|
6
|
+
* decide the advisory parenthetical on the `FIREFORGE-VERDICT:` line. None
|
|
7
7
|
* of them changes a status or a reason key, which the verdict contract's
|
|
8
8
|
* consumers parse.
|
|
9
9
|
*/
|
|
@@ -19,12 +19,12 @@ const UNEXPECTED_MARKER = /TEST-UNEXPECTED-\w+/;
|
|
|
19
19
|
* `Unexpected results: 0`, yet the run is still classified `test-failures`
|
|
20
20
|
* on evidence lines that carry NO `TEST-UNEXPECTED-*` marker.
|
|
21
21
|
*
|
|
22
|
-
* `unexpected=0` printed beside `reason=test-failures`
|
|
23
|
-
*
|
|
22
|
+
* `unexpected=0` printed beside `reason=test-failures` means the verdict
|
|
23
|
+
* rests on pattern matching rather than on a harness result, and a
|
|
24
24
|
* reader who cannot see that spends hours attributing a red run to the
|
|
25
25
|
* change under test. The note says so on the verdict line itself.
|
|
26
26
|
*
|
|
27
|
-
*
|
|
27
|
+
* This is a note and not a reclassification: a non-zero exit with no
|
|
28
28
|
* green-shaped summary is still a failing run, and inventing a new `reason`
|
|
29
29
|
* would break the `FIREFORGE-VERDICT:` contract its consumers parse.
|
|
30
30
|
*/
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Directory-argument scope analysis for `fireforge test`.
|
|
3
3
|
*
|
|
4
|
-
* mozbuild's test resolver matches command-line paths by
|
|
4
|
+
* mozbuild's test resolver matches command-line paths by string prefix, so
|
|
5
5
|
* `fireforge test browser/base/content/test/hominis` also runs the sibling
|
|
6
|
-
* directory `browser/base/content/test/hominis-tiles
|
|
6
|
+
* directory `browser/base/content/test/hominis-tiles`, silently, and with
|
|
7
7
|
* no indication the scope widened.
|
|
8
8
|
*
|
|
9
|
-
* FireForge therefore treats a directory argument as meaning
|
|
9
|
+
* FireForge therefore treats a directory argument as meaning exactly that
|
|
10
10
|
* directory: {@link analyzeTestPathScopes} enumerates the test files of
|
|
11
|
-
* exactly that directory and dispatches
|
|
11
|
+
* exactly that directory and dispatches that explicit file list to mach,
|
|
12
12
|
* because a file list cannot prefix-match anything. Normalizing the
|
|
13
|
-
* directory with a trailing `/` does
|
|
13
|
+
* directory with a trailing `/` does not work. Mach still sweeps in the
|
|
14
14
|
* prefix-named sibling. The prefix-matching sibling directories are still
|
|
15
15
|
* reported so the command layer can tell the operator what was excluded.
|
|
16
16
|
*
|
|
17
17
|
* FireForge already rejects non-existent paths up front, so raw
|
|
18
|
-
* prefix-widening was never something an operator could invoke
|
|
19
|
-
*
|
|
18
|
+
* prefix-widening was never something an operator could invoke on purpose.
|
|
19
|
+
* It only ever happened by accident.
|
|
20
20
|
*/
|
|
21
21
|
/** A sibling directory the raw mach prefix match would have included. */
|
|
22
22
|
export interface SiblingPrefixMatch {
|
|
@@ -34,7 +34,7 @@ export interface TestPathScope {
|
|
|
34
34
|
* list for a directory (mach cannot prefix-widen an explicit file
|
|
35
35
|
* list), or the argument unchanged for files. A directory containing
|
|
36
36
|
* no enumerable test files falls back to the trailing-`/` directory
|
|
37
|
-
* form
|
|
37
|
+
* form: there is nothing to list, and mach owns the "no tests found"
|
|
38
38
|
* failure.
|
|
39
39
|
*/
|
|
40
40
|
dispatchPaths: string[];
|
|
@@ -2,22 +2,22 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Directory-argument scope analysis for `fireforge test`.
|
|
4
4
|
*
|
|
5
|
-
* mozbuild's test resolver matches command-line paths by
|
|
5
|
+
* mozbuild's test resolver matches command-line paths by string prefix, so
|
|
6
6
|
* `fireforge test browser/base/content/test/hominis` also runs the sibling
|
|
7
|
-
* directory `browser/base/content/test/hominis-tiles
|
|
7
|
+
* directory `browser/base/content/test/hominis-tiles`, silently, and with
|
|
8
8
|
* no indication the scope widened.
|
|
9
9
|
*
|
|
10
|
-
* FireForge therefore treats a directory argument as meaning
|
|
10
|
+
* FireForge therefore treats a directory argument as meaning exactly that
|
|
11
11
|
* directory: {@link analyzeTestPathScopes} enumerates the test files of
|
|
12
|
-
* exactly that directory and dispatches
|
|
12
|
+
* exactly that directory and dispatches that explicit file list to mach,
|
|
13
13
|
* because a file list cannot prefix-match anything. Normalizing the
|
|
14
|
-
* directory with a trailing `/` does
|
|
14
|
+
* directory with a trailing `/` does not work. Mach still sweeps in the
|
|
15
15
|
* prefix-named sibling. The prefix-matching sibling directories are still
|
|
16
16
|
* reported so the command layer can tell the operator what was excluded.
|
|
17
17
|
*
|
|
18
18
|
* FireForge already rejects non-existent paths up front, so raw
|
|
19
|
-
* prefix-widening was never something an operator could invoke
|
|
20
|
-
*
|
|
19
|
+
* prefix-widening was never something an operator could invoke on purpose.
|
|
20
|
+
* It only ever happened by accident.
|
|
21
21
|
*/
|
|
22
22
|
import { readdir, stat } from 'node:fs/promises';
|
|
23
23
|
import { basename, dirname, join } from 'node:path';
|
|
@@ -26,7 +26,7 @@ const TEST_FILE_PATTERN = /^(?:browser|test)_.*\.(?:m?js|x?html)$/;
|
|
|
26
26
|
/**
|
|
27
27
|
* Recursively enumerates test-implementation files under a directory,
|
|
28
28
|
* returned engine-relative and sorted for deterministic dispatch order.
|
|
29
|
-
* Returns [] when the directory cannot be read
|
|
29
|
+
* Returns [] when the directory cannot be read. The caller then falls
|
|
30
30
|
* back to the directory form and mach owns the failure.
|
|
31
31
|
*/
|
|
32
32
|
async function collectTestFiles(dir, relPrefix) {
|
|
@@ -95,13 +95,13 @@ async function analyzeTestPathScope(engineDir, requestedPath) {
|
|
|
95
95
|
}
|
|
96
96
|
}
|
|
97
97
|
catch {
|
|
98
|
-
// Unreadable parent: skip the sibling probe
|
|
98
|
+
// Unreadable parent: skip the sibling probe. Exactness via the
|
|
99
99
|
// explicit file list is preserved regardless.
|
|
100
100
|
}
|
|
101
101
|
const testFiles = await collectTestFiles(absolute, `${stripped}/`);
|
|
102
102
|
return {
|
|
103
103
|
requestedPath,
|
|
104
|
-
// The explicit file list is what makes the selection exact
|
|
104
|
+
// The explicit file list is what makes the selection exact. An empty
|
|
105
105
|
// enumeration falls back to the directory form.
|
|
106
106
|
dispatchPaths: testFiles.length > 0 ? testFiles : [`${stripped}/`],
|
|
107
107
|
isDirectory: true,
|
|
@@ -135,7 +135,7 @@ export function formatScopeNotice(scope) {
|
|
|
135
135
|
.join(', ');
|
|
136
136
|
if (scope.testFileCount === 0) {
|
|
137
137
|
// Fallback dispatch: with nothing to enumerate, the raw directory form
|
|
138
|
-
// goes to mach, whose prefix matching
|
|
138
|
+
// goes to mach, whose prefix matching can sweep the siblings in.
|
|
139
139
|
// Claiming exclusion here would be a lie.
|
|
140
140
|
return (`${requestedDir}/ contains no enumerable test files, so the directory is passed to mach ` +
|
|
141
141
|
`as-is — mach resolves paths by string prefix, which may also select: ${siblings}.`);
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import { isXpcomManifestPath } from './build-audit.js';
|
|
2
1
|
import type { BuildBaseline, TestPackagingCoverage } from './build-baseline-types.js';
|
|
3
|
-
export { isXpcomManifestPath };
|
|
4
2
|
/** Result of the stale-build preflight probe. */
|
|
5
3
|
export interface StaleBuildResult {
|
|
6
4
|
/** True when at least one packageable engine file changed since the baseline. */
|
|
@@ -8,7 +6,7 @@ export interface StaleBuildResult {
|
|
|
8
6
|
/**
|
|
9
7
|
* Engine-relative paths that would have been packaged but appear to have
|
|
10
8
|
* changed since the baseline. Sorted and deduplicated. Truncated at
|
|
11
|
-
* {@link STALE_PATHS_LIMIT} entries for rendering
|
|
9
|
+
* {@link STALE_PATHS_LIMIT} entries for rendering. Consult
|
|
12
10
|
* {@link StaleBuildResult.truncated} to know when to append a `(+N more)`
|
|
13
11
|
* tail to the warning.
|
|
14
12
|
*/
|
|
@@ -20,16 +18,16 @@ export interface StaleBuildResult {
|
|
|
20
18
|
truncated: number;
|
|
21
19
|
/**
|
|
22
20
|
* The baseline that anchored the diff, or undefined when no previous
|
|
23
|
-
* successful build exists. A missing baseline is treated as "not stale"
|
|
24
|
-
*
|
|
21
|
+
* successful build exists. A missing baseline is treated as "not stale":
|
|
22
|
+
* we have nothing to compare against and a warning would mislead.
|
|
25
23
|
*/
|
|
26
24
|
baseline: BuildBaseline | undefined;
|
|
27
25
|
}
|
|
28
26
|
/**
|
|
29
27
|
* Probes the engine tree for packageable changes since the last successful
|
|
30
28
|
* `fireforge build`. Returns a summary the `fireforge test` handler renders
|
|
31
|
-
* as an up-front warning when `--build` was
|
|
32
|
-
* throws
|
|
29
|
+
* as an up-front warning when `--build` was not passed. The probe never
|
|
30
|
+
* throws. Git failures and a missing baseline both degrade to `stale: false`
|
|
33
31
|
* so a broken probe cannot block a test run.
|
|
34
32
|
*
|
|
35
33
|
* @param projectRoot Root directory of the project.
|
|
@@ -50,25 +48,26 @@ export declare const FULL_SUITE_REQUEST = "(entire suite)";
|
|
|
50
48
|
/**
|
|
51
49
|
* Compares the requested test paths against the packaged runtime's coverage
|
|
52
50
|
* claim recorded in the baseline. Returns the requested paths the recorded
|
|
53
|
-
* packaging does
|
|
51
|
+
* packaging does not cover: the runs that would dispatch against missing
|
|
54
52
|
* `_tests/` support fixtures and hang rather than fail.
|
|
55
53
|
*
|
|
56
54
|
* Coverage semantics: an absent claim and `'full'` cover everything. A
|
|
57
55
|
* scoped list covers a request path when the request equals a covered entry,
|
|
58
56
|
* sits beneath a covered directory entry, or shares a manifest granule with
|
|
59
|
-
* a covered entry ({@link toManifestGranule}
|
|
57
|
+
* a covered entry (see {@link toManifestGranule}: a scoped `test --build`
|
|
60
58
|
* packages the whole manifest directory, so a same-manifest sibling of a
|
|
61
59
|
* covered file is packaged too). Both sides are normalized to forward
|
|
62
60
|
* slashes so Windows-style CLI input cannot defeat the prefix rule (baseline
|
|
63
61
|
* paths are POSIX by convention). A request with no paths is a full-suite
|
|
64
|
-
* run and is never covered by a scoped list
|
|
65
|
-
* sentinel is returned
|
|
62
|
+
* run and is never covered by a scoped list, so the
|
|
63
|
+
* {@link FULL_SUITE_REQUEST} sentinel is returned and the refusal can name
|
|
64
|
+
* it.
|
|
66
65
|
*/
|
|
67
66
|
export declare function findUncoveredRequestPaths(coverage: TestPackagingCoverage | undefined, requestedPaths: readonly string[]): string[];
|
|
68
67
|
/**
|
|
69
68
|
* Test manifests changed since the recorded build that sit in (or above)
|
|
70
|
-
* the directory of an uncovered request path
|
|
71
|
-
*
|
|
69
|
+
* the directory of an uncovered request path, i.e. the manifests that
|
|
70
|
+
* explain why this run needs coverage the build never claimed.
|
|
72
71
|
*
|
|
73
72
|
* Best-effort: a probe failure returns an empty list, so the refusal
|
|
74
73
|
* degrades to exactly its previous text rather than failing differently.
|
|
@@ -86,7 +85,7 @@ export declare function findChangedTestManifestsForPaths(engineDir: string, base
|
|
|
86
85
|
* @param coverage - The recorded scoped coverage claim
|
|
87
86
|
* @param changedManifests - Test manifests changed since the recorded
|
|
88
87
|
* build that explain an uncovered path (from
|
|
89
|
-
* {@link findChangedTestManifestsForPaths})
|
|
88
|
+
* {@link findChangedTestManifestsForPaths}). Omitted or empty renders
|
|
90
89
|
* nothing
|
|
91
90
|
*/
|
|
92
91
|
export declare function formatTestCoverageRefusal(uncovered: string[], coverage: string[], changedManifests?: readonly string[]): string;
|
|
@@ -95,25 +94,25 @@ export interface StaticComponentsStaleResult {
|
|
|
95
94
|
/** True when at least one `components.conf` genuinely diverged from the anchor. */
|
|
96
95
|
stale: boolean;
|
|
97
96
|
/**
|
|
98
|
-
* Engine-relative `components.conf` paths changed since the last
|
|
99
|
-
* build. Sorted
|
|
97
|
+
* Engine-relative `components.conf` paths changed since the last full
|
|
98
|
+
* build. Sorted, and not capped. {@link formatStaticComponentsRefusal}
|
|
100
99
|
* applies the render cap.
|
|
101
100
|
*/
|
|
102
101
|
changedManifests: string[];
|
|
103
102
|
}
|
|
104
103
|
/**
|
|
105
|
-
* Probes whether any `components.conf` changed since the last
|
|
106
|
-
* `fireforge build
|
|
107
|
-
* last regenerated. `components.conf` entries bake into compiled code
|
|
104
|
+
* Probes whether any `components.conf` changed since the last full
|
|
105
|
+
* `fireforge build`, i.e. since the compiled StaticComponents table was
|
|
106
|
+
* last regenerated. `components.conf` entries bake into compiled code. A
|
|
108
107
|
* scoped `test --build` packages the file but the child process resolves the
|
|
109
|
-
*
|
|
108
|
+
* old table and fails with `NS_ERROR_MALFORMED_URI` that reads as a test
|
|
110
109
|
* bug.
|
|
111
110
|
*
|
|
112
111
|
* The diff anchors to the baseline's `staticComponentsBaseline` (the last
|
|
113
|
-
* full build's engine HEAD SHA),
|
|
112
|
+
* full build's engine HEAD SHA), not the baseline's own `engineHeadSha`,
|
|
114
113
|
* which a scoped `test --build` advances. Dirty candidates are hash-checked
|
|
115
114
|
* against the anchor's fingerprints so only genuine content divergence
|
|
116
|
-
* counts. No baseline or no anchor means fresh. Never throws
|
|
115
|
+
* counts. No baseline or no anchor means fresh. Never throws: the probes it
|
|
117
116
|
* composes degrade to verbose lines and empty results on git failure,
|
|
118
117
|
* matching {@link checkStaleBuildForTest}.
|
|
119
118
|
*/
|
|
@@ -130,7 +129,7 @@ export declare function formatStaticComponentsRefusal(changedManifests: string[]
|
|
|
130
129
|
* `fireforge import` when `components.conf` diverged from the last full
|
|
131
130
|
* build. Same probe as {@link formatStaticComponentsRefusal},
|
|
132
131
|
* different moment: this fires at mutation time so the operator learns a
|
|
133
|
-
* full build is needed
|
|
132
|
+
* full build is needed before the next gate run refuses.
|
|
134
133
|
*/
|
|
135
134
|
export declare function formatPostMutationStaticComponentsWarning(changedManifests: string[]): string;
|
|
136
135
|
/**
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
* Without this preflight, an operator who edits engine chrome / packaged
|
|
6
6
|
* resources (`jar.mn` entries, `.xhtml`/`.mjs`/`.css` under chrome trees,
|
|
7
7
|
* pref files) and then runs `fireforge test <path>` only discovers the build
|
|
8
|
-
* is stale
|
|
9
|
-
* `NS_ERROR_FILE_NOT_FOUND` against a `chrome://browser/content/…` URI
|
|
10
|
-
* which reads as a test bug
|
|
8
|
+
* is stale after xpcshell / mach test starts and errors out with
|
|
9
|
+
* `NS_ERROR_FILE_NOT_FOUND` against a `chrome://browser/content/…` URI,
|
|
10
|
+
* which reads as a test bug rather than a rebuild prompt. Scaffolding a new
|
|
11
11
|
* top-level chrome document plus an xpcshell test is the canonical case: the
|
|
12
12
|
* test file exists, the manifests are registered, but `dist/` still holds
|
|
13
13
|
* the pre-edit bundle and chrome URIs resolve to nothing.
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* baseline (`.fireforge/last-build.json`), filters to paths that imply
|
|
17
17
|
* packaging, and returns a compact summary. `fireforge test` prints a
|
|
18
18
|
* warning up-front so the operator sees "you edited X, Y, Z since the last
|
|
19
|
-
* build
|
|
19
|
+
* build, rerun with `--build` to refresh" before mach test launches.
|
|
20
20
|
* Detection stays advisory (warn-only) because a fork that rebuilds
|
|
21
21
|
* out-of-band (a separate `./mach build` invocation, an IDE plugin) can
|
|
22
22
|
* legitimately have a fresh `dist/` with no FireForge-recorded baseline
|
|
@@ -24,18 +24,18 @@
|
|
|
24
24
|
*/
|
|
25
25
|
import { toError } from '../utils/errors.js';
|
|
26
26
|
import { verbose, warn } from '../utils/logger.js';
|
|
27
|
+
import { normalizePathSlashes } from '../utils/paths.js';
|
|
27
28
|
import { isPackageablePath, isXpcomManifestPath } from './build-audit.js';
|
|
28
29
|
import { readBuildBaseline } from './build-baseline.js';
|
|
29
30
|
import { hashEngineFile } from './coverage-extend.js';
|
|
30
31
|
import { collectChangedEnginePaths, dropPathsMatchingFingerprints } from './engine-changes.js';
|
|
31
|
-
export { isXpcomManifestPath };
|
|
32
32
|
/** Cap on the number of changed paths rendered inline. */
|
|
33
33
|
const STALE_PATHS_LIMIT = 10;
|
|
34
34
|
/**
|
|
35
35
|
* Probes the engine tree for packageable changes since the last successful
|
|
36
36
|
* `fireforge build`. Returns a summary the `fireforge test` handler renders
|
|
37
|
-
* as an up-front warning when `--build` was
|
|
38
|
-
* throws
|
|
37
|
+
* as an up-front warning when `--build` was not passed. The probe never
|
|
38
|
+
* throws. Git failures and a missing baseline both degrade to `stale: false`
|
|
39
39
|
* so a broken probe cannot block a test run.
|
|
40
40
|
*
|
|
41
41
|
* @param projectRoot Root directory of the project.
|
|
@@ -58,8 +58,8 @@ export async function checkStaleBuildForTest(projectRoot, engineDir) {
|
|
|
58
58
|
// Furnace-applied components always has a persistent workdir diff against
|
|
59
59
|
// HEAD, so `git diff --name-only HEAD` returns that diff on every build
|
|
60
60
|
// and the stale check fires immediately after a successful one. The
|
|
61
|
-
// fingerprints capture "these files had this content when the build ran"
|
|
62
|
-
//
|
|
61
|
+
// fingerprints capture "these files had this content when the build ran".
|
|
62
|
+
// A path stays stale only when its live hash diverges.
|
|
63
63
|
packageable = await dropPathsMatchingFingerprints(engineDir, packageable, baseline.packageableFingerprints);
|
|
64
64
|
if (packageable.length === 0) {
|
|
65
65
|
return { stale: false, changedPaths: [], truncated: 0, baseline };
|
|
@@ -89,19 +89,20 @@ export const FULL_SUITE_REQUEST = '(entire suite)';
|
|
|
89
89
|
/**
|
|
90
90
|
* Compares the requested test paths against the packaged runtime's coverage
|
|
91
91
|
* claim recorded in the baseline. Returns the requested paths the recorded
|
|
92
|
-
* packaging does
|
|
92
|
+
* packaging does not cover: the runs that would dispatch against missing
|
|
93
93
|
* `_tests/` support fixtures and hang rather than fail.
|
|
94
94
|
*
|
|
95
95
|
* Coverage semantics: an absent claim and `'full'` cover everything. A
|
|
96
96
|
* scoped list covers a request path when the request equals a covered entry,
|
|
97
97
|
* sits beneath a covered directory entry, or shares a manifest granule with
|
|
98
|
-
* a covered entry ({@link toManifestGranule}
|
|
98
|
+
* a covered entry (see {@link toManifestGranule}: a scoped `test --build`
|
|
99
99
|
* packages the whole manifest directory, so a same-manifest sibling of a
|
|
100
100
|
* covered file is packaged too). Both sides are normalized to forward
|
|
101
101
|
* slashes so Windows-style CLI input cannot defeat the prefix rule (baseline
|
|
102
102
|
* paths are POSIX by convention). A request with no paths is a full-suite
|
|
103
|
-
* run and is never covered by a scoped list
|
|
104
|
-
* sentinel is returned
|
|
103
|
+
* run and is never covered by a scoped list, so the
|
|
104
|
+
* {@link FULL_SUITE_REQUEST} sentinel is returned and the refusal can name
|
|
105
|
+
* it.
|
|
105
106
|
*/
|
|
106
107
|
export function findUncoveredRequestPaths(coverage, requestedPaths) {
|
|
107
108
|
if (coverage === undefined || coverage === 'full') {
|
|
@@ -121,10 +122,10 @@ export function findUncoveredRequestPaths(coverage, requestedPaths) {
|
|
|
121
122
|
* Maps a normalized request/coverage path to the "manifest granule" the
|
|
122
123
|
* packaged runtime actually staged: an extension-bearing basename (a test
|
|
123
124
|
* FILE) maps to its containing directory, a directory (no dot in the
|
|
124
|
-
* basename) maps to itself. Purely lexical
|
|
125
|
+
* basename) maps to itself. Purely lexical: the directory-as-manifest
|
|
125
126
|
* approximation holds because xpcshell/mochitest manifests live next to
|
|
126
127
|
* their test files and a scoped `test --build` stages the whole manifest
|
|
127
|
-
* directory into `obj-*`/`_tests/`, not single files. Caveat: a
|
|
128
|
+
* directory into `obj-*`/`_tests/`, not single files. Caveat: a directory
|
|
128
129
|
* whose basename contains a dot is misread as a file and mapped to its
|
|
129
130
|
* parent, which widens (never narrows) the covered granule.
|
|
130
131
|
*/
|
|
@@ -138,11 +139,11 @@ function toManifestGranule(path) {
|
|
|
138
139
|
}
|
|
139
140
|
/** Normalizes a path for coverage comparison: forward slashes, no trailing slash. */
|
|
140
141
|
function normalizeCoveragePath(path) {
|
|
141
|
-
return path.trim()
|
|
142
|
+
return normalizePathSlashes(path.trim()).replace(/\/+$/, '');
|
|
142
143
|
}
|
|
143
144
|
/**
|
|
144
145
|
* Formats the refusal shown when a non-`--build` run requests paths the
|
|
145
|
-
* packaged runtime's scoped `test --build` coverage does not include
|
|
146
|
+
* packaged runtime's scoped `test --build` coverage does not include. It is
|
|
146
147
|
* enforced on every such run, with or without `--allow-stale-build`. Kept
|
|
147
148
|
* separate from the matcher so tests can pin structure and copy
|
|
148
149
|
* independently (same split as {@link formatStaleBuildWarning}).
|
|
@@ -150,7 +151,7 @@ function normalizeCoveragePath(path) {
|
|
|
150
151
|
/**
|
|
151
152
|
* Basenames of the test manifests whose entries decide what a packaged test
|
|
152
153
|
* runtime stages. A manifest that gained an entry is the single most common
|
|
153
|
-
* reason a run needs coverage the last build never claimed
|
|
154
|
+
* reason a run needs coverage the last build never claimed, and it is a
|
|
154
155
|
* fact FireForge already holds but never said, leaving the operator to
|
|
155
156
|
* rediscover it after a correct refusal.
|
|
156
157
|
*/
|
|
@@ -173,8 +174,8 @@ function isTestManifestPath(path) {
|
|
|
173
174
|
}
|
|
174
175
|
/**
|
|
175
176
|
* Test manifests changed since the recorded build that sit in (or above)
|
|
176
|
-
* the directory of an uncovered request path
|
|
177
|
-
*
|
|
177
|
+
* the directory of an uncovered request path, i.e. the manifests that
|
|
178
|
+
* explain why this run needs coverage the build never claimed.
|
|
178
179
|
*
|
|
179
180
|
* Best-effort: a probe failure returns an empty list, so the refusal
|
|
180
181
|
* degrades to exactly its previous text rather than failing differently.
|
|
@@ -211,7 +212,7 @@ export async function findChangedTestManifestsForPaths(engineDir, baseline, unco
|
|
|
211
212
|
* @param coverage - The recorded scoped coverage claim
|
|
212
213
|
* @param changedManifests - Test manifests changed since the recorded
|
|
213
214
|
* build that explain an uncovered path (from
|
|
214
|
-
* {@link findChangedTestManifestsForPaths})
|
|
215
|
+
* {@link findChangedTestManifestsForPaths}). Omitted or empty renders
|
|
215
216
|
* nothing
|
|
216
217
|
*/
|
|
217
218
|
export function formatTestCoverageRefusal(uncovered, coverage, changedManifests = []) {
|
|
@@ -222,7 +223,7 @@ export function formatTestCoverageRefusal(uncovered, coverage, changedManifests
|
|
|
222
223
|
};
|
|
223
224
|
const rebuildTargets = uncovered.filter((p) => p !== FULL_SUITE_REQUEST);
|
|
224
225
|
// Name --extend-coverage here or it is undiscoverable: a scoped build
|
|
225
|
-
//
|
|
226
|
+
// replaces the claim, so under several concurrent sessions a peer's build
|
|
226
227
|
// for an unrelated path erases coverage you legitimately still hold, and
|
|
227
228
|
// the union that fixes it is a flag the operator has no reason to know
|
|
228
229
|
// exists at the moment they need it. The anchor conditions are stated
|
|
@@ -233,7 +234,7 @@ export function formatTestCoverageRefusal(uncovered, coverage, changedManifests
|
|
|
233
234
|
const rebuildHint = rebuildTargets.length > 0
|
|
234
235
|
? `Rerun "fireforge test --build ${rebuildTargets.slice(0, STALE_PATHS_LIMIT).join(' ')}" to package them, or run "fireforge build" for full coverage.${extendHint}`
|
|
235
236
|
: 'Run "fireforge build" (or a path-less "fireforge test --build") for full coverage first.';
|
|
236
|
-
// Why
|
|
237
|
+
// Why this run needs new coverage, when a changed manifest explains it: a
|
|
237
238
|
// manifest that gained an entry is not covered by a build claim recorded
|
|
238
239
|
// for other paths, and a browser-chrome claim never covers xpcshell.
|
|
239
240
|
const manifestLine = changedManifests.length > 0
|
|
@@ -246,18 +247,18 @@ export function formatTestCoverageRefusal(uncovered, coverage, changedManifests
|
|
|
246
247
|
'(--allow-stale-build does not bypass this check — it accepts stale content, not missing coverage.)');
|
|
247
248
|
}
|
|
248
249
|
/**
|
|
249
|
-
* Probes whether any `components.conf` changed since the last
|
|
250
|
-
* `fireforge build
|
|
251
|
-
* last regenerated. `components.conf` entries bake into compiled code
|
|
250
|
+
* Probes whether any `components.conf` changed since the last full
|
|
251
|
+
* `fireforge build`, i.e. since the compiled StaticComponents table was
|
|
252
|
+
* last regenerated. `components.conf` entries bake into compiled code. A
|
|
252
253
|
* scoped `test --build` packages the file but the child process resolves the
|
|
253
|
-
*
|
|
254
|
+
* old table and fails with `NS_ERROR_MALFORMED_URI` that reads as a test
|
|
254
255
|
* bug.
|
|
255
256
|
*
|
|
256
257
|
* The diff anchors to the baseline's `staticComponentsBaseline` (the last
|
|
257
|
-
* full build's engine HEAD SHA),
|
|
258
|
+
* full build's engine HEAD SHA), not the baseline's own `engineHeadSha`,
|
|
258
259
|
* which a scoped `test --build` advances. Dirty candidates are hash-checked
|
|
259
260
|
* against the anchor's fingerprints so only genuine content divergence
|
|
260
|
-
* counts. No baseline or no anchor means fresh. Never throws
|
|
261
|
+
* counts. No baseline or no anchor means fresh. Never throws: the probes it
|
|
261
262
|
* composes degrade to verbose lines and empty results on git failure,
|
|
262
263
|
* matching {@link checkStaleBuildForTest}.
|
|
263
264
|
*/
|
|
@@ -300,7 +301,7 @@ export function formatStaticComponentsRefusal(changedManifests) {
|
|
|
300
301
|
* `fireforge import` when `components.conf` diverged from the last full
|
|
301
302
|
* build. Same probe as {@link formatStaticComponentsRefusal},
|
|
302
303
|
* different moment: this fires at mutation time so the operator learns a
|
|
303
|
-
* full build is needed
|
|
304
|
+
* full build is needed before the next gate run refuses.
|
|
304
305
|
*/
|
|
305
306
|
export function formatPostMutationStaticComponentsWarning(changedManifests) {
|
|
306
307
|
const head = changedManifests.slice(0, STALE_PATHS_LIMIT);
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Removes one stale xpcshell `_tests` symlink when mach reports a
|
|
6
6
|
* FileExistsError during test installation.
|
|
7
7
|
*
|
|
8
|
-
* The guard rails are
|
|
8
|
+
* The guard rails are narrow: only quoted FileExistsError
|
|
9
9
|
* destinations inside the active objdir's `_tests` tree are considered, and
|
|
10
10
|
* only when lstat confirms the destination itself is a symlink.
|
|
11
11
|
*/
|
|
@@ -17,7 +17,7 @@ function isInsideDirectory(parent, candidate) {
|
|
|
17
17
|
* Removes one stale xpcshell `_tests` symlink when mach reports a
|
|
18
18
|
* FileExistsError during test installation.
|
|
19
19
|
*
|
|
20
|
-
* The guard rails are
|
|
20
|
+
* The guard rails are narrow: only quoted FileExistsError
|
|
21
21
|
* destinations inside the active objdir's `_tests` tree are considered, and
|
|
22
22
|
* only when lstat confirms the destination itself is a symlink.
|
|
23
23
|
*/
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Operator-facing triage for the `timed out … with no output` / `Ran 0
|
|
3
|
-
* checks` stall
|
|
3
|
+
* checks` stall: the shape where the harness dies before any test output.
|
|
4
4
|
*
|
|
5
|
-
* Split out of `test-harness-crash.ts`, which
|
|
5
|
+
* Split out of `test-harness-crash.ts`, which classifies runs. This module
|
|
6
6
|
* only renders advice about one already-classified shape. Keeping the two
|
|
7
7
|
* apart matters because the census below carries claims of unequal
|
|
8
8
|
* evidential strength, and the rules for editing it are not the rules for
|
|
@@ -10,23 +10,23 @@
|
|
|
10
10
|
* the output or not, while a cause in the census is an assertion about the
|
|
11
11
|
* world that an operator will act on.
|
|
12
12
|
*
|
|
13
|
-
* Everything here is pure
|
|
13
|
+
* Everything here is pure. The platform and the probed display state are
|
|
14
14
|
* injected, so unit tests need no mocking.
|
|
15
15
|
*/
|
|
16
16
|
import type { DisplaySleepState } from './display-state.js';
|
|
17
17
|
import type { HarnessCrashSignature } from './test-harness-signature.js';
|
|
18
18
|
/**
|
|
19
|
-
* Optional hint appended to the harness-crash message when a
|
|
19
|
+
* Optional hint appended to the harness-crash message when a headed run on
|
|
20
20
|
* macOS died at the no-output timeout.
|
|
21
21
|
*
|
|
22
|
-
* When `displayState` names a
|
|
23
|
-
* fact rather than as one of three possibilities
|
|
24
|
-
*
|
|
22
|
+
* When `displayState` names a measured display state, the hint states it as
|
|
23
|
+
* fact rather than as one of three possibilities, which is what probing is
|
|
24
|
+
* for: an operator staring at a bare test failure should not have to
|
|
25
25
|
* rediscover that their machine dimmed. `caffeinate` is described accurately
|
|
26
|
-
* (it prevents sleep
|
|
26
|
+
* (it prevents sleep, and cannot wake an already-sleeping display), so
|
|
27
27
|
* operators are not sent to a command that could not have helped them.
|
|
28
28
|
*
|
|
29
|
-
* Pure
|
|
29
|
+
* Pure. The platform and the probed state are injected so unit tests need
|
|
30
30
|
* no mocking.
|
|
31
31
|
*
|
|
32
32
|
* @param signature - The recognized crash shape
|