Found by CodeRabbit on PR #25 (Major).
Problem
Grasp::forget() rebuilds the processed_files deletion prefix from config.claude_projects_dir.join(slug). But transcripts can be imported from a custom location (grasp import --path <dir>), and processed_files.file_path stores the actual imported path (file.to_string_lossy()), which then lives under the custom dir — not under claude_projects_dir.
Effect: forgetting a custom-imported project leaves stale processed_files rows behind, so re-importing those same files is incorrectly skipped (they look already-processed).
Fix
The projects table already stores the real import directory in projects.path (set by upsert_project during import). Query that path before deleting the project row and use it as the LIKE prefix base, falling back to claude_projects_dir.join(slug) when absent. Keep the existing anchored-prefix + escape_like approach.
Addressed in PR #25.
Found by CodeRabbit on PR #25 (Major).
Problem
Grasp::forget()rebuilds theprocessed_filesdeletion prefix fromconfig.claude_projects_dir.join(slug). But transcripts can be imported from a custom location (grasp import --path <dir>), andprocessed_files.file_pathstores the actual imported path (file.to_string_lossy()), which then lives under the custom dir — not underclaude_projects_dir.Effect: forgetting a custom-imported project leaves stale
processed_filesrows behind, so re-importing those same files is incorrectly skipped (they look already-processed).Fix
The
projectstable already stores the real import directory inprojects.path(set byupsert_projectduring import). Query that path before deleting the project row and use it as theLIKEprefix base, falling back toclaude_projects_dir.join(slug)when absent. Keep the existing anchored-prefix +escape_likeapproach.Addressed in PR #25.