@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/machine-output.md
CHANGED
|
@@ -6,8 +6,8 @@ The `--json` surface is a contract with scripted consumers. Before 0.44.0 it
|
|
|
6
6
|
was four unrelated shapes: `status --json` and `tree list --json` shared a
|
|
7
7
|
`schemaVersion: 1` envelope but disagreed on failure, `test` emitted a
|
|
8
8
|
`FIREFORGE-VERDICT:` line, and `lint --per-patch --report` wrote a versioned
|
|
9
|
-
file nothing ever reads back. This file
|
|
10
|
-
|
|
9
|
+
file that nothing ever reads back. This file states what a `--json` command
|
|
10
|
+
has to do, so the next one added does not invent a fifth shape.
|
|
11
11
|
|
|
12
12
|
## The rules
|
|
13
13
|
|
|
@@ -16,22 +16,23 @@ file nothing ever reads back. This file is the single statement of what a
|
|
|
16
16
|
2. **Failure writes exactly one error document to stdout**, of the shape
|
|
17
17
|
`{ "schemaVersion": 1, "error": "<human message>", "code": "<tag>" }`,
|
|
18
18
|
and then exits non-zero. The `error` text is the same sentence the
|
|
19
|
-
non-JSON mode would print
|
|
20
|
-
(`engine-missing`, `engine-not-git`, `tree-list-failed`,
|
|
21
|
-
may branch on.
|
|
19
|
+
non-JSON mode would print. `code` is a stable machine-readable tag
|
|
20
|
+
(`engine-missing`, `engine-not-git`, `tree-list-failed`, and so on) that
|
|
21
|
+
consumers may branch on.
|
|
22
22
|
3. **Machine mode is engaged before any output.** `setMachineOutputMode(true)`
|
|
23
|
-
|
|
24
|
-
rendered later by `withErrorHandling
|
|
23
|
+
has to run before the first write, so that every diagnostic, including one
|
|
24
|
+
rendered later by `withErrorHandling`, goes to stderr and cannot
|
|
25
25
|
interleave with the payload.
|
|
26
26
|
4. **stdout carries nothing else.** No banners, no progress, no warnings.
|
|
27
27
|
`logger.ts` enforces this through a single `routeToStderr()` gate that all
|
|
28
|
-
its helpers consult, including `spinner()`, `note()` and
|
|
28
|
+
of its helpers consult, including `spinner()`, `note()` and
|
|
29
|
+
`intro`/`outro`.
|
|
29
30
|
|
|
30
31
|
## Implementation
|
|
31
32
|
|
|
32
33
|
Use `emitMachineError` from `src/utils/machine-output.ts` for rule 2. It
|
|
33
34
|
writes the envelope and throws `CommandError`, which the CLI boundary treats
|
|
34
|
-
as already
|
|
35
|
+
as already rendered, so the boundary adds no second rendering on stderr.
|
|
35
36
|
|
|
36
37
|
```ts
|
|
37
38
|
if (options.json === true) {
|
|
@@ -52,22 +53,24 @@ if (options.json === true) {
|
|
|
52
53
|
|
|
53
54
|
## Current surfaces
|
|
54
55
|
|
|
55
|
-
| Surface | Shape
|
|
56
|
-
| ---------------------------------- |
|
|
57
|
-
| `status --json` | `{ schemaVersion: 1, … }`
|
|
58
|
-
| `tree list --json` | `{ schemaVersion: 1, trees }`
|
|
59
|
-
| `
|
|
60
|
-
| `
|
|
61
|
-
| `
|
|
62
|
-
| `
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
56
|
+
| Surface | Shape | Notes |
|
|
57
|
+
| ---------------------------------- | -------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
58
|
+
| `status --json` | `{ schemaVersion: 1, … }` | Error envelope on three engine preconditions |
|
|
59
|
+
| `tree list --json` | `{ schemaVersion: 1, trees }` | Error envelope added in 0.44.0 |
|
|
60
|
+
| `token list --json` | `{ schemaVersion: 1, tokensCssPath, categories }` | Categories in file order, each with its tokens (`name`, `line`, `value`) |
|
|
61
|
+
| `token show --json` | `{ schemaVersion: 1, name, category, declarations }` | One entry per declaring block, with its selector trail and line |
|
|
62
|
+
| `test` verdict line | `FIREFORGE-VERDICT: PASS\|FAIL reason=… [note=<class>] [log=<path>]` | Not JSON. A single final stdout line, sealed by `setStdoutSealed` so nothing can displace it. `log=` names the run's own complete output under `.fireforge/logs/`, so a piped or truncated run still leaves a re-readable artifact |
|
|
63
|
+
| `lint --per-patch --report <path>` | `{ schemaVersion: 1, … }` | Written to a file, never read back by FireForge |
|
|
64
|
+
| `status --raw` | `git status --porcelain` lines | Not JSON, but still a machine surface: it engages the same stdout discipline, so rules 3 and 4 apply and rules 1 and 2 do not. A clean tree prints nothing |
|
|
65
|
+
| `build` log announcement | `Full build output: <path>` | Not JSON. `build` prints no verdict line, so it names its run log directly on the way out |
|
|
66
|
+
|
|
67
|
+
`--raw` is why `cli.ts` reads `process.argv` for `--json` or `--raw` before
|
|
68
|
+
dispatching. Rule 3 is about who owns stdout, and that question is settled
|
|
69
|
+
the same way for a porcelain stream as for a JSON document.
|
|
67
70
|
|
|
68
71
|
`doctor` and `verify` have no `--json` mode. `doctor` already computes a
|
|
69
|
-
serializable `DoctorCheck[]`, so adding one is cheap if a consumer asks
|
|
70
|
-
|
|
72
|
+
serializable `DoctorCheck[]`, so adding one is cheap if a consumer asks for
|
|
73
|
+
it. Follow the rules above rather than inventing a shape.
|
|
71
74
|
|
|
72
75
|
The run logs behind `log=` are specified in [`run-logs.md`](run-logs.md).
|
|
73
76
|
|
|
@@ -75,20 +78,41 @@ The run logs behind `log=` are specified in [`run-logs.md`](run-logs.md).
|
|
|
75
78
|
|
|
76
79
|
`schemaVersion` is `MACHINE_OUTPUT_SCHEMA_VERSION` in
|
|
77
80
|
`src/utils/machine-output.ts`. Additive changes (a new key) do not bump it.
|
|
78
|
-
Removing or retyping a key does, and needs a note
|
|
79
|
-
|
|
81
|
+
Removing or retyping a key does, and needs a changelog note saying what
|
|
82
|
+
moved.
|
|
80
83
|
|
|
81
84
|
## `test` verdict reasons
|
|
82
85
|
|
|
83
86
|
`FIREFORGE-VERDICT: FAIL reason=<reason>` uses a closed set
|
|
84
87
|
(`FireforgeVerdictReason`, `src/commands/test-verdict.ts`):
|
|
85
88
|
|
|
86
|
-
| Reason | Meaning
|
|
87
|
-
| --------------- |
|
|
88
|
-
| `crash` | The harness or the browser died
|
|
89
|
-
| `no-tests` | The run dispatched but nothing ran.
|
|
90
|
-
| `test-failures` | The suite ran and reported unexpected results.
|
|
91
|
-
| `preflight` | The run was refused before the harness was reached.
|
|
92
|
-
| `inconclusive` | A result exists but `engine/` moved under it, so
|
|
93
|
-
| `lock-timeout` | The run never started: the engine session lock stayed contended.
|
|
94
|
-
| `killed` | A signal terminated the run. Written from the signal handler so a log tail
|
|
89
|
+
| Reason | Meaning |
|
|
90
|
+
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
91
|
+
| `crash` | The harness or the browser died, so there is no trustworthy suite result. |
|
|
92
|
+
| `no-tests` | The run dispatched but nothing ran. |
|
|
93
|
+
| `test-failures` | The suite ran and reported unexpected results. |
|
|
94
|
+
| `preflight` | The run was refused before the harness was reached. |
|
|
95
|
+
| `inconclusive` | A result exists, but `engine/` moved under it, so the result was discarded. |
|
|
96
|
+
| `lock-timeout` | The run never started: the engine session lock stayed contended. |
|
|
97
|
+
| `killed` | A signal terminated the run. Written from the signal handler so that a log tail always describes itself. A killed run must never be silent, or "killed", "still running" and "never started" all look alike. |
|
|
98
|
+
|
|
99
|
+
### The additive `note=` key
|
|
100
|
+
|
|
101
|
+
A `FAIL reason=preflight` line covers every gate before the harness: a
|
|
102
|
+
missing build, a peer's packaging record replacing this session's, a
|
|
103
|
+
developer browser holding the objdir. An unattended reader whose pipe kept
|
|
104
|
+
only the verdict line could not tell those apart, so a preflight refusal that
|
|
105
|
+
can classify itself also emits `note=<class>`.
|
|
106
|
+
|
|
107
|
+
`note=` is additive, like `log=`, `signal=` and `shards=`. `reason=` is
|
|
108
|
+
unchanged and still comes from the closed set above, so a consumer that
|
|
109
|
+
tokenises `key=value` pairs is unaffected, and a gate that names no class
|
|
110
|
+
emits no `note=` at all. The classes are not a closed set and may grow, so
|
|
111
|
+
consumers should treat an unrecognised one as opaque. Current values:
|
|
112
|
+
`stale-browser`, `stale-browser-kill-failed`, `marionette-port-busy`,
|
|
113
|
+
`coverage-replaced`, `stale-build`, `stale-components`.
|
|
114
|
+
|
|
115
|
+
A preflight refusal's own text is written to stdout before the verdict line,
|
|
116
|
+
and into the run log, so the verdict stays the last stdout write while the
|
|
117
|
+
reason survives both a redirect and a `tail`. See
|
|
118
|
+
[`run-logs.md`](run-logs.md).
|
package/docs/patch-workflow.md
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
# Patch workflow
|
|
4
4
|
|
|
5
|
-
The day-to-day loop: change code inside `engine/`, export it, keep the
|
|
6
|
-
applying cleanly. `fireforge --help`
|
|
7
|
-
covers the
|
|
5
|
+
The day-to-day loop: change code inside `engine/`, export it, and keep the
|
|
6
|
+
queue applying cleanly. `fireforge --help` is the authority on flags. This
|
|
7
|
+
file covers the behavior a flag list cannot state.
|
|
8
8
|
|
|
9
9
|
## The loop
|
|
10
10
|
|
|
@@ -18,13 +18,13 @@ npx fireforge verify
|
|
|
18
18
|
|
|
19
19
|
## Exporting
|
|
20
20
|
|
|
21
|
-
Patch names are normalized on export and rename
|
|
21
|
+
Patch names are normalized on export and rename, so `window-chrome-tests`,
|
|
22
22
|
`ui-window-chrome-tests`, and `235-ui-window-chrome-tests` all resolve to the
|
|
23
23
|
same `<order>-ui-window-chrome-tests.patch` shape.
|
|
24
24
|
|
|
25
|
-
For large generated
|
|
26
|
-
assigns files to their owner patches without
|
|
27
|
-
manifest is JSON:
|
|
25
|
+
For large batches of generated assets, `re-export --scan --scan-files
|
|
26
|
+
<manifest>` assigns files to their owner patches without scanning whole
|
|
27
|
+
directories. The manifest is JSON:
|
|
28
28
|
|
|
29
29
|
```json
|
|
30
30
|
{
|
|
@@ -34,75 +34,79 @@ manifest is JSON:
|
|
|
34
34
|
}
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
-
The command
|
|
37
|
+
The command can be dry-run, refuses ambiguous ownership, and reports each
|
|
38
38
|
file-to-patch assignment before refreshing the patch.
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
restricts it to
|
|
40
|
+
`re-export` without a scan previews drift. `--refuse-foreign-drift --expect
|
|
41
|
+
<path>` restricts it to the files you intended.
|
|
42
42
|
|
|
43
43
|
### Deletions
|
|
44
44
|
|
|
45
|
-
A deleted upstream file is captured like any other change: a path
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
`filesAffected` entry
|
|
49
|
-
the entry would leave the body deleting a file the manifest says the
|
|
50
|
-
nothing to do with
|
|
51
|
-
will remove those files wherever it is applied.
|
|
45
|
+
A deleted upstream file is captured like any other change: a path tracked in
|
|
46
|
+
HEAD but absent from disk stays in the diff scope, and the emitted patch
|
|
47
|
+
carries a `deleted file mode` section. A captured deletion keeps its
|
|
48
|
+
`filesAffected` entry, because the patch is what performs the deletion, and
|
|
49
|
+
pruning the entry would leave the body deleting a file the manifest says the
|
|
50
|
+
patch has nothing to do with. It also still requires the confirmation,
|
|
51
|
+
because the patch will remove those files wherever it is applied.
|
|
52
52
|
|
|
53
|
-
An
|
|
53
|
+
An untracked absent path is refused rather than warned about, because a patch
|
|
54
54
|
cannot express it either way. The `--files` path also refuses when any
|
|
55
|
-
requested path produces no hunk
|
|
56
|
-
rather than the
|
|
57
|
-
silent success.
|
|
55
|
+
requested path produces no hunk. That is checked against the full requested
|
|
56
|
+
list rather than the subset left after filtering, so nothing dropped upstream
|
|
57
|
+
can pass as a silent success.
|
|
58
58
|
|
|
59
59
|
## Queue maintenance
|
|
60
60
|
|
|
61
61
|
Under `fireforge patch`:
|
|
62
62
|
|
|
63
|
-
- `patch compact` closes ordinal gaps
|
|
64
|
-
is configured
|
|
63
|
+
- `patch compact` closes ordinal gaps, and is range-aware when
|
|
64
|
+
`patchPolicy.ranges` is configured.
|
|
65
65
|
- `patch reorder` moves a patch.
|
|
66
66
|
- `patch split <source> --files <paths...> --name <name>` carves files out of
|
|
67
|
-
a patch into a new one as a single transaction
|
|
68
|
-
owner rewrites
|
|
67
|
+
a patch into a new one as a single transaction, including staged-dependency
|
|
68
|
+
owner rewrites, and supports `--dry-run`.
|
|
69
69
|
- `patch rename` also supports `--category` and `--order`.
|
|
70
70
|
|
|
71
|
-
Every queue-mutating patch command accepts `--wait-lock [seconds]
|
|
72
|
-
[`configuration.md`](configuration.md#lock-waits) for how the budget
|
|
71
|
+
Every queue-mutating patch command accepts `--wait-lock [seconds]`. See
|
|
72
|
+
[`configuration.md`](configuration.md#lock-waits) for how the budget
|
|
73
|
+
resolves.
|
|
73
74
|
|
|
74
75
|
## Linting the queue
|
|
75
76
|
|
|
76
77
|
`lint --per-patch --patches` accepts repeated flags, comma lists, full
|
|
77
|
-
filenames
|
|
78
|
+
filenames or stems, bare order numbers, manifest names, category-prefixed
|
|
79
|
+
slugs, and bare slugs.
|
|
78
80
|
|
|
79
81
|
`lint --per-patch --max-warnings 0` is the warning-clean form for a release
|
|
80
82
|
gate.
|
|
81
83
|
|
|
82
84
|
`lint --per-patch --report <path>` writes a machine-readable JSON report with
|
|
83
|
-
each patch's line count, tier, active size thresholds, issues, and
|
|
84
|
-
`lintIgnore
|
|
85
|
-
|
|
86
|
-
|
|
85
|
+
each patch's line count, tier, active size thresholds, issues, and issues
|
|
86
|
+
suppressed by `lintIgnore`. The size metrics (`countNonBinaryDiffLines`,
|
|
87
|
+
`resolvePatchSizeTier`, `getPatchSizeThresholds`) are also exported on the
|
|
88
|
+
programmatic API.
|
|
87
89
|
|
|
88
|
-
Per-patch lint type-checks plain Firefox JS against a built-in
|
|
89
|
-
shim that tracks upstream WebIDL additions per release. See
|
|
90
|
+
Per-patch lint type-checks plain Firefox JS against a built-in
|
|
91
|
+
Firefox-globals shim that tracks upstream WebIDL additions per release. See
|
|
90
92
|
[`configuration.md`](configuration.md#patchlint) for the project hooks
|
|
91
93
|
(`checkJsExtraShim`, `checkJsTestFiles`, `checkJsTestShim`).
|
|
92
94
|
|
|
93
|
-
For release whitespace checks, use `npm run whitespace:check
|
|
94
|
-
source diffs while excluding
|
|
95
|
+
For release whitespace checks, use `npm run whitespace:check`. It still
|
|
96
|
+
checks source diffs while excluding the diff syntax of generated
|
|
97
|
+
`patches/*.patch` files.
|
|
95
98
|
|
|
96
99
|
## CI enforcement
|
|
97
100
|
|
|
98
101
|
`fireforge status --check` exits non-zero when any unmanaged, drifted, or
|
|
99
102
|
conflicted file exists. `--fail-on <class,...>` tunes the policy set, and
|
|
100
|
-
`--json` composes
|
|
101
|
-
the owning `patch`. `--include-ownership` adds ownership rows to JSON
|
|
102
|
-
output.
|
|
103
|
+
`--json` composes with it: the JSON stays parseable and its `files[]` entries
|
|
104
|
+
name the owning `patch`. `--include-ownership` adds ownership rows to JSON
|
|
105
|
+
status output.
|
|
103
106
|
|
|
104
|
-
The JSON shapes are specified in [`machine-output.md`](machine-output.md),
|
|
105
|
-
the codes a script should branch on in
|
|
107
|
+
The JSON shapes are specified in [`machine-output.md`](machine-output.md),
|
|
108
|
+
and the codes a script should branch on in
|
|
109
|
+
[`exit-codes.md`](exit-codes.md).
|
|
106
110
|
|
|
107
111
|
## Rebasing onto a new Firefox source release
|
|
108
112
|
|
|
@@ -113,7 +117,7 @@ npx fireforge rebase
|
|
|
113
117
|
```
|
|
114
118
|
|
|
115
119
|
If a patch fails, fix the reject inside `engine/`, then run
|
|
116
|
-
`npx fireforge rebase --continue`. A rebase
|
|
117
|
-
|
|
118
|
-
rolled back
|
|
120
|
+
`npx fireforge rebase --continue`. A rebase leaves the engine mutated on
|
|
121
|
+
purpose, so its apply-and-persist pairs are held across a signal rather than
|
|
122
|
+
rolled back. See invariant 4 in
|
|
119
123
|
[`lifecycle-invariants.md`](lifecycle-invariants.md).
|
package/docs/run-logs.md
CHANGED
|
@@ -9,43 +9,87 @@
|
|
|
9
9
|
## Why the tool holds the log, not the operator
|
|
10
10
|
|
|
11
11
|
A run's diagnosis used to exist in exactly one place: the terminal. The
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
broke, and
|
|
15
|
-
`runMachCapture` keeps a 2 MB
|
|
16
|
-
the shard retry loop discards
|
|
12
|
+
convenient thing to do when output is long is
|
|
13
|
+
`fireforge test … 2>&1 | tail -40`, which keeps the summary, discards the
|
|
14
|
+
`TEST-UNEXPECTED-FAIL` lines that say what broke, and launders the exit code
|
|
15
|
+
as well. Nothing else held the output: `runMachCapture` keeps a 2 MB
|
|
16
|
+
in-memory tail that dies with the process, and the shard retry loop discards
|
|
17
|
+
earlier attempts outright.
|
|
17
18
|
|
|
18
|
-
The operator rule ("never pipe a run") was written down three times
|
|
19
|
-
and broken after each writing. That is
|
|
20
|
-
problem
|
|
21
|
-
mistake.
|
|
19
|
+
The operator rule ("never pipe a run") was written down three times
|
|
20
|
+
downstream and broken after each writing. That is a sign it is not an
|
|
21
|
+
operator problem. The tool is the only party that can make the log survive
|
|
22
|
+
the mistake.
|
|
22
23
|
|
|
23
24
|
## The contract
|
|
24
25
|
|
|
25
|
-
- **
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
- **Complete output, never the echo filter's collapsed form.** The artifact
|
|
27
|
+
exists so that whoever is diagnosing the run can re-read it. Shortening it
|
|
28
|
+
would bring back the loss it prevents. The one transformation applied is
|
|
29
|
+
the secret-masking pass below, which changes values but never line
|
|
30
|
+
structure.
|
|
31
|
+
- **Secret-shaped values are masked in the file, and only in the file.** The
|
|
32
|
+
terminal already showed every byte to the operator who ran the command. The
|
|
33
|
+
file is retained twenty deep and gets attached to bug reports, so it gets a
|
|
34
|
+
narrow redaction pass (`src/core/run-log-redact.ts`), applied per line
|
|
35
|
+
before the write. A line split across two chunks is held until its
|
|
36
|
+
terminator arrives (`\n`, or a lone `\r` from progress-bar repaints), or
|
|
37
|
+
until it exceeds 1 MiB, or until the log is closed. What gets redacted:
|
|
38
|
+
- The value of an env-style assignment `KEY=value` whose `KEY` matches
|
|
39
|
+
`/(TOKEN|SECRET|PASSWORD|PASSWD|API_KEY|AUTH)/i`. The value up to the
|
|
40
|
+
next whitespace, or a whole quoted string, is written as
|
|
41
|
+
`KEY=<redacted>`. The `--password=x` and `-DAUTH_TOKEN=x` spellings that
|
|
42
|
+
mach and configure echo from their argv have the same shape and are
|
|
43
|
+
masked too.
|
|
44
|
+
- The credential of an `Authorization:` header. `Bearer`, `Basic` and
|
|
45
|
+
`Token` keep the scheme word. Any other value is masked whole.
|
|
46
|
+
|
|
47
|
+
Nothing else is masked. A bare token in a URL, a space-separated
|
|
48
|
+
`--password foo` argument, a JSON `"token": "…"` field, or a cookie all
|
|
49
|
+
pass through unchanged. The pass is a seatbelt against the common
|
|
50
|
+
accidental leak (mach echoing its environment), not a guarantee that a log
|
|
51
|
+
is free of secrets. Review a log before sharing it.
|
|
52
|
+
|
|
28
53
|
- **Opened before any preflight**, so a refusal is logged too. Those are
|
|
29
54
|
exactly the runs whose only output a `tail` throws away.
|
|
30
|
-
- **Retained 20 deep per command kind.** Per
|
|
55
|
+
- **Retained 20 deep per command kind.** Per kind, so that a busy `test` loop
|
|
31
56
|
cannot evict the `build` log an operator needs to read beside it. Pruning
|
|
32
|
-
runs before the new file is opened, and orders by the
|
|
33
|
-
|
|
34
|
-
- **Timestamps are filesystem-safe
|
|
35
|
-
by `-`, which Windows accepts and which still sorts
|
|
57
|
+
runs before the new file is opened, and orders by the timestamp in the
|
|
58
|
+
filename rather than by stat-ing every entry.
|
|
59
|
+
- **Timestamps are filesystem-safe.** They use the ISO form with `:` and `.`
|
|
60
|
+
replaced by `-`, which Windows accepts and which still sorts
|
|
61
|
+
chronologically.
|
|
36
62
|
- **Best-effort throughout.** A log that cannot be opened, written or pruned
|
|
37
|
-
degrades to no log
|
|
38
|
-
returns `undefined` on failure, a
|
|
39
|
-
and drops every later write, and pruning failures are
|
|
40
|
-
only.
|
|
63
|
+
degrades to no log, because a run must never fail over a diagnostic.
|
|
64
|
+
`openRunLog` returns `undefined` on failure, a stream error after opening
|
|
65
|
+
latches `broken` and drops every later write, and pruning failures are
|
|
66
|
+
logged verbosely only. The entry point's SIGINT/SIGTERM path closes the
|
|
67
|
+
active log, also best-effort, before exiting, so the held partial line of a
|
|
68
|
+
killed run reaches disk.
|
|
69
|
+
|
|
70
|
+
## Preflight refusals
|
|
71
|
+
|
|
72
|
+
`fireforge test` opens its run log before any preflight, so a refusal is
|
|
73
|
+
logged too. Those are exactly the runs whose only output a `tail` throws
|
|
74
|
+
away. The refusal's own explanatory text is written into the log, and to
|
|
75
|
+
stdout, before the verdict line seals stdout.
|
|
76
|
+
|
|
77
|
+
Both halves matter. The verdict seal routes everything the CLI error boundary
|
|
78
|
+
renders afterwards to stderr, so a run captured with `> file` used to keep
|
|
79
|
+
`FIREFORGE-VERDICT: FAIL reason=preflight` and nothing else. That rendering
|
|
80
|
+
also happens after the run log is closed, so the artifact the verdict's own
|
|
81
|
+
`log=` key pointed at held only the pre-test build. Writing before the seal
|
|
82
|
+
fixes both without giving up the contract: the reason lands on both channels,
|
|
83
|
+
and the verdict is still the run's last stdout line.
|
|
41
84
|
|
|
42
85
|
## Where the path is announced
|
|
43
86
|
|
|
44
87
|
`test` publishes it as an additive `log=<path>` key on the
|
|
45
|
-
`FIREFORGE-VERDICT:` line. That is forced
|
|
46
|
-
the run's
|
|
47
|
-
|
|
48
|
-
the first thing a `tail`
|
|
88
|
+
`FIREFORGE-VERDICT:` line. That is forced rather than chosen: the verdict has
|
|
89
|
+
to stay the run's last stdout write (see
|
|
90
|
+
[`machine-output.md`](machine-output.md)), so a separate announcement after
|
|
91
|
+
it would break the contract, and one before it is the first thing a `tail`
|
|
92
|
+
cuts.
|
|
49
93
|
|
|
50
94
|
`build` prints no verdict line, so it announces the path directly
|
|
51
95
|
(`Full build output: <path>`).
|
|
@@ -54,7 +98,7 @@ the first thing a `tail` cuts.
|
|
|
54
98
|
|
|
55
99
|
At the two mach capture funnels in `src/core/mach.ts`, not at the commands.
|
|
56
100
|
That covers every dispatch: the three test dispatchers, `package`, and the
|
|
57
|
-
stdio-inheriting path `mach build` uses
|
|
101
|
+
stdio-inheriting path `mach build` uses, which rides the collectors' existing
|
|
58
102
|
`mirror` hook rather than growing a second one. A new dispatcher added at the
|
|
59
|
-
funnels is logged
|
|
60
|
-
reason to keep going through them.
|
|
103
|
+
funnels is logged automatically, and one added beside them is not, which is
|
|
104
|
+
the reason to keep going through them.
|