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>