Skip to content
zit Artifact [d7dd9ea30b]
Login

Artifact [d7dd9ea30b]

Artifact d7dd9ea30b699786231766b23c5f03cbd318a764f35ced28641128c4d94b00b3:

Manifest of check-in [d7dd9ea30b] - mv: move the working file first, then record the rename (blocker B4)

`zit mv` recorded the rename in the managed set and persisted it DURABLY before attempting the filesystem move, and rolled nothing back when the move failed. Every failed mv therefore left the repository in a state the user never asked for: the set naming a path that does not exist, the file still at its old name, `status` reporting the new name as missing, and `commit` ready to record a rename that never happened. The documented recovery in `mv --help` -- "to reverse a rename, run `zit mv NEW OLD`" -- then failed too, because the reverse mv sees the old path still occupied on disk and refuses the collision. The help text promised an escape that the ordering made impossible.

WHAT CHANGED

1. `mvCommit` is reordered: rename the working file FIRST, then swap the managed entry and persist. If the persist fails, the file is renamed back and nothing is recorded. The record/persist half is extracted into `mvRecord`, which returns the first failure's exit with its diagnostic already on stderr, leaving `mvCommit` to own only the ordering and the rollback.

MOVE-FIRST-WITH-ROLLBACK RATHER THAN RECORD-FIRST-WITH-RECORD-ROLLBACK. Undoing a durable record write needs a second durable write, which can itself fail, nesting the failure inside the failure handler. Renaming a file back cannot realistically fail: the source directory that existed a moment ago still exists and the source name is still free. The rollback that can't fail is the one to build the guarantee on.

2. `mvCheckLegal` gains a dest-parent-exists check. This is what turns the blocker's own repro into a clean refusal rather than a rollback: a stat of a path UNDER a missing directory fails, so `mvOnDisk(new_key)` reads false and the collision check waved `nodir/x.txt` through -- the most common way a legal-looking rename dies at the syscall was the one case the gauntlet could not see. Now it is refused pre-mutation, naming the directory the user has to create. The rollback path remains live and is pinned by the EACCES test, where the parent exists and only the rename itself fails.

3. The `mvCommit` doc comment and `mvRenameFail` both encoded and justified the old ordering; both are rewritten. The residual failure window is documented at the site rather than papered over: a crash BETWEEN the move and the record leaves the file at NEW with the set still naming OLD, which `status` shows as OLD missing plus NEW as an extra, recoverable with `zit add NEW` + `zit rm OLD`. Full crash-atomicity across filesystem and record is working-tree crash-consistency work (0.2 / DST), not this handler's job. A new `mvRollbackFail` covers the one case that can still leave the tree changed -- move succeeded, record failed, move-back failed -- and prints where the file actually is so it can be moved by hand.

RIDE-ALONG SF3, SCOPED TO mv (BLOCKER-FIX-PLAN.md section 3)

mv rendered both ENOENT and EACCES as "input/output error", which sent users looking for a disk fault when the real cause was a typo or a permission bit. The rename error is now captured and reported. The error name is printed as-is rather than through a translation table: the global errno-mapping sweep is 0.2 work, and growing a private mapping here would be the thing that sweep then has to unpick. `nodir` reports the missing directory by name; `ro/x.txt` reports AccessDenied.

RED PROOF (no product code changed until RED was proven; marker `// REGRESSION B4:`)

Three of the four e2e cases failed against a fresh build of this tree:

a failed mv into a missing directory records nothing a failed mv into an unwritable directory records nothing a failed mv leaves the source tracked and still movable

The first two failed on `indexOf(stderr, "recorded") == null` -- mv reporting a half-done rename. The third failed at exit 1 where 0 was expected: after the failed mv the source was no longer tracked, so an ordinary mv of it was refused. The two failure causes are the same defect reached by different errnos; identical wrong state in both is what shows the mechanism is the ordering and not one error code.

CONTRACT-PARTNER GUARD, GREEN BEFORE AND AFTER

`zit mv NEW OLD` reverses a successful rename exactly

Both renames in it succeed, so no failure path is entered and the ordering is unobservable -- it is structurally incapable of exhibiting B4 and was green pre-fix. It is the blast-radius check for the reordering, since the fix moves the same `recordRename` bookkeeping: `mv b a` after `mv a b` must net the rename record back out or `commit` would see a phantom change. It is still green.

