be get diverges from GET.mkd — no fragment pin, no ?<sha> detach, no #~N rewind, no single-file restore, no be get!, and dirty baselined files are clean-overwritten (silent loss)
The be/ JS get handler (verbs/get/get.js) implements clone + branch/trunk switch + per-dir Merkle-pruned reconcile + submodule mount/recursion, but drops most of GET.mkd's URI-slot scheme and one rule is a silent data-loss hazard. parseRemote never reads the Fragment, so a ?branch#sha exact-commit pin and the #~N rewind are ignored; the seed routes a Query sha into resolveRef (branch/heads-only) so ?<sha> detached checkout fails; leaf/reconcileDir depend on a seed-pinned ctx._get, so a top-level path restore (be get file.c) has no context; there is no !/--force path; and a dirty baselined file that upstream also changed is CLEAN-OVERWRITTEN (get.js:343, "v1 clean-overwrites"), neither 3-way merged (the intro's "re-applying uncommitted changes") nor refused. Scope is be/ only (not beagle/); sibling audit of POST is DIS-054. See GET, JS-038; method Issues.
verbs/get/get.js against GET (the reworked 5-slot scheme + CLI cases + RefLog/WTLog + "Forceful execution") found the JS path is a partial implementation; verified by reading get.js/store.js/checkout.js firsthand (not run for every case — trace-level where noted).seedRemote), local store-backed / sibling-wt wiring (file:…/.be?/proj, seedLocal), per-dir Merkle-pruned reconcileDir, write/delete leaf, submodule mountSub + recursion, and a PARTIAL dirty-overlap refuse (dirtyOverlapCheck).parseRemote (get.js:50) reads scheme/host/path/query but NEVER u.fragment; a ?branch#sha exact-commit pin is ignored — the seed always resolves the branch tip via resolveRef. No way to pin a commit.?<sha> detach (GET pt 3 / CLI ?abc1234): the seed routes query→branch and calls resolveRef(branch) (store.js: branch/heads/ only), so a 40-hex query fails → "cannot resolve"; there is no detached checkout and no ?<sha>-query wtlog write.#~N rewind (GET CLI #~1): no ~ handling anywhere — unimplemented (mirrors native DIS-008).file.c, file.c?feat): leaf/reconcileDir are SEED-fan-out-only (they read ctx._get pinned by handleSeed); a top-level be get file.c is not a seed URI, so ctx._get is undefined → no restore (TypeError / no-op). Path-scoped restore is not a user entry point.leaf CLEAN-OVERWRITES a changed baselined file (get.js:343 "v1 clean-overwrites … 3-way weave is the follow-up"); dirtyOverlapCheck (get.js:233) refuses ONLY an UN-baselined overlay (GETOVRL), treating a baselined path as "mergeable" (get.js:239) then overwriting it. So a dirty edit to a baselined + upstream-changed file is SILENTLY DISCARDED — neither merged (the spec's re-apply) nor refused.!/--force handling in get.js or core/loop.js; the documented clean-reset-discard is unimplemented.//host (GET pt 4 / CLI //origin?feat "no network") — SUSPECT (trace-level): parseRemote marks any empty-scheme URI localish (get.js:64), so a bare //origin (authority, no scheme) misroutes to seedLocal with a derived-from-empty store path instead of a cached no-network read. Confirm by running.ok64 — a UX nicety to preserve in any refuse path added here.be/ be get either IMPLEMENTS or LOUDLY REFUSES every GET slot/case it parses — no slot silently no-ops, and (D5) no dirty edit is ever silently overwritten.dirtyOverlapCheck to the baselined case) or 3-way merge it, never clean-overwrite; then D6 be get! as the explicit discard; then refuse-loud (friendly string) for D1/D2/D3/D4/D7 until implemented.?<sha> detach (D2), #~N rewind (D3), single-file restore (D4), the dirty 3-way weave-on-checkout (D5), cached //host read (D7).ok64.be/ (JS ext / JABC) ONLY — do not touch beagle/. Pure JS over libabc+libdog.be/test/ cases per discrepancy (esp. a RED test proving the D5 silent overwrite) before any fix.GETOVRL un-baselined refuse.CODE: human message — hint, matching the existing get throws; no bare ok64.be get //alias?branch against a cached shard before deciding refuse-vs-implement.be/test/get/dirty (a dirty baselined upstream-changed file is not silently clean-overwritten) — landed b5213474.b5213474 "DIS-055: GET spec catch-up" (be, 28Jun).get!/--force — the trailing-! force modifier sheds to --force in core/loop.js (the "DIS-055 D6" arm, loop.js ~276-281).?b#sha), test/get/detach (D2 ?<sha>, full+short hex), test/get/rewind (D3 #~N), test/get/restore (D4 single-file), test/get/cached (D7) — landed b5213474.d80bdb5c TEST-003 "js tests pass").#~N) shares intent with native DIS-008 (also unimplemented) — coordinate the rewind semantics; fix independently, cross-link.be/ get audit (D1-D7; D5 the data-loss priority).b5213474 "DIS-055: GET spec catch-up" (be, 28Jun) implements D1-D5 + D7 with per-case tests be/test/get/{pin,detach,rewind,restore,dirty,cached}; D6 get! force rides core/loop.js's trailing-! arm. String throws preserved. (Related later hardening: GET-040 0092271c untracked-file del-sweep.)