@hominis/fireforge 0.46.0 → 0.46.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +381 -498
- package/dist/bin/fireforge.d.ts +1 -1
- package/dist/bin/fireforge.js +17 -17
- package/dist/build-info.json +4 -4
- package/dist/src/cli-usage-error.d.ts +9 -9
- package/dist/src/cli-usage-error.js +12 -12
- package/dist/src/cli.d.ts +3 -2
- package/dist/src/cli.js +29 -28
- package/dist/src/commands/bootstrap-checks.js +2 -1
- package/dist/src/commands/bootstrap.js +2 -2
- package/dist/src/commands/build.js +12 -11
- package/dist/src/commands/config.js +9 -9
- package/dist/src/commands/destructive-decision.d.ts +4 -4
- package/dist/src/commands/destructive-decision.js +4 -4
- package/dist/src/commands/discard.js +5 -5
- package/dist/src/commands/doctor-check-core.d.ts +4 -4
- package/dist/src/commands/doctor-external-toolchains.js +2 -2
- package/dist/src/commands/doctor-furnace-config-sync.d.ts +2 -2
- package/dist/src/commands/doctor-furnace-config-sync.js +20 -20
- package/dist/src/commands/doctor-furnace-jar.d.ts +1 -1
- package/dist/src/commands/doctor-furnace-jar.js +1 -1
- package/dist/src/commands/doctor-furnace.js +22 -22
- package/dist/src/commands/doctor-orphaned-harness.d.ts +10 -11
- package/dist/src/commands/doctor-orphaned-harness.js +10 -11
- package/dist/src/commands/doctor-patch-manifest.d.ts +2 -1
- package/dist/src/commands/doctor-patch-manifest.js +7 -6
- package/dist/src/commands/doctor-post-rebase-audit.js +2 -2
- package/dist/src/commands/doctor-source-pin.d.ts +12 -12
- package/dist/src/commands/doctor-source-pin.js +14 -14
- package/dist/src/commands/doctor-working-tree.d.ts +3 -3
- package/dist/src/commands/doctor-working-tree.js +3 -3
- package/dist/src/commands/doctor.d.ts +2 -2
- package/dist/src/commands/doctor.js +9 -9
- package/dist/src/commands/download.js +15 -13
- package/dist/src/commands/export-all.js +8 -8
- package/dist/src/commands/export-flow.d.ts +5 -5
- package/dist/src/commands/export-flow.js +14 -14
- package/dist/src/commands/export-placement-conflicts.d.ts +3 -3
- package/dist/src/commands/export-placement-conflicts.js +9 -9
- package/dist/src/commands/export-placement-gate.d.ts +2 -2
- package/dist/src/commands/export-placement-gate.js +5 -5
- package/dist/src/commands/export-placement-policy.d.ts +1 -1
- package/dist/src/commands/export-placement-policy.js +1 -1
- package/dist/src/commands/export-shared.d.ts +10 -10
- package/dist/src/commands/export-shared.js +13 -13
- package/dist/src/commands/export.js +4 -4
- package/dist/src/commands/furnace/apply.js +16 -16
- package/dist/src/commands/furnace/chrome-doc-remove.d.ts +1 -1
- package/dist/src/commands/furnace/chrome-doc-remove.js +1 -1
- package/dist/src/commands/furnace/chrome-doc-templates.d.ts +14 -14
- package/dist/src/commands/furnace/chrome-doc-templates.js +17 -17
- package/dist/src/commands/furnace/chrome-doc-tests.d.ts +2 -2
- package/dist/src/commands/furnace/chrome-doc-tests.js +4 -4
- package/dist/src/commands/furnace/chrome-doc.d.ts +8 -8
- package/dist/src/commands/furnace/chrome-doc.js +18 -18
- package/dist/src/commands/furnace/create-browser-test.d.ts +1 -1
- package/dist/src/commands/furnace/create-browser-test.js +4 -4
- package/dist/src/commands/furnace/create-dry-run.d.ts +4 -4
- package/dist/src/commands/furnace/create-dry-run.js +4 -4
- package/dist/src/commands/furnace/create-features.d.ts +2 -2
- package/dist/src/commands/furnace/create-features.js +2 -2
- package/dist/src/commands/furnace/create-mochikit.d.ts +4 -4
- package/dist/src/commands/furnace/create-mochikit.js +7 -7
- package/dist/src/commands/furnace/create-templates.d.ts +14 -14
- package/dist/src/commands/furnace/create-templates.js +18 -18
- package/dist/src/commands/furnace/create-xpcshell.d.ts +5 -5
- package/dist/src/commands/furnace/create-xpcshell.js +8 -8
- package/dist/src/commands/furnace/create.d.ts +1 -1
- package/dist/src/commands/furnace/create.js +10 -10
- package/dist/src/commands/furnace/deploy.js +4 -4
- package/dist/src/commands/furnace/diff.js +7 -7
- package/dist/src/commands/furnace/index.js +1 -1
- package/dist/src/commands/furnace/init.js +15 -15
- package/dist/src/commands/furnace/list.js +2 -2
- package/dist/src/commands/furnace/override.d.ts +1 -1
- package/dist/src/commands/furnace/override.js +15 -15
- package/dist/src/commands/furnace/preview.js +17 -17
- package/dist/src/commands/furnace/refresh.js +6 -6
- package/dist/src/commands/furnace/remove-mutations.d.ts +3 -3
- package/dist/src/commands/furnace/remove-mutations.js +19 -18
- package/dist/src/commands/furnace/remove-state.d.ts +1 -1
- package/dist/src/commands/furnace/remove-state.js +1 -1
- package/dist/src/commands/furnace/remove.js +2 -2
- package/dist/src/commands/furnace/rename-browser-test.js +9 -8
- package/dist/src/commands/furnace/rename-xpcshell.d.ts +2 -2
- package/dist/src/commands/furnace/rename-xpcshell.js +3 -3
- package/dist/src/commands/furnace/rename.js +9 -9
- package/dist/src/commands/furnace/scan.js +3 -3
- package/dist/src/commands/furnace/status.js +7 -7
- package/dist/src/commands/furnace/sync.js +6 -6
- package/dist/src/commands/furnace/test-file-name.d.ts +2 -2
- package/dist/src/commands/furnace/test-file-name.js +2 -2
- package/dist/src/commands/furnace/validate.js +11 -12
- package/dist/src/commands/import.js +20 -20
- package/dist/src/commands/lint-per-patch.js +8 -8
- package/dist/src/commands/lint-per-run-checkjs.d.ts +12 -13
- package/dist/src/commands/lint-per-run-checkjs.js +14 -15
- package/dist/src/commands/lint-report.d.ts +3 -3
- package/dist/src/commands/lint-report.js +4 -4
- package/dist/src/commands/lint.d.ts +3 -3
- package/dist/src/commands/lint.js +35 -35
- package/dist/src/commands/manifest.d.ts +4 -4
- package/dist/src/commands/package.js +2 -2
- package/dist/src/commands/patch/compact.d.ts +2 -2
- package/dist/src/commands/patch/compact.js +8 -8
- package/dist/src/commands/patch/delete.d.ts +1 -1
- package/dist/src/commands/patch/delete.js +8 -8
- package/dist/src/commands/patch/lint-ignore.d.ts +3 -4
- package/dist/src/commands/patch/lint-ignore.js +14 -15
- package/dist/src/commands/patch/move-files-create.d.ts +2 -2
- package/dist/src/commands/patch/move-files-create.js +5 -5
- package/dist/src/commands/patch/move-files-into.d.ts +2 -2
- package/dist/src/commands/patch/move-files-into.js +3 -3
- package/dist/src/commands/patch/move-files.js +1 -1
- package/dist/src/commands/patch/patch-context.d.ts +1 -1
- package/dist/src/commands/patch/rename.d.ts +4 -4
- package/dist/src/commands/patch/rename.js +8 -8
- package/dist/src/commands/patch/reorder.js +10 -10
- package/dist/src/commands/patch/split-plan.d.ts +3 -3
- package/dist/src/commands/patch/split-plan.js +6 -5
- package/dist/src/commands/patch/split.d.ts +2 -2
- package/dist/src/commands/patch/split.js +5 -5
- package/dist/src/commands/patch/staged-dependency-validate.d.ts +1 -1
- package/dist/src/commands/patch/staged-dependency-validate.js +3 -3
- package/dist/src/commands/patch/staged-dependency.d.ts +1 -1
- package/dist/src/commands/patch/staged-dependency.js +6 -6
- package/dist/src/commands/patch/tier.d.ts +2 -2
- package/dist/src/commands/patch/tier.js +5 -5
- package/dist/src/commands/patch-rename-map.d.ts +1 -1
- package/dist/src/commands/patch-rename-map.js +1 -1
- package/dist/src/commands/pending-resolution.d.ts +5 -5
- package/dist/src/commands/pending-resolution.js +5 -5
- package/dist/src/commands/re-export-adjacent.d.ts +3 -3
- package/dist/src/commands/re-export-adjacent.js +8 -8
- package/dist/src/commands/re-export-bulk-scan.d.ts +3 -3
- package/dist/src/commands/re-export-bulk-scan.js +17 -17
- package/dist/src/commands/re-export-drift.d.ts +10 -10
- package/dist/src/commands/re-export-drift.js +29 -29
- package/dist/src/commands/re-export-files.js +14 -15
- package/dist/src/commands/re-export-lint.d.ts +26 -26
- package/dist/src/commands/re-export-lint.js +27 -27
- package/dist/src/commands/re-export-options.d.ts +1 -1
- package/dist/src/commands/re-export-options.js +1 -1
- package/dist/src/commands/re-export-register.d.ts +1 -1
- package/dist/src/commands/re-export-register.js +1 -1
- package/dist/src/commands/re-export-scan.d.ts +1 -1
- package/dist/src/commands/re-export-scan.js +7 -7
- package/dist/src/commands/re-export-single.d.ts +1 -1
- package/dist/src/commands/re-export-single.js +20 -20
- package/dist/src/commands/re-export.js +7 -6
- package/dist/src/commands/rebase/abort.js +6 -6
- package/dist/src/commands/rebase/continue.js +8 -7
- package/dist/src/commands/rebase/index.d.ts +1 -1
- package/dist/src/commands/rebase/index.js +3 -3
- package/dist/src/commands/rebase/patch-loop.js +18 -17
- package/dist/src/commands/register.js +5 -5
- package/dist/src/commands/reset.js +1 -1
- package/dist/src/commands/resolve.d.ts +2 -2
- package/dist/src/commands/resolve.js +3 -3
- package/dist/src/commands/run.js +26 -26
- package/dist/src/commands/setup-support.js +4 -4
- package/dist/src/commands/setup.js +1 -1
- package/dist/src/commands/source.js +1 -1
- package/dist/src/commands/status-check.d.ts +3 -3
- package/dist/src/commands/status-check.js +4 -4
- package/dist/src/commands/status-json.d.ts +14 -13
- package/dist/src/commands/status-json.js +9 -8
- package/dist/src/commands/status-output.d.ts +3 -3
- package/dist/src/commands/status-output.js +3 -3
- package/dist/src/commands/status-ownership.d.ts +3 -3
- package/dist/src/commands/status-ownership.js +3 -3
- package/dist/src/commands/status.js +22 -22
- package/dist/src/commands/test-build-phase.d.ts +1 -1
- package/dist/src/commands/test-build-phase.js +17 -17
- package/dist/src/commands/test-diagnose.d.ts +1 -1
- package/dist/src/commands/test-diagnose.js +20 -20
- package/dist/src/commands/test-modes.d.ts +2 -2
- package/dist/src/commands/test-modes.js +4 -4
- package/dist/src/commands/test-run.d.ts +11 -11
- package/dist/src/commands/test-run.js +15 -15
- package/dist/src/commands/test-stale-gate.d.ts +12 -12
- package/dist/src/commands/test-stale-gate.js +13 -13
- package/dist/src/commands/test-verdict.d.ts +6 -6
- package/dist/src/commands/test-verdict.js +11 -11
- package/dist/src/commands/test.d.ts +3 -3
- package/dist/src/commands/test.js +36 -36
- package/dist/src/commands/token-coverage.js +3 -3
- package/dist/src/commands/token-list.js +5 -5
- package/dist/src/commands/token.js +9 -9
- package/dist/src/commands/tree.js +19 -19
- package/dist/src/commands/typecheck.d.ts +6 -6
- package/dist/src/commands/typecheck.js +7 -7
- package/dist/src/commands/verify.d.ts +3 -3
- package/dist/src/commands/verify.js +10 -10
- package/dist/src/commands/watch.js +11 -11
- package/dist/src/commands/wire.js +13 -13
- package/dist/src/core/ast-utils.d.ts +7 -7
- package/dist/src/core/ast-utils.js +8 -8
- package/dist/src/core/branding.d.ts +5 -5
- package/dist/src/core/branding.js +3 -3
- package/dist/src/core/browser-wire.d.ts +1 -1
- package/dist/src/core/browser-wire.js +4 -4
- package/dist/src/core/build-audit-platform.d.ts +6 -6
- package/dist/src/core/build-audit-platform.js +26 -26
- package/dist/src/core/build-audit-registration.d.ts +5 -5
- package/dist/src/core/build-audit-registration.js +7 -7
- package/dist/src/core/build-audit-resolve.d.ts +5 -5
- package/dist/src/core/build-audit-resolve.js +6 -6
- package/dist/src/core/build-audit-skip.d.ts +8 -8
- package/dist/src/core/build-audit-skip.js +12 -12
- package/dist/src/core/build-audit-transforms.d.ts +2 -2
- package/dist/src/core/build-audit-transforms.js +3 -3
- package/dist/src/core/build-audit.d.ts +8 -8
- package/dist/src/core/build-audit.js +39 -37
- package/dist/src/core/build-baseline-types.d.ts +19 -18
- package/dist/src/core/build-baseline-types.js +1 -1
- package/dist/src/core/build-baseline.d.ts +8 -8
- package/dist/src/core/build-baseline.js +14 -14
- package/dist/src/core/build-jar-escalation.d.ts +8 -8
- package/dist/src/core/build-jar-escalation.js +15 -15
- package/dist/src/core/build-overwrite-guard.d.ts +4 -4
- package/dist/src/core/build-overwrite-guard.js +13 -13
- package/dist/src/core/build-prepare.d.ts +4 -4
- package/dist/src/core/build-prepare.js +16 -15
- package/dist/src/core/config-mutate.js +4 -4
- package/dist/src/core/config-state.js +2 -2
- package/dist/src/core/config-validate-build-audit.js +3 -3
- package/dist/src/core/config-validate-file-size.d.ts +1 -1
- package/dist/src/core/config-validate-file-size.js +2 -2
- package/dist/src/core/config-validate.js +8 -9
- package/dist/src/core/config.d.ts +10 -10
- package/dist/src/core/config.js +10 -10
- package/dist/src/core/coverage-extend.d.ts +16 -16
- package/dist/src/core/coverage-extend.js +16 -16
- package/dist/src/core/destructive.d.ts +14 -14
- package/dist/src/core/destructive.js +9 -9
- package/dist/src/core/diff-hunks.d.ts +2 -2
- package/dist/src/core/diff-hunks.js +7 -7
- package/dist/src/core/discard-baseline.d.ts +10 -10
- package/dist/src/core/discard-baseline.js +15 -16
- package/dist/src/core/display-state.d.ts +11 -11
- package/dist/src/core/display-state.js +12 -12
- package/dist/src/core/engine-changes.d.ts +2 -2
- package/dist/src/core/engine-changes.js +2 -2
- package/dist/src/core/engine-precondition.d.ts +4 -4
- package/dist/src/core/engine-precondition.js +2 -2
- package/dist/src/core/engine-session-lock.d.ts +18 -18
- package/dist/src/core/engine-session-lock.js +37 -37
- package/dist/src/core/export-moved-code-shape.d.ts +7 -7
- package/dist/src/core/export-moved-code-shape.js +8 -8
- package/dist/src/core/file-lock-owner.d.ts +11 -11
- package/dist/src/core/file-lock-owner.js +18 -18
- package/dist/src/core/file-lock.d.ts +12 -12
- package/dist/src/core/file-lock.js +52 -39
- package/dist/src/core/firefox-cache.d.ts +1 -1
- package/dist/src/core/firefox-cache.js +10 -10
- package/dist/src/core/firefox-download.d.ts +3 -3
- package/dist/src/core/firefox-download.js +6 -6
- package/dist/src/core/firefox-extract.d.ts +2 -2
- package/dist/src/core/firefox-extract.js +13 -13
- package/dist/src/core/firefox.d.ts +5 -5
- package/dist/src/core/firefox.js +8 -8
- package/dist/src/core/furnace-apply-dry-run.js +1 -1
- package/dist/src/core/furnace-apply-ftl.d.ts +5 -5
- package/dist/src/core/furnace-apply-ftl.js +8 -8
- package/dist/src/core/furnace-apply-helpers.d.ts +9 -9
- package/dist/src/core/furnace-apply-helpers.js +21 -21
- package/dist/src/core/furnace-apply-output.js +1 -1
- package/dist/src/core/furnace-apply-overwrite-warn.d.ts +9 -9
- package/dist/src/core/furnace-apply-overwrite-warn.js +9 -9
- package/dist/src/core/furnace-apply-undeploy-actions.d.ts +1 -1
- package/dist/src/core/furnace-apply-undeploy-actions.js +1 -1
- package/dist/src/core/furnace-apply.d.ts +3 -3
- package/dist/src/core/furnace-apply.js +22 -21
- package/dist/src/core/furnace-checksum-utils.d.ts +5 -5
- package/dist/src/core/furnace-checksum-utils.js +5 -5
- package/dist/src/core/furnace-config-custom.d.ts +1 -1
- package/dist/src/core/furnace-config-custom.js +2 -2
- package/dist/src/core/furnace-config-order.js +1 -1
- package/dist/src/core/furnace-config-tokens.d.ts +3 -3
- package/dist/src/core/furnace-config-tokens.js +3 -3
- package/dist/src/core/furnace-config-validate.js +2 -2
- package/dist/src/core/furnace-config.d.ts +4 -4
- package/dist/src/core/furnace-config.js +18 -18
- package/dist/src/core/furnace-constants.d.ts +6 -6
- package/dist/src/core/furnace-constants.js +6 -6
- package/dist/src/core/furnace-css-fragments.d.ts +6 -6
- package/dist/src/core/furnace-css-fragments.js +11 -11
- package/dist/src/core/furnace-dir-entry.d.ts +1 -1
- package/dist/src/core/furnace-dir-entry.js +1 -1
- package/dist/src/core/furnace-jsconfig.d.ts +7 -7
- package/dist/src/core/furnace-jsconfig.js +22 -20
- package/dist/src/core/furnace-operation.d.ts +21 -20
- package/dist/src/core/furnace-operation.js +36 -34
- package/dist/src/core/furnace-precondition.d.ts +10 -10
- package/dist/src/core/furnace-precondition.js +8 -8
- package/dist/src/core/furnace-refresh.js +2 -2
- package/dist/src/core/furnace-registration-ast.d.ts +2 -2
- package/dist/src/core/furnace-registration-ast.js +9 -9
- package/dist/src/core/furnace-registration-remove.d.ts +4 -4
- package/dist/src/core/furnace-registration-remove.js +6 -6
- package/dist/src/core/furnace-registration-validate.d.ts +2 -2
- package/dist/src/core/furnace-registration-validate.js +2 -2
- package/dist/src/core/furnace-registration.d.ts +5 -5
- package/dist/src/core/furnace-registration.js +7 -7
- package/dist/src/core/furnace-rollback.d.ts +1 -1
- package/dist/src/core/furnace-rollback.js +5 -5
- package/dist/src/core/furnace-stale-export.d.ts +17 -16
- package/dist/src/core/furnace-stale-export.js +16 -15
- package/dist/src/core/furnace-staleness.d.ts +2 -2
- package/dist/src/core/furnace-staleness.js +2 -2
- package/dist/src/core/furnace-state-persist.d.ts +10 -10
- package/dist/src/core/furnace-state-persist.js +10 -10
- package/dist/src/core/furnace-step-errors.d.ts +6 -6
- package/dist/src/core/furnace-step-errors.js +6 -6
- package/dist/src/core/furnace-validate-accessibility.js +14 -14
- package/dist/src/core/furnace-validate-compatibility.js +9 -9
- package/dist/src/core/furnace-validate-registration.d.ts +2 -2
- package/dist/src/core/furnace-validate-registration.js +13 -13
- package/dist/src/core/furnace-validate-structure.d.ts +1 -1
- package/dist/src/core/furnace-validate-structure.js +4 -4
- package/dist/src/core/furnace-validate.js +9 -9
- package/dist/src/core/furnace-version-drift.d.ts +5 -5
- package/dist/src/core/furnace-version-drift.js +5 -5
- package/dist/src/core/git-base.d.ts +4 -4
- package/dist/src/core/git-base.js +9 -9
- package/dist/src/core/git-diff-new-file.d.ts +4 -4
- package/dist/src/core/git-diff-new-file.js +8 -8
- package/dist/src/core/git-diff.d.ts +4 -4
- package/dist/src/core/git-diff.js +35 -34
- package/dist/src/core/git-file-ops.d.ts +6 -6
- package/dist/src/core/git-file-ops.js +7 -7
- package/dist/src/core/git-readonly-index.d.ts +12 -12
- package/dist/src/core/git-readonly-index.js +12 -12
- package/dist/src/core/git-status.d.ts +4 -4
- package/dist/src/core/git-status.js +4 -4
- package/dist/src/core/git.d.ts +3 -3
- package/dist/src/core/git.js +14 -14
- package/dist/src/core/harness-orphans.d.ts +17 -17
- package/dist/src/core/harness-orphans.js +20 -20
- package/dist/src/core/history-log.d.ts +3 -3
- package/dist/src/core/history-log.js +3 -3
- package/dist/src/core/license-headers.d.ts +19 -18
- package/dist/src/core/license-headers.js +29 -28
- package/dist/src/core/mach-build-artifacts.d.ts +21 -21
- package/dist/src/core/mach-build-artifacts.js +23 -23
- package/dist/src/core/mach-error-hints.d.ts +5 -5
- package/dist/src/core/mach-error-hints.js +13 -13
- package/dist/src/core/mach-known-noise-filter.d.ts +41 -38
- package/dist/src/core/mach-known-noise-filter.js +53 -50
- package/dist/src/core/mach-mozconfig.d.ts +6 -6
- package/dist/src/core/mach-mozconfig.js +15 -15
- package/dist/src/core/mach-python.d.ts +2 -1
- package/dist/src/core/mach-python.js +4 -3
- package/dist/src/core/mach-resource-shim.d.ts +12 -12
- package/dist/src/core/mach-resource-shim.js +20 -20
- package/dist/src/core/mach.d.ts +23 -23
- package/dist/src/core/mach.js +36 -36
- package/dist/src/core/marionette-port.d.ts +15 -13
- package/dist/src/core/marionette-port.js +34 -31
- package/dist/src/core/marionette-preflight.d.ts +6 -6
- package/dist/src/core/marionette-preflight.js +23 -23
- package/dist/src/core/markdown-table.d.ts +9 -9
- package/dist/src/core/markdown-table.js +14 -14
- package/dist/src/core/mochitest-server-port.d.ts +8 -8
- package/dist/src/core/mochitest-server-port.js +14 -14
- package/dist/src/core/module-resolution-preflight.d.ts +8 -8
- package/dist/src/core/module-resolution-preflight.js +11 -11
- package/dist/src/core/moz-manifest-helpers.d.ts +7 -7
- package/dist/src/core/moz-manifest-helpers.js +7 -7
- package/dist/src/core/moz-manifest-register.d.ts +1 -1
- package/dist/src/core/moz-manifest-register.js +2 -2
- package/dist/src/core/moz-manifest-rules.js +11 -11
- package/dist/src/core/moz-manifest-tokenizers.js +1 -1
- package/dist/src/core/ownership-table.d.ts +5 -5
- package/dist/src/core/ownership-table.js +7 -7
- package/dist/src/core/parser-fallback.d.ts +3 -3
- package/dist/src/core/parser-fallback.js +3 -3
- package/dist/src/core/patch-apply-fuzz.d.ts +5 -5
- package/dist/src/core/patch-apply-fuzz.js +9 -9
- package/dist/src/core/patch-apply.d.ts +9 -9
- package/dist/src/core/patch-apply.js +30 -30
- package/dist/src/core/patch-export-update.d.ts +4 -4
- package/dist/src/core/patch-export-update.js +3 -3
- package/dist/src/core/patch-export.d.ts +10 -10
- package/dist/src/core/patch-export.js +13 -13
- package/dist/src/core/patch-identifier-suggest.d.ts +1 -1
- package/dist/src/core/patch-identifier-suggest.js +4 -4
- package/dist/src/core/patch-lint-binary.d.ts +7 -7
- package/dist/src/core/patch-lint-cache.d.ts +2 -2
- package/dist/src/core/patch-lint-cache.js +13 -13
- package/dist/src/core/patch-lint-checkjs.d.ts +26 -26
- package/dist/src/core/patch-lint-checkjs.js +42 -41
- package/dist/src/core/patch-lint-chrome-jsdoc.d.ts +8 -9
- package/dist/src/core/patch-lint-chrome-jsdoc.js +10 -11
- package/dist/src/core/patch-lint-creators.d.ts +3 -3
- package/dist/src/core/patch-lint-creators.js +3 -3
- package/dist/src/core/patch-lint-cross.d.ts +13 -13
- package/dist/src/core/patch-lint-cross.js +21 -21
- package/dist/src/core/patch-lint-css.d.ts +1 -1
- package/dist/src/core/patch-lint-css.js +5 -5
- package/dist/src/core/patch-lint-diff-tag.d.ts +5 -5
- package/dist/src/core/patch-lint-diff-tag.js +5 -5
- package/dist/src/core/patch-lint-diff.d.ts +4 -4
- package/dist/src/core/patch-lint-diff.js +4 -4
- package/dist/src/core/patch-lint-file-size.d.ts +3 -3
- package/dist/src/core/patch-lint-file-size.js +3 -3
- package/dist/src/core/patch-lint-forward-registration.d.ts +4 -4
- package/dist/src/core/patch-lint-forward-registration.js +12 -12
- package/dist/src/core/patch-lint-jsdoc.d.ts +2 -2
- package/dist/src/core/patch-lint-jsdoc.js +11 -11
- package/dist/src/core/patch-lint-module-registration.d.ts +1 -1
- package/dist/src/core/patch-lint-module-registration.js +1 -1
- package/dist/src/core/patch-lint-mozbuild.d.ts +1 -1
- package/dist/src/core/patch-lint-mozbuild.js +10 -10
- package/dist/src/core/patch-lint-observer.d.ts +3 -3
- package/dist/src/core/patch-lint-observer.js +7 -7
- package/dist/src/core/patch-lint-ownership.d.ts +6 -6
- package/dist/src/core/patch-lint-ownership.js +6 -6
- package/dist/src/core/patch-lint-prettier.d.ts +6 -6
- package/dist/src/core/patch-lint-prettier.js +6 -6
- package/dist/src/core/patch-lint-queue-types.d.ts +1 -1
- package/dist/src/core/patch-lint-queue-types.js +1 -1
- package/dist/src/core/patch-lint-staged-registration.d.ts +2 -2
- package/dist/src/core/patch-lint-staged-registration.js +6 -6
- package/dist/src/core/patch-lint-unmanaged-companion.d.ts +23 -23
- package/dist/src/core/patch-lint-unmanaged-companion.js +26 -26
- package/dist/src/core/patch-lint.d.ts +27 -26
- package/dist/src/core/patch-lint.js +48 -46
- package/dist/src/core/patch-lock.d.ts +1 -1
- package/dist/src/core/patch-lock.js +8 -8
- package/dist/src/core/patch-manifest-consistency.d.ts +7 -7
- package/dist/src/core/patch-manifest-consistency.js +16 -17
- package/dist/src/core/patch-manifest-files-affected.d.ts +1 -1
- package/dist/src/core/patch-manifest-files-affected.js +3 -3
- package/dist/src/core/patch-manifest-io.d.ts +14 -14
- package/dist/src/core/patch-manifest-io.js +27 -27
- package/dist/src/core/patch-manifest-query.d.ts +1 -1
- package/dist/src/core/patch-manifest-query.js +4 -4
- package/dist/src/core/patch-manifest-resolve.d.ts +5 -5
- package/dist/src/core/patch-manifest-resolve.js +7 -7
- package/dist/src/core/patch-manifest-validate.js +3 -3
- package/dist/src/core/patch-manifest.d.ts +2 -2
- package/dist/src/core/patch-manifest.js +2 -2
- package/dist/src/core/patch-parse.d.ts +14 -14
- package/dist/src/core/patch-parse.js +16 -16
- package/dist/src/core/patch-registration-refs.d.ts +4 -4
- package/dist/src/core/patch-registration-refs.js +7 -7
- package/dist/src/core/patch-transform.d.ts +8 -8
- package/dist/src/core/patch-transform.js +13 -13
- package/dist/src/core/process-cpu-time.d.ts +1 -1
- package/dist/src/core/process-cpu-time.js +5 -5
- package/dist/src/core/rebase-session.d.ts +7 -7
- package/dist/src/core/rebase-session.js +8 -8
- package/dist/src/core/register-result.d.ts +1 -1
- package/dist/src/core/register-result.js +1 -1
- package/dist/src/core/register-scaffold.d.ts +2 -2
- package/dist/src/core/register-scaffold.js +3 -3
- package/dist/src/core/register-shared-css.d.ts +3 -3
- package/dist/src/core/register-shared-css.js +4 -4
- package/dist/src/core/register-xpcshell-test.d.ts +2 -2
- package/dist/src/core/register-xpcshell-test.js +2 -2
- package/dist/src/core/run-log-redact.d.ts +12 -12
- package/dist/src/core/run-log-redact.js +16 -16
- package/dist/src/core/run-log.d.ts +9 -9
- package/dist/src/core/run-log.js +14 -14
- package/dist/src/core/shared-ftl.d.ts +2 -2
- package/dist/src/core/shared-ftl.js +6 -6
- package/dist/src/core/signal-critical.d.ts +2 -2
- package/dist/src/core/signal-critical.js +2 -2
- package/dist/src/core/smoke-patterns.d.ts +5 -5
- package/dist/src/core/smoke-patterns.js +9 -9
- package/dist/src/core/state-file.d.ts +3 -3
- package/dist/src/core/status-binary.d.ts +8 -8
- package/dist/src/core/status-binary.js +12 -12
- package/dist/src/core/status-classify.d.ts +17 -17
- package/dist/src/core/status-classify.js +11 -11
- package/dist/src/core/test-changed-prefs.d.ts +12 -12
- package/dist/src/core/test-changed-prefs.js +15 -15
- package/dist/src/core/test-harness-crash.d.ts +39 -39
- package/dist/src/core/test-harness-crash.js +67 -67
- package/dist/src/core/test-harness-output.d.ts +7 -7
- package/dist/src/core/test-harness-output.js +7 -7
- package/dist/src/core/test-harness-verdict-notes.d.ts +13 -14
- package/dist/src/core/test-harness-verdict-notes.js +4 -4
- package/dist/src/core/test-path-scope.d.ts +8 -8
- package/dist/src/core/test-path-scope.js +11 -11
- package/dist/src/core/test-stale-check.d.ts +22 -21
- package/dist/src/core/test-stale-check.js +29 -28
- package/dist/src/core/test-stale-symlink.d.ts +1 -1
- package/dist/src/core/test-stale-symlink.js +1 -1
- package/dist/src/core/test-stall-triage.d.ts +9 -9
- package/dist/src/core/test-stall-triage.js +22 -22
- package/dist/src/core/token-category.d.ts +4 -4
- package/dist/src/core/token-category.js +13 -12
- package/dist/src/core/token-coverage.js +4 -5
- package/dist/src/core/token-dark-mode.d.ts +17 -9
- package/dist/src/core/token-dark-mode.js +41 -28
- package/dist/src/core/token-docs.d.ts +1 -1
- package/dist/src/core/token-inventory.d.ts +6 -6
- package/dist/src/core/token-inventory.js +7 -7
- package/dist/src/core/token-manager.d.ts +3 -3
- package/dist/src/core/token-manager.js +21 -21
- package/dist/src/core/token-scaffold.d.ts +4 -4
- package/dist/src/core/token-scaffold.js +4 -4
- package/dist/src/core/token-variant.d.ts +14 -14
- package/dist/src/core/token-variant.js +32 -32
- package/dist/src/core/toolchain-preflight.d.ts +15 -15
- package/dist/src/core/toolchain-preflight.js +22 -22
- package/dist/src/core/tree-cow.d.ts +3 -3
- package/dist/src/core/tree-cow.js +6 -6
- package/dist/src/core/tree-guard.d.ts +3 -3
- package/dist/src/core/tree-guard.js +23 -23
- package/dist/src/core/tree-store.d.ts +15 -15
- package/dist/src/core/tree-store.js +35 -33
- package/dist/src/core/typecheck-shim.d.ts +16 -15
- package/dist/src/core/typecheck-shim.js +26 -25
- package/dist/src/core/typecheck.d.ts +12 -12
- package/dist/src/core/typecheck.js +31 -31
- package/dist/src/core/wire-destroy.d.ts +2 -2
- package/dist/src/core/wire-destroy.js +5 -5
- package/dist/src/core/wire-dom-fragment.d.ts +3 -3
- package/dist/src/core/wire-dom-fragment.js +6 -6
- package/dist/src/core/wire-init.d.ts +2 -2
- package/dist/src/core/wire-init.js +7 -7
- package/dist/src/core/wire-subscript.d.ts +1 -1
- package/dist/src/core/wire-subscript.js +3 -3
- package/dist/src/core/wire-utils.d.ts +9 -9
- package/dist/src/core/wire-utils.js +11 -11
- package/dist/src/core/xpcshell-appdir.d.ts +20 -20
- package/dist/src/core/xpcshell-appdir.js +26 -26
- package/dist/src/core/xpcshell-profile-dir.d.ts +3 -3
- package/dist/src/core/xpcshell-profile-dir.js +7 -7
- package/dist/src/errors/base.d.ts +22 -21
- package/dist/src/errors/base.js +22 -21
- package/dist/src/errors/build.d.ts +6 -6
- package/dist/src/errors/build.js +6 -6
- package/dist/src/errors/codes.d.ts +10 -10
- package/dist/src/errors/codes.js +10 -10
- package/dist/src/errors/furnace.d.ts +2 -2
- package/dist/src/errors/git.d.ts +1 -1
- package/dist/src/errors/git.js +1 -1
- package/dist/src/errors/patch.d.ts +3 -3
- package/dist/src/errors/patch.js +3 -3
- package/dist/src/errors/rebase.d.ts +1 -1
- package/dist/src/errors/rebase.js +1 -1
- package/dist/src/errors/run.d.ts +1 -1
- package/dist/src/errors/run.js +1 -1
- package/dist/src/index.d.ts +4 -4
- package/dist/src/index.js +4 -4
- package/dist/src/types/commands/options.d.ts +86 -85
- package/dist/src/types/commands/patches.d.ts +19 -19
- package/dist/src/types/commands/project.d.ts +3 -3
- package/dist/src/types/config.d.ts +24 -23
- package/dist/src/types/furnace.d.ts +17 -17
- package/dist/src/types/json.d.ts +3 -3
- package/dist/src/types/json.js +2 -2
- package/dist/src/types/typecheck.d.ts +3 -3
- package/dist/src/utils/assert.d.ts +1 -1
- package/dist/src/utils/assert.js +6 -6
- package/dist/src/utils/build-info.d.ts +5 -5
- package/dist/src/utils/build-info.js +6 -6
- package/dist/src/utils/child-env.d.ts +5 -5
- package/dist/src/utils/child-env.js +5 -5
- package/dist/src/utils/concurrency.d.ts +2 -2
- package/dist/src/utils/concurrency.js +2 -2
- package/dist/src/utils/elapsed.js +1 -1
- package/dist/src/utils/errors.d.ts +8 -8
- package/dist/src/utils/errors.js +8 -8
- package/dist/src/utils/fs.d.ts +1 -1
- package/dist/src/utils/fs.js +8 -8
- package/dist/src/utils/line-dispatch.d.ts +3 -3
- package/dist/src/utils/line-dispatch.js +5 -5
- package/dist/src/utils/logger.d.ts +4 -4
- package/dist/src/utils/logger.js +11 -11
- package/dist/src/utils/machine-output.js +2 -2
- package/dist/src/utils/options.d.ts +13 -13
- package/dist/src/utils/options.js +20 -20
- package/dist/src/utils/package-root.js +2 -2
- package/dist/src/utils/paths.d.ts +4 -4
- package/dist/src/utils/paths.js +4 -4
- package/dist/src/utils/process-group.d.ts +8 -8
- package/dist/src/utils/process-group.js +19 -19
- package/dist/src/utils/process.d.ts +34 -33
- package/dist/src/utils/process.js +20 -19
- package/dist/src/utils/ps-duration.d.ts +4 -4
- package/dist/src/utils/ps-duration.js +6 -6
- package/dist/src/utils/regex.d.ts +4 -4
- package/dist/src/utils/regex.js +7 -7
- package/dist/src/utils/sleep.d.ts +7 -7
- package/dist/src/utils/sleep.js +7 -7
- package/dist/src/utils/stdio-drain.d.ts +7 -7
- package/dist/src/utils/stdio-drain.js +8 -8
- package/dist/src/utils/validation.d.ts +11 -12
- package/dist/src/utils/validation.js +20 -21
- package/docs/README.md +2 -2
- package/docs/configuration.md +120 -114
- package/docs/exit-codes.md +63 -58
- package/docs/furnace.md +20 -19
- package/docs/lifecycle-invariants.md +412 -251
- package/docs/machine-output.md +33 -32
- package/docs/patch-workflow.md +48 -45
- package/docs/run-logs.md +62 -58
- package/docs/testing.md +101 -101
- package/docs/verification-trees.md +23 -22
- package/package.json +2 -2
|
@@ -4,34 +4,34 @@
|
|
|
4
4
|
* into the recorded `testPackagingCoverage` instead of replacing it, under
|
|
5
5
|
* an anchor guard.
|
|
6
6
|
*
|
|
7
|
-
* Coverage
|
|
7
|
+
* Coverage replaces by default for a reason documented in
|
|
8
8
|
* `build-baseline-types.ts`: every baseline write refreshes
|
|
9
|
-
* `packageableFingerprints` for
|
|
9
|
+
* `packageableFingerprints` for all dirty packageable paths, so a blind
|
|
10
10
|
* union would whitewash an earlier scope's edited fixtures while
|
|
11
11
|
* `obj-*`/`_tests/` still holds that scope's stale staging. Extending is
|
|
12
|
-
* honest only while everything the
|
|
12
|
+
* honest only while everything the previous record vouched for is still
|
|
13
13
|
* true, which is what {@link checkExtendCoverageAnchor} and
|
|
14
14
|
* {@link checkExtendMozconfigAnchor} verify:
|
|
15
15
|
*
|
|
16
|
-
* 1. engine HEAD is unchanged
|
|
16
|
+
* 1. engine HEAD is unchanged, so every committed edit is excluded.
|
|
17
17
|
* 2. every path the previous baseline fingerprinted still hashes to the
|
|
18
18
|
* recorded digest, so the earlier scope's staging inputs are
|
|
19
|
-
* byte-identical. Files that became dirty
|
|
19
|
+
* byte-identical. Files that became dirty since that build are fine:
|
|
20
20
|
* the current whole-tree `mach build faster` repackages `dist/` and
|
|
21
|
-
* vouches for them
|
|
21
|
+
* vouches for them.
|
|
22
22
|
* 3. the generated `engine/mozconfig` is unchanged. Engine HEAD does not
|
|
23
|
-
* cover this
|
|
23
|
+
* cover this: the mozconfig is regenerated from project-side
|
|
24
24
|
* `configs/*.mozconfig` templates plus `fireforge.json` on every build,
|
|
25
25
|
* so two builds at the same engine SHA can configure differently.
|
|
26
26
|
*
|
|
27
|
-
* Every failure refuses fail-closed
|
|
27
|
+
* Every failure refuses fail-closed. The operator's remedy is always a plain
|
|
28
28
|
* scoped build, which resets the claim to the paths it actually vouches for.
|
|
29
29
|
*
|
|
30
|
-
* Known boundary, documented rather than closed: dirty
|
|
30
|
+
* Known boundary, documented rather than closed: dirty non-packageable
|
|
31
31
|
* fixtures under previously covered paths (plain test files, manifests
|
|
32
32
|
* `isPackageablePath` rejects) are invisible to check 2. Editing one
|
|
33
33
|
* uncommitted between two builds leaves the earlier scope's `_tests/`
|
|
34
|
-
* staging stale while extend still vouches for it. Plain
|
|
34
|
+
* staging stale while extend still vouches for it. Plain replacement has no such
|
|
35
35
|
* window, because the earlier scope simply stops being covered.
|
|
36
36
|
*/
|
|
37
37
|
import { readFile } from 'node:fs/promises';
|
|
@@ -88,10 +88,10 @@ export async function checkExtendCoverageAnchor(engineDir, previousBaseline) {
|
|
|
88
88
|
}
|
|
89
89
|
/**
|
|
90
90
|
* Verifies the mozconfig half of the anchor. Split from
|
|
91
|
-
* {@link checkExtendCoverageAnchor} because it can only run
|
|
92
|
-
* `prepareBuildEnvironment` regenerates `engine/mozconfig`
|
|
93
|
-
*
|
|
94
|
-
*
|
|
91
|
+
* {@link checkExtendCoverageAnchor} because it can only run after
|
|
92
|
+
* `prepareBuildEnvironment` regenerates `engine/mozconfig` (the file this
|
|
93
|
+
* build will configure with), and must still run before mach, so a refusal
|
|
94
|
+
* costs no build time.
|
|
95
95
|
* @param engineDir - Path to the engine directory
|
|
96
96
|
* @param previousBaseline - Baseline recorded by the previous build
|
|
97
97
|
*/
|
|
@@ -108,7 +108,7 @@ export async function checkExtendMozconfigAnchor(engineDir, previousBaseline) {
|
|
|
108
108
|
}
|
|
109
109
|
/**
|
|
110
110
|
* Unions the newly built paths onto the recorded claim. A `'full'` claim, or
|
|
111
|
-
* an absent one (which means full), stays `'full'
|
|
111
|
+
* an absent one (which means full), stays `'full'`, since it already covers
|
|
112
112
|
* everything.
|
|
113
113
|
*
|
|
114
114
|
* @param previous - Coverage recorded by the previous build
|
|
@@ -161,7 +161,7 @@ function formatDivergedPaths(paths) {
|
|
|
161
161
|
/**
|
|
162
162
|
* Hex-encoded SHA-256 of an engine-relative file, matching the digest the
|
|
163
163
|
* baseline writer produces. `undefined` on any IO error, which every caller
|
|
164
|
-
* treats as "cannot prove unchanged"
|
|
164
|
+
* treats as "cannot prove unchanged", i.e. a refusal.
|
|
165
165
|
* @param engineDir - Path to the engine directory
|
|
166
166
|
* @param relPath - Engine-relative POSIX path
|
|
167
167
|
*/
|
|
@@ -17,7 +17,7 @@ export declare const HISTORY_LOG_FILENAME = ".fireforge-history.jsonl";
|
|
|
17
17
|
* A structural conflict that must block the operation even under `--force`.
|
|
18
18
|
*
|
|
19
19
|
* Intended for cases like "reorder would introduce a forward-import" or
|
|
20
|
-
* "delete would orphan a later patch's import"
|
|
20
|
+
* "delete would orphan a later patch's import", situations where the
|
|
21
21
|
* operator almost certainly wants a different fix (re-export --files, etc.)
|
|
22
22
|
* rather than a bypass. `--force-unsafe` is the escape hatch when the
|
|
23
23
|
* operator genuinely accepts the risk.
|
|
@@ -35,9 +35,9 @@ export interface DestructiveOpInput {
|
|
|
35
35
|
/** Short one-line title shown in the prompt. */
|
|
36
36
|
title: string;
|
|
37
37
|
/**
|
|
38
|
-
* Detailed change summary
|
|
39
|
-
* Generic "proceed? [y/N]" is insufficient per the destructive-op
|
|
40
|
-
*
|
|
38
|
+
* Detailed change summary: every affected patch, file, or renumber row.
|
|
39
|
+
* Generic "proceed? [y/N]" is insufficient per the destructive-op
|
|
40
|
+
* contract. Callers must list every concrete change here.
|
|
41
41
|
*/
|
|
42
42
|
summary: string[];
|
|
43
43
|
/** Whether the caller passed `--yes`. */
|
|
@@ -52,9 +52,9 @@ export interface DestructiveOpInput {
|
|
|
52
52
|
/**
|
|
53
53
|
* Outcome of the destructive-operation contract.
|
|
54
54
|
*
|
|
55
|
-
* `'declined'` means the operator answered "no"
|
|
55
|
+
* `'declined'` means the operator answered "no", a successful run that
|
|
56
56
|
* chose not to proceed, so callers return normally and the process exits 0.
|
|
57
|
-
* An
|
|
57
|
+
* An interrupt (Esc / Ctrl+C) is not represented here: it throws
|
|
58
58
|
* {@link CancellationError} and exits 130. Collapsing the two would make an
|
|
59
59
|
* interrupted prompt indistinguishable from a declined one.
|
|
60
60
|
*/
|
|
@@ -73,11 +73,11 @@ export interface HistoryEntry {
|
|
|
73
73
|
yes?: boolean;
|
|
74
74
|
/** True if `--force-unsafe` was used. */
|
|
75
75
|
unsafeOverride?: boolean;
|
|
76
|
-
/** Result: `'ok'` on success
|
|
76
|
+
/** Result: `'ok'` on success. Other strings describe failure. */
|
|
77
77
|
result: string;
|
|
78
78
|
}
|
|
79
79
|
/**
|
|
80
|
-
* True when
|
|
80
|
+
* True when both standard handles are real TTYs, i.e. an interactive prompt
|
|
81
81
|
* can actually be answered.
|
|
82
82
|
*
|
|
83
83
|
* Named for the condition rather than for confirmation specifically: many
|
|
@@ -87,16 +87,16 @@ export interface HistoryEntry {
|
|
|
87
87
|
* Node types `isTTY` as `boolean`, but at runtime it is `true | undefined`
|
|
88
88
|
* (absent when the handle is not a TTY). Unusual harnesses (vitest stdio
|
|
89
89
|
* capture, CI spawners, mocked pipes) can also leave it unset on only one
|
|
90
|
-
* handle, so every falsy variant
|
|
90
|
+
* handle, so every falsy variant (false, undefined, a null-patched mock)
|
|
91
91
|
* must route to the non-interactive path.
|
|
92
92
|
*/
|
|
93
93
|
export declare function stdioIsInteractive(): boolean;
|
|
94
94
|
/**
|
|
95
|
-
*
|
|
95
|
+
* Up-front non-interactive refusal for a command that will end at
|
|
96
96
|
* {@link confirmDestructive}.
|
|
97
97
|
*
|
|
98
98
|
* `confirmDestructive` already refuses a prompt-less run rather than
|
|
99
|
-
* proceeding silently
|
|
99
|
+
* proceeding silently, but it does so at the end, after the command has
|
|
100
100
|
* built diffs and run projected per-patch lint. On `patch move-files
|
|
101
101
|
* --create` that is minutes of work before a scripted run learns it needed
|
|
102
102
|
* `--yes`, and the failure reads as an obscure late error rather than a
|
|
@@ -117,7 +117,7 @@ export declare function assertConfirmationAvailable(operation: string, options:
|
|
|
117
117
|
* Executes the destructive-operation contract: summary → conflict refusal →
|
|
118
118
|
* dry-run / force / prompt / non-TTY refusal.
|
|
119
119
|
*
|
|
120
|
-
* Returns the decision for the caller to act on
|
|
120
|
+
* Returns the decision for the caller to act on. Callers must not execute
|
|
121
121
|
* the mutation when the result is `'dry-run'` or `'declined'`, and must call
|
|
122
122
|
* {@link appendHistory} only after the mutation succeeds (never on dry-run
|
|
123
123
|
* or decline).
|
|
@@ -132,8 +132,8 @@ export declare function confirmDestructive(input: DestructiveOpInput): Promise<D
|
|
|
132
132
|
*
|
|
133
133
|
* Call order matters: append only after the mutation succeeds, never
|
|
134
134
|
* pre-emptively, so rolled-back failures do not leave ghost entries. The log
|
|
135
|
-
* is append-only and advisory
|
|
136
|
-
*
|
|
135
|
+
* is append-only and advisory: no code path reads it back. It exists so
|
|
136
|
+
* operators have a post-hoc audit trail when something goes wrong.
|
|
137
137
|
*
|
|
138
138
|
* @param patchesDir - Path to the patches directory
|
|
139
139
|
* @param entry - Serializable history record
|
|
@@ -40,7 +40,7 @@ function printConflicts(conflicts) {
|
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
/**
|
|
43
|
-
* True when
|
|
43
|
+
* True when both standard handles are real TTYs, i.e. an interactive prompt
|
|
44
44
|
* can actually be answered.
|
|
45
45
|
*
|
|
46
46
|
* Named for the condition rather than for confirmation specifically: many
|
|
@@ -50,7 +50,7 @@ function printConflicts(conflicts) {
|
|
|
50
50
|
* Node types `isTTY` as `boolean`, but at runtime it is `true | undefined`
|
|
51
51
|
* (absent when the handle is not a TTY). Unusual harnesses (vitest stdio
|
|
52
52
|
* capture, CI spawners, mocked pipes) can also leave it unset on only one
|
|
53
|
-
* handle, so every falsy variant
|
|
53
|
+
* handle, so every falsy variant (false, undefined, a null-patched mock)
|
|
54
54
|
* must route to the non-interactive path.
|
|
55
55
|
*/
|
|
56
56
|
export function stdioIsInteractive() {
|
|
@@ -59,11 +59,11 @@ export function stdioIsInteractive() {
|
|
|
59
59
|
return stdinIsTTY === true && stdoutIsTTY === true;
|
|
60
60
|
}
|
|
61
61
|
/**
|
|
62
|
-
*
|
|
62
|
+
* Up-front non-interactive refusal for a command that will end at
|
|
63
63
|
* {@link confirmDestructive}.
|
|
64
64
|
*
|
|
65
65
|
* `confirmDestructive` already refuses a prompt-less run rather than
|
|
66
|
-
* proceeding silently
|
|
66
|
+
* proceeding silently, but it does so at the end, after the command has
|
|
67
67
|
* built diffs and run projected per-patch lint. On `patch move-files
|
|
68
68
|
* --create` that is minutes of work before a scripted run learns it needed
|
|
69
69
|
* `--yes`, and the failure reads as an obscure late error rather than a
|
|
@@ -90,7 +90,7 @@ export function assertConfirmationAvailable(operation, options) {
|
|
|
90
90
|
* Executes the destructive-operation contract: summary → conflict refusal →
|
|
91
91
|
* dry-run / force / prompt / non-TTY refusal.
|
|
92
92
|
*
|
|
93
|
-
* Returns the decision for the caller to act on
|
|
93
|
+
* Returns the decision for the caller to act on. Callers must not execute
|
|
94
94
|
* the mutation when the result is `'dry-run'` or `'declined'`, and must call
|
|
95
95
|
* {@link appendHistory} only after the mutation succeeds (never on dry-run
|
|
96
96
|
* or decline).
|
|
@@ -146,8 +146,8 @@ export async function confirmDestructive(input) {
|
|
|
146
146
|
message: `${title} — proceed?`,
|
|
147
147
|
initialValue: false,
|
|
148
148
|
});
|
|
149
|
-
// An
|
|
150
|
-
// exit code. Esc / Ctrl+C is a real interrupt
|
|
149
|
+
// An interrupt and a "no" are different outcomes and must not share an
|
|
150
|
+
// exit code. Esc / Ctrl+C is a real interrupt. 130 is 128+SIGINT and is
|
|
151
151
|
// what a script needs to tell "the operator aborted" from "the operator
|
|
152
152
|
// considered it and declined". Answering "no" is a successful run.
|
|
153
153
|
//
|
|
@@ -165,8 +165,8 @@ export async function confirmDestructive(input) {
|
|
|
165
165
|
*
|
|
166
166
|
* Call order matters: append only after the mutation succeeds, never
|
|
167
167
|
* pre-emptively, so rolled-back failures do not leave ghost entries. The log
|
|
168
|
-
* is append-only and advisory
|
|
169
|
-
*
|
|
168
|
+
* is append-only and advisory: no code path reads it back. It exists so
|
|
169
|
+
* operators have a post-hoc audit trail when something goes wrong.
|
|
170
170
|
*
|
|
171
171
|
* @param patchesDir - Path to the patches directory
|
|
172
172
|
* @param entry - Serializable history record
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* An edit op produced by {@link computeLineDiff}. Indices are 0-based into the
|
|
3
|
-
* source line arrays
|
|
3
|
+
* source line arrays. `line` holds the verbatim text so callers do not have to
|
|
4
4
|
* keep the input arrays around while rendering.
|
|
5
5
|
*/
|
|
6
6
|
export interface LineDiffOp {
|
|
@@ -60,7 +60,7 @@ export declare function buildHunks(ops: readonly LineDiffOp[], context: number):
|
|
|
60
60
|
/**
|
|
61
61
|
* Computes a multi-hunk line diff between two strings. This is the public
|
|
62
62
|
* entry point that {@link furnaceDiffCommand} uses. On normal inputs this
|
|
63
|
-
* runs the exact LCS path and returns a proper multi-hunk diff
|
|
63
|
+
* runs the exact LCS path and returns a proper multi-hunk diff. On inputs
|
|
64
64
|
* that exceed {@link LCS_LINE_LIMIT} it falls back to a single coalesced
|
|
65
65
|
* hunk so the command stays useful instead of OOMing.
|
|
66
66
|
*/
|
|
@@ -5,7 +5,7 @@ import { assert, expectDefined } from '../utils/assert.js';
|
|
|
5
5
|
* O(m·n) diff and falling back to the simpler single-region coalesce. Chosen
|
|
6
6
|
* so the worst-case Int32Array allocation stays under ~16 MB. Typical
|
|
7
7
|
* Firefox widget files are a few hundred lines, so the fast path handles the
|
|
8
|
-
* everyday case
|
|
8
|
+
* everyday case. The fallback keeps the command usable on a very large file.
|
|
9
9
|
*/
|
|
10
10
|
const LCS_LINE_LIMIT = 2000;
|
|
11
11
|
/** Splits a string on `\n`, discarding a single trailing empty line from a terminal newline. */
|
|
@@ -31,7 +31,7 @@ export function computeLineDiff(oldLines, newLines) {
|
|
|
31
31
|
// The DP below indexes `dp`, `oldLines`, and `newLines` about 4·m·n times
|
|
32
32
|
// for a worst-case pair, so its bounds are established once here rather
|
|
33
33
|
// than re-checked per access. Callers gate on LCS_LINE_LIMIT before
|
|
34
|
-
// reaching this function
|
|
34
|
+
// reaching this function. If that gate is ever moved or removed, this is
|
|
35
35
|
// where the resulting allocation blow-up surfaces as a named failure
|
|
36
36
|
// instead of an out-of-memory crash.
|
|
37
37
|
assert(m <= LCS_LINE_LIMIT && n <= LCS_LINE_LIMIT, () => `line diff inputs are within LCS_LINE_LIMIT (got ${m}x${n}, limit ${LCS_LINE_LIMIT})`);
|
|
@@ -48,7 +48,7 @@ export function computeLineDiff(oldLines, newLines) {
|
|
|
48
48
|
* above, so the non-null assertions encode a property already checked
|
|
49
49
|
* once per call rather than one that is never checked at all. The
|
|
50
50
|
* rendering loops further down, which run O(ops), use `expectDefined`
|
|
51
|
-
* instead
|
|
51
|
+
* instead. This exemption is for the quadratic block only.
|
|
52
52
|
*/
|
|
53
53
|
for (let i = 1; i <= m; i++) {
|
|
54
54
|
const oldLine = oldLines[i - 1];
|
|
@@ -184,8 +184,8 @@ export function buildHunks(ops, context) {
|
|
|
184
184
|
* Fallback for inputs that exceed {@link LCS_LINE_LIMIT}. Reproduces the
|
|
185
185
|
* original single-region coalesce: match the common prefix and suffix, then
|
|
186
186
|
* emit one hunk containing the middle region plus `context` lines on each
|
|
187
|
-
* side.
|
|
188
|
-
* only keeps the command usable on pathologically large inputs without
|
|
187
|
+
* side. Kept simple on purpose: the fast path handles normal files, and
|
|
188
|
+
* this only keeps the command usable on pathologically large inputs without
|
|
189
189
|
* allocating a huge DP table.
|
|
190
190
|
*/
|
|
191
191
|
function coalescedHunk(oldLines, newLines, context) {
|
|
@@ -218,7 +218,7 @@ function coalescedHunk(oldLines, newLines, context) {
|
|
|
218
218
|
for (let k = firstDiff; k <= lastNewDiff; k++) {
|
|
219
219
|
hunkLines.push({ marker: '+', content: expectDefined(newLines[k], () => `new line ${k}`) });
|
|
220
220
|
}
|
|
221
|
-
// Trailing context comes from the common suffix, which lives at
|
|
221
|
+
// Trailing context comes from the common suffix, which lives at different
|
|
222
222
|
// indices on each side (lastOldDiff+1… vs lastNewDiff+1…). Mixing the two
|
|
223
223
|
// coordinate spaces emits wrong context on asymmetric edits and drops the
|
|
224
224
|
// trailing lines from the @@ header lengths, so the rendered header
|
|
@@ -245,7 +245,7 @@ function coalescedHunk(oldLines, newLines, context) {
|
|
|
245
245
|
/**
|
|
246
246
|
* Computes a multi-hunk line diff between two strings. This is the public
|
|
247
247
|
* entry point that {@link furnaceDiffCommand} uses. On normal inputs this
|
|
248
|
-
* runs the exact LCS path and returns a proper multi-hunk diff
|
|
248
|
+
* runs the exact LCS path and returns a proper multi-hunk diff. On inputs
|
|
249
249
|
* that exceed {@link LCS_LINE_LIMIT} it falls back to a single coalesced
|
|
250
250
|
* hunk so the command stays useful instead of OOMing.
|
|
251
251
|
*/
|
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
* Patch-aware restore planning for `fireforge discard`.
|
|
3
3
|
*
|
|
4
4
|
* The engine convention is: HEAD = pristine upstream Firefox, and the
|
|
5
|
-
* applied patch queue lives as
|
|
5
|
+
* applied patch queue lives as uncommitted worktree changes on top of it
|
|
6
6
|
* (`git apply` without `--index` → patch-edited tracked files are unstaged
|
|
7
7
|
* modifications, patch-created files are untracked). A purely git-mechanical
|
|
8
|
-
* discard
|
|
9
|
-
* patch-backed files
|
|
8
|
+
* discard (restore to HEAD, delete untracked files) therefore reverts
|
|
9
|
+
* patch-backed files past their owning patch and deletes patch-created files
|
|
10
10
|
* outright.
|
|
11
11
|
*
|
|
12
12
|
* This module classifies each status entry against the patch manifest's
|
|
13
|
-
* ownership claims and plans the correct restore target: the
|
|
13
|
+
* ownership claims and plans the correct restore target: the patch-applied
|
|
14
14
|
* baseline (HEAD content folded through every affecting patch in order) for
|
|
15
15
|
* claimed files, and the plain git mechanics for unmanaged ones.
|
|
16
16
|
*/
|
|
@@ -25,22 +25,22 @@ export interface DiscardBaselinePlan {
|
|
|
25
25
|
owners: string[];
|
|
26
26
|
/** True when more than one patch claims the path (ownership conflict). */
|
|
27
27
|
conflicted: boolean;
|
|
28
|
-
/** Baseline content for `entry.file
|
|
28
|
+
/** Baseline content for `entry.file` (null = absent at baseline). Unset for 'unmanaged'. */
|
|
29
29
|
expectedContent?: string | null;
|
|
30
30
|
/** Rename/copy only: baseline content for `originalPath` when that side is claimed. */
|
|
31
31
|
expectedOriginalContent?: string | null;
|
|
32
32
|
}
|
|
33
|
-
/** Builds an all-unmanaged plan set
|
|
33
|
+
/** Builds an all-unmanaged plan set, the `--to-upstream` (legacy) shape. */
|
|
34
34
|
export declare function planUpstreamDiscards(entries: readonly GitStatusEntry[]): DiscardBaselinePlan[];
|
|
35
35
|
/**
|
|
36
36
|
* Plans the restore target for each status entry. Entries claimed by the
|
|
37
|
-
* patch manifest restore to the patch-applied baseline
|
|
37
|
+
* patch manifest restore to the patch-applied baseline. Unclaimed entries
|
|
38
38
|
* keep the plain git mechanics. A missing patches dir or empty manifest
|
|
39
39
|
* degrades every plan to `unmanaged`.
|
|
40
40
|
*
|
|
41
|
-
* A corrupt manifest or an unreconstructible patch baseline
|
|
42
|
-
* GeneralError naming `--to-upstream
|
|
43
|
-
* HEAD is
|
|
41
|
+
* A corrupt manifest or an unreconstructible patch baseline refuses with a
|
|
42
|
+
* GeneralError naming `--to-upstream`. Silently falling back to pristine
|
|
43
|
+
* HEAD is the data-loss path this module exists to close.
|
|
44
44
|
*/
|
|
45
45
|
export declare function planDiscardBaselines(patchesDir: string, engineDir: string, entries: readonly GitStatusEntry[]): Promise<DiscardBaselinePlan[]>;
|
|
46
46
|
/**
|
|
@@ -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) {
|
|
@@ -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,13 +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
|
-
* Asserts only that the engine checkout
|
|
23
|
+
* Asserts only that the engine checkout exists.
|
|
24
24
|
*
|
|
25
25
|
* The first rung of {@link assertEngineGitReady}. Most callers want exactly
|
|
26
26
|
* this rung and no more: `build`, `run`, `test`, `package`, `watch`,
|
|
@@ -33,7 +33,7 @@ export interface EngineGitReadyOptions {
|
|
|
33
33
|
export declare function assertEngineExists(engineDir: string): Promise<void>;
|
|
34
34
|
/**
|
|
35
35
|
* Asserts that `engineDir` exists, is a git repository, and has a baseline
|
|
36
|
-
* commit
|
|
36
|
+
* commit, in that order, so the operator gets the most specific applicable
|
|
37
37
|
* remediation rather than a downstream git error.
|
|
38
38
|
*
|
|
39
39
|
* @param engineDir - Absolute path to the engine checkout
|
|
@@ -21,7 +21,7 @@ const UNBORN_HEAD_REMEDIATION = 'Engine repository has no baseline commit yet
|
|
|
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
23
|
/**
|
|
24
|
-
* Asserts only that the engine checkout
|
|
24
|
+
* Asserts only that the engine checkout exists.
|
|
25
25
|
*
|
|
26
26
|
* The first rung of {@link assertEngineGitReady}. Most callers want exactly
|
|
27
27
|
* this rung and no more: `build`, `run`, `test`, `package`, `watch`,
|
|
@@ -38,7 +38,7 @@ export async function assertEngineExists(engineDir) {
|
|
|
38
38
|
}
|
|
39
39
|
/**
|
|
40
40
|
* Asserts that `engineDir` exists, is a git repository, and has a baseline
|
|
41
|
-
* commit
|
|
41
|
+
* commit, in that order, so the operator gets the most specific applicable
|
|
42
42
|
* remediation rather than a downstream git error.
|
|
43
43
|
*
|
|
44
44
|
* @param engineDir - Absolute path to the engine checkout
|