协作头脑风暴
brainstorming
在实现前澄清需求、探索设计选择,并形成清晰的开发方向。
qp【开发与工程】QP (Quality Platform) router — takes a web URL or a desktop app name and runs the plan → run → regress loop (qp-plan, qp-run, qp-regress) end to end, or routes to one stage. Classifies the target (public vs profile-required), probes which adapter the session has (Playwright MCP for web, computer-use MCP for desktop), and writes every artifact with a …
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
One entry point for people who want to dynamically test a web or desktop app with a QA lens from inside Claude Code. Three stages, each its own skill, each leaving files:
| stage | skill | you get |
|---|---|---|
| Plan | qp-plan | qp/plan/inventory.md (surfaces the app exposes) + qp/plan/tcs.tsv (test cases) |
| Automation (run) | qp-run | qp/run/<ts>/verdicts.tsv + masked evidence (DOM snapshots or screenshots) |
| Regression | qp-regress | qp/regress/<ts>/surface_reach.txt + per-TC delta vs the previous run |
Glossary (one line each, because a first-time reader asked): TC = test case · inventory = the list of screens/routes/menus the app exposes · MTM = each finding is labeled as planned / differs from the plan document / code differs · precondition = what must already be true before a step runs (logged in, page loaded), checked not assumed — a failure before it is met is BLOCKED, not FAIL · surface_reach = how many TCs actually left the entry screen · engine = which machinery drove the run (see §Engine).
bash plugins/fh-qp/scripts/qp_tools.sh target-class <https://… | app:NAME> [--profile <file>]
| result | rc | what you do |
|---|---|---|
PUBLIC | 0 | proceed |
PROFILE_OK | 0 | proceed with the profile |
PROFILE_REQUIRED | 4 | stop. Say: "this target is not public; QP needs a profile file — copy plugins/fh-qp/qp_profile.example.yaml to a gitignored path, fill the host/app, and re-run with --profile." Do not improvise a run against a private host. |
UNKNOWN | 10 | stop, report the target form QP accepts |
List the MCP tool names this session actually has (from your tool list — do not guess), then:
bash plugins/fh-qp/scripts/qp_tools.sh adapter-probe --need web|desktop --tools "<comma-separated tool names>"
ADAPTER=… evidence=dom|pixel → proceed and write that line into every artifact header.
HARNESS_ERROR (rc 10) → stop. Write qp/HARNESS_ERROR.txt with the reason and tell the user which MCP to connect (Playwright MCP for web · computer-use MCP for desktop). This is not a pass and not a skip.
:par (check .claude/capabilities/**/*.cap and bash scripts/cluster_capability_scan.sh when in an FH hub), call its entry and merge constraints strictest-wins (capability_composition_contract.md). Engine marker: engine=capability:<id>.engine=mcp-fallback adapter=<name> evidence=dom|pixel.--engine capability) and none is registered → HARNESS_ERROR reason=capability-not-registered, never a silent fallback.evidence=pixel) is the weaker edition: no DOM, so verify closes only by screenshot text you can read, and surface_reach hashes screenshots, not DOM. Say so in the report header.qp <target> = plan → run → regress in order, stopping at the first HARNESS_ERROR. qp plan|run|regress <target> = one stage. Each stage skill carries its own Done When.
target-class line recorded in qp/plan/inventory.md header · [mandatory-pass] — rc is the check.ADAPTER= or HARNESS_ERROR written to a file · [mandatory-pass] — file exists and matches the probe output.engine= and evidence= · [measured] — grep -L 'engine=' qp/**/*.md qp/**/*.tsv is empty.scripts/test_fh_qp_lanes.sh and the per-stage Done When files].Needs only bash + the session's MCP adapter. No other FH skill is required. Inside an FH hub the capability scan is optional.
Mobile (deferred). Verifying FH itself (use FH's own gates). Fixing the app.