协作头脑风暴
brainstorming
在实现前澄清需求、探索设计选择,并形成清晰的开发方向。
test-exploratory【开发与工程】Headed exploratory QA of a live app as guest, then logged in, with junk input and navigation abuse. Use when "monkey test", "wander like a confused user", or "guest vs logged in". CRUD stories → test-qa. Hostile sweep → test-red-team.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Degree of freedom: MIXED — wander and charters [HIGH freedom]; driver,
sessions, and triage [LOW freedom — run exactly]. Driver is
playwright-cli, never Playwright MCP. Three isolated sessions — never
share storage.
You drive the live non-prod app like a slightly careless user. The job is
discovery, not verification: find the bugs nobody scripted. The sharpest
bugs live in the guest vs logged-in diff. Report only — do not fix in this
pass. Pair with protocol-browser-anti-stall. Hand real bugs to
workflow-feedback-to-closure. Lock a fix later with test-playwright.
Your turn ends with the Phase 3 report after all three identities have run — not after the guest pass, and not with charters still open inside their time-box.
This is not test-qa (story/CRUD), not test-red-team (hostile
matrix), not test-playwright (this-diff PDCA + fix-as-you-go).
| Skill | Owns |
|---|---|
| test-exploratory (this) | Unscripted wander + junk/nav-abuse + guest vs authed diff table |
test-qa | Story-driven CRUD / smoke — explicitly not a monkey test |
test-red-team | Adversarial feature×dimension matrix (security/data/perf) |
test-playwright | Session diff + blast radius; fixes inline |
audit-auth-flows | Static route×gate matrix (code). This skill is the live probe |
audit-ux-journeys | Story completability / IA — not junk submit + double-click |
audit-accessibility | WCAG / axe only |
Observe: guest session
goto /settings/billing→ 200 + "Update card". Authed same route works. Console clean. Interpret: protected billing UI reachable without a session. Classify: Real bug — guest-in-protected (live complement toaudit-auth-flows). Severity: critical. Finding: guest | billing | guest-in-protected | critical | repro:-s=explore-guestgoto/settings/billing
Non-prod only. You will submit forms and mash destructive controls. If only prod exists: read-only navigation and say so.
Driver is playwright-cli, never Playwright MCP:
PW="npx --yes @playwright/cli@latest"
$PW -s=explore-guest open --headed http://localhost:3000
Read protocol-browser-anti-stall first (Rule 0: headed, one action, no
*.spec.ts). Use three isolated sessions — never share storage:
| Session | Storage | Purpose |
|---|---|---|
-s=explore-guest | default in-memory (no --profile) | anonymous |
-s=explore-authed | state-load or dedicated --profile under ~/.playwright-cli-profiles/ | seeded test account |
-s=explore-post-logout | fresh in-memory | prove logout actually cleared state |
See protocol-browser-anti-stall/references/playwright-session-coordination.md.
Instrument before the first click. After open, capture console,
network/requests, and status ≥400. Judge findings against captured
events, not guesses.
Accessibility tree first. Click/fill by snapshot refs (e12). Refs
die on the next page change — re-snapshot after every navigation
(Playwright Agent CLI snapshots).
Use --depth or a scoped snapshot on dense pages. Screenshot is a
secondary modality for layout/grouping (web.dev 2026), not the driver.
Vision/coordinates only for canvas or unnamed icons
(vision mode).
SBTM charters — copy references/charter-template.md. Time-box each
identity (30–45 min). Stop when the box ends; record leftovers.
<script>, SQL-ish, negatives, wrong types, whitespace); double-submit;
dismiss modals three ways (X, Escape, click-outside).audit-responsive. Empty/error chrome → audit-ui-states. Do not re-audit.Prioritize blast radius: auth, money, account mutation, then the rest.
Run Phase 1 fully as GUEST, then fully as LOGGED-IN, then POST-LOGOUT. Compare. File these in a dedicated table — nothing else in the pack produces it:
audit-auth-flows).localStorage, sessionStorage (Playwright
storageState does not persist sessionStorage — inspect it explicitly),
bfcache/Back showing private data after logout.Classify every captured event before it becomes a finding:
| Class | Meaning | Action |
|---|---|---|
| Real bug | Reproducible: uncaught exception, 500, dead control, raw error, guest-in-protected, hang, data-loss on double-submit | File with repro + identity + evidence |
| UX defect | Works but wrong (silent fail, no loading/error) | Route to audit-ui-states / audit-ux-journeys |
| Flaky | Failed once | Re-run once before filing. Do not file flakes |
| Out of scope | WCAG, pixel polish, load | Hand off; do not duplicate |
Severity by blast radius (auth/money first). Do not generate a Playwright spec dump and call the app "covered" — that is shallow comprehensive coverage.
--profile--profileaudit-responsive · audit-ui-states · audit-auth-flows · each bug → workflow-feedback-to-closure → later test-playwrightPresent the report. Do not fix in this pass.