@hominis/fireforge 0.45.0 → 0.46.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +409 -446
- package/dist/bin/fireforge.d.ts +1 -1
- package/dist/bin/fireforge.js +21 -15
- package/dist/build-info.json +4 -4
- package/dist/src/cli-usage-error.d.ts +46 -0
- package/dist/src/cli-usage-error.js +81 -0
- package/dist/src/cli.d.ts +7 -2
- package/dist/src/cli.js +47 -47
- package/dist/src/commands/bootstrap-checks.js +2 -1
- package/dist/src/commands/bootstrap.js +3 -4
- package/dist/src/commands/build.js +27 -17
- package/dist/src/commands/config.js +9 -9
- package/dist/src/commands/destructive-decision.d.ts +19 -0
- package/dist/src/commands/destructive-decision.js +31 -0
- package/dist/src/commands/discard.js +5 -5
- package/dist/src/commands/doctor-check-core.d.ts +4 -10
- package/dist/src/commands/doctor-check-core.js +0 -8
- package/dist/src/commands/doctor-external-toolchains.js +2 -2
- package/dist/src/commands/doctor-furnace-config-sync.d.ts +2 -2
- package/dist/src/commands/doctor-furnace-config-sync.js +20 -20
- package/dist/src/commands/doctor-furnace-jar.d.ts +1 -1
- package/dist/src/commands/doctor-furnace-jar.js +1 -1
- package/dist/src/commands/doctor-furnace.js +22 -22
- package/dist/src/commands/doctor-orphaned-harness.d.ts +10 -17
- package/dist/src/commands/doctor-orphaned-harness.js +14 -23
- package/dist/src/commands/doctor-patch-manifest.d.ts +2 -1
- package/dist/src/commands/doctor-patch-manifest.js +7 -6
- package/dist/src/commands/doctor-post-rebase-audit.js +3 -3
- package/dist/src/commands/doctor-source-pin.d.ts +12 -12
- package/dist/src/commands/doctor-source-pin.js +14 -14
- package/dist/src/commands/doctor-working-tree.d.ts +3 -3
- package/dist/src/commands/doctor-working-tree.js +3 -3
- package/dist/src/commands/doctor.d.ts +3 -1
- package/dist/src/commands/doctor.js +15 -16
- package/dist/src/commands/download.js +50 -37
- package/dist/src/commands/export-all.js +29 -12
- package/dist/src/commands/export-flow.d.ts +5 -5
- package/dist/src/commands/export-flow.js +29 -59
- package/dist/src/commands/export-placement-conflicts.d.ts +3 -3
- package/dist/src/commands/export-placement-conflicts.js +12 -12
- package/dist/src/commands/export-placement-gate.d.ts +2 -2
- package/dist/src/commands/export-placement-gate.js +7 -13
- package/dist/src/commands/export-placement-policy.d.ts +1 -1
- package/dist/src/commands/export-placement-policy.js +4 -6
- package/dist/src/commands/export-shared.d.ts +51 -32
- package/dist/src/commands/export-shared.js +17 -32
- package/dist/src/commands/export.js +14 -5
- package/dist/src/commands/furnace/apply.js +16 -16
- package/dist/src/commands/furnace/authoring-config.d.ts +13 -0
- package/dist/src/commands/furnace/authoring-config.js +19 -0
- package/dist/src/commands/furnace/chrome-doc-remove.d.ts +1 -1
- package/dist/src/commands/furnace/chrome-doc-remove.js +2 -2
- package/dist/src/commands/furnace/chrome-doc-templates.d.ts +14 -14
- package/dist/src/commands/furnace/chrome-doc-templates.js +17 -17
- package/dist/src/commands/furnace/chrome-doc-tests.d.ts +2 -2
- package/dist/src/commands/furnace/chrome-doc-tests.js +4 -4
- package/dist/src/commands/furnace/chrome-doc.d.ts +8 -8
- package/dist/src/commands/furnace/chrome-doc.js +18 -18
- package/dist/src/commands/furnace/create-browser-test.d.ts +1 -1
- package/dist/src/commands/furnace/create-browser-test.js +7 -12
- package/dist/src/commands/furnace/create-dry-run.d.ts +4 -4
- package/dist/src/commands/furnace/create-dry-run.js +6 -9
- package/dist/src/commands/furnace/create-features.d.ts +2 -2
- package/dist/src/commands/furnace/create-features.js +2 -2
- package/dist/src/commands/furnace/create-mochikit.d.ts +4 -4
- package/dist/src/commands/furnace/create-mochikit.js +7 -7
- package/dist/src/commands/furnace/create-templates.d.ts +31 -15
- package/dist/src/commands/furnace/create-templates.js +20 -19
- package/dist/src/commands/furnace/create-xpcshell.d.ts +5 -5
- package/dist/src/commands/furnace/create-xpcshell.js +8 -8
- package/dist/src/commands/furnace/create.d.ts +1 -1
- package/dist/src/commands/furnace/create.js +35 -29
- package/dist/src/commands/furnace/deploy.js +15 -6
- package/dist/src/commands/furnace/diff.js +7 -7
- package/dist/src/commands/furnace/index.js +1 -1
- package/dist/src/commands/furnace/init.js +17 -16
- package/dist/src/commands/furnace/list.js +2 -2
- package/dist/src/commands/furnace/override.d.ts +1 -1
- package/dist/src/commands/furnace/override.js +43 -34
- package/dist/src/commands/furnace/preview.js +17 -17
- package/dist/src/commands/furnace/refresh.js +15 -7
- package/dist/src/commands/furnace/remove-mutations.d.ts +9 -10
- package/dist/src/commands/furnace/remove-mutations.js +19 -19
- package/dist/src/commands/furnace/remove-state.d.ts +1 -1
- package/dist/src/commands/furnace/remove-state.js +1 -1
- package/dist/src/commands/furnace/remove.js +4 -8
- package/dist/src/commands/furnace/rename-browser-test.js +10 -15
- package/dist/src/commands/furnace/rename-xpcshell.d.ts +2 -2
- package/dist/src/commands/furnace/rename-xpcshell.js +3 -3
- package/dist/src/commands/furnace/rename.js +36 -36
- package/dist/src/commands/furnace/scan.js +3 -3
- package/dist/src/commands/furnace/status.js +19 -16
- package/dist/src/commands/furnace/sync.js +6 -6
- package/dist/src/commands/furnace/test-file-name.d.ts +28 -0
- package/dist/src/commands/furnace/test-file-name.js +39 -0
- package/dist/src/commands/furnace/validate.js +11 -12
- package/dist/src/commands/furnace/validation-output.d.ts +21 -9
- package/dist/src/commands/furnace/validation-output.js +3 -8
- package/dist/src/commands/import.js +22 -29
- package/dist/src/commands/lint-per-patch.d.ts +2 -2
- package/dist/src/commands/lint-per-patch.js +27 -12
- package/dist/src/commands/lint-per-run-checkjs.d.ts +14 -15
- package/dist/src/commands/lint-per-run-checkjs.js +14 -15
- package/dist/src/commands/lint-report.d.ts +3 -3
- package/dist/src/commands/lint-report.js +4 -4
- package/dist/src/commands/lint.d.ts +5 -4
- package/dist/src/commands/lint.js +36 -36
- package/dist/src/commands/manifest.d.ts +4 -4
- package/dist/src/commands/manifest.js +1 -1
- package/dist/src/commands/package.js +4 -6
- package/dist/src/commands/patch/compact.d.ts +2 -2
- package/dist/src/commands/patch/compact.js +19 -20
- package/dist/src/commands/patch/delete.d.ts +1 -1
- package/dist/src/commands/patch/delete.js +23 -33
- package/dist/src/commands/patch/entry-projection.d.ts +13 -0
- package/dist/src/commands/patch/entry-projection.js +24 -0
- package/dist/src/commands/patch/lint-ignore.d.ts +3 -12
- package/dist/src/commands/patch/lint-ignore.js +33 -44
- package/dist/src/commands/patch/move-files-create.d.ts +2 -2
- package/dist/src/commands/patch/move-files-create.js +29 -15
- package/dist/src/commands/patch/move-files-into.d.ts +2 -2
- package/dist/src/commands/patch/move-files-into.js +41 -37
- package/dist/src/commands/patch/move-files.js +5 -14
- package/dist/src/commands/patch/patch-context.d.ts +1 -1
- package/dist/src/commands/patch/rename.d.ts +4 -4
- package/dist/src/commands/patch/rename.js +35 -49
- package/dist/src/commands/patch/reorder.js +35 -48
- package/dist/src/commands/patch/split-plan.d.ts +7 -8
- package/dist/src/commands/patch/split-plan.js +10 -13
- package/dist/src/commands/patch/split.d.ts +2 -2
- package/dist/src/commands/patch/split.js +50 -48
- package/dist/src/commands/patch/staged-dependency-validate.d.ts +1 -1
- package/dist/src/commands/patch/staged-dependency-validate.js +3 -3
- package/dist/src/commands/patch/staged-dependency.d.ts +1 -1
- package/dist/src/commands/patch/staged-dependency.js +22 -28
- package/dist/src/commands/patch/tier.d.ts +2 -2
- package/dist/src/commands/patch/tier.js +20 -30
- package/dist/src/commands/patch-rename-map.d.ts +19 -0
- package/dist/src/commands/patch-rename-map.js +36 -0
- package/dist/src/commands/pending-resolution.d.ts +15 -0
- package/dist/src/commands/pending-resolution.js +25 -0
- package/dist/src/commands/re-export-adjacent.d.ts +25 -3
- package/dist/src/commands/re-export-adjacent.js +40 -24
- package/dist/src/commands/re-export-bulk-scan.d.ts +3 -3
- package/dist/src/commands/re-export-bulk-scan.js +23 -27
- package/dist/src/commands/re-export-drift.d.ts +10 -10
- package/dist/src/commands/re-export-drift.js +33 -33
- package/dist/src/commands/re-export-files.d.ts +2 -3
- package/dist/src/commands/re-export-files.js +52 -44
- package/dist/src/commands/re-export-lint.d.ts +29 -30
- package/dist/src/commands/re-export-lint.js +36 -29
- package/dist/src/commands/re-export-options.d.ts +1 -1
- package/dist/src/commands/re-export-options.js +1 -1
- package/dist/src/commands/re-export-register.d.ts +1 -1
- package/dist/src/commands/re-export-register.js +1 -1
- package/dist/src/commands/re-export-scan.d.ts +1 -1
- package/dist/src/commands/re-export-scan.js +12 -9
- package/dist/src/commands/re-export-single.d.ts +23 -4
- package/dist/src/commands/re-export-single.js +39 -31
- package/dist/src/commands/re-export.js +35 -17
- package/dist/src/commands/rebase/abort.js +9 -14
- package/dist/src/commands/rebase/continue.js +20 -19
- package/dist/src/commands/rebase/index.d.ts +1 -1
- package/dist/src/commands/rebase/index.js +5 -5
- package/dist/src/commands/rebase/patch-loop.d.ts +2 -2
- package/dist/src/commands/rebase/patch-loop.js +20 -24
- package/dist/src/commands/register.js +5 -5
- package/dist/src/commands/reset.js +1 -1
- package/dist/src/commands/resolve.d.ts +2 -2
- package/dist/src/commands/resolve.js +21 -13
- package/dist/src/commands/run.d.ts +0 -13
- package/dist/src/commands/run.js +38 -51
- package/dist/src/commands/setup-support.d.ts +16 -4
- package/dist/src/commands/setup-support.js +20 -20
- package/dist/src/commands/setup.js +4 -10
- package/dist/src/commands/source.js +9 -2
- package/dist/src/commands/status-check.d.ts +3 -3
- package/dist/src/commands/status-check.js +6 -6
- package/dist/src/commands/status-json.d.ts +14 -13
- package/dist/src/commands/status-json.js +9 -8
- package/dist/src/commands/status-output.d.ts +3 -3
- package/dist/src/commands/status-output.js +5 -5
- package/dist/src/commands/status-ownership.d.ts +3 -3
- package/dist/src/commands/status-ownership.js +3 -3
- package/dist/src/commands/status.js +25 -26
- package/dist/src/commands/test-build-phase.d.ts +3 -3
- package/dist/src/commands/test-build-phase.js +48 -24
- package/dist/src/commands/test-diagnose.d.ts +1 -1
- package/dist/src/commands/test-diagnose.js +20 -20
- package/dist/src/commands/test-modes.d.ts +4 -4
- package/dist/src/commands/test-modes.js +4 -5
- package/dist/src/commands/test-register.js +5 -3
- package/dist/src/commands/test-run.d.ts +11 -11
- package/dist/src/commands/test-run.js +40 -33
- package/dist/src/commands/test-stale-gate.d.ts +12 -12
- package/dist/src/commands/test-stale-gate.js +17 -17
- package/dist/src/commands/test-verdict.d.ts +19 -5
- package/dist/src/commands/test-verdict.js +26 -11
- package/dist/src/commands/test.d.ts +3 -3
- package/dist/src/commands/test.js +73 -36
- package/dist/src/commands/token-coverage.js +3 -3
- package/dist/src/commands/token-list.d.ts +26 -0
- package/dist/src/commands/token-list.js +153 -0
- package/dist/src/commands/token.js +26 -10
- package/dist/src/commands/tree.js +26 -21
- package/dist/src/commands/typecheck.d.ts +6 -6
- package/dist/src/commands/typecheck.js +16 -16
- package/dist/src/commands/verify.d.ts +3 -3
- package/dist/src/commands/verify.js +10 -10
- package/dist/src/commands/watch.js +11 -11
- package/dist/src/commands/wire.js +17 -16
- package/dist/src/core/ast-utils.d.ts +7 -7
- package/dist/src/core/ast-utils.js +8 -8
- package/dist/src/core/branding.d.ts +5 -12
- package/dist/src/core/branding.js +6 -5
- package/dist/src/core/browser-wire.d.ts +1 -1
- package/dist/src/core/browser-wire.js +10 -7
- package/dist/src/core/build-audit-platform.d.ts +32 -3
- package/dist/src/core/build-audit-platform.js +153 -13
- package/dist/src/core/build-audit-registration.d.ts +5 -5
- package/dist/src/core/build-audit-registration.js +10 -9
- package/dist/src/core/build-audit-resolve.d.ts +5 -5
- package/dist/src/core/build-audit-resolve.js +6 -6
- package/dist/src/core/build-audit-skip.d.ts +57 -0
- package/dist/src/core/build-audit-skip.js +112 -0
- package/dist/src/core/build-audit-transforms.d.ts +2 -2
- package/dist/src/core/build-audit-transforms.js +3 -3
- package/dist/src/core/build-audit.d.ts +21 -8
- package/dist/src/core/build-audit.js +142 -40
- package/dist/src/core/build-baseline-types.d.ts +19 -18
- package/dist/src/core/build-baseline-types.js +1 -1
- package/dist/src/core/build-baseline.d.ts +48 -31
- package/dist/src/core/build-baseline.js +20 -43
- package/dist/src/core/build-jar-escalation.d.ts +8 -8
- package/dist/src/core/build-jar-escalation.js +18 -17
- package/dist/src/core/build-overwrite-guard.d.ts +4 -4
- package/dist/src/core/build-overwrite-guard.js +14 -14
- package/dist/src/core/build-prepare.d.ts +4 -12
- package/dist/src/core/build-prepare.js +22 -26
- package/dist/src/core/config-mutate.js +4 -4
- package/dist/src/core/config-paths.d.ts +2 -6
- package/dist/src/core/config-paths.js +4 -2
- package/dist/src/core/config-state.d.ts +0 -6
- package/dist/src/core/config-state.js +3 -21
- package/dist/src/core/config-validate-build-audit.d.ts +8 -0
- package/dist/src/core/config-validate-build-audit.js +80 -0
- package/dist/src/core/config-validate-file-size.d.ts +1 -1
- package/dist/src/core/config-validate-file-size.js +3 -3
- package/dist/src/core/config-validate-patch-policy.d.ts +2 -2
- package/dist/src/core/config-validate-patch-policy.js +3 -3
- package/dist/src/core/config-validate-test-toolchains.d.ts +2 -2
- package/dist/src/core/config-validate-test-toolchains.js +4 -5
- package/dist/src/core/config-validate.js +22 -12
- package/dist/src/core/config.d.ts +12 -12
- package/dist/src/core/config.js +21 -25
- package/dist/src/core/coverage-extend.d.ts +16 -16
- package/dist/src/core/coverage-extend.js +20 -20
- package/dist/src/core/destructive.d.ts +14 -14
- package/dist/src/core/destructive.js +9 -9
- package/dist/src/core/diff-hunks.d.ts +2 -2
- package/dist/src/core/diff-hunks.js +7 -7
- package/dist/src/core/discard-baseline.d.ts +10 -10
- package/dist/src/core/discard-baseline.js +22 -23
- package/dist/src/core/display-state.d.ts +11 -11
- package/dist/src/core/display-state.js +12 -12
- package/dist/src/core/engine-changes.d.ts +2 -2
- package/dist/src/core/engine-changes.js +2 -2
- package/dist/src/core/engine-precondition.d.ts +5 -13
- package/dist/src/core/engine-precondition.js +5 -10
- package/dist/src/core/engine-session-lock.d.ts +18 -18
- package/dist/src/core/engine-session-lock.js +50 -54
- package/dist/src/core/export-moved-code-shape.d.ts +7 -7
- package/dist/src/core/export-moved-code-shape.js +10 -10
- package/dist/src/core/file-lock-owner.d.ts +103 -0
- package/dist/src/core/file-lock-owner.js +259 -0
- package/dist/src/core/file-lock.d.ts +14 -19
- package/dist/src/core/file-lock.js +90 -128
- package/dist/src/core/firefox-cache.d.ts +13 -1
- package/dist/src/core/firefox-cache.js +61 -36
- package/dist/src/core/firefox-download.d.ts +15 -0
- package/dist/src/core/firefox-download.js +38 -22
- package/dist/src/core/firefox-extract.d.ts +8 -7
- package/dist/src/core/firefox-extract.js +45 -27
- package/dist/src/core/firefox.d.ts +34 -36
- package/dist/src/core/firefox.js +13 -44
- package/dist/src/core/furnace-apply-dry-run.d.ts +1 -6
- package/dist/src/core/furnace-apply-dry-run.js +2 -8
- package/dist/src/core/furnace-apply-ftl.d.ts +5 -5
- package/dist/src/core/furnace-apply-ftl.js +8 -8
- package/dist/src/core/furnace-apply-helpers.d.ts +9 -20
- package/dist/src/core/furnace-apply-helpers.js +28 -39
- package/dist/src/core/furnace-apply-output.js +1 -1
- package/dist/src/core/furnace-apply-overwrite-warn.d.ts +9 -9
- package/dist/src/core/furnace-apply-overwrite-warn.js +13 -11
- package/dist/src/core/furnace-apply-undeploy-actions.d.ts +1 -1
- package/dist/src/core/furnace-apply-undeploy-actions.js +1 -1
- package/dist/src/core/furnace-apply.d.ts +4 -4
- package/dist/src/core/furnace-apply.js +50 -29
- package/dist/src/core/furnace-checksum-utils.d.ts +5 -5
- package/dist/src/core/furnace-checksum-utils.js +5 -5
- package/dist/src/core/furnace-config-custom.d.ts +1 -1
- package/dist/src/core/furnace-config-custom.js +2 -2
- package/dist/src/core/furnace-config-order.js +1 -1
- package/dist/src/core/furnace-config-tokens.d.ts +3 -3
- package/dist/src/core/furnace-config-tokens.js +3 -3
- package/dist/src/core/furnace-config-validate.js +2 -2
- package/dist/src/core/furnace-config.d.ts +5 -5
- package/dist/src/core/furnace-config.js +40 -53
- package/dist/src/core/furnace-constants.d.ts +6 -6
- package/dist/src/core/furnace-constants.js +9 -8
- package/dist/src/core/furnace-css-fragments.d.ts +6 -6
- package/dist/src/core/furnace-css-fragments.js +11 -11
- package/dist/src/core/furnace-dir-entry.d.ts +20 -0
- package/dist/src/core/furnace-dir-entry.js +21 -0
- package/dist/src/core/furnace-jsconfig.d.ts +7 -7
- package/dist/src/core/furnace-jsconfig.js +22 -20
- package/dist/src/core/furnace-operation.d.ts +22 -19
- package/dist/src/core/furnace-operation.js +38 -34
- package/dist/src/core/furnace-precondition.d.ts +10 -10
- package/dist/src/core/furnace-precondition.js +8 -8
- package/dist/src/core/furnace-refresh.d.ts +18 -6
- package/dist/src/core/furnace-refresh.js +5 -8
- package/dist/src/core/furnace-registration-ast.d.ts +2 -3
- package/dist/src/core/furnace-registration-ast.js +9 -12
- package/dist/src/core/furnace-registration-remove.d.ts +4 -4
- package/dist/src/core/furnace-registration-remove.js +6 -6
- package/dist/src/core/furnace-registration-validate.d.ts +2 -2
- package/dist/src/core/furnace-registration-validate.js +2 -2
- package/dist/src/core/furnace-registration.d.ts +7 -6
- package/dist/src/core/furnace-registration.js +29 -36
- package/dist/src/core/furnace-rollback.d.ts +1 -1
- package/dist/src/core/furnace-rollback.js +5 -5
- package/dist/src/core/furnace-scanner.js +3 -6
- package/dist/src/core/furnace-stale-export.d.ts +17 -16
- package/dist/src/core/furnace-stale-export.js +16 -15
- package/dist/src/core/furnace-staleness.d.ts +2 -2
- package/dist/src/core/furnace-staleness.js +2 -2
- package/dist/src/core/furnace-state-persist.d.ts +12 -12
- package/dist/src/core/furnace-state-persist.js +10 -10
- package/dist/src/core/furnace-step-errors.d.ts +6 -6
- package/dist/src/core/furnace-step-errors.js +6 -6
- package/dist/src/core/furnace-validate-accessibility.js +14 -14
- package/dist/src/core/furnace-validate-compatibility.js +9 -9
- package/dist/src/core/furnace-validate-registration.d.ts +2 -2
- package/dist/src/core/furnace-validate-registration.js +18 -20
- package/dist/src/core/furnace-validate-structure.d.ts +1 -1
- package/dist/src/core/furnace-validate-structure.js +4 -4
- package/dist/src/core/furnace-validate.js +9 -9
- package/dist/src/core/furnace-version-drift.d.ts +5 -5
- package/dist/src/core/furnace-version-drift.js +5 -5
- package/dist/src/core/git-base.d.ts +6 -4
- package/dist/src/core/git-base.js +29 -7
- package/dist/src/core/git-diff-new-file.d.ts +40 -0
- package/dist/src/core/git-diff-new-file.js +119 -0
- package/dist/src/core/git-diff.d.ts +13 -13
- package/dist/src/core/git-diff.js +121 -189
- package/dist/src/core/git-file-ops.d.ts +6 -13
- package/dist/src/core/git-file-ops.js +11 -35
- package/dist/src/core/git-readonly-index.d.ts +12 -14
- package/dist/src/core/git-readonly-index.js +12 -16
- package/dist/src/core/git-status.d.ts +9 -2
- package/dist/src/core/git-status.js +23 -11
- package/dist/src/core/git.d.ts +3 -9
- package/dist/src/core/git.js +28 -57
- package/dist/src/core/harness-orphans.d.ts +17 -17
- package/dist/src/core/harness-orphans.js +28 -27
- package/dist/src/core/history-log.d.ts +19 -0
- package/dist/src/core/history-log.js +29 -0
- package/dist/src/core/license-headers.d.ts +19 -18
- package/dist/src/core/license-headers.js +29 -28
- package/dist/src/core/mach-build-artifacts.d.ts +21 -21
- package/dist/src/core/mach-build-artifacts.js +23 -23
- package/dist/src/core/mach-error-hints.d.ts +5 -10
- package/dist/src/core/mach-error-hints.js +14 -14
- package/dist/src/core/mach-known-noise-filter.d.ts +42 -38
- package/dist/src/core/mach-known-noise-filter.js +57 -56
- package/dist/src/core/mach-mozconfig.d.ts +6 -6
- package/dist/src/core/mach-mozconfig.js +17 -16
- package/dist/src/core/mach-python.d.ts +3 -0
- package/dist/src/core/mach-python.js +13 -7
- package/dist/src/core/mach-resource-shim.d.ts +24 -12
- package/dist/src/core/mach-resource-shim.js +124 -21
- package/dist/src/core/mach.d.ts +59 -73
- package/dist/src/core/mach.js +47 -115
- package/dist/src/core/marionette-port.d.ts +15 -30
- package/dist/src/core/marionette-port.js +46 -89
- package/dist/src/core/marionette-preflight.d.ts +6 -6
- package/dist/src/core/marionette-preflight.js +32 -50
- package/dist/src/core/markdown-table.d.ts +9 -9
- package/dist/src/core/markdown-table.js +14 -14
- package/dist/src/core/mochitest-server-port.d.ts +8 -8
- package/dist/src/core/mochitest-server-port.js +17 -17
- package/dist/src/core/module-resolution-preflight.d.ts +8 -8
- package/dist/src/core/module-resolution-preflight.js +11 -11
- package/dist/src/core/moz-manifest-helpers.d.ts +7 -7
- package/dist/src/core/moz-manifest-helpers.js +7 -7
- package/dist/src/core/moz-manifest-register.d.ts +1 -1
- package/dist/src/core/moz-manifest-register.js +2 -2
- package/dist/src/core/moz-manifest-rules.js +46 -42
- package/dist/src/core/moz-manifest-tokenizers.js +1 -1
- package/dist/src/core/ownership-table.d.ts +5 -5
- package/dist/src/core/ownership-table.js +7 -7
- package/dist/src/core/parser-fallback.d.ts +3 -3
- package/dist/src/core/parser-fallback.js +3 -3
- package/dist/src/core/patch-apply-fuzz.d.ts +5 -5
- package/dist/src/core/patch-apply-fuzz.js +13 -13
- package/dist/src/core/patch-apply.d.ts +13 -14
- package/dist/src/core/patch-apply.js +36 -42
- package/dist/src/core/patch-export-coverage.d.ts +0 -9
- package/dist/src/core/patch-export-coverage.js +1 -30
- package/dist/src/core/patch-export-update.d.ts +21 -4
- package/dist/src/core/patch-export-update.js +7 -6
- package/dist/src/core/patch-export.d.ts +20 -30
- package/dist/src/core/patch-export.js +55 -77
- package/dist/src/core/patch-files.d.ts +0 -4
- package/dist/src/core/patch-files.js +0 -11
- package/dist/src/core/patch-identifier-suggest.d.ts +1 -1
- package/dist/src/core/patch-identifier-suggest.js +4 -4
- package/dist/src/core/patch-lint-binary.d.ts +12 -18
- package/dist/src/core/patch-lint-cache.d.ts +18 -2
- package/dist/src/core/patch-lint-cache.js +16 -19
- package/dist/src/core/patch-lint-checkjs.d.ts +55 -38
- package/dist/src/core/patch-lint-checkjs.js +78 -64
- package/dist/src/core/patch-lint-chrome-jsdoc.d.ts +8 -9
- package/dist/src/core/patch-lint-chrome-jsdoc.js +10 -11
- package/dist/src/core/patch-lint-creators.d.ts +5 -9
- package/dist/src/core/patch-lint-creators.js +3 -3
- package/dist/src/core/patch-lint-cross.d.ts +27 -19
- package/dist/src/core/patch-lint-cross.js +67 -110
- package/dist/src/core/patch-lint-css.d.ts +1 -1
- package/dist/src/core/patch-lint-css.js +15 -11
- package/dist/src/core/patch-lint-diff-tag.d.ts +5 -5
- package/dist/src/core/patch-lint-diff-tag.js +5 -5
- package/dist/src/core/patch-lint-diff.d.ts +4 -4
- package/dist/src/core/patch-lint-diff.js +4 -4
- package/dist/src/core/patch-lint-file-size.d.ts +3 -3
- package/dist/src/core/patch-lint-file-size.js +6 -6
- package/dist/src/core/patch-lint-forward-registration.d.ts +58 -0
- package/dist/src/core/patch-lint-forward-registration.js +210 -0
- package/dist/src/core/patch-lint-jsdoc.d.ts +2 -2
- package/dist/src/core/patch-lint-jsdoc.js +46 -46
- package/dist/src/core/patch-lint-module-registration.d.ts +3 -9
- package/dist/src/core/patch-lint-module-registration.js +1 -1
- package/dist/src/core/patch-lint-mozbuild.d.ts +1 -1
- package/dist/src/core/patch-lint-mozbuild.js +10 -10
- package/dist/src/core/patch-lint-observer.d.ts +3 -3
- package/dist/src/core/patch-lint-observer.js +7 -7
- package/dist/src/core/patch-lint-ownership.d.ts +6 -6
- package/dist/src/core/patch-lint-ownership.js +6 -6
- package/dist/src/core/patch-lint-prettier.d.ts +6 -6
- package/dist/src/core/patch-lint-prettier.js +7 -7
- package/dist/src/core/patch-lint-queue-types.d.ts +60 -0
- package/dist/src/core/patch-lint-queue-types.js +12 -0
- package/dist/src/core/patch-lint-staged-registration.d.ts +61 -0
- package/dist/src/core/patch-lint-staged-registration.js +90 -0
- package/dist/src/core/patch-lint-unmanaged-companion.d.ts +23 -23
- package/dist/src/core/patch-lint-unmanaged-companion.js +26 -26
- package/dist/src/core/patch-lint.d.ts +41 -35
- package/dist/src/core/patch-lint.js +52 -49
- package/dist/src/core/patch-lock.d.ts +1 -1
- package/dist/src/core/patch-lock.js +11 -11
- package/dist/src/core/patch-manifest-consistency.d.ts +7 -7
- package/dist/src/core/patch-manifest-consistency.js +16 -17
- package/dist/src/core/patch-manifest-files-affected.d.ts +1 -1
- package/dist/src/core/patch-manifest-files-affected.js +3 -3
- package/dist/src/core/patch-manifest-io.d.ts +14 -14
- package/dist/src/core/patch-manifest-io.js +35 -34
- package/dist/src/core/patch-manifest-query.d.ts +1 -1
- package/dist/src/core/patch-manifest-query.js +4 -4
- package/dist/src/core/patch-manifest-resolve.d.ts +5 -5
- package/dist/src/core/patch-manifest-resolve.js +7 -7
- package/dist/src/core/patch-manifest-validate.js +3 -3
- package/dist/src/core/patch-manifest.d.ts +2 -2
- package/dist/src/core/patch-manifest.js +2 -2
- package/dist/src/core/patch-parse.d.ts +32 -21
- package/dist/src/core/patch-parse.js +40 -15
- package/dist/src/core/patch-policy.js +15 -27
- package/dist/src/core/patch-registration-refs.d.ts +4 -4
- package/dist/src/core/patch-registration-refs.js +7 -7
- package/dist/src/core/patch-source-metadata.d.ts +1 -3
- package/dist/src/core/patch-source-metadata.js +0 -4
- package/dist/src/core/patch-transform.d.ts +8 -16
- package/dist/src/core/patch-transform.js +13 -23
- package/dist/src/core/process-cpu-time.d.ts +1 -1
- package/dist/src/core/process-cpu-time.js +6 -6
- package/dist/src/core/rebase-session.d.ts +9 -15
- package/dist/src/core/rebase-session.js +13 -25
- package/dist/src/core/register-browser-content.js +3 -2
- package/dist/src/core/register-browser-test.js +2 -1
- package/dist/src/core/register-module.js +2 -1
- package/dist/src/core/register-result.d.ts +1 -1
- package/dist/src/core/register-result.js +1 -1
- package/dist/src/core/register-scaffold.d.ts +2 -2
- package/dist/src/core/register-scaffold.js +8 -7
- package/dist/src/core/register-shared-css.d.ts +3 -3
- package/dist/src/core/register-shared-css.js +6 -5
- package/dist/src/core/register-xpcshell-test.d.ts +2 -2
- package/dist/src/core/register-xpcshell-test.js +2 -2
- package/dist/src/core/run-log-redact.d.ts +38 -0
- package/dist/src/core/run-log-redact.js +69 -0
- package/dist/src/core/run-log.d.ts +21 -10
- package/dist/src/core/run-log.js +76 -27
- package/dist/src/core/shared-ftl.d.ts +2 -2
- package/dist/src/core/shared-ftl.js +6 -6
- package/dist/src/core/signal-critical.d.ts +2 -2
- package/dist/src/core/signal-critical.js +4 -6
- package/dist/src/core/smoke-patterns.d.ts +5 -6
- package/dist/src/core/smoke-patterns.js +15 -20
- package/dist/src/core/state-file.d.ts +15 -4
- package/dist/src/core/state-file.js +14 -1
- package/dist/src/core/status-binary.d.ts +8 -8
- package/dist/src/core/status-binary.js +12 -12
- package/dist/src/core/status-classify.d.ts +17 -17
- package/dist/src/core/status-classify.js +13 -12
- package/dist/src/core/test-changed-prefs.d.ts +12 -12
- package/dist/src/core/test-changed-prefs.js +40 -25
- package/dist/src/core/test-harness-crash.d.ts +39 -39
- package/dist/src/core/test-harness-crash.js +69 -69
- package/dist/src/core/test-harness-output.d.ts +7 -7
- package/dist/src/core/test-harness-output.js +7 -7
- package/dist/src/core/test-harness-verdict-notes.d.ts +13 -14
- package/dist/src/core/test-harness-verdict-notes.js +4 -4
- package/dist/src/core/test-path-scope.d.ts +8 -8
- package/dist/src/core/test-path-scope.js +11 -11
- package/dist/src/core/test-stale-check.d.ts +22 -23
- package/dist/src/core/test-stale-check.js +31 -30
- package/dist/src/core/test-stale-symlink.d.ts +1 -1
- package/dist/src/core/test-stale-symlink.js +1 -1
- package/dist/src/core/test-stall-triage.d.ts +9 -9
- package/dist/src/core/test-stall-triage.js +22 -22
- package/dist/src/core/test-xpcshell-retry.d.ts +26 -7
- package/dist/src/core/test-xpcshell-retry.js +14 -11
- package/dist/src/core/token-category.d.ts +35 -2
- package/dist/src/core/token-category.js +67 -58
- package/dist/src/core/token-coverage.js +4 -5
- package/dist/src/core/token-dark-mode.d.ts +9 -9
- package/dist/src/core/token-dark-mode.js +13 -25
- package/dist/src/core/token-docs.d.ts +1 -1
- package/dist/src/core/token-inventory.d.ts +56 -0
- package/dist/src/core/token-inventory.js +109 -0
- package/dist/src/core/token-manager.d.ts +4 -4
- package/dist/src/core/token-manager.js +22 -22
- package/dist/src/core/token-scaffold.d.ts +4 -4
- package/dist/src/core/token-scaffold.js +4 -4
- package/dist/src/core/token-variant.d.ts +14 -14
- package/dist/src/core/token-variant.js +52 -53
- package/dist/src/core/toolchain-preflight.d.ts +15 -15
- package/dist/src/core/toolchain-preflight.js +23 -23
- package/dist/src/core/tree-cow.d.ts +3 -5
- package/dist/src/core/tree-cow.js +8 -8
- package/dist/src/core/tree-guard.d.ts +3 -3
- package/dist/src/core/tree-guard.js +23 -23
- package/dist/src/core/tree-store.d.ts +15 -15
- package/dist/src/core/tree-store.js +39 -38
- package/dist/src/core/typecheck-shim.d.ts +16 -15
- package/dist/src/core/typecheck-shim.js +26 -25
- package/dist/src/core/typecheck.d.ts +12 -12
- package/dist/src/core/typecheck.js +33 -33
- package/dist/src/core/wire-destroy.d.ts +2 -2
- package/dist/src/core/wire-destroy.js +5 -5
- package/dist/src/core/wire-dom-fragment.d.ts +3 -3
- package/dist/src/core/wire-dom-fragment.js +12 -23
- package/dist/src/core/wire-init.d.ts +2 -2
- package/dist/src/core/wire-init.js +7 -7
- package/dist/src/core/wire-subscript.d.ts +1 -1
- package/dist/src/core/wire-subscript.js +3 -3
- package/dist/src/core/wire-utils.d.ts +9 -9
- package/dist/src/core/wire-utils.js +16 -28
- package/dist/src/core/xpcshell-appdir.d.ts +20 -20
- package/dist/src/core/xpcshell-appdir.js +28 -30
- package/dist/src/core/xpcshell-profile-dir.d.ts +3 -3
- package/dist/src/core/xpcshell-profile-dir.js +7 -7
- package/dist/src/errors/base.d.ts +69 -16
- package/dist/src/errors/base.js +95 -26
- package/dist/src/errors/build.d.ts +6 -6
- package/dist/src/errors/build.js +26 -34
- package/dist/src/errors/codes.d.ts +10 -10
- package/dist/src/errors/codes.js +10 -10
- package/dist/src/errors/config.d.ts +0 -14
- package/dist/src/errors/config.js +13 -34
- package/dist/src/errors/download.d.ts +13 -0
- package/dist/src/errors/download.js +53 -24
- package/dist/src/errors/furnace.d.ts +2 -2
- package/dist/src/errors/furnace.js +8 -9
- package/dist/src/errors/git.d.ts +9 -9
- package/dist/src/errors/git.js +21 -31
- package/dist/src/errors/patch.d.ts +3 -3
- package/dist/src/errors/patch.js +11 -13
- package/dist/src/errors/rebase.d.ts +1 -1
- package/dist/src/errors/rebase.js +8 -8
- package/dist/src/errors/run.d.ts +1 -1
- package/dist/src/errors/run.js +1 -1
- package/dist/src/index.d.ts +4 -4
- package/dist/src/index.js +4 -4
- package/dist/src/types/commands/options.d.ts +155 -200
- package/dist/src/types/commands/patches.d.ts +19 -19
- package/dist/src/types/commands/project.d.ts +3 -3
- package/dist/src/types/config.d.ts +52 -19
- package/dist/src/types/furnace.d.ts +17 -17
- package/dist/src/types/index.d.ts +0 -1
- package/dist/src/types/json.d.ts +3 -3
- package/dist/src/types/json.js +2 -2
- package/dist/src/types/typecheck.d.ts +3 -3
- package/dist/src/utils/assert.d.ts +4 -16
- package/dist/src/utils/assert.js +7 -24
- package/dist/src/utils/build-info.d.ts +6 -6
- package/dist/src/utils/build-info.js +6 -6
- package/dist/src/utils/child-env.d.ts +7 -6
- package/dist/src/utils/child-env.js +5 -5
- package/dist/src/utils/concurrency.d.ts +2 -2
- package/dist/src/utils/concurrency.js +2 -2
- package/dist/src/utils/elapsed.js +10 -1
- package/dist/src/utils/errors.d.ts +8 -8
- package/dist/src/utils/errors.js +8 -8
- package/dist/src/utils/fs.d.ts +1 -1
- package/dist/src/utils/fs.js +15 -20
- package/dist/src/utils/hash.d.ts +12 -0
- package/dist/src/utils/hash.js +16 -0
- package/dist/src/utils/line-dispatch.d.ts +15 -0
- package/dist/src/utils/line-dispatch.js +48 -0
- package/dist/src/utils/logger.d.ts +4 -4
- package/dist/src/utils/logger.js +11 -11
- package/dist/src/utils/machine-output.js +2 -2
- package/dist/src/utils/options.d.ts +14 -20
- package/dist/src/utils/options.js +26 -27
- package/dist/src/utils/package-root.js +5 -14
- package/dist/src/utils/paths.d.ts +4 -4
- package/dist/src/utils/paths.js +4 -4
- package/dist/src/utils/platform.d.ts +0 -4
- package/dist/src/utils/process-group.d.ts +10 -9
- package/dist/src/utils/process-group.js +37 -36
- package/dist/src/utils/process.d.ts +70 -55
- package/dist/src/utils/process.js +129 -179
- package/dist/src/utils/ps-duration.d.ts +4 -4
- package/dist/src/utils/ps-duration.js +9 -9
- package/dist/src/utils/regex.d.ts +4 -4
- package/dist/src/utils/regex.js +7 -7
- package/dist/src/utils/sleep.d.ts +26 -0
- package/dist/src/utils/sleep.js +31 -0
- package/dist/src/utils/stdio-drain.d.ts +7 -7
- package/dist/src/utils/stdio-drain.js +8 -8
- package/dist/src/utils/validation.d.ts +12 -49
- package/dist/src/utils/validation.js +26 -36
- package/docs/README.md +2 -2
- package/docs/configuration.md +163 -69
- package/docs/exit-codes.md +66 -49
- package/docs/furnace.md +20 -19
- package/docs/lifecycle-invariants.md +414 -247
- package/docs/machine-output.md +58 -34
- package/docs/patch-workflow.md +48 -44
- package/docs/run-logs.md +72 -28
- package/docs/testing.md +105 -98
- package/docs/verification-trees.md +23 -22
- package/package.json +7 -6
- package/dist/src/commands/rebase.d.ts +0 -4
- package/dist/src/commands/rebase.js +0 -5
- package/dist/src/core/patch-artifact-normalize.d.ts +0 -21
- package/dist/src/core/patch-artifact-normalize.js +0 -24
- package/dist/src/core/patch-lint-reexports.d.ts +0 -7
- package/dist/src/core/patch-lint-reexports.js +0 -8
- package/dist/src/core/wire-targets.d.ts +0 -7
- package/dist/src/core/wire-targets.js +0 -8
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
// SPDX-License-Identifier: EUPL-1.2
|
|
2
2
|
/**
|
|
3
|
-
* `fireforge patch split <source> --files <p...> --name <n>`
|
|
3
|
+
* `fireforge patch split <source> --files <p...> --name <n>` moves files
|
|
4
4
|
* out of an existing patch into a brand-new patch as one transaction.
|
|
5
5
|
*
|
|
6
6
|
* Splitting a patch whose files have inbound forward-imports otherwise
|
|
7
7
|
* requires a precise manual order: re-point each staged-dependency owner at
|
|
8
8
|
* a not-yet-created patch, shrink the source via
|
|
9
|
-
* `re-export --files --allow-shrink`, then `export --order
|
|
9
|
+
* `re-export --files --allow-shrink`, then `export --order`. Any other
|
|
10
10
|
* order refuses or needs `--force-unsafe`. Split performs the shrink, the
|
|
11
11
|
* new-patch creation, and the dependent owner rewrites under one
|
|
12
12
|
* patch-directory lock with rollback, validating only the final projection.
|
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
import { join } from 'node:path';
|
|
19
19
|
import { Command } from 'commander';
|
|
20
20
|
import { getProjectPaths, loadConfig } from '../../core/config.js';
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
21
|
+
import { assertConfirmationAvailable, confirmDestructive } from '../../core/destructive.js';
|
|
22
|
+
import { appendHistoryBestEffort } from '../../core/history-log.js';
|
|
23
23
|
import { formatPatchNotFoundError } from '../../core/patch-identifier-suggest.js';
|
|
24
24
|
import { buildPatchQueueContext } from '../../core/patch-lint.js';
|
|
25
25
|
import { withPatchDirectoryLock } from '../../core/patch-lock.js';
|
|
@@ -30,7 +30,8 @@ import { toError } from '../../utils/errors.js';
|
|
|
30
30
|
import { readText, removeFile, writeText } from '../../utils/fs.js';
|
|
31
31
|
import { info, intro, outro, success, warn } from '../../utils/logger.js';
|
|
32
32
|
import { addWaitLockOption, commanderArgParser, pickDefined, resolveWaitLockSeconds, } from '../../utils/options.js';
|
|
33
|
-
import { normalizePatchDisplayName } from '../../utils/validation.js';
|
|
33
|
+
import { normalizePatchDisplayName, parsePositiveIntegerFlag } from '../../utils/validation.js';
|
|
34
|
+
import { proceedAfterDecision } from '../destructive-decision.js';
|
|
34
35
|
import { placementPlansEqual, resolvePlacementPlan } from '../export-flow.js';
|
|
35
36
|
import { runPatchLint } from '../export-shared.js';
|
|
36
37
|
import { assertSourceOwnsFiles, buildNewPatchMetadata, buildSplitDiff, buildSplitSummary, findOwnerRewriteHolders, mergeStagedForwardImports, projectSplitManifest, rewriteSplitOwners, runProjectedSplitLint, } from './split-plan.js';
|
|
@@ -68,9 +69,9 @@ export async function commitPatchSplit(patchesDir, plan, newMetadata, options, c
|
|
|
68
69
|
await renumberPatchesInManifest(patchesDir, plan.placement.renameMap);
|
|
69
70
|
renumberApplied = true;
|
|
70
71
|
}
|
|
71
|
-
await writeText(newPatchPath,
|
|
72
|
+
await writeText(newPatchPath, plan.movedDiff);
|
|
72
73
|
newPatchWritten = true;
|
|
73
|
-
await writeText(sourcePathAfter,
|
|
74
|
+
await writeText(sourcePathAfter, plan.remainingDiff);
|
|
74
75
|
sourceRewritten = true;
|
|
75
76
|
const fresh = await loadPatchesManifest(patchesDir);
|
|
76
77
|
if (!fresh)
|
|
@@ -91,31 +92,26 @@ export async function commitPatchSplit(patchesDir, plan, newMetadata, options, c
|
|
|
91
92
|
updatedPatches.sort((a, b) => a.order - b.order || a.filename.localeCompare(b.filename));
|
|
92
93
|
const updated = validatePatchesManifest({ ...fresh, patches: updatedPatches });
|
|
93
94
|
await savePatchesManifest(patchesDir, updated);
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
catch (historyError) {
|
|
114
|
-
warn(`History log append failed after patch split committed: ${toError(historyError).message}`);
|
|
115
|
-
}
|
|
95
|
+
await appendHistoryBestEffort(patchesDir, {
|
|
96
|
+
operation: 'patch-split',
|
|
97
|
+
args: {
|
|
98
|
+
source: effectiveSourceFilename,
|
|
99
|
+
newFilename: plan.placement.newFilename,
|
|
100
|
+
order: plan.placement.insertionOrder,
|
|
101
|
+
files: plan.movedFiles,
|
|
102
|
+
ownerRewrites: plan.ownerRewrites,
|
|
103
|
+
renames: [...plan.placement.renameMap.entries()].map(([from, entry]) => ({
|
|
104
|
+
from,
|
|
105
|
+
to: entry.newFilename,
|
|
106
|
+
})),
|
|
107
|
+
},
|
|
108
|
+
...(options.yes === true ? { yes: true } : {}),
|
|
109
|
+
...(options.forceUnsafe === true ? { unsafeOverride: true } : {}),
|
|
110
|
+
result: 'ok',
|
|
111
|
+
}, `patch split committed`);
|
|
116
112
|
}
|
|
117
113
|
catch (error) {
|
|
118
|
-
// Reverse-order rollback
|
|
114
|
+
// Reverse-order rollback. Each step warns on its own failure so the
|
|
119
115
|
// original error stays visible.
|
|
120
116
|
if (sourceRewritten) {
|
|
121
117
|
try {
|
|
@@ -164,7 +160,7 @@ export async function commitPatchSplit(patchesDir, plan, newMetadata, options, c
|
|
|
164
160
|
*/
|
|
165
161
|
export async function patchSplitCommand(projectRoot, sourceId, options) {
|
|
166
162
|
intro(options.dryRun ? 'FireForge patch split (dry run)' : 'FireForge patch split');
|
|
167
|
-
// Refuse a prompt-less run
|
|
163
|
+
// Refuse a prompt-less run before doing the diff/lint work.
|
|
168
164
|
assertConfirmationAvailable('patch split', options);
|
|
169
165
|
const paths = getProjectPaths(projectRoot);
|
|
170
166
|
const config = await loadConfig(projectRoot);
|
|
@@ -197,7 +193,7 @@ export async function patchSplitCommand(projectRoot, sourceId, options) {
|
|
|
197
193
|
(options.order === undefined && options.before === undefined ? source.filename : undefined),
|
|
198
194
|
});
|
|
199
195
|
const placement = await resolvePlacementPlan(paths.patches, placementOptions, category, options.name, config);
|
|
200
|
-
// The filename slug pipeline strips redundant category prefixes
|
|
196
|
+
// The filename slug pipeline strips redundant category prefixes. The
|
|
201
197
|
// manifest display name must agree with the bare-slug naming policy,
|
|
202
198
|
// exactly as `export --name` already does.
|
|
203
199
|
const displayName = normalizePatchDisplayName(options.name, category);
|
|
@@ -226,8 +222,26 @@ export async function patchSplitCommand(projectRoot, sourceId, options) {
|
|
|
226
222
|
// instead of linting each projected body blind.
|
|
227
223
|
const patchQueueCtx = await buildPatchQueueContext(paths.patches, config);
|
|
228
224
|
const ignoreChecks = source.lintIgnore ? new Set(source.lintIgnore) : undefined;
|
|
229
|
-
await runPatchLint(
|
|
230
|
-
|
|
225
|
+
await runPatchLint({
|
|
226
|
+
engineDir: paths.engine,
|
|
227
|
+
filesAffected: remainingFiles,
|
|
228
|
+
diffContent: remainingDiff,
|
|
229
|
+
config,
|
|
230
|
+
skipLint: options.skipLint,
|
|
231
|
+
patchQueueCtx,
|
|
232
|
+
ignoreChecks,
|
|
233
|
+
patchTier: source.tier,
|
|
234
|
+
});
|
|
235
|
+
await runPatchLint({
|
|
236
|
+
engineDir: paths.engine,
|
|
237
|
+
filesAffected: movedFiles,
|
|
238
|
+
diffContent: movedDiff,
|
|
239
|
+
config,
|
|
240
|
+
skipLint: options.skipLint,
|
|
241
|
+
patchQueueCtx,
|
|
242
|
+
ignoreChecks,
|
|
243
|
+
patchTier: source.tier,
|
|
244
|
+
});
|
|
231
245
|
const { conflicts, stagedDependencyAdditions } = runProjectedSplitLint(plan, patchQueueCtx);
|
|
232
246
|
plan.stagedDependencyAdditions = stagedDependencyAdditions;
|
|
233
247
|
const newMetadata = buildNewPatchMetadata(plan, config);
|
|
@@ -246,14 +260,8 @@ export async function patchSplitCommand(projectRoot, sourceId, options) {
|
|
|
246
260
|
unsafeOverride: options.forceUnsafe === true,
|
|
247
261
|
conflicts,
|
|
248
262
|
});
|
|
249
|
-
if (decision
|
|
250
|
-
outro('Dry run complete — no changes made');
|
|
251
|
-
return;
|
|
252
|
-
}
|
|
253
|
-
if (decision === 'declined') {
|
|
254
|
-
outro('Split cancelled');
|
|
263
|
+
if (!proceedAfterDecision(decision, 'Split cancelled'))
|
|
255
264
|
return;
|
|
256
|
-
}
|
|
257
265
|
await commitPatchSplit(paths.patches, plan, newMetadata, options, config);
|
|
258
266
|
success(`Split ${source.filename}: ${placement.newFilename} now owns ${plan.movedFiles.length} file(s)`);
|
|
259
267
|
if (plan.ownerRewrites.length > 0) {
|
|
@@ -273,13 +281,7 @@ export function registerPatchSplit(parent, context) {
|
|
|
273
281
|
.requiredOption('--name <name>', 'Name for the new patch')
|
|
274
282
|
.option('--category <category>', "Category for the new patch (default: the source patch's)")
|
|
275
283
|
.option('--description <desc>', 'Description for the new patch')
|
|
276
|
-
.option('--order <n>', 'Exact sparse order for the new patch', commanderArgParser((raw) =>
|
|
277
|
-
const n = Number.parseInt(raw, 10);
|
|
278
|
-
if (!Number.isInteger(n) || n <= 0) {
|
|
279
|
-
throw new InvalidArgumentError(`--order must be a positive integer, got "${raw}".`, '--order');
|
|
280
|
-
}
|
|
281
|
-
return n;
|
|
282
|
-
}))
|
|
284
|
+
.option('--order <n>', 'Exact sparse order for the new patch', commanderArgParser((raw) => parsePositiveIntegerFlag('--order', raw)))
|
|
283
285
|
.option('--before <patch>', 'Place the new patch before this patch')
|
|
284
286
|
.option('--after <patch>', 'Place the new patch after this patch (default: the source patch)')
|
|
285
287
|
.option('--dry-run', 'Show what would happen without writing')
|
|
@@ -7,7 +7,7 @@ interface StagedDependencyShape {
|
|
|
7
7
|
}
|
|
8
8
|
/**
|
|
9
9
|
* Validates the `--add` declaration fields against the loaded queue.
|
|
10
|
-
* Throws on a clear flag mixup
|
|
10
|
+
* Throws on a clear flag mixup. Warns (only) when `--owner` is
|
|
11
11
|
* well-formed but absent from the queue, because the owner may
|
|
12
12
|
* legitimately be exported moments later and renumbering rewrites owners.
|
|
13
13
|
*/
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Shape validation for `patch staged-dependency --add`.
|
|
4
4
|
*
|
|
5
|
-
* `--creates`/`--file` take engine-relative
|
|
6
|
-
* patch
|
|
5
|
+
* `--creates`/`--file` take engine-relative file paths, while `--owner`
|
|
6
|
+
* takes a patch filename. Accepting all three as arbitrary strings lets a
|
|
7
7
|
* `--creates <patch-name>` mixup produce a declaration nothing can ever
|
|
8
8
|
* discharge, surfacing only later as a `staged-dependency-unused` warning.
|
|
9
9
|
* Refusals here fire only on a clear patch-name shape (slash-free values
|
|
@@ -28,7 +28,7 @@ function refusePatchShapedPath(flag, value, role, queuePatches) {
|
|
|
28
28
|
}
|
|
29
29
|
/**
|
|
30
30
|
* Validates the `--add` declaration fields against the loaded queue.
|
|
31
|
-
* Throws on a clear flag mixup
|
|
31
|
+
* Throws on a clear flag mixup. Warns (only) when `--owner` is
|
|
32
32
|
* well-formed but absent from the queue, because the owner may
|
|
33
33
|
* legitimately be exported moments later and renumbering rewrites owners.
|
|
34
34
|
*/
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
// SPDX-License-Identifier: EUPL-1.2
|
|
2
2
|
/**
|
|
3
|
-
* `fireforge patch staged-dependency <name>`
|
|
3
|
+
* `fireforge patch staged-dependency <name>` edits
|
|
4
4
|
* PatchMetadata.stagedDependencies without rewriting the .patch body.
|
|
5
5
|
*/
|
|
6
6
|
import { Command } from 'commander';
|
|
7
|
-
import {
|
|
7
|
+
import { appendHistoryBestEffort } from '../../core/history-log.js';
|
|
8
8
|
import { mutatePatchMetadata } from '../../core/patch-export.js';
|
|
9
9
|
import { GeneralError, InvalidArgumentError } from '../../errors/base.js';
|
|
10
|
-
import {
|
|
11
|
-
import { info, intro, outro, warn } from '../../utils/logger.js';
|
|
10
|
+
import { info, intro, outro } from '../../utils/logger.js';
|
|
12
11
|
import { addWaitLockOption, resolveWaitLockSeconds } from '../../utils/options.js';
|
|
13
12
|
import { requirePatchQueue, requirePatchTarget } from './patch-context.js';
|
|
14
13
|
import { validateStagedDependencyAdd } from './staged-dependency-validate.js';
|
|
@@ -86,7 +85,7 @@ function requireRegistrationOptions(options) {
|
|
|
86
85
|
/**
|
|
87
86
|
* Resolves the `--remove` target for forward-imports:
|
|
88
87
|
* `--file` + `--specifier` suffice when they identify at most one staged
|
|
89
|
-
* entry
|
|
88
|
+
* entry. `--creates` is inferred from a unique match, an ambiguous match
|
|
90
89
|
* refuses with the candidate list, and no match falls through to the
|
|
91
90
|
* honest "no staged forward-import matched" summary.
|
|
92
91
|
*/
|
|
@@ -113,7 +112,7 @@ function resolveImportRemovalTarget(options, staged) {
|
|
|
113
112
|
const list = candidates
|
|
114
113
|
.map((entry) => ` - ${dependencyLabel('import', importView(entry))}`)
|
|
115
114
|
.join('\n');
|
|
116
|
-
throw new GeneralError(`--remove matches ${
|
|
115
|
+
throw new GeneralError(`--remove matches ${candidates.length} staged forward-imports on this patch; ` +
|
|
117
116
|
`pass --creates to pick one:\n${list}`);
|
|
118
117
|
}
|
|
119
118
|
return { file, specifier, creates: '(no match)' };
|
|
@@ -142,7 +141,7 @@ function resolveRegistrationRemovalTarget(options, staged) {
|
|
|
142
141
|
const list = candidates
|
|
143
142
|
.map((entry) => ` - ${dependencyLabel('registration', registrationView(entry))}`)
|
|
144
143
|
.join('\n');
|
|
145
|
-
throw new GeneralError(`--remove matches ${
|
|
144
|
+
throw new GeneralError(`--remove matches ${candidates.length} staged registrations on this patch; ` +
|
|
146
145
|
`pass --creates to pick one:\n${list}`);
|
|
147
146
|
}
|
|
148
147
|
return { file, line, creates: '(no match)' };
|
|
@@ -218,7 +217,7 @@ export async function patchStagedDependencyCommand(projectRoot, identifier, opti
|
|
|
218
217
|
intro(isDryRun ? 'FireForge patch staged-dependency (dry run)' : 'FireForge patch staged-dependency');
|
|
219
218
|
const mode = modeFromOptions(options);
|
|
220
219
|
const kind = kindFromOptions(options);
|
|
221
|
-
// The patch queue loads
|
|
220
|
+
// The patch queue loads before the declaration fields resolve so
|
|
222
221
|
// `--remove` can infer `--creates` from the target patch's staged
|
|
223
222
|
// entries.
|
|
224
223
|
const { paths, manifest } = await requirePatchQueue(projectRoot);
|
|
@@ -233,9 +232,9 @@ export async function patchStagedDependencyCommand(projectRoot, identifier, opti
|
|
|
233
232
|
: mode === 'add'
|
|
234
233
|
? requireRegistrationOptions(options)
|
|
235
234
|
: resolveRegistrationRemovalTarget(options, targetPatch.stagedDependencies);
|
|
236
|
-
// Shape-check --add declarations against the loaded queue:
|
|
237
|
-
//
|
|
238
|
-
//
|
|
235
|
+
// Shape-check --add declarations against the loaded queue: a
|
|
236
|
+
// patch-name-shaped --creates/--file is refused now instead of surfacing
|
|
237
|
+
// later as an undischargeable staged-dependency-unused.
|
|
239
238
|
if (mode === 'add') {
|
|
240
239
|
const added = importDependency ?? registrationDependency;
|
|
241
240
|
if (added !== undefined) {
|
|
@@ -280,23 +279,18 @@ export async function patchStagedDependencyCommand(projectRoot, identifier, opti
|
|
|
280
279
|
const before = result.before.stagedDependencies;
|
|
281
280
|
const after = result.after.stagedDependencies;
|
|
282
281
|
info(`${targetPatch.filename}: ${describeStagedDependencyChange(countStagedEntries(before), countStagedEntries(after), mode, kind, target)}.`);
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
});
|
|
296
|
-
}
|
|
297
|
-
catch (historyError) {
|
|
298
|
-
warn(`History log append failed after patch staged-dependency committed (${targetPatch.filename}): ${toError(historyError).message}`);
|
|
299
|
-
}
|
|
282
|
+
await appendHistoryBestEffort(paths.patches, {
|
|
283
|
+
operation: 'patch-staged-dependency',
|
|
284
|
+
args: {
|
|
285
|
+
filename: targetPatch.filename,
|
|
286
|
+
mode,
|
|
287
|
+
kind,
|
|
288
|
+
before: before ?? {},
|
|
289
|
+
after: after ?? {},
|
|
290
|
+
},
|
|
291
|
+
...(options.yes === true ? { yes: true } : {}),
|
|
292
|
+
result: 'ok',
|
|
293
|
+
}, `patch staged-dependency committed (${targetPatch.filename})`);
|
|
300
294
|
outro('Patch staged-dependency complete');
|
|
301
295
|
}
|
|
302
296
|
/**
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `fireforge patch tier <name>`
|
|
2
|
+
* `fireforge patch tier <name>` sets or clears `PatchMetadata.tier` on a
|
|
3
3
|
* single patch without rewriting the `.patch` file body.
|
|
4
4
|
*
|
|
5
5
|
* Companion to `fireforge re-export <name> --tier <tier>`. Re-export is the
|
|
6
|
-
* right tool when the patch body itself needs regenerating
|
|
6
|
+
* right tool when the patch body itself needs regenerating. This subcommand
|
|
7
7
|
* covers the metadata-only adjustment, where the operator has discovered
|
|
8
8
|
* (from a `lint --per-patch` warning, say) that the threshold-tier override
|
|
9
9
|
* should be set but the patch body is already correct. Avoiding the
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
// SPDX-License-Identifier: EUPL-1.2
|
|
2
2
|
/**
|
|
3
|
-
* `fireforge patch tier <name>`
|
|
3
|
+
* `fireforge patch tier <name>` sets or clears `PatchMetadata.tier` on a
|
|
4
4
|
* single patch without rewriting the `.patch` file body.
|
|
5
5
|
*
|
|
6
6
|
* Companion to `fireforge re-export <name> --tier <tier>`. Re-export is the
|
|
7
|
-
* right tool when the patch body itself needs regenerating
|
|
7
|
+
* right tool when the patch body itself needs regenerating. This subcommand
|
|
8
8
|
* covers the metadata-only adjustment, where the operator has discovered
|
|
9
9
|
* (from a `lint --per-patch` warning, say) that the threshold-tier override
|
|
10
10
|
* should be set but the patch body is already correct. Avoiding the
|
|
@@ -15,12 +15,13 @@
|
|
|
15
15
|
* `--clear` must be supplied per invocation.
|
|
16
16
|
*/
|
|
17
17
|
import { Command, Option } from 'commander';
|
|
18
|
-
import {
|
|
18
|
+
import { confirmDestructive } from '../../core/destructive.js';
|
|
19
|
+
import { appendHistoryBestEffort } from '../../core/history-log.js';
|
|
19
20
|
import { updatePatchMetadata } from '../../core/patch-export.js';
|
|
20
21
|
import { InvalidArgumentError } from '../../errors/base.js';
|
|
21
|
-
import {
|
|
22
|
-
import { info, intro, outro, warn } from '../../utils/logger.js';
|
|
22
|
+
import { info, intro, outro } from '../../utils/logger.js';
|
|
23
23
|
import { addWaitLockOption, pickDefined, resolveWaitLockSeconds } from '../../utils/options.js';
|
|
24
|
+
import { proceedAfterDecision } from '../destructive-decision.js';
|
|
24
25
|
import { requirePatchQueue, requirePatchTarget } from './patch-context.js';
|
|
25
26
|
/**
|
|
26
27
|
* Runs the `patch tier` command: updates `PatchMetadata.tier` on the
|
|
@@ -34,8 +35,8 @@ export async function patchTierCommand(projectRoot, identifier, options = {}) {
|
|
|
34
35
|
const isDryRun = options.dryRun === true;
|
|
35
36
|
intro(isDryRun ? 'FireForge patch tier (dry run)' : 'FireForge patch tier');
|
|
36
37
|
// Mode mutex: a single invocation either sets or clears the tier.
|
|
37
|
-
// Combining both is ambiguous
|
|
38
|
-
//
|
|
38
|
+
// Combining both is ambiguous: the operator's intent is not obvious and
|
|
39
|
+
// silently picking one would mask the typo.
|
|
39
40
|
const setting = options.tier !== undefined;
|
|
40
41
|
const clearing = options.clear === true;
|
|
41
42
|
if (setting && clearing) {
|
|
@@ -71,16 +72,10 @@ export async function patchTierCommand(projectRoot, identifier, options = {}) {
|
|
|
71
72
|
yes: options.yes === true,
|
|
72
73
|
dryRun: isDryRun,
|
|
73
74
|
});
|
|
74
|
-
if (decision
|
|
75
|
-
outro('Dry run complete — no changes made');
|
|
75
|
+
if (!proceedAfterDecision(decision, 'Cancelled — no changes made'))
|
|
76
76
|
return;
|
|
77
|
-
}
|
|
78
|
-
if (decision === 'declined') {
|
|
79
|
-
outro('Cancelled — no changes made');
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
77
|
// Single write under the patch directory lock (delegated inside
|
|
83
|
-
// updatePatchMetadata). Setting routes through `updates
|
|
78
|
+
// updatePatchMetadata). Setting routes through `updates`. Clearing
|
|
84
79
|
// routes through `unsetFields` so TypeScript's exact optional types
|
|
85
80
|
// do not have to carry an explicit `undefined` on the `tier` field.
|
|
86
81
|
if (after !== undefined) {
|
|
@@ -92,21 +87,16 @@ export async function patchTierCommand(projectRoot, identifier, options = {}) {
|
|
|
92
87
|
else {
|
|
93
88
|
await updatePatchMetadata(paths.patches, target.filename, {}, ['tier']);
|
|
94
89
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
catch (historyError) {
|
|
108
|
-
warn(`History log append failed after patch tier committed (${target.filename}): ${toError(historyError).message}`);
|
|
109
|
-
}
|
|
90
|
+
await appendHistoryBestEffort(paths.patches, {
|
|
91
|
+
operation: 'patch-tier',
|
|
92
|
+
args: {
|
|
93
|
+
filename: target.filename,
|
|
94
|
+
...(before !== undefined ? { before } : {}),
|
|
95
|
+
...(after !== undefined ? { after } : {}),
|
|
96
|
+
},
|
|
97
|
+
...(options.yes === true ? { yes: true } : {}),
|
|
98
|
+
result: 'ok',
|
|
99
|
+
}, `patch tier committed (${target.filename})`);
|
|
110
100
|
info(`${target.filename}: ${action}.`);
|
|
111
101
|
outro('Patch tier complete');
|
|
112
102
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structural equality for patch rename maps, shared by the placement-mode
|
|
3
|
+
* export preview/commit check (`export-flow.ts`) and `patch reorder`'s
|
|
4
|
+
* under-lock drift check. Both previously carried a byte-identical copy of
|
|
5
|
+
* the sorted-entries comparison. One helper keeps the two commit gates from
|
|
6
|
+
* drifting.
|
|
7
|
+
*/
|
|
8
|
+
import type { PatchRenameEntry } from '../core/patch-manifest.js';
|
|
9
|
+
/**
|
|
10
|
+
* Rename-map entries ordered by target order, so previews, history entries
|
|
11
|
+
* and equality checks all walk the queue in its final on-disk order.
|
|
12
|
+
*/
|
|
13
|
+
export declare function getSortedRenameEntries(renameMap: Map<string, PatchRenameEntry>): Array<[string, PatchRenameEntry]>;
|
|
14
|
+
/**
|
|
15
|
+
* Compares two rename maps entry by entry after sorting both by target
|
|
16
|
+
* order. Equal when every (current filename, new filename, new order)
|
|
17
|
+
* triple matches positionally.
|
|
18
|
+
*/
|
|
19
|
+
export declare function renameMapsEqual(left: Map<string, PatchRenameEntry>, right: Map<string, PatchRenameEntry>): boolean;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EUPL-1.2
|
|
2
|
+
/**
|
|
3
|
+
* Structural equality for patch rename maps, shared by the placement-mode
|
|
4
|
+
* export preview/commit check (`export-flow.ts`) and `patch reorder`'s
|
|
5
|
+
* under-lock drift check. Both previously carried a byte-identical copy of
|
|
6
|
+
* the sorted-entries comparison. One helper keeps the two commit gates from
|
|
7
|
+
* drifting.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Rename-map entries ordered by target order, so previews, history entries
|
|
11
|
+
* and equality checks all walk the queue in its final on-disk order.
|
|
12
|
+
*/
|
|
13
|
+
export function getSortedRenameEntries(renameMap) {
|
|
14
|
+
return Array.from(renameMap.entries()).sort((a, b) => a[1].newOrder - b[1].newOrder);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Compares two rename maps entry by entry after sorting both by target
|
|
18
|
+
* order. Equal when every (current filename, new filename, new order)
|
|
19
|
+
* triple matches positionally.
|
|
20
|
+
*/
|
|
21
|
+
export function renameMapsEqual(left, right) {
|
|
22
|
+
const leftEntries = getSortedRenameEntries(left);
|
|
23
|
+
const rightEntries = getSortedRenameEntries(right);
|
|
24
|
+
if (leftEntries.length !== rightEntries.length) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
return leftEntries.every(([leftFilename, leftEntry], index) => {
|
|
28
|
+
const rightTuple = rightEntries[index];
|
|
29
|
+
if (!rightTuple)
|
|
30
|
+
return false;
|
|
31
|
+
const [rightFilename, rightEntry] = rightTuple;
|
|
32
|
+
return (leftFilename === rightFilename &&
|
|
33
|
+
leftEntry.newFilename === rightEntry.newFilename &&
|
|
34
|
+
leftEntry.newOrder === rightEntry.newOrder);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Clears `pendingResolution` from `state.json` transactionally.
|
|
3
|
+
*
|
|
4
|
+
* Five commands (`doctor --clear-resolution`, `resolve`, `rebase --continue`,
|
|
5
|
+
* `rebase --abort`, and the rebase patch loop) had each copied the same
|
|
6
|
+
* spread-then-`delete` updater. The clear routes through `updateState` instead
|
|
7
|
+
* of a load/modify/save pair so the updater runs inside the state-file lock
|
|
8
|
+
* against the freshest on-disk state: a concurrent write to an unrelated key
|
|
9
|
+
* (`buildMode`, `baseCommit`) is then not clobbered by a stale reload. Keeping
|
|
10
|
+
* it in one place stops the copies from drifting apart.
|
|
11
|
+
*
|
|
12
|
+
* A no-op when nothing is pending, so callers need no guard of their own.
|
|
13
|
+
* @param projectRoot - Project root holding `.fireforge/state.json`.
|
|
14
|
+
*/
|
|
15
|
+
export declare function clearPendingResolution(projectRoot: string): Promise<void>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EUPL-1.2
|
|
2
|
+
import { updateState } from '../core/config.js';
|
|
3
|
+
/**
|
|
4
|
+
* Clears `pendingResolution` from `state.json` transactionally.
|
|
5
|
+
*
|
|
6
|
+
* Five commands (`doctor --clear-resolution`, `resolve`, `rebase --continue`,
|
|
7
|
+
* `rebase --abort`, and the rebase patch loop) had each copied the same
|
|
8
|
+
* spread-then-`delete` updater. The clear routes through `updateState` instead
|
|
9
|
+
* of a load/modify/save pair so the updater runs inside the state-file lock
|
|
10
|
+
* against the freshest on-disk state: a concurrent write to an unrelated key
|
|
11
|
+
* (`buildMode`, `baseCommit`) is then not clobbered by a stale reload. Keeping
|
|
12
|
+
* it in one place stops the copies from drifting apart.
|
|
13
|
+
*
|
|
14
|
+
* A no-op when nothing is pending, so callers need no guard of their own.
|
|
15
|
+
* @param projectRoot - Project root holding `.fireforge/state.json`.
|
|
16
|
+
*/
|
|
17
|
+
export async function clearPendingResolution(projectRoot) {
|
|
18
|
+
await updateState(projectRoot, (current) => {
|
|
19
|
+
if (!current.pendingResolution)
|
|
20
|
+
return current;
|
|
21
|
+
const next = { ...current };
|
|
22
|
+
delete next.pendingResolution;
|
|
23
|
+
return next;
|
|
24
|
+
});
|
|
25
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { getProjectPaths } from '../core/config.js';
|
|
2
1
|
import type { PatchesManifest, PatchMetadata } from '../types/commands/index.js';
|
|
2
|
+
import type { ProjectPaths } from '../types/config.js';
|
|
3
3
|
/**
|
|
4
4
|
* Shared per-run context for the adjacency advisory: the classification
|
|
5
5
|
* inputs computed once by `reExportCommand`, plus the collection of
|
|
@@ -18,24 +18,46 @@ export interface AdjacentUnmanagedContext {
|
|
|
18
18
|
approvedUnmanaged: ReadonlySet<string>;
|
|
19
19
|
/** Approved paths actually met this run, so unused ones can be surfaced. */
|
|
20
20
|
approvedSeen: Set<string>;
|
|
21
|
+
/**
|
|
22
|
+
* Offenders collected across the loop. `files` stays the bare paths that
|
|
23
|
+
* downstream consumers already read. `anchored` carries the same entries
|
|
24
|
+
* with the owned directory that made each one adjacent, so the run-level
|
|
25
|
+
* refusal can name the anchor without re-deriving it.
|
|
26
|
+
*/
|
|
21
27
|
refusals: {
|
|
22
28
|
patchFilename: string;
|
|
23
29
|
files: string[];
|
|
30
|
+
anchored: string[];
|
|
24
31
|
}[];
|
|
25
32
|
}
|
|
26
33
|
/** Returns the subset of `files` that no longer exist under `engineDir`. */
|
|
27
34
|
export declare function findMissingFiles(engineDir: string, files: readonly string[]): Promise<string[]>;
|
|
35
|
+
/**
|
|
36
|
+
* One unmanaged file and the owned directory that made it adjacent.
|
|
37
|
+
*
|
|
38
|
+
* The anchor is what an unattended run could not previously recover: the
|
|
39
|
+
* notice named the offending file and the patch, but not which of the
|
|
40
|
+
* patch's owned locations the file sits beside, so triaging a refusal on a
|
|
41
|
+
* patch that owns files in several directories meant re-deriving the
|
|
42
|
+
* adjacency by hand from the manifest.
|
|
43
|
+
*/
|
|
44
|
+
export interface AdjacentUnmanagedFile {
|
|
45
|
+
/** Engine-relative path of the unmanaged file. */
|
|
46
|
+
file: string;
|
|
47
|
+
/** Directory holding at least one file this patch owns. */
|
|
48
|
+
anchorDir: string;
|
|
49
|
+
}
|
|
28
50
|
/**
|
|
29
51
|
* Emits the scan-less advisory for one patch: missing manifest files and
|
|
30
52
|
* unmanaged files adjacent to the patch's ownership. When
|
|
31
53
|
* `--refuse-adjacent-unmanaged` is set and any unmanaged adjacent file
|
|
32
|
-
* exists, records the patch into `ctx.refusals` and returns true
|
|
54
|
+
* exists, records the patch into `ctx.refusals` and returns true. The
|
|
33
55
|
* caller then skips the write for this patch and converts the collection
|
|
34
56
|
* into one run-level non-zero refusal after the loop.
|
|
35
57
|
*/
|
|
36
58
|
export declare function reportAdjacentUnmanagedFiles(args: {
|
|
37
59
|
patch: PatchMetadata;
|
|
38
|
-
paths:
|
|
60
|
+
paths: ProjectPaths;
|
|
39
61
|
manifest: PatchesManifest;
|
|
40
62
|
currentFilesAffected: readonly string[];
|
|
41
63
|
ctx: AdjacentUnmanagedContext;
|