Skip to content

fix(fs): Same change and cache rules on every backend, refuse Unicode name collisions - #87

Merged
ifdotpy merged 4 commits into
mainfrom
fix/fs-consistency
Oct 31, 2026
Merged

ifdotpy merged 4 commits into
mainfrom
fix/fs-consistency

Conversation

@ifdotpy

@ifdotpy ifdotpy commented Oct 31, 2026

Copy link
Copy Markdown
Owner
  • Unicode: APFS also folds normalization on case-sensitive volumes. Collision checks (refuse_case_collisions, case_clash, refuse_case_clash, refuse_remaining_clashes, git import) now run there with a normalization key, and refuse before anything is deleted or written.
  • Save: APFS decides 'changed' with the status rules (content, type, link target, exec bit, added/removed files) instead of thin metadata. touch, chmod 640 and empty folders make no automatic state.
  • Caches: before any snapshot of the working folder, a cache path (machine setting or folder overlay, ignored, not versioned) that is a plain folder becomes a cache again. APFS marks it in place (no copy); btrfs copies with reflinks into a new subvolume; OverlayFS keeps caches by path.
  • Tests: t72-save-change-rules, t73-cache-recreated, t74-unicode-names (all fail on the old binary). macOS local: t01 t02 t03 t05 t59 t64 t66 t67 apfs-local apfs-cache-retention apfs-thin pass.

@ifdotpy
ifdotpy force-pushed the fix/fs-consistency branch from 4dbdc7d to 8787aeb Compare October 31, 2026 13:01
@ifdotpy
ifdotpy merged commit 6fe5647 into main Oct 31, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant