qa-strategy
E2E QA strategy — flow-based product testing with disciplined triage, regression detection, and autonomous execution
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
E2E QA strategy — flow-based product testing with disciplined triage, regression detection, and autonomous execution
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
| name | qa-strategy |
| description | E2E QA strategy — flow-based product testing with disciplined triage, regression detection, and autonomous execution |
Test the product the way a user uses it. Every test simulates a real user flow — navigating, clicking, filling forms, waiting for responses.
This is NOT unit or integration testing. This pipeline tests complete user journeys through the running application.
| Aspect | Detail |
|---|---|
| Scope | End-to-end Playwright tests against a running app |
| Input | Running app URL, optional prior test results for regression comparison |
| Output | Test files (one flow per file), triage verdicts for every failure, regression report |
| Core rule | Every failure gets a verdict before the next test runs |
| Priority | Critical/High flows first; stop adding flows when context reaches ~80% capacity |
| Independence | Each test is self-contained — no shared state, no execution order dependency |
| Priority | What Breaks | Examples |
|---|---|---|
| Critical | Revenue or access | Login, checkout, payment, signup |
| High | Core product value | Create/edit main entities, dashboard, search |
| Medium | Secondary features | Settings, profile, notifications |
| Low | Polish | Theme toggle, tooltips, animations |
A session that thoroughly tests 5 critical flows beats one that superficially touches 20.
Before writing tests, understand what the product does:
If prior test results exist, compare to detect new, removed, and changed flows.
// GOOD — survives refactoring
page.getByRole('button', { name: 'Submit' })
page.getByLabel('Email')
page.getByText('Welcome back')
page.getByTestId('user-avatar')
// BAD — breaks on any styling change
page.locator('.btn-primary')
page.locator('#submit-btn')
page.locator('div > form > button:nth-child(2)')
// GOOD — waits for something specific
await page.waitForResponse(resp => resp.url().includes('/api/users'));
await expect(page.getByText('Success')).toBeVisible();
await expect(page.getByText('Loading...')).not.toBeVisible();
// BAD — arbitrary delay, flaky by design
await page.waitForTimeout(3000);
// BAD — unreliable for SPAs (sockets stay open; resolves before dynamic content loads)
await page.waitForLoadState('networkidle');
test.describe('Checkout flow', () => {
test('adds item to cart', async ({ page }) => { /* ... */ });
test('fills shipping info', async ({ page }) => { /* ... */ });
test('completes payment', async ({ page }) => { /* ... */ });
test('shows confirmation', async ({ page }) => { /* ... */ });
});
When a test fails, classify it immediately — before running the next test.
| Verdict | Meaning | Action |
|---|---|---|
| Bug | App behavior is wrong | Record as regression. Do not change the test assertion — the test is correct, the app is broken. |
| Stale assertion | App changed intentionally | Update the test to match new behavior. |
| Flaky | Non-deterministic failure (evidence of randomness required) | Fix the locator or wait condition. Re-run once. |
| Test error | Test code itself is wrong | Fix the test code and re-run. |
Error: expect(getByRole('heading', { name: 'Dashboard' })).toBeVisible()
→ Timeout 5000ms exceeded.
→ Call log: waiting for getByRole('heading', { name: 'Dashboard' })
| Step | Finding |
|---|---|
| Read error | Heading "Dashboard" not found after login |
| Check app | Route /dashboard now redirects to /home; heading changed to "Home" |
| Verdict | Stale assertion — intentional redesign |
| Action | Update test: navigate to /home, assert "Home" heading |
A regression is a flow that was passing and now fails.
Regressions are the pipeline's highest-priority output.
For each regression, record:
| Field | Value |
|---|---|
| Flow | Which user flow broke |
| Previous status | Last known passing state |
| Current error | Error message and failing assertion |
| Classification | Real bug or intentional change |
Before finishing, verify every item:
| Check | Pass | Fail |
|---|---|---|
| Every failure has a verdict | ✓ | Failures left unclassified |
| Critical flows tested before lower-priority | ✓ | Random or low-priority-first ordering |
| Regressions recorded with all fields | ✓ | Vague "some tests failed" |
| Tests are independent and resilient | ✓ | Tests depend on execution order or shared state |
| Context spent on high-value flows | ✓ | Low-priority flows tested while critical flows skipped |
| Error states tested (API errors, bad input) | ✓ | Only happy paths covered |
| MUST | MUST NOT |
|---|---|
| Triage every failure before proceeding | Accumulate failures to analyze later |
| Use resilient locators (role, label, text, testid) | Use CSS selectors or DOM position |
| Wait for explicit conditions (element, response) | Use waitForTimeout or networkidle |
| Test what the user sees | Test internal state (stores, localStorage, cookies) |
| Provide evidence before classifying a failure as "flaky" | Classify regressions as flaky without proof of non-determinism |
| Test error states and edge cases | Only test happy paths |
Handle cross-platform compatibility including file paths, environment detection, platform-specific dependencies, and testing across Windows, macOS, and Linux. Use when dealing with platform-specific code or OS compatibility.
Use when creating, modifying, debugging, or scaffolding OMP extensions, slash commands, custom tools, event hooks, TUI primitives, ExtensionAPI integrations, .omp/extensions, .omp/commands, .omp/tools, package.json omp.extensions, or OMP lifecycle handlers.
Design Director state machine for `/supi:ui-design`. Drives 9 model-owned phases from scope selection through user review, producing a validated HTML mockup artifact.
Guides the harness-engineering pipeline — turn a codebase into one that resists agentic slop with agent-neutral docs, mechanically enforced architecture, and three runtime guardrails
Gray-area extraction stage — surfaces decisions the user must make before the plan can be authored, without expanding scope
Structured extraction of the user's seed prompt into a typed intake artifact — first stage of the UltraPlan authoring pipeline