50 descendants and 50 ancestors of 50a4b5d049085c60
|
2026-07-17
| ||
| 19:54 | Add the mv command, renaming a tracked file by moving the working copy from OLD to NEW, swapping the tracked-name entry, and recording the rename so the next commit emits NEW carrying OLD as its fourth old-name token per artifact section 4.7.6, persisting the managed set before the file moves to keep the tree recoverable under the B-commit-15 durability order. check-in: b9149b15e1 user: dmestas tags: next-verbs | |
| 19:07 |
bench(§4): step-1 at-rest baseline, fossil+sqlite corpora, CLONE/SYNC ingest
zit vs fossil at-rest bytes over the fossil-bench fossil-scm + sqlite corpora, imported via the clone/sync path (putDeltaContainer verbatim frames exercised): fossil-scm-clone: zit 117,528,088 B vs fossil 72,245,248 B -> 1.63x (67,499 artifacts) sqlite: zit 207,344,544 B vs fossil 147,709,952 B -> 1.40x (130,994 artifacts) Frame classes, artifact-type split, compression headroom, and serve CPU (203.9 / 138.4 MB/s) from 'zig build bench -- storage'. Chain-depth p50/p99 and a pure put us/artifact are NOT emitted by the current harness (plan §4.3 metrics-to-add); not synthesized (Rule 7). Comparison class: approximate (whole-file sizes, differing store shapes). Corpora unpinned; observed trunk hashes recorded in the JSON. check-in: 9aaf485847 user: dmestas tags: storage | |
| 16:58 | Add the timeline command, listing every check-in most recent first by event.mtime with an ascending full-hash tiebreak per repo-state section 2 and section 8.3 item 7, marking a check-in that joins two lines of development with M per section 3.2 and showing each on its own branch with the configured main-branch fallback per section 6.1 and section 6.4. check-in: b3a18a8ff0 user: dmestas tags: next-verbs | |
| 16:34 | Create new branch named "storage" check-in: 9478fe4fb7 user: dmestas tags: storage | |
| 15:58 | Create new branch named "next-verbs" check-in: cd5b6e94ed user: dmestas tags: next-verbs | |
| 15:20 |
Merge recover-inflight: root-URL sync serving + the log one-verb surface
Two independent slices recovered from an interrupted session, each gated green. - Sync now dispatches on method + Content-Type at any URL path (§4 L759-764), so a stock 'fossil clone http://host:port/' at the bare root interoperates; the /xfer-only requirement and its 404 are gone. - 'zit log' is reduced to the signed one-verb surface: one check-in ID, help only, no -n windowing; usage errors exit 2, a bad ID exits 1. Unit + e2e (209/209) green; fmt clean; dst 6x1000 ok. check-in: dbb2735bff user: dmestas tags: trunk | |
| 15:17 |
Reduce 'zit log' to the signed one-verb surface (drop -n windowing)
'zit log' carried a -n K windowed-log flag: an extra grammar mode (a state machine with a positional-only '--' separator and a -n value token in either order) and a bad_count offense, for a bound no other query verb exposes. Its sibling 'update' already documents the target shape — one full check-in ID, help only, no windowing. Collapse log onto that same one-positional grammar. parseLogArgs is now the plain scan parseUpdateArgs uses: -h/--help wins; -n, --all, and a bare '--' are all unknown options (log has no positional-only separator); a second positional is an extra argument. Drop LogArgs.count, the bad_count variant, parseLogCount, and walkLog's max_count / window early-exit — the ancestry walk is unconditionally unbounded again. Usage errors (missing check-in, unknown option, extra argument) now exit 2 via cli.usageError; a well-formed-but-non-canonical ID stays a validation failure at exit 1. Help and 'zit help log' print the trimmed single-verb text. Net -110 lines. Unit + e2e (209/209) green; fmt clean; dst 6x1000 ok. closed check-in: 0973cf7e9e user: dmestas tags: recover-inflight | |
| 15:15 |
Dispatch sync on method + Content-Type at any URL path, not just /xfer
A conformant Fossil client POSTs sync to the repository URL path unchanged and MUST NOT append /xfer (sync §4 L759-764): a bare 'fossil clone http://host:port/' POSTs to "/". The server previously required the /xfer path and answered 404 for anything else, so a root-URL clone from a stock client failed. Drop the path from the dispatch decision entirely. classifyXfer now keys only on method (POST) and a request-valid, outer-compressed Content-Type (application/x-fossil); the URL path is accepted but unused. Remove xfer_path, requestPath, and the not_found/404 disposition; Disposition collapses to ok / method_not_allowed / unsupported_media_type. A non-POST stays 405 rather than a home redirect this sync-only server can't honor (and a 302 to "/" would loop now that "/" is a valid endpoint). The over-real-HTTP e2e clone now targets the bare root "/" to prove a root-URL client interoperates. Unit + e2e green; fmt clean. check-in: 9636157a85 user: dmestas tags: recover-inflight | |
| 13:46 | Merge clone-w4: skip the receive-side inflate for full-form clone content, cutting clone peak RSS ~13% (651 -> 568 MB). Reconciles held()/content() across the pull .raw basis and push upload paths so a corrupt wire-backed container degrades gracefully instead of tripping an unreachable. 1538 tests pass; fossil interop smoke green. check-in: 19af0f2de7 user: dmestas tags: trunk | |
| 13:43 |
Skip the receive-side inflate for full-form clone content
The clone/sync receive path inflated every stored cfile container to prove the RFC1950 stream was intact (§3.9), then threw the result away: the store keeps the container verbatim and reconstructs lazily, and the persist commit hook runs the §7.7 integrity check on the reconstructed bytes. For the full form that inflate was pure waste. Move the decode into the delta branch (which genuinely needs the plaintext to reconstruct) so a full-form cfile is interned and retained without inflating. Retaining an unvalidated container means a held artifact is no longer guaranteed reconstructable: content() can be null for a corrupt wire-backed container, so held() no longer implies content(). Reconcile the consumers that assumed it did. The pull .raw delta basis and the push upload path both degrade gracefully (round abort / silent skip) instead of tripping an unreachable or assert on hostile input; the read/derivation path keeps the decompression-bomb cap, and the eager clone-end image treats a corrupt container as an error. Cuts clone peak RSS ~13% (651 -> 568 MB) on the fossil corpus by dropping the discarded plaintext allocation. Instruction count and wall are flat, since full-form cfiles are the minority of clone content. 1538 tests pass; fossil interop smoke green. closed check-in: d91a3cfe42 user: dmestas tags: clone-w4 | |
| 12:00 | Merge clone-w3: halve clone compute (-53% instructions, 2.3x faster wall) via a bounded persist-time plaintext memo, byte-identical store + trunk hash preserved. check-in: fbfef2b649 user: dmestas tags: trunk | |
| 11:58 | Halve the clone compute by memoising the persist-time plaintext: a bounded PlaintextCache reuses each frame's section 7.7-verify plaintext as the basis for the reverse-deltas built on it, killing the delta-chain reconstruction read-amplification (persist no longer re-inflates + re-applies a basis chain per dependent). libfossil clone: 138.2B -> 64.7B instructions (-53%), wall 13.4s -> 5.7s, RSS 550 -> 371 MB, trunk hash identical, store byte-identical (proven by test). The target's section 7.7 hash is still verified unconditionally after every reconstruction, so a stale basis is caught, never returned. closed check-in: 1bcbee0f86 user: dmestas tags: clone-w3 | |
| 11:30 | Create new branch named "clone-w3" check-in: 57438f967c user: dmestas tags: clone-w3 | |
| 10:12 | Create new branch named "revdelta-pack" closed check-in: ba83effe96 user: dmestas tags: revdelta-pack | |
| 05:43 | Ignore zig-pkg/ (the build's local extraction dir for fetched C dependencies), so the zstd dep's source tree never shows as an untracked extra or risks being swept into a commit. closed check-in: b165f47caa user: dmestas tags: zstd-phase0 | |
| 05:39 | Add the pack-time zstd encoder seam (foundation for local storage compression). Vendors allyourcodebase/zstd (C libzstd) via zig fetch, confined to a new src/zstd.zig module so the core zit library stays C-free; the runtime read path decodes with pure-Zig std.compress.zstd. Frames carry no content checksum (zit verifies section 7.7 over uncompressed bytes; 0.16 std's zstd checksum path is unimplemented). Proven: libzstd level-19 encode round-trips byte-identically through std decode, and encoding is deterministic for pack idempotence. check-in: a409e20ab8 user: dmestas tags: zstd-phase0 | |
| 03:44 | Merge windowed-log: 'zit log -n K' bounds the ancestry walk to K check-ins (early-exit before descending), fixing zit's slowest read for the common case. check-in: b2d89cb634 user: dmestas tags: trunk | |
| 03:42 | Add a windowed 'zit log -n K' that early-exits the ancestry walk after K check-ins: walkLog returns before descending into the K-th node's parents, so only K manifests are reconstructed instead of the whole DAG (full log → -n 20 scales linearly, the signature of a true bound). Opt-in — unbounded default unchanged; -n K accepted in either order; 0/non-numeric/overflow rejected. Documented as the K nearest ancestors in DFS order (not fossil's mtime timeline). closed check-in: ed93685e89 user: dmestas tags: windowed-log | |
| 03:39 | Create new branch named "zstd-phase0" check-in: 6178e2c929 user: dmestas tags: zstd-phase0 | |
| 03:24 | Create new branch named "windowed-log" check-in: f0e2cd8720 user: dmestas tags: windowed-log | |
| 02:55 | Merge eager-image: warm the derivation cache at clone-end so the first read after a clone is the zero-parse image path (cold first-read leaves 26s → 0.03s), best-effort and clone-only. check-in: bf8b63f32c user: dmestas tags: trunk | |
| 02:52 | Warm the derivation cache at clone-end so the first read isn't a cold derive: runClone now calls Repository.warmCache after the final log append, which runs open's own miss path (derive → serialize the zero-parse image → store .zit-cache) so the first leaves/branch/name-resolution read takes the image fast path. Measured on a real clone: cold first-read leaves 26.0s → 0.03s, byte-identical. Best-effort — a warm failure leaves the clone correct with the old lazy first-read, never fails the clone (repostate §7.3 rebuild fallback). closed check-in: 85d8080ec8 user: dmestas tags: eager-image | |
| 02:27 | Create new branch named "eager-image" check-in: 5b2ba7331c user: dmestas tags: eager-image | |
| 02:08 | Create new branch named "revdelta-scale" closed check-in: b14a29d9c9 user: dmestas tags: revdelta-scale | |
| 02:01 | Create new branch named "fastread-log" closed check-in: da2daa8850 user: dmestas tags: fastread-log | |
| 01:57 | Merge zerocache: materialized-image warm reads (84x faster leaves load) with load-time-validated fallback, closing the read-path perf gap. Phase B (full SoA image) not warranted — the image load is under 1% of the derivation it replaced. check-in: 13cfa27494 user: dmestas tags: trunk | |
| 01:54 | Serve warm reads from a materialized column image instead of re-deriving RepoState, cutting a warm leaves load 178.6us to 2.12us (84x). At cache write, dense integer-addressed columns for the mtime index, leaf image, and symbolic-name table are appended to the versioned .zit-cache; on a fast_read open the freed queries (mtimeOf/isLeaf/isOpenLeaf/leaves/branchOf/resolveName per repostate 7.1/7.4/7.5/8.2) answer from those columns with zero derivation. Load-time span validation range-checks every column, CSR span, and stored id and returns a miss (fall back to derive) on any violation or CRC/layout/log-tail mismatch, so a corrupt or stale image is never a wrong answer. RepoState's public API is unchanged; only leaves opts in, cold verbs keep the derive path. Technique: on-disk zero-parse caching after Richard Feldman's Roc and Andrew Kelley's Zig compiler (common in game engines per Casey Muratori); typed enum(u32) index families after the compact_arena crate. closed check-in: ae242f5563 user: dmestas tags: zerocache | |
| 00:54 | Create new branch named "zerocache" check-in: 6542332151 user: dmestas tags: zerocache | |
| 00:38 | Merge warmprobe: land the warm-read timing bench that gates read-path perf work on measured re-derivation share (98% of warm load on althttpd). check-in: 8ccef5b6bd user: dmestas tags: trunk | |
| 00:36 | Add a warm-read timing bench (zig build bench) that splits a cache-warm read into cache-body I/O, RepoState re-derivation, and formatting, so read-path perf work is gated on measured phase shares. On the althttpd store re-derivation is 98% of warm load. closed check-in: b93d0f9dd6 user: dmestas tags: warmprobe | |
| 00:23 | Create new branch named "warmprobe" check-in: a9a7b2cf4d user: dmestas tags: warmprobe | |
| 00:22 | Merge cli onto trunk: land the zit.Repository facade and the ls, cat, commit --branch/--close, revert, and sync-with-persisted-remote verbs (CLI milestones M0-M4), each built plan-review-commit against the artifact, repostate, and sync RFCs. check-in: 96784cbe6f user: dmestas tags: trunk | |
| 00:19 | Merge trunk into cli: integrate the T-card sign-ordering fix, the F-card read-lenient import shim, and the streaming-clone memory fix ahead of landing the CLI verbs. Unify the duplicated sign->byte helper onto TSign.byte() (dropping the parallel signByte free function) and keep both branches' §4.7.16 ordering tests. closed check-in: 41aeb64521 user: dmestas tags: cli | |
|
2026-07-16
| ||
| 23:59 | Add a bidirectional sync verb and a persisted default remote so pull, push, and sync can omit the URL and resolve it from a new local config field per sync §4/§6 check-in: b5a9919379 user: dmestas tags: cli | |
| 23:06 | Add commit --branch/--close to start or close a branch by emitting the repostate §6.2 branch and sym tags while cancelling inherited parent syms, plus a revert verb restoring managed files to their artifact §8.4 effective check-in blobs check-in: 9f08c51525 user: dmestas tags: cli | |
| 22:18 | Merge fcard-import: read-lenient import path lets zit parse fossil's legacy trailing-space F cards (interop with pre-2009 history) while the strict parser, writer, and RFC stay pure and artifact identity is unchanged. check-in: f98cb9177c user: dmestas tags: trunk | |
| 22:16 | Add a read-lenient import path so zit can read fossil's own pre-2009 history: parseForImport tolerates the single legacy trailing space on fossil F cards (a cvs2fossil quirk, non-conforming per artifact-format 4.2) by stripping one dangling separator per F card ONLY after the strict parse rejects and the original Z self-checksum validates, re-sealing Z on an ephemeral copy that never touches storage, serve, or identity. The strict parser, the writer, and the RFC stay unchanged; artifacts keep their original hash. closed check-in: cca7dc06a2 user: dmestas tags: fcard-import | |
| 21:39 | Add a zit cat verb emitting one file's uncompressed content at a resolved check-in through the Repository facade, per artifact-format §8.4 single-name lookup and §7.2 hash-verified blob reconstruction check-in: d0ef5067bb user: dmestas tags: cli | |
| 21:38 | Create new branch named "fcard-import" check-in: d3be8fe4ac user: dmestas tags: fcard-import | |
| 21:13 | Create new branch named "fcard-fix" closed check-in: 65813afbe9 user: dmestas tags: fcard-fix | |
| 21:10 | Merge stream-clone: cut clone peak memory 14.2 GB -> 291 MB (fossil parity) by storing received frames wire-backed instead of buffering the whole repo's reconstructed plaintext, with section 7.7 verification moved onto the log-basis reconstruction path (a stronger round-trip parity guard). check-in: 77e2541742 user: dmestas tags: trunk | |
| 21:08 | Stop buffering the whole repository's reconstructed plaintext in RAM during clone: store received frames wire-backed and verify each durable frame's section 7.7 hash against its log-basis reconstruction (sync 7.2/7.4), cutting a sqlite clone's peak memory from 14.2 GB to 291 MB with a byte-identical store and a matching trunk hash. closed check-in: 9a18bdd63d user: dmestas tags: stream-clone | |
| 21:06 | Add a zit ls verb listing a check-in's effective file set through the Repository facade, per artifact-format §8.2 file enumeration check-in: 6ee0c0e855 user: dmestas tags: cli | |
| 20:39 | Merge tcard-order: fix T-card run ordering to key on the full sign-included name token (artifact-format 4.7.16), clearing 159 wrongly-rejected branch-switch check-ins that broke zit log on deep histories. check-in: b4f2ae0ceb user: dmestas tags: trunk | |
| 20:37 | Order T-card runs by the full sign-included name token per artifact-format 4.7.16, not the sign-stripped name, so branch-switch check-ins with interleaved propagate/cancel tags (T *sym-trunk / T -sym-clear-title) parse instead of being wrongly rejected as out-of-order. closed check-in: a2fa7629c6 user: dmestas tags: tcard-order | |
| 20:27 | Fold the store layers and RepoView behind one zit.Repository facade so read verbs open a repo, resolve names, and read content through a single deep interface check-in: 513397e07a user: dmestas tags: cli | |
| 20:15 | Create new branch named "tcard-order" check-in: 83a1201013 user: dmestas tags: tcard-order | |
| 20:06 | Create new branch named "stream-clone" check-in: 14f733376d user: dmestas tags: stream-clone | |
| 19:14 | Merge trunk onto cli: bring the branch tip up to the verbatim-serve, delta-cfile, repostate cache, container codec, and storage-benchmark work before starting the CLI facade milestones. check-in: a81d55773e user: dmestas tags: cli | |
| 16:49 | Make zit pack monotonic so it never inflates a store: preserve each source frame verbatim (re-linking delta containers to their base's new rid) and re-deltify a full-form frame only when the result is strictly smaller, fixing a regression that discarded wire deltas and grew a fresh clone 8.65x. check-in: eb9a1de034 user: dmestas tags: trunk | |
| 16:40 | Make pack monotonic: preserve stored wire deltas verbatim instead of reconstructing every frame to full form, which inflated a delta-bearing store many times over closed check-in: 50a4b5d049 user: dmestas tags: packfix | |
| 14:54 | Add a storage measurement mode to the bench harness (zig build bench -- storage): report bytes at rest by frame kind and artifact type, per-frame overhead, full-form compression headroom, and serve CPU, so storage-efficiency work is chosen on measured data rather than guesses. check-in: a48a0010ef user: dmestas tags: trunk | |
| 14:51 | Add a storage bench mode reporting bytes at rest by frame-kind and artifact-type plus serve CPU, so the storage-efficiency ideas can be weighed against measured numbers before any claim. closed check-in: e782228b2d user: dmestas tags: sbench | |
| 14:25 | Add a zit pack command that repacks the store into a compact new-generation log: whole-frame-verify the source read-only, re-ingest every artifact in offset order re-deltaing full-form frames against lineage bases, then atomically swap via a fsynced temp — a crash before the rename leaves the original byte-identical, and it doubles as an integrity scrub. check-in: de49e67c9f user: dmestas tags: trunk | |
| 14:16 | Add a zit pack verb that repacks the store into a compact new generation: re-ingest every artifact in offset order through a parent-manifest and same-path-blob lineage hint so full-form frames re-delta against their basis, recompute each reconstruction's hash against its name before writing it (repo-state §7.7), and swap the rewritten log in with an atomic rename so a crash before the swap leaves the original store byte-identical. closed check-in: 43dccab01c user: dmestas tags: pack | |
| 13:38 | Store cloned artifacts as compact delta frames: retain fossil's reverse-delta containers through the dangling queue and persist each basis before the delta that points at it, so a clone from a fossil origin keeps the server's deltas instead of re-inflating every artifact to full form — cutting on-disk size to roughly 0.6x of the full-form store, matching fossil's own delta count. check-in: 9853f8b93e user: dmestas tags: trunk | |
| 13:28 | Keep fossil's reverse-delta containers through the dangling queue and persist each basis frame before the delta that points at it, so a clone from a fossil origin stores compact delta frames instead of re-inflating every artifact to full form. closed check-in: 0ebc7991f0 user: dmestas tags: storage | |
| 13:26 | Merge the sync-protocol re-sync onto trunk: ratify the container-capacity and clone-igot clarifications that match the reference implementation and zit's own behavior. check-in: 61fde8dec1 user: dmestas tags: trunk | |
| 13:23 | Re-sync the sync-protocol draft: the container length field is a receiver capacity, so a decoded stream shorter than the advertised value must not be rejected (4.1), and igot is never applicable during clone rounds (8.2 / Table 2) — both aligning the text with the reference implementation. closed check-in: d708b4a2f2 user: dmestas tags: rfc-resync | |
| 11:26 | Stop the clone client re-announcing every held artifact with igot each round: a clone enables no push direction (sync 8.2/8.5) so the server ignores those cards, and dropping them cuts a 50k-artifact clone request from ~88 MB to under 2 KB while convergence still rides the server's RID cursor. check-in: 289e073d9c user: dmestas tags: trunk | |
| 11:16 | Stop the clone client re-announcing every held artifact with igot each round: a clone enables no push direction (RFC 8.2/8.5) so the server ignores those cards, and dropping them cuts a 50k-artifact clone request from ~88 MB to under 2 KB. closed check-in: ebc8401895 user: dmestas tags: igot | |
| 10:33 | Wire zit_storage and zit_logstore into the fuzz executable so the seeded fuzz suite compiles again: its sim helpers and logstore targets import those modules, which every other build artifact already provides but the fuzz exe was missing. check-in: 490977ea08 user: dmestas tags: trunk | |
| 10:25 | Wire zit_storage and zit_logstore into the fuzz executable so the seeded fuzz suite compiles again: its sim helpers and logstore targets import those modules, which every other build artifact already provides but the fuzz exe was missing. closed check-in: 1c7715c645 user: dmestas tags: fuzzbuild | |
| 09:58 | Add --no-cache to the read-only repo-state verbs (leaves, branch, info, tag): bypass the .zit-cache memo and force a full-log re-derive, giving a first-class integrity/debug escape hatch that re-verifies the whole log instead of trusting the O(1) tail check. check-in: 5af2298bc9 user: dmestas tags: trunk | |
| 09:55 | Add --no-cache to the read-only repo-state verbs to bypass the persisted cache and force a full-log re-derive that re-verifies whole-log integrity closed check-in: 6e3529ad92 user: dmestas tags: nocache | |
| 09:40 | Add a persisted derivation cache so repo-state verbs skip re-deriving all of history: cache the crosslink inputs keyed on the append-only log's tail and replay them on a hit, cutting a warm 'zit leaves' on a 130k-artifact repo from ~103s to 0.21s with byte-identical output and a full rebuild on any log change or corruption. check-in: e1f401fa0d user: dmestas tags: trunk | |
| 09:38 | Document that a cache hit skips whole-log integrity, so interior bitrot preserving size and tail is served until a rebuild — deleting .zit-cache restores full detection. closed check-in: 31e140ddbc user: dmestas tags: cache | |
| 09:28 | Memoize the derived repo view in a disposable .zit-cache sidecar so read-only verbs answer sub-second at fossil scale instead of rescanning the whole log on every invocation. check-in: 08504d5f5d user: dmestas tags: cache | |
| 07:28 | Extract the sync 4.1 zlib container codec into one leaf module: the three copies had drifted — logstore and repostate rejected valid containers whose zlib stream decodes to fewer bytes than the declared capacity, stricter than 4.1's output-capacity semantics — so unify on the spec-correct decode and retire the duplication. check-in: 0b8ff7a1f8 user: dmestas tags: trunk | |
| 07:23 | Extract the §4.1 zlib container codec into one leaf module (src/container.zig) so logstore, repostate, and sync share a single §4.1-capacity-semantics implementation instead of three drifting copies. closed check-in: 0e5cc09150 user: dmestas tags: container | |
| 07:05 | Retain received cfiles verbatim on the clone client: store each artifact's received container or delta as-is after verifying its hash over the reconstructed content, so delta compactness survives clone-of-clone and client disk roughly halves — and reject a lying-named push the server previously accepted. check-in: a5ef5d18c0 user: dmestas tags: trunk | |
| 06:53 | Retain received cfile containers and deltas verbatim on the clone client so delta compactness survives a clone-of-clone, verifying each reconstructed artifact's hash at the persist commit hook before storing the wire form rather than re-expanding every received delta to full form. closed check-in: 5526cf3536 user: dmestas tags: d4 | |
| 06:13 | Speed up repo-state derivation on open: replace the O(N-squared) crosslink scans with parent/child/tag adjacency indexes, verify each frame's whole-frame CRC once at scan instead of twice per verb, and cache delta bases during the derivation sweep — cutting the algorithmic crosslink term over 100x with byte-identical derived state. check-in: baa7053ee1 user: dmestas tags: trunk | |
| 06:11 | Assert a read-only-verified store is never appended to: the append frame path skips the redundant whole-frame CRC only because openReadOnly proved it at scan, so appending to such a store would leave a frame unchecked. closed check-in: 7c3d36865e user: dmestas tags: scale | |
| 06:00 | Accelerate repo-state derivation on open: replace the quadratic crosslink scans with per-parent/child/rid adjacency indexes, verify each frame's CRC once at open instead of again on every read, and memoize delta bases across the derivation sweep, so the query verbs stay fast on large repositories without changing any derived answer. check-in: 76b0f8f1d0 user: dmestas tags: scale | |
| 05:04 | Delta-encode cfiles on clone: store an artifact as a delta against its previous version when materially smaller, and serve that stored delta container verbatim with the reconstructed-size USIZE per sync 7.2, cutting clone reply size 58-87% on version-chained repos while full-form artifacts still serve unchanged. check-in: d7e16fadb1 user: dmestas tags: trunk | |
| 05:01 | Drop the unused putContainer store method and its two tests: its only intended caller is the deferred client-verbatim persist hook, so it stays dead surface until that lands. closed check-in: 673d5070bb user: dmestas tags: delta | |
| 04:50 | Use the known reconstructed size for a delta corpus artifact's USIZE instead of re-parsing the delta header: the bench just created the delta from cur, so its reconstructed target is cur and its length is the section 7.2 USIZE directly, dropping a redundant header parse. check-in: 3bdb4f96c0 user: dmestas tags: delta | |
| 04:47 | Delta-encode blobs and manifests on ingest and serve them verbatim as section 7.2 delta cfiles on clone: store a commit's blob (against the same path's parent blob) and manifest (against the primary parent) as a delta when it comes in materially smaller and within the write-depth cap, carry the reconstructed-target size from the delta header as the cfile USIZE rather than the container's raw-delta-length prefix, and retransmit the stored delta container byte-for-byte so a chained-corpus clone reply drops 58-87 percent while a full-form corpus is byte-identical to before. check-in: 71235bf3be user: dmestas tags: delta | |
| 03:57 | Serve stored cfile containers verbatim on clone: reuse each artifact's already-compressed 4.1 container instead of recompressing it on every clone reply, moving the per-clone compression cost off the serve path to ingest and cutting clone-serve time ~76% with byte-identical wire output. check-in: f4fe62b160 user: dmestas tags: trunk | |
| 03:51 | Restrict verbatim cfile serving to the full form: the delta serve path had no production writer and wrote the delta's length as USIZE instead of the reconstructed artifact size (sync §7.2), so drop it and let delta-stored artifacts fall back to a conformant reconstructed full-form cfile. closed check-in: 8e430e7bd7 user: dmestas tags: perf | |
| 03:24 | Serve stored cfile containers verbatim on clone, reusing each artifact's already-compressed container instead of recompressing every clone reply so the per-clone compression cost moves off the serve path to ingest. check-in: 84d47c3a21 user: dmestas tags: perf | |
| 02:41 | Land the out-of-band sync clone benchmark on trunk: it splits clone time into build/frame/decode/respond/reframe/consume/persist/reopen phases behind a convergence-verified in-process clone, and attributes per-artifact cfile compression as a faithful share of the server respond phase, so the first clone-speed optimization targets measured work rather than a guess. check-in: 5f6f1286d1 user: dmestas tags: trunk | |
| 02:35 | Report the sync clone benchmark's server phase honestly: drop the unmeasurable walk+compress vs decode+parse split and show only the standalone compression micro as a share of respond, since scanRequest and emitCloneReply are private so parse and walk can't be told apart at the public boundary. closed check-in: 53962101c0 user: dmestas tags: bench | |
| 02:10 | Split the sync benchmark's server phase into timed decode, respond and reframe steps plus a standalone cfile-compression measurement, so clone-speed work can tell inbound igot decode+parse apart from the actual per-artifact compression instead of trusting one opaque server label. check-in: 997edb13b5 user: dmestas tags: bench | |
| 01:44 | Add an out-of-band sync clone benchmark that splits round time by phase and tallies card/byte counters behind a convergence-verified clone, so clone-speed work starts from measured attribution rather than a guess. check-in: a5d904a3ef user: dmestas tags: bench | |
| 00:44 | Merge the growable pending-delta queue onto trunk: heap-backed and bounded by the message-body cap instead of a fixed 256 slots, so a real-world clone's thousands of dangling deltas per sync 7.4 are all retained and reconstructed — verified pulling multi-GB of fossil's own and sqlite's source past the former wall. check-in: a070f7fcb5 user: dmestas tags: trunk | |
| 00:36 | Grow the pending-delta queue on the heap bounded by the message-body cap instead of a fixed 256 slots, so a real clone's many dangling deltas per sync 7.4 are all retained and reconstructed rather than aborting the exchange once past 256. check-in: 8af6244a64 user: dmestas tags: cli | |
|
2026-07-15
| ||
| 22:37 | Merge the login-card polish onto trunk: pin the section A.5 auth vectors directly against the RFC bytes, scrub the plaintext password buffer after deriving the secret, and cover the legacy pre-credential config decode. check-in: 22d0c3de75 user: dmestas tags: trunk | |
| 22:31 | Pin the section A.5 login vectors directly, zero the plaintext password buffer after deriving the secret, and cover the legacy config decode path check-in: 91988dd110 user: dmestas tags: cli | |
| 22:23 | Merge trunk back onto cli after the login card. check-in: 56fbf01f2d user: dmestas tags: cli | |
| 22:23 | Merge the section 6 client login card onto trunk: zit push signs a login card with the derived shared secret so a fossil server authorizes the write, persisting only the 40-hex derived secret at 0600 and never the password — completing authenticated push, the last interop direction. check-in: 52cb4d83bf user: dmestas tags: trunk | |
| 22:11 | Sign push login cards with the derived shared secret so a fossil server authorizes the write, persisting only the 40-hex secret at 0600 and never the password check-in: f21e962a00 user: dmestas tags: cli | |
| 20:32 | Merge trunk back onto cli after server delta ingest. check-in: b3167f749e user: dmestas tags: cli | |
| 20:31 | Merge server-side delta ingest onto trunk: the server push path reconstructs a delta-form file card against its held basis per section 7.4 with section 7.7 integrity, then persists it, so a fossil push of a delta-encoded manifest lands on zit serve. check-in: b49f1fa330 user: dmestas tags: trunk | |
| 20:28 | Accept a delta-form file card on the server push-ingest path: reconstruct against the held basis per §7.4, verify §7.7 integrity, then persist, so a fossil push of a delta-encoded manifest lands on zit serve check-in: 6a4dd5b819 user: dmestas tags: cli | |
| 20:02 | Merge trunk back onto cli after delta reception, aligning for the push interop probe. check-in: 44be941a4f user: dmestas tags: cli | |
| 20:02 | Merge section 7.4 delta reception onto trunk: reconstruct delta-form file and cfile cards against their basis with pre-store hash verification, defer a dangling delta in the pending queue and complete the chain to a fixpoint when the basis arrives, so an incremental pull of fossil's delta-encoded manifests converges. check-in: ea53cd3983 user: dmestas tags: trunk | |
| 19:57 | Reconstruct delta-form file/cfile cards against their source per sync 7.4: apply an immediately-available basis with pre-store hash verification, retain a dangling delta in the pending queue while creating the source phantom and marking the target content-received, and complete the chain to a fixpoint when the basis arrives, so an incremental pull of fossil's delta-encoded manifests converges check-in: 890cf58924 user: dmestas tags: cli | |
| 19:30 | Merge trunk back onto cli after incremental-pull interop, aligning for section 7.4 delta-file-card reception. check-in: 6ca2645a09 user: dmestas tags: cli | |
| 19:29 | Merge incremental-pull interop onto trunk: pull and push carry the repository's stored project-code so a real peer accepts the request, and serve re-reads the on-disk log to its committed end per request so a live commit is advertised without a restart. check-in: bca7dec889 user: dmestas tags: trunk | |