Skip to content

Commit 32f21a8

Browse files
committed
docs: scope CHANGELOG lock-path note to APFS; document expected_hashes exemption
Post-audit polish: the lock-path self-alias tolerance can never run on native Windows (writes are refused earlier), so the CHANGELOG names APFS only; the portability pre-pass comment records why probe-only expected_hashes keys are exempt (read preconditions on legacy names must stay expressible). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EAiQCkG4JfmgdqE563r3Az
1 parent 4536e46 commit 32f21a8

2 files changed

Lines changed: 8 additions & 4 deletions

File tree

CHANGELOG.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,11 @@ implementation record for older releases.
2424
(previously `read_text` newline normalization made every chunk look stale).
2525
- Under a held mutation lock, a vault whose on-disk name differs only by case
2626
from the spelling used on the command line is no longer misreported as its
27-
own portable alias on case-insensitive filesystems (APFS, NTFS); the
28-
descriptor-pinned vault object is recognized as itself. Inspect-time
29-
auditing keeps the stricter shipped behavior, since an absent init root on
30-
a case-insensitive volume cannot distinguish itself from an alien sibling.
27+
own portable alias on case-insensitive filesystems (APFS; the lock layer
28+
never runs on native Windows); the descriptor-pinned vault object is
29+
recognized as itself. Inspect-time auditing keeps the stricter shipped
30+
behavior, since an absent init root on a case-insensitive volume cannot
31+
distinguish itself from an alien sibling.
3132

3233
### Changed
3334

claude_obsidian/transaction.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3277,6 +3277,9 @@ def _prepare_writes(
32773277
# Lexical portability pre-pass before any filesystem probe so unportable
32783278
# plans are rejected with the same code on every platform (a Windows lstat
32793279
# of e.g. "a:b.md" would otherwise fail first with a different error).
3280+
# expected_hashes keys are deliberately exempt: probe-only keys are read
3281+
# preconditions, and a legacy vault must stay able to pin the state of a
3282+
# pre-existing file whose historical name violates the portable rules.
32803283
for raw in raw_writes:
32813284
if isinstance(raw, dict) and isinstance(raw.get("path"), str):
32823285
_assert_portable_write_path(raw["path"])

0 commit comments

Comments
 (0)