@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
|
@@ -20,9 +20,9 @@ import { pickDefined } from '../utils/options.js';
|
|
|
20
20
|
/**
|
|
21
21
|
* Errno codes for filesystem-level failures against the working file.
|
|
22
22
|
* These are safe to fall through as "unmanaged" because they describe the
|
|
23
|
-
*
|
|
24
|
-
* Manifest / patch-parse / PatchError failures do
|
|
25
|
-
* are re-thrown so the root cause surfaces instead of being silently
|
|
23
|
+
* state of the engine directory rather than the integrity of the patch
|
|
24
|
+
* stack. Manifest / patch-parse / PatchError failures do not match this set
|
|
25
|
+
* and are re-thrown so the root cause surfaces instead of being silently
|
|
26
26
|
* reclassified as a spurious dirty file.
|
|
27
27
|
*/
|
|
28
28
|
const SAFE_IO_FALLBACK_CODES = new Set(['ENOENT', 'EACCES', 'EPERM', 'EISDIR', 'EBUSY']);
|
|
@@ -48,7 +48,7 @@ async function getUnmanagedDirtyFiles(engineDir, patchesDir, dirtyFiles) {
|
|
|
48
48
|
}
|
|
49
49
|
catch (error) {
|
|
50
50
|
// PatchError, manifest corruption, and patch-parse failures are
|
|
51
|
-
//
|
|
51
|
+
// structural problems with the patch stack. Masking them as an
|
|
52
52
|
// "unmanaged dirty file" would let the user `--force` past a real
|
|
53
53
|
// root cause (e.g. "patch 003 missing from manifest") and compound
|
|
54
54
|
// the corruption. Only swallow the pure-IO fallback cases where
|
|
@@ -91,7 +91,7 @@ async function checkUncommittedPatchFiles(engineDir, patchesDir, forceImport) {
|
|
|
91
91
|
// already carries the patch's effects. The import below still
|
|
92
92
|
// re-applies each patch (a no-op for files whose contents already
|
|
93
93
|
// match), so phrase the line as "no resync needed" rather than
|
|
94
|
-
// "patches already applied"
|
|
94
|
+
// "patches already applied". The latter contradicts the "Applied N
|
|
95
95
|
// patch(es)" summary `applyPatchesWithContinue` prints next.
|
|
96
96
|
info('Patch-touched files already match the stored patch stack — no engine resync needed before re-applying.');
|
|
97
97
|
}
|
|
@@ -160,7 +160,7 @@ async function checkEngineDrift(engineDir, baseCommit, forceImport, acceptPrompt
|
|
|
160
160
|
const currentHead = await getHead(engineDir);
|
|
161
161
|
if (currentHead === baseCommit)
|
|
162
162
|
return true;
|
|
163
|
-
// `--yes` and `--force` both answer this prompt
|
|
163
|
+
// `--yes` and `--force` both answer this prompt. Only `--force` also
|
|
164
164
|
// waives the patch-integrity gate further down.
|
|
165
165
|
const promptAnswered = forceImport || acceptPrompts;
|
|
166
166
|
if (!stdioIsInteractive()) {
|
|
@@ -193,7 +193,7 @@ async function checkEngineDrift(engineDir, baseCommit, forceImport, acceptPrompt
|
|
|
193
193
|
* without the `.patch` suffix (matching `applyPatchesWithContinue`'s
|
|
194
194
|
* `untilFilename` resolver).
|
|
195
195
|
*
|
|
196
|
-
* Returns an empty set when no match is found
|
|
196
|
+
* Returns an empty set when no match is found. The caller treats that as
|
|
197
197
|
* "no scope filter applies" so the import behaves identically to an
|
|
198
198
|
* unrecognised `--until` target (which `applyPatchesWithContinue` will
|
|
199
199
|
* later surface as a normal error).
|
|
@@ -202,11 +202,11 @@ function buildUntilFilenameSet(patches, until) {
|
|
|
202
202
|
const set = new Set();
|
|
203
203
|
if (until === undefined)
|
|
204
204
|
return set;
|
|
205
|
-
// Resolve the identifier with the
|
|
206
|
-
// (`matchesUntilFilename` accepts filenames, extension-less names,
|
|
205
|
+
// Resolve the identifier with the same matcher the apply loop uses
|
|
206
|
+
// (`matchesUntilFilename` accepts filenames, extension-less names, and
|
|
207
207
|
// bare ordinals). A filename-only match makes `import --until 5` produce
|
|
208
|
-
// an
|
|
209
|
-
// filter every in-range issue away
|
|
208
|
+
// an empty scope set: the UI previews "0 patches", the integrity gates
|
|
209
|
+
// filter every in-range issue away, and the apply loop then applies
|
|
210
210
|
// patches 1..5 anyway.
|
|
211
211
|
const target = patches.find((p) => matchesUntilFilename(p.filename, until));
|
|
212
212
|
if (!target)
|
|
@@ -228,8 +228,8 @@ async function assertScopedManifestConsistency(patchesDir, untilFilenameSet, unt
|
|
|
228
228
|
const manifestConsistencyIssues = await validatePatchesManifestConsistency(patchesDir);
|
|
229
229
|
const scopedManifestIssues = until !== undefined
|
|
230
230
|
? manifestConsistencyIssues.filter((issue) =>
|
|
231
|
-
// Global (manifest-level) issues have no specific filename to
|
|
232
|
-
// against
|
|
231
|
+
// Global (manifest-level) issues have no specific filename to
|
|
232
|
+
// scope against: a missing or unparseable patches.json blocks any
|
|
233
233
|
// import. Per-patch issues only block when the patch is in scope.
|
|
234
234
|
issue.code === 'manifest-missing' ||
|
|
235
235
|
issue.code === 'manifest-invalid' ||
|
|
@@ -249,7 +249,7 @@ async function assertScopedManifestConsistency(patchesDir, untilFilenameSet, unt
|
|
|
249
249
|
/**
|
|
250
250
|
* Prints advisory version-compatibility warnings for every in-scope patch
|
|
251
251
|
* whose recorded source version differs meaningfully from the configured
|
|
252
|
-
* Firefox version. Advisory only
|
|
252
|
+
* Firefox version. Advisory only. Never blocks the import.
|
|
253
253
|
*/
|
|
254
254
|
async function warnVersionCompatibility(projectRoot, manifest, untilFilenameSet, until) {
|
|
255
255
|
if (!manifest)
|
|
@@ -269,7 +269,7 @@ async function warnVersionCompatibility(projectRoot, manifest, untilFilenameSet,
|
|
|
269
269
|
}
|
|
270
270
|
/**
|
|
271
271
|
* Patch-integrity gate: surfaces orphaned-modification issues scoped to
|
|
272
|
-
* the `--until` range and decides whether the import may proceed
|
|
272
|
+
* the `--until` range and decides whether the import may proceed.
|
|
273
273
|
* `--force` continues with a warning, non-TTY refuses loudly, and an
|
|
274
274
|
* interactive operator is prompted. Returns false when the import should
|
|
275
275
|
* stop (the cancel outro has been printed).
|
|
@@ -413,8 +413,8 @@ export async function importCommand(projectRoot, options = {}) {
|
|
|
413
413
|
success(` ${result.patch.filename}${suffix}`);
|
|
414
414
|
}
|
|
415
415
|
// The re-applied queue may have moved components.conf away from what
|
|
416
|
-
// the last full build compiled in
|
|
417
|
-
// next test refusal.
|
|
416
|
+
// the last full build compiled in, so surface that now instead of at
|
|
417
|
+
// the next test refusal.
|
|
418
418
|
await warnIfStaticComponentsStale(projectRoot, paths.engine);
|
|
419
419
|
outro('All patches applied successfully!');
|
|
420
420
|
}
|
|
@@ -432,21 +432,14 @@ export function registerImport(program, { getProjectRoot, withErrorHandling }) {
|
|
|
432
432
|
.description('Apply patches from the patches directory')
|
|
433
433
|
.option('--continue', 'Continue applying patches even if one fails')
|
|
434
434
|
.option('-f, --force', 'Proceed despite engine drift and overwrite unmanaged changes in patch-touched files')
|
|
435
|
-
//
|
|
436
|
-
// drift prompt
|
|
435
|
+
// Not an alias of --force. `--force` waives two orthogonal things: the
|
|
436
|
+
// drift prompt and the patch-integrity gate. `--yes` waives only the
|
|
437
437
|
// prompt, so a scripted import can run unattended while the integrity
|
|
438
|
-
// refusal stays armed
|
|
438
|
+
// refusal stays armed, which is the guard you want in CI.
|
|
439
439
|
.option('-y, --yes', 'Answer the drift prompt non-interactively. Unlike --force, this does NOT waive the patch-integrity gate.')
|
|
440
|
-
.option('--until <patch>', 'Apply patches only up to and including this patch
|
|
441
|
-
.option('--stop-at <patch>', 'Alias for --until')
|
|
440
|
+
.option('--until <patch>', 'Apply patches only up to and including this patch')
|
|
442
441
|
.option('--dry-run', 'Preview which patches would be applied without modifying the engine')
|
|
443
442
|
.action(withErrorHandling(async (options) => {
|
|
444
|
-
|
|
445
|
-
const merged = { ...options };
|
|
446
|
-
if (merged.until === undefined && merged.stopAt !== undefined) {
|
|
447
|
-
merged.until = merged.stopAt;
|
|
448
|
-
}
|
|
449
|
-
delete merged.stopAt;
|
|
450
|
-
await importCommand(getProjectRoot(), pickDefined(merged));
|
|
443
|
+
await importCommand(getProjectRoot(), pickDefined(options));
|
|
451
444
|
}));
|
|
452
445
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { getProjectPaths } from '../core/config.js';
|
|
2
1
|
import type { LintCommandOptions } from '../types/commands/index.js';
|
|
2
|
+
import type { ProjectPaths } from '../types/config.js';
|
|
3
3
|
/**
|
|
4
4
|
* Lints each patch in the queue as its own isolated diff, honouring
|
|
5
5
|
* per-patch `lintIgnore` entries. Cross-patch rules still run once over
|
|
@@ -7,4 +7,4 @@ import type { LintCommandOptions } from '../types/commands/index.js';
|
|
|
7
7
|
* With `options.patches` set, only the named subset is linted (and the
|
|
8
8
|
* queue-level findings are scoped to files those patches touch).
|
|
9
9
|
*/
|
|
10
|
-
export declare function lintPerPatch(projectRoot: string, paths:
|
|
10
|
+
export declare function lintPerPatch(projectRoot: string, paths: ProjectPaths, options?: LintCommandOptions): Promise<void>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// SPDX-License-Identifier: EUPL-1.2
|
|
2
2
|
import { join } from 'node:path';
|
|
3
|
-
import {
|
|
3
|
+
import { loadConfig } from '../core/config.js';
|
|
4
4
|
import { getDiffForFilesAgainstHead } from '../core/git-diff.js';
|
|
5
5
|
import { withPrivateGitIndex } from '../core/git-readonly-index.js';
|
|
6
6
|
import { buildPatchQueueContext, countNonBinaryDiffLines, formatPatchLintIssue, lintExportedPatch, lintPatchQueue, resolvePatchSizeTier, } from '../core/patch-lint.js';
|
|
@@ -28,7 +28,7 @@ function emitTierNotice(filename, files, tier) {
|
|
|
28
28
|
/**
|
|
29
29
|
* Lints one queued patch against its own isolated diff, reusing the cache entry
|
|
30
30
|
* when the cache key matches. Returns the outcome and the patch's (unprefixed)
|
|
31
|
-
* issues without touching shared state
|
|
31
|
+
* issues without touching shared state. The orchestrator applies the tier
|
|
32
32
|
* notice, issue prefixing, and cache write in patch order after the pool
|
|
33
33
|
* drains, so the bounded concurrency cannot reorder output. Returns `skipped`
|
|
34
34
|
* (no files present / empty diff), `cached`, or `linted`.
|
|
@@ -135,8 +135,8 @@ const SUPPRESSED_SIZE_CHECKS = new Set([
|
|
|
135
135
|
* Applies the per-patch results in patch order so the bounded concurrency
|
|
136
136
|
* cannot reorder output: emits each tier notice, the once-only run-level
|
|
137
137
|
* checkJs errors (before the first freshly linted patch's issues), the
|
|
138
|
-
* filename-prefixed issue rows, and the cache writes
|
|
139
|
-
* a serial run produced. Returns the run tallies.
|
|
138
|
+
* filename-prefixed issue rows, and the cache writes, all in the same
|
|
139
|
+
* sequence a serial run produced. Returns the run tallies.
|
|
140
140
|
*/
|
|
141
141
|
async function applyPerPatchResults(subset, results, issues, checkJs, cache) {
|
|
142
142
|
const totals = {
|
|
@@ -158,8 +158,8 @@ async function applyPerPatchResults(subset, results, issues, checkJs, cache) {
|
|
|
158
158
|
}
|
|
159
159
|
emitTierNotice(patch.filename, result.existingFiles, patch.tier);
|
|
160
160
|
// Run-level checkJs errors are emitted once, before the first
|
|
161
|
-
// non-skipped patch's own issues
|
|
162
|
-
//
|
|
161
|
+
// non-skipped patch's own issues, matching the serial emit point.
|
|
162
|
+
// Not gated on `result.usedCheckJs`: global findings are
|
|
163
163
|
// run-level and never cached, so gating drops them entirely on an
|
|
164
164
|
// all-cache-hit run and lets a warm run report fewer errors than a cold
|
|
165
165
|
// one. PerRunCheckJs builds its program lazily, so the cost only
|
|
@@ -169,13 +169,21 @@ async function applyPerPatchResults(subset, results, issues, checkJs, cache) {
|
|
|
169
169
|
issues.push(...(await checkJs.getGlobal()));
|
|
170
170
|
}
|
|
171
171
|
if (result.cacheWrite && cache) {
|
|
172
|
-
setCachedPerPatchLintIssues(
|
|
172
|
+
setCachedPerPatchLintIssues({
|
|
173
|
+
cache,
|
|
174
|
+
patchFilename: patch.filename,
|
|
175
|
+
key: result.cacheWrite.key,
|
|
176
|
+
issues: result.rawIssues,
|
|
177
|
+
suppressed: result.suppressedIssues,
|
|
178
|
+
lineCount: result.lineCount,
|
|
179
|
+
lintIgnore: result.cacheWrite.lintIgnore,
|
|
180
|
+
});
|
|
173
181
|
totals.cacheDirty = true;
|
|
174
182
|
}
|
|
175
183
|
for (const issue of result.rawIssues) {
|
|
176
184
|
issues.push({ ...issue, file: `${patch.filename} :: ${issue.file}` });
|
|
177
185
|
}
|
|
178
|
-
// A waived size finding still reports its
|
|
186
|
+
// A waived size finding still reports its measurement: the finding stays
|
|
179
187
|
// suppressed (no exit-code / --max-warnings effect) but the current count
|
|
180
188
|
// is readable from the tool that enforces it, so a waiver's cited size
|
|
181
189
|
// can be calibrated without hand-measuring.
|
|
@@ -267,7 +275,7 @@ function reportPerPatchOutcome(issues, linted, skipped, options) {
|
|
|
267
275
|
/**
|
|
268
276
|
* Resolves the `--patches <name…>` subset filter against the manifest,
|
|
269
277
|
* matching each requested name tolerantly (exact filename, filename ±
|
|
270
|
-
* `.patch`, or the manifest `name` field). Throws listing the available
|
|
278
|
+
* `.patch`, the bare order number, or the manifest `name` field). Throws listing the available
|
|
271
279
|
* patches when a requested name matches none, so a typo fails loud rather
|
|
272
280
|
* than silently linting nothing.
|
|
273
281
|
*/
|
|
@@ -278,7 +286,14 @@ function selectPatchSubset(manifest, requested) {
|
|
|
278
286
|
.filter((entry) => entry.length > 0);
|
|
279
287
|
const patchAliases = (p) => {
|
|
280
288
|
const aliases = new Set([p.filename, p.filename.replace(/\.patch$/, ''), p.name]);
|
|
289
|
+
// The bare order number, both as the manifest records it and as the
|
|
290
|
+
// filename spells it (`2` and `002`). The refusal message offers stems,
|
|
291
|
+
// and an operator reading `102-ui-canvas-tiles.patch` in a lint finding
|
|
292
|
+
// reaches for `102` first.
|
|
293
|
+
aliases.add(String(p.order));
|
|
281
294
|
const match = /^(\d+)-([a-z]+)-(.+)\.patch$/.exec(p.filename);
|
|
295
|
+
if (match?.[1])
|
|
296
|
+
aliases.add(match[1]);
|
|
282
297
|
if (match?.[2] && match[3]) {
|
|
283
298
|
aliases.add(`${match[2]}-${match[3]}`);
|
|
284
299
|
aliases.add(match[3]);
|
|
@@ -296,7 +311,7 @@ function selectPatchSubset(manifest, requested) {
|
|
|
296
311
|
if (found.length === 0) {
|
|
297
312
|
const available = manifest.patches.map((p) => p.filename).join(', ');
|
|
298
313
|
throw new GeneralError(`No patch in the queue matches "${name}". In --per-patch mode, positional arguments ` +
|
|
299
|
-
`and --patches select patches (filename, stem, manifest name, or slug) — not engine ` +
|
|
314
|
+
`and --patches select patches (filename, stem, order number, manifest name, or slug) — not engine ` +
|
|
300
315
|
`files; drop --per-patch to lint engine paths. Available patches: ${available}`);
|
|
301
316
|
}
|
|
302
317
|
for (const p of found) {
|
|
@@ -316,7 +331,7 @@ function selectPatchSubset(manifest, requested) {
|
|
|
316
331
|
* queue-level findings are scoped to files those patches touch).
|
|
317
332
|
*/
|
|
318
333
|
export async function lintPerPatch(projectRoot, paths, options = {}) {
|
|
319
|
-
// Read-only to the operator, an index
|
|
334
|
+
// Read-only to the operator, but an index writer to git: the per-patch diffs
|
|
320
335
|
// run `git diff HEAD` (and, for untracked binaries, a real stage/unstage
|
|
321
336
|
// pair) against the primary checkout. A private index absorbs all of it
|
|
322
337
|
// so a concurrent `fireforge test` still gets an evidential verdict.
|
|
@@ -364,7 +379,7 @@ async function lintPerPatchInner(projectRoot, paths, options = {}) {
|
|
|
364
379
|
});
|
|
365
380
|
}
|
|
366
381
|
// With `--patches`, the checkJs program roots at only the subset's owned
|
|
367
|
-
// files
|
|
382
|
+
// files. The full queue stays resolvable, so a cold subset run costs the
|
|
368
383
|
// subset's import closure instead of the whole queue.
|
|
369
384
|
const checkJs = buildPerRunCheckJs(projectRoot, paths, config, ctx, isSubset ? subsetNames : undefined);
|
|
370
385
|
// Lint patches concurrently, then apply every side effect in patch order so
|
|
@@ -3,27 +3,26 @@
|
|
|
3
3
|
* `re-export`.
|
|
4
4
|
*
|
|
5
5
|
* The dominant fixed cost of patch lint is one `ts.createProgram` over the
|
|
6
|
-
* queue's patch-owned `.sys.mjs` files
|
|
7
|
-
* This controller builds that program at most
|
|
6
|
+
* queue's patch-owned `.sys.mjs` files, tens of seconds on a large queue.
|
|
7
|
+
* This controller builds that program at most once per command invocation
|
|
8
8
|
* (lazily, promise-memoised) and lets callers slice per-patch findings out of
|
|
9
9
|
* the grouped result. Three levers keep the cost paid only when it buys
|
|
10
10
|
* something:
|
|
11
11
|
*
|
|
12
|
-
* -
|
|
13
|
-
* -
|
|
14
|
-
* program's roots are only the subset's owned files
|
|
12
|
+
* - Lazy build: nothing is built until the first cache miss asks.
|
|
13
|
+
* - Root scoping (`rootScopePatches`): with `--patches <subset>` the
|
|
14
|
+
* program's roots are only the subset's owned files. The full queue stays
|
|
15
15
|
* resolvable, so cross-patch imports type-check identically while
|
|
16
16
|
* unrelated files are never parsed.
|
|
17
|
-
* -
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* anything.
|
|
17
|
+
* - Warm-run probe: run-level ("global") checkJs findings come only from a
|
|
18
|
+
* missing `typescript` package or an unreadable shim, never from the built
|
|
19
|
+
* program, so an all-cache-hit run satisfies "warm never reports less than
|
|
20
|
+
* cold" via `probeCheckJsGlobalIssues` instead of building anything.
|
|
22
21
|
*/
|
|
23
|
-
import type { getProjectPaths, loadConfig } from '../core/config.js';
|
|
24
22
|
import { type GroupedCheckJsResult } from '../core/patch-lint-checkjs.js';
|
|
25
23
|
import type { PatchQueueContext } from '../core/patch-lint-cross.js';
|
|
26
24
|
import type { PatchLintIssue } from '../types/commands/index.js';
|
|
25
|
+
import type { FireForgeConfig, ProjectPaths } from '../types/config.js';
|
|
27
26
|
/**
|
|
28
27
|
* Queue-wide checkJs program built once per run and sliced per patch, so a
|
|
29
28
|
* single type regression surfaces once against its owning patch instead of
|
|
@@ -32,7 +31,7 @@ import type { PatchLintIssue } from '../types/commands/index.js';
|
|
|
32
31
|
export interface PerRunCheckJs {
|
|
33
32
|
/** Patch filename → the checkJs-relevant files that patch creates. */
|
|
34
33
|
ownedByPatch: Map<string, Set<string>>;
|
|
35
|
-
/** Every checkJs-relevant file in the queue (sys + test scripts)
|
|
34
|
+
/** Every checkJs-relevant file in the queue (sys + test scripts), the
|
|
36
35
|
* resolution universe the program can see. Callers use it to detect
|
|
37
36
|
* files the hoisted program has never heard of (fresh `--scan`
|
|
38
37
|
* adoptions) and fall back to a per-patch build. */
|
|
@@ -43,10 +42,10 @@ export interface PerRunCheckJs {
|
|
|
43
42
|
getGrouped: () => Promise<GroupedCheckJsResult>;
|
|
44
43
|
/** Run-level checkJs errors (e.g. TypeScript missing). When the program
|
|
45
44
|
* was never built (all-warm run) this probes the two global failure
|
|
46
|
-
*
|
|
45
|
+
* sources directly instead of building it, which is safe because the
|
|
47
46
|
* built program never contributes globals of its own. */
|
|
48
47
|
getGlobal: () => Promise<PatchLintIssue[]>;
|
|
49
|
-
/** The byFile slices for `files` (globals
|
|
48
|
+
/** The byFile slices for `files` (globals are excluded because they
|
|
50
49
|
* are run-level, never cached, and emitted once per invocation via
|
|
51
50
|
* `getGlobal`). Feed to `LintExportedPatchOptions.precomputedCheckJs`. */
|
|
52
51
|
sliceFor: (files: ReadonlySet<string>) => Promise<PatchLintIssue[]>;
|
|
@@ -61,4 +60,4 @@ export interface PerRunCheckJs {
|
|
|
61
60
|
* subset's owned files and the test-file pass runs only the subset's own
|
|
62
61
|
* scripts (head.js discovery still spans the queue).
|
|
63
62
|
*/
|
|
64
|
-
export declare function buildPerRunCheckJs(projectRoot: string, paths:
|
|
63
|
+
export declare function buildPerRunCheckJs(projectRoot: string, paths: ProjectPaths, config: FireForgeConfig, ctx: PatchQueueContext, rootScopePatches?: ReadonlySet<string>): PerRunCheckJs | undefined;
|
|
@@ -4,22 +4,21 @@
|
|
|
4
4
|
* `re-export`.
|
|
5
5
|
*
|
|
6
6
|
* The dominant fixed cost of patch lint is one `ts.createProgram` over the
|
|
7
|
-
* queue's patch-owned `.sys.mjs` files
|
|
8
|
-
* This controller builds that program at most
|
|
7
|
+
* queue's patch-owned `.sys.mjs` files, tens of seconds on a large queue.
|
|
8
|
+
* This controller builds that program at most once per command invocation
|
|
9
9
|
* (lazily, promise-memoised) and lets callers slice per-patch findings out of
|
|
10
10
|
* the grouped result. Three levers keep the cost paid only when it buys
|
|
11
11
|
* something:
|
|
12
12
|
*
|
|
13
|
-
* -
|
|
14
|
-
* -
|
|
15
|
-
* program's roots are only the subset's owned files
|
|
13
|
+
* - Lazy build: nothing is built until the first cache miss asks.
|
|
14
|
+
* - Root scoping (`rootScopePatches`): with `--patches <subset>` the
|
|
15
|
+
* program's roots are only the subset's owned files. The full queue stays
|
|
16
16
|
* resolvable, so cross-patch imports type-check identically while
|
|
17
17
|
* unrelated files are never parsed.
|
|
18
|
-
* -
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* anything.
|
|
18
|
+
* - Warm-run probe: run-level ("global") checkJs findings come only from a
|
|
19
|
+
* missing `typescript` package or an unreadable shim, never from the built
|
|
20
|
+
* program, so an all-cache-hit run satisfies "warm never reports less than
|
|
21
|
+
* cold" via `probeCheckJsGlobalIssues` instead of building anything.
|
|
23
22
|
*/
|
|
24
23
|
import { invokePatchLintCheckJsGrouped, probeCheckJsGlobalIssues, runCheckJsTestFilesGrouped, } from '../core/patch-lint-checkjs.js';
|
|
25
24
|
import { isTestScriptFile, resolvePatchOwnedSysMjs, resolvePatchOwnedTestScripts, } from '../core/patch-lint-ownership.js';
|
|
@@ -52,7 +51,7 @@ export function buildPerRunCheckJs(projectRoot, paths, config, ctx, rootScopePat
|
|
|
52
51
|
for (const f of files)
|
|
53
52
|
resolutionSet.add(f);
|
|
54
53
|
}
|
|
55
|
-
// The subset's owned files, split by program kind
|
|
54
|
+
// The subset's owned files, split by program kind. Undefined = full queue.
|
|
56
55
|
let scopedRoots;
|
|
57
56
|
if (rootScopePatches !== undefined) {
|
|
58
57
|
scopedRoots = new Set();
|
|
@@ -63,9 +62,9 @@ export function buildPerRunCheckJs(projectRoot, paths, config, ctx, rootScopePat
|
|
|
63
62
|
scopedRoots.add(f);
|
|
64
63
|
}
|
|
65
64
|
}
|
|
66
|
-
// One build for the whole run: the queue-wide `.sys.mjs` program plus
|
|
67
|
-
// when `patchLint.checkJsTestFiles` is on
|
|
68
|
-
//
|
|
65
|
+
// One build for the whole run: the queue-wide `.sys.mjs` program, plus
|
|
66
|
+
// (when `patchLint.checkJsTestFiles` is on) one small script-scope
|
|
67
|
+
// program per patch-owned test file, merged by file.
|
|
69
68
|
const buildAll = async () => {
|
|
70
69
|
const sys = await invokePatchLintCheckJsGrouped(paths.engine, resolvePatchOwnedSysMjs(new Set(), ctx), patchLint, projectRoot, scopedRoots);
|
|
71
70
|
if (!testFilesEnabled)
|
|
@@ -77,7 +76,7 @@ export function buildPerRunCheckJs(projectRoot, paths, config, ctx, rootScopePat
|
|
|
77
76
|
}
|
|
78
77
|
return { byFile, global: [...sys.global, ...tests.global] };
|
|
79
78
|
};
|
|
80
|
-
// Memoise the
|
|
79
|
+
// Memoise the promise rather than the resolved value: under the bounded pool
|
|
81
80
|
// several patches can reach `getGrouped` before the first build resolves, and
|
|
82
81
|
// `??=` on the promise (a synchronous expression) guarantees a single build.
|
|
83
82
|
let groupedPromise;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { PatchLintIssue, PatchMetadata } from '../types/commands/index.js';
|
|
2
2
|
/**
|
|
3
3
|
* Structural view of one per-patch lint outcome. Mirrors the relevant
|
|
4
|
-
* fields of lint-per-patch's QueuedPatchResult without importing it
|
|
4
|
+
* fields of lint-per-patch's QueuedPatchResult without importing it:
|
|
5
5
|
* that module imports this one, and a type back-edge would trip the
|
|
6
6
|
* dpdm cycle gate.
|
|
7
7
|
*/
|
|
@@ -14,8 +14,8 @@ export interface PerPatchReportResult {
|
|
|
14
14
|
}
|
|
15
15
|
/**
|
|
16
16
|
* Writes the per-patch lint report JSON. Called after the per-patch
|
|
17
|
-
* results are assembled in patch order
|
|
17
|
+
* results are assembled in patch order. Queue-level and policy findings
|
|
18
18
|
* are patch-attributed by their `file`/`filename` fields upstream and
|
|
19
|
-
* are
|
|
19
|
+
* are not duplicated here. The report is the per-patch view.
|
|
20
20
|
*/
|
|
21
21
|
export declare function writePerPatchLintReport(reportPath: string, subset: readonly PatchMetadata[], results: readonly PerPatchReportResult[]): Promise<void>;
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Machine-readable per-patch lint report (`lint --per-patch --report
|
|
4
4
|
* <path>`). One mechanism serves two observability gaps: consumers get each
|
|
5
|
-
* patch's size metrics against the
|
|
5
|
+
* patch's size metrics against the same thresholds the size rules fire on,
|
|
6
6
|
* instead of mirroring `countNonBinaryDiffLines`, and lintIgnore-suppressed
|
|
7
7
|
* issues stay visible with their measurements rather than vanishing.
|
|
8
8
|
*
|
|
9
|
-
* Helper module consumed by lint-per-patch.ts
|
|
9
|
+
* Helper module consumed by lint-per-patch.ts. No registrar is exported and
|
|
10
10
|
* none is wanted.
|
|
11
11
|
*/
|
|
12
12
|
import { getPatchSizeThresholds, resolvePatchSizeTier, } from '../core/patch-lint.js';
|
|
@@ -15,9 +15,9 @@ import { info } from '../utils/logger.js';
|
|
|
15
15
|
const LINT_REPORT_SCHEMA_VERSION = 1;
|
|
16
16
|
/**
|
|
17
17
|
* Writes the per-patch lint report JSON. Called after the per-patch
|
|
18
|
-
* results are assembled in patch order
|
|
18
|
+
* results are assembled in patch order. Queue-level and policy findings
|
|
19
19
|
* are patch-attributed by their `file`/`filename` fields upstream and
|
|
20
|
-
* are
|
|
20
|
+
* are not duplicated here. The report is the per-patch view.
|
|
21
21
|
*/
|
|
22
22
|
export async function writePerPatchLintReport(reportPath, subset, results) {
|
|
23
23
|
const patches = [];
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
+
import { type PatchQueueContext } from '../core/patch-lint.js';
|
|
2
3
|
import type { CommandContext } from '../types/cli.js';
|
|
3
4
|
import type { LintCommandOptions, PatchLintIssue } from '../types/commands/index.js';
|
|
4
5
|
/**
|
|
@@ -26,15 +27,15 @@ export interface AggregateLintIgnoreResult {
|
|
|
26
27
|
* attribute via `issue.file`, which is the offending site and is owned by
|
|
27
28
|
* some patch.
|
|
28
29
|
*
|
|
29
|
-
* Multiple owners: an issue is dropped if
|
|
30
|
-
* rule.
|
|
31
|
-
* ones.
|
|
30
|
+
* Multiple owners: an issue is dropped if any owning patch waived the
|
|
31
|
+
* rule. This is conservative: it never adds new findings, only drops
|
|
32
|
+
* already-waived ones.
|
|
32
33
|
*
|
|
33
34
|
* @param issues - Issues collected from the aggregate lint run.
|
|
34
35
|
* @param ctx - Patch queue context used to attribute file → patch.
|
|
35
36
|
* @returns Filtered issue list and the count of dropped findings.
|
|
36
37
|
*/
|
|
37
|
-
export declare function applyAggregateLintIgnoreSuppression(issues: PatchLintIssue[], ctx:
|
|
38
|
+
export declare function applyAggregateLintIgnoreSuppression(issues: PatchLintIssue[], ctx: PatchQueueContext): AggregateLintIgnoreResult;
|
|
38
39
|
/**
|
|
39
40
|
* Runs the lint command to check engine changes against patch quality rules.
|
|
40
41
|
* @param projectRoot - Root directory of the project
|