@hominis/fireforge 0.46.0 → 0.46.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +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 +9 -9
- package/dist/src/core/token-dark-mode.js +11 -11
- 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
|
@@ -4,19 +4,19 @@
|
|
|
4
4
|
* escalate from `mach build faster` to a full `mach build`.
|
|
5
5
|
*
|
|
6
6
|
* The 0.41.0 rule was `any changed jar.mn ⇒ full build`, which costs ~10
|
|
7
|
-
* minutes against ~20 s for a chrome-only slice and is paid
|
|
7
|
+
* minutes against ~20 s for a chrome-only slice and is paid twice per
|
|
8
8
|
* green/no-change pair on a Furnace-touching slice. A downstream experiment
|
|
9
9
|
* (two clean runs, 2026-08-29, against 0.44.4) showed the rule is over-broad
|
|
10
|
-
* for the common case: a jar-only registration of a
|
|
11
|
-
* to an
|
|
12
|
-
* `fireforge build --ui` both times
|
|
10
|
+
* for the common case: a jar-only registration of a new content file added
|
|
11
|
+
* to an existing `dist/bin` manifest was installed by a plain
|
|
12
|
+
* `fireforge build --ui` both times: `faster/install_dist_bin_browser` named
|
|
13
13
|
* the destination, the file landed in `dist/bin/…/content/browser/` and in
|
|
14
14
|
* the `.app` bundle, and a plain `fireforge test` fetched it over
|
|
15
15
|
* `chrome://` at runtime. Neither run escalated, and neither needed to.
|
|
16
16
|
*
|
|
17
|
-
* What the experiment did
|
|
17
|
+
* What the experiment did not exercise, and what therefore still escalates:
|
|
18
18
|
*
|
|
19
|
-
* - a
|
|
19
|
+
* - a new `jar.mn` file. The install manifest for a manifest the backend
|
|
20
20
|
* has never seen does not exist yet, and `mach build faster` consumes
|
|
21
21
|
* install manifests rather than regenerating the backend that writes
|
|
22
22
|
* them.
|
|
@@ -38,7 +38,7 @@ import { getUntrackedFilesInDir } from './git-status.js';
|
|
|
38
38
|
/**
|
|
39
39
|
* A jar declaration line: an optional bracketed base-directory prefix, then
|
|
40
40
|
* the jar name. Matched at column zero because entry lines inside a section
|
|
41
|
-
* are indented
|
|
41
|
+
* are indented. An indented `foo.jar:` is content, not a declaration.
|
|
42
42
|
*/
|
|
43
43
|
const JAR_DECLARATION_PATTERN = /^(\[[^\]]*\]\s*)?[^\s[\]]+\.jar:\s*$/;
|
|
44
44
|
/** True when the jar declaration redirects the install base directory. */
|
|
@@ -49,14 +49,14 @@ function declaresNonDefaultBase(line) {
|
|
|
49
49
|
return match[1] !== undefined;
|
|
50
50
|
}
|
|
51
51
|
/**
|
|
52
|
-
* True when a changed `jar.mn` is
|
|
52
|
+
* True when a changed `jar.mn` is new to the last successful build.
|
|
53
53
|
*
|
|
54
|
-
* Untracked in the engine repo is the reliable
|
|
55
|
-
* a checkout of upstream with patches applied to the
|
|
56
|
-
* a patch created is untracked and one that shipped upstream is
|
|
57
|
-
* baseline's fingerprints cannot answer this on their own
|
|
58
|
-
* the paths that were
|
|
59
|
-
* manifest has no entry either.
|
|
54
|
+
* Untracked in the engine repo is the reliable signal: a fork's engine tree
|
|
55
|
+
* is a checkout of upstream with patches applied to the worktree, so a
|
|
56
|
+
* manifest a patch created is untracked and one that shipped upstream is
|
|
57
|
+
* tracked. The baseline's fingerprints cannot answer this on their own: they
|
|
58
|
+
* record only the paths that were dirty at the last build, so a clean
|
|
59
|
+
* pre-existing manifest has no entry either.
|
|
60
60
|
*/
|
|
61
61
|
async function isNewJarManifest(engineDir, path) {
|
|
62
62
|
const untracked = await getUntrackedFilesInDir(engineDir, path);
|
|
@@ -116,7 +116,7 @@ export async function evaluateJarManifestEscalation(engineDir, changedPaths, bas
|
|
|
116
116
|
return { escalate: causes.length > 0, causes, cleared };
|
|
117
117
|
}
|
|
118
118
|
/**
|
|
119
|
-
* Renders the operator-facing escalation notice. Names the manifest
|
|
119
|
+
* Renders the operator-facing escalation notice. Names the manifest and the
|
|
120
120
|
* reason: "a jar.mn changed" is the sentence that made the previous rule
|
|
121
121
|
* impossible to argue with from outside.
|
|
122
122
|
*/
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Loud guard against silently reverting
|
|
2
|
+
* Loud guard against silently reverting unexported engine drift.
|
|
3
3
|
*
|
|
4
4
|
* `build-prepare` rewrites engine files from FireForge-owned sources before
|
|
5
5
|
* every build: the branding tree, every Furnace-managed component, and
|
|
6
6
|
* `mozconfig`. On a multi-session checkout that is a silent destructive
|
|
7
|
-
* write
|
|
7
|
+
* write: one session edits a file in `engine/` while another holds the
|
|
8
8
|
* engine lock, the lock-holder's build rewrites it back to its patch
|
|
9
9
|
* baseline, and the editing session's later `re-export --wait-lock`
|
|
10
|
-
* captures a
|
|
10
|
+
* captures a hybrid file that every gate then passes.
|
|
11
11
|
*
|
|
12
|
-
* This guard runs
|
|
12
|
+
* This guard runs before the writes, classifies the engine's dirty files
|
|
13
13
|
* with the same classifier `fireforge status` uses, and reports the ones
|
|
14
14
|
* whose content is explained by neither a patch body nor the pristine
|
|
15
15
|
* baseline. Advisory by default (a warning naming every file), refusing
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
// SPDX-License-Identifier: EUPL-1.2
|
|
2
2
|
/**
|
|
3
|
-
* Loud guard against silently reverting
|
|
3
|
+
* Loud guard against silently reverting unexported engine drift.
|
|
4
4
|
*
|
|
5
5
|
* `build-prepare` rewrites engine files from FireForge-owned sources before
|
|
6
6
|
* every build: the branding tree, every Furnace-managed component, and
|
|
7
7
|
* `mozconfig`. On a multi-session checkout that is a silent destructive
|
|
8
|
-
* write
|
|
8
|
+
* write: one session edits a file in `engine/` while another holds the
|
|
9
9
|
* engine lock, the lock-holder's build rewrites it back to its patch
|
|
10
10
|
* baseline, and the editing session's later `re-export --wait-lock`
|
|
11
|
-
* captures a
|
|
11
|
+
* captures a hybrid file that every gate then passes.
|
|
12
12
|
*
|
|
13
|
-
* This guard runs
|
|
13
|
+
* This guard runs before the writes, classifies the engine's dirty files
|
|
14
14
|
* with the same classifier `fireforge status` uses, and reports the ones
|
|
15
15
|
* whose content is explained by neither a patch body nor the pristine
|
|
16
16
|
* baseline. Advisory by default (a warning naming every file), refusing
|
|
@@ -23,12 +23,12 @@ import { collectFurnaceManagedPrefixes } from './furnace-config.js';
|
|
|
23
23
|
import { expandUntrackedDirectoryEntries, getWorkingTreeStatus } from './git-status.js';
|
|
24
24
|
import { classifyFiles } from './status-classify.js';
|
|
25
25
|
/**
|
|
26
|
-
* Classifications whose on-disk content is explained by
|
|
27
|
-
* body nor the pristine baseline
|
|
26
|
+
* Classifications whose on-disk content is explained by neither a patch
|
|
27
|
+
* body nor the pristine baseline, which is the content a build-prepare
|
|
28
28
|
* overwrite would destroy without a record anywhere.
|
|
29
29
|
*
|
|
30
|
-
* `patch-backed` and `furnace` are excluded because their content
|
|
31
|
-
* recorded state
|
|
30
|
+
* `patch-backed` and `furnace` are excluded because their content is the
|
|
31
|
+
* recorded state. `branding` is excluded because the branding writer
|
|
32
32
|
* preserves unmanaged lines rather than overwriting them.
|
|
33
33
|
*/
|
|
34
34
|
const AT_RISK_CLASSIFICATIONS = new Set(['unmanaged', 'patch-owned-drift', 'conflict']);
|
|
@@ -58,15 +58,15 @@ function isOverwrittenByBuildPrepare(file, binaryName, furnacePrefixes) {
|
|
|
58
58
|
* Narrows the status entries to the ones build-prepare can overwrite,
|
|
59
59
|
* expanding collapsed untracked directories on the way.
|
|
60
60
|
*
|
|
61
|
-
* Git reports a
|
|
61
|
+
* Git reports a wholly untracked directory as a single `?? dir/` entry
|
|
62
62
|
* rather than listing the files under it. A directory entry has no content
|
|
63
63
|
* to compare, so `classifyFiles` matches it against neither a patch body nor
|
|
64
|
-
* the pristine baseline and buckets it `unmanaged
|
|
65
|
-
* classification. Expanding here
|
|
66
|
-
* `status --unmanaged`, which expands
|
|
64
|
+
* the pristine baseline and buckets it `unmanaged`, an at-risk
|
|
65
|
+
* classification. Expanding here keeps this guard in agreement with
|
|
66
|
+
* `status --unmanaged`, which also expands.
|
|
67
67
|
*
|
|
68
68
|
* Expansion is scoped to build-prepare-owned prefixes on both sides of the
|
|
69
|
-
* walk: a collapsed directory that merely
|
|
69
|
+
* walk: a collapsed directory that merely contains an owned prefix
|
|
70
70
|
* (`components/` when `components/custom/` is Furnace-managed) is rewritten
|
|
71
71
|
* to the owned prefixes beneath it, so the enumeration never walks an
|
|
72
72
|
* unrelated subtree and never trips the per-directory expansion cap.
|
|
@@ -26,20 +26,20 @@ export interface PrepareBuildOptions {
|
|
|
26
26
|
* Previous successful-build baseline, used to detect `moz.build` /
|
|
27
27
|
* `moz.configure` / `Makefile.in` changes that require a fresh
|
|
28
28
|
* `mach configure` before the build. When undefined, the auto-configure
|
|
29
|
-
* step is skipped
|
|
30
|
-
* means.
|
|
29
|
+
* step is skipped, since there's no reference point for what "changed
|
|
30
|
+
* since" means.
|
|
31
31
|
*/
|
|
32
32
|
previousBaseline?: BuildBaseline | undefined;
|
|
33
33
|
/**
|
|
34
34
|
* Turn the unexported-drift warning into a hard refusal.
|
|
35
|
-
* Scripted gates want the stop
|
|
35
|
+
* Scripted gates want the stop. An interactive build wants the warning.
|
|
36
36
|
*/
|
|
37
37
|
refuseUnexportedDrift?: boolean | undefined;
|
|
38
38
|
}
|
|
39
39
|
/**
|
|
40
40
|
* Describes an exit code in the shell's 128+N signal convention. Truncated
|
|
41
41
|
* configure/build logs with a signal-shaped exit (e.g. 144 = 128+16, SIGURG
|
|
42
|
-
* on macOS) are environmental interruptions, not compiler failures
|
|
42
|
+
* on macOS) are environmental interruptions, not compiler failures. Naming
|
|
43
43
|
* that in the failure text saves the operator a fruitless log hunt.
|
|
44
44
|
* Returns undefined for codes <= 128 (regular failures) and
|
|
45
45
|
* for codes past the conventional signal range, so callers append nothing.
|
|
@@ -25,7 +25,7 @@ import { explainMachError } from './mach-error-hints.js';
|
|
|
25
25
|
/** Path fragments of files whose edits invalidate the recursive-make backend. */
|
|
26
26
|
const BACKEND_INVALIDATING_SUFFIXES = ['moz.build', 'moz.configure', 'Makefile.in'];
|
|
27
27
|
/**
|
|
28
|
-
* Build-input manifests changed since the last
|
|
28
|
+
* Build-input manifests changed since the last successful build, not
|
|
29
29
|
* merely dirty against HEAD. `collectChangedEnginePaths` unions the
|
|
30
30
|
* baseline-to-HEAD diff with every worktree modification, and a fork's
|
|
31
31
|
* worktree is permanently dirty (imported patches, Furnace-applied
|
|
@@ -33,8 +33,8 @@ const BACKEND_INVALIDATING_SUFFIXES = ['moz.build', 'moz.configure', 'Makefile.i
|
|
|
33
33
|
* `moz.build` as changed on every run: `mach configure` re-ran and the
|
|
34
34
|
* pre-test build escalated to a full `mach build` after each full build
|
|
35
35
|
* that had already consumed exactly this content. The baseline's
|
|
36
|
-
* `buildInputFingerprints` say what the last successful build saw
|
|
37
|
-
*
|
|
36
|
+
* `buildInputFingerprints` say what the last successful build saw.
|
|
37
|
+
* Anything byte-identical to that is dropped here. A baseline without the
|
|
38
38
|
* field (written before it existed) keeps every dirty input, which is the
|
|
39
39
|
* old behaviour.
|
|
40
40
|
*
|
|
@@ -56,8 +56,9 @@ async function collectChangedBuildInputs(engineDir, baseline) {
|
|
|
56
56
|
* Extracts the tail of captured `mach configure` output so the underlying
|
|
57
57
|
* mozbuild failure (e.g. `mozbuild.util.UnsortedError: ... is not in sorted
|
|
58
58
|
* order`) is carried into the thrown `BuildError` instead of being reduced to
|
|
59
|
-
* a bare exit code. mozbuild writes the error and its traceback to stderr
|
|
60
|
-
* stdout is included as a fallback for shells that interleave the
|
|
59
|
+
* a bare exit code. mozbuild writes the error and its traceback to stderr,
|
|
60
|
+
* and stdout is included as a fallback for shells that interleave the
|
|
61
|
+
* streams.
|
|
61
62
|
* Returns an empty string when nothing useful was captured.
|
|
62
63
|
*/
|
|
63
64
|
function extractMachConfigureError(result) {
|
|
@@ -69,7 +70,7 @@ function extractMachConfigureError(result) {
|
|
|
69
70
|
/**
|
|
70
71
|
* Describes an exit code in the shell's 128+N signal convention. Truncated
|
|
71
72
|
* configure/build logs with a signal-shaped exit (e.g. 144 = 128+16, SIGURG
|
|
72
|
-
* on macOS) are environmental interruptions, not compiler failures
|
|
73
|
+
* on macOS) are environmental interruptions, not compiler failures. Naming
|
|
73
74
|
* that in the failure text saves the operator a fruitless log hunt.
|
|
74
75
|
* Returns undefined for codes <= 128 (regular failures) and
|
|
75
76
|
* for codes past the conventional signal range, so callers append nothing.
|
|
@@ -91,7 +92,7 @@ export function describeSignalShapedExit(exitCode) {
|
|
|
91
92
|
* Builds the `BuildError` for a non-zero auto-configure exit: the output
|
|
92
93
|
* tail (so the underlying mozbuild failure survives), any matched
|
|
93
94
|
* mach-error hints (so e.g. a toolchain minimum that moved with a source
|
|
94
|
-
* hop names `fireforge bootstrap` on this path too,
|
|
95
|
+
* hop names `fireforge bootstrap` on this path too, just like the
|
|
95
96
|
* protected build dispatch), and the stop rationale.
|
|
96
97
|
*/
|
|
97
98
|
function buildConfigureFailureError(captured) {
|
|
@@ -116,7 +117,7 @@ function buildConfigureFailureError(captured) {
|
|
|
116
117
|
* @param baseline - Last successful build's baseline
|
|
117
118
|
*/
|
|
118
119
|
async function decideJarEscalation(engineDir, changed, baseline) {
|
|
119
|
-
// Packaging manifests whose graph/destination directories
|
|
120
|
+
// Packaging manifests whose graph/destination directories may need a full
|
|
120
121
|
// build. Path-shape only: `evaluateJarManifestEscalation` decides whether a
|
|
121
122
|
// given changed manifest actually forces one (a new manifest, or one that
|
|
122
123
|
// redirects its install base directory), so an entry added to an existing
|
|
@@ -139,10 +140,10 @@ export function isBackendInvalidatingFile(path) {
|
|
|
139
140
|
return false;
|
|
140
141
|
}
|
|
141
142
|
/**
|
|
142
|
-
*
|
|
143
|
+
* Warns before the overwrite rather than after it.
|
|
143
144
|
*
|
|
144
|
-
* Every write `prepareBuildEnvironment` performs
|
|
145
|
-
* components, `mozconfig`
|
|
145
|
+
* Every write `prepareBuildEnvironment` performs (branding, Furnace
|
|
146
|
+
* components, `mozconfig`) rewrites engine files from a FireForge-owned
|
|
146
147
|
* source. Content recorded in neither a patch body nor the pristine baseline
|
|
147
148
|
* is destroyed by that, and on a multi-session checkout the destruction is
|
|
148
149
|
* what lets a later re-export capture a half-reverted hybrid that every gate
|
|
@@ -215,9 +216,9 @@ export async function prepareBuildEnvironment(projectRoot, paths, config, option
|
|
|
215
216
|
const exitCode = captured.exitCode;
|
|
216
217
|
if (exitCode !== 0) {
|
|
217
218
|
configureSpinner.error(`mach configure failed with exit code ${exitCode}`);
|
|
218
|
-
// Surface the underlying mozbuild error (e.g. UnsortedError)
|
|
219
|
-
// of a bare exit code
|
|
220
|
-
// plus any matched mach-error hints (see the helper).
|
|
219
|
+
// Surface the underlying mozbuild error (e.g. UnsortedError)
|
|
220
|
+
// instead of a bare exit code, since the generic message hid the
|
|
221
|
+
// actual cause, plus any matched mach-error hints (see the helper).
|
|
221
222
|
throw buildConfigureFailureError(captured);
|
|
222
223
|
}
|
|
223
224
|
else {
|
|
@@ -241,7 +242,7 @@ export async function prepareBuildEnvironment(projectRoot, paths, config, option
|
|
|
241
242
|
// Set up custom branding directory and patch moz.configure. Thread the
|
|
242
243
|
// project license through so `buildConfigureScriptContent` /
|
|
243
244
|
// `buildBrandPropertiesContent` / `buildBrandFtlContent` stamp the
|
|
244
|
-
// generated files with a matching SPDX header
|
|
245
|
+
// generated files with a matching SPDX header. Otherwise `patch-lint`
|
|
245
246
|
// flags them with `missing-license-header` on every subsequent export when
|
|
246
247
|
// the project is not MPL-2.0.
|
|
247
248
|
const brandingConfig = {
|
|
@@ -18,10 +18,10 @@ function cloneConfigDocument(config) {
|
|
|
18
18
|
return cloned;
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
|
-
* The error every sentinel-segment refusal raises. Only the
|
|
21
|
+
* The error every sentinel-segment refusal raises. Only the message lives
|
|
22
22
|
* here: the comparison itself is spelled inline at each write site, because
|
|
23
23
|
* that is what both a reader and CodeQL's `js/prototype-pollution-utility`
|
|
24
|
-
* barrier detection need
|
|
24
|
+
* barrier detection need. That detection is not interprocedural, so a check
|
|
25
25
|
* hidden behind a helper leaves the descent below looking unguarded.
|
|
26
26
|
*/
|
|
27
27
|
function sentinelSegmentError(key, part) {
|
|
@@ -41,8 +41,8 @@ function getOrCreateChildRecord(parent, key) {
|
|
|
41
41
|
export function mutateConfig(config, key, value, skipValidation = false) {
|
|
42
42
|
const parts = key.split('.');
|
|
43
43
|
const raw = cloneConfigDocument(config);
|
|
44
|
-
// Every segment is checked at the point it is
|
|
45
|
-
// the descent below and the leaf assignment
|
|
44
|
+
// Every segment is checked at the point it is used as a property name
|
|
45
|
+
// (the descent below and the leaf assignment) rather than once up front,
|
|
46
46
|
// so `--force` cannot be used to mutate Object.prototype and neither write
|
|
47
47
|
// can drift out from behind the guard. `raw` is a private clone, so a
|
|
48
48
|
// refusal here has mutated nothing the caller can observe.
|
|
@@ -35,9 +35,9 @@ function sanitizeProjectState(data) {
|
|
|
35
35
|
continue;
|
|
36
36
|
}
|
|
37
37
|
if (key === 'buildMode') {
|
|
38
|
-
// Validate and assign in
|
|
38
|
+
// Validate and assign in one block so the predicate's narrowing reaches
|
|
39
39
|
// the assignment. Split across two `key === 'buildMode'` guards,
|
|
40
|
-
// TypeScript cannot correlate them and the assignment needed a cast
|
|
40
|
+
// TypeScript cannot correlate them and the assignment needed a cast,
|
|
41
41
|
// which is what let the untyped allowlist drift from the union.
|
|
42
42
|
if (!isBuildMode(value)) {
|
|
43
43
|
issues.push(`field "buildMode" must be one of: ${BUILD_MODES.join(', ')}`);
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* Split out of `config-validate.ts`, which is at its per-file line budget,
|
|
6
6
|
* following the `config-validate-file-size.ts` precedent.
|
|
7
7
|
*
|
|
8
|
-
* The rules here are stricter than the schema strictly needs,
|
|
9
|
-
*
|
|
8
|
+
* The rules here are stricter than the schema strictly needs, on purpose:
|
|
9
|
+
* every entry is a standing suppression of a warning the
|
|
10
10
|
* audit would otherwise raise. A malformed one must fail loudly at config
|
|
11
11
|
* load rather than quietly admit nothing (leaving the operator believing a
|
|
12
12
|
* path is carved out) or quietly admit everything.
|
|
@@ -40,7 +40,7 @@ function parseUnpackagedEntry(raw, field) {
|
|
|
40
40
|
const reason = raw['reason'];
|
|
41
41
|
if (typeof reason !== 'string' || reason.trim().length === 0) {
|
|
42
42
|
// Required on purpose: this is the one audit class FireForge cannot
|
|
43
|
-
// derive from the tree, so the declaration
|
|
43
|
+
// derive from the tree, so the declaration is the evidence.
|
|
44
44
|
throw new ConfigError(`Config field "${field}.reason" must be a non-empty string explaining why the file is never packaged`);
|
|
45
45
|
}
|
|
46
46
|
return { path, reason };
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import type { PatchLintFileSizeThresholds } from '../types/config.js';
|
|
7
7
|
/**
|
|
8
8
|
* Parses the `patchLint.fileSizeThresholds` block. Ordering is validated
|
|
9
|
-
* against the
|
|
9
|
+
* against the merged triple (overrides on top of the defaults), so setting
|
|
10
10
|
* only `warning` cannot land below the default `notice`.
|
|
11
11
|
*/
|
|
12
12
|
export declare function parsePatchLintFileSizeThresholds(raw: unknown): PatchLintFileSizeThresholds;
|
|
@@ -9,7 +9,7 @@ import { isObject } from '../utils/validation.js';
|
|
|
9
9
|
import { DEFAULT_FILE_SIZE_THRESHOLDS } from './patch-lint-file-size.js';
|
|
10
10
|
/**
|
|
11
11
|
* Parses one `patchLint.fileSizeThresholds.<tier>` triple. Every field is
|
|
12
|
-
* optional and merges over the built-in default
|
|
12
|
+
* optional and merges over the built-in default. Values must be positive
|
|
13
13
|
* integers and stay ordered `notice <= warning <= error`, because an
|
|
14
14
|
* out-of-order triple would silently disable a band instead of failing.
|
|
15
15
|
*/
|
|
@@ -36,7 +36,7 @@ function parseFileSizeTier(raw, field) {
|
|
|
36
36
|
}
|
|
37
37
|
/**
|
|
38
38
|
* Parses the `patchLint.fileSizeThresholds` block. Ordering is validated
|
|
39
|
-
* against the
|
|
39
|
+
* against the merged triple (overrides on top of the defaults), so setting
|
|
40
40
|
* only `warning` cannot land below the default `notice`.
|
|
41
41
|
*/
|
|
42
42
|
export function parsePatchLintFileSizeThresholds(raw) {
|
|
@@ -21,7 +21,7 @@ import { parseExternalToolchainsBlock, parseTestBlock } from './config-validate-
|
|
|
21
21
|
function parseIdentityFields(rec) {
|
|
22
22
|
// Empty strings would technically pass the
|
|
23
23
|
// typeof-check below but are never valid for any of these identifier
|
|
24
|
-
// fields
|
|
24
|
+
// fields. Rejecting them here prevents downstream code (Firefox build,
|
|
25
25
|
// launcher binary lookup, AppID assertions) from failing with confusing
|
|
26
26
|
// errors much later.
|
|
27
27
|
const name = requireConfigString(rec, 'name');
|
|
@@ -72,7 +72,7 @@ function parseFirefoxBlock(rec) {
|
|
|
72
72
|
}
|
|
73
73
|
const firefoxProduct = requireConfigString(firefoxRec, 'product', 'firefox.product');
|
|
74
74
|
// Uses the shared guard rather than a fourth copy of the member list. This
|
|
75
|
-
// is the fireforge.json
|
|
75
|
+
// is the fireforge.json read path: a product added to the union but not to
|
|
76
76
|
// the copy that used to live here would have been silently rejected from
|
|
77
77
|
// every project config.
|
|
78
78
|
if (!isValidFirefoxProduct(firefoxProduct)) {
|
|
@@ -170,7 +170,7 @@ export function validateConfig(data) {
|
|
|
170
170
|
parseExternalToolchainsBlock(rec, config);
|
|
171
171
|
parseWireBlock(rec, config);
|
|
172
172
|
parseLicenseField(rec, config);
|
|
173
|
-
// Marker comment
|
|
173
|
+
// Marker comment, appended to lines FireForge writes into upstream files.
|
|
174
174
|
const markerComment = parseMarkerComment(rec.raw('markerComment'));
|
|
175
175
|
if (markerComment !== undefined) {
|
|
176
176
|
config.markerComment = markerComment;
|
|
@@ -185,7 +185,7 @@ export function validateConfig(data) {
|
|
|
185
185
|
if (patchPolicyRec) {
|
|
186
186
|
config.patchPolicy = parsePatchPolicyBlock(patchPolicyRec);
|
|
187
187
|
}
|
|
188
|
-
// Typecheck (top-level, distinct from patchLint
|
|
188
|
+
// Typecheck (top-level, distinct from patchLint). See TypecheckConfig docs.
|
|
189
189
|
const typecheckRec = optionalConfigObject(rec, 'typecheck');
|
|
190
190
|
if (typecheckRec) {
|
|
191
191
|
config.typecheck = parseTypecheckBlock(typecheckRec);
|
|
@@ -400,10 +400,9 @@ function parsePatchLintBlock(rec) {
|
|
|
400
400
|
* file. Shared between `patchLint.checkJsExtraShim` and
|
|
401
401
|
* `typecheck.extraShim` so both fields reject the same absolute-path /
|
|
402
402
|
* traversal / empty-string inputs with consistent error messages. The
|
|
403
|
-
* file's existence is
|
|
404
|
-
*
|
|
405
|
-
*
|
|
406
|
-
* for unrelated commands.
|
|
403
|
+
* file's existence is not checked here. That lives at the engine layer,
|
|
404
|
+
* where a missing file produces a typed runtime error pointing at the
|
|
405
|
+
* actual command, rather than blocking config reads for unrelated commands.
|
|
407
406
|
*/
|
|
408
407
|
function parseShimPath(raw, label) {
|
|
409
408
|
if (typeof raw !== 'string' || raw.trim() === '') {
|
|
@@ -417,7 +416,7 @@ function parseShimPath(raw, label) {
|
|
|
417
416
|
/**
|
|
418
417
|
* Validates the optional top-level `typecheck` block. Empty `projects`
|
|
419
418
|
* is rejected because a silent no-op for `fireforge typecheck` is a
|
|
420
|
-
* footgun
|
|
419
|
+
* footgun, since operators set the block expecting it to do something. Each
|
|
421
420
|
* project path must be a contained relative path so `--project` / CLI
|
|
422
421
|
* scripts can't escape the project root.
|
|
423
422
|
*/
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Project configuration
|
|
2
|
+
* Project configuration barrel module.
|
|
3
3
|
*
|
|
4
4
|
* Re-exports from focused sub-modules:
|
|
5
|
-
* config-paths.ts
|
|
6
|
-
* config-validate.ts
|
|
7
|
-
* config-mutate.ts
|
|
8
|
-
* config-state.ts
|
|
5
|
+
* config-paths.ts: constants and project path derivation
|
|
6
|
+
* config-validate.ts: fireforge.json schema validation
|
|
7
|
+
* config-mutate.ts: immutable config mutation
|
|
8
|
+
* config-state.ts: state file management
|
|
9
9
|
*/
|
|
10
10
|
import type { FireForgeConfig } from '../types/config.js';
|
|
11
11
|
import type { JsonObject } from '../types/json.js';
|
|
@@ -28,12 +28,12 @@ export declare function configExists(root: string): Promise<boolean>;
|
|
|
28
28
|
export declare function loadConfig(root: string): Promise<FireForgeConfig>;
|
|
29
29
|
/**
|
|
30
30
|
* Reads the raw `fireforge.json` document without running it through
|
|
31
|
-
* {@link validateConfig}. Returns every persisted key
|
|
31
|
+
* {@link validateConfig}. Returns every persisted key, including keys
|
|
32
32
|
* written via `fireforge config <key> --force` that `validateConfig`
|
|
33
33
|
* would strip from the typed result.
|
|
34
34
|
*
|
|
35
35
|
* Callers that need the validated, typed shape must still use
|
|
36
|
-
* {@link loadConfig}
|
|
36
|
+
* {@link loadConfig}. This helper exists specifically for the `config`
|
|
37
37
|
* read path so `fireforge config <key>` can surface keys the write path
|
|
38
38
|
* accepted under `--force`.
|
|
39
39
|
*
|
|
@@ -67,9 +67,9 @@ export declare function writeConfigDocument(root: string, config: FireForgeConfi
|
|
|
67
67
|
* Runs an operation while holding a sidecar lock on `fireforge.json`.
|
|
68
68
|
*
|
|
69
69
|
* Two concurrent `fireforge config <key> <value>` invocations each run
|
|
70
|
-
* load → mutate → writeJson against the same document
|
|
71
|
-
* second rename lands after the first and silently drops the first
|
|
72
|
-
* key, with both commands exiting 0.
|
|
70
|
+
* load → mutate → writeJson against the same document. Without this lock
|
|
71
|
+
* the second rename lands after the first and silently drops the first
|
|
72
|
+
* writer's key, with both commands exiting 0.
|
|
73
73
|
*
|
|
74
74
|
* Reads (`loadConfig`, `loadRawConfigDocument`) stay lock-free: writers
|
|
75
75
|
* always use `writeJson`'s atomic temp-file + rename, so a reader observes
|
package/dist/src/core/config.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
// SPDX-License-Identifier: EUPL-1.2
|
|
2
2
|
/**
|
|
3
|
-
* Project configuration
|
|
3
|
+
* Project configuration barrel module.
|
|
4
4
|
*
|
|
5
5
|
* Re-exports from focused sub-modules:
|
|
6
|
-
* config-paths.ts
|
|
7
|
-
* config-validate.ts
|
|
8
|
-
* config-mutate.ts
|
|
9
|
-
* config-state.ts
|
|
6
|
+
* config-paths.ts: constants and project path derivation
|
|
7
|
+
* config-validate.ts: fireforge.json schema validation
|
|
8
|
+
* config-mutate.ts: immutable config mutation
|
|
9
|
+
* config-state.ts: state file management
|
|
10
10
|
*/
|
|
11
11
|
import { basename } from 'node:path';
|
|
12
12
|
import { ConfigError, ConfigNotFoundError } from '../errors/config.js';
|
|
@@ -59,12 +59,12 @@ export async function loadConfig(root) {
|
|
|
59
59
|
}
|
|
60
60
|
/**
|
|
61
61
|
* Reads the raw `fireforge.json` document without running it through
|
|
62
|
-
* {@link validateConfig}. Returns every persisted key
|
|
62
|
+
* {@link validateConfig}. Returns every persisted key, including keys
|
|
63
63
|
* written via `fireforge config <key> --force` that `validateConfig`
|
|
64
64
|
* would strip from the typed result.
|
|
65
65
|
*
|
|
66
66
|
* Callers that need the validated, typed shape must still use
|
|
67
|
-
* {@link loadConfig}
|
|
67
|
+
* {@link loadConfig}. This helper exists specifically for the `config`
|
|
68
68
|
* read path so `fireforge config <key>` can surface keys the write path
|
|
69
69
|
* accepted under `--force`.
|
|
70
70
|
*
|
|
@@ -125,9 +125,9 @@ export async function writeConfigDocument(root, config) {
|
|
|
125
125
|
* Runs an operation while holding a sidecar lock on `fireforge.json`.
|
|
126
126
|
*
|
|
127
127
|
* Two concurrent `fireforge config <key> <value>` invocations each run
|
|
128
|
-
* load → mutate → writeJson against the same document
|
|
129
|
-
* second rename lands after the first and silently drops the first
|
|
130
|
-
* key, with both commands exiting 0.
|
|
128
|
+
* load → mutate → writeJson against the same document. Without this lock
|
|
129
|
+
* the second rename lands after the first and silently drops the first
|
|
130
|
+
* writer's key, with both commands exiting 0.
|
|
131
131
|
*
|
|
132
132
|
* Reads (`loadConfig`, `loadRawConfigDocument`) stay lock-free: writers
|
|
133
133
|
* always use `writeJson`'s atomic temp-file + rename, so a reader observes
|
|
@@ -3,34 +3,34 @@
|
|
|
3
3
|
* into the recorded `testPackagingCoverage` instead of replacing it, under
|
|
4
4
|
* an anchor guard.
|
|
5
5
|
*
|
|
6
|
-
* Coverage
|
|
6
|
+
* Coverage replaces by default for a reason documented in
|
|
7
7
|
* `build-baseline-types.ts`: every baseline write refreshes
|
|
8
|
-
* `packageableFingerprints` for
|
|
8
|
+
* `packageableFingerprints` for all dirty packageable paths, so a blind
|
|
9
9
|
* union would whitewash an earlier scope's edited fixtures while
|
|
10
10
|
* `obj-*`/`_tests/` still holds that scope's stale staging. Extending is
|
|
11
|
-
* honest only while everything the
|
|
11
|
+
* honest only while everything the previous record vouched for is still
|
|
12
12
|
* true, which is what {@link checkExtendCoverageAnchor} and
|
|
13
13
|
* {@link checkExtendMozconfigAnchor} verify:
|
|
14
14
|
*
|
|
15
|
-
* 1. engine HEAD is unchanged
|
|
15
|
+
* 1. engine HEAD is unchanged, so every committed edit is excluded.
|
|
16
16
|
* 2. every path the previous baseline fingerprinted still hashes to the
|
|
17
17
|
* recorded digest, so the earlier scope's staging inputs are
|
|
18
|
-
* byte-identical. Files that became dirty
|
|
18
|
+
* byte-identical. Files that became dirty since that build are fine:
|
|
19
19
|
* the current whole-tree `mach build faster` repackages `dist/` and
|
|
20
|
-
* vouches for them
|
|
20
|
+
* vouches for them.
|
|
21
21
|
* 3. the generated `engine/mozconfig` is unchanged. Engine HEAD does not
|
|
22
|
-
* cover this
|
|
22
|
+
* cover this: the mozconfig is regenerated from project-side
|
|
23
23
|
* `configs/*.mozconfig` templates plus `fireforge.json` on every build,
|
|
24
24
|
* so two builds at the same engine SHA can configure differently.
|
|
25
25
|
*
|
|
26
|
-
* Every failure refuses fail-closed
|
|
26
|
+
* Every failure refuses fail-closed. The operator's remedy is always a plain
|
|
27
27
|
* scoped build, which resets the claim to the paths it actually vouches for.
|
|
28
28
|
*
|
|
29
|
-
* Known boundary, documented rather than closed: dirty
|
|
29
|
+
* Known boundary, documented rather than closed: dirty non-packageable
|
|
30
30
|
* fixtures under previously covered paths (plain test files, manifests
|
|
31
31
|
* `isPackageablePath` rejects) are invisible to check 2. Editing one
|
|
32
32
|
* uncommitted between two builds leaves the earlier scope's `_tests/`
|
|
33
|
-
* staging stale while extend still vouches for it. Plain
|
|
33
|
+
* staging stale while extend still vouches for it. Plain replacement has no such
|
|
34
34
|
* window, because the earlier scope simply stops being covered.
|
|
35
35
|
*/
|
|
36
36
|
import { type BuildBaseline, type TestPackagingCoverage } from './build-baseline-types.js';
|
|
@@ -54,17 +54,17 @@ export type ExtendAnchorResult = {
|
|
|
54
54
|
export declare function checkExtendCoverageAnchor(engineDir: string, previousBaseline: BuildBaseline | undefined): Promise<ExtendAnchorResult>;
|
|
55
55
|
/**
|
|
56
56
|
* Verifies the mozconfig half of the anchor. Split from
|
|
57
|
-
* {@link checkExtendCoverageAnchor} because it can only run
|
|
58
|
-
* `prepareBuildEnvironment` regenerates `engine/mozconfig`
|
|
59
|
-
*
|
|
60
|
-
*
|
|
57
|
+
* {@link checkExtendCoverageAnchor} because it can only run after
|
|
58
|
+
* `prepareBuildEnvironment` regenerates `engine/mozconfig` (the file this
|
|
59
|
+
* build will configure with), and must still run before mach, so a refusal
|
|
60
|
+
* costs no build time.
|
|
61
61
|
* @param engineDir - Path to the engine directory
|
|
62
62
|
* @param previousBaseline - Baseline recorded by the previous build
|
|
63
63
|
*/
|
|
64
64
|
export declare function checkExtendMozconfigAnchor(engineDir: string, previousBaseline: BuildBaseline | undefined): Promise<ExtendAnchorResult>;
|
|
65
65
|
/**
|
|
66
66
|
* Unions the newly built paths onto the recorded claim. A `'full'` claim, or
|
|
67
|
-
* an absent one (which means full), stays `'full'
|
|
67
|
+
* an absent one (which means full), stays `'full'`, since it already covers
|
|
68
68
|
* everything.
|
|
69
69
|
*
|
|
70
70
|
* @param previous - Coverage recorded by the previous build
|
|
@@ -84,7 +84,7 @@ export declare function formatExtendCoverageRefusal(result: {
|
|
|
84
84
|
/**
|
|
85
85
|
* Hex-encoded SHA-256 of an engine-relative file, matching the digest the
|
|
86
86
|
* baseline writer produces. `undefined` on any IO error, which every caller
|
|
87
|
-
* treats as "cannot prove unchanged"
|
|
87
|
+
* treats as "cannot prove unchanged", i.e. a refusal.
|
|
88
88
|
* @param engineDir - Path to the engine directory
|
|
89
89
|
* @param relPath - Engine-relative POSIX path
|
|
90
90
|
*/
|