From 99268a98eb939ac25965cc73c947e22731327701 Mon Sep 17 00:00:00 2001 From: Test User Date: Mon, 13 Apr 2026 20:28:08 +0900 Subject: [PATCH 1/7] feat(qa): rewrite as lean explore+report skill MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - SKILL.md: 390 → 90 lines (77% token reduction) - Remove: browser tool, fix loop, bootstrap, tiers, regression mode - Add: exploration-guide.md reference (on-demand load) - Simplify: report template (fix sections removed) - Add: Phase 3 transition to subagent-driven/executing-plans --- .../plans/2026-04-13-qa-skill-redesign.md | 367 ++++++++++++++++ .../specs/2026-04-13-qa-skill-redesign.md | 68 +++ plugins/me/skills/qa/SKILL.md | 409 +++--------------- .../skills/qa/references/exploration-guide.md | 27 ++ .../me/skills/qa/references/issue-taxonomy.md | 52 --- .../skills/qa/templates/qa-report-template.md | 70 +-- 6 files changed, 521 insertions(+), 472 deletions(-) create mode 100644 docs/superpowers/plans/2026-04-13-qa-skill-redesign.md create mode 100644 docs/superpowers/specs/2026-04-13-qa-skill-redesign.md create mode 100644 plugins/me/skills/qa/references/exploration-guide.md diff --git a/docs/superpowers/plans/2026-04-13-qa-skill-redesign.md b/docs/superpowers/plans/2026-04-13-qa-skill-redesign.md new file mode 100644 index 00000000..b50d35d6 --- /dev/null +++ b/docs/superpowers/plans/2026-04-13-qa-skill-redesign.md @@ -0,0 +1,367 @@ +# QA Skill Redesign Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Rewrite `/qa` skill as a lean, project-agnostic explore+report tool (~80 lines SKILL.md) with heavy content in references. + +**Architecture:** Replace the current 390-line monolithic SKILL.md with a slim core (flow + rules + health score + transition) and two reference files loaded on demand. Extract exploration checklists from SKILL.md and issue-taxonomy.md into a new `exploration-guide.md`. Simplify the report template to remove fix-related sections. + +**Tech Stack:** Markdown (skill authoring), no runtime dependencies + +--- + +### Task 1: Create `references/exploration-guide.md` + +Extract project-type exploration content from current SKILL.md (lines 181-224: Web/CLI/API/Library sections) and current issue-taxonomy.md (lines 65-117: Exploration Checklists) into a new reference file. + +**Files:** +- Create: `plugins/me/skills/qa/references/exploration-guide.md` + +- [ ] **Step 1: Write the exploration guide** + +Create `plugins/me/skills/qa/references/exploration-guide.md` with this content: + +```markdown +# Exploration Guide + +Reference material for QA exploration. Read this when you need project-type-specific guidance during the Explore phase. These are suggestions, not mandatory checklists — adapt to the project. + +## Web Applications + +For each page visited: + +1. **Visual scan** — Look for layout issues, broken images, alignment +2. **Interactive elements** — Click every button, link, and control +3. **Forms** — Fill and submit. Test empty submission, invalid data, edge cases +4. **Navigation** — Check all paths in/out. Breadcrumbs, back button, deep links +5. **States** — Check empty state, loading state, error state, overflow state +6. **Console** — Check for JS errors or failed network requests after interactions +7. **Responsiveness** — Check mobile and tablet viewports if relevant +8. **Auth boundaries** — What happens when logged out? Different user roles? + +**Framework hints:** +- Next.js: hydration errors, `_next/data` 404s, client-side navigation +- Rails: N+1 warnings, CSRF tokens, Turbo/Stimulus integration +- SPA: stale state, back/forward history, client-side routes + +**Browser testing:** Use `/browse` skill for browser automation. + +## CLI Tools + +For each command/subcommand: + +1. **Help text** — Does `--help` exist? Is it accurate and complete? +2. **Happy path** — Run with typical inputs. Correct output? +3. **Invalid inputs** — Wrong types, missing required args, unknown flags. Clear error messages? +4. **Edge cases** — Empty input, huge input, special characters, piped input, no TTY +5. **Exit codes** — 0 on success, non-zero on failure? Consistent? +6. **stderr vs stdout** — Errors go to stderr? Output is parseable? +7. **Combinations** — Do flags interact correctly? Conflicting flags handled? +8. **Idempotency** — Run the same command twice. Same result? + +## API Servers + +For each endpoint: + +1. **Happy path** — Valid request, correct response code and body +2. **Validation** — Missing fields, wrong types, boundary values. Proper 4xx responses? +3. **Auth** — Request without token, expired token, wrong role. Proper 401/403? +4. **Error responses** — Consistent format? Useful error messages? No stack traces leaked? +5. **Idempotency** — POST twice, PUT twice. Expected behavior? +6. **Content negotiation** — Correct Content-Type headers? +7. **Edge cases** — Large payloads, empty bodies, unicode, special characters +8. **Spec compliance** — If OpenAPI/Swagger exists, does the endpoint match? + +## Libraries + +For each public API surface: + +1. **Test suite** — Run all tests. Note failures, slow tests, flaky tests +2. **Coverage gaps** — Are there exported functions with no tests? +3. **Error messages** — When misused, are errors clear and actionable? +4. **Type safety** — Do types match runtime behavior? +5. **Edge cases** — Boundary values, null/undefined, empty collections +6. **Documentation** — Do README examples actually work? + +## Other Project Types + +For projects that don't fit the above (infra, data pipelines, mobile, etc.): + +1. **Identify entry points** — What are the primary interfaces? +2. **Run existing tests** — Execute whatever test suite exists +3. **Exercise main flows** — Test the primary use cases end-to-end +4. **Check error handling** — What happens when things go wrong? +5. **Review configuration** — Are defaults sensible? Are required configs documented? +``` + +- [ ] **Step 2: Verify file exists and is well-formed** + +Run: `wc -l plugins/me/skills/qa/references/exploration-guide.md && head -3 plugins/me/skills/qa/references/exploration-guide.md` +Expected: ~60 lines, starts with `# Exploration Guide` + +- [ ] **Step 3: Commit** + +```bash +git add plugins/me/skills/qa/references/exploration-guide.md +git commit -m "feat(qa): add exploration-guide.md reference file" +``` + +--- + +### Task 2: Slim down `references/issue-taxonomy.md` + +Remove the "Exploration Checklists" section (now in exploration-guide.md). Keep only severity levels and category definitions. + +**Files:** +- Modify: `plugins/me/skills/qa/references/issue-taxonomy.md` (remove lines 65-117) + +- [ ] **Step 1: Remove Exploration Checklists section** + +Edit `plugins/me/skills/qa/references/issue-taxonomy.md`: delete everything from `## Exploration Checklists` (line 65) to end of file (line 117). The file should end after the `### 7. Documentation` section. + +- [ ] **Step 2: Verify** + +Run: `wc -l plugins/me/skills/qa/references/issue-taxonomy.md && tail -5 plugins/me/skills/qa/references/issue-taxonomy.md` +Expected: ~63 lines, ends with Documentation category content + +- [ ] **Step 3: Commit** + +```bash +git add plugins/me/skills/qa/references/issue-taxonomy.md +git commit -m "refactor(qa): move exploration checklists to exploration-guide.md" +``` + +--- + +### Task 3: Simplify `templates/qa-report-template.md` + +Remove fix-related sections (Fixes Applied, Before/After Evidence, Regression Tests, Regression comparison) and the fix-related fields from Ship Readiness. + +**Files:** +- Modify: `plugins/me/skills/qa/templates/qa-report-template.md` + +- [ ] **Step 1: Rewrite the template** + +Replace entire content of `plugins/me/skills/qa/templates/qa-report-template.md` with: + +```markdown +# QA Report: {PROJECT_NAME} + +| Field | Value | +|-------|-------| +| **Date** | {DATE} | +| **Target** | {what was tested} | +| **Branch** | {BRANCH} | +| **Commit** | {COMMIT_SHA} | +| **Scope** | {SCOPE or "Full project"} | +| **Duration** | {DURATION} | + +## Health Score: {SCORE}/100 + +| Category | Weight | Score | +|----------|--------|-------| +| {category} | {weight}% | {0-100} | + +## Top Issues + +1. **ISSUE-NNN: {title}** — {one-line description} + +## Summary + +| Severity | Count | +|----------|-------| +| Critical | 0 | +| High | 0 | +| Medium | 0 | +| Low | 0 | +| **Total** | **0** | + +## Issues + +### ISSUE-001: {Short title} + +| Field | Value | +|-------|-------| +| **Severity** | critical / high / medium / low | +| **Category** | {category} | +| **Location** | {where the issue was found} | + +**Description:** {What is wrong, expected vs actual.} + +**Repro Steps:** + +1. {Action} +2. **Observe:** {what goes wrong} + +**Evidence:** {link to evidence file or inline quote} +``` + +- [ ] **Step 2: Verify** + +Run: `wc -l plugins/me/skills/qa/templates/qa-report-template.md` +Expected: ~45 lines (down from 102) + +- [ ] **Step 3: Commit** + +```bash +git add plugins/me/skills/qa/templates/qa-report-template.md +git commit -m "refactor(qa): simplify report template, remove fix sections" +``` + +--- + +### Task 4: Rewrite `SKILL.md` + +Replace the entire 390-line SKILL.md with a lean ~80-line version covering: frontmatter, 3-phase flow, rules, health score, transition. + +**Files:** +- Modify: `plugins/me/skills/qa/SKILL.md` + +- [ ] **Step 1: Rewrite SKILL.md** + +Replace entire content of `plugins/me/skills/qa/SKILL.md` with: + +```markdown +--- +name: qa +description: Use when asked to "qa", "QA", "test this", or "find bugs". Proactively + suggest when user says a feature is ready for testing or asks "does this work?". + Explores a project like a real user, produces a structured report with health scores + and evidence. +allowed-tools: + - Bash + - Read + - Write + - Edit + - Glob + - Grep + - Agent +--- + +# /qa: Analyze → Explore → Report + +You are a QA engineer. Test projects like a real user — run commands, call APIs, exercise edge cases. Produce a structured report with evidence. You do NOT fix bugs — only find and document them. + +## Phase 1: Analyze + +Understand the project before testing. + +1. Read README, project structure, entry points, build system +2. Check for test framework. If none: inform the user ("No test framework detected"), continue without +3. If on a feature branch: `git diff main...HEAD --name-only` to scope affected areas +4. Decide a QA strategy for this project. State it briefly: "I will test X, Y, Z because..." + +For project-type-specific guidance, read `qa/references/exploration-guide.md`. + +## Phase 2: Explore + Report + +Execute the strategy. Create output directory: `mkdir -p .qa/reports/evidence` + +**For each issue found:** +1. Verify reproducibility — retry once before documenting +2. Save evidence to `.qa/reports/evidence/` (command output, screenshots, HTTP responses) +3. Append to report immediately — don't batch + +**Web projects:** Use `/browse` skill for browser automation. + +**Rules:** +- Evidence required for every issue. No exceptions. +- Never include credentials — write `[REDACTED]` +- Depth over breadth. 5-10 well-documented issues > 20 vague descriptions. +- Show evidence to the user inline after capturing. + +**Issue classification:** See `qa/references/issue-taxonomy.md` for severity levels and categories. + +### Health Score + +Pick categories relevant to the project (see issue-taxonomy.md). Each starts at 100, deduct per finding: +- Critical: -25, High: -15, Medium: -8, Low: -3 (min 0) + +Assign weights summing to 100%. `score = sum(category_score * weight)` + +### Write Report + +Use template from `qa/templates/qa-report-template.md`. Save to `.qa/reports/qa-report-{YYYY-MM-DD}.md`. + +Save `baseline.json`: +```json +{ + "date": "YYYY-MM-DD", + "target": "", + "healthScore": N, + "issues": [{ "id": "ISSUE-001", "title": "...", "severity": "...", "category": "..." }], + "categoryScores": { "category": N } +} +``` + +## Phase 3: Transition + +After the report: + +> "N개 이슈를 발견했습니다. 수정하시겠습니까? +> A) Subagent-driven — 이슈별 병렬 수정 (`superpowers:subagent-driven-development`) +> B) Inline — 순차 수정 (`superpowers:executing-plans`) +> C) 아니오 — 리포트만 남기고 종료" + +If A: invoke `superpowers:subagent-driven-development` with the report as input. +If B: invoke `superpowers:executing-plans` with the report as input. +If C: end. + +## Completion Status + +- **DONE** — All steps completed. Evidence provided for each claim. +- **BLOCKED** — Cannot proceed. State what is blocking. +- **NEEDS_CONTEXT** — Missing information required to continue. +``` + +- [ ] **Step 2: Verify line count and frontmatter** + +Run: `wc -l plugins/me/skills/qa/SKILL.md && head -10 plugins/me/skills/qa/SKILL.md` +Expected: ~80 lines, frontmatter has `name: qa` and no browser tool in allowed-tools + +- [ ] **Step 3: Verify no references to removed content** + +Run: `grep -n 'bootstrap\|mcp__plugin\|WTF\|Fix Loop\|Phase 4\|regression\|--quick\|--exhaustive\|Tier' plugins/me/skills/qa/SKILL.md` +Expected: No matches + +- [ ] **Step 4: Commit** + +```bash +git add plugins/me/skills/qa/SKILL.md +git commit -m "feat(qa): rewrite as lean explore+report skill (~80 lines)" +``` + +--- + +### Task 5: Final verification + +Verify all files are consistent and the skill is complete. + +**Files:** +- Read: all files in `plugins/me/skills/qa/` + +- [ ] **Step 1: Verify file structure** + +Run: `find plugins/me/skills/qa/ -type f | sort` +Expected: +``` +plugins/me/skills/qa/SKILL.md +plugins/me/skills/qa/references/exploration-guide.md +plugins/me/skills/qa/references/issue-taxonomy.md +plugins/me/skills/qa/templates/qa-report-template.md +``` + +- [ ] **Step 2: Verify SKILL.md references are valid** + +Run: `grep 'qa/references\|qa/templates' plugins/me/skills/qa/SKILL.md` +Expected: references to `qa/references/exploration-guide.md`, `qa/references/issue-taxonomy.md`, `qa/templates/qa-report-template.md` — all exist + +- [ ] **Step 3: Verify total token budget** + +Run: `wc -l plugins/me/skills/qa/SKILL.md plugins/me/skills/qa/references/*.md plugins/me/skills/qa/templates/*.md` +Expected: SKILL.md ~80 lines, references ~120 lines, template ~45 lines + +- [ ] **Step 4: Verify no orphan references** + +Run: `grep -rn 'mcp__plugin_superpowers\|bootstrap\|Phase 3: Fix\|Phase 4: Final\|--quick\|--exhaustive' plugins/me/skills/qa/` +Expected: No matches in any file diff --git a/docs/superpowers/specs/2026-04-13-qa-skill-redesign.md b/docs/superpowers/specs/2026-04-13-qa-skill-redesign.md new file mode 100644 index 00000000..ec900302 --- /dev/null +++ b/docs/superpowers/specs/2026-04-13-qa-skill-redesign.md @@ -0,0 +1,68 @@ +# QA Skill Redesign Spec + +## Goal + +`/qa` 스킬을 범용적으로 개선. 프로젝트 타입에 독립적이고, 토큰 효율적인 탐색+리포트 전용 스킬. + +## Decisions + +| Decision | Choice | +|----------|--------| +| Scope | 탐색 + 리포트 전용. Fix는 별도 스킬에 위임 | +| Browser | QA에서 제거. 웹 테스트 시 `/browse` 별도 사용 | +| QA strategy | 프로젝트 타입별 고정 체크리스트 없음. Analyze 단계에서 동적 수립 | +| Test framework | 없으면 안내만. 부트스트랩 안 함 | +| Report structure | `.qa/reports/` 유지 (MD + baseline.json + evidence/) | +| Location | `plugins/me/skills/qa/` 유지 | +| Parameters | 없음. 자연어로 scope 지정 | +| Fix transition | 리포트 후 사용자에게 수정 여부 질문. A) subagent-driven B) inline(executing-plans) C) 종료 | + +## Flow + +1. **Analyze** — 프로젝트 파악 (README, 구조, 엔트리포인트, 테스트 유무, 빌드 시스템) → QA 전략 수립 +2. **Explore + Report** — 전략대로 테스트, 이슈 발견 즉시 기록 + evidence 저장, 리포트 생성 +3. **Transition** — "N개 이슈를 발견했습니다. 수정하시겠습니까?" + - A) Subagent-driven → `superpowers:subagent-driven-development` 호출 + - B) Inline → `superpowers:executing-plans` 호출 + - C) 아니오 → 종료 + +## File Structure + +``` +plugins/me/skills/qa/ +├── SKILL.md # 핵심 플로우만 (~80줄) +├── references/ +│ ├── issue-taxonomy.md # 심각도/카테고리 정의 (기존 유지) +│ └── exploration-guide.md # 프로젝트 타입별 참고 (필요 시 Read) +└── templates/ + └── qa-report-template.md # Fix/Regression 섹션 제거 +``` + +## SKILL.md Content (Always Loaded) + +- 3단계 플로우 +- 핵심 규칙 (evidence 필수, 재현성 확인, 즉시 기록) +- Health score 계산식 +- Transition 선택지 + +## References (Read on Demand) + +- `issue-taxonomy.md` — 심각도/카테고리 정의. exploration 체크리스트는 "참고자료"로 격하 +- `exploration-guide.md` — 기존 issue-taxonomy.md의 "Exploration Checklists" 섹션 + SKILL.md의 프로젝트 타입별 섹션을 합쳐서 추출한 새 파일 + +## Removed from Current Skill + +- Browser tool section (`mcp__plugin_superpowers-chrome_chrome__use_browser`) +- Test framework bootstrap +- Fix Loop (Phase 3), Final QA (Phase 4) +- WTF-likelihood, self-regulation +- Project type-specific fixed checklists (moved to references) +- Tier/Mode/Parameter tables +- Clean working tree enforcement +- Regression mode + +## Token Budget + +- Current: ~390 lines +- Target: ~80 lines for SKILL.md +- Heavy content → references/ (loaded on demand) diff --git a/plugins/me/skills/qa/SKILL.md b/plugins/me/skills/qa/SKILL.md index a27511e7..7a26b911 100644 --- a/plugins/me/skills/qa/SKILL.md +++ b/plugins/me/skills/qa/SKILL.md @@ -1,13 +1,9 @@ --- name: qa -description: Systematically QA test a project and fix bugs found. Runs QA testing, - then iteratively fixes bugs in source code, committing each fix atomically and - re-verifying. Use when asked to "qa", "QA", "test this", "find bugs", - "test and fix", or "fix what's broken". - Proactively suggest when the user says a feature is ready for testing - or asks "does this work?". Three tiers: Quick (critical/high only), - Standard (+ medium), Exhaustive (+ cosmetic). Produces before/after health scores, - fix evidence, and a ship-readiness summary. For report-only mode, use /qa-only. +description: Use when asked to "qa", "QA", "test this", or "find bugs". Proactively + suggest when user says a feature is ready for testing or asks "does this work?". + Explores a project like a real user, produces a structured report with health scores + and evidence. allowed-tools: - Bash - Read @@ -16,382 +12,79 @@ allowed-tools: - Glob - Grep - Agent - - mcp__plugin_superpowers-chrome_chrome__use_browser --- -# /qa: Explore → Fix → Verify → Report +# /qa: Analyze → Explore → Report -You are a QA engineer AND a bug-fix engineer. Test projects like a real user — run commands, click through UIs, call APIs, exercise edge cases. When you find bugs, fix them in source code with atomic commits, then re-verify. Produce a structured report with before/after evidence. +You are a QA engineer. Test projects like a real user — run commands, call APIs, exercise edge cases. Produce a structured report with evidence. You do NOT fix bugs — only find and document them. -## Browser Tool (Web Projects) +## Phase 1: Analyze -When testing web projects, use `mcp__plugin_superpowers-chrome_chrome__use_browser` for all browser interactions: +Understand the project before testing. -| Operation | Action | Example | -|-----------|--------|---------| -| Navigate to URL | `navigate` | `{action: "navigate", payload: "https://example.com"}` | -| Take screenshot | `screenshot` | `{action: "screenshot", payload: "/path/to/file.png"}` | -| Read page content | `extract` | `{action: "extract", payload: "markdown"}` | -| Click element | `click` | `{action: "click", selector: "button.submit"}` | -| Type into input | `type` | `{action: "type", selector: "#email", payload: "user@example.com"}` | -| Run JS | `eval` | `{action: "eval", payload: "JSON.stringify(window.__errors || [])"}` | -| Wait for element | `await_element` | `{action: "await_element", selector: ".loaded", timeout: 10000}` | +1. Read README, project structure, entry points, build system +2. Check for test framework. If none: inform the user ("No test framework detected"), continue without +3. If on a feature branch: `git diff main...HEAD --name-only` to scope affected areas +4. Decide a QA strategy for this project. State it briefly: "I will test X, Y, Z because..." -**After every navigate or screenshot:** use the Read tool on the screenshot file to show the user the visual result inline. +For project-type-specific guidance, read `qa/references/exploration-guide.md`. -**Console error collection (inject once after navigate, collect after interactions):** -```javascript -// Inject: -window.__qaErrors = []; window.addEventListener('error', e => window.__qaErrors.push({type:'error',msg:e.message,url:e.filename,line:e.lineno})); window.addEventListener('unhandledrejection', e => window.__qaErrors.push({type:'promise',msg:String(e.reason)})); +## Phase 2: Explore + Report -// Collect: -JSON.stringify(window.__qaErrors) -``` - ---- - -## Parameters - -Parse from the user's request: - -| Parameter | Default | Override example | -|-----------|---------|-----------------:| -| Target | (infer from project) | URL, command name, API base URL | -| Tier | Standard | `--quick`, `--exhaustive` | -| Mode | full | `--regression .qa/reports/baseline.json` | -| Output dir | `.qa/reports/` | `Output to /tmp/qa` | -| Scope | Full project (or diff-scoped) | `Focus on the auth module` | - -**Tiers determine which issues get fixed:** -- **Quick:** Fix critical + high severity only -- **Standard:** + medium severity (default) -- **Exhaustive:** + low/cosmetic severity - ---- - -## Test Framework Bootstrap - -**Detect existing test framework and project runtime:** - -```bash -[ -f Gemfile ] && echo "RUNTIME:ruby" -[ -f package.json ] && echo "RUNTIME:node" -[ -f requirements.txt ] || [ -f pyproject.toml ] && echo "RUNTIME:python" -[ -f go.mod ] && echo "RUNTIME:go" -[ -f Cargo.toml ] && echo "RUNTIME:rust" -ls jest.config.* vitest.config.* playwright.config.* .rspec pytest.ini pyproject.toml phpunit.xml 2>/dev/null -ls -d test/ tests/ spec/ __tests__/ cypress/ e2e/ 2>/dev/null -[ -f .qa/no-test-bootstrap ] && echo "BOOTSTRAP_DECLINED" -``` - -**If test framework detected:** Print "Test framework detected: {name}. Skipping bootstrap." Read 2-3 existing test files to learn conventions. **Skip the rest of bootstrap.** - -**If BOOTSTRAP_DECLINED:** Print "Test bootstrap previously declined — skipping." **Skip the rest of bootstrap.** - -**If runtime detected but no test framework — bootstrap:** - -| Runtime | Primary | Alternative | -|---------|---------|-------------| -| Ruby/Rails | minitest + fixtures + capybara | rspec + factory_bot | -| Node.js | vitest + @testing-library | jest + @testing-library | -| Next.js | vitest + @testing-library/react + playwright | jest + cypress | -| Python | pytest + pytest-cov | unittest | -| Go | stdlib testing + testify | stdlib only | -| Rust | cargo test (built-in) | — | - -Ask the user which framework to use, install it, create a minimal config, and run a smoke test to verify. - -If the user declines: write `.qa/no-test-bootstrap` and continue. - -After bootstrap: write `TESTING.md` with run command, conventions, and test expectations. Append a `## Testing` section to `CLAUDE.md` if it doesn't already have one. Commit: `"chore: bootstrap test framework ({name})"`. - ---- - -## Modes - -### Diff-aware (automatic when on a feature branch) - -1. **Analyze the branch diff:** - ```bash - git diff main...HEAD --name-only - git log main..HEAD --oneline - ``` +Execute the strategy. Create output directory: `mkdir -p .qa/reports/evidence` -2. **Identify affected areas** from the changed files — routes, CLI commands, API endpoints, library functions, etc. +**For each issue found:** +1. Verify reproducibility — retry once before documenting +2. Save evidence to `.qa/reports/evidence/` (command output, screenshots, HTTP responses) +3. Append to report immediately — don't batch -3. **Test each affected area** using the appropriate strategy for the project type. +**Web projects:** Use `/browse` skill for browser automation. -4. **Cross-reference with commit messages** to verify the code does what the commits claim. +**Rules:** +- Evidence required for every issue. No exceptions. +- Never include credentials — write `[REDACTED]` +- Depth over breadth. 5-10 well-documented issues > 20 vague descriptions. +- Show evidence to the user inline after capturing. -### Full (default) -Systematic exploration of the entire project surface. Document 5-10 well-evidenced issues. Produce health score. +**Issue classification:** See `qa/references/issue-taxonomy.md` for severity levels and categories. -### Quick (`--quick`) -Smoke test. Hit the main entry points. Check: does it run? Obvious errors? Core flow works? Produce health score. +### Health Score -### Regression (`--regression `) -Run full mode, then load `baseline.json` from a previous run. Diff: which issues are fixed? Which are new? Score delta? +Pick categories relevant to the project (see issue-taxonomy.md). Each starts at 100, deduct per finding: +- Critical: -25, High: -15, Medium: -8, Low: -3 (min 0) ---- - -## Phase 1: Setup - -1. Parse parameters from user's request -2. Check for clean working tree: - ```bash - git status --porcelain - ``` - If dirty, **STOP** and ask: "Your working tree has uncommitted changes. /qa needs a clean tree so each bug fix gets its own atomic commit. Options: A) Commit my changes, B) Stash my changes, C) Abort" -3. Create output directories: - ```bash - mkdir -p .qa/reports/evidence - ``` -4. Copy report template from `qa/templates/qa-report-template.md` to output dir -5. Detect test framework (see bootstrap section above) -6. Record start time: `_QA_START=$(date +%s)` - ---- - -## Phase 2: Explore - -Systematically test the project. The approach depends on what you're testing. See `qa/references/issue-taxonomy.md` for detailed per-type exploration checklists. +Assign weights summing to 100%. `score = sum(category_score * weight)` -**Tools by project type:** -- **Web:** Browser tool (`mcp__plugin_superpowers-chrome_chrome__use_browser`) for navigation, interaction, screenshots -- **CLI/API/Library:** Bash tool for commands, `curl` requests, test execution +### Write Report -### Evidence Capture +Use template from `qa/templates/qa-report-template.md`. Save to `.qa/reports/qa-report-{YYYY-MM-DD}.md`. -Save all evidence to `.qa/reports/evidence/`. Use the naming convention `issue-NNN-{description}.{ext}`: - -```bash -# Command output (CLI, API, test runs) -command 2>&1 | tee .qa/reports/evidence/issue-001-invalid-flag.txt - -# API response with headers -curl -sS -D- http://localhost:3000/api/users 2>&1 > .qa/reports/evidence/issue-002-response.txt - -# Screenshots (web) — via browser tool screenshot action +Save `baseline.json`: +```json +{ + "date": "YYYY-MM-DD", + "target": "", + "healthScore": N, + "issues": [{ "id": "ISSUE-001", "title": "...", "severity": "...", "category": "..." }], + "categoryScores": { "category": N } +} ``` -In reports, reference evidence as: -- Screenshots: `![Evidence](evidence/issue-001-before.png)` -- Text output: `` `cat evidence/issue-001-output.txt` `` or quote inline - -### Web Applications - -1. **Orient:** Navigate to the target URL, screenshot the landing page, extract navigation links, collect console errors. -2. **Explore pages:** Visit pages systematically. At each page: screenshot, check console, test interactive elements, forms, navigation, states (empty/loading/error/overflow), responsiveness. -3. **Auth flows:** If auth is needed, handle login. Never include credentials in reports — write `[REDACTED]`. -4. **Framework hints:** - - Next.js: check for hydration errors, `_next/data` 404s, test client-side navigation - - Rails: check N+1 warnings, CSRF tokens, Turbo/Stimulus integration - - SPA: use `extract` for navigation (link eval may miss client-side routes), check stale state, back/forward history - -### CLI Tools - -1. **Orient:** Read README, help text (`--help`), and man pages. Identify all commands and flags. -2. **Run commands:** Execute with typical inputs, edge cases (empty input, huge input, invalid flags, missing args), and combinations. -3. **Check outputs:** Verify stdout, stderr, and exit codes are correct and consistent. -4. **Run test suite:** Execute existing tests, note any failures. -5. **Cross-reference:** Compare test results with manual execution findings. - -### API Servers - -1. **Orient:** Find API spec (OpenAPI/Swagger) if available. Read route definitions. Identify all endpoints. -2. **Hit endpoints:** Use `curl` via Bash to send real HTTP requests with valid inputs, invalid inputs, missing auth, edge cases. -3. **Check responses:** Verify status codes, response bodies, headers, error formats. -4. **Auth flows:** Test token/session lifecycle — login, refresh, expiry, invalid tokens. -5. **Spec compliance:** If a spec exists, verify every endpoint matches it. -6. **Run test suite:** Execute existing tests, note any failures. - -### Libraries - -1. **Orient:** Read public API surface — exports, type definitions, README examples. -2. **Run test suite:** Execute all tests, note failures and coverage gaps. -3. **API usability:** Check for confusing error messages, missing validation, undocumented behavior. -4. **Edge cases:** Exercise boundary conditions the test suite may have missed. - -### Mixed Projects - -Test each aspect using the appropriate strategy above. - -### Documentation Rules - -- Document each issue **immediately when found** — don't batch. -- Every issue needs evidence (screenshot, command output, HTTP response, test output). -- Verify reproducibility — retry the issue once before documenting. - ---- - -## Phase 3: Fix Loop +## Phase 3: Transition -### Triage +After the report: -Sort discovered issues by severity. Decide which to fix based on tier: -- **Quick:** critical + high only. Mark rest as "deferred." -- **Standard:** critical + high + medium. Mark low as "deferred." -- **Exhaustive:** Fix all. +> "N개 이슈를 발견했습니다. 수정하시겠습니까? +> A) Subagent-driven — 이슈별 병렬 수정 (`superpowers:subagent-driven-development`) +> B) Inline — 순차 수정 (`superpowers:executing-plans`) +> C) 아니오 — 리포트만 남기고 종료" -Mark issues that cannot be fixed from source (third-party bugs, infrastructure) as "deferred" regardless of tier. - -### Per-Issue Fix Cycle - -For each fixable issue, in severity order: - -**3a. Locate source** -```bash -# Grep for error messages, component names, route definitions, command handlers -# Glob for file patterns matching the affected area -``` - -**3b. Fix** -- Read the source code, understand the context -- Make the **minimal fix** — smallest change that resolves the issue -- Do NOT refactor surrounding code, add features, or "improve" unrelated things - -**3c. Commit** -```bash -git add -git commit -m "fix(qa): ISSUE-NNN — short description" -``` -One commit per fix. Never bundle multiple fixes. - -**3d. Re-test** -Verify the fix using the same method that found the issue (browser, CLI run, HTTP request, test suite). - -**3e. Classify** -- **verified**: re-test confirms the fix works, no new errors -- **best-effort**: fix applied but couldn't fully verify -- **reverted**: regression detected → `git revert HEAD` → mark as "deferred" - -**3f. Regression Test** - -Skip if: classification is not "verified", OR no test framework detected AND user declined bootstrap. - -1. Study 2-3 existing test files closest to the fix. Match conventions. -2. Write a regression test that: - - Sets up the precondition that triggered the bug - - Performs the action that exposed the bug - - Asserts the correct behavior - - Includes attribution comment: - ``` - // Regression: ISSUE-NNN — {what broke} - // Found by /qa on {YYYY-MM-DD} - // Report: .qa/reports/qa-report-{date}.md - ``` -3. Run only the new test file. Passes → commit. Fails → delete, defer. - -### Self-Regulation - -Every 5 fixes (or after any revert), compute WTF-likelihood: - -``` -Start at 0% -Each revert: +15% -Each fix touching >3 files: +5% -After fix 15: +1% per additional fix -All remaining Low severity: +10% -Touching unrelated files: +20% -``` - -**If WTF > 20%:** STOP. Show the user progress so far. Ask whether to continue. - -**Hard cap: 50 fixes.** - ---- - -## Phase 4: Final QA - -After all fixes are applied: - -1. Re-test all affected areas using the same methods from Phase 2 -2. Compute final health score -3. **If final score is WORSE than baseline:** WARN prominently — something regressed - ---- - -## Phase 5: Report - -1. Write report to `.qa/reports/qa-report-{YYYY-MM-DD}.md` using the template -2. Save `baseline.json`: - ```json - { - "date": "YYYY-MM-DD", - "target": "", - "healthScore": N, - "issues": [{ "id": "ISSUE-001", "title": "...", "severity": "...", "category": "..." }], - "categoryScores": { "category": N } - } - ``` -3. If the repo has `TODOS.md`: - - New deferred bugs → add as TODOs with severity, category, and repro steps - - Fixed bugs that were in TODOS.md → annotate with "Fixed by /qa on {branch}, {date}" - ---- - -## Health Score - -Choose categories appropriate to the project. There is no fixed set — pick what makes sense. - -**Universal categories** (see `qa/references/issue-taxonomy.md`): Correctness, Error Handling, Edge Cases, Usability, Performance, Security, Documentation. Use the subset relevant to the project — not all apply to every type. - -**Scoring mechanic (universal):** -Each category starts at 100. Deduct per finding: -- Critical: -25 -- High: -15 -- Medium: -8 -- Low: -3 -Minimum 0 per category. - -Assign weights that sum to 100%. Weight core functionality higher than polish. - -`score = Σ (category_score × weight)` - ---- - -## Rules - -1. **Evidence is everything.** Every issue needs proof — screenshot, command output, HTTP response, or test output. No exceptions. -2. **Verify before documenting.** Retry the issue once to confirm reproducibility. -3. **Never include credentials.** Write `[REDACTED]` for passwords in repro steps. -4. **Write incrementally.** Append each issue to the report as you find it. -5. **Test as a user.** Use realistic inputs. Walk through complete workflows end-to-end. -6. **Depth over breadth.** 5-10 well-documented issues with evidence > 20 vague descriptions. -7. **Never delete output files.** Evidence and reports accumulate — that's intentional. -8. **Show evidence to the user.** After capturing evidence (screenshots, outputs), display it inline. -9. **Clean working tree required.** If dirty, offer commit/stash/abort before proceeding. -10. **One commit per fix.** Never bundle multiple fixes into one commit. -11. **Only modify tests when generating regression tests in Phase 3f.** Never modify existing tests — only create new test files. -12. **Revert on regression.** If a fix makes things worse, `git revert HEAD` immediately. -13. **Self-regulate.** Follow the WTF-likelihood heuristic. When in doubt, stop and ask. - ---- - -## Output Structure - -``` -.qa/reports/ -├── qa-report-{YYYY-MM-DD}.md # Structured report -├── evidence/ -│ ├── initial.png # Web: landing page screenshot -│ ├── issue-001-before.png # Web: before fix screenshot -│ ├── issue-001-after.png # Web: after fix screenshot -│ ├── issue-002-output.txt # CLI: command output -│ ├── issue-003-response.txt # API: HTTP response with headers -│ ├── issue-004-test-run.txt # Library: test suite output -│ └── ... -└── baseline.json -``` - ---- +If A: invoke `superpowers:subagent-driven-development` with the report as input. +If B: invoke `superpowers:executing-plans` with the report as input. +If C: end. ## Completion Status -Report status using one of: - **DONE** — All steps completed. Evidence provided for each claim. -- **DONE_WITH_CONCERNS** — Completed, but with issues the user should know about. -- **BLOCKED** — Cannot proceed. State what is blocking and what was tried. +- **BLOCKED** — Cannot proceed. State what is blocking. - **NEEDS_CONTEXT** — Missing information required to continue. - -If you have attempted a task 3 times without success, STOP and escalate. diff --git a/plugins/me/skills/qa/references/exploration-guide.md b/plugins/me/skills/qa/references/exploration-guide.md new file mode 100644 index 00000000..32297f1b --- /dev/null +++ b/plugins/me/skills/qa/references/exploration-guide.md @@ -0,0 +1,27 @@ +# Exploration Guide + +Reference for QA exploration by project type. These are suggestions, not mandatory checklists — adapt to the project. + +## Web Applications + +For each page: visual scan, click all interactive elements, test forms (empty/invalid/edge cases), check navigation paths, verify states (empty/loading/error/overflow), check console for JS errors, test responsiveness if relevant, verify auth boundaries. + +**Framework hints:** Next.js (hydration errors, `_next/data` 404s), Rails (N+1, CSRF), SPA (stale state, back/forward). + +**Browser testing:** Use `/browse` skill for browser automation. + +## CLI Tools + +For each command: verify `--help` accuracy, run happy path, test invalid inputs (wrong types, missing args, unknown flags), edge cases (empty/huge/special chars/piped/no TTY), check exit codes (0 success, non-zero fail), verify stderr vs stdout separation, test flag combinations, check idempotency. + +## API Servers + +For each endpoint: happy path, validation (missing fields, wrong types, boundaries → proper 4xx), auth (no token, expired, wrong role → 401/403), error response consistency, idempotency (POST/PUT twice), content negotiation, edge cases (large payloads, empty bodies, unicode), spec compliance if OpenAPI exists. + +## Libraries + +Test suite (failures, slow, flaky), coverage gaps (untested exports), error message quality, type safety, edge cases (boundaries, null, empty collections), README examples accuracy. + +## Other Projects + +Identify entry points, run existing tests, exercise main flows end-to-end, check error handling, review configuration defaults and docs. diff --git a/plugins/me/skills/qa/references/issue-taxonomy.md b/plugins/me/skills/qa/references/issue-taxonomy.md index acaae509..6ba642d0 100644 --- a/plugins/me/skills/qa/references/issue-taxonomy.md +++ b/plugins/me/skills/qa/references/issue-taxonomy.md @@ -62,55 +62,3 @@ Public-facing docs are wrong or missing. - Typos, placeholder text, truncated content - Missing or unhelpful empty states -## Exploration Checklists - -### Web Applications - -For each page visited: - -1. **Visual scan** — Take screenshot and read it. Look for layout issues, broken images, alignment. -2. **Interactive elements** — Click every button, link, and control. Does each do what it says? -3. **Forms** — Fill and submit. Test empty submission, invalid data, edge cases (long text, special characters). -4. **Navigation** — Check all paths in/out. Breadcrumbs, back button, deep links, mobile menu. -5. **States** — Check empty state, loading state, error state, full/overflow state. -6. **Console** — Run console error check after interactions. Any new JS errors or failed requests? -7. **Responsiveness** — If relevant, check mobile and tablet viewports. -8. **Auth boundaries** — What happens when logged out? Different user roles? - -### CLI Tools - -For each command/subcommand: - -1. **Help text** — Does `--help` exist? Is it accurate and complete? -2. **Happy path** — Run with typical inputs. Correct output? -3. **Invalid inputs** — Wrong types, missing required args, unknown flags. Clear error messages? -4. **Edge cases** — Empty input, huge input, special characters, piped input, no TTY. -5. **Exit codes** — 0 on success, non-zero on failure? Consistent? -6. **stderr vs stdout** — Errors go to stderr? Output is parseable (no debug noise on stdout)? -7. **Combinations** — Do flags interact correctly? Conflicting flags handled? -8. **Idempotency** — Run the same command twice. Same result? - -### API Servers - -For each endpoint: - -1. **Happy path** — Valid request, correct response code and body. -2. **Validation** — Missing fields, wrong types, boundary values. Proper 4xx responses? -3. **Auth** — Request without token, expired token, wrong role. Proper 401/403? -4. **Error responses** — Consistent format? Useful error messages? No stack traces leaked? -5. **Idempotency** — POST twice, PUT twice. Expected behavior? -6. **Content negotiation** — Correct Content-Type headers? Accepts declared formats? -7. **Edge cases** — Large payloads, empty bodies, unicode, special characters. -8. **Spec compliance** — If OpenAPI/Swagger exists, does the endpoint match? - -### Libraries - -For each public API surface: - -1. **Test suite** — Run all tests. Note failures, slow tests, flaky tests. -2. **Coverage gaps** — Are there exported functions with no tests? -3. **Error messages** — When misused, are errors clear and actionable? -4. **Type safety** — Do types match runtime behavior? Any `any` leaks? -5. **Edge cases** — Boundary values, null/undefined, empty collections, concurrent usage. -6. **Documentation** — Do README examples actually work? Are they up to date? -7. **Backwards compatibility** — If there's a public API contract, is it honored? diff --git a/plugins/me/skills/qa/templates/qa-report-template.md b/plugins/me/skills/qa/templates/qa-report-template.md index 6e2d7714..24411221 100644 --- a/plugins/me/skills/qa/templates/qa-report-template.md +++ b/plugins/me/skills/qa/templates/qa-report-template.md @@ -3,28 +3,21 @@ | Field | Value | |-------|-------| | **Date** | {DATE} | -| **Target** | {what was tested — URL, CLI command, API base, package name} | +| **Target** | {what was tested} | | **Branch** | {BRANCH} | -| **Commit** | {COMMIT_SHA} ({COMMIT_DATE}) | -| **PR** | {PR_NUMBER} ({PR_URL}) or "—" | -| **Tier** | Quick / Standard / Exhaustive | +| **Commit** | {COMMIT_SHA} | | **Scope** | {SCOPE or "Full project"} | | **Duration** | {DURATION} | -| **Areas tested** | {COUNT} | -| **Evidence files** | {COUNT} | ## Health Score: {SCORE}/100 | Category | Weight | Score | |----------|--------|-------| | {category} | {weight}% | {0-100} | -| ... | ... | ... | -## Top 3 Things to Fix +## Top Issues -1. **{ISSUE-NNN}: {title}** — {one-line description} -2. **{ISSUE-NNN}: {title}** — {one-line description} -3. **{ISSUE-NNN}: {title}** — {one-line description} +1. **ISSUE-NNN: {title}** — {one-line description} ## Summary @@ -43,61 +36,14 @@ | Field | Value | |-------|-------| | **Severity** | critical / high / medium / low | -| **Category** | {project-appropriate category} | -| **Location** | {URL, command, endpoint, function — whatever is relevant} | +| **Category** | {category} | +| **Location** | {where the issue was found} | **Description:** {What is wrong, expected vs actual.} **Repro Steps:** 1. {Action} - ![Evidence](evidence/issue-001-step-1.png) or `{command output}` -2. {Action} -3. **Observe:** {what goes wrong} +2. **Observe:** {what goes wrong} ---- - -## Fixes Applied - -| Issue | Fix Status | Commit | Files Changed | -|-------|-----------|--------|---------------| -| ISSUE-NNN | verified / best-effort / reverted / deferred | {SHA} | {files} | - -### Before/After Evidence - -#### ISSUE-NNN: {title} -**Before:** ![Before](evidence/issue-NNN-before.png) or `{output before}` -**After:** ![After](evidence/issue-NNN-after.png) or `{output after}` - ---- - -## Regression Tests - -| Issue | Test File | Status | Description | -|-------|-----------|--------|-------------| -| ISSUE-NNN | path/to/test | committed / deferred / skipped | description | - ---- - -## Ship Readiness - -| Metric | Value | -|--------|-------| -| Health score | {before} → {after} ({delta}) | -| Issues found | N | -| Fixes applied | N (verified: X, best-effort: Y, reverted: Z) | -| Deferred | N | - -**Summary:** "QA found N issues, fixed M, health score X → Y." - ---- - -## Regression (if applicable) - -| Metric | Baseline | Current | Delta | -|--------|----------|---------|-------| -| Health score | {N} | {N} | {+/-N} | -| Issues | {N} | {N} | {+/-N} | - -**Fixed since baseline:** {list} -**New since baseline:** {list} +**Evidence:** {link to evidence file or inline quote} From 6b9f30b92c07c32e4fa02d39f84822262f3dad37 Mon Sep 17 00:00:00 2001 From: Test User Date: Mon, 13 Apr 2026 20:29:42 +0900 Subject: [PATCH 2/7] improve(qa): tighten description to triggers-only per CSO guidelines --- plugins/me/skills/qa/SKILL.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/plugins/me/skills/qa/SKILL.md b/plugins/me/skills/qa/SKILL.md index 7a26b911..334af6d5 100644 --- a/plugins/me/skills/qa/SKILL.md +++ b/plugins/me/skills/qa/SKILL.md @@ -1,9 +1,7 @@ --- name: qa -description: Use when asked to "qa", "QA", "test this", or "find bugs". Proactively - suggest when user says a feature is ready for testing or asks "does this work?". - Explores a project like a real user, produces a structured report with health scores - and evidence. +description: Use when asked to "qa", "QA", "test this", "find bugs", or "does this + work?". Proactively suggest when user says a feature is ready for testing. allowed-tools: - Bash - Read From 82bb7b277e2712a9d2a4a6f74822cb722871cc45 Mon Sep 17 00:00:00 2001 From: Test User Date: Mon, 13 Apr 2026 20:48:42 +0900 Subject: [PATCH 3/7] improve(qa): expand exploration-guide to numbered list format Prose paragraphs were too compressed for LLM guidance. Numbered lists with bold labels provide clearer step-by-step reference. --- .../skills/qa/references/exploration-guide.md | 42 ++++++++++++++++--- 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/plugins/me/skills/qa/references/exploration-guide.md b/plugins/me/skills/qa/references/exploration-guide.md index 32297f1b..a30d322d 100644 --- a/plugins/me/skills/qa/references/exploration-guide.md +++ b/plugins/me/skills/qa/references/exploration-guide.md @@ -1,10 +1,17 @@ # Exploration Guide -Reference for QA exploration by project type. These are suggestions, not mandatory checklists — adapt to the project. +Reference for QA exploration by project type. Suggestions, not mandatory — adapt to the project. ## Web Applications -For each page: visual scan, click all interactive elements, test forms (empty/invalid/edge cases), check navigation paths, verify states (empty/loading/error/overflow), check console for JS errors, test responsiveness if relevant, verify auth boundaries. +1. **Visual scan** — layout issues, broken images, alignment +2. **Interactive elements** — click every button, link, control +3. **Forms** — empty submission, invalid data, edge cases (long text, special chars) +4. **Navigation** — all paths in/out, breadcrumbs, back button, deep links +5. **States** — empty, loading, error, overflow +6. **Console** — JS errors, failed network requests after interactions +7. **Responsiveness** — mobile/tablet viewports if relevant +8. **Auth boundaries** — logged out behavior, different roles **Framework hints:** Next.js (hydration errors, `_next/data` 404s), Rails (N+1, CSRF), SPA (stale state, back/forward). @@ -12,16 +19,39 @@ For each page: visual scan, click all interactive elements, test forms (empty/in ## CLI Tools -For each command: verify `--help` accuracy, run happy path, test invalid inputs (wrong types, missing args, unknown flags), edge cases (empty/huge/special chars/piped/no TTY), check exit codes (0 success, non-zero fail), verify stderr vs stdout separation, test flag combinations, check idempotency. +1. **Help text** — `--help` exists? Accurate? +2. **Happy path** — typical inputs, correct output +3. **Invalid inputs** — wrong types, missing args, unknown flags +4. **Edge cases** — empty, huge, special chars, piped input, no TTY +5. **Exit codes** — 0 success, non-zero fail, consistent +6. **stderr vs stdout** — errors to stderr, output parseable +7. **Flag combinations** — interact correctly? Conflicting flags handled? +8. **Idempotency** — same command twice, same result ## API Servers -For each endpoint: happy path, validation (missing fields, wrong types, boundaries → proper 4xx), auth (no token, expired, wrong role → 401/403), error response consistency, idempotency (POST/PUT twice), content negotiation, edge cases (large payloads, empty bodies, unicode), spec compliance if OpenAPI exists. +1. **Happy path** — valid request, correct status and body +2. **Validation** — missing fields, wrong types, boundaries → proper 4xx +3. **Auth** — no token, expired, wrong role → 401/403 +4. **Error responses** — consistent format, no stack traces leaked +5. **Idempotency** — POST/PUT twice, expected behavior +6. **Content negotiation** — correct Content-Type headers +7. **Edge cases** — large payloads, empty bodies, unicode +8. **Spec compliance** — matches OpenAPI/Swagger if exists ## Libraries -Test suite (failures, slow, flaky), coverage gaps (untested exports), error message quality, type safety, edge cases (boundaries, null, empty collections), README examples accuracy. +1. **Test suite** — run all, note failures/slow/flaky +2. **Coverage gaps** — untested exported functions +3. **Error messages** — clear and actionable on misuse +4. **Type safety** — types match runtime behavior +5. **Edge cases** — boundaries, null, empty collections +6. **Docs** — README examples actually work ## Other Projects -Identify entry points, run existing tests, exercise main flows end-to-end, check error handling, review configuration defaults and docs. +1. **Entry points** — identify primary interfaces +2. **Existing tests** — run whatever exists +3. **Main flows** — exercise end-to-end +4. **Error handling** — what happens when things go wrong +5. **Configuration** — defaults sensible, required configs documented From 889268a677c3669593156f70edded57f1093d2fc Mon Sep 17 00:00:00 2001 From: Test User Date: Mon, 13 Apr 2026 21:03:17 +0900 Subject: [PATCH 4/7] =?UTF-8?q?improve(qa):=20compress=20SKILL.md=20?= =?UTF-8?q?=E2=80=94=20inline=20baseline.json,=20remove=20Completion=20Sta?= =?UTF-8?q?tus?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit skill_bytes: 3037 → 2702 (-11%). Compliance maintained at 95-100. --- plugins/me/skills/qa/SKILL.md | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/plugins/me/skills/qa/SKILL.md b/plugins/me/skills/qa/SKILL.md index 334af6d5..c8983ae1 100644 --- a/plugins/me/skills/qa/SKILL.md +++ b/plugins/me/skills/qa/SKILL.md @@ -57,16 +57,7 @@ Assign weights summing to 100%. `score = sum(category_score * weight)` Use template from `qa/templates/qa-report-template.md`. Save to `.qa/reports/qa-report-{YYYY-MM-DD}.md`. -Save `baseline.json`: -```json -{ - "date": "YYYY-MM-DD", - "target": "", - "healthScore": N, - "issues": [{ "id": "ISSUE-001", "title": "...", "severity": "...", "category": "..." }], - "categoryScores": { "category": N } -} -``` +Save `.qa/reports/baseline.json` with: date, target, healthScore, issues array (id/title/severity/category), categoryScores. ## Phase 3: Transition @@ -81,8 +72,3 @@ If A: invoke `superpowers:subagent-driven-development` with the report as input. If B: invoke `superpowers:executing-plans` with the report as input. If C: end. -## Completion Status - -- **DONE** — All steps completed. Evidence provided for each claim. -- **BLOCKED** — Cannot proceed. State what is blocking. -- **NEEDS_CONTEXT** — Missing information required to continue. From e064513309d5258e63225ac2fb402af397f96e7e Mon Sep 17 00:00:00 2001 From: Test User Date: Mon, 13 Apr 2026 21:10:29 +0900 Subject: [PATCH 5/7] improve(qa): compress rules, fix reference paths, simplify Phase 3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Rules: 4 lines → 1 line (remove redundant "show evidence inline") - Fix: qa/references/ → references/ (match other skills' convention) - Phase 3: remove redundant If A/B/C lines (already in quote block) - skill_bytes: 2702 → 2533 (-6%) --- plugins/me/skills/qa/SKILL.md | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/plugins/me/skills/qa/SKILL.md b/plugins/me/skills/qa/SKILL.md index c8983ae1..e9a8264a 100644 --- a/plugins/me/skills/qa/SKILL.md +++ b/plugins/me/skills/qa/SKILL.md @@ -25,7 +25,7 @@ Understand the project before testing. 3. If on a feature branch: `git diff main...HEAD --name-only` to scope affected areas 4. Decide a QA strategy for this project. State it briefly: "I will test X, Y, Z because..." -For project-type-specific guidance, read `qa/references/exploration-guide.md`. +For project-type-specific guidance, read `references/exploration-guide.md`. ## Phase 2: Explore + Report @@ -38,13 +38,9 @@ Execute the strategy. Create output directory: `mkdir -p .qa/reports/evidence` **Web projects:** Use `/browse` skill for browser automation. -**Rules:** -- Evidence required for every issue. No exceptions. -- Never include credentials — write `[REDACTED]` -- Depth over breadth. 5-10 well-documented issues > 20 vague descriptions. -- Show evidence to the user inline after capturing. +**Rules:** Evidence required for every issue (no exceptions). Never include credentials (`[REDACTED]`). Depth over breadth — 5-10 well-documented issues > 20 vague ones. -**Issue classification:** See `qa/references/issue-taxonomy.md` for severity levels and categories. +**Issue classification:** See `references/issue-taxonomy.md` for severity levels and categories. ### Health Score @@ -55,7 +51,7 @@ Assign weights summing to 100%. `score = sum(category_score * weight)` ### Write Report -Use template from `qa/templates/qa-report-template.md`. Save to `.qa/reports/qa-report-{YYYY-MM-DD}.md`. +Use template from `templates/qa-report-template.md`. Save to `.qa/reports/qa-report-{YYYY-MM-DD}.md`. Save `.qa/reports/baseline.json` with: date, target, healthScore, issues array (id/title/severity/category), categoryScores. @@ -68,7 +64,5 @@ After the report: > B) Inline — 순차 수정 (`superpowers:executing-plans`) > C) 아니오 — 리포트만 남기고 종료" -If A: invoke `superpowers:subagent-driven-development` with the report as input. -If B: invoke `superpowers:executing-plans` with the report as input. -If C: end. +Invoke the chosen skill with the report as input. If C: end. From 70269e9eefa59a90d8da30ddf61d515d9d054ecc Mon Sep 17 00:00:00 2001 From: Test User Date: Mon, 13 Apr 2026 21:17:58 +0900 Subject: [PATCH 6/7] improve(qa): compress health score to single paragraph MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit skill_bytes: 2533 → 2502 (-1%). Compliance 88 (minor self-grading variance). --- plugins/me/skills/qa/SKILL.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/plugins/me/skills/qa/SKILL.md b/plugins/me/skills/qa/SKILL.md index e9a8264a..da409797 100644 --- a/plugins/me/skills/qa/SKILL.md +++ b/plugins/me/skills/qa/SKILL.md @@ -44,10 +44,7 @@ Execute the strategy. Create output directory: `mkdir -p .qa/reports/evidence` ### Health Score -Pick categories relevant to the project (see issue-taxonomy.md). Each starts at 100, deduct per finding: -- Critical: -25, High: -15, Medium: -8, Low: -3 (min 0) - -Assign weights summing to 100%. `score = sum(category_score * weight)` +Pick project-relevant categories (see issue-taxonomy.md). Each starts at 100; deduct Critical: -25, High: -15, Medium: -8, Low: -3 (min 0). Assign weights summing to 100%: `score = sum(category_score * weight)` ### Write Report From d37089ae03bf32ec22302a9e87d0b6bb210976cd Mon Sep 17 00:00:00 2001 From: Test User Date: Mon, 13 Apr 2026 21:19:04 +0900 Subject: [PATCH 7/7] fix(qa): add trailing newline to issue-taxonomy.md --- plugins/me/skills/qa/references/issue-taxonomy.md | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/me/skills/qa/references/issue-taxonomy.md b/plugins/me/skills/qa/references/issue-taxonomy.md index 6ba642d0..14f249e0 100644 --- a/plugins/me/skills/qa/references/issue-taxonomy.md +++ b/plugins/me/skills/qa/references/issue-taxonomy.md @@ -61,4 +61,3 @@ Public-facing docs are wrong or missing. - Outdated or incorrect help text - Typos, placeholder text, truncated content - Missing or unhelpful empty states -