Repository navigation
fix: materialize snapshots containing socket markers - #23
Conversation
|
@AbirAbbas please review and merge this socket portability fix when satisfied. Linux, macOS and Windows CI pass. The public CLI regression covers materialization and an empty same-head restore plan; existing concurrent-writer and symlink-parent protections pass unchanged. The fixed candidate also restored a real chat workspace through repeated public-internet transfers and allowed actual read/edit/publish and readback on the receiving device. The follow-up does not demonstrate an end-to-end latency improvement in the balanced comparison; its justification is correctness. Integration evidence. Release order for CodeAF #2162: review/merge this PR, publish a release through the normal pipeline, then update CodeAF's currently unchanged 0.3.5 pin and verify the normally installed engine before merging CodeAF. Candidate-binary testing does not replace that final release check. |
|
Verified on 25beda1 before merging; this is the furrow fix CodeAF#2162 waits on.
Next: furrow 0.3.6 gets cut with this fix. |
Cuts furrow 0.3.6 with #23: a snapshot containing a Unix socket marker (e.g. Git's fsmonitor socket) now materializes, and the same-head rewind plan stays empty. CodeAF#2162 moves its furrow pin to this release. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…et markers) (#2273) * furrowbin: pin furrow v0.3.6 (materialize snapshots containing socket markers) furrow 0.3.6 (Agent-Field/furrow#23) materializes a snapshot that contains a Unix socket marker, such as Git's fsmonitor socket, instead of failing with 'workspace path changed during rewind'. The six sha256 values come from the release's SHA256SUMS, and were checked against the downloaded assets. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs/changes: entry for #2273 (furrow 0.3.6) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Summary
Materializing a snapshot containing a Unix socket (for example Git's fsmonitor socket) fails because the deliberately omitted socket looks like a concurrent edit. Even after accepting its absence during verification, the same snapshot produces a false restore plan, making an unchanged received workspace appear to contain local edits.
The plan also omits an empty parent-directory replacement when all its metadata matches. Existing Windows timestamp handling remains unchanged. Regular files, symlinks, directory metadata differences, I/O errors and parent-path safety checks retain their checks.
Evidence
watch --no-daemon→materializefails on v0.3.5 withworkspace path changed during rewind: .git/fsmonitor--daemon.ipc. After the initial verification fix, same-headrewind --dry-runstill reports the omitted socket and its unchanged parent.After: Materialization succeeds and the same-head plan is empty, including after watching and sealing the unchanged destination.
Merge Danger
Door: two-way
Blast Radius: restore
Only a missing current entry with an expected socket marker is omitted from recursive comparison. Empty parent pruning requires matching metadata; actual child changes still retain the parent's restore. No release or downstream dependency update is included.