Beagle SCM
JS-103: ULOG write paths drop URILexer's ok64 and bypass the DOGCanonURI chokepoint
Proposed by the 2026-07-07 jab multi-agent review; confirmed by both skeptic verifiers, including a live repro: a malformed URI is silently written truncated into the append-only log.
Input
Context
- JABCulogFeed (jab ulog.hpp:62-64) and JABCulogAppend (ulog.hpp:285-287) call
URILexer(&rec.uri) and drop the ok64 result; uri.cpp:68 throws on the same failure.
- Live repro:
abc._ulog_append(h, 100n, "post", "http://ho st/path") throws nothing and writes row 1_\tpost\thttp: — _ulog_rowUri later returns "http:", a silent round-trip corruption in an append-only log.
- dog/INDEX.md names DOGCanonURI/DOGCanonURIFeed (dog/DOG.h:387,396) the chokepoint every ULOG/REFS writer uses; jab's writers skip it, so JS-written rows are not canonicalised like C-written rows.
Goals
- Repro first: malformed and non-canonical URIs through _ulog_feed/_ulog_append.
- Throw on URILexer non-OK; route both writers through DOGCanonURI/DOGCanonURIFeed so JS and C rows canonicalise identically.
Constraints
- Append-only log: the fix must not reinterpret rows already written by the buggy path.
WIP
TODOs