beagle/test/get store-internals cases to the JS jab get (be/test/get)
The be/test/get JS suite has 4 transport cases (be/file/git/traversal) that assert WORKTREE+stdout+be status PARITY (native vs jab) and deliberately EXCLUDE .be (the JS clone writes a byte-different store). 10 native cases instead assert ON the .be store layout itself — flat shards, peer-URI ref rows, anchor-file shape, no escape. Port those 10 as jab-driven STRUCTURAL store-layout assertions, triaging each: a real assertion where jab get owns the path, a documented N/A (+ split ticket) where it only exercises the C keeper/dog layer jab reuses. Method Issues; harness getcase.
26-cached-no-wire, 26-remote-shard-refs, 39-be-pathless-project, 40-no-ancestor-wtlog-escape, 43-home-bound-no-escape, 44-file-subs-parent-no-getrow, 48-walk-dot-be-quiet, 54-file-project-selector}`.
beagle/test/lib/case.sh and asserts on .be/
(shard dirs, refs rows, wtlog anchor bytes) — NOT a parity diff.
be/verbs/get/get.js (SEED → fan-out reconcile); store writes go
through be/shared/{store,ingest,ulog,wire}.js. parseRemote classifies file:/scheme-less/keeper+local as localish; remotes go seedRemote.
tree_eq: the JS clone does NOT
write ..be.idx and lays a different .be; so these ports CANNOT be byte parity on .be — they are STRUCTURAL invariants (shard exists, row carries //host, .be is a FILE, no remotes/ dir) checked against jab's store.
be/test/get/<name>/run.sh that drives jab get and
asserts the native case's store-layout invariant against jab's .be.
jab get does not own the path (pure C keeper/dog, or a form jab
doesn't implement yet), DON'T fake it: document N/A in the ticket with the reason, split a follow-up ticket, and either omit or register WILL_FAIL.
be/test/lib/storecase.sh (sibling to getcase): resolve jab+be,
hermetic scratch + .be firewall, helpers to inspect .be (shard/row/anchor).
be/test/CMakeLists.txt (glob already picks up
get/*/run.sh); xfail entries go in _BE_WILL_FAIL.
CLAUDE.md §17): write the JS case, RUN it, observe
what jab actually writes, THEN decide port-vs-N/A. No guessing.
beagle/ (native). Work only in the be/ worktree + its test
sub. jab/be come from the prebuilt ~/journal/beagle/build/bin on PATH.
- 54 file-project-selector — PORT. Directly tests parseRemote ?/proj shard selection + tip; jab get file:<wt>?/sub → only sub.c, sub's tip. - 26-remote-shard-refs — PORT. ssh clone → assert .be/<proj>/refs carries //localhost, no <proj>/<ref> leaf shard, no remotes/ dir. - 48 walk-dot-be-quiet — PORT. clone a tree with a committed .be entry → real.txt out, jab's checkout/walk emits no bad path '.be' spam. - 40 no-ancestor-wtlog-escape — PORT (adapt). jab get from a fresh subdir writes its OWN .be FILE anchor; ancestor .be/wtlog byte-identical. - 25 remote-shard — ADAPT/xfail. Native writes the shard BEFORE the (failing) fetch; seedRemote fetches first → writes nothing on wire-fail. Port the SUCCEEDING-clone layout arm; the pre-fetch-shard arm is a jab gap → split. - 26-cached-no-wire — N/A→IMPL. //host?ref cached form is unimplemented in parseRemote (treats empty-scheme as local). Split a jab cached-form ticket. - 39 be-pathless-project — N/A. keeper://local?/proj empty-path local-exec is a C keeper(WIRECLI) path jab doesn't run; document + split if wanted. - 44 file-subs-parent-no-getrow — N/A here (SUBS). Sub-source candidate ordering lives in subs.js; route to a SUBS ticket, not this one. - 21 nosub-local-refs — N/A. Asserts the native keeper upload-pack SERVER doesn't rewrite refs; jab reuses that binary — nothing JS to assert. - 43 home-bound-no-escape — N/A. dog/HOME.c walk-up ceiling via strace on be status; C dog-layer, not jab get. Out of scope.
N/A with split tickets. The agent MUST report the actual repro outcome, not this estimate — a "N/A" that turns out portable should be ported.
be/ worktree (see Blockers; recipe re-check needed —the 2026-06-28 one predates the JAB-001/TEST-003 reshuffle).
be/test/lib/storecase.sh (jab+be resolve, hermetic .be firewall,
.be-inspection helpers); model env wiring on be/test/lib/getcase.sh.
be/test/get/file-project-selector/run.sh.be/test/get/remote-shard-refs/run.sh (ssh, WITH_SSH-gated skip).be/test/get/walk-dot-be-quiet/run.sh (blocked red by JS-097).be/test/get/no-ancestor-escape/run.sh.//host?ref form has since been IMPLEMENTED
(DIS-055 D7; be/test/get/cached exercises it) — port the store-layout assertions against it instead of splitting an impl ticket.
split follow-up tickets (GET/SUBS/JS) where a real jab gap exists.
be/test/CMakeLists.txt; xfails into _BE_WILL_FAIL
(be/test/CMakeLists.txt:29; currently EMPTY — the glob auto-adds get/*/run.sh cases).
jab; STOP at the commit boundary,report root-cause/triage table/test results for the human gate (no commit).
?/be recipe is STALE — the
shard is beagle-ext, and a pre-made empty .be triggers SNIFFFAIL): mkdir $HOME/todo/JS-096 && cd $HOME/todo/JS-096 && PATH=$HOME/journal/beagle/build/bin:$PATH be get "file:$HOME/.be/?/beagle-ext" — fresh dir, NO pre-made .be; checks out all of be/ (62 ok) and recurses the test sub (mounts test/.be). Never pipe be get to head (SIGPIPE truncates the checkout).
localhost; SKIP (exit 0) when absent — mirror getcase.sh's SKIP guards.
isolated beagle-ext worktree at $HOME/todo/JS-096 — NO port has landed.
be/test/get/ still carries none of the 10 ports and no
storecase.sh (cases there: be/cached/detach/dirty/file/git/http/oddname/ pin/restore/rewind/traversal); all 10 native source cases still exist under beagle/test/get/. One triage line went stale: the cached //host?ref form landed with DIS-055 (see the retriaged TODO). JS-097 (the 48-port blocker) is also still open.