C#: a write through a live link at the store path is refused; read-under-lock pinned (store-link-cs) #151

Merged
libby merged 5 commits from store-replace/link-cs into main 2026-11-13 00:36:21 +00:00
Member

Cut variants:cut_spec:cut-store-link-cs.r2, ruling variants:ruling:store-live-link-write-refuse (steward, option c). Reports variants:cut_report:cut-store-link-cs.h1, .h2; verdict variants:verdict:cut-store-link-cs.s1.

AcquireLock refuses a store path that is a link (any ReparsePoint, no P/Invoke) with CultStoreLinkedException (Path member; wording shared with the Rust/Py/TS StoreLinkedError), before the lock sidecar is made and again once the lock is held, so a link put there during the lock wait is refused too. DirectoryMessagePackBackingStore refuses a link at its manifest path the same way at its commit lease. ReadDisk reports a live directory link as a directory, not as unreachable. Tests pin that the write sites (PushAll, CommitBatchCore, WriteOne, JudgeChecks) read the snapshot under the lock, and the refusal on the non-waiting (TryCommit) and judging paths.

Not run: the Windows junction/file-symlink refusal on starfire; Stryker.NET (hand mutation instead). The Windows any-reparse-point behaviour is unchanged (windows-reparse-split is a cross-runtime follow-up). Directory-store record pages (content-addressed names) have no link check.

🤖 Generated with Claude Code

Cut `variants:cut_spec:cut-store-link-cs.r2`, ruling `variants:ruling:store-live-link-write-refuse` (steward, option c). Reports `variants:cut_report:cut-store-link-cs.h1`, `.h2`; verdict `variants:verdict:cut-store-link-cs.s1`. `AcquireLock` refuses a store path that is a link (any ReparsePoint, no P/Invoke) with `CultStoreLinkedException` (`Path` member; wording shared with the Rust/Py/TS `StoreLinkedError`), before the lock sidecar is made and again once the lock is held, so a link put there during the lock wait is refused too. `DirectoryMessagePackBackingStore` refuses a link at its manifest path the same way at its commit lease. `ReadDisk` reports a live directory link as a directory, not as unreachable. Tests pin that the write sites (`PushAll`, `CommitBatchCore`, `WriteOne`, `JudgeChecks`) read the snapshot under the lock, and the refusal on the non-waiting (`TryCommit`) and judging paths. Not run: the Windows junction/file-symlink refusal on starfire; Stryker.NET (hand mutation instead). The Windows any-reparse-point behaviour is unchanged (windows-reparse-split is a cross-runtime follow-up). Directory-store record pages (content-addressed names) have no link check. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
C# store: a write at a link is refused before the lock and replace; a live directory link says directory
Some checks failed
CultMesh portability and performance / ubuntu-latest reactive semantics and leases (pull_request) Has been cancelled
2bb1b05ca3
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
tests: a manifest link put at a directory store after open leaves no records folder or lease
Some checks failed
CultMesh portability and performance / ubuntu-latest reactive semantics and leases (pull_request) Has been cancelled
100a51e186
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
CultStoreLinkedException: the doc states the window left after the lock-held check
All checks were successful
CultMesh portability and performance / ubuntu-latest reactive semantics and leases (pull_request) Successful in 19m39s
498beb8219
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
libby merged commit 73e2131d9a into main 2026-11-13 00:36:21 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
GameCult/CultLib!151
No description provided.