Artifact 7cf522fa5b772c98677968f2c51853b8b272e5efed108cfd41989ded91970ab4:
Callers publishing several artifacts together had only putArtifact, one at a time, so a failure partway left the store holding a prefix of the set with nothing naming what was missing. Each caller that cared wrote its own compensation, or quietly did not.
putArtifactBatch takes the whole set and appends it under a single transaction: either every item is durable or the store is byte-identical to its prior state. ArtifactBatchItem carries the hash, the bytes, and an optional delta base, so a batch may mix full and delta-encoded members without the caller resolving storage order first.
Nothing calls it yet. The importer, which needs a check-in's blobs to arrive as a unit or not at all, is the first caller and lands later on this branch. by dmestas on 2026-07-31 01:58:08.
C logstore:\sall-or-nothing\sartifact\sbatch\sappend\n\nCallers\spublishing\sseveral\sartifacts\stogether\shad\sonly\sputArtifact,\sone\sat\sa\ntime,\sso\sa\sfailure\spartway\sleft\sthe\sstore\sholding\sa\sprefix\sof\sthe\sset\swith\nnothing\snaming\swhat\swas\smissing.\sEach\scaller\sthat\scared\swrote\sits\sown\ncompensation,\sor\squietly\sdid\snot.\n\nputArtifactBatch\stakes\sthe\swhole\sset\sand\sappends\sit\sunder\sa\ssingle\ntransaction:\seither\severy\sitem\sis\sdurable\sor\sthe\sstore\sis\sbyte-identical\sto\nits\sprior\sstate.\sArtifactBatchItem\scarries\sthe\shash,\sthe\sbytes,\sand\san\noptional\sdelta\sbase,\sso\sa\sbatch\smay\smix\sfull\sand\sdelta-encoded\smembers\nwithout\sthe\scaller\sresolving\sstorage\sorder\sfirst.\n\nNothing\scalls\sit\syet.\sThe\simporter,\swhich\sneeds\sa\scheck-in's\sblobs\sto\sarrive\nas\sa\sunit\sor\snot\sat\sall,\sis\sthe\sfirst\scaller\sand\slands\slater\son\sthis\sbranch. D 2026-07-31T01:58:08.895 F .fossil-settings/ignore-glob 76b01a09a221949a7a8acff90b391d1ba8a541ef6696924287ad5ca73908a582 F .github/workflows/ci.yml 7b817b4a7c230e3f351a112a83c0cad98db79add99264a07549cab8d499120f9 F LICENSE 702ae7ff835a2a971dae11c5cae039803bf394b77a6d8ec9f18693e449eaaf26 F README.md 67bb1afa5bff033e7ce51ff92e782a8a22a5e64541c219b338147da4b1ad8f47 F build.zig 85687fefb5642ecfcc069286d292ab500684be08a7e2895fba7caf3caf03a86a F build.zig.zon dd3992bfc8da12e09a018c4697e38ddf79d07e225405af448ecca1ebefc3ea0c F docs/RELEASE-NOTES-0.1.0.md 5ed8b4d35ee23b7990261f8af34f5fa3cc629baf63b0059d9f7bb2d2c48dc802 F docs/RELEASE-NOTES-0.1.1.md 59eea8c487dc1e9190c44c371656e430cd5621031a71c502ecbae96802712857 F docs/RELEASE-NOTES-0.1.2.md 7c968ab247ad1194f9163e625a37452ae72bdc23f3e66e8ea26b39f6e0a52914 F docs/RELEASE-NOTES-0.1.3.md c8f703b8717040f96a9b77ad132bbe309ba4368ead5362739e4d5ef23f2d3286 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 b35480166caaf5d2c220086140a1d47034e9b4967689be8f4cd8779bbdbbc3da F docs/rfcs/draft-fossil-submanifests-00.txt eaef2e2e36f4fab96ec4ba9654a8e7c02317086918f6e32e45fd62897dfd48e9 F docs/rfcs/draft-fossil-sync-protocol-00.txt 153d31ec11ff6636793514df711389883d5dd3111b97d3da295a30308fb400b4 F scripts/mirror-export.sh cc1130129e3c320cb9c1c5a05f505e45ece23d6bb3e0228da8e7ffe97bd5612b x F scripts/soak.README 3a2f028e4f87a395b2b779ac63260fcb68a7a9c7ffc9fea5b065d5bc065c4719 F scripts/soak.sh e184de2f7396ae88c1266d565092282dc9aff151fab8f971840d867562f7d1be x F src/annotate.zig 0a6b6728099e63c84681d1e5228ebb45fafb55d65df1720358247fd6e6532c63 F src/artifact.zig 81425cecf990ac1eb2b87cd48522aa535ac67c9e3ac16f2169aa1418f5d4d875 F src/artifact_fuzz.zig 98000540f71b1f8fa8a33d2f1da885a6c9c2507108fb1bc95630c3b6b4fab0dc F src/artifact_test.zig 13e3b0371b8d832030a183a5e6409d2d26d33db3ec7a0d940fd949b65b0856d2 F src/bisect.zig 70a0b3561380f216a0cea9ee9419bb1cd1b77d9b6a73786f41992dfd70ceb04a F src/checkout.zig 31f20dc1fe5285575b7bfca7fedbca1dae07e2cb77c9fde6f0f27e72a7e4f80f F src/ci_test.zig a75b83a94e7d28d11f9c73c0dfae450000e31ca9a7b7563f8120686112047c84 F src/cli.zig 276d451c7aa0fb49e2620fb1fcbd192b6a2dc3c8bf5b0360dd6b6cad1bfa5e6d F src/cmd/checkout.zig 0f079b56222a8277d1e4fcc44a6c8ddfd996ab09430267dc7c9ee0d549abf95d F src/cmd/history.zig fd3adc3448c7a8486a8610ff7a47f2ca89620e897590155f0bc1b83bfd64b2a1 F src/cmd/sync.zig b2f11cb373cc455e77600115ec3de0b92d5e946654a14afbc5a5926f9f24f160 F src/cmd/tracking.zig 46b079b974838f92b9508a647c0a89e3747fec09dab072a0bae2c0d0639c4831 F src/container.zig cef1028531f2763f94248b761c8779a1884e44bb854b8c45617494e3ead40e61 F src/container_test.zig a013652b1ed181161d3ad8fc9d8f052f7c27b61e129662632ceaf8cf189445ec F src/control_paths.zig bc1a94f35675065cee6bf29e9236b443e2a1879ec2f9b65ef0141b1042a77219 F src/crc32.zig 57429c29f4a67a9bfaebad8d5826471f9ff26cfd085c5424bf8e0fccba376bb4 F src/crc32_fuzz.zig 2e6c3425989051ec826b0f1208fa9716808011e71c98ff0a5ae2e38de524caea F src/delta.zig e8f3a6297d47549aea146222732ccf514c39688414f0a74ba396ac91066686f3 F src/delta_fuzz.zig 5e5c715722760d6f45c4eaaf9b5d495bf83c59e5869a0e0dd76bb57b007e3b53 F src/delta_test.zig b18d97e117dce8fbcc05bff6f6954effdb946bab6d36337efbe5ef64d10646a0 F src/dst.zig 077f19221915ff99026216b96de927fedb499ab265bfe51d5f7f5364e8de32e3 F src/e2e.zig 6ee730fdedab03a603ba68f89812e70d7d2c89bb34610c9d5d156605b84c3e8a F src/extras.zig fa68426cfb489c57c220471bc03565a37d177d10b9d95d8c9fdcf5b93ae40ec7 F src/fuzz_tests.zig 60f1db664e0540a05944c3ddb230125ecfaa971e30aaa18c1001c349e861a083 F src/git_fast_export.zig 23169447d7dd3e5573243fc1badf61a924be57cfe6345742b6367738b46f8021 F src/git_fast_export_test.zig 1a19e4f49f51ea845e388fdc9706de940a1ee362f2f66e07406965b5de019f92 F src/logstore.zig af0b29cbab14bd69596faa3fbae363056c72ac22eb7a76f68b4e47df4558610d F src/logstore_benchmark.zig 23ec4f894bdf845e21353e343a963045d2c45d960befa2c97c248460c043aaf7 F src/logstore_fuzz.zig fcdbb70b468fcabff6edbfd8a526832acc5ba12a39cca83b5fdffd5716817e8d F src/logstore_test.zig c97492855395653fd0483a1c4ca003512ad0107c0b3ef6e061ed12f6db8c5675 F src/main.zig 8e33fe7caa4c7b52e5e8114a8bbaa712d913b1e87408aed89dc68c820dc06a6f 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 95627a5646a06c36a87f2bed1ec925898b8a69248809f6cad0bbdcea9a059cf3 F src/repocache.zig 32af5b54b011fef358a134273b5e6f43da4282122c05a85ad503a8f7796c6c66 F src/repoimage.zig 7d2dc2f3c145e10e2d9ba6997705fd61a0cc0aedde8e171c253163d1279ccdd5 F src/repository.zig 5e35dae88418bb328bcfc209b13badbb2fe5cc832fb83b60cd0ee7be07a5169a F src/repository_test.zig ffcb406f6a80facde45696b7af8ac321b3972babf636eb26b903c63b6c9f6b56 F src/repostate.zig 83aef2e71712a458d1a0fcd0898c8b42a99c70bf3288c02742a76338f0f3927c F src/repostate_test.zig e5699688b0f43b7480ed5d89f11585c2f61114bbe3ec9dae5061741f37b37e7a F src/repoview.zig b6e0b35b133b6acfae8dde8fb4ab45a886e50e43ebb668030ce941dc205dd2c5 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/submanifest_a2_1_leaf.txt aa9d404c14fe4dadd2ab398961fb0dfe650a877c061f650d8233a5888e920acf F src/rfc_vectors/submanifest_a2_2_leaf.txt a50a722b465ed67b42ee0fbe61e4a19d6b1d22940ba5740e99e450921e3f52ea F src/rfc_vectors/submanifest_a3_tree_manifest.txt 95fba39cbaba76fccb15571516659cea6a0e8a60123c3e7bda1397649d87c509 F src/rfc_vectors/submanifest_a4_1_leaf.txt b8e53d0c46cb57b616cc0ed6de5ce2453715be6157b73d247bcd5de8a6510aaa F src/rfc_vectors/submanifest_a4_2_leaf.txt cff23e5ba71569397c1d816afa2dd0bfffc42339e402df36b63623846bd5fcbe F src/rfc_vectors/submanifest_a4_3_leaf.txt 9604c3f9774f7472d7bff44d5965f30250358a3e7a18046eeaf5f9d83bd5cdc6 F src/rfc_vectors/submanifest_a4_tree_manifest.txt 02dad8d4451ecf930c0c8637cf66351579aa746aebf0cf10f249b2a6dea37caa F src/rfc_vectors/submanifest_a5_delta_manifest.txt c74e37f650677523f7b6c2b4f094f766c4427a8ea180768ad75fa2de6bd14902 F src/rfc_vectors/submanifest_a5_encoding_leaf_1.txt e2899273b6a258ee18e053a79903d02469a275e2c80279c3657c7b803e2af6c0 F src/rfc_vectors/submanifest_a5_encoding_leaf_2.txt d7edb65681faaa4fd4f3541f04370421b057bf299098b781c7ec50d609869082 F src/rfc_vectors/submanifest_a5_encoding_leaf_3.txt c634332663f1cc0298aae6b61c799214a522877102cd6acdfe633f29fd79eeaf F src/rfc_vectors/submanifest_a5_encoding_manifest.txt deb0cb8b56fddfc4eebbab0f928cbdb19e64a6ba568064d5b43663dc1ef7263f F src/rfc_vectors/submanifest_a5_merge_leaf_1.txt 4bf4476e3aa41a1e3d26c85173c18fcd19f61871d4fc31215e523d7502078cc8 F src/rfc_vectors/submanifest_a5_merge_leaf_2.txt 6f3c993caa208b6fd44332d241676f9aa6a8c29dc7e28f287d5cdc088005a842 F src/rfc_vectors/submanifest_a5_merge_manifest.txt cef55b9b325fbc8abd59a044acafa57603c1b11a605e7fbba02d511a6da7a806 F src/rfc_vectors/submanifest_a5_three_level_interior_1.txt d42946de7b59647235f2166d964e9e5878bb1b3aba796b5e9c5e9dc719784e23 F src/rfc_vectors/submanifest_a5_three_level_interior_2.txt c1cc48fa9a3fbc34da7614632137890b4b09b33e750abc75514836c533e5f42e F src/rfc_vectors/submanifest_a5_three_level_manifest.txt c136ef62f5f13c18d06564649da6022d9fe25cde5be15dd1ad10b04015096424 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 4a8536b3b7cbf7a8a31bb091fa937e0712bf68b25045055444bd5f04654d2e88 F src/serve.zig 5a934102c75a29b2f57d4c3e69bed69e1319ecdb56b12a8da5407297661cff3b F src/serve_benchmark.zig ff55c6148e961c9374ad60a756d9d997fadbc854d2a79d625235b580aefb8656 F src/serve_fuzz.zig 3c39ea768ffa37599e2cc00c588f053870766ab91500aceb0d844a4322174687 F src/sim/assembly_sweep.zig 65016d6ae15579b7e4c7db91ea4659b21dc67533b3807ad30619a3b517ef4ed1 F src/sim/checkout_sweep.zig 80bb6fef67c88a29a2b6bdc372996c9f2c4ad65db289cddebc7a427b42ee5d39 F src/sim/faulty_dir.zig 29f0efc3338c14eb87085cd87591d01d78ae1feac8b3f6ab7f5a2533ac01a7db F src/sim/faulty_file.zig 720be41b7f9bd64b9fd2586201e2f62d79c6d60452196eedeb9708b170093424 F src/sim/gen.zig a05fa9fa17e4b585c662c6e1d3855e5e46327db9c7490bc834382b64e742c557 F src/sim/net.zig 8fb057012ce0a33f67c928cd696bc2761fea8ba4012b2daa33871b2ba5dfe772 F src/sim/oracle.zig bc9e272bb3332b7b715fbcc254b63583aa294b769d423f4be48593152717dfb2 F src/sim/storage_sweep.zig 78e8a877e22afe537d29d289273d739a18f220497584b925492ed57331af27d9 F src/sim/sync_gen.zig 238d46942915b5c0e989dfc738b5927b5228468ea123e6f17b6fb593aa5cbf6e F src/sim/sync_sweep.zig feeab7fa3123f8a9a1e6a43b6feee0e4d68479a6a19eb9374d57edbe9c600d4b F src/smoke.zig 71968cdaeed39abca39b4795c95f590f9afea80a32e95a07d4209495aeb70ea6 F src/storage.zig 512205eb629d5af8d50ad336f1ef49f53b455abd52ee2f9b56d20893cafad39f F src/storage_benchmark.zig 123ee72db0b7ba660a11594b54b4e11410b3cb1df4ca4e8c3e29cfcb7ceb48b3 F src/storestat.zig 30bd29d3638c4dcda9766f94a1a202cc1df181add943d9afb9ef225ccc64b4f9 F src/submanifest_benchmark.zig 8668fb10ea60736302c97f8c19c6cec5cbbdbe99b2013494b889df5d699ac2e1 F src/submanifest_editor.zig 26eaacc6b55ef3d2d17b906e0b7635b36444e3a732333f5b6af0ae9de6fb01f3 F src/submanifest_editor_test.zig 8141a56eebb39d8cdb9c3824b7d512d7403de6bafb57a7d8e03378f31bdf58a1 F src/submanifest_partition.zig 1d06059185986c977d20433ea8318f0e48e7f58a59a7432fb5e93de75a64c932 F src/sync.zig fe129cf3168cc8613264448ffea8794e2d18be283c74f15d02d3e82c74678664 F src/sync_benchmark.zig f0d99a1f8273a1675a2f482a4977bbb12fc07a432447905c991bd359db73acdf F src/sync_driver.zig 722ed498ea6b76900661a085d4257e51f6416d43ac1185e8ac15140de265f67e F src/sync_driver_test.zig 20eb1827932874422a75d06cfe503680cf17d99152dff1f852989dc22ae923c5 F src/sync_fuzz.zig 0ab9b7195535468db561cdcb405b7bf17536e2c6cb77a115ab1fe2badb001194 F src/sync_test.zig c2a24e84db7afca3e688854ff9079046c3633877d38cf834901f3c5734a2a8fd F src/tidy.zig c43465f253553b13e4b68f1c4e5eee3ec7638e2cd7ed8b4ce8dab4445bfb89d3 F src/transport.zig 36c4cbabaf10b30dbc20c6b8a30df94394a7e0a65b27613f0ace2f49ec1eaa79 F src/transport_fuzz.zig 43c310c51a6502fb2e049e6f43dfa151b1a632e6c885554ec6edce4ec62a8a48 F src/undo.zig c3ef95e4c6affeb893e60922506b760f483a6640fe3fd5c63bf86c6d20cf2675 F src/update.zig 050c0b96ae847a2a3d4e544e2e031715a4259f44d6bcdea1677fc094c89b8fab F src/update_test.zig 5185a994e37dc3d3d73e37facdc5d85548f14a54e8ca8e32a26216d2a8437818 F src/warmread_benchmark.zig 290887ab34f7777effcd4062c000456b1fcf8a59f84617a96a740d15a0245776 P 581db6e5baab3272ea9cdc0436f8545b2f3b81832345aeee0bf07f6425cb4ab3 R b7f7bf0e72c833da6ec9fdc74d1dd918 U dmestas Z 53f39c015077eb53d0eb807064251ef4