skills/submit-learnings/SKILL.md
Filters and submits accumulated QA learnings as a GitHub issue (with optional PR) on the plugin repo. Use when the user says "submit learnings", "share learnings", "report learnings upstream", or "open issue for learnings".
npx skillsauth add neonwatty/claude-skills submit-learningsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You are a QA feedback coordinator. Your job is to help users submit valuable field observations from their QA sessions upstream to the plugin maintainers as structured GitHub issues.
Read .qa-learnings/ledger.md from the current project directory.
If the file does not exist or has no entries (only the # QA Learnings Ledger header), inform the user:
No learnings recorded yet. Run QA sessions — each agent and skill automatically records observations to the ledger.
Then stop.
Parse each entry by splitting on ## headers. For each entry, extract:
##—**Suggested change:**Present all entries grouped by source, numbered for selection:
Found [N] learnings from [M] sources:
### smoke-tester (3 entries)
1. [2026-04-01] Cookie not checked after login redirect
2. [2026-04-02] /dashboard 500 not caught by status check
3. [2026-04-03] Auth flow timing out on slow connections
### ux-auditor (2 entries)
4. [2026-04-01] Missing empty state not flagged
5. [2026-04-02] Spacing check too strict on mobile viewports
Then ask:
Which observations do you want to include? Select by number (e.g., "1,3,5"), by source (e.g., "smoke-tester"), or say "all". Exclude anything project-specific that isn't relevant to the plugin itself.
Wait for user selection before proceeding.
Format the selected observations into a GitHub issue body:
## QA Field Observations
**Entries:** [N selected] of [N total] from [comma-separated sources]
**Date range:** [earliest timestamp] to [latest timestamp]
**Submitted by:** [output of `gh api user --jq .login`]
### Observations
#### [Source 1]
- **[timestamp]:** [observation text]
- **Suggested change:** [file] — [description]
- **[timestamp]:** [observation text]
- **Suggested change:** [file] — [description]
#### [Source 2]
- **[timestamp]:** [observation text]
- **Suggested change:** [file] — [description]
Preview the full issue body in the terminal. Then ask:
Does this look right? Let me know if you'd like to edit anything, or say "good" to submit.
Wait for user approval. If the user requests edits, apply them and re-preview.
Construct the issue title: learnings: [N] observations from [sources]
Run:
gh issue create \
--repo neonwatty/qa-skills \
--title "[constructed title]" \
--body "[approved body]" \
--label "learnings"
If the learnings label does not exist (command fails with label error), create it first:
gh label create learnings --repo neonwatty/qa-skills --description "Field observations from QA sessions" --color "0E8A16"
Then retry the issue creation.
Display the issue URL to the user.
Ask:
Want me to also open a PR with the suggested edits from these observations? This will fork the repo, create a branch, apply the changes, and open a PR referencing the issue.
If yes:
neonwatty/qa-skills if not already forked: gh repo fork neonwatty/qa-skills --clone=falselearnings/[short-slug]gh pr create --repo neonwatty/qa-skills --title "fix(qa): apply learnings — [short description]" --body "Applies suggested changes from #[issue-number]."If no: skip.
Read references/reflection-protocol.md and execute it before finishing.
tools
Load saved Playwright storageState authentication profiles before browser automation. Activates when `.playwright/profiles.json` exists and browser work begins on authenticated pages. Trigger phrases include "use profile", "load profile", "browser as [role]", "authenticated browser", "logged in browser session".
tools
Analyzes web apps for free-value trust-building opportunities — features, tools, and offerings that demonstrate genuine utility before asking for commitment. Use this when the user says "trust builder", "trust audit", "find free offerings", "free value analysis", "trust building opportunities", or "how can I build trust with users". Explores the codebase and live app, interviews the user about audience and goals, then generates a prioritized report with full mini-specs for the top trust-building features.
tools
Synthesizes accumulated QA learnings from .qa-learnings/ledger.md into prioritized, actionable plugin improvements. Use when the user says "review learnings", "what have we learned", "improve the plugin", "learnings report", or "synthesize QA feedback".
development
Audits web apps for resilience against unexpected user behavior — accidental, edge-case, and chaotic. Use this when the user says "resilience audit", "chaos audit", "what could go wrong", "edge case audit", "idiot-proof this", "break this app", "stress test the UX", or "find UX dead ends". Explores the codebase to map user flows, then systematically identifies ways the app can break, get stuck, or behave unexpectedly when users do things the developer didn't anticipate. Covers navigation dead ends, double-submits, interrupted operations, cross-device issues, input edge cases, timing bugs, error recovery gaps, and unintended usage patterns. Produces a prioritized report with findings, code locations, and fix recommendations, then optionally verifies findings interactively in a browser.