95abe98626
storebound 0.8.34: version in package.json and every copy, CHANGELOG 0.8.34 section
2026-10-22 22:53:36 +07:00
0922a03a47
storebound 0.8.33: version in package.json and every copy, CHANGELOG 0.8.33 section
2026-10-22 22:41:58 +07:00
5a892af3d6
storebound 0.8.32: version in package.json and every copy, CHANGELOG 0.8.32 section
2026-10-22 22:19:38 +07:00
8b22e548be
storebound 0.8.31: version in package.json and every copy, CHANGELOG 0.8.31 section
2026-10-22 21:42:53 +07:00
62366d95a7
Merge origin/main (0.8.30)
2026-10-22 22:41:09 +08:00
4fe26326cc
Desktop: start.log line before Tauri starts (version, args, working folder, pid), so a logon start that dies early leaves a trace
2026-10-22 22:31:29 +08:00
03ef999dac
Desktop: background store reads from the tray (no document.hidden skip, backoff), notifications by kind (rejected, approved, live, halted, crash, reviews) with switches, quiet hours and mute, click-through on next show; tray menu with apps and their states, read now, mute, updates, settings, tooltip summary and attention dot; tray_update command; tests
2026-10-22 22:24:05 +08:00
287fdec12e
storebound 0.8.30: version in package.json and every copy, CHANGELOG 0.8.30 section
2026-10-22 20:39:57 +07:00
e77f2b68f5
storebound 0.8.29: version in package.json and every copy, CHANGELOG 0.8.29 section
2026-10-22 19:51:07 +07:00
294fa322e2
storebound 0.8.28: version in package.json and every copy, CHANGELOG 0.8.28 section
2026-10-22 15:03:45 +07:00
17535d4b7a
storebound 0.8.27: version in package.json and every copy, CHANGELOG 0.8.27 section
2026-10-22 05:05:48 +07:00
9a907d87e5
Desktop: tray icon, start at logon hidden (autostart --hidden, window state never restores visible), closing hides to the tray, background signed auto-update at start and every 30 min with restart
2026-10-22 05:59:41 +08:00
25c2d5cd1e
storebound 0.8.26: version in package.json and every copy, CHANGELOG 0.8.26 section
2026-10-22 01:33:30 +07:00
62eb010998
storebound 0.8.25: version in package.json and every copy, CHANGELOG 0.8.25 section
2026-10-22 00:59:03 +07:00
e03cbbe8aa
storebound 0.8.24: version in package.json and every copy, CHANGELOG 0.8.24 section
2026-10-21 23:40:26 +07:00
164182012f
storebound 0.8.23: version in package.json and every copy, CHANGELOG 0.8.23 section
2026-10-21 11:21:56 +07:00
0d1926f7d7
storebound 0.8.22: version in package.json and every copy, CHANGELOG 0.8.22 section
2026-10-21 05:42:04 +07:00
a6dab8f3aa
storebound 0.8.21: version in package.json and every copy, CHANGELOG 0.8.21 section
2026-10-21 04:03:24 +07:00
2d7cf6ec2b
storebound 0.8.20: version in package.json and every copy, CHANGELOG 0.8.20 section
2026-10-21 03:16:27 +07:00
2ba8278ab7
storebound 0.8.19: version in package.json and every copy, CHANGELOG 0.8.19 section
2026-10-20 13:44:41 +07:00
ac84ad4bbf
storebound 0.8.18: version in package.json and every copy, CHANGELOG 0.8.18 section
2026-10-20 13:11:36 +07:00
2fdd96e68c
storebound 0.8.17: version in package.json and every copy, CHANGELOG 0.8.17 section
2026-10-20 12:44:41 +07:00
3949ff1531
storebound 0.8.16: version in package.json and every copy, CHANGELOG 0.8.16 section
2026-10-20 12:16:54 +07:00
9805582278
storebound 0.8.15: version in package.json and every copy, CHANGELOG 0.8.15 section
2026-10-20 03:31:36 +07:00
7b4b716fc6
storebound 0.8.14: version in package.json and every copy, CHANGELOG 0.8.14 section
2026-10-20 03:09:33 +07:00
d006f8d932
storebound 0.8.13: version in package.json and every copy, CHANGELOG 0.8.13 section
2026-10-18 13:13:16 +07:00
9909b3df73
storebound 0.8.12: version in package.json and every copy, CHANGELOG 0.8.12 section
2026-10-18 01:43:07 +08:00
af349b3db1
report: storebound report writes one shareable, self-contained readiness page (.storebound/reports/readiness-<date>.html; --md, --json, --no-open, --offline, --out) from scan, check and validate: a verdict per store (Ready to submit / N blockers / Not checked with the reason), findings per store by severity with guideline, evidence, fix and console button, the owner's compliance questions as a checklist, secrets masked; storebound.dev look, light / dark, print; desktop Checks > Report (same code path, opens through project_reveal) and its Markdown export on the same renderer; read-only MCP tool report
2026-10-18 01:42:03 +08:00
37cda2a39a
storebound 0.8.11: version in package.json and every copy, CHANGELOG 0.8.11 section
2026-10-17 14:29:27 +08:00
b84538e4cb
storebound 0.8.10: version in package.json and every copy, CHANGELOG 0.8.10 section
2026-10-16 06:35:47 +08:00
6443a5c442
neutral names in docs, tests and comments (no real app or project names)
2026-10-16 06:14:02 +08:00
dcb553fd16
storebound 0.8.9: version in package.json and every copy, CHANGELOG 0.8.9 section
2026-10-16 05:51:05 +08:00
dcca4e86e4
storebound 0.8.8: version in package.json and every copy, CHANGELOG 0.8.8 section
2026-10-16 00:09:06 +08:00
f898d642d0
desktop AI fix: kill only the agent's own process group with killpg (never pgid <= 1 or our own group) instead of the external kill command; a Forgejo ci run of bc85dab died of SIGTERM in the middle of these tests
2026-10-15 19:45:00 +08:00
bc85dabf90
storebound 0.8.7: version in package.json and every copy, CHANGELOG 0.8.7 section
2026-10-15 19:38:32 +08:00
dc387f6ffb
storebound 0.8.6: version in package.json and every copy, CHANGELOG 0.8.6 section
2026-10-15 06:33:52 +08:00
c95f2af8ff
desktop: Fix with AI on scan findings that need a code change (aiFix: true, AI_FIX_RULES). The host (src-tauri/src/ai_fix.rs) runs the owner's local Claude Code headless in the app folder with Read / Edit / Write / Grep / Glob only (Bash, web tools, sub-agents disallowed) and a prompt it builds from the finding's fields; it refuses while the folder has uncommitted files, streams progress, times out after 10 min with a heartbeat, kills the process group on Cancel or exit, and records the run's changed files so Undo restores exactly those; the window shows the diff with Keep / Undo and rescans. Without claude the button copies the prompt (Copy for AI). Only the claude binary, git and kill / taskkill are started there (tests/security.rs); tests/ai_fix.rs covers the prompt, dirty-tree refusal, undo scope, timeout and cancel
2026-10-15 06:26:29 +08:00
a64a7f198d
storebound 0.8.5: version in package.json and every copy, CHANGELOG 0.8.5 section
2026-10-15 02:24:45 +08:00
af858a3f36
storebound 0.8.4: version in package.json and every copy, CHANGELOG 0.8.4 section
2026-10-14 23:40:40 +08:00
c3fed8efa2
storebound 0.8.3: version in package.json and every copy, CHANGELOG 0.8.3 section (docs: no private account names in the published package)
2026-10-14 07:54:56 +08:00
2e32377a0d
storebound 0.8.2: version in package.json and every copy, CHANGELOG 0.8.2 section with the release summary; site teaser cache key v=7
2026-10-14 06:32:32 +08:00
00be838b76
store art from the live stores: storebound art pull (App Store screenshot sets and previews per locale and display type from imageAsset.templateUrl at the original size, the App Store icon from the newest build or the public artwork; per Play language icon, feature graphic, phone / 7" / 10" / TV / Wear screenshots as the =s0 originals checked against Play's sha256) into store/renders with pulled.json (sha256, store, URL host, store checksum); upsert (a re-run changes nothing, differing local files kept unless --force, the upload's file of a slot compared: Play .jpg, App Store .png, the App Store icon as a picture); onboard runs it; apple screenshots / previews and play images see unchanged pulled files as the store's own; check: render sources are notes with pulled art; local renders check: pulled files pass, store-empty sets not demanded; art live / thumb / replace; desktop Store art tab: live thumbnails per store, language and set (same / differs / not pulled), Pull from stores, store-only apps read-only, Replace with a file (image_pick, art.replace) in the lightbox and the art editor; boot check store art case; tests/art-pull.test.ts; console parity 76 rows (57 complete, 19 with the reason); store-screenshots skill (pull first for live apps), pitfall 59
2026-10-14 05:25:37 +08:00
7ac028421a
store-only apps edit their listing on the store (storebound listing live / set: old -> new per field with the checks, a PATCH of only the edited fields; serve listing.set is the one store-only write, its token bound to the store ids; policy.rs STORE_ONLY_WRITES, write_with_confirm for store targets); screenshot captions per language and scene edited as a text edit of the shots copy JSON (JSON files keep their layout); Play content rating, target audience and App content answers in App info; docs/console-parity.md after the editors (73 rows: 55 complete, 18 with the reason) and tests/console-parity.test.ts keeping it honest
2026-10-14 00:54:56 +08:00
0fb4ce0001
desktop reads everything by itself: one background read scheduler (4 per store, starts spaced per account, App Store Connect X-Rate-Limit slows it below 20 % and pauses at 100 left, backoff with jitter on 429 / RESOURCE_EXHAUSTED, visible app first, one read per key), per-method TTLs over the saved reads, Settings auto-read (on) and interval (15 min, paused while hidden), Refresh all, a refresh icon and 'read 3 min ago' / 'couldn't refresh' per card, writes invalidate, status line with progress and quota; quota reaches the window through ToolResult.quota (cli/lib/quota.ts); Health top issues open with versions, sample stack (health --issue / --signature, read health_issue), Open in Play Console, Copy for AI and likely-cause hints (cli/lib/crash-hints.ts); tests/scheduler.test.ts, tests/quota-crash-hints.test.ts, boot check auto-read case
2026-10-13 23:37:39 +08:00
89256f1e80
Google API errors as typed findings, never raw JSON: cli/lib/google-errors.ts parses SERVICE_DISABLED (api-disabled: service, Cloud project, console page), PERMISSION_DENIED (no-app-access: which app, Users and permissions), 401 / invalid_grant (auth-revoked) and 429 (quota); health / analytics print one line with the URL, raw text in detail and the log; desktop Health tab: the line, 'Turn it on in Google Cloud' and 'Check again', raw text in a collapsed Details; Portfolio shows a Cloud project blocking several apps once. Findings exit codes are results: the sidecar reports outcome (ok / findings / declined / failed) and the command's own error line; scan / check / validate / health exit 1 with findings show and cache the findings; no bare 'Exit code N' anywhere. tests/google-errors.test.ts, boot check errors cases (api-disabled, scan-findings, scan-failed) (pitfall 57)
2026-10-13 23:20:04 +08:00
6b91cc58a9
storebound 0.8.1: version in package.json and every copy, CHANGELOG 0.8.1 section with the release summary
2026-10-13 09:59:18 +08:00
8fd4ac741e
storebound 0.8.0: one version for the CLI and the desktop app (package.json, plugin manifests, the app's copies), CHANGELOG 0.8.0 section with the release summary, teaser v8 on the site and README poster (img/teaser.mp4, teaser-poster.webp, cache key v=4)
2026-10-13 08:17:16 +08:00
e5f148e534
Onboarding live apps without owner questions for what the stores and the code prove: storebound onboard imports the live products and subscriptions with USD / base prices (catalog diff clean), contact values, the App Review contact and demo account (credentials.json, masked), sign-in for review from Apple's review detail and auth code, and the account deletion page from the app's site; App Store keywords count characters (live fields up to 265 bytes accepted); validate accepts the 6.5-inch iPhone set and Play's default-language graphics fallback; Play Reporting API off gives the project's enable link and apps list falls back to local apps; accounts default <profile>; store-only apps (apps add --store --app-id) shown read-only in the desktop (pitfalls 43-52)
2026-10-13 07:25:01 +08:00
d2ce185441
One product per machine: the CLI and the desktop app share one version, the store accounts and the app folder list
...
- one version: package.json's version is the desktop app's too (desktopVersion removed); tools/desktop-version.ts
keeps the plugin manifests and the app's copies equal, desktop-release publish refuses another version, release
order app first then npm publish; the unpublished desktop 0.1.0 candidate is noted in the docs and CHANGELOG
- storebound desktop installs (per user, no admin: macOS DMG -> /Applications or ~/Applications, Windows NSIS /S,
Linux AppImage + .desktop with the storebound:// handler), updates an older app, notes a newer one (downgrade only
with --force), asks once ([Y/n], --yes, exit 3 without a terminal), opens on the folder; --dry / --json / --download;
the install steps are pure plans (cli/lib/desktop-install.ts); the version's own manifest dl/<version>/latest.json
- credentials: one store, the CLI's credential profiles in ~/.storebound/credentials; the desktop writes and reads
them (profiles.rs, files 0600), moves old keychain accounts into profiles on first start, shows profiles the CLI
made; precedence env > named profile > project file > default profile; config `account`, "account" in the
project's credentials.json; storebound accounts list | import (dedup by key id / service account e-mail, key files
copied 0600, project file keeps keystore and review contact, backup, --dry, never prints values) | use
- app folders: one list ~/.storebound/projects.json shared by the desktop (registry.rs), storebound desktop,
apps folders | add | remove, ws init and ws without a workspace file
- desktop: notice when a folder pins another storebound version; storebound-desktop --version
- tests: version drift, desktop decisions and per-OS plans, credential precedence and import, registry (TS + Rust),
keychain migration and profile round trip (Rust), boot check with old keychain state and the new shared state
2026-10-13 06:17:37 +08:00
b375f1a5e2
desktop bundle: long description (the deb's description said '(none)')
2026-10-13 02:09:58 +08:00