mirror of
https://github.com/garrytan/gstack.git
synced 2026-11-06 08:54:04 +01:00
fix(capy): the launch environment is sourced from a 0600 file and no skill fence may print the environment (GSTA-104)
During GSTA-96's unattended /ship on #3425, the Step 14.5 docs-audit child re-typed the GSTACK_LAUNCH assignments as `export $(...)`; the substitution came back empty, the bare `export` printed the whole environment, and three API key values landed in its tool output. - bin/gstack-capy-install writes the assignments to <verdict>.env (mode 0600, idempotent PATH prepend) and prints GSTACK_LAUNCH_FILE: <path>. - ship Step 14.5 prompt, document-release's spawned note, autoplan/DRIVER.md and gstack-skill-start's capy-asks block say: source the file; never export $(...), env, printenv or bare set in a tool fence. - test/launch-env-echo-ratchet.test.ts greps every generated SKILL.md, sections, DRIVER.md, the Capy skill and bin/ shell helpers, with negative controls under test/fixtures/launch-env-echo/. - lib/redact-engine.ts: env.value (HIGH) finds the value of any *_KEY, *_TOKEN, *_SECRET, *_PASSWORD variable in the writer's environment, so a leaked value cannot reach a PR body, receipt, report or Drive file. - scripts/lib/shard-engine.ts scrubs the Capy launch markers from shard environments (GSTA-99's finding). Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
This commit is contained in:
1 parent
8d9501373b
commit
04dcfea0ce
19 files changed
+481
-17
No files matched your search
@@ -582,9 +582,18 @@ export function createShardSandbox(
|
||||
...baseEnv, TMPDIR: tmp, TEMP: tmp, TMP: tmp,
|
||||
CHROMIUM_PROFILE: path.join(stateDir, 'chromium-profile'),
|
||||
};
|
||||
for (const name of CAPY_LAUNCH_MARKERS) delete env[name];
|
||||
return { stateDir, tmp, env };
|
||||
}
|
||||
|
||||
/**
|
||||
* The Capy installer's `GSTACK_LAUNCH` markers. A lane started from a shell
|
||||
* that sourced the launch file would hand them to every product-under-test
|
||||
* child a shard spawns, so fixtures would see an unattended Capy session they
|
||||
* never set up (GSTA-99); each fixture sets its own session kind.
|
||||
*/
|
||||
export const CAPY_LAUNCH_MARKERS = ['GSTACK_SESSION_KIND', 'GSTACK_CAPY', 'GSTACK_EPHEMERAL', 'GSTACK_INSTALL_VERDICT'] as const;
|
||||
|
||||
/**
|
||||
* Asynchronous best-effort backstop removal: a SIGKILLed shard can leave a
|
||||
* full git workspace plus a Chromium profile, and a synchronous recursive
|
||||
|
||||
Reference in new issue
Block a user