hunk.render: out full on big files — fixed 64KB cap IN C, small base silently TRUNCATESHit 2026-07-30 reviewing //GET-056b: jab diff verbs/get/get.js (82KB file, sizable edit) throws JS exception: Error: hunk.render: out full, exit 1, zero output — the change is unreviewable via the UI. Bare jab diff (hunk-only render) handles the same edit fine, exit 0; scoped jab diff shared/weave.js (12KB) renders fine. The scoped branch renders the WHOLE file with changes highlighted (DIFF-003), so the render buffer scales with file size, not edit size.
hunk.render, which DIFF-010 left untouched; C caps noted there: dog/WEAVE.c WEAVE_FULL_HUNK_MAX.//GET-056b at base ///be/#543269d6 with the staged GET-056b edit to verbs/get/get.js.HUNKu8sFeedLineBased (jab/dog/HUNK.c:1309) assembles the unified body in its OWN heap side buffers with hard-coded caps — u8bAllocate(body, 1<<16) (64KB) and 4KB each for dels/adds/oldb/newb (:1355-1360). The caller's into never nears its limit: a 64MB JS out buffer still throws (probed), so JS-side grow-and-replay CANNOT cure it.u8bFeed into a full side buffer returns SNOROOM; the jab binding stringifies EVERY non-OK as hunk.render: out full (same masking as DIFF-015).dels/adds (u8bFeed1(dels,'-'), u8bFeed(dels,ob) … ~:1377-1414) are BARE, not call(u8bFeed…) — all-or-nothing feeds whose refusal is dropped, so once a 4KB region buffer fills mid-region the remaining lines vanish and the render exits 0 (measured: 66 of 1530 + lines on a tiny-base/big-target). Exactly the unchecked-feed hazard meta/abc.mkd §slices forbids.a_carve/gauge per ABC policy, not a bigger fixed cap) AND make every region feed checked so a genuine overflow refuses loudly instead of truncating.bro_classify_lines bit-26 provenance + washes) is also libdog-todo — one libdog pass should take both.//BRO-042/scratch/ (click.py, measure.js, wt/wt2).//DIFF-019-jab (base ///jab/#e5367428), staged: dog/HUNK.c, dog/test/HUNK.c. Not landed.a_carve scratch (frees gone, dies at the binding's bass bracket); EVERY feed checked call(u8bFeed…) so real overflow refuses loudly for the JS grow-on-full to catch.hunk_flush_region's 4096-entry pairing arrays dropped overflow lines — an oversized region now emits its raw -/+ runs whole, skipping only the cosmetic pairing.out full exit 1 → full 1542-line render exit 0 (orchestrator-replayed independently: 1534 lines, exit 0); 3→1530-line diff 72/1530 + lines → 1530/1530.dog/test/HUNK.c lb(b) regolded to the new contract + new leg (c) (>4KB region, 1200 + lines); C ctest 106/106; JS diff+patch+status 59/59 with the new binary incl. 12-large-fold-grow.DIFF-019: content-size hunk render buffers, checked feeds//DIFF-019-be (base ///be/#fb1fb19c), staged: views/diff/diff.js
(per-record grow-and-replay renderRecord, seed max(64KB, 4x record) double to 256MB cap;
over-cap → loud stderr warning + windowed emitDiff re-fold, exit 0; all records render
before any emit so a degrade never appends to a partial body), new
test/diff/22-large-scoped-full-render (both Goal legs). Not landed.//DIFF-019-jab binary;
worker's full run diff+patch+status+commit+bro 83/83; 94KB scoped diff exit 0, 1500/1500
lines both signs; forced 16KB cap degrades loudly, exit 0.DIFF-019: grow-on-full hunk render, degrade to windowed hunksview/bro.js:785/:848 still render into fixed buffers (same class);
a fallback render over the cap still throws (implausible: 256MB vs the 4MB source cap).