Skip to content

Deletion guard does not pause on a large mass deletion (87% of folder) #204

Closed

Description

@gnacho

Observation

During end-to-end validation, a folder with 300 synchronized flat files had 260 of them removed locally (87%, well above the account's thresholds of count=10 / percent=20%). Expected: the deletion guard pauses sync and raises DeleteReview before the engine propagates the deletions to the server. Observed: the folder returned to Sincronizado (IdleOk) and the deletions were processed; the guard never paused.

In an earlier smaller test (12 of 20 removed, i.e. 60%, also above percent=20%) the guard did pause and raise DeleteReview.

Why it matters

The guard exists precisely to stop an accidental mass deletion from reaching the server. A 260-file deletion is the worst case for that, and it did not pause. This is a real reliability gap in the safety feature, independent of the proactive notification work (#203).

Repro context

  • Account hub.domatix.com, delete_guard.enabled=true, count_threshold=10, percent_threshold=20.
  • A test folder ~/temp/nextsync-test synced 300 flat files to a remote path, then 260 were removed locally in one shot.
  • The removal was detected (folder re-synced), but the guard did not flag it. The same folder path had been used for a previous (12-file) test, so the engine may have carried a baseline/journal that changed the guard's view — worth investigating.

What to investigate

  • How the guard derives "previously present" paths (journal/baseline) and why an 87% removal did not exceed the effective threshold.
  • Whether the engine's async reconciliation runs before the guard scans (race), letting deletions propagate unfiltered.
  • Whether the previous test run left a stale journal/baseline that skewed the comparison.

Acceptance

  • A delete of a high fraction (> count and > percent threshold) of a folder's files pauses sync and surfaces DeleteReview before the engine propagates, consistently (not just for the 12-file case).

Activity

  1. gnacho commented on Sep 8, 2026

    @gnacho
    OwnerAuthor

    Resolved: not a guard bug, an artifact of the test setup

    After a clean reproduction this turned out to be a testing artifact, not a deletion-guard defect.

    What I saw originally

    • Test folder A (remote /NextSync-Test, previously used in an earlier test): 300 files synced, 260 removed → the guard did not pause; the engine processed the loss and the guard manifest was re-based to the post-loss state (60 files).

    Clean reproduction (remote /NextSync-Test2, fresh manifest)

    • 300 flat files synced, guard manifest = 300 (verified).
    • 260 files removed locally → the tray flipped to "Revisar borrados masivos" (DeleteReview) and the engine paused. So with a correct baseline the guard works for an 87% deletion.

    Cause of the original miss

    • The first test reused a remote_path and a guard manifest that were already contaminated/overwritten by the earlier run, so the baseline did not reflect the 300-file set and the guard was blind to the deletion. Not a code-path failure in the guard.

    Outcome

    • The guard logic is correct (verified by mass_deletion_is_blocked and the clean repro).
    • A real UX gap did surface: the summary for a large flat deletion collapsed to a bare counter. That is addressed in Preview loose files in the mass-deletion summary #206 (released in v0.2.20): the review now previews loose files.

    Closing as won't-fix / test artifact. If you later see a mass deletion that does not pause on a folder with a healthy (fresh) baseline, reopen with that repro — that would be a real regression.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions