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`.
bug), GET-036, GET-037, GET-038, DIS-058, JS-075/079. All 13 are NEW.
regressed to the old tip; case 58 jab wt = peer's sibling; case 09 jab wrote <<<<dirty||||-feat>>>> into an uncommitted file.
file:line, and the native oracle behavior it must match.
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 theregression gate (parity vs native, the JS-096 harness model).
- JGET-002 CRIT no fast-forward/ancestry gate → clobbers committed local commits (cases 27/28/58); 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 agit-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.