@hominis/fireforge 0.46.0 → 0.46.2
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 +381 -498
- package/dist/bin/fireforge.d.ts +1 -1
- package/dist/bin/fireforge.js +17 -17
- package/dist/build-info.json +4 -4
- package/dist/src/cli-usage-error.d.ts +9 -9
- package/dist/src/cli-usage-error.js +12 -12
- package/dist/src/cli.d.ts +3 -2
- package/dist/src/cli.js +29 -28
- package/dist/src/commands/bootstrap-checks.js +2 -1
- package/dist/src/commands/bootstrap.js +2 -2
- package/dist/src/commands/build.js +12 -11
- package/dist/src/commands/config.js +9 -9
- package/dist/src/commands/destructive-decision.d.ts +4 -4
- package/dist/src/commands/destructive-decision.js +4 -4
- package/dist/src/commands/discard.js +5 -5
- package/dist/src/commands/doctor-check-core.d.ts +4 -4
- 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 -11
- package/dist/src/commands/doctor-orphaned-harness.js +10 -11
- 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 +2 -2
- 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 +2 -2
- package/dist/src/commands/doctor.js +9 -9
- package/dist/src/commands/download.js +15 -13
- package/dist/src/commands/export-all.js +8 -8
- package/dist/src/commands/export-flow.d.ts +5 -5
- package/dist/src/commands/export-flow.js +14 -14
- package/dist/src/commands/export-placement-conflicts.d.ts +3 -3
- package/dist/src/commands/export-placement-conflicts.js +9 -9
- package/dist/src/commands/export-placement-gate.d.ts +2 -2
- package/dist/src/commands/export-placement-gate.js +5 -5
- package/dist/src/commands/export-placement-policy.d.ts +1 -1
- package/dist/src/commands/export-placement-policy.js +1 -1
- package/dist/src/commands/export-shared.d.ts +10 -10
- package/dist/src/commands/export-shared.js +13 -13
- package/dist/src/commands/export.js +4 -4
- package/dist/src/commands/furnace/apply.js +16 -16
- package/dist/src/commands/furnace/chrome-doc-remove.d.ts +1 -1
- package/dist/src/commands/furnace/chrome-doc-remove.js +1 -1
- 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 +4 -4
- package/dist/src/commands/furnace/create-dry-run.d.ts +4 -4
- package/dist/src/commands/furnace/create-dry-run.js +4 -4
- 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 +14 -14
- package/dist/src/commands/furnace/create-templates.js +18 -18
- 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 +10 -10
- package/dist/src/commands/furnace/deploy.js +4 -4
- 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 +15 -15
- 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 +15 -15
- package/dist/src/commands/furnace/preview.js +17 -17
- package/dist/src/commands/furnace/refresh.js +6 -6
- package/dist/src/commands/furnace/remove-mutations.d.ts +3 -3
- package/dist/src/commands/furnace/remove-mutations.js +19 -18
- 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 +2 -2
- package/dist/src/commands/furnace/rename-browser-test.js +9 -8
- 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 +9 -9
- package/dist/src/commands/furnace/scan.js +3 -3
- package/dist/src/commands/furnace/status.js +7 -7
- package/dist/src/commands/furnace/sync.js +6 -6
- package/dist/src/commands/furnace/test-file-name.d.ts +2 -2
- package/dist/src/commands/furnace/test-file-name.js +2 -2
- package/dist/src/commands/furnace/validate.js +11 -12
- package/dist/src/commands/import.js +20 -20
- package/dist/src/commands/lint-per-patch.js +8 -8
- package/dist/src/commands/lint-per-run-checkjs.d.ts +12 -13
- 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 +3 -3
- package/dist/src/commands/lint.js +35 -35
- package/dist/src/commands/manifest.d.ts +4 -4
- package/dist/src/commands/package.js +2 -2
- package/dist/src/commands/patch/compact.d.ts +2 -2
- package/dist/src/commands/patch/compact.js +8 -8
- package/dist/src/commands/patch/delete.d.ts +1 -1
- package/dist/src/commands/patch/delete.js +8 -8
- package/dist/src/commands/patch/lint-ignore.d.ts +3 -4
- package/dist/src/commands/patch/lint-ignore.js +14 -15
- package/dist/src/commands/patch/move-files-create.d.ts +2 -2
- package/dist/src/commands/patch/move-files-create.js +5 -5
- package/dist/src/commands/patch/move-files-into.d.ts +2 -2
- package/dist/src/commands/patch/move-files-into.js +3 -3
- package/dist/src/commands/patch/move-files.js +1 -1
- 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 +8 -8
- package/dist/src/commands/patch/reorder.js +10 -10
- package/dist/src/commands/patch/split-plan.d.ts +3 -3
- package/dist/src/commands/patch/split-plan.js +6 -5
- package/dist/src/commands/patch/split.d.ts +2 -2
- package/dist/src/commands/patch/split.js +5 -5
- 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 +6 -6
- package/dist/src/commands/patch/tier.d.ts +2 -2
- package/dist/src/commands/patch/tier.js +5 -5
- package/dist/src/commands/patch-rename-map.d.ts +1 -1
- package/dist/src/commands/patch-rename-map.js +1 -1
- package/dist/src/commands/pending-resolution.d.ts +5 -5
- package/dist/src/commands/pending-resolution.js +5 -5
- package/dist/src/commands/re-export-adjacent.d.ts +3 -3
- package/dist/src/commands/re-export-adjacent.js +8 -8
- package/dist/src/commands/re-export-bulk-scan.d.ts +3 -3
- package/dist/src/commands/re-export-bulk-scan.js +17 -17
- package/dist/src/commands/re-export-drift.d.ts +10 -10
- package/dist/src/commands/re-export-drift.js +29 -29
- package/dist/src/commands/re-export-files.js +14 -15
- package/dist/src/commands/re-export-lint.d.ts +26 -26
- package/dist/src/commands/re-export-lint.js +27 -27
- 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 +7 -7
- package/dist/src/commands/re-export-single.d.ts +1 -1
- package/dist/src/commands/re-export-single.js +20 -20
- package/dist/src/commands/re-export.js +7 -6
- package/dist/src/commands/rebase/abort.js +6 -6
- package/dist/src/commands/rebase/continue.js +8 -7
- package/dist/src/commands/rebase/index.d.ts +1 -1
- package/dist/src/commands/rebase/index.js +3 -3
- package/dist/src/commands/rebase/patch-loop.js +18 -17
- 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 +3 -3
- package/dist/src/commands/run.js +26 -26
- package/dist/src/commands/setup-support.js +4 -4
- package/dist/src/commands/setup.js +1 -1
- package/dist/src/commands/source.js +1 -1
- package/dist/src/commands/status-check.d.ts +3 -3
- package/dist/src/commands/status-check.js +4 -4
- 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 +3 -3
- 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 +22 -22
- package/dist/src/commands/test-build-phase.d.ts +1 -1
- package/dist/src/commands/test-build-phase.js +17 -17
- 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 +2 -2
- package/dist/src/commands/test-modes.js +4 -4
- package/dist/src/commands/test-run.d.ts +11 -11
- package/dist/src/commands/test-run.js +15 -15
- package/dist/src/commands/test-stale-gate.d.ts +12 -12
- package/dist/src/commands/test-stale-gate.js +13 -13
- package/dist/src/commands/test-verdict.d.ts +6 -6
- package/dist/src/commands/test-verdict.js +11 -11
- package/dist/src/commands/test.d.ts +3 -3
- package/dist/src/commands/test.js +36 -36
- package/dist/src/commands/token-coverage.js +3 -3
- package/dist/src/commands/token-list.js +5 -5
- package/dist/src/commands/token.js +9 -9
- package/dist/src/commands/tree.js +19 -19
- package/dist/src/commands/typecheck.d.ts +6 -6
- package/dist/src/commands/typecheck.js +7 -7
- 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 +13 -13
- 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 -5
- package/dist/src/core/branding.js +3 -3
- package/dist/src/core/browser-wire.d.ts +1 -1
- package/dist/src/core/browser-wire.js +4 -4
- package/dist/src/core/build-audit-platform.d.ts +6 -6
- package/dist/src/core/build-audit-platform.js +26 -26
- package/dist/src/core/build-audit-registration.d.ts +5 -5
- package/dist/src/core/build-audit-registration.js +7 -7
- 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 +8 -8
- package/dist/src/core/build-audit-skip.js +12 -12
- 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 +8 -8
- package/dist/src/core/build-audit.js +39 -37
- 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 +8 -8
- package/dist/src/core/build-baseline.js +14 -14
- package/dist/src/core/build-jar-escalation.d.ts +8 -8
- package/dist/src/core/build-jar-escalation.js +15 -15
- package/dist/src/core/build-overwrite-guard.d.ts +4 -4
- package/dist/src/core/build-overwrite-guard.js +13 -13
- package/dist/src/core/build-prepare.d.ts +4 -4
- package/dist/src/core/build-prepare.js +16 -15
- package/dist/src/core/config-mutate.js +4 -4
- package/dist/src/core/config-state.js +2 -2
- package/dist/src/core/config-validate-build-audit.js +3 -3
- package/dist/src/core/config-validate-file-size.d.ts +1 -1
- package/dist/src/core/config-validate-file-size.js +2 -2
- package/dist/src/core/config-validate.js +8 -9
- package/dist/src/core/config.d.ts +10 -10
- package/dist/src/core/config.js +10 -10
- package/dist/src/core/coverage-extend.d.ts +16 -16
- package/dist/src/core/coverage-extend.js +16 -16
- 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 +15 -16
- 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 +4 -4
- package/dist/src/core/engine-precondition.js +2 -2
- package/dist/src/core/engine-session-lock.d.ts +18 -18
- package/dist/src/core/engine-session-lock.js +37 -37
- package/dist/src/core/export-moved-code-shape.d.ts +7 -7
- package/dist/src/core/export-moved-code-shape.js +8 -8
- package/dist/src/core/file-lock-owner.d.ts +11 -11
- package/dist/src/core/file-lock-owner.js +18 -18
- package/dist/src/core/file-lock.d.ts +12 -12
- package/dist/src/core/file-lock.js +52 -39
- package/dist/src/core/firefox-cache.d.ts +1 -1
- package/dist/src/core/firefox-cache.js +10 -10
- package/dist/src/core/firefox-download.d.ts +3 -3
- package/dist/src/core/firefox-download.js +6 -6
- package/dist/src/core/firefox-extract.d.ts +2 -2
- package/dist/src/core/firefox-extract.js +13 -13
- package/dist/src/core/firefox.d.ts +5 -5
- package/dist/src/core/firefox.js +8 -8
- package/dist/src/core/furnace-apply-dry-run.js +1 -1
- 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 -9
- package/dist/src/core/furnace-apply-helpers.js +21 -21
- 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 +9 -9
- 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 +3 -3
- package/dist/src/core/furnace-apply.js +22 -21
- 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 +4 -4
- package/dist/src/core/furnace-config.js +18 -18
- package/dist/src/core/furnace-constants.d.ts +6 -6
- package/dist/src/core/furnace-constants.js +6 -6
- 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 +1 -1
- package/dist/src/core/furnace-dir-entry.js +1 -1
- 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 +21 -20
- package/dist/src/core/furnace-operation.js +36 -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.js +2 -2
- package/dist/src/core/furnace-registration-ast.d.ts +2 -2
- package/dist/src/core/furnace-registration-ast.js +9 -9
- 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 +5 -5
- package/dist/src/core/furnace-registration.js +7 -7
- package/dist/src/core/furnace-rollback.d.ts +1 -1
- package/dist/src/core/furnace-rollback.js +5 -5
- 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 +10 -10
- 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 +13 -13
- 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 +4 -4
- package/dist/src/core/git-base.js +9 -9
- package/dist/src/core/git-diff-new-file.d.ts +4 -4
- package/dist/src/core/git-diff-new-file.js +8 -8
- package/dist/src/core/git-diff.d.ts +4 -4
- package/dist/src/core/git-diff.js +35 -34
- package/dist/src/core/git-file-ops.d.ts +6 -6
- package/dist/src/core/git-file-ops.js +7 -7
- package/dist/src/core/git-readonly-index.d.ts +12 -12
- package/dist/src/core/git-readonly-index.js +12 -12
- package/dist/src/core/git-status.d.ts +4 -4
- package/dist/src/core/git-status.js +4 -4
- package/dist/src/core/git.d.ts +3 -3
- package/dist/src/core/git.js +14 -14
- package/dist/src/core/harness-orphans.d.ts +17 -17
- package/dist/src/core/harness-orphans.js +20 -20
- package/dist/src/core/history-log.d.ts +3 -3
- package/dist/src/core/history-log.js +3 -3
- 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 -5
- package/dist/src/core/mach-error-hints.js +13 -13
- package/dist/src/core/mach-known-noise-filter.d.ts +41 -38
- package/dist/src/core/mach-known-noise-filter.js +53 -50
- package/dist/src/core/mach-mozconfig.d.ts +6 -6
- package/dist/src/core/mach-mozconfig.js +15 -15
- package/dist/src/core/mach-python.d.ts +2 -1
- package/dist/src/core/mach-python.js +4 -3
- package/dist/src/core/mach-resource-shim.d.ts +12 -12
- package/dist/src/core/mach-resource-shim.js +20 -20
- package/dist/src/core/mach.d.ts +23 -23
- package/dist/src/core/mach.js +36 -36
- package/dist/src/core/marionette-port.d.ts +15 -13
- package/dist/src/core/marionette-port.js +34 -31
- package/dist/src/core/marionette-preflight.d.ts +6 -6
- package/dist/src/core/marionette-preflight.js +23 -23
- 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 +14 -14
- 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 +11 -11
- 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 +9 -9
- package/dist/src/core/patch-apply.d.ts +9 -9
- package/dist/src/core/patch-apply.js +30 -30
- package/dist/src/core/patch-export-update.d.ts +4 -4
- package/dist/src/core/patch-export-update.js +3 -3
- package/dist/src/core/patch-export.d.ts +10 -10
- package/dist/src/core/patch-export.js +13 -13
- 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 +7 -7
- package/dist/src/core/patch-lint-cache.d.ts +2 -2
- package/dist/src/core/patch-lint-cache.js +13 -13
- package/dist/src/core/patch-lint-checkjs.d.ts +26 -26
- package/dist/src/core/patch-lint-checkjs.js +42 -41
- 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 +3 -3
- package/dist/src/core/patch-lint-creators.js +3 -3
- package/dist/src/core/patch-lint-cross.d.ts +13 -13
- package/dist/src/core/patch-lint-cross.js +21 -21
- package/dist/src/core/patch-lint-css.d.ts +1 -1
- package/dist/src/core/patch-lint-css.js +5 -5
- 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 +3 -3
- package/dist/src/core/patch-lint-forward-registration.d.ts +4 -4
- package/dist/src/core/patch-lint-forward-registration.js +12 -12
- package/dist/src/core/patch-lint-jsdoc.d.ts +2 -2
- package/dist/src/core/patch-lint-jsdoc.js +11 -11
- package/dist/src/core/patch-lint-module-registration.d.ts +1 -1
- 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 +6 -6
- package/dist/src/core/patch-lint-queue-types.d.ts +1 -1
- package/dist/src/core/patch-lint-queue-types.js +1 -1
- package/dist/src/core/patch-lint-staged-registration.d.ts +2 -2
- package/dist/src/core/patch-lint-staged-registration.js +6 -6
- 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 +27 -26
- package/dist/src/core/patch-lint.js +48 -46
- package/dist/src/core/patch-lock.d.ts +1 -1
- package/dist/src/core/patch-lock.js +8 -8
- 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 +27 -27
- 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 +14 -14
- package/dist/src/core/patch-parse.js +16 -16
- 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-transform.d.ts +8 -8
- package/dist/src/core/patch-transform.js +13 -13
- package/dist/src/core/process-cpu-time.d.ts +1 -1
- package/dist/src/core/process-cpu-time.js +5 -5
- package/dist/src/core/rebase-session.d.ts +7 -7
- package/dist/src/core/rebase-session.js +8 -8
- 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 +3 -3
- package/dist/src/core/register-shared-css.d.ts +3 -3
- package/dist/src/core/register-shared-css.js +4 -4
- 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 +12 -12
- package/dist/src/core/run-log-redact.js +16 -16
- package/dist/src/core/run-log.d.ts +9 -9
- package/dist/src/core/run-log.js +14 -14
- 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 +2 -2
- package/dist/src/core/smoke-patterns.d.ts +5 -5
- package/dist/src/core/smoke-patterns.js +9 -9
- package/dist/src/core/state-file.d.ts +3 -3
- 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 +11 -11
- package/dist/src/core/test-changed-prefs.d.ts +12 -12
- package/dist/src/core/test-changed-prefs.js +15 -15
- package/dist/src/core/test-harness-crash.d.ts +39 -39
- package/dist/src/core/test-harness-crash.js +67 -67
- 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 -21
- package/dist/src/core/test-stale-check.js +29 -28
- 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/token-category.d.ts +4 -4
- package/dist/src/core/token-category.js +13 -12
- package/dist/src/core/token-coverage.js +4 -5
- package/dist/src/core/token-dark-mode.d.ts +17 -9
- package/dist/src/core/token-dark-mode.js +41 -28
- package/dist/src/core/token-docs.d.ts +1 -1
- package/dist/src/core/token-inventory.d.ts +6 -6
- package/dist/src/core/token-inventory.js +7 -7
- package/dist/src/core/token-manager.d.ts +3 -3
- package/dist/src/core/token-manager.js +21 -21
- 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 +32 -32
- package/dist/src/core/toolchain-preflight.d.ts +15 -15
- package/dist/src/core/toolchain-preflight.js +22 -22
- package/dist/src/core/tree-cow.d.ts +3 -3
- package/dist/src/core/tree-cow.js +6 -6
- 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 +35 -33
- 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 +31 -31
- 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 +6 -6
- 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 +11 -11
- package/dist/src/core/xpcshell-appdir.d.ts +20 -20
- package/dist/src/core/xpcshell-appdir.js +26 -26
- 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 +22 -21
- package/dist/src/errors/base.js +22 -21
- package/dist/src/errors/build.d.ts +6 -6
- package/dist/src/errors/build.js +6 -6
- package/dist/src/errors/codes.d.ts +10 -10
- package/dist/src/errors/codes.js +10 -10
- package/dist/src/errors/furnace.d.ts +2 -2
- package/dist/src/errors/git.d.ts +1 -1
- package/dist/src/errors/git.js +1 -1
- package/dist/src/errors/patch.d.ts +3 -3
- package/dist/src/errors/patch.js +3 -3
- package/dist/src/errors/rebase.d.ts +1 -1
- package/dist/src/errors/rebase.js +1 -1
- 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 +86 -85
- 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 +24 -23
- package/dist/src/types/furnace.d.ts +17 -17
- 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 +1 -1
- package/dist/src/utils/assert.js +6 -6
- package/dist/src/utils/build-info.d.ts +5 -5
- package/dist/src/utils/build-info.js +6 -6
- package/dist/src/utils/child-env.d.ts +5 -5
- 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 +1 -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 +8 -8
- package/dist/src/utils/line-dispatch.d.ts +3 -3
- package/dist/src/utils/line-dispatch.js +5 -5
- 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 +13 -13
- package/dist/src/utils/options.js +20 -20
- package/dist/src/utils/package-root.js +2 -2
- package/dist/src/utils/paths.d.ts +4 -4
- package/dist/src/utils/paths.js +4 -4
- package/dist/src/utils/process-group.d.ts +8 -8
- package/dist/src/utils/process-group.js +19 -19
- package/dist/src/utils/process.d.ts +34 -33
- package/dist/src/utils/process.js +20 -19
- package/dist/src/utils/ps-duration.d.ts +4 -4
- package/dist/src/utils/ps-duration.js +6 -6
- package/dist/src/utils/regex.d.ts +4 -4
- package/dist/src/utils/regex.js +7 -7
- package/dist/src/utils/sleep.d.ts +7 -7
- package/dist/src/utils/sleep.js +7 -7
- 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 +11 -12
- package/dist/src/utils/validation.js +20 -21
- package/docs/README.md +2 -2
- package/docs/configuration.md +120 -114
- package/docs/exit-codes.md +63 -58
- package/docs/furnace.md +20 -19
- package/docs/lifecycle-invariants.md +412 -251
- package/docs/machine-output.md +33 -32
- package/docs/patch-workflow.md +48 -45
- package/docs/run-logs.md +62 -58
- package/docs/testing.md +101 -101
- package/docs/verification-trees.md +23 -22
- package/package.json +2 -2
|
@@ -7,34 +7,34 @@
|
|
|
7
7
|
*/
|
|
8
8
|
/**
|
|
9
9
|
* Classification buckets for engine file changes:
|
|
10
|
-
* - `patch-backed`: content matches the expected post-patch state
|
|
10
|
+
* - `patch-backed`: content matches the expected post-patch state. Normal
|
|
11
11
|
* after `fireforge import`.
|
|
12
12
|
* - `patch-owned-drift`: the file is claimed by exactly one patch, but the
|
|
13
13
|
* live engine content no longer matches that patch's expected post-apply
|
|
14
14
|
* content. This includes furnace-prefixed paths: a path can be both
|
|
15
15
|
* Furnace-managed and patch-claimed (export a deployed component, then
|
|
16
|
-
* edit the workspace source and `furnace deploy` again
|
|
17
|
-
* now has content the patch body lacks). Checking the furnace
|
|
18
|
-
* would bucket such files as `furnace` and report the stale
|
|
19
|
-
* owned.
|
|
20
|
-
* - `unmanaged`: edits not explained by any patch or tool
|
|
16
|
+
* edit the workspace source and `furnace deploy` again, and the deployed
|
|
17
|
+
* copy now has content the patch body lacks). Checking the furnace
|
|
18
|
+
* prefix first would bucket such files as `furnace` and report the stale
|
|
19
|
+
* patch as owned.
|
|
20
|
+
* - `unmanaged`: edits not explained by any patch or tool. Local drift to
|
|
21
21
|
* export or discard.
|
|
22
22
|
* - `branding`: files under tool-managed branding paths, written by
|
|
23
23
|
* FireForge's branding pipeline.
|
|
24
24
|
* - `furnace`: files under Furnace-managed component prefixes. When exactly
|
|
25
25
|
* one patch also claims the path, this bucket asserts the live content
|
|
26
|
-
* matches that patch's expected post-apply content
|
|
26
|
+
* matches that patch's expected post-apply content. A mismatch is
|
|
27
27
|
* reported as `patch-owned-drift` instead (see above).
|
|
28
28
|
* - `conflict`: the file is claimed by two or more patches in
|
|
29
29
|
* `patches.json`. The human `--ownership` mode surfaces this bucket as
|
|
30
|
-
* `CONFLICT
|
|
30
|
+
* `CONFLICT`. Carrying the classification through the JSON pipeline lets
|
|
31
31
|
* machine consumers detect the same ownership breakage rather than seeing
|
|
32
32
|
* it rolled into `unmanaged` as routine local drift.
|
|
33
33
|
* - `binary-unsupported`: the file's comparison is binary and the owning
|
|
34
|
-
* patch body records no usable blob hash to compare against
|
|
35
|
-
* "binary
|
|
36
|
-
* `patch-owned-drift`.
|
|
37
|
-
*
|
|
34
|
+
* patch body records no usable blob hash to compare against. It reports an
|
|
35
|
+
* honest "binary, comparison unsupported" instead of a permanent false
|
|
36
|
+
* `patch-owned-drift`. Not in the default `--check` fail set. Opt in
|
|
37
|
+
* with `--fail-on binary-unsupported`.
|
|
38
38
|
*/
|
|
39
39
|
export type FileClassification = 'patch-backed' | 'patch-owned-drift' | 'unmanaged' | 'branding' | 'furnace' | 'conflict' | 'binary-unsupported';
|
|
40
40
|
export interface StatusFile {
|
|
@@ -45,7 +45,7 @@ export interface ClassifiedFile extends StatusFile {
|
|
|
45
45
|
classification: FileClassification;
|
|
46
46
|
/**
|
|
47
47
|
* Names of patch files that claim this path in `patches.json`.
|
|
48
|
-
* Populated only when `classification === 'conflict'
|
|
48
|
+
* Populated only when `classification === 'conflict'`. Single-claim
|
|
49
49
|
* patch-backed entries don't need to expose their owner because the
|
|
50
50
|
* single claim is fully captured by the classification itself.
|
|
51
51
|
*/
|
|
@@ -54,14 +54,14 @@ export interface ClassifiedFile extends StatusFile {
|
|
|
54
54
|
* Owning patch filename when exactly one patch claims this path
|
|
55
55
|
* (patch-backed, patch-owned-drift, and single-owner furnace entries).
|
|
56
56
|
* Unset for unowned, branding-generated, unowned-furnace, and conflict
|
|
57
|
-
* entries
|
|
57
|
+
* entries. Conflicts carry `claimedBy` instead. Exposed through
|
|
58
58
|
* `status --json` as the `patch` field.
|
|
59
59
|
*/
|
|
60
60
|
owner?: string;
|
|
61
61
|
}
|
|
62
62
|
/**
|
|
63
63
|
* Builds the file → owning-patch-filenames multimap from manifest rows.
|
|
64
|
-
* Single source of truth for cross-patch claim detection
|
|
64
|
+
* Single source of truth for cross-patch claim detection: status
|
|
65
65
|
* classification, verify's cross-claim check, and the ownership table all
|
|
66
66
|
* consume this builder (they used to each rebuild it, one drift away from
|
|
67
67
|
* disagreeing about what "claimed" means).
|
|
@@ -72,14 +72,14 @@ export declare function buildPatchClaims(manifestPatches: ReadonlyArray<{
|
|
|
72
72
|
}>): Map<string, string[]>;
|
|
73
73
|
/**
|
|
74
74
|
* Reduces a two-character porcelain XY status to its primary code.
|
|
75
|
-
* Single source of truth
|
|
75
|
+
* Single source of truth, and status-output.ts renders from the same logic.
|
|
76
76
|
*/
|
|
77
77
|
export declare function getPrimaryStatusCode(status: string): string;
|
|
78
78
|
/**
|
|
79
79
|
* True for the branding paths whose content FireForge generates itself
|
|
80
80
|
* (configure.sh, brand.properties/ftl, browser/moz.configure). Unlike the
|
|
81
81
|
* broader branding-root test, a brand-new unowned file under the branding
|
|
82
|
-
* directory is
|
|
82
|
+
* directory is not generated: it is a patch candidate and must stay
|
|
83
83
|
* visible as unmanaged (the Assets.car precedent).
|
|
84
84
|
*/
|
|
85
85
|
export declare function isGeneratedBrandingPath(file: string, binaryName: string): boolean;
|
|
@@ -17,7 +17,7 @@ import { createPatchedContentContext } from './patch-apply.js';
|
|
|
17
17
|
import { classifyBinaryOwnedFile } from './status-binary.js';
|
|
18
18
|
/**
|
|
19
19
|
* Builds the file → owning-patch-filenames multimap from manifest rows.
|
|
20
|
-
* Single source of truth for cross-patch claim detection
|
|
20
|
+
* Single source of truth for cross-patch claim detection: status
|
|
21
21
|
* classification, verify's cross-claim check, and the ownership table all
|
|
22
22
|
* consume this builder (they used to each rebuild it, one drift away from
|
|
23
23
|
* disagreeing about what "claimed" means).
|
|
@@ -35,7 +35,7 @@ export function buildPatchClaims(manifestPatches) {
|
|
|
35
35
|
}
|
|
36
36
|
/**
|
|
37
37
|
* Reduces a two-character porcelain XY status to its primary code.
|
|
38
|
-
* Single source of truth
|
|
38
|
+
* Single source of truth, and status-output.ts renders from the same logic.
|
|
39
39
|
*/
|
|
40
40
|
export function getPrimaryStatusCode(status) {
|
|
41
41
|
if (status.includes('?'))
|
|
@@ -53,7 +53,7 @@ export function getPrimaryStatusCode(status) {
|
|
|
53
53
|
* True for the branding paths whose content FireForge generates itself
|
|
54
54
|
* (configure.sh, brand.properties/ftl, browser/moz.configure). Unlike the
|
|
55
55
|
* broader branding-root test, a brand-new unowned file under the branding
|
|
56
|
-
* directory is
|
|
56
|
+
* directory is not generated: it is a patch candidate and must stay
|
|
57
57
|
* visible as unmanaged (the Assets.car precedent).
|
|
58
58
|
*/
|
|
59
59
|
export function isGeneratedBrandingPath(file, binaryName) {
|
|
@@ -67,15 +67,15 @@ export function isGeneratedBrandingPath(file, binaryName) {
|
|
|
67
67
|
/**
|
|
68
68
|
* Compares a single-owner file's live engine content against its owning
|
|
69
69
|
* patch's expected post-apply content. `matchClassification` is what a
|
|
70
|
-
* clean match reports
|
|
70
|
+
* clean match reports: `patch-backed` for ordinary patch-claimed paths,
|
|
71
71
|
* `furnace` for furnace-prefixed paths so healthy deployed components
|
|
72
72
|
* keep landing in the pinned furnace bucket. Any mismatch (including a
|
|
73
73
|
* deletion the patch does not expect, or a failed comparison) reports
|
|
74
74
|
* `patch-owned-drift`.
|
|
75
75
|
*/
|
|
76
76
|
async function classifySingleOwnerFile(entry, engineDir, patchesDir, matchClassification, owner, ctx) {
|
|
77
|
-
// Binary comparisons cannot go through the utf-8 content path below
|
|
78
|
-
//
|
|
77
|
+
// Binary comparisons cannot go through the utf-8 content path below.
|
|
78
|
+
// Binary patch bodies parse to zero hunks, so the patched-content
|
|
79
79
|
// computation returned HEAD content unchanged and the comparison
|
|
80
80
|
// reported `patch-owned-drift` forever. Settle by blob hash,
|
|
81
81
|
// or classify explicitly as `binary-unsupported` when no hash exists.
|
|
@@ -100,7 +100,7 @@ async function classifySingleOwnerFile(entry, engineDir, patchesDir, matchClassi
|
|
|
100
100
|
owner,
|
|
101
101
|
};
|
|
102
102
|
}
|
|
103
|
-
// File exists on disk
|
|
103
|
+
// File exists on disk: compare actual vs expected
|
|
104
104
|
try {
|
|
105
105
|
const [expected, actual] = await Promise.all([
|
|
106
106
|
ctx.computePatched(entry.file),
|
|
@@ -130,7 +130,7 @@ async function classifySingleOwnerFile(entry, engineDir, patchesDir, matchClassi
|
|
|
130
130
|
*/
|
|
131
131
|
export async function classifyFiles(files, engineDir, patchesDir, binaryName, furnacePrefixes) {
|
|
132
132
|
// One manifest load + patch discovery + memoized body reads for the
|
|
133
|
-
// whole batch
|
|
133
|
+
// whole batch. The previous per-file computation re-ran all three for
|
|
134
134
|
// every dirty file (O(dirtyFiles × patches) redundant IO on a broad
|
|
135
135
|
// engine edit session).
|
|
136
136
|
const ctx = await createPatchedContentContext(patchesDir, engineDir);
|
|
@@ -150,14 +150,14 @@ export async function classifyFiles(files, engineDir, patchesDir, binaryName, fu
|
|
|
150
150
|
ctx,
|
|
151
151
|
};
|
|
152
152
|
// Bounded pool over per-file classification (each single-owner file
|
|
153
|
-
// spawns git)
|
|
153
|
+
// spawns git). Order preserved by the mapper. Per-file failures settle
|
|
154
154
|
// inside classifySingleOwnerFile's catch, so one bad file never rejects
|
|
155
155
|
// the batch.
|
|
156
156
|
return mapWithConcurrency(files, CLASSIFY_CONCURRENCY, (entry) => classifyEntry(entry, deps));
|
|
157
157
|
}
|
|
158
158
|
/** Concurrency bound for per-file classification (matches import's guard). */
|
|
159
159
|
const CLASSIFY_CONCURRENCY = 8;
|
|
160
|
-
/** Classifies one status entry
|
|
160
|
+
/** Classifies one status entry. Extracted so the pool worker stays flat. */
|
|
161
161
|
async function classifyEntry(entry, deps) {
|
|
162
162
|
const { engineDir, patchesDir, binaryName, furnacePrefixes, patchClaims, ctx } = deps;
|
|
163
163
|
const owners = patchClaims.get(entry.file);
|
|
@@ -209,7 +209,7 @@ async function classifyEntry(entry, deps) {
|
|
|
209
209
|
if (!owners) {
|
|
210
210
|
return { ...entry, classification: 'unmanaged' };
|
|
211
211
|
}
|
|
212
|
-
// File is claimed by exactly one patch
|
|
212
|
+
// File is claimed by exactly one patch: compare content.
|
|
213
213
|
const owner = owners[0];
|
|
214
214
|
if (owner === undefined) {
|
|
215
215
|
return { ...entry, classification: 'unmanaged' };
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Recognizer for the one mochitest failure shape that is a function of run
|
|
3
|
-
*
|
|
3
|
+
* length rather than of the code under test: the time-driven
|
|
4
4
|
* changed-preference checks.
|
|
5
5
|
*
|
|
6
6
|
* Separate from `test-harness-crash.ts` because it is not a crash
|
|
7
|
-
* classification
|
|
8
|
-
* What this adds is which
|
|
7
|
+
* classification. The run failed, and the classifier's verdict is correct.
|
|
8
|
+
* What this adds is which kind of failure it was, which is a different
|
|
9
9
|
* question and one that only grows as more such shapes are recorded.
|
|
10
10
|
*/
|
|
11
11
|
/**
|
|
12
|
-
* Describes a failure set that consists
|
|
12
|
+
* Describes a failure set that consists entirely of changed-preference
|
|
13
13
|
* checks on {@link TIME_DRIVEN_PREF_NAMES}.
|
|
14
14
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* shape. A single block that names anything else
|
|
19
|
-
* different pref
|
|
20
|
-
*
|
|
21
|
-
*
|
|
15
|
+
* Keyed on the pref names rather than on the harness's phrasing of its
|
|
16
|
+
* changed-preference report: the phrasing is upstream copy that has no
|
|
17
|
+
* stable contract with us, and the names are the part that identifies the
|
|
18
|
+
* shape. A single block that names anything else (a real assertion, a
|
|
19
|
+
* different pref) disqualifies the whole set, so that this describes a run
|
|
20
|
+
* whose every failure is this noise, and never explains away one real
|
|
21
|
+
* failure sitting beside it.
|
|
22
22
|
*
|
|
23
|
-
* Pure
|
|
23
|
+
* Pure. Returns undefined when the shape does not apply.
|
|
24
24
|
*
|
|
25
25
|
* @param output - Combined harness stdout+stderr
|
|
26
26
|
* @returns Operator-facing explanation, or undefined
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
// SPDX-License-Identifier: EUPL-1.2
|
|
2
2
|
/**
|
|
3
3
|
* Recognizer for the one mochitest failure shape that is a function of run
|
|
4
|
-
*
|
|
4
|
+
* length rather than of the code under test: the time-driven
|
|
5
5
|
* changed-preference checks.
|
|
6
6
|
*
|
|
7
7
|
* Separate from `test-harness-crash.ts` because it is not a crash
|
|
8
|
-
* classification
|
|
9
|
-
* What this adds is which
|
|
8
|
+
* classification. The run failed, and the classifier's verdict is correct.
|
|
9
|
+
* What this adds is which kind of failure it was, which is a different
|
|
10
10
|
* question and one that only grows as more such shapes are recorded.
|
|
11
11
|
*/
|
|
12
12
|
import { collectUnexpectedFailureBlocks } from './test-harness-crash.js';
|
|
13
13
|
/**
|
|
14
|
-
* Preferences that move on their own as a function of how
|
|
14
|
+
* Preferences that move on their own as a function of how long a run takes,
|
|
15
15
|
* not of what it tested.
|
|
16
16
|
*
|
|
17
17
|
* Both are time-driven: a long run crosses the cold-startup check interval
|
|
18
18
|
* and the pref moves under the harness. The observable consequence is that
|
|
19
19
|
* chunk length, not the change under test, decides whether the suite is
|
|
20
|
-
* red
|
|
20
|
+
* red. The same work at a smaller `--chunk` passes. FireForge cannot
|
|
21
21
|
* suppress the check (it is the harness's, not ours) but it can stop the
|
|
22
22
|
* pair being indistinguishable from two real assertion failures, which is
|
|
23
23
|
* the whole cost of the shape.
|
|
@@ -29,18 +29,18 @@ const TIME_DRIVEN_PREF_NAMES = ['lastColdStartupCheck', 'globalprivacycontrol'];
|
|
|
29
29
|
/** A failure block that is a changed-preference report rather than an assertion. */
|
|
30
30
|
const CHANGED_PREF_BLOCK_PATTERN = /pref(?:erence)?s?\b/i;
|
|
31
31
|
/**
|
|
32
|
-
* Describes a failure set that consists
|
|
32
|
+
* Describes a failure set that consists entirely of changed-preference
|
|
33
33
|
* checks on {@link TIME_DRIVEN_PREF_NAMES}.
|
|
34
34
|
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
* shape. A single block that names anything else
|
|
39
|
-
* different pref
|
|
40
|
-
*
|
|
41
|
-
*
|
|
35
|
+
* Keyed on the pref names rather than on the harness's phrasing of its
|
|
36
|
+
* changed-preference report: the phrasing is upstream copy that has no
|
|
37
|
+
* stable contract with us, and the names are the part that identifies the
|
|
38
|
+
* shape. A single block that names anything else (a real assertion, a
|
|
39
|
+
* different pref) disqualifies the whole set, so that this describes a run
|
|
40
|
+
* whose every failure is this noise, and never explains away one real
|
|
41
|
+
* failure sitting beside it.
|
|
42
42
|
*
|
|
43
|
-
* Pure
|
|
43
|
+
* Pure. Returns undefined when the shape does not apply.
|
|
44
44
|
*
|
|
45
45
|
* @param output - Combined harness stdout+stderr
|
|
46
46
|
* @returns Operator-facing explanation, or undefined
|
|
@@ -61,7 +61,7 @@ export function describeChangedPrefNoise(output) {
|
|
|
61
61
|
/** Failure blocks inspected before the changed-pref shape is abandoned. */
|
|
62
62
|
const CHANGED_PREF_BLOCK_LIMIT = 20;
|
|
63
63
|
/**
|
|
64
|
-
* The
|
|
64
|
+
* The recognizer half of the shape, split from the formatting so a caller
|
|
65
65
|
* that only needs the yes/no answer does not build the ~500-character
|
|
66
66
|
* explanation to throw it away.
|
|
67
67
|
*
|
|
@@ -8,16 +8,16 @@
|
|
|
8
8
|
* - startup crashes from the mozlog resource monitor on macOS
|
|
9
9
|
* (`AttributeError: 'SystemResourceMonitor' object has no attribute
|
|
10
10
|
* 'poll_interval'`, `host_statistics64(HOST_VM_INFO64) syscall failed`,
|
|
11
|
-
* `(ipc/mig) array not large enough
|
|
12
|
-
* abort the run before any test executes
|
|
11
|
+
* `(ipc/mig) array not large enough`, a psutil/macOS mismatch) which
|
|
12
|
+
* abort the run before any test executes.
|
|
13
13
|
* - hangs after browser startup that die at the no-output timeout yet still
|
|
14
|
-
* emit a `Passed: 0` summary
|
|
14
|
+
* emit a `Passed: 0` summary.
|
|
15
15
|
* - post-green shutdown re-entry, where a fully green run stalls on "must
|
|
16
16
|
* wait for focus" and records "Application shut down (without crashing)
|
|
17
17
|
* in the middle of a test!" as the only unexpected failure.
|
|
18
18
|
*
|
|
19
|
-
* Classification therefore keys on `TEST-START` presence
|
|
20
|
-
* never count as proof that tests ran
|
|
19
|
+
* Classification therefore keys on `TEST-START` presence, so summary lines
|
|
20
|
+
* never count as proof that tests ran, and recognizes the crash shapes
|
|
21
21
|
* above so the command layer can retry them with a bounded budget instead of
|
|
22
22
|
* reporting phantom test failures (or phantom passes).
|
|
23
23
|
*/
|
|
@@ -51,14 +51,14 @@ export interface HarnessRunVerdict extends HarnessSummaryCounts {
|
|
|
51
51
|
secondaryHarnessSignature?: HarnessCrashSignature;
|
|
52
52
|
/**
|
|
53
53
|
* Set when a non-zero mach exit code was overridden because the output
|
|
54
|
-
* embeds a completed green summary
|
|
54
|
+
* embeds a completed green summary, so the exit code followed harness
|
|
55
55
|
* noise, not a test result. Callers should surface a note.
|
|
56
56
|
*/
|
|
57
57
|
greenSummaryOverride?: boolean;
|
|
58
58
|
/**
|
|
59
|
-
* Set when the output embeds a green-
|
|
59
|
+
* Set when the output embeds a green-looking summary that was rejected:
|
|
60
60
|
* crash or truncation evidence proves the suite never completed, so the
|
|
61
|
-
* "green" counts only cover the files that ran before the run died
|
|
61
|
+
* "green" counts only cover the files that ran before the run died. A
|
|
62
62
|
* SIGSEGV at the second of eight files leaves a `Passed: 2 / Failed: 0`
|
|
63
63
|
* summary that reads as a pass. Callers must fail the run and surface the
|
|
64
64
|
* evidence.
|
|
@@ -66,9 +66,9 @@ export interface HarnessRunVerdict extends HarnessSummaryCounts {
|
|
|
66
66
|
greenSummaryRejected?: GreenSummaryRejection;
|
|
67
67
|
/**
|
|
68
68
|
* Short parenthetical appended to the `FIREFORGE-VERDICT:` line when the
|
|
69
|
-
* bare status would under-describe the run
|
|
69
|
+
* bare status would under-describe the run: currently "harness teardown
|
|
70
70
|
* noise ignored" and the headed display-asleep stall. Advisory text
|
|
71
|
-
* only
|
|
71
|
+
* only. The status and reason keys are unaffected.
|
|
72
72
|
*/
|
|
73
73
|
note?: string;
|
|
74
74
|
}
|
|
@@ -85,8 +85,8 @@ export interface GreenSummaryRejection {
|
|
|
85
85
|
* Strips non-signal noise from captured output before crash-signature
|
|
86
86
|
* matching: resource-monitor degradation warnings, and traceback blocks
|
|
87
87
|
* that mach caught itself (telemetry submission tracebacks are printed but
|
|
88
|
-
* never abort the run). The stripped text is used
|
|
89
|
-
*
|
|
88
|
+
* never abort the run). The stripped text is used only as crash evidence.
|
|
89
|
+
* Classification of test results still reads the full output.
|
|
90
90
|
*/
|
|
91
91
|
export declare function stripNonSignalNoise(output: string): string;
|
|
92
92
|
/**
|
|
@@ -96,15 +96,15 @@ export declare function stripNonSignalNoise(output: string): string;
|
|
|
96
96
|
*/
|
|
97
97
|
export declare function findCrashMarkerLine(output: string): string | undefined;
|
|
98
98
|
/**
|
|
99
|
-
* True when the output embeds a
|
|
99
|
+
* True when the output embeds a completed, green suite summary: an execution
|
|
100
100
|
* signal, `Unexpected results: 0` (and no non-zero unexpected count), a
|
|
101
|
-
* `SUITE_END` marker, no real `TEST-UNEXPECTED-*` lines
|
|
101
|
+
* `SUITE_END` marker, no real `TEST-UNEXPECTED-*` lines, and no crash
|
|
102
102
|
* marker. Such a run finished its suite, so any startup-traceback-shaped
|
|
103
|
-
* noise in the same output is
|
|
104
|
-
* signature-based crash classification
|
|
103
|
+
* noise in the same output is non-fatal and this vetoes
|
|
104
|
+
* signature-based crash classification. Without the veto, fully green
|
|
105
105
|
* sharded runs report `CRASH (N attempts)` because degradation warnings
|
|
106
|
-
* match the psutil signals. A summary printed after a crash marker is
|
|
107
|
-
* "completed"
|
|
106
|
+
* match the psutil signals. A summary printed after a crash marker is not
|
|
107
|
+
* "completed": it only covers the files that ran before the crash.
|
|
108
108
|
* Exported for direct unit testing.
|
|
109
109
|
*/
|
|
110
110
|
export declare function hasCompletedGreenSummary(output: string): boolean;
|
|
@@ -113,11 +113,11 @@ export declare function hasCompletedGreenSummary(output: string): boolean;
|
|
|
113
113
|
* requested file must produce a start marker, and every started test must
|
|
114
114
|
* produce an end marker (the harness emits both even for failing files).
|
|
115
115
|
*
|
|
116
|
-
* Ends are paired with starts
|
|
117
|
-
* the next end), not by filename
|
|
116
|
+
* Ends are paired with starts positionally (last open start is closed by
|
|
117
|
+
* the next end), not by filename: the xpcshell dialect's `TEST_END: Test
|
|
118
118
|
* PASS` lines do not name the file. Requested paths that are not
|
|
119
119
|
* test-file-shaped (directories, manifests) are skipped for the
|
|
120
|
-
* never-started check
|
|
120
|
+
* never-started check. The start/end pairing scan covers them regardless.
|
|
121
121
|
* Exported for direct unit testing.
|
|
122
122
|
*/
|
|
123
123
|
export declare function analyzeTestCompleteness(output: string, requestedPaths: readonly string[]): {
|
|
@@ -129,7 +129,7 @@ export declare function analyzeTestCompleteness(output: string, requestedPaths:
|
|
|
129
129
|
* assertion/diff context, one string per block. The shutdown-reentry
|
|
130
130
|
* artifact is excluded (it is harness noise, not a test result). When more
|
|
131
131
|
* than `limit` blocks exist, a final `…(+N more …)` note is appended so the
|
|
132
|
-
* operator knows the echo was truncated. Pure
|
|
132
|
+
* operator knows the echo was truncated. Pure. Exported for unit tests.
|
|
133
133
|
*/
|
|
134
134
|
export declare function collectUnexpectedFailureBlocks(output: string, limit?: number): string[];
|
|
135
135
|
/**
|
|
@@ -141,36 +141,36 @@ export declare function detectHarnessCrashSignature(output: string): HarnessCras
|
|
|
141
141
|
* Classifies a completed harness run. The decision tree, in order:
|
|
142
142
|
*
|
|
143
143
|
* 1. A recognized crash signature wins regardless of exit code (the
|
|
144
|
-
* shutdown re-entry shape exits non-zero on an otherwise green run
|
|
145
|
-
* the hang shape can even exit zero with a `Passed: 0` summary).
|
|
146
|
-
* 2. No execution signal with explicit paths requested means no test ran
|
|
144
|
+
* shutdown re-entry shape exits non-zero on an otherwise green run,
|
|
145
|
+
* and the hang shape can even exit zero with a `Passed: 0` summary).
|
|
146
|
+
* 2. No execution signal with explicit paths requested means no test ran:
|
|
147
147
|
* `no-tests`, even when the exit code is zero. The execution signal is
|
|
148
148
|
* a `TEST-START` line (generic `mach test` / browser-chrome dispatch)
|
|
149
|
-
*
|
|
149
|
+
* or the suite-specific xpcshell result-summary block (the xpcshell
|
|
150
150
|
* dispatch prints no `TEST-START`). Bare `Passed:`/`Failed:` summary
|
|
151
151
|
* lines are still not trusted as evidence of execution.
|
|
152
|
-
* 3. Exit code zero with tests started is a pass
|
|
153
|
-
* test failure for the regular diagnosis chain
|
|
154
|
-
* exit whose embedded summary completed green
|
|
152
|
+
* 3. Exit code zero with tests started is a pass. Anything else is a
|
|
153
|
+
* test failure for the regular diagnosis chain, except a non-zero
|
|
154
|
+
* exit whose embedded summary completed green and shows no crash
|
|
155
155
|
* marker and no truncated/never-started requested file, which is a
|
|
156
156
|
* pass with a `greenSummaryOverride` note (harness noise owns the
|
|
157
|
-
* exit code). A green-shaped summary
|
|
157
|
+
* exit code). A green-shaped summary with such evidence is rejected
|
|
158
158
|
* (`greenSummaryRejected`) and fails.
|
|
159
159
|
*/
|
|
160
160
|
export declare function classifyHarnessRun(exitCode: number, output: string, requestedPaths: readonly string[]): HarnessRunVerdict;
|
|
161
161
|
/**
|
|
162
162
|
* Parses the numeric counts from the harness's embedded result summary
|
|
163
|
-
* (`Ran N checks` / `Unexpected results: N`). The
|
|
164
|
-
* wins
|
|
163
|
+
* (`Ran N checks` / `Unexpected results: N`). The last occurrence of each
|
|
164
|
+
* wins: a multi-suite run prints one summary per suite and the final one
|
|
165
165
|
* covers the aggregate the operator sees. Absent counts are omitted (the
|
|
166
166
|
* `FIREFORGE-VERDICT:` contract: an absent key means "summary did not
|
|
167
167
|
* print it", never zero).
|
|
168
168
|
*/
|
|
169
169
|
export declare function extractSummaryCounts(output: string): HarnessSummaryCounts;
|
|
170
170
|
/**
|
|
171
|
-
* Formats the machine-readable `FIREFORGE-VERDICT:` line
|
|
171
|
+
* Formats the machine-readable `FIREFORGE-VERDICT:` line: the stable,
|
|
172
172
|
* greppable last line every `fireforge test` run prints so harness-verdict
|
|
173
|
-
* consumers stop regexing mach internals. The status follows
|
|
173
|
+
* consumers stop regexing mach internals. The status follows this
|
|
174
174
|
* classifier, never the raw exit code: a crash-classified run says
|
|
175
175
|
* `FAIL reason=crash` even at exit 0, and a green-summary-override pass
|
|
176
176
|
* says `PASS` despite a non-zero mach exit. Count keys are omitted when
|
|
@@ -197,18 +197,18 @@ export declare function buildHarnessCrashMessage(signature: HarnessCrashSignatur
|
|
|
197
197
|
* `xpcshell return code: -11` with zero output is the signature of an
|
|
198
198
|
* `.sys.mjs` that a packaged module imports but whose `EXTRA_JS_MODULES`
|
|
199
199
|
* registration never landed: the module loader faults before any logging
|
|
200
|
-
* exists, so there is no import error, no stack, no test output
|
|
200
|
+
* exists, so there is no import error, no stack, no test output, just a
|
|
201
201
|
* dead process. It is indistinguishable from a genuine product crash
|
|
202
202
|
* unless someone names the cause.
|
|
203
203
|
*
|
|
204
|
-
* "Produced no evidence" is
|
|
204
|
+
* "Produced no evidence" is semantic rather than a byte
|
|
205
205
|
* budget: no execution signal, no real failure line, and no mozcrash
|
|
206
206
|
* marker. A run that got far enough to start a test, report a failure, or
|
|
207
207
|
* leave a crash dump has evidence of its own, and the regular diagnosis
|
|
208
|
-
* chain reads it
|
|
208
|
+
* chain reads it. This branch is only for the case where there is
|
|
209
209
|
* nothing else to say.
|
|
210
210
|
*
|
|
211
|
-
* Pure
|
|
211
|
+
* Pure. Exported for direct unit testing.
|
|
212
212
|
*
|
|
213
213
|
* @param exitCode - The harness process exit code
|
|
214
214
|
* @param output - Combined stdout/stderr from the run
|
|
@@ -225,7 +225,7 @@ export declare function isSilentSegfault(exitCode: number, output: string): bool
|
|
|
225
225
|
export declare function buildSilentSegfaultMessage(exitCode: number, requestedPaths: readonly string[]): string;
|
|
226
226
|
/**
|
|
227
227
|
* Builds the message for a run that produced no `TEST-START` despite
|
|
228
|
-
* requesting paths
|
|
228
|
+
* requesting paths, including exit-code-zero runs whose `Passed: 0`
|
|
229
229
|
* summary would otherwise read as a silent false green.
|
|
230
230
|
*/
|
|
231
231
|
export declare function buildNoTestsRanMessage(exitCode: number, requestedPaths: readonly string[]): string;
|