Recover SL write fallbacks

This commit is contained in:
Luca Martial 2026-05-11 22:28:44 -07:00
parent 52ed9450ba
commit 7c7c86c446
2 changed files with 31 additions and 0 deletions

View file

@ -92,6 +92,30 @@ describe('tool transcript summaries', () => {
expect(summary.fatalErrorCount).toBe(0);
});
it('treats explicit unmapped fallback as recovery for guarded SL write failures', () => {
const summary = createMutableToolTranscriptSummary('wu-1', '/tmp/wu-1.jsonl');
recordToolTranscriptEntry(
summary,
entry({
toolName: 'sl_write_source',
input: { connectionId: 'dbt-main', sourceName: 'stg_accounts' },
output: { structured: { success: false, sourceName: 'stg_accounts' } },
}),
);
recordToolTranscriptEntry(
summary,
entry({
toolName: 'emit_unmapped_fallback',
input: { rawPath: 'models/schema.yml', reason: 'no_physical_table', fallback: 'wiki_only' },
output: 'recorded unmapped fallback for models/schema.yml (wiki_only)',
}),
);
expect(summary.errorCount).toBe(1);
expect(summary.fatalErrorCount).toBe(0);
});
it('keeps thrown tool errors fatal even after a successful write', () => {
const summary = createMutableToolTranscriptSummary('wu-1', '/tmp/wu-1.jsonl');

View file

@ -50,6 +50,13 @@ export function recordToolTranscriptEntry(summary: MutableToolTranscriptSummary,
if (recoveryKey) {
summary.recoverableFailureCounts.delete(recoveryKey);
}
if (entry.toolName === 'emit_unmapped_fallback') {
for (const key of [...summary.recoverableFailureCounts.keys()]) {
if (key.startsWith('sl:')) {
summary.recoverableFailureCounts.delete(key);
}
}
}
refreshFatalErrorCount(summary);
}