be launched as a BARE name (argv0="be", no /) resolves via PATH in dog/HOME.c (the bare branch of HOMEResolveSibling, ~l.1054-1084) but looks for the sibling helper (sniff) beside the PATH entry (entry_c), never realpath-ing the found executable. When that be is a symlink into the real bin dir, sniff isn't beside the symlink → home_try_sibling fails → the fallback feeds bare sniff → FILESpawn/execvp fails ENOENT (BEDOGEXIT). The rel/abs branch already realpaths argv0 first (SUBS-022 453c55c2); the bare branch is the residual. Method Issues.
--output-on-failure (test be-post-relpath.sh`, the SUBS-022 repro).
and BARE name. REL+ABS pass; the [bare] arm fails: FILESpawn: exec 'sniff' failed: errno=2 → Error: BEDOGEXIT.
dog/HOME.c:1080 calls home_try_sibling(out, entry_c, name)
on the raw PATH directory entry; the matching exe (be) is not realpath'd, so a symlinked/relinked be loses the real bin dir that holds sniff.
unrelated to sniff/" — this ticket is that residual.
[bare] arm of be-post-relpath passes; the sibling helper is foundbeside the REAL binary, not the PATH symlink.
dog/HOME.c fix mirroring the rel/abs realpath path; ABC path
discipline — PATHu8bReal + PATHu8sDir, path8b, NO pointer arithmetic (CLAUDE.md §1/§10).
[bare] arm is already a failing repro;
keep rel/abs + full ctest green after the fix.
home_is_exe($path(exe)) (HOME.c:1079) realpath
exe (PATHu8bReal) → dirname (PATHu8sDir) → home_try_sibling on the REAL dir; fall back to entry_c if realpath fails. Mirror l.1043-1045.
break (l.1081) before the realpath'd dir is tried — let the real
dir get its home_try_sibling chance, then break.
[bare] arm fails today (done — exec 'sniff' ENOENT).ctest -R '^be-post-relpath$' green incl. [bare]; full suite no regress.6df16caa (dog/HOME.c: realpath the PATH-resolved exe in the bare-name branch
before the sibling lookup) + 5efa0966 (the deterministic be-sniff-bare-name repro + registration) — landed. be-post-relpath + the new test green; ctest no new regressions.