@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
|
@@ -19,6 +19,20 @@ export declare abstract class FireForgeError extends Error {
|
|
|
19
19
|
*/
|
|
20
20
|
get userMessage(): string;
|
|
21
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Renders the trailing "To fix this:" block shared by every FireForge error
|
|
24
|
+
* that offers remedies.
|
|
25
|
+
*
|
|
26
|
+
* Numbering is derived from the array rather than written into each string.
|
|
27
|
+
* Several classes vary their advice by context (`FurnaceError` drops the
|
|
28
|
+
* validate step, `ChecksumMismatchError` adds a Developer Edition note), and
|
|
29
|
+
* hand-numbered branches had to renumber every later step by hand, one
|
|
30
|
+
* conditional away from printing "2." twice.
|
|
31
|
+
*
|
|
32
|
+
* @param steps - The remedy lines, in order, without their numbers
|
|
33
|
+
* @returns The block, starting with the blank-line separator
|
|
34
|
+
*/
|
|
35
|
+
export declare function remedies(steps: readonly string[]): string;
|
|
22
36
|
/**
|
|
23
37
|
* General error for unexpected failures.
|
|
24
38
|
*/
|
|
@@ -26,7 +40,26 @@ export declare class GeneralError extends FireForgeError {
|
|
|
26
40
|
readonly code: 1;
|
|
27
41
|
}
|
|
28
42
|
/**
|
|
29
|
-
*
|
|
43
|
+
* A `fireforge test` preflight gate that refused before any harness ran.
|
|
44
|
+
*
|
|
45
|
+
* Exists to carry a `note`, not to change behaviour: it keeps
|
|
46
|
+
* {@link ExitCode.GENERAL_ERROR}, so `docs/exit-codes.md` and every CI
|
|
47
|
+
* consumer keying on the exit status are untouched. The note is a stable
|
|
48
|
+
* kebab-case refusal class that the `FIREFORGE-VERDICT:` line reports as an
|
|
49
|
+
* additive `note=` key. Without it every preflight refusal reached an
|
|
50
|
+
* unattended reader as the single token `reason=preflight`, which covers
|
|
51
|
+
* everything from a missing build to a peer's packaging record, so the one
|
|
52
|
+
* line that survives a truncating pipe could not say which gate fired.
|
|
53
|
+
*/
|
|
54
|
+
export declare class PreflightRefusalError extends GeneralError {
|
|
55
|
+
/** Stable refusal class, e.g. `stale-browser`. */
|
|
56
|
+
readonly note: string;
|
|
57
|
+
constructor(message: string,
|
|
58
|
+
/** Stable refusal class, e.g. `stale-browser`. */
|
|
59
|
+
note: string);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Raised when one of FireForge's own internal invariants did not hold:
|
|
30
63
|
* the failure of a runtime assertion from `src/utils/assert.ts`.
|
|
31
64
|
*
|
|
32
65
|
* Dedicated subclass (rather than raw GeneralError) because an invariant
|
|
@@ -35,12 +68,12 @@ export declare class GeneralError extends FireForgeError {
|
|
|
35
68
|
* fix. That difference is worth carrying all the way to the exit status
|
|
36
69
|
* (see {@link ExitCode.INTERNAL_ERROR}) so a CI job can escalate it
|
|
37
70
|
* instead of retrying it, and it is the one error class the CLI boundary
|
|
38
|
-
* prints a stack trace for
|
|
71
|
+
* prints a stack trace for, since the stack is the report.
|
|
39
72
|
*
|
|
40
73
|
* Assertions exist so that a violated invariant stops the run at the
|
|
41
74
|
* first inconsistency instead of continuing to write. In the mutating
|
|
42
75
|
* paths that means the surrounding rollback journal restores the engine
|
|
43
|
-
* before this reaches the operator
|
|
76
|
+
* before this reaches the operator. See `docs/lifecycle-invariants.md`.
|
|
44
77
|
*/
|
|
45
78
|
export declare class InternalInvariantError extends FireForgeError {
|
|
46
79
|
readonly code: 11;
|
|
@@ -48,7 +81,7 @@ export declare class InternalInvariantError extends FireForgeError {
|
|
|
48
81
|
}
|
|
49
82
|
/**
|
|
50
83
|
* Raised when a legacy regex/brace-depth fallback parser decides it
|
|
51
|
-
* cannot safely perform its mutation
|
|
84
|
+
* cannot safely perform its mutation, e.g. because a block it expected
|
|
52
85
|
* to walk never closes, because the inserted result fails a round-trip
|
|
53
86
|
* brace balance check, or because an expected pattern is missing.
|
|
54
87
|
*
|
|
@@ -80,9 +113,10 @@ export declare class InvalidArgumentError extends FireForgeError {
|
|
|
80
113
|
*
|
|
81
114
|
* Every `exec*` helper in `src/utils/process.ts` rejects with this type
|
|
82
115
|
* instead of Node's bare `AbortError: The operation was aborted`, which
|
|
83
|
-
* carries no command name, no elapsed time, and no hint that a timeout
|
|
84
|
-
*
|
|
85
|
-
* errors/git.ts for the git-specific
|
|
116
|
+
* carries no command name, no elapsed time, and no hint that a timeout
|
|
117
|
+
* (rather than the command) was responsible. See
|
|
118
|
+
* {@link GitIndexingTimeoutError} in errors/git.ts for the git-specific
|
|
119
|
+
* variant.
|
|
86
120
|
*/
|
|
87
121
|
export declare class ExecTimeoutError extends FireForgeError {
|
|
88
122
|
/** Executable that was spawned (argv[0]). */
|
|
@@ -92,14 +126,33 @@ export declare class ExecTimeoutError extends FireForgeError {
|
|
|
92
126
|
/** Timeout that elapsed, in milliseconds. */
|
|
93
127
|
readonly timeoutMs: number;
|
|
94
128
|
readonly code: 1;
|
|
129
|
+
/** Standard output captured before the deadline fired (empty when the exec path does not capture). */
|
|
130
|
+
readonly stdout: string;
|
|
131
|
+
/** Standard error captured before the deadline fired (empty when the exec path does not capture). */
|
|
132
|
+
readonly stderr: string;
|
|
133
|
+
/** True when either captured stream was cut off at the exec layer's collector cap. */
|
|
134
|
+
readonly outputTruncated: boolean;
|
|
95
135
|
constructor(
|
|
96
136
|
/** Executable that was spawned (argv[0]). */
|
|
97
137
|
command: string,
|
|
98
138
|
/** Arguments the executable was spawned with. */
|
|
99
139
|
args: readonly string[],
|
|
100
140
|
/** Timeout that elapsed, in milliseconds. */
|
|
101
|
-
timeoutMs: number, cause?: unknown);
|
|
141
|
+
timeoutMs: number, cause?: unknown, output?: ExecTimeoutOutput);
|
|
102
142
|
get userMessage(): string;
|
|
143
|
+
/**
|
|
144
|
+
* The last few lines the command printed before it was killed, so an
|
|
145
|
+
* operator can see what it was doing (a `git add -A` stuck on one path,
|
|
146
|
+
* a build step that hung) instead of a bare budget number. It prefers
|
|
147
|
+
* stderr and falls back to stdout when stderr is silent.
|
|
148
|
+
*/
|
|
149
|
+
private outputTailForUser;
|
|
150
|
+
}
|
|
151
|
+
/** Output captured before an exec timeout fired. See {@link ExecTimeoutError}. */
|
|
152
|
+
export interface ExecTimeoutOutput {
|
|
153
|
+
stdout: string;
|
|
154
|
+
stderr: string;
|
|
155
|
+
truncated: boolean;
|
|
103
156
|
}
|
|
104
157
|
/**
|
|
105
158
|
* Error thrown when a file-lock wait times out because another process holds
|
|
@@ -108,12 +161,12 @@ export declare class ExecTimeoutError extends FireForgeError {
|
|
|
108
161
|
* Dedicated subclass so the CLI boundary renders lock contention as the
|
|
109
162
|
* one-line reason-first/remedy-second refusal it is. As a plain `Error` it
|
|
110
163
|
* is treated by `withErrorHandling` as an internal failure and printed with
|
|
111
|
-
* a five-frame stack
|
|
164
|
+
* a five-frame stack: a correct refusal that looks like a crash.
|
|
112
165
|
*
|
|
113
166
|
* Exit code 15, not 1: the run never started. A script that retries on
|
|
114
167
|
* failure wants to re-queue this one, not treat it as a failure of the work
|
|
115
168
|
* it asked for. Every lock in FireForge shares the class and therefore the
|
|
116
|
-
* code
|
|
169
|
+
* code, because the fact is the same whichever lock was contended.
|
|
117
170
|
*/
|
|
118
171
|
export declare class LockContentionError extends FireForgeError {
|
|
119
172
|
readonly code: 15;
|
|
@@ -125,19 +178,19 @@ export declare class LockContentionError extends FireForgeError {
|
|
|
125
178
|
*
|
|
126
179
|
* Dedicated subclass for its exit code alone: as a `GeneralError` this
|
|
127
180
|
* refusal exited 1 beside real test failures' 5, and a summary line reading
|
|
128
|
-
* `FAIL
|
|
129
|
-
* kind of fact. They are opposites
|
|
130
|
-
* was discarded
|
|
181
|
+
* `FAIL, exit 1` next to `FAIL, exit 5` invites treating them as the same
|
|
182
|
+
* kind of fact. They are opposites (one suite failed, the other's result
|
|
183
|
+
* was discarded) and only a distinct code makes "unknown, re-run"
|
|
131
184
|
* mechanically separable from "red".
|
|
132
185
|
*/
|
|
133
186
|
export declare class InconclusiveVerdictError extends FireForgeError {
|
|
134
187
|
readonly code: 14;
|
|
135
188
|
}
|
|
136
189
|
/**
|
|
137
|
-
* Error thrown when the user
|
|
190
|
+
* Error thrown when the user interrupts an interactive prompt: Esc or
|
|
138
191
|
* Ctrl+C, i.e. `isCancel(...)`.
|
|
139
192
|
*
|
|
140
|
-
* Not for a prompt the operator
|
|
193
|
+
* Not for a prompt the operator answered "no" to: 130 is
|
|
141
194
|
* 128+SIGINT, which claims an interrupt. A declined confirmation is a
|
|
142
195
|
* successful run that chose not to proceed, and exits 0.
|
|
143
196
|
*/
|
|
@@ -156,7 +209,7 @@ export declare class ResolutionError extends FireForgeError {
|
|
|
156
209
|
* without calling process.exit() from shared library code.
|
|
157
210
|
*
|
|
158
211
|
* The user-visible error message has already been logged by the time this
|
|
159
|
-
* is thrown
|
|
212
|
+
* is thrown. The entrypoint only needs to read `.exitCode` and terminate.
|
|
160
213
|
*/
|
|
161
214
|
export declare class CommandError extends Error {
|
|
162
215
|
readonly exitCode: ExitCode;
|
package/dist/src/errors/base.js
CHANGED
|
@@ -17,10 +17,11 @@ export class FireForgeError extends Error {
|
|
|
17
17
|
if (cause !== undefined) {
|
|
18
18
|
this.cause = cause;
|
|
19
19
|
}
|
|
20
|
-
//
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
// Trims the constructor frames off the stack. `engines` pins Node >= 22,
|
|
21
|
+
// so the V8-only `captureStackTrace` is always present. The former
|
|
22
|
+
// `typeof === 'function'` guard was an unreachable branch that coverage
|
|
23
|
+
// could never close.
|
|
24
|
+
Error.captureStackTrace(this, this.constructor);
|
|
24
25
|
}
|
|
25
26
|
/**
|
|
26
27
|
* User-friendly error message with context and suggested fixes.
|
|
@@ -30,6 +31,22 @@ export class FireForgeError extends Error {
|
|
|
30
31
|
return this.message;
|
|
31
32
|
}
|
|
32
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Renders the trailing "To fix this:" block shared by every FireForge error
|
|
36
|
+
* that offers remedies.
|
|
37
|
+
*
|
|
38
|
+
* Numbering is derived from the array rather than written into each string.
|
|
39
|
+
* Several classes vary their advice by context (`FurnaceError` drops the
|
|
40
|
+
* validate step, `ChecksumMismatchError` adds a Developer Edition note), and
|
|
41
|
+
* hand-numbered branches had to renumber every later step by hand, one
|
|
42
|
+
* conditional away from printing "2." twice.
|
|
43
|
+
*
|
|
44
|
+
* @param steps - The remedy lines, in order, without their numbers
|
|
45
|
+
* @returns The block, starting with the blank-line separator
|
|
46
|
+
*/
|
|
47
|
+
export function remedies(steps) {
|
|
48
|
+
return `\n\nTo fix this:\n${steps.map((step, index) => ` ${index + 1}. ${step}`).join('\n')}`;
|
|
49
|
+
}
|
|
33
50
|
/**
|
|
34
51
|
* General error for unexpected failures.
|
|
35
52
|
*/
|
|
@@ -37,7 +54,28 @@ export class GeneralError extends FireForgeError {
|
|
|
37
54
|
code = ExitCode.GENERAL_ERROR;
|
|
38
55
|
}
|
|
39
56
|
/**
|
|
40
|
-
*
|
|
57
|
+
* A `fireforge test` preflight gate that refused before any harness ran.
|
|
58
|
+
*
|
|
59
|
+
* Exists to carry a `note`, not to change behaviour: it keeps
|
|
60
|
+
* {@link ExitCode.GENERAL_ERROR}, so `docs/exit-codes.md` and every CI
|
|
61
|
+
* consumer keying on the exit status are untouched. The note is a stable
|
|
62
|
+
* kebab-case refusal class that the `FIREFORGE-VERDICT:` line reports as an
|
|
63
|
+
* additive `note=` key. Without it every preflight refusal reached an
|
|
64
|
+
* unattended reader as the single token `reason=preflight`, which covers
|
|
65
|
+
* everything from a missing build to a peer's packaging record, so the one
|
|
66
|
+
* line that survives a truncating pipe could not say which gate fired.
|
|
67
|
+
*/
|
|
68
|
+
export class PreflightRefusalError extends GeneralError {
|
|
69
|
+
note;
|
|
70
|
+
constructor(message,
|
|
71
|
+
/** Stable refusal class, e.g. `stale-browser`. */
|
|
72
|
+
note) {
|
|
73
|
+
super(message);
|
|
74
|
+
this.note = note;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Raised when one of FireForge's own internal invariants did not hold:
|
|
41
79
|
* the failure of a runtime assertion from `src/utils/assert.ts`.
|
|
42
80
|
*
|
|
43
81
|
* Dedicated subclass (rather than raw GeneralError) because an invariant
|
|
@@ -46,12 +84,12 @@ export class GeneralError extends FireForgeError {
|
|
|
46
84
|
* fix. That difference is worth carrying all the way to the exit status
|
|
47
85
|
* (see {@link ExitCode.INTERNAL_ERROR}) so a CI job can escalate it
|
|
48
86
|
* instead of retrying it, and it is the one error class the CLI boundary
|
|
49
|
-
* prints a stack trace for
|
|
87
|
+
* prints a stack trace for, since the stack is the report.
|
|
50
88
|
*
|
|
51
89
|
* Assertions exist so that a violated invariant stops the run at the
|
|
52
90
|
* first inconsistency instead of continuing to write. In the mutating
|
|
53
91
|
* paths that means the surrounding rollback journal restores the engine
|
|
54
|
-
* before this reaches the operator
|
|
92
|
+
* before this reaches the operator. See `docs/lifecycle-invariants.md`.
|
|
55
93
|
*/
|
|
56
94
|
export class InternalInvariantError extends FireForgeError {
|
|
57
95
|
code = ExitCode.INTERNAL_ERROR;
|
|
@@ -69,7 +107,7 @@ export class InternalInvariantError extends FireForgeError {
|
|
|
69
107
|
}
|
|
70
108
|
/**
|
|
71
109
|
* Raised when a legacy regex/brace-depth fallback parser decides it
|
|
72
|
-
* cannot safely perform its mutation
|
|
110
|
+
* cannot safely perform its mutation, e.g. because a block it expected
|
|
73
111
|
* to walk never closes, because the inserted result fails a round-trip
|
|
74
112
|
* brace balance check, or because an expected pattern is missing.
|
|
75
113
|
*
|
|
@@ -102,11 +140,9 @@ export class InvalidArgumentError extends FireForgeError {
|
|
|
102
140
|
this.argument = argument;
|
|
103
141
|
}
|
|
104
142
|
get userMessage() {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
}
|
|
109
|
-
return msg;
|
|
143
|
+
return this.argument
|
|
144
|
+
? `Invalid Argument: ${this.message}\n\nArgument: ${this.argument}`
|
|
145
|
+
: `Invalid Argument: ${this.message}`;
|
|
110
146
|
}
|
|
111
147
|
}
|
|
112
148
|
/**
|
|
@@ -114,33 +150,66 @@ export class InvalidArgumentError extends FireForgeError {
|
|
|
114
150
|
*
|
|
115
151
|
* Every `exec*` helper in `src/utils/process.ts` rejects with this type
|
|
116
152
|
* instead of Node's bare `AbortError: The operation was aborted`, which
|
|
117
|
-
* carries no command name, no elapsed time, and no hint that a timeout
|
|
118
|
-
*
|
|
119
|
-
* errors/git.ts for the git-specific
|
|
153
|
+
* carries no command name, no elapsed time, and no hint that a timeout
|
|
154
|
+
* (rather than the command) was responsible. See
|
|
155
|
+
* {@link GitIndexingTimeoutError} in errors/git.ts for the git-specific
|
|
156
|
+
* variant.
|
|
120
157
|
*/
|
|
121
158
|
export class ExecTimeoutError extends FireForgeError {
|
|
122
159
|
command;
|
|
123
160
|
args;
|
|
124
161
|
timeoutMs;
|
|
125
162
|
code = ExitCode.GENERAL_ERROR;
|
|
163
|
+
/** Standard output captured before the deadline fired (empty when the exec path does not capture). */
|
|
164
|
+
stdout;
|
|
165
|
+
/** Standard error captured before the deadline fired (empty when the exec path does not capture). */
|
|
166
|
+
stderr;
|
|
167
|
+
/** True when either captured stream was cut off at the exec layer's collector cap. */
|
|
168
|
+
outputTruncated;
|
|
126
169
|
constructor(
|
|
127
170
|
/** Executable that was spawned (argv[0]). */
|
|
128
171
|
command,
|
|
129
172
|
/** Arguments the executable was spawned with. */
|
|
130
173
|
args,
|
|
131
174
|
/** Timeout that elapsed, in milliseconds. */
|
|
132
|
-
timeoutMs, cause) {
|
|
175
|
+
timeoutMs, cause, output) {
|
|
133
176
|
super(`Command timed out after ${Math.round(timeoutMs / 1000)}s: ${[command, ...args].join(' ')}`, cause);
|
|
134
177
|
this.command = command;
|
|
135
178
|
this.args = args;
|
|
136
179
|
this.timeoutMs = timeoutMs;
|
|
180
|
+
this.stdout = output?.stdout ?? '';
|
|
181
|
+
this.stderr = output?.stderr ?? '';
|
|
182
|
+
this.outputTruncated = output?.truncated ?? false;
|
|
137
183
|
}
|
|
138
184
|
get userMessage() {
|
|
139
185
|
return (`${this.message}\n\n` +
|
|
140
186
|
'The command was killed because it exceeded its time budget, not because it failed on its own. ' +
|
|
141
|
-
'If the host is just slow or loaded, re-running may succeed.'
|
|
187
|
+
'If the host is just slow or loaded, re-running may succeed.' +
|
|
188
|
+
this.outputTailForUser());
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* The last few lines the command printed before it was killed, so an
|
|
192
|
+
* operator can see what it was doing (a `git add -A` stuck on one path,
|
|
193
|
+
* a build step that hung) instead of a bare budget number. It prefers
|
|
194
|
+
* stderr and falls back to stdout when stderr is silent.
|
|
195
|
+
*/
|
|
196
|
+
outputTailForUser() {
|
|
197
|
+
const source = this.stderr.trim().length > 0 ? this.stderr : this.stdout;
|
|
198
|
+
const lines = source
|
|
199
|
+
.trimEnd()
|
|
200
|
+
.split(/\r?\n/)
|
|
201
|
+
.filter((line) => line.length > 0);
|
|
202
|
+
if (lines.length === 0)
|
|
203
|
+
return '';
|
|
204
|
+
const tail = lines.slice(-EXEC_TIMEOUT_TAIL_LINES);
|
|
205
|
+
const label = this.stderr.trim().length > 0 ? 'stderr' : 'stdout';
|
|
206
|
+
const omitted = lines.length > tail.length ? ` (last ${tail.length} of ${lines.length} lines)` : '';
|
|
207
|
+
const truncatedNote = this.outputTruncated ? ' [captured output was truncated]' : '';
|
|
208
|
+
return `\n\nOutput before the timeout (${label}${omitted})${truncatedNote}:\n${tail.map((line) => ` ${line}`).join('\n')}`;
|
|
142
209
|
}
|
|
143
210
|
}
|
|
211
|
+
/** How many trailing output lines {@link ExecTimeoutError.userMessage} shows. */
|
|
212
|
+
const EXEC_TIMEOUT_TAIL_LINES = 20;
|
|
144
213
|
/**
|
|
145
214
|
* Error thrown when a file-lock wait times out because another process holds
|
|
146
215
|
* the lock.
|
|
@@ -148,12 +217,12 @@ export class ExecTimeoutError extends FireForgeError {
|
|
|
148
217
|
* Dedicated subclass so the CLI boundary renders lock contention as the
|
|
149
218
|
* one-line reason-first/remedy-second refusal it is. As a plain `Error` it
|
|
150
219
|
* is treated by `withErrorHandling` as an internal failure and printed with
|
|
151
|
-
* a five-frame stack
|
|
220
|
+
* a five-frame stack: a correct refusal that looks like a crash.
|
|
152
221
|
*
|
|
153
222
|
* Exit code 15, not 1: the run never started. A script that retries on
|
|
154
223
|
* failure wants to re-queue this one, not treat it as a failure of the work
|
|
155
224
|
* it asked for. Every lock in FireForge shares the class and therefore the
|
|
156
|
-
* code
|
|
225
|
+
* code, because the fact is the same whichever lock was contended.
|
|
157
226
|
*/
|
|
158
227
|
export class LockContentionError extends FireForgeError {
|
|
159
228
|
code = ExitCode.LOCK_TIMEOUT;
|
|
@@ -165,19 +234,19 @@ export class LockContentionError extends FireForgeError {
|
|
|
165
234
|
*
|
|
166
235
|
* Dedicated subclass for its exit code alone: as a `GeneralError` this
|
|
167
236
|
* refusal exited 1 beside real test failures' 5, and a summary line reading
|
|
168
|
-
* `FAIL
|
|
169
|
-
* kind of fact. They are opposites
|
|
170
|
-
* was discarded
|
|
237
|
+
* `FAIL, exit 1` next to `FAIL, exit 5` invites treating them as the same
|
|
238
|
+
* kind of fact. They are opposites (one suite failed, the other's result
|
|
239
|
+
* was discarded) and only a distinct code makes "unknown, re-run"
|
|
171
240
|
* mechanically separable from "red".
|
|
172
241
|
*/
|
|
173
242
|
export class InconclusiveVerdictError extends FireForgeError {
|
|
174
243
|
code = ExitCode.INCONCLUSIVE;
|
|
175
244
|
}
|
|
176
245
|
/**
|
|
177
|
-
* Error thrown when the user
|
|
246
|
+
* Error thrown when the user interrupts an interactive prompt: Esc or
|
|
178
247
|
* Ctrl+C, i.e. `isCancel(...)`.
|
|
179
248
|
*
|
|
180
|
-
* Not for a prompt the operator
|
|
249
|
+
* Not for a prompt the operator answered "no" to: 130 is
|
|
181
250
|
* 128+SIGINT, which claims an interrupt. A declined confirmation is a
|
|
182
251
|
* successful run that chose not to proceed, and exits 0.
|
|
183
252
|
*/
|
|
@@ -198,7 +267,7 @@ export class ResolutionError extends FireForgeError {
|
|
|
198
267
|
* without calling process.exit() from shared library code.
|
|
199
268
|
*
|
|
200
269
|
* The user-visible error message has already been logged by the time this
|
|
201
|
-
* is thrown
|
|
270
|
+
* is thrown. The entrypoint only needs to read `.exitCode` and terminate.
|
|
202
271
|
*/
|
|
203
272
|
export class CommandError extends Error {
|
|
204
273
|
exitCode;
|
|
@@ -10,19 +10,19 @@ export declare class BuildError extends FireForgeError {
|
|
|
10
10
|
get userMessage(): string;
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
|
-
* A test
|
|
14
|
-
* pass. Distinct from its {@link BuildError} parent only in what it
|
|
15
|
-
* the operator,
|
|
13
|
+
* A test suite went red: assertions failed, or sharded runs did not all
|
|
14
|
+
* pass. Distinct from its {@link BuildError} parent only in what it tells
|
|
15
|
+
* the operator, and not in its exit code: `docs/exit-codes.md`
|
|
16
16
|
* documents 5 as "a suite that FAILED", and consumers key CI on it.
|
|
17
17
|
*
|
|
18
|
-
* The parent's remedies are all build remedies
|
|
19
|
-
* "fireforge bootstrap", "delete obj-* directories"
|
|
18
|
+
* The parent's remedies are all build remedies ("check the build output",
|
|
19
|
+
* "fireforge bootstrap", "delete obj-* directories") and none of them apply
|
|
20
20
|
* to a failing assertion. Worse, the first points at the wrong half of the
|
|
21
21
|
* log, which is exactly the half a `tail` keeps. Ground truth for a test red
|
|
22
22
|
* is the harness's own output, so the remedies here name the failing tests,
|
|
23
23
|
* the `FIREFORGE-VERDICT:` line, and the run log that survives a pipe.
|
|
24
24
|
*
|
|
25
|
-
*
|
|
25
|
+
* `machineErrorCode` derives the `--json` error code from the class
|
|
26
26
|
* name, so this reports as `test-failure` rather than `build`.
|
|
27
27
|
*/
|
|
28
28
|
export declare class TestFailureError extends BuildError {
|
package/dist/src/errors/build.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// SPDX-License-Identifier: EUPL-1.2
|
|
2
|
-
import { FireForgeError } from './base.js';
|
|
2
|
+
import { FireForgeError, remedies } from './base.js';
|
|
3
3
|
import { ExitCode } from './codes.js';
|
|
4
4
|
/**
|
|
5
5
|
* Error thrown when a build operation fails.
|
|
@@ -12,31 +12,29 @@ export class BuildError extends FireForgeError {
|
|
|
12
12
|
this.command = command;
|
|
13
13
|
}
|
|
14
14
|
get userMessage() {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
msg += ' 3. Try a clean build by deleting obj-* directories';
|
|
23
|
-
return msg;
|
|
15
|
+
return (`Build Error: ${this.message}` +
|
|
16
|
+
(this.command ? `\n\nCommand: ${this.command}` : '') +
|
|
17
|
+
remedies([
|
|
18
|
+
'Check the build output above for specific errors',
|
|
19
|
+
'Ensure all dependencies are installed with "fireforge bootstrap"',
|
|
20
|
+
'Try a clean build by deleting obj-* directories',
|
|
21
|
+
]));
|
|
24
22
|
}
|
|
25
23
|
}
|
|
26
24
|
/**
|
|
27
|
-
* A test
|
|
28
|
-
* pass. Distinct from its {@link BuildError} parent only in what it
|
|
29
|
-
* the operator,
|
|
25
|
+
* A test suite went red: assertions failed, or sharded runs did not all
|
|
26
|
+
* pass. Distinct from its {@link BuildError} parent only in what it tells
|
|
27
|
+
* the operator, and not in its exit code: `docs/exit-codes.md`
|
|
30
28
|
* documents 5 as "a suite that FAILED", and consumers key CI on it.
|
|
31
29
|
*
|
|
32
|
-
* The parent's remedies are all build remedies
|
|
33
|
-
* "fireforge bootstrap", "delete obj-* directories"
|
|
30
|
+
* The parent's remedies are all build remedies ("check the build output",
|
|
31
|
+
* "fireforge bootstrap", "delete obj-* directories") and none of them apply
|
|
34
32
|
* to a failing assertion. Worse, the first points at the wrong half of the
|
|
35
33
|
* log, which is exactly the half a `tail` keeps. Ground truth for a test red
|
|
36
34
|
* is the harness's own output, so the remedies here name the failing tests,
|
|
37
35
|
* the `FIREFORGE-VERDICT:` line, and the run log that survives a pipe.
|
|
38
36
|
*
|
|
39
|
-
*
|
|
37
|
+
* `machineErrorCode` derives the `--json` error code from the class
|
|
40
38
|
* name, so this reports as `test-failure` rather than `build`.
|
|
41
39
|
*/
|
|
42
40
|
export class TestFailureError extends BuildError {
|
|
@@ -52,24 +50,18 @@ export class TestFailureError extends BuildError {
|
|
|
52
50
|
this.logPath = logPath;
|
|
53
51
|
}
|
|
54
52
|
get userMessage() {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
' 2. Read the "FIREFORGE-VERDICT:" line for the run\'s ground truth (checks, unexpected)\n';
|
|
68
|
-
msg +=
|
|
69
|
-
this.logPath !== undefined
|
|
70
|
-
? ` 3. The complete raw output is at ${this.logPath} — it survives a piped/tailed terminal`
|
|
71
|
-
: ' 3. Re-run without piping the output, so the failure lines are not cut off by "tail"';
|
|
72
|
-
return msg;
|
|
53
|
+
return (`Test Failure: ${this.message}` +
|
|
54
|
+
(this.command ? `\n\nCommand: ${this.command}` : '') +
|
|
55
|
+
(this.failureBlocks ? `\n\n${this.failureBlocks}` : '') +
|
|
56
|
+
remedies([
|
|
57
|
+
this.failureBlocks
|
|
58
|
+
? 'Fix the failing assertions listed above, then re-run just those test paths'
|
|
59
|
+
: 'Find the TEST-UNEXPECTED-FAIL lines in the output above — they name what broke',
|
|
60
|
+
'Read the "FIREFORGE-VERDICT:" line for the run\'s ground truth (checks, unexpected)',
|
|
61
|
+
this.logPath !== undefined
|
|
62
|
+
? `The complete raw output is at ${this.logPath} — it survives a piped/tailed terminal`
|
|
63
|
+
: 'Re-run without piping the output, so the failure lines are not cut off by "tail"',
|
|
64
|
+
]));
|
|
73
65
|
}
|
|
74
66
|
}
|
|
75
67
|
/**
|
|
@@ -26,7 +26,7 @@ export declare const ExitCode: {
|
|
|
26
26
|
/** Patch conflict resolution error */
|
|
27
27
|
readonly RESOLUTION_ERROR: 10;
|
|
28
28
|
/**
|
|
29
|
-
* An internal invariant did not hold
|
|
29
|
+
* An internal invariant did not hold: a bug in FireForge itself, not a
|
|
30
30
|
* user or environment failure. Distinct from GENERAL_ERROR because the
|
|
31
31
|
* two call for opposite responses: a GENERAL_ERROR usually means the
|
|
32
32
|
* operator must change something (fix a config, free a lock, retry), and
|
|
@@ -43,30 +43,30 @@ export declare const ExitCode: {
|
|
|
43
43
|
readonly SMOKE_EXIT_FAILURE: 12;
|
|
44
44
|
/**
|
|
45
45
|
* `fireforge run --smoke-exit` saw the browser exit with a non-clean
|
|
46
|
-
* status before the smoke window elapsed
|
|
47
|
-
* did
|
|
48
|
-
* missing profile, etc.).
|
|
46
|
+
* status before the smoke window elapsed. This is a launch-side failure
|
|
47
|
+
* that did not surface as a console error line (crash before console
|
|
48
|
+
* wiring, missing profile, etc.).
|
|
49
49
|
*/
|
|
50
50
|
readonly SMOKE_LAUNCH_FAILURE: 13;
|
|
51
51
|
/**
|
|
52
|
-
* A `fireforge test` run produced a harness result that cannot be
|
|
53
|
-
*
|
|
54
|
-
* from BUILD_ERROR because the two are opposites: a 5 is a suite
|
|
55
|
-
*
|
|
52
|
+
* A `fireforge test` run produced a harness result that cannot be
|
|
53
|
+
* trusted: `engine/` moved (or became unprobeable) while the tests ran.
|
|
54
|
+
* Distinct from BUILD_ERROR because the two are opposites: a 5 is a suite
|
|
55
|
+
* that failed, a 14 is a suite whose result was thrown away. A consumer should
|
|
56
56
|
* re-run a 14 (after settling the writers) and must not report it as red.
|
|
57
57
|
*/
|
|
58
58
|
readonly INCONCLUSIVE: 14;
|
|
59
59
|
/**
|
|
60
60
|
* A lock wait expired: the run never started, because another FireForge
|
|
61
61
|
* process held the lock for the whole budget. Distinct from GENERAL_ERROR
|
|
62
|
-
* because nothing about the request was wrong
|
|
62
|
+
* because nothing about the request was wrong. A consumer should re-queue
|
|
63
63
|
* it, with a larger `--wait-lock` budget, rather than treat it as a
|
|
64
64
|
* failure of the work it asked for.
|
|
65
65
|
*/
|
|
66
66
|
readonly LOCK_TIMEOUT: 15;
|
|
67
67
|
/**
|
|
68
68
|
* The user cancelled an interactive prompt. 130 = 128 + SIGINT, the
|
|
69
|
-
* conventional "interrupted by the user" code
|
|
69
|
+
* conventional "interrupted by the user" code, so scripts and CI can tell
|
|
70
70
|
* a deliberate cancellation apart from a real failure (GENERAL_ERROR).
|
|
71
71
|
*/
|
|
72
72
|
readonly USER_CANCELLED: 130;
|
package/dist/src/errors/codes.js
CHANGED
|
@@ -27,7 +27,7 @@ export const ExitCode = {
|
|
|
27
27
|
/** Patch conflict resolution error */
|
|
28
28
|
RESOLUTION_ERROR: 10,
|
|
29
29
|
/**
|
|
30
|
-
* An internal invariant did not hold
|
|
30
|
+
* An internal invariant did not hold: a bug in FireForge itself, not a
|
|
31
31
|
* user or environment failure. Distinct from GENERAL_ERROR because the
|
|
32
32
|
* two call for opposite responses: a GENERAL_ERROR usually means the
|
|
33
33
|
* operator must change something (fix a config, free a lock, retry), and
|
|
@@ -44,30 +44,30 @@ export const ExitCode = {
|
|
|
44
44
|
SMOKE_EXIT_FAILURE: 12,
|
|
45
45
|
/**
|
|
46
46
|
* `fireforge run --smoke-exit` saw the browser exit with a non-clean
|
|
47
|
-
* status before the smoke window elapsed
|
|
48
|
-
* did
|
|
49
|
-
* missing profile, etc.).
|
|
47
|
+
* status before the smoke window elapsed. This is a launch-side failure
|
|
48
|
+
* that did not surface as a console error line (crash before console
|
|
49
|
+
* wiring, missing profile, etc.).
|
|
50
50
|
*/
|
|
51
51
|
SMOKE_LAUNCH_FAILURE: 13,
|
|
52
52
|
/**
|
|
53
|
-
* A `fireforge test` run produced a harness result that cannot be
|
|
54
|
-
*
|
|
55
|
-
* from BUILD_ERROR because the two are opposites: a 5 is a suite
|
|
56
|
-
*
|
|
53
|
+
* A `fireforge test` run produced a harness result that cannot be
|
|
54
|
+
* trusted: `engine/` moved (or became unprobeable) while the tests ran.
|
|
55
|
+
* Distinct from BUILD_ERROR because the two are opposites: a 5 is a suite
|
|
56
|
+
* that failed, a 14 is a suite whose result was thrown away. A consumer should
|
|
57
57
|
* re-run a 14 (after settling the writers) and must not report it as red.
|
|
58
58
|
*/
|
|
59
59
|
INCONCLUSIVE: 14,
|
|
60
60
|
/**
|
|
61
61
|
* A lock wait expired: the run never started, because another FireForge
|
|
62
62
|
* process held the lock for the whole budget. Distinct from GENERAL_ERROR
|
|
63
|
-
* because nothing about the request was wrong
|
|
63
|
+
* because nothing about the request was wrong. A consumer should re-queue
|
|
64
64
|
* it, with a larger `--wait-lock` budget, rather than treat it as a
|
|
65
65
|
* failure of the work it asked for.
|
|
66
66
|
*/
|
|
67
67
|
LOCK_TIMEOUT: 15,
|
|
68
68
|
/**
|
|
69
69
|
* The user cancelled an interactive prompt. 130 = 128 + SIGINT, the
|
|
70
|
-
* conventional "interrupted by the user" code
|
|
70
|
+
* conventional "interrupted by the user" code, so scripts and CI can tell
|
|
71
71
|
* a deliberate cancellation apart from a real failure (GENERAL_ERROR).
|
|
72
72
|
*/
|
|
73
73
|
USER_CANCELLED: 130,
|
|
@@ -15,17 +15,3 @@ export declare class ConfigNotFoundError extends ConfigError {
|
|
|
15
15
|
constructor(configPath: string);
|
|
16
16
|
get userMessage(): string;
|
|
17
17
|
}
|
|
18
|
-
/**
|
|
19
|
-
* Error thrown when a required field is missing from config.
|
|
20
|
-
*/
|
|
21
|
-
export declare class MissingFieldError extends ConfigError {
|
|
22
|
-
constructor(field: string);
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Error thrown when a field has an invalid value.
|
|
26
|
-
*/
|
|
27
|
-
export declare class InvalidFieldError extends ConfigError {
|
|
28
|
-
readonly expectedType: string;
|
|
29
|
-
readonly actualValue: unknown;
|
|
30
|
-
constructor(field: string, expectedType: string, actualValue: unknown);
|
|
31
|
-
}
|