@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
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* implied chrome suffix is a confident match: the scorer never runs and the
|
|
17
17
|
* structural-relation check is bypassed.
|
|
18
18
|
*
|
|
19
|
-
* Scope is
|
|
19
|
+
* Scope is narrow: only subtrees whose packaging target is
|
|
20
20
|
* stable across forks. A fork that reroutes a known subtree can still win by
|
|
21
21
|
* adding `(source)` annotations in its own `jar.mn`, which
|
|
22
22
|
* `resolveArtifactByRegistration` consults first.
|
|
@@ -47,8 +47,8 @@ const KNOWN_TRANSFORMS = [
|
|
|
47
47
|
];
|
|
48
48
|
/**
|
|
49
49
|
* Returns the expected chrome-tree suffix for an engine-relative POSIX
|
|
50
|
-
* source path when the path falls under a known transform prefix
|
|
51
|
-
* undefined otherwise.
|
|
50
|
+
* source path when the path falls under a known transform prefix.
|
|
51
|
+
* Returns undefined otherwise.
|
|
52
52
|
*
|
|
53
53
|
* @param source Engine-relative POSIX source path.
|
|
54
54
|
*/
|
|
@@ -3,8 +3,8 @@ import type { BuildBaseline } from './build-baseline-types.js';
|
|
|
3
3
|
/**
|
|
4
4
|
* True for the build-input manifests the build consumes but never packages
|
|
5
5
|
* (`jar.mn`, `moz.build`, `moz.configure`, `Makefile.in`, `mozbuild.in`).
|
|
6
|
-
* Excluded from the packaging audit and from `packageableFingerprints
|
|
7
|
-
*
|
|
6
|
+
* Excluded from the packaging audit and from `packageableFingerprints`.
|
|
7
|
+
* Fingerprinted separately as `buildInputFingerprints` so `build-prepare`
|
|
8
8
|
* can tell "dirty against HEAD" from "changed since the last successful
|
|
9
9
|
* build".
|
|
10
10
|
*
|
|
@@ -35,11 +35,11 @@ export interface AuditEntry {
|
|
|
35
35
|
* updated: an artifact exists and is at least as new as the source.
|
|
36
36
|
* stale: artifact exists but is older than the source (probable packaging drop).
|
|
37
37
|
* missing: no artifact with a matching basename was found anywhere under dist/.
|
|
38
|
-
* skipped: the file was not audited
|
|
38
|
+
* skipped: the file was not audited. `skipReason` says why.
|
|
39
39
|
*/
|
|
40
40
|
status: 'updated' | 'stale' | 'missing' | 'skipped';
|
|
41
41
|
/**
|
|
42
|
-
* Why a `skipped` entry was skipped. Present only for `skipped
|
|
42
|
+
* Why a `skipped` entry was skipped. Present only for `skipped`. The
|
|
43
43
|
* reasons used to exist only as verbose log strings, so the summary line
|
|
44
44
|
* could report `4 missing` on a run with zero real misses and nothing in
|
|
45
45
|
* the counts distinguished a structural non-input from an unregistered
|
|
@@ -68,11 +68,11 @@ export interface AuditSummary {
|
|
|
68
68
|
*/
|
|
69
69
|
export declare function isPackageablePath(sourcePath: string): boolean;
|
|
70
70
|
/**
|
|
71
|
-
* Decides whether a source path is an XPCOM static-component manifest
|
|
71
|
+
* Decides whether a source path is an XPCOM static-component manifest,
|
|
72
72
|
* i.e. a file whose registrations are baked into the compiled
|
|
73
|
-
* StaticComponents table at
|
|
73
|
+
* StaticComponents table at full-build time rather than packaged into
|
|
74
74
|
* `dist/`. This basename check is the single extension point for that
|
|
75
|
-
* classification
|
|
75
|
+
* classification. Parsing `moz.build` `XPCOM_MANIFESTS` entries to follow
|
|
76
76
|
* renamed manifests is out of scope.
|
|
77
77
|
*
|
|
78
78
|
* @param sourcePath Engine-relative POSIX path.
|
|
@@ -82,7 +82,7 @@ export declare function isXpcomManifestPath(sourcePath: string): boolean;
|
|
|
82
82
|
/**
|
|
83
83
|
* Runs the post-build audit. Emits per-file warnings for missing or
|
|
84
84
|
* stale artifacts and a summary info line at the end. Always returns
|
|
85
|
-
* the summary
|
|
85
|
+
* the summary. Never throws on audit failure (the audit itself must
|
|
86
86
|
* never fail a successful build).
|
|
87
87
|
* @param projectRoot Root of the project (reserved for future fork-specific rules).
|
|
88
88
|
* @param engineDir Path to the engine directory.
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* (git-tracked diff + workdir modifications).
|
|
14
14
|
* - For each file whose path pattern implies packaging, it resolves
|
|
15
15
|
* the expected dist artifact under obj-star/dist/binary-name-star.
|
|
16
|
-
* - A warning fires when the expected artifact is missing
|
|
16
|
+
* - A warning fires when the expected artifact is missing or when its
|
|
17
17
|
* mtime is older than the engine source (the build was reported
|
|
18
18
|
* successful but that file's path never flowed through packaging).
|
|
19
19
|
* - False positives are acceptable at this stage: fork-specific packaging
|
|
@@ -22,9 +22,9 @@
|
|
|
22
22
|
*
|
|
23
23
|
* Routing rules:
|
|
24
24
|
* - Build inputs (jar.mn, moz.build, Makefile.in, moz.configure) are
|
|
25
|
-
* skipped
|
|
25
|
+
* skipped. They are consumed, not packaged.
|
|
26
26
|
* - Test sources (anything under /test(s)/, browser_*.js, test_*.js)
|
|
27
|
-
* are looked up under _tests/, not dist
|
|
27
|
+
* are looked up under _tests/, not dist/, which is where mach copies
|
|
28
28
|
* them.
|
|
29
29
|
* - Files inside an `if CONFIG[...]:` block in moz.build that gates
|
|
30
30
|
* off on the current host are skipped (Windows stubinstaller CSS on
|
|
@@ -61,12 +61,12 @@ const PACKAGEABLE_EXTENSIONS = [
|
|
|
61
61
|
];
|
|
62
62
|
/** Path fragments whose contents are packaged regardless of extension. */
|
|
63
63
|
const PACKAGEABLE_PATH_FRAGMENTS = ['/app/profile/', '/chrome/', '/locales/'];
|
|
64
|
-
/** Directories that are build artifacts, not source
|
|
64
|
+
/** Directories that are build artifacts, not source. Never audited. */
|
|
65
65
|
const IGNORE_PATH_FRAGMENTS = ['obj-', 'node_modules/', '.git/', '.cargo/', '.mozbuild/'];
|
|
66
66
|
/**
|
|
67
67
|
* Basenames that are build-system inputs, not packaged artifacts. `jar.mn`
|
|
68
|
-
* is consumed to produce chrome registrations
|
|
69
|
-
* / `Makefile.in` feed the build backend
|
|
68
|
+
* is consumed to produce chrome registrations. `moz.build` / `moz.configure`
|
|
69
|
+
* / `Makefile.in` feed the build backend. None ship in the bundle. Auditing
|
|
70
70
|
* them guarantees a false positive on every edit, and worse, an unrelated
|
|
71
71
|
* upstream `moz.build` sitting at e.g. `MyBrowser.app/Contents/moz.build`
|
|
72
72
|
* gets matched as a "stale artifact" of an entirely different file.
|
|
@@ -81,8 +81,8 @@ const BUILD_INPUT_BASENAMES = new Set([
|
|
|
81
81
|
/**
|
|
82
82
|
* True for the build-input manifests the build consumes but never packages
|
|
83
83
|
* (`jar.mn`, `moz.build`, `moz.configure`, `Makefile.in`, `mozbuild.in`).
|
|
84
|
-
* Excluded from the packaging audit and from `packageableFingerprints
|
|
85
|
-
*
|
|
84
|
+
* Excluded from the packaging audit and from `packageableFingerprints`.
|
|
85
|
+
* Fingerprinted separately as `buildInputFingerprints` so `build-prepare`
|
|
86
86
|
* can tell "dirty against HEAD" from "changed since the last successful
|
|
87
87
|
* build".
|
|
88
88
|
*
|
|
@@ -123,7 +123,7 @@ export function isPackageablePath(sourcePath) {
|
|
|
123
123
|
if (isBuildInputPath(sourcePath))
|
|
124
124
|
return false;
|
|
125
125
|
// `.inc.xhtml` fragments are consumed via `#include` from a registered
|
|
126
|
-
// chrome document and resolved at packaging time
|
|
126
|
+
// chrome document and resolved at packaging time. They never ship as a
|
|
127
127
|
// standalone packaged artifact, so auditing them flags a wired
|
|
128
128
|
// `*.inc.xhtml` as "missing packaged artifact" even though `register`
|
|
129
129
|
// correctly refuses to register it. Mirror the carve-out the register
|
|
@@ -141,11 +141,11 @@ export function isPackageablePath(sourcePath) {
|
|
|
141
141
|
return false;
|
|
142
142
|
}
|
|
143
143
|
/**
|
|
144
|
-
* Decides whether a source path is an XPCOM static-component manifest
|
|
144
|
+
* Decides whether a source path is an XPCOM static-component manifest,
|
|
145
145
|
* i.e. a file whose registrations are baked into the compiled
|
|
146
|
-
* StaticComponents table at
|
|
146
|
+
* StaticComponents table at full-build time rather than packaged into
|
|
147
147
|
* `dist/`. This basename check is the single extension point for that
|
|
148
|
-
* classification
|
|
148
|
+
* classification. Parsing `moz.build` `XPCOM_MANIFESTS` entries to follow
|
|
149
149
|
* renamed manifests is out of scope.
|
|
150
150
|
*
|
|
151
151
|
* @param sourcePath Engine-relative POSIX path.
|
|
@@ -204,8 +204,8 @@ async function resolveTestsRoot(engineDir) {
|
|
|
204
204
|
/**
|
|
205
205
|
* Marker file the `package-tests` make target writes after copying the
|
|
206
206
|
* full test-source tree under `_tests/`. Its presence is the most reliable
|
|
207
|
-
* signal that test packaging has actually run for the current obj-dir
|
|
208
|
-
*
|
|
207
|
+
* signal that test packaging has actually run for the current obj-dir.
|
|
208
|
+
* Plain `mach build` populates a partial `_tests/` subtree and then stops,
|
|
209
209
|
* so registered tests are absent even when registration is correct.
|
|
210
210
|
*/
|
|
211
211
|
const PACKAGED_TESTS_MARKER = 'all-tests.json';
|
|
@@ -224,7 +224,7 @@ async function hasPackagedTestsMarker(testsRoot) {
|
|
|
224
224
|
}
|
|
225
225
|
/**
|
|
226
226
|
* Resolves the search roots an individual source path should be looked
|
|
227
|
-
* up under. Test-shaped paths get `_tests
|
|
227
|
+
* up under. Test-shaped paths get `_tests/`. Everything else gets `dist/`.
|
|
228
228
|
*/
|
|
229
229
|
function searchRootsFor(source, distRoot, testsRoot) {
|
|
230
230
|
if (isTestPath(source)) {
|
|
@@ -237,7 +237,7 @@ function searchRootsFor(source, distRoot, testsRoot) {
|
|
|
237
237
|
* candidate to count as "the packaged artifact" of a source. The basename
|
|
238
238
|
* always trail-matches (count 1), so a threshold of 2 requires the immediate
|
|
239
239
|
* parent directory to agree too. Candidates sharing only the basename are
|
|
240
|
-
* classified as missing
|
|
240
|
+
* classified as missing (warning the operator to check registration)
|
|
241
241
|
* rather than emitting a misleading stale comparison against an unrelated
|
|
242
242
|
* file of the same name.
|
|
243
243
|
*
|
|
@@ -249,21 +249,21 @@ function searchRootsFor(source, distRoot, testsRoot) {
|
|
|
249
249
|
const MIN_TRAILING_SEGMENT_OVERLAP = 2;
|
|
250
250
|
/**
|
|
251
251
|
* Returns true when the chosen artifact is structurally related to the
|
|
252
|
-
* source path
|
|
252
|
+
* source path: either its immediate parent directory trail-matches, or
|
|
253
253
|
* a non-generic intermediate source segment appears in the candidate
|
|
254
254
|
* path (the branding-re-root signal already used by the scorer).
|
|
255
255
|
*
|
|
256
256
|
* Used to avoid emitting `stale` warnings that point at an unrelated
|
|
257
|
-
* same-basename file picked up by the basename walker
|
|
258
|
-
* warning
|
|
259
|
-
* dropped this file" when
|
|
257
|
+
* same-basename file picked up by the basename walker. That class of
|
|
258
|
+
* warning is worse than `missing` because it reads as "your build
|
|
259
|
+
* dropped this file" when the match is spurious.
|
|
260
260
|
*/
|
|
261
261
|
function isConfidentMatch(source, candidate) {
|
|
262
262
|
if (countTrailingSegmentMatches(source, candidate) >= MIN_TRAILING_SEGMENT_OVERLAP) {
|
|
263
263
|
return true;
|
|
264
264
|
}
|
|
265
265
|
// The candidate is an absolute path built by `join` over a dist/ walk, so on
|
|
266
|
-
// Windows it arrives backslash-separated
|
|
266
|
+
// Windows it arrives backslash-separated. A `/`-only split collapses it into
|
|
267
267
|
// one segment and the non-generic-segment bonus can never fire.
|
|
268
268
|
const sourceSegs = normalizePathSlashes(source).split('/').filter(Boolean);
|
|
269
269
|
const candSegs = normalizePathSlashes(candidate).split('/').filter(Boolean);
|
|
@@ -283,24 +283,25 @@ function isConfidentMatch(source, candidate) {
|
|
|
283
283
|
*
|
|
284
284
|
* Two behaviours, both mirroring the `--expect-unmanaged` model:
|
|
285
285
|
*
|
|
286
|
-
* - An admitted path is
|
|
286
|
+
* - An admitted path is listed, not silenced. A carve-out nobody can see
|
|
287
287
|
* is how one quietly widens, so the run says which paths it admitted and
|
|
288
288
|
* on what stated reason.
|
|
289
|
-
* - An admitted path that
|
|
289
|
+
* - An admitted path that does resolve to a packaged artifact is a stale
|
|
290
290
|
* carve-out: the declaration asserts a fact about the tree that is no
|
|
291
291
|
* longer true, and suppressing on it would hide a real packaging change.
|
|
292
292
|
* That is reported as a warning, not accepted.
|
|
293
293
|
*
|
|
294
|
-
* A declaration matching nothing that changed this run says nothing
|
|
294
|
+
* A declaration matching nothing that changed this run says nothing,
|
|
295
295
|
* unlike `--expect-unmanaged`, whose unseen entries are reported. The
|
|
296
|
-
* difference is
|
|
297
|
-
* unmet entry is probably a typo in the command just typed.
|
|
296
|
+
* difference is intended: `--expect-unmanaged` is a per-invocation flag
|
|
297
|
+
* list, where an unmet entry is probably a typo in the command just typed.
|
|
298
|
+
* This is a
|
|
298
299
|
* standing config list checked against only the files that happened to
|
|
299
300
|
* change, so "not met" is the normal case and reporting it would put a
|
|
300
301
|
* warning on every build.
|
|
301
302
|
*/
|
|
302
303
|
function applyUnpackagedCarveOut(result, ctx) {
|
|
303
|
-
// Already skipped for a more specific structural reason
|
|
304
|
+
// Already skipped for a more specific structural reason. The carve-out
|
|
304
305
|
// is redundant there and reporting it would be noise.
|
|
305
306
|
if (result.status === 'skipped')
|
|
306
307
|
return result;
|
|
@@ -375,7 +376,7 @@ async function auditSinglePath(source, ctx) {
|
|
|
375
376
|
sourceMtime = sourceStat.mtimeMs;
|
|
376
377
|
}
|
|
377
378
|
catch {
|
|
378
|
-
// Deletion that didn't propagate
|
|
379
|
+
// Deletion that didn't propagate. Distinct class of bug, not audited yet.
|
|
379
380
|
return { source, artifact: undefined, status: 'skipped', skipReason: 'source-unreadable' };
|
|
380
381
|
}
|
|
381
382
|
const roots = searchRootsFor(source, ctx.distRoot, ctx.testsRoot);
|
|
@@ -422,7 +423,7 @@ async function auditSinglePath(source, ctx) {
|
|
|
422
423
|
* Short-circuits the audit for sources that are registered in a jar.mn
|
|
423
424
|
* but whose target path is absent from every search root. Returns the
|
|
424
425
|
* miss entry when the registration lookup saw a `(source)` claim but
|
|
425
|
-
* no dist candidate endswith the target
|
|
426
|
+
* no dist candidate endswith the target. Undefined otherwise.
|
|
426
427
|
*/
|
|
427
428
|
async function reportRegistrationMiss(engineDir, source, roots) {
|
|
428
429
|
const hit = await findRegisteredTarget(engineDir, source);
|
|
@@ -447,7 +448,7 @@ async function reportRegistrationMiss(engineDir, source, roots) {
|
|
|
447
448
|
/**
|
|
448
449
|
* Renders packaged-artifact mtime classification (updated / stale / missing-
|
|
449
450
|
* via-disappearance) for a resolved candidate. Shared by the registration-
|
|
450
|
-
* anchored path (confident
|
|
451
|
+
* anchored path (already confident) and the heuristic fallback
|
|
451
452
|
* (which still applies the structural-relatedness check before claiming
|
|
452
453
|
* `stale`).
|
|
453
454
|
*/
|
|
@@ -538,8 +539,9 @@ async function resolveAuditOwnership(projectRoot) {
|
|
|
538
539
|
/**
|
|
539
540
|
* Renders the ownership suffix for one audit notice: the owning patch, or
|
|
540
541
|
* an explicit `unmanaged` mark. An empty map (no queue, unreadable
|
|
541
|
-
* manifest) renders nothing rather than claiming everything is unmanaged
|
|
542
|
-
* "unmanaged" must mean "checked and unowned", never "could not
|
|
542
|
+
* manifest) renders nothing rather than claiming everything is unmanaged,
|
|
543
|
+
* since "unmanaged" must mean "checked and unowned", never "could not
|
|
544
|
+
* check".
|
|
543
545
|
*/
|
|
544
546
|
function describeOwnership(ownersByPath, source) {
|
|
545
547
|
if (ownersByPath.size === 0)
|
|
@@ -553,7 +555,7 @@ function describeOwnership(ownersByPath, source) {
|
|
|
553
555
|
/**
|
|
554
556
|
* Runs the post-build audit. Emits per-file warnings for missing or
|
|
555
557
|
* stale artifacts and a summary info line at the end. Always returns
|
|
556
|
-
* the summary
|
|
558
|
+
* the summary. Never throws on audit failure (the audit itself must
|
|
557
559
|
* never fail a successful build).
|
|
558
560
|
* @param projectRoot Root of the project (reserved for future fork-specific rules).
|
|
559
561
|
* @param engineDir Path to the engine directory.
|
|
@@ -582,10 +584,10 @@ export async function auditBuildArtifacts(projectRoot, engineDir, baseline, opti
|
|
|
582
584
|
}
|
|
583
585
|
// Ownership, resolved once for the whole audit. The notices key on "was
|
|
584
586
|
// touched", which on a shared checkout means any concurrent session's
|
|
585
|
-
// dirty files
|
|
587
|
+
// dirty files, so an operator gets a registration-shaped warning about a
|
|
586
588
|
// file they never edited and has to census ownership by hand to dismiss
|
|
587
|
-
// it. FireForge already resolves this for `status --ownership
|
|
588
|
-
// it here
|
|
589
|
+
// it. FireForge already resolves this for `status --ownership`. Carrying
|
|
590
|
+
// it here lets the operator dismiss those lines directly.
|
|
589
591
|
const ownersByPath = await resolveAuditOwnership(projectRoot);
|
|
590
592
|
const ctx = {
|
|
591
593
|
engineDir,
|
|
@@ -622,7 +624,7 @@ export async function auditBuildArtifacts(projectRoot, engineDir, baseline, opti
|
|
|
622
624
|
* Without it the summary reported one undifferentiated `skipped` count, so
|
|
623
625
|
* a run that dismissed four unselected-branding files and one
|
|
624
626
|
* ancestor-gated directory looked identical to one that dismissed five
|
|
625
|
-
* unregistered sources
|
|
627
|
+
* unregistered sources, and the four false `missing` entries downstream
|
|
626
628
|
* reported had no counterpart in the counts an operator could check.
|
|
627
629
|
*/
|
|
628
630
|
function describeSkipBreakdown(summary) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Type of the last-build baseline marker, split out of `build-baseline.ts`
|
|
3
3
|
* so its consumers (`build-audit`, `build-prepare`, `test-stale-check`) can
|
|
4
|
-
* import the shape without importing the I/O module
|
|
4
|
+
* import the shape without importing the I/O module. `build-baseline.ts`
|
|
5
5
|
* itself depends on `build-audit.ts` at runtime, and a type import back
|
|
6
6
|
* into it would make the dependency graph cyclic.
|
|
7
7
|
*/
|
|
@@ -11,7 +11,7 @@ export interface BuildBaseline {
|
|
|
11
11
|
/** SHA of engine HEAD at the time the build succeeded. */
|
|
12
12
|
engineHeadSha: string;
|
|
13
13
|
/**
|
|
14
|
-
* ISO-8601 timestamp of when the baseline was recorded. Informational
|
|
14
|
+
* ISO-8601 timestamp of when the baseline was recorded. Informational:
|
|
15
15
|
* downstream code keys off `engineHeadSha` for diffs, but the timestamp
|
|
16
16
|
* helps operators reason about stale markers.
|
|
17
17
|
*/
|
|
@@ -46,19 +46,20 @@ export interface BuildBaseline {
|
|
|
46
46
|
* neither re-runs `mach configure` nor escalates a pre-test build to a
|
|
47
47
|
* full `mach build`. Without this the persistent worktree diff every
|
|
48
48
|
* fork carries (imported patches + Furnace-applied components) made a
|
|
49
|
-
* patch-touched `jar.mn` "changed" on
|
|
49
|
+
* patch-touched `jar.mn` "changed" on every run, and each `test --build`
|
|
50
50
|
* after a full build paid the full build again.
|
|
51
51
|
*
|
|
52
52
|
* Refresh rules, per entry kind:
|
|
53
53
|
* - backend inputs (`moz.build` & co) are refreshed on every successful
|
|
54
|
-
* write
|
|
55
|
-
* against the previous baseline, so a changed one was
|
|
56
|
-
*
|
|
54
|
+
* write, because every baseline-writing path ran the auto-configure
|
|
55
|
+
* preflight against the previous baseline, so a changed one was
|
|
56
|
+
* reconfigured.
|
|
57
|
+
* - `jar.mn` entries are refreshed only by a full build and carried
|
|
57
58
|
* forward verbatim from the previous record on a `faster` write, since
|
|
58
59
|
* `fireforge build --ui` never escalates and recording a `jar.mn` no
|
|
59
60
|
* full build has installed would hide the next escalation.
|
|
60
61
|
*
|
|
61
|
-
* Absent on baselines written before the field existed
|
|
62
|
+
* Absent on baselines written before the field existed. `build-prepare`
|
|
62
63
|
* then falls back to the path-only comparison (every dirty build input
|
|
63
64
|
* counts as changed).
|
|
64
65
|
*/
|
|
@@ -66,7 +67,7 @@ export interface BuildBaseline {
|
|
|
66
67
|
/**
|
|
67
68
|
* What the packaged test runtime produced by the recorded build covers.
|
|
68
69
|
*
|
|
69
|
-
* - `'full'`: the build packaged the full test set
|
|
70
|
+
* - `'full'`: the build packaged the full test set, written by
|
|
70
71
|
* `fireforge build` / `build --ui` and by a path-less
|
|
71
72
|
* `fireforge test --build` (full-suite run).
|
|
72
73
|
* - `string[]`: engine-relative POSIX request paths of the file/directory-
|
|
@@ -83,15 +84,15 @@ export interface BuildBaseline {
|
|
|
83
84
|
* most one obj dir exists per project.
|
|
84
85
|
*
|
|
85
86
|
* Union/"shared coverage" across successive scoped builds is unsound in
|
|
86
|
-
* general
|
|
87
|
-
*
|
|
87
|
+
* general: every baseline write refreshes `packageableFingerprints` for
|
|
88
|
+
* all dirty packageable paths, so a blind union would whitewash an
|
|
88
89
|
* earlier scope's edited fixtures while `obj-*`/`_tests/` still holds its
|
|
89
|
-
* stale staging. Coverage therefore
|
|
90
|
+
* stale staging. Coverage therefore replaces by default.
|
|
90
91
|
*
|
|
91
92
|
* The one exception is `test --build --extend-coverage`, which unions only
|
|
92
93
|
* after proving the previous record's anchor still holds: same engine
|
|
93
94
|
* HEAD, same {@link BuildBaseline.mozconfigHash}, and every previously
|
|
94
|
-
* fingerprinted path byte-identical
|
|
95
|
+
* fingerprinted path byte-identical, i.e. the wholesale fingerprint
|
|
95
96
|
* refresh is a no-op for everything the earlier scope's staging depended
|
|
96
97
|
* on. Any divergence refuses fail-closed. See `src/core/coverage-extend.ts`
|
|
97
98
|
* for the one boundary that guard does not cover (dirty non-packageable
|
|
@@ -100,7 +101,7 @@ export interface BuildBaseline {
|
|
|
100
101
|
testPackagingCoverage?: TestPackagingCoverage;
|
|
101
102
|
/**
|
|
102
103
|
* Hex-encoded SHA-256 of `engine/mozconfig` as it stood for this build.
|
|
103
|
-
* Recorded because the mozconfig is
|
|
104
|
+
* Recorded because the mozconfig is regenerated from project-side
|
|
104
105
|
* `configs/*.mozconfig` templates plus `fireforge.json` on every build, so
|
|
105
106
|
* `engineHeadSha` does not cover it: two builds at the same engine SHA can
|
|
106
107
|
* configure differently. Consumed by the `--extend-coverage` anchor, which
|
|
@@ -109,10 +110,10 @@ export interface BuildBaseline {
|
|
|
109
110
|
mozconfigHash?: string;
|
|
110
111
|
/**
|
|
111
112
|
* Anchor for the compiled StaticComponents table: the engine HEAD SHA of
|
|
112
|
-
* the last
|
|
113
|
+
* the last full-coverage build plus content fingerprints of the
|
|
113
114
|
* `components.conf` manifests that were dirty at that moment. Written
|
|
114
|
-
* fresh only on
|
|
115
|
-
* `build --ui`, path-less `test --build`)
|
|
115
|
+
* fresh only on full-coverage baseline writes (`fireforge build`,
|
|
116
|
+
* `build --ui`, path-less `test --build`). A scoped `test --build` carries
|
|
116
117
|
* the previous record forward verbatim, because `mach build faster` does
|
|
117
118
|
* not rebake `components.conf` registrations into the compiled table. When
|
|
118
119
|
* absent, the static-components stale check degrades to "fresh".
|
|
@@ -121,13 +122,13 @@ export interface BuildBaseline {
|
|
|
121
122
|
/**
|
|
122
123
|
* Invocation shape that recorded this baseline (`'fireforge build'`,
|
|
123
124
|
* `'fireforge build --ui'`, `'fireforge test --build [paths]'`).
|
|
124
|
-
* Informational
|
|
125
|
+
* Informational, surfaced by `fireforge status --test-coverage`. Render
|
|
125
126
|
* as "unknown" when absent.
|
|
126
127
|
*/
|
|
127
128
|
recordedBy?: string;
|
|
128
129
|
}
|
|
129
130
|
/**
|
|
130
|
-
* State of the engine at the last
|
|
131
|
+
* State of the engine at the last full build, as far as compiled-in XPCOM
|
|
131
132
|
* component registration is concerned. See
|
|
132
133
|
* {@link BuildBaseline.staticComponentsBaseline}.
|
|
133
134
|
*/
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Type of the last-build baseline marker, split out of `build-baseline.ts`
|
|
4
4
|
* so its consumers (`build-audit`, `build-prepare`, `test-stale-check`) can
|
|
5
|
-
* import the shape without importing the I/O module
|
|
5
|
+
* import the shape without importing the I/O module. `build-baseline.ts`
|
|
6
6
|
* itself depends on `build-audit.ts` at runtime, and a type import back
|
|
7
7
|
* into it would make the dependency graph cyclic.
|
|
8
8
|
*/
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* recursive-make backend isn't stale.
|
|
13
13
|
*
|
|
14
14
|
* The marker lives under `.fireforge/last-build.json`. It is written only
|
|
15
|
-
* on successful build completion
|
|
15
|
+
* on successful build completion. A failed build does not update it, so a
|
|
16
16
|
* subsequent run still audits against the last known-good tree.
|
|
17
17
|
*/
|
|
18
18
|
import { type BuildBaseline, type TestPackagingCoverage } from './build-baseline-types.js';
|
|
@@ -21,7 +21,7 @@ import { type BuildBaseline, type TestPackagingCoverage } from './build-baseline
|
|
|
21
21
|
* the `jar.mn` half of {@link BuildBaseline.buildInputFingerprints} is
|
|
22
22
|
* refreshed (`'full'`) or carried forward from the previous record
|
|
23
23
|
* (`'faster'`). `fireforge build --ui` and a non-escalated `test --build`
|
|
24
|
-
* are `'faster'
|
|
24
|
+
* are `'faster'`. `fireforge build` and an escalated `test --build` are
|
|
25
25
|
* `'full'`.
|
|
26
26
|
*/
|
|
27
27
|
export type BaselineBuildKind = 'full' | 'faster';
|
|
@@ -33,7 +33,7 @@ export type BaselineBuildKind = 'full' | 'faster';
|
|
|
33
33
|
export declare function getBuildBaselinePath(projectRoot: string): string;
|
|
34
34
|
/**
|
|
35
35
|
* Reads the last-build baseline if present. Returns undefined when no
|
|
36
|
-
* previous successful build has been recorded
|
|
36
|
+
* previous successful build has been recorded. Callers must tolerate that
|
|
37
37
|
* path (first build, cleaned workspace).
|
|
38
38
|
* @param projectRoot - Root directory of the project
|
|
39
39
|
*/
|
|
@@ -54,8 +54,8 @@ export interface WriteBuildBaselineOptions {
|
|
|
54
54
|
/**
|
|
55
55
|
* The baseline this write replaces, when the caller has it. A scoped
|
|
56
56
|
* (non-`'full'`) write carries its `staticComponentsBaseline` forward
|
|
57
|
-
* verbatim
|
|
58
|
-
* registrations, so the last
|
|
57
|
+
* verbatim, because `mach build faster` does not rebake `components.conf`
|
|
58
|
+
* registrations, so the last full build stays the anchor for the
|
|
59
59
|
* compiled StaticComponents table.
|
|
60
60
|
*/
|
|
61
61
|
previousBaseline?: BuildBaseline | undefined;
|
|
@@ -66,7 +66,7 @@ export interface WriteBuildBaselineOptions {
|
|
|
66
66
|
* coverage claim is `'full'` or absent. `'refresh'` records it even for a
|
|
67
67
|
* scoped coverage claim whose implementation escalated to a full build.
|
|
68
68
|
* `'carry-forward'` always keeps the previous anchor: needed by
|
|
69
|
-
* `--extend-coverage`, whose union can
|
|
69
|
+
* `--extend-coverage`, whose union can evaluate to `'full'` while the
|
|
70
70
|
* build that produced it was still a scoped `mach build faster` that did
|
|
71
71
|
* not rebake the compiled table.
|
|
72
72
|
*/
|
|
@@ -74,9 +74,9 @@ export interface WriteBuildBaselineOptions {
|
|
|
74
74
|
/**
|
|
75
75
|
* Which mach build produced this baseline (default `'full'`). A
|
|
76
76
|
* `'faster'` write carries the previous record's `jar.mn` fingerprints
|
|
77
|
-
* forward instead of refreshing them
|
|
77
|
+
* forward instead of refreshing them. See
|
|
78
78
|
* {@link BuildBaseline.buildInputFingerprints}. Every caller that ran
|
|
79
|
-
* `mach build faster`
|
|
79
|
+
* `mach build faster` must say so, or the next pre-test build skips an
|
|
80
80
|
* escalation no full build has honoured.
|
|
81
81
|
*/
|
|
82
82
|
buildKind?: BaselineBuildKind | undefined;
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* recursive-make backend isn't stale.
|
|
14
14
|
*
|
|
15
15
|
* The marker lives under `.fireforge/last-build.json`. It is written only
|
|
16
|
-
* on successful build completion
|
|
16
|
+
* on successful build completion. A failed build does not update it, so a
|
|
17
17
|
* subsequent run still audits against the last known-good tree.
|
|
18
18
|
*/
|
|
19
19
|
import { readFile } from 'node:fs/promises';
|
|
@@ -47,7 +47,7 @@ export function getBuildBaselinePath(projectRoot) {
|
|
|
47
47
|
}
|
|
48
48
|
/**
|
|
49
49
|
* Reads the last-build baseline if present. Returns undefined when no
|
|
50
|
-
* previous successful build has been recorded
|
|
50
|
+
* previous successful build has been recorded. Callers must tolerate that
|
|
51
51
|
* path (first build, cleaned workspace).
|
|
52
52
|
* @param projectRoot - Root directory of the project
|
|
53
53
|
*/
|
|
@@ -60,7 +60,7 @@ export async function readBuildBaseline(projectRoot) {
|
|
|
60
60
|
return await readJson(path);
|
|
61
61
|
}
|
|
62
62
|
catch {
|
|
63
|
-
// A corrupt marker is equivalent to no marker
|
|
63
|
+
// A corrupt marker is equivalent to no marker: the audit/auto-configure
|
|
64
64
|
// will treat it as "first build" rather than block on the inconsistency.
|
|
65
65
|
return undefined;
|
|
66
66
|
}
|
|
@@ -80,10 +80,10 @@ export async function writeBuildBaseline(options) {
|
|
|
80
80
|
engineHeadSha = await getHead(engineDir);
|
|
81
81
|
}
|
|
82
82
|
catch (error) {
|
|
83
|
-
// Engine may be an unborn branch (freshly cloned + reset, or
|
|
84
|
-
//
|
|
85
|
-
// behavior. Any other git failure is bubbled up
|
|
86
|
-
// silently write a garbage marker.
|
|
83
|
+
// Engine may be an unborn branch (freshly cloned + reset, or
|
|
84
|
+
// mid-import). Record an empty SHA and let downstream fall back to "no
|
|
85
|
+
// prior state" behavior. Any other git failure is bubbled up, because
|
|
86
|
+
// we don't want to silently write a garbage marker.
|
|
87
87
|
if (!isMissingHeadError(error)) {
|
|
88
88
|
throw error;
|
|
89
89
|
}
|
|
@@ -92,7 +92,7 @@ export async function writeBuildBaseline(options) {
|
|
|
92
92
|
const buildInputFingerprints = await collectBuildInputFingerprints(engineDir, previousBaseline, buildKind);
|
|
93
93
|
// A full-coverage write (and the legacy no-claim `fireforge build` shape)
|
|
94
94
|
// just recompiled the StaticComponents table, so it anchors the table to
|
|
95
|
-
// the current engine state. A scoped write did not
|
|
95
|
+
// the current engine state. A scoped write did not, so carry the previous
|
|
96
96
|
// anchor forward verbatim.
|
|
97
97
|
const staticComponentsBaseline = staticComponentsHandling === 'refresh' ||
|
|
98
98
|
(staticComponentsHandling === 'auto' &&
|
|
@@ -122,7 +122,7 @@ export async function writeBuildBaseline(options) {
|
|
|
122
122
|
* or new one means the file is genuinely stale.
|
|
123
123
|
*
|
|
124
124
|
* Returns `undefined` on any git failure so a broken probe never corrupts
|
|
125
|
-
* the on-disk baseline with `{}
|
|
125
|
+
* the on-disk baseline with `{}`. The stale-check then falls back to a
|
|
126
126
|
* path-only comparison.
|
|
127
127
|
*/
|
|
128
128
|
async function collectPackageableFingerprints(engineDir) {
|
|
@@ -133,9 +133,9 @@ async function collectPackageableFingerprints(engineDir) {
|
|
|
133
133
|
* ({@link isBuildInputPath}) this build consumed. Backend inputs
|
|
134
134
|
* (`moz.build` & co) are always taken from the live tree: the
|
|
135
135
|
* auto-configure preflight reconfigured against them before this build
|
|
136
|
-
* ran. `jar.mn` entries are taken from the live tree only after a
|
|
137
|
-
* build
|
|
138
|
-
* forward verbatim, because `mach build faster` is
|
|
136
|
+
* ran. `jar.mn` entries are taken from the live tree only after a full
|
|
137
|
+
* build. A `faster` write carries the previous record's `jar.mn` entries
|
|
138
|
+
* forward verbatim, because `mach build faster` is the build the
|
|
139
139
|
* `jar.mn` escalation exists to bypass, and recording a `jar.mn` it did
|
|
140
140
|
* not install would silence the next escalation. Returns `undefined` on
|
|
141
141
|
* probe failure so the field is omitted rather than written as `{}`.
|
|
@@ -159,7 +159,7 @@ async function collectBuildInputFingerprints(engineDir, previousBaseline, buildK
|
|
|
159
159
|
/**
|
|
160
160
|
* Anchor for the compiled StaticComponents table: the engine HEAD SHA of
|
|
161
161
|
* this (full) build plus content fingerprints of the `components.conf`
|
|
162
|
-
* manifests dirty right now
|
|
162
|
+
* manifests dirty right now, using the same dirty-path probe family as
|
|
163
163
|
* {@link collectPackageableFingerprints}, filtered to XPCOM manifests.
|
|
164
164
|
* Returns `undefined` on probe failure so a broken probe omits the field
|
|
165
165
|
* (the static-components stale check then degrades to "fresh") rather than
|
|
@@ -211,7 +211,7 @@ async function collectDirtyFingerprints(engineDir, includePath, contextLabel) {
|
|
|
211
211
|
return [relPath, DELETED_FILE_FINGERPRINT];
|
|
212
212
|
}
|
|
213
213
|
// A file that disappeared between status probe and hash is
|
|
214
|
-
// expected in concurrent scenarios
|
|
214
|
+
// expected in concurrent scenarios. Non-ENOENT failures remain
|
|
215
215
|
// untrusted and are skipped without failing the whole baseline write.
|
|
216
216
|
verbose(`Build baseline: skipping ${contextLabel} for ${relPath} — ${toError(fileError).message}`);
|
|
217
217
|
return undefined;
|
|
@@ -3,19 +3,19 @@
|
|
|
3
3
|
* escalate from `mach build faster` to a full `mach build`.
|
|
4
4
|
*
|
|
5
5
|
* The 0.41.0 rule was `any changed jar.mn ⇒ full build`, which costs ~10
|
|
6
|
-
* minutes against ~20 s for a chrome-only slice and is paid
|
|
6
|
+
* minutes against ~20 s for a chrome-only slice and is paid twice per
|
|
7
7
|
* green/no-change pair on a Furnace-touching slice. A downstream experiment
|
|
8
8
|
* (two clean runs, 2026-08-29, against 0.44.4) showed the rule is over-broad
|
|
9
|
-
* for the common case: a jar-only registration of a
|
|
10
|
-
* to an
|
|
11
|
-
* `fireforge build --ui` both times
|
|
9
|
+
* for the common case: a jar-only registration of a new content file added
|
|
10
|
+
* to an existing `dist/bin` manifest was installed by a plain
|
|
11
|
+
* `fireforge build --ui` both times: `faster/install_dist_bin_browser` named
|
|
12
12
|
* the destination, the file landed in `dist/bin/…/content/browser/` and in
|
|
13
13
|
* the `.app` bundle, and a plain `fireforge test` fetched it over
|
|
14
14
|
* `chrome://` at runtime. Neither run escalated, and neither needed to.
|
|
15
15
|
*
|
|
16
|
-
* What the experiment did
|
|
16
|
+
* What the experiment did not exercise, and what therefore still escalates:
|
|
17
17
|
*
|
|
18
|
-
* - a
|
|
18
|
+
* - a new `jar.mn` file. The install manifest for a manifest the backend
|
|
19
19
|
* has never seen does not exist yet, and `mach build faster` consumes
|
|
20
20
|
* install manifests rather than regenerating the backend that writes
|
|
21
21
|
* them.
|
|
@@ -42,7 +42,7 @@ export interface JarEscalationDecision {
|
|
|
42
42
|
escalate: boolean;
|
|
43
43
|
/** One entry per manifest that forces the escalation. */
|
|
44
44
|
causes: JarEscalationCause[];
|
|
45
|
-
/** Manifests the narrowing cleared
|
|
45
|
+
/** Manifests the narrowing cleared. Kept for the verbose explanation. */
|
|
46
46
|
cleared: string[];
|
|
47
47
|
}
|
|
48
48
|
/**
|
|
@@ -57,7 +57,7 @@ export interface JarEscalationDecision {
|
|
|
57
57
|
*/
|
|
58
58
|
export declare function evaluateJarManifestEscalation(engineDir: string, changedPaths: readonly string[], baseline: BuildBaseline | undefined): Promise<JarEscalationDecision>;
|
|
59
59
|
/**
|
|
60
|
-
* Renders the operator-facing escalation notice. Names the manifest
|
|
60
|
+
* Renders the operator-facing escalation notice. Names the manifest and the
|
|
61
61
|
* reason: "a jar.mn changed" is the sentence that made the previous rule
|
|
62
62
|
* impossible to argue with from outside.
|
|
63
63
|
*/
|