Skip to content

Commit c7729f2

Browse files
CreatmanCEOclaude
andcommitted
M4: distribution — npm package, CLI, release automation, rename to webtest-orch
- package.json: webtest-orch@0.3.0-beta with bin entry pointing at bin/webtest-orch.js - bin/webtest-orch.js: install/uninstall/status/version/help subcommands - install copies skill into ~/.claude/skills/webtest-orch/ - install --symlink for local dev - status checks installed state + MCP availability - .github/workflows/release.yml: on `v*` tag, lint+test+publish to GitHub Releases + npm with provenance (NPM_TOKEN secret required for npm push) - README rewritten with `npx webtest-orch@beta install` as the primary install path - README + scripts + templates renamed webapp-test-orchestrator → webtest-orch - SKILL.md frontmatter name renamed to webtest-orch (was webapp-test-orchestrator) - install.sh updated to ~/.claude/skills/webtest-orch/ CHANGELOG: 0.3.0-beta entry. 113 tests passing, ruff+mypy clean. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent e150217 commit c7729f2

14 files changed

Lines changed: 426 additions & 30 deletions

.github/workflows/release.yml

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
name: Release
2+
3+
on:
4+
push:
5+
tags:
6+
- "v*"
7+
workflow_dispatch:
8+
9+
permissions:
10+
contents: write # to create GitHub Releases
11+
id-token: write # for npm publish provenance
12+
13+
jobs:
14+
release:
15+
name: Build + GitHub Release + npm publish
16+
runs-on: ubuntu-latest
17+
steps:
18+
- uses: actions/checkout@v4
19+
with:
20+
fetch-depth: 0
21+
22+
- uses: actions/setup-node@v4
23+
with:
24+
node-version: "20"
25+
registry-url: "https://registry.npmjs.org"
26+
27+
- uses: actions/setup-python@v5
28+
with:
29+
python-version: "3.12"
30+
31+
- name: Verify package.json version matches tag
32+
id: ver
33+
run: |
34+
TAG="${GITHUB_REF#refs/tags/v}"
35+
PKG=$(node -p "require('./package.json').version")
36+
echo "Tag version: $TAG"
37+
echo "package.json version: $PKG"
38+
if [ "$TAG" != "$PKG" ]; then
39+
echo "::error::Tag $TAG does not match package.json version $PKG"
40+
exit 1
41+
fi
42+
echo "version=$TAG" >> "$GITHUB_OUTPUT"
43+
44+
- name: Sanity-check (lint + tests)
45+
run: |
46+
pip install -r requirements-dev.txt
47+
ruff check scripts/ tests/
48+
mypy scripts/
49+
pytest -q
50+
51+
- name: Extract release notes from CHANGELOG.md
52+
id: notes
53+
run: |
54+
VERSION="${{ steps.ver.outputs.version }}"
55+
# Extract the section under "## [VERSION]" up to (but not including) the next "## ["
56+
awk -v ver="$VERSION" '
57+
$0 ~ "^## \\[" ver "\\]" { capture=1; next }
58+
capture && /^## \[/ { exit }
59+
capture { print }
60+
' CHANGELOG.md > release-notes.md
61+
{
62+
echo "notes<<__EOF__"
63+
cat release-notes.md
64+
echo "__EOF__"
65+
} >> "$GITHUB_OUTPUT"
66+
67+
- name: Create tarball for the release artefact
68+
run: npm pack --json > pack-output.json
69+
70+
- name: Create GitHub Release
71+
uses: softprops/action-gh-release@v2
72+
with:
73+
name: "webtest-orch v${{ steps.ver.outputs.version }}"
74+
body: ${{ steps.notes.outputs.notes }}
75+
prerelease: ${{ contains(steps.ver.outputs.version, 'beta') || contains(steps.ver.outputs.version, 'alpha') || contains(steps.ver.outputs.version, 'rc') }}
76+
files: |
77+
webtest-orch-*.tgz
78+
release-notes.md
79+
80+
- name: Publish to npm
81+
if: ${{ env.NPM_TOKEN != '' }}
82+
env:
83+
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
84+
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
85+
run: |
86+
if [[ "${{ steps.ver.outputs.version }}" == *beta* || "${{ steps.ver.outputs.version }}" == *alpha* || "${{ steps.ver.outputs.version }}" == *rc* ]]; then
87+
npm publish --access public --tag beta --provenance
88+
else
89+
npm publish --access public --provenance
90+
fi

CHANGELOG.md

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,39 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
66

77
## [Unreleased]
88

