PATCH-012: 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 side

Now
DONE

verbs/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.

Input

Context

One weave out of four never got the retry, and its failure mode is silent data loss rather than a refusal.

Goals

Make get's merge grow like every other weave, and make a failed merge LOUD rather than silently ours.

Constraints

The cap must not become a silent truncation, and the retry must stay in one place.

WIP

Design decisions

TODOs

Blockers and bummers

Outcome