Artifact 6bdb918f18cef821b5b654ad27ae846c6418f1d3b01e2a1072cccbbbdb8e2ba8:
zit merge NAME computes a three-way merge of NAME (other) into the current checkout and records the merge parent; commit then mints the two-token P card. Built from the RFC oracle + the RESOLVED merge-base and conflict-model rules.
- merge3.zig: a pure diff3 line engine + per-path classifier (no I/O, injected allocator, error{OutOfMemory}). Both-modified binary, add-vs-add, and modify-vs-delete are whole-file conflicts by construction, never laundered through the line merger (artifact §8.2; B-merge-21). Seeded-deterministic fuzz. - repostate.mergeBaseOf: the merge base over full ancestry (§3.3, merge parents included) — greatest event.mtime, ties by least artifact hash (§2/§8.3, the RESOLVED merge-base rule). repostate.isAncestorOf: a pure, mtime-independent full-ancestry membership test — the authoritative up-to-date gate, so a same-mtime ancestor can never slip the refusal. - merge verb: resolve NAME (§8, one resolver), refuse (exit 1, nothing mutated) a dirty tree / a pending merge / an up-to-date or unrelated NAME; else classify each §8.2 merge-walk path and materialize transactionally via update.applyMerge (journal + checkout written before the first byte moves). Conflicts write fossil-style markers, name each path on stderr, exit 1, and still record the pending merge; zit undo unwinds it (B-merge-13). - commit: with a merge pending, scan the committed set for the conflict sentinel and refuse until resolved (no override); otherwise emit the primary-first two-token P card and clear the merge one-shot (§4.7.13; B-merge-8/9).
v1 non-goals held: no rename-aware, binary-content, cherrypick, or octopus merge. 1629 unit + 307 e2e green; dst 6x1000; fossil interop unaffected. by dmestas on 2026-07-18 02:51:43.
C Add\sthe\smerge\scommand:\sline-based\sthree-way\smerge\sinto\sthe\sworking\stree\n\nzit\smerge\sNAME\scomputes\sa\sthree-way\smerge\sof\sNAME\s(other)\sinto\sthe\scurrent\ncheckout\sand\srecords\sthe\smerge\sparent;\scommit\sthen\smints\sthe\stwo-token\sP\scard.\nBuilt\sfrom\sthe\sRFC\soracle\s+\sthe\sRESOLVED\smerge-base\sand\sconflict-model\srules.\n\n-\smerge3.zig:\sa\spure\sdiff3\sline\sengine\s+\sper-path\sclassifier\s(no\sI/O,\sinjected\n\s\sallocator,\serror{OutOfMemory}).\sBoth-modified\sbinary,\sadd-vs-add,\sand\n\s\smodify-vs-delete\sare\swhole-file\sconflicts\sby\sconstruction,\snever\slaundered\n\s\sthrough\sthe\sline\smerger\s(artifact\s§8.2;\sB-merge-21).\sSeeded-deterministic\sfuzz.\n-\srepostate.mergeBaseOf:\sthe\smerge\sbase\sover\sfull\sancestry\s(§3.3,\smerge\sparents\n\s\sincluded)\s—\sgreatest\sevent.mtime,\sties\sby\sleast\sartifact\shash\s(§2/§8.3,\sthe\n\s\sRESOLVED\smerge-base\srule).\srepostate.isAncestorOf:\sa\spure,\smtime-independent\n\s\sfull-ancestry\smembership\stest\s—\sthe\sauthoritative\sup-to-date\sgate,\sso\sa\n\s\ssame-mtime\sancestor\scan\snever\sslip\sthe\srefusal.\n-\smerge\sverb:\sresolve\sNAME\s(§8,\sone\sresolver),\srefuse\s(exit\s1,\snothing\smutated)\n\s\sa\sdirty\stree\s/\sa\spending\smerge\s/\san\sup-to-date\sor\sunrelated\sNAME;\selse\sclassify\n\s\seach\s§8.2\smerge-walk\spath\sand\smaterialize\stransactionally\svia\supdate.applyMerge\n\s\s(journal\s+\scheckout\swritten\sbefore\sthe\sfirst\sbyte\smoves).\sConflicts\swrite\n\s\sfossil-style\smarkers,\sname\seach\spath\son\sstderr,\sexit\s1,\sand\sstill\srecord\sthe\n\s\spending\smerge;\szit\sundo\sunwinds\sit\s(B-merge-13).\n-\scommit:\swith\sa\smerge\spending,\sscan\sthe\scommitted\sset\sfor\sthe\sconflict\ssentinel\n\s\sand\srefuse\suntil\sresolved\s(no\soverride);\sotherwise\semit\sthe\sprimary-first\n\s\stwo-token\sP\scard\sand\sclear\sthe\smerge\sone-shot\s(§4.7.13;\sB-merge-8/9).\n\nv1\snon-goals\sheld:\sno\srename-aware,\sbinary-content,\scherrypick,\sor\soctopus\smerge.\n1629\sunit\s+\s307\se2e\sgreen;\sdst\s6x1000;\sfossil\sinterop\sunaffected.
D 2026-07-18T02:51:43.190
F .fossil-settings/ignore-glob 48212e9febe6d74143ee9ac63664d0385fbd2cb43e9877c4c7d86f1faf726292
F README.md 62e1f936cc2ea0e33d717539bdffd6126a639843069bd6256359f2b15cb06232
F build.zig 362c522e6e7a7d7b54a660663f97e7d8ca5ad53a9eb6b6fe458c3b1d44e2d3fa
F build.zig.zon d5d4d8f8c01f55e69078eabf2ee65f7c1756bdbb2f71738ac5de9de99e69aff1
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 src/artifact.zig b099a9c79f207475b2945bb18114e981747975a97bda34a7134cc2f246218a9d
F src/artifact_fuzz.zig 8bb359ddfe790818e109a1dd7ac0c1b5cec1a8fdc556f37e73504cdb7f933e17
F src/artifact_test.zig da999476660f7e6e1f50ed9da5c30f1c83d6b358e2cfcd265c6932959c85bdd1
F src/checkout.zig 339792e01aef607511f0ea33dffad045d3aa0b0981418b4eec8018c9912f3c00
F src/cli.zig 28c119c0cce287421bacf027b06638d1c364739ca6f5836da52e004f7ae5f406
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 f013a0330c40eaee7e4305f859a3a442c4d7ce145a30a94e844b079c7c52137e
F src/e2e.zig d123af6742c79e99a8431e6a3f570e2b886e5473e40a3768e11aa35d315f3447
F src/extras.zig 58a244e750f73b6b0388da6786f45fc829eba88562595cf8e839462f293b4287
F src/fuzz_tests.zig 8d8affa880d8ac472c22d3c7bab6ecdb952a445ea1e41023a7420368cd18efe6
F src/logstore.zig a2abf89642a796a931ec007514e9d09d69e16f0daf7cbbaedfb309ce81d2d9bf
F src/logstore_benchmark.zig e245474e1cc4f10617866f718aab3958f13b256c609b3e5fd562f500668388c0
F src/logstore_fuzz.zig a16c5bf2acc3b0e144bc10eecc308ef9070bda9f763028c525b7668eed62de32
F src/logstore_test.zig 14a0813d828fb242c4aa8dca45414ed95468a74197fe9bceb96deb6290e89c43
F src/main.zig e4dbf88a8332ed45474ed8cab83c40c3e4660e6c6853d0e3f697a5c4bb88061d
F src/managed.zig 81ccc2d6321fe3dff91f653305ae4e73bea0b3fae7db2ab2f0cf168d9518d601
F src/merge3.zig d92553dfe5c45059e686d65db0a76e5f94981af5e146fdad75f1fd13b3086b77
F src/repocache.zig aae232a6b1b86e27c5242c0ee17ce9f2544299d99cf4936d8c2c9000e3166884
F src/repoimage.zig 7d2dc2f3c145e10e2d9ba6997705fd61a0cc0aedde8e171c253163d1279ccdd5
F src/repository.zig 4e4ee273175ac390949faff6f4b9e2e82a4ab9ce0cee05c5075282682d64f74e
F src/repository_test.zig d18dac567ac27ac464e7cb2e5c84ea7783487473f9bd6d93a1d6c0ef923165a5
F src/repostate.zig 58c08c375994ba47d8a9c1a191f6e82350d545945b667993e09e6d435da8fd06
F src/repostate_test.zig 0333453b73d0c1fdb9e74dccbbdb46d969e66cd1c037acb06d0882b1008c8b3e
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 5af382196a32be75cd35aeeae934fa22ca8394b68fd44d702ad89127cbf6f43b
F src/serve.zig baa76b81f5cc21322e85f3d390b533c828c969f6d10580b5e8aa1f339202d945
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 c41aaffe0805cc5fd50c6a2b8b1d6dbd55b5a07be68cde90105adaaca31c9dc6
F src/sim/sync_gen.zig 238d46942915b5c0e989dfc738b5927b5228468ea123e6f17b6fb593aa5cbf6e
F src/sim/sync_sweep.zig 5458a84be08823d2d0fc9464665f1c3f3f26563185dc9ae24cf73259faa5d40e
F src/smoke.zig c3d33acd93f11af1a7eaab3e1fe1fc16dfb2d0f39585055cd477e656f86d491c
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/undo.zig b6e44f03b60aac3aff3150e6631d946a12d38c83c0548636dfbf55f0741aa9de
F src/update.zig c3a0f1976249d74b47a4002c3abe97b56ccbd6aedfc3995177c7b70fce09d46a
F src/update_test.zig 4707c7aa7b028976032dbd580c3448bfea11d89660b03c3479c671cb58421f26
F src/warmread_benchmark.zig 9421986d49deff3f720e491fb6d1c7162dc9322f4e67dd14198820c3992dc02a
P 8404f79a7b5b6f063778360d46cb50238ef35d176ce8c814ee588233e473e401
R 377122cd71b474b909f8e73b1d762afe
U dmestas
Z e3fdefd1c399c9d0faafab1118312f36