@hominis/fireforge 0.45.0 → 0.46.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +409 -446
- package/dist/bin/fireforge.d.ts +1 -1
- package/dist/bin/fireforge.js +21 -15
- package/dist/build-info.json +4 -4
- package/dist/src/cli-usage-error.d.ts +46 -0
- package/dist/src/cli-usage-error.js +81 -0
- package/dist/src/cli.d.ts +7 -2
- package/dist/src/cli.js +47 -47
- package/dist/src/commands/bootstrap-checks.js +2 -1
- package/dist/src/commands/bootstrap.js +3 -4
- package/dist/src/commands/build.js +27 -17
- package/dist/src/commands/config.js +9 -9
- package/dist/src/commands/destructive-decision.d.ts +19 -0
- package/dist/src/commands/destructive-decision.js +31 -0
- package/dist/src/commands/discard.js +5 -5
- package/dist/src/commands/doctor-check-core.d.ts +4 -10
- package/dist/src/commands/doctor-check-core.js +0 -8
- package/dist/src/commands/doctor-external-toolchains.js +2 -2
- package/dist/src/commands/doctor-furnace-config-sync.d.ts +2 -2
- package/dist/src/commands/doctor-furnace-config-sync.js +20 -20
- package/dist/src/commands/doctor-furnace-jar.d.ts +1 -1
- package/dist/src/commands/doctor-furnace-jar.js +1 -1
- package/dist/src/commands/doctor-furnace.js +22 -22
- package/dist/src/commands/doctor-orphaned-harness.d.ts +10 -17
- package/dist/src/commands/doctor-orphaned-harness.js +14 -23
- package/dist/src/commands/doctor-patch-manifest.d.ts +2 -1
- package/dist/src/commands/doctor-patch-manifest.js +7 -6
- package/dist/src/commands/doctor-post-rebase-audit.js +3 -3
- package/dist/src/commands/doctor-source-pin.d.ts +12 -12
- package/dist/src/commands/doctor-source-pin.js +14 -14
- package/dist/src/commands/doctor-working-tree.d.ts +3 -3
- package/dist/src/commands/doctor-working-tree.js +3 -3
- package/dist/src/commands/doctor.d.ts +3 -1
- package/dist/src/commands/doctor.js +15 -16
- package/dist/src/commands/download.js +50 -37
- package/dist/src/commands/export-all.js +29 -12
- package/dist/src/commands/export-flow.d.ts +5 -5
- package/dist/src/commands/export-flow.js +29 -59
- package/dist/src/commands/export-placement-conflicts.d.ts +3 -3
- package/dist/src/commands/export-placement-conflicts.js +12 -12
- package/dist/src/commands/export-placement-gate.d.ts +2 -2
- package/dist/src/commands/export-placement-gate.js +7 -13
- package/dist/src/commands/export-placement-policy.d.ts +1 -1
- package/dist/src/commands/export-placement-policy.js +4 -6
- package/dist/src/commands/export-shared.d.ts +51 -32
- package/dist/src/commands/export-shared.js +17 -32
- package/dist/src/commands/export.js +14 -5
- package/dist/src/commands/furnace/apply.js +16 -16
- package/dist/src/commands/furnace/authoring-config.d.ts +13 -0
- package/dist/src/commands/furnace/authoring-config.js +19 -0
- package/dist/src/commands/furnace/chrome-doc-remove.d.ts +1 -1
- package/dist/src/commands/furnace/chrome-doc-remove.js +2 -2
- package/dist/src/commands/furnace/chrome-doc-templates.d.ts +14 -14
- package/dist/src/commands/furnace/chrome-doc-templates.js +17 -17
- package/dist/src/commands/furnace/chrome-doc-tests.d.ts +2 -2
- package/dist/src/commands/furnace/chrome-doc-tests.js +4 -4
- package/dist/src/commands/furnace/chrome-doc.d.ts +8 -8
- package/dist/src/commands/furnace/chrome-doc.js +18 -18
- package/dist/src/commands/furnace/create-browser-test.d.ts +1 -1
- package/dist/src/commands/furnace/create-browser-test.js +7 -12
- package/dist/src/commands/furnace/create-dry-run.d.ts +4 -4
- package/dist/src/commands/furnace/create-dry-run.js +6 -9
- package/dist/src/commands/furnace/create-features.d.ts +2 -2
- package/dist/src/commands/furnace/create-features.js +2 -2
- package/dist/src/commands/furnace/create-mochikit.d.ts +4 -4
- package/dist/src/commands/furnace/create-mochikit.js +7 -7
- package/dist/src/commands/furnace/create-templates.d.ts +31 -15
- package/dist/src/commands/furnace/create-templates.js +20 -19
- package/dist/src/commands/furnace/create-xpcshell.d.ts +5 -5
- package/dist/src/commands/furnace/create-xpcshell.js +8 -8
- package/dist/src/commands/furnace/create.d.ts +1 -1
- package/dist/src/commands/furnace/create.js +35 -29
- package/dist/src/commands/furnace/deploy.js +15 -6
- package/dist/src/commands/furnace/diff.js +7 -7
- package/dist/src/commands/furnace/index.js +1 -1
- package/dist/src/commands/furnace/init.js +17 -16
- package/dist/src/commands/furnace/list.js +2 -2
- package/dist/src/commands/furnace/override.d.ts +1 -1
- package/dist/src/commands/furnace/override.js +43 -34
- package/dist/src/commands/furnace/preview.js +17 -17
- package/dist/src/commands/furnace/refresh.js +15 -7
- package/dist/src/commands/furnace/remove-mutations.d.ts +9 -10
- package/dist/src/commands/furnace/remove-mutations.js +19 -19
- package/dist/src/commands/furnace/remove-state.d.ts +1 -1
- package/dist/src/commands/furnace/remove-state.js +1 -1
- package/dist/src/commands/furnace/remove.js +4 -8
- package/dist/src/commands/furnace/rename-browser-test.js +10 -15
- package/dist/src/commands/furnace/rename-xpcshell.d.ts +2 -2
- package/dist/src/commands/furnace/rename-xpcshell.js +3 -3
- package/dist/src/commands/furnace/rename.js +36 -36
- package/dist/src/commands/furnace/scan.js +3 -3
- package/dist/src/commands/furnace/status.js +19 -16
- package/dist/src/commands/furnace/sync.js +6 -6
- package/dist/src/commands/furnace/test-file-name.d.ts +28 -0
- package/dist/src/commands/furnace/test-file-name.js +39 -0
- package/dist/src/commands/furnace/validate.js +11 -12
- package/dist/src/commands/furnace/validation-output.d.ts +21 -9
- package/dist/src/commands/furnace/validation-output.js +3 -8
- package/dist/src/commands/import.js +22 -29
- package/dist/src/commands/lint-per-patch.d.ts +2 -2
- package/dist/src/commands/lint-per-patch.js +27 -12
- package/dist/src/commands/lint-per-run-checkjs.d.ts +14 -15
- package/dist/src/commands/lint-per-run-checkjs.js +14 -15
- package/dist/src/commands/lint-report.d.ts +3 -3
- package/dist/src/commands/lint-report.js +4 -4
- package/dist/src/commands/lint.d.ts +5 -4
- package/dist/src/commands/lint.js +36 -36
- package/dist/src/commands/manifest.d.ts +4 -4
- package/dist/src/commands/manifest.js +1 -1
- package/dist/src/commands/package.js +4 -6
- package/dist/src/commands/patch/compact.d.ts +2 -2
- package/dist/src/commands/patch/compact.js +19 -20
- package/dist/src/commands/patch/delete.d.ts +1 -1
- package/dist/src/commands/patch/delete.js +23 -33
- package/dist/src/commands/patch/entry-projection.d.ts +13 -0
- package/dist/src/commands/patch/entry-projection.js +24 -0
- package/dist/src/commands/patch/lint-ignore.d.ts +3 -12
- package/dist/src/commands/patch/lint-ignore.js +33 -44
- package/dist/src/commands/patch/move-files-create.d.ts +2 -2
- package/dist/src/commands/patch/move-files-create.js +29 -15
- package/dist/src/commands/patch/move-files-into.d.ts +2 -2
- package/dist/src/commands/patch/move-files-into.js +41 -37
- package/dist/src/commands/patch/move-files.js +5 -14
- package/dist/src/commands/patch/patch-context.d.ts +1 -1
- package/dist/src/commands/patch/rename.d.ts +4 -4
- package/dist/src/commands/patch/rename.js +35 -49
- package/dist/src/commands/patch/reorder.js +35 -48
- package/dist/src/commands/patch/split-plan.d.ts +7 -8
- package/dist/src/commands/patch/split-plan.js +10 -13
- package/dist/src/commands/patch/split.d.ts +2 -2
- package/dist/src/commands/patch/split.js +50 -48
- package/dist/src/commands/patch/staged-dependency-validate.d.ts +1 -1
- package/dist/src/commands/patch/staged-dependency-validate.js +3 -3
- package/dist/src/commands/patch/staged-dependency.d.ts +1 -1
- package/dist/src/commands/patch/staged-dependency.js +22 -28
- package/dist/src/commands/patch/tier.d.ts +2 -2
- package/dist/src/commands/patch/tier.js +20 -30
- package/dist/src/commands/patch-rename-map.d.ts +19 -0
- package/dist/src/commands/patch-rename-map.js +36 -0
- package/dist/src/commands/pending-resolution.d.ts +15 -0
- package/dist/src/commands/pending-resolution.js +25 -0
- package/dist/src/commands/re-export-adjacent.d.ts +25 -3
- package/dist/src/commands/re-export-adjacent.js +40 -24
- package/dist/src/commands/re-export-bulk-scan.d.ts +3 -3
- package/dist/src/commands/re-export-bulk-scan.js +23 -27
- package/dist/src/commands/re-export-drift.d.ts +10 -10
- package/dist/src/commands/re-export-drift.js +33 -33
- package/dist/src/commands/re-export-files.d.ts +2 -3
- package/dist/src/commands/re-export-files.js +52 -44
- package/dist/src/commands/re-export-lint.d.ts +29 -30
- package/dist/src/commands/re-export-lint.js +36 -29
- package/dist/src/commands/re-export-options.d.ts +1 -1
- package/dist/src/commands/re-export-options.js +1 -1
- package/dist/src/commands/re-export-register.d.ts +1 -1
- package/dist/src/commands/re-export-register.js +1 -1
- package/dist/src/commands/re-export-scan.d.ts +1 -1
- package/dist/src/commands/re-export-scan.js +12 -9
- package/dist/src/commands/re-export-single.d.ts +23 -4
- package/dist/src/commands/re-export-single.js +39 -31
- package/dist/src/commands/re-export.js +35 -17
- package/dist/src/commands/rebase/abort.js +9 -14
- package/dist/src/commands/rebase/continue.js +20 -19
- package/dist/src/commands/rebase/index.d.ts +1 -1
- package/dist/src/commands/rebase/index.js +5 -5
- package/dist/src/commands/rebase/patch-loop.d.ts +2 -2
- package/dist/src/commands/rebase/patch-loop.js +20 -24
- package/dist/src/commands/register.js +5 -5
- package/dist/src/commands/reset.js +1 -1
- package/dist/src/commands/resolve.d.ts +2 -2
- package/dist/src/commands/resolve.js +21 -13
- package/dist/src/commands/run.d.ts +0 -13
- package/dist/src/commands/run.js +38 -51
- package/dist/src/commands/setup-support.d.ts +16 -4
- package/dist/src/commands/setup-support.js +20 -20
- package/dist/src/commands/setup.js +4 -10
- package/dist/src/commands/source.js +9 -2
- package/dist/src/commands/status-check.d.ts +3 -3
- package/dist/src/commands/status-check.js +6 -6
- package/dist/src/commands/status-json.d.ts +14 -13
- package/dist/src/commands/status-json.js +9 -8
- package/dist/src/commands/status-output.d.ts +3 -3
- package/dist/src/commands/status-output.js +5 -5
- package/dist/src/commands/status-ownership.d.ts +3 -3
- package/dist/src/commands/status-ownership.js +3 -3
- package/dist/src/commands/status.js +25 -26
- package/dist/src/commands/test-build-phase.d.ts +3 -3
- package/dist/src/commands/test-build-phase.js +48 -24
- package/dist/src/commands/test-diagnose.d.ts +1 -1
- package/dist/src/commands/test-diagnose.js +20 -20
- package/dist/src/commands/test-modes.d.ts +4 -4
- package/dist/src/commands/test-modes.js +4 -5
- package/dist/src/commands/test-register.js +5 -3
- package/dist/src/commands/test-run.d.ts +11 -11
- package/dist/src/commands/test-run.js +40 -33
- package/dist/src/commands/test-stale-gate.d.ts +12 -12
- package/dist/src/commands/test-stale-gate.js +17 -17
- package/dist/src/commands/test-verdict.d.ts +19 -5
- package/dist/src/commands/test-verdict.js +26 -11
- package/dist/src/commands/test.d.ts +3 -3
- package/dist/src/commands/test.js +73 -36
- package/dist/src/commands/token-coverage.js +3 -3
- package/dist/src/commands/token-list.d.ts +26 -0
- package/dist/src/commands/token-list.js +153 -0
- package/dist/src/commands/token.js +26 -10
- package/dist/src/commands/tree.js +26 -21
- package/dist/src/commands/typecheck.d.ts +6 -6
- package/dist/src/commands/typecheck.js +16 -16
- package/dist/src/commands/verify.d.ts +3 -3
- package/dist/src/commands/verify.js +10 -10
- package/dist/src/commands/watch.js +11 -11
- package/dist/src/commands/wire.js +17 -16
- package/dist/src/core/ast-utils.d.ts +7 -7
- package/dist/src/core/ast-utils.js +8 -8
- package/dist/src/core/branding.d.ts +5 -12
- package/dist/src/core/branding.js +6 -5
- package/dist/src/core/browser-wire.d.ts +1 -1
- package/dist/src/core/browser-wire.js +10 -7
- package/dist/src/core/build-audit-platform.d.ts +32 -3
- package/dist/src/core/build-audit-platform.js +153 -13
- package/dist/src/core/build-audit-registration.d.ts +5 -5
- package/dist/src/core/build-audit-registration.js +10 -9
- package/dist/src/core/build-audit-resolve.d.ts +5 -5
- package/dist/src/core/build-audit-resolve.js +6 -6
- package/dist/src/core/build-audit-skip.d.ts +57 -0
- package/dist/src/core/build-audit-skip.js +112 -0
- package/dist/src/core/build-audit-transforms.d.ts +2 -2
- package/dist/src/core/build-audit-transforms.js +3 -3
- package/dist/src/core/build-audit.d.ts +21 -8
- package/dist/src/core/build-audit.js +142 -40
- package/dist/src/core/build-baseline-types.d.ts +19 -18
- package/dist/src/core/build-baseline-types.js +1 -1
- package/dist/src/core/build-baseline.d.ts +48 -31
- package/dist/src/core/build-baseline.js +20 -43
- package/dist/src/core/build-jar-escalation.d.ts +8 -8
- package/dist/src/core/build-jar-escalation.js +18 -17
- package/dist/src/core/build-overwrite-guard.d.ts +4 -4
- package/dist/src/core/build-overwrite-guard.js +14 -14
- package/dist/src/core/build-prepare.d.ts +4 -12
- package/dist/src/core/build-prepare.js +22 -26
- package/dist/src/core/config-mutate.js +4 -4
- package/dist/src/core/config-paths.d.ts +2 -6
- package/dist/src/core/config-paths.js +4 -2
- package/dist/src/core/config-state.d.ts +0 -6
- package/dist/src/core/config-state.js +3 -21
- package/dist/src/core/config-validate-build-audit.d.ts +8 -0
- package/dist/src/core/config-validate-build-audit.js +80 -0
- package/dist/src/core/config-validate-file-size.d.ts +1 -1
- package/dist/src/core/config-validate-file-size.js +3 -3
- package/dist/src/core/config-validate-patch-policy.d.ts +2 -2
- package/dist/src/core/config-validate-patch-policy.js +3 -3
- package/dist/src/core/config-validate-test-toolchains.d.ts +2 -2
- package/dist/src/core/config-validate-test-toolchains.js +4 -5
- package/dist/src/core/config-validate.js +22 -12
- package/dist/src/core/config.d.ts +12 -12
- package/dist/src/core/config.js +21 -25
- package/dist/src/core/coverage-extend.d.ts +16 -16
- package/dist/src/core/coverage-extend.js +20 -20
- package/dist/src/core/destructive.d.ts +14 -14
- package/dist/src/core/destructive.js +9 -9
- package/dist/src/core/diff-hunks.d.ts +2 -2
- package/dist/src/core/diff-hunks.js +7 -7
- package/dist/src/core/discard-baseline.d.ts +10 -10
- package/dist/src/core/discard-baseline.js +22 -23
- package/dist/src/core/display-state.d.ts +11 -11
- package/dist/src/core/display-state.js +12 -12
- package/dist/src/core/engine-changes.d.ts +2 -2
- package/dist/src/core/engine-changes.js +2 -2
- package/dist/src/core/engine-precondition.d.ts +5 -13
- package/dist/src/core/engine-precondition.js +5 -10
- package/dist/src/core/engine-session-lock.d.ts +18 -18
- package/dist/src/core/engine-session-lock.js +50 -54
- package/dist/src/core/export-moved-code-shape.d.ts +7 -7
- package/dist/src/core/export-moved-code-shape.js +10 -10
- package/dist/src/core/file-lock-owner.d.ts +103 -0
- package/dist/src/core/file-lock-owner.js +259 -0
- package/dist/src/core/file-lock.d.ts +14 -19
- package/dist/src/core/file-lock.js +90 -128
- package/dist/src/core/firefox-cache.d.ts +13 -1
- package/dist/src/core/firefox-cache.js +61 -36
- package/dist/src/core/firefox-download.d.ts +15 -0
- package/dist/src/core/firefox-download.js +38 -22
- package/dist/src/core/firefox-extract.d.ts +8 -7
- package/dist/src/core/firefox-extract.js +45 -27
- package/dist/src/core/firefox.d.ts +34 -36
- package/dist/src/core/firefox.js +13 -44
- package/dist/src/core/furnace-apply-dry-run.d.ts +1 -6
- package/dist/src/core/furnace-apply-dry-run.js +2 -8
- package/dist/src/core/furnace-apply-ftl.d.ts +5 -5
- package/dist/src/core/furnace-apply-ftl.js +8 -8
- package/dist/src/core/furnace-apply-helpers.d.ts +9 -20
- package/dist/src/core/furnace-apply-helpers.js +28 -39
- package/dist/src/core/furnace-apply-output.js +1 -1
- package/dist/src/core/furnace-apply-overwrite-warn.d.ts +9 -9
- package/dist/src/core/furnace-apply-overwrite-warn.js +13 -11
- package/dist/src/core/furnace-apply-undeploy-actions.d.ts +1 -1
- package/dist/src/core/furnace-apply-undeploy-actions.js +1 -1
- package/dist/src/core/furnace-apply.d.ts +4 -4
- package/dist/src/core/furnace-apply.js +50 -29
- package/dist/src/core/furnace-checksum-utils.d.ts +5 -5
- package/dist/src/core/furnace-checksum-utils.js +5 -5
- package/dist/src/core/furnace-config-custom.d.ts +1 -1
- package/dist/src/core/furnace-config-custom.js +2 -2
- package/dist/src/core/furnace-config-order.js +1 -1
- package/dist/src/core/furnace-config-tokens.d.ts +3 -3
- package/dist/src/core/furnace-config-tokens.js +3 -3
- package/dist/src/core/furnace-config-validate.js +2 -2
- package/dist/src/core/furnace-config.d.ts +5 -5
- package/dist/src/core/furnace-config.js +40 -53
- package/dist/src/core/furnace-constants.d.ts +6 -6
- package/dist/src/core/furnace-constants.js +9 -8
- package/dist/src/core/furnace-css-fragments.d.ts +6 -6
- package/dist/src/core/furnace-css-fragments.js +11 -11
- package/dist/src/core/furnace-dir-entry.d.ts +20 -0
- package/dist/src/core/furnace-dir-entry.js +21 -0
- package/dist/src/core/furnace-jsconfig.d.ts +7 -7
- package/dist/src/core/furnace-jsconfig.js +22 -20
- package/dist/src/core/furnace-operation.d.ts +22 -19
- package/dist/src/core/furnace-operation.js +38 -34
- package/dist/src/core/furnace-precondition.d.ts +10 -10
- package/dist/src/core/furnace-precondition.js +8 -8
- package/dist/src/core/furnace-refresh.d.ts +18 -6
- package/dist/src/core/furnace-refresh.js +5 -8
- package/dist/src/core/furnace-registration-ast.d.ts +2 -3
- package/dist/src/core/furnace-registration-ast.js +9 -12
- package/dist/src/core/furnace-registration-remove.d.ts +4 -4
- package/dist/src/core/furnace-registration-remove.js +6 -6
- package/dist/src/core/furnace-registration-validate.d.ts +2 -2
- package/dist/src/core/furnace-registration-validate.js +2 -2
- package/dist/src/core/furnace-registration.d.ts +7 -6
- package/dist/src/core/furnace-registration.js +29 -36
- package/dist/src/core/furnace-rollback.d.ts +1 -1
- package/dist/src/core/furnace-rollback.js +5 -5
- package/dist/src/core/furnace-scanner.js +3 -6
- package/dist/src/core/furnace-stale-export.d.ts +17 -16
- package/dist/src/core/furnace-stale-export.js +16 -15
- package/dist/src/core/furnace-staleness.d.ts +2 -2
- package/dist/src/core/furnace-staleness.js +2 -2
- package/dist/src/core/furnace-state-persist.d.ts +12 -12
- package/dist/src/core/furnace-state-persist.js +10 -10
- package/dist/src/core/furnace-step-errors.d.ts +6 -6
- package/dist/src/core/furnace-step-errors.js +6 -6
- package/dist/src/core/furnace-validate-accessibility.js +14 -14
- package/dist/src/core/furnace-validate-compatibility.js +9 -9
- package/dist/src/core/furnace-validate-registration.d.ts +2 -2
- package/dist/src/core/furnace-validate-registration.js +18 -20
- package/dist/src/core/furnace-validate-structure.d.ts +1 -1
- package/dist/src/core/furnace-validate-structure.js +4 -4
- package/dist/src/core/furnace-validate.js +9 -9
- package/dist/src/core/furnace-version-drift.d.ts +5 -5
- package/dist/src/core/furnace-version-drift.js +5 -5
- package/dist/src/core/git-base.d.ts +6 -4
- package/dist/src/core/git-base.js +29 -7
- package/dist/src/core/git-diff-new-file.d.ts +40 -0
- package/dist/src/core/git-diff-new-file.js +119 -0
- package/dist/src/core/git-diff.d.ts +13 -13
- package/dist/src/core/git-diff.js +121 -189
- package/dist/src/core/git-file-ops.d.ts +6 -13
- package/dist/src/core/git-file-ops.js +11 -35
- package/dist/src/core/git-readonly-index.d.ts +12 -14
- package/dist/src/core/git-readonly-index.js +12 -16
- package/dist/src/core/git-status.d.ts +9 -2
- package/dist/src/core/git-status.js +23 -11
- package/dist/src/core/git.d.ts +3 -9
- package/dist/src/core/git.js +28 -57
- package/dist/src/core/harness-orphans.d.ts +17 -17
- package/dist/src/core/harness-orphans.js +28 -27
- package/dist/src/core/history-log.d.ts +19 -0
- package/dist/src/core/history-log.js +29 -0
- package/dist/src/core/license-headers.d.ts +19 -18
- package/dist/src/core/license-headers.js +29 -28
- package/dist/src/core/mach-build-artifacts.d.ts +21 -21
- package/dist/src/core/mach-build-artifacts.js +23 -23
- package/dist/src/core/mach-error-hints.d.ts +5 -10
- package/dist/src/core/mach-error-hints.js +14 -14
- package/dist/src/core/mach-known-noise-filter.d.ts +42 -38
- package/dist/src/core/mach-known-noise-filter.js +57 -56
- package/dist/src/core/mach-mozconfig.d.ts +6 -6
- package/dist/src/core/mach-mozconfig.js +17 -16
- package/dist/src/core/mach-python.d.ts +3 -0
- package/dist/src/core/mach-python.js +13 -7
- package/dist/src/core/mach-resource-shim.d.ts +24 -12
- package/dist/src/core/mach-resource-shim.js +124 -21
- package/dist/src/core/mach.d.ts +59 -73
- package/dist/src/core/mach.js +47 -115
- package/dist/src/core/marionette-port.d.ts +15 -30
- package/dist/src/core/marionette-port.js +46 -89
- package/dist/src/core/marionette-preflight.d.ts +6 -6
- package/dist/src/core/marionette-preflight.js +32 -50
- package/dist/src/core/markdown-table.d.ts +9 -9
- package/dist/src/core/markdown-table.js +14 -14
- package/dist/src/core/mochitest-server-port.d.ts +8 -8
- package/dist/src/core/mochitest-server-port.js +17 -17
- package/dist/src/core/module-resolution-preflight.d.ts +8 -8
- package/dist/src/core/module-resolution-preflight.js +11 -11
- package/dist/src/core/moz-manifest-helpers.d.ts +7 -7
- package/dist/src/core/moz-manifest-helpers.js +7 -7
- package/dist/src/core/moz-manifest-register.d.ts +1 -1
- package/dist/src/core/moz-manifest-register.js +2 -2
- package/dist/src/core/moz-manifest-rules.js +46 -42
- package/dist/src/core/moz-manifest-tokenizers.js +1 -1
- package/dist/src/core/ownership-table.d.ts +5 -5
- package/dist/src/core/ownership-table.js +7 -7
- package/dist/src/core/parser-fallback.d.ts +3 -3
- package/dist/src/core/parser-fallback.js +3 -3
- package/dist/src/core/patch-apply-fuzz.d.ts +5 -5
- package/dist/src/core/patch-apply-fuzz.js +13 -13
- package/dist/src/core/patch-apply.d.ts +13 -14
- package/dist/src/core/patch-apply.js +36 -42
- package/dist/src/core/patch-export-coverage.d.ts +0 -9
- package/dist/src/core/patch-export-coverage.js +1 -30
- package/dist/src/core/patch-export-update.d.ts +21 -4
- package/dist/src/core/patch-export-update.js +7 -6
- package/dist/src/core/patch-export.d.ts +20 -30
- package/dist/src/core/patch-export.js +55 -77
- package/dist/src/core/patch-files.d.ts +0 -4
- package/dist/src/core/patch-files.js +0 -11
- package/dist/src/core/patch-identifier-suggest.d.ts +1 -1
- package/dist/src/core/patch-identifier-suggest.js +4 -4
- package/dist/src/core/patch-lint-binary.d.ts +12 -18
- package/dist/src/core/patch-lint-cache.d.ts +18 -2
- package/dist/src/core/patch-lint-cache.js +16 -19
- package/dist/src/core/patch-lint-checkjs.d.ts +55 -38
- package/dist/src/core/patch-lint-checkjs.js +78 -64
- package/dist/src/core/patch-lint-chrome-jsdoc.d.ts +8 -9
- package/dist/src/core/patch-lint-chrome-jsdoc.js +10 -11
- package/dist/src/core/patch-lint-creators.d.ts +5 -9
- package/dist/src/core/patch-lint-creators.js +3 -3
- package/dist/src/core/patch-lint-cross.d.ts +27 -19
- package/dist/src/core/patch-lint-cross.js +67 -110
- package/dist/src/core/patch-lint-css.d.ts +1 -1
- package/dist/src/core/patch-lint-css.js +15 -11
- package/dist/src/core/patch-lint-diff-tag.d.ts +5 -5
- package/dist/src/core/patch-lint-diff-tag.js +5 -5
- package/dist/src/core/patch-lint-diff.d.ts +4 -4
- package/dist/src/core/patch-lint-diff.js +4 -4
- package/dist/src/core/patch-lint-file-size.d.ts +3 -3
- package/dist/src/core/patch-lint-file-size.js +6 -6
- package/dist/src/core/patch-lint-forward-registration.d.ts +58 -0
- package/dist/src/core/patch-lint-forward-registration.js +210 -0
- package/dist/src/core/patch-lint-jsdoc.d.ts +2 -2
- package/dist/src/core/patch-lint-jsdoc.js +46 -46
- package/dist/src/core/patch-lint-module-registration.d.ts +3 -9
- package/dist/src/core/patch-lint-module-registration.js +1 -1
- package/dist/src/core/patch-lint-mozbuild.d.ts +1 -1
- package/dist/src/core/patch-lint-mozbuild.js +10 -10
- package/dist/src/core/patch-lint-observer.d.ts +3 -3
- package/dist/src/core/patch-lint-observer.js +7 -7
- package/dist/src/core/patch-lint-ownership.d.ts +6 -6
- package/dist/src/core/patch-lint-ownership.js +6 -6
- package/dist/src/core/patch-lint-prettier.d.ts +6 -6
- package/dist/src/core/patch-lint-prettier.js +7 -7
- package/dist/src/core/patch-lint-queue-types.d.ts +60 -0
- package/dist/src/core/patch-lint-queue-types.js +12 -0
- package/dist/src/core/patch-lint-staged-registration.d.ts +61 -0
- package/dist/src/core/patch-lint-staged-registration.js +90 -0
- package/dist/src/core/patch-lint-unmanaged-companion.d.ts +23 -23
- package/dist/src/core/patch-lint-unmanaged-companion.js +26 -26
- package/dist/src/core/patch-lint.d.ts +41 -35
- package/dist/src/core/patch-lint.js +52 -49
- package/dist/src/core/patch-lock.d.ts +1 -1
- package/dist/src/core/patch-lock.js +11 -11
- package/dist/src/core/patch-manifest-consistency.d.ts +7 -7
- package/dist/src/core/patch-manifest-consistency.js +16 -17
- package/dist/src/core/patch-manifest-files-affected.d.ts +1 -1
- package/dist/src/core/patch-manifest-files-affected.js +3 -3
- package/dist/src/core/patch-manifest-io.d.ts +14 -14
- package/dist/src/core/patch-manifest-io.js +35 -34
- package/dist/src/core/patch-manifest-query.d.ts +1 -1
- package/dist/src/core/patch-manifest-query.js +4 -4
- package/dist/src/core/patch-manifest-resolve.d.ts +5 -5
- package/dist/src/core/patch-manifest-resolve.js +7 -7
- package/dist/src/core/patch-manifest-validate.js +3 -3
- package/dist/src/core/patch-manifest.d.ts +2 -2
- package/dist/src/core/patch-manifest.js +2 -2
- package/dist/src/core/patch-parse.d.ts +32 -21
- package/dist/src/core/patch-parse.js +40 -15
- package/dist/src/core/patch-policy.js +15 -27
- package/dist/src/core/patch-registration-refs.d.ts +4 -4
- package/dist/src/core/patch-registration-refs.js +7 -7
- package/dist/src/core/patch-source-metadata.d.ts +1 -3
- package/dist/src/core/patch-source-metadata.js +0 -4
- package/dist/src/core/patch-transform.d.ts +8 -16
- package/dist/src/core/patch-transform.js +13 -23
- package/dist/src/core/process-cpu-time.d.ts +1 -1
- package/dist/src/core/process-cpu-time.js +6 -6
- package/dist/src/core/rebase-session.d.ts +9 -15
- package/dist/src/core/rebase-session.js +13 -25
- package/dist/src/core/register-browser-content.js +3 -2
- package/dist/src/core/register-browser-test.js +2 -1
- package/dist/src/core/register-module.js +2 -1
- package/dist/src/core/register-result.d.ts +1 -1
- package/dist/src/core/register-result.js +1 -1
- package/dist/src/core/register-scaffold.d.ts +2 -2
- package/dist/src/core/register-scaffold.js +8 -7
- package/dist/src/core/register-shared-css.d.ts +3 -3
- package/dist/src/core/register-shared-css.js +6 -5
- package/dist/src/core/register-xpcshell-test.d.ts +2 -2
- package/dist/src/core/register-xpcshell-test.js +2 -2
- package/dist/src/core/run-log-redact.d.ts +38 -0
- package/dist/src/core/run-log-redact.js +69 -0
- package/dist/src/core/run-log.d.ts +21 -10
- package/dist/src/core/run-log.js +76 -27
- package/dist/src/core/shared-ftl.d.ts +2 -2
- package/dist/src/core/shared-ftl.js +6 -6
- package/dist/src/core/signal-critical.d.ts +2 -2
- package/dist/src/core/signal-critical.js +4 -6
- package/dist/src/core/smoke-patterns.d.ts +5 -6
- package/dist/src/core/smoke-patterns.js +15 -20
- package/dist/src/core/state-file.d.ts +15 -4
- package/dist/src/core/state-file.js +14 -1
- package/dist/src/core/status-binary.d.ts +8 -8
- package/dist/src/core/status-binary.js +12 -12
- package/dist/src/core/status-classify.d.ts +17 -17
- package/dist/src/core/status-classify.js +13 -12
- package/dist/src/core/test-changed-prefs.d.ts +12 -12
- package/dist/src/core/test-changed-prefs.js +40 -25
- package/dist/src/core/test-harness-crash.d.ts +39 -39
- package/dist/src/core/test-harness-crash.js +69 -69
- package/dist/src/core/test-harness-output.d.ts +7 -7
- package/dist/src/core/test-harness-output.js +7 -7
- package/dist/src/core/test-harness-verdict-notes.d.ts +13 -14
- package/dist/src/core/test-harness-verdict-notes.js +4 -4
- package/dist/src/core/test-path-scope.d.ts +8 -8
- package/dist/src/core/test-path-scope.js +11 -11
- package/dist/src/core/test-stale-check.d.ts +22 -23
- package/dist/src/core/test-stale-check.js +31 -30
- package/dist/src/core/test-stale-symlink.d.ts +1 -1
- package/dist/src/core/test-stale-symlink.js +1 -1
- package/dist/src/core/test-stall-triage.d.ts +9 -9
- package/dist/src/core/test-stall-triage.js +22 -22
- package/dist/src/core/test-xpcshell-retry.d.ts +26 -7
- package/dist/src/core/test-xpcshell-retry.js +14 -11
- package/dist/src/core/token-category.d.ts +35 -2
- package/dist/src/core/token-category.js +67 -58
- package/dist/src/core/token-coverage.js +4 -5
- package/dist/src/core/token-dark-mode.d.ts +9 -9
- package/dist/src/core/token-dark-mode.js +13 -25
- package/dist/src/core/token-docs.d.ts +1 -1
- package/dist/src/core/token-inventory.d.ts +56 -0
- package/dist/src/core/token-inventory.js +109 -0
- package/dist/src/core/token-manager.d.ts +4 -4
- package/dist/src/core/token-manager.js +22 -22
- package/dist/src/core/token-scaffold.d.ts +4 -4
- package/dist/src/core/token-scaffold.js +4 -4
- package/dist/src/core/token-variant.d.ts +14 -14
- package/dist/src/core/token-variant.js +52 -53
- package/dist/src/core/toolchain-preflight.d.ts +15 -15
- package/dist/src/core/toolchain-preflight.js +23 -23
- package/dist/src/core/tree-cow.d.ts +3 -5
- package/dist/src/core/tree-cow.js +8 -8
- package/dist/src/core/tree-guard.d.ts +3 -3
- package/dist/src/core/tree-guard.js +23 -23
- package/dist/src/core/tree-store.d.ts +15 -15
- package/dist/src/core/tree-store.js +39 -38
- package/dist/src/core/typecheck-shim.d.ts +16 -15
- package/dist/src/core/typecheck-shim.js +26 -25
- package/dist/src/core/typecheck.d.ts +12 -12
- package/dist/src/core/typecheck.js +33 -33
- package/dist/src/core/wire-destroy.d.ts +2 -2
- package/dist/src/core/wire-destroy.js +5 -5
- package/dist/src/core/wire-dom-fragment.d.ts +3 -3
- package/dist/src/core/wire-dom-fragment.js +12 -23
- package/dist/src/core/wire-init.d.ts +2 -2
- package/dist/src/core/wire-init.js +7 -7
- package/dist/src/core/wire-subscript.d.ts +1 -1
- package/dist/src/core/wire-subscript.js +3 -3
- package/dist/src/core/wire-utils.d.ts +9 -9
- package/dist/src/core/wire-utils.js +16 -28
- package/dist/src/core/xpcshell-appdir.d.ts +20 -20
- package/dist/src/core/xpcshell-appdir.js +28 -30
- package/dist/src/core/xpcshell-profile-dir.d.ts +3 -3
- package/dist/src/core/xpcshell-profile-dir.js +7 -7
- package/dist/src/errors/base.d.ts +69 -16
- package/dist/src/errors/base.js +95 -26
- package/dist/src/errors/build.d.ts +6 -6
- package/dist/src/errors/build.js +26 -34
- package/dist/src/errors/codes.d.ts +10 -10
- package/dist/src/errors/codes.js +10 -10
- package/dist/src/errors/config.d.ts +0 -14
- package/dist/src/errors/config.js +13 -34
- package/dist/src/errors/download.d.ts +13 -0
- package/dist/src/errors/download.js +53 -24
- package/dist/src/errors/furnace.d.ts +2 -2
- package/dist/src/errors/furnace.js +8 -9
- package/dist/src/errors/git.d.ts +9 -9
- package/dist/src/errors/git.js +21 -31
- package/dist/src/errors/patch.d.ts +3 -3
- package/dist/src/errors/patch.js +11 -13
- package/dist/src/errors/rebase.d.ts +1 -1
- package/dist/src/errors/rebase.js +8 -8
- package/dist/src/errors/run.d.ts +1 -1
- package/dist/src/errors/run.js +1 -1
- package/dist/src/index.d.ts +4 -4
- package/dist/src/index.js +4 -4
- package/dist/src/types/commands/options.d.ts +155 -200
- package/dist/src/types/commands/patches.d.ts +19 -19
- package/dist/src/types/commands/project.d.ts +3 -3
- package/dist/src/types/config.d.ts +52 -19
- package/dist/src/types/furnace.d.ts +17 -17
- package/dist/src/types/index.d.ts +0 -1
- package/dist/src/types/json.d.ts +3 -3
- package/dist/src/types/json.js +2 -2
- package/dist/src/types/typecheck.d.ts +3 -3
- package/dist/src/utils/assert.d.ts +4 -16
- package/dist/src/utils/assert.js +7 -24
- package/dist/src/utils/build-info.d.ts +6 -6
- package/dist/src/utils/build-info.js +6 -6
- package/dist/src/utils/child-env.d.ts +7 -6
- package/dist/src/utils/child-env.js +5 -5
- package/dist/src/utils/concurrency.d.ts +2 -2
- package/dist/src/utils/concurrency.js +2 -2
- package/dist/src/utils/elapsed.js +10 -1
- package/dist/src/utils/errors.d.ts +8 -8
- package/dist/src/utils/errors.js +8 -8
- package/dist/src/utils/fs.d.ts +1 -1
- package/dist/src/utils/fs.js +15 -20
- package/dist/src/utils/hash.d.ts +12 -0
- package/dist/src/utils/hash.js +16 -0
- package/dist/src/utils/line-dispatch.d.ts +15 -0
- package/dist/src/utils/line-dispatch.js +48 -0
- package/dist/src/utils/logger.d.ts +4 -4
- package/dist/src/utils/logger.js +11 -11
- package/dist/src/utils/machine-output.js +2 -2
- package/dist/src/utils/options.d.ts +14 -20
- package/dist/src/utils/options.js +26 -27
- package/dist/src/utils/package-root.js +5 -14
- package/dist/src/utils/paths.d.ts +4 -4
- package/dist/src/utils/paths.js +4 -4
- package/dist/src/utils/platform.d.ts +0 -4
- package/dist/src/utils/process-group.d.ts +10 -9
- package/dist/src/utils/process-group.js +37 -36
- package/dist/src/utils/process.d.ts +70 -55
- package/dist/src/utils/process.js +129 -179
- package/dist/src/utils/ps-duration.d.ts +4 -4
- package/dist/src/utils/ps-duration.js +9 -9
- package/dist/src/utils/regex.d.ts +4 -4
- package/dist/src/utils/regex.js +7 -7
- package/dist/src/utils/sleep.d.ts +26 -0
- package/dist/src/utils/sleep.js +31 -0
- package/dist/src/utils/stdio-drain.d.ts +7 -7
- package/dist/src/utils/stdio-drain.js +8 -8
- package/dist/src/utils/validation.d.ts +12 -49
- package/dist/src/utils/validation.js +26 -36
- package/docs/README.md +2 -2
- package/docs/configuration.md +163 -69
- package/docs/exit-codes.md +66 -49
- package/docs/furnace.md +20 -19
- package/docs/lifecycle-invariants.md +414 -247
- package/docs/machine-output.md +58 -34
- package/docs/patch-workflow.md +48 -44
- package/docs/run-logs.md +72 -28
- package/docs/testing.md +105 -98
- package/docs/verification-trees.md +23 -22
- package/package.json +7 -6
- package/dist/src/commands/rebase.d.ts +0 -4
- package/dist/src/commands/rebase.js +0 -5
- package/dist/src/core/patch-artifact-normalize.d.ts +0 -21
- package/dist/src/core/patch-artifact-normalize.js +0 -24
- package/dist/src/core/patch-lint-reexports.d.ts +0 -7
- package/dist/src/core/patch-lint-reexports.js +0 -8
- package/dist/src/core/wire-targets.d.ts +0 -7
- package/dist/src/core/wire-targets.js +0 -8
package/docs/configuration.md
CHANGED
|
@@ -2,34 +2,57 @@
|
|
|
2
2
|
|
|
3
3
|
# Configuration
|
|
4
4
|
|
|
5
|
-
`fireforge.json` at the project root
|
|
5
|
+
`fireforge.json` at the project root holds the project's configuration, and
|
|
6
6
|
`furnace.json` holds component configuration. This file covers the settings
|
|
7
|
-
whose
|
|
7
|
+
whose behavior needs more than a schema line, plus the environment variables
|
|
8
8
|
FireForge reads.
|
|
9
9
|
|
|
10
|
-
## `firefox
|
|
11
|
-
|
|
12
|
-
`firefox.version
|
|
13
|
-
`firefox.
|
|
14
|
-
from. `fireforge source set` writes
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
10
|
+
## `firefox`, the source pin
|
|
11
|
+
|
|
12
|
+
`firefox.version`, together with `firefox.product` and optionally
|
|
13
|
+
`firefox.sha256` and `firefox.candidate`, is the source pin that
|
|
14
|
+
`fireforge download` resolves an archive from. `fireforge source set` writes
|
|
15
|
+
it.
|
|
16
|
+
|
|
17
|
+
The pin lives in `fireforge.json` next to hand-maintained policy sections,
|
|
18
|
+
which is worth knowing when you revert that file. Running
|
|
19
|
+
`git checkout -- fireforge.json` after an accidental reformat also reverts an
|
|
20
|
+
uncommitted pin, and the tree is then building a different version than the
|
|
21
|
+
config claims.
|
|
22
|
+
|
|
23
|
+
### Archive integrity: `firefox.sha256` and `firefox.allowUnverifiedDownload`
|
|
24
|
+
|
|
25
|
+
Every fresh download is checked against Mozilla's published `SHA256SUMS` for
|
|
26
|
+
the release. A mismatch fails the download and discards the archive. The
|
|
27
|
+
check also fails closed when the published digest cannot be obtained at all:
|
|
28
|
+
a 404, a captive portal answering with an HTML page, a dropped connection, or
|
|
29
|
+
a timeout. TLS alone is thin trust for the artifact that becomes the git
|
|
30
|
+
baseline every patch is built on, and "the checksum host was unreachable" is
|
|
31
|
+
exactly the condition someone positioned on the network can arrange.
|
|
32
|
+
|
|
33
|
+
- `firefox.sha256` pins the digest. It takes precedence over the published
|
|
34
|
+
file and is the right answer for reproducible builds and offline mirrors:
|
|
35
|
+
obtain it out of band, and the download verifies with no network beyond the
|
|
36
|
+
archive itself.
|
|
37
|
+
- `firefox.allowUnverifiedDownload: true` accepts a download when the
|
|
38
|
+
published digest is unavailable, with a loud warning. This disables the
|
|
39
|
+
integrity check for that case, so the archive is trusted on TLS alone. Use
|
|
40
|
+
it only for a mirror you already trust, and prefer pinning `sha256`
|
|
41
|
+
instead. A digest that is fetched and does not match is rejected either
|
|
42
|
+
way. The setting is ignored when `sha256` is set.
|
|
43
|
+
|
|
44
|
+
`fireforge doctor` reports the pin beside what the checkout actually is (the
|
|
22
45
|
engine's own `browser/config/version.txt` and the version the last download
|
|
23
|
-
recorded
|
|
24
|
-
may legitimately be mid-migration. `product`, `sha256` and `candidate`
|
|
25
|
-
recorded counterpart on disk, so the check does not claim to have
|
|
26
|
-
them.
|
|
46
|
+
recorded) and warns when they disagree. It is a report, not a lock, since a
|
|
47
|
+
tree may legitimately be mid-migration. `product`, `sha256` and `candidate`
|
|
48
|
+
have no recorded counterpart on disk, so the check does not claim to have
|
|
49
|
+
verified them.
|
|
27
50
|
|
|
28
51
|
## External toolchains
|
|
29
52
|
|
|
30
53
|
Projects with generated asset prerequisites can declare opt-in
|
|
31
|
-
`externalToolchains`. `fireforge doctor` reports missing
|
|
32
|
-
errors and missing
|
|
54
|
+
`externalToolchains`. `fireforge doctor` reports missing required tools as
|
|
55
|
+
errors and missing optional tools as warnings.
|
|
33
56
|
|
|
34
57
|
Seasonal branding on macOS, for example, can declare Apple's Icon Composer
|
|
35
58
|
tool at
|
|
@@ -38,27 +61,28 @@ plus `actool` via `xcrun`, `sips`, and `iconutil`.
|
|
|
38
61
|
|
|
39
62
|
## `patchLint`
|
|
40
63
|
|
|
41
|
-
Per-patch lint type-checks plain Firefox JS against a built-in
|
|
42
|
-
shim that tracks upstream WebIDL additions per release.
|
|
64
|
+
Per-patch lint type-checks plain Firefox JS against a built-in
|
|
65
|
+
Firefox-globals shim that tracks upstream WebIDL additions per release.
|
|
43
66
|
|
|
44
|
-
- `patchLint.checkJsExtraShim` adds members to the structured shim globals
|
|
45
|
-
TypeScript interface merging,
|
|
67
|
+
- `patchLint.checkJsExtraShim` adds members to the structured shim globals
|
|
68
|
+
via TypeScript interface merging, for example
|
|
46
69
|
`interface ChromeUtilsShim { newApi(): any }`.
|
|
47
70
|
- `patchLint.checkJsTestFiles: true` extends the pass to patch-owned test
|
|
48
|
-
`.js` files (`browser_
|
|
49
|
-
is checked as its own small script-scope program against a loose
|
|
50
|
-
harness shim.
|
|
71
|
+
`.js` files (`browser_*`, `test_*`, `xpcshell_*`, and `/test/` paths). Each
|
|
72
|
+
one is checked as its own small script-scope program against a loose
|
|
73
|
+
built-in harness shim.
|
|
51
74
|
- `patchLint.checkJsTestShim` points at a project `.d.ts` whose typed
|
|
52
|
-
declarations (
|
|
53
|
-
baseline, so calls to
|
|
54
|
-
|
|
75
|
+
declarations (a real `TestUtils` interface, say) override the loose
|
|
76
|
+
baseline, so calls to harness members that do not exist fail at export
|
|
77
|
+
time.
|
|
78
|
+
- `patchLint.prettier` (`'off'`, `'warning'` or `'error'`, default `'off'`)
|
|
55
79
|
runs the project's configured Prettier over patch-owned `.sys.mjs`
|
|
56
80
|
modules. It runs from inside `engine/`, so `engine/.prettierrc*` and
|
|
57
|
-
`engine/.prettierignore` decide
|
|
58
|
-
can report a false pass when the root `.prettierignore` excludes
|
|
81
|
+
`engine/.prettierignore` decide the outcome. The same command run from the
|
|
82
|
+
repo root can report a false pass when the root `.prettierignore` excludes
|
|
59
83
|
`engine/`. Prettier is resolved from `engine/node_modules`, then the
|
|
60
|
-
project's, then `npx --no-install`.
|
|
61
|
-
scope for the per-patch tier
|
|
84
|
+
project's, then `npx --no-install`. Left at `'off'`, formatting is out of
|
|
85
|
+
scope for the per-patch tier, and no other tier checks `.sys.mjs`
|
|
62
86
|
formatting either.
|
|
63
87
|
- `patchLint.fileSizeThresholds` tunes the `file-too-large` line counts per
|
|
64
88
|
file class:
|
|
@@ -75,11 +99,11 @@ shim that tracks upstream WebIDL additions per release.
|
|
|
75
99
|
```
|
|
76
100
|
|
|
77
101
|
Every field is optional and merges over the defaults (general
|
|
78
|
-
`500/750/900`, test `1200/1400/1600`). The merged triple
|
|
79
|
-
`notice <= warning <= error`, which is validated at config load.
|
|
80
|
-
|
|
81
|
-
a hard failure
|
|
82
|
-
let you move.
|
|
102
|
+
`500/750/900`, test `1200/1400/1600`). The merged triple has to satisfy
|
|
103
|
+
`notice <= warning <= error`, which is validated at config load. Under
|
|
104
|
+
the recommended gate posture `--max-warnings 0`, the `warning` band
|
|
105
|
+
is a hard failure rather than a soft limit, which is what these thresholds
|
|
106
|
+
exist to let you move.
|
|
83
107
|
|
|
84
108
|
## `patchPolicy`
|
|
85
109
|
|
|
@@ -91,61 +115,131 @@ gaps does not move a patch out of the band its category owns.
|
|
|
91
115
|
`test.canaryPath` and `test.canaryTimeoutSeconds` supply the defaults for
|
|
92
116
|
`fireforge test --canary`. See [`testing.md`](testing.md).
|
|
93
117
|
|
|
118
|
+
## `buildAudit`
|
|
119
|
+
|
|
120
|
+
The post-build packaging audit is warn-only. Most of what it would otherwise
|
|
121
|
+
report as "missing packaged artifact" is classified away from the structure
|
|
122
|
+
of the tree itself: an unselected `--with-branding` tree read from the
|
|
123
|
+
generated `engine/mozconfig`, a directory reached only through a
|
|
124
|
+
platform-gated `DIRS +=` in an ancestor `moz.build`, a Storybook
|
|
125
|
+
`*.stories.mjs`. One case cannot be derived from the tree: a source that is
|
|
126
|
+
deliberately never packaged, such as a type-only mirror whose header says it
|
|
127
|
+
is never loaded. Declare those:
|
|
128
|
+
|
|
129
|
+
```json
|
|
130
|
+
{
|
|
131
|
+
"buildAudit": {
|
|
132
|
+
"unpackaged": [
|
|
133
|
+
{
|
|
134
|
+
"path": "browser/base/content/hominis-tile-host-types.js",
|
|
135
|
+
"reason": "Type-only mirror of the tile host, never loaded, and no jar.mn entry by design."
|
|
136
|
+
}
|
|
137
|
+
]
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
- `path` is engine-relative. A `*` may glob within one path segment. `**` is
|
|
143
|
+
refused, because a subtree carve-out is how a reviewed exception quietly
|
|
144
|
+
becomes a blanket one.
|
|
145
|
+
- `reason` is required and must be non-empty. This is the one audit class
|
|
146
|
+
FireForge cannot verify against the tree, so the declaration is the
|
|
147
|
+
evidence. By the time someone reads it, an unexplained carve-out is
|
|
148
|
+
indistinguishable from a mistake.
|
|
149
|
+
- Admitted paths are listed in the audit output, never silenced. The notice
|
|
150
|
+
reads `admitted as unpackaged by buildAudit.unpackaged "<path>"` followed
|
|
151
|
+
by the declared reason.
|
|
152
|
+
- A declared path that does resolve to a packaged artifact is reported as a
|
|
153
|
+
stale carve-out rather than suppressed, because the declaration asserts a
|
|
154
|
+
fact about the tree that is no longer true.
|
|
155
|
+
- A declaration matching nothing that changed in a given run says nothing.
|
|
156
|
+
Unlike `--expect-unmanaged`, whose unmet entries are reported because it is
|
|
157
|
+
a per-invocation flag list, this is a standing list checked only against
|
|
158
|
+
the files that happened to change, so "not met" is the normal case.
|
|
159
|
+
|
|
160
|
+
The `Packaged:` summary line names each non-zero skip class with its count,
|
|
161
|
+
so a run that dismissed four unselected-branding files reads differently from
|
|
162
|
+
one that dismissed four unregistered sources.
|
|
163
|
+
|
|
94
164
|
## Design tokens
|
|
95
165
|
|
|
96
|
-
Tokens are managed with `fireforge token add`.
|
|
166
|
+
Tokens are managed with `fireforge token add`. `fireforge token list` and
|
|
167
|
+
`fireforge token show` report what is already there.
|
|
97
168
|
|
|
98
169
|
- `--create-category` declares a new category banner and inserts the token in
|
|
99
|
-
one step. It
|
|
100
|
-
base token first, then add each variant.
|
|
170
|
+
one step. It cannot be combined with `--variant`: author the category with
|
|
171
|
+
the base token first, then add each variant.
|
|
101
172
|
- `--category` is required for a base declaration and optional under
|
|
102
173
|
`--variant`, where the declaration is routed into a `:root<selector>` block
|
|
103
174
|
and never into a category section. It is still validated when supplied.
|
|
104
175
|
- `--variant` takes the same selector grammar the block matcher understands:
|
|
105
|
-
one attribute fragment (`[data-private]`, `[data-skin=precision]`), a run
|
|
106
|
-
them (`[data-skin=precision][data-theme=dark]`), and an optional
|
|
107
|
-
tail (`[data-skin=precision]:not([data-private])`). Names and
|
|
108
|
-
identifier-safe, and `=value` is normalized to `="value"`. A
|
|
109
|
-
qualifier matches only a block carrying that qualifier
|
|
110
|
-
qualifier still matches a qualified block, and the write says
|
|
176
|
+
one attribute fragment (`[data-private]`, `[data-skin=precision]`), a run
|
|
177
|
+
of them (`[data-skin=precision][data-theme=dark]`), and an optional
|
|
178
|
+
pseudo-class tail (`[data-skin=precision]:not([data-private])`). Names and
|
|
179
|
+
values must be identifier-safe, and `=value` is normalized to `="value"`. A
|
|
180
|
+
variant naming a qualifier matches only a block carrying that qualifier.
|
|
181
|
+
One without a qualifier still matches a qualified block, and the write says
|
|
182
|
+
so.
|
|
111
183
|
- `--mode override` mirrors into both `:root[data-theme="dark"]` and
|
|
112
184
|
`:root[data-theme="light"]`. A qualified block such as
|
|
113
185
|
`:root[data-theme="light"]:not([data-private])` is matched and written
|
|
114
|
-
through, with a warning naming the selector
|
|
115
|
-
|
|
116
|
-
worse failure.
|
|
186
|
+
through, with a warning naming the selector. The qualifier carries meaning,
|
|
187
|
+
but silently skipping half the mirror is the worse failure.
|
|
117
188
|
- A token already present in the target block is reported with its location
|
|
118
|
-
(`already exists in :root[…] (line N), unchanged`) rather than a bare
|
|
189
|
+
(`already exists in :root[…] (line N), unchanged`) rather than as a bare
|
|
119
190
|
no-op.
|
|
120
191
|
|
|
192
|
+
### Reading the token file
|
|
193
|
+
|
|
194
|
+
`token add --category` refuses a category that the tokens CSS does not
|
|
195
|
+
declare, so `token list` exists to name the categories without you
|
|
196
|
+
hand-parsing a `= Category =` banner out of the file.
|
|
197
|
+
|
|
198
|
+
- `fireforge token list [--category <name>] [--json]` reports each category
|
|
199
|
+
banner with the tokens declared under it, in file order. Declarations above
|
|
200
|
+
the first banner are reported under `(no category)` rather than dropped,
|
|
201
|
+
and a banner with no tokens is still listed, since `token add` accepts it.
|
|
202
|
+
An unknown `--category` is refused by naming the ones that exist, because a
|
|
203
|
+
filter that printed nothing would read as "this category is empty".
|
|
204
|
+
- `fireforge token show <token-name> [--json]` reports the owning category
|
|
205
|
+
and the value the token takes in every block that declares it: the base
|
|
206
|
+
`:root`, the dark `@media` mirror, and each `:root[variant]`, with the line
|
|
207
|
+
of each. The leading `--` is optional, and if you include it, pass the `--`
|
|
208
|
+
separator first (`fireforge token show -- --my-token`).
|
|
209
|
+
|
|
210
|
+
Only the base `:root` block owns a token, so `token list` reports it once.
|
|
211
|
+
The dark and variant blocks mirror it and appear in `token show`.
|
|
212
|
+
|
|
121
213
|
## Smoke runs
|
|
122
214
|
|
|
123
215
|
For unattended smoke checks, `fireforge run --smoke-exit <s> --headless`
|
|
124
216
|
launches the browser headless. A headed smoke window on a shared desktop
|
|
125
|
-
absorbs live input, which contaminates the console capture
|
|
126
|
-
launches print a warning saying so. Exit codes 12 and 13 separate a
|
|
127
|
-
regression from a launch failure
|
|
217
|
+
absorbs live input, which contaminates the console capture, so headed
|
|
218
|
+
non-CI launches print a warning saying so. Exit codes 12 and 13 separate a
|
|
219
|
+
console regression from a launch failure. See
|
|
220
|
+
[`exit-codes.md`](exit-codes.md).
|
|
128
221
|
|
|
129
222
|
## Lock waits
|
|
130
223
|
|
|
131
|
-
Every FireForge command that mutates the engine takes the engine-session
|
|
132
|
-
and some take a second subsystem lock as well. Contention fails fast
|
|
133
|
-
about a second by default.
|
|
224
|
+
Every FireForge command that mutates the engine takes the engine-session
|
|
225
|
+
lock, and some take a second subsystem lock as well. Contention fails fast
|
|
226
|
+
after about a second by default.
|
|
134
227
|
|
|
135
|
-
`--wait-lock [seconds]` (bare flag
|
|
136
|
-
bounded wait, and the budget covers
|
|
137
|
-
`furnace apply
|
|
138
|
-
engine-session lock. While waiting, a progress line roughly every 5
|
|
139
|
-
identifies the holder by PID, command and start time.
|
|
228
|
+
`--wait-lock [seconds]` (bare flag means 60, valid range 1 to 3600) replaces
|
|
229
|
+
that with a bounded wait, and the budget covers every lock the command takes.
|
|
230
|
+
For `furnace apply`, `deploy` and `sync` that means the furnace lock as well
|
|
231
|
+
as the engine-session lock. While waiting, a progress line roughly every 5
|
|
232
|
+
seconds identifies the holder by PID, command and start time.
|
|
140
233
|
|
|
141
234
|
Commands that take no lock accept `--wait-lock` and ignore it, so a scripted
|
|
142
|
-
sequence can
|
|
235
|
+
sequence can append the flag everywhere without a usage error killing the
|
|
236
|
+
run.
|
|
143
237
|
|
|
144
238
|
`FIREFORGE_WAIT_LOCK=<seconds>` applies the same budget to every command in a
|
|
145
239
|
session, using the same bounds as the flag. It is the only way to give a
|
|
146
240
|
budget to the furnace mutators that declare no flag (`create`, `remove`,
|
|
147
|
-
`rename`, `refresh`, `scan`, `override`, `chrome-doc`,
|
|
148
|
-
`--wait-lock` always wins.
|
|
241
|
+
`rename`, `refresh`, `scan`, `override`, `chrome-doc`, and the rest). An
|
|
242
|
+
explicit `--wait-lock` always wins.
|
|
149
243
|
|
|
150
244
|
`fireforge status --lock` reports the current holder and queue depth.
|
|
151
245
|
|
|
@@ -153,11 +247,11 @@ budget to the furnace mutators that declare no flag (`create`, `remove`,
|
|
|
153
247
|
|
|
154
248
|
| Variable | Effect |
|
|
155
249
|
| ------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------- |
|
|
156
|
-
| `FIREFORGE_WAIT_LOCK` | Session-wide lock wait budget in seconds (1
|
|
250
|
+
| `FIREFORGE_WAIT_LOCK` | Session-wide lock wait budget in seconds (1 to 3600). See above. |
|
|
157
251
|
| `FIREFORGE_MAX_UNTRACKED_FILES` | Per-directory cap when expanding collapsed untracked directories in `status` (default 5000). A non-positive value warns and is ignored. |
|
|
158
252
|
| `FIREFORGE_GIT_ADD_TIMEOUT_MS` | Timeout for the monolithic `git add -A` baseline pass (default 10 min). For slow or loaded filesystems. |
|
|
159
253
|
| `FIREFORGE_GIT_ADD_CHUNK_TIMEOUT_MS` | Timeout for the chunked `git add -- <dir>` fallback (default 30 min). Paired with the above. |
|
|
160
254
|
|
|
161
|
-
`CLAUDECODE` is read by mozbuild, not by FireForge
|
|
162
|
-
--full-output` unsets it for test dispatches only
|
|
255
|
+
`CLAUDECODE` is read by mozbuild, not by FireForge. `fireforge test
|
|
256
|
+
--full-output` unsets it for test dispatches only. See
|
|
163
257
|
[`testing.md`](testing.md#output-verbosity).
|
package/docs/exit-codes.md
CHANGED
|
@@ -2,64 +2,81 @@
|
|
|
2
2
|
|
|
3
3
|
# Exit codes (internal)
|
|
4
4
|
|
|
5
|
-
The exit code is the machine-readable half of the CLI's contract
|
|
6
|
-
branches on it, and CI
|
|
7
|
-
in `src/errors/codes.ts
|
|
8
|
-
|
|
5
|
+
The exit code is the machine-readable half of the CLI's contract. A script
|
|
6
|
+
branches on it, and CI uses it to decide whether to retry or escalate. The
|
|
7
|
+
values live in `src/errors/codes.ts`. This file says what they mean and
|
|
8
|
+
which error class produces each one.
|
|
9
9
|
|
|
10
|
-
| Code | Name | Meaning
|
|
11
|
-
| ---: | ---------------------- |
|
|
12
|
-
| 0 | `SUCCESS` | Completed. Also a run that prompted and the operator declined
|
|
13
|
-
| 1 | `GENERAL_ERROR` | Unspecified failure the operator
|
|
14
|
-
| 2 | `CONFIG_ERROR` | `fireforge.json` missing or invalid.
|
|
15
|
-
| 3 | `DOWNLOAD_ERROR` | Could not download or extract Firefox source.
|
|
16
|
-
| 4 | `GIT_ERROR` | A git operation failed.
|
|
17
|
-
| 5 | `BUILD_ERROR` | `mach build` failed, or a test suite went red.
|
|
18
|
-
| 6 | `PATCH_ERROR` | A patch failed to apply, or the patch queue could not be mutated.
|
|
19
|
-
| 7 | `MISSING_DEPENDENCY` | A required tool (python3, git, tar) was not found.
|
|
20
|
-
| 8 | `INVALID_ARGUMENT` | The flags were wrong.
|
|
21
|
-
| 9 | `FURNACE_ERROR` | A Furnace component operation failed.
|
|
22
|
-
| 10 | `RESOLUTION_ERROR` | Conflict resolution failed.
|
|
23
|
-
| 11 | `INTERNAL_ERROR` | A FireForge invariant did not hold.
|
|
24
|
-
| 12 | `SMOKE_EXIT_FAILURE` | `run --smoke-exit` saw
|
|
25
|
-
| 13 | `SMOKE_LAUNCH_FAILURE` | `run --smoke-exit` saw
|
|
26
|
-
| 14 | `INCONCLUSIVE` | A test run's verdict was thrown away
|
|
27
|
-
| 15 | `LOCK_TIMEOUT` | A lock wait expired, so the run never started. Re-queue it
|
|
28
|
-
| 130 | `USER_CANCELLED` | The operator
|
|
10
|
+
| Code | Name | Meaning | Produced by |
|
|
11
|
+
| ---: | ---------------------- | ----------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
|
|
12
|
+
| 0 | `SUCCESS` | Completed. Also a run that prompted and the operator declined: declining is a successful run that chose not to proceed. | (none) |
|
|
13
|
+
| 1 | `GENERAL_ERROR` | Unspecified failure the operator has to act on. | `GeneralError` (and `PreflightRefusalError`), `ParserFallbackError`, `ExecTimeoutError` |
|
|
14
|
+
| 2 | `CONFIG_ERROR` | `fireforge.json` missing or invalid. | `ConfigError` and subclasses |
|
|
15
|
+
| 3 | `DOWNLOAD_ERROR` | Could not download or extract Firefox source. | `DownloadError` and subclasses |
|
|
16
|
+
| 4 | `GIT_ERROR` | A git operation failed. | `GitError` and subclasses, except `GitNotFoundError` |
|
|
17
|
+
| 5 | `BUILD_ERROR` | `mach build` failed, or a test suite went red. | `BuildError` and subclasses, `TestFailureError` |
|
|
18
|
+
| 6 | `PATCH_ERROR` | A patch failed to apply, or the patch queue could not be mutated. | `PatchError`, `PatchManifestCorruptError`, `RebaseError` and subclasses |
|
|
19
|
+
| 7 | `MISSING_DEPENDENCY` | A required tool (python3, git, tar) was not found. | `PythonNotFoundError`, `GitNotFoundError`, `MachNotFoundError` |
|
|
20
|
+
| 8 | `INVALID_ARGUMENT` | The flags were wrong. A usage problem, not an environment one. | `InvalidArgumentError`, plus commander usage errors (unknown command or option, missing argument) |
|
|
21
|
+
| 9 | `FURNACE_ERROR` | A Furnace component operation failed. | `FurnaceError` |
|
|
22
|
+
| 10 | `RESOLUTION_ERROR` | Conflict resolution failed. | `ResolutionError` |
|
|
23
|
+
| 11 | `INTERNAL_ERROR` | A FireForge invariant did not hold. This is a bug in FireForge, not something the operator can fix. | `InternalInvariantError` |
|
|
24
|
+
| 12 | `SMOKE_EXIT_FAILURE` | `run --smoke-exit` saw console errors that were not allowed in the smoke window. | `SmokeRunError` |
|
|
25
|
+
| 13 | `SMOKE_LAUNCH_FAILURE` | `run --smoke-exit` saw the browser exit uncleanly before the window elapsed. | `SmokeRunError` |
|
|
26
|
+
| 14 | `INCONCLUSIVE` | A test run's verdict was thrown away because `engine/` moved while the harness ran. This is not red. Re-run it. | `InconclusiveVerdictError` |
|
|
27
|
+
| 15 | `LOCK_TIMEOUT` | A lock wait expired, so the run never started. Re-queue it with a larger `--wait-lock`. | `LockContentionError` |
|
|
28
|
+
| 130 | `USER_CANCELLED` | The operator interrupted a prompt (Esc or Ctrl+C). 128 + SIGINT. | `CancellationError` |
|
|
29
|
+
|
|
30
|
+
Usage errors that commander detects itself (an unknown command, an unknown
|
|
31
|
+
or malformed option, a missing required argument) never reach a command
|
|
32
|
+
action. Before 0.46.0 commander terminated the process with its own exit 1
|
|
33
|
+
and printed no refusal envelope under `--json`. `createProgram` now installs
|
|
34
|
+
commander's `exitOverride()`, and the entry point maps the resulting
|
|
35
|
+
`CommanderError` to `INVALID_ARGUMENT` (8) with the standard envelope on
|
|
36
|
+
stdout. `--help` and `--version` take the same path and still exit 0, and so
|
|
37
|
+
does a command group invoked without a subcommand (`fireforge`,
|
|
38
|
+
`fireforge tree`): commander prints the group's help and the entry point
|
|
39
|
+
treats that as informational rather than as a wrong flag. That matches the
|
|
40
|
+
exit 0 that `patch`, `token` and `furnace` give through their own help
|
|
41
|
+
action.
|
|
29
42
|
|
|
30
43
|
## The three distinctions that matter for CI
|
|
31
44
|
|
|
32
|
-
**Retry
|
|
33
|
-
something and a retry may help. `INTERNAL_ERROR` means nothing
|
|
34
|
-
change would have helped
|
|
45
|
+
**Retry or escalate.** `GENERAL_ERROR` usually means the operator has to
|
|
46
|
+
change something, and a retry may then help. `INTERNAL_ERROR` means nothing
|
|
47
|
+
they could change would have helped. Escalate it, do not retry.
|
|
48
|
+
|
|
49
|
+
**Red, never ran, or thrown away.** These are three different facts, and
|
|
50
|
+
before 0.44.0 two of them shared exit 1.
|
|
51
|
+
|
|
52
|
+
- `BUILD_ERROR` (5) is a suite that failed. Since 0.45.0 it is thrown as
|
|
53
|
+
`TestFailureError`, which keeps the code but carries test remedies rather
|
|
54
|
+
than build ones (`--json` reports it as `test-failure`).
|
|
55
|
+
- `LOCK_TIMEOUT` (15) is a run that never started, because another FireForge
|
|
56
|
+
process held the lock for the whole budget. Nothing about the request was
|
|
57
|
+
wrong, so re-queue it.
|
|
58
|
+
- `INCONCLUSIVE` (14) is a suite whose result was discarded because
|
|
59
|
+
`engine/` moved underneath it. The code may be perfectly green, so
|
|
60
|
+
reporting it as red is wrong.
|
|
35
61
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
`test-failure`). `LOCK_TIMEOUT` (15) is a run that never started, because another
|
|
41
|
-
FireForge process held the lock for the whole budget — nothing about the
|
|
42
|
-
request was wrong, so re-queue it. `INCONCLUSIVE` (14) is a suite whose
|
|
43
|
-
result was DISCARDED, because `engine/` moved underneath it — the code may
|
|
44
|
-
be perfectly green, and reporting it as red is wrong. A summary line reading
|
|
45
|
-
`FAIL — exit 1` beside `FAIL — exit 5` invited treating opposites as the same
|
|
46
|
-
kind of fact; the codes now separate them mechanically. The
|
|
47
|
-
`FIREFORGE-VERDICT:` line's `reason=` key carries the same distinction for
|
|
48
|
-
humans.
|
|
62
|
+
A summary line reading `FAIL - exit 1` beside `FAIL - exit 5` invited
|
|
63
|
+
treating opposite facts as the same kind of thing. The codes now separate
|
|
64
|
+
them. The `FIREFORGE-VERDICT:` line's `reason=` key carries the same
|
|
65
|
+
distinction for humans.
|
|
49
66
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
67
|
+
`LockContentionError` backs every lock in FireForge (engine session, patch
|
|
68
|
+
directory, build, furnace), so all four exit 15. That is intentional: the
|
|
69
|
+
fact is the same whichever lock was contended.
|
|
53
70
|
|
|
54
|
-
**Interrupted
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
`CancellationError` and exits
|
|
58
|
-
normally and exits
|
|
59
|
-
|
|
71
|
+
**Interrupted or declined.** Before 0.44.0 a Ctrl+C and a deliberate "no" at
|
|
72
|
+
a confirmation both returned the same value and exited 0, so a script could
|
|
73
|
+
not tell them apart. They are now distinct: an interrupt raises
|
|
74
|
+
`CancellationError` and exits 130, and a declined confirmation returns
|
|
75
|
+
normally and exits 0, because the run did what it was asked and the answer
|
|
76
|
+
was no.
|
|
60
77
|
|
|
61
78
|
## Adding a code
|
|
62
79
|
|
|
63
80
|
New codes go in `src/errors/codes.ts` with a comment saying what a consumer
|
|
64
|
-
should
|
|
81
|
+
should do differently on seeing it. If the answer is "nothing different from
|
|
65
82
|
an existing code", it does not need one. Add a row here in the same change.
|
package/docs/furnace.md
CHANGED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
# Furnace components
|
|
4
4
|
|
|
5
|
-
Furnace is FireForge
|
|
5
|
+
Furnace is how FireForge handles UI components. It tracks stock widgets,
|
|
6
6
|
creates new fork-owned widgets, and overrides existing ones. The files still
|
|
7
|
-
land inside the Firefox source directory and end up
|
|
8
|
-
|
|
7
|
+
land inside the Firefox source directory and end up in the regular patches
|
|
8
|
+
you export.
|
|
9
9
|
|
|
10
10
|
```bash
|
|
11
11
|
npx fireforge furnace scan
|
|
@@ -20,38 +20,39 @@ npx fireforge furnace preview
|
|
|
20
20
|
|
|
21
21
|
## Shared CSS fragments
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
`components/shared/` and reference it from a widget stylesheet with a
|
|
23
|
+
CSS used by more than one widget can live in a single file. Put the fragment
|
|
24
|
+
in `components/shared/` and reference it from a widget stylesheet with a
|
|
25
25
|
comment:
|
|
26
26
|
|
|
27
27
|
```css
|
|
28
28
|
/* @fireforge-include base-button.css */
|
|
29
29
|
```
|
|
30
30
|
|
|
31
|
-
`deploy` expands
|
|
32
|
-
|
|
31
|
+
`deploy` expands the fragment into the deployed copy only, so editing the
|
|
32
|
+
fragment shows up as component drift until the next deploy.
|
|
33
33
|
|
|
34
34
|
## Typed cross-module imports
|
|
35
35
|
|
|
36
36
|
For multi-file components, set `furnace.json#typecheckJsconfig` to a
|
|
37
37
|
consumer-owned jsconfig. `deploy` then maintains `compilerOptions.paths`
|
|
38
|
-
entries
|
|
38
|
+
entries that map each deployed
|
|
39
39
|
`chrome://global/content/elements/<file>.mjs` URL to its workspace source.
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
workspace
|
|
43
|
-
helper was deleted is pruned.
|
|
41
|
+
An entry counts as Furnace-managed if it is contained in the components
|
|
42
|
+
workspace. A hand-written entry is therefore preserved, and a managed entry
|
|
43
|
+
whose helper was deleted is pruned.
|
|
44
44
|
|
|
45
45
|
## Safety
|
|
46
46
|
|
|
47
|
-
Every furnace mutation runs through `runFurnaceMutation
|
|
48
|
-
rollback journal restored on both a signal and a thrown
|
|
49
|
-
`pendingRepair` marker that blocks further mutations when a
|
|
50
|
-
|
|
51
|
-
|
|
47
|
+
Every furnace mutation runs through `runFurnaceMutation`, which gives it a
|
|
48
|
+
per-root lock, a rollback journal restored on both a signal and a thrown
|
|
49
|
+
error, and a `pendingRepair` marker that blocks further mutations when a
|
|
50
|
+
rollback was incomplete. Clear the marker with
|
|
51
|
+
`fireforge doctor --repair-furnace`. The full contract, including which
|
|
52
|
+
commands take which locks, is in
|
|
52
53
|
[`lifecycle-invariants.md`](lifecycle-invariants.md).
|
|
53
54
|
|
|
54
|
-
`apply`, `deploy` and `sync` accept `--wait-lock [seconds]`,
|
|
55
|
-
covers
|
|
56
|
-
|
|
55
|
+
`apply`, `deploy` and `sync` accept `--wait-lock [seconds]`, and that budget
|
|
56
|
+
covers both locks they take. The twelve mutators without the flag pick up a
|
|
57
|
+
session budget from `FIREFORGE_WAIT_LOCK`. See
|
|
57
58
|
[`configuration.md`](configuration.md#lock-waits).
|