Split out from #141 — js-shell half.
Add the js-shell slim devShell and the matching reusable workflow for JS-only repos (subgraph and frontend repos that don't touch contracts).
Shape
```nix
js-shell = pkgs.mkShell {
buildInputs = node-build-inputs ++ subgraph-tasks ++ common-shell-inputs
++ [ the-graph goldsky chromium pkgs.sqlite pkgs.age ];
shellHook = ''…'';
};
```
Plus a `rainix-js.yaml` reusable that mirrors `rainix-sol.yaml` / `rainix-rs.yaml`. Concrete task choice TBD — `npm ci && npm test` covers most consumers; subgraph repos may need a separate composite step.
Closure regression test
Mirror of `test/bats/devshell/sol-shell/closure.test.bats` and the rust-shell test in #160. Assert the js-shell closure has no rust toolchain, no foundry/solc/slither. Chromium stays in (the wrapper script that defers to system Chrome on darwin / pkgs.chromium on linux) — js-shell is where it belongs.
Why now
The default shell is the bottleneck for every CI run that doesn't need everything. sol-shell proved the pattern. rust-shell is on the way (#161, #160). js-shell finishes the trio.
Split from #141.
Split out from #141 — js-shell half.
Add the js-shell slim devShell and the matching reusable workflow for JS-only repos (subgraph and frontend repos that don't touch contracts).
Shape
```nix
js-shell = pkgs.mkShell {
buildInputs = node-build-inputs ++ subgraph-tasks ++ common-shell-inputs
++ [ the-graph goldsky chromium pkgs.sqlite pkgs.age ];
shellHook = ''…'';
};
```
Plus a `rainix-js.yaml` reusable that mirrors `rainix-sol.yaml` / `rainix-rs.yaml`. Concrete task choice TBD — `npm ci && npm test` covers most consumers; subgraph repos may need a separate composite step.
Closure regression test
Mirror of `test/bats/devshell/sol-shell/closure.test.bats` and the rust-shell test in #160. Assert the js-shell closure has no rust toolchain, no foundry/solc/slither. Chromium stays in (the wrapper script that defers to system Chrome on darwin / pkgs.chromium on linux) — js-shell is where it belongs.
Why now
The default shell is the bottleneck for every CI run that doesn't need everything. sol-shell proved the pattern. rust-shell is on the way (#161, #160). js-shell finishes the trio.
Split from #141.