Commit 67aac01
fix(sync): re-verify planned deletes so concurrent writes survive scan reconciliation
Scan delete plans compare a storage snapshot against a later DB read
(deleted = all_db_paths - storage_paths). A note accepted and materialized
between snapshot capture and the DB read was planned as deleted, and the
delete batch destroyed its entity, search, and vector rows with no
re-verification.
apply_project_index_delete_batch now re-confirms each planned path through
a ProjectIndexDeletePathVerifier capability before touching the database.
The local runtime injects LocalProjectIndexDeletePathVerifier, which
probes the filesystem: a path present again (or whose probe fails) is
skipped and logged — the next scan picks the file up as modified. Cloud/S3
runtimes keep current behavior through the explicit
TrustPlannedProjectIndexDeleteVerifier pass-through default, since their
storage listing is authoritative and they have no cheap per-path probe at
apply time. Skipped paths are reported on the batch result and delete run.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: phernandez <paul@basicmachines.co>1 parent 0a93d07 commit 67aac01
4 files changed
Lines changed: 307 additions & 3 deletions
File tree
- src/basic_memory
- indexing
- index
- tests
- indexing
- index
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
57 | 57 | | |
58 | 58 | | |
59 | 59 | | |
| 60 | + | |
60 | 61 | | |
61 | 62 | | |
62 | 63 | | |
| |||
392 | 393 | | |
393 | 394 | | |
394 | 395 | | |
| 396 | + | |
| 397 | + | |
| 398 | + | |
| 399 | + | |
| 400 | + | |
| 401 | + | |
| 402 | + | |
| 403 | + | |
| 404 | + | |
| 405 | + | |
| 406 | + | |
| 407 | + | |
| 408 | + | |
| 409 | + | |
| 410 | + | |
| 411 | + | |
| 412 | + | |
| 413 | + | |
| 414 | + | |
| 415 | + | |
| 416 | + | |
| 417 | + | |
| 418 | + | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
| 422 | + | |
| 423 | + | |
395 | 424 | | |
396 | 425 | | |
397 | 426 | | |
| |||
558 | 587 | | |
559 | 588 | | |
560 | 589 | | |
| 590 | + | |
| 591 | + | |
| 592 | + | |
561 | 593 | | |
562 | 594 | | |
563 | 595 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
59 | 59 | | |
60 | 60 | | |
61 | 61 | | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
62 | 90 | | |
63 | 91 | | |
64 | 92 | | |
| |||
214 | 242 | | |
215 | 243 | | |
216 | 244 | | |
| 245 | + | |
217 | 246 | | |
218 | 247 | | |
219 | 248 | | |
| |||
241 | 270 | | |
242 | 271 | | |
243 | 272 | | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
244 | 280 | | |
245 | 281 | | |
246 | 282 | | |
| |||
414 | 450 | | |
415 | 451 | | |
416 | 452 | | |
| 453 | + | |
417 | 454 | | |
418 | 455 | | |
419 | 456 | | |
| |||
599 | 636 | | |
600 | 637 | | |
601 | 638 | | |
| 639 | + | |
| 640 | + | |
| 641 | + | |
| 642 | + | |
| 643 | + | |
| 644 | + | |
| 645 | + | |
| 646 | + | |
| 647 | + | |
| 648 | + | |
| 649 | + | |
| 650 | + | |
| 651 | + | |
| 652 | + | |
| 653 | + | |
| 654 | + | |
| 655 | + | |
| 656 | + | |
| 657 | + | |
| 658 | + | |
| 659 | + | |
| 660 | + | |
| 661 | + | |
| 662 | + | |
| 663 | + | |
| 664 | + | |
| 665 | + | |
602 | 666 | | |
603 | 667 | | |
604 | 668 | | |
605 | 669 | | |
606 | | - | |
| 670 | + | |
607 | 671 | | |
608 | 672 | | |
609 | 673 | | |
610 | 674 | | |
611 | 675 | | |
612 | 676 | | |
613 | 677 | | |
614 | | - | |
| 678 | + | |
| 679 | + | |
| 680 | + | |
| 681 | + | |
| 682 | + | |
| 683 | + | |
615 | 684 | | |
616 | 685 | | |
617 | 686 | | |
| |||
629 | 698 | | |
630 | 699 | | |
631 | 700 | | |
632 | | - | |
| 701 | + | |
633 | 702 | | |
| 703 | + | |
634 | 704 | | |
635 | 705 | | |
636 | 706 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
| 21 | + | |
21 | 22 | | |
22 | 23 | | |
23 | 24 | | |
| |||
666 | 667 | | |
667 | 668 | | |
668 | 669 | | |
| 670 | + | |
| 671 | + | |
| 672 | + | |
| 673 | + | |
| 674 | + | |
| 675 | + | |
| 676 | + | |
| 677 | + | |
| 678 | + | |
| 679 | + | |
| 680 | + | |
| 681 | + | |
| 682 | + | |
| 683 | + | |
| 684 | + | |
| 685 | + | |
| 686 | + | |
| 687 | + | |
| 688 | + | |
| 689 | + | |
| 690 | + | |
| 691 | + | |
| 692 | + | |
| 693 | + | |
| 694 | + | |
| 695 | + | |
| 696 | + | |
| 697 | + | |
| 698 | + | |
| 699 | + | |
| 700 | + | |
| 701 | + | |
| 702 | + | |
| 703 | + | |
| 704 | + | |
| 705 | + | |
| 706 | + | |
| 707 | + | |
| 708 | + | |
| 709 | + | |
| 710 | + | |
| 711 | + | |
| 712 | + | |
| 713 | + | |
| 714 | + | |
| 715 | + | |
| 716 | + | |
| 717 | + | |
| 718 | + | |
| 719 | + | |
| 720 | + | |
| 721 | + | |
| 722 | + | |
| 723 | + | |
| 724 | + | |
| 725 | + | |
| 726 | + | |
| 727 | + | |
| 728 | + | |
| 729 | + | |
| 730 | + | |
| 731 | + | |
| 732 | + | |
| 733 | + | |
| 734 | + | |
| 735 | + | |
| 736 | + | |
| 737 | + | |
| 738 | + | |
| 739 | + | |
| 740 | + | |
| 741 | + | |
| 742 | + | |
| 743 | + | |
| 744 | + | |
| 745 | + | |
| 746 | + | |
| 747 | + | |
| 748 | + | |
| 749 | + | |
| 750 | + | |
| 751 | + | |
| 752 | + | |
| 753 | + | |
| 754 | + | |
| 755 | + | |
| 756 | + | |
| 757 | + | |
| 758 | + | |
| 759 | + | |
| 760 | + | |
| 761 | + | |
| 762 | + | |
| 763 | + | |
| 764 | + | |
| 765 | + | |
| 766 | + | |
| 767 | + | |
669 | 768 | | |
670 | 769 | | |
671 | 770 | | |
| |||
0 commit comments