Files
gstack/bin/gstack-design-approved
garrytanandcapy-ai[bot] 660484ee99 security: isolate every gstack Bun entry point from the audited checkout's .env and bunfig.toml
Bun auto-loads .env, .env.local and .env.<NODE_ENV> from its cwd and runs a
cwd bunfig.toml preload before the program starts. gstack runs inside the repo
it audits, so a committed .env could steer state roots, the claude binary or
spend caps, and a bunfig preload ran arbitrary code in every bin and hook.

Every bun shebang, shell and skill caller, TypeScript spawn and compiled build
now disables both (--no-env-file --config=/dev/null, bunIsolationArgs(),
--no-compile-autoload-dotenv/bunfig), with a ratchet and hostile-fixture
regressions.

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
2026-10-19 20:48:49 +00:00

25 lines
839 B
TypeScript
Executable File

#!/usr/bin/env -S bun --no-env-file --config=/dev/null
// gstack-design-approved — print the absolute path of the image an
// approved.json names.
//
// Usage: gstack-design-approved <approved.json>
//
// Prefers approved_path (relative to approved.json's directory). Legacy
// records with only approved_variant resolve to variant-<letter>.png. When the
// named image is missing, exits 1 with "approved image <path> is missing;
// reselect from the board" and never substitutes another image.
import { resolveApprovedImage } from '../design/src/approval';
const file = process.argv[2];
if (!file) {
console.error('Usage: gstack-design-approved <approved.json>');
process.exit(1);
}
const resolved = resolveApprovedImage(file);
if (!resolved.ok) {
console.error(resolved.error);
process.exit(1);
}
console.log(resolved.path);