docs(parity): correct delete-delay budget, fuzzy, and test-review gaps

- --delete-delay: state that the reported count advances on actual removal
  while --max-delete is charged at plan/snapshot time (defer_add/planned).
  A new differential shows rsync instead charges on actual removals and
  recursively removes a queued directory, so the row moves to Caveat
  (matrix 111/13/33) and the residual is pinned by tests.
- Add a deterministic unit test (plan-time budget charge), a FastSync
  integration test (byte-barrier refill + --max-delete), and an rsync
  differential for a refilled deferred directory.
- Soften the --fuzzy summary: the tree is byte-exact by design, so it is
  pinned by the threshold suite, not a byte-level differential.
- README: describe what -m parity actually selects; fix the allowlist
  example to the real max_delete entry.
- xdist-safe delete-timing fixture names (timing and --threads mode).
- Renumber the duplicate HANDOFF item 9 to 10; add the missing final
  newline to test_checksum.c.
- Expose ignore_errors_allows_delete and unit-test the deletion gate
  without a privileged source directory; update the stale deleted-count
  doc comment.

No production behavior changes.
This commit is contained in:
2026-09-18 22:10:14 +02:00
parent a960391b34
commit 1042d15db7
11 changed files with 382 additions and 30 deletions
+21
View File
@@ -4456,6 +4456,26 @@ static void test_parse_args_rejects_unsupported_short() {
}
}
/* The --ignore-errors deletion gate, unit-tested without a privileged source
* directory: a clean scan always deletes; an I/O error suppresses deletion
* unless --ignore-errors is set. (The end-to-end mode-000 differential lives in
* the setpriv integration test; this pins the decision itself in the PR gate.) */
static void test_ignore_errors_allows_delete(void) {
Config* cfg = config_create();
EXPECT_NOT_NULL(cfg);
EXPECT_TRUE(ignore_errors_allows_delete(cfg, false));
EXPECT_FALSE(ignore_errors_allows_delete(cfg, true));
cfg->ignore_errors = true;
EXPECT_TRUE(ignore_errors_allows_delete(cfg, false));
EXPECT_TRUE(ignore_errors_allows_delete(cfg, true));
/* A NULL config cannot opt into --ignore-errors. */
EXPECT_TRUE(ignore_errors_allows_delete(NULL, false));
EXPECT_FALSE(ignore_errors_allows_delete(NULL, true));
config_delete(cfg);
}
void test_client_cli() {
test_validate_config_required_paths();
test_parse_args_numeric_ids();
@@ -4650,4 +4670,5 @@ void test_client_cli() {
test_parse_args_noop_does_not_consume_argv();
test_parse_args_backup_copy_links_shorts();
test_parse_args_rejects_unsupported_short();
test_ignore_errors_allows_delete();
}