be get leaves an empty be/ dir, and every be/jab run recreates a <wt-basename> -> <abs-wt> self-symlink instead of be -> .
beagle-ext is located by a self-symlink named be at the project root, so jab resolves the extension via its upward be-scan (beagle/js/require.cpp). That locator is mis-created two ways, and is correct ONLY when the worktree directory is itself literally named be (the canonical main tree, where the basename rule coincidentally yields the right name). (1) be get of beagle-ext materialises be as an EMPTY DIRECTORY, not the symlink — repro: be get file:/home/gritzko/.be/?/beagle-ext into a dir NOT named be (e.g. /tmp/x/ZZZ) leaves an empty ZZZ/be/, no self-symlink. (2) Every subsequent be/jab run in the worktree (re)creates a symlink named after the WORKTREE BASENAME with an ABSOLUTE self-target — verified: in ~/todo/DIS-057, removing DIS-057 -> /home/gritzko/todo/DIS-057 by hand and running be status recreates it. The fallout: in any worktree NOT named be, the be locator is broken, so jab falls back to the stale global /tmp/be -> ~/journal/be and runs the WRONG (main-tree) be/ scripts — which masked DIS-057's status changes during review (the bro-pager colour thread). Scope: beagle C core (be/jab runtime + be get checkout). See CLAUDE; method Issues.
<wt>/be is a self-symlink (name be, relative target so <wt>/be/... == <wt>/...) so the project is locatable as the be shard. The main tree has be -> be (works only because that dir is named be).be get …?/beagle-ext writes be as an EMPTY DIR. Repro into a non-be-named dir → empty be/, no symlink. Likely sniff/GET.c checkout mis-handling the be tree leaf (a tracked symlink blob, or an empty-tree placeholder the runtime should fill).be/jab invocation recreates <basename> -> <abs-wt> (e.g. DIS-057 -> /home/gritzko/todo/DIS-057). Repro: rm the link, run be status, it reappears. The locator name is taken from the worktree dir basename + an absolute target, not the fixed be + relative ..jab's upward be-scan can't find a usable <wt>/be, so it resolves to the stale global /tmp/be -> ~/journal/be and runs main-tree be/ code — interactive jab status in a worktree silently runs the WRONG scripts (root of the DIS-057 "no colours" confusion; see BRO-010).be a TRACKED symlink blob (→ Bug A is a checkout defect) or a runtime-created locator (→ one naming bug with two faces)? Resolve by reading the beagle-ext tree's be entry mode + the runtime self-link creation site.be pointing at the project root (relative), created/maintained correctly by be get and not clobbered into a basename-named absolute link on later runs.<basename> -> <abs-wt> symlink is ever created; no empty be/ dir is left by be get.jab's be-scan resolves the LOCAL worktree's scripts, never the stale global /tmp/be.be/jab in a real worktree recreates the bad link — do not repro in a live ticket worktree).be/ tree (named be), where the locator currently works.be (the shard/locator name), never the worktree dir basename; target relative (. or be) so it is path-independent.be get checks out the tracked be symlink verbatim, OR a single runtime step ensures be -> . idempotently — not both, and never a <basename> link.sniff/GET.c) and the runtime self-link creator (Bug B — the dispatcher / shard-mount that runs on be status).sniff/GET.c:223-252 now materialises a top-level be gitlink as the relative self-symlink be -> . (FILEUnLink + FILESymLink ".", WALKSKIP — no sub-mount, no empty dir). Landed beagle b24446c0 (+ be JS f0269b27).be as a gitlink: SNIFFSubIsMount (sniff/SUBS.c:1121) NOFOLLOW-lstats the mount point — a symlink is never a mount, so PUT/POST no longer commit be as 160000. b24446c0.test/get/* case asserts be get …?/beagle-ext into a non-be-named dir yields the be -> . symlink (fix is code-only so far).<basename> -> <abs-wt> link): audit 2026-07-07 found NO remaining runtime creator (FILESymLink sites are only GET.c:175/244 checkout + PATCH.c:209) — but the recreate-on-be status repro was never re-run/pinned; verify + close or repin.jab status in a non-be-named worktree loads the LOCAL scripts (not /tmp/be) — per GET-041 (2026-07-07) jab still self-hosts/mis-resolves during clone, so this remains RED end-to-end.be/ tree./tmp/be -> ~/journal/be is a separate dev convenience that this bug makes load-bearing; once the local locator works, jab should prefer it. Note any /tmp/be interaction.be locator was broken). Two faces (get-time empty dir + run-time basename link); same fix family (fixed be name, relative target).b24446c0 + be f0269b27 "GET-036: symlink handling" — checkout materialises be -> . (sniff/GET.c:223), SNIFFSubIsMount never treats a symlink as a mount (sniff/SUBS.c:1121). Open: repro tests, Bug-B verification, and the end-to-end jab local-script resolution (now under GET-041).