brainstorming
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation).
qpQP (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 typed e…
Independent GitHub snapshot · Automated classification · Original documentation governs
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.