docs(notes): ranked ledger of 15 verified data-safety defects in the transfer engines - #65
Closed
vdavid wants to merge 2 commits into
Closed
docs(notes): ranked ledger of 15 verified data-safety defects in the transfer engines#65vdavid wants to merge 2 commits into
vdavid wants to merge 2 commits into
Conversation
…transfer engines, from an adversarial hunt Adds `docs/notes/adversarial-data-safety-hunt-2026-09-01.md`: one reading agent per subsystem hunted for real correctness and data-loss defects in `write_operations/transfer/` (both engines) and the `write_operations/` umbrella, and every finding was then verified against the cited code before landing here. Seven findings are rated high and all seven are silent: the cross-FS move deletes the live source tree rather than the set it staged, the deep merge misses a case-differing destination name and replaces the file under Skip, two merge paths follow a directory symlink and empty its target, "Overwrite all smaller/older" compares a file against a folder's inode and deletes the folder, a failed batch auto-rolls back files that already replaced originals, and the stale-temp reaper deletes the only copy of new data after a finalize failure. Nothing is fixed; each entry carries the mechanism, the trigger, the guard that was ruled out, and a suggested fix. The run was stopped for budget after four of eighteen planned hunters returned, so the note also names the fourteen subsystems it never reached, in the order a second run should take them, plus method notes on what made verification cheap. Linked from `docs/notes/README.md` under "input to a job that hasn't been done yet". Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YGbM7hYU8m9Wc37a4Xv6Yi
Owner
Author
|
Merged into local |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this is
A report, not a fix.
docs/notes/adversarial-data-safety-hunt-2026-09-01.mdis a ranked triage list of data-safety defects inwrite_operations/transfer/(both engines) and thewrite_operations/umbrella, from an adversarial hunt: one reading agent per subsystem, instructed to read every non-test file in full and to look for the guard before reporting anything. Every finding was then verified by following the citedfile:linepaths in the code, so "confirmed" means the mechanism holds at5fdc323.Scope, honestly
The plan was 18 subsystems. The run was stopped for budget after four hunters returned (transfer core, the copy and move halves of the cross-volume engine, and the write-ops umbrella). 19 raw findings collapsed to 15 distinct ones; three were reported independently by two hunters. The note lists the 14 subsystems never reached (archive edits, delete/trash/clipboard,
cmdr-fs, SMB, SFTP, MTP, operation log, secrets and settings persistence, file viewer, four slices ofcmdr-index, git/downloads/listing), in the order a second run should take them.The seven highs, all silent
remove_dir_alls the live source tree, destroying anything written into it after the scanmove_op/cross_fs.rsdelete_sources_after_movelanddeletes onAlreadyExists)volume/merge.rs+staged_write.rs::landPath::is_dir) and renames the link target's contents out of a folder the user never selectedmove_op/mod.rs::merge_move_directoryis_directoryvolume/rename_merge.rsconflict.rs::reduce_conditional_resolutioncopy/mod.rsPostLoopIntent::Failedreap_stale_transfer_tempsdeletes by name and age, so it destroys the.cmdr-tmp-*that is the only copy of new data after afinalize_safe_replacefailurevolume/cleanup.rsPlus one high rated plausible (a Skip while staging two same-named sources is never recorded, so Phase 4 deletes an unlanded original), one high with a transient-failure precondition (any
get_metadataerror on the destination is read as "no conflict"), five mediums, and one low. Each entry carries the mechanism in call order, a user-level trigger, the guard that was ruled out, and a suggested fix.Review notes
docs-reachable,docs-dead-links,docs-link-text,resident-doc-budget,claude-md-details-sibling,oxfmt. All green.Co-Authored-Bytrailer, whichAGENTS.mdsays not to use; the session-level attribution rule overrode it. Strip it on landing if you prefer.🤖 Generated with Claude Code
https://claude.ai/code/session_01YGbM7hYU8m9Wc37a4Xv6Yi
Generated by Claude Code