feat(CF-580): Add schema support and metadata tracking for session notes recovery
- Migration 025: Add 'abandoned' status to sessions CHECK constraint (fixes blocking issue) - Migration 026: Add recovery metadata columns (recovered_from, recovered_at) to track note recovery source - Update sessionRecoverOrphaned to recover notes from temp files when marking sessions abandoned - Update notes-parser to track recovery source and timestamp for analytics These changes complete Priority 3, 5 and part of Priority 1 for CF-572 Session Notes Loss fix. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -487,12 +487,29 @@ export async function sessionRecoverOrphaned(args: { project?: string }): Promis
|
||||
results.push(
|
||||
`✓ Session ${session.project} #${session.session_number} marked as abandoned`
|
||||
);
|
||||
|
||||
// Attempt to recover notes from temp file
|
||||
if (session.working_directory) {
|
||||
const tempFilePath = `${session.working_directory}/.claude-session/${session.id}/notes.md`;
|
||||
|
||||
try {
|
||||
const { recoverNotesFromTempFile } = await import('../utils/notes-parser.js');
|
||||
const recovered = await recoverNotesFromTempFile(session.id, tempFilePath, 'recovered');
|
||||
|
||||
if (recovered > 0) {
|
||||
results.push(` → Recovered ${recovered} note(s) from temp file`);
|
||||
totalNotesRecovered += recovered;
|
||||
}
|
||||
} catch (err) {
|
||||
results.push(` ⚠ Could not recover notes: ${err instanceof Error ? err.message : String(err)}`);
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
results.push(`✗ Failed to mark session ${session.id} as abandoned: ${err}`);
|
||||
}
|
||||
}
|
||||
|
||||
return `Recovered ${orphanedSessions.length} orphaned session(s):\n${results.join('\n')}`;
|
||||
return `Recovered ${orphanedSessions.length} orphaned session(s), ${totalNotesRecovered} notes:\n${results.join('\n')}`;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user