Skip to content
zit Timeline
Login

Timeline

50 descendants and 50 ancestors of bc88457d28c6d62a

2026-07-13
02:44
Merge E2E SHA-1 traversal repair into trunk check-in: 00c9bfbeb9 user: dmestas tags: trunk
02:41
Cover SHA-1 log parent traversal and clarify synthetic fixtures closed check-in: ed9ad33af1 user: dmestas tags: e2e-tigerstyle
2026-07-12
22:34
Merge trunk into CLI branch check-in: b1eb63dd32 user: dmestas tags: cli
22:31
Merge unversioned sync card validation into trunk check-in: cad04c1bb2 user: dmestas tags: trunk
22:28
Validate unversioned sync cards before returning unsupported closed check-in: a273011c3e user: dmestas tags: sync-uvfile
21:16
Create new branch named "sync-uvfile" check-in: 0a9f2d603b user: dmestas tags: sync-uvfile
20:57
Merge trunk into the CLI branch. check-in: 36dcb09fdc user: dmestas tags: cli
20:45
Merge CLI log checkpoint into trunk. check-in: 17a643759d user: dmestas tags: trunk
20:37
Add RFC-backed CLI log ancestry traversal. check-in: b93a63c772 user: dmestas tags: cli
12:20
Merge the sync auth and capability layer onto trunk: capability model, login sender, and private-content receive gates. check-in: 7e8f3e59ec user: dmestas tags: trunk
12:13
Gate private content on the receiver's grant so an unauthorized client discards it instead of storing it, keep a private igot from re-requesting content that will never arrive, and only offer to pull private content when the client holds the capability. closed check-in: 8014f49fbc user: dmestas tags: harden
11:31
Add the sync login sender and gate each request's login transport so the client emits a login only when the peer requires it and never on clone's first round. check-in: 06b938cd87 user: dmestas tags: harden
04:20
Record a check-in from the current contents of the tracked working-tree files — hash and store each blob, mint the manifest on the current branch (a root check-in establishes trunk; a child carries its parent), and advance the checkout to the new check-in. check-in: c174783af9 user: dmestas tags: cli
2026-07-11
19:14
Merge trunk into cli to stay current. check-in: de525f832a user: dmestas tags: cli
19:13
Merge the status verb onto trunk: report tracked, modified, and untracked working-tree state. check-in: ac1d714f82 user: dmestas tags: trunk
19:10
Report the working-copy state under `zit status`: current branch, current check-in (or unborn), and each tracked file as added or missing, without mutating the checkout. check-in: b5d94fcbcf user: dmestas tags: cli
19:08
Add the capability union rule so a successful login only widens a user's established permissions on top of the session baseline and can never clear a granted bit. check-in: 5a5d0517b4 user: dmestas tags: harden
18:38
Merge the sync private-card receiver pending-marker onto trunk. check-in: c072cf17dc user: dmestas tags: trunk
18:34
Track the client receive-side private marker per sync section 7.5: a bare private card sets a per-session pending flag that the next file or cfile card consumes at handler entry to mark its delivered content private, tolerating intervening comment and non-content cards, leaving a repeat set, carrying it across reply bodies within a session but never across the session boundary, and rejecting an argument-bearing private card as a fatal card-arity abort. check-in: 6b69bb3437 user: dmestas tags: harden
17:59
Merge trunk into cli to stay current with the sync reply-dispatch and cfile work. check-in: 3693e0ee0f user: dmestas tags: cli
17:58
Merge the rm verb onto trunk: untrack paths, with honest --hard disk-removal reporting. check-in: ec96046fcb user: dmestas tags: trunk
17:54
Key the rm --hard "deleted from disk" line to each file's real unlink outcome, printing it only for files actually removed and routing unlink failures to stderr so stdout never claims a deletion that did not happen. check-in: 6b4ebc6970 user: dmestas tags: cli
17:53
Merge the full-content cfile reply-dispatch onto trunk so pulled content is decoded, stored, and dephantomized. check-in: 3c4f0fd7ed user: dmestas tags: trunk
17:50
Dispatch the full-content cfile reply card per sync section 7.2, framing its payload strictly by the declared CSIZE byte count, container-decoding the section 4.1 stored blob exactly once, storing the reconstructed bytes under HASH to dephantomize versioned content, and rejecting each malformed-header, over-long-span, and corrupt-container case the spec enumerates while staging the delta form. check-in: 3832e7f7a3 user: dmestas tags: harden
17:18
Add the rm verb: untrack named paths, with optional --hard working-tree deletion. check-in: 9d1cea6386 user: dmestas tags: cli
17:14
Merge the sync client reply-dispatch (cookie record, strict-accept aborts, config framing) onto trunk. check-in: 33e45a9b5b user: dmestas tags: trunk
17:11
Dispatch the cookie, login, reqconfig, and config reply cards per sync sections 3.6, 6.1, and 10.3, storing a received cookie's defossilized opaque value in place of any held one, aborting a login or reqconfig card that only a client may legally send, and framing a config payload strictly by its declared SIZE byte count with its mandatory trailing newline consumed. check-in: 8d70304766 user: dmestas tags: harden
16:18
Merge trunk into cli to stay current with the sync message-card dispatch. check-in: ca2e0c3082 user: dmestas tags: cli
16:17
Merge the add verb onto trunk so working-tree files can be marked for versioning. check-in: afd1cbd7f0 user: dmestas tags: trunk
16:15
Merge the sync section 11.2 client message-card dispatch onto trunk. check-in: 1e54837822 user: dmestas tags: trunk
16:13
Track named working-tree files for the next check-in, normalizing each argument to a repo-relative key and rejecting directories, non-regular files, control files, and paths outside the checkout, idempotent on re-adds, persisting the managed set atomically, with dry-run and quiet modes and per-path partial-success exit codes. check-in: 8d8746e807 user: dmestas tags: cli
16:11
Dispatch the received message card per sync section 11.2, defossilizing TEXT then clearing the latched SYNC_PUSH intent only while push is live and the payload matches the case-sensitive "pull only " prefix, treating every other payload as an advisory that changes no per-session flag and never aborts the exchange. check-in: 0bfc058ee3 user: dmestas tags: harden
15:28
Merge trunk into harden to stay current with the managed-path set and merged fuzz targets. check-in: fab84e5ebd user: dmestas tags: harden
15:26
Merge the sync and logstore fuzz targets onto trunk so the out-of-band runner can exercise them. check-in: 35826e6a0e user: dmestas tags: trunk
15:22
Move the sync protocol (§3.6-§11) and log-store seeded fuzz generators into parameterized sibling targets so each never-crash and round-trip invariant is defined once and runs both as a fixed-seed smoke test and an out-of-band seeded sweep. check-in: c9434d6291 user: dmestas tags: harden
15:14
Merge trunk into cli to pick up the managed-path set that the add/rm/status verbs consume. check-in: 69ff6362db user: dmestas tags: cli
15:11
Merge the per-checkout managed-path set onto trunk so files can be tracked before commit. check-in: f3f18fd6dd user: dmestas tags: trunk
15:08
Add a per-checkout managed-path set so paths can be marked for versioning before commit. closed check-in: afdf028f78 user: dmestas tags: lib-managed-set
14:33
Add the `init` verb: create an empty zit repository in the target directory (creating it if absent), writing a fresh `.zit` content log and an unborn-trunk `.zit-checkout`, defaulting artifact naming to SHA3-256, and refusing when a repository already exists. check-in: 6c591ef91f user: dmestas tags: cli
14:29
Merge the sync send-queue fix onto trunk: persist a per-session outbound send queue so the client records which hashes a gimme requested and can drive a push, per section 3.7(b) and 3.3 check-in: 598c026c11 user: dmestas tags: trunk
14:23
Queue held content for upload on a peer gimme per sync §3.2 and §3.1, resolving the held hash without minting a phantom and driving §3.7(b) continuation from the per-round file-send count instead of the peer-lacks proxy. closed check-in: 2d300e174c user: dmestas tags: sync-fix
13:26
Re-sync the sync-protocol draft: adopt the per-session outbound send queue and the expanded section 9.4 gimme eligibility filters, plus the accompanying pagination check-in: f0befe03c6 user: dmestas tags: trunk
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: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: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
2026-07-10
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
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
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
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: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
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:18
Merge the completed repostate derivation layer onto trunk: tag cross-references and propagation, name and branch resolution, and the section 8.3 resolver, with the grown deterministic-simulation oracle and a gate-sized sweep check-in: 93ecd64c47 user: dmestas tags: trunk
15:17
Shrink the pre-commit DST gate to 6 seeds x 1000 steps so it runs in seconds; the per-step oracle recompute made the former 25x10000 sweep take minutes, so deep coverage now runs out-of-band via --seeds closed check-in: 51a4a56825 user: dmestas tags: repostate
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
15:04
Wire the milestone interop smoke check: confirm zit-produced manifests and deltas against fossil via test-parse-manifest, sha1/sha3sum, content round-trip, and delta-apply, with fossil confirming RFC-cited expectations only check-in: a2e74e5547 user: dmestas tags: trunk
15:04
Implement section 8.3's full name-resolution dispatch (rid:, tag:, tip, root:/start:/merge-in: via the section 8.4 branch-walk, date:/utc:/local: timestamps, hash-prefix matching, and trailing-punctuation retry), section 6.3's branch enumeration, and section 7.5's ambiguous-leaf test and open-leaf listing, then extend the DST oracle with brute-force checks for all four against every replay order. check-in: 79b37fd3b9 user: dmestas tags: repostate
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
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: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
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
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
05:22
Implement plain-name resolution and open-leaf selection per sections 8.2 and 9, splitting branch-tag lookup per section 6.4, and extend the DST oracle and generator to verify both against brute-force scans across every replay order. check-in: a1d8cd5a57 user: dmestas tags: repostate
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
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
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
02:03
Route T-cards through crosslink and apply tag cross-reference direct-write and primary-chain propagation per repo-state section 5, deriving branch value and open-leaf status from the resulting tag state per sections 6.1 and 7.4 with leaf re-evaluation on branch changes per section 7.6, and extend the DST oracle and generator to exercise every tag flavor against those invariants. check-in: d0509719bf user: dmestas tags: repostate
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
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: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
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: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
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: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
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: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
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: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: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
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: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: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
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