diff --git a/src/main/services/team/ChangeExtractorService.ts b/src/main/services/team/ChangeExtractorService.ts index fe46e6b0..6a75053d 100644 --- a/src/main/services/team/ChangeExtractorService.ts +++ b/src/main/services/team/ChangeExtractorService.ts @@ -46,6 +46,7 @@ import type { AgentChangeSet, ChangeStats, TaskChangeSetV2 } from '@shared/types const logger = createLogger('Service:ChangeExtractorService'); const OPEN_CODE_AUTO_BACKFILL_ATTRIBUTION_MODE = 'strict-delivery' as const; +const OPEN_CODE_AUTO_BACKFILL_EVIDENCE_MODE = 'chain-only' as const; const OPEN_CODE_MAX_DISCOVERED_LANES = 500; /** Кеш-запись: данные + mtime файла + время протухания */ @@ -425,6 +426,7 @@ export class ChangeExtractorService { sourceGeneration, deliveryContextFingerprint, attributionMode: OPEN_CODE_AUTO_BACKFILL_ATTRIBUTION_MODE, + evidenceMode: OPEN_CODE_AUTO_BACKFILL_EVIDENCE_MODE, }); const now = Date.now(); const cached = this.openCodeBackfillCache.get(cacheKey); @@ -499,6 +501,7 @@ export class ChangeExtractorService { projectDir, workspaceRoot, attributionMode: OPEN_CODE_AUTO_BACKFILL_ATTRIBUTION_MODE, + evidenceMode: OPEN_CODE_AUTO_BACKFILL_EVIDENCE_MODE, ...(deliveryContext.filePath ? { deliveryContextPath: deliveryContext.filePath } : {}), }); void appendOpenCodeTaskChangeDiag({ @@ -838,6 +841,7 @@ export class ChangeExtractorService { sourceGeneration?: string | null; deliveryContextFingerprint: string; attributionMode: typeof OPEN_CODE_AUTO_BACKFILL_ATTRIBUTION_MODE; + evidenceMode: typeof OPEN_CODE_AUTO_BACKFILL_EVIDENCE_MODE; }): string { return JSON.stringify({ teamName: input.teamName, @@ -848,6 +852,7 @@ export class ChangeExtractorService { sourceGeneration: input.sourceGeneration ?? '', deliveryContextFingerprint: input.deliveryContextFingerprint, attributionMode: input.attributionMode, + evidenceMode: input.evidenceMode, }); } diff --git a/src/main/services/team/opencode/bridge/OpenCodeBridgeCommandContract.ts b/src/main/services/team/opencode/bridge/OpenCodeBridgeCommandContract.ts index 21660989..eca989d8 100644 --- a/src/main/services/team/opencode/bridge/OpenCodeBridgeCommandContract.ts +++ b/src/main/services/team/opencode/bridge/OpenCodeBridgeCommandContract.ts @@ -240,10 +240,17 @@ export interface OpenCodeBackfillTaskLedgerCommandBody { workspaceRoot?: string; deliveryContextPath?: string; attributionMode?: OpenCodeBackfillTaskLedgerAttributionMode; + evidenceMode?: OpenCodeBackfillTaskLedgerEvidenceMode; dryRun?: boolean; } export type OpenCodeBackfillTaskLedgerAttributionMode = 'strict-delivery' | 'compatible'; +export type OpenCodeBackfillTaskLedgerEvidenceMode = + | 'off' + | 'metadata-only' + | 'chain-only' + | 'snapshot-probe' + | 'snapshot-auto'; export type OpenCodeBackfillTaskLedgerOutcome = | 'imported' @@ -264,6 +271,12 @@ export interface OpenCodeBackfillTaskLedgerCommandData { workspaceRoot?: string; dryRun: boolean; attributionMode?: OpenCodeBackfillTaskLedgerAttributionMode; + evidenceMode?: OpenCodeBackfillTaskLedgerEvidenceMode; + strictWindowCandidateCount?: number; + openCodeDbFingerprint?: string; + deliveryLedgerFingerprint?: string; + snapshotShapeFingerprint?: string; + retryAfterReason?: string; scannedSessions: number; scannedToolparts: number; candidateEvents: number; diff --git a/src/main/services/team/opencode/bridge/OpenCodeReadinessBridge.ts b/src/main/services/team/opencode/bridge/OpenCodeReadinessBridge.ts index ad4dff69..cba24f84 100644 --- a/src/main/services/team/opencode/bridge/OpenCodeReadinessBridge.ts +++ b/src/main/services/team/opencode/bridge/OpenCodeReadinessBridge.ts @@ -308,6 +308,7 @@ export class OpenCodeReadinessBridge implements OpenCodeTeamRuntimeBridgePort { ...(input.workspaceRoot ? { workspaceRoot: input.workspaceRoot } : {}), dryRun: input.dryRun === true, ...(input.attributionMode ? { attributionMode: input.attributionMode } : {}), + ...(input.evidenceMode ? { evidenceMode: input.evidenceMode } : {}), scannedSessions: 0, scannedToolparts: 0, candidateEvents: 0, diff --git a/test/main/services/team/ChangeExtractorService.test.ts b/test/main/services/team/ChangeExtractorService.test.ts index fdd32b5b..302c35b1 100644 --- a/test/main/services/team/ChangeExtractorService.test.ts +++ b/test/main/services/team/ChangeExtractorService.test.ts @@ -1058,6 +1058,7 @@ describe('ChangeExtractorService', () => { projectDir, workspaceRoot: projectPath, attributionMode: 'strict-delivery', + evidenceMode: 'chain-only', }) ); expect(workerClient.computeTaskChanges).not.toHaveBeenCalled(); @@ -1182,6 +1183,7 @@ describe('ChangeExtractorService', () => { workspaceRoot: projectPath, deliveryContextPath: expect.stringContaining('delivery-context.json'), attributionMode: 'strict-delivery', + evidenceMode: 'chain-only', }) ); });