jab get differential-vs-native bug batch (13 defects)A differential probe of jab get (the JS be get, be/verbs/get/get.js + be/shared/*.js) against native be get as oracle, retrofitting all ~54 untouched beagle/test/get cases (the JS-096 test-port follow-on), surfaced 13 NEW defects — 3 of them SILENT loss/corruption of committed or uncommitted user work (verified from evidence). The current get.js DOES implement in-worktree forms (inRepoSeed) and recursive submodule mounting (submount.js), so these are real-code bugs, not no-ops — which also makes DIS-058's "JS get never descends a sub" and parts of JS-096's triage stale. Method Issues; one child ticket per defect, grouped by disjoint file ownership.
be oracle vs jab
get on the same form); evidence under ~/todo/JS096-probe{1,4},
~/todo/JSGET-cases, /tmp/claude-1000/jabprobe.<<<<dirty||||-feat>>>> into an uncommitted file.CLAUDE.md §17). No hand-rolled URI parsing — fix via the URI
binding / parseRemote. Keep changesets file-disjoint where possible.beagle/test/get assertion into be/test/get as the
regression gate (parity vs native, the JS-096 harness model).get.js seed*/fanoutWholeTree, no dag.aheadBehind.
- JGET-003 CRIT be get ? (trunk switch) records the WRONG branch → next
be post rewrites that branch's history; get.js:423-429.
- JGET-004 CRIT dirty cross-branch switch writes conflict markers into the
uncommitted file + grows wtlog (case 09); dirtyOverlapCheck get.js:328.
- JGET-005 HIGH wrong branch fetched for any non-main/master name (case 24);
pickWant wire.js:107 builds refs/<b> not refs/heads/<b>.
- JGET-006 HIGH a pre-existing empty .be/ dir crashes jab get (the
hermetic-shield shape); discover.js find() + get.js:128-134 + seedRemote.
- JGET-007 HIGH sub fetch by EXACT PIN fails when pin≠advertised tip;
submount.js:128-138 (no branch-fetch+history-resolve fallback).
- JGET-008 HIGH sameSourceUri emits malformed ssh:////host;
submount.js:121 uses u.authority (already //-prefixed) not u.host.
- JGET-009 HIGH grandchild sub title from the WRONG .gitmodules → HOMENOPROJ
(cases 31/45); depth-2 reads the parent top-level .gitmodules.
- JGET-010 MED path-vs-branch misroute (cases 34/33/04); restorePath
get.js:390 runs before the branch/detach branches (see DIS-017).
- JGET-011 MED parseRemote srcRoot misderive (cases 29/55); get.js:96-101.
- JGET-012 MED relative sub url ../sub not resolved vs parent source
(case 50, SUBS-020).
- JGET-013 MED --force leaves a tracked orphan (case 49, GET-016).
- JGET-014 LOW same-line weave: jab cnf/rc=1 vs native mrg/rc=0, and
ours/theirs SWAPPED (case 66).be/test/get gate (spec-based since TEST-003 — native is no longer the oracle).refs/<b>), 006 open (seedLocal face), 007 PARTIAL (local half landed d80bdb5c); 008/009 DONE (SUBS-047)..be-FILE half landed via GET-038/DIS-058), then LOW (014 — premise needs a spec ruling, see the ticket).be/test/get/dirty (d80bdb5c pins weave + loud-conflict) — the native-refusal/native-mrg oracles are retired.be leaked a .be/srcgit shard into ~/.be during a
git-source oracle clone — prune it..be crash) masks many submodule/clone cases (the native
harness pre-creates wt/.be), so it gates clean repros for several children.be from be/test ("LAGS jab") — every "parity-port vs native" TODO in the children is now a spec-gate TODO instead.be/test/submount.js); JGET-007 local-source half landed (SUBS-046, d80bdb5c); JGET-011 .be-FILE-redirect half landed (GET-038, in the DIS-058 changeset da7fa5a7); the rest re-verified still present in be/verbs/get/get.js / be/shared/wire.js.