diff --git a/CHANGELOG.md b/CHANGELOG.md index 844b291..3bacc55 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ ## Unreleased +- **Windows: the MCP server starts.** `storebound install` writes `cmd /c npx -y storebound@ mcp` (or + `bun /cli/index.ts mcp`) on Windows, where `npx.cmd` and the sh launcher cannot be spawned. Pitfall 94. +- **`storebound desktop` no longer waits forever on a stalled download.** Progress every 10 %, and an error after + 60 s without data. Pitfall 95. +- Windows checkouts keep LF line endings (`.gitattributes`); README badges: live npm version, real skill count. + ## 0.8.23 · 2026-10-21 - **`apple submit --yes` submits a draft prepared with `--no-submit`.** The second step of the two-step flow diff --git a/README.md b/README.md index 3ff3849..c38d019 100644 --- a/README.md +++ b/README.md @@ -9,10 +9,9 @@ in-app products and prices, the compliance forms, even the consoles that have no [![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)](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)](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) +[![Agent Skills: 39](https://img.shields.io/badge/Agent%20Skills-39-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/](https://git.crt.fyi/CRT/storebound/src/branch/main/docs/README.md) · `npx storebound init`** diff --git a/tests/readme-badges.test.ts b/tests/readme-badges.test.ts new file mode 100644 index 0000000..edabb1c --- /dev/null +++ b/tests/readme-badges.test.ts @@ -0,0 +1,19 @@ +// README badges never go stale: the version comes from npm (a static version badge once said 0.6.0 at 0.8.23) and the +// skill count must match skills/*/SKILL.md. +import { describe, expect, test } from 'bun:test'; +import { existsSync, readdirSync, readFileSync } from 'node:fs'; +import { join } from 'node:path'; + +const root = join(import.meta.dir, '..'); +const readme = readFileSync(join(root, 'README.md'), 'utf8'); + +describe('README badges', () => { + test('no hand-written version badge; the npm badge is live', () => { + expect(readme).not.toMatch(/img\.shields\.io\/badge\/version-/); + expect(readme).toContain('img.shields.io/npm/v/storebound'); + }); + test('the Agent Skills badge counts every skill', () => { + const n = readdirSync(join(root, 'skills')).filter(d => existsSync(join(root, 'skills', d, 'SKILL.md'))).length; + expect(/Agent%20Skills-(\d+)-/.exec(readme)?.[1]).toBe(String(n)); + }); +});