@ai-qa/workflow 2.0.11 → 2.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/agents/playwright-test-generator.agent.md +49 -0
- package/.github/agents/playwright-test-healer.agent.md +32 -3
- package/.github/agents/playwright-test-planner.agent.md +26 -0
- package/.github/copilot-instructions.md +44 -2
- package/.opencode/agents/qa-generator.md +16 -0
- package/.opencode/agents/qa-healer.md +18 -0
- package/.opencode/agents/qa-planner.md +17 -0
- package/.opencode/rules.md +66 -2
- package/.qa-context/auth.json +29 -0
- package/.qa-context/heal-history.json +40 -0
- package/.qa-context/pipeline.json +34 -0
- package/.qa-context/selectors.json +64 -0
- package/.qa-context/traceability.json +30 -0
- package/README.md +399 -196
- package/ai-qa-workflow.js +82 -104
- package/install.js +8 -13
- package/opencode.json +41 -0
- package/package.json +6 -6
- package/prompting_template.md +283 -0
- package/qa-dashboard/app.js +1 -0
- package/qa-dashboard/routes/review.js +114 -0
- package/qa-dashboard/views/layouts/main.ejs +1 -0
- package/qa-dashboard/views/review.ejs +201 -0
- package/router.md +109 -29
- package/scripts/auth-manager.js +186 -0
- package/scripts/context-manager.js +226 -0
- package/scripts/executor.js +18 -7
- package/scripts/generator.js +18 -124
- package/scripts/healer.js +78 -157
- package/scripts/planner.js +18 -136
- package/scripts/reporter.js +21 -1
- package/scripts/utils.js +2 -0
- package/qa-dashboard/.env +0 -3
|
@@ -8,9 +8,12 @@ tools:
|
|
|
8
8
|
- playwright/browser_navigate
|
|
9
9
|
- playwright/browser_type
|
|
10
10
|
- playwright/browser_snapshot
|
|
11
|
+
- applitools/check
|
|
12
|
+
- applitools/setup
|
|
11
13
|
- playwright/generator_setup_page
|
|
12
14
|
- playwright/generator_read_log
|
|
13
15
|
- playwright/generator_write_test
|
|
16
|
+
|
|
14
17
|
mcp-servers:
|
|
15
18
|
playwright:
|
|
16
19
|
type: stdio
|
|
@@ -24,6 +27,22 @@ mcp-servers:
|
|
|
24
27
|
|
|
25
28
|
You are a Playwright test generator. Create robust E2E tests from test plans.
|
|
26
29
|
|
|
30
|
+
## Before Starting: Read Context
|
|
31
|
+
1. Read `.qa-context/pipeline.json` to see the current story and phase state
|
|
32
|
+
2. Read `.qa-context/selectors.json` to use the most reliable selectors
|
|
33
|
+
3. Read `.qa-context/heal-history.json` to see what's been flaky before
|
|
34
|
+
4. Read `.qa-context/auth.json` and `.auth/credentials.json` to get login selectors and credentials
|
|
35
|
+
|
|
36
|
+
## Auth Protocol
|
|
37
|
+
1. If auth is configured, generate an `auth.setup.ts` file using `auth-manager.js`'s `generateSetupCode()` output
|
|
38
|
+
2. Configure `playwright.config.ts` to use `projects` with `dependencies: ['./auth.setup.ts']`
|
|
39
|
+
3. Each test should assume the user is already logged in — no login steps in individual tests
|
|
40
|
+
|
|
41
|
+
## After Completing: Update Context
|
|
42
|
+
1. Run: `node ai-qa-workflow.js context generate <story-name>` to mark phase complete
|
|
43
|
+
2. Add any new selectors you discovered to `.qa-context/selectors.json`
|
|
44
|
+
3. Update `docs/application-context.md` with new stable selectors found
|
|
45
|
+
|
|
27
46
|
For each test:
|
|
28
47
|
1. Read the test plan scenario
|
|
29
48
|
2. Use Playwright to manually execute steps in real-time
|
|
@@ -31,3 +50,33 @@ For each test:
|
|
|
31
50
|
4. Generate the test file using `generator_write_test`
|
|
32
51
|
|
|
33
52
|
Always prefer: data-testid > aria-label > role > text > xpath (last resort)
|
|
53
|
+
|
|
54
|
+
## Visual Testing (Applitools)
|
|
55
|
+
|
|
56
|
+
If `APPLITOOLS_API_KEY` is configured in the environment:
|
|
57
|
+
|
|
58
|
+
1. After writing functional tests, add visual checkpoints for critical pages
|
|
59
|
+
2. Use `applitools/setup` to initialize a visual testing session
|
|
60
|
+
3. Use `applitools/check` after page interactions to capture and compare screenshots
|
|
61
|
+
4. Add visual checkpoints to these pages if they exist: login, dashboard, checkout, profile, settings
|
|
62
|
+
5. Limit visual checks to @smoke and @critical tests only — not every step
|
|
63
|
+
|
|
64
|
+
```typescript
|
|
65
|
+
// Example visual checkpoint
|
|
66
|
+
test('Login page renders correctly @smoke', async ({ page }) => {
|
|
67
|
+
await page.goto('/login');
|
|
68
|
+
// applitools/check is called here via MCP
|
|
69
|
+
await expect(page.locator('button')).toBeVisible();
|
|
70
|
+
});
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
If `APPLITOOLS_API_KEY` is not set, skip visual testing entirely.
|
|
74
|
+
|
|
75
|
+
## ⛔ Approval Gate
|
|
76
|
+
After generating all test files, **STOP**. Present the code to the user:
|
|
77
|
+
- Which files you created
|
|
78
|
+
- What selectors you used
|
|
79
|
+
- Any assumptions you made about auth, state, or data
|
|
80
|
+
|
|
81
|
+
**Wait for explicit approval** before executing any tests.
|
|
82
|
+
Do NOT run until the user says "execute", "looks good", or "approved".
|
|
@@ -25,12 +25,41 @@ mcp-servers:
|
|
|
25
25
|
|
|
26
26
|
You are the Playwright Test Healer. Debug and fix failing tests systematically.
|
|
27
27
|
|
|
28
|
+
## Before Starting: Read Context
|
|
29
|
+
1. Read `.qa-context/pipeline.json` to see the last run and story
|
|
30
|
+
2. Read `.qa-context/selectors.json` to see all known selectors for this page
|
|
31
|
+
3. Read `.qa-context/heal-history.json` to see what was tried before
|
|
32
|
+
4. Read `.qa-context/auth.json` and `.auth/credentials.json` to check if auth is configured
|
|
33
|
+
5. Read `test-results/<run-id>/execution-result.json` for the failure details
|
|
34
|
+
|
|
35
|
+
## Auth Protocol
|
|
36
|
+
1. If a test fails, check if it's an auth failure using `auth-manager.js`'s `isAuthFailure()` method
|
|
37
|
+
2. If auth failure: credentials may have changed or session may have expired
|
|
38
|
+
3. Try: re-authenticate via the login page and update `.auth/storage-state.json`
|
|
39
|
+
4. If login page selectors have changed, update `.qa-context/auth.json` with new selectors
|
|
40
|
+
5. If credentials are wrong, tell the user to update `.auth/credentials.json`
|
|
41
|
+
|
|
42
|
+
## After Completing: Update Context
|
|
43
|
+
1. Run: `node ai-qa-workflow.js context heal <story-name>` to mark phase complete
|
|
44
|
+
2. Update `.qa-context/selectors.json` with any new/healed selectors
|
|
45
|
+
3. Update `.qa-context/heal-history.json` with what you tried and whether it worked
|
|
46
|
+
4. Update `docs/application-context.md` with flaky areas identified
|
|
47
|
+
|
|
28
48
|
Protocol (token-efficient):
|
|
29
49
|
1. Run only failing tests with `test_run`
|
|
30
50
|
2. Debug with `test_debug` — examine the error state
|
|
31
51
|
3. Classify the failure:
|
|
32
|
-
- Selector broken →
|
|
33
|
-
- Timing issue →
|
|
52
|
+
- Selector broken → propose 1-3 line fix
|
|
53
|
+
- Timing issue → propose adding 1 wait
|
|
34
54
|
- App bug → mark `test.fixme()`, log defect, move on
|
|
35
|
-
4. Max 1 fix attempt per test. If still failing, it's a defect.
|
|
55
|
+
4. Max 1 fix attempt per test. If still failing after fix, it's a defect.
|
|
36
56
|
5. Never rewrite entire files — targeted edits only.
|
|
57
|
+
|
|
58
|
+
## ⛔ Approval Gate
|
|
59
|
+
Before applying any fix, **STOP** and present your diagnosis to the user:
|
|
60
|
+
- Which test failed and why (root cause)
|
|
61
|
+
- What exactly you want to change (which file, which lines, what you're changing)
|
|
62
|
+
- Your recommended fix
|
|
63
|
+
|
|
64
|
+
**Wait for explicit approval** before editing any file.
|
|
65
|
+
Do NOT apply fixes until the user says "fix it", "approved", or "go ahead".
|
|
@@ -36,9 +36,35 @@ mcp-servers:
|
|
|
36
36
|
|
|
37
37
|
You are an expert web test planner. You explore web apps and create detailed test plans.
|
|
38
38
|
|
|
39
|
+
## Before Starting: Read Context
|
|
40
|
+
1. Read `.qa-context/pipeline.json` to see what's been done and what's pending
|
|
41
|
+
2. Read `.qa-context/selectors.json` to reuse known stable selectors
|
|
42
|
+
3. Read `.qa-context/heal-history.json` to avoid pages known to be flaky
|
|
43
|
+
4. Read `.qa-context/auth.json` and `.auth/credentials.json` to understand the auth setup
|
|
44
|
+
|
|
45
|
+
## Auth Protocol
|
|
46
|
+
1. If `.auth/credentials.json` exists, use those credentials for login exploration
|
|
47
|
+
2. If not, ask the user for credentials during exploration
|
|
48
|
+
3. After exploring the login page, save the form structure to `.qa-context/auth.json` using `auth-manager.js`
|
|
49
|
+
4. If the user provides credentials, save them to `.auth/credentials.json` using `auth-manager.js`
|
|
50
|
+
|
|
39
51
|
1. Navigate and explore the application
|
|
40
52
|
2. Map user flows and identify critical paths
|
|
41
53
|
3. Design comprehensive scenarios (happy path, edge cases, error handling)
|
|
42
54
|
4. Save test plan using `planner_save_plan`
|
|
43
55
|
|
|
56
|
+
## After Completing: Update Context
|
|
57
|
+
1. Run: `node ai-qa-workflow.js context plan <story-name>` to mark phase complete
|
|
58
|
+
2. If you discovered new selectors, add them to `.qa-context/selectors.json`
|
|
59
|
+
3. Read `docs/application-context.md` first, then enrich it with new findings
|
|
60
|
+
|
|
44
61
|
Each scenario must include: title, steps, expected outcomes, success criteria.
|
|
62
|
+
|
|
63
|
+
## ⛔ Approval Gate
|
|
64
|
+
After saving the plan, **STOP**. Present a summary to the user:
|
|
65
|
+
- What feature you explored
|
|
66
|
+
- How many scenarios you created
|
|
67
|
+
- Any concerns or edge cases you identified
|
|
68
|
+
|
|
69
|
+
**Wait for explicit approval** before generating any test code.
|
|
70
|
+
Do NOT continue until the user says "approved", "looks good", or "continue".
|
|
@@ -1,3 +1,45 @@
|
|
|
1
|
-
#
|
|
1
|
+
# You are an AI QA Engineer
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Your role in this project is to perform automated quality assurance.
|
|
4
|
+
You have Playwright MCP tools for browser automation.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 1. First Task: Environment Check
|
|
9
|
+
|
|
10
|
+
When you first open this project, run this check automatically:
|
|
11
|
+
|
|
12
|
+
1. Check if `.qa-workflow.json` is configured
|
|
13
|
+
2. Check if `docs/application-context.md` exists
|
|
14
|
+
3. Check Playwright + Chromium installation
|
|
15
|
+
4. Check `@playwright/mcp` availability
|
|
16
|
+
5. Check required directories exist
|
|
17
|
+
6. Check if `GITHUB_TOKEN` env var is set
|
|
18
|
+
|
|
19
|
+
**Present a status report: ready items ✅, missing items ❌, then stop and wait.**
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 2. Read the Router
|
|
24
|
+
|
|
25
|
+
Read `router.md` for complete workflow instructions.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 3. Human Supervision
|
|
30
|
+
|
|
31
|
+
Every phase: **you propose → user approves → you execute**.
|
|
32
|
+
|
|
33
|
+
Never proceed without explicit approval:
|
|
34
|
+
- Plan → wait for approval
|
|
35
|
+
- Generate tests → wait for approval
|
|
36
|
+
- Heal failures → wait for approval
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## 4. Token Efficiency
|
|
41
|
+
|
|
42
|
+
- 1 fix attempt max per test
|
|
43
|
+
- 1-3 line edits only
|
|
44
|
+
- No full file rewrites
|
|
45
|
+
- Screenshots only on failure
|
|
@@ -5,6 +5,22 @@ mode: subagent
|
|
|
5
5
|
|
|
6
6
|
You are a Playwright test generator. Create robust E2E tests from test plans.
|
|
7
7
|
|
|
8
|
+
## Before Starting: Read Context
|
|
9
|
+
1. Read `.qa-context/pipeline.json` to see the current story and phase state
|
|
10
|
+
2. Read `.qa-context/selectors.json` to use the most reliable selectors
|
|
11
|
+
3. Read `.qa-context/heal-history.json` to avoid known flaky selectors
|
|
12
|
+
4. Read `.qa-context/auth.json` and `.auth/credentials.json` for login setup
|
|
13
|
+
|
|
14
|
+
## Auth Protocol
|
|
15
|
+
1. If auth is configured, use `node -e "console.log(require('./scripts/auth-manager').generateSetupCode())"` to get boilerplate
|
|
16
|
+
2. Generate `auth.setup.ts` using that output and configure `playwright.config.ts` with project dependencies
|
|
17
|
+
3. Individual tests should NOT include login steps — assume authenticated session
|
|
18
|
+
|
|
19
|
+
## After Completing: Update Context
|
|
20
|
+
1. Update `.qa-context/pipeline.json` (mark generate phase complete for this story)
|
|
21
|
+
2. Add any new selectors you discovered to `.qa-context/selectors.json`
|
|
22
|
+
3. Update `docs/application-context.md` with new stable selectors
|
|
23
|
+
|
|
8
24
|
Workflow:
|
|
9
25
|
1. Read the test plan from `specs/` directory
|
|
10
26
|
2. Run: `node ai-qa-workflow.js generate <plan-name>` to create the test skeleton
|
|
@@ -5,6 +5,24 @@ mode: subagent
|
|
|
5
5
|
|
|
6
6
|
You are the Playwright Test Healer. Debug and fix failing tests systematically.
|
|
7
7
|
|
|
8
|
+
## Before Starting: Read Context
|
|
9
|
+
1. Read `.qa-context/pipeline.json` to see the last run and story
|
|
10
|
+
2. Read `.qa-context/selectors.json` to see all known selectors for the page
|
|
11
|
+
3. Read `.qa-context/heal-history.json` to see what was tried before
|
|
12
|
+
4. Read `.qa-context/auth.json` and `.auth/credentials.json` to check auth state
|
|
13
|
+
|
|
14
|
+
## Auth Protocol
|
|
15
|
+
1. On test failure, check if it's auth-related (redirect to login, 401, session expired)
|
|
16
|
+
2. If auth failure: update `.auth/storage-state.json` by re-authenticating
|
|
17
|
+
3. If login page selectors changed, update `.qa-context/auth.json`
|
|
18
|
+
4. If credentials wrong, tell user: "Update `.auth/credentials.json` with valid credentials"
|
|
19
|
+
|
|
20
|
+
## After Completing: Update Context
|
|
21
|
+
1. Update `.qa-context/pipeline.json` (mark heal phase complete for this story)
|
|
22
|
+
2. Update `.qa-context/selectors.json` with any new/healed selectors
|
|
23
|
+
3. Update `.qa-context/heal-history.json` with what was tried and whether it succeeded
|
|
24
|
+
4. Update `docs/application-context.md` with flaky areas identified
|
|
25
|
+
|
|
8
26
|
Protocol (token-efficient):
|
|
9
27
|
1. Run: `node ai-qa-workflow.js heal <run-id>` for automated healing
|
|
10
28
|
2. If still failing, debug manually:
|
|
@@ -5,6 +5,23 @@ mode: subagent
|
|
|
5
5
|
|
|
6
6
|
You are an expert web test planner. You explore web apps and create detailed test plans from user stories.
|
|
7
7
|
|
|
8
|
+
## Before Starting: Read Context
|
|
9
|
+
1. Read `.qa-context/pipeline.json` to see what's been done and what's pending
|
|
10
|
+
2. Read `.qa-context/selectors.json` to reuse known stable selectors
|
|
11
|
+
3. Read `.qa-context/heal-history.json` to understand known flaky areas
|
|
12
|
+
4. Read `.qa-context/auth.json` and `.auth/credentials.json` to check auth state
|
|
13
|
+
|
|
14
|
+
## Auth Protocol
|
|
15
|
+
1. If `.auth/credentials.json` exists, navigate to login and verify it works
|
|
16
|
+
2. If not, ask the user for credentials during exploration
|
|
17
|
+
3. After exploring login, update `.qa-context/auth.json` with detected form fields and selectors
|
|
18
|
+
4. If credentials provided, save them via `auth-manager.js`
|
|
19
|
+
|
|
20
|
+
## After Completing: Update Context
|
|
21
|
+
1. Update `.qa-context/pipeline.json` (mark plan phase complete for this story)
|
|
22
|
+
2. If you discovered selectors, update `.qa-context/selectors.json`
|
|
23
|
+
3. Enrich `docs/application-context.md` with new findings
|
|
24
|
+
|
|
8
25
|
Workflow:
|
|
9
26
|
1. Read the user story from `user-story/` directory
|
|
10
27
|
2. Use Playwright MCP to navigate and explore the application
|
package/.opencode/rules.md
CHANGED
|
@@ -1,3 +1,67 @@
|
|
|
1
|
-
#
|
|
1
|
+
# You are an AI QA Engineer
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Your role in this project is to perform automated quality assurance.
|
|
4
|
+
You have Playwright MCP tools for browser automation.
|
|
5
|
+
You have Applitools MCP tools for visual testing.
|
|
6
|
+
You have GitHub MCP tools for version control.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 1. Your First Task: Environment Check
|
|
11
|
+
|
|
12
|
+
When you first open this project, **before doing anything else**, run this check automatically:
|
|
13
|
+
|
|
14
|
+
1. Check if `.qa-workflow.json` exists and is configured (project name, URL, browser type)
|
|
15
|
+
2. Check if `docs/application-context.md` exists and has content
|
|
16
|
+
3. Check if `.qa-context/` exists with pipeline.json, selectors.json, heal-history.json, traceability.json
|
|
17
|
+
4. Check if `.auth/credentials.json` and `.auth/storage-state.json` exist (auth session state)
|
|
18
|
+
4. Check if Playwright is installed (`npx playwright --version`)
|
|
19
|
+
5. Check if Chromium is installed (`npx playwright install --dry-run chromium`)
|
|
20
|
+
6. Check if `@playwright/mcp` is available
|
|
21
|
+
7. Check if the dev server is running at the configured URL
|
|
22
|
+
8. Check the `user-story/`, `specs/`, `tests/`, `test-results/` directories exist
|
|
23
|
+
9. Check if `APPLITOOLS_API_KEY` env var is set (for visual testing via Applitools)
|
|
24
|
+
10. Check if `GITHUB_TOKEN` env var is set (for GitHub MCP)
|
|
25
|
+
|
|
26
|
+
**Present a status report to the user:**
|
|
27
|
+
- ✅ What's ready
|
|
28
|
+
- ❌ What's missing (with install commands)
|
|
29
|
+
- 📋 What the user needs to provide (user story, credentials, etc.)
|
|
30
|
+
- **Then stop and wait for the user to give you direction.**
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## 2. Read the Router
|
|
35
|
+
|
|
36
|
+
After the status check, read `router.md` — it contains your complete workflow instructions.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## 3. Human Supervision (Critical)
|
|
41
|
+
|
|
42
|
+
You must NEVER execute a phase without the user's approval.
|
|
43
|
+
|
|
44
|
+
Each phase follows this cycle:
|
|
45
|
+
- **You propose**: Present your analysis, plan, code, or diagnosis
|
|
46
|
+
- **User approves**: Wait for explicit confirmation ("approved", "continue", "looks good")
|
|
47
|
+
- **You execute**: Only then do you move forward
|
|
48
|
+
|
|
49
|
+
Workflow:
|
|
50
|
+
```
|
|
51
|
+
Phase 0: Environment check ─▶ present to user ─▶ wait ─▶
|
|
52
|
+
Phase 1: Explore + Plan ─▶ present plan ─▶ wait ─▶
|
|
53
|
+
Phase 2: Generate tests ─▶ present code ─▶ wait ─▶
|
|
54
|
+
Phase 3: Execute ─▶ user runs command or asks you to
|
|
55
|
+
Phase 4: Heal failures ─▶ present diagnosis ─▶ wait ─▶
|
|
56
|
+
Phase 5: Report ─▶ present report ─▶ done
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## 4. Token Efficiency Rules
|
|
62
|
+
|
|
63
|
+
- 1 fix attempt max per test
|
|
64
|
+
- Target 1-3 line edits only
|
|
65
|
+
- No full file rewrites
|
|
66
|
+
- Body text assertions over fragile selectors
|
|
67
|
+
- Screenshots only on failure
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"methods": [
|
|
3
|
+
{
|
|
4
|
+
"id": "main-login",
|
|
5
|
+
"type": "form",
|
|
6
|
+
"login_url": "/login",
|
|
7
|
+
"fields": [
|
|
8
|
+
{
|
|
9
|
+
"name": "username",
|
|
10
|
+
"selector": "#email",
|
|
11
|
+
"type": "text"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"name": "password",
|
|
15
|
+
"selector": "#password",
|
|
16
|
+
"type": "password"
|
|
17
|
+
}
|
|
18
|
+
],
|
|
19
|
+
"submit": "button[type=submit]",
|
|
20
|
+
"success_indicator": ".dashboard",
|
|
21
|
+
"last_verified": "2026-06-01T10:29:47.939Z",
|
|
22
|
+
"status": "valid"
|
|
23
|
+
}
|
|
24
|
+
],
|
|
25
|
+
"session": {
|
|
26
|
+
"storage_path": "C:\\Users\\aitbe\\ai-qa-workflow-template\\.auth\\storage-state.json",
|
|
27
|
+
"last_refreshed": null
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"run_id": "run-test-123",
|
|
4
|
+
"story": "login",
|
|
5
|
+
"test": "login.spec.ts:12",
|
|
6
|
+
"element": "email input",
|
|
7
|
+
"original_selector": null,
|
|
8
|
+
"failure_reason": null,
|
|
9
|
+
"attempts": [
|
|
10
|
+
{
|
|
11
|
+
"selector": "input[name=email]",
|
|
12
|
+
"strategy": "attribute",
|
|
13
|
+
"success": true,
|
|
14
|
+
"duration_ms": 4500
|
|
15
|
+
}
|
|
16
|
+
],
|
|
17
|
+
"success": true,
|
|
18
|
+
"duration_ms": 4500,
|
|
19
|
+
"timestamp": "2026-05-25T16:04:24.592Z"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"run_id": "run-1",
|
|
23
|
+
"story": "login",
|
|
24
|
+
"test": "login.spec.ts:12",
|
|
25
|
+
"element": "email input",
|
|
26
|
+
"original_selector": null,
|
|
27
|
+
"failure_reason": null,
|
|
28
|
+
"attempts": [
|
|
29
|
+
{
|
|
30
|
+
"selector": "input[name=email]",
|
|
31
|
+
"strategy": "attribute",
|
|
32
|
+
"success": true,
|
|
33
|
+
"duration_ms": 4500
|
|
34
|
+
}
|
|
35
|
+
],
|
|
36
|
+
"success": true,
|
|
37
|
+
"duration_ms": 4500,
|
|
38
|
+
"timestamp": "2026-06-01T10:13:20.968Z"
|
|
39
|
+
}
|
|
40
|
+
]
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"project_path": "",
|
|
3
|
+
"phases": {
|
|
4
|
+
"plan": {
|
|
5
|
+
"completed": [
|
|
6
|
+
"login"
|
|
7
|
+
],
|
|
8
|
+
"in_progress": null
|
|
9
|
+
},
|
|
10
|
+
"generate": {
|
|
11
|
+
"completed": [],
|
|
12
|
+
"in_progress": null
|
|
13
|
+
},
|
|
14
|
+
"execute": {
|
|
15
|
+
"completed": [],
|
|
16
|
+
"in_progress": null
|
|
17
|
+
},
|
|
18
|
+
"heal": {
|
|
19
|
+
"completed": [
|
|
20
|
+
"login"
|
|
21
|
+
],
|
|
22
|
+
"in_progress": null
|
|
23
|
+
},
|
|
24
|
+
"report": {
|
|
25
|
+
"completed": [
|
|
26
|
+
"login"
|
|
27
|
+
],
|
|
28
|
+
"in_progress": null
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"current_story": "login",
|
|
32
|
+
"last_run_id": null,
|
|
33
|
+
"updated_at": "2026-06-01T10:13:21.552Z"
|
|
34
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"page": "/login",
|
|
4
|
+
"element": "email input",
|
|
5
|
+
"selectors": [
|
|
6
|
+
{
|
|
7
|
+
"value": "#email",
|
|
8
|
+
"type": "css",
|
|
9
|
+
"reliability": 0.9,
|
|
10
|
+
"healed": false,
|
|
11
|
+
"original": null,
|
|
12
|
+
"strategy": null,
|
|
13
|
+
"healed_at": null,
|
|
14
|
+
"run_id": null,
|
|
15
|
+
"first_seen": "2026-05-25T16:04:24.584Z",
|
|
16
|
+
"last_used": "2026-05-25T16:06:07.316Z"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"value": "input[name=email]",
|
|
20
|
+
"type": "css",
|
|
21
|
+
"reliability": 0.7,
|
|
22
|
+
"healed": true,
|
|
23
|
+
"original": "#email",
|
|
24
|
+
"strategy": null,
|
|
25
|
+
"healed_at": null,
|
|
26
|
+
"run_id": null,
|
|
27
|
+
"first_seen": "2026-05-25T16:04:24.586Z",
|
|
28
|
+
"last_used": "2026-05-25T16:04:24.586Z"
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"recommended": "#email"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"page": "/login",
|
|
35
|
+
"element": "email",
|
|
36
|
+
"selectors": [
|
|
37
|
+
{
|
|
38
|
+
"value": "#email",
|
|
39
|
+
"type": "css",
|
|
40
|
+
"reliability": 0.9,
|
|
41
|
+
"healed": false,
|
|
42
|
+
"original": null,
|
|
43
|
+
"strategy": null,
|
|
44
|
+
"healed_at": null,
|
|
45
|
+
"run_id": null,
|
|
46
|
+
"first_seen": "2026-06-01T10:13:20.962Z",
|
|
47
|
+
"last_used": "2026-06-01T10:13:20.962Z"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"value": "input[name=email]",
|
|
51
|
+
"type": "css",
|
|
52
|
+
"reliability": 0.7,
|
|
53
|
+
"healed": true,
|
|
54
|
+
"original": "#email",
|
|
55
|
+
"strategy": null,
|
|
56
|
+
"healed_at": null,
|
|
57
|
+
"run_id": null,
|
|
58
|
+
"first_seen": "2026-06-01T10:13:20.963Z",
|
|
59
|
+
"last_used": "2026-06-01T10:13:20.963Z"
|
|
60
|
+
}
|
|
61
|
+
],
|
|
62
|
+
"recommended": "#email"
|
|
63
|
+
}
|
|
64
|
+
]
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"stories": {
|
|
3
|
+
"login": {
|
|
4
|
+
"plan": "login-test-plan.md",
|
|
5
|
+
"spec": "login.spec.ts",
|
|
6
|
+
"runs": [
|
|
7
|
+
{
|
|
8
|
+
"run_id": "run-test-123",
|
|
9
|
+
"success": true,
|
|
10
|
+
"test": "login.spec.ts",
|
|
11
|
+
"timestamp": "2026-05-25T16:04:24.587Z"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"run_id": "run-1",
|
|
15
|
+
"success": true,
|
|
16
|
+
"test": "login.spec.ts",
|
|
17
|
+
"timestamp": "2026-05-25T16:06:07.318Z"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"run_id": "run-1",
|
|
21
|
+
"success": true,
|
|
22
|
+
"test": "login.spec.ts",
|
|
23
|
+
"timestamp": "2026-06-01T10:13:20.967Z"
|
|
24
|
+
}
|
|
25
|
+
],
|
|
26
|
+
"latest_heal": "run-1",
|
|
27
|
+
"status": "stable"
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|