JS-083 LOW: shared/checkout.js apply materialises a missing object as empty

checkout.apply's tree walk fetches each leaf's object and, on an UNRESOLVED object (getObject → null), falls back to bytes = new Uint8Array(0) — then writes a zero-byte file AND records a new/upd row anyway. The live verbs/get/get.js:334 leaf does the right thing (if (!obj) return; — skip the leaf, no row). Currently latent because apply is DEAD: it is exported but neither get.js nor patch.js calls it (they use leafUnchanged/materialise/ scanWt). It becomes a real data-integrity bug — silent zero-byte truncation — the moment apply is wired in. Method: Issues.

Input

Context

Goals

Constraints

WIP

Design decisions

TODOs

Blockers and bummers

Outcome