import type { MemoryFlowReplayInput } from '../../../../src/context/ingest/memory-flow/types.js'; function baseScenario(overrides: Partial = {}): MemoryFlowReplayInput { return { runId: 'run-success', connectionId: 'warehouse', adapter: 'metricflow', status: 'done', sourceDir: '/tmp/source', syncId: 'sync-success', reportPath: 'ingest-report.json', errors: [], events: [ { type: 'source_acquired', adapter: 'metricflow', trigger: 'manual_resync', fileCount: 4 }, { type: 'scope_detected', fingerprint: 'metricflow:demo' }, { type: 'raw_snapshot_written', syncId: 'sync-success', rawFileCount: 4 }, { type: 'diff_computed', added: 2, modified: 1, deleted: 0, unchanged: 1 }, { type: 'chunks_planned', chunkCount: 2, workUnitCount: 2, evictionCount: 0 }, { type: 'work_unit_started', unitKey: 'orders', skills: ['wiki_capture'], stepBudget: 40 }, { type: 'candidate_action', unitKey: 'orders', target: 'wiki', action: 'created', key: 'wiki/global/orders.md' }, { type: 'candidate_action', unitKey: 'orders', target: 'sl', action: 'updated', key: 'warehouse.orders' }, { type: 'work_unit_finished', unitKey: 'orders', status: 'success' }, { type: 'work_unit_started', unitKey: 'revenue', skills: ['wiki_capture'], stepBudget: 40 }, { type: 'candidate_action', unitKey: 'revenue', target: 'wiki', action: 'updated', key: 'wiki/global/revenue.md' }, { type: 'work_unit_finished', unitKey: 'revenue', status: 'success' }, { type: 'reconciliation_finished', conflictCount: 0, fallbackCount: 0 }, { type: 'saved', commitSha: 'abc123456789', wikiCount: 2, slCount: 1 }, // pragma: allowlist secret { type: 'provenance_recorded', rowCount: 4 }, { type: 'report_created', runId: 'run-success', reportPath: 'ingest-report.json' }, ], plannedWorkUnits: [ { unitKey: 'orders', rawFiles: ['models/orders.yml', 'models/customers.yml'], peerFileCount: 1, dependencyCount: 1 }, { unitKey: 'revenue', rawFiles: ['docs/revenue.md'], peerFileCount: 0, dependencyCount: 0 }, ], details: { actions: [ { unitKey: 'orders', target: 'wiki', action: 'created', key: 'wiki/global/orders.md', summary: 'Captured order definitions', rawFiles: ['models/orders.yml'], status: 'success', }, { unitKey: 'orders', target: 'sl', action: 'updated', key: 'warehouse.orders', summary: 'Updated orders source', rawFiles: ['models/orders.yml'], status: 'success', }, { unitKey: 'revenue', target: 'wiki', action: 'updated', key: 'wiki/global/revenue.md', summary: 'Updated revenue notes', rawFiles: ['docs/revenue.md'], status: 'success', }, ], provenance: [ { rawPath: 'models/orders.yml', artifactKind: 'wiki', artifactKey: 'wiki/global/orders.md', actionType: 'created', }, { rawPath: 'models/orders.yml', artifactKind: 'sl', artifactKey: 'warehouse.orders', actionType: 'updated' }, ], transcripts: [ { unitKey: 'orders', path: 'transcripts/orders.json', toolCallCount: 3, errorCount: 0, toolNames: ['wiki_write', 'sl_write_source'], }, ], }, ...overrides, }; } export function successfulReplayScenario(): MemoryFlowReplayInput { return baseScenario(); } export function deletedRawPathsScenario(): MemoryFlowReplayInput { return baseScenario({ events: baseScenario().events.map((event) => event.type === 'diff_computed' ? { ...event, deleted: 2 } : event.type === 'chunks_planned' ? { ...event, evictionCount: 2 } : event, ), }); } export function validationRevertScenario(): MemoryFlowReplayInput { return baseScenario({ runId: 'run-validation-failure', status: 'error', errors: ['semantic-layer validation failed for warehouse.orders'], events: [ { type: 'source_acquired', adapter: 'metricflow', trigger: 'manual_resync', fileCount: 1 }, { type: 'raw_snapshot_written', syncId: 'sync-validation', rawFileCount: 1 }, { type: 'diff_computed', added: 1, modified: 0, deleted: 0, unchanged: 0 }, { type: 'chunks_planned', chunkCount: 1, workUnitCount: 1, evictionCount: 0 }, { type: 'work_unit_started', unitKey: 'orders', skills: ['wiki_capture'], stepBudget: 40 }, { type: 'candidate_action', unitKey: 'orders', target: 'sl', action: 'updated', key: 'warehouse.orders' }, { type: 'work_unit_finished', unitKey: 'orders', status: 'failed', reason: 'semantic-layer validation failed for warehouse.orders', }, ], plannedWorkUnits: [{ unitKey: 'orders', rawFiles: ['models/orders.yml'], peerFileCount: 0, dependencyCount: 0 }], details: { actions: [ { unitKey: 'orders', target: 'sl', action: 'updated', key: 'warehouse.orders', summary: 'Invalid measure was reverted', rawFiles: ['models/orders.yml'], status: 'failed', }, ], provenance: [], transcripts: [ { unitKey: 'orders', path: 'transcripts/orders.json', toolCallCount: 2, errorCount: 1, toolNames: ['sl_write_source'], }, ], }, }); } export function flaggedFallbackScenario(): MemoryFlowReplayInput { return baseScenario({ runId: 'run-flagged-fallback', events: baseScenario().events.map((event) => event.type === 'reconciliation_finished' ? { ...event, fallbackCount: 1 } : event, ), }); } export function postSaveSecretFailureScenario(): MemoryFlowReplayInput { return baseScenario({ runId: 'run-post-save-failure', status: 'error', errors: ['index refresh failed https://example.com/private token=abc123'], events: baseScenario().events.map((event) => event.type === 'saved' ? { ...event, commitSha: 'def456789012' } : event, // pragma: allowlist secret ), }); }