@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
|
@@ -94,7 +94,7 @@ export async function checkRegistrationConsistency(root, name, config, ftlDir) {
|
|
|
94
94
|
// Check target directory
|
|
95
95
|
const targetDir = join(engineDir, config.targetPath);
|
|
96
96
|
status.targetExists = await pathExists(targetDir);
|
|
97
|
-
// Compare files (sourceExists is guaranteed true
|
|
97
|
+
// Compare files (sourceExists is guaranteed true, we early-returned above)
|
|
98
98
|
if (status.targetExists) {
|
|
99
99
|
const entries = await readdir(componentDir, { withFileTypes: true });
|
|
100
100
|
for (const entry of entries) {
|
|
@@ -110,7 +110,7 @@ export async function checkRegistrationConsistency(root, name, config, ftlDir) {
|
|
|
110
110
|
continue;
|
|
111
111
|
}
|
|
112
112
|
// Deploy writes CSS-with-include-directives in fragment-expanded form,
|
|
113
|
-
// so the drift oracle must compare the *expanded* source
|
|
113
|
+
// so the drift oracle must compare the *expanded* source. Otherwise a
|
|
114
114
|
// freshly deployed component would read as permanently drifted, and a
|
|
115
115
|
// fragment edit would never read as drifted at all.
|
|
116
116
|
let srcContent = await readText(srcPath);
|
|
@@ -119,8 +119,8 @@ export async function checkRegistrationConsistency(root, name, config, ftlDir) {
|
|
|
119
119
|
srcContent = (await expandCssFragments(srcContent, furnacePaths.sharedDir)).expanded;
|
|
120
120
|
}
|
|
121
121
|
catch {
|
|
122
|
-
// Missing fragment: validate reports it as `missing-fragment
|
|
123
|
-
//
|
|
122
|
+
// Missing fragment: validate reports it as `missing-fragment`.
|
|
123
|
+
// For drift purposes fall back to the raw source so the compare
|
|
124
124
|
// still happens deterministically.
|
|
125
125
|
}
|
|
126
126
|
}
|
|
@@ -175,7 +175,7 @@ export async function checkRegistrationConsistency(root, name, config, ftlDir) {
|
|
|
175
175
|
const cePath = join(engineDir, CUSTOM_ELEMENTS_JS);
|
|
176
176
|
if (await pathExists(cePath)) {
|
|
177
177
|
const ceContent = await readText(cePath);
|
|
178
|
-
// Structure-aware check shared with the
|
|
178
|
+
// Structure-aware check shared with the add path. A bare substring
|
|
179
179
|
// test counted any mention of the tag (a leftover comment, an
|
|
180
180
|
// unrelated string) as "registered", masking genuinely missing
|
|
181
181
|
// registrations from both validate and the re-apply drift oracle.
|
|
@@ -267,7 +267,7 @@ const AUTO_DETECT_HOST_DIR = 'browser/base/content';
|
|
|
267
267
|
* This catches a fork that mounts a custom element from its own top-level
|
|
268
268
|
* chrome document (e.g. `mybrowser.xhtml`) without setting
|
|
269
269
|
* `tokenHostDocuments`: scanning only the stock `browser.xhtml` would miss
|
|
270
|
-
* the tokens CSS link in the
|
|
270
|
+
* the tokens CSS link in the actual host document and false-fire the
|
|
271
271
|
* warning.
|
|
272
272
|
*
|
|
273
273
|
* @param engineDir Absolute engine root.
|
|
@@ -280,7 +280,7 @@ const AUTO_DETECT_HOST_DIR = 'browser/base/content';
|
|
|
280
280
|
* `validateAllComponents` walks every component, and re-parsing
|
|
281
281
|
* `fireforge.json` plus re-scanning every `.xhtml` under the chrome-document
|
|
282
282
|
* directory per component is one config parse and one full directory read
|
|
283
|
-
*
|
|
283
|
+
* per component, for work that depends only on the project and the engine.
|
|
284
284
|
*
|
|
285
285
|
* Keyed by root/engine dir and cleared by
|
|
286
286
|
* {@link resetRegistrationValidationCaches} at the start of each run, so a
|
|
@@ -291,9 +291,9 @@ const chromeDocumentCache = new Map();
|
|
|
291
291
|
/**
|
|
292
292
|
* Whether a batch validation is in flight.
|
|
293
293
|
*
|
|
294
|
-
* The caches are consulted
|
|
294
|
+
* The caches are consulted only while this is set. Outside a batch (a direct
|
|
295
295
|
* `validateComponent` call from `furnace status`, from apply's consistency
|
|
296
|
-
* check, or from a test
|
|
296
|
+
* check, or from a test) every read goes to disk, so a caller that mutates
|
|
297
297
|
* the engine between calls can never be served a stale document.
|
|
298
298
|
*/
|
|
299
299
|
let batchInFlight = false;
|
|
@@ -356,7 +356,7 @@ async function loadChromeDocuments(engineDir) {
|
|
|
356
356
|
return documents;
|
|
357
357
|
}
|
|
358
358
|
async function autoDetectTokenHostDocuments(engineDir, tagName, already) {
|
|
359
|
-
// Reads the directory
|
|
359
|
+
// Reads the directory once per run rather than once per component: only the
|
|
360
360
|
// tag being searched for differs between components.
|
|
361
361
|
const documents = await loadChromeDocuments(engineDir);
|
|
362
362
|
const alreadySet = new Set(already);
|
|
@@ -377,10 +377,10 @@ async function autoDetectTokenHostDocuments(engineDir, tagName, already) {
|
|
|
377
377
|
*
|
|
378
378
|
* Scan set is the union of (a) the configured `tokenHostDocuments` (or
|
|
379
379
|
* the upstream default when unset) and (b) any `browser/base/content/*.xhtml`
|
|
380
|
-
* document that references `tagName
|
|
380
|
+
* document that references `tagName`. The auto-detection path catches
|
|
381
381
|
* forks that mount components from a replacement chrome document without
|
|
382
382
|
* having configured `tokenHostDocuments`. The warning fires only when
|
|
383
|
-
*
|
|
383
|
+
* none of the documents in the final scan set link the tokens CSS.
|
|
384
384
|
*/
|
|
385
385
|
export async function validateTokenLink(componentDir, tagName, root, tokenPrefix, tokenHostDocuments) {
|
|
386
386
|
const issues = [];
|
|
@@ -481,7 +481,7 @@ export async function runPostApplyConsistencyChecks(root, config, result, ftlDir
|
|
|
481
481
|
}
|
|
482
482
|
}
|
|
483
483
|
catch {
|
|
484
|
-
// Consistency check is best-effort
|
|
484
|
+
// Consistency check is best-effort. Failures here should not block apply
|
|
485
485
|
}
|
|
486
486
|
}
|
|
487
487
|
}
|
|
@@ -2,7 +2,7 @@ import type { ComponentType, CustomComponentConfig, ValidationIssue } from '../t
|
|
|
2
2
|
/**
|
|
3
3
|
* Returns true when file content carries unresolved three-way-merge
|
|
4
4
|
* conflict markers (as left behind by `furnace refresh`). Shared between
|
|
5
|
-
* the structure validator and `furnace sync`'s pre-apply gate
|
|
5
|
+
* the structure validator and `furnace sync`'s pre-apply gate. Both must
|
|
6
6
|
* agree on what "conflicted" means so a file that validate flags can never
|
|
7
7
|
* slip through sync into the engine.
|
|
8
8
|
*/
|
|
@@ -5,7 +5,7 @@ import { pathExists, readText } from '../utils/fs.js';
|
|
|
5
5
|
/**
|
|
6
6
|
* Returns true when file content carries unresolved three-way-merge
|
|
7
7
|
* conflict markers (as left behind by `furnace refresh`). Shared between
|
|
8
|
-
* the structure validator and `furnace sync`'s pre-apply gate
|
|
8
|
+
* the structure validator and `furnace sync`'s pre-apply gate. Both must
|
|
9
9
|
* agree on what "conflicted" means so a file that validate flags can never
|
|
10
10
|
* slip through sync into the engine.
|
|
11
11
|
*/
|
|
@@ -37,7 +37,7 @@ export async function validateStructure(componentDir, tagName, type, customConfi
|
|
|
37
37
|
message: `Required file ${tagName}.mjs not found.`,
|
|
38
38
|
});
|
|
39
39
|
}
|
|
40
|
-
// .css should exist
|
|
40
|
+
// .css should exist, except for library components (base class + helpers,
|
|
41
41
|
// no element of their own), which render nothing and need no stylesheet.
|
|
42
42
|
if (!(await pathExists(cssPath)) && customConfig?.kind !== 'library') {
|
|
43
43
|
issues.push({
|
|
@@ -52,8 +52,8 @@ export async function validateStructure(componentDir, tagName, type, customConfi
|
|
|
52
52
|
// localization payload is empty, which is hard to spot in review.
|
|
53
53
|
//
|
|
54
54
|
// Components that declare `sharedFtl` participate in a pre-existing
|
|
55
|
-
// feature-scoped bundle, so there is no per-component .ftl to require
|
|
56
|
-
//
|
|
55
|
+
// feature-scoped bundle, so there is no per-component .ftl to require.
|
|
56
|
+
// The shared file is owned by whoever authored the feature bundle.
|
|
57
57
|
if (type === 'custom' && customConfig?.localized && !customConfig.sharedFtl) {
|
|
58
58
|
const ftlPath = join(componentDir, `${tagName}.ftl`);
|
|
59
59
|
if (!(await pathExists(ftlPath))) {
|
|
@@ -61,8 +61,8 @@ export async function validateComponent(componentDir, tagName, type, config, roo
|
|
|
61
61
|
if (root) {
|
|
62
62
|
issues.push(...(await validateTokenLink(componentDir, tagName, root, config?.tokenPrefix, config?.tokenHostDocuments)));
|
|
63
63
|
}
|
|
64
|
-
// CSS fragment checks: missing fragment files are structural errors
|
|
65
|
-
//
|
|
64
|
+
// CSS fragment checks: missing fragment files are structural errors.
|
|
65
|
+
// Stale deployed expansions are drift the next deploy refreshes.
|
|
66
66
|
if (type === 'custom') {
|
|
67
67
|
const furnacePaths = getFurnacePaths(root ?? join(componentDir, '..', '..', '..'));
|
|
68
68
|
const engineTargetDir = root && config?.custom[tagName]
|
|
@@ -81,7 +81,7 @@ export async function validateComponent(componentDir, tagName, type, config, roo
|
|
|
81
81
|
// When root is provided and this is a custom component with registration,
|
|
82
82
|
// also run registration pattern and jar.mn validation for this component.
|
|
83
83
|
// Skipped when an outer orchestrator (validateAllComponents) will run the
|
|
84
|
-
// aggregate versions itself
|
|
84
|
+
// aggregate versions itself. Otherwise the same issues are reported twice.
|
|
85
85
|
if (root && config && type === 'custom' && !options?.skipAggregateChecks) {
|
|
86
86
|
const customConfig = config.custom[tagName];
|
|
87
87
|
if (customConfig?.register) {
|
|
@@ -183,7 +183,7 @@ export async function validateAllComponents(root) {
|
|
|
183
183
|
continue;
|
|
184
184
|
}
|
|
185
185
|
// Pass root so that per-component token link validation runs.
|
|
186
|
-
// Skip registration/jar.mn checks inside validateComponent
|
|
186
|
+
// Skip registration/jar.mn checks inside validateComponent. The aggregate
|
|
187
187
|
// validators below run them exactly once across all components, which both
|
|
188
188
|
// surfaces cross-component issues and avoids double-counting.
|
|
189
189
|
const issues = await validateComponent(componentDir, name, 'custom', config, root, {
|
|
@@ -209,7 +209,7 @@ export async function validateAllComponents(root) {
|
|
|
209
209
|
// `furnace create --with-tests --xpcshell` scaffolds a test directory at
|
|
210
210
|
// `browser/base/content/test/<binary>-xpcshell/<name>/`. A leftover
|
|
211
211
|
// scaffold whose `<name>` is not in furnace.json is almost always the
|
|
212
|
-
// aftermath of an incomplete `furnace remove` or `rename
|
|
212
|
+
// aftermath of an incomplete `furnace remove` or `rename`. Flag it as an
|
|
213
213
|
// `orphan-xpcshell-scaffold` error so operators delete or re-create the
|
|
214
214
|
// scaffold instead of discovering the mismatch at test run time. A
|
|
215
215
|
// missing engine or scaffold parent directory degrades silently, so this
|
|
@@ -224,14 +224,14 @@ export async function validateAllComponents(root) {
|
|
|
224
224
|
}
|
|
225
225
|
}
|
|
226
226
|
catch {
|
|
227
|
-
// Validation degrades gracefully
|
|
227
|
+
// Validation degrades gracefully: the absence of an engine
|
|
228
228
|
// directory, permission denial reading the scaffold tree, or any
|
|
229
229
|
// other transient fs issue should never cascade into false
|
|
230
230
|
// "orphan" reports.
|
|
231
231
|
}
|
|
232
232
|
// jsconfig chrome-module paths drift: when `typecheckJsconfig` is
|
|
233
|
-
// configured, deploy maintains a paths mapping per deployed module file
|
|
234
|
-
//
|
|
233
|
+
// configured, deploy maintains a paths mapping per deployed module file.
|
|
234
|
+
// Missing or stale entries mean typed cross-module imports are silently
|
|
235
235
|
// degrading to `any` in the consumer's typecheck.
|
|
236
236
|
if (config.typecheckJsconfig) {
|
|
237
237
|
try {
|
|
@@ -256,7 +256,7 @@ export async function validateAllComponents(root) {
|
|
|
256
256
|
}
|
|
257
257
|
catch {
|
|
258
258
|
// Drift detection must not break validation when the jsconfig is
|
|
259
|
-
// missing or unparsable
|
|
259
|
+
// missing or unparsable. Deploy reports those cases with guidance.
|
|
260
260
|
}
|
|
261
261
|
}
|
|
262
262
|
return results;
|
|
@@ -5,19 +5,19 @@
|
|
|
5
5
|
* Overrides are forks of Firefox source files taken at a specific point in
|
|
6
6
|
* time. If Firefox moves forward and the override's `baseVersion` is not
|
|
7
7
|
* refreshed, the override may apply against a file whose upstream shape has
|
|
8
|
-
* changed
|
|
8
|
+
* changed, which is the single biggest silent failure mode for furnace.
|
|
9
9
|
*
|
|
10
10
|
* Deliberately pure and string-only: no I/O, and no parsing of Firefox
|
|
11
11
|
* version components. String equality is sufficient because `fireforge.json`
|
|
12
12
|
* stores a canonical version string (e.g. `"140.9.0esr"`) and overrides are
|
|
13
13
|
* created with exactly that string copied from
|
|
14
|
-
* `forgeConfig.firefox.version`. Any mismatch is worth surfacing
|
|
14
|
+
* `forgeConfig.firefox.version`. Any mismatch is worth surfacing: even
|
|
15
15
|
* "140.0" vs "140.9.0esr" is a real drift signal.
|
|
16
16
|
*
|
|
17
|
-
* The result
|
|
17
|
+
* The result gates apply/deploy: both warn and then fail without --force
|
|
18
18
|
* (see furnaceApplyCommand / furnaceDeployCommand), and `furnace sync`
|
|
19
19
|
* re-checks it after refresh before applying. Status reports drift alongside
|
|
20
|
-
* the component overview. Keep this doc in sync with the gates
|
|
20
|
+
* the component overview. Keep this doc in sync with the gates. It is not
|
|
21
21
|
* advisory.
|
|
22
22
|
*/
|
|
23
23
|
import type { FurnaceConfig } from '../types/furnace.js';
|
|
@@ -35,7 +35,7 @@ export interface OverrideVersionDrift {
|
|
|
35
35
|
/**
|
|
36
36
|
* Classifies how severe a version drift is by comparing the numeric
|
|
37
37
|
* components of the two version strings. Falls back to `'major'` when
|
|
38
|
-
* either version is unparseable
|
|
38
|
+
* either version is unparseable. This ensures that unusual version
|
|
39
39
|
* formats surface with the highest visibility rather than being silently
|
|
40
40
|
* downgraded.
|
|
41
41
|
*/
|
|
@@ -6,19 +6,19 @@
|
|
|
6
6
|
* Overrides are forks of Firefox source files taken at a specific point in
|
|
7
7
|
* time. If Firefox moves forward and the override's `baseVersion` is not
|
|
8
8
|
* refreshed, the override may apply against a file whose upstream shape has
|
|
9
|
-
* changed
|
|
9
|
+
* changed, which is the single biggest silent failure mode for furnace.
|
|
10
10
|
*
|
|
11
11
|
* Deliberately pure and string-only: no I/O, and no parsing of Firefox
|
|
12
12
|
* version components. String equality is sufficient because `fireforge.json`
|
|
13
13
|
* stores a canonical version string (e.g. `"140.9.0esr"`) and overrides are
|
|
14
14
|
* created with exactly that string copied from
|
|
15
|
-
* `forgeConfig.firefox.version`. Any mismatch is worth surfacing
|
|
15
|
+
* `forgeConfig.firefox.version`. Any mismatch is worth surfacing: even
|
|
16
16
|
* "140.0" vs "140.9.0esr" is a real drift signal.
|
|
17
17
|
*
|
|
18
|
-
* The result
|
|
18
|
+
* The result gates apply/deploy: both warn and then fail without --force
|
|
19
19
|
* (see furnaceApplyCommand / furnaceDeployCommand), and `furnace sync`
|
|
20
20
|
* re-checks it after refresh before applying. Status reports drift alongside
|
|
21
|
-
* the component overview. Keep this doc in sync with the gates
|
|
21
|
+
* the component overview. Keep this doc in sync with the gates. It is not
|
|
22
22
|
* advisory.
|
|
23
23
|
*/
|
|
24
24
|
/**
|
|
@@ -39,7 +39,7 @@ function parseVersionComponents(version) {
|
|
|
39
39
|
/**
|
|
40
40
|
* Classifies how severe a version drift is by comparing the numeric
|
|
41
41
|
* components of the two version strings. Falls back to `'major'` when
|
|
42
|
-
* either version is unparseable
|
|
42
|
+
* either version is unparseable. This ensures that unusual version
|
|
43
43
|
* formats surface with the highest visibility rather than being silently
|
|
44
44
|
* downgraded.
|
|
45
45
|
*/
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Environment variable that overrides the monolithic `git add -A` timeout
|
|
3
3
|
* (milliseconds). Operators on slow or loaded filesystems can legitimately
|
|
4
|
-
* exceed the 10-minute default during a baseline indexing pass
|
|
4
|
+
* exceed the 10-minute default during a baseline indexing pass. Making the
|
|
5
5
|
* cap overridable lets them retry without recompiling.
|
|
6
6
|
*/
|
|
7
7
|
export declare const GIT_ADD_TIMEOUT_ENV_VAR = "FIREFORGE_GIT_ADD_TIMEOUT_MS";
|
|
@@ -48,7 +48,7 @@ export interface GitStatusEntry {
|
|
|
48
48
|
}
|
|
49
49
|
/**
|
|
50
50
|
* Ensures git is available in the system. Memoised after the first successful
|
|
51
|
-
* probe
|
|
51
|
+
* probe. {@link git} calls it, so callers that go through that wrapper do not
|
|
52
52
|
* need to.
|
|
53
53
|
* @throws GitNotFoundError if git is not installed
|
|
54
54
|
*/
|
|
@@ -67,7 +67,7 @@ export declare function git(args: string[], cwd: string, options?: {
|
|
|
67
67
|
* Splits a pathspec list into chunks whose joined byte length stays well under
|
|
68
68
|
* the OS `ARG_MAX` limit, so a single batched `git` invocation over hundreds of
|
|
69
69
|
* Mozilla-length paths cannot fail with `E2BIG`. The 96 KB budget is
|
|
70
|
-
*
|
|
70
|
+
* conservative on purpose: even the smallest historical `ARG_MAX` (256 KB)
|
|
71
71
|
* leaves room for the fixed git arguments plus the inherited environment.
|
|
72
72
|
*
|
|
73
73
|
* Chunk boundaries are output-neutral for every batched caller here: each
|
|
@@ -93,7 +93,7 @@ export declare function configureGitPerformance(repoDir: string): Promise<void>;
|
|
|
93
93
|
* rewrites LF to CRLF on checkout and back on staging. FireForge cannot
|
|
94
94
|
* tolerate that: patch bodies are byte diffs of the working tree, and
|
|
95
95
|
* `hashObjectBatch` deliberately delegates to git so `.gitattributes` and
|
|
96
|
-
* `core.autocrlf`
|
|
96
|
+
* `core.autocrlf` do apply to the hashes `status` compares against. Under the
|
|
97
97
|
* global default the same tree hashes differently on Windows than everywhere
|
|
98
98
|
* else, so exported patches and drift detection disagree across machines.
|
|
99
99
|
* Setting it per-repository leaves the developer's global config alone.
|
|
@@ -5,7 +5,7 @@ import { readOnlyGitIndexEnv } from './git-readonly-index.js';
|
|
|
5
5
|
/**
|
|
6
6
|
* Environment variable that overrides the monolithic `git add -A` timeout
|
|
7
7
|
* (milliseconds). Operators on slow or loaded filesystems can legitimately
|
|
8
|
-
* exceed the 10-minute default during a baseline indexing pass
|
|
8
|
+
* exceed the 10-minute default during a baseline indexing pass. Making the
|
|
9
9
|
* cap overridable lets them retry without recompiling.
|
|
10
10
|
*/
|
|
11
11
|
export const GIT_ADD_TIMEOUT_ENV_VAR = 'FIREFORGE_GIT_ADD_TIMEOUT_MS';
|
|
@@ -46,15 +46,15 @@ export const GIT_ADD_CHUNK_TIMEOUT_MS = resolveTimeoutFromEnv(GIT_ADD_CHUNK_TIME
|
|
|
46
46
|
* In-flight or settled successful `git` availability probe.
|
|
47
47
|
*
|
|
48
48
|
* The probe spawns `which git` (or `where` on Windows), and every git wrapper
|
|
49
|
-
* in this layer used to run it before each command
|
|
50
|
-
* per `fireforge export`. Only
|
|
51
|
-
* so a run that installs git mid-flight (or a test that flips
|
|
52
|
-
* the new answer instead of a sticky refusal.
|
|
49
|
+
* in this layer used to run it before each command, which meant dozens of
|
|
50
|
+
* extra spawns per `fireforge export`. Only success is cached: a rejection
|
|
51
|
+
* clears the slot so a run that installs git mid-flight (or a test that flips
|
|
52
|
+
* the probe) sees the new answer instead of a sticky refusal.
|
|
53
53
|
*/
|
|
54
54
|
let gitAvailability;
|
|
55
55
|
/**
|
|
56
56
|
* Ensures git is available in the system. Memoised after the first successful
|
|
57
|
-
* probe
|
|
57
|
+
* probe. {@link git} calls it, so callers that go through that wrapper do not
|
|
58
58
|
* need to.
|
|
59
59
|
* @throws GitNotFoundError if git is not installed
|
|
60
60
|
*/
|
|
@@ -86,7 +86,7 @@ export async function git(args, cwd, options) {
|
|
|
86
86
|
}
|
|
87
87
|
// A read-only command's private-index scope overlays GIT_INDEX_FILE so
|
|
88
88
|
// index refreshes never touch the primary checkout.
|
|
89
|
-
// Merged
|
|
89
|
+
// Merged under the caller's own env so an explicit override still wins.
|
|
90
90
|
const readOnlyIndexEnv = readOnlyGitIndexEnv(cwd);
|
|
91
91
|
if (options?.env !== undefined || readOnlyIndexEnv !== undefined) {
|
|
92
92
|
execOptions.env = { ...readOnlyIndexEnv, ...options?.env };
|
|
@@ -101,7 +101,7 @@ export async function git(args, cwd, options) {
|
|
|
101
101
|
* Splits a pathspec list into chunks whose joined byte length stays well under
|
|
102
102
|
* the OS `ARG_MAX` limit, so a single batched `git` invocation over hundreds of
|
|
103
103
|
* Mozilla-length paths cannot fail with `E2BIG`. The 96 KB budget is
|
|
104
|
-
*
|
|
104
|
+
* conservative on purpose: even the smallest historical `ARG_MAX` (256 KB)
|
|
105
105
|
* leaves room for the fixed git arguments plus the inherited environment.
|
|
106
106
|
*
|
|
107
107
|
* Chunk boundaries are output-neutral for every batched caller here: each
|
|
@@ -150,7 +150,7 @@ export async function configureGitPerformance(repoDir) {
|
|
|
150
150
|
* rewrites LF to CRLF on checkout and back on staging. FireForge cannot
|
|
151
151
|
* tolerate that: patch bodies are byte diffs of the working tree, and
|
|
152
152
|
* `hashObjectBatch` deliberately delegates to git so `.gitattributes` and
|
|
153
|
-
* `core.autocrlf`
|
|
153
|
+
* `core.autocrlf` do apply to the hashes `status` compares against. Under the
|
|
154
154
|
* global default the same tree hashes differently on Windows than everywhere
|
|
155
155
|
* else, so exported patches and drift detection disagree across machines.
|
|
156
156
|
* Setting it per-repository leaves the developer's global config alone.
|
|
@@ -9,7 +9,7 @@ export type NewFileContent = {
|
|
|
9
9
|
* Reads a new (untracked) file and classifies it for patch generation.
|
|
10
10
|
*
|
|
11
11
|
* A file is binary when git's NUL-byte heuristic says so
|
|
12
|
-
* ({@link isBinaryFile})
|
|
12
|
+
* ({@link isBinaryFile}) or when its bytes are not valid UTF-8. See the
|
|
13
13
|
* module comment for why the second arm exists. Text files come back with
|
|
14
14
|
* their exact decoded content so callers do not read the file twice.
|
|
15
15
|
*
|
|
@@ -23,13 +23,13 @@ export declare function readNewFileContent(repoDir: string, filePath: string): P
|
|
|
23
23
|
* as binary.
|
|
24
24
|
*
|
|
25
25
|
* `git diff --binary` only emits a `GIT binary patch` for a file git itself
|
|
26
|
-
* classifies as binary, and git's classifier is the NUL heuristic
|
|
27
|
-
* Latin-1 file passes it and comes out as a
|
|
26
|
+
* classifies as binary, and git's classifier is the NUL heuristic, so a
|
|
27
|
+
* Latin-1 file passes it and comes out as a text diff whose high bytes are
|
|
28
28
|
* then mangled by the UTF-8 decode every subprocess result goes through.
|
|
29
29
|
* The `-diff` attribute is how git is told otherwise, and a throwaway
|
|
30
30
|
* `core.attributesFile` naming just this path is the narrowest way to set it
|
|
31
31
|
* without touching the tree's own `.gitattributes`. (An in-tree attribute
|
|
32
|
-
* that explicitly sets `diff` for the path would still win
|
|
32
|
+
* that explicitly sets `diff` for the path would still win. The tree's own
|
|
33
33
|
* attributes are its business.)
|
|
34
34
|
*
|
|
35
35
|
* @param filePath - File path (relative to repo root)
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
// SPDX-License-Identifier: EUPL-1.2
|
|
2
2
|
/**
|
|
3
|
-
* Decides how a
|
|
3
|
+
* Decides how a new (untracked) file travels inside a patch: as a synthesized
|
|
4
4
|
* `+`-line text body, or as a `GIT binary patch`.
|
|
5
5
|
*
|
|
6
6
|
* The text body is built from a JavaScript string, and the `index` line next
|
|
7
7
|
* to it comes from `git hash-object` over the file's real bytes. Those two
|
|
8
8
|
* agree only when the bytes decode losslessly as UTF-8. A Latin-1
|
|
9
|
-
* `.properties` or `.rc` file has no NUL byte
|
|
10
|
-
* calls it text
|
|
9
|
+
* `.properties` or `.rc` file has no NUL byte, so git's own binary heuristic
|
|
10
|
+
* calls it text, but a UTF-8 decode turns every high byte into U+FFFD, so
|
|
11
11
|
* the patch body and its blob hash disagree, `git apply` writes different
|
|
12
12
|
* bytes than the tree holds, and every drift check flags the file forever.
|
|
13
13
|
* A binary patch carries the bytes verbatim, so it is the faithful choice for
|
|
@@ -40,7 +40,7 @@ function decodeStrictUtf8(bytes) {
|
|
|
40
40
|
* Reads a new (untracked) file and classifies it for patch generation.
|
|
41
41
|
*
|
|
42
42
|
* A file is binary when git's NUL-byte heuristic says so
|
|
43
|
-
* ({@link isBinaryFile})
|
|
43
|
+
* ({@link isBinaryFile}) or when its bytes are not valid UTF-8. See the
|
|
44
44
|
* module comment for why the second arm exists. Text files come back with
|
|
45
45
|
* their exact decoded content so callers do not read the file twice.
|
|
46
46
|
*
|
|
@@ -67,7 +67,7 @@ export async function readNewFileContent(repoDir, filePath) {
|
|
|
67
67
|
* Both escapes are applied in a single pass, keyed on the source character.
|
|
68
68
|
* Escaping in two passes would re-escape the backslashes the first pass just
|
|
69
69
|
* added, and a backslash that is part of the filename would have to be
|
|
70
|
-
* escaped for the glob layer as well as the quoting layer
|
|
70
|
+
* escaped for the glob layer as well as the quoting layer, which a
|
|
71
71
|
* glob-only first pass cannot tell apart from one it emitted itself.
|
|
72
72
|
*
|
|
73
73
|
* @param filePath - File path (relative to repo root)
|
|
@@ -92,13 +92,13 @@ function toLiteralAttributePattern(filePath) {
|
|
|
92
92
|
* as binary.
|
|
93
93
|
*
|
|
94
94
|
* `git diff --binary` only emits a `GIT binary patch` for a file git itself
|
|
95
|
-
* classifies as binary, and git's classifier is the NUL heuristic
|
|
96
|
-
* Latin-1 file passes it and comes out as a
|
|
95
|
+
* classifies as binary, and git's classifier is the NUL heuristic, so a
|
|
96
|
+
* Latin-1 file passes it and comes out as a text diff whose high bytes are
|
|
97
97
|
* then mangled by the UTF-8 decode every subprocess result goes through.
|
|
98
98
|
* The `-diff` attribute is how git is told otherwise, and a throwaway
|
|
99
99
|
* `core.attributesFile` naming just this path is the narrowest way to set it
|
|
100
100
|
* without touching the tree's own `.gitattributes`. (An in-tree attribute
|
|
101
|
-
* that explicitly sets `diff` for the path would still win
|
|
101
|
+
* that explicitly sets `diff` for the path would still win. The tree's own
|
|
102
102
|
* attributes are its business.)
|
|
103
103
|
*
|
|
104
104
|
* @param filePath - File path (relative to repo root)
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* `--binary` is load-bearing: without it git degrades a binary file's section
|
|
5
5
|
* to the informational `Binary files a/x and b/x differ`, which carries none
|
|
6
6
|
* of the bytes and cannot be replayed by `git apply`. It only expands the
|
|
7
|
-
*
|
|
7
|
+
* binary section's index line to full hashes (text sections keep their
|
|
8
8
|
* abbreviated form), so text output stays byte-identical.
|
|
9
9
|
* @param repoDir - Repository directory
|
|
10
10
|
* @param filePath - Path to the file (relative to repo)
|
|
@@ -34,9 +34,9 @@ export declare function generateFullFilePatch(repoDir: string, filePath: string)
|
|
|
34
34
|
/**
|
|
35
35
|
* Gets the diff for all modified files, including untracked (new) files.
|
|
36
36
|
*
|
|
37
|
-
* Tracked binary files round-trip through `git diff --binary
|
|
37
|
+
* Tracked binary files round-trip through `git diff --binary`. Untracked ones
|
|
38
38
|
* go through {@link generateBinaryFilePatch} below. Both arms must stay
|
|
39
|
-
* binary-aware
|
|
39
|
+
* binary-aware. See {@link getFileDiff} for why.
|
|
40
40
|
* @param repoDir - Repository directory
|
|
41
41
|
* @returns Diff content
|
|
42
42
|
*/
|
|
@@ -44,7 +44,7 @@ export declare function getAllDiff(repoDir: string): Promise<string>;
|
|
|
44
44
|
/**
|
|
45
45
|
* Builds a combined diff against HEAD for the provided files without touching
|
|
46
46
|
* the real git index. Tracked files use `git diff --binary HEAD` (binary
|
|
47
|
-
* sections included)
|
|
47
|
+
* sections included). Untracked files use synthesized new-file diffs, or
|
|
48
48
|
* {@link generateBinaryFilePatch} when the file is binary.
|
|
49
49
|
*
|
|
50
50
|
* Performance: the work is batched into a handful of `git` invocations (one
|