Skip to content
go-libfossil Artifact [89535a6c42]
Login

Artifact [89535a6c42]

Artifact 89535a6c429d04eef2bde22fb3dc210f36db0f1266e958311650a8ca27127563:

Manifest of check-in [89535a6c42] - fix: store delta content against a phantomized base instead of discarding it (#83)

* fix: store delta content against a phantomized base instead of discarding it

A delta artifact arriving before its base is normal steady-state behavior during a Fossil transfer, not a fault. The receive path used to discard such deltas outright and phantomize the target instead, so a phantom only ever cleared when its base happened to already be present -- resolution advanced one delta-chain hop per round, making clones of deep-history repos provably unable to converge within MaxRounds.

Match canonical Fossil's content_put_ex/rid_from_uuid model: resolve the delta's source via a create-phantom-if-missing lookup, persist the delta bytes unconditionally (reading the target size straight out of the delta header, so the base never needs to be readable to store it), and record the delta-to-source link immediately. Availability resolves lazily via the existing content.IsAvailable chain walk and manifest.Crosslink's deferred retry -- both already correct and untouched here.

storeReceivedFile is the single call site shared by clone, sync-pull, and server-push, so fixing it here also closes out the delta-before-base sentinel handling on the pull and push paths (issue #57, folded into this fix): neither path needs to special-case the condition anymore because it stops being an error.

Verified against the pikchr corpus via a loopback fossil server: rounds dropped from 100 (exhausted) to 3, files received from 63,155 (22.2x) to 2,980 (1.05x), and the phantom table empties out completely.

* fix: converge delta storage on canonical, close integrity gap, harden wire parsing

Three defects from review, all in the raw-delta path added for the delta-before-base fix, all reachable from an untrusted peer:

1. delta.getInt accumulated v = v*64 + digit with no overflow check. A twelve-byte header of maximum-value digits wraps to exactly math.MaxUint64, which casts to int64(-1) -- the same sentinel blob.size uses for "phantom". That silently corrupted the row: real content reporting as a phantom, with no phantom-table entry to make it re-requestable. getInt now rejects overflow instead of wrapping, and parseTargetLen (shared by Apply and OutputSize) bounds the parsed target length to a sane maximum before it ever reaches an allocation or a size column.

2. StoreDeltaRaw panicked on a zero-length delta payload. storeReceivedFile guarded payload == nil but not len(payload) == 0, and nothing between wire decode and storage checked for it -- a peer sending an empty delta file card crashed the process. Wire data gets an error return, not an assertion; OutputSize and StoreDeltaRaw are now consistent with delta.Apply's existing "empty delta is an error" contract.

3. The receive-time split (store raw only when the base happens to be unavailable, otherwise eagerly expand and verify) left a gap an attacker chooses the timing of: withhold the base, and a delta claiming any UUID goes down the unverified raw path. Nothing downstream checked it either -- content.Expand applied deltas with no hash check, and content.Verify was reachable only from repo rebuild and one integration test.

Closed by converging fully on canonical's model: every delta is now stored raw and linked via a create-phantom-if-missing lookup, regardless of whether its base is currently available -- receive time no longer branches on availability at all. Verification moves to the one choke point every expansion path already goes through: content.Expand now hashes its result against the row's claimed UUID before returning it, catching a mismatch regardless of which caller or how the chain assembled. content.Verify becomes a thin wrapper over the same check.

Storage-layer and end-to-end regression tests added for all three, including the exact claim-one-UUID/ship-a-delta-for-another/withhold-the- base reproduction, guarded against degenerating into a no-op (delta must actually compress, base must be genuinely absent, rejection must be a real error rather than merely different bytes).

Re-verified against pikchr (2,842 artifacts) and wapp (1,039): pikchr converges in 3 rounds, 2,980 files, 0 phantoms; wapp converges in 3 rounds, 1,115 files, 1 phantom outstanding (pre-existing, unrelated -- clone.go has no DB-phantom rescan the way the pull path's loadDBPhantoms does; separately tracked). On-disk repository size is close to but slightly smaller than storing everything as raw delta bytes should produce (pikchr 6.81MB -> 6.73MB, wapp 5.64MB -> 5.46MB): zlib on full text already captures most of the redundancy an explicit delta would, so the win here is mainly integrity and convergence, not size.

* fix: bound delta allocation to actual work, validate delta source hex

Two defects from round-two review, plus a stray comment.

1. delta.Apply preallocated its output buffer directly from the delta header's claimed target length (make([]byte, 0, targetLen)). That claim only had to clear maxDeltaTargetSize (4 GiB) to be trusted as an allocation size, so a handful of wire bytes declaring a near-4 GiB target triggered an allocation sized to the claim, not to any work actually done. Harmless as a one-off parse spike; durable once a delta can be stored unverified (see blob.StoreDeltaRaw, this branch) -- a hostile peer plants one such delta and every later Expand of that row repeats the attempt. The initial capacity is now a small fixed bound; append grows it normally for legitimately large content instead of trusting the header's own claim about itself.

2. storeReceivedFile validated the target UUID's hex-ness (hash.IsValidHash) but not the delta source's. The blob table's CHECK constraint only bounds uuid length, not hex-ness, so a non-hex string of valid length passed straight through to blob.StorePhantom and became a permanent, unfillable row -- one the pull path's loadDBPhantoms would then re-request every sync round, forever. deltaSrc now gets the same check as the target uuid, at the same place.

Also deleted a stray doc-comment line left over from an earlier refactor.

Regression tests for both, RED-verified against reverted code before being fixed: the allocation test had to be corrected mid-way through -- delta headers encode their integer in Fossil's own base-64 alphabet, not decimal, so an initial fmt.Sprintf("%d", ...) fixture parsed as a different (still large but differently-bounded) value and passed vacuously; appendInt is the real encoder and is used directly now, with a round-trip sanity check against OutputSize guarding the fixture itself. by [email protected] on 2026-07-19 18:28:45.


C fix:\sstore\sdelta\scontent\sagainst\sa\sphantomized\sbase\sinstead\sof\sdiscarding\sit\s(#83)\n\n*\sfix:\sstore\sdelta\scontent\sagainst\sa\sphantomized\sbase\sinstead\sof\sdiscarding\sit\n\nA\sdelta\sartifact\sarriving\sbefore\sits\sbase\sis\snormal\ssteady-state\sbehavior\nduring\sa\sFossil\stransfer,\snot\sa\sfault.\sThe\sreceive\spath\sused\sto\sdiscard\nsuch\sdeltas\soutright\sand\sphantomize\sthe\starget\sinstead,\sso\sa\sphantom\sonly\never\scleared\swhen\sits\sbase\shappened\sto\salready\sbe\spresent\s--\sresolution\nadvanced\sone\sdelta-chain\shop\sper\sround,\smaking\sclones\sof\sdeep-history\nrepos\sprovably\sunable\sto\sconverge\swithin\sMaxRounds.\n\nMatch\scanonical\sFossil's\scontent_put_ex/rid_from_uuid\smodel:\sresolve\sthe\ndelta's\ssource\svia\sa\screate-phantom-if-missing\slookup,\spersist\sthe\sdelta\nbytes\sunconditionally\s(reading\sthe\starget\ssize\sstraight\sout\sof\sthe\sdelta\nheader,\sso\sthe\sbase\snever\sneeds\sto\sbe\sreadable\sto\sstore\sit),\sand\srecord\nthe\sdelta-to-source\slink\simmediately.\sAvailability\sresolves\slazily\svia\sthe\nexisting\scontent.IsAvailable\schain\swalk\sand\smanifest.Crosslink's\sdeferred\nretry\s--\sboth\salready\scorrect\sand\suntouched\shere.\n\nstoreReceivedFile\sis\sthe\ssingle\scall\ssite\sshared\sby\sclone,\ssync-pull,\sand\nserver-push,\sso\sfixing\sit\shere\salso\scloses\sout\sthe\sdelta-before-base\nsentinel\shandling\son\sthe\spull\sand\spush\spaths\s(issue\s#57,\sfolded\sinto\sthis\nfix):\sneither\spath\sneeds\sto\sspecial-case\sthe\scondition\sanymore\sbecause\sit\nstops\sbeing\san\serror.\n\nVerified\sagainst\sthe\spikchr\scorpus\svia\sa\sloopback\sfossil\sserver:\srounds\ndropped\sfrom\s100\s(exhausted)\sto\s3,\sfiles\sreceived\sfrom\s63,155\s(22.2x)\sto\n2,980\s(1.05x),\sand\sthe\sphantom\stable\sempties\sout\scompletely.\n\n*\sfix:\sconverge\sdelta\sstorage\son\scanonical,\sclose\sintegrity\sgap,\sharden\swire\sparsing\n\nThree\sdefects\sfrom\sreview,\sall\sin\sthe\sraw-delta\spath\sadded\sfor\sthe\ndelta-before-base\sfix,\sall\sreachable\sfrom\san\suntrusted\speer:\n\n1.\sdelta.getInt\saccumulated\sv\s=\sv*64\s+\sdigit\swith\sno\soverflow\scheck.\sA\n\s\s\stwelve-byte\sheader\sof\smaximum-value\sdigits\swraps\sto\sexactly\n\s\s\smath.MaxUint64,\swhich\scasts\sto\sint64(-1)\s--\sthe\ssame\ssentinel\sblob.size\n\s\s\suses\sfor\s"phantom".\sThat\ssilently\scorrupted\sthe\srow:\sreal\scontent\n\s\s\sreporting\sas\sa\sphantom,\swith\sno\sphantom-table\sentry\sto\smake\sit\n\s\s\sre-requestable.\sgetInt\snow\srejects\soverflow\sinstead\sof\swrapping,\sand\n\s\s\sparseTargetLen\s(shared\sby\sApply\sand\sOutputSize)\sbounds\sthe\sparsed\n\s\s\starget\slength\sto\sa\ssane\smaximum\sbefore\sit\sever\sreaches\san\sallocation\n\s\s\sor\sa\ssize\scolumn.\n\n2.\sStoreDeltaRaw\spanicked\son\sa\szero-length\sdelta\spayload.\sstoreReceivedFile\n\s\s\sguarded\spayload\s==\snil\sbut\snot\slen(payload)\s==\s0,\sand\snothing\sbetween\n\s\s\swire\sdecode\sand\sstorage\schecked\sfor\sit\s--\sa\speer\ssending\san\sempty\sdelta\n\s\s\sfile\scard\scrashed\sthe\sprocess.\sWire\sdata\sgets\san\serror\sreturn,\snot\san\n\s\s\sassertion;\sOutputSize\sand\sStoreDeltaRaw\sare\snow\sconsistent\swith\n\s\s\sdelta.Apply's\sexisting\s"empty\sdelta\sis\san\serror"\scontract.\n\n3.\sThe\sreceive-time\ssplit\s(store\sraw\sonly\swhen\sthe\sbase\shappens\sto\sbe\n\s\s\sunavailable,\sotherwise\seagerly\sexpand\sand\sverify)\sleft\sa\sgap\san\n\s\s\sattacker\schooses\sthe\stiming\sof:\swithhold\sthe\sbase,\sand\sa\sdelta\sclaiming\n\s\s\sany\sUUID\sgoes\sdown\sthe\sunverified\sraw\spath.\sNothing\sdownstream\schecked\n\s\s\sit\seither\s--\scontent.Expand\sapplied\sdeltas\swith\sno\shash\scheck,\sand\n\s\s\scontent.Verify\swas\sreachable\sonly\sfrom\srepo\srebuild\sand\sone\sintegration\n\s\s\stest.\n\n\s\s\sClosed\sby\sconverging\sfully\son\scanonical's\smodel:\severy\sdelta\sis\snow\n\s\s\sstored\sraw\sand\slinked\svia\sa\screate-phantom-if-missing\slookup,\n\s\s\sregardless\sof\swhether\sits\sbase\sis\scurrently\savailable\s--\sreceive\stime\n\s\s\sno\slonger\sbranches\son\savailability\sat\sall.\sVerification\smoves\sto\sthe\n\s\s\sone\schoke\spoint\severy\sexpansion\spath\salready\sgoes\sthrough:\n\s\s\scontent.Expand\snow\shashes\sits\sresult\sagainst\sthe\srow's\sclaimed\sUUID\n\s\s\sbefore\sreturning\sit,\scatching\sa\smismatch\sregardless\sof\swhich\scaller\n\s\s\sor\show\sthe\schain\sassembled.\scontent.Verify\sbecomes\sa\sthin\swrapper\sover\n\s\s\sthe\ssame\scheck.\n\nStorage-layer\sand\send-to-end\sregression\stests\sadded\sfor\sall\sthree,\nincluding\sthe\sexact\sclaim-one-UUID/ship-a-delta-for-another/withhold-the-\nbase\sreproduction,\sguarded\sagainst\sdegenerating\sinto\sa\sno-op\s(delta\smust\nactually\scompress,\sbase\smust\sbe\sgenuinely\sabsent,\srejection\smust\sbe\sa\nreal\serror\srather\sthan\smerely\sdifferent\sbytes).\n\nRe-verified\sagainst\spikchr\s(2,842\sartifacts)\sand\swapp\s(1,039):\spikchr\nconverges\sin\s3\srounds,\s2,980\sfiles,\s0\sphantoms;\swapp\sconverges\sin\s3\nrounds,\s1,115\sfiles,\s1\sphantom\soutstanding\s(pre-existing,\sunrelated\s--\nclone.go\shas\sno\sDB-phantom\srescan\sthe\sway\sthe\spull\spath's\sloadDBPhantoms\ndoes;\sseparately\stracked).\sOn-disk\srepository\ssize\sis\sclose\sto\sbut\nslightly\ssmaller\sthan\sstoring\severything\sas\sraw\sdelta\sbytes\sshould\nproduce\s(pikchr\s6.81MB\s->\s6.73MB,\swapp\s5.64MB\s->\s5.46MB):\szlib\son\sfull\ntext\salready\scaptures\smost\sof\sthe\sredundancy\san\sexplicit\sdelta\swould,\nso\sthe\swin\shere\sis\smainly\sintegrity\sand\sconvergence,\snot\ssize.\n\n*\sfix:\sbound\sdelta\sallocation\sto\sactual\swork,\svalidate\sdelta\ssource\shex\n\nTwo\sdefects\sfrom\sround-two\sreview,\splus\sa\sstray\scomment.\n\n1.\sdelta.Apply\spreallocated\sits\soutput\sbuffer\sdirectly\sfrom\sthe\sdelta\n\s\s\sheader's\sclaimed\starget\slength\s(make([]byte,\s0,\stargetLen)).\sThat\n\s\s\sclaim\sonly\shad\sto\sclear\smaxDeltaTargetSize\s(4\sGiB)\sto\sbe\strusted\sas\san\n\s\s\sallocation\ssize,\sso\sa\shandful\sof\swire\sbytes\sdeclaring\sa\snear-4\sGiB\n\s\s\starget\striggered\san\sallocation\ssized\sto\sthe\sclaim,\snot\sto\sany\swork\n\s\s\sactually\sdone.\sHarmless\sas\sa\sone-off\sparse\sspike;\sdurable\sonce\sa\sdelta\n\s\s\scan\sbe\sstored\sunverified\s(see\sblob.StoreDeltaRaw,\sthis\sbranch)\s--\sa\n\s\s\shostile\speer\splants\sone\ssuch\sdelta\sand\severy\slater\sExpand\sof\sthat\srow\n\s\s\srepeats\sthe\sattempt.\sThe\sinitial\scapacity\sis\snow\sa\ssmall\sfixed\sbound;\n\s\s\sappend\sgrows\sit\snormally\sfor\slegitimately\slarge\scontent\sinstead\sof\n\s\s\strusting\sthe\sheader's\sown\sclaim\sabout\sitself.\n\n2.\sstoreReceivedFile\svalidated\sthe\starget\sUUID's\shex-ness\s(hash.IsValidHash)\n\s\s\sbut\snot\sthe\sdelta\ssource's.\sThe\sblob\stable's\sCHECK\sconstraint\sonly\n\s\s\sbounds\suuid\slength,\snot\shex-ness,\sso\sa\snon-hex\sstring\sof\svalid\slength\n\s\s\spassed\sstraight\sthrough\sto\sblob.StorePhantom\sand\sbecame\sa\spermanent,\n\s\s\sunfillable\srow\s--\sone\sthe\spull\spath's\sloadDBPhantoms\swould\sthen\n\s\s\sre-request\severy\ssync\sround,\sforever.\sdeltaSrc\snow\sgets\sthe\ssame\scheck\n\s\s\sas\sthe\starget\suuid,\sat\sthe\ssame\splace.\n\nAlso\sdeleted\sa\sstray\sdoc-comment\sline\sleft\sover\sfrom\san\searlier\srefactor.\n\nRegression\stests\sfor\sboth,\sRED-verified\sagainst\sreverted\scode\sbefore\nbeing\sfixed:\sthe\sallocation\stest\shad\sto\sbe\scorrected\smid-way\sthrough\s--\ndelta\sheaders\sencode\stheir\sinteger\sin\sFossil's\sown\sbase-64\salphabet,\snot\ndecimal,\sso\san\sinitial\sfmt.Sprintf("%d",\s...)\sfixture\sparsed\sas\sa\ndifferent\s(still\slarge\sbut\sdifferently-bounded)\svalue\sand\spassed\nvacuously;\sappendInt\sis\sthe\sreal\sencoder\sand\sis\sused\sdirectly\snow,\swith\sa\nround-trip\ssanity\scheck\sagainst\sOutputSize\sguarding\sthe\sfixture\sitself.
D 2026-07-19T18:28:45
F .githooks/pre-commit ce134a33b0e8b1a0017110de2ef0553e052378e048b461102282edd72bea5fb9 x
F .github/RELEASE_TEMPLATE.md 8732d1e0c367cefb3a1e0ac8fbdf191f2816fc3469d4680dfdf14eac2dec9a1d w
F .github/workflows/release.yml b651c1197277c56316e08ec92fd16112b35aa94a2aeabe2b58a3011475b968da w
F .github/workflows/test.yml b3b131c5441682d96e0cd30861ec58fc716f3b9e1722c7cd25c1ed110fef6e80 w
F .gitignore bc81256c11f6f6390eb365029ca72b000c5bd5be345d294bdd0a7a69d698d4e3 w
F CHANGELOG.md f384583fd684ac83626fe6740b2706bb8336ad3416fa0c001f70c5cb45fa233c w
F CONTRIBUTING.md 357da160ac28784199ba7bbe59b4a15333818edb56ffabb5d057da36588ebabd w
F LICENSE d967ce740201ba31025b108fe9b0a21ceec2f6570153814f3446901d05ff0dbc w
F Makefile f531d9a1976fd760d502faf2e8c19b6dbc014ed49eea3ec35a96b539eda1ac37 w
F README.md 43b4d1867b49a5f854d4fe235944b35e8c7c098cd3eae3ef0b359f420ae74103 w
F assets/logo.png 6742c6519f88a82f8861a8151eba4e08f7e4e66a496465014a5bb728811542f3 w
F checkout.go 63837f1f6061a65c89a3d120096b0187ea9ff2ff7798ec90ad540919aebbe3ce w
F checkout_test.go 36d3cae47028e0718468ef412bfb65041da4eb020fdf4a7c9b2bfef81e79315c w
F checkout_update_test.go eab514bb61f6e4e56711ae78245762b81b9a38c522d1cc91fedf82e5cc09d3b6 w
F cli/repo.go 739d65a19d90dba31df07280744ece4b11567e265536838e355f18177f0a8b50 w
F cli/repo_add.go 62ac014a3a2fc45e27f3a496a804f9c35a54c978db3fe88d14e6828947075a1f w
F cli/repo_annotate.go 837ad520aa294a047ea0d1adf5ef54150b7707ad948db0818fd89cf72524c552 w
F cli/repo_bisect.go 343e4afe01f9e36a1a321256e4f66399e50510ed46b690de12d0a3e3c381137e w
F cli/repo_branch.go d3479393bb477abd1792418a7cf23d4660db4bfd585fc77e2b5ff3b00041ead9 w
F cli/repo_cat.go a9cb373d044d58538241ff340302598ab429ffcdf378dcc1ea6bfa79e094d51f w
F cli/repo_ci.go 071e8151afb681c57600da2a38859707f0a2d6f506fa80fec41f5644dd620755 w
F cli/repo_clone.go 29cdd2e744e81e574a177f954b00f28bbd48bd4175dbad264783b2bbe10a1bf5 w
F cli/repo_co.go c023f29ec9423f56c1ee46f00db83adcc02aa93e080ab51ff72427282c2dbeb2 w
F cli/repo_config.go d23ea737bfe951b12c73666e51876b2a378ce33c90a27198610e0d0aba50eb74 w
F cli/repo_conflicts.go a174d9ffd91120662c7ebc876f02d9717a1e8179b46474d7a4be0efb70d2f109 w
F cli/repo_delta.go 20f5a211e98895b472cea2b1b3585889b5f7283fd0466422ccebdc82fe2a05f2 w
F cli/repo_diff.go 941f62756321b259bb2592791b0a2df8ead81b259ce913b4518fcb2f0b24cd77 w
F cli/repo_extract.go d9e52f90187030fb0be177a7893416446046b903e4381deedf9deeac3b27d916 w
F cli/repo_hash.go 5d319b5458793a901ca3a641eb7b8db42e973b3ab7746d8081c50960ffeaa0ce w
F cli/repo_info.go 486f59013b564f79c7977acf5728af170c04fb0f52dfb5fdc461d5db3faff09c w
F cli/repo_invite.go 9e7fa0f6d7ee501c950d964e3f4954dc03f8ea71ee5f8362022588bd4c349052 w
F cli/repo_ls.go 6f57d45721dadd48b5ce35deb2192a87c5b4c2584091e258921eedfc26c87ed4 w
F cli/repo_merge.go 3271511a9544f2664b40d2e69ef2b3d746fd96afe2fdbb3f78b94b8b190d8a31 w
F cli/repo_merge_resolve.go 5a15271fd422bf4d3ab33b1e5a33e0cd670a4aa91291a282c6e9de9c966ae854 w
F cli/repo_new.go 4acffbcbc4c2b9f23b816c72b2ee0c528ff12ed8a7c3f4cc2ff7be2100c4830e w
F cli/repo_open.go 510bfed1fab03fc40bca575c5c086f97217e3686ea9424269623d4db482d6702 w
F cli/repo_query.go 16d553d1040d17b5a0d82f936ae59ca95c8859231311a9297b4386b0586930f3 w
F cli/repo_rename.go f275ff6c93ce380ed6c1e3cad2b9eb5a48ec8695c06b8ef1373788593961a046 w
F cli/repo_resolve.go 3259d2e30f889b9c45e007fd8619d9f30e9bb54e845ae0a0b9e146776bd5d3fa w
F cli/repo_revert.go 5e1530b5b9d960c17b0894f5f00217b75b451571e0e528a730f101e4e1f715ff w
F cli/repo_rm.go a8b12a6d533c2f670d2ec73d51a9ca505ec1314d4d7609b3d5edff1721f25fa6 w
F cli/repo_schema.go 4565288636dc8f9a355f31b0700cb5d38a916944a29f169fa20febacca871ae9 w
F cli/repo_stash.go d6d9bc90338180edd7c4df89898f464cbf8a574322ac8645dc19cf8b717607a9 w
F cli/repo_status.go 6d3fdb3d467b0794508c8f93c3031c07c9e5b45b66dacbcb56b834b64de7c82b w
F cli/repo_tag.go f551674ba5cd8e6a9bd48d71e7592e528ca72689cff22be9145f80ad0f549646 w
F cli/repo_timeline.go 9c4052baf9eca1aecb4d98ef6f8ac4480386231cbc9245faaa495e75a93df939 w
F cli/repo_undo.go 3be586f6b329663982e714d9e24d898c2b3f70a33020013b89ef4078ff2683e5 w
F cli/repo_user.go ed498afdf4127acc4e3a4182e379bdad869612d7a8ceec3b01d21bab02ea84e9 w
F cli/repo_uv.go 583d0d28111093f00d0c1c189c7114bcdba2e30ec7b19a3c17a2b63406367d99 w
F cli/repo_verify.go ee5e7ed1f92447c9029f632d04403a037850320061b25d6f527ea4a0ef533bea w
F cli/repo_wiki.go 1a0d81a9ebe9944ef870c6214723299f6aceffd921a9b9f5722e8c8f48f3e349 w
F cli/shared.go 828f715872d0333745cb0a71bc5c54b9586d6d23781af66c00e02bcd736c6fb6 w
F cli/shared_test.go a810935355f2c4143ca846d65545788acc4cec2dbfeefff188b0ebc9f15c6aad w
F cmd/libfossil/main.go 3d5e958eb2cf4649ee67346a42da60171f06fdfebf25bddabe4669dce7fce295 w
F db/checkpoint_test.go 59dc3adc3404189216b255be53e6d548264ded4d5a0d385203108e5ae591cd18 w
F db/config.go f4bccb5a5b4c997df30f5d88c9fc3cec2903955a71b3cc78f209b20889a67ea9 w
F db/config_default.go b75fe2adb424dff71e063a3a54dec54ed3bba22e75f11e9f4e7500664ee75598 w
F db/config_wasm.go 41fc170a2d1f0283355d83640217db708ca8f7e4d8ba18a8b91db95ed79ff9b8 w
F db/db.go a3cd654b4b5c7e21dba2c4fabd85bbe45f0397d86ce5bc219cbbfcc8d1fd29a8 w
F db/db_test.go 6416c0f289c1a7f6aaad82b61d4d5da52ac1c62f16d935c66b85384d54fe4851 w
F db/doc.go 693ccc535c5796a4c1fc4001d6fbb23f30690647f694a6e8b816df1ab962d074 w
F db/driver/modernc/go.mod 29dc10a0d231ffacd6ee941ba6d72dfd123b6d957425bce177fde167f6394e6f w
F db/driver/modernc/go.sum a36002d6878503f3024971b2c2e5f2c2f54d2268a0dc5e04504f0abd25b5e425 w
F db/driver/modernc/modernc.go 4e57b0e3e9327e161d0b932efa97b91ab9fec199d2581385c52a425aa98250de w
F db/driver/modernc/modernc_test.go 44ce1c37c1bbca3ca84cecd90318133e8ae1a4ee4c49a22d0f86a6d0f2ec62da w
F db/driver/ncruces/go.mod 48326e2b053ad0d9057d5e8eca50860ad82c648bb601d5344d5069bac0378a47 w
F db/driver/ncruces/go.sum 4971ca697b8b0705153a4952987bd47fa1ee118ad5aa30ae8bff9be88debf90b w
F db/driver/ncruces/ncruces.go d2fea1686496618d3b793352f7ca98e950011eb37f00cf2ac91e205f5de8a2aa w
F db/driver/ncruces/ncruces_js.go 3d0dbd75c9b599e49826c997abfea7a08148b1174b14c22cc75588a3121c320a w
F db/driver/ncruces/ncruces_test.go cd23760fe6584df2cd779f81eb22333e7f0c2ab4c4882e3a6fe5e2979ac9f469 w
F db/querier.go 51ef51c04404ba191c9778aa9fb28d779cf9d9a0c54f23626825e92d72ca827c w
F db/register.go 2ee97983aa3fa7a3d592c277efcd4a8af515bad2d1bf88aedb0e4eb91e2b54fd w
F db/scan.go 4a29b35a035f0b7c2b7cd9e4bca9a7919eeeb9ffedd3123a7d890b61a8c3ce04 w
F db/schema.go d75d3ec19fa00ee0ec96ba265addd43610801f81575d46afbc327a01e199873c w
F db/schema_test.go 2c2b7ed8b28907bf71680f2665b11f356b59261fb1fda5a49965889ec6c6700e w
F docs/site/content/_index.md dffc2080d8c8cee259d3f72d11262521e9378f07b3852db21ad008ada60ebd04 w
F docs/site/content/docs/_index.md 2956787a9e30e5b9191bfad9c03926aa165ad1adbb3c734060c6c8b5c8f69455 w
F docs/site/content/docs/architecture.md f3999483bd1384101171cecd33ed45bf6ac136407cdc8b3c7f137418dc9c6e70 w
F docs/site/content/docs/extension-points.md 2e24ea270d9de5776d601bf6b832cf9daefdfa8fb9ac3c50949125858da85204 w
F docs/site/content/docs/migration-from-fossil.md 7a513bd080009fc198fd1f9fd8ff1d746c759e72d9584c7725ac3f45fbc2a3d7 w
F docs/site/content/docs/production.md ce27694f4f53f025d4118b6c536d1d80c029d0930dba8c3585234b404d7f29cf w
F docs/site/content/docs/quickstart.md baf7e1dbdfd4fc7dba58422c36c71f0c938a01e6cb094c4aecbc3e831d397a07 w
F docs/site/content/docs/reference/_index.md 5502a4e209de4ac27b2768a7cb794d5d98c1b4ca643fa327ddb7e6f41c5db3e6 w
F docs/site/content/docs/reference/sdk/_index.md 8f20bd1bccacaa0a492a793a8bce2b90cc0ab63cd09585e3db5bf7669171d235 w
F docs/site/content/docs/reference/sdk/cli/api.md d212ad07742a667363eff42701bc03c19048e9f6112047970487111fc8bd495c w
F docs/site/content/docs/reference/sdk/db/api.md 3824fba956019dbf5297c119273b9d1b10a48789bc2c8b85680d86f8bfd5addf w
F docs/site/content/docs/reference/sdk/db/driver/modernc/_index.md 70c0129fcf3556d41a9d9302daa1d6b3ebdc072896125b2b7989cba2deeeffe1 w
F docs/site/content/docs/reference/sdk/db/driver/ncruces/_index.md f4e0bad8b978da0601bf72cee1043a65b5a595046a23df6e0f405a32dbebd230 w
F docs/site/content/docs/reference/sdk/dst/api.md c4e4bcdaaa77c1d41ac92c32a0a93f814148219f8303ce9b8b32c7eb22efacc2 w
F docs/site/content/docs/reference/sdk/libfossil/api.md 67af4f947c9171c64f8e9a53ebc6b4545ce81b435b8e74d91371a9e6ad2ee82e w
F docs/site/content/docs/reference/sdk/observer/otel/api.md d1866dad3ed13031423bcc969a694f887e4494c29616295fc82df55ec7b86d89 w
F docs/site/content/docs/testing.md 10c1b397df20e524af118fa08b09779e0d259587f53a50d013bc3baefc30724d w
F docs/site/content/examples/_index.md 37f41cda9387b9e788212fbff2525842961420eb253e692362a25afd0ca2a525 w
F docs/site/go.mod 7707c86c97262d9af31458e1d27e3bf68860fcf8acac762569bacf14dda4e7be w
F docs/site/go.sum 4572deee1c4c7304d39b73c3317685665590bbbb66a064d9dce58a52606fc15f w
F docs/site/hugo.yaml 47a8f04ce9371f63f4ecfbece11cf5dbd5e003a7d466bab1dedbe429f91f4fc3 w
F docs/site/layouts/_partials/navbar-title.html 26ad6fb61226a941ec6fc41723a0e4e797f2b1fdb8469299923f5f31204c35ac w
F docs/site/layouts/index.html 31315f919ccae62bb3e1befa495daf7a384f24278e7546e60c7b38d4d041c6f6 w
F docs/superpowers/plans/2026-04-26-docs-site-cf-deploy.md 68de04e4745460c05e0416942148d1a176a50b21eb761cc8772e63cf0392aff8 w
F docs/superpowers/plans/2026-04-30-cross-repo-release-automation.md 66883fb764db705482ec6ed240dd3c3558a3df6455fe5cb9c48df8966fd57504 w
F docs/superpowers/specs/2026-04-25-docs-site-cf-deploy-design.md 0d7a4266955ed729d9cb262dd58e43eee6e95e4b5c0d7cec7175a28263f04ddf w
F docs/superpowers/specs/2026-04-30-cross-repo-release-automation-design.md 560e82af42c7b8021b57e6a7d8c3b4f091eda480b36d89b218fc58147bd0a0a4 w
F dst/clone_test.go fb96e964cbfcbf456332bfc5716d0125d7d986f83a1cd52b55d27ba5324e74b0 w
F dst/crosslink_completeness_test.go 9804764395b619cea76286c718e149f67537a06b7e4d6823cd4cfe30e8602e1f w
F dst/e2e_test.go 2650345bbbe8c00a6f070de84d1f3b8e0ad3943959b0aeb125417bf7b1020aa4 w
F dst/event.go bf634507299f3e9ca68f7843245d255d81d41678ec8d4dcefe4c16e71b786675 w
F dst/invariants.go 9de56c0ce016159d1bd8d289a8b1316c8a28b50652114952491fa638e800c876 w
F dst/invariants_test.go 4cc751b93b7c5c38ab7fe8e1a2540ca11786d7715061e69ecc1351d7a2ef523b w
F dst/mock_fossil.go 27d9502fbd2764d84b062ff3d5b0407ac9396c06038f8373e8eb3467b179399a w
F dst/mock_fossil_test.go f1867c6629318097d4e117fd850581a5ce8c2d89d20ab24a9e303c634e9d0576 w
F dst/network.go 3ec5f29ee991c845c979d17770e9416543b43b2838497949fddc66d0fc3c905d w
F dst/node.go ddbfbe9a535a0fae55947caf73a65898a56b3111338bd142694bf50431279391 w
F dst/peer_network.go 7ae0de40388efdc5c1f2c9b0ea5e65f54d8ac5b65e18c48ed1be802d2bdc8490 w
F dst/scenario_test.go 836c1bf6b760bf9b342a669712fa8a37cbcfdca3d483702f9395225a7b8648dd w
F dst/shun_private_test.go 704f7aada4066cfbb33d7f7833d037ed3bb5b1219288a39e04b8b86fda04d33e w
F dst/simulator.go 15e4e6b2c8f66d89551db4f17ebe057be9da2ced2392d6f0940b66dda1cc2631 w
F dst/simulator_test.go a3e6bc7b577fc937967a60f5e014a1c7f694b451061a7dd7d8035ab501938162 w
F dst/tablesync_test.go c7497b3b48a68e9ae38fec8791c4e3cbc0e3cc4ab40be17a3661c5281defa844 w
F dst/tag_branch_test.go 06ec30e07d2039d4fa0b1b34aef58dd086b5bc729905b23f7da8f11aeeddf1f6 w
F errors.go 08302b6fef3b1aa0ff242e891ffb94439fa8184fbe43b58f42dd664a3ca7bc2d w
F errors_test.go 4e1346a43f0be34d6e2de643319306453bddc58ef8943a7e113a61874b22904f w
F examples/embed-repo-api/README.md e643ad263a8a1649e8c86e029e180a0fd0f1624f1e2665508a5a99f5649b6bcd w
F examples/embed-repo-api/main.go 329d76ab77a00f82d4fcba461ba7858b1471de6bb9e47bb94cda380460d4035a w
F examples/wasm/README.md 13210050c160b6295ec4d9694ac8f83a4f5e0fb2f31439738d1957054472fd4a w
F examples/wasm/main.go f0e9ce09bc0317d4b654cc4b5933f2a88f87c5c992d3403e32002f60a1ac78da w
F fossil.go df78caff2219d1bfc026342b5e7b154e2d2b983904200104d06c2c75dd48857e w
F fossil_test.go 9c0b09dc039c1dddf44984995b3e65f8d4170aa336071d097291cc19c11906ee w
F go.mod 88957707b16cfda11dc03a6d4c29f98896ec8850be2bfaaa2b13b5884054a0ca w
F go.sum 4a3a92b9ce620fe92900ecc4e2a3d72c5ced5a54ae494640fa6b794807af527a w
F go.work 8b3d9a07dbf8042509ed2f1db6cff10fb97a0cb73e3fb0db054cac033c095236 w
F go.work.sum 0884400df2af51c2166a06aa83d858f1935d299d00bea0502b77387930fc621d w
F integration_cli_test.go 4ae9883f26c6da3043e1fc8efdd2fc8780c4f2b94b8c0e538d755d7b3495e731 w
F integration_test.go 1efde18e8a0c451d3e03902d17361b2796c24395bcd9086f6948c87e2e2e646b w
F internal/annotate/annotate.go e8e1ff1b8d87e1fb96d4c6ddd010b3c7a62415655d4ca6a9b7ae46d16852cd51 w
F internal/annotate/annotate_test.go 2d511c81ee58a673c25bf87b9542b0d03e458fdb04d1061ef619eed50f3b1f74 w
F internal/auth/auth.go 043888f5dc60e9420a3bf94116c86e756bd6897d46bfa53cd46c0b36d7af49f3 w
F internal/auth/auth_test.go f137d59e7b01b89ebd79f5ca2e11249307447783e270e7c1b9668c9d2da0b3d3 w
F internal/auth/invite.go 365921b3da8a7f7fd2b50d58dfe21168a98e57376ea36681aa2fff51b3c17e59 w
F internal/auth/invite_test.go b664afdff63359eaac4b5b33be833fd774247fafb5fb5931434d9e69bd35fc55 w
F internal/auth/user.go 5560f880247954b9ae766278cfe5913abd0dbf906a21c932ac1213f57097f1d9 w
F internal/auth/user_test.go c2c39d9442435582fcf5b7f2123742385b11889b3f77bbee54c597afeed0b37a w
F internal/auth/verify.go 67c358d62bed400d76c87665b6e6a18131a5d2faddb35664554ee155d76a89ca w
F internal/auth/verify_test.go 220607b5ac7e6c62036465f2f7b4359d9447ec047e0bac5b3fa7ac39afce920d w
F internal/bisect/bisect.go ea65da5cdd9e94a9562bf6d57020444984ed8089916138db7123de8a01364310 w
F internal/bisect/bisect_test.go 87875cd9d7dc945a03f98f16fa0c081031d77bd24f4d80b09f54618c04673226 w
F internal/blob/assert_test.go 88e527088574d435671eb4ecef3d0c3afe802e20bc2a535a801ef3a52e8caf34 w
F internal/blob/blob.go 460fbf6983e9f57a3bd0552e4771e39cdbfbbd92eec36258d9fca4beae42bb79 w
F internal/blob/blob_test.go 5e64641bb3d69ee976b12ff6cc8ff25a70c986e93a4a8f8be6e4eb076f10fe02 w
F internal/blob/compress.go dc7b90e535b7654ac49fb41f71291ca647c8898520bc41440454e1024c56d53b w
F internal/blob/doc.go 7b5ab28603e1e3f03a62cf15a3432ed35bdef884dfba7070e637d5a212fff5a8 w
F internal/branch/branch.go dd564eabf7817fda04930d1fa612b1845c40097a628d5253befc1574c438032f w
F internal/branch/branch_test.go bd164dee5ec5a9ef93707800e139ccf7d29e9f067d63597b93305f76f98a3aa4 w
F internal/checkout/checkin.go 124395bb4b16dc0069626d109859ffef5d9862ffd6b2723c77637fe0780ee89c w
F internal/checkout/checkin_test.go 26838278424c9fc7376e5af16f1a4090f1b91d7be91a4c0468f9b02205fb8983 w
F internal/checkout/checkout.go 1527ff80ad65e977605b29537feacc20279b93ecd57a180f26359ebc6b5b7e71 w
F internal/checkout/checkout_test.go 3d3e0e33656440376001d2640f75d76772056c661fb916cab005cbdefe4e24fc w
F internal/checkout/executable_test.go 00120a05e47b1eb81203395f25ce3b11df2fa41debab1f4e4aabc4e8b587081c w
F internal/checkout/extract.go a79ddf8bb08a45adba15dbfeaf826a04c29114fb1ec47365792b7564ac035b82 w
F internal/checkout/extract_test.go f2e89ece2347ba89e001b9be009d4e96995255c9a95547c50907ba2af0f5bc89 w
F internal/checkout/fork.go cd32cce1d175c4d21219e513c6590de89a890495c65ade506080b2e20b0898be w
F internal/checkout/fork_test.go 89a5929981e159cd4ae7766ccdcc8e8b334fd3468a73dba19f40a74620a638f9 w
F internal/checkout/helpers_test.go abc64d14cea9453f28592792cf129533485934cdd8d8e88708f504fd7ce2ff19 w
F internal/checkout/manage.go 266a2a80c5343d2c7597498787c8347570c84a26b61d9ad366c447f9cf4c4935 w
F internal/checkout/manage_test.go ed6b5044b0c6ec13dac92f168d20ec7d33589605da5da363cb7a38fc894526fb w
F internal/checkout/observer.go 6880f6507cd931ebd2317ff60311a725d52270b557c182b0a4a05b835e574d9a w
F internal/checkout/observer_test.go 2466300cb07dd6adced781ad6c059572250f77b88002d16d308e9da53de86f19 w
F internal/checkout/rename.go f1256c1fd85b69d32ce5cbb4ce8df7793e08cb735cfd2f8fd05d9a7c0d02f8bf w
F internal/checkout/rename_test.go ead80855efe9cd15cfa8c0038f9ebabf79171b43084c8dc613551095b0cfdb77 w
F internal/checkout/revert.go 6ee0f93d732ccd5cb1c285f0382e4d8f7f8fa5846034ff5bdb58365f6fad8380 w
F internal/checkout/revert_test.go 387ad7b249f694e4b0a5c0f55f67ab68a2f1808a45c004d9014d6683a075f092 w
F internal/checkout/schema.go c8056525affb72ab0df263120a969169206472c40967401d454ecc28c58cc60d w
F internal/checkout/schema_test.go 919b97436fefe2120004933a2747dc7dcc013dceadfc50f76e766ba729c4f70f w
F internal/checkout/status.go a40d92d14f465067c13e70ee279d7cd4f009bd5ad2115edc64bfba06c8cacf5f w
F internal/checkout/status_test.go 3526ec2a6c90c5fe90ba4f2fc6656419f09499088288bb37383b90e7dc3e7984 w
F internal/checkout/types.go 719e055748cbacaf22f4740c05186e0bde612ede94ba82aed446765db5998f87 w
F internal/checkout/update.go 3a696242ac34b643c6a8964bf60f085bc7680df35116ca2977e94d20b71de28c w
F internal/checkout/update_test.go 98891ac33dc190678e096fd93d0b444f7fcbdd41d87f572c8d32c9e5795901d9 w
F internal/checkout/util.go b295ade97080c206713c7ae8b38433dd4e8251b91c72a80299430e012b416d38 w
F internal/checkout/util_test.go f7c7a34540730c428dd65b51c52808c7301902bd63d6f54b4ddc2f95c9196edb w
F internal/checkout/vfile.go c84068b5bec146a234684215d495cbf84a02838399712ec12e5775a2d6863771 w
F internal/checkout/vfile_test.go 3cf35c6c4dc995cc84de73e8af62aa4335a47ac702eb56278c7d83dc242e3e31 w
F internal/content/assert_test.go 03f9dedb5eb91524f9001de16c4b78ef03ced75683dbbd42a0a1eb29631e7038 w
F internal/content/available.go 60dd2f78ae6210d3720face7e352954ac26c08cf4ea11f593bd490af110d55e0 w
F internal/content/available_test.go 1b6f34cb997652ce93fe134b35f0f14ebfe75447bf4ba335e1e125bfdabc955d w
F internal/content/cache.go b6c8cf703b013f6deec17e275eaca4e051473debfbea9f9bd80d5bf28ab81214 w
F internal/content/cache_test.go f252b26abcb418feb5a542c35fa9553093811f63d15a4e41485bf8a014680278 w
F internal/content/cluster.go 1087598118acb5f77cff5a34d91b4881cf6e6880e4eca2f9044cfadcd4ce6986 w
F internal/content/cluster_test.go e9a809f7b57b7e91820c13164f3566efcbb4b26b8bcb7b6496d137124cd8500d w
F internal/content/content.go c897f61dbe48cb6d592849fa4f5c19d2981db2045f2a0b3ed78f8d4ab15ecbeb w
F internal/content/content_test.go f8da2bd0e263022be13abf41c65477dd495f5be55d733e12486c567a9c63c8e1 w
F internal/content/doc.go d4e65971ef0661ebbd6fac54854309f1c3bddde01642e6a9ec2fe214c8e1a1d7 w
F internal/content/private.go 904122f7502fab57b3909de837488b29eddc4427de1d83d44eb65201747d630f w
F internal/content/private_test.go ae796c652852db45a6f5ccd6cd52a856ee72bc0b1a58c8134f8056c38c40e2ef w
F internal/deck/assert_test.go 01cf720efe83a18194b0afaeffffa66067db35fe720ba4211888c3022852256a w
F internal/deck/deck.go fc064f82d218b6276530412d51cb99d767667c94b5ba2c20ece365f079002fe4 w
F internal/deck/deck_test.go 541202e06f51d9ddd6049b4796df8f9e8845bd97982176d0eda735595c1793cb w
F internal/deck/encode.go 6e39b68aea29c5ecd315f1eff21de67b73acc17826a3863cce041b7ed0dcbfac w
F internal/deck/marshal.go f4abe35e55403a111063d2bb5778f6293b104d15bacbdd066bac3eac4b7abd2d w
F internal/deck/parse.go 9c60d424e73af5d904d3cbf85b6086614cf2b1edfe1fefc768b60f504e499600 w
F internal/deck/rcard.go a7f9c1addcae6fd83474de2c971897eba5a787f4788973537deb13813d087268 w
F internal/deck/zcard.go 04180a498ae67552819c8b933ae4555c202f7083ecfb79f58d4e05380943c8cb w
F internal/delta/assert_test.go cf31f1117d52d13fd280f117b0f7a74245a3a07f602fa2763c376f2643b5a501 w
F internal/delta/delta.go f39ff7515c3a0de525d463fe6c62ed8b4672137325fcb529e85667d0e7656b46 w
F internal/delta/delta_test.go 0a0d8ac5367a0827eb09109e1a01f7a8ffe1e1499841b46695514ef752595c33 w
F internal/delta/example_test.go e9e5d6f067c5f93c0e06825f99894e0a32e78f0d51ebefd65efd882e7ab495c5 w
F internal/delta/fossil_compat_test.go 9ffee783a28e06230ab780212e4ac078320d3ef97e269c8b16cf357280de844d w
F internal/diff/diff.go baa33325fd804d701128aa15220175e48d5dbf841d7de542fb4d5481b6de37f8 w
F internal/diff/diff_fuzz_test.go 9e573bd1faf7d9e85d530285889bb23ae365fe274d420790d387679c8bbd2488 w
F internal/diff/diff_test.go f26103eca4e3de71760a39653173b36f4ccc9db882581392a0e8d689dab5c692 w
F internal/fsltype/fsltype.go 6dd741dd4d81106042e6f8055992a262c374c8b369374c69c4b9b01424380057 w
F internal/hash/assert_test.go f1fc842bc553b641a0fb5ca2e6df94d4a156b8d1f6b5b28f0e2c78808e3ac08f w
F internal/hash/example_test.go 30bc4b10018b0e9f9875d2be9b66efaf757ed4fd135a57189e994a3de1cf4f12 w
F internal/hash/hash.go adde80f5613398e8368a081c4b782c2314b48eed0e8cd16562354e6983fdee20 w
F internal/hash/hash_test.go 26bfc26d2a0972b080b8e2a78480cf134122aca0b3183a3979bbd7bcb6641268 w
F internal/manifest/bounds_test.go 253e0e0672a14c46e459c3db0a4131740d2edc3b16e485fc20320f560f0cb991 w
F internal/manifest/crosslink.go 2c65ca3032b6ff9cbfc78973f6f829fbe0bb5e3bb9e2c7d87c16355d1a6006c2 w
F internal/manifest/crosslink_defer_test.go c351af8df63dfa421781cebecdc89022ac2e054e7c240bf553fa7c74675a948b w
F internal/manifest/crosslink_test.go d9f54add3520fe33f3d23deba5ccbeacf09da6ce204b9b0a3e20f373a54893d6 w
F internal/manifest/dephantomize.go 77dbfc474a52fbda2d3551b05c34dbd43d74535fbbe9f3143db0c270a287f8d6 w
F internal/manifest/dephantomize_test.go 1e3b20746894cd591b3c02bf15befe7627647639f8b7f7a4a39e4ce7be4fffee w
F internal/manifest/files.go 14124be0092edea45928971b6226179aa4e57d109f64a5b4a750c93e8dc006b7 w
F internal/manifest/finfo.go fb050861cf354227dd53ced1f0b86212ef2a73c283739588f74b308fd86c5660 w
F internal/manifest/finfo_test.go 793964b48d263a3a5b0d14449e44becdb8209f5827a8b10802f199e8f2a672c9 w
F internal/manifest/log.go d96087f10aacef0e0637ea963f97ff0f5c8444a16184db47aa7a88e1d0bf45ba w
F internal/manifest/manifest.go 10d5a59d6869d54fb9af757545e36a09e54d5c03ffc48c7a706542a88f058482 w
F internal/manifest/manifest_test.go dd72529ae3e372e322e92e17fd13f58aa7c59405b0116f3d950b68d740c46d0d w
F internal/manifest/mlink.go 7e7ab061a1a567a196c28d03fd6cfdfab5230b7dde2f138c59567d10002e33f7 w
F internal/manifest/mlink_test.go f72fb87fc9873869f42d23ea158b3ac0d2507f7435cc8a944c29c17e7c12cc6b w
F internal/manifest/timeline.go 388b339a1a5b30506d3a52fb7f5a39fb2872abb8e2783398ff1eb6215fa20494 w
F internal/manifest/timeline_test.go 693d67f73add68f64a76df77fe7519b9bef42857b2eec1d6709490a4af0cbf48 w
F internal/merge/ancestor.go b06ad25c684a1737b79e353a1b71708a4da6a773cc718e95d9f41c810a2383de w
F internal/merge/binary.go d11808769e1dce87c77aff56c0d1d700137574f809f69b3667f6519f215ea711 w
F internal/merge/detect.go fcb4bd6886fb02e8f506dc1151b763d8713509bf1b6e59176c8406658d31986e w
F internal/merge/doc.go 42df37cabd38d36af29e4c86be1c96f794988e6cf31a86bb976bbed02face5ee w
F internal/merge/example_test.go 979a4eb47eb24cad6702d185f7f5a3d9fd40ffd3a4d02b6d911ed2e9af5f48be w
F internal/merge/fork.go c02ecbea8698a7df2d0a509dfbe14451fca83f387bd7e7d7b64a59756805110b w
F internal/merge/lastwriter.go c9c1e433b40e7c8afd86292c9afd21513c19dd1abb757f4d84e1d08b98d9e7ac w
F internal/merge/merge_test.go c32cd79a0b3f4babae33720726a593fd10b01ce277a301478f26db9723cbfcea w
F internal/merge/resolve.go 12dc9dca8f6666722cbde17f0511955881fd669d9e9383f1b3a38ea5d75c962c w
F internal/merge/strategy.go 05215b0c50e46be400e15c661a92b5ec8fb7f4035b227ac5d4c01fbdcbc486fc w
F internal/merge/threeway.go 7dd2f3fb4e3b93463feff3865d873160379291717a4025aa860c9a059a276d36 w
F internal/merge/threeway_test.go 8044a7e9384860f12d96f123cc055bf56e1f2b8fa24e731433dbbe35351f0043 w
F internal/path/path.go 34ce3811874556ff7a23df99e44e3a7b02b753d1bb1172bd62889211ab1650a5 w
F internal/path/path_test.go f435bd21b38b16f58e3ebc9bd15c54bae04a9336c8fd01d6325c3dced38c293c w
F internal/repo/doc.go 108b1f68f19fb95e3b565a9273625ebe1529ddbe7f7bd92027a1d6a198658442 w
F internal/repo/repo.go 2e707db1e84538010f72e513ae1d344f924f9ad08d60ea991b433c3f3477e2f5 w
F internal/repo/repo_test.go c84225e2e40eded5db4963fe8e9406fbba512ff85e654db712bdcd230805bfe4 w
F internal/repo/stat_default.go 40de143f088783a61eaebce2352030752672f14daa1a47569f6622a6dfe6f83e w
F internal/repo/stat_js.go 78cdd7a120f16a9927d7666b9935785293276625b77f91b6e929d15296e7d072 w
F internal/repo/tablesync.go b3c2e3581c8df2b734807049749554945ec8390189f7cd015460deb836f4f5b2 w
F internal/repo/tablesync_test.go 27ed67725637281423ec80207383005757aebab7cc7e023637c44e09bc724e21 w
F internal/search/index.go 4590f2f5c84740c1b53fe4f802552352ae4aa1258e820dd7394052bb2b1763c9 w
F internal/search/query.go 8568cd4049db9b2d7213c593cefd8350e8204d2ddb34241c5d9c23ce15bfcdbc w
F internal/search/search.go 099776002c6c6d29d8681a388d492bbb1c09d7e5cc322faab880eb09191297aa w
F internal/search/search_test.go 5dfec0e963c7ea9e45b52d4d8276484f9b2bb8cd934b88ea7a21143429073bea w
F internal/search/trunk.go 8a828cb6103dee875fca2acf3ff6fee46035c790f7eec3e943b3f722c7518e53 w
F internal/shun/purge.go e218dfe5b55b8b59c6eed735f2d89b511a0295c255c1be8253050a1d0eef856a w
F internal/shun/shun.go eef8d64c743e7bb2595002fc4e56e903c4e1a7c791979fa8d05b1fb00b31e1c8 w
F internal/shun/shun_test.go 2ebe5a003fb80dbfb85c18fd27646860312ad8b22b15aeab50f9672fb05662e3 w
F internal/stash/stash.go 3dc526259fb0c9205e8384910b9ad5fdf5de59e649dc6c74ba665c1174cf9048 w
F internal/stash/stash_test.go b3c81cb0d3673114d953edf9a0860fad264ffddcd6043ae9cb51321eb3c3f382 w
F internal/sync/auth.go 75b38460fcf09012c653cbee856f07c5a7a3062e8db3dd561b7c40b41b3b399a w
F internal/sync/ckin_lock.go fed9a00a552e4537c0c8ddcb7719fd7075f06240a4628c4031cde1e27c38c463 w
F internal/sync/ckin_lock_test.go 6d3ea39da8f059e14961d7ed13690e28b48c88777614cba2efc73f719a611e24 w
F internal/sync/client.go 406569e5d5bd229353a946a6b59bf8aaa8fed54f518cd2a52638758265fa76a3 w
F internal/sync/client_tablesync.go 4fe87f283a46a3fd57941cb484d81ea3b31d1952ec874de1f05e1325440dfbbd w
F internal/sync/client_tablesync_test.go 8f3dfd26668f17520ef1def831ee85bcc288386b2aeab765930232f7538224b6 w
F internal/sync/client_uv_test.go da4715b311cce4a8255c971f2ad684a4dbe8643f1f733b4360902ed32330ab89 w
F internal/sync/clone.go 44e4dcee2496c425d7a50ac422593e4c7cb0fe6337438ba14cc6508d06ffb4b3 w
F internal/sync/clone_test.go 5bbce4877fcd1a666dfacd51ff95a2cae6735c941eb3a3503204d697c2f1b641 w
F internal/sync/cluster_integration_test.go 6a1f62b6f8f47eda15183448206c6df44782385d85e36a3892dd354d6e4f4aac w
F internal/sync/doc.go 1bfe570fa95c6818d00e788d5868ccc98919eeb4e839e125a6158b3873d1f095 w
F internal/sync/handler.go 638419cdb86c1999ba273de67d67233c6b74e055b47901f7a874fbde728a9ef6 w
F internal/sync/handler_crosslink_test.go 7f512544bde6ba52a5007d1647532341c2141ee5e6f7c28effa77678015bf462 w
F internal/sync/handler_tablesync.go e8b1808f24a8d30af5d68f71bcfd68d1353865ddd384af582e813695401760ee w
F internal/sync/handler_tablesync_test.go 615c54ee4b2ae118eba3173c7e3c2d6c0771e7d21db2eb32b943386cb4effb50 w
F internal/sync/handler_test.go c5ef4269021b3d5aea850b57da931396751c729736ea5aa759f224da0c89bbc7 w
F internal/sync/handler_uv.go 537901157b7a35af627b9bf550156f36a6f94cf355145621d9ed346f64a47491 w
F internal/sync/handler_uv_test.go 5fd81e71593dcd6aacd4f9c4c5ab43bcd47a3d8db763bb2010cf7f97cd1af288 w
F internal/sync/integration_test.go 65c6db288aa48febe21175c6b5a3351612d4880db488d7070428e6d18c7301b9 w
F internal/sync/observer.go f14b94f4ce60925b295779fe897b036e085897b4c869011421eaa6c03df8fed8 w
F internal/sync/observer_test.go ab58eb804e7fa8ac81dbf518873dfddd2b6ebcccf90c80ea8ea6f4cb0f920926 w
F internal/sync/private_test.go d5e71ee4db67c7ade2ca48dcd8a763efe5120d113da8408e6080ee0aec35bcc1 w
F internal/sync/serve_http.go e5b9721a8e2b6e7b4271ee990299add9d998621fd55c69cf36e1c58e5c704507 w
F internal/sync/serve_http_test.go 62852489da4a40deb2381995bbf8bab033e8939b989200f3f56b27dd8fac1ee9 w
F internal/sync/session.go 449d484d95ab1d5992de9f6283814d22816b8b9aec811b40729f694e6c41fad2 w
F internal/sync/storereceivedfile_test.go d0b204e6d7c6f1fd5f56e7a2a4d041f8801bcd8c59dd694f774a51325775eb85 w
F internal/sync/stubs.go 3aa8e17d7112ac7d9f7ef8a460f190d871035b446260caad4f6b29034e3afb38 w
F internal/sync/sync_test.go 45282433eae9d93b2c52fae24e0e3deddf291f7d25468c496fba04cd856143b1 w
F internal/sync/transport.go 9658cace791c904a43235fff107d4fed421558dd0e39cfc00e1d7d9fa784b2c4 w
F internal/sync/xdelete.go f0d07e359f07e8007785f50cf47f39e19edb49917431e8ff56681c362237e325 w
F internal/tag/propagate.go 6322131f155037e598908f1199046a08c2b6f222b17044af18698d0733781479 w
F internal/tag/tag.go 400816317a49557b1baef964a1a9368fd56da06daf8a350c611267a7b100d006 w
F internal/tag/tag_test.go 60b0bfd9a8ddc0cbbc9003bacae5e2179c97d08156a4bfbf4a21aa8df95ec678 w
F internal/testdriver/modernc.go 3f5fab78a35aec71a9ecf43616fde7708e77608415f58d890206574607cc6803 w
F internal/testdriver/ncruces.go 4ebbfe1f48ddc92a8e7eaabcce3187edc6ac88c425e832ee12c43a8ab0c7903a w
F internal/undo/undo.go ee2d8a12aee06cc21fe5a059dd2abd736f4266ea2ff35b33cfef2569513115a6 w
F internal/undo/undo_test.go b36aec578818a0027be94adf502aba9a7ae5cda5bb7c1b347f977dcef7a22a78 w
F internal/uv/status.go 585384ea2e1e0b39f21202015245b06a221e88b2d2176e06e4d002bf20559b8d w
F internal/uv/status_test.go 16cbe804eea490a562206261a3944e202b8b78e187508ab31c7f2f6b092a9056 w
F internal/uv/uv.go 5833cfb13ec38500b4337b09c6285e334a8ad3ee990ca1ab402b1335c9597f9a w
F internal/uv/uv_test.go 522bc4c5849554646758269027fea8ce4bb33d0f948dd0da58a47648e0de694c w
F internal/verify/check_blobs.go 058e24341c37bfc73260bf12cefb108facbe970dac5229a945282341106a1150 w
F internal/verify/check_derived.go d3cf7d6355f157349a0e27e027d3bde8a6c95f6ba05fbf5876a49556e3b9797a w
F internal/verify/check_structure.go 3e84c0372f731d8be4964aa226c4cee5b7d2c0c534e1208e75896b1791c1f85f w
F internal/verify/rebuild.go 083c590d36c34b1a01291e799282c48f5a1ef53c89e9f574c9c9a49da371f8da w
F internal/verify/rebuild_leaves.go 9496044142037f4e5db6b9da589625be6b321ff7419dfe0753f6511f8bf1f177 w
F internal/verify/rebuild_manifest.go b835a7bef53881d0bb22149285c50dc1358a5f14aac067cd709f9a39e60b1d80 w
F internal/verify/rebuild_tags.go f5f0ebab1655e90770def744b685ccfa7e92bac3b5d2461a676621af9833a3c2 w
F internal/verify/verify.go 981e99428f063acd7ff47d597a2225f7bf2b9f83cf4166cb11891daeda3c9ccb w
F internal/verify/verify_test.go 4911500307f8a1d05ec76af4223059222aa07b8242b270aec1e4b72703d51a90 w
F internal/xfer/card.go a41d15cdf29424e68cfbb8a33e829126d595bee8311f4aade3f28dbe8a8afea0 w
F internal/xfer/card_tablesync.go fabb29eb54d5bf72280d9e5739845af39501f3f94da505ddd05c4961e52434ef w
F internal/xfer/card_tablesync_test.go 976738f67cef781151fde6f1a6b981c4439467d75b5f528cfe9bb893e3fd6e58 w
F internal/xfer/card_test.go b6ea8f2b45d5ac37f0b46186cc7183763d7d037555309848b85582e52a7e7e31 w
F internal/xfer/codec_test.go 84585569f8f52f2a589ed58b319ffa215b103b79f51dbe224ce164516a22ee27 w
F internal/xfer/decode.go a4f8d4ea9f02845182a9905a3f90bcc8bc8f51f7ddb799976c7894cedaad6194 w
F internal/xfer/encode.go 6219f326ffcb7d63979c4ac6047b2c4c4239ee83d4d4a6d31ba93f3b3018a965 w
F internal/xfer/example_test.go 5051fa33496a5eaf6e6102b442391cb6f280d265eea3e9b1f228a083d5c6a88a w
F internal/xfer/message.go 74a946854dd27b139410545ac5cf3d3be6b6af45bf957f3a4243580ae1e72791 w
F internal/xfer/message_test.go f53f47f581e38698241f825e4848f4be1f683df1a713c0f91bec6052144658be w
F julian.go 3644e82a37176d5db154ca111241bdb2f25e76f343a7a26b243e959a52e59a76 w
F julian_test.go 5ac50dd9942524841975f586d38dd8bcf82c7f0bda3cc43201e2710950268b62 w
F ls_branch_tip_repro_test.go d0abfae48c6df50184aa498c4013a21f3024244fc1571081fd9cdd93869056fa w
F observer.go 43fc547a68bc1ca5b6e742a666e90c6d58dc7aa2e7a90bf28dff7cc54fafb6f3 w
F observer/otel/go.mod 39a99ef4d980f532779a71910473a26660bac8d72983c1b0a97174d7f426ef9b w
F observer/otel/go.sum 91ccc3129d5bc401b484be48398a395ea7749f955f86666bc3b55dc52d440c42 w
F observer/otel/otel.go 38337615dd3b5af4d000f477e3badb6dc0580032d3e58d1ed446f05d6092d020 w
F observer/otel/otel_test.go f31d8187bcd45ca13d2d664d6f543c3baed96f6bf66b94837c07aa1c8f8526b0 w
F observer_test.go 8811bbc50bb75cf382843d02df96f50926d13e8a4fafbe038b6d9183b46a555b w
F repo.go 71c36ed16fc006a66a0f09be62456861cf5c27232f133532ca7684a1427fd49d w
F repo_admin.go c0d1cf6f525832f4c75b5f2770624ee447cd287def3f928fc59487c5823b98d6 w
F repo_checkout.go e2a2bbc86fa8ac8ea152745a31adb0465e06cbfd9e5de08f92690c92edcc7606 w
F repo_checkout_test.go 4b46b1dbcc47e8d5de8852ea3bddf8fa9df64f76280aee54033eb75a30c395e8 w
F repo_extras.go 9879abbdf4a07cef8d4759007f46153947a58f99343dc8bed256dae8a9536fc0 w
F repo_extras_test.go d7de3e8afbfc59bc3ed54d7c72abc1810a1fc7e97a8d37933994787553ae07e8 w
F repo_history.go b25fec4f881488cf9ae449d53c493f50f43bfc86e23af2a677a81507b00ce43f w
F repo_history_test.go d739710c73a3c2c30e9c6259dddc2c6e6f7c9b475366300552b240306cc64c8c w
F repo_ids.go b306110e69c5d1c83033ee3ab012fd0699e1f06f0c5b7e5d9cf1538d68825523 w
F repo_ids_test.go 0b4272f2b87048a914f3493b3f1471e96571005ec0d664f9b01df62d9e2c5e8c w
F repo_merge.go fd565dc1e55a89f3c25b49ac6c826cb5adf5054bfa4748cfbcbba55a1b45348c w
F repo_merge_test.go 86039f09774628f3944a2fd16bdc7291f2ffcbeca43a8e0514ea43cd1197c75a w
F repo_pull.go 3566654c2d28275a29478587a3dd8a273e945c6d1b9b1f2fb882f82fcbdf77d8 w
F repo_pull_test.go bb10cf4188114bf94ea13fcb2d80894184b4cfe237ce8603aae5586f6e95cd2e w
F repo_resolve_test.go 8d3bae06c828bc7f8390520d70c8b7022748df621a2f9e0e114bc90cb1d9b5ef w
F repo_sync.go 4aa0f49ba429632056a89d3832bfbbac6da4eb0f93bc215197985676fb06c5ad w
F repo_timeline_test.go 2c0861bc15e59393fa8b6a0b86965149bfbca2ce5faa5d076b8efe45002cc731 w
F scripts/gen-llms-txt.sh 318fb0437e1087ba1a0fbc04c6e39ba8063f1238836216d81185f9cab5d323f2 x
F scripts/prepend-sdk-frontmatter.sh 0fb9f191ccc1ba6460c5d447f4f3f01edde396e7ddf2178f582f47cf62373b05 x
F scripts/sync-version.sh d747a91302d128ce66f9bc8ec17624a70b0205f5a65641c5b9d3e71b17cfe62f x
F simio/buggify.go b508a447ae1af2e242fb4e425dbccc0891731b210220a913ca6e83c2935e1484 w
F simio/buggify_test.go 1985b98aeb0e055e3e081b5939606c217b7ab35c524b5620dc0a8300ba1d1bb6 w
F simio/clock.go 6a6e8d410cfc5da6102c95d17ea2dadc9008f968c38a1aab07533008e8b484e0 w
F simio/env.go 572df6dd05de503e4add227442f6204b586ef32faf9ed45ff86f632029771def w
F simio/env_test.go c6627e422538bdd49b39d2f608e9d3a83536fb102046394f013a4ab86a1a78dc w
F simio/rand.go 9af404eba1cd668bffdf95a28660b785353605412900359c615864c2bd5a2127 w
F simio/rand_test.go e3a32c8d746fd2d6f7f20c126eb70f320e8a4f6909640d8a69472cb07ab38042 w
F simio/simclock.go 48034a8b2e7f9e54c1d4480501a14b35005dbcb599a1d5ab525600e408bb49a5 w
F simio/simclock_test.go e21ca0fd4b8566ad69fd6a36ba8867ef56464b5927038a5daad8ce31031d8616 w
F simio/storage.go 9eb28b17dddd191c361cc55cc5f015f0584a4b1621eee12aa9fbe383cd61214c w
F simio/storage_mem.go fe96a8aace77dc3379d12452dfea1b2c7737ef105fedf7c953b258e428bdeab0 w
F simio/storage_test.go 7a1dfb458a69a1b2851a4246b3aa4637f1c3094054ea6a68cb718290dccb2e25 w
F testutil/testutil.go c71090c89cddbb07cbba5d148de5c5189ee3a9cea7ce9cb3560c228d51bea676 w
F testutil/testutil_test.go f522d077f2f2e736f644196dd87564eb4245d5528f412ed7457461ad8da4e543 w
F transport.go 91e6d6e3d19649ba1e9fc2a88046129fb3f073b7a6413bd00dd37e02b39e1274 w
F transport_test.go 30e0c5e29f58a9afd7197930d5d85f59f72244b6cfc41ed6f068ffbf5f5bceab w
F types.go 74dd3154ae8ffa2630d82f31b366362fdc9c5f2b4560992fcb24c6deb41242c5 w
F types_test.go 144c2b033546e1c4a09de9a5cc3c9937608a14c7bcd38db5e48bdfb152d61f1e w
F wrangler.jsonc f19630509e536b24e89ad26e84fb4ab33ee3723daf96e2c300779fa8e8228b2f w
P 094abd4b4ecd97191ab99311d770df4a73e48662fb020681d4892e72d269bd87
U [email protected]
Z da1ba33fae128ec8348c55f7b5137476