0.7.1: README links and images absolute (npmjs.com rendered relative paths as 404s); test keeps README free of relative links

This commit is contained in:
CRTkafa 2026-10-13 04:37:25 +08:00
parent ba8cfd2594
commit d5ffc159c0
8 changed files with 39 additions and 29 deletions

View file

@ -9,7 +9,7 @@
"name": "storebound",
"source": ".",
"description": "Take a mobile app or game from nothing to Submit for review on both stores: skills for every store step and questionnaire plus the storebound CLI and MCP server.",
"version": "0.7.0",
"version": "0.7.1",
"category": "development",
"tags": [
"mobile",

View file

@ -1,6 +1,6 @@
{
"name": "storebound",
"version": "0.7.0",
"version": "0.7.1",
"description": "Take a mobile app or game from nothing to Submit for review on Google Play and the App Store: app records, listings in every language, in-app products and subscriptions with regional prices, every questionnaire (Data safety, App access and demo accounts, account deletion, IARC, target audience, ads, App Privacy, age rating, export compliance), privacy, icons, screenshots and previews, validate, TestFlight, release management, and after launch: crash vitals, review replies, price sheets, store analytics, Product Page Optimization. Agent Skills plus a Bun CLI and MCP server (storebound); you press Submit. CRTkafa's own toolchain, open-sourced.",
"author": {
"name": "CRTkafa"

View file

@ -1,6 +1,6 @@
{
"name": "storebound",
"version": "0.7.0",
"version": "0.7.1",
"description": "Take a mobile app or game from nothing to Submit for review on Google Play and the App Store: app records, listings in every language, in-app products and subscriptions with regional prices, every questionnaire (Data safety, App access and demo accounts, account deletion, IARC, target audience, ads, App Privacy, age rating, export compliance), privacy, icons, screenshots and previews, validate, TestFlight, release management, and after launch: crash vitals, review replies, price sheets, store analytics, Product Page Optimization. Agent Skills plus a Bun CLI and MCP server (storebound); you press Submit. CRTkafa's own toolchain, open-sourced.",
"author": {
"name": "CRTkafa"

View file

@ -1,5 +1,10 @@
# Changelog
## 0.7.1 · 2026-10-13
- Fix: README links and images on npmjs.com resolved against npmjs.com and gave 404 (`docs/README.md`, the logo).
Every README link and image is now absolute (git.crt.fyi), and a test keeps it that way.
## 0.7.0 · 2026-10-13
Agent-first: the AI does the whole job ("do it, don't ask") and the owner presses only the final public buttons, with

View file

@ -1,4 +1,4 @@
<p><img src="brand/logo-mark-256.png" width="96" height="96" alt="storebound logo"></p>
<p><img src="https://git.crt.fyi/CRT/storebound/raw/branch/main/brand/logo-mark-256.png" width="96" height="96" alt="storebound logo"></p>
# storebound
@ -8,14 +8,14 @@ Your AI agent does all of it with storebound: builds, uploads, store text, scree
in-app products and prices, the compliance forms, even the consoles that have no API. You only press Submit.
[![npm](https://img.shields.io/npm/v/storebound?label=npm&color=cb3837)](https://www.npmjs.com/package/storebound)
[![license: MIT](https://img.shields.io/badge/license-MIT-blue)](LICENSE)
[![version 0.6.0](https://img.shields.io/badge/version-0.6.0-informational)](CHANGELOG.md)
[![license: MIT](https://img.shields.io/badge/license-MIT-blue)](https://git.crt.fyi/CRT/storebound/src/branch/main/LICENSE)
[![version 0.6.0](https://img.shields.io/badge/version-0.6.0-informational)](https://git.crt.fyi/CRT/storebound/src/branch/main/CHANGELOG.md)
[![runtime: Node 20+ or Bun 1.1+](https://img.shields.io/badge/runtime-Node%2020%2B%20%7C%20Bun%201.1%2B-f9f1e1)](#install-and-start)
[![runtime dependencies: 0](https://img.shields.io/badge/runtime%20dependencies-0-brightgreen)](package.json)
[![Agent Skills: 25](https://img.shields.io/badge/Agent%20Skills-25-8a63d2)](skills)
[![MCP: 2026-07-28](https://img.shields.io/badge/MCP-2026--07--28-black)](docs/mcp.md)
[![runtime dependencies: 0](https://img.shields.io/badge/runtime%20dependencies-0-brightgreen)](https://git.crt.fyi/CRT/storebound/src/branch/main/package.json)
[![Agent Skills: 25](https://img.shields.io/badge/Agent%20Skills-25-8a63d2)](https://git.crt.fyi/CRT/storebound/src/branch/main/skills)
[![MCP: 2026-07-28](https://img.shields.io/badge/MCP-2026--07--28-black)](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/mcp.md)
**Website: [storebound.dev](https://storebound.dev) · Docs: [docs/](docs/README.md) · `npx storebound init`**
**Website: [storebound.dev](https://storebound.dev) · Docs: [docs/](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/README.md) · `npx storebound init`**
[![The storebound teaser: from an empty folder to Submit for review in under a minute (opens the video on storebound.dev)](https://git.crt.fyi/CRT/storebound/raw/branch/main/site/img/teaser-poster.webp)](https://storebound.dev/#teaser)
@ -31,8 +31,8 @@ and the console pages that have no API (the agent drives them from a `console pl
![storebound release plan 1.0.0: every step left on both stores for a brand-new app, in fix order, with the owner's next step named](https://git.crt.fyi/CRT/storebound/raw/branch/main/site/img/term/release-plan.webp)
You press only the final public or irreversible buttons (Submit for review, releasing, App Privacy Publish, legal
agreements) and answer, once and in one batch, the facts no file can prove. The full rules: [AGENTS.md](AGENTS.md);
the whole journey step by step: [docs/journey.md](docs/journey.md).
agreements) and answer, once and in one batch, the facts no file can prove. The full rules: [AGENTS.md](https://git.crt.fyi/CRT/storebound/src/branch/main/AGENTS.md);
the whole journey step by step: [docs/journey.md](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/journey.md).
## You won't get rejected for the avoidable things
@ -42,7 +42,7 @@ evidence as `file:line`, and the fix.
![storebound scan on a sign-in app: blockers for Guideline 2.1(a) (no demo account) and 5.1.1(v) (no account deletion), each with its evidence and fix](https://git.crt.fyi/CRT/storebound/raw/branch/main/site/img/term/scan.webp)
Every rule, what it proves and what only a reviewer can see: [docs/rejections.md](docs/rejections.md).
Every rule, what it proves and what only a reviewer can see: [docs/rejections.md](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/rejections.md).
## The desktop app: every app, both stores, one window
@ -65,7 +65,7 @@ confirm, then your click. Same storebound underneath; store keys stay in the sys
</details>
Download for macOS, Windows and Linux: [storebound.dev/#download](https://storebound.dev/#download), or
`storebound desktop --download` (checks the signature, never installs). Internals: [docs/desktop.md](docs/desktop.md).
`storebound desktop --download` (checks the signature, never installs). Internals: [docs/desktop.md](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/desktop.md).
## Works with your AI, safe by design
@ -75,8 +75,8 @@ stay in env vars or the gitignored `.storebound/`.
![storebound play products --dry: two in-app products planned with regional prices in 174 Google Play regions, nothing written](https://git.crt.fyi/CRT/storebound/raw/branch/main/site/img/term/products.webp)
Per-tool setup: [docs/getting-started.md](docs/getting-started.md#install-for-your-ai-tool) · MCP tools:
[docs/mcp.md](docs/mcp.md) · Safety model: [docs/safety.md](docs/safety.md).
Per-tool setup: [docs/getting-started.md](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/getting-started.md#install-for-your-ai-tool) · MCP tools:
[docs/mcp.md](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/mcp.md) · Safety model: [docs/safety.md](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/safety.md).
## Install and start
@ -93,7 +93,7 @@ npx storebound check # offline: config, limits, Data safety,
Every `npx storebound ...` below works as `bunx storebound ...` too.
Then ask your agent: "take my app to Google Play and the App Store". Claude Code plugin, credentials, coming from
fastlane: [docs/getting-started.md](docs/getting-started.md). Desktop app: [storebound.dev/#download](https://storebound.dev/#download).
fastlane: [docs/getting-started.md](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/getting-started.md). Desktop app: [storebound.dev/#download](https://storebound.dev/#download).
## What it covers
@ -101,16 +101,16 @@ Store screenshots of the demo game, rendered by storebound in every size and lan
![Store screenshots rendered by storebound: four scenes in English plus the hero scene in Turkish, Japanese and Arabic](https://git.crt.fyi/CRT/storebound/raw/branch/main/site/img/showcase.webp)
- [The journey](docs/journey.md): every step from setup to Submit, what is API, what the agent drives in a console, what stays yours
- [Rejection scan](docs/rejections.md): every rule with its App Store guideline or Play policy
- [Commands](docs/commands.md): the full command reference
- [Store art](docs/store-art.md): screenshots, fonts, previews, variants
- [Growth extras and console forms](docs/growth.md): PPP prices, Apple Ads, web presence, RevenueCat, `console plan` / `console fill`
- [Many apps, release trains, workflows](docs/studios.md) · [Listings in more languages](docs/listing-languages.md) · [Every API endpoint](docs/api.md)
- [Skills](docs/skills.md) · [MCP server](docs/mcp.md) · [Safety model](docs/safety.md) · [Idempotency](docs/idempotency.md) · [Pitfalls](docs/pitfalls.md)
- [Desktop app](docs/desktop.md) · [Desktop releases](docs/desktop-release.md) · [FAQ](docs/faq.md) · [Roadmap, contributing, credits](docs/project.md)
- [The journey](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/journey.md): every step from setup to Submit, what is API, what the agent drives in a console, what stays yours
- [Rejection scan](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/rejections.md): every rule with its App Store guideline or Play policy
- [Commands](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/commands.md): the full command reference
- [Store art](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/store-art.md): screenshots, fonts, previews, variants
- [Growth extras and console forms](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/growth.md): PPP prices, Apple Ads, web presence, RevenueCat, `console plan` / `console fill`
- [Many apps, release trains, workflows](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/studios.md) · [Listings in more languages](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/listing-languages.md) · [Every API endpoint](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/api.md)
- [Skills](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/skills.md) · [MCP server](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/mcp.md) · [Safety model](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/safety.md) · [Idempotency](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/idempotency.md) · [Pitfalls](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/pitfalls.md)
- [Desktop app](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/desktop.md) · [Desktop releases](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/desktop-release.md) · [FAQ](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/faq.md) · [Roadmap, contributing, credits](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/project.md)
## Contributing and license
Issues and pull requests are welcome; see [CONTRIBUTING.md](CONTRIBUTING.md) (`bun run ci` must be green).
MIT, see [LICENSE](LICENSE). Copyright (c) 2026 CRTkafa. Not affiliated with Google or Apple.
Issues and pull requests are welcome; see [CONTRIBUTING.md](https://git.crt.fyi/CRT/storebound/src/branch/main/CONTRIBUTING.md) (`bun run ci` must be green).
MIT, see [LICENSE](https://git.crt.fyi/CRT/storebound/src/branch/main/LICENSE). Copyright (c) 2026 CRTkafa. Not affiliated with Google or Apple.

View file

@ -1,6 +1,6 @@
{
"name": "storebound",
"version": "0.7.0",
"version": "0.7.1",
"description": "Take a mobile app or game from nothing to Submit for review on Google Play and the App Store: app records, listings in every language, in-app products and subscriptions with regional prices, every questionnaire (Data safety, App access and demo accounts, account deletion, IARC, target audience, ads, App Privacy, age rating, export compliance), privacy, icons, screenshots and previews, validate, TestFlight, release management, and after launch: crash vitals, review replies, price sheets, store analytics, Product Page Optimization. Agent Skills plus a Bun CLI and MCP server (storebound); you press Submit. CRTkafa's own toolchain, open-sourced.",
"contextFileName": "GEMINI.md",
"mcpServers": {

View file

@ -1,6 +1,6 @@
{
"name": "storebound",
"version": "0.7.0",
"version": "0.7.1",
"desktopVersion": "0.1.0",
"description": "Take a mobile app or game from nothing to Submit for review on Google Play and the App Store: app records, listings in every language, in-app products and subscriptions with regional prices, every store questionnaire (incl. account deletion and App Review demo accounts), privacy, icons, screenshots and previews, TestFlight. After launch: crash vitals, review replies, price sheets, analytics and Product Page Optimization. One config, a CLI (Node 20+ or Bun), an MCP server and Agent Skills for your AI coding agent.",
"license": "MIT",

View file

@ -67,6 +67,11 @@ describe('links resolve', () => {
test('README.md and docs/*.md', () => {
expect([join(ROOT, 'README.md'), ...docs].flatMap(problems)).toEqual([]);
});
test('README.md has only absolute links and images (npm renders it on npmjs.com, where relative paths 404)', () => {
const md = readFileSync(join(ROOT, 'README.md'), 'utf8');
const rel = [...md.matchAll(/!?\]\((?!https?:|#|mailto:)([^)\s]+)\)|(?:src|href)="(?!https?:|#|mailto:)([^"]+)"/g)].map(m => m[1] ?? m[2]);
expect(rel).toEqual([]);
});
test('site pages', () => {
const pages = ['site/index.html', 'site/desktop/index.html'].map(p => join(ROOT, p)).filter(existsSync);
expect(pages.flatMap(problems)).toEqual([]);