Reproduce the three reflog-WRITE verbs — be put, be delete, be post — as bin/{put,delete,post}.js, output-equivalent to native, the way JS-027 did status and JS-038 did get. PUT/DELETE append intent rows (the wt .be ULOG + the keeper refs ULOG); POST consumes them to build a tree+commit, write a keeper pack-log, and FF-advance the ref. libabc+libdog ONLY — keeper/graf/sniff stay unlinkable, reimplemented in JS. Method: Issues.
POST's prerequisite (POST commits their staged set). Native: sniff/PUT.c, sniff/DEL.c, sniff/POST.c; store keeper/REFS.c, format keeper/KEEP.h.
be put ./f && be post '#msg'. Two prior write precedents exist in JS: get.js::writeWtlog/appendWtlog and ingest.js::writeUlog.
bin/put.js/bin/delete.js/bin/post.js byte-equivalent to native on the
LOCAL path (rows, file mtimes, REFS, banner); shared bin/lib/* writers.
io.setMtime over a new abc/FILE utimensatwrapper (JS-047). Everything else is pure JS over the bound abc/dog surface.
rebase/merge (non-FF advance, absorbed-patch "theirs" trees, the cascade).
//remote) deferred; the local path lands first.classification, the wire convo all reimplement in JS (the get/status pattern).
(sole future escape: a pure-JS WEAVE rebase over the already-bound dog/WEAVE).
ea9de45b+4fd1d639.3ce8aee5.e6e47128.e0f79ff0.032debec.(audited 2026-07-07).
be/ shard (08a58be0 dropped the
beagle bin/ dup): today be/verbs/{put,delete,post}/*.js + be/shared/{stage,conflict,ulog,store}.js; parity suites in be/test/{put,delete,post} (put 10 cases, delete 8, post 10).
tickets; the wire push (//remote) landed separately via GIT-019.