Artifact 03007699899ede00a149131c075c84ef3cd89c35aab67a7fea8ee791380a704b:
- File
src/main.zig
-
2026-07-19 17:32:56
— part of check-in
[33a2ceb6d1]
on branch trunk
— Merge blockers: a failed mv changes nothing, and its recovery is exact (B4)
mv recorded a rename in the managed set and persisted it before attempting the filesystem move, with no rollback. A move into a nonexistent directory left the set naming a path that held no file: status invented a missing entry, commit refused over it, and the recovery mv --help documents did not work.
mv now validates that the destination's parent exists and refuses before touching anything, so the failing case records nothing.
Two further defects on the same path. An inverse rename replaced the pending record instead of dropping it, so 'mv a b' followed by 'mv b a' left a b-to-a rename queued; the next commit carrying a real change would then emit an old-name F card asserting the file was formerly named b, a name never committed. That is false provenance in a permanent artifact, produced by the exact sequence the help text advertises as recovery. mvRecord now nets an inverse rename back out.
The error path printed raw Zig error names — a user saw 'AccessDenied' where clean and init already print 'permission denied' through reasonOf. It now uses the same mapping.
A residual window remains: a crash between the move and the record write is not atomic, documented at the site. Full working-tree crash consistency is a separate concern. (user: dmestas, size: 557139) [annotate] [blame] [check-ins using]
-
2026-07-19 17:32:56
— part of check-in
[33a2ceb6d1]
on branch trunk
— Merge blockers: a failed mv changes nothing, and its recovery is exact (B4)
mv recorded a rename in the managed set and persisted it before attempting the filesystem move, with no rollback. A move into a nonexistent directory left the set naming a path that held no file: status invented a missing entry, commit refused over it, and the recovery mv --help documents did not work.
mv now validates that the destination's parent exists and refuses before touching anything, so the failing case records nothing.
Two further defects on the same path. An inverse rename replaced the pending record instead of dropping it, so 'mv a b' followed by 'mv b a' left a b-to-a rename queued; the next commit carrying a real change would then emit an old-name F card asserting the file was formerly named b, a name never committed. That is false provenance in a permanent artifact, produced by the exact sequence the help text advertises as recovery. mvRecord now nets an inverse rename back out.
The error path printed raw Zig error names — a user saw 'AccessDenied' where clean and init already print 'permission denied' through reasonOf. It now uses the same mapping.
A residual window remains: a crash between the move and the record write is not atomic, documented at the site. Full working-tree crash consistency is a separate concern. (user: dmestas, size: 557139) [annotate] [blame] [check-ins using]
-
2026-07-19 17:32:56
— part of check-in
[33a2ceb6d1]
on branch trunk
— Merge blockers: a failed mv changes nothing, and its recovery is exact (B4)