You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(chaos): tolerate documented V1 rename-churn in the rename-storm invariants
The drain-due-pending-ops approach from the prior commit could spin to the
24-cycle cap on the slower CI runners: a create op for a file that was renamed
AWAY during the storm never drains (the planner will not upload a path that no
longer exists, and M3's once-per-boot reconcile does not re-run to clean it),
so "drain until no due op" never converges. Revert that and instead make the
rename-storm row's cross-scenario invariants tolerate the documented V1 churn
explicitly (new assert_cross_scenario_invariants_opts with tolerate_rename_churn):
- A `synced` row whose local file was renamed away (path gone) is skipped by the
no-data-loss byte check - it is a stale row for an old name the next reconcile
trashes, an old copy of a file that still lives under a new name, not a lost
byte. Rows whose local file still exists are still strictly byte-checked.
- A DUE pending create op whose target path no longer exists locally is not
counted as a leak - it is the documented bytes-uploaded-twice cost, not a
stuck pipeline. A due op for a file that DOES still exist is still a leak.
This keeps every machine-speed-INDEPENDENT safety property strict (no data loss
for current files, no duplicate client_op_uuid, no stuck op for a live file)
while accepting the V1 "no rename detection" churn the spec itself documents
(STRESS_HARNESS s3.6 rename-storm). Verified locally 6x; run-all 51/34/0.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J8meqeTo8bcZ3zjgKjBnJ4
0 commit comments