feat(FN-4958): complete Step 1 — settings surface

Fusion-Task-Id: FN-4958
Fusion-Task-Lineage: 2f1bc742-14e0-4fdd-a980-00051fc3323c
This commit is contained in:
Fusion (runfusion.ai)
2026-05-18 05:50:31 -07:00
committed by gsxdsm
parent 76911c3f54
commit 106499c375
3 changed files with 45 additions and 0 deletions

View File

@@ -41,6 +41,25 @@ describe("settings defaults invariants", () => {
).toBe(true);
});
describe("prerebase policy defaults", () => {
it("keeps prerebase policy defaults project-scoped", () => {
expect(DEFAULT_PROJECT_SETTINGS.prerebaseAutoEnabled).toBe(true);
expect(DEFAULT_PROJECT_SETTINGS.prerebaseDivergenceThreshold).toBe(50);
expect(DEFAULT_PROJECT_SETTINGS.prerebaseHotFiles).toEqual([
"AGENTS.md",
"packages/core/src/store.ts",
"packages/core/src/db.ts",
"packages/engine/src/executor.ts",
"packages/engine/src/scheduler.ts",
"packages/engine/src/merger.ts",
"packages/dashboard/app/styles.css",
]);
expect("prerebaseAutoEnabled" in DEFAULT_GLOBAL_SETTINGS).toBe(false);
expect("prerebaseHotFiles" in DEFAULT_GLOBAL_SETTINGS).toBe(false);
expect("prerebaseDivergenceThreshold" in DEFAULT_GLOBAL_SETTINGS).toBe(false);
});
});
describe("recycleWorktrees default", () => {
it("keeps recycleWorktrees explicitly false in project defaults", () => {
expect(DEFAULT_PROJECT_SETTINGS.recycleWorktrees).toBe(false);

View File

@@ -242,6 +242,17 @@ export const DEFAULT_PROJECT_SETTINGS = {
worktreeRebaseBeforeMerge: true,
worktreeRebaseRemote: "",
worktreeRebaseLocalBase: true,
prerebaseAutoEnabled: true,
prerebaseHotFiles: [
"AGENTS.md",
"packages/core/src/store.ts",
"packages/core/src/db.ts",
"packages/engine/src/executor.ts",
"packages/engine/src/scheduler.ts",
"packages/engine/src/merger.ts",
"packages/dashboard/app/styles.css",
],
prerebaseDivergenceThreshold: 50,
mergeConflictStrategy: "smart-prefer-main",
mergeDiffVolumeMinLines: undefined,
mergeDiffVolumeThreshold: undefined,

View File

@@ -2789,6 +2789,21 @@ export interface ProjectSettings {
* re-introduce code that an earlier sibling task already deleted.
* Default: true. */
worktreeRebaseLocalBase?: boolean;
/** Master switch for pre-merge auto-prerebase policy. When false, merger
* bypasses hot-file and divergence-threshold prerebase triggers.
* Default: true. */
prerebaseAutoEnabled?: boolean;
/** Shared-infrastructure file paths that trigger pre-merge auto-prerebase
* when they changed between `<task.baseCommitSha>` and local main HEAD.
* Empty array disables hot-file triggering.
* Default: curated project hot-file list. */
prerebaseHotFiles?: string[];
/** Commit-count threshold for pre-merge auto-prerebase. When the commit
* count of `<task.baseCommitSha>..localMainHead` exceeds this value, the
* merger auto-prerebases regardless of hot-file overlap.
* Set to 0 or undefined to disable count-based triggering.
* Default: 50. */
prerebaseDivergenceThreshold?: number;
/** Strategy used when a merge conflict can't be resolved by AI. See
* {@link MergeConflictStrategy}. Default: "smart". */
mergeConflictStrategy?: MergeConflictStrategy;