Two Cursor findings on the previous guard fix: - `canonicalDbPath` resolved only the directory and re-joined the filename, so a symlink at the *file* — `state.sqlite` itself linking into the shared home — passed the guard. Reproduced: the seed replaced the shared database through the link. Resolve the full path first (the file can be the link), falling back to directory-resolution only when the file does not exist yet, which is the one case a full resolution cannot handle and the one where the missing-target advice would create the database in the shared home. - With --from and --to aliasing the same base and no database behind them, same-source fired before the existence check, hiding the actionable "start the dev server" guidance. The existence check now runs between the shared-home refusal (which must stay first — its advice is exactly wrong for the shared home) and same-source. Verified seven ways: symlinked file refused with the shared rows untouched, symlinked directory still refused, shared home with and without a database refused as shared-home, aliased-empty reported as missing-target, aliased-with-database as same-source, and a legitimate seed unaffected. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Theo Browne committed on 7/27/2026, 3:39:13 AMparentaad1bdd
1 file changedLine totals unavailable