Work / Imposter / Wiki / Concepts
store-capture
Conceptverified 2026-10-30
Store capture
Screenshots are captured from the running app by goldie, never by hand and never drawn. .context/listing/goldie.config.ts holds the scenes and their copy, .argent/flows/store-*.yaml reach each screen, and src/config/seams.screenshot.ts is what makes two runs match. Commands: pnpm listing:capture, listing:shoot, listing:sync. Publishing after a build can break a capture: .context/ops/setup.md, section 3.
- A capture build is this app with files swapped. Under
EXPO_PUBLIC_SCREENSHOT_MODE=1,metro.config.jsresolves@/a/btosrc/a/b.screenshot.tswherever that file exists:config/seams.ts(the die, the bag's memory, the clock, the MMKV file),lib/persist-storage.ts, andservices/firebase.ts,rooms.tsandrevenuecat.ts(a store that owns Pro and answers at once). - App code holds no flag and no capture branch, so a store binary contains nothing of what a capture build runs. It used to: the app read a
SCREENSHOT_MODEboolean in six places, the fake store shipped dead in every store binary, and App Review rejected 1.0.3 under guideline 5.6 for features "hidden during the review process". EXPO_PUBLIC_SCREENSHOT_MODEis set by the twoscripts/build-screenshot-*files and nowhere else.src/config/seams.test.tsfails if it appears ineas.json,app.config.tsor any.env*, if any app file reads it or imports a.screenshotfile, or if the swap stops doing what it says.- A new source of difference is a new export in
seams.tsand its twin inseams.screenshot.ts, with a test — never a branch in app code. Import a swapped module as@/…, never by a relative path: the swap matches on that spelling. - goldie installs once per capture and cold-launches per scene. Anything persisted carries into the next scene, so a flow must not depend on a first launch.
- Look at every picture before committing one.
goldie verifychecks sizes. The art keeps the design-rules: no urgency, and only the app's real counts.