一键导入
corgispec-human-qa
Human QA gate between review and archive — classifies change, routes to QA atoms, assembles evidence report.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Human QA gate between review and archive — classifies change, routes to QA atoms, assembles evidence report.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Create or complete a CorgiSpec planning package and synchronize one GitHub parent issue plus Task Group child issues. Use when proposing a change whose normalized tracking provider is GitHub.
Create or complete a CorgiSpec planning package and optionally synchronize GitLab issues. Use when proposing a new change or finishing an existing change whose normalized tracking provider is GitLab or none.
Execute or resume a CorgiSpec Run Contract v2 one Task Group at a time through the canonical corgispec loop CLI. Use when starting, continuing, fixing, committing, recovering, or finalizing an implementation run; never write loop state or evidence artifacts directly.
Implement exactly one pending Task Group from a CorgiSpec change and optionally synchronize GitLab progress. Use when applying a change whose normalized tracking provider is GitLab or none.
Validate and archive a completed CorgiSpec change, extract durable knowledge, and optionally close GitLab tracking. Use when archiving a change whose normalized tracking provider is GitLab or none.
Compare fresh CorgiSpec planning, implementation, Git, and run evidence and close only implementation gaps through the canonical converge CLI. Use after implementation or review when deciding whether a change is converged, planning needs update, or a new append-only Task Group is required.
| name | corgispec-human-qa |
| description | Human QA gate between review and archive — classifies change, routes to QA atoms, assembles evidence report. |
| hooks | {"PreToolUse":[{"matcher":"Edit|Write","hooks":[{"type":"command","command":"corgispec hook pre-write"}]}]} |
| license | MIT |
| compatibility | Requires corgispec CLI. |
| metadata | {"author":"corgispec","version":"1.0","generatedBy":"1.3.0"} |
Human QA orchestrator. Classifies the change type, routes to appropriate QA atoms, collects human test cases, executes atoms in sequence, and assembles a full SBTM-style evidence report.
openspec/changes/<name>/.gitlab.yaml or .github.yaml exists with issue numbersisolation.mode is worktree: worktree exists for this changeContext Gate: If session context already contains ALL of: isolation.mode, active changes with worktree paths, current branch
→ Gate passed — SKIP config reading below and proceed to the next step.
Otherwise: read openspec/config.yaml and proceed with discovery.
If isolation.mode: worktree: Changes live inside worktrees. Read references/worktree-discovery.md for the full discovery procedure. Quick summary:
corgispec list --json, if it returns changes, use them<isolation.root>/ directories, verify each with git worktree list and check openspec/changes/<name>/ exists insideIf no isolation: corgispec list --json directly. Auto-select if one, prompt if multiple.
If name provided by user, use it directly.
Read tasks.md and design.md from the change directory. Assess risk using the following heuristic table:
| Heuristic | Weight | Assessment Criteria |
|---|---|---|
| Complex | High | Multi-component interaction, state machines, concurrency, distributed logic |
| New | High | First implementation of capability, no prior art in codebase |
| Changed | Medium | Modifications to existing stable code, regression potential |
| Critical | High | Auth, payments, data integrity, security boundaries |
| Popular | Medium | High-traffic paths, frequently used features, shared libraries |
| Buggy | High | Area with prior bug history, known fragile code |
Output a risk summary:
Risk Assessment:
- Overall: HIGH | MEDIUM | LOW
- Factors: [list applicable heuristics]
- Recommended depth: THOROUGH | STANDARD | LIGHT
Higher risk = more exploratory time allocated. Critical risk = mandatory type-specific atoms.
Scan all files modified in the change (from tasks.md completed items or git diff). Classify using the routing table:
| Change Type | File Patterns | Atoms Routed |
|---|---|---|
| UI | *.tsx, *.jsx, *.vue, *.svelte, *.css, *.scss, *.html | qa-smoke → qa-ui → qa-exploratory |
| Backend | *.py, *.go, *.rs, *.java, *.rb, services/, lib/ | qa-smoke → qa-backend → qa-exploratory |
| API | **/api/**, **/routes/**, *.controller.*, openapi.*, swagger.* | qa-smoke → qa-api → qa-exploratory |
| CLI | **/cli/**, **/bin/**, **/commands/**, *.sh | qa-smoke → qa-cli → qa-exploratory |
| Full-stack | UI + Backend patterns both present | qa-smoke → qa-ui → qa-api → qa-backend → qa-exploratory |
| Config | *.yaml, *.toml, *.json (non-code), *.env*, Dockerfile | qa-smoke → qa-exploratory |
| Mixed | Multiple categories detected | qa-smoke → [all matching type atoms] → qa-exploratory |
Rules:
qa-smoke always executes FIRST (build/start gate)qa-exploratory always executes LAST (free-form session)Classification output format:
Change Classification:
- Type: <type>
- Matched patterns: <file list>
- Atom sequence: qa-smoke → [type-specific] → qa-exploratory
- Risk-adjusted exploratory time: <minutes based on step 2>
Engage the user in a structured conversation to collect test cases:
Generate a Test Case Sheet table:
| # | Scenario | Input / Action | Expected Output | Assigned Atom | Priority |
|---|----------|----------------|-----------------|---------------|----------|
| 1 | ... | ... | ... | qa-smoke | P1 |
| 2 | ... | ... | ... | qa-ui | P1 |
Write the table to openspec/changes/<name>/qa-testcases.md.
Confirm with user: "Here are N test cases assigned to atoms. Proceed with QA execution?"
Execute atoms in the order determined by Step 3. Each atom:
qa-testcases.md for its assigned casesExecution protocol:
Between atoms, report progress:
Atom Progress:
- [x] qa-smoke: PASSED (3/3 checks)
- [ ] qa-ui: IN PROGRESS
- [ ] qa-exploratory: PENDING
If any type-specific atom reports a critical failure (severity = blocker), pause and ask: "Critical issue found. Continue remaining atoms or stop?"
Collect all atom outputs and assemble the final report. Write to openspec/changes/<name>/qa-report.md using the template in Appendix A.
The report must include:
Read the tracking file (.gitlab.yaml or .github.yaml).
GitLab:
glab issue note <parent_iid> --message "## QA Report Summary\n\nStatus: <PASSED|FAILED>\nAtoms executed: <list>\nBugs found: <count>\nFull report: openspec/changes/<name>/qa-report.md"
GitHub:
gh issue comment <parent_number> --body "## QA Report Summary\n\nStatus: <PASSED|FAILED>\nAtoms executed: <list>\nBugs found: <count>\nFull report: openspec/changes/<name>/qa-report.md"
If not tracked, skip this step silently.
Determine final QA gate result:
| Condition | Gate Output |
|---|---|
| All atoms passed, no bugs >= major | passed |
| Any atom reported bugs >= major severity | failed — list blocking bugs |
| QA skipped with documented reason | skipped — include reason |
| Smoke gate failed | failed — "smoke gate did not pass" |
Output format:
QA Gate: <passed|failed|skipped>
Reason: <explanation>
Bugs blocking: <list or "none">
Report: openspec/changes/<name>/qa-report.md
If passed: change is eligible for archive.
If failed: change needs fixes before re-QA.
If skipped: document justification; archive skill decides whether to accept.
# QA Report
## Session Metadata
| Field | Value |
|-------|-------|
| Session ID | QA-<change-name>-<YYYYMMDD>-<seq> |
| Tester | <human or agent identifier> |
| Date | <ISO 8601> |
| Build / Commit | <short SHA or build ID> |
| Change | <change name> |
| Risk Level | <HIGH / MEDIUM / LOW> |
## Charter
<One-sentence QA charter derived from proposal.md>
## Human Test Case Results
| # | Scenario | Expected | Actual | Status | Evidence |
|---|----------|----------|--------|--------|----------|
| 1 | ... | ... | ... | PASS/FAIL | link |
## Smoke Test Results
| Check | Status | Notes |
|-------|--------|-------|
| Build succeeds | PASS/FAIL | ... |
| App starts | PASS/FAIL | ... |
| No crash on load | PASS/FAIL | ... |
## Type-Specific Walkthrough
### <Atom Name> (e.g., qa-ui)
<Structured output from atom execution>
| Test | Status | Evidence |
|------|--------|----------|
| ... | PASS/FAIL | ... |
### <Atom Name> (e.g., qa-api)
<Structured output from atom execution>
## Exploratory Findings
| # | Finding | Severity | Category | Evidence | Bug Filed? |
|---|---------|----------|----------|----------|------------|
| 1 | ... | minor/major/blocker | ... | ... | Yes/No |
## Bug Reports
### BUG-001: <title>
- **Severity**: major / blocker
- **Steps to reproduce**: ...
- **Expected**: ...
- **Actual**: ...
- **Evidence**: <screenshot/log reference>
## QA Conclusion
| Field | Value |
|-------|-------|
| Status | PASSED / FAILED |
| Blocking Bugs | <count> |
| Archive Recommendation | PROCEED / HOLD / RETEST |
| Notes | <any caveats> |
## Evidence Inventory
| # | Type | Path / URL | Referenced In |
|---|------|-----------|---------------|
| 1 | screenshot | ... | Human Test #2 |
| 2 | log | ... | Smoke Test |