@hominis/fireforge 0.43.1 → 0.44.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 +153 -0
- package/README.md +3 -3
- package/dist/bin/fireforge.d.ts +4 -9
- package/dist/bin/fireforge.js +42 -40
- package/dist/build-info.json +4 -4
- package/dist/src/cli.js +74 -8
- package/dist/src/commands/bootstrap.js +17 -20
- package/dist/src/commands/build.js +25 -32
- package/dist/src/commands/config.js +34 -41
- package/dist/src/commands/discard.js +8 -9
- package/dist/src/commands/doctor-check-core.d.ts +13 -18
- package/dist/src/commands/doctor-check-core.js +8 -35
- package/dist/src/commands/doctor-external-toolchains.js +2 -2
- package/dist/src/commands/doctor-furnace-config-sync.d.ts +18 -0
- package/dist/src/commands/{doctor-furnace-manifest-sync.js → doctor-furnace-config-sync.js} +27 -26
- package/dist/src/commands/doctor-furnace-jar.d.ts +7 -9
- package/dist/src/commands/doctor-furnace-jar.js +7 -9
- package/dist/src/commands/doctor-furnace.js +21 -24
- package/dist/src/commands/doctor-orphaned-harness.d.ts +16 -20
- package/dist/src/commands/doctor-orphaned-harness.js +18 -44
- package/dist/src/commands/doctor-patch-manifest.d.ts +8 -0
- package/dist/src/commands/doctor-patch-manifest.js +155 -0
- package/dist/src/commands/doctor-post-rebase-audit.d.ts +2 -0
- package/dist/src/commands/{doctor/post-rebase-audit.js → doctor-post-rebase-audit.js} +3 -3
- package/dist/src/commands/doctor-working-tree.d.ts +10 -12
- package/dist/src/commands/doctor-working-tree.js +11 -18
- package/dist/src/commands/doctor.d.ts +1 -1
- package/dist/src/commands/doctor.js +64 -96
- package/dist/src/commands/download.js +32 -48
- package/dist/src/commands/export-all.js +29 -33
- package/dist/src/commands/export-flow.js +6 -6
- package/dist/src/commands/export-placement-conflicts.js +10 -9
- package/dist/src/commands/export-placement-gate.js +5 -5
- package/dist/src/commands/export-shared.d.ts +30 -33
- package/dist/src/commands/export-shared.js +45 -43
- package/dist/src/commands/export.js +21 -27
- package/dist/src/commands/furnace/apply.js +14 -23
- package/dist/src/commands/furnace/chrome-doc-remove.js +14 -21
- package/dist/src/commands/furnace/chrome-doc-templates.d.ts +23 -23
- package/dist/src/commands/furnace/chrome-doc-templates.js +23 -23
- package/dist/src/commands/furnace/chrome-doc-tests.js +26 -29
- package/dist/src/commands/furnace/chrome-doc.d.ts +16 -17
- package/dist/src/commands/furnace/chrome-doc.js +31 -41
- package/dist/src/commands/furnace/create-browser-test.d.ts +4 -4
- package/dist/src/commands/furnace/create-browser-test.js +8 -8
- package/dist/src/commands/furnace/create-mochikit.d.ts +6 -7
- package/dist/src/commands/furnace/create-mochikit.js +8 -9
- package/dist/src/commands/furnace/create-readback.d.ts +12 -13
- package/dist/src/commands/furnace/create-readback.js +12 -13
- package/dist/src/commands/furnace/create-templates.d.ts +22 -28
- package/dist/src/commands/furnace/create-templates.js +35 -30
- package/dist/src/commands/furnace/create-xpcshell.js +2 -2
- package/dist/src/commands/furnace/create.js +33 -23
- package/dist/src/commands/furnace/deploy.js +16 -24
- package/dist/src/commands/furnace/diff.js +15 -10
- package/dist/src/commands/furnace/init.js +33 -36
- package/dist/src/commands/furnace/override.js +23 -25
- package/dist/src/commands/furnace/preview.js +47 -67
- package/dist/src/commands/furnace/refresh.js +12 -16
- package/dist/src/commands/furnace/remove-mutations.d.ts +3 -6
- package/dist/src/commands/furnace/remove-mutations.js +14 -17
- package/dist/src/commands/furnace/remove-state.js +1 -1
- package/dist/src/commands/furnace/remove.js +33 -38
- package/dist/src/commands/furnace/rename-xpcshell.d.ts +8 -11
- package/dist/src/commands/furnace/rename-xpcshell.js +8 -11
- package/dist/src/commands/furnace/rename.js +59 -69
- package/dist/src/commands/furnace/scan.js +19 -33
- package/dist/src/commands/furnace/status.js +12 -9
- package/dist/src/commands/furnace/sync.js +9 -16
- package/dist/src/commands/furnace/validate.js +20 -20
- package/dist/src/commands/import.js +48 -37
- package/dist/src/commands/lint-per-patch.js +15 -10
- package/dist/src/commands/lint-per-run-checkjs.d.ts +13 -13
- package/dist/src/commands/lint-per-run-checkjs.js +13 -13
- package/dist/src/commands/lint-report.js +6 -7
- package/dist/src/commands/lint.d.ts +15 -16
- package/dist/src/commands/lint.js +86 -102
- package/dist/src/commands/package.js +6 -11
- package/dist/src/commands/patch/compact.js +1 -1
- package/dist/src/commands/patch/delete.js +24 -33
- package/dist/src/commands/patch/index.d.ts +5 -6
- package/dist/src/commands/patch/index.js +10 -12
- package/dist/src/commands/patch/lint-ignore.js +14 -13
- package/dist/src/commands/patch/move-files-create.d.ts +6 -6
- package/dist/src/commands/patch/move-files-create.js +8 -8
- package/dist/src/commands/patch/move-files-into.d.ts +6 -6
- package/dist/src/commands/patch/move-files-into.js +8 -8
- package/dist/src/commands/patch/patch-context.d.ts +2 -3
- package/dist/src/commands/patch/patch-context.js +2 -3
- package/dist/src/commands/patch/rename.d.ts +10 -11
- package/dist/src/commands/patch/rename.js +11 -12
- package/dist/src/commands/patch/reorder.js +8 -9
- package/dist/src/commands/patch/split-plan.js +1 -1
- package/dist/src/commands/patch/split.d.ts +8 -10
- package/dist/src/commands/patch/split.js +9 -11
- package/dist/src/commands/patch/staged-dependency-validate.js +8 -8
- package/dist/src/commands/patch/staged-dependency.js +7 -3
- package/dist/src/commands/patch/tier.d.ts +9 -9
- package/dist/src/commands/patch/tier.js +18 -15
- package/dist/src/commands/re-export-adjacent.js +9 -8
- package/dist/src/commands/re-export-bulk-scan.d.ts +9 -9
- package/dist/src/commands/re-export-bulk-scan.js +22 -21
- package/dist/src/commands/re-export-drift.js +10 -10
- package/dist/src/commands/re-export-files.d.ts +6 -7
- package/dist/src/commands/re-export-files.js +34 -44
- package/dist/src/commands/re-export-lint.d.ts +10 -13
- package/dist/src/commands/re-export-lint.js +16 -14
- package/dist/src/commands/re-export-options.d.ts +6 -6
- package/dist/src/commands/re-export-options.js +6 -6
- package/dist/src/commands/re-export-register.d.ts +4 -10
- package/dist/src/commands/re-export-register.js +5 -11
- package/dist/src/commands/re-export-scan.js +1 -1
- package/dist/src/commands/re-export-single.d.ts +3 -3
- package/dist/src/commands/re-export-single.js +33 -25
- package/dist/src/commands/re-export.js +13 -21
- package/dist/src/commands/rebase/abort.js +3 -3
- package/dist/src/commands/rebase/confirm.js +2 -1
- package/dist/src/commands/rebase/continue.d.ts +1 -1
- package/dist/src/commands/rebase/continue.js +14 -9
- package/dist/src/commands/rebase/index.js +11 -11
- package/dist/src/commands/rebase/patch-loop.d.ts +7 -1
- package/dist/src/commands/rebase/patch-loop.js +60 -39
- package/dist/src/commands/rebase/summary.js +1 -1
- package/dist/src/commands/register.js +5 -7
- package/dist/src/commands/reset.js +2 -1
- package/dist/src/commands/resolve.d.ts +16 -13
- package/dist/src/commands/resolve.js +30 -33
- package/dist/src/commands/run.js +33 -35
- package/dist/src/commands/setup-support.js +15 -19
- package/dist/src/commands/setup.js +13 -9
- package/dist/src/commands/status-check.d.ts +6 -6
- package/dist/src/commands/status-json.d.ts +6 -6
- package/dist/src/commands/status-json.js +5 -0
- package/dist/src/commands/status-output.d.ts +5 -5
- package/dist/src/commands/status-output.js +6 -6
- package/dist/src/commands/status-ownership.d.ts +16 -14
- package/dist/src/commands/status-ownership.js +16 -14
- package/dist/src/commands/status.js +42 -34
- package/dist/src/commands/test-build-phase.js +26 -13
- package/dist/src/commands/test-diagnose.js +44 -44
- package/dist/src/commands/test-register.js +1 -0
- package/dist/src/commands/test-run.d.ts +14 -16
- package/dist/src/commands/test-run.js +21 -13
- package/dist/src/commands/test-stale-gate.d.ts +15 -16
- package/dist/src/commands/test-stale-gate.js +15 -16
- package/dist/src/commands/test-verdict.d.ts +20 -3
- package/dist/src/commands/test-verdict.js +30 -0
- package/dist/src/commands/test.js +83 -76
- package/dist/src/commands/token-coverage.js +3 -4
- package/dist/src/commands/token.js +16 -18
- package/dist/src/commands/tree.js +47 -31
- package/dist/src/commands/typecheck.d.ts +10 -12
- package/dist/src/commands/typecheck.js +24 -27
- package/dist/src/commands/verify.js +13 -15
- package/dist/src/commands/watch.js +21 -23
- package/dist/src/commands/wire.js +52 -62
- package/dist/src/core/ast-utils.d.ts +8 -7
- package/dist/src/core/ast-utils.js +8 -7
- package/dist/src/core/branding.d.ts +9 -14
- package/dist/src/core/branding.js +7 -11
- package/dist/src/core/browser-wire.d.ts +1 -1
- package/dist/src/core/browser-wire.js +14 -19
- package/dist/src/core/build-audit-platform.js +25 -33
- package/dist/src/core/build-audit-registration.js +17 -25
- package/dist/src/core/build-audit-resolve.d.ts +15 -17
- package/dist/src/core/build-audit-resolve.js +39 -36
- package/dist/src/core/build-audit-transforms.js +18 -19
- package/dist/src/core/build-audit.js +28 -42
- package/dist/src/core/build-baseline-types.d.ts +29 -35
- package/dist/src/core/build-baseline.d.ts +5 -4
- package/dist/src/core/build-baseline.js +14 -14
- package/dist/src/core/build-overwrite-guard.d.ts +7 -14
- package/dist/src/core/build-overwrite-guard.js +17 -27
- package/dist/src/core/build-prepare.d.ts +2 -2
- package/dist/src/core/build-prepare.js +8 -9
- package/dist/src/core/config-mutate.js +20 -19
- package/dist/src/core/config-state.js +12 -4
- package/dist/src/core/config-validate.js +8 -5
- package/dist/src/core/config.d.ts +5 -8
- package/dist/src/core/config.js +7 -16
- package/dist/src/core/coverage-extend.d.ts +15 -13
- package/dist/src/core/coverage-extend.js +15 -13
- package/dist/src/core/destructive.d.ts +31 -9
- package/dist/src/core/destructive.js +29 -26
- package/dist/src/core/diff-hunks.js +10 -12
- package/dist/src/core/discard-baseline.d.ts +8 -8
- package/dist/src/core/discard-baseline.js +16 -15
- package/dist/src/core/display-state.d.ts +12 -14
- package/dist/src/core/display-state.js +12 -14
- package/dist/src/core/engine-changes.d.ts +2 -4
- package/dist/src/core/engine-changes.js +2 -4
- package/dist/src/core/engine-precondition.d.ts +28 -13
- package/dist/src/core/engine-precondition.js +25 -10
- package/dist/src/core/engine-session-lock.d.ts +47 -21
- package/dist/src/core/engine-session-lock.js +168 -33
- package/dist/src/core/export-moved-code-shape.d.ts +10 -10
- package/dist/src/core/export-moved-code-shape.js +10 -10
- package/dist/src/core/file-lock.d.ts +62 -5
- package/dist/src/core/file-lock.js +196 -59
- package/dist/src/core/firefox-cache.js +1 -3
- package/dist/src/core/firefox-extract.js +10 -14
- package/dist/src/core/firefox.d.ts +7 -5
- package/dist/src/core/firefox.js +4 -5
- package/dist/src/core/furnace-apply-dry-run.d.ts +2 -2
- package/dist/src/core/furnace-apply-dry-run.js +3 -2
- package/dist/src/core/furnace-apply-ftl.d.ts +7 -9
- package/dist/src/core/furnace-apply-ftl.js +16 -13
- package/dist/src/core/furnace-apply-helpers.d.ts +7 -7
- package/dist/src/core/furnace-apply-helpers.js +30 -21
- package/dist/src/core/furnace-apply-overwrite-warn.d.ts +8 -9
- package/dist/src/core/furnace-apply-overwrite-warn.js +8 -9
- package/dist/src/core/furnace-apply-undeploy-actions.d.ts +3 -4
- package/dist/src/core/furnace-apply-undeploy-actions.js +3 -4
- package/dist/src/core/furnace-apply.d.ts +5 -8
- package/dist/src/core/furnace-apply.js +19 -24
- package/dist/src/core/furnace-checksum-utils.d.ts +14 -0
- package/dist/src/core/furnace-checksum-utils.js +16 -0
- package/dist/src/core/furnace-config.d.ts +21 -30
- package/dist/src/core/furnace-config.js +32 -54
- package/dist/src/core/furnace-constants.d.ts +8 -0
- package/dist/src/core/furnace-constants.js +10 -2
- package/dist/src/core/furnace-css-fragments.d.ts +5 -5
- package/dist/src/core/furnace-css-fragments.js +5 -5
- package/dist/src/core/furnace-jsconfig.d.ts +11 -12
- package/dist/src/core/furnace-jsconfig.js +11 -12
- package/dist/src/core/furnace-marker.d.ts +7 -8
- package/dist/src/core/furnace-marker.js +7 -8
- package/dist/src/core/furnace-operation.d.ts +31 -0
- package/dist/src/core/furnace-operation.js +54 -17
- package/dist/src/core/furnace-precondition.d.ts +61 -0
- package/dist/src/core/furnace-precondition.js +67 -0
- package/dist/src/core/furnace-registration-remove.d.ts +5 -6
- package/dist/src/core/furnace-registration-remove.js +6 -7
- package/dist/src/core/furnace-registration-validate.d.ts +13 -0
- package/dist/src/core/furnace-registration-validate.js +20 -1
- package/dist/src/core/furnace-registration.d.ts +5 -6
- package/dist/src/core/furnace-registration.js +10 -12
- package/dist/src/core/furnace-rollback.js +7 -7
- package/dist/src/core/furnace-scanner.d.ts +1 -0
- package/dist/src/core/furnace-scanner.js +1 -2
- package/dist/src/core/furnace-stale-export.d.ts +10 -10
- package/dist/src/core/furnace-stale-export.js +10 -10
- package/dist/src/core/furnace-state-persist.d.ts +6 -8
- package/dist/src/core/furnace-state-persist.js +6 -8
- package/dist/src/core/furnace-validate-accessibility.d.ts +22 -0
- package/dist/src/core/furnace-validate-accessibility.js +310 -1
- package/dist/src/core/furnace-validate-compatibility.js +141 -1
- package/dist/src/core/furnace-validate-helpers.d.ts +5 -116
- package/dist/src/core/furnace-validate-helpers.js +0 -491
- package/dist/src/core/furnace-validate-registration.d.ts +7 -0
- package/dist/src/core/furnace-validate-registration.js +115 -41
- package/dist/src/core/furnace-validate.d.ts +16 -0
- package/dist/src/core/furnace-validate.js +188 -145
- package/dist/src/core/furnace-version-drift.d.ts +10 -11
- package/dist/src/core/furnace-version-drift.js +10 -11
- package/dist/src/core/git-base.d.ts +21 -9
- package/dist/src/core/git-base.js +24 -9
- package/dist/src/core/git-diff.d.ts +20 -9
- package/dist/src/core/git-diff.js +148 -63
- package/dist/src/core/git-file-ops.d.ts +19 -19
- package/dist/src/core/git-file-ops.js +19 -19
- package/dist/src/core/git-readonly-index.d.ts +53 -19
- package/dist/src/core/git-readonly-index.js +75 -31
- package/dist/src/core/git-status.d.ts +5 -6
- package/dist/src/core/git-status.js +5 -6
- package/dist/src/core/git.d.ts +9 -10
- package/dist/src/core/git.js +57 -71
- package/dist/src/core/license-headers.d.ts +17 -23
- package/dist/src/core/license-headers.js +17 -23
- package/dist/src/core/mach-build-artifacts.d.ts +9 -9
- package/dist/src/core/mach-build-artifacts.js +57 -19
- package/dist/src/core/mach-error-hints.js +42 -29
- package/dist/src/core/mach-known-noise-filter.d.ts +15 -16
- package/dist/src/core/mach-known-noise-filter.js +18 -20
- package/dist/src/core/mach-mozconfig.d.ts +14 -0
- package/dist/src/core/mach-mozconfig.js +30 -0
- package/dist/src/core/mach-resource-shim.d.ts +43 -58
- package/dist/src/core/mach-resource-shim.js +50 -67
- package/dist/src/core/mach.d.ts +37 -41
- package/dist/src/core/mach.js +50 -51
- package/dist/src/core/marionette-port.d.ts +36 -1
- package/dist/src/core/marionette-port.js +96 -31
- package/dist/src/core/marionette-preflight.d.ts +8 -12
- package/dist/src/core/marionette-preflight.js +86 -52
- package/dist/src/core/mochitest-server-port.d.ts +42 -0
- package/dist/src/core/mochitest-server-port.js +119 -0
- package/dist/src/core/module-resolution-preflight.d.ts +9 -11
- package/dist/src/core/module-resolution-preflight.js +9 -11
- package/dist/src/core/moz-manifest-helpers.d.ts +79 -0
- package/dist/src/core/moz-manifest-helpers.js +163 -0
- package/dist/src/core/{manifest-register.d.ts → moz-manifest-register.d.ts} +1 -1
- package/dist/src/core/{manifest-register.js → moz-manifest-register.js} +13 -28
- package/dist/src/core/{manifest-rules.d.ts → moz-manifest-rules.d.ts} +10 -1
- package/dist/src/core/{manifest-rules.js → moz-manifest-rules.js} +31 -24
- package/dist/src/core/{manifest-tokenizers.d.ts → moz-manifest-tokenizers.d.ts} +3 -5
- package/dist/src/core/{manifest-tokenizers.js → moz-manifest-tokenizers.js} +9 -12
- package/dist/src/core/ownership-table.d.ts +14 -16
- package/dist/src/core/ownership-table.js +14 -16
- package/dist/src/core/parser-fallback.d.ts +15 -1
- package/dist/src/core/parser-fallback.js +22 -3
- package/dist/src/core/patch-apply-fuzz.d.ts +10 -12
- package/dist/src/core/patch-apply-fuzz.js +15 -18
- package/dist/src/core/patch-apply.d.ts +13 -34
- package/dist/src/core/patch-apply.js +16 -76
- package/dist/src/core/patch-artifact-normalize.d.ts +13 -15
- package/dist/src/core/patch-artifact-normalize.js +13 -15
- package/dist/src/core/patch-export-metadata.d.ts +12 -2
- package/dist/src/core/patch-export-metadata.js +13 -4
- package/dist/src/core/patch-export-update.d.ts +13 -1
- package/dist/src/core/patch-export-update.js +25 -8
- package/dist/src/core/patch-export.d.ts +15 -8
- package/dist/src/core/patch-export.js +10 -11
- package/dist/src/core/patch-files.d.ts +5 -6
- package/dist/src/core/patch-files.js +5 -6
- package/dist/src/core/patch-identifier-suggest.d.ts +7 -12
- package/dist/src/core/patch-identifier-suggest.js +14 -19
- package/dist/src/core/patch-lint-binary.d.ts +51 -0
- package/dist/src/core/patch-lint-binary.js +39 -0
- package/dist/src/core/{lint-cache.d.ts → patch-lint-cache.d.ts} +5 -5
- package/dist/src/core/{lint-cache.js → patch-lint-cache.js} +21 -23
- package/dist/src/core/patch-lint-checkjs.d.ts +16 -16
- package/dist/src/core/patch-lint-checkjs.js +41 -20
- package/dist/src/core/patch-lint-chrome-jsdoc.d.ts +6 -9
- package/dist/src/core/patch-lint-chrome-jsdoc.js +10 -14
- package/dist/src/core/patch-lint-creators.d.ts +8 -8
- package/dist/src/core/patch-lint-creators.js +8 -8
- package/dist/src/core/patch-lint-cross.d.ts +17 -20
- package/dist/src/core/patch-lint-cross.js +16 -16
- package/dist/src/core/patch-lint-css.d.ts +3 -5
- package/dist/src/core/patch-lint-css.js +17 -22
- package/dist/src/core/patch-lint-diff-tag.d.ts +14 -16
- package/dist/src/core/patch-lint-diff-tag.js +14 -16
- package/dist/src/core/patch-lint-jsdoc.d.ts +7 -8
- package/dist/src/core/patch-lint-jsdoc.js +26 -19
- package/dist/src/core/patch-lint-mozbuild.js +20 -20
- package/dist/src/core/patch-lint-observer.d.ts +7 -7
- package/dist/src/core/patch-lint-observer.js +7 -7
- package/dist/src/core/patch-lint.d.ts +38 -29
- package/dist/src/core/patch-lint.js +89 -121
- package/dist/src/core/patch-lock.d.ts +1 -1
- package/dist/src/core/patch-lock.js +45 -9
- package/dist/src/core/patch-manifest-consistency.d.ts +57 -6
- package/dist/src/core/patch-manifest-consistency.js +111 -40
- package/dist/src/core/patch-manifest-files-affected.d.ts +43 -0
- package/dist/src/core/patch-manifest-files-affected.js +77 -0
- package/dist/src/core/patch-manifest-io.js +14 -18
- package/dist/src/core/patch-manifest-resolve.d.ts +9 -12
- package/dist/src/core/patch-manifest-resolve.js +9 -12
- package/dist/src/core/patch-manifest-validate.d.ts +6 -1
- package/dist/src/core/patch-manifest-validate.js +25 -13
- package/dist/src/core/patch-manifest.d.ts +2 -1
- package/dist/src/core/patch-manifest.js +2 -1
- package/dist/src/core/patch-parse.d.ts +24 -13
- package/dist/src/core/patch-parse.js +19 -14
- package/dist/src/core/patch-policy.d.ts +2 -2
- package/dist/src/core/patch-policy.js +2 -2
- package/dist/src/core/patch-registration-refs.d.ts +7 -8
- package/dist/src/core/patch-registration-refs.js +9 -9
- package/dist/src/core/process-cpu-time.d.ts +12 -0
- package/dist/src/core/process-cpu-time.js +52 -0
- package/dist/src/core/rebase-session.d.ts +38 -26
- package/dist/src/core/rebase-session.js +55 -28
- package/dist/src/core/register-browser-content.js +9 -74
- package/dist/src/core/{register-test-manifest.js → register-browser-test.js} +7 -42
- package/dist/src/core/register-module.js +10 -43
- package/dist/src/core/register-scaffold.d.ts +8 -8
- package/dist/src/core/register-scaffold.js +10 -10
- package/dist/src/core/register-shared-css.d.ts +9 -12
- package/dist/src/core/register-shared-css.js +17 -87
- package/dist/src/core/register-xpcshell-test.d.ts +6 -7
- package/dist/src/core/register-xpcshell-test.js +7 -8
- package/dist/src/core/shared-ftl.js +12 -4
- package/dist/src/core/state-file.d.ts +45 -0
- package/dist/src/core/state-file.js +34 -0
- package/dist/src/core/status-binary.d.ts +18 -11
- package/dist/src/core/status-binary.js +19 -12
- package/dist/src/core/status-classify.d.ts +30 -36
- package/dist/src/core/status-classify.js +21 -26
- package/dist/src/core/test-changed-prefs.d.ts +30 -0
- package/dist/src/core/test-changed-prefs.js +78 -0
- package/dist/src/core/test-harness-crash.d.ts +25 -63
- package/dist/src/core/test-harness-crash.js +121 -142
- package/dist/src/core/test-harness-signature.d.ts +18 -0
- package/dist/src/core/test-harness-signature.js +13 -0
- package/dist/src/core/test-path-scope.d.ts +12 -15
- package/dist/src/core/test-path-scope.js +15 -18
- package/dist/src/core/test-stale-check.d.ts +17 -17
- package/dist/src/core/test-stale-check.js +50 -43
- package/dist/src/core/test-stall-triage.d.ts +51 -0
- package/dist/src/core/test-stall-triage.js +126 -0
- package/dist/src/core/token-category.js +66 -14
- package/dist/src/core/token-coverage.js +9 -9
- package/dist/src/core/token-dark-mode.d.ts +9 -11
- package/dist/src/core/token-dark-mode.js +29 -13
- package/dist/src/core/token-docs.d.ts +2 -0
- package/dist/src/core/token-docs.js +3 -1
- package/dist/src/core/token-manager.d.ts +10 -2
- package/dist/src/core/token-manager.js +17 -8
- package/dist/src/core/token-scaffold.d.ts +7 -7
- package/dist/src/core/token-scaffold.js +7 -7
- package/dist/src/core/token-variant.d.ts +4 -4
- package/dist/src/core/token-variant.js +28 -6
- package/dist/src/core/toolchain-preflight.d.ts +20 -21
- package/dist/src/core/toolchain-preflight.js +28 -31
- package/dist/src/core/tree-guard.js +12 -2
- package/dist/src/core/tree-store.d.ts +41 -27
- package/dist/src/core/tree-store.js +68 -43
- package/dist/src/core/typecheck-shim.d.ts +23 -24
- package/dist/src/core/typecheck-shim.js +23 -24
- package/dist/src/core/typecheck.js +15 -9
- package/dist/src/core/wire-destroy.d.ts +3 -3
- package/dist/src/core/wire-destroy.js +7 -15
- package/dist/src/core/wire-dom-fragment.d.ts +9 -17
- package/dist/src/core/wire-dom-fragment.js +11 -44
- package/dist/src/core/wire-init.d.ts +2 -3
- package/dist/src/core/wire-init.js +8 -19
- package/dist/src/core/wire-subscript.d.ts +2 -3
- package/dist/src/core/wire-subscript.js +4 -13
- package/dist/src/core/wire-utils.d.ts +7 -8
- package/dist/src/core/wire-utils.js +7 -8
- package/dist/src/core/xpcshell-appdir.d.ts +38 -45
- package/dist/src/core/xpcshell-appdir.js +38 -45
- package/dist/src/errors/base.d.ts +37 -16
- package/dist/src/errors/base.js +37 -16
- package/dist/src/errors/build.d.ts +13 -1
- package/dist/src/errors/build.js +14 -2
- package/dist/src/errors/codes.d.ts +16 -0
- package/dist/src/errors/codes.js +16 -0
- package/dist/src/errors/furnace.d.ts +4 -4
- package/dist/src/errors/git.d.ts +6 -10
- package/dist/src/errors/git.js +6 -10
- package/dist/src/errors/patch.d.ts +7 -7
- package/dist/src/errors/patch.js +7 -7
- package/dist/src/errors/rebase.d.ts +4 -4
- package/dist/src/errors/rebase.js +4 -4
- package/dist/src/index.d.ts +7 -1
- package/dist/src/index.js +5 -0
- package/dist/src/types/commands/index.d.ts +2 -2
- package/dist/src/types/commands/options.d.ts +111 -70
- package/dist/src/types/commands/patches.d.ts +24 -34
- package/dist/src/types/commands/project.d.ts +5 -34
- package/dist/src/types/config.d.ts +25 -23
- package/dist/src/types/config.js +6 -1
- package/dist/src/types/furnace.d.ts +37 -13
- package/dist/src/types/furnace.js +19 -1
- package/dist/src/types/index.d.ts +3 -3
- package/dist/src/utils/build-info.d.ts +7 -8
- package/dist/src/utils/build-info.js +12 -11
- package/dist/src/utils/errors.d.ts +6 -8
- package/dist/src/utils/errors.js +6 -8
- package/dist/src/utils/logger.d.ts +27 -10
- package/dist/src/utils/logger.js +28 -16
- package/dist/src/utils/machine-output.d.ts +12 -0
- package/dist/src/utils/machine-output.js +33 -0
- package/dist/src/utils/options.d.ts +31 -14
- package/dist/src/utils/options.js +86 -30
- package/dist/src/utils/paths.d.ts +10 -8
- package/dist/src/utils/paths.js +10 -8
- package/dist/src/utils/platform.d.ts +0 -25
- package/dist/src/utils/platform.js +1 -42
- package/dist/src/utils/process-group.d.ts +9 -4
- package/dist/src/utils/process-group.js +19 -5
- package/dist/src/utils/process.d.ts +42 -7
- package/dist/src/utils/process.js +44 -17
- package/dist/src/utils/ps-duration.d.ts +31 -0
- package/dist/src/utils/ps-duration.js +70 -0
- package/dist/src/utils/regex.d.ts +9 -10
- package/dist/src/utils/regex.js +9 -10
- package/dist/src/utils/validation.d.ts +58 -28
- package/dist/src/utils/validation.js +60 -33
- package/package.json +3 -3
- package/dist/src/commands/doctor/post-rebase-audit.d.ts +0 -2
- package/dist/src/commands/doctor-furnace-manifest-sync.d.ts +0 -18
- package/dist/src/core/manifest-helpers.d.ts +0 -38
- package/dist/src/core/manifest-helpers.js +0 -120
- /package/dist/src/core/{lint-projection.d.ts → patch-lint-projection.d.ts} +0 -0
- /package/dist/src/core/{lint-projection.js → patch-lint-projection.js} +0 -0
- /package/dist/src/core/{register-test-manifest.d.ts → register-browser-test.d.ts} +0 -0
|
@@ -3,10 +3,12 @@ import { join } from 'node:path';
|
|
|
3
3
|
import { confirm } from '@clack/prompts';
|
|
4
4
|
import { Command } from 'commander';
|
|
5
5
|
import { getProjectPaths, loadConfig, loadState, updateState } from '../core/config.js';
|
|
6
|
+
import { stdioIsInteractive } from '../core/destructive.js';
|
|
7
|
+
import { assertEngineExists } from '../core/engine-precondition.js';
|
|
6
8
|
import { getHead } from '../core/git.js';
|
|
7
9
|
import { getDirtyFiles } from '../core/git-status.js';
|
|
8
10
|
import { applyPatchesWithContinue, countPatches, createPatchedContentContext, discoverPatches, extractAffectedFiles, matchesUntilFilename, PatchError, } from '../core/patch-apply.js';
|
|
9
|
-
import { checkVersionCompatibility, loadPatchesManifest, validatePatchesManifestConsistency, validatePatchIntegrity, } from '../core/patch-manifest.js';
|
|
11
|
+
import { checkVersionCompatibility, loadPatchesManifest, recommendManifestRepair, validatePatchesManifestConsistency, validatePatchIntegrity, } from '../core/patch-manifest.js';
|
|
10
12
|
import { getPatchSourceVersion } from '../core/patch-source-metadata.js';
|
|
11
13
|
import { warnIfStaticComponentsStale } from '../core/test-stale-check.js';
|
|
12
14
|
import { GeneralError } from '../errors/base.js';
|
|
@@ -84,14 +86,13 @@ async function checkUncommittedPatchFiles(engineDir, patchesDir, forceImport) {
|
|
|
84
86
|
if (dirtyFiles.length > 0) {
|
|
85
87
|
const unmanagedDirtyFiles = await getUnmanagedDirtyFiles(engineDir, patchesDir, dirtyFiles);
|
|
86
88
|
if (unmanagedDirtyFiles.length === 0) {
|
|
87
|
-
// Common path here: operator just ran `fireforge resolve` to
|
|
89
|
+
// Common path here: the operator just ran `fireforge resolve` to
|
|
88
90
|
// regenerate a patch from manual conflict edits, so the engine
|
|
89
|
-
// already carries the patch's effects. The import below
|
|
90
|
-
//
|
|
91
|
-
//
|
|
92
|
-
//
|
|
93
|
-
//
|
|
94
|
-
// prints next, which the 2026-04-25 eval flagged as ambiguous.
|
|
91
|
+
// already carries the patch's effects. The import below still
|
|
92
|
+
// re-applies each patch (a no-op for files whose contents already
|
|
93
|
+
// match), so phrase the line as "no resync needed" rather than
|
|
94
|
+
// "patches already applied" — the latter contradicts the "Applied N
|
|
95
|
+
// patch(es)" summary `applyPatchesWithContinue` prints next.
|
|
95
96
|
info('Patch-touched files already match the stored patch stack — no engine resync needed before re-applying.');
|
|
96
97
|
}
|
|
97
98
|
else if (!forceImport) {
|
|
@@ -110,12 +111,12 @@ async function checkUncommittedPatchFiles(engineDir, patchesDir, forceImport) {
|
|
|
110
111
|
async function handlePatchFailures(summary, projectRoot) {
|
|
111
112
|
const firstFailed = summary.failed[0];
|
|
112
113
|
if (firstFailed) {
|
|
113
|
-
// Transactional update rather than `loadState` + mutate + `saveState`.
|
|
114
|
-
// caller captures `state` at the start of the import run, and the run
|
|
115
|
-
// span a long window (drift-check prompt, patch apply loop). A
|
|
116
|
-
// command (`fireforge download`, `rebase`, another state
|
|
117
|
-
// unrelated fields during that window would be silently
|
|
118
|
-
// stale state object was written back.
|
|
114
|
+
// Transactional update rather than `loadState` + mutate + `saveState`.
|
|
115
|
+
// The caller captures `state` at the start of the import run, and the run
|
|
116
|
+
// can span a long window (drift-check prompt, patch apply loop). A
|
|
117
|
+
// concurrent command (`fireforge download`, `rebase`, another state
|
|
118
|
+
// mutation) writing unrelated fields during that window would be silently
|
|
119
|
+
// clobbered when the stale state object was written back.
|
|
119
120
|
await updateState(projectRoot, (current) => ({
|
|
120
121
|
...current,
|
|
121
122
|
pendingResolution: {
|
|
@@ -155,19 +156,22 @@ async function handlePatchFailures(summary, projectRoot) {
|
|
|
155
156
|
info(' 2. Run "fireforge resolve" to update the patch file with your manual fixes and continue.');
|
|
156
157
|
throw new PatchError(`Failed to apply ${summary.failed.length} patch(es)`, firstFailed?.patch.filename);
|
|
157
158
|
}
|
|
158
|
-
async function checkEngineDrift(engineDir, baseCommit, forceImport) {
|
|
159
|
+
async function checkEngineDrift(engineDir, baseCommit, forceImport, acceptPrompts) {
|
|
159
160
|
const currentHead = await getHead(engineDir);
|
|
160
161
|
if (currentHead === baseCommit)
|
|
161
162
|
return true;
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
163
|
+
// `--yes` and `--force` both answer this prompt; only `--force` also
|
|
164
|
+
// waives the patch-integrity gate further down.
|
|
165
|
+
const promptAnswered = forceImport || acceptPrompts;
|
|
166
|
+
if (!stdioIsInteractive()) {
|
|
167
|
+
if (!promptAnswered) {
|
|
168
|
+
throw new GeneralError('Engine HEAD has drifted from base commit. Re-run with --yes to accept the drift, or --force to also bypass the patch-integrity gate.');
|
|
165
169
|
}
|
|
166
|
-
warn(
|
|
170
|
+
warn(`Engine HEAD has drifted from base commit. Continuing because ${forceImport ? '--force' : '--yes'} was provided in non-interactive mode.`);
|
|
167
171
|
}
|
|
168
172
|
else {
|
|
169
|
-
if (
|
|
170
|
-
warn(
|
|
173
|
+
if (promptAnswered) {
|
|
174
|
+
warn(`Engine HEAD has drifted from base commit. Continuing because ${forceImport ? '--force' : '--yes'} was provided.`);
|
|
171
175
|
}
|
|
172
176
|
else {
|
|
173
177
|
warn('Warning: Engine is not at the baseline commit.');
|
|
@@ -200,10 +204,10 @@ function buildUntilFilenameSet(patches, until) {
|
|
|
200
204
|
return set;
|
|
201
205
|
// Resolve the identifier with the SAME matcher the apply loop uses
|
|
202
206
|
// (`matchesUntilFilename` accepts filenames, extension-less names, AND
|
|
203
|
-
// bare ordinals).
|
|
204
|
-
//
|
|
205
|
-
//
|
|
206
|
-
//
|
|
207
|
+
// bare ordinals). A filename-only match makes `import --until 5` produce
|
|
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
|
+
// patches 1..5 anyway.
|
|
207
211
|
const target = patches.find((p) => matchesUntilFilename(p.filename, until));
|
|
208
212
|
if (!target)
|
|
209
213
|
return set;
|
|
@@ -235,7 +239,11 @@ async function assertScopedManifestConsistency(patchesDir, untilFilenameSet, unt
|
|
|
235
239
|
const issueSummary = scopedManifestIssues.map((issue) => issue.message).join('\n ');
|
|
236
240
|
throw new GeneralError('Patch manifest consistency check failed. Repair patches/patches.json before importing.\n' +
|
|
237
241
|
` ${issueSummary}\n\n` +
|
|
238
|
-
|
|
242
|
+
// Naming the whole-manifest rebuild for drift that is only in
|
|
243
|
+
// `filesAffected` puts the operator one keystroke from rewriting every
|
|
244
|
+
// row to correct one derived list. The narrow repair is the remedy the
|
|
245
|
+
// failure actually calls for.
|
|
246
|
+
recommendManifestRepair(scopedManifestIssues));
|
|
239
247
|
}
|
|
240
248
|
}
|
|
241
249
|
/**
|
|
@@ -280,7 +288,7 @@ async function gateImportIntegrity(paths, untilFilenameSet, until, forceImport)
|
|
|
280
288
|
if (forceImport) {
|
|
281
289
|
warn('Continuing because --force was provided. Integrity issues were not resolved.\n');
|
|
282
290
|
}
|
|
283
|
-
else if (!(
|
|
291
|
+
else if (!stdioIsInteractive()) {
|
|
284
292
|
throw new GeneralError(`Refusing to import while ${integrityIssues.length} patch integrity issue(s) are unresolved. ` +
|
|
285
293
|
`Fix the issues reported above (see "fireforge doctor") or re-run with --force to continue anyway.`);
|
|
286
294
|
}
|
|
@@ -326,15 +334,14 @@ export async function importCommand(projectRoot, options = {}) {
|
|
|
326
334
|
intro(isDryRun ? 'FireForge Import (dry run)' : 'FireForge Import');
|
|
327
335
|
const continueOnFailure = options.continue ?? false;
|
|
328
336
|
const forceImport = options.force ?? false;
|
|
337
|
+
const acceptPrompts = options.yes ?? false;
|
|
329
338
|
const paths = getProjectPaths(projectRoot);
|
|
330
339
|
// Check if engine exists
|
|
331
|
-
|
|
332
|
-
throw new GeneralError('Firefox source not found. Run "fireforge download" first.');
|
|
333
|
-
}
|
|
340
|
+
await assertEngineExists(paths.engine);
|
|
334
341
|
// Engine consistency check before applying patches
|
|
335
342
|
const state = await loadState(projectRoot);
|
|
336
343
|
if (state.baseCommit && !isDryRun) {
|
|
337
|
-
const shouldContinue = await checkEngineDrift(paths.engine, state.baseCommit, forceImport);
|
|
344
|
+
const shouldContinue = await checkEngineDrift(paths.engine, state.baseCommit, forceImport, acceptPrompts);
|
|
338
345
|
if (!shouldContinue)
|
|
339
346
|
return;
|
|
340
347
|
}
|
|
@@ -364,15 +371,14 @@ export async function importCommand(projectRoot, options = {}) {
|
|
|
364
371
|
await assertScopedManifestConsistency(paths.patches, untilFilenameSet, options.until);
|
|
365
372
|
await warnVersionCompatibility(projectRoot, manifest, untilFilenameSet, options.until);
|
|
366
373
|
// Validate patch integrity (detect orphaned modification patches). Warn
|
|
367
|
-
// and prompt the operator to confirm before proceeding
|
|
368
|
-
//
|
|
369
|
-
//
|
|
370
|
-
// error that made diagnosis harder.
|
|
374
|
+
// and prompt the operator to confirm before proceeding: warn-and-continue
|
|
375
|
+
// hides the real root cause, because import then fails during patch
|
|
376
|
+
// application with a secondary, unrelated error.
|
|
371
377
|
//
|
|
372
378
|
// Scope the surfaced issues to the `--until` range: a later patch with
|
|
373
379
|
// integrity problems should not block importing an earlier good subset,
|
|
374
|
-
// which is exactly what operators reach for when the tail of the queue
|
|
375
|
-
//
|
|
380
|
+
// which is exactly what operators reach for when the tail of the queue is
|
|
381
|
+
// broken and they want to keep working against an earlier checkpoint.
|
|
376
382
|
const integrityOk = await gateImportIntegrity(paths, untilFilenameSet, options.until, forceImport);
|
|
377
383
|
if (!integrityOk)
|
|
378
384
|
return;
|
|
@@ -426,6 +432,11 @@ export function registerImport(program, { getProjectRoot, withErrorHandling }) {
|
|
|
426
432
|
.description('Apply patches from the patches directory')
|
|
427
433
|
.option('--continue', 'Continue applying patches even if one fails')
|
|
428
434
|
.option('-f, --force', 'Proceed despite engine drift and overwrite unmanaged changes in patch-touched files')
|
|
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
|
+
// prompt, so a scripted import can run unattended while the integrity
|
|
438
|
+
// refusal stays armed — which is the guard you actually want in CI.
|
|
439
|
+
.option('-y, --yes', 'Answer the drift prompt non-interactively. Unlike --force, this does NOT waive the patch-integrity gate.')
|
|
429
440
|
.option('--until <patch>', 'Apply patches only up to and including this patch (alias: --stop-at)')
|
|
430
441
|
.option('--stop-at <patch>', 'Alias for --until')
|
|
431
442
|
.option('--dry-run', 'Preview which patches would be applied without modifying the engine')
|
|
@@ -3,8 +3,8 @@ import { join } from 'node:path';
|
|
|
3
3
|
import { getProjectPaths, 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
|
-
import { buildPerPatchLintCacheKey, getCachedPerPatchLintIssues, getPerPatchLintCacheHeadSha, loadPerPatchLintCache, savePerPatchLintCache, setCachedPerPatchLintIssues, } from '../core/lint-cache.js';
|
|
7
6
|
import { buildPatchQueueContext, countNonBinaryDiffLines, formatPatchLintIssue, lintExportedPatch, lintPatchQueue, resolvePatchSizeTier, } from '../core/patch-lint.js';
|
|
7
|
+
import { buildPerPatchLintCacheKey, getCachedPerPatchLintIssues, getPerPatchLintCacheHeadSha, loadPerPatchLintCache, savePerPatchLintCache, setCachedPerPatchLintIssues, } from '../core/patch-lint-cache.js';
|
|
8
8
|
import { loadPatchesManifest } from '../core/patch-manifest.js';
|
|
9
9
|
import { evaluatePatchPolicy } from '../core/patch-policy.js';
|
|
10
10
|
import { GeneralError } from '../errors/base.js';
|
|
@@ -106,7 +106,12 @@ async function lintQueuedPatch(patch, lintCtx) {
|
|
|
106
106
|
}
|
|
107
107
|
lintOptions.precomputedCheckJs = precomputedCheckJs;
|
|
108
108
|
}
|
|
109
|
-
const patchIssues = await lintExportedPatch(paths.engine, existing, diff, config,
|
|
109
|
+
const patchIssues = await lintExportedPatch(paths.engine, existing, diff, config, {
|
|
110
|
+
...lintOptions,
|
|
111
|
+
patchQueueCtx: ctx,
|
|
112
|
+
...(ignore ? { ignoreChecks: ignore } : {}),
|
|
113
|
+
...(patch.tier ? { patchTier: patch.tier } : {}),
|
|
114
|
+
});
|
|
110
115
|
const result = {
|
|
111
116
|
status: 'linted',
|
|
112
117
|
existingFiles: existing,
|
|
@@ -155,10 +160,10 @@ async function applyPerPatchResults(subset, results, issues, checkJs, cache) {
|
|
|
155
160
|
// Run-level checkJs errors are emitted once, before the first
|
|
156
161
|
// non-skipped patch's own issues — matching the serial emit point.
|
|
157
162
|
// Deliberately NOT gated on `result.usedCheckJs`: global findings are
|
|
158
|
-
// run-level
|
|
159
|
-
//
|
|
160
|
-
// one
|
|
161
|
-
//
|
|
163
|
+
// run-level and never cached, so gating drops them entirely on an
|
|
164
|
+
// all-cache-hit run and lets a warm run report fewer errors than a cold
|
|
165
|
+
// one. PerRunCheckJs builds its program lazily, so the cost only
|
|
166
|
+
// materialises when checkJs is configured.
|
|
162
167
|
if (checkJs && !globalCheckJsEmitted) {
|
|
163
168
|
globalCheckJsEmitted = true;
|
|
164
169
|
issues.push(...(await checkJs.getGlobal()));
|
|
@@ -170,10 +175,10 @@ async function applyPerPatchResults(subset, results, issues, checkJs, cache) {
|
|
|
170
175
|
for (const issue of result.rawIssues) {
|
|
171
176
|
issues.push({ ...issue, file: `${patch.filename} :: ${issue.file}` });
|
|
172
177
|
}
|
|
173
|
-
// A waived size finding still reports its MEASUREMENT:
|
|
174
|
-
//
|
|
175
|
-
//
|
|
176
|
-
//
|
|
178
|
+
// A waived size finding still reports its MEASUREMENT: the finding stays
|
|
179
|
+
// suppressed (no exit-code / --max-warnings effect) but the current count
|
|
180
|
+
// is readable from the tool that enforces it, so a waiver's cited size
|
|
181
|
+
// can be calibrated without hand-measuring.
|
|
177
182
|
for (const suppressedIssue of result.suppressedIssues) {
|
|
178
183
|
if (!SUPPRESSED_SIZE_CHECKS.has(suppressedIssue.check))
|
|
179
184
|
continue;
|
|
@@ -3,22 +3,22 @@
|
|
|
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
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
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
|
+
* (lazily, promise-memoised) and lets callers slice per-patch findings out of
|
|
9
|
+
* the grouped result. Three levers keep the cost paid only when it buys
|
|
10
|
+
* something:
|
|
11
11
|
*
|
|
12
12
|
* - **Lazy build**: nothing is built until the first cache miss asks.
|
|
13
13
|
* - **Root scoping** (`rootScopePatches`): with `--patches <subset>` the
|
|
14
|
-
* program's roots are only the subset's owned files; the full queue
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* - **Warm-run probe**: run-level ("global") checkJs findings come only
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
14
|
+
* program's roots are only the subset's owned files; the full queue stays
|
|
15
|
+
* resolvable, so cross-patch imports type-check identically while
|
|
16
|
+
* unrelated files are never parsed.
|
|
17
|
+
* - **Warm-run probe**: run-level ("global") checkJs findings come only from
|
|
18
|
+
* a missing `typescript` package or an unreadable shim — never from the
|
|
19
|
+
* built program — so an all-cache-hit run satisfies "warm never reports
|
|
20
|
+
* less than cold" via `probeCheckJsGlobalIssues` instead of building
|
|
21
|
+
* anything.
|
|
22
22
|
*/
|
|
23
23
|
import type { getProjectPaths, loadConfig } from '../core/config.js';
|
|
24
24
|
import { type GroupedCheckJsResult } from '../core/patch-lint-checkjs.js';
|
|
@@ -4,22 +4,22 @@
|
|
|
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
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
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
|
+
* (lazily, promise-memoised) and lets callers slice per-patch findings out of
|
|
10
|
+
* the grouped result. Three levers keep the cost paid only when it buys
|
|
11
|
+
* something:
|
|
12
12
|
*
|
|
13
13
|
* - **Lazy build**: nothing is built until the first cache miss asks.
|
|
14
14
|
* - **Root scoping** (`rootScopePatches`): with `--patches <subset>` the
|
|
15
|
-
* program's roots are only the subset's owned files; the full queue
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* - **Warm-run probe**: run-level ("global") checkJs findings come only
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
15
|
+
* program's roots are only the subset's owned files; the full queue stays
|
|
16
|
+
* resolvable, so cross-patch imports type-check identically while
|
|
17
|
+
* unrelated files are never parsed.
|
|
18
|
+
* - **Warm-run probe**: run-level ("global") checkJs findings come only from
|
|
19
|
+
* a missing `typescript` package or an unreadable shim — never from the
|
|
20
|
+
* built program — so an all-cache-hit run satisfies "warm never reports
|
|
21
|
+
* less than cold" via `probeCheckJsGlobalIssues` instead of building
|
|
22
|
+
* anything.
|
|
23
23
|
*/
|
|
24
24
|
import { invokePatchLintCheckJsGrouped, probeCheckJsGlobalIssues, runCheckJsTestFilesGrouped, } from '../core/patch-lint-checkjs.js';
|
|
25
25
|
import { isTestScriptFile, resolvePatchOwnedSysMjs, resolvePatchOwnedTestScripts, } from '../core/patch-lint-ownership.js';
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
// SPDX-License-Identifier: EUPL-1.2
|
|
2
2
|
/**
|
|
3
3
|
* Machine-readable per-patch lint report (`lint --per-patch --report
|
|
4
|
-
* <path
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* visible with their measurements instead of vanishing.
|
|
4
|
+
* <path>`). One mechanism serves two observability gaps: consumers get each
|
|
5
|
+
* patch's size metrics against the SAME thresholds the size rules fire on,
|
|
6
|
+
* instead of mirroring `countNonBinaryDiffLines`, and lintIgnore-suppressed
|
|
7
|
+
* issues stay visible with their measurements rather than vanishing.
|
|
9
8
|
*
|
|
10
|
-
* Helper module consumed by lint-per-patch.ts; no registrar is exported
|
|
11
|
-
*
|
|
9
|
+
* Helper module consumed by lint-per-patch.ts; no registrar is exported and
|
|
10
|
+
* none is wanted.
|
|
12
11
|
*/
|
|
13
12
|
import { getPatchSizeThresholds, resolvePatchSizeTier, } from '../core/patch-lint.js';
|
|
14
13
|
import { writeJson } from '../utils/fs.js';
|
|
@@ -11,25 +11,24 @@ export interface AggregateLintIgnoreResult {
|
|
|
11
11
|
dropped: number;
|
|
12
12
|
}
|
|
13
13
|
/**
|
|
14
|
-
* Filters aggregate-mode lint issues against per-patch `lintIgnore`
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
14
|
+
* Filters aggregate-mode lint issues against per-patch `lintIgnore` lists
|
|
15
|
+
* drawn from the manifest. An issue is dropped when at least one patch whose
|
|
16
|
+
* `filesAffected` covers `issue.file` lists `issue.check` in its
|
|
17
|
+
* `lintIgnore`.
|
|
18
18
|
*
|
|
19
|
-
* Mirrors the per-patch contract: `--per-patch` mode threads each
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* warning every CI run
|
|
24
|
-
* with no patch-level scope. Attributing each issue's file to its
|
|
19
|
+
* Mirrors the per-patch contract: `--per-patch` mode threads each patch's
|
|
20
|
+
* `lintIgnore` directly into `lintExportedPatch`, so a check the operator
|
|
21
|
+
* explicitly waived in `patches.json` does not surface. Aggregate `--since`
|
|
22
|
+
* mode has no patch-level scope of its own and would otherwise rediscover
|
|
23
|
+
* the suppressed warning every CI run. Attributing each issue's file to its
|
|
25
24
|
* owning patch via `filesAffected` re-establishes the same suppression
|
|
26
|
-
* semantics. Cross-patch findings (forward-import, duplicate-creation)
|
|
27
|
-
*
|
|
28
|
-
*
|
|
25
|
+
* semantics. Cross-patch findings (forward-import, duplicate-creation) also
|
|
26
|
+
* attribute via `issue.file`, which is the offending site and is owned by
|
|
27
|
+
* some patch.
|
|
29
28
|
*
|
|
30
|
-
* Multiple owners: an issue is dropped if **any** owning patch waived
|
|
31
|
-
*
|
|
32
|
-
*
|
|
29
|
+
* Multiple owners: an issue is dropped if **any** owning patch waived the
|
|
30
|
+
* rule. Conservative — never adds new findings, only drops already-waived
|
|
31
|
+
* ones.
|
|
33
32
|
*
|
|
34
33
|
* @param issues - Issues collected from the aggregate lint run.
|
|
35
34
|
* @param ctx - Patch queue context used to attribute file → patch.
|