@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,11 +4,11 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Partitions engine-tree dirtiness into `branding`, `patch-backed`,
|
|
6
6
|
* `furnace`, `conflict`, and `unmanaged` buckets, and only warns on the
|
|
7
|
-
* last two
|
|
7
|
+
* last two. Everything else is tool-managed state that the operator
|
|
8
8
|
* did not author directly.
|
|
9
9
|
*
|
|
10
10
|
* Split out of `doctor.ts` so that file stays under the per-file LOC
|
|
11
|
-
* budget
|
|
11
|
+
* budget. See the call site in `runEngineGitChecks`.
|
|
12
12
|
*/
|
|
13
13
|
import { collectFurnaceManagedPrefixes } from '../core/furnace-config.js';
|
|
14
14
|
import { expandUntrackedDirectoryEntries, getWorkingTreeStatus } from '../core/git-status.js';
|
|
@@ -30,7 +30,7 @@ function formatManagedDetail(counts) {
|
|
|
30
30
|
/**
|
|
31
31
|
* Inspects the engine working tree and returns a single `DoctorCheck`.
|
|
32
32
|
* Ownership-aware: patch-backed / branding / furnace rows are reported as OK
|
|
33
|
-
* with an ownership summary
|
|
33
|
+
* with an ownership summary. Unmanaged drift warns. Cross-patch conflicts
|
|
34
34
|
* warn loudly with a pointer at `fireforge status --ownership` +
|
|
35
35
|
* `fireforge verify`.
|
|
36
36
|
*
|
|
@@ -10,7 +10,7 @@ import type { DoctorCheckDefinition } from './doctor-check-core.js';
|
|
|
10
10
|
* context-population bug at runtime.
|
|
11
11
|
*
|
|
12
12
|
* Exported so tests can exercise the forward-only invariant against
|
|
13
|
-
* fixtures
|
|
13
|
+
* fixtures. The real DOCTOR_CHECKS list is also validated at import
|
|
14
14
|
* time, but a targeted unit test makes the contract explicit and
|
|
15
15
|
* prevents regressions if the validator is ever relaxed.
|
|
16
16
|
*/
|
|
@@ -22,7 +22,7 @@ export declare function validateCheckDependencies(checks: readonly DoctorCheckDe
|
|
|
22
22
|
* also update this list, which gives us a single place to notice and
|
|
23
23
|
* think through the consequences.
|
|
24
24
|
*
|
|
25
|
-
* @internal Exported only so tests can reach it
|
|
25
|
+
* @internal Exported only so tests can reach it. Not part of the public surface.
|
|
26
26
|
*/
|
|
27
27
|
export declare const DOCTOR_CHECK_ORDER: readonly string[];
|
|
28
28
|
/**
|
|
@@ -90,8 +90,8 @@ async function runEngineGitChecks(ctx) {
|
|
|
90
90
|
branch === undefined &&
|
|
91
91
|
currentHead === undefined &&
|
|
92
92
|
!state.baseCommit) {
|
|
93
|
-
// Unborn repository with no recorded baseline
|
|
94
|
-
// explains recovery
|
|
93
|
+
// Unborn repository with no recorded baseline. The earlier failure row
|
|
94
|
+
// explains recovery. Avoid adding a second near-identical row.
|
|
95
95
|
}
|
|
96
96
|
else if (!canValidateBranch) {
|
|
97
97
|
rows.push(warning('Engine branch', 'Skipped branch validation because the baseline commit is missing.', 'Finish recreating the engine baseline with "fireforge download --force".'));
|
|
@@ -114,7 +114,7 @@ async function runEngineGitChecks(ctx) {
|
|
|
114
114
|
* context-population bug at runtime.
|
|
115
115
|
*
|
|
116
116
|
* Exported so tests can exercise the forward-only invariant against
|
|
117
|
-
* fixtures
|
|
117
|
+
* fixtures. The real DOCTOR_CHECKS list is also validated at import
|
|
118
118
|
* time, but a targeted unit test makes the contract explicit and
|
|
119
119
|
* prevents regressions if the validator is ever relaxed.
|
|
120
120
|
*/
|
|
@@ -136,7 +136,7 @@ export function validateCheckDependencies(checks) {
|
|
|
136
136
|
/**
|
|
137
137
|
* The declarative doctor check registry. The order of entries here is the
|
|
138
138
|
* order checks appear in the report. Adding a new check is a one-entry
|
|
139
|
-
* edit
|
|
139
|
+
* edit. Each check only contains its own inspection logic.
|
|
140
140
|
*
|
|
141
141
|
* ## Ordering dependency chain
|
|
142
142
|
*
|
|
@@ -214,7 +214,7 @@ const DOCTOR_CHECKS = [
|
|
|
214
214
|
name: 'Engine is git repository',
|
|
215
215
|
skipIf: (ctx) => !ctx.engineExists,
|
|
216
216
|
// runEngineGitChecks consults ctx.config for ownership-aware
|
|
217
|
-
// working-tree classification
|
|
217
|
+
// working-tree classification. Declare the dependency so a future
|
|
218
218
|
// reorder doesn't silently regress the doctor back to the
|
|
219
219
|
// count-only fallback.
|
|
220
220
|
dependsOn: ['fireforge.json is valid'],
|
|
@@ -248,7 +248,7 @@ const DOCTOR_CHECKS = [
|
|
|
248
248
|
// Resolve the absolute path so the OK row names what doctor actually
|
|
249
249
|
// found. A PATH-export discrepancy between the operator's interactive
|
|
250
250
|
// shell and the spawned subprocess otherwise reads as doctor printing
|
|
251
|
-
// "OK" for a binary `which watchman` cannot find
|
|
251
|
+
// "OK" for a binary `which watchman` cannot find. Surfacing the
|
|
252
252
|
// resolved path makes the discrepancy visible without a verbose flag.
|
|
253
253
|
const path = await findExecutable('watchman');
|
|
254
254
|
if (path) {
|
|
@@ -295,7 +295,7 @@ const DOCTOR_CHECKS = [
|
|
|
295
295
|
POST_REBASE_AUDIT_CHECK,
|
|
296
296
|
// Furnace checks live in a sibling module so this file stays under the
|
|
297
297
|
// max-lines threshold. Splicing them in as an array preserves the
|
|
298
|
-
// declarative registry contract
|
|
298
|
+
// declarative registry contract: each entry remains a single
|
|
299
299
|
// `DoctorCheckDefinition` with its own skipIf/run/fix, and the order
|
|
300
300
|
// here is the order they appear in the report.
|
|
301
301
|
...FURNACE_DOCTOR_CHECKS,
|
|
@@ -320,7 +320,7 @@ validateCheckDependencies(DOCTOR_CHECKS);
|
|
|
320
320
|
* also update this list, which gives us a single place to notice and
|
|
321
321
|
* think through the consequences.
|
|
322
322
|
*
|
|
323
|
-
* @internal Exported only so tests can reach it
|
|
323
|
+
* @internal Exported only so tests can reach it. Not part of the public surface.
|
|
324
324
|
*/
|
|
325
325
|
export const DOCTOR_CHECK_ORDER = DOCTOR_CHECKS.map((check) => check.name);
|
|
326
326
|
/**
|
|
@@ -382,7 +382,7 @@ export function reportDoctorResults(checks, mutations = []) {
|
|
|
382
382
|
* Rejects repair-flag combinations that cannot mean what they say.
|
|
383
383
|
*
|
|
384
384
|
* The two manifest repairs are different operations on the same file, and
|
|
385
|
-
* `--dry-run` with nothing to project is a flag that silently does nothing
|
|
385
|
+
* `--dry-run` with nothing to project is a flag that silently does nothing,
|
|
386
386
|
* the shape most likely to be mistaken for a preview that reported "no
|
|
387
387
|
* changes".
|
|
388
388
|
*/
|
|
@@ -78,7 +78,7 @@ async function cleanPatchTouchedFiles(engineDir, patchesDir, preExistingDirty) {
|
|
|
78
78
|
* Prints a one-line nudge pointing at `fireforge import` when the project
|
|
79
79
|
* carries a non-empty patch queue but the just-downloaded engine has not yet
|
|
80
80
|
* had any patches applied. The post-download spinner closes with
|
|
81
|
-
* "Patch-touched files already match baseline" because a fresh tree
|
|
81
|
+
* "Patch-touched files already match baseline" because a fresh tree is at
|
|
82
82
|
* baseline, which reads as "patches are restored" and invites skipping the
|
|
83
83
|
* import step. Suppressed when patches/ is missing or the manifest is empty
|
|
84
84
|
* so unconfigured projects stay quiet.
|
|
@@ -94,10 +94,11 @@ async function noteUnappliedPatches(patchesDir) {
|
|
|
94
94
|
}
|
|
95
95
|
/**
|
|
96
96
|
* Stops `restoreSpinner` with a message that reflects what actually
|
|
97
|
-
* happened. Three branches
|
|
98
|
-
* nothing dirty
|
|
99
|
-
* "Patch-touched files restored" success line.
|
|
100
|
-
* claims restore work that did not happen on a
|
|
97
|
+
* happened. Three branches. An empty queue gives an explicit no-op. A queue
|
|
98
|
+
* that is present but has nothing dirty gives "already clean". A queue with
|
|
99
|
+
* dirty files gives the usual "Patch-touched files restored" success line.
|
|
100
|
+
* Always closing with the third claims restore work that did not happen on a
|
|
101
|
+
* project with zero patches.
|
|
101
102
|
*/
|
|
102
103
|
function closeRestoreSpinner(restoreSpinner, result) {
|
|
103
104
|
if (!result.hadQueue) {
|
|
@@ -194,7 +195,7 @@ async function downloadAndExtractFirefox(args) {
|
|
|
194
195
|
}
|
|
195
196
|
/**
|
|
196
197
|
* Prints the major-version-hop toolchain nudge when this download moved the
|
|
197
|
-
* engine across a Firefox
|
|
198
|
+
* engine across a Firefox major version. The first post-hop build otherwise
|
|
198
199
|
* dies in `mach configure` on a moved cbindgen minimum with nothing in the
|
|
199
200
|
* download output suggesting `fireforge bootstrap`. Quiet on first downloads
|
|
200
201
|
* and same-major re-downloads.
|
|
@@ -276,7 +277,7 @@ export async function downloadCommand(projectRoot, options) {
|
|
|
276
277
|
intro('FireForge Download');
|
|
277
278
|
const config = await loadConfig(projectRoot), version = config.firefox.version;
|
|
278
279
|
const paths = getProjectPaths(projectRoot);
|
|
279
|
-
// Captured
|
|
280
|
+
// Captured before any state update so the post-download major-hop
|
|
280
281
|
// notice compares against what was actually on disk until now.
|
|
281
282
|
const previousVersion = (await loadState(projectRoot)).downloadedVersion;
|
|
282
283
|
info(`Firefox version: ${version}`);
|
|
@@ -284,7 +285,7 @@ export async function downloadCommand(projectRoot, options) {
|
|
|
284
285
|
// A legitimate holder of this lock runs for 10+ minutes (download +
|
|
285
286
|
// extract + git indexing). A 30 s timeout fails the second invocation with
|
|
286
287
|
// "remove the lock directory if it is stale" advice while the lock is
|
|
287
|
-
// actively held
|
|
288
|
+
// actively held, which is dangerous guidance mid-extraction. Wait generously
|
|
288
289
|
// instead: a dead holder is reaped within seconds by the PID-based stale
|
|
289
290
|
// probe, so a long timeout only ever waits on real work.
|
|
290
291
|
const downloadLockOptions = {
|
|
@@ -297,7 +298,7 @@ export async function downloadCommand(projectRoot, options) {
|
|
|
297
298
|
// Reclaim multi-GB partial trees left behind by interrupted runs.
|
|
298
299
|
// Safe under the download lock: any `.tmp-*`/`.replacement-*` dir
|
|
299
300
|
// present now is orphaned, since live ones only exist while a
|
|
300
|
-
// download holds this lock. `.backup-*` dirs are
|
|
301
|
+
// download holds this lock. `.backup-*` dirs are not swept: a
|
|
301
302
|
// backup can hold the previous engine after a failed forced
|
|
302
303
|
// replacement and is the operator's recovery copy.
|
|
303
304
|
const sweptDirs = await sweepOrphanedEngineWorkDirs(paths.engine);
|
|
@@ -317,7 +318,8 @@ export async function downloadCommand(projectRoot, options) {
|
|
|
317
318
|
}
|
|
318
319
|
catch (error) {
|
|
319
320
|
if (isMissingHeadError(error)) {
|
|
320
|
-
// Partial init detected
|
|
321
|
+
// Partial init detected. Attempt to resume instead of
|
|
322
|
+
// requiring --force.
|
|
321
323
|
info('Detected partially initialized engine. Attempting to resume...');
|
|
322
324
|
// Snapshot patch-touched files that are already dirty so we
|
|
323
325
|
// can preserve them after the resume commit.
|
|
@@ -340,7 +342,7 @@ export async function downloadCommand(projectRoot, options) {
|
|
|
340
342
|
});
|
|
341
343
|
const baseCommit = await getHead(paths.engine);
|
|
342
344
|
resumeSpinner.stop('Git repository resumed successfully');
|
|
343
|
-
// Restore patch-touched files
|
|
345
|
+
// Restore patch-touched files before stamping state. If this
|
|
344
346
|
// step fails (disk full, permission denied, git object issue),
|
|
345
347
|
// state.json keeps the previous downloadedVersion so the
|
|
346
348
|
// invariant "state.downloadedVersion matches a clean engine"
|
|
@@ -359,7 +361,7 @@ export async function downloadCommand(projectRoot, options) {
|
|
|
359
361
|
}
|
|
360
362
|
catch (error) {
|
|
361
363
|
resumeSpinner.error('Resume failed');
|
|
362
|
-
// Preserve the underlying cause so the operator sees
|
|
364
|
+
// Preserve the underlying cause so the operator sees why
|
|
363
365
|
// the resume failed (timeout, permission denied, corrupted
|
|
364
366
|
// object, disk full) instead of only the generic "partial
|
|
365
367
|
// engine exists" story. The cause reaches them through the
|
|
@@ -372,7 +374,7 @@ export async function downloadCommand(projectRoot, options) {
|
|
|
372
374
|
// Re-throw unexpected git errors (corrupted objects, permission
|
|
373
375
|
// denied, …) wrapped in PartialEngineExistsError so the user sees
|
|
374
376
|
// both narratives: "we detected a partial engine and attempted
|
|
375
|
-
// resume"
|
|
377
|
+
// resume" and the underlying git failure. Without the wrap the
|
|
376
378
|
// raw git error loses the context that resume was in flight.
|
|
377
379
|
throw new PartialEngineExistsError(paths.engine, toError(error));
|
|
378
380
|
}
|
|
@@ -56,7 +56,7 @@ async function resolveFurnaceExclusionPolicy(paths, projectRoot, excludeFurnace)
|
|
|
56
56
|
if (prefixes.size === 0)
|
|
57
57
|
return new Set();
|
|
58
58
|
// Expand collapsed `?? dir/` entries before matching against Furnace
|
|
59
|
-
// prefixes
|
|
59
|
+
// prefixes, otherwise a Furnace-introduced directory slips past the
|
|
60
60
|
// filter and later lands in the non-Furnace path list that feeds the
|
|
61
61
|
// aggregate diff, where `getDiffForFilesAgainstHead` crashes with EISDIR.
|
|
62
62
|
const rawStatus = await getWorkingTreeStatus(paths.engine);
|
|
@@ -81,7 +81,7 @@ async function resolveFurnaceExclusionPolicy(paths, projectRoot, excludeFurnace)
|
|
|
81
81
|
* `export-all --exclude-furnace` after `furnace create --localized
|
|
82
82
|
* --with-tests` otherwise produces a patch that adds
|
|
83
83
|
* `toolkit/content/widgets/<tag>/*` via jar.mn / customElements.js / locale
|
|
84
|
-
* jar.mn while excluding the component source files themselves
|
|
84
|
+
* jar.mn while excluding the component source files themselves, a
|
|
85
85
|
* structurally broken queue that `fireforge verify` stays silent about. The
|
|
86
86
|
* operator is asked to either include the component sources (skip
|
|
87
87
|
* `--exclude-furnace`) or revert the furnace changes before exporting.
|
|
@@ -134,7 +134,7 @@ async function checkDanglingFurnaceRegistrations(projectRoot, diff, furnaceExclu
|
|
|
134
134
|
* path that some existing patch in the queue already creates. `verify`
|
|
135
135
|
* detects this post-hoc via `collectNewFileCreatorsByPath`, but by the time
|
|
136
136
|
* `verify` runs the operator has already landed a patch that irreversibly
|
|
137
|
-
* sits atop the queue
|
|
137
|
+
* sits atop the queue, and resolving the conflict from there requires a
|
|
138
138
|
* `patch delete` or hand-surgery on `re-export --files`. Catching it here,
|
|
139
139
|
* pre-write, keeps the queue clean and gives the operator a specific path
|
|
140
140
|
* to narrow with `export` + explicit file scoping (which lets them drop
|
|
@@ -232,12 +232,12 @@ export async function exportAllCommand(projectRoot, options = {}) {
|
|
|
232
232
|
await checkDuplicateNewFileCreations(paths, diff);
|
|
233
233
|
// Dangling-furnace-registration preflight. Runs after the diff is
|
|
234
234
|
// assembled so it can inspect the exact hunks the operator is about to
|
|
235
|
-
// land, and
|
|
235
|
+
// land, and before any write so a refusal leaves the patches directory
|
|
236
236
|
// untouched.
|
|
237
237
|
await checkDanglingFurnaceRegistrations(projectRoot, diff, furnaceExcluded);
|
|
238
238
|
// Check for non-interactive mode
|
|
239
239
|
const isInteractive = stdioIsInteractive();
|
|
240
|
-
// Auto-fix missing license headers on new files (interactive only
|
|
240
|
+
// Auto-fix missing license headers on new files (interactive only, and
|
|
241
241
|
// report-only under --dry-run so the preview never mutates engine/)
|
|
242
242
|
const headersAdded = await autoFixLicenseHeaders(paths.engine, diff, config, isInteractive, isDryRun);
|
|
243
243
|
if (headersAdded) {
|
|
@@ -251,7 +251,7 @@ export async function exportAllCommand(projectRoot, options = {}) {
|
|
|
251
251
|
return;
|
|
252
252
|
const { patchName, selectedCategory, description } = metadata;
|
|
253
253
|
// Ensure patches directory exists. Skip during a dry-run so the command
|
|
254
|
-
// is purely read-only
|
|
254
|
+
// is purely read-only. `--dry-run` callers should be safe to invoke
|
|
255
255
|
// against a project that has never exported a patch without leaving the
|
|
256
256
|
// empty `patches/` directory behind.
|
|
257
257
|
if (!isDryRun) {
|
|
@@ -275,8 +275,8 @@ export async function exportAllCommand(projectRoot, options = {}) {
|
|
|
275
275
|
// Dry-run: enumerate filename, metadata, and supersede coverage without
|
|
276
276
|
// writing. Mirrors `fireforge export --dry-run` so the same preview
|
|
277
277
|
// surface is available for both targeted and aggregate exports. Runs
|
|
278
|
-
//
|
|
279
|
-
// a real run
|
|
278
|
+
// after lint so the operator sees the same lint output they would on
|
|
279
|
+
// a real run. It runs before the supersede confirmation prompt because
|
|
280
280
|
// confirming a dry-run is meaningless.
|
|
281
281
|
if (isDryRun) {
|
|
282
282
|
s.stop('Plan ready');
|
|
@@ -20,7 +20,7 @@ export interface PlacementPlan {
|
|
|
20
20
|
renameMap: Map<string, PatchRenameEntry>;
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
23
|
-
* Structural equality for placement plans
|
|
23
|
+
* Structural equality for placement plans. Used by placement-mode export
|
|
24
24
|
* and `patch split` to verify the queue did not change between the
|
|
25
25
|
* confirmed preview and the under-lock commit.
|
|
26
26
|
*/
|
|
@@ -40,14 +40,14 @@ export declare function computeExactPlacementPlan(manifestPatches: PatchMetadata
|
|
|
40
40
|
/**
|
|
41
41
|
* Resolves a placement plan from CLI flags against the current manifest.
|
|
42
42
|
* When `config` is provided, positional plans (`--before`/`--after`) are
|
|
43
|
-
* refused up front if their renumber would touch a reserved range
|
|
44
|
-
* error for the whole shift instead of per-patch policy findings. The
|
|
43
|
+
* refused up front if their renumber would touch a reserved range, giving
|
|
44
|
+
* one error for the whole shift instead of per-patch policy findings. The
|
|
45
45
|
* exact `--order` branch never renames, so it bypasses that gate.
|
|
46
46
|
*/
|
|
47
47
|
export declare function resolvePlacementPlan(patchesDir: string, options: ExportOptions, category: PatchCategory, name: string, config?: FireForgeConfig): Promise<PlacementPlan>;
|
|
48
48
|
/**
|
|
49
49
|
* Projects the placement through cross-patch lint to detect forward-imports
|
|
50
|
-
* the renumber would introduce
|
|
50
|
+
* the renumber would introduce, or that the new patch itself would
|
|
51
51
|
* introduce by landing earlier than one of its dependencies. Returns null
|
|
52
52
|
* when the projection is clean.
|
|
53
53
|
*/
|
|
@@ -79,7 +79,7 @@ export interface CommitPlacementExportInput {
|
|
|
79
79
|
* Optional post-commit hook that runs inside the patch directory lock,
|
|
80
80
|
* after the mutation has succeeded but before the lock is released.
|
|
81
81
|
* Intended for the caller's history-log append so the audit record
|
|
82
|
-
* lands atomically with the mutation
|
|
82
|
+
* lands atomically with the mutation. A crash between mutation and
|
|
83
83
|
* hook leaves no room for another process's history record to sneak
|
|
84
84
|
* in first.
|
|
85
85
|
*
|
|
@@ -36,7 +36,7 @@ function prefixWidthForPatches(manifestPatches, requestedOrder) {
|
|
|
36
36
|
}, 3);
|
|
37
37
|
}
|
|
38
38
|
/**
|
|
39
|
-
* Structural equality for placement plans
|
|
39
|
+
* Structural equality for placement plans. Used by placement-mode export
|
|
40
40
|
* and `patch split` to verify the queue did not change between the
|
|
41
41
|
* confirmed preview and the under-lock commit.
|
|
42
42
|
*/
|
|
@@ -62,7 +62,7 @@ export function computePlacementPlan(manifestPatches, newPatchCategory, newPatch
|
|
|
62
62
|
const renameMap = new Map();
|
|
63
63
|
const prefixWidth = prefixWidthForPatches(sorted, requestedOrder);
|
|
64
64
|
// Patches at requestedOrder or later shift up by one, but only until the
|
|
65
|
-
// cascade reaches a free ordinal
|
|
65
|
+
// cascade reaches a free ordinal. A gap absorbs the insert, so the tail
|
|
66
66
|
// beyond it (including any reserved block) keeps its numbering.
|
|
67
67
|
let cursor = requestedOrder;
|
|
68
68
|
for (const patch of sorted) {
|
|
@@ -109,18 +109,18 @@ export function computeExactPlacementPlan(manifestPatches, newPatchCategory, new
|
|
|
109
109
|
/**
|
|
110
110
|
* Resolves a placement plan from CLI flags against the current manifest.
|
|
111
111
|
* When `config` is provided, positional plans (`--before`/`--after`) are
|
|
112
|
-
* refused up front if their renumber would touch a reserved range
|
|
113
|
-
* error for the whole shift instead of per-patch policy findings. The
|
|
112
|
+
* refused up front if their renumber would touch a reserved range, giving
|
|
113
|
+
* one error for the whole shift instead of per-patch policy findings. The
|
|
114
114
|
* exact `--order` branch never renames, so it bypasses that gate.
|
|
115
115
|
*/
|
|
116
116
|
export async function resolvePlacementPlan(patchesDir, options, category, name, config) {
|
|
117
|
-
// ForWrite: placement planning feeds a manifest rewrite
|
|
117
|
+
// ForWrite: placement planning feeds a manifest rewrite. A corrupt
|
|
118
118
|
// manifest read as empty would allocate colliding orders.
|
|
119
119
|
const manifest = await loadPatchesManifestForWrite(patchesDir);
|
|
120
120
|
const existingPatches = manifest?.patches ?? [];
|
|
121
121
|
let targetOrder;
|
|
122
122
|
if (options.order !== undefined) {
|
|
123
|
-
// Defense-in-depth
|
|
123
|
+
// Defense-in-depth: argParser covers the CLI path, but this
|
|
124
124
|
// function is called directly from the command body which could
|
|
125
125
|
// reach here with a NaN/0/negative value passed in via test harness.
|
|
126
126
|
if (!Number.isInteger(options.order) || options.order <= 0) {
|
|
@@ -152,7 +152,7 @@ export async function resolvePlacementPlan(patchesDir, options, category, name,
|
|
|
152
152
|
}
|
|
153
153
|
/**
|
|
154
154
|
* Projects the placement through cross-patch lint to detect forward-imports
|
|
155
|
-
* the renumber would introduce
|
|
155
|
+
* the renumber would introduce, or that the new patch itself would
|
|
156
156
|
* introduce by landing earlier than one of its dependencies. Returns null
|
|
157
157
|
* when the projection is clean.
|
|
158
158
|
*/
|
|
@@ -165,8 +165,8 @@ export async function projectPlacementForLint(patchesDir, plan, diff, config) {
|
|
|
165
165
|
return { ...entry, filename: rename.newFilename, order: rename.newOrder };
|
|
166
166
|
});
|
|
167
167
|
// Synthetic entry for the pending patch, populated with both its new-file
|
|
168
|
-
// content
|
|
169
|
-
// forward-import rule can inspect imports the patch
|
|
168
|
+
// content and its added-line content for files it modifies, so the
|
|
169
|
+
// forward-import rule can inspect imports the patch itself authors,
|
|
170
170
|
// whether they live in a brand-new file or are added to an existing one.
|
|
171
171
|
// Leaving either map empty lets a patch land before one of its own
|
|
172
172
|
// dependencies and still pass the gate.
|
|
@@ -184,9 +184,9 @@ export async function projectPlacementForLint(patchesDir, plan, diff, config) {
|
|
|
184
184
|
}).filter((i) => i.severity === 'error');
|
|
185
185
|
if (projectedIssues.length === 0)
|
|
186
186
|
return null;
|
|
187
|
-
// Baseline lint over the
|
|
188
|
-
// pre-existing breakage
|
|
189
|
-
// it one would misattribute. Entries are already in memory,
|
|
187
|
+
// Baseline lint over the un-renumbered queue: an error present here is
|
|
188
|
+
// pre-existing breakage rather than a consequence of this placement, and
|
|
189
|
+
// calling it one would misattribute. Entries are already in memory,
|
|
190
190
|
// so this second pass costs no additional IO.
|
|
191
191
|
const baselineIssues = lintPatchQueue({
|
|
192
192
|
entries: baseCtx.entries,
|
|
@@ -274,7 +274,7 @@ export async function commitPlacementExport(input) {
|
|
|
274
274
|
await renumberPatchesInManifest(input.patchesDir, currentPlan.renameMap);
|
|
275
275
|
renumberApplied = true;
|
|
276
276
|
}
|
|
277
|
-
// Normalize identically to commitExportedPatch
|
|
277
|
+
// Normalize identically to commitExportedPatch: the two export
|
|
278
278
|
// paths must produce one artifact contract for the same diff.
|
|
279
279
|
await writeText(patchPath, input.diff);
|
|
280
280
|
await addPatchToManifest(input.patchesDir, {
|
|
@@ -289,7 +289,7 @@ export async function commitPlacementExport(input) {
|
|
|
289
289
|
catch (hookError) {
|
|
290
290
|
// Mutation has already committed and is not reversible. Warn
|
|
291
291
|
// so operators know the audit trail has a gap, but do not
|
|
292
|
-
// re-throw
|
|
292
|
+
// re-throw, which would look like the export itself failed.
|
|
293
293
|
warn(`History log append failed after export committed (export-order, ${currentPlan.newFilename}): ` +
|
|
294
294
|
toError(hookError).message);
|
|
295
295
|
}
|
|
@@ -7,9 +7,9 @@ export interface PlacementAttributionPlan {
|
|
|
7
7
|
renameMap: Map<string, PatchRenameEntry>;
|
|
8
8
|
}
|
|
9
9
|
/**
|
|
10
|
-
* Partitions the projected placement errors into three labeled groups
|
|
11
|
-
* defects in the exported content, consequences of the renumbering, and
|
|
12
|
-
* errors the queue already had
|
|
10
|
+
* Partitions the projected placement errors into three labeled groups
|
|
11
|
+
* (defects in the exported content, consequences of the renumbering, and
|
|
12
|
+
* errors the queue already had), rendered as indented detail lines for
|
|
13
13
|
* {@link ConflictReport.details}. Grouping travels through the plain
|
|
14
14
|
* `details: string[]`, so both refusal sites and confirmDestructive's
|
|
15
15
|
* conflict printer show it without changes.
|
|
@@ -3,31 +3,31 @@
|
|
|
3
3
|
* Attribution of projected placement lint errors, split out of
|
|
4
4
|
* export-flow.ts for the line budget.
|
|
5
5
|
*
|
|
6
|
-
* A placement projection lints one merged queue
|
|
7
|
-
* patches plus a synthetic entry for the pending patch
|
|
8
|
-
* list reads as though the
|
|
6
|
+
* A placement projection lints one merged queue (the renumbered existing
|
|
7
|
+
* patches plus a synthetic entry for the pending patch), so a flat error
|
|
8
|
+
* list reads as though the new patch caused every one of them. A renumbering
|
|
9
9
|
* that re-evaluates pre-existing staged relationships (patch 455 importing a
|
|
10
10
|
* module created by 456, legal only at their current ordinals) then sends
|
|
11
11
|
* the operator auditing a perfectly fine export.
|
|
12
12
|
*
|
|
13
|
-
* Consumed by export-flow.ts
|
|
13
|
+
* Consumed by export-flow.ts. No top-level registrar is exported and none is
|
|
14
14
|
* wanted.
|
|
15
15
|
*/
|
|
16
16
|
import { formatPatchLintIssue } from '../core/patch-lint.js';
|
|
17
17
|
/**
|
|
18
18
|
* Identity for baseline comparison: check + site file + implicated
|
|
19
|
-
* patches, with projected filenames mapped
|
|
19
|
+
* patches, with projected filenames mapped back through the rename map so
|
|
20
20
|
* a pre-existing error keeps its identity across the renumber. Never
|
|
21
|
-
* parses the fingerprint
|
|
21
|
+
* parses the fingerprint. It is documented rename-sensitive.
|
|
22
22
|
*/
|
|
23
23
|
function issueKey(issue, mapBackToOldName) {
|
|
24
24
|
const patches = (issue.patches ?? []).map(mapBackToOldName).sort((a, b) => a.localeCompare(b));
|
|
25
25
|
return `${issue.check}|${issue.file}|${patches.join(',')}`;
|
|
26
26
|
}
|
|
27
27
|
/**
|
|
28
|
-
* Partitions the projected placement errors into three labeled groups
|
|
29
|
-
* defects in the exported content, consequences of the renumbering, and
|
|
30
|
-
* errors the queue already had
|
|
28
|
+
* Partitions the projected placement errors into three labeled groups
|
|
29
|
+
* (defects in the exported content, consequences of the renumbering, and
|
|
30
|
+
* errors the queue already had), rendered as indented detail lines for
|
|
31
31
|
* {@link ConflictReport.details}. Grouping travels through the plain
|
|
32
32
|
* `details: string[]`, so both refusal sites and confirmDestructive's
|
|
33
33
|
* conflict printer show it without changes.
|
|
@@ -11,7 +11,7 @@ import { type PlacementPlan } from './export-flow.js';
|
|
|
11
11
|
/**
|
|
12
12
|
* Spreadable optional metadata (`tier`, `lintIgnore`) derived from the
|
|
13
13
|
* export flags. Every manifest-row construction site in this command
|
|
14
|
-
* shares this shape
|
|
14
|
+
* shares this shape. With exactOptionalPropertyTypes the keys must be
|
|
15
15
|
* omitted entirely (not set to undefined) when the flags are absent.
|
|
16
16
|
*/
|
|
17
17
|
export declare function patchMetadataExtras(options: ExportOptions): Partial<Pick<PatchMetadata, 'tier' | 'lintIgnore'>>;
|
|
@@ -22,7 +22,7 @@ export declare function patchMetadataExtras(options: ExportOptions): Partial<Pic
|
|
|
22
22
|
* projected manifest, and routes destructive renumbers (or dry-runs)
|
|
23
23
|
* through `confirmDestructive`. Returns the plan to commit, or `'stop'`
|
|
24
24
|
* when the command should end here (dry-run rendered or operator
|
|
25
|
-
* cancelled
|
|
25
|
+
* cancelled, and the corresponding outro has already been printed).
|
|
26
26
|
*/
|
|
27
27
|
export declare function gatePlacementPlan(args: {
|
|
28
28
|
patchesDir: string;
|
|
@@ -15,7 +15,7 @@ import { placementSummary, projectPlacementForLint, resolvePlacementPlan, } from
|
|
|
15
15
|
/**
|
|
16
16
|
* Spreadable optional metadata (`tier`, `lintIgnore`) derived from the
|
|
17
17
|
* export flags. Every manifest-row construction site in this command
|
|
18
|
-
* shares this shape
|
|
18
|
+
* shares this shape. With exactOptionalPropertyTypes the keys must be
|
|
19
19
|
* omitted entirely (not set to undefined) when the flags are absent.
|
|
20
20
|
*/
|
|
21
21
|
export function patchMetadataExtras(options) {
|
|
@@ -33,7 +33,7 @@ export function patchMetadataExtras(options) {
|
|
|
33
33
|
* projected manifest, and routes destructive renumbers (or dry-runs)
|
|
34
34
|
* through `confirmDestructive`. Returns the plan to commit, or `'stop'`
|
|
35
35
|
* when the command should end here (dry-run rendered or operator
|
|
36
|
-
* cancelled
|
|
36
|
+
* cancelled, and the corresponding outro has already been printed).
|
|
37
37
|
*/
|
|
38
38
|
export async function gatePlacementPlan(args) {
|
|
39
39
|
const { patchesDir, options, selectedCategory, patchName, description, filesAffected, diff, config, isDryRun, s, } = args;
|
|
@@ -41,7 +41,7 @@ export async function gatePlacementPlan(args) {
|
|
|
41
41
|
throw new InvalidArgumentError('Placement flags (--order/--before/--after) cannot be combined with --supersede.', 'export placement');
|
|
42
42
|
}
|
|
43
43
|
// resolvePlacementPlan runs the reserved-range gate itself when config
|
|
44
|
-
// is passed
|
|
44
|
+
// is passed: one up-front error per run instead of per-patch findings.
|
|
45
45
|
const placementPlan = await resolvePlacementPlan(patchesDir, options, selectedCategory, patchName, config);
|
|
46
46
|
const currentManifest = await loadPatchesManifest(patchesDir);
|
|
47
47
|
const conflicts = await projectPlacementForLint(patchesDir, placementPlan, diff, config);
|
|
@@ -70,9 +70,9 @@ export async function gatePlacementPlan(args) {
|
|
|
70
70
|
const summary = placementSummary(placementPlan);
|
|
71
71
|
const renameCount = placementPlan.renameMap.size;
|
|
72
72
|
// Route through confirmDestructive when the operation is destructive
|
|
73
|
-
// enough to warrant a prompt (more than one rename)
|
|
73
|
+
// enough to warrant a prompt (more than one rename) or when the user asked
|
|
74
74
|
// for a dry-run. The dry-run branch must always print the placement
|
|
75
|
-
// summary
|
|
75
|
+
// summary. Otherwise single-rename and no-rename dry-runs exit silently
|
|
76
76
|
// with no filename or projected layout.
|
|
77
77
|
if (renameCount > 1 || isDryRun) {
|
|
78
78
|
s.stop();
|
|
@@ -12,7 +12,7 @@ export interface PlacementPolicyPlan {
|
|
|
12
12
|
}
|
|
13
13
|
/**
|
|
14
14
|
* Refuses positional placement plans whose renumber would touch a
|
|
15
|
-
* `patchPolicy.reservedRanges` block
|
|
15
|
+
* `patchPolicy.reservedRanges` block, either by moving a patch into a
|
|
16
16
|
* reserved range or by moving a patch that currently sits inside one.
|
|
17
17
|
* Throws a single up-front error for the first reserved range hit (the
|
|
18
18
|
* per-patch alternative surfaced one confusing finding per shifted
|
|
@@ -23,7 +23,7 @@ function firstFreeOrderBelowReservedRange(patches, range) {
|
|
|
23
23
|
}
|
|
24
24
|
/**
|
|
25
25
|
* Refuses positional placement plans whose renumber would touch a
|
|
26
|
-
* `patchPolicy.reservedRanges` block
|
|
26
|
+
* `patchPolicy.reservedRanges` block, either by moving a patch into a
|
|
27
27
|
* reserved range or by moving a patch that currently sits inside one.
|
|
28
28
|
* Throws a single up-front error for the first reserved range hit (the
|
|
29
29
|
* per-patch alternative surfaced one confusing finding per shifted
|
|
@@ -18,7 +18,7 @@ export interface RunPatchLintOptions {
|
|
|
18
18
|
/**
|
|
19
19
|
* Optional per-patch set of `check` IDs to suppress (threaded from
|
|
20
20
|
* `PatchMetadata.lintIgnore`). Surgical alternative to `--skip-lint` when
|
|
21
|
-
* exactly one advisory rule does not apply to a specific patch
|
|
21
|
+
* exactly one advisory rule does not apply to a specific patch, e.g.
|
|
22
22
|
* `large-patch-lines` on a cohesive branding bundle that genuinely cannot
|
|
23
23
|
* be split.
|
|
24
24
|
*/
|
|
@@ -75,14 +75,14 @@ export declare function confirmSupersedePatches(patchesDir: string, filesAffecte
|
|
|
75
75
|
* Detects new files missing license headers and offers to add them.
|
|
76
76
|
*
|
|
77
77
|
* In interactive mode the user is prompted before any files are modified. In
|
|
78
|
-
* non-interactive mode the function is a no-op
|
|
78
|
+
* non-interactive mode the function is a no-op. The existing lint error
|
|
79
79
|
* blocks the export instead.
|
|
80
80
|
*
|
|
81
81
|
* @param engineDir - Absolute path to engine directory
|
|
82
82
|
* @param diffContent - Current unified diff
|
|
83
83
|
* @param config - Project configuration
|
|
84
84
|
* @param isInteractive - Whether interactive prompts are available
|
|
85
|
-
* @param dryRun - When true, only
|
|
85
|
+
* @param dryRun - When true, only report missing headers, never prompt or
|
|
86
86
|
* write. Dry-run must stay read-only: without this flag an interactive
|
|
87
87
|
* `export --dry-run` prompts (default Yes), writes license headers into
|
|
88
88
|
* engine/ files, and then closes with "no changes made".
|
|
@@ -96,23 +96,23 @@ export declare function autoFixLicenseHeaders(engineDir: string, diffContent: st
|
|
|
96
96
|
*
|
|
97
97
|
* Returns an empty map when no overlap exists. Used by the overlap gate in
|
|
98
98
|
* `export` and `export-all` to refuse a default-mode export that would
|
|
99
|
-
* silently create cross-patch ownership conflicts
|
|
99
|
+
* silently create cross-patch ownership conflicts, the same class of
|
|
100
100
|
* conflict `verify` immediately fails with.
|
|
101
101
|
*/
|
|
102
102
|
export declare function findPartialOwnershipOverlap(manifest: PatchesManifest, filesAffected: string[], excludeFilenames: ReadonlySet<string>): Map<string, string[]>;
|
|
103
103
|
/**
|
|
104
104
|
* Gate that refuses the default export path when the new patch would
|
|
105
105
|
* silently claim files already tracked by other non-superseded patches.
|
|
106
|
-
* `findAllPatchesForFiles` catches the full-coverage supersede case
|
|
107
|
-
* fills the gap for
|
|
106
|
+
* `findAllPatchesForFiles` catches the full-coverage supersede case. This
|
|
107
|
+
* fills the gap for partial overlap: two patches both claiming e.g.
|
|
108
108
|
* `browser/themes/shared/jar.inc.mn` after a second export with `--before`.
|
|
109
109
|
*
|
|
110
110
|
* Proceeds silently when there is no overlap, or when the caller passed
|
|
111
111
|
* `--allow-overlap`. In interactive mode the caller is prompted to
|
|
112
112
|
* acknowledge the overlap (the proper fix path is `re-export --files` to
|
|
113
113
|
* repartition ownership, so the prompt surfaces that pointer). In
|
|
114
|
-
* non-interactive mode it throws
|
|
115
|
-
* fall out of sync with verify.
|
|
114
|
+
* non-interactive mode it throws, since failing fast beats letting the
|
|
115
|
+
* queue fall out of sync with verify.
|
|
116
116
|
*/
|
|
117
117
|
export declare function guardOwnershipOverlap(args: {
|
|
118
118
|
patchesDir: string;
|
|
@@ -127,7 +127,7 @@ export declare function guardOwnershipOverlap(args: {
|
|
|
127
127
|
* order: the supersede confirmation, then the cross-patch ownership overlap
|
|
128
128
|
* guard. The overlap guard receives the filenames of the patches the export
|
|
129
129
|
* would fully supersede so it does not flag a file claimed by a patch that
|
|
130
|
-
* is about to be removed. Catching only
|
|
130
|
+
* is about to be removed. Catching only full-coverage supersedes leaves a
|
|
131
131
|
* second export targeting a shared file creating a queue where two patches
|
|
132
132
|
* both claim it and `verify` fails immediately.
|
|
133
133
|
*
|
|
@@ -138,7 +138,7 @@ export declare function guardOwnershipOverlap(args: {
|
|
|
138
138
|
* @param args.allowOverlap - The command's `--allow-overlap` flag
|
|
139
139
|
* @param args.isInteractive - Whether prompting the operator is possible
|
|
140
140
|
* @param args.s - Active spinner, stopped before any prompt
|
|
141
|
-
* @returns `true` when both gates passed
|
|
141
|
+
* @returns `true` when both gates passed, `false` when the operator declined
|
|
142
142
|
* (the caller returns without committing)
|
|
143
143
|
*/
|
|
144
144
|
export declare function runSupersedeAndOverlapGates(args: {
|