build(web): replace Playwright MCP with project-scoped Playwright CLI

- feat: add `.agents/skills/playwright-cli/` with complete Skill
  markdown, agent interface, and 9 reference files covering session
  management, spec-driven testing, video recording, tracing, storage,
  request mocking, element attributes, test debugging, and running
  custom code
- feat: add `.playwright/cli.config.json` to configure the Playwright
  CLI
- feat: add `web/package.json` `playwright:cli` script that resolves
  `playwright cli` from the repo root
- build: remove `@playwright/mcp` dependency from `web/package.json`
- build: set `XDG_CACHE_HOME` in `mise.toml`
- build: delete `.codex/config.toml` (MCP server config)
- docs: update `README.md`, `docs/web/roadmap.md`,
  `docs/web/decisions.md`, and `web/README.md` to reflect the new
  Playwright CLI approach
This commit is contained in:
2026-07-15 23:10:43 +08:00
parent 29b176d2db
commit 52dd56ff06
21 changed files with 1793 additions and 113 deletions
+107
View File
@@ -0,0 +1,107 @@
---
name: playwright-cli
description: Debug and automate the MyGO Web interface with the repository-pinned Playwright CLI. Use for headless browser inspection, login and file-flow debugging, screenshots, DOM snapshots, console or network diagnosis, Playwright test debugging, and browser-driven verification in this repository.
---
# Debug MyGO with Playwright CLI
Use the Playwright CLI bundled with the locked `@playwright/test` dependency. Keep every browser action behind the repository npm script so a future CLI entry-point change is isolated to `web/package.json`.
## Use the repository command contract
Run browser commands from `web/`:
```bash
mise exec -- npm run playwright:cli -- <command> [arguments]
```
The npm script changes to the repository root before starting Playwright. This makes the CLI discover `.playwright/cli.config.json` and keeps generated output under `.artifacts/playwright-cli/`.
Never invoke `playwright-cli`, `npx playwright-cli`, `npx playwright`, a global Playwright installation, or `@latest`. Do not install `@playwright/cli`; the locked stable `@playwright/test` package supplies the CLI.
## Prepare the local environment
Install locked JavaScript dependencies and the matching Chromium revision:
```bash
cd web
mise exec -- npm ci
mise exec -- npm run playwright:install:deps
mise exec -- npm run playwright:install
```
Treat the Debian system-library command as an environment setup step. Do not rerun it during ordinary debugging when the dependencies are already present.
For authenticated file workflows, start both services in separate long-running terminals:
```bash
# Repository root: backend API on 127.0.0.1:10086.
mise exec -- go run . serve
# web/: Vite on 127.0.0.1:5173, proxying /api to the backend.
mise exec -- npm run dev -- --host 127.0.0.1
```
Use existing local test credentials or credentials supplied for the task. Never write credentials into the Skill, source files, screenshots, or reports. Keep upload fixtures below 20 MB for the current milestone.
## Follow the debugging loop
1. Reproduce the problem with the narrowest existing test first. Confirm the test expresses the intended behavior before changing implementation code.
2. Confirm the required server is reachable. The login page itself only needs Vite; login, list, upload, and download also need the Go backend and suitable local data.
3. Open the page and read its accessibility snapshot:
```bash
mise exec -- npm run playwright:cli -- open http://127.0.0.1:5173/login
mise exec -- npm run playwright:cli -- snapshot
```
4. Use refs from the latest snapshot for interactions. Take another snapshot after navigation, modal changes, or substantial rerenders because refs can become stale.
5. Inspect browser and API evidence before guessing:
```bash
mise exec -- npm run playwright:cli -- console
mise exec -- npm run playwright:cli -- requests
mise exec -- npm run playwright:cli -- request <number>
```
6. Prefer snapshots for structure and screenshots for visual evidence:
```bash
mise exec -- npm run playwright:cli -- screenshot --filename=.artifacts/playwright-cli/mygo-debug.png
```
7. Close every session when finished, including error paths:
```bash
mise exec -- npm run playwright:cli -- close
mise exec -- npm run playwright:cli -- close-all
```
Use a named session with `-s=<name>` when parallel or persistent investigations would otherwise collide. Keep sessions isolated unless the task explicitly requires saved state.
## Debug Playwright tests
Run the repository suite from `web/`:
```bash
mise exec -- npm run test:e2e
```
For interactive debugging, start the test with `--debug=cli`, wait for its `tw-*` session name, then attach through the same npm wrapper. Read [playwright-tests.md](references/playwright-tests.md) before using this workflow.
## Load detailed references only when needed
- Read [element-attributes.md](references/element-attributes.md) when snapshots omit a required DOM attribute.
- Read [playwright-tests.md](references/playwright-tests.md) when attaching to a paused Playwright Test run.
- Read [request-mocking.md](references/request-mocking.md) when reproducing API failures with browser-level routes.
- Read [running-code.md](references/running-code.md) for multi-step page evaluation that individual CLI commands cannot express.
- Read [session-management.md](references/session-management.md) for named, persistent, attached, or parallel sessions.
- Read [spec-driven-testing.md](references/spec-driven-testing.md) when planning, generating, or healing E2E scenarios.
- Read [storage-state.md](references/storage-state.md) when inspecting or preserving cookies, local storage, or session storage.
- Read [test-generation.md](references/test-generation.md) when translating an interactive session into Playwright test code.
- Read [tracing.md](references/tracing.md) for trace capture and diagnosis.
- Read [video-recording.md](references/video-recording.md) only when a video materially improves the debugging result.
## Preserve repository boundaries
Write screenshots, traces, videos, downloaded responses, and temporary upload fixtures only under ignored `.artifacts/` paths. Do not change application data, create accounts, or call destructive UI actions unless the task authorizes those effects. Report browser launch or sandbox failures instead of silently disabling the configured Chromium sandbox.