FN-5741: persist merge-request handoff shadow contract
Introduce Phase 1 write-only persistence for merge-request handoff acceptance across core and engine paths. - add persisted merge-request record types, schema/settings plumbing, and store write-path support - update merger/executor/self-healing/run-audit flows to emit and consume the handoff-accepted shadow marker - expand core/engine/roadmap tests and docs to cover the new merge-request shadow contract - add a patch changeset for @runfusion/fusion for this bundled package update Files changed: .changeset/fn-5741-merge-request-shadow.md | 5 + AGENTS.md | 1 + docs/architecture.md | 2 + docs/settings-reference.md | 1 + packages/core/src/__tests__/db-migrate.test.ts | 12 +- packages/core/src/__tests__/db.test.ts | 34 ++-- packages/core/src/__tests__/goals-schema.test.ts | 2 +- packages/core/src/__tests__/insight-store.test.ts | 10 +- .../src/__tests__/merge-request-record.test.ts | 97 +++++++++++ packages/core/src/__tests__/mission-store.test.ts | 2 +- packages/core/src/__tests__/run-audit.test.ts | 2 +- packages/core/src/__tests__/secrets-schema.test.ts | 6 +- .../core/src/__tests__/settings-parity.test.ts | 3 + .../core/src/__tests__/store-merge-queue.test.ts | 2 +- packages/core/src/__tests__/task-documents.test.ts | 2 +- packages/core/src/db.ts | 49 +++++- packages/core/src/index.ts | 4 +- packages/core/src/settings-schema.ts | 30 ++++ packages/core/src/store.ts | 189 ++++++++++++++++++++- packages/core/src/types.ts | 37 ++++ .../src/__tests__/merger-merge-lifecycle.test.ts | 54 ++++++ .../merge-request-shadow-handoff.test.ts | 74 ++++++++ packages/engine/src/executor.ts | 15 +- packages/engine/src/merger.ts | 37 ++++ packages/engine/src/run-audit.ts | 1 + packages/engine/src/self-healing.ts | 16 +- .../src/store/__tests__/roadmap-store.test.ts | 4 +- 27 files changed, 646 insertions(+), 45 deletions(-) Fusion-Task-Id: FN-5741 Fusion-Task-Lineage: 3fec14c3-47ff-4f14-bc02-24021518c992
This commit is contained in:
@@ -1,5 +1,9 @@
|
||||
import type { GlobalSettings, ProjectSettings, Settings } from "./types.js";
|
||||
|
||||
export interface MergeRequestContractShadowSettingsSource {
|
||||
mergeRequestContractShadowEnabled?: boolean;
|
||||
}
|
||||
|
||||
type CompleteSettings<T> = { [K in keyof Required<T>]: Required<T>[K] | undefined };
|
||||
|
||||
/**
|
||||
@@ -18,6 +22,7 @@ export const DEFAULT_GLOBAL_SETTINGS = {
|
||||
defaultProvider: undefined,
|
||||
defaultModelId: undefined,
|
||||
testMode: undefined,
|
||||
mergeRequestContractShadowEnabled: false,
|
||||
fallbackProvider: undefined,
|
||||
fallbackModelId: undefined,
|
||||
defaultThinkingLevel: undefined,
|
||||
@@ -195,6 +200,7 @@ export const DEFAULT_PROJECT_SETTINGS = {
|
||||
overlapIgnorePaths: [],
|
||||
autoMerge: true,
|
||||
testMode: undefined,
|
||||
mergeRequestContractShadowEnabled: false,
|
||||
mergeStrategy: "direct",
|
||||
directMergeCommitStrategy: "always-squash",
|
||||
mergeIntegrationWorktree: "reuse-task-worktree",
|
||||
@@ -474,6 +480,30 @@ export function isGlobalOnlySettingsKey(key: string): key is keyof GlobalSetting
|
||||
return isGlobalSettingsKey(key) && !isProjectSettingsKey(key);
|
||||
}
|
||||
|
||||
export function isMergeRequestContractShadowEnabled(
|
||||
sources:
|
||||
| {
|
||||
project?: MergeRequestContractShadowSettingsSource;
|
||||
global?: MergeRequestContractShadowSettingsSource;
|
||||
}
|
||||
| MergeRequestContractShadowSettingsSource
|
||||
| undefined,
|
||||
): boolean {
|
||||
if (!sources) return false;
|
||||
|
||||
const scoped = sources as {
|
||||
project?: MergeRequestContractShadowSettingsSource;
|
||||
global?: MergeRequestContractShadowSettingsSource;
|
||||
};
|
||||
if (typeof scoped.project !== "undefined" || typeof scoped.global !== "undefined") {
|
||||
const projectValue = scoped.project?.mergeRequestContractShadowEnabled;
|
||||
if (typeof projectValue === "boolean") return projectValue;
|
||||
return scoped.global?.mergeRequestContractShadowEnabled === true;
|
||||
}
|
||||
|
||||
return (sources as MergeRequestContractShadowSettingsSource).mergeRequestContractShadowEnabled === true;
|
||||
}
|
||||
|
||||
export function resolvePersistAgentThinkingLog(
|
||||
settings: Partial<GlobalSettings> | undefined,
|
||||
opts: { ephemeral: boolean },
|
||||
|
||||
Reference in New Issue
Block a user