@hominis/fireforge 0.46.0 → 0.46.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +381 -498
- package/dist/bin/fireforge.d.ts +1 -1
- package/dist/bin/fireforge.js +17 -17
- package/dist/build-info.json +4 -4
- package/dist/src/cli-usage-error.d.ts +9 -9
- package/dist/src/cli-usage-error.js +12 -12
- package/dist/src/cli.d.ts +3 -2
- package/dist/src/cli.js +29 -28
- package/dist/src/commands/bootstrap-checks.js +2 -1
- package/dist/src/commands/bootstrap.js +2 -2
- package/dist/src/commands/build.js +12 -11
- package/dist/src/commands/config.js +9 -9
- package/dist/src/commands/destructive-decision.d.ts +4 -4
- package/dist/src/commands/destructive-decision.js +4 -4
- package/dist/src/commands/discard.js +5 -5
- package/dist/src/commands/doctor-check-core.d.ts +4 -4
- package/dist/src/commands/doctor-external-toolchains.js +2 -2
- package/dist/src/commands/doctor-furnace-config-sync.d.ts +2 -2
- package/dist/src/commands/doctor-furnace-config-sync.js +20 -20
- package/dist/src/commands/doctor-furnace-jar.d.ts +1 -1
- package/dist/src/commands/doctor-furnace-jar.js +1 -1
- package/dist/src/commands/doctor-furnace.js +22 -22
- package/dist/src/commands/doctor-orphaned-harness.d.ts +10 -11
- package/dist/src/commands/doctor-orphaned-harness.js +10 -11
- package/dist/src/commands/doctor-patch-manifest.d.ts +2 -1
- package/dist/src/commands/doctor-patch-manifest.js +7 -6
- package/dist/src/commands/doctor-post-rebase-audit.js +2 -2
- package/dist/src/commands/doctor-source-pin.d.ts +12 -12
- package/dist/src/commands/doctor-source-pin.js +14 -14
- package/dist/src/commands/doctor-working-tree.d.ts +3 -3
- package/dist/src/commands/doctor-working-tree.js +3 -3
- package/dist/src/commands/doctor.d.ts +2 -2
- package/dist/src/commands/doctor.js +9 -9
- package/dist/src/commands/download.js +15 -13
- package/dist/src/commands/export-all.js +8 -8
- package/dist/src/commands/export-flow.d.ts +5 -5
- package/dist/src/commands/export-flow.js +14 -14
- package/dist/src/commands/export-placement-conflicts.d.ts +3 -3
- package/dist/src/commands/export-placement-conflicts.js +9 -9
- package/dist/src/commands/export-placement-gate.d.ts +2 -2
- package/dist/src/commands/export-placement-gate.js +5 -5
- package/dist/src/commands/export-placement-policy.d.ts +1 -1
- package/dist/src/commands/export-placement-policy.js +1 -1
- package/dist/src/commands/export-shared.d.ts +10 -10
- package/dist/src/commands/export-shared.js +13 -13
- package/dist/src/commands/export.js +4 -4
- package/dist/src/commands/furnace/apply.js +16 -16
- package/dist/src/commands/furnace/chrome-doc-remove.d.ts +1 -1
- package/dist/src/commands/furnace/chrome-doc-remove.js +1 -1
- package/dist/src/commands/furnace/chrome-doc-templates.d.ts +14 -14
- package/dist/src/commands/furnace/chrome-doc-templates.js +17 -17
- package/dist/src/commands/furnace/chrome-doc-tests.d.ts +2 -2
- package/dist/src/commands/furnace/chrome-doc-tests.js +4 -4
- package/dist/src/commands/furnace/chrome-doc.d.ts +8 -8
- package/dist/src/commands/furnace/chrome-doc.js +18 -18
- package/dist/src/commands/furnace/create-browser-test.d.ts +1 -1
- package/dist/src/commands/furnace/create-browser-test.js +4 -4
- package/dist/src/commands/furnace/create-dry-run.d.ts +4 -4
- package/dist/src/commands/furnace/create-dry-run.js +4 -4
- package/dist/src/commands/furnace/create-features.d.ts +2 -2
- package/dist/src/commands/furnace/create-features.js +2 -2
- package/dist/src/commands/furnace/create-mochikit.d.ts +4 -4
- package/dist/src/commands/furnace/create-mochikit.js +7 -7
- package/dist/src/commands/furnace/create-templates.d.ts +14 -14
- package/dist/src/commands/furnace/create-templates.js +18 -18
- package/dist/src/commands/furnace/create-xpcshell.d.ts +5 -5
- package/dist/src/commands/furnace/create-xpcshell.js +8 -8
- package/dist/src/commands/furnace/create.d.ts +1 -1
- package/dist/src/commands/furnace/create.js +10 -10
- package/dist/src/commands/furnace/deploy.js +4 -4
- package/dist/src/commands/furnace/diff.js +7 -7
- package/dist/src/commands/furnace/index.js +1 -1
- package/dist/src/commands/furnace/init.js +15 -15
- package/dist/src/commands/furnace/list.js +2 -2
- package/dist/src/commands/furnace/override.d.ts +1 -1
- package/dist/src/commands/furnace/override.js +15 -15
- package/dist/src/commands/furnace/preview.js +17 -17
- package/dist/src/commands/furnace/refresh.js +6 -6
- package/dist/src/commands/furnace/remove-mutations.d.ts +3 -3
- package/dist/src/commands/furnace/remove-mutations.js +19 -18
- package/dist/src/commands/furnace/remove-state.d.ts +1 -1
- package/dist/src/commands/furnace/remove-state.js +1 -1
- package/dist/src/commands/furnace/remove.js +2 -2
- package/dist/src/commands/furnace/rename-browser-test.js +9 -8
- package/dist/src/commands/furnace/rename-xpcshell.d.ts +2 -2
- package/dist/src/commands/furnace/rename-xpcshell.js +3 -3
- package/dist/src/commands/furnace/rename.js +9 -9
- package/dist/src/commands/furnace/scan.js +3 -3
- package/dist/src/commands/furnace/status.js +7 -7
- package/dist/src/commands/furnace/sync.js +6 -6
- package/dist/src/commands/furnace/test-file-name.d.ts +2 -2
- package/dist/src/commands/furnace/test-file-name.js +2 -2
- package/dist/src/commands/furnace/validate.js +11 -12
- package/dist/src/commands/import.js +20 -20
- package/dist/src/commands/lint-per-patch.js +8 -8
- package/dist/src/commands/lint-per-run-checkjs.d.ts +12 -13
- package/dist/src/commands/lint-per-run-checkjs.js +14 -15
- package/dist/src/commands/lint-report.d.ts +3 -3
- package/dist/src/commands/lint-report.js +4 -4
- package/dist/src/commands/lint.d.ts +3 -3
- package/dist/src/commands/lint.js +35 -35
- package/dist/src/commands/manifest.d.ts +4 -4
- package/dist/src/commands/package.js +2 -2
- package/dist/src/commands/patch/compact.d.ts +2 -2
- package/dist/src/commands/patch/compact.js +8 -8
- package/dist/src/commands/patch/delete.d.ts +1 -1
- package/dist/src/commands/patch/delete.js +8 -8
- package/dist/src/commands/patch/lint-ignore.d.ts +3 -4
- package/dist/src/commands/patch/lint-ignore.js +14 -15
- package/dist/src/commands/patch/move-files-create.d.ts +2 -2
- package/dist/src/commands/patch/move-files-create.js +5 -5
- package/dist/src/commands/patch/move-files-into.d.ts +2 -2
- package/dist/src/commands/patch/move-files-into.js +3 -3
- package/dist/src/commands/patch/move-files.js +1 -1
- package/dist/src/commands/patch/patch-context.d.ts +1 -1
- package/dist/src/commands/patch/rename.d.ts +4 -4
- package/dist/src/commands/patch/rename.js +8 -8
- package/dist/src/commands/patch/reorder.js +10 -10
- package/dist/src/commands/patch/split-plan.d.ts +3 -3
- package/dist/src/commands/patch/split-plan.js +6 -5
- package/dist/src/commands/patch/split.d.ts +2 -2
- package/dist/src/commands/patch/split.js +5 -5
- package/dist/src/commands/patch/staged-dependency-validate.d.ts +1 -1
- package/dist/src/commands/patch/staged-dependency-validate.js +3 -3
- package/dist/src/commands/patch/staged-dependency.d.ts +1 -1
- package/dist/src/commands/patch/staged-dependency.js +6 -6
- package/dist/src/commands/patch/tier.d.ts +2 -2
- package/dist/src/commands/patch/tier.js +5 -5
- package/dist/src/commands/patch-rename-map.d.ts +1 -1
- package/dist/src/commands/patch-rename-map.js +1 -1
- package/dist/src/commands/pending-resolution.d.ts +5 -5
- package/dist/src/commands/pending-resolution.js +5 -5
- package/dist/src/commands/re-export-adjacent.d.ts +3 -3
- package/dist/src/commands/re-export-adjacent.js +8 -8
- package/dist/src/commands/re-export-bulk-scan.d.ts +3 -3
- package/dist/src/commands/re-export-bulk-scan.js +17 -17
- package/dist/src/commands/re-export-drift.d.ts +10 -10
- package/dist/src/commands/re-export-drift.js +29 -29
- package/dist/src/commands/re-export-files.js +14 -15
- package/dist/src/commands/re-export-lint.d.ts +26 -26
- package/dist/src/commands/re-export-lint.js +27 -27
- package/dist/src/commands/re-export-options.d.ts +1 -1
- package/dist/src/commands/re-export-options.js +1 -1
- package/dist/src/commands/re-export-register.d.ts +1 -1
- package/dist/src/commands/re-export-register.js +1 -1
- package/dist/src/commands/re-export-scan.d.ts +1 -1
- package/dist/src/commands/re-export-scan.js +7 -7
- package/dist/src/commands/re-export-single.d.ts +1 -1
- package/dist/src/commands/re-export-single.js +20 -20
- package/dist/src/commands/re-export.js +7 -6
- package/dist/src/commands/rebase/abort.js +6 -6
- package/dist/src/commands/rebase/continue.js +8 -7
- package/dist/src/commands/rebase/index.d.ts +1 -1
- package/dist/src/commands/rebase/index.js +3 -3
- package/dist/src/commands/rebase/patch-loop.js +18 -17
- package/dist/src/commands/register.js +5 -5
- package/dist/src/commands/reset.js +1 -1
- package/dist/src/commands/resolve.d.ts +2 -2
- package/dist/src/commands/resolve.js +3 -3
- package/dist/src/commands/run.js +26 -26
- package/dist/src/commands/setup-support.js +4 -4
- package/dist/src/commands/setup.js +1 -1
- package/dist/src/commands/source.js +1 -1
- package/dist/src/commands/status-check.d.ts +3 -3
- package/dist/src/commands/status-check.js +4 -4
- package/dist/src/commands/status-json.d.ts +14 -13
- package/dist/src/commands/status-json.js +9 -8
- package/dist/src/commands/status-output.d.ts +3 -3
- package/dist/src/commands/status-output.js +3 -3
- package/dist/src/commands/status-ownership.d.ts +3 -3
- package/dist/src/commands/status-ownership.js +3 -3
- package/dist/src/commands/status.js +22 -22
- package/dist/src/commands/test-build-phase.d.ts +1 -1
- package/dist/src/commands/test-build-phase.js +17 -17
- package/dist/src/commands/test-diagnose.d.ts +1 -1
- package/dist/src/commands/test-diagnose.js +20 -20
- package/dist/src/commands/test-modes.d.ts +2 -2
- package/dist/src/commands/test-modes.js +4 -4
- package/dist/src/commands/test-run.d.ts +11 -11
- package/dist/src/commands/test-run.js +15 -15
- package/dist/src/commands/test-stale-gate.d.ts +12 -12
- package/dist/src/commands/test-stale-gate.js +13 -13
- package/dist/src/commands/test-verdict.d.ts +6 -6
- package/dist/src/commands/test-verdict.js +11 -11
- package/dist/src/commands/test.d.ts +3 -3
- package/dist/src/commands/test.js +36 -36
- package/dist/src/commands/token-coverage.js +3 -3
- package/dist/src/commands/token-list.js +5 -5
- package/dist/src/commands/token.js +9 -9
- package/dist/src/commands/tree.js +19 -19
- package/dist/src/commands/typecheck.d.ts +6 -6
- package/dist/src/commands/typecheck.js +7 -7
- package/dist/src/commands/verify.d.ts +3 -3
- package/dist/src/commands/verify.js +10 -10
- package/dist/src/commands/watch.js +11 -11
- package/dist/src/commands/wire.js +13 -13
- package/dist/src/core/ast-utils.d.ts +7 -7
- package/dist/src/core/ast-utils.js +8 -8
- package/dist/src/core/branding.d.ts +5 -5
- package/dist/src/core/branding.js +3 -3
- package/dist/src/core/browser-wire.d.ts +1 -1
- package/dist/src/core/browser-wire.js +4 -4
- package/dist/src/core/build-audit-platform.d.ts +6 -6
- package/dist/src/core/build-audit-platform.js +26 -26
- package/dist/src/core/build-audit-registration.d.ts +5 -5
- package/dist/src/core/build-audit-registration.js +7 -7
- package/dist/src/core/build-audit-resolve.d.ts +5 -5
- package/dist/src/core/build-audit-resolve.js +6 -6
- package/dist/src/core/build-audit-skip.d.ts +8 -8
- package/dist/src/core/build-audit-skip.js +12 -12
- package/dist/src/core/build-audit-transforms.d.ts +2 -2
- package/dist/src/core/build-audit-transforms.js +3 -3
- package/dist/src/core/build-audit.d.ts +8 -8
- package/dist/src/core/build-audit.js +39 -37
- package/dist/src/core/build-baseline-types.d.ts +19 -18
- package/dist/src/core/build-baseline-types.js +1 -1
- package/dist/src/core/build-baseline.d.ts +8 -8
- package/dist/src/core/build-baseline.js +14 -14
- package/dist/src/core/build-jar-escalation.d.ts +8 -8
- package/dist/src/core/build-jar-escalation.js +15 -15
- package/dist/src/core/build-overwrite-guard.d.ts +4 -4
- package/dist/src/core/build-overwrite-guard.js +13 -13
- package/dist/src/core/build-prepare.d.ts +4 -4
- package/dist/src/core/build-prepare.js +16 -15
- package/dist/src/core/config-mutate.js +4 -4
- package/dist/src/core/config-state.js +2 -2
- package/dist/src/core/config-validate-build-audit.js +3 -3
- package/dist/src/core/config-validate-file-size.d.ts +1 -1
- package/dist/src/core/config-validate-file-size.js +2 -2
- package/dist/src/core/config-validate.js +8 -9
- package/dist/src/core/config.d.ts +10 -10
- package/dist/src/core/config.js +10 -10
- package/dist/src/core/coverage-extend.d.ts +16 -16
- package/dist/src/core/coverage-extend.js +16 -16
- package/dist/src/core/destructive.d.ts +14 -14
- package/dist/src/core/destructive.js +9 -9
- package/dist/src/core/diff-hunks.d.ts +2 -2
- package/dist/src/core/diff-hunks.js +7 -7
- package/dist/src/core/discard-baseline.d.ts +10 -10
- package/dist/src/core/discard-baseline.js +15 -16
- package/dist/src/core/display-state.d.ts +11 -11
- package/dist/src/core/display-state.js +12 -12
- package/dist/src/core/engine-changes.d.ts +2 -2
- package/dist/src/core/engine-changes.js +2 -2
- package/dist/src/core/engine-precondition.d.ts +4 -4
- package/dist/src/core/engine-precondition.js +2 -2
- package/dist/src/core/engine-session-lock.d.ts +18 -18
- package/dist/src/core/engine-session-lock.js +37 -37
- package/dist/src/core/export-moved-code-shape.d.ts +7 -7
- package/dist/src/core/export-moved-code-shape.js +8 -8
- package/dist/src/core/file-lock-owner.d.ts +11 -11
- package/dist/src/core/file-lock-owner.js +18 -18
- package/dist/src/core/file-lock.d.ts +12 -12
- package/dist/src/core/file-lock.js +52 -39
- package/dist/src/core/firefox-cache.d.ts +1 -1
- package/dist/src/core/firefox-cache.js +10 -10
- package/dist/src/core/firefox-download.d.ts +3 -3
- package/dist/src/core/firefox-download.js +6 -6
- package/dist/src/core/firefox-extract.d.ts +2 -2
- package/dist/src/core/firefox-extract.js +13 -13
- package/dist/src/core/firefox.d.ts +5 -5
- package/dist/src/core/firefox.js +8 -8
- package/dist/src/core/furnace-apply-dry-run.js +1 -1
- package/dist/src/core/furnace-apply-ftl.d.ts +5 -5
- package/dist/src/core/furnace-apply-ftl.js +8 -8
- package/dist/src/core/furnace-apply-helpers.d.ts +9 -9
- package/dist/src/core/furnace-apply-helpers.js +21 -21
- package/dist/src/core/furnace-apply-output.js +1 -1
- package/dist/src/core/furnace-apply-overwrite-warn.d.ts +9 -9
- package/dist/src/core/furnace-apply-overwrite-warn.js +9 -9
- package/dist/src/core/furnace-apply-undeploy-actions.d.ts +1 -1
- package/dist/src/core/furnace-apply-undeploy-actions.js +1 -1
- package/dist/src/core/furnace-apply.d.ts +3 -3
- package/dist/src/core/furnace-apply.js +22 -21
- package/dist/src/core/furnace-checksum-utils.d.ts +5 -5
- package/dist/src/core/furnace-checksum-utils.js +5 -5
- package/dist/src/core/furnace-config-custom.d.ts +1 -1
- package/dist/src/core/furnace-config-custom.js +2 -2
- package/dist/src/core/furnace-config-order.js +1 -1
- package/dist/src/core/furnace-config-tokens.d.ts +3 -3
- package/dist/src/core/furnace-config-tokens.js +3 -3
- package/dist/src/core/furnace-config-validate.js +2 -2
- package/dist/src/core/furnace-config.d.ts +4 -4
- package/dist/src/core/furnace-config.js +18 -18
- package/dist/src/core/furnace-constants.d.ts +6 -6
- package/dist/src/core/furnace-constants.js +6 -6
- package/dist/src/core/furnace-css-fragments.d.ts +6 -6
- package/dist/src/core/furnace-css-fragments.js +11 -11
- package/dist/src/core/furnace-dir-entry.d.ts +1 -1
- package/dist/src/core/furnace-dir-entry.js +1 -1
- package/dist/src/core/furnace-jsconfig.d.ts +7 -7
- package/dist/src/core/furnace-jsconfig.js +22 -20
- package/dist/src/core/furnace-operation.d.ts +21 -20
- package/dist/src/core/furnace-operation.js +36 -34
- package/dist/src/core/furnace-precondition.d.ts +10 -10
- package/dist/src/core/furnace-precondition.js +8 -8
- package/dist/src/core/furnace-refresh.js +2 -2
- package/dist/src/core/furnace-registration-ast.d.ts +2 -2
- package/dist/src/core/furnace-registration-ast.js +9 -9
- package/dist/src/core/furnace-registration-remove.d.ts +4 -4
- package/dist/src/core/furnace-registration-remove.js +6 -6
- package/dist/src/core/furnace-registration-validate.d.ts +2 -2
- package/dist/src/core/furnace-registration-validate.js +2 -2
- package/dist/src/core/furnace-registration.d.ts +5 -5
- package/dist/src/core/furnace-registration.js +7 -7
- package/dist/src/core/furnace-rollback.d.ts +1 -1
- package/dist/src/core/furnace-rollback.js +5 -5
- package/dist/src/core/furnace-stale-export.d.ts +17 -16
- package/dist/src/core/furnace-stale-export.js +16 -15
- package/dist/src/core/furnace-staleness.d.ts +2 -2
- package/dist/src/core/furnace-staleness.js +2 -2
- package/dist/src/core/furnace-state-persist.d.ts +10 -10
- package/dist/src/core/furnace-state-persist.js +10 -10
- package/dist/src/core/furnace-step-errors.d.ts +6 -6
- package/dist/src/core/furnace-step-errors.js +6 -6
- package/dist/src/core/furnace-validate-accessibility.js +14 -14
- package/dist/src/core/furnace-validate-compatibility.js +9 -9
- package/dist/src/core/furnace-validate-registration.d.ts +2 -2
- package/dist/src/core/furnace-validate-registration.js +13 -13
- package/dist/src/core/furnace-validate-structure.d.ts +1 -1
- package/dist/src/core/furnace-validate-structure.js +4 -4
- package/dist/src/core/furnace-validate.js +9 -9
- package/dist/src/core/furnace-version-drift.d.ts +5 -5
- package/dist/src/core/furnace-version-drift.js +5 -5
- package/dist/src/core/git-base.d.ts +4 -4
- package/dist/src/core/git-base.js +9 -9
- package/dist/src/core/git-diff-new-file.d.ts +4 -4
- package/dist/src/core/git-diff-new-file.js +8 -8
- package/dist/src/core/git-diff.d.ts +4 -4
- package/dist/src/core/git-diff.js +35 -34
- package/dist/src/core/git-file-ops.d.ts +6 -6
- package/dist/src/core/git-file-ops.js +7 -7
- package/dist/src/core/git-readonly-index.d.ts +12 -12
- package/dist/src/core/git-readonly-index.js +12 -12
- package/dist/src/core/git-status.d.ts +4 -4
- package/dist/src/core/git-status.js +4 -4
- package/dist/src/core/git.d.ts +3 -3
- package/dist/src/core/git.js +14 -14
- package/dist/src/core/harness-orphans.d.ts +17 -17
- package/dist/src/core/harness-orphans.js +20 -20
- package/dist/src/core/history-log.d.ts +3 -3
- package/dist/src/core/history-log.js +3 -3
- package/dist/src/core/license-headers.d.ts +19 -18
- package/dist/src/core/license-headers.js +29 -28
- package/dist/src/core/mach-build-artifacts.d.ts +21 -21
- package/dist/src/core/mach-build-artifacts.js +23 -23
- package/dist/src/core/mach-error-hints.d.ts +5 -5
- package/dist/src/core/mach-error-hints.js +13 -13
- package/dist/src/core/mach-known-noise-filter.d.ts +41 -38
- package/dist/src/core/mach-known-noise-filter.js +53 -50
- package/dist/src/core/mach-mozconfig.d.ts +6 -6
- package/dist/src/core/mach-mozconfig.js +15 -15
- package/dist/src/core/mach-python.d.ts +2 -1
- package/dist/src/core/mach-python.js +4 -3
- package/dist/src/core/mach-resource-shim.d.ts +12 -12
- package/dist/src/core/mach-resource-shim.js +20 -20
- package/dist/src/core/mach.d.ts +23 -23
- package/dist/src/core/mach.js +36 -36
- package/dist/src/core/marionette-port.d.ts +15 -13
- package/dist/src/core/marionette-port.js +34 -31
- package/dist/src/core/marionette-preflight.d.ts +6 -6
- package/dist/src/core/marionette-preflight.js +23 -23
- package/dist/src/core/markdown-table.d.ts +9 -9
- package/dist/src/core/markdown-table.js +14 -14
- package/dist/src/core/mochitest-server-port.d.ts +8 -8
- package/dist/src/core/mochitest-server-port.js +14 -14
- package/dist/src/core/module-resolution-preflight.d.ts +8 -8
- package/dist/src/core/module-resolution-preflight.js +11 -11
- package/dist/src/core/moz-manifest-helpers.d.ts +7 -7
- package/dist/src/core/moz-manifest-helpers.js +7 -7
- package/dist/src/core/moz-manifest-register.d.ts +1 -1
- package/dist/src/core/moz-manifest-register.js +2 -2
- package/dist/src/core/moz-manifest-rules.js +11 -11
- package/dist/src/core/moz-manifest-tokenizers.js +1 -1
- package/dist/src/core/ownership-table.d.ts +5 -5
- package/dist/src/core/ownership-table.js +7 -7
- package/dist/src/core/parser-fallback.d.ts +3 -3
- package/dist/src/core/parser-fallback.js +3 -3
- package/dist/src/core/patch-apply-fuzz.d.ts +5 -5
- package/dist/src/core/patch-apply-fuzz.js +9 -9
- package/dist/src/core/patch-apply.d.ts +9 -9
- package/dist/src/core/patch-apply.js +30 -30
- package/dist/src/core/patch-export-update.d.ts +4 -4
- package/dist/src/core/patch-export-update.js +3 -3
- package/dist/src/core/patch-export.d.ts +10 -10
- package/dist/src/core/patch-export.js +13 -13
- package/dist/src/core/patch-identifier-suggest.d.ts +1 -1
- package/dist/src/core/patch-identifier-suggest.js +4 -4
- package/dist/src/core/patch-lint-binary.d.ts +7 -7
- package/dist/src/core/patch-lint-cache.d.ts +2 -2
- package/dist/src/core/patch-lint-cache.js +13 -13
- package/dist/src/core/patch-lint-checkjs.d.ts +26 -26
- package/dist/src/core/patch-lint-checkjs.js +42 -41
- package/dist/src/core/patch-lint-chrome-jsdoc.d.ts +8 -9
- package/dist/src/core/patch-lint-chrome-jsdoc.js +10 -11
- package/dist/src/core/patch-lint-creators.d.ts +3 -3
- package/dist/src/core/patch-lint-creators.js +3 -3
- package/dist/src/core/patch-lint-cross.d.ts +13 -13
- package/dist/src/core/patch-lint-cross.js +21 -21
- package/dist/src/core/patch-lint-css.d.ts +1 -1
- package/dist/src/core/patch-lint-css.js +5 -5
- package/dist/src/core/patch-lint-diff-tag.d.ts +5 -5
- package/dist/src/core/patch-lint-diff-tag.js +5 -5
- package/dist/src/core/patch-lint-diff.d.ts +4 -4
- package/dist/src/core/patch-lint-diff.js +4 -4
- package/dist/src/core/patch-lint-file-size.d.ts +3 -3
- package/dist/src/core/patch-lint-file-size.js +3 -3
- package/dist/src/core/patch-lint-forward-registration.d.ts +4 -4
- package/dist/src/core/patch-lint-forward-registration.js +12 -12
- package/dist/src/core/patch-lint-jsdoc.d.ts +2 -2
- package/dist/src/core/patch-lint-jsdoc.js +11 -11
- package/dist/src/core/patch-lint-module-registration.d.ts +1 -1
- package/dist/src/core/patch-lint-module-registration.js +1 -1
- package/dist/src/core/patch-lint-mozbuild.d.ts +1 -1
- package/dist/src/core/patch-lint-mozbuild.js +10 -10
- package/dist/src/core/patch-lint-observer.d.ts +3 -3
- package/dist/src/core/patch-lint-observer.js +7 -7
- package/dist/src/core/patch-lint-ownership.d.ts +6 -6
- package/dist/src/core/patch-lint-ownership.js +6 -6
- package/dist/src/core/patch-lint-prettier.d.ts +6 -6
- package/dist/src/core/patch-lint-prettier.js +6 -6
- package/dist/src/core/patch-lint-queue-types.d.ts +1 -1
- package/dist/src/core/patch-lint-queue-types.js +1 -1
- package/dist/src/core/patch-lint-staged-registration.d.ts +2 -2
- package/dist/src/core/patch-lint-staged-registration.js +6 -6
- package/dist/src/core/patch-lint-unmanaged-companion.d.ts +23 -23
- package/dist/src/core/patch-lint-unmanaged-companion.js +26 -26
- package/dist/src/core/patch-lint.d.ts +27 -26
- package/dist/src/core/patch-lint.js +48 -46
- package/dist/src/core/patch-lock.d.ts +1 -1
- package/dist/src/core/patch-lock.js +8 -8
- package/dist/src/core/patch-manifest-consistency.d.ts +7 -7
- package/dist/src/core/patch-manifest-consistency.js +16 -17
- package/dist/src/core/patch-manifest-files-affected.d.ts +1 -1
- package/dist/src/core/patch-manifest-files-affected.js +3 -3
- package/dist/src/core/patch-manifest-io.d.ts +14 -14
- package/dist/src/core/patch-manifest-io.js +27 -27
- package/dist/src/core/patch-manifest-query.d.ts +1 -1
- package/dist/src/core/patch-manifest-query.js +4 -4
- package/dist/src/core/patch-manifest-resolve.d.ts +5 -5
- package/dist/src/core/patch-manifest-resolve.js +7 -7
- package/dist/src/core/patch-manifest-validate.js +3 -3
- package/dist/src/core/patch-manifest.d.ts +2 -2
- package/dist/src/core/patch-manifest.js +2 -2
- package/dist/src/core/patch-parse.d.ts +14 -14
- package/dist/src/core/patch-parse.js +16 -16
- package/dist/src/core/patch-registration-refs.d.ts +4 -4
- package/dist/src/core/patch-registration-refs.js +7 -7
- package/dist/src/core/patch-transform.d.ts +8 -8
- package/dist/src/core/patch-transform.js +13 -13
- package/dist/src/core/process-cpu-time.d.ts +1 -1
- package/dist/src/core/process-cpu-time.js +5 -5
- package/dist/src/core/rebase-session.d.ts +7 -7
- package/dist/src/core/rebase-session.js +8 -8
- package/dist/src/core/register-result.d.ts +1 -1
- package/dist/src/core/register-result.js +1 -1
- package/dist/src/core/register-scaffold.d.ts +2 -2
- package/dist/src/core/register-scaffold.js +3 -3
- package/dist/src/core/register-shared-css.d.ts +3 -3
- package/dist/src/core/register-shared-css.js +4 -4
- package/dist/src/core/register-xpcshell-test.d.ts +2 -2
- package/dist/src/core/register-xpcshell-test.js +2 -2
- package/dist/src/core/run-log-redact.d.ts +12 -12
- package/dist/src/core/run-log-redact.js +16 -16
- package/dist/src/core/run-log.d.ts +9 -9
- package/dist/src/core/run-log.js +14 -14
- package/dist/src/core/shared-ftl.d.ts +2 -2
- package/dist/src/core/shared-ftl.js +6 -6
- package/dist/src/core/signal-critical.d.ts +2 -2
- package/dist/src/core/signal-critical.js +2 -2
- package/dist/src/core/smoke-patterns.d.ts +5 -5
- package/dist/src/core/smoke-patterns.js +9 -9
- package/dist/src/core/state-file.d.ts +3 -3
- package/dist/src/core/status-binary.d.ts +8 -8
- package/dist/src/core/status-binary.js +12 -12
- package/dist/src/core/status-classify.d.ts +17 -17
- package/dist/src/core/status-classify.js +11 -11
- package/dist/src/core/test-changed-prefs.d.ts +12 -12
- package/dist/src/core/test-changed-prefs.js +15 -15
- package/dist/src/core/test-harness-crash.d.ts +39 -39
- package/dist/src/core/test-harness-crash.js +67 -67
- package/dist/src/core/test-harness-output.d.ts +7 -7
- package/dist/src/core/test-harness-output.js +7 -7
- package/dist/src/core/test-harness-verdict-notes.d.ts +13 -14
- package/dist/src/core/test-harness-verdict-notes.js +4 -4
- package/dist/src/core/test-path-scope.d.ts +8 -8
- package/dist/src/core/test-path-scope.js +11 -11
- package/dist/src/core/test-stale-check.d.ts +22 -21
- package/dist/src/core/test-stale-check.js +29 -28
- package/dist/src/core/test-stale-symlink.d.ts +1 -1
- package/dist/src/core/test-stale-symlink.js +1 -1
- package/dist/src/core/test-stall-triage.d.ts +9 -9
- package/dist/src/core/test-stall-triage.js +22 -22
- package/dist/src/core/token-category.d.ts +4 -4
- package/dist/src/core/token-category.js +13 -12
- package/dist/src/core/token-coverage.js +4 -5
- package/dist/src/core/token-dark-mode.d.ts +9 -9
- package/dist/src/core/token-dark-mode.js +11 -11
- package/dist/src/core/token-docs.d.ts +1 -1
- package/dist/src/core/token-inventory.d.ts +6 -6
- package/dist/src/core/token-inventory.js +7 -7
- package/dist/src/core/token-manager.d.ts +3 -3
- package/dist/src/core/token-manager.js +21 -21
- package/dist/src/core/token-scaffold.d.ts +4 -4
- package/dist/src/core/token-scaffold.js +4 -4
- package/dist/src/core/token-variant.d.ts +14 -14
- package/dist/src/core/token-variant.js +32 -32
- package/dist/src/core/toolchain-preflight.d.ts +15 -15
- package/dist/src/core/toolchain-preflight.js +22 -22
- package/dist/src/core/tree-cow.d.ts +3 -3
- package/dist/src/core/tree-cow.js +6 -6
- package/dist/src/core/tree-guard.d.ts +3 -3
- package/dist/src/core/tree-guard.js +23 -23
- package/dist/src/core/tree-store.d.ts +15 -15
- package/dist/src/core/tree-store.js +35 -33
- package/dist/src/core/typecheck-shim.d.ts +16 -15
- package/dist/src/core/typecheck-shim.js +26 -25
- package/dist/src/core/typecheck.d.ts +12 -12
- package/dist/src/core/typecheck.js +31 -31
- package/dist/src/core/wire-destroy.d.ts +2 -2
- package/dist/src/core/wire-destroy.js +5 -5
- package/dist/src/core/wire-dom-fragment.d.ts +3 -3
- package/dist/src/core/wire-dom-fragment.js +6 -6
- package/dist/src/core/wire-init.d.ts +2 -2
- package/dist/src/core/wire-init.js +7 -7
- package/dist/src/core/wire-subscript.d.ts +1 -1
- package/dist/src/core/wire-subscript.js +3 -3
- package/dist/src/core/wire-utils.d.ts +9 -9
- package/dist/src/core/wire-utils.js +11 -11
- package/dist/src/core/xpcshell-appdir.d.ts +20 -20
- package/dist/src/core/xpcshell-appdir.js +26 -26
- package/dist/src/core/xpcshell-profile-dir.d.ts +3 -3
- package/dist/src/core/xpcshell-profile-dir.js +7 -7
- package/dist/src/errors/base.d.ts +22 -21
- package/dist/src/errors/base.js +22 -21
- package/dist/src/errors/build.d.ts +6 -6
- package/dist/src/errors/build.js +6 -6
- package/dist/src/errors/codes.d.ts +10 -10
- package/dist/src/errors/codes.js +10 -10
- package/dist/src/errors/furnace.d.ts +2 -2
- package/dist/src/errors/git.d.ts +1 -1
- package/dist/src/errors/git.js +1 -1
- package/dist/src/errors/patch.d.ts +3 -3
- package/dist/src/errors/patch.js +3 -3
- package/dist/src/errors/rebase.d.ts +1 -1
- package/dist/src/errors/rebase.js +1 -1
- package/dist/src/errors/run.d.ts +1 -1
- package/dist/src/errors/run.js +1 -1
- package/dist/src/index.d.ts +4 -4
- package/dist/src/index.js +4 -4
- package/dist/src/types/commands/options.d.ts +86 -85
- package/dist/src/types/commands/patches.d.ts +19 -19
- package/dist/src/types/commands/project.d.ts +3 -3
- package/dist/src/types/config.d.ts +24 -23
- package/dist/src/types/furnace.d.ts +17 -17
- package/dist/src/types/json.d.ts +3 -3
- package/dist/src/types/json.js +2 -2
- package/dist/src/types/typecheck.d.ts +3 -3
- package/dist/src/utils/assert.d.ts +1 -1
- package/dist/src/utils/assert.js +6 -6
- package/dist/src/utils/build-info.d.ts +5 -5
- package/dist/src/utils/build-info.js +6 -6
- package/dist/src/utils/child-env.d.ts +5 -5
- package/dist/src/utils/child-env.js +5 -5
- package/dist/src/utils/concurrency.d.ts +2 -2
- package/dist/src/utils/concurrency.js +2 -2
- package/dist/src/utils/elapsed.js +1 -1
- package/dist/src/utils/errors.d.ts +8 -8
- package/dist/src/utils/errors.js +8 -8
- package/dist/src/utils/fs.d.ts +1 -1
- package/dist/src/utils/fs.js +8 -8
- package/dist/src/utils/line-dispatch.d.ts +3 -3
- package/dist/src/utils/line-dispatch.js +5 -5
- package/dist/src/utils/logger.d.ts +4 -4
- package/dist/src/utils/logger.js +11 -11
- package/dist/src/utils/machine-output.js +2 -2
- package/dist/src/utils/options.d.ts +13 -13
- package/dist/src/utils/options.js +20 -20
- package/dist/src/utils/package-root.js +2 -2
- package/dist/src/utils/paths.d.ts +4 -4
- package/dist/src/utils/paths.js +4 -4
- package/dist/src/utils/process-group.d.ts +8 -8
- package/dist/src/utils/process-group.js +19 -19
- package/dist/src/utils/process.d.ts +34 -33
- package/dist/src/utils/process.js +20 -19
- package/dist/src/utils/ps-duration.d.ts +4 -4
- package/dist/src/utils/ps-duration.js +6 -6
- package/dist/src/utils/regex.d.ts +4 -4
- package/dist/src/utils/regex.js +7 -7
- package/dist/src/utils/sleep.d.ts +7 -7
- package/dist/src/utils/sleep.js +7 -7
- package/dist/src/utils/stdio-drain.d.ts +7 -7
- package/dist/src/utils/stdio-drain.js +8 -8
- package/dist/src/utils/validation.d.ts +11 -12
- package/dist/src/utils/validation.js +20 -21
- package/docs/README.md +2 -2
- package/docs/configuration.md +120 -114
- package/docs/exit-codes.md +63 -58
- package/docs/furnace.md +20 -19
- package/docs/lifecycle-invariants.md +412 -251
- package/docs/machine-output.md +33 -32
- package/docs/patch-workflow.md +48 -45
- package/docs/run-logs.md +62 -58
- package/docs/testing.md +101 -101
- package/docs/verification-trees.md +23 -22
- package/package.json +2 -2
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Verification-tree storage and lifecycle for `fireforge tree`.
|
|
4
4
|
*
|
|
5
|
-
* A tree is a
|
|
6
|
-
* `.fireforge/trees/<name
|
|
5
|
+
* A tree is a full project-root CoW snapshot under
|
|
6
|
+
* `.fireforge/trees/<name>`. `getProjectRoot()` walks up from cwd, so
|
|
7
7
|
* every read command (status, lint, typecheck, verify, doctor,
|
|
8
8
|
* `export --dry-run`) runs inside the tree unmodified and its build /
|
|
9
9
|
* engine-session locks key on the tree root automatically. Trees are
|
|
@@ -92,23 +92,23 @@ export function getTreeMarkerPath(root) {
|
|
|
92
92
|
*
|
|
93
93
|
* Only ENOENT/ENOTDIR mean `absent`: any other probe failure (EACCES on the
|
|
94
94
|
* `.fireforge` directory, EIO, …) reports `corrupt`, because "we cannot read
|
|
95
|
-
* the marker" is not evidence that there is no marker
|
|
95
|
+
* the marker" is not evidence that there is no marker: a `pathExists`
|
|
96
96
|
* pre-check classifies a tree with an unreadable `.fireforge` as `absent`
|
|
97
97
|
* and hands it the full mutating command set.
|
|
98
98
|
*/
|
|
99
99
|
/**
|
|
100
100
|
* Naming convention for state-file readers:
|
|
101
|
-
* - `readX(): Promise<XRead>`
|
|
101
|
+
* - `readX(): Promise<XRead>` is the tri-state read: absent, corrupt, or
|
|
102
102
|
* valid.
|
|
103
|
-
* - `tryReadX(): Promise<X | undefined>`
|
|
103
|
+
* - `tryReadX(): Promise<X | undefined>` collapses absent and corrupt.
|
|
104
104
|
*/
|
|
105
105
|
export async function readTreeMarker(root) {
|
|
106
106
|
const markerPath = getTreeMarkerPath(root);
|
|
107
107
|
try {
|
|
108
108
|
const raw = await readJson(markerPath);
|
|
109
|
-
// Version
|
|
110
|
-
// check into `isTreeMarker` makes a marker from a
|
|
111
|
-
// as "missing or mistypes a required field"
|
|
109
|
+
// Version first, and reported distinctly. Folding the schemaVersion
|
|
110
|
+
// check into `isTreeMarker` makes a marker from a newer FireForge read
|
|
111
|
+
// as "missing or mistypes a required field", and `tree-guard.ts` is
|
|
112
112
|
// default-deny on corrupt, so the operator is locked out of every
|
|
113
113
|
// mutating command inside the tree by a message claiming the file is
|
|
114
114
|
// malformed when it is merely newer.
|
|
@@ -135,7 +135,7 @@ export async function readTreeMarker(root) {
|
|
|
135
135
|
}
|
|
136
136
|
/**
|
|
137
137
|
* Reads the tree marker for a project root, or undefined when it is absent
|
|
138
|
-
*
|
|
138
|
+
* or unreadable.
|
|
139
139
|
*
|
|
140
140
|
* For display and best-effort paths only (`tree list` renders an unreadable
|
|
141
141
|
* marker as staleness 'unknown'). Anything that decides whether a mutation may
|
|
@@ -150,8 +150,8 @@ export async function tryReadTreeMarker(root) {
|
|
|
150
150
|
* the one this tree's marker vouched for as rewritten-and-reconfigured. A
|
|
151
151
|
* mismatch means an objdir appeared in the tree through some path other than
|
|
152
152
|
* `tree create --with-objdir` (manual copy, partial restore), so nothing
|
|
153
|
-
* proves it was relocated
|
|
154
|
-
* No-op outside a tree
|
|
153
|
+
* proves it was relocated, and running against it could consult primary paths.
|
|
154
|
+
* No-op outside a tree. A corrupt marker is already refused by the guard.
|
|
155
155
|
*/
|
|
156
156
|
export async function assertObjdirMatchesTreeMarker(projectRoot, objDir) {
|
|
157
157
|
const state = await readTreeMarker(projectRoot);
|
|
@@ -214,17 +214,17 @@ export function assertValidTreeName(name) {
|
|
|
214
214
|
}
|
|
215
215
|
/**
|
|
216
216
|
* Refuses an objdir that is not a plain directory physically inside
|
|
217
|
-
* `engineDir
|
|
217
|
+
* `engineDir`. Every `cp` mode `cloneEntry` uses preserves symlinks, so
|
|
218
218
|
* a symlinked `engine/obj-*` would be cloned as a symlink pointing back
|
|
219
219
|
* at the original (primary or fully external) build, and the clone's
|
|
220
220
|
* mozinfo rewrite and `_virtualenvs` removal would then mutate that
|
|
221
221
|
* original through the link. Checks lstat (the entry itself must be a
|
|
222
|
-
* real directory)
|
|
223
|
-
* through a symlinked parent resolves elsewhere)
|
|
222
|
+
* real directory) and realpath containment (a real directory reached
|
|
223
|
+
* through a symlinked parent resolves elsewhere). The rewriter's
|
|
224
224
|
* lexical `resolve()` paths cannot detect either. Also validates the
|
|
225
225
|
* name as a single `obj-*` path segment. Role `'primary'` guards before
|
|
226
|
-
* any copying starts
|
|
227
|
-
* write goes through it (defense in depth).
|
|
226
|
+
* any copying starts. Role `'cloned'` re-checks the tree's copy before
|
|
227
|
+
* any write goes through it (defense in depth).
|
|
228
228
|
*/
|
|
229
229
|
async function assertCloneSafeObjdir(engineDir, objDir, role) {
|
|
230
230
|
const where = role === 'primary' ? 'engine/' : "the tree's engine/";
|
|
@@ -259,8 +259,8 @@ async function assertCloneSafeObjdir(engineDir, objDir, role) {
|
|
|
259
259
|
* Materialises the tree at `treeRoot` from `primaryRoot` using `capability`
|
|
260
260
|
* ('none' = plain copy, already gated on --force-copy by the caller).
|
|
261
261
|
*
|
|
262
|
-
* The engine is cloned one
|
|
263
|
-
* directories are never traversed or materialised
|
|
262
|
+
* The engine is cloned one top-level entry at a time so unwanted `obj-*`
|
|
263
|
+
* directories are never traversed or materialised. On a Firefox tree, even
|
|
264
264
|
* CoW-cloning and then deleting an objdir touches metadata for millions of
|
|
265
265
|
* build outputs. With `withObjdir` exactly that objdir is included (after
|
|
266
266
|
* {@link assertCloneSafeObjdir} refuses symlinked or engine-escaping objdirs
|
|
@@ -272,7 +272,7 @@ async function assertCloneSafeObjdir(engineDir, objDir, role) {
|
|
|
272
272
|
export async function cloneTree(args) {
|
|
273
273
|
const { primaryRoot, treeRoot, name, capability, createdAt, withObjdir } = args;
|
|
274
274
|
if (withObjdir) {
|
|
275
|
-
// Refuse a symlinked/escaping primary objdir
|
|
275
|
+
// Refuse a symlinked/escaping primary objdir before any copying: the
|
|
276
276
|
// clone would carry the symlink and every later write would land in
|
|
277
277
|
// the original build (see assertCloneSafeObjdir).
|
|
278
278
|
await assertCloneSafeObjdir(join(primaryRoot, 'engine'), withObjdir.objDir, 'primary');
|
|
@@ -293,8 +293,8 @@ export async function cloneTree(args) {
|
|
|
293
293
|
});
|
|
294
294
|
});
|
|
295
295
|
// A selected objdir embeds absolute topsrcdir/topobjdir paths back into
|
|
296
|
-
// the
|
|
297
|
-
// usable
|
|
296
|
+
// the primary tree. It is rewritten below before the marker records it as
|
|
297
|
+
// usable. No other objdir ever enters the snapshot.
|
|
298
298
|
if (await pathExists(engineDir)) {
|
|
299
299
|
// Defensive: never inherit a mid-operation git index lock.
|
|
300
300
|
await rm(join(engineDir, '.git', 'index.lock'), { force: true });
|
|
@@ -302,7 +302,7 @@ export async function cloneTree(args) {
|
|
|
302
302
|
if (withObjdir) {
|
|
303
303
|
await rewriteClonedObjdir(engineDir, withObjdir.objDir);
|
|
304
304
|
// Regenerate configure output (config.status, backend.mk, Makefile,
|
|
305
|
-
// config/autoconf.mk) against the tree's paths
|
|
305
|
+
// config/autoconf.mk) against the tree's paths. The mozinfo rewrite
|
|
306
306
|
// alone leaves those naming the primary. A failed reconfigure throws
|
|
307
307
|
// before the marker below records the objdir as usable (fail-closed).
|
|
308
308
|
await withObjdir.reconfigure(engineDir);
|
|
@@ -314,7 +314,7 @@ export async function cloneTree(args) {
|
|
|
314
314
|
}
|
|
315
315
|
if (withObjdir) {
|
|
316
316
|
// The in-tree stale-build and static-components gates anchor on the
|
|
317
|
-
// last-build baseline
|
|
317
|
+
// last-build baseline. Without the copy they would read `undefined`
|
|
318
318
|
// and degrade to first-build semantics inside a fully built tree.
|
|
319
319
|
const baseline = getBuildBaselinePath(primaryRoot);
|
|
320
320
|
if (await pathExists(baseline)) {
|
|
@@ -339,7 +339,7 @@ export async function cloneTree(args) {
|
|
|
339
339
|
* Points the cloned objdir at the tree: rewrites mozinfo.json's
|
|
340
340
|
* topsrcdir/topobjdir (and an in-tree mozconfig) via the same
|
|
341
341
|
* safe-relocation rewriter `build --rewrite-mozinfo` uses, refusing
|
|
342
|
-
* fail-closed when its safety rules cannot prove the rewrite correct
|
|
342
|
+
* fail-closed when its safety rules cannot prove the rewrite correct:
|
|
343
343
|
* a tree must never hold an objdir that still names the primary. Before
|
|
344
344
|
* any write, the cloned objdir is re-checked as a real directory inside
|
|
345
345
|
* the tree ({@link assertCloneSafeObjdir}) so no write ever goes through
|
|
@@ -347,7 +347,7 @@ export async function cloneTree(args) {
|
|
|
347
347
|
* removed outright: their scripts carry primary-tree shebang paths, and
|
|
348
348
|
* mach rebuilds venvs in-tree on first use. The configure-generated root
|
|
349
349
|
* files (config.status, backend.mk, Makefile, config/autoconf.mk) still
|
|
350
|
-
* name the primary after this rewrite
|
|
350
|
+
* name the primary after this rewrite. They are regenerated by the
|
|
351
351
|
* in-tree `mach configure` the caller supplies to {@link cloneTree},
|
|
352
352
|
* which runs before the marker is written.
|
|
353
353
|
*/
|
|
@@ -391,7 +391,7 @@ export async function listTrees(primaryRoot) {
|
|
|
391
391
|
}
|
|
392
392
|
/**
|
|
393
393
|
* Classifies a mkdir-style lock directory. Reads the lock's owner file
|
|
394
|
-
* directly (line 1 = PID
|
|
394
|
+
* directly (line 1 = PID, the format `file-lock.ts` documents as stable,
|
|
395
395
|
* whose name it shares via {@link LOCK_PID_FILE}) instead of exporting
|
|
396
396
|
* file-lock internals.
|
|
397
397
|
*
|
|
@@ -402,7 +402,7 @@ export async function listTrees(primaryRoot) {
|
|
|
402
402
|
*
|
|
403
403
|
* The `unknown` state is not theoretical. `withFileLock` takes the lock by
|
|
404
404
|
* creating the directory and only *then* writes the owner file, treating a
|
|
405
|
-
* write failure as non-fatal
|
|
405
|
+
* write failure as non-fatal, so every acquisition passes through a window
|
|
406
406
|
* in which the lock is genuinely held and has no readable PID, and a
|
|
407
407
|
* read-only or full filesystem leaves it that way for the lock's whole life.
|
|
408
408
|
* Reporting that as `free` lets `removeTree` recursively delete a tree out
|
|
@@ -419,8 +419,9 @@ async function inspectTreeLock(lockPath) {
|
|
|
419
419
|
}
|
|
420
420
|
catch (error) {
|
|
421
421
|
// A lock cleanly released between the existence probe above and this read
|
|
422
|
-
// leaves no directory behind
|
|
423
|
-
// and demanding --force for it would be a spurious
|
|
422
|
+
// leaves no directory behind. That is a release rather than an
|
|
423
|
+
// unreadable owner, and demanding --force for it would be a spurious
|
|
424
|
+
// refusal.
|
|
424
425
|
if (!existsSync(lockPath))
|
|
425
426
|
return { kind: 'free' };
|
|
426
427
|
return {
|
|
@@ -436,16 +437,17 @@ async function inspectTreeLock(lockPath) {
|
|
|
436
437
|
}
|
|
437
438
|
/**
|
|
438
439
|
* Removes one tree. Refuses when a live process holds the tree's build
|
|
439
|
-
* or engine-session lock
|
|
440
|
-
* cannot be established
|
|
440
|
+
* or engine-session lock, or when a lock directory exists whose ownership
|
|
441
|
+
* cannot be established (which `--force` overrides). Never deletes a path
|
|
441
442
|
* outside the trees directory (containment check before `rm -rf`).
|
|
442
443
|
*/
|
|
443
444
|
export async function removeTree(primaryRoot, name, options = {}) {
|
|
444
445
|
assertValidTreeName(name);
|
|
445
446
|
// Both sides resolved: the containment prefix has to be in the same form as
|
|
446
447
|
// the path it guards. `getTreesDir` is a `join`, so on Windows it yields a
|
|
447
|
-
// drive-less path while `resolve` below adds the drive letter
|
|
448
|
-
// test then failed for
|
|
448
|
+
// drive-less path while `resolve` below adds the drive letter, so the
|
|
449
|
+
// prefix test then failed for every tree and refused each removal as an
|
|
450
|
+
// escape.
|
|
449
451
|
const treesDir = resolve(getTreesDir(primaryRoot));
|
|
450
452
|
const treeRoot = resolve(treesDir, name);
|
|
451
453
|
if (!treeRoot.startsWith(treesDir + sep) || basename(treeRoot) !== name) {
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* `fireforge typecheck` command (`typecheck.ts`).
|
|
5
5
|
*
|
|
6
6
|
* Centralised so both flows agree on the same Firefox-globals shim
|
|
7
|
-
* and the same set of suppressed diagnostic codes
|
|
7
|
+
* and the same set of suppressed diagnostic codes. Drift between the
|
|
8
8
|
* two would mean a patch could lint clean under `fireforge lint` but
|
|
9
9
|
* still fail `fireforge typecheck`, or vice versa, for reasons the
|
|
10
10
|
* operator could not infer from the rule names.
|
|
@@ -13,15 +13,15 @@
|
|
|
13
13
|
export declare const SHIM_FILENAME = "__fireforge_firefox_globals.d.ts";
|
|
14
14
|
/**
|
|
15
15
|
* Loose declarations for Firefox test-harness globals (mochitest
|
|
16
|
-
* browser-chrome and xpcshell), appended
|
|
16
|
+
* browser-chrome and xpcshell), appended after the composed
|
|
17
17
|
* Firefox-globals + consumer shim when `patchLint.checkJsTestFiles`
|
|
18
18
|
* extends the checkJs pass to patch-adopted test scripts.
|
|
19
|
-
*
|
|
20
|
-
* shim. A consumer that wants
|
|
21
|
-
* a method the harness does not declare fails at the patch boundary)
|
|
22
|
-
* declares them in `patchLint.checkJsTestShim
|
|
23
|
-
* composes
|
|
24
|
-
* `declare var` redeclarations to the
|
|
19
|
+
* These are `any`-typed, the same pragmatic posture as the main
|
|
20
|
+
* shim. A consumer that wants typed harness members (so that, say, a call
|
|
21
|
+
* to a method the harness does not declare fails at the patch boundary)
|
|
22
|
+
* declares them in `patchLint.checkJsTestShim`. Because that shim
|
|
23
|
+
* composes before this baseline and TypeScript resolves conflicting
|
|
24
|
+
* `declare var` redeclarations to the first declaration, the typed
|
|
25
25
|
* consumer declaration wins over the loose fallback here.
|
|
26
26
|
*/
|
|
27
27
|
export declare const TEST_HARNESS_SHIM = "\n// \u2500\u2500 FireForge test-harness shim (loose baseline) \u2500\u2500\ndeclare var TestUtils: any;\ndeclare var BrowserTestUtils: any;\ndeclare var SpecialPowers: any;\ndeclare var EventUtils: any;\ndeclare var SimpleTest: any;\ndeclare var Assert: any;\ndeclare var gTestPath: string;\ndeclare var content: any;\ndeclare function add_task(task: (...args: any[]) => any): any;\ndeclare function add_setup(task: (...args: any[]) => any): any;\ndeclare function ok(condition: any, message?: string): void;\ndeclare function is(actual: any, expected: any, message?: string): void;\ndeclare function isnot(actual: any, expected: any, message?: string): void;\ndeclare function todo(condition: any, message?: string): void;\ndeclare function todo_is(actual: any, expected: any, message?: string): void;\ndeclare function info(message: string): void;\ndeclare function registerCleanupFunction(callback: (...args: any[]) => any): void;\ndeclare function waitForExplicitFinish(): void;\ndeclare function finish(): void;\ndeclare function do_get_profile(): any;\ndeclare function run_test(): any;\n\n";
|
|
@@ -32,7 +32,7 @@ export declare const TEST_HARNESS_SHIM = "\n// \u2500\u2500 FireForge test-harne
|
|
|
32
32
|
* build system: the resolver can't follow `resource://`/`chrome://`
|
|
33
33
|
* URLs and the global shim is intentionally narrow.
|
|
34
34
|
*
|
|
35
|
-
* Widening this set should be deliberate and per-code
|
|
35
|
+
* Widening this set should be deliberate and per-code: silently
|
|
36
36
|
* suppressing more codes hides real type errors. The same set is used
|
|
37
37
|
* by both flows so a patch can't pass one and fail the other for a
|
|
38
38
|
* reason the operator couldn't infer from the docs.
|
|
@@ -44,8 +44,9 @@ export declare const SUPPRESSED_DIAGNOSTIC_CODES: ReadonlySet<number>;
|
|
|
44
44
|
* a module reference a name with no import or declaration anywhere and still
|
|
45
45
|
* typecheck with 0 errors, so the failure surfaces as a runtime
|
|
46
46
|
* `ReferenceError`. Both flows report these at a configurable severity
|
|
47
|
-
* (default `'warning'`: visible without breaking gates
|
|
48
|
-
* are silenced by adding the global to `extraShim`, or per-run via
|
|
47
|
+
* (default `'warning'`: visible without breaking gates, while genuine shim
|
|
48
|
+
* gaps are silenced by adding the global to `extraShim`, or per-run via
|
|
49
|
+
* `'off'`).
|
|
49
50
|
*/
|
|
50
51
|
export declare const UNDEFINED_IDENTIFIER_CODES: ReadonlySet<number>;
|
|
51
52
|
/** Hint appended to reported undefined-identifier diagnostics. */
|
|
@@ -62,18 +63,18 @@ export interface ComposedShim {
|
|
|
62
63
|
/**
|
|
63
64
|
* Composes the synthetic shim source by concatenating the built-in Firefox
|
|
64
65
|
* globals shim with the contents of an optional user-supplied `.d.ts` file.
|
|
65
|
-
* The user file is appended verbatim
|
|
66
|
+
* The user file is appended verbatim. The augment direction is intentional
|
|
66
67
|
* (declarations later in concat order augment earlier ones), so a project
|
|
67
68
|
* that wants to refine `Services` with a more specific type can do so in the
|
|
68
|
-
* extra shim, and members can be
|
|
69
|
-
* their interfaces (`interface ChromeUtilsShim { newMember(): any }
|
|
69
|
+
* extra shim, and members can be added to the structured globals by merging
|
|
70
|
+
* their interfaces (`interface ChromeUtilsShim { newMember(): any }`, see
|
|
70
71
|
* the module doc comment). Any triple-slash `/// <reference path="…">`
|
|
71
72
|
* directives inside the extra shim are inlined (resolved against the extra
|
|
72
73
|
* shim's own directory) so they are not silently dropped at the synthetic
|
|
73
74
|
* shim path.
|
|
74
75
|
*
|
|
75
76
|
* Missing extra-shim files raise a clear error rather than failing silently
|
|
76
|
-
* with a confusing "type not found" downstream
|
|
77
|
+
* with a confusing "type not found" downstream. This is the one
|
|
77
78
|
* config-driven path where a user typo in `fireforge.json` produces a
|
|
78
79
|
* runtime error, so it needs to be unmistakable.
|
|
79
80
|
*
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* `fireforge typecheck` command (`typecheck.ts`).
|
|
6
6
|
*
|
|
7
7
|
* Centralised so both flows agree on the same Firefox-globals shim
|
|
8
|
-
* and the same set of suppressed diagnostic codes
|
|
8
|
+
* and the same set of suppressed diagnostic codes. Drift between the
|
|
9
9
|
* two would mean a patch could lint clean under `fireforge lint` but
|
|
10
10
|
* still fail `fireforge typecheck`, or vice versa, for reasons the
|
|
11
11
|
* operator could not infer from the rule names.
|
|
@@ -17,7 +17,7 @@ export const SHIM_FILENAME = '__fireforge_firefox_globals.d.ts';
|
|
|
17
17
|
/**
|
|
18
18
|
* Minimal `.d.ts` shim for Firefox privileged-scope globals.
|
|
19
19
|
*
|
|
20
|
-
* Firefox source is plain JS
|
|
20
|
+
* Firefox source is plain JS, with no TypeScript allowed. The shim lets
|
|
21
21
|
* TS-driven type checking run without reporting "cannot find name"
|
|
22
22
|
* for the most common Mozilla APIs. Types are intentionally loose
|
|
23
23
|
* (`any`) because full Firefox type coverage is out of scope.
|
|
@@ -25,7 +25,7 @@ export const SHIM_FILENAME = '__fireforge_firefox_globals.d.ts';
|
|
|
25
25
|
* Structured globals (`ChromeUtils`, `Localization`) are declared via
|
|
26
26
|
* named global interfaces (`ChromeUtilsShim`, `LocalizationShim`, …)
|
|
27
27
|
* rather than closed object-literal types, so a project's extra shim
|
|
28
|
-
* (`patchLint.checkJsExtraShim` / `typecheck.extraShim`) can
|
|
28
|
+
* (`patchLint.checkJsExtraShim` / `typecheck.extraShim`) can add members
|
|
29
29
|
* through TypeScript interface merging:
|
|
30
30
|
*
|
|
31
31
|
* // my-extra-shim.d.ts
|
|
@@ -34,27 +34,27 @@ export const SHIM_FILENAME = '__fireforge_firefox_globals.d.ts';
|
|
|
34
34
|
* }
|
|
35
35
|
*
|
|
36
36
|
* (A second `declare var ChromeUtils` in the extra shim remains a
|
|
37
|
-
* duplicate-identifier error by design
|
|
37
|
+
* duplicate-identifier error by design. Merge the interface instead.)
|
|
38
38
|
* The member lists track upstream WebIDL additions per Firefox release
|
|
39
|
-
* (`dom/chrome-webidl/ChromeUtils.webidl` for ChromeUtils)
|
|
39
|
+
* (`dom/chrome-webidl/ChromeUtils.webidl` for ChromeUtils). When a new
|
|
40
40
|
* release adds a commonly-patched member, add a loose signature here.
|
|
41
41
|
*
|
|
42
42
|
* Notable patterns that require shimming:
|
|
43
43
|
* - `const lazy = {};` + `ChromeUtils.defineESModuleGetters(lazy, { ... })`
|
|
44
|
-
* populates `lazy` at runtime
|
|
44
|
+
* populates `lazy` at runtime, so we declare it as `Record<string, any>`.
|
|
45
45
|
* - `Services.obs`, `Services.prefs`, etc. are XPCOM service accessors.
|
|
46
46
|
* - `Ci`, `Cc`, `Cr`, `Cu` are XPCOM component shortcuts.
|
|
47
47
|
* - Browser chrome globals like `gBrowser`, `gURLBar` are common in
|
|
48
48
|
* content scripts wired via `browser.js`.
|
|
49
49
|
* - Dynamic `import("resource:-…")` / `import("chrome:-…")` under patch
|
|
50
50
|
* checkJs: imports of *patch-owned* modules resolve to their real
|
|
51
|
-
* sources (see `patch-lint-checkjs.ts`)
|
|
51
|
+
* sources (see `patch-lint-checkjs.ts`). Everything else fails host
|
|
52
52
|
* resolution and lands on these URL ambient wildcards, keeping
|
|
53
53
|
* upstream Firefox imports pragmatically loose, same posture as globals.
|
|
54
54
|
*/
|
|
55
55
|
const FIREFOX_GLOBALS_SHIM = `
|
|
56
56
|
declare var Services: any;
|
|
57
|
-
// Extensible via interface merging from a project extra shim
|
|
57
|
+
// Extensible via interface merging from a project extra shim; see the
|
|
58
58
|
// module doc comment in typecheck-shim.ts.
|
|
59
59
|
interface ChromeUtilsShim {
|
|
60
60
|
defineESModuleGetters(target: any, modules: Record<string, string>): void;
|
|
@@ -67,7 +67,7 @@ interface ChromeUtilsShim {
|
|
|
67
67
|
getClassName(obj: any, unwrap?: boolean): string;
|
|
68
68
|
isClassInfo(obj: any): boolean;
|
|
69
69
|
// Firefox 153, dom/chrome-webidl/ChromeUtils.webidl: two overloads
|
|
70
|
-
// (URI string / nsIURI) with a PredictRemoteTypeOptions dictionary
|
|
70
|
+
// (URI string / nsIURI) with a PredictRemoteTypeOptions dictionary,
|
|
71
71
|
// collapsed into one loose signature per the shim's pragmatic posture.
|
|
72
72
|
predictRemoteTypeForURI(uri: string | object | null, options?: object): string | null;
|
|
73
73
|
}
|
|
@@ -98,7 +98,7 @@ declare class JSWindowActorParent {
|
|
|
98
98
|
sendAsyncMessage(name: string, data?: any, transfers?: any[]): void;
|
|
99
99
|
sendQuery(name: string, data?: any, transfers?: any[]): Promise<any>;
|
|
100
100
|
}
|
|
101
|
-
// Fluent localization
|
|
101
|
+
// Fluent localization, a stable chrome global. Members stay loose (any),
|
|
102
102
|
// but the constructor shape is declared so "new Localization([...])" and
|
|
103
103
|
// "new Localization([...], true)" typecheck without a local cast. Both
|
|
104
104
|
// interfaces are extensible via interface merging from a project extra
|
|
@@ -122,7 +122,7 @@ interface LocalizationShim {
|
|
|
122
122
|
}
|
|
123
123
|
declare var Localization: LocalizationShim;
|
|
124
124
|
|
|
125
|
-
// Shorthand ambient modules
|
|
125
|
+
// Shorthand ambient modules: exports from matching URL imports are loosely typed,
|
|
126
126
|
// avoiding noResolve empty-graph namespaces. (Named member access broke when we tried
|
|
127
127
|
// export= Record under moduleResolution Bundler.)
|
|
128
128
|
declare module 'resource:*';
|
|
@@ -131,15 +131,15 @@ declare module 'chrome:*';
|
|
|
131
131
|
`;
|
|
132
132
|
/**
|
|
133
133
|
* Loose declarations for Firefox test-harness globals (mochitest
|
|
134
|
-
* browser-chrome and xpcshell), appended
|
|
134
|
+
* browser-chrome and xpcshell), appended after the composed
|
|
135
135
|
* Firefox-globals + consumer shim when `patchLint.checkJsTestFiles`
|
|
136
136
|
* extends the checkJs pass to patch-adopted test scripts.
|
|
137
|
-
*
|
|
138
|
-
* shim. A consumer that wants
|
|
139
|
-
* a method the harness does not declare fails at the patch boundary)
|
|
140
|
-
* declares them in `patchLint.checkJsTestShim
|
|
141
|
-
* composes
|
|
142
|
-
* `declare var` redeclarations to the
|
|
137
|
+
* These are `any`-typed, the same pragmatic posture as the main
|
|
138
|
+
* shim. A consumer that wants typed harness members (so that, say, a call
|
|
139
|
+
* to a method the harness does not declare fails at the patch boundary)
|
|
140
|
+
* declares them in `patchLint.checkJsTestShim`. Because that shim
|
|
141
|
+
* composes before this baseline and TypeScript resolves conflicting
|
|
142
|
+
* `declare var` redeclarations to the first declaration, the typed
|
|
143
143
|
* consumer declaration wins over the loose fallback here.
|
|
144
144
|
*/
|
|
145
145
|
export const TEST_HARNESS_SHIM = `
|
|
@@ -174,7 +174,7 @@ declare function run_test(): any;
|
|
|
174
174
|
* build system: the resolver can't follow `resource://`/`chrome://`
|
|
175
175
|
* URLs and the global shim is intentionally narrow.
|
|
176
176
|
*
|
|
177
|
-
* Widening this set should be deliberate and per-code
|
|
177
|
+
* Widening this set should be deliberate and per-code: silently
|
|
178
178
|
* suppressing more codes hides real type errors. The same set is used
|
|
179
179
|
* by both flows so a patch can't pass one and fail the other for a
|
|
180
180
|
* reason the operator couldn't infer from the docs.
|
|
@@ -193,8 +193,9 @@ export const SUPPRESSED_DIAGNOSTIC_CODES = new Set([
|
|
|
193
193
|
* a module reference a name with no import or declaration anywhere and still
|
|
194
194
|
* typecheck with 0 errors, so the failure surfaces as a runtime
|
|
195
195
|
* `ReferenceError`. Both flows report these at a configurable severity
|
|
196
|
-
* (default `'warning'`: visible without breaking gates
|
|
197
|
-
* are silenced by adding the global to `extraShim`, or per-run via
|
|
196
|
+
* (default `'warning'`: visible without breaking gates, while genuine shim
|
|
197
|
+
* gaps are silenced by adding the global to `extraShim`, or per-run via
|
|
198
|
+
* `'off'`).
|
|
198
199
|
*/
|
|
199
200
|
export const UNDEFINED_IDENTIFIER_CODES = new Set([
|
|
200
201
|
2304, // Cannot find name '{0}'.
|
|
@@ -243,18 +244,18 @@ async function inlineTripleSlashReferences(source, baseDir, seen) {
|
|
|
243
244
|
/**
|
|
244
245
|
* Composes the synthetic shim source by concatenating the built-in Firefox
|
|
245
246
|
* globals shim with the contents of an optional user-supplied `.d.ts` file.
|
|
246
|
-
* The user file is appended verbatim
|
|
247
|
+
* The user file is appended verbatim. The augment direction is intentional
|
|
247
248
|
* (declarations later in concat order augment earlier ones), so a project
|
|
248
249
|
* that wants to refine `Services` with a more specific type can do so in the
|
|
249
|
-
* extra shim, and members can be
|
|
250
|
-
* their interfaces (`interface ChromeUtilsShim { newMember(): any }
|
|
250
|
+
* extra shim, and members can be added to the structured globals by merging
|
|
251
|
+
* their interfaces (`interface ChromeUtilsShim { newMember(): any }`, see
|
|
251
252
|
* the module doc comment). Any triple-slash `/// <reference path="…">`
|
|
252
253
|
* directives inside the extra shim are inlined (resolved against the extra
|
|
253
254
|
* shim's own directory) so they are not silently dropped at the synthetic
|
|
254
255
|
* shim path.
|
|
255
256
|
*
|
|
256
257
|
* Missing extra-shim files raise a clear error rather than failing silently
|
|
257
|
-
* with a confusing "type not found" downstream
|
|
258
|
+
* with a confusing "type not found" downstream. This is the one
|
|
258
259
|
* config-driven path where a user typo in `fireforge.json` produces a
|
|
259
260
|
* runtime error, so it needs to be unmistakable.
|
|
260
261
|
*
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* command.
|
|
5
5
|
*
|
|
6
6
|
* Distinct from `patch-lint-checkjs.ts` (patch-hygiene): patchLint is
|
|
7
|
-
* scoped, fireforge-controlled, and runs as part of `fireforge lint
|
|
8
|
-
*
|
|
7
|
+
* scoped, fireforge-controlled, and runs as part of `fireforge lint`.
|
|
8
|
+
* This command runs whole projects with user-controlled compiler
|
|
9
9
|
* options and is intended as a CI gate. The two share the Firefox
|
|
10
10
|
* globals shim and suppressed-code list (via `typecheck-shim.ts`) so
|
|
11
11
|
* a file that lints clean cannot fail typecheck for a reason the
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
*
|
|
14
14
|
* Loads the TypeScript compiler API via dynamic import so it is only
|
|
15
15
|
* required when `typecheck.projects` is configured. TypeScript
|
|
16
|
-
* remains a dev-dependency
|
|
16
|
+
* remains a dev-dependency. If a user invokes `fireforge typecheck`
|
|
17
17
|
* without installing it, the function returns a clear error pointing
|
|
18
18
|
* at `npm install typescript`.
|
|
19
19
|
*/
|
|
@@ -22,7 +22,7 @@ import type { TypecheckProjectResult } from '../types/typecheck.js';
|
|
|
22
22
|
/**
|
|
23
23
|
* Sentinel string surfaced as a `TypecheckIssue.message` when the
|
|
24
24
|
* project's jsconfig sets `checkJs: false`. Exported so tests can
|
|
25
|
-
* pin the contract
|
|
25
|
+
* pin the contract, since operators rely on it to spot opted-out projects
|
|
26
26
|
* in CI logs.
|
|
27
27
|
*/
|
|
28
28
|
export declare const CHECK_JS_DISABLED_NOTICE = "Project sets \"checkJs: false\" \u2014 skipping (override the jsconfig to enable typecheck).";
|
|
@@ -31,20 +31,20 @@ export declare const CHECK_JS_DISABLED_NOTICE = "Project sets \"checkJs: false\"
|
|
|
31
31
|
*
|
|
32
32
|
* Per-project flow:
|
|
33
33
|
* 1. Read the jsconfig via the TS API. JSON parse / config-spec
|
|
34
|
-
* errors are surfaced as issues
|
|
35
|
-
* project must not abort the rest of the run.
|
|
34
|
+
* errors are surfaced as issues rather than thrown, because a single
|
|
35
|
+
* broken project must not abort the rest of the run.
|
|
36
36
|
* 2. Compute final compiler options from the user's options. We
|
|
37
|
-
* only force `noEmit: true` (this is a typecheck, not a build)
|
|
38
|
-
*
|
|
37
|
+
* only force `noEmit: true` (this is a typecheck, not a build).
|
|
38
|
+
* We honour `strict`, `target`, `lib`, `module`, `paths`,
|
|
39
39
|
* `include`, `exclude`. `allowJs` and `checkJs` default to
|
|
40
|
-
* `true` only when the user has not set them
|
|
40
|
+
* `true` only when the user has not set them. If the user set
|
|
41
41
|
* `checkJs: false` we treat that as an explicit opt-out and
|
|
42
42
|
* skip the project with a single notice (see {@link CHECK_JS_DISABLED_NOTICE}).
|
|
43
43
|
* 3. Inject the synthetic shim (built-in + optional extraShim) as
|
|
44
44
|
* a virtual root file that the custom CompilerHost serves.
|
|
45
|
-
* 4. Build the program
|
|
46
|
-
* global diagnostics. The patchLint flow only reads semantic +
|
|
47
|
-
* syntactic
|
|
45
|
+
* 4. Build the program and collect semantic, syntactic, options,
|
|
46
|
+
* and global diagnostics. The patchLint flow only reads semantic +
|
|
47
|
+
* syntactic, which is fine for hygiene, but a CI gate needs the full
|
|
48
48
|
* set so misconfigured `lib`/`paths` entries fail loudly.
|
|
49
49
|
* 5. Drop diagnostics whose code is in `SUPPRESSED_DIAGNOSTIC_CODES`
|
|
50
50
|
* and any diagnostic originating in the synthetic shim itself.
|