The failure assertions chain beyond `status`, because the set mv persists is the same set `extras` subtracts from and `commit` walks: after a failed mv the tests assert status clean AND extras empty AND `commit` refusing with "nothing to commit (no changes)".

TEST EVIDENCE

In this worktree at the committed tree, full battery, no filtering: `zig fmt --check build.zig src`, `zig build`, `zig build test` (1797 tests), `zig build e2e` (428 tests), `zig build dst` (6 seeds x 1000 steps) and `zig build smoke` (S1-S6) each exit 0.

The repro of record was also driven by hand against the rebuilt binary, on a committed baseline. `zit mv sub/a2.txt nodir/x.txt` now prints "zit mv: cannot move into 'nodir': no such directory" at exit 1; `status` reports nothing, `extras` is empty, `commit` says "nothing to commit (no changes)", and the file is still at `sub/a2.txt`. The source is still movable: `zit mv sub/a2.txt sub/c.txt` succeeds. The EACCES path prints "zit mv: cannot move 'sub/a2.txt' to 'ro/x.txt': AccessDenied" and leaves the same zero state change. The help text's reversal promise was verified as behavior rather than reread: `mv a2 b` then `mv b a2` returns the tree to the baseline with `commit` finding no change.

NO TEST EXPECTATION WAS CHANGED. No shipped assertion encoded this bug; the only prior reference to the old wording was the message string itself.

BRANCH STATE, STATED

This commit sits on the B6 leaf d8e5e8117d, which has not yet landed on trunk -- that is the tree the worktree was handed over at, and the battery above ran on it. Landing B4 from here would carry B6 with it, so B6 lands first or B4 is re-applied onto trunk; it is not this commit's call to make.

No borrowed technique: the ordering argument and the gauntlet check are original to this change. No performance claim is made. by dmestas on 2026-07-19 16:38:16.