9-
### Planned for `0.3.0`
9+
### Planned for `0.4.0`
1010
- Vision-classifier auto-loop (`vision_dispatch.py`)
1111
- Console LLM auto-triage (`console_llm_triage.py` with batched subagent)
1212
- Performance / Lighthouse audit script
1313
- Tracker integration CLI (`file_bugs.py --linear / --github / --jira`)
1414
- Regression watchlist mechanism (sticky fixed → escalate on regression)
1515
- Layout integrity assertions (max-width, icon grouping patterns)
1616

17+
## [0.3.0-beta] - 2026-04-29
18+
19+
Distribution milestone — installable via `npx webtest-orch@beta install` instead of git-clone-and-bash.
20+
21+
### Added
22+
- **npm package** `webtest-orch` published to npm registry under `beta` tag.
23+
Install path: `npx webtest-orch@beta install` (no global install needed).
24+
- **`bin/webtest-orch.js`** — CLI with subcommands:
25+
- `install` — copy skill into `~/.claude/skills/webtest-orch/`
26+
- `install --symlink` — symlink for local development
27+
- `uninstall` — remove installed skill (npm package untouched)
28+
- `status` — show install state + MCP availability
29+
- `version`, `help`
30+
- **`.github/workflows/release.yml`** — on `v*` tag: lint + tests, extract release
31+
notes from CHANGELOG, create GitHub Release (prerelease for beta/alpha/rc),
32+
publish to npm with provenance. Requires `NPM_TOKEN` repo secret to push to npm.
33+
34+
### Changed
35+
- **Skill name renamed** `webapp-test-orchestrator``webtest-orch` in SKILL.md
36+
frontmatter. Installs into `~/.claude/skills/webtest-orch/`. Existing
37+
`~/.claude/skills/webapp-test-orchestrator/` directories from `0.1.x`/`0.2.x`
38+
are left in place (delete manually if not needed).
39+
- README install section rewritten around the npm one-liner. Older `bash install.sh`
40+
flow documented as the alternative for development / no-npm setups.
41+
1742
## [0.2.0-beta] - 2026-04-29
1843

1944
Functional gaps closed based on dogfooding feedback from two real apps. Pre-OSS
@@ -120,6 +145,7 @@ Initial public beta. Validated end-to-end on a real production app
120145
- macOS / Linux installers untested in CI; help wanted (see
121146
`os-compatibility-report` issue template).
122147

123-
[Unreleased]: https://github.com/CreatmanCEO/webtest-orch/compare/v0.2.0-beta...HEAD
148+
[Unreleased]: https://github.com/CreatmanCEO/webtest-orch/compare/v0.3.0-beta...HEAD
149+
[0.3.0-beta]: https://github.com/CreatmanCEO/webtest-orch/compare/v0.2.0-beta...v0.3.0-beta
124150
[0.2.0-beta]: https://github.com/CreatmanCEO/webtest-orch/compare/v0.1.0-beta...v0.2.0-beta
125151
[0.1.0-beta]: https://github.com/CreatmanCEO/webtest-orch/releases/tag/v0.1.0-beta

README.md

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
# webtest-orch — webapp-test-orchestrator
1+
# webtest-orch
22

