Skip to content
zit Timeline
Login

Timeline

34 ancestors of d4aeb4260286bed5

2026-07-10
00:23
Add the section 7 hash-policy primitives: table 7 encode/decode, default-policy derivation, set-time auto coercion, the write-time auto-to-sha3 ratchet, and alternative-first dedup naming, each with worked-example tests. check-in: d4aeb42602 user: dmestas tags: trunk
2026-07-09
22:41
Compute the R card aggregate content checksum per section 6.3 as MD5 over each tracked file's name, minimal-decimal size, and content in canonical filename order, and pin the digest token grammar and Z card self-checksum boundary cases from sections 6.1 and 6.2 with worked-example tests. check-in: f0f90cfa39 user: dmestas tags: trunk
22:07
Implement section 5 structural artifact type codes, card legality, type determination, and per-type semantic checks, rejecting artifacts with disallowed, missing, or contradictory cards. check-in: 1e1014f5ce user: dmestas tags: trunk
21:33
Parse W and Z cards per section 4.7.18 and 4.7.19, closing section 4.7's per-card grammars: W's byte-counted body bypasses tokenization and rejects overflowed, truncated, or misterminated sizes, while Z validates its single 32-hex checksum token. check-in: bbc02df9cd user: dmestas tags: trunk
21:03
Parse R, T, and U cards per artifact §4.7.15-4.7.17: R's single aggregate-checksum token, T's sign-prefixed name with hash-or-star target plus self-referential-tag and hex-remainder rejections, and U's single user-name token check-in: 3754cfd147 user: dmestas tags: trunk
20:24
Extend delta fuzz coverage to synthetic source/target buffers at or above 2^32 bytes, asserting create rejects them with TargetTooLarge instead of overflowing, per section 3.1's integer-width bound. check-in: 641ace071d user: dmestas tags: trunk
20:02
Give the artifact card grammar the same seeded fuzz coverage as delta

artifact_fuzz.zig adds seven parameterized targets registered in fuzz_tests.zig: parse() on raw garbage, a structured generator that dispatches through all sixteen parseXCard entry points, tokenizeCardLine, decodeEscapes, classifyTimestamp, the frame/stripSignatureWrapper/ verifyZCard trio, and the pathname/wiki-name/reserved/compare predicates. artifact.zig gains matching fixed-seed inline blocks plus a parse() allocation-failure test, mirroring delta.zig's existing fuzz section. check-in: e46e97cb76 user: dmestas tags: trunk

19:55
Wire up a seeded fuzz build step and give apply() and targetSize() fuzz coverage

Add zig build fuzz, dispatching to named seeded targets in fuzz_tests.zig via a tuple->FieldEnum table, plus bench/smoke stubs that fail until those milestones land. delta_fuzz.zig parameterizes the existing apply/create/ decodeInt property checks by seed and round count for an out-of-band runner. delta.zig gains an allocation-failure test for apply() mirroring create()'s, and a targetSize() garbage-never-crashes block. check-in: c4c4ad80d1 user: dmestas tags: trunk

19:46
Implement M card parsing per section 4.7.11, N card per 4.7.12, P card per 4.7.13, and Q card per 4.7.14, enforcing raw-hash validation on M/P/Q, escape-decoding the N mimetype with no syntax check, accepting a zero-token P card as the root check-in's empty parent list, and leaving an omitted Q baseline null rather than resolving it to the primary parent. check-in: 87140fdbbe user: dmestas tags: trunk
19:19
Implement G/H/I card parsing per section 4.7.7, J card per 4.7.8, K card per 4.7.9, and L card per 4.7.10, enforcing raw-hash validation on G/I/K, the wiki-name predicate on L, and the empty-string-not-null absent-value rule on J. check-in: b9d6aba516 user: dmestas tags: trunk
18:50
Implement B, C, D/E, and F card parsing per sections 4.7.3-4.7.6, validating each raw hash and timestamp field, escape-decoding comment and filename positions, and classifying F-card permissions into regular, executable, and symlink modes per section 4.7.6. check-in: 680d9db167 user: dmestas tags: trunk
18:09
Implement A-card parsing per section 4.7.2, retaining only the final path component of the filename, accepting a hash- or wiki-name-shaped target, and validating an optional source as a raw never-decoded artifact hash. check-in: 4590e5647e user: dmestas tags: trunk
17:39
Implement the §4.7.1 hash-token validation map, gating artifact-hash, K ticket-id, and R/Z checksum tokens on their distinct length and case-sensitivity rules without escape-decoding the raw wire bytes. check-in: 48a1de436d user: dmestas tags: trunk
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