bin/post.js + decide/commit/conflict — the commit-maker
be post as JS: classify the staged change-set into keep/unlink/add decisions, build the git tree + commit object, write a keeper pack-log (+ idx), FF-advance the ref, append the post row + restamp the files. FF-or-refuse — NO rebase/merge. ← JS-047+JS-048. Part of JS-046. Method: Issues.
sniff/POST.c: 5-way merge → decisions (post_classify_step :440),
bottom-up tree build (post_build_tree :789), commit body (tree/parent/author, git-strict order), pack feed (:2929), REFS CAS (REFSCompareAndAppend), post row + file restamp (:3228). Conflict pre-scan before any write (POST-017).
git.pack.book/feed/finish (bound); idx via
ingest.js::buildIndex (pure JS, transfers whole).
bin/lib/decide.js: keep/unlink/add per path (extend classify.js's merge);
bin/lib/commit.js: tree+commit framing + pack-write + idx; conflict.js: the WEAVE-marker scan. bin/post.js: orchestrate, FF-or-refuse, the post: banner.
native rebases/merges — non-FF advance (POSTNOFF), absorbed-patch "theirs" trees, and the descendant cascade are out of scope (error, don't handle).
(POST-017) — no orphan packs / half-written idx.
absent (no patch) → a present patch row throws (out of scope).
after committer) — byte-exact or git fsck rejects the object.
test/js/post/*: be put ./f && be post '#msg' → JS post
vs native: identical commit sha, REFS row, wtlog row, banner; empty-commit POSTNONE; non-FF POSTNOFF (throws, no store write). (Now be/test/post/*, 10 cases incl. agree/refuse/conflict/move/slots.)
032debec; landedas fold-decide.js/fold-commit.js + shared/conflict.js.)
032debec (bin/post.js + decide/commit/conflict, FF-or-refuse).
Today at be/verbs/post/{post,fold-decide,fold-commit}.js + be/shared/conflict.js (beagle-ext shard); parity suite be/test/post/*.
be/test/post/patch-absorb,
patch-pat) under later tickets; writePack pairs every pack with an idx run via ingest.buildIndex (fold-commit.js:192) — its run-name collision is JS-099. Audited 2026-07-07.