41 ancestors of 94386de81634f246
|
2026-07-10
| ||
| 14:06 | Add create() per section 6/4 as the writer inverse of parse, serializing a Manifest to canonical bytes in strict card-lexical order with a trailing computed Z checksum, and round-trip it against the section A.1.1, A.1.2, and A.3 worked examples plus a seeded fuzz target. check-in: 94386de816 user: dmestas tags: trunk | |
| 13:08 | Rework artifact.parse into a data-carrying Deck-shaped Manifest per section 4: retain every card's decoded data as arena-owned slices the caller deinits, replacing the kind-only verdict, so sync can extract parents and tags and the writer can serialize; finalize owned slices before moving the arena to avoid a used-list capture leak check-in: 0ad398f731 user: dmestas tags: trunk | |
| 04:14 | Cover artifact §9 Security Considerations: pin the draft's normative security requirements to the parser's existing validation with named per-clause tests check-in: 432bab44d5 user: dmestas tags: trunk | |
| 02:10 | Implement the §4 card-loop parser and §5.5/§5 classification pipeline in parse(), enforcing card order (§4.4), single-occurrence (§4.5.1), and the F/J/M/T run ascending checks (§4.5.2) before deriving each artifact's type, and point the fuzz harness at the real pipeline in place of the removed NotImplemented stub. check-in: e2c83d90c9 user: dmestas tags: trunk | |
| 01:07 | Implement delta manifest reconstruction per artifact section 8, merge-walking a delta's F cards against its lazily-resolved baseline to derive the full file set and to answer single-name lookups, rejecting an unresolvable baseline and a delta-of-delta per sections 8.3 and 4.7.3. check-in: e3c65ec661 user: dmestas tags: trunk | |
| 00:28 | Merge the repostate layer onto trunk: the ArtifactStore boundary, RepoState crosslink and leaf-set derivation, and the deterministic simulation harness with its dst build step check-in: 3f205d5a97 user: dmestas tags: trunk | |
| 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 | |
| 00:15 | Add the repostate ArtifactStore boundary and RepoState crosslink linkage with incremental leaf-set maintenance per repo-state §3.1-3.3 and §7.2-7.3, driven by a seeded deterministic simulation that checks the leaf invariant and derivation order-independence every step check-in: 03a9951ec8 user: dmestas tags: repostate | |
|
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 | |