33
[![CI](https://github.com/CreatmanCEO/webtest-orch/actions/workflows/ci.yml/badge.svg)](https://github.com/CreatmanCEO/webtest-orch/actions/workflows/ci.yml)
44
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./LICENSE)
5-
[![Version](https://img.shields.io/badge/version-0.2.0--beta-orange.svg)](./CHANGELOG.md)
5+
[![Version](https://img.shields.io/badge/version-0.3.0--beta-orange.svg)](./CHANGELOG.md)
6+
[![npm](https://img.shields.io/npm/v/webtest-orch/beta?label=npm%40beta)](https://www.npmjs.com/package/webtest-orch)
67
[![Python 3.10+](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://www.python.org/downloads/)
78

89
**Universal e2e testing skill for Claude Code.** Заменяет ad-hoc промпты с Playwright MCP на одну переиспользуемую сущность для тестирования любого web-приложения (Next.js, FastAPI, статика, Telegram WebApp, и т.д.).
@@ -43,31 +44,44 @@ Skill сработает автоматически — даже если ты
4344

4445
## Установка (один раз)
4546

46-
### 1. Skill files
47+
### Быстрая установка через npm
4748

4849
```bash
49-
# Из корня репо webapp-test-orchestrator/
50-
bash install.sh
50+
npx webtest-orch@beta install
5151
```
5252

53-
Установит skill в `~/.claude/skills/webapp-test-orchestrator/` и проверит наличие нужных MCPs.
53+
Скопирует skill в `~/.claude/skills/webtest-orch/` и подскажет команды для установки нужных MCP-серверов, если их нет.
5454

55-
### 2. MCP-серверы
55+
После установки:
5656

5757
```bash
58+
# Если CLI пишет что MCPs не установлены — выполни:
5859
claude mcp add --scope user playwright npx @playwright/mcp@latest
5960
claude mcp add --scope user chrome-devtools npx chrome-devtools-mcp@latest
61+
62+
# Перезапусти Claude Code (skills загружаются при старте сессии)
6063
```
6164

62-
Без MCPs skill не запустится.
65+
В Claude Code сказать «test the app» или `/test-app` — должен активироваться `webtest-orch` и показать таблицу `Project state` со статусом проекта.
6366

64-
### 3. Перезапуск Claude Code
67+
### Альтернативная установка из репозитория
6568

66-
Skills загружаются на старте сессии — закрой Claude Code и открой заново.
69+
```bash
70+
git clone https://github.com/CreatmanCEO/webtest-orch.git
71+
cd webtest-orch
72+
bash install.sh # копия в ~/.claude/skills/webtest-orch/
73+
# или для разработки:
74+
bash install.sh --symlink # symlink (Linux/macOS; Windows нужен Developer Mode)
75+
```
6776

68-
### 4. Проверка
77+
### CLI commands
6978

70-
В Claude Code сказать «test the app» — должен активироваться `webapp-test-orchestrator` и показать таблицу `Project state` со статусом проекта.
79+
```bash
80+
npx webtest-orch help # все команды
81+
npx webtest-orch status # где установлен skill + MCPs
82+
npx webtest-orch install --symlink # для разработки skill локально
83+
npx webtest-orch uninstall # удалить установленный skill
84+
```
7185

7286
---
7387

@@ -162,8 +176,8 @@ detect_state.py → JSON
162176

163177
| Симптом | Что проверить |
164178
|---|---|
165-
| «Unknown skill: webapp-test-orchestrator» | `ls ~/.claude/skills/webapp-test-orchestrator/SKILL.md`. Если есть — Claude Code не подхватил, нужен полный рестарт CLI. |
166-
| Skill активировался, но probes пустые | `python ~/.claude/skills/webapp-test-orchestrator/scripts/detect_state.py --human` руками — должен показать таблицу |
179+
| «Unknown skill: webtest-orch» | `ls ~/.claude/skills/webtest-orch/SKILL.md`. Если есть — Claude Code не подхватил, нужен полный рестарт CLI. |
180+
| Skill активировался, но probes пустые | `python ~/.claude/skills/webtest-orch/scripts/detect_state.py --human` руками — должен показать таблицу |
167181
| `Isolation verified: no` в probes | Запустить Step 0 self-test (см. SKILL.md), либо вручную: `python scripts/_image_isolation_check.py --gen-fixtures` → диспатчить subagent → `--mark-verified` |
168182
| Playwright MCP не работает | `claude mcp list` — должен показать `playwright: ✓ Connected` |
169183
| `auth.setup.ts` падает на API-login | Проверь `TEST_API_LOGIN_PATH`, `TEST_API_TOKEN_FIELD` в `.env.test`. Skill потом сделает fallback на UI-login. |
@@ -173,7 +187,7 @@ detect_state.py → JSON
173187
## Структура skill (для разработчика skill'а)
174188

175189
```
176-
~/.claude/skills/webapp-test-orchestrator/
190+
~/.claude/skills/webtest-orch/
177191
├── SKILL.md # workflow для Claude (не редактировать без знания формата)
178192
├── README.md # этот файл
179193
├── install.sh # copy/symlink в ~/.claude/skills/

SKILL.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
---
2-
name: webapp-test-orchestrator
2+
name: webtest-orch
33
description: End-to-end web app testing. Use when user says "test the app", "run e2e", "smoke test", "regression run", "check the login/onboarding/chat flow", "audit accessibility", "test responsive", or "find bugs in <url>" — even when Playwright is not named. Bootstraps Playwright + axe-core, runs LLM exploration on first run, deterministic replay afterward, emits markdown report + bugs.json + *.spec.ts files with run-diffing.
44
trigger: /test-app
55
---
66

7-
# webapp-test-orchestrator
7+
# webtest-orch
88

99
End-to-end testing orchestrator for web applications. Splits into **first-run exploratory** (LLM-driven via Playwright MCP) and **nth-run deterministic replay** (`npx playwright test`, ~zero LLM tokens). Emits regression specs, normalized bugs.json, markdown + HTML report.
1010

0 commit comments

Comments
 (0)