Tracks a bounded Bun parity gap surfaced by running the pinned suite (#66).
Problem
home run <file>.bun.sh routes shell scripts to the Home-language interpreter instead of the bun shell, so test/js/bun/shell/env.positionals.test.ts fails 2 pass / 4 fail.
src/main.zig:runCommand dispatches JS/TS files to the runtime and everything else (including .bun.sh / .sh) to the Home-language Lexer→Parser→Interpreter path (src/main.zig:2302-2359). For a .bun.sh fixture, this:
- Feeds the shebang line to the Home parser →
error[EP0001]: Invalid character '#' in source code(packages/parser/src/parser.zig:8137), and - Prints the Home-program banner
Running: <file>/Success: Program completed(src/main.zig:2347,2359).
Both land on stderr, so the test's expect(stderr).toBeEmpty() fails.
Reproducer
cat > /tmp/p.bun.sh <<'SH'
#!/bin/sh
echo $0
echo $1
SH
./zig-out/bin/home run /tmp/p.bun.sh a b c 2>/tmp/err.txt
cat /tmp/err.txt # currently: EP0001 shebang error + Running/Success banner; expected: emptyFailing tests: env.positionals.test.ts → $ argv: standalone, standalone: not enough args, standalone: only 10, standalone: non-ascii.
Acceptance
home run <file>.bun.sh(and.sh) executes the file through the bun shell interpreter (bun.shell), not the Home-language interpreter.- Shebang (
#!...) on line 1 is skipped, not parsed. - Positional args are wired (
$0= script path,$1..$n= extra args), matching the fixture expectations. - No
Running:/Success:banner and no EP0001 output; stderr carries only the script's own stderr. env.positionals.test.ts: 6 pass / 0 fail through real Home execution.- No regression to
.home/.hm/.js/.tshome rundispatch. zig buildclean,zig fmt --checkclean, update #66 with the landed commit.
Note: needs a bun-shell file-run entry point in src/main.zig (none exists today — bun.shell is currently only reached via the $ template).