Skip to content
zit Timeline
Login

Timeline

50 descendants and 22 ancestors of e7ea34ac4acb12ac

2026-07-11
13:05
Merge the test-extraction refactor onto trunk: relocate each module's public-API unit tests to sibling _test.zig files, keeping private-touching tests inline, so implementations read at about half their former length check-in: 6324fcb781 user: dmestas tags: trunk
12:59
Move sync unit tests to a sibling sync_test.zig, keeping the private-touching tests inline closed check-in: ab188817f0 user: dmestas tags: refactor
12:26
Move artifact unit tests to a sibling artifact_test.zig, keeping the private-touching tests inline check-in: 55245f7f60 user: dmestas tags: refactor
12:14
Move repostate's public-API unit tests to a sibling repostate_test.zig, keeping the private-touching tests inline check-in: ed8a93809c user: dmestas tags: refactor
12:03
Move logstore's public-API unit tests to a sibling logstore_test.zig, keeping the private-touching tests inline check-in: 070f1690e0 user: dmestas tags: refactor
11:45
Move delta unit tests to a sibling delta_test.zig, keeping implementation in delta.zig check-in: fb19e3574a user: dmestas tags: refactor
06:47
Merge the completed storage engine onto trunk: zlib and delta frames with bounded chain resolution, repo-local config and checkout state, and the shippable single-file .zit container with versioned format and copy-plus-derive cloning check-in: e2c8132559 user: dmestas tags: trunk
06:43
Consume a sync reply body as a sans-IO state machine per section 3.2, dispatching each card to maintain the client phantom set per section 3.3, record peer-lacks, dephantomize on arriving content per section 3.7(a), advance the section 3.8 state, and reject every malformed, request-initiation, or out-of-scope reply card the spec enumerates. check-in: 28a50e81b6 user: dmestas tags: trunk
06:05
Clone a repository by byte-copying the frozen .zit log into an empty destination and then re-deriving its index and recovering its config from the copy with no network, per storage-track-plan section E, so a copied file is a complete self-verifying repository and a damaged copy degrades through the shared open path that truncates the torn tail. closed check-in: bbaa47fc49 user: dmestas tags: storage
05:27
Store repo-local config in the log as a distinguished, non-content-addressed singleton frame whose latest scan-order instance wins and which is rejected as a delta base, and hold per-checkout working state in an atomically-replaced file outside the log, per storage-track-plan section E. check-in: bc88457d28 user: dmestas tags: storage
04:39
Pin the section 12 security-considerations clauses as named tests: neither the user password nor the shared secret ever appears in the login body card or the x-f-l-c cookie, a byte-identical login verifies twice because the server keeps no nonce cache and applies no freshness check, and the 65535-byte line bound is a fatal resource-exhaustion guard that aborts before card dispatch while leaving declared byte-counted payloads governed by their own SIZE. check-in: d35c429604 user: dmestas tags: trunk
04:03
Wire the zit module into the benchmark build so the standalone bench binary resolves the delta import the LogStore now uses for delta-chain resolution check-in: c842f4a613 user: dmestas tags: storage
03:55
Store LogStore payloads raw, as a fossil zlib container per sync §4.1, or as a delta against an earlier frame per delta §4, decoding each back to its uncompressed content-addressed bytes on read. check-in: 7810501796 user: dmestas tags: storage
03:51
Cover sync section 11 error and message cards: pin the error-card wire form and its fatal handling and the informational message-card that is never a wire-level error, with a named test per section 11.1 and 11.2 rule check-in: 88cd9b09f1 user: dmestas tags: trunk
03:20
Cover the sync section 3.9 robustness posture and section 3.10 round message layout by binding each restated clause onto the classifier and state machine that already own it, asserting the four liberal-tolerance points against a fatal strict complement and the canonical Table 4 request order against the unordered Table 5 reply combination. check-in: 0cf3d5e616 user: dmestas tags: trunk
2026-07-10
23:33
Merge the LogStore benchmark step and the phantom-to-content upgrade coverage from the storage branch onto trunk check-in: b9bc673b65 user: dmestas tags: trunk
23:27
Exercise the phantom-upgrade path of LogStore.put per §C, where content arriving for a hash already interned as a phantom reuses its rid and appends its first frame, adding a reopen round-trip test, an allocation-failure test, and a phantom-upgrade operation in the storage sweep. check-in: 5c53bf6ee8 user: dmestas tags: storage
23:09
Bind the §3.4 clone loop to the operation-agnostic round dispatch and termination primitives so no round can branch by operation, and cover the §3.5 pragma round-order dispatch with its unknown-name-ignored versus unknown-operator-fatal split. check-in: dc535a335c user: dmestas tags: trunk
22:46
Add a real benchmark step for the LogStore: a ReleaseFast harness with put, read, and open subcommands over a seeded deterministic corpus, routing every clock and file effect through injected IO and reporting throughput and p50/p99 latency, replacing the placeholder failing bench step check-in: 7f8ee58eea user: dmestas tags: storage
22:33
Derive §3.3 content-received at the sync layer so a dangling-delta HASH whose basis delta is retained drops out of gimme while its DELTASRC stays a genuine phantom, and bind the §9.3-9.5 round loop over the §3.3 igot/gimme/eligibility surface and the §3.7 per-round termination rule. check-in: a76b63c00f user: dmestas tags: trunk
22:01
Merge the native storage engine onto trunk: the StorageFile capability, the deterministic fault simulator, and the append-only content-addressed LogStore with crash-recovery, all driven by the storage simulation sweep check-in: 37dafb3048 user: dmestas tags: trunk
21:53
Add the LogStore: a framed append-only content-addressed object log with a 64-byte header and per-frame length, kind, hash, and crc, exposing intern, put, content, hash lookup, and commit over the storage capability, rebuilding its hash-to-offset index by scanning on open and truncating a torn tail, and driven through the fault simulator by the storage sweep check-in: c1e15637a3 user: dmestas tags: storage
21:35
Implement the section 6.6 capability model, mapping assigned o/i/g/x letters to read/write/clone/private capabilities and gating each pull/push/clone card on whether the user's established set holds the capability that operation requires. check-in: 1b09edd75f user: dmestas tags: trunk
20:38
Select login transport per section 6.5, gating the x-f-l-c cookie header on a peer's recorded release and timestamp clearing both thresholds and falling back to a body-embedded login card otherwise, and flag a cookie login paired with a body login as the section 11.1 duplicate_login error. check-in: e566bfecae user: dmestas tags: trunk
19:58
Strip trailing /xfer path segments from a sync redirect Location per section 4, replacing the suffix-match heuristic against the original repository path with repeated exact-segment removal that never consults the origin URL. check-in: 51e1193aa6 user: dmestas tags: trunk
19:38
Re-sync the sync-protocol draft: apply the section 4 redirect erratum (strip a trailing /xfer segment and reparse, matching the reference implementation, superseding the repository-path-segment rule) and the section 1 informative-scope note check-in: ebf5f6f86b user: dmestas tags: trunk
19:31
Add the storage capability seam and its deterministic fault simulator: a narrow StorageFile interface (append/pread/sync/size/truncate), an in-memory FaultyFile that injects torn and short writes, lost fsync tails, crash-restart, and payload-derived bitflips from the run seed, and a simulation sweep asserting crash-recovery truncates a torn tail to the last valid frame and never reads corruption as data check-in: 328bc72b78 user: dmestas tags: storage
19:27
Make the README durable: drop the volatile status section, describe zit as a library-first spec port with the spec-as-oracle and determinism design notes, and remove the stale scaffold handoff doc check-in: f6cd3e0da5 user: dmestas tags: trunk
19:25
Split build.zig into one builder function per artifact and thread the storage-engine DST sweep through dst.zig's test aggregation, per the repo layout's per-artifact-builder rule and storage-track-plan section B. check-in: 39e12f9da4 user: dmestas tags: storage
19:23
Rework section 4.1 decode to cap output by capacity, not exact length, and fix ci-lock-fail gating and uvfile deletion to match precise RFC citations. check-in: 94d04ae9f1 user: dmestas tags: trunk
18:29
Cover sync section 9.2.1 announcement and derived-view cards: the nine clause rules for igot/uvigot echo suppression and phantom-free announcement handling, with a named test per rule check-in: 5713138800 user: dmestas tags: trunk
18:28
Re-sync the artifact-format and sync-protocol RFC drafts to the amended cleanroom-verified package: the filed §4.3, §4.6.4, §4 redirect, and §7.4 errata plus the new cleanroom findings (zlib length-field capacity, DATETIME emission form, x-f-l-c cookie login, uvfile deletion discriminator) check-in: 0b8829c917 user: dmestas tags: trunk
17:50
Gate inbound artifact names on hash policy per section 7.7, rejecting SHA1-length names under shun-sha1 before storage while keeping commit-time content verification a separate, unconditional check. check-in: 501c2c7f9c user: dmestas tags: trunk
17:27
Extend section 7.6 SHA3 peer-version-gate coverage to the append-only error path, clone-round-0 discard exception, per-site independence, and the Appendix A.2 worked example. check-in: 19a0981b27 user: dmestas tags: trunk
16:54
Implement sync section 7.5 private-content rules: gate private-card pairing and artifact receipt on the Private capability, force full content when a public artifact's delta basis is private and the peer is unauthorized, and handle private igot HASH 1 replies per section 9.2 without creating phantoms. check-in: f26cb704b6 user: dmestas tags: trunk
16:15
Parse the uvfile/uvigot/uvgimme card grammar and FLAGS bit field per section 7.3, frame uvfile payloads against SIZE with the deletion and omitted-content cases, verify landed content against HASH, and implement the section 9.1.1 uvgimme reply choice and write-permission/status recheck-on-landing for unversioned file sync. check-in: 1cdf73d79f user: dmestas tags: trunk
15:23
Merge the sync protocol layer onto trunk: transport, content transfer with chained-delta completion, authentication, clone, and unversioned-file sync, taking trunk's data-carrying artifact reader and tracking the sync round-2 file-cards test vector check-in: 233d7f03d7 user: dmestas tags: trunk
15:10
Classify unversioned files per section 9.1.1: compute the name-sorted SHA-1 catalog hash, derive the five-way status from mtime/hash comparison, map status 4/5 under revert, and drive local-store and send-table effects (including dry-run suppression) from the mapped status. closed check-in: e91acbe762 user: dmestas tags: sync
14:30
Implement clone per section 8: version-3 clone/clone_seqno cards, NEXT-driven request continuation, and round-0 suppression of login and uv-hash, then wire push/pull/sync project-code cards and the date-gated private-igot suppression from section 9.1/9.2. check-in: 20fa53bd79 user: dmestas tags: sync
13:48
Implement sync section 7 content transfer: file and cfile card handling with phantom creation and deferred delta reconstruction, cascading completion through delta chains to fixpoint so a chained basis never leaves a permanent phantom check-in: 08d2b9b0c1 user: dmestas tags: sync
12:59
Implement sync section 6 authentication: derive NONCE, shared secret, and signature per 6.2-6.4, parse and verify login cards with constant-time comparison, and encode/decode the x-f-l-c cookie form per 6.5, with citation tests and fuzz coverage for malformed wire input. check-in: 9afcd591ee user: dmestas tags: sync
04:09
Merge trunk into the sync branch: bring the working artifact.parse manifest reader and the section 8 delta-manifest reconstruction so sync content transfer and clone can consume received manifests check-in: b3150eb834 user: dmestas tags: sync
04:06
Implement sync section 4 transport and framing: the three Content-Type media facts, request-target and SSH-header rules, redirect handling (19-hop cap, HTTPS-downgrade rejection, path-suffix stripping), the zlib length-prefixed message container, and round/card-boundary detection, rejecting each malformed case the section enumerates. check-in: cc981ab02c user: dmestas tags: sync
01:23
Implement sync sections 3.1-3.3: per-round peer-has/peer-lacks tables, igot phantom creation, gimme eligibility and response disposition, and request-card ordering, per the spec's enumerated cases. check-in: 81895a46ad user: dmestas tags: sync
00:36
Merge trunk into the sync branch: pick up the repostate ArtifactStore and phantom table plus the artifact §5-7 work, so sync's dispatch and phantom-lifecycle clauses can build on the repository-state derivation check-in: 44968d484d user: dmestas tags: sync
2026-07-09
22:13
Implement the section 3.6 cookie card and the section 7.6/12.4 SHA3-256 peer-version gate, factoring the shared single-text-argument card writer out of writeSignalCard. check-in: c9ea7ed5ed user: dmestas tags: sync
21:30
Derive the client round-continuation predicate from the six section 3.7 conditions and encode the section 3.8 five-state client machine, including the nine-cause fatal-error set with its round-0 error-card discard exception. check-in: c0fcf1792d user: dmestas tags: sync
20:48
Add fossilize-escape encoding and wire up sync sections 10.5 and 11, gating send-private on the Private capability, scheduling client-url/req-links once before the round loop versus send-private every round, and dispatching error/message cards per their reset-versus-append and terminate-versus-discard rules including the pull-only glob. check-in: 040aa2f8a4 user: dmestas tags: sync
19:51
Implement sync section 10.3 configuration exchange, covering reqconfig, config card framing, scalar-versus-table group encoding, Fossil quote handling, and admin-gated config push, plus section 10.4 commit-lock pragmas ci-lock, ci-lock-fail, and ci-unlock, with a named test per rule. check-in: 95ecbdc945 user: dmestas tags: sync
19:08
Implement sync section 10 pragmas: the 14-name catalog split by push/pull direction, client and server version encode-parse-record, and uv-hash/uv-push-ok/uv-pull-only upload negotiation as a three-state latch, with a named test per section 10 rule. check-in: d66340e03d user: dmestas tags: sync
18:15
Implement section 5 card framing, whitespace tokenization, the 19-entry operator catalog, and comment timestamp parsing, deriving unknown-operator/malformed-content/bad-command dispositions and their client-versus-server fatality split per section 5's dispatch table, with a named test for each enumerated section 5-r rule. check-in: e7ea34ac4a user: dmestas tags: sync
17:03
Implement classifyTimestamp/isWriterTimestamp per artifact §4.6.4, accepting the five D/E card timestamp forms (date-time, date, time, relative, Julian) and enforcing the JD>0 gate at the resolved -4713-11-24 date-granularity boundary, with one test per enumerated §4.6.4 rule (p1, m1-m9, r1, r3, s1, w1). check-in: 38c40f99ec user: dmestas tags: trunk
15:53
Add seeded deterministic fuzz tests for the delta layer (apply robustness, create/apply round-trip, decodeInt bounds) check-in: b4023330c6 user: dmestas tags: trunk
15:29
Implement the section 4.6.3 reserved-filename predicate and F-card admission sequencing, silently dropping _FOSSIL_/.fslckout matches (whole-string, slash-preceded, or sidecar-stripped) per the three-step procedure while running the section 4.5.2 sort check first so a dropped name never becomes the comparison anchor. check-in: 3d2f9c8f39 user: dmestas tags: trunk
14:57
Implement the section 4.6.2 wiki-name predicate, rejecting each of the five enumerated byte-level violations (leading control/space, subsequent control byte, consecutive spaces, trailing space, length outside 1-100) while leaving bytes >= 0x21 and UTF-8 validity out of the acceptance decision per the spec's note. check-in: c055e511e7 user: dmestas tags: trunk
14:41
Implement the section 4.6.1 simple-pathname predicate, rejecting each of the seven enumerated separator-structure violations while leaving byte content and the writer profile out of the acceptance decision. check-in: 8f699c9878 user: dmestas tags: trunk
14:26
Enforce section 4.5 card occurrence classes and intra-run ordering check-in: 94aaf76a22 user: dmestas tags: trunk
14:26
Re-sync the artifact-format draft to adopt the section 4.3 trailing-backslash resolution check-in: 7524665230 user: dmestas tags: trunk
13:47
Implement §4.4 card-type ordering as a per-letter admit state machine, enforcing non-decreasing lexicographic order and the sole N-after-P exception gated on a prior valid E card, rejecting every other out-of-order sequence including anything following Z. check-in: 3551b12e54 user: dmestas tags: trunk
13:20
Decode the eight §4.3 escape pairs plus the unrecognized-escape fallback, treating a lone trailing backslash as a literal byte per the resolved trailing-backslash ambiguity. check-in: e77d0b5900 user: dmestas tags: trunk
11:35
Tokenize card lines and close the 21-letter card alphabet per section 4.2 and 4.2.2, rejecting out-of-range letters, the five in-range gaps O S V X Y, and any non-SP/LF byte after the letter while splitting arguments on space only per the m1-m3 rules. check-in: f64b9a31bc user: dmestas tags: trunk
11:11
Add section 4.1 artifact framing: the four well-formedness gates, with the trailing-bytes rule deferred to the card loop check-in: 667c55f690 user: dmestas tags: trunk
10:28
Replace the literal-only create() with a hash-indexed encoder that emits copy segments for shared source runs check-in: 97866c6bf6 user: dmestas tags: trunk
01:41
Implement artifact naming per section 3.1-3.6: length-dispatched SHA-1/SHA3-256 name computation, lowercase-only ABNF validation and verify, and case-folding prefix resolution with cross-algorithm ambiguity detection, covering each with the SHA-1 and SHA3-256 worked examples from appendix A. check-in: 310b6b560d user: dmestas tags: trunk
01:12
Reject the masked-high-bit anti-pattern per section 6: treat bytes 0x80-0xFF as unconditional integer terminators in decodeInt, matching conformant encoders that never emit them, and cover the terminator, masking-divergence, opcode-rejection, and encoder-range cases with table-driven tests. check-in: 1fac5484d6 user: dmestas tags: trunk
00:46
Implement create() per section 5 as a minimal conforming producer, emitting the target as a single literal segment plus checksum trailer and rejecting targets at or above 2^32 bytes per section 3.1's integer bound. check-in: d0340902e9 user: dmestas tags: trunk
00:18
Add a header-only target-size query for section 4.1, document apply()'s resident-source requirement for section 4.2, and test section 4 segmentation independence across delta encodings. check-in: bff6c4bbfe user: dmestas tags: trunk
2026-07-08
23:30
Implement delta apply() per section 4, walking header, copy, and literal segments to the trailer and rejecting every malformed-delta case the spec's matrix enumerates. check-in: 5efe913db2 user: dmestas tags: trunk
22:45
Remove placeholder tests and note the sync client is sans-IO check-in: 0f8ce0f0b8 user: dmestas tags: trunk
22:45
Reject base-64 delta integers that reach 2^32 rather than wrapping check-in: 798ee3372a user: dmestas tags: trunk
22:45
Say the RFCs, not fossil, are the source of expected test values check-in: a82aedc9df user: dmestas tags: trunk
21:53
Scaffold zit: Zig project + RFC references + module layout

Fossil-in-Zig, ported from the four RFC drafts (docs/rfcs/). Layout mirrors the RFC layering: delta -> artifact -> repostate -> sync. delta int codec + checksum and artifact naming/Z-card implemented with RFC-derived test vectors; everything else stubbed against its section. Builds clean; zig build test green. See docs/HANDOFF.md. check-in: 0ae7fb2622 user: dmestas tags: trunk

21:43
initial empty check-in check-in: da85dd4acf user: dmestas tags: trunk