get's 3-way weave has NO grow-on-out full retry (the only weave without it) — a big file throws, silently stays at OURS, and the next commit REVERTS the incoming sideverbs/get/get.js:926-943 hand-rolls weave3 with FIXED caps — abc.ram("WEAVE", 1<<18) for each of the four folds, 1<<19 for the merge, io.buf(1<<20) for the render — and never catches the binding's out full throw. Every OTHER weave in the tree grows and replays (DIFF-010): core/loop.js:71-85 doubles the cap and re-feeds the held records, shared/weave.js carries that retry for PATCH's per-file merge (patch.js:44-46), and views/diff/diff.js:29-30 mirrors it. So a be get that must 3-way merge a large dirty file throws out full mid-reconcile and the leaf is LEFT AT OURS — the update reports done, the incoming side is silently absent, and a post on top records a commit whose parent claims the incoming changes while its trees revert them. Hit live 2026-07-16: updating work/DIS-072 from af94f0ea to fec59ed5 left verbs/post/post.js (~35KB), verbs/get/get.js, views/refs/refs.js and views/status/status.js at ours; the resulting e74ae263 (parent fec59ed5) carried DIS-074:0/DIS-075:0 markers where its own parent has 5/2 — it REVERTED two landed tickets while the log claimed them. gritzko rolled it back. Same failure CLASS as DIS-041 (a weave that bails leaves the file UNMERGED); that one fixed the graf-index path, this one is the cap path.
One weave out of four never got the retry, and its failure mode is silent data loss rather than a refusal.
weave3: wo0/wo1/wt0/wt1 = abc.ram("WEAVE", 1<<18), wm = abc.ram("WEAVE", 1<<19), out = io.buf(1<<20) — all fixed, no try/catch, no grow.if (!("" + e).includes("full")) throw e; → double the cap, replay), shared/weave.js (patch's), views/diff/diff.js:29-30.shared/weave.js; get.js requires nothing of the sort — it is the odd one out.con row, no refusal).post on top then commits ours-over-theirs with the incoming commit as PARENT — the history lies, which is how e74ae263 passed review by three separate green suites.idxmaint: Error: pack.scan: scan (out full? corrupt?) on a big clone the same day (shared/idxmaint.js) — likely the same cap class in the pack scanner, needs its own repro.Make get's merge grow like every other weave, and make a failed merge LOUD rather than silently ours.
shared/weave.js, do not hand-roll a fifth weave.con row / non-zero exit), never leave the leaf at ours and exit 0.be get to a tip that also changed it → the merge lands (or refuses); assert the leaf is NOT silently ours.io.buf(1<<20) render, and shared/idxmaint.js's pack.scan.The cap must not become a silent truncation, and the retry must stay in one place.
shared/weave.js / the loop.js:71-85 idiom — ONE retry implementation, not a copy (/meta/abc: reuse before you add).MAX_SOURCE_SIZE = BLOB, buffers sized once at MAX_SOURCE_MARKED_UP 16MB lazy mmap; growOnFull is gone tree-wide) — get.js adopts THAT, no grow-and-replay resurrected.out full) → merged=null → con row + durable wtlog con + g.conf++ → existing GETCONF throw → non-zero exit. Never silent-ours+0.test/get/dirty-big/run.sh (be-js-get-dirty-big) — A: con row); pre-fix code fails A with weave.fold: failed (out full?)fold/merge; render via io.ram(MAX_SOURCE_MARKED_UP) (patch.js:198's sink); all abc.ram("WEAVE",…) + io.buf(1<<20) caps deletedverbs/patch/patch.js:366 outBuf/aliveBuf io.buf(1<<20) are DEAD (never referenced) — delete-worthy, own ticket; pack.scan (jab.be/pack.hpp:289) is a count-trusting class, shared/ingest.js buildIndex/indexAppended do NOT catch it — ticketed as PACK-003be get: no fixed-cap defect (dynamic WEAVEInit + growable u8b) BUT shares the OUTCOME class — sniff/GET.c:816-821 merge failure → stderr + failed count, leaf at ours, :860 returns OK → exit 0, no con row (DIS-041 class, live natively) — needs own tickettest/get/NEWCASE_mytest.txt ("SUB-UNTRACKED") is committed junk in the beagle-ext-tests tip (rode a salvage commit); not touched here, needs its own removal.e74ae263 silent revert, rolled back by gritzko).work/PATCH-012 (uncommitted): 3-hunk get.js diff + new test/get/dirty-big/run.sh; suite 242/242 green (orchestrator re-ran). Awaiting review/land order.cde00857 (2026-07-16, "PATCH-012: better error handling").be get silent-ours sibling and verbs/patch/patch.js:366 dead buffers were left for their own tickets; pack.scan is PACK-003.