50 ancestors of 7c734e7763c514c3
|
2026-08-14
| ||
| 15:55 | store cone: .zit-cache/store-cone member with loss-heals-to-dense semantics; derived caches proven cone-independent (spec 7 corrected: no cone term in cache keys) check-in: 7c734e7763 user: dmestas tags: sparse-cone | |
| 15:40 | merge trunk: import-git drops std.c (Ambient environ, Io dir fsync); export-git DEST preflight names its own git dir check-in: 7c1fb6e58d user: dmestas tags: sparse-cone | |
| 15:17 | sparse cone: tree-dialect keystone on an S-card repo, narrowing dematerializes cleanly; README RFC row; open help teaches --cone check-in: 18ad2eea27 user: dmestas tags: sparse-cone | |
| 14:42 | sparse commit synthesis: snapshot inside the cone, parent cards carried verbatim outside; R stays log-sourced; keystone e2e pins reader-indistinguishability check-in: e7c880ac83 user: dmestas tags: sparse-cone | |
| 14:37 | import-git: drop std.c — child environ threads from Init via Ambient, dir fsync goes through Io; Linux builds no longer demand libc check-in: 951b654c5b user: dmestas tags: trunk | |
| 14:33 | sparse worktree verbs: open/update --cone and --dense; add/mv refuse outside the cone; extras/clean/addremove/status cone-scoped; R verified over a dense probe (spec 4.3 verification clause added) check-in: c59a64678f user: dmestas tags: sparse-cone | |
| 14:12 | sparse cone at the seam: MergeWalk filter, cone-aware requireClean, SparseOpt on applyCheckin (record+cone one splice), cross-cone merge refuses fail-closed check-in: 259219f90e user: dmestas tags: sparse-cone | |
| 13:50 | container v3: cone + store_location tags; v2 folds forward, version negative space pinned check-in: 49815f9ac6 user: dmestas tags: sparse-cone | |
| 13:43 | export-git: DEST preflight must name DEST's own git dir — upward discovery adopted the enclosing repo and aimed fast-import at its refs check-in: f451567485 user: dmestas tags: trunk | |
| 13:09 | sparse-cone: RFC draft + cone module (spec 3): sorted-minimal members, covers/coversRange, canonical serialize with fail-closed parse, SHA3 digest check-in: 0fade1c499 user: dmestas tags: sparse-cone | |
| 12:21 | merge sub-manifest: delta-manifest dialect, R cards, diff hunks, server identity, stash, open/log resolution, clone remote+progress, timestamp names; e2e expectations updated check-in: 8a45a021f9 user: dmestas tags: trunk | |
| 10:11 | clone: save the URL as the remote (canonical, password-free, --once opts out); live per-round progress on a TTY stderr (#55 #56) closed check-in: 69c14cd747 user: dmestas tags: sub-manifest | |
| 10:11 | resolve: §8.3 portable T/Z timestamp form and the NAME:TIMESTAMP compound (#60) check-in: f2691f0a23 user: dmestas tags: sub-manifest | |
| 01:57 | open: optional CHECKIN — resolve like info and materialize it directly; no-arg tip behavior unchanged (#54) check-in: 8573f4f57d user: dmestas tags: sub-manifest | |
| 01:33 | log: CHECKIN resolves like info — branch, tag, prefix, reserved forms; full hex IDs keep the stateless fast path check-in: b77d2898ad user: dmestas tags: sub-manifest | |
| 00:11 | stash: save/list/show/apply/pop/drop over a durable .zit-stash sidecar — fail-closed apply (clean targets, same check-in), corruption refuses loudly; the no-stash reflex retires; README rows updated check-in: ba3d1e705b user: dmestas tags: sub-manifest | |
|
2026-08-13
| ||
| 22:12 | commit: keep the delta-manifest dialect — once a repo stores a B-card manifest (durable seen_delta config, ingest-detected), commits emit deltas against the parent's baseline with delete markers, byte-cost guarded; commit also resolves a delta parent's true effective set check-in: 60b3557200 user: dmestas tags: sub-manifest | |
| 20:14 | diff: textual hunks by default — patience alignment, git-compatible unified output (patch -p1 round-trips), -c N context, --brief keeps name-status check-in: ca0f3df379 user: dmestas tags: sub-manifest | |
| 20:13 | sync §9.1: real per-instance servercode — derived from the checkout's absolute path (deriveServerCode, domain-separated from the project code), emitted by serve and all four client verbs; placeholder retired to test fixtures check-in: 59e8660999 user: dmestas tags: sub-manifest | |
| 19:22 | README: five-RFC table, capability overview, and the compatibility framing — what Fossil has, what zit has, and the one break (sub-manifests) check-in: 0f8b901650 user: dmestas tags: sub-manifest | |
| 19:22 | commit: emit the R aggregate checksum on every check-in; update/open verify it fail-closed (Fossil's default repo-cksum posture); diff: rev-to-rev name-status via --from/--to check-in: ad8012ec78 user: dmestas tags: sub-manifest | |
| 18:43 | docs: carry the three errata the code implements ahead of the RFC text (repo-state §5.4 cancel-halt, artifact-format §4.1.2 sterilizer, sync §3.3 content-received OPTION B) — provenance for the divergence until the canon applies them check-in: 062e9a5512 user: dmestas tags: sub-manifest | |
| 18:31 | repostate: cancel-tag propagation halts at a rowless node, matching fossil tag.c (#16); erratum filed for the divergent §5.4 draft text check-in: e286beebd3 user: dmestas tags: sub-manifest | |
| 16:09 | export-git: mirror canonical history into git check-in: ae7c26a1a3 user: dmestas tags: sub-manifest | |
| 16:09 | bench: qualify incremental git export scaling — memo parse bound pinned; althttpd/wapp export clean (fsck 0), phantom-parent lineage refuses naming both hashes check-in: 75fb61025d user: dmestas tags: sub-manifest | |
| 15:18 | e2e: verify git export commit by commit check-in: 08ca21c63c user: dmestas tags: sub-manifest | |
| 15:14 | cli: export git mirrors incrementally check-in: 5b2c6139d5 user: dmestas tags: sub-manifest | |
| 15:03 | export-git: publish mirrors without partial state check-in: 41dfef63b2 user: dmestas tags: sub-manifest | |
| 14:32 | export-git: translate check-ins refs and failures precisely check-in: 74c5c8aba0 user: dmestas tags: sub-manifest | |
| 13:52 | export-git: plan topologically and enumerate through the seam check-in: 491cbc50c5 user: dmestas tags: sub-manifest | |
| 13:35 | export-git: persist a disposable local mark map check-in: 17c02d8950 user: dmestas tags: sub-manifest | |
| 13:23 | export-git: serialize bounded fast-import streams (the writer files the previous commit's message described) check-in: bb1cc4a01b user: dmestas tags: sub-manifest | |
| 13:23 | export-git: serialize bounded fast-import streams check-in: 2450e4f142 user: dmestas tags: sub-manifest | |
| 13:08 | git: gather every interop root into src/git/ — cli.zig joins the zit module (nine importers rerouted), moved roots take parent deps through the module; ~986 duplicate test executions eliminated check-in: 49c08bb191 user: dmestas tags: sub-manifest | |
| 11:41 | submanifest: replay history to pick k (#41) — analyze replays last 200 commits through the real builder+delta encoder (both cost axes, bootstrap split, baseline-charged materialization); enable pins the replayed argmin, snapshot objective as fallback. Advisory only. check-in: b9ceda433f user: dmestas tags: sub-manifest | |
| 03:06 | clone: stop inflating served/received delta containers for their header — prefix-inflate 16B, base frame read header-only; server CPU per 1M-artifact clone 300s+ -> 22s, clone verifies 0 faults check-in: f5eafc6a2f user: dmestas tags: sub-manifest | |
| 01:25 | serve: notice a --force shun/pack generation swap — stat the path beside the held handle, reopen between rounds; shunned bytes stop serving with no restart. Closes #17 check-in: faa8befc3b user: dmestas tags: sub-manifest | |
| 00:16 | serve: scale the write deadline with the reply — 4MB clone batches at the flat 5s cut healthy slow peers mid-write (#22 shape); slow-drain e2e proves it check-in: fa230db9e8 user: dmestas tags: sub-manifest | |
|
2026-08-12
| ||
| 23:21 | timeline: order tied runs by generation, not per-pair ancestry walks — 305k-commit CVS import renders in 5s vs CPU-hours; B1 descendant-first preserved exactly check-in: d823a2811d user: dmestas tags: sub-manifest | |
| 21:47 | clone: byte-budgeted batches (4MB) — 159 rounds vs ~1000 for a 1M-artifact store; warm clones plant the checkpoint (first command 0.06s); print transfer/derive phases. Closes #53 check-in: c32414008b user: dmestas tags: sub-manifest | |
| 19:56 | checkpoint: accept delta manifests; anchor at newest check-in (mainline fold collapsed on real repos); sync: index the pending-delta queue (O(1) hasTarget, O(deps) completeFor) — zit now clones 2GB pkgsrc-2012 from real fossil in 10min, resumes opens in 9s vs 4min derive check-in: c70f48f825 user: dmestas tags: sub-manifest | |
| 09:04 |
checkpoint: retire the tree shape — sidecar only, structurally
The tree shape minted permanent SUBMANIFEST artifacts for benefits already had elsewhere: the rebuild win lives in the prefix record, verify's §6.2 oracle runs buildTree in memory, and the subtree-sharing bytes re-materialize at the first real S-emitting commit at identical cost. Minting early only created unreferenced permanent artifacts and the allow-tree/demotion/gate apparatus needed to keep automation from doing it by accident — all deleted with it. build no longer opens the log for writing or reads the emission settings at all; sidecar layout v3 (old sidecars miss and rebuild in seconds). Proven at scale: SHA-256 of pkgsrc's 593MB store is byte-identical across a full build; cold 4:12, rebuild 3.4s. check-in: 2a8fdcff60 user: dmestas tags: sub-manifest | |
|
2026-08-11
| ||
| 22:45 |
checkpoint: one-pass build, incremental advance, opportunistic refresh
Build paid a bypass derive, a whole-prefix delta scan, and a capture re-derive; a view-free captureRecords (byte-identical to the deriving walk, pinned at every boundary) now does capture and delta detection in one pass, and an existing sidecar's body plus its delta-free attestation reduce a rebuild to the unscanned tail. pkgsrc: cold build 17:58 -> 4:21; rebuild or anchor advance -> 5.1s. Repository.open's healing paths keep an existing checkpoint fresh: witness shape forced (the automatic path can never mint an artifact, whatever §8.1 says — a tree pin advances by demotion and is re-pinned deliberately), gated on 4MB growth AND anchor progress so blob-only growth never churns the sidecar. No checkpoint, no auto-creation: building once is the opt-in. check-in: adae602908 user: dmestas tags: sub-manifest | |
| 20:04 |
repostate: carry the C-card comment in the crosslink record
An unlimited timeline re-read and re-parsed every manifest just to print its comment first-line — 163k inflate+parse cycles on pkgsrc. The comment now rides the crosslink record into the derived state (commentOf; image backing falls back to the manifest read), so the render loop is a lookup per row: full timeline 12.3s -> 1.06s. Record-format consumers bumped so old bodies miss instead of misparsing (repocache v3, checkpoint v2 — one re-derive per repo, then warm). zit log's pinned B-log-1 walk untouched. check-in: 57d8de4120 user: dmestas tags: sub-manifest | |
| 19:07 |
repocache: persist the content log's scan index
The lazy content channel re-walked every frame header on each open — O(store) before the first byte of any comment, cat, or annotate. The scan's product (entries, hash index, shun rows, config cursor, tail key) now persists as .zit-cache/index, self-validating and LogKey-keyed: an exact tail adopts whole, a grown log resumes the walk over the tail alone, and anything else falls back to the authoritative scan (--no-cache never consults it). pkgsrc: info 1.7s -> 0.44s, timeline -n 5 4.3s -> 0.96s. check-in: f2bfd36e74 user: dmestas tags: sub-manifest | |
| 18:17 |
logstore: O(1) LRU eviction in PlaintextCache
Replace the pick-the-minimum-stamp linear scan with an intrusive doubly linked recency list; get/put/evict are all constant-time. The scan was invisible at small occupancy and dominant at full: a pkgsrc clone kept the cache pinned at max_entries and spent over half its client CPU sweeping the map once per stored artifact. Measured: clone 12:38 -> 8:39 wall, client CPU 694s -> 463s; cloned store verifies with 0 faults. check-in: 0df83f350a user: dmestas tags: sub-manifest | |
|
2026-08-10
| ||
| 23:48 |
Move the git-interop implementation into src/git/
Seven files relocate with unchanged basenames: git_fast_export(+test), git_import, git_import_impl, git_import_cli, git_import_verify, git_import_benchmark_support. The six standalone module roots (test, refs_test, cli_test, e2e, benchmark, pipe_helper) stay flat because a Zig module cannot import above its root file's directory — the same rule that keeps main/e2e/dst/smoke at src/. Future export-git files follow the same split: roots flat, implementation in src/git/. Path-string edits only; build.zig unchanged. check-in: ce3c87e25c user: dmestas tags: sub-manifest | |
| 23:12 |
Add zit checkpoint: durable prefix resume for hybrid history
.zit-cache/checkpoint pairs a validated log-prefix key with the prefix's crosslink record body; Repository.open resumes past the flat segment on a cache miss instead of re-parsing it. Witness shape under a closed emission gate creates zero artifacts; tree shape pins the anchor's file set as the canonical S-tree (batch-oracle byte-identical, one interior root node). verify re-derives every claim from real history; --no-cache bypasses both sidecars. New verb: zit checkpoint [show|build|verify|drop]. pkgsrc (163k commits, 60k files): cold open 8.4s vs 352s full derive; verify passes; 366/367 tree nodes deduplicated against the imported tree. check-in: e4026acd7b user: dmestas tags: sub-manifest | |
| 20:17 |
Delete the legacy reserved-name tier (consolidation Task 7)
The policy is three names and a prefix: .zit, .zit-checkout, .zit-cache, .zit-tmp-*. Removed: the absorbed sibling reservations (.zit-managed/-undo/ -bisect), the pre-directory cache/vstat spellings and their read tolerance, the retired scratch spellings, and the import-provenance names (refs, .zit-import-map.jsonl). Behavior shift: in never-re-opened old checkouts these leftovers are now visible to extras and deletable by clean. The container's byte-1 fold stays, so a legacy authoritative sibling still migrates losslessly on first contact (e2e: every-leftover checkout converges to the clean root with membership intact). check-in: c0a116d458 user: dmestas tags: sub-manifest | |
| 19:31 |
Fold managed/undo/bisect into the .zit-checkout container v2 (consolidation Task 6)
Sectioned container (ZITCKOT, tagged table, whole-file CRC); payloads are the existing formats unchanged. Byte-1 dispatch migrates legacy checkouts on first write; siblings dead once a container exists. Undo/redo restore and the commit/merge record+membership writes each collapse to one atomic splice. DST gains a legacy-seeded migration sweep (full-legacy or full-container at every crash cut). Registry: the three names move to the legacy tier. Perf on pkgsrc: adjacent update 6.50s (was 6.8), no-op 5.14s (was 7.69); migration of a 66k-file checkout invisible inside one update. check-in: efa29d234f user: dmestas tags: sub-manifest | |
| 17:25 |
control files: registry, provenance opt-in, one scratch prefix, advisory dir
Tasks 1-5 of the control-file consolidation plan. The checkout root goes from twelve zit-owned names to six live ones; the authoritative-tier container (task 6) and legacy removal (task 7) are deliberately not in this change. Registry: control_paths now carries every reserved root name with its tier -- authoritative, advisory, scratch, legacy -- and is the single authority the case table, the extras exclusions and the ignore-glob coverage pin all derive from or test against. A name added without its glob line or case coverage is a test failure, proven by mutation. The pin caught two live gaps on arrival: a crashed update's transaction directory had no ignore-glob line, and a crashed import's staging directory was never reserved at all. import-git --provenance: the per-object map and the source ref manifest are now instrumentation, published only on request. The default destination is the repository and its checkout record -- fossil's own shape. Both files are still written and verified in staging every run; without the flag they leave with the raw generation, and the staging manifest check enforces whichever set was chosen. Scratch: one prefix. .zit-tmp-txn- (update transactions), .zit-tmp-import- (import staging), .zit-tmp-pack (pack scratch; name only, the truncate-reuse and rewrite-exclusion lock protocol are untouched). One registry prefix row and one glob line cover the tier including names that do not exist yet. Advisory: .zit-cache is a directory -- repo (derived-state cache) and vstat (materialization plan), with the tree-checkpoint's member reserved. A legacy cache FILE is served through a read fallback and migrated by the first write via rename through a scratch name: the derivation survives with no bytes copied and no re-derive. Verified on a 66k-file pkgsrc checkout: identical SHA-256 across migration of a 35.8MB cache, fallback reads at parity, no-op update 7.69s vs 7.74s. Legacy spellings of every renamed or relocated name stay reserved and ignore-globbed until the removal release. check-in: f1ac625093 user: dmestas tags: sub-manifest | |