@hominis/fireforge 0.46.0 → 0.46.2
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 +17 -9
- package/dist/src/core/token-dark-mode.js +41 -28
- 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
|
@@ -6,7 +6,7 @@ export interface StaleBuildResult {
|
|
|
6
6
|
/**
|
|
7
7
|
* Engine-relative paths that would have been packaged but appear to have
|
|
8
8
|
* changed since the baseline. Sorted and deduplicated. Truncated at
|
|
9
|
-
* {@link STALE_PATHS_LIMIT} entries for rendering
|
|
9
|
+
* {@link STALE_PATHS_LIMIT} entries for rendering. Consult
|
|
10
10
|
* {@link StaleBuildResult.truncated} to know when to append a `(+N more)`
|
|
11
11
|
* tail to the warning.
|
|
12
12
|
*/
|
|
@@ -18,16 +18,16 @@ export interface StaleBuildResult {
|
|
|
18
18
|
truncated: number;
|
|
19
19
|
/**
|
|
20
20
|
* The baseline that anchored the diff, or undefined when no previous
|
|
21
|
-
* successful build exists. A missing baseline is treated as "not stale"
|
|
22
|
-
*
|
|
21
|
+
* successful build exists. A missing baseline is treated as "not stale":
|
|
22
|
+
* we have nothing to compare against and a warning would mislead.
|
|
23
23
|
*/
|
|
24
24
|
baseline: BuildBaseline | undefined;
|
|
25
25
|
}
|
|
26
26
|
/**
|
|
27
27
|
* Probes the engine tree for packageable changes since the last successful
|
|
28
28
|
* `fireforge build`. Returns a summary the `fireforge test` handler renders
|
|
29
|
-
* as an up-front warning when `--build` was
|
|
30
|
-
* throws
|
|
29
|
+
* as an up-front warning when `--build` was not passed. The probe never
|
|
30
|
+
* throws. Git failures and a missing baseline both degrade to `stale: false`
|
|
31
31
|
* so a broken probe cannot block a test run.
|
|
32
32
|
*
|
|
33
33
|
* @param projectRoot Root directory of the project.
|
|
@@ -48,25 +48,26 @@ export declare const FULL_SUITE_REQUEST = "(entire suite)";
|
|
|
48
48
|
/**
|
|
49
49
|
* Compares the requested test paths against the packaged runtime's coverage
|
|
50
50
|
* claim recorded in the baseline. Returns the requested paths the recorded
|
|
51
|
-
* packaging does
|
|
51
|
+
* packaging does not cover: the runs that would dispatch against missing
|
|
52
52
|
* `_tests/` support fixtures and hang rather than fail.
|
|
53
53
|
*
|
|
54
54
|
* Coverage semantics: an absent claim and `'full'` cover everything. A
|
|
55
55
|
* scoped list covers a request path when the request equals a covered entry,
|
|
56
56
|
* sits beneath a covered directory entry, or shares a manifest granule with
|
|
57
|
-
* a covered entry ({@link toManifestGranule}
|
|
57
|
+
* a covered entry (see {@link toManifestGranule}: a scoped `test --build`
|
|
58
58
|
* packages the whole manifest directory, so a same-manifest sibling of a
|
|
59
59
|
* covered file is packaged too). Both sides are normalized to forward
|
|
60
60
|
* slashes so Windows-style CLI input cannot defeat the prefix rule (baseline
|
|
61
61
|
* paths are POSIX by convention). A request with no paths is a full-suite
|
|
62
|
-
* run and is never covered by a scoped list
|
|
63
|
-
* sentinel is returned
|
|
62
|
+
* run and is never covered by a scoped list, so the
|
|
63
|
+
* {@link FULL_SUITE_REQUEST} sentinel is returned and the refusal can name
|
|
64
|
+
* it.
|
|
64
65
|
*/
|
|
65
66
|
export declare function findUncoveredRequestPaths(coverage: TestPackagingCoverage | undefined, requestedPaths: readonly string[]): string[];
|
|
66
67
|
/**
|
|
67
68
|
* Test manifests changed since the recorded build that sit in (or above)
|
|
68
|
-
* the directory of an uncovered request path
|
|
69
|
-
*
|
|
69
|
+
* the directory of an uncovered request path, i.e. the manifests that
|
|
70
|
+
* explain why this run needs coverage the build never claimed.
|
|
70
71
|
*
|
|
71
72
|
* Best-effort: a probe failure returns an empty list, so the refusal
|
|
72
73
|
* degrades to exactly its previous text rather than failing differently.
|
|
@@ -84,7 +85,7 @@ export declare function findChangedTestManifestsForPaths(engineDir: string, base
|
|
|
84
85
|
* @param coverage - The recorded scoped coverage claim
|
|
85
86
|
* @param changedManifests - Test manifests changed since the recorded
|
|
86
87
|
* build that explain an uncovered path (from
|
|
87
|
-
* {@link findChangedTestManifestsForPaths})
|
|
88
|
+
* {@link findChangedTestManifestsForPaths}). Omitted or empty renders
|
|
88
89
|
* nothing
|
|
89
90
|
*/
|
|
90
91
|
export declare function formatTestCoverageRefusal(uncovered: string[], coverage: string[], changedManifests?: readonly string[]): string;
|
|
@@ -93,25 +94,25 @@ export interface StaticComponentsStaleResult {
|
|
|
93
94
|
/** True when at least one `components.conf` genuinely diverged from the anchor. */
|
|
94
95
|
stale: boolean;
|
|
95
96
|
/**
|
|
96
|
-
* Engine-relative `components.conf` paths changed since the last
|
|
97
|
-
* build. Sorted
|
|
97
|
+
* Engine-relative `components.conf` paths changed since the last full
|
|
98
|
+
* build. Sorted, and not capped. {@link formatStaticComponentsRefusal}
|
|
98
99
|
* applies the render cap.
|
|
99
100
|
*/
|
|
100
101
|
changedManifests: string[];
|
|
101
102
|
}
|
|
102
103
|
/**
|
|
103
|
-
* Probes whether any `components.conf` changed since the last
|
|
104
|
-
* `fireforge build
|
|
105
|
-
* last regenerated. `components.conf` entries bake into compiled code
|
|
104
|
+
* Probes whether any `components.conf` changed since the last full
|
|
105
|
+
* `fireforge build`, i.e. since the compiled StaticComponents table was
|
|
106
|
+
* last regenerated. `components.conf` entries bake into compiled code. A
|
|
106
107
|
* scoped `test --build` packages the file but the child process resolves the
|
|
107
|
-
*
|
|
108
|
+
* old table and fails with `NS_ERROR_MALFORMED_URI` that reads as a test
|
|
108
109
|
* bug.
|
|
109
110
|
*
|
|
110
111
|
* The diff anchors to the baseline's `staticComponentsBaseline` (the last
|
|
111
|
-
* full build's engine HEAD SHA),
|
|
112
|
+
* full build's engine HEAD SHA), not the baseline's own `engineHeadSha`,
|
|
112
113
|
* which a scoped `test --build` advances. Dirty candidates are hash-checked
|
|
113
114
|
* against the anchor's fingerprints so only genuine content divergence
|
|
114
|
-
* counts. No baseline or no anchor means fresh. Never throws
|
|
115
|
+
* counts. No baseline or no anchor means fresh. Never throws: the probes it
|
|
115
116
|
* composes degrade to verbose lines and empty results on git failure,
|
|
116
117
|
* matching {@link checkStaleBuildForTest}.
|
|
117
118
|
*/
|
|
@@ -128,7 +129,7 @@ export declare function formatStaticComponentsRefusal(changedManifests: string[]
|
|
|
128
129
|
* `fireforge import` when `components.conf` diverged from the last full
|
|
129
130
|
* build. Same probe as {@link formatStaticComponentsRefusal},
|
|
130
131
|
* different moment: this fires at mutation time so the operator learns a
|
|
131
|
-
* full build is needed
|
|
132
|
+
* full build is needed before the next gate run refuses.
|
|
132
133
|
*/
|
|
133
134
|
export declare function formatPostMutationStaticComponentsWarning(changedManifests: string[]): string;
|
|
134
135
|
/**
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
* Without this preflight, an operator who edits engine chrome / packaged
|
|
6
6
|
* resources (`jar.mn` entries, `.xhtml`/`.mjs`/`.css` under chrome trees,
|
|
7
7
|
* pref files) and then runs `fireforge test <path>` only discovers the build
|
|
8
|
-
* is stale
|
|
9
|
-
* `NS_ERROR_FILE_NOT_FOUND` against a `chrome://browser/content/…` URI
|
|
10
|
-
* which reads as a test bug
|
|
8
|
+
* is stale after xpcshell / mach test starts and errors out with
|
|
9
|
+
* `NS_ERROR_FILE_NOT_FOUND` against a `chrome://browser/content/…` URI,
|
|
10
|
+
* which reads as a test bug rather than a rebuild prompt. Scaffolding a new
|
|
11
11
|
* top-level chrome document plus an xpcshell test is the canonical case: the
|
|
12
12
|
* test file exists, the manifests are registered, but `dist/` still holds
|
|
13
13
|
* the pre-edit bundle and chrome URIs resolve to nothing.
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* baseline (`.fireforge/last-build.json`), filters to paths that imply
|
|
17
17
|
* packaging, and returns a compact summary. `fireforge test` prints a
|
|
18
18
|
* warning up-front so the operator sees "you edited X, Y, Z since the last
|
|
19
|
-
* build
|
|
19
|
+
* build, rerun with `--build` to refresh" before mach test launches.
|
|
20
20
|
* Detection stays advisory (warn-only) because a fork that rebuilds
|
|
21
21
|
* out-of-band (a separate `./mach build` invocation, an IDE plugin) can
|
|
22
22
|
* legitimately have a fresh `dist/` with no FireForge-recorded baseline
|
|
@@ -34,8 +34,8 @@ const STALE_PATHS_LIMIT = 10;
|
|
|
34
34
|
/**
|
|
35
35
|
* Probes the engine tree for packageable changes since the last successful
|
|
36
36
|
* `fireforge build`. Returns a summary the `fireforge test` handler renders
|
|
37
|
-
* as an up-front warning when `--build` was
|
|
38
|
-
* throws
|
|
37
|
+
* as an up-front warning when `--build` was not passed. The probe never
|
|
38
|
+
* throws. Git failures and a missing baseline both degrade to `stale: false`
|
|
39
39
|
* so a broken probe cannot block a test run.
|
|
40
40
|
*
|
|
41
41
|
* @param projectRoot Root directory of the project.
|
|
@@ -58,8 +58,8 @@ export async function checkStaleBuildForTest(projectRoot, engineDir) {
|
|
|
58
58
|
// Furnace-applied components always has a persistent workdir diff against
|
|
59
59
|
// HEAD, so `git diff --name-only HEAD` returns that diff on every build
|
|
60
60
|
// and the stale check fires immediately after a successful one. The
|
|
61
|
-
// fingerprints capture "these files had this content when the build ran"
|
|
62
|
-
//
|
|
61
|
+
// fingerprints capture "these files had this content when the build ran".
|
|
62
|
+
// A path stays stale only when its live hash diverges.
|
|
63
63
|
packageable = await dropPathsMatchingFingerprints(engineDir, packageable, baseline.packageableFingerprints);
|
|
64
64
|
if (packageable.length === 0) {
|
|
65
65
|
return { stale: false, changedPaths: [], truncated: 0, baseline };
|
|
@@ -89,19 +89,20 @@ export const FULL_SUITE_REQUEST = '(entire suite)';
|
|
|
89
89
|
/**
|
|
90
90
|
* Compares the requested test paths against the packaged runtime's coverage
|
|
91
91
|
* claim recorded in the baseline. Returns the requested paths the recorded
|
|
92
|
-
* packaging does
|
|
92
|
+
* packaging does not cover: the runs that would dispatch against missing
|
|
93
93
|
* `_tests/` support fixtures and hang rather than fail.
|
|
94
94
|
*
|
|
95
95
|
* Coverage semantics: an absent claim and `'full'` cover everything. A
|
|
96
96
|
* scoped list covers a request path when the request equals a covered entry,
|
|
97
97
|
* sits beneath a covered directory entry, or shares a manifest granule with
|
|
98
|
-
* a covered entry ({@link toManifestGranule}
|
|
98
|
+
* a covered entry (see {@link toManifestGranule}: a scoped `test --build`
|
|
99
99
|
* packages the whole manifest directory, so a same-manifest sibling of a
|
|
100
100
|
* covered file is packaged too). Both sides are normalized to forward
|
|
101
101
|
* slashes so Windows-style CLI input cannot defeat the prefix rule (baseline
|
|
102
102
|
* paths are POSIX by convention). A request with no paths is a full-suite
|
|
103
|
-
* run and is never covered by a scoped list
|
|
104
|
-
* sentinel is returned
|
|
103
|
+
* run and is never covered by a scoped list, so the
|
|
104
|
+
* {@link FULL_SUITE_REQUEST} sentinel is returned and the refusal can name
|
|
105
|
+
* it.
|
|
105
106
|
*/
|
|
106
107
|
export function findUncoveredRequestPaths(coverage, requestedPaths) {
|
|
107
108
|
if (coverage === undefined || coverage === 'full') {
|
|
@@ -121,10 +122,10 @@ export function findUncoveredRequestPaths(coverage, requestedPaths) {
|
|
|
121
122
|
* Maps a normalized request/coverage path to the "manifest granule" the
|
|
122
123
|
* packaged runtime actually staged: an extension-bearing basename (a test
|
|
123
124
|
* FILE) maps to its containing directory, a directory (no dot in the
|
|
124
|
-
* basename) maps to itself. Purely lexical
|
|
125
|
+
* basename) maps to itself. Purely lexical: the directory-as-manifest
|
|
125
126
|
* approximation holds because xpcshell/mochitest manifests live next to
|
|
126
127
|
* their test files and a scoped `test --build` stages the whole manifest
|
|
127
|
-
* directory into `obj-*`/`_tests/`, not single files. Caveat: a
|
|
128
|
+
* directory into `obj-*`/`_tests/`, not single files. Caveat: a directory
|
|
128
129
|
* whose basename contains a dot is misread as a file and mapped to its
|
|
129
130
|
* parent, which widens (never narrows) the covered granule.
|
|
130
131
|
*/
|
|
@@ -142,7 +143,7 @@ function normalizeCoveragePath(path) {
|
|
|
142
143
|
}
|
|
143
144
|
/**
|
|
144
145
|
* Formats the refusal shown when a non-`--build` run requests paths the
|
|
145
|
-
* packaged runtime's scoped `test --build` coverage does not include
|
|
146
|
+
* packaged runtime's scoped `test --build` coverage does not include. It is
|
|
146
147
|
* enforced on every such run, with or without `--allow-stale-build`. Kept
|
|
147
148
|
* separate from the matcher so tests can pin structure and copy
|
|
148
149
|
* independently (same split as {@link formatStaleBuildWarning}).
|
|
@@ -150,7 +151,7 @@ function normalizeCoveragePath(path) {
|
|
|
150
151
|
/**
|
|
151
152
|
* Basenames of the test manifests whose entries decide what a packaged test
|
|
152
153
|
* runtime stages. A manifest that gained an entry is the single most common
|
|
153
|
-
* reason a run needs coverage the last build never claimed
|
|
154
|
+
* reason a run needs coverage the last build never claimed, and it is a
|
|
154
155
|
* fact FireForge already holds but never said, leaving the operator to
|
|
155
156
|
* rediscover it after a correct refusal.
|
|
156
157
|
*/
|
|
@@ -173,8 +174,8 @@ function isTestManifestPath(path) {
|
|
|
173
174
|
}
|
|
174
175
|
/**
|
|
175
176
|
* Test manifests changed since the recorded build that sit in (or above)
|
|
176
|
-
* the directory of an uncovered request path
|
|
177
|
-
*
|
|
177
|
+
* the directory of an uncovered request path, i.e. the manifests that
|
|
178
|
+
* explain why this run needs coverage the build never claimed.
|
|
178
179
|
*
|
|
179
180
|
* Best-effort: a probe failure returns an empty list, so the refusal
|
|
180
181
|
* degrades to exactly its previous text rather than failing differently.
|
|
@@ -211,7 +212,7 @@ export async function findChangedTestManifestsForPaths(engineDir, baseline, unco
|
|
|
211
212
|
* @param coverage - The recorded scoped coverage claim
|
|
212
213
|
* @param changedManifests - Test manifests changed since the recorded
|
|
213
214
|
* build that explain an uncovered path (from
|
|
214
|
-
* {@link findChangedTestManifestsForPaths})
|
|
215
|
+
* {@link findChangedTestManifestsForPaths}). Omitted or empty renders
|
|
215
216
|
* nothing
|
|
216
217
|
*/
|
|
217
218
|
export function formatTestCoverageRefusal(uncovered, coverage, changedManifests = []) {
|
|
@@ -222,7 +223,7 @@ export function formatTestCoverageRefusal(uncovered, coverage, changedManifests
|
|
|
222
223
|
};
|
|
223
224
|
const rebuildTargets = uncovered.filter((p) => p !== FULL_SUITE_REQUEST);
|
|
224
225
|
// Name --extend-coverage here or it is undiscoverable: a scoped build
|
|
225
|
-
//
|
|
226
|
+
// replaces the claim, so under several concurrent sessions a peer's build
|
|
226
227
|
// for an unrelated path erases coverage you legitimately still hold, and
|
|
227
228
|
// the union that fixes it is a flag the operator has no reason to know
|
|
228
229
|
// exists at the moment they need it. The anchor conditions are stated
|
|
@@ -233,7 +234,7 @@ export function formatTestCoverageRefusal(uncovered, coverage, changedManifests
|
|
|
233
234
|
const rebuildHint = rebuildTargets.length > 0
|
|
234
235
|
? `Rerun "fireforge test --build ${rebuildTargets.slice(0, STALE_PATHS_LIMIT).join(' ')}" to package them, or run "fireforge build" for full coverage.${extendHint}`
|
|
235
236
|
: 'Run "fireforge build" (or a path-less "fireforge test --build") for full coverage first.';
|
|
236
|
-
// Why
|
|
237
|
+
// Why this run needs new coverage, when a changed manifest explains it: a
|
|
237
238
|
// manifest that gained an entry is not covered by a build claim recorded
|
|
238
239
|
// for other paths, and a browser-chrome claim never covers xpcshell.
|
|
239
240
|
const manifestLine = changedManifests.length > 0
|
|
@@ -246,18 +247,18 @@ export function formatTestCoverageRefusal(uncovered, coverage, changedManifests
|
|
|
246
247
|
'(--allow-stale-build does not bypass this check — it accepts stale content, not missing coverage.)');
|
|
247
248
|
}
|
|
248
249
|
/**
|
|
249
|
-
* Probes whether any `components.conf` changed since the last
|
|
250
|
-
* `fireforge build
|
|
251
|
-
* last regenerated. `components.conf` entries bake into compiled code
|
|
250
|
+
* Probes whether any `components.conf` changed since the last full
|
|
251
|
+
* `fireforge build`, i.e. since the compiled StaticComponents table was
|
|
252
|
+
* last regenerated. `components.conf` entries bake into compiled code. A
|
|
252
253
|
* scoped `test --build` packages the file but the child process resolves the
|
|
253
|
-
*
|
|
254
|
+
* old table and fails with `NS_ERROR_MALFORMED_URI` that reads as a test
|
|
254
255
|
* bug.
|
|
255
256
|
*
|
|
256
257
|
* The diff anchors to the baseline's `staticComponentsBaseline` (the last
|
|
257
|
-
* full build's engine HEAD SHA),
|
|
258
|
+
* full build's engine HEAD SHA), not the baseline's own `engineHeadSha`,
|
|
258
259
|
* which a scoped `test --build` advances. Dirty candidates are hash-checked
|
|
259
260
|
* against the anchor's fingerprints so only genuine content divergence
|
|
260
|
-
* counts. No baseline or no anchor means fresh. Never throws
|
|
261
|
+
* counts. No baseline or no anchor means fresh. Never throws: the probes it
|
|
261
262
|
* composes degrade to verbose lines and empty results on git failure,
|
|
262
263
|
* matching {@link checkStaleBuildForTest}.
|
|
263
264
|
*/
|
|
@@ -300,7 +301,7 @@ export function formatStaticComponentsRefusal(changedManifests) {
|
|
|
300
301
|
* `fireforge import` when `components.conf` diverged from the last full
|
|
301
302
|
* build. Same probe as {@link formatStaticComponentsRefusal},
|
|
302
303
|
* different moment: this fires at mutation time so the operator learns a
|
|
303
|
-
* full build is needed
|
|
304
|
+
* full build is needed before the next gate run refuses.
|
|
304
305
|
*/
|
|
305
306
|
export function formatPostMutationStaticComponentsWarning(changedManifests) {
|
|
306
307
|
const head = changedManifests.slice(0, STALE_PATHS_LIMIT);
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Removes one stale xpcshell `_tests` symlink when mach reports a
|
|
6
6
|
* FileExistsError during test installation.
|
|
7
7
|
*
|
|
8
|
-
* The guard rails are
|
|
8
|
+
* The guard rails are narrow: only quoted FileExistsError
|
|
9
9
|
* destinations inside the active objdir's `_tests` tree are considered, and
|
|
10
10
|
* only when lstat confirms the destination itself is a symlink.
|
|
11
11
|
*/
|
|
@@ -17,7 +17,7 @@ function isInsideDirectory(parent, candidate) {
|
|
|
17
17
|
* Removes one stale xpcshell `_tests` symlink when mach reports a
|
|
18
18
|
* FileExistsError during test installation.
|
|
19
19
|
*
|
|
20
|
-
* The guard rails are
|
|
20
|
+
* The guard rails are narrow: only quoted FileExistsError
|
|
21
21
|
* destinations inside the active objdir's `_tests` tree are considered, and
|
|
22
22
|
* only when lstat confirms the destination itself is a symlink.
|
|
23
23
|
*/
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Operator-facing triage for the `timed out … with no output` / `Ran 0
|
|
3
|
-
* checks` stall
|
|
3
|
+
* checks` stall: the shape where the harness dies before any test output.
|
|
4
4
|
*
|
|
5
|
-
* Split out of `test-harness-crash.ts`, which
|
|
5
|
+
* Split out of `test-harness-crash.ts`, which classifies runs. This module
|
|
6
6
|
* only renders advice about one already-classified shape. Keeping the two
|
|
7
7
|
* apart matters because the census below carries claims of unequal
|
|
8
8
|
* evidential strength, and the rules for editing it are not the rules for
|
|
@@ -10,23 +10,23 @@
|
|
|
10
10
|
* the output or not, while a cause in the census is an assertion about the
|
|
11
11
|
* world that an operator will act on.
|
|
12
12
|
*
|
|
13
|
-
* Everything here is pure
|
|
13
|
+
* Everything here is pure. The platform and the probed display state are
|
|
14
14
|
* injected, so unit tests need no mocking.
|
|
15
15
|
*/
|
|
16
16
|
import type { DisplaySleepState } from './display-state.js';
|
|
17
17
|
import type { HarnessCrashSignature } from './test-harness-signature.js';
|
|
18
18
|
/**
|
|
19
|
-
* Optional hint appended to the harness-crash message when a
|
|
19
|
+
* Optional hint appended to the harness-crash message when a headed run on
|
|
20
20
|
* macOS died at the no-output timeout.
|
|
21
21
|
*
|
|
22
|
-
* When `displayState` names a
|
|
23
|
-
* fact rather than as one of three possibilities
|
|
24
|
-
*
|
|
22
|
+
* When `displayState` names a measured display state, the hint states it as
|
|
23
|
+
* fact rather than as one of three possibilities, which is what probing is
|
|
24
|
+
* for: an operator staring at a bare test failure should not have to
|
|
25
25
|
* rediscover that their machine dimmed. `caffeinate` is described accurately
|
|
26
|
-
* (it prevents sleep
|
|
26
|
+
* (it prevents sleep, and cannot wake an already-sleeping display), so
|
|
27
27
|
* operators are not sent to a command that could not have helped them.
|
|
28
28
|
*
|
|
29
|
-
* Pure
|
|
29
|
+
* Pure. The platform and the probed state are injected so unit tests need
|
|
30
30
|
* no mocking.
|
|
31
31
|
*
|
|
32
32
|
* @param signature - The recognized crash shape
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// SPDX-License-Identifier: EUPL-1.2
|
|
2
2
|
/**
|
|
3
3
|
* Operator-facing triage for the `timed out … with no output` / `Ran 0
|
|
4
|
-
* checks` stall
|
|
4
|
+
* checks` stall: the shape where the harness dies before any test output.
|
|
5
5
|
*
|
|
6
|
-
* Split out of `test-harness-crash.ts`, which
|
|
6
|
+
* Split out of `test-harness-crash.ts`, which classifies runs. This module
|
|
7
7
|
* only renders advice about one already-classified shape. Keeping the two
|
|
8
8
|
* apart matters because the census below carries claims of unequal
|
|
9
9
|
* evidential strength, and the rules for editing it are not the rules for
|
|
@@ -11,14 +11,14 @@
|
|
|
11
11
|
* the output or not, while a cause in the census is an assertion about the
|
|
12
12
|
* world that an operator will act on.
|
|
13
13
|
*
|
|
14
|
-
* Everything here is pure
|
|
14
|
+
* Everything here is pure. The platform and the probed display state are
|
|
15
15
|
* injected, so unit tests need no mocking.
|
|
16
16
|
*/
|
|
17
17
|
/**
|
|
18
18
|
* First step for the `timed out … with no output` / `Ran 0 checks`
|
|
19
|
-
* signature, printed
|
|
19
|
+
* signature, printed above the cause list. Running a known-good control
|
|
20
20
|
* separates "this test" from "this build" and is the correct opening move
|
|
21
|
-
* for
|
|
21
|
+
* for every cause below. It is not specific to any one of them, so
|
|
22
22
|
* attaching it to a single entry made reaching that entry informationally
|
|
23
23
|
* empty.
|
|
24
24
|
*/
|
|
@@ -26,23 +26,23 @@ const NO_OUTPUT_STALL_CONTROL_STEP = 'First, run a known-good control test. If t
|
|
|
26
26
|
'under investigation, and the list below applies to the build or the host.';
|
|
27
27
|
/**
|
|
28
28
|
* Recorded causes of the `timed out … with no output` / `Ran 0 checks`
|
|
29
|
-
* signature, each paired with the probe that
|
|
29
|
+
* signature, each paired with the probe that discriminates it from the
|
|
30
30
|
* others. Printed verbatim under the hint.
|
|
31
31
|
*
|
|
32
|
-
* Evidence per entry is
|
|
32
|
+
* Evidence per entry is unequal, and the text says so:
|
|
33
33
|
*
|
|
34
|
-
* - (1) is
|
|
34
|
+
* - (1) is measured: `probeDisplaySleepState` reads the display's power
|
|
35
35
|
* state, so the hint states it as fact rather than as a possibility.
|
|
36
36
|
* - (2) is discriminated by `--headless`.
|
|
37
|
-
* - (4) is
|
|
37
|
+
* - (4) is mechanical and was root-caused downstream: the harness serves
|
|
38
38
|
* its manifest from `server.js` on 8888, and a survivor of an
|
|
39
39
|
* interrupted run keeps the port. Its probe is exact, and the preflight
|
|
40
40
|
* in `mochitest-server-port.ts` now refuses it before a run starts.
|
|
41
|
-
* - (3) is now
|
|
41
|
+
* - (3) is now mechanical and root-caused, replacing the correlation an
|
|
42
42
|
* earlier revision recorded. A `chrome://` (or `resource://`) URL that
|
|
43
43
|
* resolves to nothing reaches `CheckForBrokenChromeURL`
|
|
44
44
|
* (netwerk/base/nsNetUtil.cpp), which outside automation only
|
|
45
|
-
* `printf_stderr`s `Missing chrome or resource URL: <uri
|
|
45
|
+
* `printf_stderr`s `Missing chrome or resource URL: <uri>`, but under
|
|
46
46
|
* `xpc::IsInAutomation()` the same condition is
|
|
47
47
|
* `MOZ_CRASH_UNSAFE_PRINTF("Missing chrome or resource URLs: %s")`. A
|
|
48
48
|
* downstream reproduction symbolicated the faulting frame as
|
|
@@ -52,13 +52,13 @@ const NO_OUTPUT_STALL_CONTROL_STEP = 'First, run a known-good control test. If t
|
|
|
52
52
|
* failed image load in Gecko fires `error` and does not gate the
|
|
53
53
|
* document load event.
|
|
54
54
|
*
|
|
55
|
-
* Detection by log line is
|
|
56
|
-
*
|
|
57
|
-
*
|
|
55
|
+
* Detection by log line is not specified for (3), because of the mechanism
|
|
56
|
+
* itself: in the reproduction the crash landed in a content
|
|
57
|
+
* process (`plugin-container`, a child of the browser) with the
|
|
58
58
|
* crash reporter compiled out, so the harness log carried neither the crash
|
|
59
|
-
* message nor a crash line
|
|
59
|
+
* message nor a crash line, only the no-output timeout, `Ran 0 checks`,
|
|
60
60
|
* and mochitest's "Can't trigger Breakpad, just killing process". Under
|
|
61
|
-
* automation the message is in the process that
|
|
61
|
+
* automation the message is in the process that died, not in the log, so
|
|
62
62
|
* the census points at the two artefacts that do carry it: the OS crash
|
|
63
63
|
* report (whose faulting frame names `CheckForBrokenChromeURL`) and the
|
|
64
64
|
* out-of-automation smoke probe (which prints the non-crashing spelling
|
|
@@ -90,17 +90,17 @@ const NO_OUTPUT_STALL_TRIAGE = [
|
|
|
90
90
|
'reach a stall only on a host where the port could not be probed.',
|
|
91
91
|
];
|
|
92
92
|
/**
|
|
93
|
-
* Optional hint appended to the harness-crash message when a
|
|
93
|
+
* Optional hint appended to the harness-crash message when a headed run on
|
|
94
94
|
* macOS died at the no-output timeout.
|
|
95
95
|
*
|
|
96
|
-
* When `displayState` names a
|
|
97
|
-
* fact rather than as one of three possibilities
|
|
98
|
-
*
|
|
96
|
+
* When `displayState` names a measured display state, the hint states it as
|
|
97
|
+
* fact rather than as one of three possibilities, which is what probing is
|
|
98
|
+
* for: an operator staring at a bare test failure should not have to
|
|
99
99
|
* rediscover that their machine dimmed. `caffeinate` is described accurately
|
|
100
|
-
* (it prevents sleep
|
|
100
|
+
* (it prevents sleep, and cannot wake an already-sleeping display), so
|
|
101
101
|
* operators are not sent to a command that could not have helped them.
|
|
102
102
|
*
|
|
103
|
-
* Pure
|
|
103
|
+
* Pure. The platform and the probed state are injected so unit tests need
|
|
104
104
|
* no mocking.
|
|
105
105
|
*
|
|
106
106
|
* @param signature - The recognized crash shape
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* True when `lines` contain a category header (single-line or multi-line
|
|
3
|
-
* banner shape) whose name
|
|
3
|
+
* banner shape) whose name equals `category`. Shared by the pre-add
|
|
4
4
|
* assertion, the banner creation path, and the section finder so all
|
|
5
5
|
* agree on what "exists" means.
|
|
6
6
|
*/
|
|
@@ -15,11 +15,11 @@ export declare function categoryHeaderExists(lines: string[], category: string):
|
|
|
15
15
|
* - Multi-line: `/* =====` opening, `Foo` on any of the next ~5 lines,
|
|
16
16
|
* closing `*\/`.
|
|
17
17
|
*
|
|
18
|
-
* This helper exists as a pure inspector
|
|
18
|
+
* This helper exists as a pure inspector. It never throws on malformed
|
|
19
19
|
* headers and silently skips shapes it cannot parse.
|
|
20
20
|
*/
|
|
21
21
|
/**
|
|
22
|
-
* Category name declared by the banner
|
|
22
|
+
* Category name declared by the banner starting at `index`, or `undefined`
|
|
23
23
|
* when that line opens no banner.
|
|
24
24
|
*
|
|
25
25
|
* The single reader for both banner shapes, so the inventory walk, the
|
|
@@ -66,7 +66,7 @@ export interface TokenDeclarationLocation {
|
|
|
66
66
|
/**
|
|
67
67
|
* Finds an existing declaration of `tokenName` inside the base `:root`
|
|
68
68
|
* block. Dark `@media` and `:root[variant]` companion blocks are
|
|
69
|
-
*
|
|
69
|
+
* excluded: they mirror the base declaration, they do not
|
|
70
70
|
* own the token. Comment content never matches, and the name match is
|
|
71
71
|
* exact (`--foo-bar` does not match `--x-foo-bar`).
|
|
72
72
|
*/
|
|
@@ -3,11 +3,12 @@
|
|
|
3
3
|
* Category banner and token-declaration helpers for the tokens CSS file.
|
|
4
4
|
* Split out of `token-manager.ts` to stay inside the per-file line budget.
|
|
5
5
|
*
|
|
6
|
-
* Banner matching is
|
|
6
|
+
* Banner matching is exact: the text between the `=` runs (single-line
|
|
7
7
|
* shape) or on the block line (multi-line shape) must equal the category
|
|
8
|
-
* after trimming.
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* after trimming. With a substring match, a TOC comment or a longer banner
|
|
9
|
+
* whose name merely starts with the category (a canvas colors banner
|
|
10
|
+
* satisfying a lookup for `Colors`) would also match, and `token add` would
|
|
11
|
+
* then write into the wrong section, or no-op, with exit 0.
|
|
11
12
|
*/
|
|
12
13
|
import { join } from 'node:path';
|
|
13
14
|
import { GeneralError } from '../errors/base.js';
|
|
@@ -23,7 +24,7 @@ function multiLineBlockNameMatches(blockLine, category) {
|
|
|
23
24
|
* Body of the first `/* … *\/` comment on `line`, or `undefined` when the
|
|
24
25
|
* line carries no closed block comment.
|
|
25
26
|
*
|
|
26
|
-
*
|
|
27
|
+
* This uses index arithmetic rather than a regex: every regex spelling of
|
|
27
28
|
* "banner comment" this module used to carry was super-linear on a line that
|
|
28
29
|
* repeats the opening shape (CodeQL `js/polynomial-redos`), and `tokens.css`
|
|
29
30
|
* is a file FireForge reads out of a consumer's engine tree, so a
|
|
@@ -39,7 +40,7 @@ function blockCommentBody(line) {
|
|
|
39
40
|
return line.slice(open + 2, close);
|
|
40
41
|
}
|
|
41
42
|
/**
|
|
42
|
-
* True when `line` carries a single-line banner comment
|
|
43
|
+
* True when `line` carries a single-line banner comment: a closed block
|
|
43
44
|
* comment whose body both opens and closes with `=`. Recognises the decorative
|
|
44
45
|
* all-`=` rule as well as a named `= Foo =` banner, which is what the section
|
|
45
46
|
* scan wants: either shape ends the preceding section.
|
|
@@ -51,7 +52,7 @@ function isSingleLineBannerLine(line) {
|
|
|
51
52
|
/**
|
|
52
53
|
* Name declared by a single-line banner (`/* = Foo = *\/` → `Foo`), or
|
|
53
54
|
* `undefined` when the line is not a named banner. The `=` runs on both sides
|
|
54
|
-
* are required
|
|
55
|
+
* are required. A decorative all-`=` rule carries no name and yields
|
|
55
56
|
* `undefined`.
|
|
56
57
|
*/
|
|
57
58
|
function singleLineBannerName(line) {
|
|
@@ -79,7 +80,7 @@ function singleLineBannerName(line) {
|
|
|
79
80
|
}
|
|
80
81
|
/**
|
|
81
82
|
* True when `lines` contain a category header (single-line or multi-line
|
|
82
|
-
* banner shape) whose name
|
|
83
|
+
* banner shape) whose name equals `category`. Shared by the pre-add
|
|
83
84
|
* assertion, the banner creation path, and the section finder so all
|
|
84
85
|
* agree on what "exists" means.
|
|
85
86
|
*/
|
|
@@ -112,11 +113,11 @@ export function categoryHeaderExists(lines, category) {
|
|
|
112
113
|
* - Multi-line: `/* =====` opening, `Foo` on any of the next ~5 lines,
|
|
113
114
|
* closing `*\/`.
|
|
114
115
|
*
|
|
115
|
-
* This helper exists as a pure inspector
|
|
116
|
+
* This helper exists as a pure inspector. It never throws on malformed
|
|
116
117
|
* headers and silently skips shapes it cannot parse.
|
|
117
118
|
*/
|
|
118
119
|
/**
|
|
119
|
-
* Category name declared by the banner
|
|
120
|
+
* Category name declared by the banner starting at `index`, or `undefined`
|
|
120
121
|
* when that line opens no banner.
|
|
121
122
|
*
|
|
122
123
|
* The single reader for both banner shapes, so the inventory walk, the
|
|
@@ -211,7 +212,7 @@ export function findCategorySection(lines, category, tokensCssPath) {
|
|
|
211
212
|
categoryLine = i;
|
|
212
213
|
break;
|
|
213
214
|
}
|
|
214
|
-
// Check multi-line format: line opens a block comment with === but does
|
|
215
|
+
// Check multi-line format: line opens a block comment with === but does not close it
|
|
215
216
|
if (/^\s*\/\*\s*=+/.test(line) && !/\*\//.test(line)) {
|
|
216
217
|
for (let j = i + 1; j < Math.min(i + 6, lines.length); j++) {
|
|
217
218
|
const blockLine = lines[j] ?? '';
|
|
@@ -278,7 +279,7 @@ export function maskCommentLines(lines) {
|
|
|
278
279
|
/**
|
|
279
280
|
* Finds an existing declaration of `tokenName` inside the base `:root`
|
|
280
281
|
* block. Dark `@media` and `:root[variant]` companion blocks are
|
|
281
|
-
*
|
|
282
|
+
* excluded: they mirror the base declaration, they do not
|
|
282
283
|
* own the token. Comment content never matches, and the name match is
|
|
283
284
|
* exact (`--foo-bar` does not match `--x-foo-bar`).
|
|
284
285
|
*/
|
|
@@ -8,16 +8,15 @@ import { loadFurnaceConfig } from './furnace-config.js';
|
|
|
8
8
|
/**
|
|
9
9
|
* Default platform prefixes treated as allowlisted upstream vars. Any
|
|
10
10
|
* `var(--moz-*)` usage in a fork's CSS is a Firefox platform variable the
|
|
11
|
-
* fork does not own and must not count as an unknown
|
|
11
|
+
* fork does not own and must not count as an unknown. Otherwise a
|
|
12
12
|
* `furnace override moz-button -t css-only` plus one fork token reports 1%
|
|
13
13
|
* coverage, because the ~84 upstream `--moz-*` vars in the copied baseline
|
|
14
14
|
* all count against it.
|
|
15
15
|
*
|
|
16
16
|
* Forks that want to opt out can override this via
|
|
17
|
-
* `furnace.json.platformPrefixes = []
|
|
18
|
-
* (e.g. `['--moz-', '--in-content-']`). The config is additive
|
|
19
|
-
* removed from the defaults unless the operator
|
|
20
|
-
* list.
|
|
17
|
+
* `furnace.json.platformPrefixes = []`. Forks that want more can extend it
|
|
18
|
+
* (e.g. `['--moz-', '--in-content-']`). The config is additive: nothing is
|
|
19
|
+
* removed from the defaults unless the operator writes a shorter list.
|
|
21
20
|
*/
|
|
22
21
|
const DEFAULT_PLATFORM_PREFIXES = ['--moz-'];
|
|
23
22
|
/**
|