@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
|
@@ -3,15 +3,15 @@
|
|
|
3
3
|
* Patch-aware restore planning for `fireforge discard`.
|
|
4
4
|
*
|
|
5
5
|
* The engine convention is: HEAD = pristine upstream Firefox, and the
|
|
6
|
-
* applied patch queue lives as
|
|
6
|
+
* applied patch queue lives as uncommitted worktree changes on top of it
|
|
7
7
|
* (`git apply` without `--index` → patch-edited tracked files are unstaged
|
|
8
8
|
* modifications, patch-created files are untracked). A purely git-mechanical
|
|
9
|
-
* discard
|
|
10
|
-
* patch-backed files
|
|
9
|
+
* discard (restore to HEAD, delete untracked files) therefore reverts
|
|
10
|
+
* patch-backed files past their owning patch and deletes patch-created files
|
|
11
11
|
* outright.
|
|
12
12
|
*
|
|
13
13
|
* This module classifies each status entry against the patch manifest's
|
|
14
|
-
* ownership claims and plans the correct restore target: the
|
|
14
|
+
* ownership claims and plans the correct restore target: the patch-applied
|
|
15
15
|
* baseline (HEAD content folded through every affecting patch in order) for
|
|
16
16
|
* claimed files, and the plain git mechanics for unmanaged ones.
|
|
17
17
|
*/
|
|
@@ -24,19 +24,19 @@ import { createPatchedContentContext } from './patch-apply.js';
|
|
|
24
24
|
import { loadPatchesManifestState } from './patch-manifest-io.js';
|
|
25
25
|
import { parseDiffSections } from './patch-parse.js';
|
|
26
26
|
import { buildPatchClaims } from './status-classify.js';
|
|
27
|
-
/** Builds an all-unmanaged plan set
|
|
27
|
+
/** Builds an all-unmanaged plan set, the `--to-upstream` (legacy) shape. */
|
|
28
28
|
export function planUpstreamDiscards(entries) {
|
|
29
29
|
return entries.map((entry) => ({ entry, kind: 'unmanaged', owners: [], conflicted: false }));
|
|
30
30
|
}
|
|
31
31
|
/**
|
|
32
32
|
* Plans the restore target for each status entry. Entries claimed by the
|
|
33
|
-
* patch manifest restore to the patch-applied baseline
|
|
33
|
+
* patch manifest restore to the patch-applied baseline. Unclaimed entries
|
|
34
34
|
* keep the plain git mechanics. A missing patches dir or empty manifest
|
|
35
35
|
* degrades every plan to `unmanaged`.
|
|
36
36
|
*
|
|
37
|
-
* A corrupt manifest or an unreconstructible patch baseline
|
|
38
|
-
* GeneralError naming `--to-upstream
|
|
39
|
-
* HEAD is
|
|
37
|
+
* A corrupt manifest or an unreconstructible patch baseline refuses with a
|
|
38
|
+
* GeneralError naming `--to-upstream`. Silently falling back to pristine
|
|
39
|
+
* HEAD is the data-loss path this module exists to close.
|
|
40
40
|
*/
|
|
41
41
|
export async function planDiscardBaselines(patchesDir, engineDir, entries) {
|
|
42
42
|
const state = await loadPatchesManifestState(patchesDir);
|
|
@@ -71,7 +71,7 @@ export async function planDiscardBaselines(patchesDir, engineDir, entries) {
|
|
|
71
71
|
// `computePatchedContent` folds a deletion into an empty string (an
|
|
72
72
|
// apply-to-content limitation), which is indistinguishable from a
|
|
73
73
|
// legitimately empty file. Consult the owning patches' diff sections
|
|
74
|
-
// directly: the
|
|
74
|
+
// directly: the last section (highest-ordered owner) naming the path
|
|
75
75
|
// decides whether the baseline is "absent".
|
|
76
76
|
const sectionCache = new Map();
|
|
77
77
|
const isDeletedAtBaseline = async (path, owners) => {
|
|
@@ -86,11 +86,10 @@ export async function planDiscardBaselines(patchesDir, engineDir, entries) {
|
|
|
86
86
|
}
|
|
87
87
|
catch (error) {
|
|
88
88
|
// Fail closed. Swallowing this yields no sections, which falls
|
|
89
|
-
// through to `return false`
|
|
90
|
-
// the owning patch
|
|
89
|
+
// through to `return false` ("not deleted at baseline"), so a
|
|
90
|
+
// path the owning patch deletes would be restored as present, i.e.
|
|
91
91
|
// rewritten instead of removed: silent data loss on the command
|
|
92
|
-
// whose header promises a refusal for
|
|
93
|
-
// failure.
|
|
92
|
+
// whose header promises a refusal for this class of failure.
|
|
94
93
|
//
|
|
95
94
|
// `computeExpected` above reads the same patch first and refuses,
|
|
96
95
|
// so this is defence-in-depth against a TOCTOU (the patch file
|
|
@@ -160,7 +159,7 @@ export async function applyDiscardBaseline(engineDir, plan) {
|
|
|
160
159
|
}
|
|
161
160
|
const { entry } = plan;
|
|
162
161
|
// Drop any staged edits/adds/renames first so the rewritten content is a
|
|
163
|
-
// plain worktree state (harmless when nothing is staged
|
|
162
|
+
// plain worktree state (harmless when nothing is staged, and skipped for
|
|
164
163
|
// purely-untracked entries which have no index footprint).
|
|
165
164
|
if (!entry.isUntracked) {
|
|
166
165
|
const indexPaths = entry.originalPath !== undefined ? [entry.file, entry.originalPath] : [entry.file];
|
|
@@ -172,7 +171,7 @@ export async function applyDiscardBaseline(engineDir, plan) {
|
|
|
172
171
|
else {
|
|
173
172
|
await writeText(join(engineDir, entry.file), plan.expectedContent);
|
|
174
173
|
}
|
|
175
|
-
// A rename/copy's original side restores to
|
|
174
|
+
// A rename/copy's original side restores to its baseline too: the patch
|
|
176
175
|
// baseline when claimed, else the legacy HEAD restore (matching what
|
|
177
176
|
// discardStatusEntry does for that side).
|
|
178
177
|
if (entry.originalPath !== undefined) {
|
|
@@ -226,22 +225,22 @@ export function summarizeDiscardBaselines(plans, succeeded) {
|
|
|
226
225
|
const deleted = plans.filter((p) => p.kind === 'patch-deleted').length;
|
|
227
226
|
const unmanaged = plans.filter((p) => p.kind === 'unmanaged').length;
|
|
228
227
|
if (patchBacked + created + deleted === 0) {
|
|
229
|
-
return `${
|
|
228
|
+
return `${succeeded} file(s) restored to upstream state`;
|
|
230
229
|
}
|
|
231
230
|
const parts = [];
|
|
232
231
|
if (patchBacked > 0)
|
|
233
|
-
parts.push(`${
|
|
232
|
+
parts.push(`${patchBacked} to patch baseline`);
|
|
234
233
|
if (created > 0)
|
|
235
|
-
parts.push(`${
|
|
234
|
+
parts.push(`${created} re-materialized`);
|
|
236
235
|
if (deleted > 0)
|
|
237
|
-
parts.push(`${
|
|
236
|
+
parts.push(`${deleted} removed per patch baseline`);
|
|
238
237
|
if (unmanaged > 0)
|
|
239
|
-
parts.push(`${
|
|
240
|
-
return `${
|
|
238
|
+
parts.push(`${unmanaged} to upstream state`);
|
|
239
|
+
return `${succeeded} file(s) restored: ${parts.join(', ')}`;
|
|
241
240
|
}
|
|
242
241
|
/** Warn text for a multi-owner (conflicted) restore. */
|
|
243
242
|
export function describeConflictWarning(plan) {
|
|
244
|
-
return (`${plan.entry.file} is claimed by ${
|
|
243
|
+
return (`${plan.entry.file} is claimed by ${plan.owners.length} patches ` +
|
|
245
244
|
`(${plan.owners.join(', ')}). Restored the cumulative baseline; run ` +
|
|
246
245
|
'"fireforge status --ownership" to resolve ownership.');
|
|
247
246
|
}
|
|
@@ -3,15 +3,15 @@
|
|
|
3
3
|
*
|
|
4
4
|
* `TIMEOUT … application timed out after N seconds with no output` /
|
|
5
5
|
* `Ran 0 checks` has three known causes, one of them purely environmental:
|
|
6
|
-
* a
|
|
6
|
+
* a headed run on an unattended machine whose display is asleep or locked.
|
|
7
7
|
* A headed Firefox on a sleeping display never paints, never reaches its
|
|
8
|
-
* first test, and dies at the no-output timeout
|
|
9
|
-
*
|
|
8
|
+
* first test, and dies at the no-output timeout, which from the log alone
|
|
9
|
+
* is indistinguishable from a product hang.
|
|
10
10
|
*
|
|
11
|
-
* `caffeinate -disu` does not cure it. It
|
|
12
|
-
* display that is already asleep, so wrapping the run changes
|
|
13
|
-
* the machine has dimmed. `fireforge test` defaults to
|
|
14
|
-
* unattended run walks straight into this.
|
|
11
|
+
* `caffeinate -disu` does not cure it. It prevents sleep, but it cannot
|
|
12
|
+
* wake a display that is already asleep, so wrapping the run changes
|
|
13
|
+
* nothing once the machine has dimmed. `fireforge test` defaults to
|
|
14
|
+
* headed, so an unattended run walks straight into this.
|
|
15
15
|
*
|
|
16
16
|
* The probe is advisory and fail-open: anything unexpected reports
|
|
17
17
|
* `'unknown'` and the caller degrades to the generic triage list rather than
|
|
@@ -30,10 +30,10 @@ export type DisplaySleepState = 'asleep' | 'awake' | 'unknown';
|
|
|
30
30
|
* ```
|
|
31
31
|
*
|
|
32
32
|
* Only the `IODisplayWrangler` row matters, and only its first numeric
|
|
33
|
-
* column (the current power state). Any other shape
|
|
34
|
-
* non-numeric column, an error message
|
|
33
|
+
* column (the current power state). Any other shape (no such row, a
|
|
34
|
+
* non-numeric column, an error message) is `'unknown'`, never a guess.
|
|
35
35
|
*
|
|
36
|
-
* Pure
|
|
36
|
+
* Pure. Exported for direct unit testing.
|
|
37
37
|
*
|
|
38
38
|
* @param stdout - Raw `pmset -g powerstate IODisplayWrangler` output
|
|
39
39
|
* @returns The measured state, or `'unknown'`
|
|
@@ -41,7 +41,7 @@ export type DisplaySleepState = 'asleep' | 'awake' | 'unknown';
|
|
|
41
41
|
export declare function parseDisplayPowerState(stdout: string): DisplaySleepState;
|
|
42
42
|
/**
|
|
43
43
|
* Probes the display's power state. Non-darwin platforms report `'unknown'`
|
|
44
|
-
* without spawning anything
|
|
44
|
+
* without spawning anything: the stall shape this serves is macOS-specific
|
|
45
45
|
* and no equivalent single-command probe is wired for other platforms.
|
|
46
46
|
*
|
|
47
47
|
* @param platform - `process.platform`-style id (injected for testability)
|
|
@@ -4,15 +4,15 @@
|
|
|
4
4
|
*
|
|
5
5
|
* `TIMEOUT … application timed out after N seconds with no output` /
|
|
6
6
|
* `Ran 0 checks` has three known causes, one of them purely environmental:
|
|
7
|
-
* a
|
|
7
|
+
* a headed run on an unattended machine whose display is asleep or locked.
|
|
8
8
|
* A headed Firefox on a sleeping display never paints, never reaches its
|
|
9
|
-
* first test, and dies at the no-output timeout
|
|
10
|
-
*
|
|
9
|
+
* first test, and dies at the no-output timeout, which from the log alone
|
|
10
|
+
* is indistinguishable from a product hang.
|
|
11
11
|
*
|
|
12
|
-
* `caffeinate -disu` does not cure it. It
|
|
13
|
-
* display that is already asleep, so wrapping the run changes
|
|
14
|
-
* the machine has dimmed. `fireforge test` defaults to
|
|
15
|
-
* unattended run walks straight into this.
|
|
12
|
+
* `caffeinate -disu` does not cure it. It prevents sleep, but it cannot
|
|
13
|
+
* wake a display that is already asleep, so wrapping the run changes
|
|
14
|
+
* nothing once the machine has dimmed. `fireforge test` defaults to
|
|
15
|
+
* headed, so an unattended run walks straight into this.
|
|
16
16
|
*
|
|
17
17
|
* The probe is advisory and fail-open: anything unexpected reports
|
|
18
18
|
* `'unknown'` and the caller degrades to the generic triage list rather than
|
|
@@ -25,7 +25,7 @@ import { exec } from '../utils/process.js';
|
|
|
25
25
|
const DISPLAY_PROBE_TIMEOUT_MS = 5_000;
|
|
26
26
|
/**
|
|
27
27
|
* IOKit power state at which `IODisplayWrangler` is fully lit. Lower
|
|
28
|
-
* states are dimmed or off
|
|
28
|
+
* states are dimmed or off. macOS reports 4 for a live display.
|
|
29
29
|
*/
|
|
30
30
|
const DISPLAY_AWAKE_POWER_STATE = 4;
|
|
31
31
|
/**
|
|
@@ -39,10 +39,10 @@ const DISPLAY_AWAKE_POWER_STATE = 4;
|
|
|
39
39
|
* ```
|
|
40
40
|
*
|
|
41
41
|
* Only the `IODisplayWrangler` row matters, and only its first numeric
|
|
42
|
-
* column (the current power state). Any other shape
|
|
43
|
-
* non-numeric column, an error message
|
|
42
|
+
* column (the current power state). Any other shape (no such row, a
|
|
43
|
+
* non-numeric column, an error message) is `'unknown'`, never a guess.
|
|
44
44
|
*
|
|
45
|
-
* Pure
|
|
45
|
+
* Pure. Exported for direct unit testing.
|
|
46
46
|
*
|
|
47
47
|
* @param stdout - Raw `pmset -g powerstate IODisplayWrangler` output
|
|
48
48
|
* @returns The measured state, or `'unknown'`
|
|
@@ -61,7 +61,7 @@ export function parseDisplayPowerState(stdout) {
|
|
|
61
61
|
}
|
|
62
62
|
/**
|
|
63
63
|
* Probes the display's power state. Non-darwin platforms report `'unknown'`
|
|
64
|
-
* without spawning anything
|
|
64
|
+
* without spawning anything: the stall shape this serves is macOS-specific
|
|
65
65
|
* and no equivalent single-command probe is wired for other platforms.
|
|
66
66
|
*
|
|
67
67
|
* @param platform - `process.platform`-style id (injected for testability)
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import type { BuildBaseline } from './build-baseline-types.js';
|
|
7
7
|
/**
|
|
8
8
|
* Collects engine-relative paths changed since the baseline's HEAD SHA,
|
|
9
|
-
* plus any workdir modifications (tracked and untracked). Defensive
|
|
9
|
+
* plus any workdir modifications (tracked and untracked). Defensive: git
|
|
10
10
|
* failures surface as verbose lines and return the files collected so far,
|
|
11
11
|
* so an empty result means "no drift we can prove" rather than "no drift
|
|
12
12
|
* occurred". When the baseline is missing or the engine has no HEAD yet,
|
|
@@ -27,7 +27,7 @@ export declare function collectChangedEnginePaths(engineDir: string, baseline: B
|
|
|
27
27
|
* full-build escalation in `build-prepare` (`buildInputFingerprints`).
|
|
28
28
|
*
|
|
29
29
|
* A path with no recorded entry, an unreadable file, or a differing hash
|
|
30
|
-
* is kept
|
|
30
|
+
* is kept, since "cannot prove unchanged" must never turn into "unchanged".
|
|
31
31
|
* With no fingerprint set at all (a baseline written before the field
|
|
32
32
|
* existed) every path is kept, which is the path-only comparison the
|
|
33
33
|
* fingerprints refine.
|
|
@@ -12,7 +12,7 @@ import { git } from './git-base.js';
|
|
|
12
12
|
import { getUntrackedFiles } from './git-status.js';
|
|
13
13
|
/**
|
|
14
14
|
* Collects engine-relative paths changed since the baseline's HEAD SHA,
|
|
15
|
-
* plus any workdir modifications (tracked and untracked). Defensive
|
|
15
|
+
* plus any workdir modifications (tracked and untracked). Defensive: git
|
|
16
16
|
* failures surface as verbose lines and return the files collected so far,
|
|
17
17
|
* so an empty result means "no drift we can prove" rather than "no drift
|
|
18
18
|
* occurred". When the baseline is missing or the engine has no HEAD yet,
|
|
@@ -67,7 +67,7 @@ export async function collectChangedEnginePaths(engineDir, baseline, contextLabe
|
|
|
67
67
|
* full-build escalation in `build-prepare` (`buildInputFingerprints`).
|
|
68
68
|
*
|
|
69
69
|
* A path with no recorded entry, an unreadable file, or a differing hash
|
|
70
|
-
* is kept
|
|
70
|
+
* is kept, since "cannot prove unchanged" must never turn into "unchanged".
|
|
71
71
|
* With no fingerprint set at all (a baseline written before the field
|
|
72
72
|
* existed) every path is kept, which is the path-only comparison the
|
|
73
73
|
* fingerprints refine.
|
|
@@ -14,20 +14,13 @@
|
|
|
14
14
|
export interface EngineGitReadyOptions {
|
|
15
15
|
/**
|
|
16
16
|
* Appended to the unborn-HEAD remediation, e.g. `', then retry the rebase.'`
|
|
17
|
-
* The base message
|
|
18
|
-
* reads as one sentence
|
|
17
|
+
* The base message ends without punctuation on purpose so the suffix
|
|
18
|
+
* reads as one sentence. Callers that pass nothing get a plain full stop.
|
|
19
19
|
*/
|
|
20
20
|
unbornHeadSuffix?: string;
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
23
|
-
*
|
|
24
|
-
* `GeneralError`. The furnace family raises `FurnaceError`, which carries
|
|
25
|
-
* its own `userMessage` and exit code 9, so a helper hardcoding
|
|
26
|
-
* `GeneralError` would silently change both.
|
|
27
|
-
*/
|
|
28
|
-
export type PreconditionErrorFactory = (message: string) => Error;
|
|
29
|
-
/**
|
|
30
|
-
* Asserts only that the engine checkout EXISTS.
|
|
23
|
+
* Asserts only that the engine checkout exists.
|
|
31
24
|
*
|
|
32
25
|
* The first rung of {@link assertEngineGitReady}. Most callers want exactly
|
|
33
26
|
* this rung and no more: `build`, `run`, `test`, `package`, `watch`,
|
|
@@ -36,12 +29,11 @@ export type PreconditionErrorFactory = (message: string) => Error;
|
|
|
36
29
|
* would refuse runs that work today.
|
|
37
30
|
*
|
|
38
31
|
* @param engineDir - Absolute path to the engine checkout
|
|
39
|
-
* @param errorFactory - Optional domain-specific error constructor
|
|
40
32
|
*/
|
|
41
|
-
export declare function assertEngineExists(engineDir: string
|
|
33
|
+
export declare function assertEngineExists(engineDir: string): Promise<void>;
|
|
42
34
|
/**
|
|
43
35
|
* Asserts that `engineDir` exists, is a git repository, and has a baseline
|
|
44
|
-
* commit
|
|
36
|
+
* commit, in that order, so the operator gets the most specific applicable
|
|
45
37
|
* remediation rather than a downstream git error.
|
|
46
38
|
*
|
|
47
39
|
* @param engineDir - Absolute path to the engine checkout
|
|
@@ -20,10 +20,8 @@ const UNBORN_HEAD_REMEDIATION = 'Engine repository has no baseline commit yet
|
|
|
20
20
|
// No terminating period: the suffix below supplies its own punctuation, and
|
|
21
21
|
// hardcoding one here rendered as "…cleanly., then retry the rebase."
|
|
22
22
|
'Re-run "fireforge download --force" to recreate the baseline repository cleanly';
|
|
23
|
-
/** Default factory: the message every non-furnace command already used. */
|
|
24
|
-
const defaultErrorFactory = (message) => new GeneralError(message);
|
|
25
23
|
/**
|
|
26
|
-
* Asserts only that the engine checkout
|
|
24
|
+
* Asserts only that the engine checkout exists.
|
|
27
25
|
*
|
|
28
26
|
* The first rung of {@link assertEngineGitReady}. Most callers want exactly
|
|
29
27
|
* this rung and no more: `build`, `run`, `test`, `package`, `watch`,
|
|
@@ -32,25 +30,22 @@ const defaultErrorFactory = (message) => new GeneralError(message);
|
|
|
32
30
|
* would refuse runs that work today.
|
|
33
31
|
*
|
|
34
32
|
* @param engineDir - Absolute path to the engine checkout
|
|
35
|
-
* @param errorFactory - Optional domain-specific error constructor
|
|
36
33
|
*/
|
|
37
|
-
export async function assertEngineExists(engineDir
|
|
34
|
+
export async function assertEngineExists(engineDir) {
|
|
38
35
|
if (!(await pathExists(engineDir))) {
|
|
39
|
-
throw
|
|
36
|
+
throw new GeneralError('Firefox source not found. Run "fireforge download" first.');
|
|
40
37
|
}
|
|
41
38
|
}
|
|
42
39
|
/**
|
|
43
40
|
* Asserts that `engineDir` exists, is a git repository, and has a baseline
|
|
44
|
-
* commit
|
|
41
|
+
* commit, in that order, so the operator gets the most specific applicable
|
|
45
42
|
* remediation rather than a downstream git error.
|
|
46
43
|
*
|
|
47
44
|
* @param engineDir - Absolute path to the engine checkout
|
|
48
45
|
* @param options - Optional per-command message tailoring
|
|
49
46
|
*/
|
|
50
47
|
export async function assertEngineGitReady(engineDir, options = {}) {
|
|
51
|
-
|
|
52
|
-
throw new GeneralError('Firefox source not found. Run "fireforge download" first.');
|
|
53
|
-
}
|
|
48
|
+
await assertEngineExists(engineDir);
|
|
54
49
|
if (!(await isGitRepository(engineDir))) {
|
|
55
50
|
throw new GeneralError('Engine directory is not a git repository. Run "fireforge download" to initialize.');
|
|
56
51
|
}
|
|
@@ -9,13 +9,13 @@ export interface EngineSessionLockOptions {
|
|
|
9
9
|
waitLockSeconds?: number | undefined;
|
|
10
10
|
}
|
|
11
11
|
/**
|
|
12
|
-
* Formats the notice printed when the wait budget is
|
|
12
|
+
* Formats the notice printed when the wait budget is extended because the
|
|
13
13
|
* queue advanced.
|
|
14
14
|
*
|
|
15
|
-
* Exported for direct unit testing. It names both figures
|
|
16
|
-
* budget and the one now in force
|
|
17
|
-
*
|
|
18
|
-
*
|
|
15
|
+
* Exported for direct unit testing. It names both figures, the requested
|
|
16
|
+
* budget and the one now in force, because they have diverged and an
|
|
17
|
+
* operator comparing the elapsed time against the number they typed would
|
|
18
|
+
* otherwise conclude the timeout is broken.
|
|
19
19
|
*/
|
|
20
20
|
export declare function formatWaitExtendedLine(ahead: number, budgetMs: number, requestedMs: number): string;
|
|
21
21
|
/**
|
|
@@ -24,8 +24,8 @@ export declare function formatWaitExtendedLine(ahead: number, budgetMs: number,
|
|
|
24
24
|
*/
|
|
25
25
|
export declare function withEngineSessionLock<T>(projectRoot: string, command: string, operation: () => Promise<T>, options?: EngineSessionLockOptions): Promise<T>;
|
|
26
26
|
/**
|
|
27
|
-
* Inspects the project's engine-session lock without acquiring it
|
|
28
|
-
*
|
|
27
|
+
* Inspects the project's engine-session lock without acquiring it, backing
|
|
28
|
+
* `fireforge status --lock`.
|
|
29
29
|
*
|
|
30
30
|
* @param projectRoot - Project root containing `.fireforge/`
|
|
31
31
|
* @returns Holder identity, hold duration, and queue depth
|
|
@@ -52,7 +52,7 @@ export declare function snapshotEngineGeneration(engineDir: string): Promise<str
|
|
|
52
52
|
*/
|
|
53
53
|
export declare function isIndexLockError(error: unknown): boolean;
|
|
54
54
|
/**
|
|
55
|
-
* True when a generation token records a failed probe
|
|
55
|
+
* True when a generation token records a failed probe, i.e. nothing was
|
|
56
56
|
* measured, so the token must never be compared (or hashed) as if it
|
|
57
57
|
* described the engine's state.
|
|
58
58
|
*/
|
|
@@ -62,8 +62,8 @@ export declare function unavailableGenerationReason(token: string): string;
|
|
|
62
62
|
/**
|
|
63
63
|
* Describes what moved between two generation tokens, in operator terms.
|
|
64
64
|
*
|
|
65
|
-
* The refusal used to say only
|
|
66
|
-
* operator to reconstruct the writer by hand
|
|
65
|
+
* The refusal used to say only that the engine changed, which left the
|
|
66
|
+
* operator to reconstruct the writer by hand: `find -newermt` against the
|
|
67
67
|
* run window, minus the objdir, minus git's own bookkeeping. Everything
|
|
68
68
|
* needed to answer it is already in the two tokens, so the refusal answers
|
|
69
69
|
* it. Pure and total: an unparseable token yields an empty list rather than
|
|
@@ -72,7 +72,7 @@ export declare function unavailableGenerationReason(token: string): string;
|
|
|
72
72
|
*
|
|
73
73
|
* @param before - Token captured before the run
|
|
74
74
|
* @param after - Token captured after the run
|
|
75
|
-
* @returns Human-readable lines describing the delta
|
|
75
|
+
* @returns Human-readable lines describing the delta. Empty when nothing
|
|
76
76
|
* could be attributed
|
|
77
77
|
*/
|
|
78
78
|
export declare function describeEngineGenerationDelta(before: string, after: string): string[];
|
|
@@ -80,25 +80,25 @@ export declare function describeEngineGenerationDelta(before: string, after: str
|
|
|
80
80
|
* Throws when the engine's generation token differs from `before`, i.e. the
|
|
81
81
|
* engine was mutated by another writer while a test run was in flight.
|
|
82
82
|
*
|
|
83
|
-
*
|
|
84
|
-
* always a git checkout
|
|
83
|
+
* An unmeasurable engine warns rather than throws. `engine/` is not
|
|
84
|
+
* always a git checkout (`fireforge download` extracts a source tarball),
|
|
85
85
|
* so a failed probe is a legitimate state and must not fail the run.
|
|
86
86
|
*
|
|
87
|
-
*
|
|
87
|
+
* It must also not pass silently. A failure token compared for
|
|
88
88
|
* equality like any other would let a git failure that reproduces across
|
|
89
89
|
* both probes (unreadable `.git`, a permissions problem, a corrupt index)
|
|
90
90
|
* take the `after === before` early return and bless a verdict the guard
|
|
91
|
-
* never verified. Two
|
|
91
|
+
* never verified. Two differing failure messages are worse still: they
|
|
92
92
|
* fall through to the mutation branch and report a spurious
|
|
93
93
|
* "engine/ changed". Hence the prefix comparison rather than a token
|
|
94
|
-
* comparison
|
|
94
|
+
* comparison: the token embeds the error message, and two genuine failures
|
|
95
95
|
* rarely phrase it identically.
|
|
96
96
|
*
|
|
97
|
-
* The tolerance is
|
|
97
|
+
* The tolerance is limited to a probe that failed both times:
|
|
98
98
|
* that is the steady state of a non-git `engine/`, and it warns. A one-sided
|
|
99
99
|
* transition is not that state. An `engine/` that was measurable and then
|
|
100
100
|
* was not means the second probe measured nothing about a checkout that
|
|
101
|
-
* demonstrably had something to measure
|
|
101
|
+
* demonstrably had something to measure. The reverse means there was never a
|
|
102
102
|
* baseline to compare against. Neither verdict can be trusted, so both throw.
|
|
103
103
|
*/
|
|
104
104
|
export declare function assertEngineGenerationUnchanged(engineDir: string, before: string): Promise<void>;
|