C mv:\smove\sthe\sworking\sfile\sfirst,\sthen\srecord\sthe\srename\s(blocker\sB4)\n\n`zit\smv`\srecorded\sthe\srename\sin\sthe\smanaged\sset\sand\spersisted\sit\sDURABLY\nbefore\sattempting\sthe\sfilesystem\smove,\sand\srolled\snothing\sback\swhen\sthe\smove\nfailed.\sEvery\sfailed\smv\stherefore\sleft\sthe\srepository\sin\sa\sstate\sthe\suser\nnever\sasked\sfor:\sthe\sset\snaming\sa\spath\sthat\sdoes\snot\sexist,\sthe\sfile\sstill\sat\nits\sold\sname,\s`status`\sreporting\sthe\snew\sname\sas\smissing,\sand\s`commit`\sready\nto\srecord\sa\srename\sthat\snever\shappened.\sThe\sdocumented\srecovery\sin\n`mv\s--help`\s--\s"to\sreverse\sa\srename,\srun\s`zit\smv\sNEW\sOLD`"\s--\sthen\sfailed\ntoo,\sbecause\sthe\sreverse\smv\ssees\sthe\sold\spath\sstill\soccupied\son\sdisk\sand\nrefuses\sthe\scollision.\sThe\shelp\stext\spromised\san\sescape\sthat\sthe\sordering\nmade\simpossible.\n\nWHAT\sCHANGED\n\n1.\s`mvCommit`\sis\sreordered:\srename\sthe\sworking\sfile\sFIRST,\sthen\sswap\sthe\n\s\s\smanaged\sentry\sand\spersist.\sIf\sthe\spersist\sfails,\sthe\sfile\sis\srenamed\sback\n\s\s\sand\snothing\sis\srecorded.\sThe\srecord/persist\shalf\sis\sextracted\sinto\n\s\s\s`mvRecord`,\swhich\sreturns\sthe\sfirst\sfailure's\sexit\swith\sits\sdiagnostic\n\s\s\salready\son\sstderr,\sleaving\s`mvCommit`\sto\sown\sonly\sthe\sordering\sand\sthe\n\s\s\srollback.\n\n\s\s\sMOVE-FIRST-WITH-ROLLBACK\sRATHER\sTHAN\sRECORD-FIRST-WITH-RECORD-ROLLBACK.\n\s\s\sUndoing\sa\sdurable\srecord\swrite\sneeds\sa\ssecond\sdurable\swrite,\swhich\scan\n\s\s\sitself\sfail,\snesting\sthe\sfailure\sinside\sthe\sfailure\shandler.\sRenaming\sa\n\s\s\sfile\sback\scannot\srealistically\sfail:\sthe\ssource\sdirectory\sthat\sexisted\sa\n\s\s\smoment\sago\sstill\sexists\sand\sthe\ssource\sname\sis\sstill\sfree.\sThe\srollback\n\s\s\sthat\scan't\sfail\sis\sthe\sone\sto\sbuild\sthe\sguarantee\son.\n\n2.\s`mvCheckLegal`\sgains\sa\sdest-parent-exists\scheck.\sThis\sis\swhat\sturns\sthe\n\s\s\sblocker's\sown\srepro\sinto\sa\sclean\srefusal\srather\sthan\sa\srollback:\sa\sstat\sof\n\s\s\sa\spath\sUNDER\sa\smissing\sdirectory\sfails,\sso\s`mvOnDisk(new_key)`\sreads\sfalse\n\s\s\sand\sthe\scollision\scheck\swaved\s`nodir/x.txt`\sthrough\s--\sthe\smost\scommon\sway\n\s\s\sa\slegal-looking\srename\sdies\sat\sthe\ssyscall\swas\sthe\sone\scase\sthe\sgauntlet\n\s\s\scould\snot\ssee.\sNow\sit\sis\srefused\spre-mutation,\snaming\sthe\sdirectory\sthe\n\s\s\suser\shas\sto\screate.\sThe\srollback\spath\sremains\slive\sand\sis\spinned\sby\sthe\n\s\s\sEACCES\stest,\swhere\sthe\sparent\sexists\sand\sonly\sthe\srename\sitself\sfails.\n\n3.\sThe\s`mvCommit`\sdoc\scomment\sand\s`mvRenameFail`\sboth\sencoded\sand\sjustified\n\s\s\sthe\sold\sordering;\sboth\sare\srewritten.\sThe\sresidual\sfailure\swindow\sis\n\s\s\sdocumented\sat\sthe\ssite\srather\sthan\spapered\sover:\sa\scrash\sBETWEEN\sthe\smove\n\s\s\sand\sthe\srecord\sleaves\sthe\sfile\sat\sNEW\swith\sthe\sset\sstill\snaming\sOLD,\swhich\n\s\s\s`status`\sshows\sas\sOLD\smissing\splus\sNEW\sas\san\sextra,\srecoverable\swith\n\s\s\s`zit\sadd\sNEW`\s+\s`zit\srm\sOLD`.\sFull\scrash-atomicity\sacross\sfilesystem\sand\n\s\s\srecord\sis\sworking-tree\scrash-consistency\swork\s(0.2\s/\sDST),\snot\sthis\n\s\s\shandler's\sjob.\sA\snew\s`mvRollbackFail`\scovers\sthe\sone\scase\sthat\scan\sstill\n\s\s\sleave\sthe\stree\schanged\s--\smove\ssucceeded,\srecord\sfailed,\smove-back\sfailed\n\s\s\s--\sand\sprints\swhere\sthe\sfile\sactually\sis\sso\sit\scan\sbe\smoved\sby\shand.\n\nRIDE-ALONG\sSF3,\sSCOPED\sTO\smv\s(BLOCKER-FIX-PLAN.md\ssection\s3)\n\nmv\srendered\sboth\sENOENT\sand\sEACCES\sas\s"input/output\serror",\swhich\ssent\susers\nlooking\sfor\sa\sdisk\sfault\swhen\sthe\sreal\scause\swas\sa\stypo\sor\sa\spermission\sbit.\nThe\srename\serror\sis\snow\scaptured\sand\sreported.\sThe\serror\sname\sis\sprinted\nas-is\srather\sthan\sthrough\sa\stranslation\stable:\sthe\sglobal\serrno-mapping\ssweep\nis\s0.2\swork,\sand\sgrowing\sa\sprivate\smapping\shere\swould\sbe\sthe\sthing\sthat\ssweep\nthen\shas\sto\sunpick.\s`nodir`\sreports\sthe\smissing\sdirectory\sby\sname;\s`ro/x.txt`\nreports\sAccessDenied.\n\nRED\sPROOF\s(no\sproduct\scode\schanged\suntil\sRED\swas\sproven;\smarker\n`//\sREGRESSION\sB4:`)\n\nThree\sof\sthe\sfour\se2e\scases\sfailed\sagainst\sa\sfresh\sbuild\sof\sthis\stree:\n\n\s\sa\sfailed\smv\sinto\sa\smissing\sdirectory\srecords\snothing\n\s\sa\sfailed\smv\sinto\san\sunwritable\sdirectory\srecords\snothing\n\s\sa\sfailed\smv\sleaves\sthe\ssource\stracked\sand\sstill\smovable\n\nThe\sfirst\stwo\sfailed\son\s`indexOf(stderr,\s"recorded")\s==\snull`\s--\smv\sreporting\na\shalf-done\srename.\sThe\sthird\sfailed\sat\sexit\s1\swhere\s0\swas\sexpected:\safter\nthe\sfailed\smv\sthe\ssource\swas\sno\slonger\stracked,\sso\san\sordinary\smv\sof\sit\swas\nrefused.\sThe\stwo\sfailure\scauses\sare\sthe\ssame\sdefect\sreached\sby\sdifferent\nerrnos;\sidentical\swrong\sstate\sin\sboth\sis\swhat\sshows\sthe\smechanism\sis\sthe\nordering\sand\snot\sone\serror\scode.\n\nCONTRACT-PARTNER\sGUARD,\sGREEN\sBEFORE\sAND\sAFTER\n\n\s\s`zit\smv\sNEW\sOLD`\sreverses\sa\ssuccessful\srename\sexactly\n\nBoth\srenames\sin\sit\ssucceed,\sso\sno\sfailure\spath\sis\sentered\sand\sthe\sordering\sis\nunobservable\s--\sit\sis\sstructurally\sincapable\sof\sexhibiting\sB4\sand\swas\sgreen\npre-fix.\sIt\sis\sthe\sblast-radius\scheck\sfor\sthe\sreordering,\ssince\sthe\sfix\smoves\nthe\ssame\s`recordRename`\sbookkeeping:\s`mv\sb\sa`\safter\s`mv\sa\sb`\smust\snet\sthe\nrename\srecord\sback\sout\sor\s`commit`\swould\ssee\sa\sphantom\schange.\sIt\sis\sstill\ngreen.\n\nThe\sfailure\sassertions\schain\sbeyond\s`status`,\sbecause\sthe\sset\smv\spersists\sis\nthe\ssame\sset\s`extras`\ssubtracts\sfrom\sand\s`commit`\swalks:\safter\sa\sfailed\smv\nthe\stests\sassert\sstatus\sclean\sAND\sextras\sempty\sAND\s`commit`\srefusing\swith\n"nothing\sto\scommit\s(no\schanges)".\n\nTEST\sEVIDENCE\n\nIn\sthis\sworktree\sat\sthe\scommitted\stree,\sfull\sbattery,\sno\sfiltering:\n`zig\sfmt\s--check\sbuild.zig\ssrc`,\s`zig\sbuild`,\s`zig\sbuild\stest`\s(1797\stests),\n`zig\sbuild\se2e`\s(428\stests),\s`zig\sbuild\sdst`\s(6\sseeds\sx\s1000\ssteps)\sand\n`zig\sbuild\ssmoke`\s(S1-S6)\seach\sexit\s0.\n\nThe\srepro\sof\srecord\swas\salso\sdriven\sby\shand\sagainst\sthe\srebuilt\sbinary,\son\sa\ncommitted\sbaseline.\s`zit\smv\ssub/a2.txt\snodir/x.txt`\snow\sprints\n"zit\smv:\scannot\smove\sinto\s'nodir':\sno\ssuch\sdirectory"\sat\sexit\s1;\s`status`\nreports\snothing,\s`extras`\sis\sempty,\s`commit`\ssays\s"nothing\sto\scommit\s(no\nchanges)",\sand\sthe\sfile\sis\sstill\sat\s`sub/a2.txt`.\sThe\ssource\sis\sstill\nmovable:\s`zit\smv\ssub/a2.txt\ssub/c.txt`\ssucceeds.\sThe\sEACCES\spath\sprints\n"zit\smv:\scannot\smove\s'sub/a2.txt'\sto\s'ro/x.txt':\sAccessDenied"\sand\sleaves\sthe\nsame\szero\sstate\schange.\sThe\shelp\stext's\sreversal\spromise\swas\sverified\sas\nbehavior\srather\sthan\sreread:\s`mv\sa2\sb`\sthen\s`mv\sb\sa2`\sreturns\sthe\stree\sto\sthe\nbaseline\swith\s`commit`\sfinding\sno\schange.\n\nNO\sTEST\sEXPECTATION\sWAS\sCHANGED.\sNo\sshipped\sassertion\sencoded\sthis\sbug;\sthe\nonly\sprior\sreference\sto\sthe\sold\swording\swas\sthe\smessage\sstring\sitself.\n\nBRANCH\sSTATE,\sSTATED\n\nThis\scommit\ssits\son\sthe\sB6\sleaf\sd8e5e8117d,\swhich\shas\snot\syet\slanded\son\ntrunk\s--\sthat\sis\sthe\stree\sthe\sworktree\swas\shanded\sover\sat,\sand\sthe\sbattery\nabove\sran\son\sit.\sLanding\sB4\sfrom\shere\swould\scarry\sB6\swith\sit,\sso\sB6\slands\nfirst\sor\sB4\sis\sre-applied\sonto\strunk;\sit\sis\snot\sthis\scommit's\scall\sto\smake.\n\nNo\sborrowed\stechnique:\sthe\sordering\sargument\sand\sthe\sgauntlet\scheck\sare\noriginal\sto\sthis\schange.\sNo\sperformance\sclaim\sis\smade.\n
D 2026-07-19T16:38:16.250
F .fossil-settings/ignore-glob 3580f973d7097226f91a27c7b61ec13d9d07880d95549f9b90ce86da5d867a23
F .github/workflows/ci.yml 6d343370ac09cc6826509b7c22e045fd7c8b2272504ced464c382a24588d0878
F LICENSE 702ae7ff835a2a971dae11c5cae039803bf394b77a6d8ec9f18693e449eaaf26
F README.md 62e1f936cc2ea0e33d717539bdffd6126a639843069bd6256359f2b15cb06232
F build.zig 43c12a0eaffed3817646b3021862ee1add3b8536a85b531b7cf55319c3b0e95e
F build.zig.zon 0eade544d4d7fc5a620348c6f29cc9219ff8c6d6377a05e756ca89860a524781
F docs/rfcs/draft-fossil-artifact-format-00.txt a6d542a5effeb41d0ea1e916058ccdc0a5819787f167ef1ebad7814f5680e7ad
F docs/rfcs/draft-fossil-delta-format-00.txt d8025d6d75322e33887c3334a4b9cc729960028b3c994ed01e5a474e4b388fd2
F docs/rfcs/draft-fossil-repo-state-00.txt fd413bcb28001a8a07009ca0c769cfe666394ba79dd4f14a6461f2b592049595
F docs/rfcs/draft-fossil-sync-protocol-00.txt aa55791464a54ef4b651df8780ba5c46e95c723c7997d09a5b727fef658f920a
F scripts/mirror-export.sh cc1130129e3c320cb9c1c5a05f505e45ece23d6bb3e0228da8e7ffe97bd5612b x
F src/annotate.zig 0a6b6728099e63c84681d1e5228ebb45fafb55d65df1720358247fd6e6532c63
F src/artifact.zig c630afd9fbbcfaccd7b823105b4d05db1dc85b6af03080a6d58635ed064672ca
F src/artifact_fuzz.zig 8bb359ddfe790818e109a1dd7ac0c1b5cec1a8fdc556f37e73504cdb7f933e17
F src/artifact_test.zig da999476660f7e6e1f50ed9da5c30f1c83d6b358e2cfcd265c6932959c85bdd1
F src/bisect.zig 7bfc45d3e0e339017826941463cc4e9118892d2898fbcd319e6e6ca85c4d3301
F src/checkout.zig ac48e76f22c8065f70d2a827ae00ffb99887af80950a93c1a3451a9a1ad0f403
F src/ci_test.zig 98f79b658d4840ba4807a79b5cc697cd1417015b2fc6521d6b21ba283310cf86
F src/cli.zig 1e5b30773fc696e84ae3e7d7019a636435020bcd296810e90af6344cb494c1a7
F src/container.zig cef1028531f2763f94248b761c8779a1884e44bb854b8c45617494e3ead40e61
F src/container_test.zig a013652b1ed181161d3ad8fc9d8f052f7c27b61e129662632ceaf8cf189445ec
F src/delta.zig e8f3a6297d47549aea146222732ccf514c39688414f0a74ba396ac91066686f3
F src/delta_fuzz.zig 9e0d8dbb8c82ca0ba1a80974c076e74e4f37072b21a10812efd5539875904719
F src/delta_test.zig b18d97e117dce8fbcc05bff6f6954effdb946bab6d36337efbe5ef64d10646a0
F src/dst.zig 7a2e9e522066e5e052090da4b175f8fa5ea51452d30c019b5f46079034fd2f79
F src/e2e.zig 21037f99ae7541fc2c47d885a1e7b4d6d851de239ebff794cde9f3a1be57f959
F src/extras.zig d7b6ec8caa95993ce01c4ed9ddd0cda327db823bdbde4e27dff4966591be25f5
F src/fuzz_tests.zig 1074473ceb2aba56872e79607ecd4eb19f07be0d2c6c749e19a02ee2db8570d9
F src/logstore.zig a26e7b006f335b0bbb9bb41ac702ea42fab1c5b4ce9b13c7d25a89c84197aed0
F src/logstore_benchmark.zig e245474e1cc4f10617866f718aab3958f13b256c609b3e5fd562f500668388c0
F src/logstore_fuzz.zig 67b7bda806397f92c3b07c94854d9fafca56710090071a1c1c8ec94d137408f8
F src/logstore_test.zig a9baaee2cf009c988832d3632f52a1eeabf36afd52c891315f7673ce28442533
F src/main.zig 8932a8bef81149faacea773274751dbb4f8a635035ecf79c1b9ee8fde2ac2fda
F src/managed.zig 81ccc2d6321fe3dff91f653305ae4e73bea0b3fae7db2ab2f0cf168d9518d601
F src/merge3.zig 7fc52445688751bb8af30462549650660bcdbadabef54d892b6505d628248d0b
F src/merge3_fuzz.zig 83dcd4d9f2f9c208baa15e79ceeea80a0ebf47456a9b045f6d1c1efe3a927582
F src/pack.zig 0ea96cb540b3f43f6ff8ce95a3044ce939879bc6f9bf0eb82b26aab4089009c7
F src/packaging_test.zig b802ada92f1ade1b62e3d1cfc36549c9b8d05be5430bd33d440bc93d7cd3600f
F src/repocache.zig aae232a6b1b86e27c5242c0ee17ce9f2544299d99cf4936d8c2c9000e3166884
F src/repoimage.zig 7d2dc2f3c145e10e2d9ba6997705fd61a0cc0aedde8e171c253163d1279ccdd5
F src/repository.zig 79ffa239b0a37eea0b3161040f045d6ca8c656331c29925f078ac87213a12476
F src/repository_test.zig 17bdf4c7042f846f928570a47821035f936238f70f3d61d8d2ea3729d5f58868
F src/repostate.zig b4944efab53752f12da2871b2bc46251dbdacd4fcba27e38c61c4fe4d40d1df1
F src/repostate_test.zig e5699688b0f43b7480ed5d89f11585c2f61114bbe3ec9dae5061741f37b37e7a
F src/repoview.zig ec2958e1e8fd955c761d240ab80c3b3f62e3473991713c25ed5a603df984e403
F src/rfc_vectors/artifact_a1_1_sha1_manifest.txt 82d8fc78b3fbf85efe80cb05e79db40c910bf0551e55b728c6f9c2ca7a42ddb6
F src/rfc_vectors/artifact_a1_2_sha3_technote.txt 832e850f83aab2e2a754aa97591109f7f05fb41e4126c7e71c88a59d6d17e55d
F src/rfc_vectors/artifact_a3_rcard_manifest.txt 47e412ef211f095e93275fadf527909e581eef42357d8437fc7e299bfc3e62a7
F src/rfc_vectors/sync_a1_round1_reply.txt 638813029b10f81303b88859279afb17095d7c779c993f4267870909acabbeb9
F src/rfc_vectors/sync_a1_round2_file_cards.txt 4fa397741f7521cc4181d5d6b04dc143187f57602384eaa688552115ecda27c2
F src/rfc_vectors/sync_a1_round2_reply.txt af956808190c79b37a384041690c36b78845b471d6c6c01d1cced6e3ee92e6b1
F src/rfc_vectors/sync_a2_reply.txt aa130a127cde210f793c7842960083c765e0ffc7b673374fabc8f0edfe03d763
F src/root.zig c0e74897f57db81c0e4ce57bb992f4fbf52139234317ca00698a2af0c1c1c9b3
F src/serve.zig a072735c12410c63d1d5ace84d7ddf30b84639848ba420207e2432e5b7dcbc27
F src/serve_fuzz.zig 3c39ea768ffa37599e2cc00c588f053870766ab91500aceb0d844a4322174687
F src/sim/faulty_file.zig 8e8a0325d0e987d1dd306588f910af5302e6456561eefae92c73c424fc1a9c94
F src/sim/gen.zig 0e237af570a73bc78e9a717a8ea59867611deb2348287765826ea4ff1942528b
F src/sim/net.zig 8fb057012ce0a33f67c928cd696bc2761fea8ba4012b2daa33871b2ba5dfe772
F src/sim/oracle.zig 04b81d9472a0529d9e9d030779304c3d6c930f4db20b800ae3f9cbc5c178969a
F src/sim/storage_sweep.zig 5472d632347079fb5c7e7ae300b46c6e8202b91202b1c51b181dd3c7bab8a306
F src/sim/sync_gen.zig 238d46942915b5c0e989dfc738b5927b5228468ea123e6f17b6fb593aa5cbf6e
F src/sim/sync_sweep.zig 5458a84be08823d2d0fc9464665f1c3f3f26563185dc9ae24cf73259faa5d40e
F src/smoke.zig d3aecf12565618a6b678eeff534230c88dbe5a02486beafcdbdf1eac9b258292
F src/storage.zig 512205eb629d5af8d50ad336f1ef49f53b455abd52ee2f9b56d20893cafad39f
F src/storage_benchmark.zig 871f00fef1a34a0b2ee7b9656a217a0cf52949fdd710b642a44dc6bf12d6866e
F src/sync.zig b04119b2679887c6705ed4831899ca1911ca20afe0bac865022ac8b7ad879194
F src/sync_benchmark.zig 9a4542401c880750ff6565a2ca9f1d116341d1c5af704ef4a05c2732eeec8849
F src/sync_driver.zig 722ed498ea6b76900661a085d4257e51f6416d43ac1185e8ac15140de265f67e
F src/sync_driver_test.zig b50450d2938fc60aa90cd9067fc45141a965b63dc2194f42d5109919e380d7df
F src/sync_fuzz.zig 3f419ec3e3c0b4ecf99376e46d111c4fae9826d08f9968e649ffdf84d10f9e61
F src/sync_test.zig b47b05d3defeef61a02c9c9817b66288c48430713737c946734dba151bb17e7e
F src/transport.zig 4652b2ab7f43ccd8af5ca6ef7604f8e7cd28353450b1ec90d206b881308f8b5f
F src/transport_fuzz.zig adc4ea5e22f821d868ffa57e3aafd42834f358b26d4b317cd6dbe8c76c6f733b
F src/undo.zig 2e213cbe02118e37b11554620b285deae5dbf5b4d8009ae6dc229b84375b7591
F src/update.zig 0103da3d0ea12ce5710fd4268f432a52a0fb07ea7cb2ebe14af6e52395eb598c
F src/update_test.zig c06e5fb6da0b1b7aa055fb2398bd03844e0dbec67ed97905135db1dffb8a2a14
F src/warmread_benchmark.zig 9421986d49deff3f720e491fb6d1c7162dc9322f4e67dd14198820c3992dc02a
P d8e5e8117d6fee3fd37d902724db559975241d1b019df5fe03676fc5464eabf3
R 2025649ddcc342329afe853d479094b9
U dmestas
Z 64fe0e0fbaf1d775ac07924f1e8af8ec