storebound/tools
CRT 36a8bf9625 CLI runs on Node 20+: npx storebound (bunx keeps working)
- cli/lib/rt.ts: the runtime layer on node: modules (spawn / spawnSync with Bun's defaults, exit codes and
  "Executable not found", which with PATHEXT, sleep, serve, Glob, hasher, gunzip, stdin, SQLite, packageRoot,
  config imports with a type-stripping fallback for Node 20); every Bun.* use in cli/ goes through it
- tools/gen-embedded.ts -> cli/lib/embedded.ts: templates/, cli/shots/*.html and Play's Data safety form embedded
  (replaces Bun text imports; the bundle and the compiled sidecar carry them), checked fresh by bun run ci
- package.json: bin dist/storebound.mjs (Node ESM bundle, tools/build-node.ts, prepack), engines node >=20
- bun run ci: node bundle + node smoke (real node: --version, help, check same as Bun, scan, release plan --help,
  init, MCP handshake + tool call); Forgejo CI sets up Node 20; tests/node-compat.test.ts guards cli/
- install writes npx MCP commands when run with Node; bin/storebound falls back to Node
- docs: npx storebound init (Node 20+) or bunx storebound init
2026-10-13 04:03:28 +08:00
..
vds README, docs and site: one story (the whole job, no avoidable rejections, the desktop app, your AI, install) 2026-10-13 03:29:59 +08:00
brand-assets.py New logo from one master: brand/, tools/brand-assets.py makes every app icon, favicon, header mark and og image; no hand-written SVG left 2026-10-11 10:13:13 +08:00
build-node.ts CLI runs on Node 20+: npx storebound (bunx keeps working) 2026-10-13 04:03:28 +08:00
build-sidecars.ts Sidecar leak check: skip a generic build home (/root in a CI container is a substring of the bun runtime itself); privacy-scan still checks every home 2026-10-11 05:38:41 +08:00
ci-plan.ts ci speed: desktop boot check runs its cases in parallel (one browser, killed at the end; a page per case; condition waits instead of fixed sleeps: element, text or a quiet window of host calls and DOM); shots capture / render close the browser with a 3 s cap, then kill it; console engine waits injectable for tests (WAITS / engineWaits: poll rounds, a missing step ends once its loaded page stays quiet, team switch settle, field-miss grace), fillPage looks up each data type's dialog once per round and skips dialog sections when no dialog is open; browser tests run 4 at a time per file (testScope().concurrent with a scope per test, --max-concurrency in ci), 20 ms rounds; capture-web counts boots per test and runs its browser tests concurrently; console-session / -persist Chrome tests concurrent; recorded test timings smoothed (mergeTimings) so one loaded run does not skew the shard split 2026-10-13 02:22:25 +08:00
ci.ts CLI runs on Node 20+: npx storebound (bunx keeps working) 2026-10-13 04:03:28 +08:00
desktop-boot-check.ts ci speed: desktop boot check runs its cases in parallel (one browser, killed at the end; a page per case; condition waits instead of fixed sleeps: element, text or a quiet window of host calls and DOM); shots capture / render close the browser with a 3 s cap, then kill it; console engine waits injectable for tests (WAITS / engineWaits: poll rounds, a missing step ends once its loaded page stays quiet, team switch settle, field-miss grace), fillPage looks up each data type's dialog once per round and skips dialog sections when no dialog is open; browser tests run 4 at a time per file (testScope().concurrent with a scope per test, --max-concurrency in ci), 20 ms rounds; capture-web counts boots per test and runs its browser tests concurrently; console-session / -persist Chrome tests concurrent; recorded test timings smoothed (mergeTimings) so one loaded run does not skew the shard split 2026-10-13 02:22:25 +08:00
desktop-release.ts desktop-release: a DMG notarization without an answer (notarytool killed or timed out) says so instead of an empty reason 2026-10-13 02:32:23 +08:00
desktop-version.ts Desktop D5: one desktop version (package.json desktopVersion) checked in CI; updater public key; NSIS per user with the WebView2 bootstrapper 2026-10-11 05:16:59 +08:00
diagrams.ts README, docs and site: one story (the whole job, no avoidable rejections, the desktop app, your AI, install) 2026-10-13 03:29:59 +08:00
fixture-art.ts Phosphor icons and the real store marks 2026-10-11 09:00:46 +08:00
gen-adapters.ts CLI runs on Node 20+: npx storebound (bunx keeps working) 2026-10-13 04:03:28 +08:00
gen-api.ts storebound api: every App Store Connect and Google Play operation 2026-10-11 23:37:09 +08:00
gen-embedded.ts CLI runs on Node 20+: npx storebound (bunx keeps working) 2026-10-13 04:03:28 +08:00
gen-flags.ts CLI runs on Node 20+: npx storebound (bunx keeps working) 2026-10-13 04:03:28 +08:00
i18n-check.ts Desktop D2 UI: design system, portfolio, release timeline, catalog parity, listings, health, reviews, TestFlight, checks, command palette, toasts, first-run guide, en + tr with i18n check, 7:1 theme check, dev fixture mode and screenshot harness 2026-10-11 03:34:47 +08:00
node-smoke.ts CLI runs on Node 20+: npx storebound (bunx keeps working) 2026-10-13 04:03:28 +08:00
privacy-scan.ts privacy-scan: a partial upstream path in a container's compressed bytes is left to the full check of the unpacked file 2026-10-11 06:09:49 +08:00
scrub.ts storebound scan: offline rejection-risk scan of the project itself 2026-10-11 23:20:55 +08:00
site-desktop-shots.ts README, docs and site: one story (the whole job, no avoidable rejections, the desktop app, your AI, install) 2026-10-13 03:29:59 +08:00
site-icons.ts teaser v4: calm 60 s 16:9 cut, from an empty folder to ready on both stores 2026-10-12 01:48:03 +08:00
site-term-shots.ts README, docs and site: one story (the whole job, no avoidable rejections, the desktop app, your AI, install) 2026-10-13 03:29:59 +08:00
tools-manifest.ts Desktop host: offline read cache (SQLite), job ids for progress and cancel, parallel live portfolio, project init, verified ffmpeg / Chrome for Testing downloads into app data 2026-10-11 03:34:46 +08:00
update-ppp.ts growth extras: prices ppp, ads apple, web, apple adhoc, play share, revenuecat, console fill (+ desktop button) 2026-10-12 00:14:00 +08:00