Any RW/append ULOG open (ULOGOpen→ULOGOpenIdx, via abc._ulog_open) FAILS with Error: ulog._open failed once the log holds ≥256 rows. ULOGOpenIdx books the on-disk index sidecar at ULOG_IDX_INIT_DEFAULT (4096 B) and ulog_idx_rebuild writes one wh128 per row PLUS a tail sentinel, so n rows → n+1 entries; 4096/sizeof(wh128)(16) = 256, so the 256th row (257th entry) needs the booked sidecar to grow past its init and the "grow on demand via FILEBookEnsure" (dog/ULOG.c:148) does not. mmap READS stay lenient (watermark=byteLength) so status/reads work — only the RW open dies. Wedges be post on any long-lived worktree. Native dog/, shared by be + jab. Sibling of STATUS-003.
jab post 'the state of tickets' in ~/journal (wtlog = 314 rows) →
Error: ulog._open failed at _ulog_open ← append ← postSubs ← postTree (the gitlink-bump ulog.append, be/verbs/post/post.js:513).
_ulog_open OK, 256 rows FAIL. Boundary = ULOG_IDX_INIT_DEFAULT/16 = 256.
be/.be (155 rows) opens fine; journal prefixes 50/100/150/200/250
OK, 300/314 FAIL. A repo row-0 anchor + ordinary put todo/...mkd rows — content-independent, purely the entry COUNT.
ULOGOpenIdx RW path: FILEBook/`FILEBookCreate(book=ULOG_IDX_BOOK_DEFAULT
16MiB, init=ULOG_IDX_INIT_DEFAULT 4096) then ulog_idx_rebuild → ulog_scan_log pushes N row entries + ulog_idx_push_sentinel (dog/ULOG.c:457,439`).
ulog_idx_scan_cap grows with the log
(log_size/16 + 1024, STATUS-003) — that fix covered the ANON cap, not the BOOKED-sidecar init grow, which is this ticket.
journal/.be was also zero-paddedto 16384 B; the ULOG-002 back-scan tolerates that. The 256 cap is the blocker.
ULOG_IDX_BOOK_DEFAULT
(16MiB / ~1M entries) as wh128bPush fills it — a wtlog of any realistic size (10³–10⁵ rows) opens RW and appends.
be post / be put / ingest append succeed on a 256+‑row worktree wtlog.dog/ fix (ULOG.c + the FILEBookEnsure/booked-buffer grow it relies
on); no JS workaround masks it (both be and jab call ULOGOpen).
dog/test/ULOG.c table case thatopens RW a ≥257-entry log. Don't regress ULOG-002 back-scan / close-trim.
FILEBookEnsure (or wh128bPush's grow trigger) not extending the
booked mapping past the init page toward book_size. Verify a booked file grows past its 4096 init up to the 16MiB book; fix the grow, not the init size.
row count (mirror ulog_idx_scan_cap) so the common path never needs a grow.
dog/test/ULOG.c:1476 — stale booked sidecar with >256 rows rebuilds in place on the 4096-init map — landed be89684d.ulog_idx_push_row/rebuild path calls FILEBookEnsure((u8bp)idx, sizeof(wh128)) before each push (dog/ULOG.c:151) — booked sidecar grows on demand toward the 16MiB book — landed be89684d (beagle pin e5071f32).jab post works on the journal/be wtlogs again (e.g. be 1b7c9934 "staged and posted by jab", 2026-07-06); dog suite green with the new table cases.
to row0 + last get/post + uncommitted put/del opens fine and resolves the IDENTICAL tip (validated: journal 314→126 rows, _ulog_open OK, curTip 68e68954648f unchanged, all 124 staged rows preserved) — a temporary unblock that re-hits 256 as the log regrows; the real fix is the booked grow.
be89684d + beagle pin e5071f32 ("ULOG-003: ensure ulog index has the capacity", 2026-07-06): grow-on-demand FILEBookEnsure before each idx push + in-place rebuild of a stale >256-row booked sidecar; repro table case at dog/test/ULOG.c:1476.dog/ULOG.c bug on the RW open path, not a JS issue. The interim wtlog compaction was never applied.