원클릭으로
qa-testing
Execute scenario-based QA testing with optional browser automation, optional database validation, and ticket creation for failures.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Execute scenario-based QA testing with optional browser automation, optional database validation, and ticket creation for failures.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Generate and complete reusable security test documents under docs/security/ based on the current project implementation and/or a confirmed plan. Use when a developer asks to complete security test docs, add missing security scenarios, or establish a security test baseline for the project.
Generate and maintain reusable UI/UX test documents under docs/uiux/ based on the current project UI implementation and the design-system constraints. Use when a developer asks to complete UI/UX test docs, add missing UI/UX scenarios, align UI constraints, or wants UI consistency/a11y/responsive regression checks during development.
Guide for working with the Agent Orchestrator — a CLI tool for AI-native SDLC automation. Use when writing or editing YAML manifests (Workspace, Agent, Workflow, StepTemplate, ExecutionProfile, SecretStore, EnvStore, Trigger, CRD), running orchestrator CLI commands, designing workflow step pipelines, writing CEL prehook/finalize expressions, configuring triggers (cron/event-driven task creation), or configuring self-bootstrap workflows. Triggers: any mention of orchestrator config, YAML manifests with "orchestrator.dev/v2", workflow steps, prehooks, finalize rules, task create/start/pause, orchestrator run, step filtering, direct assembly, agent capabilities, StepTemplate prompts, execution profiles, sandbox configuration, secret management, or trigger/cron scheduling.
Govern feature request (FR) documents through their full lifecycle — from planning to implementation to closure. Use when the user asks to govern/治理 a feature request, close an FR, check FR status, or says "治理FR", "/fr-governance". Scans docs/feature_request/ for open FR docs, plans implementation, executes governance, and self-checks closure.
Generate or update QA/security/UIUX test documentation after confirmed feature implementation plans or completed refactors. Use this skill AFTER plan approval or code completion to: (1) add new QA test docs for new behavior, (2) generate design docs, and (3) run repo-wide cross-doc impact analysis (docs/qa/, docs/security/, docs/uiux/, docs/guide/ and its translations, docs/design_doc/, docs/showcases/, root Markdown including CHANGELOG.md, and .claude/skills/) to update stale steps, expectations, and assertions. Triggers when users ask to create QA docs, update test docs after implementation, or sync QA/security/UIUX docs after behavior changes.
Govern and periodically remediate QA documentation quality across docs/qa, docs/security, and docs/uiux. Use when users ask to audit QA docs, run recurring documentation checks, fix doc drift after refactors, enforce scenario limits/checklists/UI entry visibility, or synchronize README/manifest/changelog consistency.
| name | qa-testing |
| description | Execute scenario-based QA testing with optional browser automation, optional database validation, and ticket creation for failures. |
Execute scenario-based QA testing driven by docs/qa/**/*.md documents.
CRITICAL: Always rebuild CLI before testing to ensure you have the latest version.
Rebuild CLI (REQUIRED - ensures latest code):
cd core && cargo build --release
Initialize orchestrator if needed — only when the database does not exist yet:
# DANGER: NEVER run `rm -f data/agent_orchestrator.db` during an active workflow run.
# Doing so destroys all in-flight task state.
# Only initialize when no database exists at all.
test -f data/agent_orchestrator.db || orchestrator init
For QA scenario isolation — use project-scoped reset instead of destroying shared state:
# Delete a project's state (task data + config + auto-tickets)
orchestrator delete project/<project> --force
# Deploy fixtures into project scope (other projects untouched)
orchestrator apply -f fixtures/manifests/bundles/<fixture>.yaml --project <project>
QA docs exist under docs/qa/.
Optional: UI automation via browser tools.
API helper script: .claude/skills/tools/qa-api-test.sh
Environment variables:
API_BASE_URL (default: http://localhost:8080)API_TOKEN (optional)API_TOKEN_CMD (optional command that prints a token to stdout)Notes:
API_TOKEN and API_TOKEN_CMD.API_TOKEN_CMD (for example, a script under scripts/).scripts/qa/)IMPORTANT: A collection of reusable QA test scripts may exist in scripts/qa/. Before writing any new test script, always check scripts/qa/ first for an existing script that covers the same or similar scenario.
ls scripts/qa/ or Glob: scripts/qa/* to find existing scripts. If a matching script exists, use it directly (or adapt it) instead of creating a new one.scripts/qa/: When a new test script is needed, always place it under scripts/qa/ — never in the project root or other ad-hoc locations.test-{feature}.{js,mjs,py,sh} or {feature}_test.py.IMPORTANT: This skill is strictly for testing and reporting. NEVER attempt to fix, patch, or modify any source code during QA testing. If a test fails, create a ticket immediately and move on to the next scenario.
CRITICAL — Mock-fixture-only rule: Before executing any QA doc that runs orchestrator workflows, verify that the Preconditions section references a mock fixture from fixtures/manifests/bundles/ (with deterministic echo/exit agents). NEVER apply or use real workflows from docs/workflow/ — they invoke live AI agents (e.g. claude -p) and will exhaust API credits instantly. If a QA doc's preconditions are ambiguous or missing the explicit apply -f fixtures/... command, STOP and ask the user which mock fixture to use before proceeding.
docs/qa/ (never assume when request is ambiguous)..claude/skills/tools/qa-api-test.sh (if applicable).docs/ticket/ (DO NOT defer to end).Ticket creation rule: Create the ticket the moment a scenario is confirmed as FAIL — before starting the next scenario. This ensures no failure is lost if the session is interrupted, and gives the user real-time visibility into issues as they surface.
rg --files docs/qa | rg '\.md$'docs/qa/README.md, docs/qa/_*.md, manifest-like files).If the QA doc requires UI steps, use the browser tools:
Examples:
.claude/skills/tools/qa-api-test.sh GET /health
.claude/skills/tools/qa-api-test.sh GET /api/v1/items
.claude/skills/tools/qa-api-test.sh POST /api/v1/items '{"name":"example"}'
For orchestrator CLI, check logs in data/logs/ directory:
ls -la data/logs/
# or check specific task logs
orchestrator task logs <task-id>
Use the QA doc as the source of truth for queries and expected outcomes.
Examples:
psql "$DB_DSN" -c "SELECT 1"
mysql -h 127.0.0.1 -P 3306 -u root mydb -e "SELECT 1"
CRITICAL: Create the ticket RIGHT NOW, before moving to the next scenario. Do NOT accumulate failures for batch ticket creation later. Each failed scenario gets its own ticket written to docs/ticket/ immediately upon confirmation of failure.
Workflow per failure:
docs/ticket/ using the naming and structure belowdocs/ticket/{filename}.md"This ensures:
UI visibility/accessibility failures must also create tickets for UIUX test documents, even if backend behavior is correct. Examples:
Naming:
{module}_{document}_scenario{N}_{YYMMDD_HHMMSS}.mdTemplate:
# Ticket: {Scenario Title}
**Created**: {YYYY-MM-DD HH:mm:ss}
**QA Document**: `docs/qa/{module}/{document}.md`
**Scenario**: #{number}
**Status**: FAILED
---
## Test Content
{Brief description}
---
## Expected Result
{Expected outcome}
---
## Actual Result
{What happened}
---
## Repro Steps
1. ...
2. ...
---
## Evidence
**UI/CLI Output**:
{key output}
**Service Logs**:
{relevant log lines}
**DB Checks (if applicable)**:
```sql
{queries and results}
Root Cause: {Analysis of likely cause} Severity: High / Medium / Low Related Components: Frontend / Backend / Database / Cache / External Service
## Batch Execution: Lessons Learned
When running QA across many documents (e.g., 19 docs, 80+ scenarios), the following hard-won lessons apply.
### 1. Ticket Preservation Across Batches
**CRITICAL: Never delete `docs/ticket/` contents between batches.**
When splitting QA into sequential batches (e.g., docs 00-04, 05-09, 10-14, 15-17), each batch's environment reset **must not** delete tickets created by previous batches. Specifically:
- ❌ **NEVER** include `find docs/ticket -name '*.md' ! -name 'README.md' -delete` as a cross-batch step. This destroys tickets from earlier batches.
- ✅ Only clean tickets **within a single QA doc's setup** if that doc's precondition explicitly requires an empty ticket directory — and even then, back up existing tickets first or scope the deletion narrowly.
- ✅ If a QA doc says "clean ticket dir", only remove tickets created by **that specific doc's previous run**, not all tickets.
**Root cause of past incident**: Batch 2 instructions included a blanket ticket cleanup that wiped Batch 1's 3 tickets. Batch 3 wiped Batch 2's 18 tickets. Batch 4 wiped Batch 3's 10 tickets. Only Batch 4's 5 tickets survived — 31 tickets had to be recreated from session transcripts.
### 2. SQLite Concurrency — WAL Mode
The orchestrator uses WAL mode with connection pooling (r2d2, pool size 20, busy_timeout 5s).
Item-scoped steps can run in parallel when `max_parallel > 1` is configured in the workflow.
- Parallel items share the same DB safely — WAL allows concurrent readers, writes are serialized with retry.
- Do NOT bypass the orchestrator to run raw parallel `task create` + `task start` against the same DB.
- Use `max_parallel` in workflow config to control concurrency; the engine handles semaphore gating.
### 3. Environment Reset Between Batches
The correct reset sequence between batches uses **project-scoped isolation** instead of destroying the shared DB:
```bash
# Delete project state (task data + project config + auto-tickets)
orchestrator delete project/<project> --force
# Apply fixture into project scope (other projects untouched)
orchestrator apply -f fixtures/manifests/bundles/<relevant>.yaml --project <project>
# DO NOT delete docs/ticket/*.md — preserve prior batch tickets
# DO NOT run `rm -f data/agent_orchestrator.db` — this destroys all state including bootstrap
CRITICAL: Never use rm -f data/agent_orchestrator.db for QA environment resets. Use delete project/<project> --force + apply --project to isolate each QA batch into its own project scope without affecting other projects.
init vs delete project/ vs apply --projectinit creates the DB schema and runtime directories only. It does not load config or fixture data.delete project/<project> --force deletes task data, auto-tickets, and the project config entry.apply -f <fixture> --project <project> deploys agents/workflows/workspaces into the project scope. Only project-scoped agents participate in selection for that project's tasks.delete project/<project> --force + apply --project instead of init + config bootstrap.When delegating QA batches to subagents:
docs/ticket/ that were not created by your own batch"If tickets are lost, they can be reconstructed from subagent session transcripts:
apply_patch or write)session_search(query="ticket", session_id="ses_xxx") to find ticket-related actionssession_read(session_id="ses_xxx") to read the full final summary with PASS/FAIL detailsFor QA scenario isolation (recommended — preserves global/bootstrap state):
# Reset a specific project's QA state
orchestrator delete project/<project> --force
# Deploy fixtures into project scope
orchestrator apply -f fixtures/manifests/bundles/<fixture>.yaml --project <project>
For full runtime re-initialization (only when DB is missing or schema needs upgrade):
# Only if DB does not exist or is corrupted
orchestrator init
CRITICAL: Do NOT use rm -f data/agent_orchestrator.db during routine QA. This destroys all in-flight task state, bootstrap config, and event history.
The orchestrator no longer has hardcoded defaults. For QA scenarios, prefer project-scoped isolation:
# Preferred: project-scoped reset (preserves other projects)
orchestrator delete project/<project> --force
orchestrator apply -f fixtures/manifests/bundles/<fixture>.yaml --project <project>
# Only if DB does not exist at all:
orchestrator init
# Or with custom root path
orchestrator init /path/to/project
CRITICAL: Do NOT use rm -f data/agent_orchestrator.db for QA resets. This destroys all state including bootstrap config, in-flight tasks, and event history. Use delete project/<project> --force for per-project isolation.
After init, the runtime is still effectively empty until you apply -f <fixture>.
Run the actual command first — don't try to guess the problem:
orchestrator task list
Read the actual error message before making any changes.
Common config errors and solutions:
loop.guard enabled but no agent has loop_guard template:
loop.guard.enabled: false in the workflow, ORloop_guard template to an agentconfig.workspaces cannot be empty:
workspaces: field (not nested under projects.*)workspaces: {} at the end of YAML fileconfig.agents cannot be empty:
agents: field (not nested under projects.*)agents: {} at the end of YAML filefailed to parse config:
git checkout HEAD~2 -- config/default.yaml to restore originalGit restore is faster than debugging:
git checkout HEAD~2 -- path/to/config.yaml is often faster than iterative fixesProject-specific entry points:
orchestrator CLI for available commandsscripts/*.sh files in the project rootpackage.json scripts for test commandsIf the repository includes qa-testing/references/api-testing-cookbook.md, use it as the first reference for repeatable API/gRPC/webhook recipes and known pitfalls.