@hominis/fireforge 0.45.0 → 0.46.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +409 -446
- package/dist/bin/fireforge.d.ts +1 -1
- package/dist/bin/fireforge.js +21 -15
- package/dist/build-info.json +4 -4
- package/dist/src/cli-usage-error.d.ts +46 -0
- package/dist/src/cli-usage-error.js +81 -0
- package/dist/src/cli.d.ts +7 -2
- package/dist/src/cli.js +47 -47
- package/dist/src/commands/bootstrap-checks.js +2 -1
- package/dist/src/commands/bootstrap.js +3 -4
- package/dist/src/commands/build.js +27 -17
- package/dist/src/commands/config.js +9 -9
- package/dist/src/commands/destructive-decision.d.ts +19 -0
- package/dist/src/commands/destructive-decision.js +31 -0
- package/dist/src/commands/discard.js +5 -5
- package/dist/src/commands/doctor-check-core.d.ts +4 -10
- package/dist/src/commands/doctor-check-core.js +0 -8
- package/dist/src/commands/doctor-external-toolchains.js +2 -2
- package/dist/src/commands/doctor-furnace-config-sync.d.ts +2 -2
- package/dist/src/commands/doctor-furnace-config-sync.js +20 -20
- package/dist/src/commands/doctor-furnace-jar.d.ts +1 -1
- package/dist/src/commands/doctor-furnace-jar.js +1 -1
- package/dist/src/commands/doctor-furnace.js +22 -22
- package/dist/src/commands/doctor-orphaned-harness.d.ts +10 -17
- package/dist/src/commands/doctor-orphaned-harness.js +14 -23
- package/dist/src/commands/doctor-patch-manifest.d.ts +2 -1
- package/dist/src/commands/doctor-patch-manifest.js +7 -6
- package/dist/src/commands/doctor-post-rebase-audit.js +3 -3
- package/dist/src/commands/doctor-source-pin.d.ts +12 -12
- package/dist/src/commands/doctor-source-pin.js +14 -14
- package/dist/src/commands/doctor-working-tree.d.ts +3 -3
- package/dist/src/commands/doctor-working-tree.js +3 -3
- package/dist/src/commands/doctor.d.ts +3 -1
- package/dist/src/commands/doctor.js +15 -16
- package/dist/src/commands/download.js +50 -37
- package/dist/src/commands/export-all.js +29 -12
- package/dist/src/commands/export-flow.d.ts +5 -5
- package/dist/src/commands/export-flow.js +29 -59
- package/dist/src/commands/export-placement-conflicts.d.ts +3 -3
- package/dist/src/commands/export-placement-conflicts.js +12 -12
- package/dist/src/commands/export-placement-gate.d.ts +2 -2
- package/dist/src/commands/export-placement-gate.js +7 -13
- package/dist/src/commands/export-placement-policy.d.ts +1 -1
- package/dist/src/commands/export-placement-policy.js +4 -6
- package/dist/src/commands/export-shared.d.ts +51 -32
- package/dist/src/commands/export-shared.js +17 -32
- package/dist/src/commands/export.js +14 -5
- package/dist/src/commands/furnace/apply.js +16 -16
- package/dist/src/commands/furnace/authoring-config.d.ts +13 -0
- package/dist/src/commands/furnace/authoring-config.js +19 -0
- package/dist/src/commands/furnace/chrome-doc-remove.d.ts +1 -1
- package/dist/src/commands/furnace/chrome-doc-remove.js +2 -2
- package/dist/src/commands/furnace/chrome-doc-templates.d.ts +14 -14
- package/dist/src/commands/furnace/chrome-doc-templates.js +17 -17
- package/dist/src/commands/furnace/chrome-doc-tests.d.ts +2 -2
- package/dist/src/commands/furnace/chrome-doc-tests.js +4 -4
- package/dist/src/commands/furnace/chrome-doc.d.ts +8 -8
- package/dist/src/commands/furnace/chrome-doc.js +18 -18
- package/dist/src/commands/furnace/create-browser-test.d.ts +1 -1
- package/dist/src/commands/furnace/create-browser-test.js +7 -12
- package/dist/src/commands/furnace/create-dry-run.d.ts +4 -4
- package/dist/src/commands/furnace/create-dry-run.js +6 -9
- package/dist/src/commands/furnace/create-features.d.ts +2 -2
- package/dist/src/commands/furnace/create-features.js +2 -2
- package/dist/src/commands/furnace/create-mochikit.d.ts +4 -4
- package/dist/src/commands/furnace/create-mochikit.js +7 -7
- package/dist/src/commands/furnace/create-templates.d.ts +31 -15
- package/dist/src/commands/furnace/create-templates.js +20 -19
- package/dist/src/commands/furnace/create-xpcshell.d.ts +5 -5
- package/dist/src/commands/furnace/create-xpcshell.js +8 -8
- package/dist/src/commands/furnace/create.d.ts +1 -1
- package/dist/src/commands/furnace/create.js +35 -29
- package/dist/src/commands/furnace/deploy.js +15 -6
- package/dist/src/commands/furnace/diff.js +7 -7
- package/dist/src/commands/furnace/index.js +1 -1
- package/dist/src/commands/furnace/init.js +17 -16
- package/dist/src/commands/furnace/list.js +2 -2
- package/dist/src/commands/furnace/override.d.ts +1 -1
- package/dist/src/commands/furnace/override.js +43 -34
- package/dist/src/commands/furnace/preview.js +17 -17
- package/dist/src/commands/furnace/refresh.js +15 -7
- package/dist/src/commands/furnace/remove-mutations.d.ts +9 -10
- package/dist/src/commands/furnace/remove-mutations.js +19 -19
- package/dist/src/commands/furnace/remove-state.d.ts +1 -1
- package/dist/src/commands/furnace/remove-state.js +1 -1
- package/dist/src/commands/furnace/remove.js +4 -8
- package/dist/src/commands/furnace/rename-browser-test.js +10 -15
- package/dist/src/commands/furnace/rename-xpcshell.d.ts +2 -2
- package/dist/src/commands/furnace/rename-xpcshell.js +3 -3
- package/dist/src/commands/furnace/rename.js +36 -36
- package/dist/src/commands/furnace/scan.js +3 -3
- package/dist/src/commands/furnace/status.js +19 -16
- package/dist/src/commands/furnace/sync.js +6 -6
- package/dist/src/commands/furnace/test-file-name.d.ts +28 -0
- package/dist/src/commands/furnace/test-file-name.js +39 -0
- package/dist/src/commands/furnace/validate.js +11 -12
- package/dist/src/commands/furnace/validation-output.d.ts +21 -9
- package/dist/src/commands/furnace/validation-output.js +3 -8
- package/dist/src/commands/import.js +22 -29
- package/dist/src/commands/lint-per-patch.d.ts +2 -2
- package/dist/src/commands/lint-per-patch.js +27 -12
- package/dist/src/commands/lint-per-run-checkjs.d.ts +14 -15
- package/dist/src/commands/lint-per-run-checkjs.js +14 -15
- package/dist/src/commands/lint-report.d.ts +3 -3
- package/dist/src/commands/lint-report.js +4 -4
- package/dist/src/commands/lint.d.ts +5 -4
- package/dist/src/commands/lint.js +36 -36
- package/dist/src/commands/manifest.d.ts +4 -4
- package/dist/src/commands/manifest.js +1 -1
- package/dist/src/commands/package.js +4 -6
- package/dist/src/commands/patch/compact.d.ts +2 -2
- package/dist/src/commands/patch/compact.js +19 -20
- package/dist/src/commands/patch/delete.d.ts +1 -1
- package/dist/src/commands/patch/delete.js +23 -33
- package/dist/src/commands/patch/entry-projection.d.ts +13 -0
- package/dist/src/commands/patch/entry-projection.js +24 -0
- package/dist/src/commands/patch/lint-ignore.d.ts +3 -12
- package/dist/src/commands/patch/lint-ignore.js +33 -44
- package/dist/src/commands/patch/move-files-create.d.ts +2 -2
- package/dist/src/commands/patch/move-files-create.js +29 -15
- package/dist/src/commands/patch/move-files-into.d.ts +2 -2
- package/dist/src/commands/patch/move-files-into.js +41 -37
- package/dist/src/commands/patch/move-files.js +5 -14
- package/dist/src/commands/patch/patch-context.d.ts +1 -1
- package/dist/src/commands/patch/rename.d.ts +4 -4
- package/dist/src/commands/patch/rename.js +35 -49
- package/dist/src/commands/patch/reorder.js +35 -48
- package/dist/src/commands/patch/split-plan.d.ts +7 -8
- package/dist/src/commands/patch/split-plan.js +10 -13
- package/dist/src/commands/patch/split.d.ts +2 -2
- package/dist/src/commands/patch/split.js +50 -48
- package/dist/src/commands/patch/staged-dependency-validate.d.ts +1 -1
- package/dist/src/commands/patch/staged-dependency-validate.js +3 -3
- package/dist/src/commands/patch/staged-dependency.d.ts +1 -1
- package/dist/src/commands/patch/staged-dependency.js +22 -28
- package/dist/src/commands/patch/tier.d.ts +2 -2
- package/dist/src/commands/patch/tier.js +20 -30
- package/dist/src/commands/patch-rename-map.d.ts +19 -0
- package/dist/src/commands/patch-rename-map.js +36 -0
- package/dist/src/commands/pending-resolution.d.ts +15 -0
- package/dist/src/commands/pending-resolution.js +25 -0
- package/dist/src/commands/re-export-adjacent.d.ts +25 -3
- package/dist/src/commands/re-export-adjacent.js +40 -24
- package/dist/src/commands/re-export-bulk-scan.d.ts +3 -3
- package/dist/src/commands/re-export-bulk-scan.js +23 -27
- package/dist/src/commands/re-export-drift.d.ts +10 -10
- package/dist/src/commands/re-export-drift.js +33 -33
- package/dist/src/commands/re-export-files.d.ts +2 -3
- package/dist/src/commands/re-export-files.js +52 -44
- package/dist/src/commands/re-export-lint.d.ts +29 -30
- package/dist/src/commands/re-export-lint.js +36 -29
- package/dist/src/commands/re-export-options.d.ts +1 -1
- package/dist/src/commands/re-export-options.js +1 -1
- package/dist/src/commands/re-export-register.d.ts +1 -1
- package/dist/src/commands/re-export-register.js +1 -1
- package/dist/src/commands/re-export-scan.d.ts +1 -1
- package/dist/src/commands/re-export-scan.js +12 -9
- package/dist/src/commands/re-export-single.d.ts +23 -4
- package/dist/src/commands/re-export-single.js +39 -31
- package/dist/src/commands/re-export.js +35 -17
- package/dist/src/commands/rebase/abort.js +9 -14
- package/dist/src/commands/rebase/continue.js +20 -19
- package/dist/src/commands/rebase/index.d.ts +1 -1
- package/dist/src/commands/rebase/index.js +5 -5
- package/dist/src/commands/rebase/patch-loop.d.ts +2 -2
- package/dist/src/commands/rebase/patch-loop.js +20 -24
- package/dist/src/commands/register.js +5 -5
- package/dist/src/commands/reset.js +1 -1
- package/dist/src/commands/resolve.d.ts +2 -2
- package/dist/src/commands/resolve.js +21 -13
- package/dist/src/commands/run.d.ts +0 -13
- package/dist/src/commands/run.js +38 -51
- package/dist/src/commands/setup-support.d.ts +16 -4
- package/dist/src/commands/setup-support.js +20 -20
- package/dist/src/commands/setup.js +4 -10
- package/dist/src/commands/source.js +9 -2
- package/dist/src/commands/status-check.d.ts +3 -3
- package/dist/src/commands/status-check.js +6 -6
- package/dist/src/commands/status-json.d.ts +14 -13
- package/dist/src/commands/status-json.js +9 -8
- package/dist/src/commands/status-output.d.ts +3 -3
- package/dist/src/commands/status-output.js +5 -5
- package/dist/src/commands/status-ownership.d.ts +3 -3
- package/dist/src/commands/status-ownership.js +3 -3
- package/dist/src/commands/status.js +25 -26
- package/dist/src/commands/test-build-phase.d.ts +3 -3
- package/dist/src/commands/test-build-phase.js +48 -24
- package/dist/src/commands/test-diagnose.d.ts +1 -1
- package/dist/src/commands/test-diagnose.js +20 -20
- package/dist/src/commands/test-modes.d.ts +4 -4
- package/dist/src/commands/test-modes.js +4 -5
- package/dist/src/commands/test-register.js +5 -3
- package/dist/src/commands/test-run.d.ts +11 -11
- package/dist/src/commands/test-run.js +40 -33
- package/dist/src/commands/test-stale-gate.d.ts +12 -12
- package/dist/src/commands/test-stale-gate.js +17 -17
- package/dist/src/commands/test-verdict.d.ts +19 -5
- package/dist/src/commands/test-verdict.js +26 -11
- package/dist/src/commands/test.d.ts +3 -3
- package/dist/src/commands/test.js +73 -36
- package/dist/src/commands/token-coverage.js +3 -3
- package/dist/src/commands/token-list.d.ts +26 -0
- package/dist/src/commands/token-list.js +153 -0
- package/dist/src/commands/token.js +26 -10
- package/dist/src/commands/tree.js +26 -21
- package/dist/src/commands/typecheck.d.ts +6 -6
- package/dist/src/commands/typecheck.js +16 -16
- package/dist/src/commands/verify.d.ts +3 -3
- package/dist/src/commands/verify.js +10 -10
- package/dist/src/commands/watch.js +11 -11
- package/dist/src/commands/wire.js +17 -16
- package/dist/src/core/ast-utils.d.ts +7 -7
- package/dist/src/core/ast-utils.js +8 -8
- package/dist/src/core/branding.d.ts +5 -12
- package/dist/src/core/branding.js +6 -5
- package/dist/src/core/browser-wire.d.ts +1 -1
- package/dist/src/core/browser-wire.js +10 -7
- package/dist/src/core/build-audit-platform.d.ts +32 -3
- package/dist/src/core/build-audit-platform.js +153 -13
- package/dist/src/core/build-audit-registration.d.ts +5 -5
- package/dist/src/core/build-audit-registration.js +10 -9
- package/dist/src/core/build-audit-resolve.d.ts +5 -5
- package/dist/src/core/build-audit-resolve.js +6 -6
- package/dist/src/core/build-audit-skip.d.ts +57 -0
- package/dist/src/core/build-audit-skip.js +112 -0
- package/dist/src/core/build-audit-transforms.d.ts +2 -2
- package/dist/src/core/build-audit-transforms.js +3 -3
- package/dist/src/core/build-audit.d.ts +21 -8
- package/dist/src/core/build-audit.js +142 -40
- package/dist/src/core/build-baseline-types.d.ts +19 -18
- package/dist/src/core/build-baseline-types.js +1 -1
- package/dist/src/core/build-baseline.d.ts +48 -31
- package/dist/src/core/build-baseline.js +20 -43
- package/dist/src/core/build-jar-escalation.d.ts +8 -8
- package/dist/src/core/build-jar-escalation.js +18 -17
- package/dist/src/core/build-overwrite-guard.d.ts +4 -4
- package/dist/src/core/build-overwrite-guard.js +14 -14
- package/dist/src/core/build-prepare.d.ts +4 -12
- package/dist/src/core/build-prepare.js +22 -26
- package/dist/src/core/config-mutate.js +4 -4
- package/dist/src/core/config-paths.d.ts +2 -6
- package/dist/src/core/config-paths.js +4 -2
- package/dist/src/core/config-state.d.ts +0 -6
- package/dist/src/core/config-state.js +3 -21
- package/dist/src/core/config-validate-build-audit.d.ts +8 -0
- package/dist/src/core/config-validate-build-audit.js +80 -0
- package/dist/src/core/config-validate-file-size.d.ts +1 -1
- package/dist/src/core/config-validate-file-size.js +3 -3
- package/dist/src/core/config-validate-patch-policy.d.ts +2 -2
- package/dist/src/core/config-validate-patch-policy.js +3 -3
- package/dist/src/core/config-validate-test-toolchains.d.ts +2 -2
- package/dist/src/core/config-validate-test-toolchains.js +4 -5
- package/dist/src/core/config-validate.js +22 -12
- package/dist/src/core/config.d.ts +12 -12
- package/dist/src/core/config.js +21 -25
- package/dist/src/core/coverage-extend.d.ts +16 -16
- package/dist/src/core/coverage-extend.js +20 -20
- package/dist/src/core/destructive.d.ts +14 -14
- package/dist/src/core/destructive.js +9 -9
- package/dist/src/core/diff-hunks.d.ts +2 -2
- package/dist/src/core/diff-hunks.js +7 -7
- package/dist/src/core/discard-baseline.d.ts +10 -10
- package/dist/src/core/discard-baseline.js +22 -23
- package/dist/src/core/display-state.d.ts +11 -11
- package/dist/src/core/display-state.js +12 -12
- package/dist/src/core/engine-changes.d.ts +2 -2
- package/dist/src/core/engine-changes.js +2 -2
- package/dist/src/core/engine-precondition.d.ts +5 -13
- package/dist/src/core/engine-precondition.js +5 -10
- package/dist/src/core/engine-session-lock.d.ts +18 -18
- package/dist/src/core/engine-session-lock.js +50 -54
- package/dist/src/core/export-moved-code-shape.d.ts +7 -7
- package/dist/src/core/export-moved-code-shape.js +10 -10
- package/dist/src/core/file-lock-owner.d.ts +103 -0
- package/dist/src/core/file-lock-owner.js +259 -0
- package/dist/src/core/file-lock.d.ts +14 -19
- package/dist/src/core/file-lock.js +90 -128
- package/dist/src/core/firefox-cache.d.ts +13 -1
- package/dist/src/core/firefox-cache.js +61 -36
- package/dist/src/core/firefox-download.d.ts +15 -0
- package/dist/src/core/firefox-download.js +38 -22
- package/dist/src/core/firefox-extract.d.ts +8 -7
- package/dist/src/core/firefox-extract.js +45 -27
- package/dist/src/core/firefox.d.ts +34 -36
- package/dist/src/core/firefox.js +13 -44
- package/dist/src/core/furnace-apply-dry-run.d.ts +1 -6
- package/dist/src/core/furnace-apply-dry-run.js +2 -8
- package/dist/src/core/furnace-apply-ftl.d.ts +5 -5
- package/dist/src/core/furnace-apply-ftl.js +8 -8
- package/dist/src/core/furnace-apply-helpers.d.ts +9 -20
- package/dist/src/core/furnace-apply-helpers.js +28 -39
- package/dist/src/core/furnace-apply-output.js +1 -1
- package/dist/src/core/furnace-apply-overwrite-warn.d.ts +9 -9
- package/dist/src/core/furnace-apply-overwrite-warn.js +13 -11
- package/dist/src/core/furnace-apply-undeploy-actions.d.ts +1 -1
- package/dist/src/core/furnace-apply-undeploy-actions.js +1 -1
- package/dist/src/core/furnace-apply.d.ts +4 -4
- package/dist/src/core/furnace-apply.js +50 -29
- package/dist/src/core/furnace-checksum-utils.d.ts +5 -5
- package/dist/src/core/furnace-checksum-utils.js +5 -5
- package/dist/src/core/furnace-config-custom.d.ts +1 -1
- package/dist/src/core/furnace-config-custom.js +2 -2
- package/dist/src/core/furnace-config-order.js +1 -1
- package/dist/src/core/furnace-config-tokens.d.ts +3 -3
- package/dist/src/core/furnace-config-tokens.js +3 -3
- package/dist/src/core/furnace-config-validate.js +2 -2
- package/dist/src/core/furnace-config.d.ts +5 -5
- package/dist/src/core/furnace-config.js +40 -53
- package/dist/src/core/furnace-constants.d.ts +6 -6
- package/dist/src/core/furnace-constants.js +9 -8
- package/dist/src/core/furnace-css-fragments.d.ts +6 -6
- package/dist/src/core/furnace-css-fragments.js +11 -11
- package/dist/src/core/furnace-dir-entry.d.ts +20 -0
- package/dist/src/core/furnace-dir-entry.js +21 -0
- package/dist/src/core/furnace-jsconfig.d.ts +7 -7
- package/dist/src/core/furnace-jsconfig.js +22 -20
- package/dist/src/core/furnace-operation.d.ts +22 -19
- package/dist/src/core/furnace-operation.js +38 -34
- package/dist/src/core/furnace-precondition.d.ts +10 -10
- package/dist/src/core/furnace-precondition.js +8 -8
- package/dist/src/core/furnace-refresh.d.ts +18 -6
- package/dist/src/core/furnace-refresh.js +5 -8
- package/dist/src/core/furnace-registration-ast.d.ts +2 -3
- package/dist/src/core/furnace-registration-ast.js +9 -12
- package/dist/src/core/furnace-registration-remove.d.ts +4 -4
- package/dist/src/core/furnace-registration-remove.js +6 -6
- package/dist/src/core/furnace-registration-validate.d.ts +2 -2
- package/dist/src/core/furnace-registration-validate.js +2 -2
- package/dist/src/core/furnace-registration.d.ts +7 -6
- package/dist/src/core/furnace-registration.js +29 -36
- package/dist/src/core/furnace-rollback.d.ts +1 -1
- package/dist/src/core/furnace-rollback.js +5 -5
- package/dist/src/core/furnace-scanner.js +3 -6
- package/dist/src/core/furnace-stale-export.d.ts +17 -16
- package/dist/src/core/furnace-stale-export.js +16 -15
- package/dist/src/core/furnace-staleness.d.ts +2 -2
- package/dist/src/core/furnace-staleness.js +2 -2
- package/dist/src/core/furnace-state-persist.d.ts +12 -12
- package/dist/src/core/furnace-state-persist.js +10 -10
- package/dist/src/core/furnace-step-errors.d.ts +6 -6
- package/dist/src/core/furnace-step-errors.js +6 -6
- package/dist/src/core/furnace-validate-accessibility.js +14 -14
- package/dist/src/core/furnace-validate-compatibility.js +9 -9
- package/dist/src/core/furnace-validate-registration.d.ts +2 -2
- package/dist/src/core/furnace-validate-registration.js +18 -20
- package/dist/src/core/furnace-validate-structure.d.ts +1 -1
- package/dist/src/core/furnace-validate-structure.js +4 -4
- package/dist/src/core/furnace-validate.js +9 -9
- package/dist/src/core/furnace-version-drift.d.ts +5 -5
- package/dist/src/core/furnace-version-drift.js +5 -5
- package/dist/src/core/git-base.d.ts +6 -4
- package/dist/src/core/git-base.js +29 -7
- package/dist/src/core/git-diff-new-file.d.ts +40 -0
- package/dist/src/core/git-diff-new-file.js +119 -0
- package/dist/src/core/git-diff.d.ts +13 -13
- package/dist/src/core/git-diff.js +121 -189
- package/dist/src/core/git-file-ops.d.ts +6 -13
- package/dist/src/core/git-file-ops.js +11 -35
- package/dist/src/core/git-readonly-index.d.ts +12 -14
- package/dist/src/core/git-readonly-index.js +12 -16
- package/dist/src/core/git-status.d.ts +9 -2
- package/dist/src/core/git-status.js +23 -11
- package/dist/src/core/git.d.ts +3 -9
- package/dist/src/core/git.js +28 -57
- package/dist/src/core/harness-orphans.d.ts +17 -17
- package/dist/src/core/harness-orphans.js +28 -27
- package/dist/src/core/history-log.d.ts +19 -0
- package/dist/src/core/history-log.js +29 -0
- package/dist/src/core/license-headers.d.ts +19 -18
- package/dist/src/core/license-headers.js +29 -28
- package/dist/src/core/mach-build-artifacts.d.ts +21 -21
- package/dist/src/core/mach-build-artifacts.js +23 -23
- package/dist/src/core/mach-error-hints.d.ts +5 -10
- package/dist/src/core/mach-error-hints.js +14 -14
- package/dist/src/core/mach-known-noise-filter.d.ts +42 -38
- package/dist/src/core/mach-known-noise-filter.js +57 -56
- package/dist/src/core/mach-mozconfig.d.ts +6 -6
- package/dist/src/core/mach-mozconfig.js +17 -16
- package/dist/src/core/mach-python.d.ts +3 -0
- package/dist/src/core/mach-python.js +13 -7
- package/dist/src/core/mach-resource-shim.d.ts +24 -12
- package/dist/src/core/mach-resource-shim.js +124 -21
- package/dist/src/core/mach.d.ts +59 -73
- package/dist/src/core/mach.js +47 -115
- package/dist/src/core/marionette-port.d.ts +15 -30
- package/dist/src/core/marionette-port.js +46 -89
- package/dist/src/core/marionette-preflight.d.ts +6 -6
- package/dist/src/core/marionette-preflight.js +32 -50
- package/dist/src/core/markdown-table.d.ts +9 -9
- package/dist/src/core/markdown-table.js +14 -14
- package/dist/src/core/mochitest-server-port.d.ts +8 -8
- package/dist/src/core/mochitest-server-port.js +17 -17
- package/dist/src/core/module-resolution-preflight.d.ts +8 -8
- package/dist/src/core/module-resolution-preflight.js +11 -11
- package/dist/src/core/moz-manifest-helpers.d.ts +7 -7
- package/dist/src/core/moz-manifest-helpers.js +7 -7
- package/dist/src/core/moz-manifest-register.d.ts +1 -1
- package/dist/src/core/moz-manifest-register.js +2 -2
- package/dist/src/core/moz-manifest-rules.js +46 -42
- package/dist/src/core/moz-manifest-tokenizers.js +1 -1
- package/dist/src/core/ownership-table.d.ts +5 -5
- package/dist/src/core/ownership-table.js +7 -7
- package/dist/src/core/parser-fallback.d.ts +3 -3
- package/dist/src/core/parser-fallback.js +3 -3
- package/dist/src/core/patch-apply-fuzz.d.ts +5 -5
- package/dist/src/core/patch-apply-fuzz.js +13 -13
- package/dist/src/core/patch-apply.d.ts +13 -14
- package/dist/src/core/patch-apply.js +36 -42
- package/dist/src/core/patch-export-coverage.d.ts +0 -9
- package/dist/src/core/patch-export-coverage.js +1 -30
- package/dist/src/core/patch-export-update.d.ts +21 -4
- package/dist/src/core/patch-export-update.js +7 -6
- package/dist/src/core/patch-export.d.ts +20 -30
- package/dist/src/core/patch-export.js +55 -77
- package/dist/src/core/patch-files.d.ts +0 -4
- package/dist/src/core/patch-files.js +0 -11
- package/dist/src/core/patch-identifier-suggest.d.ts +1 -1
- package/dist/src/core/patch-identifier-suggest.js +4 -4
- package/dist/src/core/patch-lint-binary.d.ts +12 -18
- package/dist/src/core/patch-lint-cache.d.ts +18 -2
- package/dist/src/core/patch-lint-cache.js +16 -19
- package/dist/src/core/patch-lint-checkjs.d.ts +55 -38
- package/dist/src/core/patch-lint-checkjs.js +78 -64
- package/dist/src/core/patch-lint-chrome-jsdoc.d.ts +8 -9
- package/dist/src/core/patch-lint-chrome-jsdoc.js +10 -11
- package/dist/src/core/patch-lint-creators.d.ts +5 -9
- package/dist/src/core/patch-lint-creators.js +3 -3
- package/dist/src/core/patch-lint-cross.d.ts +27 -19
- package/dist/src/core/patch-lint-cross.js +67 -110
- package/dist/src/core/patch-lint-css.d.ts +1 -1
- package/dist/src/core/patch-lint-css.js +15 -11
- package/dist/src/core/patch-lint-diff-tag.d.ts +5 -5
- package/dist/src/core/patch-lint-diff-tag.js +5 -5
- package/dist/src/core/patch-lint-diff.d.ts +4 -4
- package/dist/src/core/patch-lint-diff.js +4 -4
- package/dist/src/core/patch-lint-file-size.d.ts +3 -3
- package/dist/src/core/patch-lint-file-size.js +6 -6
- package/dist/src/core/patch-lint-forward-registration.d.ts +58 -0
- package/dist/src/core/patch-lint-forward-registration.js +210 -0
- package/dist/src/core/patch-lint-jsdoc.d.ts +2 -2
- package/dist/src/core/patch-lint-jsdoc.js +46 -46
- package/dist/src/core/patch-lint-module-registration.d.ts +3 -9
- package/dist/src/core/patch-lint-module-registration.js +1 -1
- package/dist/src/core/patch-lint-mozbuild.d.ts +1 -1
- package/dist/src/core/patch-lint-mozbuild.js +10 -10
- package/dist/src/core/patch-lint-observer.d.ts +3 -3
- package/dist/src/core/patch-lint-observer.js +7 -7
- package/dist/src/core/patch-lint-ownership.d.ts +6 -6
- package/dist/src/core/patch-lint-ownership.js +6 -6
- package/dist/src/core/patch-lint-prettier.d.ts +6 -6
- package/dist/src/core/patch-lint-prettier.js +7 -7
- package/dist/src/core/patch-lint-queue-types.d.ts +60 -0
- package/dist/src/core/patch-lint-queue-types.js +12 -0
- package/dist/src/core/patch-lint-staged-registration.d.ts +61 -0
- package/dist/src/core/patch-lint-staged-registration.js +90 -0
- package/dist/src/core/patch-lint-unmanaged-companion.d.ts +23 -23
- package/dist/src/core/patch-lint-unmanaged-companion.js +26 -26
- package/dist/src/core/patch-lint.d.ts +41 -35
- package/dist/src/core/patch-lint.js +52 -49
- package/dist/src/core/patch-lock.d.ts +1 -1
- package/dist/src/core/patch-lock.js +11 -11
- package/dist/src/core/patch-manifest-consistency.d.ts +7 -7
- package/dist/src/core/patch-manifest-consistency.js +16 -17
- package/dist/src/core/patch-manifest-files-affected.d.ts +1 -1
- package/dist/src/core/patch-manifest-files-affected.js +3 -3
- package/dist/src/core/patch-manifest-io.d.ts +14 -14
- package/dist/src/core/patch-manifest-io.js +35 -34
- package/dist/src/core/patch-manifest-query.d.ts +1 -1
- package/dist/src/core/patch-manifest-query.js +4 -4
- package/dist/src/core/patch-manifest-resolve.d.ts +5 -5
- package/dist/src/core/patch-manifest-resolve.js +7 -7
- package/dist/src/core/patch-manifest-validate.js +3 -3
- package/dist/src/core/patch-manifest.d.ts +2 -2
- package/dist/src/core/patch-manifest.js +2 -2
- package/dist/src/core/patch-parse.d.ts +32 -21
- package/dist/src/core/patch-parse.js +40 -15
- package/dist/src/core/patch-policy.js +15 -27
- package/dist/src/core/patch-registration-refs.d.ts +4 -4
- package/dist/src/core/patch-registration-refs.js +7 -7
- package/dist/src/core/patch-source-metadata.d.ts +1 -3
- package/dist/src/core/patch-source-metadata.js +0 -4
- package/dist/src/core/patch-transform.d.ts +8 -16
- package/dist/src/core/patch-transform.js +13 -23
- package/dist/src/core/process-cpu-time.d.ts +1 -1
- package/dist/src/core/process-cpu-time.js +6 -6
- package/dist/src/core/rebase-session.d.ts +9 -15
- package/dist/src/core/rebase-session.js +13 -25
- package/dist/src/core/register-browser-content.js +3 -2
- package/dist/src/core/register-browser-test.js +2 -1
- package/dist/src/core/register-module.js +2 -1
- package/dist/src/core/register-result.d.ts +1 -1
- package/dist/src/core/register-result.js +1 -1
- package/dist/src/core/register-scaffold.d.ts +2 -2
- package/dist/src/core/register-scaffold.js +8 -7
- package/dist/src/core/register-shared-css.d.ts +3 -3
- package/dist/src/core/register-shared-css.js +6 -5
- package/dist/src/core/register-xpcshell-test.d.ts +2 -2
- package/dist/src/core/register-xpcshell-test.js +2 -2
- package/dist/src/core/run-log-redact.d.ts +38 -0
- package/dist/src/core/run-log-redact.js +69 -0
- package/dist/src/core/run-log.d.ts +21 -10
- package/dist/src/core/run-log.js +76 -27
- package/dist/src/core/shared-ftl.d.ts +2 -2
- package/dist/src/core/shared-ftl.js +6 -6
- package/dist/src/core/signal-critical.d.ts +2 -2
- package/dist/src/core/signal-critical.js +4 -6
- package/dist/src/core/smoke-patterns.d.ts +5 -6
- package/dist/src/core/smoke-patterns.js +15 -20
- package/dist/src/core/state-file.d.ts +15 -4
- package/dist/src/core/state-file.js +14 -1
- package/dist/src/core/status-binary.d.ts +8 -8
- package/dist/src/core/status-binary.js +12 -12
- package/dist/src/core/status-classify.d.ts +17 -17
- package/dist/src/core/status-classify.js +13 -12
- package/dist/src/core/test-changed-prefs.d.ts +12 -12
- package/dist/src/core/test-changed-prefs.js +40 -25
- package/dist/src/core/test-harness-crash.d.ts +39 -39
- package/dist/src/core/test-harness-crash.js +69 -69
- package/dist/src/core/test-harness-output.d.ts +7 -7
- package/dist/src/core/test-harness-output.js +7 -7
- package/dist/src/core/test-harness-verdict-notes.d.ts +13 -14
- package/dist/src/core/test-harness-verdict-notes.js +4 -4
- package/dist/src/core/test-path-scope.d.ts +8 -8
- package/dist/src/core/test-path-scope.js +11 -11
- package/dist/src/core/test-stale-check.d.ts +22 -23
- package/dist/src/core/test-stale-check.js +31 -30
- package/dist/src/core/test-stale-symlink.d.ts +1 -1
- package/dist/src/core/test-stale-symlink.js +1 -1
- package/dist/src/core/test-stall-triage.d.ts +9 -9
- package/dist/src/core/test-stall-triage.js +22 -22
- package/dist/src/core/test-xpcshell-retry.d.ts +26 -7
- package/dist/src/core/test-xpcshell-retry.js +14 -11
- package/dist/src/core/token-category.d.ts +35 -2
- package/dist/src/core/token-category.js +67 -58
- package/dist/src/core/token-coverage.js +4 -5
- package/dist/src/core/token-dark-mode.d.ts +9 -9
- package/dist/src/core/token-dark-mode.js +13 -25
- package/dist/src/core/token-docs.d.ts +1 -1
- package/dist/src/core/token-inventory.d.ts +56 -0
- package/dist/src/core/token-inventory.js +109 -0
- package/dist/src/core/token-manager.d.ts +4 -4
- package/dist/src/core/token-manager.js +22 -22
- package/dist/src/core/token-scaffold.d.ts +4 -4
- package/dist/src/core/token-scaffold.js +4 -4
- package/dist/src/core/token-variant.d.ts +14 -14
- package/dist/src/core/token-variant.js +52 -53
- package/dist/src/core/toolchain-preflight.d.ts +15 -15
- package/dist/src/core/toolchain-preflight.js +23 -23
- package/dist/src/core/tree-cow.d.ts +3 -5
- package/dist/src/core/tree-cow.js +8 -8
- package/dist/src/core/tree-guard.d.ts +3 -3
- package/dist/src/core/tree-guard.js +23 -23
- package/dist/src/core/tree-store.d.ts +15 -15
- package/dist/src/core/tree-store.js +39 -38
- package/dist/src/core/typecheck-shim.d.ts +16 -15
- package/dist/src/core/typecheck-shim.js +26 -25
- package/dist/src/core/typecheck.d.ts +12 -12
- package/dist/src/core/typecheck.js +33 -33
- package/dist/src/core/wire-destroy.d.ts +2 -2
- package/dist/src/core/wire-destroy.js +5 -5
- package/dist/src/core/wire-dom-fragment.d.ts +3 -3
- package/dist/src/core/wire-dom-fragment.js +12 -23
- package/dist/src/core/wire-init.d.ts +2 -2
- package/dist/src/core/wire-init.js +7 -7
- package/dist/src/core/wire-subscript.d.ts +1 -1
- package/dist/src/core/wire-subscript.js +3 -3
- package/dist/src/core/wire-utils.d.ts +9 -9
- package/dist/src/core/wire-utils.js +16 -28
- package/dist/src/core/xpcshell-appdir.d.ts +20 -20
- package/dist/src/core/xpcshell-appdir.js +28 -30
- package/dist/src/core/xpcshell-profile-dir.d.ts +3 -3
- package/dist/src/core/xpcshell-profile-dir.js +7 -7
- package/dist/src/errors/base.d.ts +69 -16
- package/dist/src/errors/base.js +95 -26
- package/dist/src/errors/build.d.ts +6 -6
- package/dist/src/errors/build.js +26 -34
- package/dist/src/errors/codes.d.ts +10 -10
- package/dist/src/errors/codes.js +10 -10
- package/dist/src/errors/config.d.ts +0 -14
- package/dist/src/errors/config.js +13 -34
- package/dist/src/errors/download.d.ts +13 -0
- package/dist/src/errors/download.js +53 -24
- package/dist/src/errors/furnace.d.ts +2 -2
- package/dist/src/errors/furnace.js +8 -9
- package/dist/src/errors/git.d.ts +9 -9
- package/dist/src/errors/git.js +21 -31
- package/dist/src/errors/patch.d.ts +3 -3
- package/dist/src/errors/patch.js +11 -13
- package/dist/src/errors/rebase.d.ts +1 -1
- package/dist/src/errors/rebase.js +8 -8
- package/dist/src/errors/run.d.ts +1 -1
- package/dist/src/errors/run.js +1 -1
- package/dist/src/index.d.ts +4 -4
- package/dist/src/index.js +4 -4
- package/dist/src/types/commands/options.d.ts +155 -200
- package/dist/src/types/commands/patches.d.ts +19 -19
- package/dist/src/types/commands/project.d.ts +3 -3
- package/dist/src/types/config.d.ts +52 -19
- package/dist/src/types/furnace.d.ts +17 -17
- package/dist/src/types/index.d.ts +0 -1
- package/dist/src/types/json.d.ts +3 -3
- package/dist/src/types/json.js +2 -2
- package/dist/src/types/typecheck.d.ts +3 -3
- package/dist/src/utils/assert.d.ts +4 -16
- package/dist/src/utils/assert.js +7 -24
- package/dist/src/utils/build-info.d.ts +6 -6
- package/dist/src/utils/build-info.js +6 -6
- package/dist/src/utils/child-env.d.ts +7 -6
- package/dist/src/utils/child-env.js +5 -5
- package/dist/src/utils/concurrency.d.ts +2 -2
- package/dist/src/utils/concurrency.js +2 -2
- package/dist/src/utils/elapsed.js +10 -1
- package/dist/src/utils/errors.d.ts +8 -8
- package/dist/src/utils/errors.js +8 -8
- package/dist/src/utils/fs.d.ts +1 -1
- package/dist/src/utils/fs.js +15 -20
- package/dist/src/utils/hash.d.ts +12 -0
- package/dist/src/utils/hash.js +16 -0
- package/dist/src/utils/line-dispatch.d.ts +15 -0
- package/dist/src/utils/line-dispatch.js +48 -0
- package/dist/src/utils/logger.d.ts +4 -4
- package/dist/src/utils/logger.js +11 -11
- package/dist/src/utils/machine-output.js +2 -2
- package/dist/src/utils/options.d.ts +14 -20
- package/dist/src/utils/options.js +26 -27
- package/dist/src/utils/package-root.js +5 -14
- package/dist/src/utils/paths.d.ts +4 -4
- package/dist/src/utils/paths.js +4 -4
- package/dist/src/utils/platform.d.ts +0 -4
- package/dist/src/utils/process-group.d.ts +10 -9
- package/dist/src/utils/process-group.js +37 -36
- package/dist/src/utils/process.d.ts +70 -55
- package/dist/src/utils/process.js +129 -179
- package/dist/src/utils/ps-duration.d.ts +4 -4
- package/dist/src/utils/ps-duration.js +9 -9
- package/dist/src/utils/regex.d.ts +4 -4
- package/dist/src/utils/regex.js +7 -7
- package/dist/src/utils/sleep.d.ts +26 -0
- package/dist/src/utils/sleep.js +31 -0
- package/dist/src/utils/stdio-drain.d.ts +7 -7
- package/dist/src/utils/stdio-drain.js +8 -8
- package/dist/src/utils/validation.d.ts +12 -49
- package/dist/src/utils/validation.js +26 -36
- package/docs/README.md +2 -2
- package/docs/configuration.md +163 -69
- package/docs/exit-codes.md +66 -49
- package/docs/furnace.md +20 -19
- package/docs/lifecycle-invariants.md +414 -247
- package/docs/machine-output.md +58 -34
- package/docs/patch-workflow.md +48 -44
- package/docs/run-logs.md +72 -28
- package/docs/testing.md +105 -98
- package/docs/verification-trees.md +23 -22
- package/package.json +7 -6
- package/dist/src/commands/rebase.d.ts +0 -4
- package/dist/src/commands/rebase.js +0 -5
- package/dist/src/core/patch-artifact-normalize.d.ts +0 -21
- package/dist/src/core/patch-artifact-normalize.js +0 -24
- package/dist/src/core/patch-lint-reexports.d.ts +0 -7
- package/dist/src/core/patch-lint-reexports.js +0 -8
- package/dist/src/core/wire-targets.d.ts +0 -7
- package/dist/src/core/wire-targets.js +0 -8
package/docs/testing.md
CHANGED
|
@@ -3,28 +3,29 @@
|
|
|
3
3
|
# Running tests
|
|
4
4
|
|
|
5
5
|
`fireforge test` wraps `mach test`. Most of what follows exists because
|
|
6
|
-
mach's own defaults are wrong for a fork that
|
|
6
|
+
mach's own defaults are wrong for a fork that has to know exactly what ran.
|
|
7
7
|
|
|
8
8
|
## Scope is exact
|
|
9
9
|
|
|
10
|
-
`fireforge test <directory>` runs exactly that directory
|
|
11
|
-
the directory's test files and passes the explicit file list to
|
|
12
|
-
invocation, so mach's prefix-based path matching cannot
|
|
13
|
-
sibling directories
|
|
14
|
-
their test-file counts.
|
|
10
|
+
`fireforge test <directory>` runs exactly that directory. FireForge
|
|
11
|
+
enumerates the directory's test files and passes the explicit file list to
|
|
12
|
+
mach in one invocation, so mach's prefix-based path matching cannot quietly
|
|
13
|
+
sweep in sibling directories that share the name prefix. Excluded siblings
|
|
14
|
+
are echoed with their test-file counts.
|
|
15
15
|
|
|
16
|
-
Multiple path arguments run as
|
|
17
|
-
instance per argument, with a directory argument keeping its files together
|
|
18
|
-
|
|
19
|
-
cross-argument state. `--no-shard` restores one combined
|
|
16
|
+
Multiple path arguments run as sequential shards by default: one browser
|
|
17
|
+
instance per argument, with a directory argument keeping its files together.
|
|
18
|
+
FireForge announces this with a notice, since isolated instances do not
|
|
19
|
+
exercise cross-argument state. `--no-shard` restores one combined
|
|
20
|
+
invocation.
|
|
20
21
|
|
|
21
22
|
## Pathless runs must choose a mode
|
|
22
23
|
|
|
23
24
|
- `--auto` forwards mach's own auto-selection.
|
|
24
25
|
- `--doctor` runs the Marionette preflight only.
|
|
25
26
|
- `--canary [path]` runs one short browser-chrome canary
|
|
26
|
-
(`test.canaryPath`
|
|
27
|
-
provide defaults).
|
|
27
|
+
(`test.canaryPath` and `test.canaryTimeoutSeconds` in `fireforge.json`
|
|
28
|
+
provide the defaults).
|
|
28
29
|
|
|
29
30
|
## Build freshness
|
|
30
31
|
|
|
@@ -32,68 +33,66 @@ When packageable engine files changed since the last successful FireForge
|
|
|
32
33
|
build, `test` fails before launching stale artifacts. Use `--build` to
|
|
33
34
|
refresh, or `--allow-stale-build` only for intentional out-of-band rebuilds.
|
|
34
35
|
|
|
35
|
-
`--build-only` packages mixed-harness paths once, then each harness half
|
|
36
|
-
run without `--build`. `--extend-coverage`
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
file).
|
|
36
|
+
`--build-only` packages mixed-harness paths once, and then each harness half
|
|
37
|
+
can run without `--build`. `--extend-coverage` retains prior scoped coverage
|
|
38
|
+
instead of replacing it. It is refused when the build anchor moved (engine
|
|
39
|
+
HEAD, `engine/mozconfig`, or a previously fingerprinted packageable file).
|
|
40
40
|
|
|
41
41
|
### What a pre-test build costs
|
|
42
42
|
|
|
43
|
-
`test --build` runs `mach build faster
|
|
44
|
-
comparing build inputs against the
|
|
45
|
-
`.fireforge/last-build.json
|
|
46
|
-
worktree is permanently dirty
|
|
47
|
-
components
|
|
48
|
-
|
|
49
|
-
-
|
|
50
|
-
`mach configure` first
|
|
51
|
-
-
|
|
52
|
-
(minutes rather than seconds)
|
|
53
|
-
(untracked in the engine repo, so no install manifest exists for it yet)
|
|
43
|
+
`test --build` runs `mach build faster`. Two escalations are possible, and
|
|
44
|
+
both are decided by comparing build inputs against the last successful build
|
|
45
|
+
recorded in `.fireforge/last-build.json`, not against engine HEAD, since a
|
|
46
|
+
fork's worktree is permanently dirty from imported patches and
|
|
47
|
+
Furnace-applied components:
|
|
48
|
+
|
|
49
|
+
- A changed `moz.build`, `moz.configure` or `Makefile.in` runs
|
|
50
|
+
`mach configure` first.
|
|
51
|
+
- A changed `jar.mn` escalates the whole build to a full `mach build`
|
|
52
|
+
(minutes rather than seconds), but only when it is a new manifest
|
|
53
|
+
(untracked in the engine repo, so no install manifest exists for it yet),
|
|
54
54
|
or when its jar declaration carries a bracketed base-directory prefix,
|
|
55
|
-
which redirects the install destination away from the default chrome
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
55
|
+
which redirects the install destination away from the default chrome root.
|
|
56
|
+
An entry added to an existing `dist/bin` manifest no longer escalates. Any
|
|
57
|
+
probe failure (an unreadable manifest, no git) escalates, and the notice
|
|
58
|
+
names the manifest and the reason.
|
|
59
59
|
|
|
60
|
-
Each escalation is paid once per actual content change
|
|
60
|
+
Each escalation is paid once per actual content change. A `jar.mn` that is
|
|
61
61
|
dirty against HEAD but byte-identical to what the last full build consumed
|
|
62
62
|
does not escalate again. `fireforge build --ui` is itself a
|
|
63
|
-
`mach build faster` and never escalates
|
|
64
|
-
carried forward from the previous full build, so a registration made
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
The
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
clean runs
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
silently wrong test.
|
|
63
|
+
`mach build faster` and never escalates. The `jar.mn` record it writes is
|
|
64
|
+
carried forward from the previous full build, so a registration made between
|
|
65
|
+
a `build --ui` and the next `test --build` still triggers the full build
|
|
66
|
+
once.
|
|
67
|
+
|
|
68
|
+
The 0.44.0 changelog left an open question here: whether a full build is
|
|
69
|
+
really required for an entry added to an existing `dist/bin` `jar.mn`. It was
|
|
70
|
+
settled downstream by exactly the experiment that entry asked for. In two
|
|
71
|
+
clean runs, a jar-only registration of a new content file was installed by a
|
|
72
|
+
plain `fireforge build --ui` (`faster/install_dist_bin_browser` named the
|
|
73
|
+
destination, and the file reached `dist/bin` and the `.app` bundle) and then
|
|
74
|
+
fetched over `chrome://` by a plain `fireforge test`. That case no longer
|
|
75
|
+
escalates. The two halves the experiment did not cover, a new `jar.mn` file
|
|
76
|
+
and a non-default install destination, still escalate, for the reason the
|
|
77
|
+
original entry gives: relaxing a stale-artifact guard without evidence trades
|
|
78
|
+
a slow build for a silently wrong test.
|
|
80
79
|
|
|
81
80
|
## Resilience
|
|
82
81
|
|
|
83
82
|
- Recognized harness crashes retry up to `--harness-retries <n>` times
|
|
84
83
|
(default 2).
|
|
85
84
|
- `--kill-stale-marionette` terminates recognized stale browsers.
|
|
86
|
-
- Every dispatch runs a
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
85
|
+
- Every dispatch runs a census of orphaned harness helpers (`xpcshell`, the
|
|
86
|
+
harness httpd, `pywebsocket`, `ssltunnel`, `moz-http2`) that survived an
|
|
87
|
+
earlier run in this project's objdir. It runs at preflight, before this run
|
|
88
|
+
spawns anything, so every hit is necessarily a survivor. A match has to be
|
|
89
|
+
objdir-anchored, since `xpcshell` and `server.js` are far too generic to
|
|
90
|
+
report on their own. Survivors slow every later run without appearing in
|
|
91
|
+
its output. The usual symptom is a three-second suite taking minutes of
|
|
92
|
+
wall clock. The census is report-only by default, and `--reap-orphans`
|
|
93
|
+
terminates what it finds. It never refuses a run. A different shape,
|
|
94
|
+
reparented Python `multiprocessing` workers, is covered by the
|
|
95
|
+
`Orphaned harness workers` doctor check.
|
|
97
96
|
- `--perf-samples <path>` publishes a perf-sample artifact path to the
|
|
98
97
|
harness (exported as `<BINARYNAME>_PERF_SAMPLE_JSON`).
|
|
99
98
|
|
|
@@ -102,30 +101,38 @@ silently wrong test.
|
|
|
102
101
|
Every test run ends with one machine-readable line:
|
|
103
102
|
|
|
104
103
|
```
|
|
105
|
-
FIREFORGE-VERDICT: PASS|FAIL reason=… [log=<path>]
|
|
104
|
+
FIREFORGE-VERDICT: PASS|FAIL reason=… [note=<class>] [log=<path>]
|
|
106
105
|
```
|
|
107
106
|
|
|
108
|
-
Automation should branch on
|
|
109
|
-
treat a
|
|
110
|
-
the stdout rules around the line are in
|
|
111
|
-
[`machine-output.md`](machine-output.md)
|
|
107
|
+
Automation should branch on this line rather than on the raw process code,
|
|
108
|
+
and has to treat a missing verdict as a failure. The closed set of `reason=`
|
|
109
|
+
values and the stdout rules around the line are in
|
|
110
|
+
[`machine-output.md`](machine-output.md). `log=` names the run's own complete
|
|
112
111
|
output, specified in [`run-logs.md`](run-logs.md).
|
|
113
112
|
|
|
113
|
+
`reason=preflight` covers every gate before the harness, so a refusal that
|
|
114
|
+
can classify itself adds an additive `note=<class>` (`stale-browser`,
|
|
115
|
+
`coverage-replaced`, and so on) naming which gate fired. The refusal's full
|
|
116
|
+
text is written to stdout before the verdict line and into the run log, so a
|
|
117
|
+
redirected run keeps the reason as well as the verdict. See
|
|
118
|
+
[`run-logs.md`](run-logs.md).
|
|
119
|
+
|
|
114
120
|
Exit code 14 (`INCONCLUSIVE`) is not red: it means `engine/` moved while the
|
|
115
|
-
harness ran and the result was thrown away. Exit 15 (`LOCK_TIMEOUT`) means
|
|
116
|
-
run never started. See [`exit-codes.md`](exit-codes.md).
|
|
121
|
+
harness ran and the result was thrown away. Exit 15 (`LOCK_TIMEOUT`) means
|
|
122
|
+
the run never started. See [`exit-codes.md`](exit-codes.md).
|
|
117
123
|
|
|
118
124
|
## Output verbosity
|
|
119
125
|
|
|
120
126
|
mozbuild quiets terminal output to warnings and errors when it detects a
|
|
121
127
|
coding agent (`is_running_under_coding_agent()` keys on `CLAUDECODE`). The
|
|
122
|
-
build half of that quieting is useful
|
|
123
|
-
console INFO
|
|
124
|
-
FireForge's own classifier reads (`Ran N checks`,
|
|
125
|
-
`TEST-UNEXPECTED-*`), so suppression pushes a run
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
128
|
+
build half of that quieting is useful. The test half removes `TEST_START` and
|
|
129
|
+
console INFO, which are the lines a hang or stall diagnosis needs, and also
|
|
130
|
+
the ones FireForge's own classifier reads (`Ran N checks`,
|
|
131
|
+
`Unexpected results:`, `TEST-UNEXPECTED-*`), so suppression pushes a run
|
|
132
|
+
toward `reason=no-tests`.
|
|
133
|
+
|
|
134
|
+
`fireforge test --full-output` unsets the marker for test dispatches only,
|
|
135
|
+
and the build path stays quiet. It is opt-in rather than automatic because it
|
|
129
136
|
changes how much a third party prints, and an operator who wants the quieting
|
|
130
137
|
should keep it.
|
|
131
138
|
|
|
@@ -137,39 +144,39 @@ Recent engines can end a run with a Python traceback at harness teardown:
|
|
|
137
144
|
AttributeError: 'SystemResourceMonitor' object has no attribute 'stop_time'
|
|
138
145
|
```
|
|
139
146
|
|
|
140
|
-
(or `poll_interval`), raised from `mozsystemmonitor/resourcemonitor.py`. It
|
|
141
|
-
an upstream defect in the resource monitor's own shutdown, it is cosmetic,
|
|
142
|
-
it does not affect any verdict. It matters only because it lands exactly
|
|
143
|
-
a reader looks for the failure summary.
|
|
147
|
+
(or `poll_interval`), raised from `mozsystemmonitor/resourcemonitor.py`. It
|
|
148
|
+
is an upstream defect in the resource monitor's own shutdown, it is cosmetic,
|
|
149
|
+
and it does not affect any verdict. It matters only because it lands exactly
|
|
150
|
+
where a reader looks for the failure summary.
|
|
144
151
|
|
|
145
|
-
FireForge recognizes this one signature
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
verbatim
|
|
152
|
+
FireForge recognizes this one signature and no others. Recognition requires
|
|
153
|
+
all of: an `AttributeError` on `SystemResourceMonitor` naming one of those
|
|
154
|
+
two attributes, a `resourcemonitor.py` stack frame, and, in a test run, a
|
|
155
|
+
preceding `SUITE_END`. A novel attribute, a different exception, or the same
|
|
156
|
+
traceback before shutdown is treated as a real failure and always printed
|
|
157
|
+
verbatim.
|
|
151
158
|
|
|
152
|
-
The two phases handle it differently,
|
|
159
|
+
The two phases handle it differently, on purpose:
|
|
153
160
|
|
|
154
|
-
- **Tests** collapse the traceback in the terminal echo to one labeled
|
|
155
|
-
`[FireForge]
|
|
156
|
-
|
|
161
|
+
- **Tests** collapse the traceback in the terminal echo to one line labeled
|
|
162
|
+
`[FireForge]`. Captures and the run log keep the raw traceback, and the
|
|
163
|
+
classifier reads the raw form, so a real failure always outranks this
|
|
157
164
|
signature in diagnosis.
|
|
158
165
|
- **Builds** print it verbatim and add a note naming it. A build has no
|
|
159
|
-
`SUITE_END
|
|
160
|
-
|
|
161
|
-
build-time traceback there
|
|
162
|
-
|
|
166
|
+
`SUITE_END`, so there is no boundary separating teardown from work still in
|
|
167
|
+
progress, and FireForge cannot tell cosmetic teardown noise from a real
|
|
168
|
+
build-time traceback there. Withholding the block would be the wrong risk
|
|
169
|
+
to take.
|
|
163
170
|
|
|
164
171
|
## Concurrency
|
|
165
172
|
|
|
166
173
|
A test run holds the engine-session lock and snapshots the engine git
|
|
167
|
-
generation before and after the harness run, failing the verdict as invalid
|
|
168
|
-
the tree changed mid-run. To verify beside a busy primary checkout
|
|
169
|
-
use a [verification tree](verification-trees.md).
|
|
174
|
+
generation before and after the harness run, failing the verdict as invalid
|
|
175
|
+
if the tree changed mid-run. To verify beside a busy primary checkout
|
|
176
|
+
instead, use a [verification tree](verification-trees.md).
|
|
170
177
|
|
|
171
178
|
## Dev-build gotcha
|
|
172
179
|
|
|
173
180
|
In dev builds, files under `obj-*/dist/bin` may be symlinks back into the
|
|
174
|
-
source tree (
|
|
175
|
-
before bisection experiments.
|
|
181
|
+
source tree (prefs especially), so edit source prefs directly and keep a
|
|
182
|
+
backup before bisection experiments.
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
# Verification trees
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
`fireforge tree create <name>` snapshots the project
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
applied browser tree.
|
|
5
|
+
To run read-mostly verification beside a busy primary checkout,
|
|
6
|
+
`fireforge tree create <name>` snapshots the project into
|
|
7
|
+
`.fireforge/trees/<name>` using filesystem copy-on-write (APFS `clonefile`,
|
|
8
|
+
btrfs/XFS reflink). The applied engine tree is included and `obj-*` is
|
|
9
|
+
excluded. A 156 MB applied browser tree takes roughly 3 seconds.
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
12
|
npx fireforge tree create verify
|
|
@@ -17,32 +17,33 @@ npx fireforge tree remove verify
|
|
|
17
17
|
|
|
18
18
|
## What works inside a tree
|
|
19
19
|
|
|
20
|
-
Read-only commands and `
|
|
21
|
-
refused
|
|
22
|
-
|
|
20
|
+
Read-only commands, plus `export` and `re-export` dry runs. Mutations are
|
|
21
|
+
refused. The refusal comes from a default-deny verdict table rather than a
|
|
22
|
+
blocklist, so a newly added mutating command is refused until someone
|
|
23
|
+
classifies it. That is invariant 7 in
|
|
23
24
|
[`lifecycle-invariants.md`](lifecycle-invariants.md).
|
|
24
25
|
|
|
25
|
-
`--with-objdir` adds a safely relocated build, which makes build-less
|
|
26
|
-
possible inside the tree.
|
|
26
|
+
`--with-objdir` adds a safely relocated build, which makes a build-less
|
|
27
|
+
`test` possible inside the tree.
|
|
27
28
|
|
|
28
29
|
## Lifecycle
|
|
29
30
|
|
|
30
|
-
- `tree list` reports staleness (`--json
|
|
31
|
+
- `tree list` reports staleness (`--json`, see
|
|
31
32
|
[`machine-output.md`](machine-output.md)).
|
|
32
|
-
- `tree remove` deletes
|
|
33
|
-
ownership.
|
|
34
|
-
- `tree exec <name> -- <cmd>` runs a command inside a tree
|
|
35
|
-
so exactly one verdict line survives, last.
|
|
33
|
+
- `tree remove` deletes a tree, and refuses when a lock is active or its
|
|
34
|
+
ownership is unknown.
|
|
35
|
+
- `tree exec <name> -- <cmd>` runs a command inside a tree and seals its
|
|
36
|
+
stdout, so exactly one verdict line survives, last.
|
|
36
37
|
|
|
37
38
|
## Filesystems without CoW
|
|
38
39
|
|
|
39
|
-
|
|
40
|
-
refusal is
|
|
41
|
-
the operation anyone asked for.
|
|
40
|
+
These are refused unless `--force-copy` explicitly accepts a full physical
|
|
41
|
+
copy. The refusal is there on purpose: a silent full copy of an applied
|
|
42
|
+
browser tree is not the operation anyone asked for.
|
|
42
43
|
|
|
43
44
|
## The tree marker
|
|
44
45
|
|
|
45
|
-
`.fireforge/tree.json`
|
|
46
|
-
|
|
47
|
-
marker leaves it unknown whether this is a snapshot or
|
|
48
|
-
`--ignore-corrupt-tree-marker` overrides that
|
|
46
|
+
`.fireforge/tree.json` has three states: absent (this is the primary), valid
|
|
47
|
+
(this is a snapshot), or corrupt. A corrupt marker refuses every command,
|
|
48
|
+
because an unreadable marker leaves it unknown whether this is a snapshot or
|
|
49
|
+
the primary tree. `--ignore-corrupt-tree-marker` overrides that.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hominis/fireforge",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.46.1",
|
|
4
4
|
"description": "FireForge — a build tool for customizing Firefox",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/src/index.js",
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
"lint:fix": "eslint src/ bin/ scripts/ eslint-rules/ eslint.config.js vitest.config.ts vitest.pack.config.ts --fix",
|
|
26
26
|
"typecheck": "tsc --noEmit -p tsconfig.json",
|
|
27
27
|
"deadcode:check": "knip",
|
|
28
|
+
"deadcode:check:production": "knip --production --config knip.production.json",
|
|
28
29
|
"cycles:check": "dpdm --no-output --no-tree --no-warning --exit-code circular:1 src/index.ts bin/fireforge.ts",
|
|
29
30
|
"test": "vitest run",
|
|
30
31
|
"test:package": "npm run pack:verify",
|
|
@@ -34,11 +35,11 @@
|
|
|
34
35
|
"whitespace:check": "node ./scripts/check-worktree-whitespace.mjs",
|
|
35
36
|
"pack:verify": "vitest run --config vitest.pack.config.ts",
|
|
36
37
|
"pack:dry-run": "npm pack --dry-run --json --silent",
|
|
37
|
-
"format": "prettier --write --ignore-unknown \"src/**/*.ts\" \"bin/**/*.ts\" \"scripts/**/*.mjs\" \"eslint-rules/**/*.js\" \"package.json\" \"eslint.config.js\" \"vitest.config.ts\" \"vitest.pack.config.ts\" \"tsconfig.json\" \"tsconfig.build.json\" \".lintstagedrc.json\" \".prettierignore\" \".prettierrc\" \".gitignore\" \"README.md\" \"CHANGELOG.md\" \"docs/**/*.md\" \"knip.json\"",
|
|
38
|
-
"format:check": "prettier --check --ignore-unknown \"src/**/*.ts\" \"bin/**/*.ts\" \"scripts/**/*.mjs\" \"eslint-rules/**/*.js\" \"package.json\" \"eslint.config.js\" \"vitest.config.ts\" \"vitest.pack.config.ts\" \"tsconfig.json\" \"tsconfig.build.json\" \".lintstagedrc.json\" \".prettierignore\" \".prettierrc\" \".gitignore\" \"README.md\" \"CHANGELOG.md\" \"docs/**/*.md\" \"knip.json\"",
|
|
38
|
+
"format": "prettier --write --ignore-unknown \"src/**/*.ts\" \"bin/**/*.ts\" \"scripts/**/*.mjs\" \"eslint-rules/**/*.js\" \"package.json\" \"eslint.config.js\" \"vitest.config.ts\" \"vitest.pack.config.ts\" \"tsconfig.json\" \"tsconfig.build.json\" \".lintstagedrc.json\" \".prettierignore\" \".prettierrc\" \".gitignore\" \"README.md\" \"CHANGELOG.md\" \"docs/**/*.md\" \"knip.json\" \"knip.production.json\"",
|
|
39
|
+
"format:check": "prettier --check --ignore-unknown \"src/**/*.ts\" \"bin/**/*.ts\" \"scripts/**/*.mjs\" \"eslint-rules/**/*.js\" \"package.json\" \"eslint.config.js\" \"vitest.config.ts\" \"vitest.pack.config.ts\" \"tsconfig.json\" \"tsconfig.build.json\" \".lintstagedrc.json\" \".prettierignore\" \".prettierrc\" \".gitignore\" \"README.md\" \"CHANGELOG.md\" \"docs/**/*.md\" \"knip.json\" \"knip.production.json\"",
|
|
39
40
|
"prepare": "node -e \"import('./scripts/prepare.mjs').catch((error) => { if (error && typeof error === 'object' && 'code' in error && error.code === 'ERR_MODULE_NOT_FOUND') process.exit(0); throw error; })\"",
|
|
40
41
|
"prepack": "npm run build && node ./scripts/generate-build-info.mjs --loud",
|
|
41
|
-
"release:check": "npm run format:check && npm run whitespace:check && npm run lint:ci && npm run typecheck && npm run deadcode:check && npm run cycles:check && npm run test:coverage && npm run pack:verify",
|
|
42
|
+
"release:check": "npm run format:check && npm run whitespace:check && npm run lint:ci && npm run typecheck && npm run deadcode:check && npm run deadcode:check:production && npm run cycles:check && npm run test:coverage && npm run pack:verify",
|
|
42
43
|
"prepublishOnly": "npm run release:check"
|
|
43
44
|
},
|
|
44
45
|
"files": [
|
|
@@ -65,7 +66,7 @@
|
|
|
65
66
|
"devDependencies": {
|
|
66
67
|
"@eslint/js": "^10.0.0",
|
|
67
68
|
"@types/estree": "^1.0.8",
|
|
68
|
-
"@types/node": "^
|
|
69
|
+
"@types/node": "^22.0.0",
|
|
69
70
|
"@vitest/coverage-v8": "^4.1.2",
|
|
70
71
|
"dpdm": "4.3.0",
|
|
71
72
|
"eslint": "^10.0.0",
|
|
@@ -74,7 +75,7 @@
|
|
|
74
75
|
"eslint-plugin-simple-import-sort": "^14.0.0",
|
|
75
76
|
"fast-check": "^4.6.0",
|
|
76
77
|
"husky": "^9.1.7",
|
|
77
|
-
"knip": "6.32.
|
|
78
|
+
"knip": "6.32.3",
|
|
78
79
|
"lint-staged": "^17.0.4",
|
|
79
80
|
"prettier": "3.9.6",
|
|
80
81
|
"tsx": "^4.7.0",
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Normalizes generated patch files before they are written to disk.
|
|
3
|
-
*
|
|
4
|
-
* Currently the identity function, kept as a narrow chokepoint for future
|
|
5
|
-
* artifact-level fixes so every export path (`commitExportedPatch`,
|
|
6
|
-
* `commitPlacementExport`, `updatePatch`, `patch split`) funnels through one
|
|
7
|
-
* place.
|
|
8
|
-
*
|
|
9
|
-
* **Do not reintroduce whitespace trimming here.** Stripping marker lines
|
|
10
|
-
* whose payload is pure whitespace (`/^[ +-]\s+$/` → bare marker) corrupts
|
|
11
|
-
* real content: Firefox sources contain whitespace-only lines, so a ` `/`-`
|
|
12
|
-
* line whose payload was e.g. two spaces no longer matches the pristine tree
|
|
13
|
-
* (the freshly exported patch fails `git apply --check`), and a `+` line
|
|
14
|
-
* silently changes what the patch produces, making re-import diverge from
|
|
15
|
-
* the engine state it was exported from. The repository whitespace check
|
|
16
|
-
* already excludes `patches/*.patch`
|
|
17
|
-
* (scripts/check-worktree-whitespace.mjs). Patch bodies are written
|
|
18
|
-
* byte-for-byte as git produced them, including the single-space rendering
|
|
19
|
-
* of blank context lines, which `re-export.integration.test.ts` pins.
|
|
20
|
-
*/
|
|
21
|
-
export declare function normalizePatchArtifact(content: string): string;
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: EUPL-1.2
|
|
2
|
-
/**
|
|
3
|
-
* Normalizes generated patch files before they are written to disk.
|
|
4
|
-
*
|
|
5
|
-
* Currently the identity function, kept as a narrow chokepoint for future
|
|
6
|
-
* artifact-level fixes so every export path (`commitExportedPatch`,
|
|
7
|
-
* `commitPlacementExport`, `updatePatch`, `patch split`) funnels through one
|
|
8
|
-
* place.
|
|
9
|
-
*
|
|
10
|
-
* **Do not reintroduce whitespace trimming here.** Stripping marker lines
|
|
11
|
-
* whose payload is pure whitespace (`/^[ +-]\s+$/` → bare marker) corrupts
|
|
12
|
-
* real content: Firefox sources contain whitespace-only lines, so a ` `/`-`
|
|
13
|
-
* line whose payload was e.g. two spaces no longer matches the pristine tree
|
|
14
|
-
* (the freshly exported patch fails `git apply --check`), and a `+` line
|
|
15
|
-
* silently changes what the patch produces, making re-import diverge from
|
|
16
|
-
* the engine state it was exported from. The repository whitespace check
|
|
17
|
-
* already excludes `patches/*.patch`
|
|
18
|
-
* (scripts/check-worktree-whitespace.mjs). Patch bodies are written
|
|
19
|
-
* byte-for-byte as git produced them, including the single-space rendering
|
|
20
|
-
* of blank context lines, which `re-export.integration.test.ts` pins.
|
|
21
|
-
*/
|
|
22
|
-
export function normalizePatchArtifact(content) {
|
|
23
|
-
return content;
|
|
24
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Public re-exports for {@link ./patch-lint.ts}. Split out so the
|
|
3
|
-
* orchestrator stays within the ESLint `max-lines` budget.
|
|
4
|
-
*/
|
|
5
|
-
export { buildPatchQueueContext, collectForwardImportEdges, collectNewFileCreatorsByPath, extractImportSpecifiers, extractImportSpecifiersWithLines, findForwardImportIgnoreLines, FORWARD_IMPORT_IGNORE_MARKER, isForwardImportableFile, lintPatchQueue, lintPatchQueueDuplicateCreations, lintPatchQueueForwardImports, type PatchQueueContext, type PatchQueueEntry, } from './patch-lint-cross.js';
|
|
6
|
-
export { buildModifiedFileAdditionsFromDiff, detectNewFilesInDiff } from './patch-lint-diff.js';
|
|
7
|
-
export { lintPatchQueueModuleRegistrations } from './patch-lint-module-registration.js';
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: EUPL-1.2
|
|
2
|
-
/**
|
|
3
|
-
* Public re-exports for {@link ./patch-lint.ts}. Split out so the
|
|
4
|
-
* orchestrator stays within the ESLint `max-lines` budget.
|
|
5
|
-
*/
|
|
6
|
-
export { buildPatchQueueContext, collectForwardImportEdges, collectNewFileCreatorsByPath, extractImportSpecifiers, extractImportSpecifiersWithLines, findForwardImportIgnoreLines, FORWARD_IMPORT_IGNORE_MARKER, isForwardImportableFile, lintPatchQueue, lintPatchQueueDuplicateCreations, lintPatchQueueForwardImports, } from './patch-lint-cross.js';
|
|
7
|
-
export { buildModifiedFileAdditionsFromDiff, detectNewFilesInDiff } from './patch-lint-diff.js';
|
|
8
|
-
export { lintPatchQueueModuleRegistrations } from './patch-lint-module-registration.js';
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Wire targets barrel — re-exports all wiring target modules.
|
|
3
|
-
*/
|
|
4
|
-
export { addDestroyToBrowserInit } from './wire-destroy.js';
|
|
5
|
-
export { addDomFragment } from './wire-dom-fragment.js';
|
|
6
|
-
export { addInitToBrowserInit } from './wire-init.js';
|
|
7
|
-
export { addSubscriptToBrowserMain } from './wire-subscript.js';
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: EUPL-1.2
|
|
2
|
-
/**
|
|
3
|
-
* Wire targets barrel — re-exports all wiring target modules.
|
|
4
|
-
*/
|
|
5
|
-
export { addDestroyToBrowserInit } from './wire-destroy.js';
|
|
6
|
-
export { addDomFragment } from './wire-dom-fragment.js';
|
|
7
|
-
export { addInitToBrowserInit } from './wire-init.js';
|
|
8
|
-
export { addSubscriptToBrowserMain } from './wire-subscript.js';
|